]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: add .go.buildinfo in XCOFF symbol table
authorClément Chigot <clement.chigot@atos.net>
Mon, 29 Apr 2019 14:34:34 +0000 (16:34 +0200)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 30 Apr 2019 16:54:38 +0000 (16:54 +0000)
.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 <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/link/internal/ld/lib.go
src/cmd/link/internal/ld/xcoff.go

index d6555a56338327a69d16965929aac0d3a9ea1322..a3f84dd008ec3054fd5b45627419408ef59a352a 100644 (file)
@@ -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 {
index 7fcd8a3c97d8b688d8006027db824d9c2405612c..67e558a475cdeff1d7804e5c8de14aae22bc845d 100644 (file)
@@ -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]