Functions
AddAddr
method
#
func (sb *SymbolBuilder) AddAddr(arch *sys.Arch, tgt Sym) int64
AddAddrPlus
method
#
func (sb *SymbolBuilder) AddAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64
AddAddrPlus4
method
#
func (sb *SymbolBuilder) AddAddrPlus4(arch *sys.Arch, tgt Sym, add int64) int64
AddBytes
method
#
func (sb *SymbolBuilder) AddBytes(data []byte)
AddCStringAt
method
#
AddCStringAt adds str plus a null terminating byte.
func (sb *SymbolBuilder) AddCStringAt(off int64, str string) int64
AddCURelativeAddrPlus
method
#
func (sb *SymbolBuilder) AddCURelativeAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64
AddCgoExport
method
#
AddCgoExport records a cgo-exported symbol in l.CgoExports.
This table is used to identify the correct Go symbol ABI to use
to resolve references from host objects (which don't have ABIs).
func (l *Loader) AddCgoExport(s Sym)
AddInteriorSym
method
#
AddInteriorSym sets up 'interior' as an interior symbol of
container/payload symbol 'container'. An interior symbol does not
itself have data, but gives a name to a subrange of the data in its
container symbol. The container itself may or may not have a name.
This method is intended primarily for use in the host object
loaders, to capture the semantics of symbols and sections in an
object file. When reading a host object file, we'll typically
encounter a static section symbol (ex: ".text") containing content
for a collection of functions, then a series of ELF (or macho, etc)
symbol table entries each of which points into a sub-section
(offset and length) of its corresponding container symbol. Within
the go linker we create a loader.Sym for the container (which is
expected to have the actual content/payload) and then a set of
interior loader.Sym's that point into a portion of the container.
func (l *Loader) AddInteriorSym(container Sym, interior Sym)
AddInteriorSym
method
#
func (sb *SymbolBuilder) AddInteriorSym(sub Sym)
AddPCRelPlus
method
#
func (sb *SymbolBuilder) AddPCRelPlus(arch *sys.Arch, tgt Sym, add int64) int64
AddPEImageRelativeAddrPlus
method
#
func (sb *SymbolBuilder) AddPEImageRelativeAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64
AddRel
method
#
Add a relocation with given type, return its handle and index
(to set other fields).
func (sb *SymbolBuilder) AddRel(typ objabi.RelocType) (Reloc, int)
AddRelocs
method
#
Add n relocations, return a handle to the relocations.
func (sb *SymbolBuilder) AddRelocs(n int) Relocs
AddSize
method
#
func (sb *SymbolBuilder) AddSize(arch *sys.Arch, tgt Sym) int64
AddStringAt
method
#
func (sb *SymbolBuilder) AddStringAt(off int64, str string) int64
AddSymRef
method
#
Add a symbol reference (relocation) with given type, addend, and size
(the most generic form).
func (sb *SymbolBuilder) AddSymRef(arch *sys.Arch, tgt Sym, add int64, typ objabi.RelocType, rsize int) int64
AddToSymValue
method
#
AddToSymValue adds to the value of the i-th symbol. i is the global index.
func (l *Loader) AddToSymValue(i Sym, val int64)
AddUint
method
#
func (sb *SymbolBuilder) AddUint(arch *sys.Arch, v uint64) int64
AddUint16
method
#
func (sb *SymbolBuilder) AddUint16(arch *sys.Arch, v uint16) int64
AddUint32
method
#
func (sb *SymbolBuilder) AddUint32(arch *sys.Arch, v uint32) int64
AddUint64
method
#
func (sb *SymbolBuilder) AddUint64(arch *sys.Arch, v uint64) int64
AddUint8
method
#
func (sb *SymbolBuilder) AddUint8(v uint8) int64
AddUintXX
method
#
func (sb *SymbolBuilder) AddUintXX(arch *sys.Arch, v uint64, wid int) int64
AddUleb
method
#
func (sb *SymbolBuilder) AddUleb(v uint64)
Addstring
method
#
func (sb *SymbolBuilder) Addstring(str string) int64
Align
method
#
func (sb *SymbolBuilder) Align() int32
Args
method
#
func (fi *FuncInfo) Args() int
AssignTextSymbolOrder
method
#
AssignTextSymbolOrder populates the Textp slices within each
library and compilation unit, insuring that packages are laid down
in dependency order (internal first, then everything else). Return value
is a slice of all text syms.
func (l *Loader) AssignTextSymbolOrder(libs []*sym.Library, intlibs []bool, extsyms []Sym) []Sym
At
method
#
At returns the j-th reloc for a global symbol.
func (relocs *Relocs) At(j int) Reloc
AttrCgoExport
method
#
func (l *Loader) AttrCgoExport(i Sym) bool
AttrCgoExportDynamic
method
#
AttrCgoExportDynamic returns true for a symbol that has been
specially marked via the "cgo_export_dynamic" compiler directive
written by cgo (in response to //export directives in the source).
func (l *Loader) AttrCgoExportDynamic(i Sym) bool
AttrCgoExportStatic
method
#
AttrCgoExportStatic returns true for a symbol that has been
specially marked via the "cgo_export_static" directive
written by cgo.
func (l *Loader) AttrCgoExportStatic(i Sym) bool
AttrDuplicateOK
method
#
AttrDuplicateOK returns true for a symbol that can be present in
multiple object files.
func (l *Loader) AttrDuplicateOK(i Sym) bool
AttrExternal
method
#
AttrExternal returns true for function symbols loaded from host
object files.
func (l *Loader) AttrExternal(i Sym) bool
AttrLocal
method
#
AttrLocal returns true for symbols that are only visible within the
module (executable or shared library) being linked. This attribute
is applied to thunks and certain other linker-generated symbols.
func (l *Loader) AttrLocal(i Sym) bool
AttrNotInSymbolTable
method
#
AttrNotInSymbolTable returns true for symbols that should not be
added to the symbol table of the final generated load module.
func (l *Loader) AttrNotInSymbolTable(i Sym) bool
AttrOnList
method
#
AttrOnList returns true for symbols that are on some list (such as
the list of all text symbols, or one of the lists of data symbols)
and is consulted to avoid bugs where a symbol is put on a list
twice.
func (l *Loader) AttrOnList(i Sym) bool
AttrReachable
method
#
AttrReachable returns true for symbols that are transitively
referenced from the entry points. Unreachable symbols are not
written to the output.
func (l *Loader) AttrReachable(i Sym) bool
AttrReadOnly
method
#
AttrReadOnly returns true for a symbol whose underlying data
is stored via a read-only mmap.
func (l *Loader) AttrReadOnly(i Sym) bool
AttrShared
method
#
AttrShared returns true for symbols compiled with the -shared option.
func (l *Loader) AttrShared(i Sym) bool
AttrSpecial
method
#
AttrSpecial returns true for a symbols that do not have their
address (i.e. Value) computed by the usual mechanism of
data.go:dodata() & data.go:address().
func (l *Loader) AttrSpecial(i Sym) bool
AttrSubSymbol
method
#
func (l *Loader) AttrSubSymbol(i Sym) bool
AttrUsedInIface
method
#
AttrUsedInIface returns true for a type symbol that is used in
an interface.
func (l *Loader) AttrUsedInIface(i Sym) bool
AttrVisibilityHidden
method
#
AttrVisibilityHidden symbols returns true for ELF symbols with
visibility set to STV_HIDDEN. They become local symbols in
the final executable. Only relevant when internally linking
on an ELF platform.
func (l *Loader) AttrVisibilityHidden(i Sym) bool
Aux
method
#
Returns the "handle" to the j-th aux symbol of the i-th symbol.
func (l *Loader) Aux(i Sym, j int) Aux
CgoExportDynamic
method
#
func (sb *SymbolBuilder) CgoExportDynamic() bool
CopySym
method
#
Copy the payload of symbol src to dst. Both src and dst must be external
symbols.
The intended use case is that when building/linking against a shared library,
where we do symbol name mangling, the Go object file may have reference to
the original symbol name whereas the shared library provides a symbol with
the mangled name. When we do mangling, we copy payload of mangled to original.
func (l *Loader) CopySym(src Sym, dst Sym)
Count
method
#
func (relocs *Relocs) Count() int
Count
method
#
return the number of bits set.
func (bm Bitmap) Count() int
CreateExtSym
method
#
CreateExtSym creates a new external symbol with the specified name
without adding it to any lookup tables, returning a Sym index for it.
func (l *Loader) CreateExtSym(name string, ver int) Sym
CreateStaticSym
method
#
CreateStaticSym creates a new static symbol with the specified name
without adding it to any lookup tables, returning a Sym index for it.
func (l *Loader) CreateStaticSym(name string) Sym
CreateSymForUpdate
method
#
CreateSymForUpdate creates a symbol with given name and version,
returns a CreateSymForUpdate for update. If the symbol already
exists, it will update in-place.
func (l *Loader) CreateSymForUpdate(name string, version int) *SymbolBuilder
Data
method
#
func (sb *SymbolBuilder) Data() []byte
Data
method
#
Returns the symbol content of the i-th symbol. i is global index.
func (l *Loader) Data(i Sym) []byte
DataString
method
#
Returns the symbol content of the i-th symbol as a string. i is global index.
func (l *Loader) DataString(i Sym) string
Dump
method
#
For debugging.
func (l *Loader) Dump()
DuplicateOK
method
#
func (sb *SymbolBuilder) DuplicateOK() bool
DynidSyms
method
#
DynidSyms returns the set of symbols for which dynID is set to an
interesting (non-default) value. This is expected to be a fairly
small set.
func (l *Loader) DynidSyms() []Sym
Dynimplib
method
#
func (sb *SymbolBuilder) Dynimplib() string
Dynimpvers
method
#
func (sb *SymbolBuilder) Dynimpvers() string
Errorf
method
#
Errorf method logs an error message. See ErrorReporter.Errorf for details.
func (l *Loader) Errorf(s Sym, format string, args ...interface{})
Errorf
method
#
Errorf method logs an error message.
After each error, the error actions function will be invoked; this
will either terminate the link immediately (if -h option given)
or it will keep a count and exit if more than 20 errors have been printed.
Logging an error means that on exit cmd/link will delete any
output file and return a non-zero error code.
func (reporter *ErrorReporter) Errorf(s Sym, format string, args ...interface{})
External
method
#
func (sb *SymbolBuilder) External() bool
Extname
method
#
func (sb *SymbolBuilder) Extname() string
File
method
#
func (fi *FuncInfo) File(k int) goobj.CUFileIndex
ForAllCgoExportDynamic
method
#
ForAllCgoExportDynamic calls f for every symbol that has been
marked with the "cgo_export_dynamic" compiler directive.
func (l *Loader) ForAllCgoExportDynamic(f func(Sym))
FreeData
method
#
FreeData clears the symbol data of an external symbol, allowing the memory
to be freed earlier. No-op for non-external symbols.
i is global index.
func (l *Loader) FreeData(i Sym)
FreeSym
method
#
func (l *Loader) FreeSym(i Sym)
FuncFlag
method
#
func (fi *FuncInfo) FuncFlag() abi.FuncFlag
FuncID
method
#
func (fi *FuncInfo) FuncID() abi.FuncID
FuncInfo
method
#
func (l *Loader) FuncInfo(i Sym) FuncInfo
Funcdata
method
#
Returns all funcdata symbols of symbol i.
tmp is a scratch space.
func (l *Loader) Funcdata(i Sym, tmp []Sym) []Sym
GenAddAddrPlusFunc
function
#
GenAddAddrPlusFunc returns a function to be called when capturing
a function symbol's address. In later stages of the link (when
address assignment is done) when doing internal linking and
targeting an executable, we can just emit the address of a function
directly instead of generating a relocation. Clients can call
this function (setting 'internalExec' based on build mode and target)
and then invoke the returned function in roughly the same way that
loader.*SymbolBuilder.AddAddrPlus would be used.
func GenAddAddrPlusFunc(internalExec bool) (func(s *SymbolBuilder, arch *sys.Arch, tgt Sym, add int64) int64)
GetErrorReporter
method
#
GetErrorReporter returns the loader's associated error reporter.
func (l *Loader) GetErrorReporter() *ErrorReporter
GetFuncDwarfAuxSyms
method
#
GetFuncDwarfAuxSyms collects and returns the auxiliary DWARF
symbols associated with a given function symbol. Prior to the
introduction of the loader, this was done purely using name
lookups, e.f. for function with name XYZ we would then look up
go.info.XYZ, etc.
func (l *Loader) GetFuncDwarfAuxSyms(fnSymIdx Sym) (auxDwarfInfo Sym, auxDwarfLoc Sym, auxDwarfRanges Sym, auxDwarfLines Sym)
GetVarDwarfAuxSym
method
#
func (l *Loader) GetVarDwarfAuxSym(i Sym) Sym
GoType
method
#
func (sb *SymbolBuilder) GoType() Sym
Grow
method
#
func (ms *extSymPayload) Grow(siz int64)
Has
method
#
whether the i-th bit is set.
func (bm Bitmap) Has(i Sym) bool
InitReachable
method
#
Initialize Reachable bitmap and its siblings for running deadcode pass.
func (l *Loader) InitReachable()
InlTree
method
#
func (fi *FuncInfo) InlTree(k int) InlTreeNode
IsDeferReturnTramp
method
#
Return whether this is a trampoline of a deferreturn call.
func (l *Loader) IsDeferReturnTramp(i Sym) bool
IsDict
method
#
Returns whether this symbol is a dictionary symbol.
func (l *Loader) IsDict(i Sym) bool
IsExternal
method
#
func (l *Loader) IsExternal(i Sym) bool
IsFileLocal
method
#
func (l *Loader) IsFileLocal(i Sym) bool
IsFromAssembly
method
#
IsFromAssembly returns true if this symbol is derived from an
object file generated by the Go assembler.
func (l *Loader) IsFromAssembly(i Sym) bool
IsGeneratedSym
method
#
IsGeneratedSym returns true if a symbol's been previously marked as a
generator symbol through the SetIsGeneratedSym. The functions for generator
symbols are kept in the Link context.
func (l *Loader) IsGeneratedSym(i Sym) bool
IsGoType
method
#
Returns whether this is a Go type symbol.
func (l *Loader) IsGoType(i Sym) bool
IsItab
method
#
Returns whether this symbol is an itab symbol.
func (l *Loader) IsItab(i Sym) bool
IsMarker
method
#
func (rel Reloc) IsMarker() bool
IsNoSplit
method
#
Returns whether the i-th symbol is nosplit.
func (l *Loader) IsNoSplit(i Sym) bool
IsPkgInit
method
#
Returns whether this symbol is a compiler-generated package init func.
func (l *Loader) IsPkgInit(i Sym) bool
IsReflectMethod
method
#
Returns whether the i-th symbol has ReflectMethod attribute set.
func (l *Loader) IsReflectMethod(i Sym) bool
IsTypelink
method
#
Returns whether this symbol should be included in typelink.
func (l *Loader) IsTypelink(i Sym) bool
Len
method
#
func (s bySymValue) Len() int
Len
method
#
return current length of bitmap in bits.
func (bm Bitmap) Len() int
Less
method
#
func (s bySymValue) Less(i int, j int) bool
LoadSyms
method
#
Add syms, hashed (content-addressable) symbols, non-package symbols, and
references to external symbols (which are always named).
func (l *Loader) LoadSyms(arch *sys.Arch)
Localentry
method
#
func (sb *SymbolBuilder) Localentry() uint8
Locals
method
#
func (fi *FuncInfo) Locals() int
Lookup
method
#
Look up a symbol by name, return global index, or 0 if not found.
This is more like Syms.ROLookup than Lookup -- it doesn't create
new symbol.
func (l *Loader) Lookup(name string, ver int) Sym
LookupOrCreateCgoExport
method
#
LookupOrCreateCgoExport is like LookupOrCreateSym, but if ver
indicates a global symbol, it uses the CgoExport table to determine
the appropriate symbol version (ABI) to use. ver must be either 0
or a static symbol version.
func (l *Loader) LookupOrCreateCgoExport(name string, ver int) Sym
LookupOrCreateSym
method
#
LookupOrCreateSym looks up the symbol with the specified name/version,
returning its Sym index if found. If the lookup fails, a new external
Sym will be created, entered into the lookup tables, and returned.
func (l *Loader) LookupOrCreateSym(name string, ver int) Sym
MakeBitmap
function
#
func MakeBitmap(n int) Bitmap
MakeSymbolBuilder
method
#
MakeSymbolBuilder creates a symbol builder for use in constructing
an entirely new symbol.
func (l *Loader) MakeSymbolBuilder(name string) *SymbolBuilder
MakeSymbolUpdater
method
#
MakeSymbolUpdater creates a symbol builder helper for an existing
symbol 'symIdx'. If 'symIdx' is not an external symbol, then create
a clone of it (copy name, properties, etc) fix things up so that
the lookup tables and caches point to the new version, not the old
version.
func (l *Loader) MakeSymbolUpdater(symIdx Sym) *SymbolBuilder
MakeWritable
method
#
func (sb *SymbolBuilder) MakeWritable()
NAlldef
method
#
Total number of defined symbols (package symbols, hashed symbols, and
non-package symbols).
func (r *oReader) NAlldef() int
NAux
method
#
Returns the number of aux symbols given a global index.
func (l *Loader) NAux(i Sym) int
NDef
method
#
Number of defined Go symbols.
func (l *Loader) NDef() int
NReachableSym
method
#
Number of reachable symbols.
func (l *Loader) NReachableSym() int
NStrictDupMsgs
method
#
func (l *Loader) NStrictDupMsgs() int
NSym
method
#
Number of total symbols.
func (l *Loader) NSym() int
Name
method
#
func (sb *SymbolBuilder) Name() string
NewLoader
function
#
func NewLoader(flags uint32, reporter *ErrorReporter) *Loader
NewSection
method
#
NewSection creates a new (output) section.
func (l *Loader) NewSection() *sym.Section
NumFile
method
#
func (fi *FuncInfo) NumFile() uint32
NumFuncdata
method
#
Returns the number of funcdata for symbol i.
func (l *Loader) NumFuncdata(i Sym) int
NumInlTree
method
#
func (fi *FuncInfo) NumInlTree() uint32
NumPcdata
method
#
Returns the number of pcdata for symbol i.
func (l *Loader) NumPcdata(i Sym) int
OnList
method
#
func (sb *SymbolBuilder) OnList() bool
Outer
method
#
func (sb *SymbolBuilder) Outer() Sym
OuterSym
method
#
OuterSym gets the outer/container symbol.
func (l *Loader) OuterSym(i Sym) Sym
PcdataAuxs
method
#
Returns all aux symbols of per-PC data for symbol i.
tmp is a scratch space for the pcdata slice.
func (l *Loader) PcdataAuxs(i Sym, tmp []Sym) (pcsp Sym, pcfile Sym, pcline Sym, pcinline Sym, pcdata []Sym)
Pcsp
method
#
func (l *Loader) Pcsp(i Sym) Sym
Preload
method
#
Preload has to be called prior to invoking the various methods
below related to pcdata, funcdataoff, files, and inltree nodes.
func (fi *FuncInfo) Preload()
Preload
method
#
Preload a package: adds autolib.
Does not add defined package or non-packaged symbols to the symbol table.
These are done in LoadSyms.
Does not read symbol data.
Returns the fingerprint of the object.
func (l *Loader) Preload(localSymVersion int, f *bio.Reader, lib *sym.Library, unit *sym.CompilationUnit, length int64) goobj.FingerprintType
Reachable
method
#
func (sb *SymbolBuilder) Reachable() bool
ReadOnly
method
#
func (sb *SymbolBuilder) ReadOnly() bool
RelocVariant
method
#
RelocVariant returns the 'variant' property of a relocation on
some specific symbol.
func (l *Loader) RelocVariant(s Sym, ri int) sym.RelocVariant
Relocs
method
#
Relocs returns a Relocs object for the given global sym.
func (l *Loader) Relocs(i Sym) Relocs
Relocs
method
#
func (sb *SymbolBuilder) Relocs() Relocs
ResetRelocs
method
#
ResetRelocs removes all relocations on this symbol.
func (sb *SymbolBuilder) ResetRelocs()
SEHUnwindSym
method
#
SEHUnwindSym returns the auxiliary SEH unwind symbol associated with
a given function symbol.
func (l *Loader) SEHUnwindSym(fnSymIdx Sym) Sym
Sect
method
#
func (sb *SymbolBuilder) Sect() *sym.Section
Set
method
#
set the i-th bit.
func (bm Bitmap) Set(i Sym)
SetAddr
method
#
func (sb *SymbolBuilder) SetAddr(arch *sys.Arch, off int64, tgt Sym) int64
SetAddrPlus
method
#
func (sb *SymbolBuilder) SetAddrPlus(arch *sys.Arch, off int64, tgt Sym, add int64) int64
SetAlign
method
#
func (sb *SymbolBuilder) SetAlign(align int32)
SetAttrCgoExportDynamic
method
#
SetAttrCgoExportDynamic sets the "cgo_export_dynamic" for a symbol
(see AttrCgoExportDynamic).
func (l *Loader) SetAttrCgoExportDynamic(i Sym, v bool)
SetAttrCgoExportStatic
method
#
SetAttrCgoExportStatic sets the "cgo_export_static" for a symbol
(see AttrCgoExportStatic).
func (l *Loader) SetAttrCgoExportStatic(i Sym, v bool)
SetAttrDuplicateOK
method
#
SetAttrDuplicateOK sets the "duplicate OK" property for an external
symbol (see AttrDuplicateOK).
func (l *Loader) SetAttrDuplicateOK(i Sym, v bool)
SetAttrExternal
method
#
SetAttrExternal sets the "external" property for a host object
symbol (see AttrExternal).
func (l *Loader) SetAttrExternal(i Sym, v bool)
SetAttrLocal
method
#
SetAttrLocal the "local" property for a symbol (see AttrLocal above).
func (l *Loader) SetAttrLocal(i Sym, v bool)
SetAttrNotInSymbolTable
method
#
SetAttrNotInSymbolTable the "not in symtab" property for a symbol
(see AttrNotInSymbolTable above).
func (l *Loader) SetAttrNotInSymbolTable(i Sym, v bool)
SetAttrOnList
method
#
SetAttrOnList sets the "on list" property for a symbol (see
AttrOnList).
func (l *Loader) SetAttrOnList(i Sym, v bool)
SetAttrReachable
method
#
SetAttrReachable sets the reachability property for a symbol (see
AttrReachable).
func (l *Loader) SetAttrReachable(i Sym, v bool)
SetAttrReadOnly
method
#
SetAttrReadOnly sets the "data is read only" property for a symbol
(see AttrReadOnly).
func (l *Loader) SetAttrReadOnly(i Sym, v bool)
SetAttrShared
method
#
SetAttrShared sets the "shared" property for an external
symbol (see AttrShared).
func (l *Loader) SetAttrShared(i Sym, v bool)
SetAttrSpecial
method
#
SetAttrSpecial sets the "special" property for a symbol (see
AttrSpecial).
func (l *Loader) SetAttrSpecial(i Sym, v bool)
SetAttrUsedInIface
method
#
func (l *Loader) SetAttrUsedInIface(i Sym, v bool)
SetAttrVisibilityHidden
method
#
SetAttrVisibilityHidden sets the "hidden visibility" property for a
symbol (see AttrVisibilityHidden).
func (l *Loader) SetAttrVisibilityHidden(i Sym, v bool)
SetBytesAt
method
#
func (sb *SymbolBuilder) SetBytesAt(off int64, b []byte) int64
SetCarrierSym
method
#
SetCarrierSym declares that 'c' is the carrier or container symbol
for 's'. Carrier symbols are used in the linker to as a container
for a collection of sub-symbols where the content of the
sub-symbols is effectively concatenated to form the content of the
carrier. The carrier is given a name in the output symbol table
while the sub-symbol names are not. For example, the Go compiler
emits named string symbols (type SGOSTRING) when compiling a
package; after being deduplicated, these symbols are collected into
a single unit by assigning them a new carrier symbol named
"go:string.*" (which appears in the final symbol table for the
output load module).
func (l *Loader) SetCarrierSym(s Sym, c Sym)
SetData
method
#
func (sb *SymbolBuilder) SetData(data []byte)
SetDuplicateOK
method
#
func (sb *SymbolBuilder) SetDuplicateOK(v bool)
SetDynimplib
method
#
func (sb *SymbolBuilder) SetDynimplib(value string)
SetDynimpvers
method
#
func (sb *SymbolBuilder) SetDynimpvers(value string)
SetExternal
method
#
func (sb *SymbolBuilder) SetExternal(v bool)
SetExtname
method
#
func (sb *SymbolBuilder) SetExtname(value string)
SetGot
method
#
func (sb *SymbolBuilder) SetGot(value int32)
SetGot
method
#
SetGot sets the GOT offset of symbol i.
func (l *Loader) SetGot(i Sym, v int32)
SetIsDeferReturnTramp
method
#
Set that i is a trampoline of a deferreturn call.
func (l *Loader) SetIsDeferReturnTramp(i Sym, v bool)
SetIsGeneratedSym
method
#
SetIsGeneratedSym marks symbols as generated symbols. Data shouldn't be
stored in generated symbols, and a function is registered and called for
each of these symbols.
func (l *Loader) SetIsGeneratedSym(i Sym, v bool)
SetLocal
method
#
func (sb *SymbolBuilder) SetLocal(value bool)
SetLocalentry
method
#
func (sb *SymbolBuilder) SetLocalentry(value uint8)
SetNotInSymbolTable
method
#
func (sb *SymbolBuilder) SetNotInSymbolTable(value bool)
SetOnList
method
#
func (sb *SymbolBuilder) SetOnList(v bool)
SetPlt
method
#
func (sb *SymbolBuilder) SetPlt(value int32)
SetPlt
method
#
SetPlt sets the PLT offset of symbol i.
func (l *Loader) SetPlt(i Sym, v int32)
SetReachable
method
#
func (sb *SymbolBuilder) SetReachable(v bool)
SetReadOnly
method
#
func (sb *SymbolBuilder) SetReadOnly(v bool)
SetRelocAdd
method
#
SetRelocAdd sets the addend of the 'i'-th relocation on this sym to 'a'
func (sb *SymbolBuilder) SetRelocAdd(i int, a int64)
SetRelocSym
method
#
SetRelocSym sets the target sym of the 'i'-th relocation on this sym to 's'
func (sb *SymbolBuilder) SetRelocSym(i int, tgt Sym)
SetRelocType
method
#
SetRelocType sets the type of the 'i'-th relocation on this sym to 't'
func (sb *SymbolBuilder) SetRelocType(i int, t objabi.RelocType)
SetRelocVariant
method
#
SetRelocVariant sets the 'variant' property of a relocation on
some specific symbol.
func (l *Loader) SetRelocVariant(s Sym, ri int, v sym.RelocVariant)
SetSect
method
#
func (sb *SymbolBuilder) SetSect(sect *sym.Section)
SetSize
method
#
func (sb *SymbolBuilder) SetSize(size int64)
SetSpecial
method
#
func (sb *SymbolBuilder) SetSpecial(value bool)
SetSym
method
#
func (rel Reloc) SetSym(s Sym)
SetSymAlign
method
#
SetSymAlign sets the alignment for a symbol.
func (l *Loader) SetSymAlign(i Sym, align int32)
SetSymDynid
method
#
SetSymDynid sets the "dynid" property for a symbol.
func (l *Loader) SetSymDynid(i Sym, val int32)
SetSymDynimplib
method
#
SetSymDynimplib sets the "dynimplib" attribute for a symbol.
func (l *Loader) SetSymDynimplib(i Sym, value string)
SetSymDynimpvers
method
#
SetSymDynimpvers sets the "dynimpvers" attribute for a symbol.
func (l *Loader) SetSymDynimpvers(i Sym, value string)
SetSymElfSym
method
#
SetSymElfSym sets the elf symbol index for a symbol.
func (l *Loader) SetSymElfSym(i Sym, es int32)
SetSymElfType
method
#
SetSymElfType sets the elf type attribute for a symbol.
func (l *Loader) SetSymElfType(i Sym, et elf.SymType)
SetSymExtname
method
#
SetSymExtname sets the "extname" attribute for a symbol.
func (l *Loader) SetSymExtname(i Sym, value string)
SetSymLocalElfSym
method
#
SetSymLocalElfSym sets the "local" elf symbol index for a symbol.
func (l *Loader) SetSymLocalElfSym(i Sym, es int32)
SetSymLocalentry
method
#
SetSymLocalentry sets the "local entry" offset attribute for a symbol.
func (l *Loader) SetSymLocalentry(i Sym, value uint8)
SetSymPkg
method
#
SetSymPkg sets the package/library for a symbol. This is
needed mainly for external symbols, specifically those imported
from shared libraries.
func (l *Loader) SetSymPkg(i Sym, pkg string)
SetSymSect
method
#
SetSymSect sets the section of the i-th symbol. i is global index.
func (l *Loader) SetSymSect(i Sym, sect *sym.Section)
SetSymValue
method
#
SetSymValue sets the value of the i-th symbol. i is global index.
func (l *Loader) SetSymValue(i Sym, val int64)
SetType
method
#
func (sb *SymbolBuilder) SetType(kind sym.SymKind)
SetType
method
#
func (rel Reloc) SetType(t objabi.RelocType)
SetUint
method
#
func (sb *SymbolBuilder) SetUint(arch *sys.Arch, r int64, v uint64) int64
SetUint16
method
#
func (sb *SymbolBuilder) SetUint16(arch *sys.Arch, r int64, v uint16) int64
SetUint32
method
#
func (sb *SymbolBuilder) SetUint32(arch *sys.Arch, r int64, v uint32) int64
SetUint8
method
#
func (sb *SymbolBuilder) SetUint8(arch *sys.Arch, r int64, v uint8) int64
SetUintptr
method
#
func (sb *SymbolBuilder) SetUintptr(arch *sys.Arch, r int64, v uintptr) int64
SetValue
method
#
func (sb *SymbolBuilder) SetValue(v int64)
SetVisibilityHidden
method
#
func (sb *SymbolBuilder) SetVisibilityHidden(value bool)
Size
method
#
func (sb *SymbolBuilder) Size() int64
SortRelocs
method
#
SortRelocs Sort relocations by offset.
func (sb *SymbolBuilder) SortRelocs()
SortSub
method
#
SortSub walks through the sub-symbols for 's' and sorts them
in place by increasing value. Return value is the new
sub symbol for the specified outer symbol.
func (l *Loader) SortSub(s Sym) Sym
SortSub
method
#
func (sb *SymbolBuilder) SortSub()
SortSyms
method
#
SortSyms sorts a list of symbols by their value.
func (l *Loader) SortSyms(ss []Sym)
StartLine
method
#
func (fi *FuncInfo) StartLine() int32
Stat
method
#
Symbol statistics.
func (l *Loader) Stat() string
Sub
method
#
func (sb *SymbolBuilder) Sub() Sym
SubSym
method
#
SubSym gets the subsymbol for host object loaded symbols.
func (l *Loader) SubSym(i Sym) Sym
SubSym
method
#
func (sb *SymbolBuilder) SubSym() Sym
Swap
method
#
func (s bySymValue) Swap(i int, j int)
Sym
method
#
func (rel Reloc) Sym() Sym
Sym
method
#
func (a Aux) Sym() Sym
Sym
method
#
func (sb *SymbolBuilder) Sym() Sym
SymAddr
method
#
SymAddr checks that a symbol is reachable, and returns its value.
func (l *Loader) SymAddr(i Sym) int64
SymAlign
method
#
SymAlign returns the alignment for a symbol.
func (l *Loader) SymAlign(i Sym) int32
SymAttr
method
#
Returns the attributes of the i-th symbol.
func (l *Loader) SymAttr(i Sym) uint8
SymDynid
method
#
SymDynid returns the "dynid" property for the specified symbol.
func (l *Loader) SymDynid(i Sym) int32
SymDynimplib
method
#
SymDynimplib returns the "dynimplib" attribute for the specified
symbol, making up a portion of the info for a symbol specified
on a "cgo_import_dynamic" compiler directive.
func (l *Loader) SymDynimplib(i Sym) string
SymDynimpvers
method
#
SymDynimpvers returns the "dynimpvers" attribute for the specified
symbol, making up a portion of the info for a symbol specified
on a "cgo_import_dynamic" compiler directive.
func (l *Loader) SymDynimpvers(i Sym) string
SymElfSym
method
#
SymElfSym returns the ELF symbol index for a given loader
symbol, assigned during ELF symtab generation.
func (l *Loader) SymElfSym(i Sym) int32
SymElfType
method
#
SymElfType returns the previously recorded ELF type for a symbol
(used only for symbols read from shared libraries by ldshlibsyms).
It is not set for symbols defined by the packages being linked or
by symbols read by ldelf (and so is left as elf.STT_NOTYPE).
func (l *Loader) SymElfType(i Sym) elf.SymType
SymExtname
method
#
SymExtname returns the "extname" value for the specified
symbol.
func (l *Loader) SymExtname(i Sym) string
SymGoType
method
#
SymGoType returns the 'Gotype' property for a given symbol (set by
the Go compiler for variable symbols). This version relies on
reading aux symbols for the target sym -- it could be that a faster
approach would be to check for gotype during preload and copy the
results in to a map (might want to try this at some point and see
if it helps speed things up).
func (l *Loader) SymGoType(i Sym) Sym
SymGot
method
#
SymGot returns the GOT offset of symbol s.
func (l *Loader) SymGot(s Sym) int32
SymLocalElfSym
method
#
SymLocalElfSym returns the "local" ELF symbol index for a given loader
symbol, assigned during ELF symtab generation.
func (l *Loader) SymLocalElfSym(i Sym) int32
SymLocalentry
method
#
SymLocalentry returns an offset in bytes of the "local entry" of a symbol.
On PPC64, a value of 1 indicates the symbol does not use or preserve a TOC
pointer in R2, nor does it have a distinct local entry.
func (l *Loader) SymLocalentry(i Sym) uint8
SymName
method
#
Returns the name of the i-th symbol.
func (l *Loader) SymName(i Sym) string
SymPkg
method
#
SymPkg returns the package where the symbol came from (for
regular compiler-generated Go symbols), but in the case of
building with "-linkshared" (when a symbol is read from a
shared library), will hold the library name.
NOTE: this corresponds to sym.Symbol.File field.
func (l *Loader) SymPkg(i Sym) string
SymPlt
method
#
SymPlt returns the PLT offset of symbol s.
func (l *Loader) SymPlt(s Sym) int32
SymSect
method
#
SymSect returns the section of the i-th symbol. i is global index.
func (l *Loader) SymSect(i Sym) *sym.Section
SymSize
method
#
Returns the size of the i-th symbol.
func (l *Loader) SymSize(i Sym) int64
SymType
method
#
Returns the type of the i-th symbol.
func (l *Loader) SymType(i Sym) sym.SymKind
SymUnit
method
#
SymUnit returns the compilation unit for a given symbol (which will
typically be nil for external or linker-manufactured symbols).
func (l *Loader) SymUnit(i Sym) *sym.CompilationUnit
SymValue
method
#
SymValue returns the value of the i-th symbol. i is global index.
func (l *Loader) SymValue(i Sym) int64
SymVersion
method
#
Returns the version of the i-th symbol.
func (l *Loader) SymVersion(i Sym) int
TopFrame
method
#
TopFrame returns true if the function associated with this FuncInfo
is an entry point, meaning that unwinders should stop when they hit
this function.
func (fi *FuncInfo) TopFrame() bool
TopLevelSym
method
#
TopLevelSym tests a symbol (by name and kind) to determine whether
the symbol first class sym (participating in the link) or is an
anonymous aux or sub-symbol containing some sub-part or payload of
another symbol.
func (l *Loader) TopLevelSym(s Sym) bool
Type
method
#
func (rel Reloc) Type() objabi.RelocType
Type
method
#
func (sb *SymbolBuilder) Type() sym.SymKind
UndefinedRelocTargets
method
#
UndefinedRelocTargets iterates through the global symbol index
space, looking for symbols with relocations targeting undefined
references. The linker's loadlib method uses this to determine if
there are unresolved references to functions in system libraries
(for example, libgcc.a), presumably due to CGO code. Return value
is a pair of lists of loader.Sym's. First list corresponds to the
corresponding to the undefined symbols themselves, the second list
is the symbol that is making a reference to the undef. The "limit"
param controls the maximum number of results returned; if "limit"
is -1, then all undefs are returned.
func (l *Loader) UndefinedRelocTargets(limit int) ([]Sym, []Sym)
Unset
method
#
unset the i-th bit.
func (bm Bitmap) Unset(i Sym)
Valid
method
#
func (fi *FuncInfo) Valid() bool
Value
method
#
func (sb *SymbolBuilder) Value() int64
Version
method
#
func (sb *SymbolBuilder) Version() int
VisibilityHidden
method
#
func (sb *SymbolBuilder) VisibilityHidden() bool
WasmImportSym
method
#
WasmImportSym returns the auxiliary WebAssembly import symbol associated with
a given function symbol. The aux sym only exists for Go function stubs that
have been annotated with the //go:wasmimport directive. The aux sym
contains the information necessary for the linker to add a WebAssembly
import statement.
(https://webassembly.github.io/spec/core/syntax/modules.html#imports)
func (l *Loader) WasmImportSym(fnSymIdx Sym) Sym
WasmTypeSym
method
#
func (l *Loader) WasmTypeSym(s Sym) Sym
Weak
method
#
func (rel Reloc) Weak() bool
abiToVer
function
#
func abiToVer(abi uint16, localSymVersion int) int
addObj
method
#
Add object file r
func (l *Loader) addObj(pkg string, r *oReader)
addSym
method
#
Add a symbol from an object file, return the global index.
If the symbol already exist, it returns the index of that symbol.
func (st *loadState) addSym(name string, ver int, r *oReader, li uint32, kind int, osym *goobj.Sym) Sym
addSymRef
method
#
func (sb *SymbolBuilder) addSymRef(tgt Sym, add int64, typ objabi.RelocType, rsize int) int64
allocPayload
method
#
allocPayload allocates a new payload.
func (l *Loader) allocPayload() *extSymPayload
aux1
method
#
Returns a specific aux symbol of type t for symbol i.
func (l *Loader) aux1(i Sym, t uint8) Sym
auxs
method
#
func (l *Loader) auxs(i Sym) (*oReader, []goobj.Aux)
checkLinkname
method
#
check if a linkname reference to symbol s from pkg is allowed
func (l *Loader) checkLinkname(pkg string, name string, s Sym)
checkdup
method
#
Check that duplicate symbols have same contents.
func (l *Loader) checkdup(name string, r *oReader, li uint32, dup Sym)
cloneToExternal
method
#
cloneToExternal takes the existing object file symbol (symIdx)
and creates a new external symbol payload that is a clone with
respect to name, version, type, relocations, etc. The idea here
is that if the linker decides it wants to update the contents of
a symbol originally discovered as part of an object file, it's
easier to do this if we make the updates to an external symbol
payload.
func (l *Loader) cloneToExternal(symIdx Sym) *extSymPayload
extIndex
method
#
For external symbol, return its index in the payloads array.
XXX result is actually not a global index. We (ab)use the Sym type
so we don't need conversion for accessing bitmaps.
func (l *Loader) extIndex(i Sym) Sym
getPayload
method
#
getPayload returns a pointer to the extSymPayload struct for an
external symbol if the symbol has a payload. Will panic if the
symbol in question is bogus (zero or not an external sym).
func (l *Loader) getPayload(i Sym) *extSymPayload
growAttrBitmaps
method
#
Insure that reachable bitmap and its siblings have enough size.
func (l *Loader) growAttrBitmaps(reqLen int)
growBitmap
function
#
growBitmap insures that the specified bitmap has enough capacity,
reallocating (doubling the size) if needed.
func growBitmap(reqLen int, b Bitmap) Bitmap
growExtAttrBitmaps
method
#
func (l *Loader) growExtAttrBitmaps()
growOuter
method
#
growOuter grows the slice used to store outer symbol.
func (l *Loader) growOuter(reqLen int)
growValues
method
#
growValues grows the slice used to store symbol values.
func (l *Loader) growValues(reqLen int)
isExtReader
method
#
func (l *Loader) isExtReader(r *oReader) bool
loadObjRefs
function
#
func loadObjRefs(l *Loader, r *oReader, arch *sys.Arch)
newExtSym
method
#
newExtSym creates a new external sym with the specified
name/version.
func (l *Loader) newExtSym(name string, ver int) Sym
newPayload
method
#
Get a new payload for external symbol, return its index in
the payloads array.
func (l *Loader) newPayload(name string, ver int) int
preloadSyms
method
#
Preload symbols of given kind from an object.
func (st *loadState) preloadSyms(r *oReader, kind int)
relocs
method
#
relocs returns a Relocs object given a local sym index and reader.
func (l *Loader) relocs(r *oReader, li uint32) Relocs
reportMissingBuiltin
method
#
reportMissingBuiltin issues an error in the case where we have a
relocation against a runtime builtin whose definition is not found
when the runtime package is built. The canonical example is
"runtime.racefuncenter" -- currently if you do something like
go build -gcflags=-race myprogram.go
the compiler will insert calls to the builtin runtime.racefuncenter,
but the version of the runtime used for linkage won't actually contain
definitions of that symbol. See issue #42396 for details.
As currently implemented, this is a fatal error. This has drawbacks
in that if there are multiple missing builtins, the error will only
cite the first one. On the plus side, terminating the link here has
advantages in that we won't run the risk of panics or crashes later
on in the linker due to R_CALL relocations with 0-valued target
symbols.
func (l *Loader) reportMissingBuiltin(bsym int, reflib string)
resolve
method
#
Resolve a local symbol reference. Return global index.
func (l *Loader) resolve(r *oReader, s goobj.SymRef) Sym
setUintXX
method
#
func (sb *SymbolBuilder) setUintXX(arch *sys.Arch, off int64, v uint64, wid int64) int64
toGlobal
method
#
Convert a local index to a global index.
func (l *Loader) toGlobal(r *oReader, i uint32) Sym
toLocal
method
#
Convert a global index to a local index.
func (l *Loader) toLocal(i Sym) (*oReader, uint32)
topLevelSym
function
#
topLevelSym tests a symbol name and kind to determine whether
the symbol first class sym (participating in the link) or is an
anonymous aux or sub-symbol containing some sub-part or payload of
another symbol.
func topLevelSym(sname string, skind sym.SymKind) bool