Skip to content

Commit 7347b54

Browse files
ianlancetaylorgopherbot
authored andcommitted
cmd/link: don't generate .gosymtab section
Since Go 1.2 the section is always empty. Also remove the code looking for .gosymtab in cmd/internal/objfile. For #76038 Change-Id: Icd34c870ed0c6da8001e8d32305f79905ee2b066 Reviewed-on: https://go-review.googlesource.com/c/go/+/717200 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Auto-Submit: Ian Lance Taylor <iant@golang.org> Commit-Queue: Ian Lance Taylor <iant@golang.org> Reviewed-by: Michael Pratt <mpratt@google.com>
1 parent 6914dd1 commit 7347b54

File tree

15 files changed

+76
-128
lines changed

15 files changed

+76
-128
lines changed

src/cmd/internal/objfile/elf.go

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -64,40 +64,26 @@ func (f *elfFile) symbols() ([]Sym, error) {
6464
return syms, nil
6565
}
6666

67-
func (f *elfFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
67+
func (f *elfFile) pcln() (textStart uint64, pclntab []byte, err error) {
6868
if sect := f.elf.Section(".text"); sect != nil {
6969
textStart = sect.Addr
7070
}
7171

72-
sect := f.elf.Section(".gosymtab")
73-
if sect == nil {
74-
// try .data.rel.ro.gosymtab, for PIE binaries
75-
sect = f.elf.Section(".data.rel.ro.gosymtab")
76-
}
77-
if sect != nil {
78-
if symtab, err = sect.Data(); err != nil {
79-
return 0, nil, nil, err
80-
}
81-
} else {
82-
// if both sections failed, try the symbol
83-
symtab = f.symbolData("runtime.symtab", "runtime.esymtab")
84-
}
85-
86-
sect = f.elf.Section(".gopclntab")
72+
sect := f.elf.Section(".gopclntab")
8773
if sect == nil {
8874
// try .data.rel.ro.gopclntab, for PIE binaries
8975
sect = f.elf.Section(".data.rel.ro.gopclntab")
9076
}
9177
if sect != nil {
9278
if pclntab, err = sect.Data(); err != nil {
93-
return 0, nil, nil, err
79+
return 0, nil, err
9480
}
9581
} else {
9682
// if both sections failed, try the symbol
9783
pclntab = f.symbolData("runtime.pclntab", "runtime.epclntab")
9884
}
9985

100-
return textStart, symtab, pclntab, nil
86+
return textStart, pclntab, nil
10187
}
10288

10389
func (f *elfFile) text() (textStart uint64, text []byte, err error) {

src/cmd/internal/objfile/goobj.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,10 @@ func (f *goobjFile) symbols() ([]Sym, error) {
221221
return syms, nil
222222
}
223223

224-
func (f *goobjFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
224+
func (f *goobjFile) pcln() (textStart uint64, pclntab []byte, err error) {
225225
// Should never be called. We implement Liner below, callers
226226
// should use that instead.
227-
return 0, nil, nil, fmt.Errorf("pcln not available in go object file")
227+
return 0, nil, fmt.Errorf("pcln not available in go object file")
228228
}
229229

230230
// PCToLine returns the file name, line, and function data for the given pc.

src/cmd/internal/objfile/macho.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,21 +79,16 @@ func (f *machoFile) symbols() ([]Sym, error) {
7979
return syms, nil
8080
}
8181

82-
func (f *machoFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
82+
func (f *machoFile) pcln() (textStart uint64, pclntab []byte, err error) {
8383
if sect := f.macho.Section("__text"); sect != nil {
8484
textStart = sect.Addr
8585
}
86-
if sect := f.macho.Section("__gosymtab"); sect != nil {
87-
if symtab, err = sect.Data(); err != nil {
88-
return 0, nil, nil, err
89-
}
90-
}
9186
if sect := f.macho.Section("__gopclntab"); sect != nil {
9287
if pclntab, err = sect.Data(); err != nil {
93-
return 0, nil, nil, err
88+
return 0, nil, err
9489
}
9590
}
96-
return textStart, symtab, pclntab, nil
91+
return textStart, pclntab, nil
9792
}
9893

9994
func (f *machoFile) text() (textStart uint64, text []byte, err error) {

src/cmd/internal/objfile/objfile.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import (
1818

1919
type rawFile interface {
2020
symbols() (syms []Sym, err error)
21-
pcln() (textStart uint64, symtab, pclntab []byte, err error)
21+
pcln() (textStart uint64, pclntab []byte, err error)
2222
text() (textStart uint64, text []byte, err error)
2323
goarch() string
2424
loadAddress() (uint64, error)
@@ -141,7 +141,7 @@ func (e *Entry) PCLineTable() (Liner, error) {
141141
return pcln, nil
142142
}
143143
// Otherwise, read the pcln tables and build a Liner out of that.
144-
textStart, symtab, pclntab, err := e.raw.pcln()
144+
textStart, pclntab, err := e.raw.pcln()
145145
if err != nil {
146146
return nil, err
147147
}
@@ -154,7 +154,7 @@ func (e *Entry) PCLineTable() (Liner, error) {
154154
}
155155
}
156156
}
157-
return gosym.NewTable(symtab, gosym.NewLineTable(pclntab, textStart))
157+
return gosym.NewTable(nil, gosym.NewLineTable(pclntab, textStart))
158158
}
159159

160160
func (e *Entry) Text() (uint64, []byte, error) {

src/cmd/internal/objfile/pe.go

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,10 @@ func (f *peFile) symbols() ([]Sym, error) {
9090
return syms, nil
9191
}
9292

93-
func (f *peFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
93+
func (f *peFile) pcln() (textStart uint64, pclntab []byte, err error) {
9494
imageBase, err := f.imageBase()
9595
if err != nil {
96-
return 0, nil, nil, err
96+
return 0, nil, err
9797
}
9898

9999
if sect := f.pe.Section(".text"); sect != nil {
@@ -104,17 +104,10 @@ func (f *peFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
104104
// TODO: Remove code looking for the old symbols when we no longer care about 1.3.
105105
var err2 error
106106
if pclntab, err2 = loadPETable(f.pe, "pclntab", "epclntab"); err2 != nil {
107-
return 0, nil, nil, err
108-
}
109-
}
110-
if symtab, err = loadPETable(f.pe, "runtime.symtab", "runtime.esymtab"); err != nil {
111-
// Same as above.
112-
var err2 error
113-
if symtab, err2 = loadPETable(f.pe, "symtab", "esymtab"); err2 != nil {
114-
return 0, nil, nil, err
107+
return 0, nil, err
115108
}
116109
}
117-
return textStart, symtab, pclntab, nil
110+
return textStart, pclntab, nil
118111
}
119112

120113
func (f *peFile) text() (textStart uint64, text []byte, err error) {

src/cmd/internal/objfile/plan9obj.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,24 +71,17 @@ func (f *plan9File) symbols() ([]Sym, error) {
7171
return syms, nil
7272
}
7373

74-
func (f *plan9File) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
74+
func (f *plan9File) pcln() (textStart uint64, pclntab []byte, err error) {
7575
textStart = f.plan9.LoadAddress + f.plan9.HdrSize
7676
if pclntab, err = loadPlan9Table(f.plan9, "runtime.pclntab", "runtime.epclntab"); err != nil {
7777
// We didn't find the symbols, so look for the names used in 1.3 and earlier.
7878
// TODO: Remove code looking for the old symbols when we no longer care about 1.3.
7979
var err2 error
8080
if pclntab, err2 = loadPlan9Table(f.plan9, "pclntab", "epclntab"); err2 != nil {
81-
return 0, nil, nil, err
81+
return 0, nil, err
8282
}
8383
}
84-
if symtab, err = loadPlan9Table(f.plan9, "runtime.symtab", "runtime.esymtab"); err != nil {
85-
// Same as above.
86-
var err2 error
87-
if symtab, err2 = loadPlan9Table(f.plan9, "symtab", "esymtab"); err2 != nil {
88-
return 0, nil, nil, err
89-
}
90-
}
91-
return textStart, symtab, pclntab, nil
84+
return textStart, pclntab, nil
9285
}
9386

9487
func (f *plan9File) text() (textStart uint64, text []byte, err error) {

src/cmd/internal/objfile/xcoff.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,14 @@ func (f *xcoffFile) symbols() ([]Sym, error) {
8787
return syms, nil
8888
}
8989

90-
func (f *xcoffFile) pcln() (textStart uint64, symtab, pclntab []byte, err error) {
90+
func (f *xcoffFile) pcln() (textStart uint64, pclntab []byte, err error) {
9191
if sect := f.xcoff.Section(".text"); sect != nil {
9292
textStart = sect.VirtualAddress
9393
}
9494
if pclntab, err = loadXCOFFTable(f.xcoff, "runtime.pclntab", "runtime.epclntab"); err != nil {
95-
return 0, nil, nil, err
95+
return 0, nil, err
9696
}
97-
symtab, _ = loadXCOFFTable(f.xcoff, "runtime.symtab", "runtime.esymtab") // ignore error, this symbol is not useful anyway
98-
return textStart, symtab, pclntab, nil
97+
return textStart, pclntab, nil
9998
}
10099

101100
func (f *xcoffFile) text() (textStart uint64, text []byte, err error) {

src/cmd/link/internal/ld/data.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2238,11 +2238,6 @@ func (state *dodataState) allocateDataSections(ctxt *Link) {
22382238
state.checkdatsize(sym.SITABLINK)
22392239
sect.Length = uint64(state.datsize) - sect.Vaddr
22402240

2241-
/* gosymtab */
2242-
sect = state.allocateNamedSectionAndAssignSyms(seg, genrelrosecname(".gosymtab"), sym.SSYMTAB, sym.SRODATA, relroSecPerm)
2243-
ldr.SetSymSect(ldr.LookupOrCreateSym("runtime.symtab", 0), sect)
2244-
ldr.SetSymSect(ldr.LookupOrCreateSym("runtime.esymtab", 0), sect)
2245-
22462241
/* gopclntab */
22472242
sect = state.allocateNamedSectionAndAssignSyms(seg, genrelrosecname(".gopclntab"), sym.SPCLNTAB, sym.SRODATA, relroSecPerm)
22482243
ldr.SetSymSect(ldr.LookupOrCreateSym("runtime.pclntab", 0), sect)
@@ -2985,7 +2980,6 @@ func (ctxt *Link) address() []*sym.Segment {
29852980
ldr := ctxt.loader
29862981
var (
29872982
rodata = ldr.SymSect(ldr.LookupOrCreateSym("runtime.rodata", 0))
2988-
symtab = ldr.SymSect(ldr.LookupOrCreateSym("runtime.symtab", 0))
29892983
pclntab = ldr.SymSect(ldr.LookupOrCreateSym("runtime.pclntab", 0))
29902984
types = ldr.SymSect(ldr.LookupOrCreateSym("runtime.types", 0))
29912985
)
@@ -3065,8 +3059,6 @@ func (ctxt *Link) address() []*sym.Segment {
30653059
ctxt.xdefine("runtime.egcbss", sym.SRODATA, ldr.SymAddr(s)+ldr.SymSize(s))
30663060
ldr.SetSymSect(ldr.LookupOrCreateSym("runtime.egcbss", 0), ldr.SymSect(s))
30673061

3068-
ctxt.xdefine("runtime.symtab", sym.SRODATA, int64(symtab.Vaddr))
3069-
ctxt.xdefine("runtime.esymtab", sym.SRODATA, int64(symtab.Vaddr+symtab.Length))
30703062
ctxt.xdefine("runtime.pclntab", sym.SRODATA, int64(pclntab.Vaddr))
30713063
ctxt.defineInternal("runtime.pcheader", sym.SRODATA)
30723064
ctxt.defineInternal("runtime.funcnametab", sym.SRODATA)

src/cmd/link/internal/ld/elf.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1477,7 +1477,6 @@ func (ctxt *Link) doelf() {
14771477
}
14781478
shstrtabAddstring(relro_prefix + ".typelink")
14791479
shstrtabAddstring(relro_prefix + ".itablink")
1480-
shstrtabAddstring(relro_prefix + ".gosymtab")
14811480
shstrtabAddstring(relro_prefix + ".gopclntab")
14821481

14831482
if ctxt.IsExternal() {
@@ -1487,7 +1486,6 @@ func (ctxt *Link) doelf() {
14871486
shstrtabAddstring(elfRelType + ".rodata")
14881487
shstrtabAddstring(elfRelType + relro_prefix + ".typelink")
14891488
shstrtabAddstring(elfRelType + relro_prefix + ".itablink")
1490-
shstrtabAddstring(elfRelType + relro_prefix + ".gosymtab")
14911489
shstrtabAddstring(elfRelType + relro_prefix + ".gopclntab")
14921490
shstrtabAddstring(elfRelType + ".noptrdata")
14931491
shstrtabAddstring(elfRelType + ".data")

src/cmd/link/internal/ld/macho_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestMachoSectionsReadOnly(t *testing.T) {
3737
args: []string{"-ldflags", "-linkmode=internal"},
3838
prog: prog,
3939
mustInternalLink: true,
40-
wantSecsRO: []string{"__got", "__rodata", "__itablink", "__typelink", "__gosymtab", "__gopclntab"},
40+
wantSecsRO: []string{"__got", "__rodata", "__itablink", "__typelink", "__gopclntab"},
4141
},
4242
{
4343
name: "linkmode-external",

0 commit comments

Comments
 (0)