From 12420f9c01d6966c2994dbcc506a9d783a30ebdb Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Fri, 6 May 2022 15:57:21 -0400 Subject: [PATCH] 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 Reviewed-by: David Chase TryBot-Result: Gopher Robot --- src/cmd/link/internal/ld/data.go | 6 ++++-- 1 file 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 -- 2.50.0