1  /****************************************************************************
2   ****************************************************************************
3   ***
4   ***   This header was automatically generated from a Linux kernel header
5   ***   of the same name, to make information necessary for userspace to
6   ***   call into the kernel available to libc.  It contains only constants,
7   ***   structures, and macros generated from the original header, and thus,
8   ***   contains no copyrightable information.
9   ***
10   ***   To edit the content of this header, modify the corresponding
11   ***   source file (e.g. under external/kernel-headers/original/) then
12   ***   run bionic/libc/kernel/tools/update_all.py
13   ***
14   ***   Any manual change here will be lost the next time this script will
15   ***   be run. You've been warned!
16   ***
17   ****************************************************************************
18   ****************************************************************************/
19  #ifndef _UAPI__LINUX_BTF_H__
20  #define _UAPI__LINUX_BTF_H__
21  #include <linux/types.h>
22  #define BTF_MAGIC 0xeB9F
23  #define BTF_VERSION 1
24  struct btf_header {
25    __u16 magic;
26    __u8 version;
27    __u8 flags;
28    __u32 hdr_len;
29    __u32 type_off;
30    __u32 type_len;
31    __u32 str_off;
32    __u32 str_len;
33  };
34  #define BTF_MAX_TYPE 0x000fffff
35  #define BTF_MAX_NAME_OFFSET 0x00ffffff
36  #define BTF_MAX_VLEN 0xffff
37  struct btf_type {
38    __u32 name_off;
39    __u32 info;
40    union {
41      __u32 size;
42      __u32 type;
43    };
44  };
45  #define BTF_INFO_KIND(info) (((info) >> 24) & 0x0f)
46  #define BTF_INFO_VLEN(info) ((info) & 0xffff)
47  #define BTF_INFO_KFLAG(info) ((info) >> 31)
48  #define BTF_KIND_UNKN 0
49  #define BTF_KIND_INT 1
50  #define BTF_KIND_PTR 2
51  #define BTF_KIND_ARRAY 3
52  #define BTF_KIND_STRUCT 4
53  #define BTF_KIND_UNION 5
54  #define BTF_KIND_ENUM 6
55  #define BTF_KIND_FWD 7
56  #define BTF_KIND_TYPEDEF 8
57  #define BTF_KIND_VOLATILE 9
58  #define BTF_KIND_CONST 10
59  #define BTF_KIND_RESTRICT 11
60  #define BTF_KIND_FUNC 12
61  #define BTF_KIND_FUNC_PROTO 13
62  #define BTF_KIND_VAR 14
63  #define BTF_KIND_DATASEC 15
64  #define BTF_KIND_MAX BTF_KIND_DATASEC
65  #define NR_BTF_KINDS (BTF_KIND_MAX + 1)
66  #define BTF_INT_ENCODING(VAL) (((VAL) & 0x0f000000) >> 24)
67  #define BTF_INT_OFFSET(VAL) (((VAL) & 0x00ff0000) >> 16)
68  #define BTF_INT_BITS(VAL) ((VAL) & 0x000000ff)
69  #define BTF_INT_SIGNED (1 << 0)
70  #define BTF_INT_CHAR (1 << 1)
71  #define BTF_INT_BOOL (1 << 2)
72  struct btf_enum {
73    __u32 name_off;
74    __s32 val;
75  };
76  struct btf_array {
77    __u32 type;
78    __u32 index_type;
79    __u32 nelems;
80  };
81  struct btf_member {
82    __u32 name_off;
83    __u32 type;
84    __u32 offset;
85  };
86  #define BTF_MEMBER_BITFIELD_SIZE(val) ((val) >> 24)
87  #define BTF_MEMBER_BIT_OFFSET(val) ((val) & 0xffffff)
88  struct btf_param {
89    __u32 name_off;
90    __u32 type;
91  };
92  enum {
93    BTF_VAR_STATIC = 0,
94    BTF_VAR_GLOBAL_ALLOCATED = 1,
95    BTF_VAR_GLOBAL_EXTERN = 2,
96  };
97  enum btf_func_linkage {
98    BTF_FUNC_STATIC = 0,
99    BTF_FUNC_GLOBAL = 1,
100    BTF_FUNC_EXTERN = 2,
101  };
102  struct btf_var {
103    __u32 linkage;
104  };
105  struct btf_var_secinfo {
106    __u32 type;
107    __u32 offset;
108    __u32 size;
109  };
110  #endif
111