goobj

package
v0.0.0-...-9dfbc21 Latest Latest
Warning

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

Go to latest
Published: Oct 5, 2023 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
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
)

Package Index.

View Source
const (
	BlkAutolib = iota
	BlkPkgIdx
	BlkFile
	BlkSymdef
	BlkHashed64def
	BlkHasheddef
	BlkNonpkgdef
	BlkNonpkgref
	BlkRefFlags
	BlkHash64
	BlkHash
	BlkRelocIdx
	BlkAuxIdx
	BlkDataIdx
	BlkReloc
	BlkAux
	BlkData
	BlkPcdata
	BlkRefName
	BlkEnd
	NBlk
)

Blocks

View Source
const (
	ObjFlagShared            = 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
)
View Source
const (
	SymFlagDupok = 1 << iota
	SymFlagLocal
	SymFlagTypelink
	SymFlagLeaf
	SymFlagNoSplit
	SymFlagReflectMethod
	SymFlagGoType
	SymFlagTopFrame
)

Sym.Flag

View Source
const (
	SymFlagUsedInIface = 1 << iota
	SymFlagItab
)

Sym.Flag2

View Source
const (
	AuxGotype = iota
	AuxFuncInfo
	AuxFuncdata
	AuxDwarfInfo
	AuxDwarfLoc
	AuxDwarfRanges
	AuxDwarfLines
	AuxPcsp
	AuxPcfile
	AuxPcline
	AuxPcinline
	AuxPcdata
)

Aux Type

View Source
const AuxSize = 1 + 8
View Source
const Hash64Size = 8
View Source
const HashSize = sha1.Size
View Source
const Magic = "\x00go116ld"
View Source
const RefFlagsSize = 8 + 1 + 1
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 + 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

func (a *Aux) SetSym(x SymRef)

func (*Aux) SetType

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 CUFileIndex

type CUFileIndex uint32

CUFileIndex is used to index the filenames that are stored in the per-package/per-CU FileList.

type FingerprintType

type FingerprintType [8]byte

func (FingerprintType) IsZero

func (fp FingerprintType) IsZero() bool

type FuncInfo

type FuncInfo struct {
	Args   uint32
	Locals uint32
	FuncID objabi.FuncID

	Pcsp        SymRef
	Pcfile      SymRef
	Pcline      SymRef
	Pcinline    SymRef
	Pcdata      []SymRef
	Funcdataoff []uint32
	File        []CUFileIndex

	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

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

func (*FuncInfo) ReadFile

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

func (*FuncInfo) ReadFuncID

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

func (*FuncInfo) ReadFuncInfoLengths

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

func (*FuncInfo) ReadFuncdataoff

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

func (*FuncInfo) ReadInlTree

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

func (*FuncInfo) ReadLocals

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

func (*FuncInfo) ReadPcdata

func (*FuncInfo) ReadPcdata(b []byte) []SymRef

func (*FuncInfo) ReadPcfile

func (*FuncInfo) ReadPcfile(b []byte) SymRef

func (*FuncInfo) ReadPcinline

func (*FuncInfo) ReadPcinline(b []byte) SymRef

func (*FuncInfo) ReadPcline

func (*FuncInfo) ReadPcline(b []byte) SymRef

func (*FuncInfo) ReadPcsp

func (*FuncInfo) ReadPcsp(b []byte) SymRef

func (*FuncInfo) Write

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

type FuncInfoLengths

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 Hash64Type

type Hash64Type [Hash64Size]byte

Hash64

type HashType

type HashType [HashSize]byte

Hash

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

type ImportedPkg struct {
	Pkg         string
	Fingerprint FingerprintType
}

Autolib

func (*ImportedPkg) Write

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

type InlTreeNode

type InlTreeNode struct {
	Parent   int32
	File     CUFileIndex
	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

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 (*Reader) AuxOff

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 (*Reader) Auxs

func (r *Reader) Auxs(i uint32) []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 uint32) []byte

Data returns the i-th symbol's data.

func (*Reader) DataOff

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

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

func (*Reader) DataSize

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

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

func (*Reader) File

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

func (*Reader) Fingerprint

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) FromAssembly

