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:
Ian Lance Taylor 2025-10-28 14:01:48 -07:00 committed by Gopher Robot
parent f5f14262d0
commit 6914dd11c0
7 changed files with 36 additions and 34 deletions

View file

@ -1628,9 +1628,9 @@ type dodataState struct {
// Link context
ctxt *Link
// Data symbols bucketed by type.
data [sym.SXREF][]loader.Sym
data [sym.SFirstUnallocated][]loader.Sym
// Max alignment for each flavor of data symbol.
dataMaxAlign [sym.SXREF]int32
dataMaxAlign [sym.SFirstUnallocated]int32
// Overridden sym type
symGroupType []sym.SymKind
// Current data size so far.
@ -1687,7 +1687,7 @@ func (ctxt *Link) dodata(symGroupType []sym.SymKind) {
st := state.symType(s)
if st <= sym.STEXTFIPSEND || st >= sym.SXREF {
if st <= sym.STEXTEND || st >= sym.SFirstUnallocated {
continue
}
state.data[st] = append(state.data[st], s)
@ -2264,11 +2264,11 @@ func (state *dodataState) allocateDataSections(ctxt *Link) {
}
siz := 0
for symn := sym.SELFRXSECT; symn < sym.SXREF; symn++ {
for symn := sym.SELFRXSECT; symn < sym.SFirstUnallocated; symn++ {
siz += len(state.data[symn])
}
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]...)
}
}

View file

@ -919,7 +919,7 @@ func collectmachosyms(ctxt *Link) {
continue
}
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 {
// TLSBSS is not used on darwin. See data.go:allocateDataSections
continue

View file

@ -854,7 +854,7 @@ func (f *peFile) writeSymbols(ctxt *Link) {
continue
}
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 {
continue
}

View file

@ -244,7 +244,7 @@ func genelfsym(ctxt *Link, elfbind elf.SymBind) {
continue
}
st := ldr.SymType(s)
if st >= sym.SELFRXSECT && st < sym.SXREF {
if st >= sym.SELFRXSECT && st < sym.SFirstUnallocated {
typ := elf.STT_OBJECT
if st == sym.STLSBSS {
if ctxt.IsInternal() {
@ -345,7 +345,7 @@ func asmbPlan9Sym(ctxt *Link) {
continue
}
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 {
continue
}
@ -843,7 +843,7 @@ func (ctxt *Link) symtab(pcln *pclntab) []sym.SymKind {
}
// CarrierSymByType tracks carrier symbols and their sizes.
var CarrierSymByType [sym.SXREF]struct {
var CarrierSymByType [sym.SFirstUnallocated]struct {
Sym loader.Sym
Size int64
}

View file

@ -1121,7 +1121,7 @@ func (f *xcoffFile) asmaixsym(ctxt *Link) {
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) {
putaixsym(ctxt, s, DataSym)
}

View file

@ -125,6 +125,7 @@ const (
STLSBSS // Thread-local zeroed data.
// Unallocated segment.
SFirstUnallocated
SXREF // Reference from non-Go object file.
SMACHOSYMSTR // Mach-O string table.
SMACHOSYMTAB // Mach-O symbol table.

View file

@ -67,32 +67,33 @@ func _() {
_ = x[SCOVERAGE_COUNTER-56]
_ = x[SCOVERAGE_AUXVAR-57]
_ = x[STLSBSS-58]
_ = x[SXREF-59]
_ = x[SMACHOSYMSTR-60]
_ = x[SMACHOSYMTAB-61]
_ = x[SMACHOINDIRECTPLT-62]
_ = x[SMACHOINDIRECTGOT-63]
_ = x[SDYNIMPORT-64]
_ = x[SHOSTOBJ-65]
_ = x[SUNDEFEXT-66]
_ = x[SDWARFSECT-67]
_ = x[SDWARFCUINFO-68]
_ = x[SDWARFCONST-69]
_ = x[SDWARFFCN-70]
_ = x[SDWARFABSFCN-71]
_ = x[SDWARFTYPE-72]
_ = x[SDWARFVAR-73]
_ = x[SDWARFRANGE-74]
_ = x[SDWARFLOC-75]
_ = x[SDWARFLINES-76]
_ = x[SDWARFADDR-77]
_ = x[SSEHUNWINDINFO-78]
_ = x[SSEHSECT-79]
_ = x[SFirstUnallocated-59]
_ = x[SXREF-60]
_ = x[SMACHOSYMSTR-61]
_ = x[SMACHOSYMTAB-62]
_ = x[SMACHOINDIRECTPLT-63]
_ = x[SMACHOINDIRECTGOT-64]
_ = x[SDYNIMPORT-65]
_ = x[SHOSTOBJ-66]
_ = x[SUNDEFEXT-67]
_ = x[SDWARFSECT-68]
_ = x[SDWARFCUINFO-69]
_ = x[SDWARFCONST-70]
_ = x[SDWARFFCN-71]
_ = x[SDWARFABSFCN-72]
_ = x[SDWARFTYPE-73]
_ = x[SDWARFVAR-74]
_ = x[SDWARFRANGE-75]
_ = x[SDWARFLOC-76]
_ = x[SDWARFLINES-77]
_ = x[SDWARFADDR-78]
_ = 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 {
if i >= SymKind(len(_SymKind_index)-1) {