const ( SymVerABI0 = 0 SymVerABIInternal = 1 SymVerABICount = 2 // Number of internal ABIs SymVerStatic = 10 // Minimum version used by static (file-local) syms )
AbiSymKindToSymKind maps values read from object files (which are of type cmd/internal/objabi.SymKind) to values of type SymKind.
var AbiSymKindToSymKind = [...]SymKind{ objabi.Sxxx: Sxxx, objabi.STEXT: STEXT, objabi.SRODATA: SRODATA, objabi.SNOPTRDATA: SNOPTRDATA, objabi.SDATA: SDATA, objabi.SBSS: SBSS, objabi.SNOPTRBSS: SNOPTRBSS, objabi.STLSBSS: STLSBSS, objabi.SDWARFCUINFO: SDWARFCUINFO, objabi.SDWARFCONST: SDWARFCONST, objabi.SDWARFFCN: SDWARFFCN, objabi.SDWARFABSFCN: SDWARFABSFCN, objabi.SDWARFTYPE: SDWARFTYPE, objabi.SDWARFVAR: SDWARFVAR, objabi.SDWARFRANGE: SDWARFRANGE, objabi.SDWARFLOC: SDWARFLOC, objabi.SDWARFLINES: SDWARFLINES, objabi.SLIBFUZZER_8BIT_COUNTER: SLIBFUZZER_8BIT_COUNTER, objabi.SCOVERAGE_COUNTER: SCOVERAGE_COUNTER, objabi.SCOVERAGE_AUXVAR: SCOVERAGE_AUXVAR, objabi.SSEHUNWINDINFO: SSEHUNWINDINFO, }
ReadOnly are the symbol kinds that form read-only sections. In some cases, if they will require relocations, they are transformed into rel-ro sections using relROMap.
var ReadOnly = []SymKind{ STYPE, SSTRING, SGOSTRING, SGOFUNC, SGCBITS, SRODATA, SFUNCTAB, }
RelROMap describes the transformation of read-only symbols to rel-ro symbols.
var RelROMap = map[SymKind]SymKind{ STYPE: STYPERELRO, SSTRING: SSTRINGRELRO, SGOSTRING: SGOSTRINGRELRO, SGOFUNC: SGOFUNCRELRO, SGCBITS: SGCBITSRELRO, SRODATA: SRODATARELRO, SFUNCTAB: SFUNCTABRELRO, }
func ABIToVersion(abi obj.ABI) int
func RelocName(arch *sys.Arch, r objabi.RelocType) string
func VersionToABI(v int) (obj.ABI, bool)
A CompilationUnit represents a set of source files that are compiled together. Since all Go sources in a Go package are compiled together, there's one CompilationUnit per package that represents all Go sources in that package, plus one for each assembly file.
Equivalently, there's one CompilationUnit per object file in each Library loaded by the linker.
These are used for both DWARF and pclntab generation.
type CompilationUnit struct { Lib *Library // Our library PclnIndex int // Index of this CU in pclntab PCs []dwarf.Range // PC ranges, relative to Textp[0] DWInfo *dwarf.DWDie // CU root DIE FileTable []string // The file table used in this compilation unit. Consts LoaderSym // Package constants DIEs FuncDIEs []LoaderSym // Function DIE subtrees VarDIEs []LoaderSym // Global variable DIEs AbsFnDIEs []LoaderSym // Abstract function DIE subtrees RangeSyms []LoaderSym // Symbols for debug_range Textp []LoaderSym // Text symbols in this CU }
type Library struct { Objref string Srcref string File string Pkg string Shlib string Fingerprint goobj.FingerprintType Autolib []goobj.ImportedPkg Imports []*Library Main bool Units []*CompilationUnit Textp []LoaderSym // text syms defined in this library DupTextSyms []LoaderSym // dupok text syms defined in this library }
func (l Library) String() string
LoaderSym holds a loader.Sym value. We can't refer to this type from the sym package since loader imports sym.
type LoaderSym uint32
RelocVariant is a linker-internal variation on a relocation.
type RelocVariant uint8
const ( RV_NONE RelocVariant = iota RV_POWER_LO RV_POWER_HI RV_POWER_HA RV_POWER_DS // RV_390_DBL is a s390x-specific relocation variant that indicates that // the value to be placed into the relocatable field should first be // divided by 2. RV_390_DBL RV_CHECK_OVERFLOW RelocVariant = 1 << 7 RV_TYPE_MASK RelocVariant = RV_CHECK_OVERFLOW - 1 )
type Section struct { Rwx uint8 Extnum int16 Align int32 Name string Vaddr uint64 Length uint64 Seg *Segment Elfsect interface{} // an *ld.ElfShdr Reloff uint64 Rellen uint64 // Relcount is the number of *host* relocations applied to this section // (when external linking). // Incremented atomically on multiple goroutines. // Note: this may differ from number of Go relocations, as one Go relocation // may turn into multiple host relocations. Relcount uint32 Sym LoaderSym // symbol for the section, if any Index uint16 // each section has a unique index, used internally Compressed bool }
type Segment struct { Rwx uint8 // permission as usual unix bits (5 = r-x etc) Vaddr uint64 // virtual address Length uint64 // length in memory Fileoff uint64 // file offset Filelen uint64 // length on disk Sections []*Section }
A SymKind describes the kind of memory represented by a symbol.
type SymKind uint8
Defined SymKind values.
TODO(rsc): Give idiomatic Go names.
const ( Sxxx SymKind = iota STEXT SELFRXSECT SMACHOPLT // Read-only sections. STYPE SSTRING SGOSTRING SGOFUNC SGCBITS SRODATA SFUNCTAB SELFROSECT // Read-only sections with relocations. // // Types STYPE-SFUNCTAB above are written to the .rodata section by default. // When linking a shared object, some conceptually "read only" types need to // be written to by relocations and putting them in a section called // ".rodata" interacts poorly with the system linkers. The GNU linkers // support this situation by arranging for sections of the name // ".data.rel.ro.XXX" to be mprotected read only by the dynamic linker after // relocations have applied, so when the Go linker is creating a shared // object it checks all objects of the above types and bumps any object that // has a relocation to it to the corresponding type below, which are then // written to sections with appropriate magic names. STYPERELRO SSTRINGRELRO SGOSTRINGRELRO SGOFUNCRELRO SGCBITSRELRO SRODATARELRO SFUNCTABRELRO SELFRELROSECT // Part of .data.rel.ro if it exists, otherwise part of .rodata. STYPELINK SITABLINK SSYMTAB SPCLNTAB // Writable sections. SFirstWritable SBUILDINFO SELFSECT SMACHO SMACHOGOT SWINDOWS SELFGOT SNOPTRDATA SINITARR SDATA SXCOFFTOC SBSS SNOPTRBSS SLIBFUZZER_8BIT_COUNTER SCOVERAGE_COUNTER SCOVERAGE_AUXVAR STLSBSS SXREF SMACHOSYMSTR SMACHOSYMTAB SMACHOINDIRECTPLT SMACHOINDIRECTGOT SFILEPATH SDYNIMPORT SHOSTOBJ SUNDEFEXT // Undefined symbol for resolution by external linker // Sections for debugging information SDWARFSECT // DWARF symbol types SDWARFCUINFO SDWARFCONST SDWARFFCN SDWARFABSFCN SDWARFTYPE SDWARFVAR SDWARFRANGE SDWARFLOC SDWARFLINES // SEH symbol types SSEHUNWINDINFO SSEHSECT )
func (t SymKind) IsDWARF() bool
func (t SymKind) IsData() bool
IsData returns true if the type is a data type.
func (i SymKind) String() string