From 6dc250f456e078b213cee0f1099e915aa0d4d4d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Chigot?= Date: Tue, 5 Nov 2019 16:31:05 +0100 Subject: [PATCH] cmd/link: fix the size of typerel.* with c-archive buildmode With buildmode=c-archive, "runtime.types" type isn't STYPE but STYPERELRO. On AIX, this symbol is present in the symbol table and not under typerel.* outersymbol. Therefore, the size of typerel.* must be adapted. Fixes #35342 Change-Id: Ib982c6557d9b41bc3d8775e4825650897f9e0ee6 Reviewed-on: https://go-review.googlesource.com/c/go/+/205338 Run-TryBot: Ian Lance Taylor Reviewed-by: Ian Lance Taylor --- src/cmd/link/internal/ld/xcoff.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/xcoff.go b/src/cmd/link/internal/ld/xcoff.go index fe35578225a..8814bad4ae8 100644 --- a/src/cmd/link/internal/ld/xcoff.go +++ b/src/cmd/link/internal/ld/xcoff.go @@ -578,13 +578,14 @@ func xcoffUpdateOuterSize(ctxt *Link, size int64, stype sym.SymKind) { // Nothing to do case sym.STYPERELRO: if ctxt.UseRelro() && (ctxt.BuildMode == BuildModeCArchive || ctxt.BuildMode == BuildModeCShared || ctxt.BuildMode == BuildModePIE) { - outerSymSize["typerel.*"] = size + // runtime.types size must be removed, as it's a real symbol. + outerSymSize["typerel.*"] = size - ctxt.Syms.ROLookup("runtime.types", 0).Size return } fallthrough case sym.STYPE: if !ctxt.DynlinkingGo() { - // runtime.types size must be removed. + // runtime.types size must be removed, as it's a real symbol. outerSymSize["type.*"] = size - ctxt.Syms.ROLookup("runtime.types", 0).Size } case sym.SGOSTRING: