Documentation ¶
Index ¶
- Constants
- func GenAddAddrPlusFunc(internalExec bool) func(s *SymbolBuilder, arch *sys.Arch, tgt Sym, add int64) int64
- type Aux
- type Bitmap
- type ErrorReporter
- type ExtReloc
- type FuncInfo
- func (fi *FuncInfo) Args() int
- func (fi *FuncInfo) File(k int) goobj.CUFileIndex
- func (fi *FuncInfo) FuncFlag() objabi.FuncFlag
- func (fi *FuncInfo) FuncID() objabi.FuncID
- func (fi *FuncInfo) Funcdata(syms []Sym) []Sym
- func (fi *FuncInfo) Funcdataoff(k int) int64
- func (fi *FuncInfo) InlTree(k int) InlTreeNode
- func (fi *FuncInfo) Locals() int
- func (fi *FuncInfo) NumFile() uint32
- func (fi *FuncInfo) NumFuncdataoff() uint32
- func (fi *FuncInfo) NumInlTree() uint32
- func (fi *FuncInfo) Pcdata() []Sym
- func (fi *FuncInfo) Pcfile() Sym
- func (fi *FuncInfo) Pcinline() Sym
- func (fi *FuncInfo) Pcline() Sym
- func (fi *FuncInfo) Pcsp() Sym
- func (fi *FuncInfo) Preload()
- func (fi *FuncInfo) TopFrame() bool
- func (fi *FuncInfo) Valid() bool
- type InlTreeNode
- type Loader
- func (l *Loader) AddCgoExport(s Sym)
- func (l *Loader) AddInteriorSym(container Sym, interior Sym)
- func (l *Loader) AddToSymValue(i Sym, val int64)
- func (l *Loader) AssignTextSymbolOrder(libs []*sym.Library, intlibs []bool, extsyms []Sym) []Sym
- func (l *Loader) AttrCgoExport(i Sym) bool
- func (l *Loader) AttrCgoExportDynamic(i Sym) bool
- func (l *Loader) AttrCgoExportStatic(i Sym) bool
- func (l *Loader) AttrDuplicateOK(i Sym) bool
- func (l *Loader) AttrExternal(i Sym) bool
- func (l *Loader) AttrLocal(i Sym) bool
- func (l *Loader) AttrNotInSymbolTable(i Sym) bool
- func (l *Loader) AttrOnList(i Sym) bool
- func (l *Loader) AttrReachable(i Sym) bool
- func (l *Loader) AttrReadOnly(i Sym) bool
- func (l *Loader) AttrShared(i Sym) bool
- func (l *Loader) AttrSpecial(i Sym) bool
- func (l *Loader) AttrSubSymbol(i Sym) bool
- func (l *Loader) AttrUsedInIface(i Sym) bool
- func (l *Loader) AttrVisibilityHidden(i Sym) bool
- func (l *Loader) Aux(i Sym, j int) Aux
- func (l *Loader) CopyAttributes(src Sym, dst Sym)
- func (l *Loader) CopySym(src, dst Sym)
- func (l *Loader) CreateExtSym(name string, ver int) Sym
- func (l *Loader) CreateStaticSym(name string) Sym
- func (l *Loader) CreateSymForUpdate(name string, version int) *SymbolBuilder
- func (l *Loader) Data(i Sym) []byte
- func (l *Loader) Dump()
- func (l *Loader) DynidSyms() []Sym
- func (l *Loader) Errorf(s Sym, format string, args ...interface{})
- func (l *Loader) FreeData(i Sym)
- func (l *Loader) FreeSym(i Sym)
- func (l *Loader) FuncInfo(i Sym) FuncInfo
- func (l *Loader) GetErrorReporter() *ErrorReporter
- func (l *Loader) GetFuncDwarfAuxSyms(fnSymIdx Sym) (auxDwarfInfo, auxDwarfLoc, auxDwarfRanges, auxDwarfLines Sym)
- func (l *Loader) InitReachable()
- func (l *Loader) IsDeferReturnTramp(i Sym) bool
- func (l *Loader) IsExternal(i Sym) bool
- func (l *Loader) IsFileLocal(i Sym) bool
- func (l *Loader) IsFromAssembly(i Sym) bool
- func (l *Loader) IsGeneratedSym(i Sym) bool
- func (l *Loader) IsGoType(i Sym) bool
- func (l *Loader) IsItab(i Sym) bool
- func (l *Loader) IsNoSplit(i Sym) bool
- func (l *Loader) IsReflectMethod(i Sym) bool
- func (l *Loader) IsTypelink(i Sym) bool
- func (l *Loader) LoadSyms(arch *sys.Arch)
- func (l *Loader) Lookup(name string, ver int) Sym
- func (l *Loader) LookupOrCreateCgoExport(name string, ver int) Sym
- func (l *Loader) LookupOrCreateSym(name string, ver int) Sym
- func (l *Loader) MakeSymbolBuilder(name string) *SymbolBuilder
- func (l *Loader) MakeSymbolUpdater(symIdx Sym) *SymbolBuilder
- func (l *Loader) NAux(i Sym) int
- func (l *Loader) NDef() int
- func (l *Loader) NReachableSym() int
- func (l *Loader) NStrictDupMsgs() int
- func (l *Loader) NSym() int
- func (l *Loader) NewSection() *sym.Section
- func (l *Loader) OuterSym(i Sym) Sym
- func (l *Loader) Preload(localSymVersion int, f *bio.Reader, lib *sym.Library, ...) goobj.FingerprintType
- func (l *Loader) RawSymName(i Sym) string
- func (l *Loader) RelocVariant(s Sym, ri int) sym.RelocVariant
- func (l *Loader) Relocs(i Sym) Relocs
- func (l *Loader) ResolveABIAlias(s Sym) Sym
- func (l *Loader) SetAttrCgoExportDynamic(i Sym, v bool)
- func (l *Loader) SetAttrCgoExportStatic(i Sym, v bool)
- func (l *Loader) SetAttrDuplicateOK(i Sym, v bool)
- func (l *Loader) SetAttrExternal(i Sym, v bool)
- func (l *Loader) SetAttrLocal(i Sym, v bool)
- func (l *Loader) SetAttrNotInSymbolTable(i Sym, v bool)
- func (l *Loader) SetAttrOnList(i Sym, v bool)
- func (l *Loader) SetAttrReachable(i Sym, v bool)
- func (l *Loader) SetAttrReadOnly(i Sym, v bool)
- func (l *Loader) SetAttrShared(i Sym, v bool)
- func (l *Loader) SetAttrSpecial(i Sym, v bool)
- func (l *Loader) SetAttrUsedInIface(i Sym, v bool)
- func (l *Loader) SetAttrVisibilityHidden(i Sym, v bool)
- func (l *Loader) SetCarrierSym(s Sym, c Sym)
- func (l *Loader) SetGot(i Sym, v int32)
- func (l *Loader) SetIsDeferReturnTramp(i Sym, v bool)
- func (l *Loader) SetIsGeneratedSym(i Sym, v bool)
- func (l *Loader) SetPlt(i Sym, v int32)
- func (l *Loader) SetRelocVariant(s Sym, ri int, v sym.RelocVariant)
- func (l *Loader) SetSymAlign(i Sym, align int32)
- func (l *Loader) SetSymDynid(i Sym, val int32)
- func (l *Loader) SetSymDynimplib(i Sym, value string)
- func (l *Loader) SetSymDynimpvers(i Sym, value string)
- func (l *Loader) SetSymElfSym(i Sym, es int32)
- func (l *Loader) SetSymElfType(i Sym, et elf.SymType)
- func (l *Loader) SetSymExtname(i Sym, value string)
- func (l *Loader) SetSymLocalElfSym(i Sym, es int32)
- func (l *Loader) SetSymLocalentry(i Sym, value uint8)
- func (l *Loader) SetSymPkg(i Sym, pkg string)
- func (l *Loader) SetSymSect(i Sym, sect *sym.Section)
- func (l *Loader) SetSymValue(i Sym, val int64)
- func (l *Loader) SortSub(s Sym) Sym
- func (l *Loader) SortSyms(ss []Sym)
- func (l *Loader) Stat() string
- func (l *Loader) SubSym(i Sym) Sym
- func (l *Loader) SymAddr(i Sym) int64
- func (l *Loader) SymAlign(i Sym) int32
- func (l *Loader) SymAttr(i Sym) uint8
- func (l *Loader) SymDynid(i Sym) int32
- func (l *Loader) SymDynimplib(i Sym) string
- func (l *Loader) SymDynimpvers(i Sym) string
- func (l *Loader) SymElfSym(i Sym) int32
- func (l *Loader) SymElfType(i Sym) elf.SymType
- func (l *Loader) SymExtname(i Sym) string
- func (l *Loader) SymGoType(i Sym) Sym
- func (l *Loader) SymGot(s Sym) int32
- func (l *Loader) SymLocalElfSym(i Sym) int32
- func (l *Loader) SymLocalentry(i Sym) uint8
- func (l *Loader) SymName(i Sym) string
- func (l *Loader) SymNameLen(i Sym) int
- func (l *Loader) SymPkg(i Sym) string
- func (l *Loader) SymPlt(s Sym) int32
- func (l *Loader) SymSect(i Sym) *sym.Section
- func (l *Loader) SymSize(i Sym) int64
- func (l *Loader) SymType(i Sym) sym.SymKind
- func (l *Loader) SymUnit(i Sym) *sym.CompilationUnit
- func (l *Loader) SymValue(i Sym) int64
- func (l *Loader) SymVersion(i Sym) int
- func (l *Loader) TopLevelSym(s Sym) bool
- func (l *Loader) UndefinedRelocTargets(limit int) []Sym
- type Reloc
- type Relocs
- type Sym
- type SymbolBuilder
- func (sb *SymbolBuilder) AddAddr(arch *sys.Arch, tgt Sym) int64
- func (sb *SymbolBuilder) AddAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64
- func (sb *SymbolBuilder) AddAddrPlus4(arch *sys.Arch, tgt Sym, add int64) int64
- func (sb *SymbolBuilder) AddBytes(data []byte)
- func (sb *SymbolBuilder) AddCURelativeAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64
- func (sb *SymbolBuilder) AddInteriorSym(sub Sym)
- func (sb *SymbolBuilder) AddPCRelPlus(arch *sys.Arch, tgt Sym, add int64) int64
- func (sb *SymbolBuilder) AddRel(typ objabi.RelocType) (Reloc, int)
- func (sb *SymbolBuilder) AddRelocs(n int) Relocs
- func (sb *SymbolBuilder) AddSize(arch *sys.Arch, tgt Sym) int64
- func (sb *SymbolBuilder) AddStringAt(off int64, str string) int64
- func (sb *SymbolBuilder) AddSymRef(arch *sys.Arch, tgt Sym, add int64, typ objabi.RelocType, rsize int) int64
- func (sb *SymbolBuilder) AddUint(arch *sys.Arch, v uint64) int64
- func (sb *SymbolBuilder) AddUint16(arch *sys.Arch, v uint16) int64
- func (sb *SymbolBuilder) AddUint32(arch *sys.Arch, v uint32) int64
- func (sb *SymbolBuilder) AddUint64(arch *sys.Arch, v uint64) int64
- func (sb *SymbolBuilder) AddUint8(v uint8) int64
- func (sb *SymbolBuilder) AddUintXX(arch *sys.Arch, v uint64, wid int) int64
- func (sb *SymbolBuilder) AddUleb(v uint64)
- func (sb *SymbolBuilder) Addstring(str string) int64
- func (sb *SymbolBuilder) Align() int32
- func (sb *SymbolBuilder) CgoExportDynamic() bool
- func (sb *SymbolBuilder) Data() []byte
- func (sb *SymbolBuilder) DuplicateOK() bool
- func (sb *SymbolBuilder) Dynimplib() string
- func (sb *SymbolBuilder) Dynimpvers() string
- func (sb *SymbolBuilder) External() bool
- func (sb *SymbolBuilder) Extname() string
- func (sb *SymbolBuilder) GoType() Sym
- func (ms SymbolBuilder) Grow(siz int64)
- func (sb *SymbolBuilder) Localentry() uint8
- func (sb *SymbolBuilder) MakeWritable()
- func (sb *SymbolBuilder) Name() string
- func (sb *SymbolBuilder) OnList() bool
- func (sb *SymbolBuilder) Outer() Sym
- func (sb *SymbolBuilder) Reachable() bool
- func (sb *SymbolBuilder) ReadOnly() bool
- func (sb *SymbolBuilder) Relocs() Relocs
- func (sb *SymbolBuilder) ResetRelocs()
- func (sb *SymbolBuilder) Sect() *sym.Section
- func (sb *SymbolBuilder) SetAddr(arch *sys.Arch, off int64, tgt Sym) int64
- func (sb *SymbolBuilder) SetAddrPlus(arch *sys.Arch, off int64, tgt Sym, add int64) int64
- func (sb *SymbolBuilder) SetAlign(align int32)
- func (sb *SymbolBuilder) SetBytesAt(off int64, b []byte) int64
- func (sb *SymbolBuilder) SetData(data []byte)
- func (sb *SymbolBuilder) SetDuplicateOK(v bool)
- func (sb *SymbolBuilder) SetDynimplib(value string)
- func (sb *SymbolBuilder) SetDynimpvers(value string)
- func (sb *SymbolBuilder) SetExternal(v bool)
- func (sb *SymbolBuilder) SetExtname(value string)
- func (sb *SymbolBuilder) SetGot(value int32)
- func (sb *SymbolBuilder) SetLocal(value bool)
- func (sb *SymbolBuilder) SetLocalentry(value uint8)
- func (sb *SymbolBuilder) SetNotInSymbolTable(value bool)
- func (sb *SymbolBuilder) SetOnList(v bool)
- func (sb *SymbolBuilder) SetPlt(value int32)
- func (sb *SymbolBuilder) SetReachable(v bool)
- func (sb *SymbolBuilder) SetReadOnly(v bool)
- func (sb *SymbolBuilder) SetRelocAdd(i int, a int64)
- func (sb *SymbolBuilder) SetRelocSym(i int, tgt Sym)
- func (sb *SymbolBuilder) SetRelocType(i int, t objabi.RelocType)
- func (sb *SymbolBuilder) SetSect(sect *sym.Section)
- func (sb *SymbolBuilder) SetSize(size int64)
- func (sb *SymbolBuilder) SetSpecial(value bool)
- func (sb *SymbolBuilder) SetType(kind sym.SymKind)
- func (sb *SymbolBuilder) SetUint(arch *sys.Arch, r int64, v uint64) int64
- func (sb *SymbolBuilder) SetUint16(arch *sys.Arch, r int64, v uint16) int64
- func (sb *SymbolBuilder) SetUint32(arch *sys.Arch, r int64, v uint32) int64
- func (sb *SymbolBuilder) SetUint8(arch *sys.Arch, r int64, v uint8) int64
- func (sb *SymbolBuilder) SetUintptr(arch *sys.Arch, r int64, v uintptr) int64
- func (sb *SymbolBuilder) SetValue(v int64)
- func (sb *SymbolBuilder) SetVisibilityHidden(value bool)
- func (sb *SymbolBuilder) Size() int64
- func (sb *SymbolBuilder) SortRelocs()
- func (sb *SymbolBuilder) SortSub()
- func (sb *SymbolBuilder) Sub() Sym
- func (sb *SymbolBuilder) SubSym() Sym
- func (sb *SymbolBuilder) Sym() Sym
- func (sb *SymbolBuilder) Type() sym.SymKind
- func (sb *SymbolBuilder) Value() int64
- func (sb *SymbolBuilder) Version() int
- func (sb *SymbolBuilder) VisibilityHidden() bool
Constants ¶
const ( // Loader.flags FlagStrictDups = 1 << iota FlagUseABIAlias )
Variables ¶
This section is empty.
Functions ¶
func GenAddAddrPlusFunc ¶ added in go1.15
func GenAddAddrPlusFunc(internalExec bool) func(s *SymbolBuilder, arch *sys.Arch, tgt Sym, add int64) int64
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.
Types ¶
type Bitmap ¶ added in go1.15
type Bitmap []uint32
func MakeBitmap ¶ added in go1.15
type ErrorReporter ¶ added in go1.15
type ErrorReporter struct { AfterErrorAction func() // contains filtered or unexported fields }
ErrorReporter is a helper class for reporting errors.
func (*ErrorReporter) Errorf ¶ added in go1.15
func (reporter *ErrorReporter) Errorf(s Sym, format string, args ...interface{})
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.
type FuncInfo ¶ added in go1.15
type FuncInfo struct {
// contains filtered or unexported fields
}
FuncInfo provides hooks to access goobj.FuncInfo in the objects.
func (*FuncInfo) Funcdataoff ¶ added in go1.15
func (*FuncInfo) InlTree ¶ added in go1.15
func (fi *FuncInfo) InlTree(k int) InlTreeNode
func (*FuncInfo) NumFuncdataoff ¶ added in go1.15
func (*FuncInfo) NumInlTree ¶ added in go1.15
func (*FuncInfo) Preload ¶ added in go1.15
func (fi *FuncInfo) Preload()
Preload has to be called prior to invoking the various methods below related to pcdata, funcdataoff, files, and inltree nodes.
type InlTreeNode ¶ added in go1.15
type Loader ¶
type Loader struct { // Used to implement field tracking; created during deadcode if // field tracking is enabled. Reachparent[K] contains the index of // the symbol that triggered the marking of symbol K as live. Reachparent []Sym // CgoExports records cgo-exported symbols by SymName. CgoExports map[string]Sym // contains filtered or unexported fields }
A Loader loads new object files and resolves indexed symbol references.
Notes on the layout of global symbol index space:
- Go object files are read before host object files; each Go object read adds its defined package symbols to the global index space. Nonpackage symbols are not yet added.
- In loader.LoadNonpkgSyms, add non-package defined symbols and references in all object files to the global index space.
- Host object file loading happens; the host object loader does a name/version lookup for each symbol it finds; this can wind up extending the external symbol index space range. The host object loader stores symbol payloads in loader.payloads using SymbolBuilder.
- Each symbol gets a unique global index. For duplicated and overwriting/overwritten symbols, the second (or later) appearance of the symbol gets the same global index as the first appearance.
func NewLoader ¶
func NewLoader(flags uint32, elfsetstring elfsetstringFunc, reporter *ErrorReporter) *Loader
func (*Loader) AddCgoExport ¶ added in go1.17
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 (*Loader) AddInteriorSym ¶ added in go1.16
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 (*Loader) AddToSymValue ¶ added in go1.15
AddToSymValue adds to the value of the i-th symbol. i is the global index.
func (*Loader) AssignTextSymbolOrder ¶ added in go1.15
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 (*Loader) AttrCgoExport ¶ added in go1.15
func (*Loader) AttrCgoExportDynamic ¶ added in go1.15
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 (*Loader) AttrCgoExportStatic ¶ added in go1.15
AttrCgoExportStatic returns true for a symbol that has been specially marked via the "cgo_export_static" directive written by cgo.
func (*Loader) AttrDuplicateOK ¶ added in go1.15
AttrDuplicateOK returns true for a symbol that can be present in multiple object files.
func (*Loader) AttrExternal ¶ added in go1.15
AttrExternal returns true for function symbols loaded from host object files.
func (*Loader) AttrLocal ¶ added in go1.15
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 (*Loader) AttrNotInSymbolTable ¶ added in go1.15
AttrNotInSymbolTable returns true for symbols that should not be added to the symbol table of the final generated load module.
func (*Loader) AttrOnList ¶ added in go1.15
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 (*Loader) AttrReachable ¶ added in go1.15
AttrReachable returns true for symbols that are transitively referenced from the entry points. Unreachable symbols are not written to the output.
func (*Loader) AttrReadOnly ¶ added in go1.15
AttrReadOnly returns true for a symbol whose underlying data is stored via a read-only mmap.
func (*Loader) AttrShared ¶ added in go1.15
AttrShared returns true for symbols compiled with the -shared option.
func (*Loader) AttrSpecial ¶ added in go1.15
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 (*Loader) AttrSubSymbol ¶ added in go1.15
func (*Loader) AttrUsedInIface ¶ added in go1.16
AttrUsedInIface returns true for a type symbol that is used in an interface.
func (*Loader) AttrVisibilityHidden ¶ added in go1.15
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 (*Loader) Aux ¶ added in go1.16
Returns the "handle" to the j-th aux symbol of the i-th symbol.
func (*Loader) CopyAttributes ¶ added in go1.15
CopyAttributes copies over all of the attributes of symbol 'src' to symbol 'dst'.
func (*Loader) CopySym ¶ added in go1.15
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 (*Loader) CreateExtSym ¶ added in go1.15
CreateExtSym creates a new external symbol with the specified name without adding it to any lookup tables, returning a Sym index for it.
func (*Loader) CreateStaticSym ¶ added in go1.15
CreateStaticSym creates a new static symbol with the specified name without adding it to any lookup tables, returning a Sym index for it.
func (*Loader) CreateSymForUpdate ¶ added in go1.15
func (l *Loader) CreateSymForUpdate(name string, version int) *SymbolBuilder
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 (*Loader) DynidSyms ¶ added in go1.15
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 (*Loader) Errorf ¶ added in go1.15
Errorf method logs an error message. See ErrorReporter.Errorf for details.
func (*Loader) FreeData ¶ added in go1.16
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 (*Loader) GetErrorReporter ¶ added in go1.15
func (l *Loader) GetErrorReporter() *ErrorReporter
GetErrorReporter returns the loader's associated error reporter.
func (*Loader) GetFuncDwarfAuxSyms ¶ added in go1.15
func (l *Loader) GetFuncDwarfAuxSyms(fnSymIdx Sym) (auxDwarfInfo, auxDwarfLoc, auxDwarfRanges, auxDwarfLines Sym)
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 (*Loader) InitReachable ¶
func (l *Loader) InitReachable()
Initialize Reachable bitmap and its siblings for running deadcode pass.
func (*Loader) IsDeferReturnTramp ¶ added in go1.15
Return whether this is a trampoline of a deferreturn call.
func (*Loader) IsExternal ¶
func (*Loader) IsFileLocal ¶ added in go1.16
func (*Loader) IsFromAssembly ¶ added in go1.16
IsFromAssembly returns true if this symbol is derived from an object file generated by the Go assembler.
func (*Loader) IsGeneratedSym ¶ added in go1.16
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 (*Loader) IsReflectMethod ¶
Returns whether the i-th symbol has ReflectMethod attribute set.
func (*Loader) IsTypelink ¶ added in go1.15
Returns whether this symbol should be included in typelink.
func (*Loader) LoadSyms ¶ added in go1.16
Add syms, hashed (content-addressable) symbols, non-package symbols, and references to external symbols (which are always named).
func (*Loader) Lookup ¶
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 (*Loader) LookupOrCreateCgoExport ¶ added in go1.17
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 (*Loader) LookupOrCreateSym ¶ added in go1.15
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 (*Loader) MakeSymbolBuilder ¶ added in go1.15
func (l *Loader) MakeSymbolBuilder(name string) *SymbolBuilder
MakeSymbolBuilder creates a symbol builder for use in constructing an entirely new symbol.
func (*Loader) MakeSymbolUpdater ¶ added in go1.15
func (l *Loader) MakeSymbolUpdater(symIdx Sym) *SymbolBuilder
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 (*Loader) NReachableSym ¶ added in go1.15
Number of reachable symbols.
func (*Loader) NStrictDupMsgs ¶
func (*Loader) NewSection ¶ added in go1.15
NewSection creates a new (output) section.
func (*Loader) Preload ¶
func (l *Loader) Preload(localSymVersion int, f *bio.Reader, lib *sym.Library, unit *sym.CompilationUnit, length int64) goobj.FingerprintType
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 (*Loader) RawSymName ¶
Returns the raw (unpatched) name of the i-th symbol.
func (*Loader) RelocVariant ¶ added in go1.15
func (l *Loader) RelocVariant(s Sym, ri int) sym.RelocVariant
RelocVariant returns the 'variant' property of a relocation on some specific symbol.
func (*Loader) ResolveABIAlias ¶ added in go1.15
ResolveABIAlias given a symbol returns the ABI alias target of that symbol. If the sym in question is not an alias, the sym itself is returned.
func (*Loader) SetAttrCgoExportDynamic ¶ added in go1.15
SetAttrCgoExportDynamic sets the "cgo_export_dynamic" for a symbol (see AttrCgoExportDynamic).
func (*Loader) SetAttrCgoExportStatic ¶ added in go1.15
SetAttrCgoExportStatic sets the "cgo_export_static" for a symbol (see AttrCgoExportStatic).
func (*Loader) SetAttrDuplicateOK ¶ added in go1.15
SetAttrDuplicateOK sets the "duplicate OK" property for an external symbol (see AttrDuplicateOK).
func (*Loader) SetAttrExternal ¶ added in go1.15
SetAttrExternal sets the "external" property for an host object symbol (see AttrExternal).
func (*Loader) SetAttrLocal ¶ added in go1.15
SetAttrLocal the "local" property for a symbol (see AttrLocal above).
func (*Loader) SetAttrNotInSymbolTable ¶ added in go1.15
SetAttrNotInSymbolTable the "not in symtab" property for a symbol (see AttrNotInSymbolTable above).
func (*Loader) SetAttrOnList ¶ added in go1.15
SetAttrOnList sets the "on list" property for a symbol (see AttrOnList).
func (*Loader) SetAttrReachable ¶ added in go1.15
SetAttrReachable sets the reachability property for a symbol (see AttrReachable).
func (*Loader) SetAttrReadOnly ¶ added in go1.15
SetAttrReadOnly sets the "data is read only" property for a symbol (see AttrReadOnly).
func (*Loader) SetAttrShared ¶ added in go1.15
SetAttrShared sets the "shared" property for an external symbol (see AttrShared).
func (*Loader) SetAttrSpecial ¶ added in go1.15
SetAttrSpecial sets the "special" property for a symbol (see AttrSpecial).
func (*Loader) SetAttrUsedInIface ¶ added in go1.16
func (*Loader) SetAttrVisibilityHidden ¶ added in go1.15
SetAttrVisibilityHidden sets the "hidden visibility" property for a symbol (see AttrVisibilityHidden).
func (*Loader) SetCarrierSym ¶ added in go1.16
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 (*Loader) SetIsDeferReturnTramp ¶ added in go1.15
Set that i is a trampoline of a deferreturn call.
func (*Loader) SetIsGeneratedSym ¶ added in go1.16
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 (*Loader) SetRelocVariant ¶ added in go1.15
func (l *Loader) SetRelocVariant(s Sym, ri int, v sym.RelocVariant)
SetRelocVariant sets the 'variant' property of a relocation on some specific symbol.
func (*Loader) SetSymAlign ¶ added in go1.15
SetSymAlign sets the alignment for a symbol.
func (*Loader) SetSymDynid ¶ added in go1.15
SetSymDynid sets the "dynid" property for a symbol.
func (*Loader) SetSymDynimplib ¶ added in go1.15
SetSymDynimplib sets the "dynimplib" attribute for a symbol.
func (*Loader) SetSymDynimpvers ¶ added in go1.15
SetSymDynimpvers sets the "dynimpvers" attribute for a symbol.
func (*Loader) SetSymElfSym ¶ added in go1.15
SetSymElfSym sets the elf symbol index for a symbol.
func (*Loader) SetSymElfType ¶ added in go1.15
SetSymElfType sets the elf type attribute for a symbol.
func (*Loader) SetSymExtname ¶ added in go1.15
SetSymExtname sets the "extname" attribute for a symbol.
func (*Loader) SetSymLocalElfSym ¶ added in go1.15
SetSymLocalElfSym sets the "local" elf symbol index for a symbol.
func (*Loader) SetSymLocalentry ¶ added in go1.15
SetSymLocalentry sets the "local entry" attribute for a symbol.
func (*Loader) SetSymPkg ¶ added in go1.15
SetSymPkg sets the package/library for a symbol. This is needed mainly for external symbols, specifically those imported from shared libraries.
func (*Loader) SetSymSect ¶ added in go1.15
SetSymSect sets the section of the i-th symbol. i is global index.
func (*Loader) SetSymValue ¶ added in go1.15
SetSymValue sets the value of the i-th symbol. i is global index.
func (*Loader) SortSub ¶ added in go1.15
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 (*Loader) SymAddr ¶ added in go1.15
SymAddr checks that a symbol is reachable, and returns its value.
func (*Loader) SymDynid ¶ added in go1.15
SymDynid returns the "dynid" property for the specified symbol.
func (*Loader) SymDynimplib ¶ added in go1.15
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 (*Loader) SymDynimpvers ¶ added in go1.15
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 (*Loader) SymElfSym ¶ added in go1.15
SymElfSym returns the ELF symbol index for a given loader symbol, assigned during ELF symtab generation.
func (*Loader) SymElfType ¶ added in go1.15
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 (*Loader) SymExtname ¶ added in go1.15
SymExtname returns the "extname" value for the specified symbol.
func (*Loader) SymGoType ¶ added in go1.15
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 (*Loader) SymLocalElfSym ¶ added in go1.15
SymLocalElfSym returns the "local" ELF symbol index for a given loader symbol, assigned during ELF symtab generation.
func (*Loader) SymLocalentry ¶ added in go1.15
SymLocalentry returns the "local entry" value for the specified symbol.
func (*Loader) SymNameLen ¶ added in go1.16
SymNameLen returns the length of the symbol name, trying hard not to load the name.
func (*Loader) SymPkg ¶ added in go1.15
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 (*Loader) SymSect ¶ added in go1.15
SymValue returns the section of the i-th symbol. i is global index.
func (*Loader) SymUnit ¶ added in go1.15
func (l *Loader) SymUnit(i Sym) *sym.CompilationUnit
SymUnit returns the compilation unit for a given symbol (which will typically be nil for external or linker-manufactured symbols).
func (*Loader) SymValue ¶ added in go1.15
SymValue returns the value of the i-th symbol. i is global index.
func (*Loader) SymVersion ¶ added in go1.15
Returns the version of the i-th symbol.
func (*Loader) TopLevelSym ¶ added in go1.15
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 (*Loader) UndefinedRelocTargets ¶ added in go1.15
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 list of loader.Sym's corresponding to the undefined cross-refs. The "limit" param controls the maximum number of results returned; if "limit" is -1, then all undefs are returned.
type Relocs ¶
type Relocs struct {
// contains filtered or unexported fields
}
Relocs encapsulates the set of relocations on a given symbol; an instance of this type is returned by the Loader Relocs() method.
type Sym ¶
type Sym int
Sym encapsulates a global symbol index, used to identify a specific Go symbol. The 0-valued Sym is corresponds to an invalid symbol.
type SymbolBuilder ¶ added in go1.15
type SymbolBuilder struct {
// contains filtered or unexported fields
}
SymbolBuilder is a helper designed to help with the construction of new symbol contents.
func (*SymbolBuilder) AddAddr ¶ added in go1.15
func (sb *SymbolBuilder) AddAddr(arch *sys.Arch, tgt Sym) int64
func (*SymbolBuilder) AddAddrPlus ¶ added in go1.15
func (*SymbolBuilder) AddAddrPlus4 ¶ added in go1.15
func (*SymbolBuilder) AddBytes ¶ added in go1.15
func (sb *SymbolBuilder) AddBytes(data []byte)
func (*SymbolBuilder) AddCURelativeAddrPlus ¶ added in go1.15
func (*SymbolBuilder) AddInteriorSym ¶ added in go1.16
func (sb *SymbolBuilder) AddInteriorSym(sub Sym)
func (*SymbolBuilder) AddPCRelPlus ¶ added in go1.15
func (*SymbolBuilder) AddRel ¶ added in go1.15
func (sb *SymbolBuilder) AddRel(typ objabi.RelocType) (Reloc, int)
Add a relocation with given type, return its handle and index (to set other fields).
func (*SymbolBuilder) AddRelocs ¶ added in go1.15
func (sb *SymbolBuilder) AddRelocs(n int) Relocs
Add n relocations, return a handle to the relocations.
func (*SymbolBuilder) AddSize ¶ added in go1.15
func (sb *SymbolBuilder) AddSize(arch *sys.Arch, tgt Sym) int64
func (*SymbolBuilder) AddStringAt ¶ added in go1.16
func (sb *SymbolBuilder) AddStringAt(off int64, str string) int64
func (*SymbolBuilder) AddSymRef ¶ added in go1.15
func (sb *SymbolBuilder) AddSymRef(arch *sys.Arch, tgt Sym, add int64, typ objabi.RelocType, rsize int) int64
Add a symbol reference (relocation) with given type, addend, and size (the most generic form).
func (*SymbolBuilder) AddUint ¶ added in go1.15
func (sb *SymbolBuilder) AddUint(arch *sys.Arch, v uint64) int64
func (*SymbolBuilder) AddUint16 ¶ added in go1.15
func (sb *SymbolBuilder) AddUint16(arch *sys.Arch, v uint16) int64
func (*SymbolBuilder) AddUint32 ¶ added in go1.15
func (sb *SymbolBuilder) AddUint32(arch *sys.Arch, v uint32) int64
func (*SymbolBuilder) AddUint64 ¶ added in go1.15
func (sb *SymbolBuilder) AddUint64(arch *sys.Arch, v uint64) int64
func (*SymbolBuilder) AddUint8 ¶ added in go1.15
func (sb *SymbolBuilder) AddUint8(v uint8) int64
func (*SymbolBuilder) AddUleb ¶ added in go1.16
func (sb *SymbolBuilder) AddUleb(v uint64)
func (*SymbolBuilder) Addstring ¶ added in go1.15
func (sb *SymbolBuilder) Addstring(str string) int64
func (*SymbolBuilder) Align ¶ added in go1.15
func (sb *SymbolBuilder) Align() int32
func (*SymbolBuilder) CgoExportDynamic ¶ added in go1.15
func (sb *SymbolBuilder) CgoExportDynamic() bool
func (*SymbolBuilder) Data ¶ added in go1.15
func (sb *SymbolBuilder) Data() []byte
func (*SymbolBuilder) DuplicateOK ¶ added in go1.15
func (sb *SymbolBuilder) DuplicateOK() bool
func (*SymbolBuilder) Dynimplib ¶ added in go1.15
func (sb *SymbolBuilder) Dynimplib() string
func (*SymbolBuilder) Dynimpvers ¶ added in go1.15
func (sb *SymbolBuilder) Dynimpvers() string
func (*SymbolBuilder) External ¶ added in go1.15
func (sb *SymbolBuilder) External() bool
func (*SymbolBuilder) Extname ¶ added in go1.15
func (sb *SymbolBuilder) Extname() string
func (*SymbolBuilder) GoType ¶ added in go1.15
func (sb *SymbolBuilder) GoType() Sym
func (*SymbolBuilder) Localentry ¶ added in go1.15
func (sb *SymbolBuilder) Localentry() uint8
func (*SymbolBuilder) MakeWritable ¶ added in go1.15
func (sb *SymbolBuilder) MakeWritable()
func (*SymbolBuilder) Name ¶ added in go1.15
func (sb *SymbolBuilder) Name() string
func (*SymbolBuilder) OnList ¶ added in go1.15
func (sb *SymbolBuilder) OnList() bool
func (*SymbolBuilder) Outer ¶ added in go1.15
func (sb *SymbolBuilder) Outer() Sym
func (*SymbolBuilder) Reachable ¶ added in go1.15
func (sb *SymbolBuilder) Reachable() bool
func (*SymbolBuilder) ReadOnly ¶ added in go1.15
func (sb *SymbolBuilder) ReadOnly() bool
func (*SymbolBuilder) Relocs ¶ added in go1.15
func (sb *SymbolBuilder) Relocs() Relocs
func (*SymbolBuilder) ResetRelocs ¶ added in go1.16
func (sb *SymbolBuilder) ResetRelocs()
ResetRelocs removes all relocations on this symbol.
func (*SymbolBuilder) Sect ¶ added in go1.15
func (sb *SymbolBuilder) Sect() *sym.Section
func (*SymbolBuilder) SetAddrPlus ¶ added in go1.15
func (*SymbolBuilder) SetAlign ¶ added in go1.15
func (sb *SymbolBuilder) SetAlign(align int32)
func (*SymbolBuilder) SetBytesAt ¶ added in go1.16
func (sb *SymbolBuilder) SetBytesAt(off int64, b []byte) int64
func (*SymbolBuilder) SetData ¶ added in go1.15
func (sb *SymbolBuilder) SetData(data []byte)
func (*SymbolBuilder) SetDuplicateOK ¶ added in go1.15
func (sb *SymbolBuilder) SetDuplicateOK(v bool)
func (*SymbolBuilder) SetDynimplib ¶ added in go1.15
func (sb *SymbolBuilder) SetDynimplib(value string)
func (*SymbolBuilder) SetDynimpvers ¶ added in go1.15
func (sb *SymbolBuilder) SetDynimpvers(value string)
func (*SymbolBuilder) SetExternal ¶ added in go1.15
func (sb *SymbolBuilder) SetExternal(v bool)
func (*SymbolBuilder) SetExtname ¶ added in go1.15
func (sb *SymbolBuilder) SetExtname(value string)
func (*SymbolBuilder) SetGot ¶ added in go1.15
func (sb *SymbolBuilder) SetGot(value int32)
func (*SymbolBuilder) SetLocal ¶ added in go1.15
func (sb *SymbolBuilder) SetLocal(value bool)
func (*SymbolBuilder) SetLocalentry ¶ added in go1.15
func (sb *SymbolBuilder) SetLocalentry(value uint8)
func (*SymbolBuilder) SetNotInSymbolTable ¶ added in go1.15
func (sb *SymbolBuilder) SetNotInSymbolTable(value bool)
func (*SymbolBuilder) SetOnList ¶ added in go1.15
func (sb *SymbolBuilder) SetOnList(v bool)
func (*SymbolBuilder) SetPlt ¶ added in go1.15
func (sb *SymbolBuilder) SetPlt(value int32)
func (*SymbolBuilder) SetReachable ¶ added in go1.15
func (sb *SymbolBuilder) SetReachable(v bool)
func (*SymbolBuilder) SetReadOnly ¶ added in go1.15
func (sb *SymbolBuilder) SetReadOnly(v bool)
func (*SymbolBuilder) SetRelocAdd ¶ added in go1.15
func (sb *SymbolBuilder) SetRelocAdd(i int, a int64)
SetRelocAdd sets the addend of the 'i'-th relocation on this sym to 'a'
func (*SymbolBuilder) SetRelocSym ¶ added in go1.15
func (sb *SymbolBuilder) SetRelocSym(i int, tgt Sym)
SetRelocSym sets the target sym of the 'i'-th relocation on this sym to 's'
func (*SymbolBuilder) SetRelocType ¶ added in go1.15
func (sb *SymbolBuilder) SetRelocType(i int, t objabi.RelocType)
SetRelocType sets the type of the 'i'-th relocation on this sym to 't'
func (*SymbolBuilder) SetSect ¶ added in go1.15
func (sb *SymbolBuilder) SetSect(sect *sym.Section)
func (*SymbolBuilder) SetSize ¶ added in go1.15
func (sb *SymbolBuilder) SetSize(size int64)
func (*SymbolBuilder) SetSpecial ¶ added in go1.15
func (sb *SymbolBuilder) SetSpecial(value bool)
func (*SymbolBuilder) SetType ¶ added in go1.15
func (sb *SymbolBuilder) SetType(kind sym.SymKind)
func (*SymbolBuilder) SetUintptr ¶ added in go1.16
func (*SymbolBuilder) SetValue ¶ added in go1.15
func (sb *SymbolBuilder) SetValue(v int64)
func (*SymbolBuilder) SetVisibilityHidden ¶ added in go1.15
func (sb *SymbolBuilder) SetVisibilityHidden(value bool)
func (*SymbolBuilder) Size ¶ added in go1.15
func (sb *SymbolBuilder) Size() int64
func (*SymbolBuilder) SortRelocs ¶ added in go1.15
func (sb *SymbolBuilder) SortRelocs()
Sort relocations by offset.
func (*SymbolBuilder) SortSub ¶ added in go1.15
func (sb *SymbolBuilder) SortSub()
func (*SymbolBuilder) Sub ¶ added in go1.15
func (sb *SymbolBuilder) Sub() Sym
func (*SymbolBuilder) SubSym ¶ added in go1.15
func (sb *SymbolBuilder) SubSym() Sym
func (*SymbolBuilder) Sym ¶ added in go1.15
func (sb *SymbolBuilder) Sym() Sym
func (*SymbolBuilder) Type ¶ added in go1.15
func (sb *SymbolBuilder) Type() sym.SymKind
func (*SymbolBuilder) Value ¶ added in go1.15
func (sb *SymbolBuilder) Value() int64
func (*SymbolBuilder) Version ¶ added in go1.15
func (sb *SymbolBuilder) Version() int
func (*SymbolBuilder) VisibilityHidden ¶ added in go1.15
func (sb *SymbolBuilder) VisibilityHidden() bool