tools/bpf: sync btf.h header from kernel to tools
authorYonghong Song <yhs@fb.com>
Sun, 16 Dec 2018 06:13:53 +0000 (22:13 -0800)
committerDaniel Borkmann <daniel@iogearbox.net>
Tue, 18 Dec 2018 00:11:59 +0000 (01:11 +0100)
Sync include/uapi/linux/btf.h to tools/include/uapi/linux/btf.h.

Acked-by: Martin KaFai Lau <kafai@fb.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
tools/include/uapi/linux/btf.h

index 14f66948fc95f149e0c77a7412d23421a9ea5e71..7b7475ef2f175c9279915aa8d9eb014845533bd9 100644 (file)
@@ -34,7 +34,9 @@ struct btf_type {
         * bits  0-15: vlen (e.g. # of struct's members)
         * bits 16-23: unused
         * bits 24-27: kind (e.g. int, ptr, array...etc)
-        * bits 28-31: unused
+        * bits 28-30: unused
+        * bit     31: kind_flag, currently used by
+        *             struct, union and fwd
         */
        __u32 info;
        /* "size" is used by INT, ENUM, STRUCT and UNION.
@@ -52,6 +54,7 @@ struct btf_type {
 
 #define BTF_INFO_KIND(info)    (((info) >> 24) & 0x0f)
 #define BTF_INFO_VLEN(info)    ((info) & 0xffff)
+#define BTF_INFO_KFLAG(info)   ((info) >> 31)
 
 #define BTF_KIND_UNKN          0       /* Unknown      */
 #define BTF_KIND_INT           1       /* Integer      */
@@ -110,9 +113,22 @@ struct btf_array {
 struct btf_member {
        __u32   name_off;
        __u32   type;
-       __u32   offset; /* offset in bits */
+       /* If the type info kind_flag is set, the btf_member 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.
+        */
+       __u32   offset;
 };
 
+/* If the struct/union type info kind_flag is set, the
+ * following two macros are used to access bitfield_size
+ * and bit_offset from btf_member.offset.
+ */
+#define BTF_MEMBER_BITFIELD_SIZE(val)  ((val) >> 24)
+#define BTF_MEMBER_BIT_OFFSET(val)     ((val) & 0xffffff)
+
 /* BTF_KIND_FUNC_PROTO is followed by multiple "struct btf_param".
  * The exact number of btf_param is stored in the vlen (of the
  * info in "struct btf_type").