func (r *Reader) FromAssembly() bool

func (*Reader) Hash

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 (*Reader) Hash64

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 (*Reader) NAux

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

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

func (*Reader) NFile

func (r *Reader) NFile() int

func (*Reader) NHashed64def

func (r *Reader) NHashed64def() int

func (*Reader) NHasheddef

func (r *Reader) NHasheddef() 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) NRefFlags

func (r *Reader) NRefFlags() int

NRefFlags returns the number of referenced symbol flags.

func (*Reader) NRefName

func (r *Reader) NRefName() int

NRefName returns the number of referenced symbol names.

func (*Reader) NReloc

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

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

func (*Reader) NSym

func (r *Reader) NSym() int

func (*Reader) NeedNameExpansion

func (r *Reader) NeedNameExpansion() bool

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) RefFlags

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 (*Reader) RefName

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

func (r *Reader) Reloc(i uint32, 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 uint32, j int) uint32

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

func (*Reader) Relocs

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

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

func (*Reader) Shared

func (r *Reader) Shared() bool

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

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

Sym returns a pointer to the i-th symbol.

func (*Reader) SymOff

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

SymOff returns the offset of the i-th symbol.

type RefFlags

type RefFlags [RefFlagsSize]byte

Referenced symbol flags.

Serialized format:

RefFlags struct {
   Sym   symRef
   Flag  uint8
   Flag2 uint8
}

func (*RefFlags) Flag

func (r *RefFlags) Flag() uint8

func (*RefFlags) Flag2

func (r *RefFlags) Flag2() uint8

func (*RefFlags) SetFlag

func (r *RefFlags) SetFlag(x uint8)

func (*RefFlags) SetFlag2

func (r *RefFlags) SetFlag2(x uint8)

func (*RefFlags) SetSym

func (r *RefFlags) SetSym(x SymRef)

func (*RefFlags) Sym

func (r *RefFlags) Sym() SymRef

func (*RefFlags) Write

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

type RefName

type RefName [RefNameSize]byte

Referenced symbol name.

Serialized format:

RefName struct {
   Sym  symRef
   Name string
}

func (*RefName) Name

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

func (*RefName) SetName

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

func (*RefName) SetSym

func (n *RefName) SetSym(x SymRef)

func (*RefName) Sym

func (n *RefName) Sym() SymRef

func (*RefName) Write

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

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

func (*Reloc) SetAdd

func (r *Reloc) SetAdd(x int64)

func (*Reloc) SetOff

func (r *Reloc) SetOff(x int32)

func (*Reloc) SetSiz

func (r *Reloc) SetSiz(x uint8)

func (*Reloc) SetSym

func (r *Reloc) SetSym(x SymRef)

func (*Reloc) SetType

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
   Flag2 uint8
   Siz   uint32
   Align uint32
}

func (*Sym) ABI

func (s *Sym) ABI() uint16

func (*Sym) Align

func (s *Sym) Align() uint32

func (*Sym) Dupok

func (s *Sym) Dupok() bool

func (*Sym) Flag

func (s *Sym) Flag() uint8

func (*Sym) Flag2

func (s *Sym) Flag2() uint8

func (*Sym) IsGoType

func (s *Sym) IsGoType() bool

func (*Sym) IsItab

func (s *Sym) IsItab() 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) NameLen

func (s *Sym) NameLen(r *Reader) int

Returns the length of the name of the symbol.

func (*Sym) NoSplit

func (s *Sym) NoSplit() bool

func (*Sym) ReflectMethod

func (s *Sym) ReflectMethod() bool

func (*Sym) SetABI

func (s *Sym) SetABI(x uint16)

func (*Sym) SetAlign

func (s *Sym) SetAlign(x uint32)

func (*Sym) SetFlag

func (s *Sym) SetFlag(x uint8)

func (*Sym) SetFlag2

func (s *Sym) SetFlag2(x uint8)

func (*Sym) SetName

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

func (*Sym) SetSiz

func (s *Sym) SetSiz(x uint32)

func (*Sym) SetType

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) UsedInIface

func (s *Sym) UsedInIface() 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