mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/link: put moduledata in its own .go.module section
There is a test for this in CL 721480 later in this series. For #76038 Change-Id: Ib7ed1f0b0aed2d929ca0f135b54d6b62112cae30 Reviewed-on: https://go-review.googlesource.com/c/go/+/720660 TryBot-Bypass: David Chase <drchase@google.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
43cfd785e7
commit
9f5cd43fe6
6 changed files with 70 additions and 49 deletions
|
|
@ -1937,6 +1937,26 @@ func (state *dodataState) allocateDataSections(ctxt *Link) {
|
|||
}
|
||||
ldr := ctxt.loader
|
||||
|
||||
// SMODULEDATA needs to be writable, but the GC doesn't need to
|
||||
// look at it. We don't use allocateSingleSymSections because
|
||||
// the name of the section is not the name of the symbol.
|
||||
if len(state.data[sym.SMODULEDATA]) > 0 {
|
||||
if len(state.data[sym.SMODULEDATA]) != 1 {
|
||||
Errorf("internal error: more than one SMODULEDATA symbol")
|
||||
}
|
||||
s := state.data[sym.SMODULEDATA][0]
|
||||
sect := addsection(ldr, ctxt.Arch, &Segdata, ".go.module", 06)
|
||||
sect.Align = symalign(ldr, s)
|
||||
state.datsize = Rnd(state.datsize, int64(sect.Align))
|
||||
sect.Vaddr = uint64(state.datsize)
|
||||
ldr.SetSymSect(s, sect)
|
||||
state.setSymType(s, sym.SDATA)
|
||||
ldr.SetSymValue(s, int64(uint64(state.datsize)-sect.Vaddr))
|
||||
state.datsize += ldr.SymSize(s)
|
||||
sect.Length = uint64(state.datsize) - sect.Vaddr
|
||||
state.checkdatsize(sym.SMODULEDATA)
|
||||
}
|
||||
|
||||
// writable .got (note that for PIE binaries .got goes in relro)
|
||||
if len(state.data[sym.SELFGOT]) > 0 {
|
||||
state.allocateNamedSectionAndAssignSyms(&Segdata, ".got", sym.SELFGOT, sym.SDATA, 06)
|
||||
|
|
|
|||
|
|
@ -923,9 +923,7 @@ func (ctxt *Link) linksetup() {
|
|||
mdsb = ctxt.loader.MakeSymbolUpdater(moduledata)
|
||||
ctxt.loader.SetAttrLocal(moduledata, true)
|
||||
}
|
||||
// In all cases way we mark the moduledata as noptrdata to hide it from
|
||||
// the GC.
|
||||
mdsb.SetType(sym.SNOPTRDATA)
|
||||
mdsb.SetType(sym.SMODULEDATA)
|
||||
ctxt.loader.SetAttrReachable(moduledata, true)
|
||||
ctxt.Moduledata = moduledata
|
||||
|
||||
|
|
|
|||
|
|
@ -1254,7 +1254,7 @@ func Xcoffadddynrel(target *Target, ldr *loader.Loader, syms *ArchSyms, s loader
|
|||
break
|
||||
}
|
||||
}
|
||||
} else if t := ldr.SymType(s); t.IsDATA() || t.IsNOPTRDATA() || t == sym.SBUILDINFO || t == sym.SXCOFFTOC {
|
||||
} else if t := ldr.SymType(s); t.IsDATA() || t.IsNOPTRDATA() || t == sym.SBUILDINFO || t == sym.SXCOFFTOC || t == sym.SMODULEDATA {
|
||||
switch ldr.SymSect(targ).Seg {
|
||||
default:
|
||||
ldr.Errorf(s, "unknown segment for .loader relocation with symbol %s", ldr.SymName(targ))
|
||||
|
|
|
|||
|
|
@ -99,9 +99,10 @@ const (
|
|||
SFIPSINFO // go:fipsinfo aka crypto/internal/fips140/check.Linkinfo (why is this writable)?
|
||||
SELFSECT // .got.plt, .plt, .dynamic where appropriate.
|
||||
SMACHO // Used only for .llvmasm?
|
||||
SMACHOGOT // Mach-O GOT.
|
||||
SWINDOWS // Windows dynamic symbols.
|
||||
SMODULEDATA // Linker generated moduledata struct.
|
||||
SELFGOT // Writable ELF GOT section.
|
||||
SMACHOGOT // Mach-O GOT.
|
||||
SNOPTRDATA // Data with no heap pointers.
|
||||
SNOPTRDATAFIPSSTART // Start of FIPS non-pointer writable data.
|
||||
SNOPTRDATAFIPS // FIPS non-pointer writable data.
|
||||
|
|
|
|||
|
|
@ -45,54 +45,55 @@ func _() {
|
|||
_ = x[SFIPSINFO-34]
|
||||
_ = x[SELFSECT-35]
|
||||
_ = x[SMACHO-36]
|
||||
_ = x[SMACHOGOT-37]
|
||||
_ = x[SWINDOWS-38]
|
||||
_ = x[SWINDOWS-37]
|
||||
_ = x[SMODULEDATA-38]
|
||||
_ = x[SELFGOT-39]
|
||||
_ = x[SNOPTRDATA-40]
|
||||
_ = x[SNOPTRDATAFIPSSTART-41]
|
||||
_ = x[SNOPTRDATAFIPS-42]
|
||||
_ = x[SNOPTRDATAFIPSEND-43]
|
||||
_ = x[SNOPTRDATAEND-44]
|
||||
_ = x[SINITARR-45]
|
||||
_ = x[SDATA-46]
|
||||
_ = x[SDATAFIPSSTART-47]
|
||||
_ = x[SDATAFIPS-48]
|
||||
_ = x[SDATAFIPSEND-49]
|
||||
_ = x[SDATAEND-50]
|
||||
_ = x[SXCOFFTOC-51]
|
||||
_ = x[SBSS-52]
|
||||
_ = x[SNOPTRBSS-53]
|
||||
_ = x[SLIBFUZZER_8BIT_COUNTER-54]
|
||||
_ = x[SCOVERAGE_COUNTER-55]
|
||||
_ = x[SCOVERAGE_AUXVAR-56]
|
||||
_ = x[STLSBSS-57]
|
||||
_ = x[SFirstUnallocated-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[SMACHOGOT-40]
|
||||
_ = x[SNOPTRDATA-41]
|
||||
_ = x[SNOPTRDATAFIPSSTART-42]
|
||||
_ = x[SNOPTRDATAFIPS-43]
|
||||
_ = x[SNOPTRDATAFIPSEND-44]
|
||||
_ = x[SNOPTRDATAEND-45]
|
||||
_ = x[SINITARR-46]
|
||||
_ = x[SDATA-47]
|
||||
_ = x[SDATAFIPSSTART-48]
|
||||
_ = x[SDATAFIPS-49]
|
||||
_ = x[SDATAFIPSEND-50]
|
||||
_ = x[SDATAEND-51]
|
||||
_ = x[SXCOFFTOC-52]
|
||||
_ = x[SBSS-53]
|
||||
_ = x[SNOPTRBSS-54]
|
||||
_ = x[SLIBFUZZER_8BIT_COUNTER-55]
|
||||
_ = x[SCOVERAGE_COUNTER-56]
|
||||
_ = x[SCOVERAGE_AUXVAR-57]
|
||||
_ = x[STLSBSS-58]
|
||||
_ = 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 = "SxxxSTEXTSTEXTFIPSSTARTSTEXTFIPSSTEXTFIPSENDSTEXTENDSELFRXSECTSMACHOPLTSTYPESSTRINGSGOSTRINGSGOFUNCSGCBITSSRODATASRODATAFIPSSTARTSRODATAFIPSSRODATAFIPSENDSRODATAENDSFUNCTABSPCLNTABSELFROSECTSTYPERELROSSTRINGRELROSGOSTRINGRELROSGOFUNCRELROSGCBITSRELROSRODATARELROSFUNCTABRELROSELFRELROSECTSMACHORELROSECTSTYPELINKSITABLINKSFirstWritableSBUILDINFOSFIPSINFOSELFSECTSMACHOSMACHOGOTSWINDOWSSELFGOTSNOPTRDATASNOPTRDATAFIPSSTARTSNOPTRDATAFIPSSNOPTRDATAFIPSENDSNOPTRDATAENDSINITARRSDATASDATAFIPSSTARTSDATAFIPSSDATAFIPSENDSDATAENDSXCOFFTOCSBSSSNOPTRBSSSLIBFUZZER_8BIT_COUNTERSCOVERAGE_COUNTERSCOVERAGE_AUXVARSTLSBSSSFirstUnallocatedSXREFSMACHOSYMSTRSMACHOSYMTABSMACHOINDIRECTPLTSMACHOINDIRECTGOTSDYNIMPORTSHOSTOBJSUNDEFEXTSDWARFSECTSDWARFCUINFOSDWARFCONSTSDWARFFCNSDWARFABSFCNSDWARFTYPESDWARFVARSDWARFRANGESDWARFLOCSDWARFLINESSDWARFADDRSSEHUNWINDINFOSSEHSECT"
|
||||
const _SymKind_name = "SxxxSTEXTSTEXTFIPSSTARTSTEXTFIPSSTEXTFIPSENDSTEXTENDSELFRXSECTSMACHOPLTSTYPESSTRINGSGOSTRINGSGOFUNCSGCBITSSRODATASRODATAFIPSSTARTSRODATAFIPSSRODATAFIPSENDSRODATAENDSFUNCTABSPCLNTABSELFROSECTSTYPERELROSSTRINGRELROSGOSTRINGRELROSGOFUNCRELROSGCBITSRELROSRODATARELROSFUNCTABRELROSELFRELROSECTSMACHORELROSECTSTYPELINKSITABLINKSFirstWritableSBUILDINFOSFIPSINFOSELFSECTSMACHOSWINDOWSSMODULEDATASELFGOTSMACHOGOTSNOPTRDATASNOPTRDATAFIPSSTARTSNOPTRDATAFIPSSNOPTRDATAFIPSENDSNOPTRDATAENDSINITARRSDATASDATAFIPSSTARTSDATAFIPSSDATAFIPSENDSDATAENDSXCOFFTOCSBSSSNOPTRBSSSLIBFUZZER_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, 180, 190, 200, 212, 226, 238, 250, 262, 275, 288, 303, 312, 321, 335, 345, 354, 362, 368, 377, 385, 392, 402, 421, 435, 452, 465, 473, 478, 492, 501, 513, 521, 530, 534, 543, 566, 583, 599, 606, 623, 628, 640, 652, 669, 686, 696, 704, 713, 723, 735, 746, 755, 767, 777, 786, 797, 806, 817, 827, 841, 849}
|
||||
var _SymKind_index = [...]uint16{0, 4, 9, 23, 32, 44, 52, 62, 71, 76, 83, 92, 99, 106, 113, 129, 140, 154, 164, 172, 180, 190, 200, 212, 226, 238, 250, 262, 275, 288, 303, 312, 321, 335, 345, 354, 362, 368, 376, 387, 394, 403, 413, 432, 446, 463, 476, 484, 489, 503, 512, 524, 532, 541, 545, 554, 577, 594, 610, 617, 634, 639, 651, 663, 680, 697, 707, 715, 724, 734, 746, 757, 766, 778, 788, 797, 808, 817, 828, 838, 852, 860}
|
||||
|
||||
func (i SymKind) String() string {
|
||||
if i >= SymKind(len(_SymKind_index)-1) {
|
||||
|
|
|
|||
|
|
@ -127,6 +127,7 @@ func asmb(ctxt *ld.Link, ldr *loader.Loader) {
|
|||
ldr.SymSect(ldr.Lookup("runtime.rodata", 0)),
|
||||
ldr.SymSect(ldr.Lookup("runtime.typelink", 0)),
|
||||
ldr.SymSect(ldr.Lookup("runtime.itablink", 0)),
|
||||
ldr.SymSect(ldr.Lookup("runtime.firstmoduledata", 0)),
|
||||
ldr.SymSect(ldr.Lookup("runtime.pclntab", 0)),
|
||||
ldr.SymSect(ldr.Lookup("runtime.noptrdata", 0)),
|
||||
ldr.SymSect(ldr.Lookup("runtime.data", 0)),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue