goobj2

package standard library
go1.15.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 14, 2020 License: BSD-3-Clause Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PkgIdxNone    = (1<<31 - 1) - iota // Non-package symbols
	PkgIdxBuiltin                      // Predefined symbols // TODO: not used for now, we could use it for compiler-generated symbols like runtime.newobject
	PkgIdxSelf                         // Symbols defined in the current package
	PkgIdxInvalid = 0
)

Package Index.

View Source
const (
	BlkAutolib = iota
	BlkPkgIdx
	BlkDwarfFile
	BlkSymdef
	BlkNonpkgdef
	BlkNonpkgref
	BlkRelocIdx
	BlkAuxIdx
	BlkDataIdx
	BlkReloc
	BlkAux
	BlkData
	BlkPcdata
	BlkRefName
	BlkEnd
	NBlk
)

Blocks

View Source
const (
	SymFlagDupok = 1 << iota
	SymFlagLocal
	SymFlagTypelink
	SymFlagLeaf
	SymFlagNoSplit
	SymFlagReflectMethod
	SymFlagGoType
	SymFlagTopFrame
)
View Source
const (
	AuxGotype = iota
	AuxFuncInfo
	AuxFuncdata
	AuxDwarfInfo
	AuxDwarfLoc
	AuxDwarfRanges
	AuxDwarfLines
)

Aux Type

View Source
const AuxSize = 1 + 8
View Source
const Magic = "\x00go115ld"
View Source
const (
	ObjFlagShared = 1 << iota
)
View Source
const RefNameSize = 8 + stringRefSize
View Source
const RelocSize = 4 + 1 + 1 + 8 + 8
View Source
const SymABIstatic = ^uint16(0)
View Source
const SymSize = stringRefSize + 2 + 1 + 1 + 4 + 4

Variables

This section is empty.

Functions

func BuiltinIdx

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

func BuiltinName(i int) (string, int)

BuiltinName returns the name and ABI of the i-th builtin symbol.

func NBuiltin

func NBuiltin() int

NBuiltin returns the number of listed builtin symbols.

Types

type Aux

type Aux [AuxSize]byte

Aux symbol info.

Serialized format:

Aux struct {
   Type uint8
   Sym  SymRef
}

func (*Aux) SetSym added in go1.15

func (a *Aux) SetSym(x SymRef)

func (*Aux) SetType added in go1.15

func (a *Aux) SetType(x uint8)

func (*Aux) Sym

func (a *Aux) Sym() SymRef

func (*Aux) Type

func (a *Aux) Type() uint8

func (*Aux) Write

func (a *Aux) Write(w *Writer)

type FingerprintType added in go1.15

type FingerprintType [8]byte

func (FingerprintType) IsZero added in go1.15

func (fp FingerprintType) IsZero() bool

type FuncInfo

type FuncInfo struct {
	Args   uint32
	Locals uint32

	Pcsp        uint32
	Pcfile      uint32
	Pcline      uint32
	Pcinline    uint32
	Pcdata      []uint32
	PcdataEnd   uint32
	Funcdataoff []uint32
	File        []SymRef // TODO: just use string?

	InlTree []InlTreeNode
}

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?

func (*FuncInfo) Read

func (a *FuncInfo) Read(b []byte)

func (*FuncInfo) ReadArgs added in go1.15

func (*FuncInfo) ReadArgs(b []byte) uint32

func (*FuncInfo) ReadFile added in go1.15

func (*FuncInfo) ReadFile(b []byte, filesoff uint32, k uint32) SymRef

func (*FuncInfo) ReadFuncInfoLengths added in go1.15

func (*FuncInfo) ReadFuncInfoLengths(b []byte) FuncInfoLengths

func (*FuncInfo) ReadFuncdataoff added in go1.15

func (*FuncInfo) ReadFuncdataoff(b []byte, funcdataofffoff uint32, k uint32) int64

func (*FuncInfo) ReadInlTree added in go1.15

func (*FuncInfo) ReadInlTree(b []byte, inltreeoff uint32, k uint32) InlTreeNode

func (*FuncInfo) ReadLocals added in go1.15

func (*FuncInfo) ReadLocals(b []byte) uint32

func (*FuncInfo) ReadPcdata added in go1.15

func (*FuncInfo) ReadPcdata(b []byte, pcdataoffset uint32, k uint32) (uint32, uint32)

return start and end offsets.

func (*FuncInfo) ReadPcfile added in go1.15

func (*FuncInfo) ReadPcfile(b []byte) (uint32, uint32)

return start and end offsets.

func (*FuncInfo) ReadPcinline added in go1.15

func (*FuncInfo) ReadPcinline(b []byte, pcdataoffset uint32) (uint32, uint32)

return start and end offsets.

func (*FuncInfo) ReadPcline added in go1.15

func (*FuncInfo) ReadPcline(b []byte) (uint32, uint32)

return start and end offsets.

func (*FuncInfo) ReadPcsp added in go1.15

