go: github.com/golang/go/src/cmd/link/internal/loader Index | Files

package loader

import "github.com/golang/go/src/cmd/link/internal/loader"


Package Files

loader.go symbolbuilder.go


const (
    // Loader.flags
    FlagStrictDups = 1 << iota

func GenAddAddrPlusFunc Uses

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.

type Aux2 Uses

type Aux2 struct {
    // contains filtered or unexported fields

Aux2 holds a "handle" to access an aux symbol record from an object file.

func (Aux2) Sym Uses

func (a Aux2) Sym() Sym

type Bitmap Uses

type Bitmap []uint32

func MakeBitmap Uses

func MakeBitmap(n int) Bitmap

func (Bitmap) Count Uses

func (bm Bitmap) Count() int

return the number of bits set.

func (Bitmap) Has Uses

func (bm Bitmap) Has(i Sym) bool

whether the i-th bit is set.

func (Bitmap) Len Uses

func (bm Bitmap) Len() int

return current length of bitmap in bits.

func (Bitmap) Set Uses

func (bm Bitmap) Set(i Sym)

set the i-th bit.

func (Bitmap) Unset Uses

func (bm Bitmap) Unset(i Sym)

unset the i-th bit.

type ErrorReporter Uses

type ErrorReporter struct {
    AfterErrorAction func()
    // contains filtered or unexported fields

ErrorReporter is a helper class for reporting errors.

func (*ErrorReporter) Errorf Uses

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 ExtReloc Uses

type ExtReloc struct {
    Idx  int // index of the original relocation
    Xsym Sym
    Xadd int64

ExtReloc contains the payload for an external relocation.

type ExtRelocView Uses

type ExtRelocView struct {

ExtRelocView is a view of an external relocation. It is intended to be constructed on the fly, such as ExtRelocs.At. It is not the data structure used to store the payload internally.

type ExtRelocs Uses

type ExtRelocs struct {
    // contains filtered or unexported fields

ExtRelocs represents the set of external relocations of a symbol.

func (ExtRelocs) At Uses

func (ers ExtRelocs) At(j int) ExtRelocView

func (ExtRelocs) Count Uses

func (ers ExtRelocs) Count() int

type FuncInfo Uses

type FuncInfo struct {
    // contains filtered or unexported fields

FuncInfo provides hooks to access goobj2.FuncInfo in the objects.

func (*FuncInfo) Args Uses

func (fi *FuncInfo) Args() int

func (*FuncInfo) File Uses

func (fi *FuncInfo) File(k int) Sym

func (*FuncInfo) Funcdata Uses

func (fi *FuncInfo) Funcdata(syms []Sym) []Sym

func (*FuncInfo) Funcdataoff Uses

func (fi *FuncInfo) Funcdataoff(k int) int64

func (*FuncInfo) InlTree Uses

func (fi *FuncInfo) InlTree(k int) InlTreeNode

func (*FuncInfo) Locals Uses

func (fi *FuncInfo) Locals() int

func (*FuncInfo) NumFile Uses

func (fi *FuncInfo) NumFile() uint32

func (*FuncInfo) NumFuncdataoff Uses

func (fi *FuncInfo) NumFuncdataoff() uint32

func (*FuncInfo) NumInlTree Uses

func (fi *FuncInfo) NumInlTree() uint32

func (*FuncInfo) NumPcdata Uses

func (fi *FuncInfo) NumPcdata() uint32

func (*FuncInfo) Pcdata Uses

func (fi *FuncInfo) Pcdata(k int) []byte

func (*FuncInfo) Pcfile Uses

func (fi *FuncInfo) Pcfile() []byte

func (*FuncInfo) Pcinline Uses

func (fi *FuncInfo) Pcinline() []byte

func (*FuncInfo) Pcline Uses

func (fi *FuncInfo) Pcline() []byte

func (*FuncInfo) Pcsp Uses

func (fi *FuncInfo) Pcsp() []byte

func (*FuncInfo) Preload Uses

func (fi *FuncInfo) Preload()

Preload has to be called prior to invoking the various methods below related to pcdata, funcdataoff, files, and inltree nodes.

func (*FuncInfo) Valid Uses

func (fi *FuncInfo) Valid() bool

type InlTreeNode Uses

type InlTreeNode struct {
    Parent   int32
    File     Sym
    Line     int32
    Func     Sym
    ParentPC int32

type Loader Uses

type Loader struct {
    Syms []*sym.Symbol // indexed symbols. XXX we still make sym.Symbol for now.

    // 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

    SymLookup func(name string, ver int) *sym.Symbol
    // 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.

- For now, in loader.LoadFull we convert all symbols (Go + external)

to sym.Symbols.

- At some point (when the wayfront is pushed through all of the

linker), all external symbols will be payload-based, and we can
get rid of the loader.Syms array.

- 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 Uses

func NewLoader(flags uint32, elfsetstring elfsetstringFunc, reporter *ErrorReporter) *Loader

func (*Loader) AddSym Uses

func (l *Loader) AddSym(name string, ver int, r *oReader, li int, kind int, dupok bool, typ sym.SymKind) (Sym, bool)

Add a symbol from an object file, return the global index and whether it is added. If the symbol already exist, it returns the index of that symbol.

func (*Loader) AddToSymValue Uses

func (l *Loader) AddToSymValue(i Sym, val int64)

AddToSymValue adds to the value of the i-th symbol. i is the global index.

func (*Loader) AssignTextSymbolOrder Uses

func (l *Loader) AssignTextSymbolOrder(libs []*sym.Library, intlibs []bool, extsyms []Sym) []Sym

AssignTextSymbolOrder populates the Textp2 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 Uses

func (l *Loader) AttrCgoExport(i Sym) bool

func (*Loader) AttrCgoExportDynamic Uses

func (l *Loader) AttrCgoExportDynamic(i Sym) bool

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 Uses

func (l *Loader) AttrCgoExportStatic(i Sym) bool

AttrCgoExportStatic returns true for a symbol that has been specially marked via the "cgo_export_static" directive written by cgo.

func (*Loader) AttrDuplicateOK Uses

func (l *Loader) AttrDuplicateOK(i Sym) bool

AttrDuplicateOK returns true for a symbol that can be present in multiple object files.

func (*Loader) AttrExternal Uses

func (l *Loader) AttrExternal(i Sym) bool

AttrExternal returns true for function symbols loaded from host object files.

func (*Loader) AttrLocal Uses

func (l *Loader) AttrLocal(i Sym) bool

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 Uses

func (l *Loader) AttrNotInSymbolTable(i Sym) bool

AttrNotInSymbolTable returns true for symbols that should not be added to the symbol table of the final generated load module.

func (*Loader) AttrOnList Uses

func (l *Loader) AttrOnList(i Sym) bool

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 Uses

func (l *Loader) AttrReachable(i Sym) bool

AttrReachable returns true for symbols that are transitively referenced from the entry points. Unreachable symbols are not written to the output.

func (*Loader) AttrReadOnly Uses

func (l *Loader) AttrReadOnly(i Sym) bool

AttrReadOnly returns true for a symbol whose underlying data is stored via a read-only mmap.

func (*Loader) AttrShared Uses

func (l *Loader) AttrShared(i Sym) bool

AttrShared returns true for symbols compiled with the -shared option.

func (*Loader) AttrSpecial Uses

func (l *Loader) AttrSpecial(i Sym) bool

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 Uses

func (l *Loader) AttrSubSymbol(i Sym) bool

func (*Loader) AttrTopFrame Uses

func (l *Loader) AttrTopFrame(i Sym) bool

AttrTopFrame returns true for a function symbol that is an entry point, meaning that unwinders should stop when they hit this function.

func (*Loader) AttrVisibilityHidden Uses

func (l *Loader) AttrVisibilityHidden(i Sym) bool

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) Aux2 Uses

func (l *Loader) Aux2(i Sym, j int) Aux2

Returns the "handle" to the j-th aux symbol of the i-th symbol.

func (*Loader) CopyAttributes Uses

func (l *Loader) CopyAttributes(src Sym, dst Sym)

CopyAttributes copies over all of the attributes of symbol 'src' to symbol 'dst'.

func (*Loader) CopySym Uses

func (l *Loader) CopySym(src, dst Sym)

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 Uses

func (l *Loader) CreateExtSym(name string, ver int) Sym

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 Uses

func (l *Loader) CreateStaticSym(name string) Sym

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 Uses

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) Data Uses

func (l *Loader) Data(i Sym) []byte

Returns the symbol content of the i-th symbol. i is global index.

func (*Loader) Dump Uses

func (l *Loader) Dump()

For debugging.

func (*Loader) DynidSyms Uses

func (l *Loader) DynidSyms() []Sym

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 Uses

func (l *Loader) Errorf(s Sym, format string, args ...interface{})

Errorf method logs an error message. See ErrorReporter.Errorf for details.

func (*Loader) ExtRelocs Uses

func (l *Loader) ExtRelocs(i Sym) ExtRelocs

ExtRelocs returns the external relocations of the i-th symbol.

func (*Loader) ExtractSymbols Uses

func (l *Loader) ExtractSymbols(syms *sym.Symbols)

ExtractSymbols grabs the symbols out of the loader for work that hasn't been ported to the new symbol type.

func (*Loader) FreeSym Uses

func (l *Loader) FreeSym(i Sym)

func (*Loader) FuncInfo Uses

func (l *Loader) FuncInfo(i Sym) FuncInfo

func (*Loader) GetErrorReporter Uses

func (l *Loader) GetErrorReporter() *ErrorReporter

GetErrorReporter returns the loader's associated error reporter.

func (*Loader) GetFuncDwarfAuxSyms Uses

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. FIXME: once all of dwarfgen is converted over to the loader, it would save some space to make these aux symbols nameless.

func (*Loader) InitExtRelocs Uses

func (l *Loader) InitExtRelocs()

InitExtRelocs initialize the slice used to store external relocations.

func (*Loader) InitOutData Uses

func (l *Loader) InitOutData()

InitOutData initializes the slice used to store symbol output data.

func (*Loader) InitReachable Uses

func (l *Loader) InitReachable()

Initialize Reachable bitmap and its siblings for running deadcode pass.

func (*Loader) IsDeferReturnTramp Uses

func (l *Loader) IsDeferReturnTramp(i Sym) bool

Return whether this is a trampoline of a deferreturn call.

func (*Loader) IsExternal Uses

func (l *Loader) IsExternal(i Sym) bool

func (*Loader) IsGoType Uses

func (l *Loader) IsGoType(i Sym) bool

Returns whether this is a Go type symbol.

func (l *Loader) IsItabLink(i Sym) bool

Returns whether this is a "go.itablink.*" symbol.

func (*Loader) IsNoSplit Uses

func (l *Loader) IsNoSplit(i Sym) bool

Returns whether the i-th symbol is nosplit.

func (*Loader) IsReflectMethod Uses

func (l *Loader) IsReflectMethod(i Sym) bool

Returns whether the i-th symbol has ReflectMethod attribute set.

func (l *Loader) IsTypelink(i Sym) bool

Returns whether this symbol should be included in typelink.

func (*Loader) LoadFull Uses

func (l *Loader) LoadFull(arch *sys.Arch, syms *sym.Symbols, needReloc, needExtReloc bool)

Load full contents.

func (*Loader) LoadNonpkgSyms Uses

func (l *Loader) LoadNonpkgSyms(arch *sys.Arch)

Add non-package symbols and references to external symbols (which are always named).

func (*Loader) Lookup Uses

func (l *Loader) Lookup(name string, ver int) Sym

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) LookupOrCreateSym Uses

func (l *Loader) LookupOrCreateSym(name string, ver int) Sym

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 Uses

func (l *Loader) MakeSymbolBuilder(name string) *SymbolBuilder

MakeSymbolBuilder creates a symbol builder for use in constructing an entirely new symbol.

func (*Loader) MakeSymbolUpdater Uses

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) NAux Uses

func (l *Loader) NAux(i Sym) int

Returns the number of aux symbols given a global index.

func (*Loader) NDef Uses

func (l *Loader) NDef() int

Number of defined Go symbols.

func (*Loader) NReachableSym Uses

func (l *Loader) NReachableSym() int

Number of reachable symbols.

func (*Loader) NStrictDupMsgs Uses

func (l *Loader) NStrictDupMsgs() int

func (*Loader) NSym Uses

func (l *Loader) NSym() int

Number of total symbols.

func (*Loader) NewSection Uses

func (l *Loader) NewSection() *sym.Section

NewSection creates a new (output) section.

func (*Loader) OutData Uses

func (l *Loader) OutData(i Sym) []byte

Returns the data of the i-th symbol in the output buffer.

func (*Loader) OuterSym Uses

func (l *Loader) OuterSym(i Sym) Sym

OuterSym gets the outer symbol for host object loaded symbols.

func (*Loader) Preload Uses

func (l *Loader) Preload(syms *sym.Symbols, f *bio.Reader, lib *sym.Library, unit *sym.CompilationUnit, length int64) goobj2.FingerprintType

Preload a package: add autolibs, add defined package symbols to the symbol table. Does not add non-package symbols yet, which will be done in LoadNonpkgSyms. Does not read symbol data. Returns the fingerprint of the object.

func (*Loader) PrependSub Uses

func (l *Loader) PrependSub(outer Sym, sub Sym)

PrependSub prepends 'sub' onto the sub list for outer symbol 'outer'. Will panic if 'sub' already has an outer sym or sub sym. FIXME: should this be instead a method on SymbolBuilder?

func (*Loader) PropagateLoaderChangesToSymbols Uses

func (l *Loader) PropagateLoaderChangesToSymbols(toconvert []Sym, anonVerReplacement int) []*sym.Symbol

func (*Loader) PropagateSymbolChangesBackToLoader Uses

func (l *Loader) PropagateSymbolChangesBackToLoader()

PropagateSymbolChangesBackToLoader is a temporary shim function that copies over a given sym.Symbol into the equivalent representation in the loader world. The intent is to enable converting a given linker phase/pass from dealing with sym.Symbol's to a modernized pass that works with loader.Sym, in cases where the "loader.Sym wavefront" has not yet reached the pass in question. For such work the recipe is to first call PropagateSymbolChangesBackToLoader(), then exexute the pass working with the loader, then call PropagateLoaderChangesToSymbols to copy the changes made by the pass back to the sym.Symbol world.

func (*Loader) RawSymName Uses

func (l *Loader) RawSymName(i Sym) string

Returns the raw (unpatched) name of the i-th symbol.

func (*Loader) RelocVariant Uses

func (l *Loader) RelocVariant(s Sym, ri int) sym.RelocVariant

RelocVariant returns the 'variant' property of a relocation on some specific symbol.

func (*Loader) Relocs Uses

func (l *Loader) Relocs(i Sym) Relocs

Relocs returns a Relocs object for the given global sym.

func (*Loader) ResolveABIAlias Uses

func (l *Loader) ResolveABIAlias(s Sym) Sym

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 Uses

func (l *Loader) SetAttrCgoExportDynamic(i Sym, v bool)

SetAttrCgoExportDynamic sets the "cgo_export_dynamic" for a symbol (see AttrCgoExportDynamic).

func (*Loader) SetAttrCgoExportStatic Uses

func (l *Loader) SetAttrCgoExportStatic(i Sym, v bool)

SetAttrCgoExportStatic sets the "cgo_export_static" for a symbol (see AttrCgoExportStatic).

func (*Loader) SetAttrDuplicateOK Uses

func (l *Loader) SetAttrDuplicateOK(i Sym, v bool)

SetAttrDuplicateOK sets the "duplicate OK" property for an external symbol (see AttrDuplicateOK).

func (*Loader) SetAttrExternal Uses

func (l *Loader) SetAttrExternal(i Sym, v bool)

SetAttrExternal sets the "external" property for an host object symbol (see AttrExternal).

func (*Loader) SetAttrLocal Uses

func (l *Loader) SetAttrLocal(i Sym, v bool)

SetAttrLocal the "local" property for a symbol (see AttrLocal above).

func (*Loader) SetAttrNotInSymbolTable Uses

func (l *Loader) SetAttrNotInSymbolTable(i Sym, v bool)

SetAttrNotInSymbolTable the "not in symtab" property for a symbol (see AttrNotInSymbolTable above).

func (*Loader) SetAttrOnList Uses

func (l *Loader) SetAttrOnList(i Sym, v bool)

SetAttrOnList sets the "on list" property for a symbol (see AttrOnList).

func (*Loader) SetAttrReachable Uses

func (l *Loader) SetAttrReachable(i Sym, v bool)

SetAttrReachable sets the reachability property for a symbol (see AttrReachable).

func (*Loader) SetAttrReadOnly Uses

func (l *Loader) SetAttrReadOnly(i Sym, v bool)

SetAttrReadOnly sets the "data is read only" property for a symbol (see AttrReadOnly).

func (*Loader) SetAttrShared Uses

func (l *Loader) SetAttrShared(i Sym, v bool)

SetAttrShared sets the "shared" property for an external symbol (see AttrShared).

func (*Loader) SetAttrSpecial Uses

func (l *Loader) SetAttrSpecial(i Sym, v bool)

SetAttrSpecial sets the "special" property for a symbol (see AttrSpecial).

func (*Loader) SetAttrTopFrame Uses

func (l *Loader) SetAttrTopFrame(i Sym, v bool)

SetAttrTopFrame sets the "top frame" property for a symbol (see AttrTopFrame).

func (*Loader) SetAttrVisibilityHidden Uses

func (l *Loader) SetAttrVisibilityHidden(i Sym, v bool)

SetAttrVisibilityHidden sets the "hidden visibility" property for a symbol (see AttrVisibilityHidden).

func (*Loader) SetExtRelocs Uses

func (l *Loader) SetExtRelocs(i Sym, relocs []ExtReloc)

SetExtRelocs sets the external relocations of the i-th symbol. i is global index.

func (*Loader) SetGot Uses

func (l *Loader) SetGot(i Sym, v int32)

SetGot sets the got value for pe symbols.

func (*Loader) SetIsDeferReturnTramp Uses

func (l *Loader) SetIsDeferReturnTramp(i Sym, v bool)

Set that i is a trampoline of a deferreturn call.

func (*Loader) SetOutData Uses

func (l *Loader) SetOutData(i Sym, data []byte)

SetOutData sets the position of the data of the i-th symbol in the output buffer. i is global index.

func (*Loader) SetOuterSym Uses

func (l *Loader) SetOuterSym(i Sym, o Sym)

SetOuterSym sets the outer symbol of i to o (without setting sub symbols).

func (*Loader) SetPlt Uses

func (l *Loader) SetPlt(i Sym, v int32)

SetPlt sets the plt value for pe symbols.

func (*Loader) SetRelocVariant Uses

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 Uses

func (l *Loader) SetSymAlign(i Sym, align int32)

SetSymAlign sets the alignment for a symbol.

func (*Loader) SetSymDynid Uses

func (l *Loader) SetSymDynid(i Sym, val int32)

SetSymDynid sets the "dynid" property for a symbol.

func (*Loader) SetSymDynimplib Uses

func (l *Loader) SetSymDynimplib(i Sym, value string)

SetSymDynimplib sets the "dynimplib" attribute for a symbol.

func (*Loader) SetSymDynimpvers Uses

func (l *Loader) SetSymDynimpvers(i Sym, value string)

SetSymDynimpvers sets the "dynimpvers" attribute for a symbol.

func (*Loader) SetSymElfSym Uses

func (l *Loader) SetSymElfSym(i Sym, es int32)

SetSymElfSym sets the elf symbol index for a symbol.

func (*Loader) SetSymElfType Uses

func (l *Loader) SetSymElfType(i Sym, et elf.SymType)

SetSymElfType sets the elf type attribute for a symbol.

func (*Loader) SetSymExtname Uses

func (l *Loader) SetSymExtname(i Sym, value string)

SetSymExtname sets the "extname" attribute for a symbol.

func (*Loader) SetSymLocalElfSym Uses

func (l *Loader) SetSymLocalElfSym(i Sym, es int32)

SetSymLocalElfSym sets the "local" elf symbol index for a symbol.

func (*Loader) SetSymLocalentry Uses

func (l *Loader) SetSymLocalentry(i Sym, value uint8)

SetSymLocalentry sets the "local entry" attribute for a symbol.

func (*Loader) SetSymPkg Uses

func (l *Loader) SetSymPkg(i Sym, pkg string)

SetSymPkg sets the package/library for a symbol. This is needed mainly for external symbols, specifically those imported from shared libraries.

func (*Loader) SetSymSect Uses

func (l *Loader) SetSymSect(i Sym, sect *sym.Section)

SetSymValue sets the section of the i-th symbol. i is global index.

func (*Loader) SetSymValue Uses

func (l *Loader) SetSymValue(i Sym, val int64)

SetSymValue sets the value of the i-th symbol. i is global index.

func (*Loader) SortSub Uses

func (l *Loader) SortSub(s Sym) Sym

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) SubSym Uses

func (l *Loader) SubSym(i Sym) Sym

SubSym gets the subsymbol for host object loaded symbols.

func (*Loader) SymAddr Uses

func (l *Loader) SymAddr(i Sym) int64

SymAddr checks that a symbol is reachable, and returns its value.

func (*Loader) SymAlign Uses

func (l *Loader) SymAlign(i Sym) int32

SymAlign returns the alignment for a symbol.

func (*Loader) SymAttr Uses

func (l *Loader) SymAttr(i Sym) uint8

Returns the attributes of the i-th symbol.

func (*Loader) SymDynid Uses

func (l *Loader) SymDynid(i Sym) int32

SymDynid returns the "dynid" property for the specified symbol.

func (*Loader) SymDynimplib Uses

func (l *Loader) SymDynimplib(i Sym) string

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 Uses

func (l *Loader) SymDynimpvers(i Sym) string

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 Uses

func (l *Loader) SymElfSym(i Sym) int32

SymElfSym returns the ELF symbol index for a given loader symbol, assigned during ELF symtab generation.

func (*Loader) SymElfType Uses

func (l *Loader) SymElfType(i Sym) elf.SymType

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 Uses

func (l *Loader) SymExtname(i Sym) string

SymExtname returns the "extname" value for the specified symbol.

func (*Loader) SymGoType Uses

func (l *Loader) SymGoType(i Sym) Sym

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) SymGot Uses

func (l *Loader) SymGot(s Sym) int32

SymGot returns the got value for pe symbols.

func (*Loader) SymLocalElfSym Uses

func (l *Loader) SymLocalElfSym(i Sym) int32

SymLocalElfSym returns the "local" ELF symbol index for a given loader symbol, assigned during ELF symtab generation.

func (*Loader) SymLocalentry Uses

func (l *Loader) SymLocalentry(i Sym) uint8

SymLocalentry returns the "local entry" value for the specified symbol.

func (*Loader) SymName Uses

func (l *Loader) SymName(i Sym) string

Returns the (patched) name of the i-th symbol.

func (*Loader) SymPkg Uses

func (l *Loader) SymPkg(i Sym) string

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 correspondes to sym.Symbol.File field.

func (*Loader) SymPlt Uses

func (l *Loader) SymPlt(s Sym) int32

SymPlt returns the plt value for pe symbols.

func (*Loader) SymSect Uses

func (l *Loader) SymSect(i Sym) *sym.Section

SymValue returns the section of the i-th symbol. i is global index.

func (*Loader) SymSize Uses

func (l *Loader) SymSize(i Sym) int64

Returns the size of the i-th symbol.

func (*Loader) SymType Uses

func (l *Loader) SymType(i Sym) sym.SymKind

Returns the type of the i-th symbol.

func (*Loader) SymUnit Uses

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 Uses

func (l *Loader) SymValue(i Sym) int64

SymValue returns the value of the i-th symbol. i is global index.

func (*Loader) SymVersion Uses

func (l *Loader) SymVersion(i Sym) int

Returns the version of the i-th symbol.

func (*Loader) TopLevelSym Uses

func (l *Loader) TopLevelSym(s Sym) bool

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 Uses

func (l *Loader) UndefinedRelocTargets(limit int) []Sym

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 Reloc Uses

type Reloc struct {
    Off  int32            // offset to rewrite
    Size uint8            // number of bytes to rewrite: 0, 1, 2, or 4
    Type objabi.RelocType // the relocation type
    Add  int64            // addend
    Sym  Sym              // global index of symbol the reloc addresses

Reloc contains the payload for a specific relocation. TODO: replace this with sym.Reloc, once we change the relocation target from "*sym.Symbol" to "loader.Sym" in sym.Reloc.

type Reloc2 Uses

type Reloc2 struct {
    // contains filtered or unexported fields

Reloc2 holds a "handle" to access a relocation record from an object file.

func (Reloc2) SetSym Uses

func (rel Reloc2) SetSym(s Sym)

func (Reloc2) SetType Uses

func (rel Reloc2) SetType(t objabi.RelocType)

func (Reloc2) Sym Uses

func (rel Reloc2) Sym() Sym

func (Reloc2) Type Uses

func (rel Reloc2) Type() objabi.RelocType

type RelocByOff Uses

type RelocByOff []Reloc

func (RelocByOff) Len Uses

func (x RelocByOff) Len() int

func (RelocByOff) Less Uses

func (x RelocByOff) Less(i, j int) bool

func (RelocByOff) Swap Uses

func (x RelocByOff) Swap(i, j int)

type Relocs Uses

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.

func (*Relocs) At2 Uses

func (relocs *Relocs) At2(j int) Reloc2

At2 returns the j-th reloc for a global symbol.

func (*Relocs) Count Uses

func (relocs *Relocs) Count() int

type Sym Uses

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 Uses

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 Uses

func (sb *SymbolBuilder) AddAddr(arch *sys.Arch, tgt Sym) int64

func (*SymbolBuilder) AddAddrPlus Uses

func (sb *SymbolBuilder) AddAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64

func (*SymbolBuilder) AddAddrPlus4 Uses

func (sb *SymbolBuilder) AddAddrPlus4(arch *sys.Arch, tgt Sym, add int64) int64

func (*SymbolBuilder) AddBytes Uses

func (sb *SymbolBuilder) AddBytes(data []byte)

func (*SymbolBuilder) AddCURelativeAddrPlus Uses

func (sb *SymbolBuilder) AddCURelativeAddrPlus(arch *sys.Arch, tgt Sym, add int64) int64

func (*SymbolBuilder) AddPCRelPlus Uses

func (sb *SymbolBuilder) AddPCRelPlus(arch *sys.Arch, tgt Sym, add int64) int64

func (*SymbolBuilder) AddRel Uses

func (sb *SymbolBuilder) AddRel(typ objabi.RelocType) (Reloc2, int)

Add a relocation with given type, return its handle and index (to set other fields).

func (*SymbolBuilder) AddReloc Uses

func (sb *SymbolBuilder) AddReloc(r Reloc) uint32

AddReloc appends the specified reloc to the symbols list of relocations. Return value is the index of the newly created reloc.

func (*SymbolBuilder) AddRelocs Uses

func (sb *SymbolBuilder) AddRelocs(n int) Relocs

Add n relocations, return a handle to the relocations.

func (*SymbolBuilder) AddSize Uses

func (sb *SymbolBuilder) AddSize(arch *sys.Arch, tgt Sym) int64

func (*SymbolBuilder) AddSymRef Uses

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 Uses

func (sb *SymbolBuilder) AddUint(arch *sys.Arch, v uint64) int64

func (*SymbolBuilder) AddUint16 Uses

func (sb *SymbolBuilder) AddUint16(arch *sys.Arch, v uint16) int64

func (*SymbolBuilder) AddUint32 Uses

func (sb *SymbolBuilder) AddUint32(arch *sys.Arch, v uint32) int64

func (*SymbolBuilder) AddUint64 Uses

func (sb *SymbolBuilder) AddUint64(arch *sys.Arch, v uint64) int64

func (*SymbolBuilder) AddUint8 Uses

func (sb *SymbolBuilder) AddUint8(v uint8) int64

func (*SymbolBuilder) AddUintXX Uses

func (sb *SymbolBuilder) AddUintXX(arch *sys.Arch, v uint64, wid int) int64

func (*SymbolBuilder) Addstring Uses

func (sb *SymbolBuilder) Addstring(str string) int64

func (*SymbolBuilder) Align Uses

func (sb *SymbolBuilder) Align() int32

func (*SymbolBuilder) CgoExportDynamic Uses

func (sb *SymbolBuilder) CgoExportDynamic() bool

func (*SymbolBuilder) Data Uses

func (sb *SymbolBuilder) Data() []byte

func (*SymbolBuilder) DuplicateOK Uses

func (sb *SymbolBuilder) DuplicateOK() bool

func (*SymbolBuilder) Dynimplib Uses

func (sb *SymbolBuilder) Dynimplib() string

func (*SymbolBuilder) Dynimpvers Uses

func (sb *SymbolBuilder) Dynimpvers() string

func (*SymbolBuilder) External Uses

func (sb *SymbolBuilder) External() bool

func (*SymbolBuilder) Extname Uses

func (sb *SymbolBuilder) Extname() string

func (*SymbolBuilder) GoType Uses

func (sb *SymbolBuilder) GoType() Sym

func (SymbolBuilder) Grow Uses

func (ms SymbolBuilder) Grow(siz int64)

func (*SymbolBuilder) Localentry Uses

func (sb *SymbolBuilder) Localentry() uint8

func (*SymbolBuilder) MakeWritable Uses

func (sb *SymbolBuilder) MakeWritable()

func (*SymbolBuilder) Name Uses

func (sb *SymbolBuilder) Name() string

func (*SymbolBuilder) OnList Uses

func (sb *SymbolBuilder) OnList() bool

func (*SymbolBuilder) Outer Uses

func (sb *SymbolBuilder) Outer() Sym

func (*SymbolBuilder) PrependSub Uses

func (sb *SymbolBuilder) PrependSub(sub Sym)

func (*SymbolBuilder) Reachable Uses

func (sb *SymbolBuilder) Reachable() bool

func (*SymbolBuilder) ReadOnly Uses

func (sb *SymbolBuilder) ReadOnly() bool

func (*SymbolBuilder) Relocs Uses

func (sb *SymbolBuilder) Relocs() Relocs

func (*SymbolBuilder) Sect Uses

func (sb *SymbolBuilder) Sect() *sym.Section

func (*SymbolBuilder) SetAddr Uses

func (sb *SymbolBuilder) SetAddr(arch *sys.Arch, off int64, tgt Sym) int64

func (*SymbolBuilder) SetAddrPlus Uses

func (sb *SymbolBuilder) SetAddrPlus(arch *sys.Arch, off int64, tgt Sym, add int64) int64

func (*SymbolBuilder) SetAlign Uses

func (sb *SymbolBuilder) SetAlign(align int32)

func (*SymbolBuilder) SetData Uses

func (sb *SymbolBuilder) SetData(data []byte)

func (*SymbolBuilder) SetDuplicateOK Uses

func (sb *SymbolBuilder) SetDuplicateOK(v bool)

func (*SymbolBuilder) SetDynimplib Uses

func (sb *SymbolBuilder) SetDynimplib(value string)

func (*SymbolBuilder) SetDynimpvers Uses

func (sb *SymbolBuilder) SetDynimpvers(value string)

func (*SymbolBuilder) SetExternal Uses

func (sb *SymbolBuilder) SetExternal(v bool)

func (*SymbolBuilder) SetExtname Uses

func (sb *SymbolBuilder) SetExtname(value string)

func (*SymbolBuilder) SetGot Uses

func (sb *SymbolBuilder) SetGot(value int32)

func (*SymbolBuilder) SetLocal Uses

func (sb *SymbolBuilder) SetLocal(value bool)

func (*SymbolBuilder) SetLocalentry Uses

func (sb *SymbolBuilder) SetLocalentry(value uint8)

func (*SymbolBuilder) SetNotInSymbolTable Uses

func (sb *SymbolBuilder) SetNotInSymbolTable(value bool)

func (*SymbolBuilder) SetOnList Uses

func (sb *SymbolBuilder) SetOnList(v bool)

func (*SymbolBuilder) SetPlt Uses

func (sb *SymbolBuilder) SetPlt(value int32)

func (*SymbolBuilder) SetReachable Uses

func (sb *SymbolBuilder) SetReachable(v bool)

func (*SymbolBuilder) SetReadOnly Uses

func (sb *SymbolBuilder) SetReadOnly(v bool)

func (*SymbolBuilder) SetReloc Uses

func (sb *SymbolBuilder) SetReloc(j int, r Reloc)

Update the j-th relocation in place.

func (*SymbolBuilder) SetRelocAdd Uses

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 Uses

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 Uses

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) SetRelocs Uses

func (sb *SymbolBuilder) SetRelocs(rslice []Reloc)

func (*SymbolBuilder) SetSect Uses

func (sb *SymbolBuilder) SetSect(sect *sym.Section)

func (*SymbolBuilder) SetSize Uses

func (sb *SymbolBuilder) SetSize(size int64)

func (*SymbolBuilder) SetSpecial Uses

func (sb *SymbolBuilder) SetSpecial(value bool)

func (*SymbolBuilder) SetType Uses

func (sb *SymbolBuilder) SetType(kind sym.SymKind)

func (*SymbolBuilder) SetUint Uses

func (sb *SymbolBuilder) SetUint(arch *sys.Arch, r int64, v uint64) int64

func (*SymbolBuilder) SetUint16 Uses

func (sb *SymbolBuilder) SetUint16(arch *sys.Arch, r int64, v uint16) int64

func (*SymbolBuilder) SetUint32 Uses

func (sb *SymbolBuilder) SetUint32(arch *sys.Arch, r int64, v uint32) int64

func (*SymbolBuilder) SetUint8 Uses

func (sb *SymbolBuilder) SetUint8(arch *sys.Arch, r int64, v uint8) int64

func (*SymbolBuilder) SetValue Uses

func (sb *SymbolBuilder) SetValue(v int64)

func (*SymbolBuilder) SetVisibilityHidden Uses

func (sb *SymbolBuilder) SetVisibilityHidden(value bool)

func (*SymbolBuilder) Size Uses

func (sb *SymbolBuilder) Size() int64

func (*SymbolBuilder) SortRelocs Uses

func (sb *SymbolBuilder) SortRelocs()

Sort relocations by offset.

func (*SymbolBuilder) SortSub Uses

func (sb *SymbolBuilder) SortSub()

func (*SymbolBuilder) Sub Uses

func (sb *SymbolBuilder) Sub() Sym

func (*SymbolBuilder) SubSym Uses

func (sb *SymbolBuilder) SubSym() Sym

func (*SymbolBuilder) Sym Uses

func (sb *SymbolBuilder) Sym() Sym

func (*SymbolBuilder) Type Uses

func (sb *SymbolBuilder) Type() sym.SymKind

func (*SymbolBuilder) Value Uses

func (sb *SymbolBuilder) Value() int64

func (*SymbolBuilder) Version Uses

func (sb *SymbolBuilder) Version() int

func (*SymbolBuilder) VisibilityHidden Uses

func (sb *SymbolBuilder) VisibilityHidden() bool

Package loader imports 15 packages (graph). Updated 2020-07-05. Refresh now. Tools for package owners.

The go get command cannot install this package because of the following issues: