Documentation
¶
Index ¶
Constants ¶
View Source
const ( FuncFlag_TOPFRAME = 1 << iota FuncFlag_SPWRITE FuncFlag_ASM )
Note: This list must match the list in runtime/symtab.go.
View Source
const ( // PCDATA_UnsafePoint values. PCDATA_UnsafePointSafe = -1 // Safe for async preemption PCDATA_UnsafePointUnsafe = -2 // Unsafe for async preemption // PCDATA_Restart1(2) apply on a sequence of instructions, within // which if an async preemption happens, we should back off the PC // to the start of the sequence when resume. // We need two so we can distinguish the start/end of the sequence // in case that two sequences are next to each other. PCDATA_Restart1 = -3 PCDATA_Restart2 = -4 // Like PCDATA_RestartAtEntry, but back to function entry if async // preempted. PCDATA_RestartAtEntry = -5 )
View Source
const ( // ArgsSizeUnknown is set in Func.argsize to mark all functions // whose argument size is unknown (C vararg functions, and // assembly code without an explicit specification). // This value is generated by the compiler, assembler, or linker. ArgsSizeUnknown = -0x80000000 )
PCDATA and FUNCDATA table indexes.
See funcdata.h and $GROOT/src/cmd/internal/objabi/funcdata.go.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type CFunc ¶
type CFunc struct {
// C function name
Name string
// entry pc relative to entire text segment
EntryOff uint32
// function text size in bytes
TextSize uint32
// maximum stack depth of the function
MaxStack uintptr
// PC->SP delta lists of the function
Pcsp [][2]uint32
}
CFunc is a function information for C func
type Func ¶
type Func struct {
ID uint8 // see runtime/symtab.go
Flag uint8 // see runtime/symtab.go
ArgsSize int32 // args byte size
EntryOff uint32 // start pc, offset to moduledata.text
TextSize uint32 // size of func text
DeferReturn uint32 // offset of start of a deferreturn call instruction from entry, if any.
FileIndex uint32 // index into filetab
Name string // name of function
// PC data
Pcsp *Pcdata // PC -> SP delta
Pcfile *Pcdata // PC -> file index
Pcline *Pcdata // PC -> line number
PcUnsafePoint *Pcdata // PC -> unsafe point, must be PCDATA_UnsafePointSafe or PCDATA_UnsafePointUnsafe
PcStackMapIndex *Pcdata // PC -> stack map index, relative to ArgsPointerMaps and LocalsPointerMaps
PcInlTreeIndex *Pcdata // PC -> inlining tree index, relative to InlTree
PcArgLiveIndex *Pcdata // PC -> arg live index, relative to ArgLiveInfo
// Func data, must implement encoding.BinaryMarshaler
ArgsPointerMaps encoding.BinaryMarshaler // concrete type: *StackMap
LocalsPointerMaps encoding.BinaryMarshaler // concrete type: *StackMap
StackObjects encoding.BinaryMarshaler
InlTree encoding.BinaryMarshaler
OpenCodedDeferInfo encoding.BinaryMarshaler
ArgInfo encoding.BinaryMarshaler
ArgLiveInfo encoding.BinaryMarshaler
WrapInfo encoding.BinaryMarshaler
}
Func contains information about a function.
type GoC ¶
type GoC struct {
// CName is the name of corresponding C function
CName string
// CEntry points out where to store the entry address of corresponding C function.
// It won't be set if nil
CEntry *uintptr
// GoFunc is the POINTER of corresponding go stub function.
// It is used to generate Go-C ABI conversion wrapper and receive the wrapper's address
// eg. &func(a int, b int) int
// FOR
// int add(int a, int b)
// It won't be set if nil
GoFunc interface{}
}
GoC is the wrapper for Go calls to C
type Loader ¶
Loader is a helper used to load a module simply
func (Loader) LoadOne ¶
func (self Loader) LoadOne(text []byte, funcName string, frameSize int, argSize int, argPtrs []bool, localPtrs []bool, pcdata Pcdata) Function
LoadFuncs loads only one function as module, and returns the function pointer
- text: machine code
- funcName: function name
- frameSize: stack frame size.
- argSize: argument total size (in bytes)
- argPtrs: indicates if a slot (8 Bytes) of arguments memory stores pointer, from low to high
- localPtrs: indicates if a slot (8 Bytes) of local variants memory stores pointer, from low to high
WARN:
- the function MUST has fixed SP offset equaling to this, otherwise it go.gentraceback will fail
- the function MUST has only one stack map for all arguments and local variants
type Options ¶
type Options struct {
// NoPreempt is used to disable async preemption for this module
NoPreempt bool
}
Options used to load a module
type Pcdata ¶
type Pcdata []Pcvalue
Pcdata represents pc->value mapping table.
WARN: we use ** [Pcdata[i].PC, Pcdata[i+1].PC) ** as the range where the Pcdata[i].Val is effective.
Source Files
¶
Click to show internal directories.
Click to hide internal directories.