func (*FuncInfo) ReadPcsp(b []byte) (uint32, uint32)

return start and end offsets.

func (*FuncInfo) Write

func (a *FuncInfo) Write(w *bytes.Buffer)

type FuncInfoLengths added in go1.15

type FuncInfoLengths struct {
	NumPcdata      uint32
	PcdataOff      uint32
	NumFuncdataoff uint32
	FuncdataoffOff uint32
	NumFile        uint32
	FileOff        uint32
	NumInlTree     uint32
	InlTreeOff     uint32
	Initialized    bool
}

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 Header struct {
	Magic       string
	Fingerprint FingerprintType
	Flags       uint32
	Offsets     [NBlk]uint32
}

File header. TODO: probably no need to export this.

func (*Header) Read

func (h *Header) Read(r *Reader) error

func (*Header) Size

func (h *Header) Size() int

func (*Header) Write

func (h *Header) Write(w *Writer)

type ImportedPkg added in go1.15

type ImportedPkg struct {
	Pkg         string
	Fingerprint FingerprintType
}

Autolib

func (*ImportedPkg) Write added in go1.15

func (p *ImportedPkg) Write(w *Writer)

type InlTreeNode

type InlTreeNode struct {
	Parent   int32
	File     SymRef
	Line     int32
	Func     SymRef
	ParentPC int32
}

InlTreeNode is the serialized form of FileInfo.InlTree.

func (*InlTreeNode) Read

func (inl *InlTreeNode) Read(b []byte) []byte

Read an InlTreeNode from b, return the remaining bytes.

func (*InlTreeNode) Write

func (inl *InlTreeNode) Write(w *bytes.Buffer)

type Reader

type Reader struct {
	// contains filtered or unexported fields
}

func NewReaderFromBytes

func NewReaderFromBytes(b []byte, readonly bool) *Reader

func (*Reader) Autolib

func (r *Reader) Autolib() []ImportedPkg

func (*Reader) Aux added in go1.15

func (r *Reader) Aux(i int, j int) *Aux

Aux returns a pointer to the j-th aux symbol of the i-th symbol.

func (*Reader) AuxOff

func (r *Reader) AuxOff(i int, j int) uint32

AuxOff returns the offset of the j-th aux symbol of the i-th symbol.

func (*Reader) Auxs added in go1.15

func (r *Reader) Auxs(i int) []Aux

Auxs returns the aux symbols of the i-th symbol.

func (*Reader) BytesAt

func (r *Reader) BytesAt(off uint32, len int) []byte

func (*Reader) Data

func (r *Reader) Data(i int) []byte

Data returns the i-th symbol's data.

func (*Reader) DataOff

func (r *Reader) DataOff(i int) uint32

DataOff returns the offset of the i-th symbol's data.

func (*Reader) DataSize

func (r *Reader) DataSize(i int) int

DataSize returns the size of the i-th symbol's data.

func (*Reader) DwarfFile

func (r *Reader) DwarfFile(i int) string

func (*Reader) Fingerprint added in go1.15

func (r *Reader) Fingerprint() FingerprintType

func (*Reader) Flags

func (r *Reader) Flags() uint32

Flags returns the flag bits read from the object file header.

func (*Reader) NAux

func (r *Reader) NAux(i int) int

NAux returns the number of aux symbols of the i-th symbol.

func (*Reader) NDwarfFile

func (r *Reader) NDwarfFile() int

func (*Reader) NNonpkgdef

func (r *Reader) NNonpkgdef() int

func (*Reader) NNonpkgref

func (r *Reader) NNonpkgref() int

func (*Reader) NPkg

func (r *Reader) NPkg() int

func (*Reader) NRefName added in go1.15

func (r *Reader) NRefName() int

NRefName returns the number of referenced symbol names.

func (*Reader) NReloc

func (r *Reader) NReloc(i int) int

NReloc returns the number of relocations of the i-th symbol.

func (*Reader) NSym

func (r *Reader) NSym() int

func (*Reader) PcdataBase

func (r *Reader) PcdataBase() uint32

AuxDataBase returns the base offset of the aux data block.

func (*Reader) Pkg

func (r *Reader) Pkg(i int) string

func (*Reader) Pkglist

func (r *Reader) Pkglist() []string

func (*Reader) ReadOnly

func (r *Reader) ReadOnly() bool

ReadOnly returns whether r.BytesAt returns read-only bytes.

func (*Reader) RefName added in go1.15

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 (*Reader) Reloc added in go1.15

func (r *Reader) Reloc(i int, j int) *Reloc

Reloc returns a pointer to the j-th relocation of the i-th symbol.

func (*Reader) RelocOff

func (r *Reader) RelocOff(i int, j int) uint32

RelocOff returns the offset of the j-th relocation of the i-th symbol.

func (*Reader) Relocs added in go1.15

func (r *Reader) Relocs(i int) []Reloc

Relocs returns a pointer to the relocations of the i-th symbol.

func (*Reader) StringAt

func (r *Reader) StringAt(off uint32, len uint32) string

