Commit 95f989a05b
Changed files (1)
lib
std
os
linux
bpf
lib/std/os/linux/bpf/btf.zig
@@ -1,12 +1,12 @@
const std = @import("../../../std.zig");
-const magic = 0xeb9f;
-const version = 1;
+pub const magic = 0xeb9f;
+pub const version = 1;
pub const ext = @import("btf_ext.zig");
/// All offsets are in bytes relative to the end of this header
-pub const Header = packed struct {
+pub const Header = extern struct {
magic: u16,
version: u8,
flags: u8,
@@ -34,15 +34,15 @@ pub const max_name_offset = 0xffffff;
/// Max number of struct/union/enum member of func args
pub const max_vlen = 0xffff;
-pub const Type = packed struct {
+pub const Type = extern struct {
name_off: u32,
- info: packed struct {
+ info: packed struct(u32) {
/// number of struct's members
vlen: u16,
unused_1: u8,
kind: Kind,
- unused_2: u3,
+ unused_2: u2,
/// used by Struct, Union, and Fwd
kind_flag: bool,
@@ -53,31 +53,35 @@ pub const Type = packed struct {
///
/// type is used by Ptr, Typedef, Volatile, Const, Restrict, Func,
/// FuncProto, and Var. It is a type_id referring to another type
- size_type: union { size: u32, typ: u32 },
+ size_type: extern union { size: u32, typ: u32 },
};
/// For some kinds, Type is immediately followed by extra data
-pub const Kind = enum(u4) {
+pub const Kind = enum(u5) {
unknown,
int,
ptr,
array,
- structure,
- kind_union,
- enumeration,
+ @"struct",
+ @"union",
+ @"enum",
fwd,
typedef,
- kind_volatile,
- constant,
+ @"volatile",
+ @"const",
restrict,
func,
- funcProto,
- variable,
- dataSec,
+ func_proto,
+ @"var",
+ datasec,
+ float,
+ decl_tag,
+ type_tag,
+ enum64,
};
-/// Int kind is followed by this struct
-pub const IntInfo = packed struct {
+/// int kind is followed by this struct
+pub const IntInfo = packed struct(u32) {
bits: u8,
unused: u8,
offset: u8,
@@ -92,36 +96,43 @@ test "IntInfo is 32 bits" {
try std.testing.expectEqual(@bitSizeOf(IntInfo), 32);
}
-/// Enum kind is followed by this struct
-pub const Enum = packed struct {
+/// enum kind is followed by this struct
+pub const Enum = extern struct {
name_off: u32,
val: i32,
};
-/// Array kind is followd by this struct
-pub const Array = packed struct {
+/// enum64 kind is followed by this struct
+pub const Enum64 = extern struct {
+ name_off: u32,
+ val_lo32: i32,
+ val_hi32: i32,
+};
+
+/// array kind is followd by this struct
+pub const Array = extern struct {
typ: u32,
index_type: u32,
nelems: u32,
};
-/// Struct and Union kinds are followed by multiple Member structs. The exact
+/// struct and union kinds are followed by multiple Member structs. The exact
/// number is stored in vlen
-pub const Member = packed struct {
+pub const Member = extern struct {
name_off: u32,
typ: u32,
/// if the kind_flag is set, offset contains both member bitfield size and
/// bit offset, the bitfield size is set for bitfield members. If the type
/// info kind_flag is not set, the offset contains only bit offset
- offset: packed struct {
+ offset: packed struct(u32) {
bit: u24,
bitfield_size: u8,
},
};
-/// FuncProto is followed by multiple Params, the exact number is stored in vlen
-pub const Param = packed struct {
+/// func_proto is followed by multiple Params, the exact number is stored in vlen
+pub const Param = extern struct {
name_off: u32,
typ: u32,
};
@@ -138,16 +149,26 @@ pub const FuncLinkage = enum {
external,
};
-/// Var kind is followd by a single Var struct to describe additional
+/// var kind is followd by a single Var struct to describe additional
/// information related to the variable such as its linkage
-pub const Var = packed struct {
+pub const Var = extern struct {
linkage: u32,
};
-/// Datasec kind is followed by multible VarSecInfo to describe all Var kind
+/// datasec kind is followed by multible VarSecInfo to describe all Var kind
/// types it contains along with it's in-section offset as well as size.
-pub const VarSecInfo = packed struct {
+pub const VarSecInfo = extern struct {
typ: u32,
offset: u32,
size: u32,
};
+
+// decl_tag kind is followed by a single DeclTag struct to describe
+// additional information related to the tag applied location.
+// If component_idx == -1, the tag is applied to a struct, union,
+// variable or function. Otherwise, it is applied to a struct/union
+// member or a func argument, and component_idx indicates which member
+// or argument (0 ... vlen-1).
+pub const DeclTag = extern struct {
+ component_idx: u32,
+};