Package Index.
const (
PkgIdxNone = (1<<31 - 1) - iota // Non-package symbols
PkgIdxHashed64 // Short hashed (content-addressable) symbols
PkgIdxHashed // Hashed (content-addressable) symbols
PkgIdxBuiltin // Predefined runtime symbols (ex: runtime.newobject)
PkgIdxSelf // Symbols defined in the current package
PkgIdxInvalid = 0
)
Blocks
const (
BlkAutolib = iota
BlkPkgIdx
BlkFile
BlkSymdef
BlkHashed64def
BlkHasheddef
BlkNonpkgdef
BlkNonpkgref
BlkRefFlags
BlkHash64
BlkHash
BlkRelocIdx
BlkAuxIdx
BlkDataIdx
BlkReloc
BlkAux
BlkData
BlkPcdata
BlkRefName
BlkEnd
NBlk
)
const (
= 1 << iota // this object is built with -shared
ObjFlagNeedNameExpansion // the linker needs to expand `"".` to package path in symbol names
ObjFlagFromAssembly // object is from asm src, not go
)
Sym.Flag
const (
SymFlagDupok = 1 << iota
SymFlagLocal
SymFlagTypelink
SymFlagLeaf
SymFlagNoSplit
SymFlagReflectMethod
SymFlagGoType
SymFlagTopFrame
)
Sym.Flag2
const (
SymFlagUsedInIface = 1 << iota
SymFlagItab
)
Aux Type
const (
AuxGotype = iota
AuxFuncInfo
AuxFuncdata
AuxDwarfInfo
AuxDwarfLoc
AuxDwarfRanges
AuxDwarfLines
)
const AuxSize = 1 + 8
const Hash64Size = 8
const HashSize = sha1.Size
const Magic = "\x00go116ld"
const RefFlagsSize = 8 + 1 + 1
const RefNameSize = 8 + stringRefSize
const RelocSize = 4 + 1 + 1 + 8 + 8
const SymABIstatic = ^uint16(0)
const SymSize = stringRefSize + 2 + 1 + 1 + 1 + 4 + 4
func BuiltinIdx(name string, abi int) int
BuiltinIdx returns the index of the builtin with the given name and abi, or -1 if it is not a builtin.
func BuiltinName(i int) (string, int)
BuiltinName returns the name and ABI of the i-th builtin symbol.
func NBuiltin() int
NBuiltin returns the number of listed builtin symbols.
Aux symbol info.
Serialized format:
Aux struct {
Type uint8
Sym SymRef
}
type Aux [AuxSize]byte
func (a *Aux) SetSym(x SymRef)
func (a *Aux) SetType(x uint8)
func (a *Aux) Sym() SymRef
func (a *Aux) Type() uint8
func (a *Aux) Write(w *Writer)
CUFileIndex is used to index the filenames that are stored in the per-package/per-CU FileList.
type CUFileIndex uint32
type FingerprintType [8]byte
func (fp FingerprintType) IsZero() bool
FuncInfo is serialized as a symbol (aux symbol). The symbol data is the binary encoding of the struct below.
TODO: make each pcdata a separate symbol?
type FuncInfo struct {
Args uint32
Locals uint32
FuncID objabi.FuncID
Pcsp uint32
Pcfile uint32
Pcline uint32
Pcinline uint32
Pcdata []uint32
PcdataEnd uint32
Funcdataoff []uint32
File []CUFileIndex
InlTree []InlTreeNode
}
func (a *FuncInfo) Read(b []byte)
func (*FuncInfo) ReadArgs(b []byte) uint32
func (*FuncInfo) ReadFile(b []byte, filesoff uint32, k uint32) CUFileIndex
func (*FuncInfo) ReadFuncID(b []byte) uint32
func (*FuncInfo) ReadFuncInfoLengths(b []byte) FuncInfoLengths
func (*FuncInfo) ReadFuncdataoff(b []byte, funcdataofffoff uint32, k uint32) int64
func (*FuncInfo) ReadInlTree(b []byte, inltreeoff uint32, k uint32) InlTreeNode
func (*FuncInfo) ReadLocals(b []byte) uint32
func (*FuncInfo) ReadPcdata(b []byte, pcdataoffset uint32, k uint32) (uint32, uint32)
return start and end offsets.
func (*FuncInfo) ReadPcfile(b []byte) (uint32, uint32)
return start and end offsets.
func (*FuncInfo) ReadPcinline(b []byte, pcdataoffset uint32) (uint32, uint32)
return start and end offsets.
func (*FuncInfo) ReadPcline(b []byte) (uint32, uint32)
return start and end offsets.
func (*FuncInfo) ReadPcsp(b []byte) (uint32, uint32)
return start and end offsets.
func (a *FuncInfo) Write(w *bytes.Buffer)
FuncInfoLengths is a cache containing a roadmap of offsets and lengths for things within a serialized FuncInfo. Each length field stores the number of items (e.g. files, inltree nodes, etc), and the corresponding "off" field stores the byte offset of the start of the items in question.
type FuncInfoLengths struct {
NumPcdata uint32
PcdataOff uint32
NumFuncdataoff uint32
FuncdataoffOff uint32
NumFile uint32
FileOff uint32
NumInlTree uint32
InlTreeOff uint32
Initialized bool
}
Hash64
type Hash64Type [Hash64Size]byte
Hash
type HashType [HashSize]byte
File header. TODO: probably no need to export this.
type Header struct {
Magic string
Fingerprint FingerprintType
Flags uint32
Offsets [NBlk]uint32
}
func (h *Header) Read(r *Reader) error
func (h *Header) Size() int
func (h *Header) Write(w *Writer)
Autolib
type ImportedPkg struct {
Pkg string
Fingerprint FingerprintType
}
func (p *ImportedPkg) Write(w *Writer)
InlTreeNode is the serialized form of FileInfo.InlTree.
type InlTreeNode struct {
Parent int32
File CUFileIndex
Line int32
Func SymRef
ParentPC int32
}
func (inl *InlTreeNode) Read(b []byte) []byte
Read an InlTreeNode from b, return the remaining bytes.
func (inl *InlTreeNode) Write(w *bytes.Buffer)
type Reader struct {
// contains filtered or unexported fields
}
func NewReaderFromBytes(b []byte, readonly bool) *Reader
func (r *Reader) Autolib() []ImportedPkg
func (r *Reader) Aux(i uint32, j int) *Aux
Aux returns a pointer to the j-th aux symbol of the i-th symbol.
func (r *Reader) AuxOff(i uint32, j int) uint32
AuxOff returns the offset of the j-th aux symbol of the i-th symbol.
func (r *Reader) Auxs(i uint32) []Aux
Auxs returns the aux symbols of the i-th symbol.
func (r *Reader) BytesAt(off uint32, len int) []byte
func (r *Reader) Data(i uint32) []byte
Data returns the i-th symbol's data.
func (r *Reader) DataOff(i uint32) uint32
DataOff returns the offset of the i-th symbol's data.
func (r *Reader) DataSize(i uint32) int
DataSize returns the size of the i-th symbol's data.
func (r *Reader) File(i int) string
func (r *Reader) Fingerprint() FingerprintType
func (r *Reader) Flags() uint32
Flags returns the flag bits read from the object file header.
func (r *Reader) FromAssembly() bool
func (r *Reader) Hash(i uint32) *HashType
Hash returns a pointer to the i-th hashed symbol's hash. Note: here i is the index of hashed symbols, not all symbols (unlike other accessors).
func (r *Reader) Hash64(i uint32) uint64
Hash64 returns the i-th short hashed symbol's hash. Note: here i is the index of short hashed symbols, not all symbols (unlike other accessors).
func (r *Reader) NAux(i uint32) int
NAux returns the number of aux symbols of the i-th symbol.
func (r *Reader) NFile() int
func (r *Reader) NHashed64def() int
func (r *Reader) NHasheddef() int
func (r *Reader) NNonpkgdef() int
func (r *Reader) NNonpkgref() int
func (r *Reader) NPkg() int
func (r *Reader) NRefFlags() int
NRefFlags returns the number of referenced symbol flags.
func (r *Reader) NRefName() int
NRefName returns the number of referenced symbol names.
func (r *Reader) NReloc(i uint32) int
NReloc returns the number of relocations of the i-th symbol.
func (r *Reader) NSym() int
func (r *Reader) NeedNameExpansion() bool
func (r *Reader) PcdataBase() uint32
AuxDataBase returns the base offset of the aux data block.
func (r *Reader) Pkg(i int) string
func (r *Reader) Pkglist() []string
func (r *Reader) ReadOnly() bool
ReadOnly returns whether r.BytesAt returns read-only bytes.
func (r *Reader) RefFlags(i int) *RefFlags
RefFlags returns a pointer to the i-th referenced symbol flags. Note: here i is not a local symbol index, just a counter.
func (r *Reader) RefName(i int) *RefName
RefName returns a pointer to the i-th referenced symbol name. Note: here i is not a local symbol index, just a counter.
func (r *Reader) Reloc(i uint32, j int) *Reloc
Reloc returns a pointer to the j-th relocation of the i-th symbol.
func (r *Reader) RelocOff(i uint32, j int) uint32
RelocOff returns the offset of the j-th relocation of the i-th symbol.
func (r *Reader) Relocs(i uint32) []Reloc
Relocs returns a pointer to the relocations of the i-th symbol.
func (r *Reader) Shared() bool
func (r *Reader) StringAt(off uint32, len uint32) string
func (r *Reader) StringRef(off uint32) string
func (r *Reader) Sym(i uint32) *Sym
Sym returns a pointer to the i-th symbol.
func (r *Reader) SymOff(i uint32) uint32
SymOff returns the offset of the i-th symbol.
Referenced symbol flags.
Serialized format:
RefFlags struct {
Sym symRef
Flag uint8
Flag2 uint8
}
type RefFlags [RefFlagsSize]byte
func (r *RefFlags) Flag() uint8
func (r *RefFlags) Flag2() uint8
func (r *RefFlags) SetFlag(x uint8)
func (r *RefFlags) SetFlag2(x uint8)
func (r *RefFlags) SetSym(x SymRef)
func (r *RefFlags) Sym() SymRef
func (r *RefFlags) Write(w *Writer)
Referenced symbol name.
Serialized format:
RefName struct {
Sym symRef
Name string
}
type RefName [RefNameSize]byte
func (n *RefName) Name(r *Reader) string
func (n *RefName) SetName(x string, w *Writer)
func (n *RefName) SetSym(x SymRef)
func (n *RefName) Sym() SymRef
func (n *RefName) Write(w *Writer)
Relocation.
Serialized format:
Reloc struct {
Off int32
Siz uint8
Type uint8
Add int64
Sym SymRef
}
type Reloc [RelocSize]byte
func (r *Reloc) Add() int64
func (r *Reloc) Off() int32
func (r *Reloc) Set(off int32, size uint8, typ uint8, add int64, sym SymRef)
func (r *Reloc) SetAdd(x int64)
func (r *Reloc) SetOff(x int32)
func (r *Reloc) SetSiz(x uint8)
func (r *Reloc) SetSym(x SymRef)
func (r *Reloc) SetType(x uint8)
func (r *Reloc) Siz() uint8
func (r *Reloc) Sym() SymRef
func (r *Reloc) Type() uint8
func (r *Reloc) Write(w *Writer)
Symbol definition.
Serialized format:
Sym struct {
Name string
ABI uint16
Type uint8
Flag uint8
Flag2 uint8
Siz uint32
Align uint32
}
type Sym [SymSize]byte
func (s *Sym) ABI() uint16
func (s *Sym) Align() uint32
func (s *Sym) Dupok() bool
func (s *Sym) Flag() uint8
func (s *Sym) Flag2() uint8
func (s *Sym) IsGoType() bool
func (s *Sym) IsItab() bool
func (s *Sym) Leaf() bool
func (s *Sym) Local() bool
func (s *Sym) Name(r *Reader) string
func (s *Sym) NameLen(r *Reader) int
Returns the length of the name of the symbol.
func (s *Sym) NoSplit() bool
func (s *Sym) ReflectMethod() bool
func (s *Sym) SetABI(x uint16)
func (s *Sym) SetAlign(x uint32)
func (s *Sym) SetFlag(x uint8)
func (s *Sym) SetFlag2(x uint8)
func (s *Sym) SetName(x string, w *Writer)
func (s *Sym) SetSiz(x uint32)
func (s *Sym) SetType(x uint8)
func (s *Sym) Siz() uint32
func (s *Sym) TopFrame() bool
func (s *Sym) Type() uint8
func (s *Sym) Typelink() bool
func (s *Sym) UsedInIface() bool
func (s *Sym) Write(w *Writer)
Symbol reference.
type SymRef struct {
PkgIdx uint32
SymIdx uint32
}
type Writer struct {
// contains filtered or unexported fields
}
func NewWriter(wr *bio.Writer) *Writer
func (w *Writer) AddString(s string)
func (w *Writer) Bytes(s []byte)
func (w *Writer) Offset() uint32
func (w *Writer) RawString(s string)
func (w *Writer) StringRef(s string)
func (w *Writer) Uint16(x uint16)
func (w *Writer) Uint32(x uint32)
func (w *Writer) Uint64(x uint64)
func (w *Writer) Uint8(x uint8)