Skip to content

Commit

Permalink
cmd/link: add .go.buildinfo in XCOFF symbol table
Browse files Browse the repository at this point in the history
.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>
  • Loading branch information
Clément Chigot authored and bradfitz committed Apr 30, 2019
1 parent 9f12e2e commit 0c9e0c2
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
16 changes: 14 additions & 2 deletions src/cmd/link/internal/ld/lib.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
5 changes: 1 addition & 4 deletions src/cmd/link/internal/ld/xcoff.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand Down

0 comments on commit 0c9e0c2

Please sign in to comment.