Documentation
¶
Overview ¶
Package btf handles data encoded according to the BPF Type Format.
The canonical documentation lives in the Linux kernel repository and is available at https://www.kernel.org/doc/html/latest/bpf/btf.html
The API is very much unstable. You should only use this via the main ebpf library.
Index ¶
- Variables
- func Sizeof(typ Type) (int, error)
- type Array
- type COREFixup
- type COREFixups
- type COREKind
- type Const
- type Datasec
- type Enum
- type EnumValue
- type Float
- type Func
- type FuncLinkage
- type FuncParam
- type FuncProto
- type Fwd
- type FwdKind
- type Handle
- type ID
- type Int
- type IntEncoding
- type Map
- type Member
- type NamedType
- type Pointer
- type Program
- type Restrict
- type Spec
- type Struct
- type Type
- type TypeID
- type Typedef
- type Union
- type Var
- type VarLinkage
- type VarSecinfo
- type Void
- type Volatile
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrNotSupported = internal.ErrNotSupported ErrNotFound = errors.New("not found") ErrNoExtendedInfo = errors.New("no extended info") )
Errors returned by BTF functions.
Functions ¶
Types ¶
type COREFixup ¶ added in v0.6.0
COREFixup is the result of computing a CO-RE relocation for a target.
type COREFixups ¶ added in v0.6.0
func (COREFixups) Apply ¶ added in v0.6.0
func (fs COREFixups) Apply(insns asm.Instructions) (asm.Instructions, error)
Apply a set of CO-RE relocations to a BPF program.
type Datasec ¶
type Datasec struct {
TypeID
Name string
Size uint32
Vars []VarSecinfo
}
Datasec is a global program section containing data.
type Func ¶
type Func struct {
TypeID
Name string
Type Type
Linkage FuncLinkage
}
Func is a function definition.
type FuncLinkage ¶ added in v0.6.2
type FuncLinkage int
FuncLinkage describes BTF function linkage metadata.
const ( StaticFunc FuncLinkage = iota // static GlobalFunc // global ExternFunc // extern )
Equivalent of enum btf_func_linkage.
func (FuncLinkage) String ¶ added in v0.6.2
func (i FuncLinkage) String() string
type Handle ¶
type Handle struct {
// contains filtered or unexported fields
}
Handle is a reference to BTF loaded into the kernel.
func NewHandle ¶
NewHandle loads BTF into the kernel.
Returns ErrNotSupported if BTF is not supported.
func NewHandleFromID ¶ added in v0.7.0
NewHandleFromID returns the BTF handle for a given id.
Returns ErrNotExist, if there is no BTF with the given id.
Requires CAP_SYS_ADMIN.
type Int ¶
type Int struct {
TypeID
Name string
// The size of the integer in bytes.
Size uint32
Encoding IntEncoding
// OffsetBits is the starting bit offset. Currently always 0.
// See https://www.kernel.org/doc/html/latest/bpf/btf.html#btf-kind-int
OffsetBits uint32
Bits byte
}
Int is an integer of a given length.
type Member ¶
type Member struct {
Name string
Type Type
// OffsetBits is the bit offset of this member.
OffsetBits uint32
BitfieldSize uint32
}
Member is part of a Struct or Union.
It is not a valid Type.
type Program ¶
type Program struct {
// contains filtered or unexported fields
}
Program is the BTF information for a stream of instructions.
func (*Program) Fixups ¶ added in v0.7.0
func (p *Program) Fixups(target *Spec) (COREFixups, error)
Fixups returns the changes required to adjust the program to the target.
Passing a nil target will relocate against the running kernel.
func (*Program) FuncInfos ¶ added in v0.7.0
FuncInfos returns the binary form of BTF function infos.
type Spec ¶
type Spec struct {
// contains filtered or unexported fields
}
Spec represents decoded BTF.
func LoadKernelSpec ¶
LoadKernelSpec returns the current kernel's BTF information.
Requires a >= 5.5 kernel with CONFIG_DEBUG_INFO_BTF enabled. Returns ErrNotSupported if BTF is not enabled.
func LoadRawSpec ¶ added in v0.7.0
LoadRawSpec reads a blob of BTF data that isn't wrapped in an ELF file.
Prefer using LoadSpecFromReader, since this function only supports a subset of BTF.
func LoadSpecFromReader ¶
LoadSpecFromReader reads BTF sections from an ELF.
Returns ErrNotFound if the reader contains no BTF.
func (*Spec) FindType ¶
FindType searches for a type with a specific name.
Called T a type that satisfies Type, typ must be a non-nil **T. On success, the address of the found type will be copied in typ.
Returns an error wrapping ErrNotFound if no matching type exists in spec.
Example ¶
// Acquire a Spec via one of its constructors.
spec := new(Spec)
// Declare a variable of the desired type
var foo *Struct
if err := spec.FindType("foo", &foo); err != nil {
// There is no struct with name foo, or there
// are multiple possibilities.
}
// We've found struct foo
fmt.Println(foo.Name)
type Struct ¶
type Struct struct {
TypeID
Name string
// The size of the struct including padding, in bytes
Size uint32
Members []Member
}
Struct is a compound type of consecutive members.
type Type ¶
Type represents a type described by BTF.
Example (ValidTypes) ¶
The following are valid Types.
There currently is no better way to document which types implement an interface.
var _ Type = &Void{}
var _ Type = &Int{}
var _ Type = &Pointer{}
var _ Type = &Array{}
var _ Type = &Struct{}
var _ Type = &Union{}
var _ Type = &Enum{}
var _ Type = &Fwd{}
var _ Type = &Typedef{}
var _ Type = &Volatile{}
var _ Type = &Const{}
var _ Type = &Restrict{}
var _ Type = &Func{}
var _ Type = &FuncProto{}
var _ Type = &Var{}
var _ Type = &Datasec{}
type Union ¶
type Union struct {
TypeID
Name string
// The size of the union including padding, in bytes.
Size uint32
Members []Member
}
Union is a compound type where members occupy the same memory.
type Var ¶
type Var struct {
TypeID
Name string
Type Type
Linkage VarLinkage
}
Var is a global variable.
type VarLinkage ¶ added in v0.6.2
type VarLinkage int
VarLinkage describes BTF variable linkage metadata.
const ( StaticVar VarLinkage = iota // static GlobalVar // global ExternVar // extern )
func (VarLinkage) String ¶ added in v0.6.2
func (i VarLinkage) String() string