func (*Reader) StringRef

func (r *Reader) StringRef(off uint32) string

func (*Reader) Sym added in go1.15

func (r *Reader) Sym(i int) *Sym

Sym returns a pointer to the i-th symbol.

func (*Reader) SymOff

func (r *Reader) SymOff(i int) uint32

SymOff returns the offset of the i-th symbol.

type RefName added in go1.15

type RefName [RefNameSize]byte

Referenced symbol name.

Serialized format:

RefName struct {
   Sym  symRef
   Name string
}

func (*RefName) Name added in go1.15

func (n *RefName) Name(r *Reader) string

func (*RefName) SetName added in go1.15

func (n *RefName) SetName(x string, w *Writer)

func (*RefName) SetSym added in go1.15

func (n *RefName) SetSym(x SymRef)

func (*RefName) Sym added in go1.15

func (n *RefName) Sym() SymRef

func (*RefName) Write added in go1.15

func (n *RefName) Write(w *Writer)

type Reloc

type Reloc [RelocSize]byte

Relocation.

Serialized format:

Reloc struct {
   Off  int32
   Siz  uint8
   Type uint8
   Add  int64
   Sym  SymRef
}

func (*Reloc) Add

func (r *Reloc) Add() int64

func (*Reloc) Off

func (r *Reloc) Off() int32

func (*Reloc) Set added in go1.15

func (r *Reloc) Set(off int32, size uint8, typ uint8, add int64, sym SymRef)

func (*Reloc) SetAdd added in go1.15

func (r *Reloc) SetAdd(x int64)

func (*Reloc) SetOff added in go1.15

func (r *Reloc) SetOff(x int32)

func (*Reloc) SetSiz added in go1.15

func (r *Reloc) SetSiz(x uint8)

func (*Reloc) SetSym added in go1.15

func (r *Reloc) SetSym(x SymRef)

func (*Reloc) SetType added in go1.15

func (r *Reloc) SetType(x uint8)

func (*Reloc) Siz

func (r *Reloc) Siz() uint8

func (*Reloc) Sym

func (r *Reloc) Sym() SymRef

func (*Reloc) Type

func (r *Reloc) Type() uint8

func (*Reloc) Write

func (r *Reloc) Write(w *Writer)

type Sym

type Sym [SymSize]byte

Symbol definition.

Serialized format:

Sym struct {
   Name  string
   ABI   uint16
   Type  uint8
   Flag  uint8
   Siz   uint32
   Align uint32
}

func (*Sym) ABI

func (s *Sym) ABI() uint16

func (*Sym) Align added in go1.15

func (s *Sym) Align() uint32

func (*Sym) Dupok

func (s *Sym) Dupok() bool

func (*Sym) Flag

func (s *Sym) Flag() uint8

func (*Sym) IsGoType

func (s *Sym) IsGoType() bool

func (*Sym) Leaf

func (s *Sym) Leaf() bool

func (*Sym) Local

func (s *Sym) Local() bool

func (*Sym) Name

func (s *Sym) Name(r *Reader) string

func (*Sym) NoSplit added in go1.15

func (s *Sym) NoSplit() bool

func (*Sym) ReflectMethod

func (s *Sym) ReflectMethod() bool

func (*Sym) SetABI added in go1.15

func (s *Sym) SetABI(x uint16)

func (*Sym) SetAlign added in go1.15

func (s *Sym) SetAlign(x uint32)

func (*Sym) SetFlag added in go1.15

func (s *Sym) SetFlag(x uint8)

func (*Sym) SetName added in go1.15

func (s *Sym) SetName(x string, w *Writer)

func (*Sym) SetSiz added in go1.15

func (s *Sym) SetSiz(x uint32)

func (*Sym) SetType added in go1.15

func (s *Sym) SetType(x uint8)

func (*Sym) Siz

func (s *Sym) Siz() uint32

func (*Sym) TopFrame

func (s *Sym) TopFrame() bool

func (*Sym) Type

func (s *Sym) Type() uint8
func (s *Sym) Typelink() bool

func (*Sym) Write

func (s *Sym) Write(w *Writer)

type SymRef

type SymRef struct {
	PkgIdx uint32
	SymIdx uint32
}

Symbol reference.

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

func NewWriter

func NewWriter(wr *bio.Writer) *Writer

func (*Writer) AddString

func (w *Writer) AddString(s string)

func (*Writer) Bytes

func (w *Writer) Bytes(s []byte)

func (*Writer) Offset

func (w *Writer) Offset() uint32

func (*Writer) RawString

func (w *Writer) RawString(s string)

func (*Writer) StringRef

func (w *Writer) StringRef(s string)

func (*Writer) Uint16

func (w *Writer) Uint16(x uint16)

func (*Writer) Uint32

func (w *Writer) Uint32(x uint32)

func (*Writer) Uint64

func (w *Writer) Uint64(x uint64)

func (*Writer) Uint8

func (w *Writer) Uint8(x uint8)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL