mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/link: add and use new SymKind SFirstUnallocated
The linker sources in several places used SXREF to mark the first SymKind which is not allocated in memory. This is cryptic. Instead use SFirstUnallocated, following the example of the existing SFirstWritable. Change-Id: If326ad63027402699094bcc49ef860db3772f82a Reviewed-on: https://go-review.googlesource.com/c/go/+/715623 Reviewed-by: Than McIntosh <thanm@golang.org> Auto-Submit: Ian Lance Taylor <iant@golang.org> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
parent
f5f14262d0
commit
6914dd11c0
7 changed files with 36 additions and 34 deletions
|
|
@ -1628,9 +1628,9 @@ type dodataState struct {
|
||||||
// Link context
|
// Link context
|
||||||
ctxt *Link
|
ctxt *Link
|
||||||
// Data symbols bucketed by type.
|
// Data symbols bucketed by type.
|
||||||
data [sym.SXREF][]loader.Sym
|
data [sym.SFirstUnallocated][]loader.Sym
|
||||||
// Max alignment for each flavor of data symbol.
|
// Max alignment for each flavor of data symbol.
|
||||||
dataMaxAlign [sym.SXREF]int32
|
dataMaxAlign [sym.SFirstUnallocated]int32
|
||||||
// Overridden sym type
|
// Overridden sym type
|
||||||
symGroupType []sym.SymKind
|
symGroupType []sym.SymKind
|
||||||
// Current data size so far.
|
// Current data size so far.
|
||||||
|
|
@ -1687,7 +1687,7 @@ func (ctxt *Link) dodata(symGroupType []sym.SymKind) {
|
||||||
|
|
||||||
st := state.symType(s)
|
st := state.symType(s)
|
||||||
|
|
||||||
if st <= sym.STEXTFIPSEND || st >= sym.SXREF {
|
if st <= sym.STEXTEND || st >= sym.SFirstUnallocated {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
state.data[st] = append(state.data[st], s)
|
state.data[st] = append(state.data[st], s)
|
||||||
|
|
@ -2264,11 +2264,11 @@ func (state *dodataState) allocateDataSections(ctxt *Link) {
|
||||||
}
|
}
|
||||||
|
|
||||||
siz := 0
|
siz := 0
|
||||||
for symn := sym.SELFRXSECT; symn < sym.SXREF; symn++ {
|
for symn := sym.SELFRXSECT; symn < sym.SFirstUnallocated; symn++ {
|
||||||
siz += len(state.data[symn])
|
siz += len(state.data[symn])
|
||||||
}
|
}
|
||||||
ctxt.datap = make([]loader.Sym, 0, siz)
|
ctxt.datap = make([]loader.Sym, 0, siz)
|
||||||
for symn := sym.SELFRXSECT; symn < sym.SXREF; symn++ {
|
for symn := sym.SELFRXSECT; symn < sym.SFirstUnallocated; symn++ {
|
||||||
ctxt.datap = append(ctxt.datap, state.data[symn]...)
|
ctxt.datap = append(ctxt.datap, state.data[symn]...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -919,7 +919,7 @@ func collectmachosyms(ctxt *Link) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
t := ldr.SymType(s)
|
t := ldr.SymType(s)
|
||||||
if t >= sym.SELFRXSECT && t < sym.SXREF { // data sections handled in dodata
|
if t >= sym.SELFRXSECT && t < sym.SFirstUnallocated { // data sections handled in dodata
|
||||||
if t == sym.STLSBSS {
|
if t == sym.STLSBSS {
|
||||||
// TLSBSS is not used on darwin. See data.go:allocateDataSections
|
// TLSBSS is not used on darwin. See data.go:allocateDataSections
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
|
|
@ -854,7 +854,7 @@ func (f *peFile) writeSymbols(ctxt *Link) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
t := ldr.SymType(s)
|
t := ldr.SymType(s)
|
||||||
if t >= sym.SELFRXSECT && t < sym.SXREF { // data sections handled in dodata
|
if t >= sym.SELFRXSECT && t < sym.SFirstUnallocated { // data sections handled in dodata
|
||||||
if t == sym.STLSBSS {
|
if t == sym.STLSBSS {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -244,7 +244,7 @@ func genelfsym(ctxt *Link, elfbind elf.SymBind) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
st := ldr.SymType(s)
|
st := ldr.SymType(s)
|
||||||
if st >= sym.SELFRXSECT && st < sym.SXREF {
|
if st >= sym.SELFRXSECT && st < sym.SFirstUnallocated {
|
||||||
typ := elf.STT_OBJECT
|
typ := elf.STT_OBJECT
|
||||||
if st == sym.STLSBSS {
|
if st == sym.STLSBSS {
|
||||||
if ctxt.IsInternal() {
|
if ctxt.IsInternal() {
|
||||||
|
|
@ -345,7 +345,7 @@ func asmbPlan9Sym(ctxt *Link) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
t := ldr.SymType(s)
|
t := ldr.SymType(s)
|
||||||
if t >= sym.SELFRXSECT && t < sym.SXREF { // data sections handled in dodata
|
if t >= sym.SELFRXSECT && t < sym.SFirstUnallocated { // data sections handled in dodata
|
||||||
if t == sym.STLSBSS {
|
if t == sym.STLSBSS {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
@ -843,7 +843,7 @@ func (ctxt *Link) symtab(pcln *pclntab) []sym.SymKind {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CarrierSymByType tracks carrier symbols and their sizes.
|
// CarrierSymByType tracks carrier symbols and their sizes.
|
||||||
var CarrierSymByType [sym.SXREF]struct {
|
var CarrierSymByType [sym.SFirstUnallocated]struct {
|
||||||
Sym loader.Sym
|
Sym loader.Sym
|
||||||
Size int64
|
Size int64
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1121,7 +1121,7 @@ func (f *xcoffFile) asmaixsym(ctxt *Link) {
|
||||||
putaixsym(ctxt, s, BSSSym)
|
putaixsym(ctxt, s, BSSSym)
|
||||||
}
|
}
|
||||||
|
|
||||||
case st >= sym.SELFRXSECT && st < sym.SXREF: // data sections handled in dodata
|
case st >= sym.SELFRXSECT && st < sym.SFirstUnallocated: // data sections handled in dodata
|
||||||
if ldr.AttrReachable(s) {
|
if ldr.AttrReachable(s) {
|
||||||
putaixsym(ctxt, s, DataSym)
|
putaixsym(ctxt, s, DataSym)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,7 @@ const (
|
||||||
STLSBSS // Thread-local zeroed data.
|
STLSBSS // Thread-local zeroed data.
|
||||||
|
|
||||||
// Unallocated segment.
|
// Unallocated segment.
|
||||||
|
SFirstUnallocated
|
||||||
SXREF // Reference from non-Go object file.
|
SXREF // Reference from non-Go object file.
|
||||||
SMACHOSYMSTR // Mach-O string table.
|
SMACHOSYMSTR // Mach-O string table.
|
||||||
SMACHOSYMTAB // Mach-O symbol table.
|
SMACHOSYMTAB // Mach-O symbol table.
|
||||||
|
|
|
||||||
|
|
@ -67,32 +67,33 @@ func _() {
|
||||||
_ = x[SCOVERAGE_COUNTER-56]
|
_ = x[SCOVERAGE_COUNTER-56]
|
||||||
_ = x[SCOVERAGE_AUXVAR-57]
|
_ = x[SCOVERAGE_AUXVAR-57]
|
||||||
_ = x[STLSBSS-58]
|
_ = x[STLSBSS-58]
|
||||||
_ = x[SXREF-59]
|
_ = x[SFirstUnallocated-59]
|
||||||
_ = x[SMACHOSYMSTR-60]
|
_ = x[SXREF-60]
|
||||||
_ = x[SMACHOSYMTAB-61]
|
_ = x[SMACHOSYMSTR-61]
|
||||||
_ = x[SMACHOINDIRECTPLT-62]
|
_ = x[SMACHOSYMTAB-62]
|
||||||
_ = x[SMACHOINDIRECTGOT-63]
|
_ = x[SMACHOINDIRECTPLT-63]
|
||||||
_ = x[SDYNIMPORT-64]
|
_ = x[SMACHOINDIRECTGOT-64]
|
||||||
_ = x[SHOSTOBJ-65]
|
_ = x[SDYNIMPORT-65]
|
||||||
_ = x[SUNDEFEXT-66]
|
_ = x[SHOSTOBJ-66]
|
||||||
_ = x[SDWARFSECT-67]
|
_ = x[SUNDEFEXT-67]
|
||||||
_ = x[SDWARFCUINFO-68]
|
_ = x[SDWARFSECT-68]
|
||||||
_ = x[SDWARFCONST-69]
|
_ = x[SDWARFCUINFO-69]
|
||||||
_ = x[SDWARFFCN-70]
|
_ = x[SDWARFCONST-70]
|
||||||
_ = x[SDWARFABSFCN-71]
|
_ = x[SDWARFFCN-71]
|
||||||
_ = x[SDWARFTYPE-72]
|
_ = x[SDWARFABSFCN-72]
|
||||||
_ = x[SDWARFVAR-73]
|
_ = x[SDWARFTYPE-73]
|
||||||
_ = x[SDWARFRANGE-74]
|
_ = x[SDWARFVAR-74]
|
||||||
_ = x[SDWARFLOC-75]
|
_ = x[SDWARFRANGE-75]
|
||||||
_ = x[SDWARFLINES-76]
|
_ = x[SDWARFLOC-76]
|
||||||
_ = x[SDWARFADDR-77]
|
_ = x[SDWARFLINES-77]
|
||||||
_ = x[SSEHUNWINDINFO-78]
|
_ = x[SDWARFADDR-78]
|
||||||
_ = x[SSEHSECT-79]
|
_ = x[SSEHUNWINDINFO-79]
|
||||||
|
_ = x[SSEHSECT-80]
|
||||||
}
|
}
|
||||||
|
|
||||||
const _SymKind_name = "SxxxSTEXTSTEXTFIPSSTARTSTEXTFIPSSTEXTFIPSENDSTEXTENDSELFRXSECTSMACHOPLTSTYPESSTRINGSGOSTRINGSGOFUNCSGCBITSSRODATASRODATAFIPSSTARTSRODATAFIPSSRODATAFIPSENDSRODATAENDSFUNCTABSELFROSECTSTYPERELROSSTRINGRELROSGOSTRINGRELROSGOFUNCRELROSGCBITSRELROSRODATARELROSFUNCTABRELROSELFRELROSECTSMACHORELROSECTSTYPELINKSITABLINKSSYMTABSPCLNTABSFirstWritableSBUILDINFOSFIPSINFOSELFSECTSMACHOSMACHOGOTSWINDOWSSELFGOTSNOPTRDATASNOPTRDATAFIPSSTARTSNOPTRDATAFIPSSNOPTRDATAFIPSENDSNOPTRDATAENDSINITARRSDATASDATAFIPSSTARTSDATAFIPSSDATAFIPSENDSDATAENDSXCOFFTOCSBSSSNOPTRBSSSLIBFUZZER_8BIT_COUNTERSCOVERAGE_COUNTERSCOVERAGE_AUXVARSTLSBSSSXREFSMACHOSYMSTRSMACHOSYMTABSMACHOINDIRECTPLTSMACHOINDIRECTGOTSDYNIMPORTSHOSTOBJSUNDEFEXTSDWARFSECTSDWARFCUINFOSDWARFCONSTSDWARFFCNSDWARFABSFCNSDWARFTYPESDWARFVARSDWARFRANGESDWARFLOCSDWARFLINESSDWARFADDRSSEHUNWINDINFOSSEHSECT"
|
const _SymKind_name = "SxxxSTEXTSTEXTFIPSSTARTSTEXTFIPSSTEXTFIPSENDSTEXTENDSELFRXSECTSMACHOPLTSTYPESSTRINGSGOSTRINGSGOFUNCSGCBITSSRODATASRODATAFIPSSTARTSRODATAFIPSSRODATAFIPSENDSRODATAENDSFUNCTABSELFROSECTSTYPERELROSSTRINGRELROSGOSTRINGRELROSGOFUNCRELROSGCBITSRELROSRODATARELROSFUNCTABRELROSELFRELROSECTSMACHORELROSECTSTYPELINKSITABLINKSSYMTABSPCLNTABSFirstWritableSBUILDINFOSFIPSINFOSELFSECTSMACHOSMACHOGOTSWINDOWSSELFGOTSNOPTRDATASNOPTRDATAFIPSSTARTSNOPTRDATAFIPSSNOPTRDATAFIPSENDSNOPTRDATAENDSINITARRSDATASDATAFIPSSTARTSDATAFIPSSDATAFIPSENDSDATAENDSXCOFFTOCSBSSSNOPTRBSSSLIBFUZZER_8BIT_COUNTERSCOVERAGE_COUNTERSCOVERAGE_AUXVARSTLSBSSSFirstUnallocatedSXREFSMACHOSYMSTRSMACHOSYMTABSMACHOINDIRECTPLTSMACHOINDIRECTGOTSDYNIMPORTSHOSTOBJSUNDEFEXTSDWARFSECTSDWARFCUINFOSDWARFCONSTSDWARFFCNSDWARFABSFCNSDWARFTYPESDWARFVARSDWARFRANGESDWARFLOCSDWARFLINESSDWARFADDRSSEHUNWINDINFOSSEHSECT"
|
||||||
|
|
||||||
var _SymKind_index = [...]uint16{0, 4, 9, 23, 32, 44, 52, 62, 71, 76, 83, 92, 99, 106, 113, 129, 140, 154, 164, 172, 182, 192, 204, 218, 230, 242, 254, 267, 280, 295, 304, 313, 320, 328, 342, 352, 361, 369, 375, 384, 392, 399, 409, 428, 442, 459, 472, 480, 485, 499, 508, 520, 528, 537, 541, 550, 573, 590, 606, 613, 618, 630, 642, 659, 676, 686, 694, 703, 713, 725, 736, 745, 757, 767, 776, 787, 796, 807, 817, 831, 839}
|
var _SymKind_index = [...]uint16{0, 4, 9, 23, 32, 44, 52, 62, 71, 76, 83, 92, 99, 106, 113, 129, 140, 154, 164, 172, 182, 192, 204, 218, 230, 242, 254, 267, 280, 295, 304, 313, 320, 328, 342, 352, 361, 369, 375, 384, 392, 399, 409, 428, 442, 459, 472, 480, 485, 499, 508, 520, 528, 537, 541, 550, 573, 590, 606, 613, 630, 635, 647, 659, 676, 693, 703, 711, 720, 730, 742, 753, 762, 774, 784, 793, 804, 813, 824, 834, 848, 856}
|
||||||
|
|
||||||
func (i SymKind) String() string {
|
func (i SymKind) String() string {
|
||||||
if i >= SymKind(len(_SymKind_index)-1) {
|
if i >= SymKind(len(_SymKind_index)-1) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue