Black Lives Matter. Support the Equal Justice Initiative.

Package goobj

import "cmd/internal/goobj"
Overview
Index

Overview ▾

Index ▾

Constants
func BuiltinIdx(name string, abi int) int
func BuiltinName(i int) (string, int)
func NBuiltin() int
type Aux
    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)
type CUFileIndex
type FingerprintType
    func (fp FingerprintType) IsZero() bool
type FuncInfo
    func (*FuncInfo) ReadArgs(b []byte) uint32
    func (*FuncInfo) ReadFile(b []byte, filesoff uint32, k uint32) CUFileIndex
    func (*FuncInfo) ReadFuncFlag(b []byte) objabi.FuncFlag
    func (*FuncInfo) ReadFuncID(b []byte) objabi.FuncID
    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) []SymRef
    func (*FuncInfo) ReadPcfile(b []byte) SymRef
    func (*FuncInfo) ReadPcinline(b []byte) SymRef
    func (*FuncInfo) ReadPcline(b []byte) SymRef
    func (*FuncInfo) ReadPcsp(b []byte) SymRef
    func (a *FuncInfo) Write(w *bytes.Buffer)
type FuncInfoLengths
type Hash64Type
type HashType
type Header
    func (h *Header) Read(r *Reader) error
    func (h *Header) Size() int
    func (h *Header) Write(w *Writer)
type ImportedPkg
    func (p *ImportedPkg) Write(w *Writer)
type InlTreeNode
    func (inl *InlTreeNode) Read(b []byte) []byte
    func (inl *InlTreeNode) Write(w *bytes.Buffer)
type Reader
    func NewReaderFromBytes(b []byte, readonly bool) *Reader
    func (r *Reader) Autolib() []ImportedPkg
    func (r *Reader) Aux(i uint32, j int) *Aux
    func (r *Reader) AuxOff(i uint32, j int) uint32
    func (r *Reader) Auxs(i uint32) []Aux
    func (r *Reader) BytesAt(off uint32, len int) []byte
    func (r *Reader) Data(i uint32) []byte
    func (r *Reader) DataOff(i uint32) uint32
    func (r *Reader) DataSize(i uint32) int
    func (r *Reader) File(i int) string
    func (r *Reader) Fingerprint() FingerprintType
    func (r *Reader) Flags() uint32
    func (r *Reader) FromAssembly() bool
    func (r *Reader) Hash(i uint32) *HashType
    func (r *Reader) Hash64(i uint32) uint64
    func (r *Reader) NAux(i uint32) int
    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
    func (r *Reader) NRefName() int
    func (r *Reader) NReloc(i uint32) int
    func (r *Reader) NSym() int
    func (r *Reader) NeedNameExpansion() bool
    func (r *Reader) Pkg(i int) string
    func (r *Reader) Pkglist() []string
    func (r *Reader) ReadOnly() bool
    func (r *Reader) RefFlags(i int) *RefFlags
    func (r *Reader) RefName(i int) *RefName
    func (r *Reader) Reloc(i uint32, j int) *Reloc
    func (r *Reader) RelocOff(i uint32, j int) uint32
    func (r *Reader) Relocs(i uint32) []Reloc
    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
    func (r *Reader) SymOff(i uint32) uint32
type RefFlags
    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)
type RefName
    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)
type Reloc
    func (r *Reloc) Add() int64
    func (r *Reloc) Off() int32
    func (r *Reloc) Set(off int32, size uint8, typ uint16, 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 uint16)
    func (r *Reloc) Siz() uint8
    func (r *Reloc) Sym() SymRef
    func (r *Reloc) Type() uint16
    func (r *Reloc) Write(w *Writer)
type Sym
    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
    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) Type() uint8
    func (s *Sym) Typelink() bool
    func (s *Sym) UsedInIface() bool
    func (s *Sym) Write(w *Writer)
type SymRef
type Writer
    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)

Package files

builtin.go builtinlist.go funcinfo.go objfile.go

Constants

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

Sym.Flag

const (
    SymFlagDupok = 1 << iota
    SymFlagLocal
    SymFlagTypelink
    SymFlagLeaf
    SymFlagNoSplit
    SymFlagReflectMethod
    SymFlagGoType
)

Sym.Flag2

const (
    SymFlagUsedInIface = 1 << iota
    SymFlagItab
)

Aux Type

const (
    AuxGotype = iota
    AuxFuncInfo
    AuxFuncdata
    AuxDwarfInfo
    AuxDwarfLoc
    AuxDwarfRanges
    AuxDwarfLines
    AuxPcsp
    AuxPcfile
    AuxPcline
    AuxPcinline
    AuxPcdata
)
const AuxSize = 1 + 8
const Hash64Size = 8
const HashSize = sha1.Size
const Magic = "\x00go117ld"
const RefFlagsSize = 8 + 1 + 1
const RefNameSize = 8 + stringRefSize
const RelocSize = 4 + 1 + 2 + 8 + 8
const SymABIstatic = ^uint16(0)
const SymSize = stringRefSize + 2 + 1 + 1 + 1 + 4 + 4

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.

type Aux

Aux symbol info.

Serialized format: Aux struct {

Type uint8
Sym  SymRef

}

type Aux [AuxSize]byte

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

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

type CUFileIndex uint32

type FingerprintType

type FingerprintType [8]byte

func (FingerprintType) IsZero

func (fp FingerprintType) IsZero() bool

type FuncInfo

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
    FuncFlag objabi.FuncFlag

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

    InlTree []InlTreeNode
}

func (*FuncInfo) ReadArgs

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

func (*FuncInfo) ReadFile

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

func (*FuncInfo) ReadFuncFlag

func (*FuncInfo) ReadFuncFlag(b []byte) objabi.FuncFlag

func (*FuncInfo) ReadFuncID

func (*FuncInfo) ReadFuncID(b []byte) objabi.FuncID

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

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
}

type Hash64Type

Hash64

type Hash64Type [Hash64Size]byte

type HashType

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 (*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

Autolib

type ImportedPkg struct {
    Pkg         string
    Fingerprint FingerprintType
}

func (*ImportedPkg) Write

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

type InlTreeNode

InlTreeNode is the serialized form of FileInfo.InlTree.

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

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

Referenced symbol flags.

Serialized format: RefFlags struct {

Sym   symRef
Flag  uint8
Flag2 uint8

}

type RefFlags [RefFlagsSize]byte

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

Referenced symbol name.

Serialized format: RefName struct {

Sym  symRef
Name string

}

type RefName [RefNameSize]byte

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

Relocation.

Serialized format: Reloc struct {

Off  int32
Siz  uint8
Type uint16
Add  int64
Sym  SymRef

}

type Reloc [RelocSize]byte

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 uint16, 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 uint16)

func (*Reloc) Siz

func (r *Reloc) Siz() uint8

func (*Reloc) Sym

func (r *Reloc) Sym() SymRef

func (*Reloc) Type

func (r *Reloc) Type() uint16

func (*Reloc) Write

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

type Sym

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

Symbol reference.

type SymRef struct {
    PkgIdx uint32
    SymIdx uint32
}

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)