From: Clément Chigot Date: Mon, 29 Apr 2019 14:34:34 +0000 (+0200) Subject: cmd/link: add .go.buildinfo in XCOFF symbol table X-Git-Tag: go1.13beta1~485 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=0c9e0c257b121acae72b9419be64ce45196ef825;p=gostls13.git cmd/link: add .go.buildinfo in XCOFF symbol table .go.buildinfo must be added to the symbol table on AIX. Otherwise, ld won't be able to handle its relocations. This patch also make ".data" the default section for all symbols inside the data segment. Change-Id: I83ac2bf1050e0ef6ef9c96ff793efd4ddc8e98d7 Reviewed-on: https://go-review.googlesource.com/c/go/+/174298 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go index d6555a5633..a3f84dd008 100644 --- a/src/cmd/link/internal/ld/lib.go +++ b/src/cmd/link/internal/ld/lib.go @@ -2265,11 +2265,23 @@ func genasmsym(ctxt *Link, put func(*Link, *sym.Symbol, string, SymbolType, int6 } } - for _, s := range ctxt.Syms.Allsym { + shouldBeInSymbolTable := func(s *sym.Symbol) bool { if s.Attr.NotInSymbolTable() { - continue + return false + } + if ctxt.HeadType == objabi.Haix && s.Name == ".go.buildinfo" { + // On AIX, .go.buildinfo must be in the symbol table as + // it has relocations. + return true } if (s.Name == "" || s.Name[0] == '.') && !s.IsFileLocal() && s.Name != ".rathole" && s.Name != ".TOC." { + return false + } + return true + } + + for _, s := range ctxt.Syms.Allsym { + if !shouldBeInSymbolTable(s) { continue } switch s.Type { diff --git a/src/cmd/link/internal/ld/xcoff.go b/src/cmd/link/internal/ld/xcoff.go index 7fcd8a3c97..67e558a475 100644 --- a/src/cmd/link/internal/ld/xcoff.go +++ b/src/cmd/link/internal/ld/xcoff.go @@ -513,16 +513,13 @@ func (f *xcoffFile) getXCOFFscnum(sect *sym.Section) int16 { case &Segtext: return f.sectNameToScnum[".text"] case &Segdata: - if sect.Name == ".noptrdata" || sect.Name == ".data" { - return f.sectNameToScnum[".data"] - } if sect.Name == ".noptrbss" || sect.Name == ".bss" { return f.sectNameToScnum[".bss"] } if sect.Name == ".tbss" { return f.sectNameToScnum[".tbss"] } - Errorf(nil, "unknown XCOFF segment data section: %s", sect.Name) + return f.sectNameToScnum[".data"] case &Segdwarf: name, _ := xcoffGetDwarfSubtype(sect.Name) return f.sectNameToScnum[name]