aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCherry Mui <cherryyz@google.com>2022-05-06 15:57:21 -0400
committerDavid Chase <drchase@google.com>2022-05-06 20:41:13 +0000
commit12420f9c01d6966c2994dbcc506a9d783a30ebdb (patch)
tree4c0dce6bef38b9be07a15c799505c45be6ec1c72 /src
parenta4af35607536b2b0d73be94df188b9f5a157480c (diff)
downloadgo-12420f9c01d6966c2994dbcc506a9d783a30ebdb.tar.xz
cmd/link: resolve relocations to .TOC. symbol
CL 404296 breaks the PPC64LE build because the .TOC. symbol is visibility hidden and was skipped from the "unresolved symbol" check (the check needs to be fix). In face, the .TOC. symbol is special in that it doesn't have a type but we have special logic to assign a value to it in the address pass. So we can actually resolve a relocation to .TOC.. We already have a special case for PIE. It also applies to non-PIE as well. Fix PPC64LE builds. Change-Id: Iaf7e36f10c4d0a40fc56b2135e5ff38815e203b1 Reviewed-on: https://go-review.googlesource.com/c/go/+/404302 Run-TryBot: Cherry Mui <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com> TryBot-Result: Gopher Robot <gobot@golang.org>
Diffstat (limited to 'src')
-rw-r--r--src/cmd/link/internal/ld/data.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go
index ce86f73cda..8d1a81ed1d 100644
--- a/src/cmd/link/internal/ld/data.go
+++ b/src/cmd/link/internal/ld/data.go
@@ -227,8 +227,10 @@ func (st *relocSymState) relocsym(s loader.Sym, P []byte) {
// DWARF info between the compiler and linker.
continue
}
- } else if target.IsPPC64() && target.IsPIE() && ldr.SymName(rs) == ".TOC." {
- // This is a TOC relative relocation generated from a go object. It is safe to resolve.
+ } else if target.IsPPC64() && ldr.SymName(rs) == ".TOC." {
+ // TOC symbol doesn't have a type but we do assign a value
+ // (see the address pass) and we can resolve it.
+ // TODO: give it a type.
} else {
st.err.errorUnresolved(ldr, s, rs)
continue