Commit fbcf93eb authored by Martin KaFai Lau's avatar Martin KaFai Lau Committed by Daniel Borkmann
Browse files

bpf: btf: Clean up btf.h in uapi



This patch cleans up btf.h in uapi:
1) Rename "name" to "name_off" to better reflect it is an offset to the
   string section instead of a char array.
2) Remove unused value BTF_FLAGS_COMPR and BTF_MAGIC_SWAP

Suggested-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Signed-off-by: default avatarMartin KaFai Lau <kafai@fb.com>
Acked-by: default avatarAlexei Starovoitov <ast@kernel.org>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent aaa64527
Loading
Loading
Loading
Loading
+3 −5
Original line number Original line Diff line number Diff line
@@ -6,9 +6,7 @@
#include <linux/types.h>
#include <linux/types.h>


#define BTF_MAGIC	0xeB9F
#define BTF_MAGIC	0xeB9F
#define BTF_MAGIC_SWAP	0x9FeB
#define BTF_VERSION	1
#define BTF_VERSION	1
#define BTF_FLAGS_COMPR	0x01


struct btf_header {
struct btf_header {
	__u16	magic;
	__u16	magic;
@@ -43,7 +41,7 @@ struct btf_header {
#define BTF_STR_OFFSET(ref)	((ref) & BTF_MAX_NAME_OFFSET)
#define BTF_STR_OFFSET(ref)	((ref) & BTF_MAX_NAME_OFFSET)


struct btf_type {
struct btf_type {
	__u32 name;
	__u32 name_off;
	/* "info" bits arrangement
	/* "info" bits arrangement
	 * bits  0-15: vlen (e.g. # of struct's members)
	 * bits  0-15: vlen (e.g. # of struct's members)
	 * bits 16-23: unused
	 * bits 16-23: unused
@@ -105,7 +103,7 @@ struct btf_type {
 * info in "struct btf_type").
 * info in "struct btf_type").
 */
 */
struct btf_enum {
struct btf_enum {
	__u32	name;
	__u32	name_off;
	__s32	val;
	__s32	val;
};
};


@@ -122,7 +120,7 @@ struct btf_array {
 * "struct btf_type").
 * "struct btf_type").
 */
 */
struct btf_member {
struct btf_member {
	__u32	name;
	__u32	name_off;
	__u32	type;
	__u32	type;
	__u32	offset;	/* offset in bits */
	__u32	offset;	/* offset in bits */
};
};
+10 −10
Original line number Original line Diff line number Diff line
@@ -473,7 +473,7 @@ __printf(4, 5) static void __btf_verifier_log_type(struct btf_verifier_env *env,
	__btf_verifier_log(log, "[%u] %s %s%s",
	__btf_verifier_log(log, "[%u] %s %s%s",
			   env->log_type_id,
			   env->log_type_id,
			   btf_kind_str[kind],
			   btf_kind_str[kind],
			   btf_name_by_offset(btf, t->name),
			   btf_name_by_offset(btf, t->name_off),
			   log_details ? " " : "");
			   log_details ? " " : "");


	if (log_details)
	if (log_details)
@@ -517,7 +517,7 @@ static void btf_verifier_log_member(struct btf_verifier_env *env,
		btf_verifier_log_type(env, struct_type, NULL);
		btf_verifier_log_type(env, struct_type, NULL);


	__btf_verifier_log(log, "\t%s type_id=%u bits_offset=%u",
	__btf_verifier_log(log, "\t%s type_id=%u bits_offset=%u",
			   btf_name_by_offset(btf, member->name),
			   btf_name_by_offset(btf, member->name_off),
			   member->type, member->offset);
			   member->type, member->offset);


	if (fmt && *fmt) {
	if (fmt && *fmt) {
@@ -1419,10 +1419,10 @@ static s32 btf_struct_check_meta(struct btf_verifier_env *env,
	btf_verifier_log_type(env, t, NULL);
	btf_verifier_log_type(env, t, NULL);


	for_each_member(i, t, member) {
	for_each_member(i, t, member) {
		if (!btf_name_offset_valid(btf, member->name)) {
		if (!btf_name_offset_valid(btf, member->name_off)) {
			btf_verifier_log_member(env, t, member,
			btf_verifier_log_member(env, t, member,
						"Invalid member name_offset:%u",
						"Invalid member name_offset:%u",
						member->name);
						member->name_off);
			return -EINVAL;
			return -EINVAL;
		}
		}


@@ -1605,14 +1605,14 @@ static s32 btf_enum_check_meta(struct btf_verifier_env *env,
	btf_verifier_log_type(env, t, NULL);
	btf_verifier_log_type(env, t, NULL);


	for (i = 0; i < nr_enums; i++) {
	for (i = 0; i < nr_enums; i++) {
		if (!btf_name_offset_valid(btf, enums[i].name)) {
		if (!btf_name_offset_valid(btf, enums[i].name_off)) {
			btf_verifier_log(env, "\tInvalid name_offset:%u",
			btf_verifier_log(env, "\tInvalid name_offset:%u",
					 enums[i].name);
					 enums[i].name_off);
			return -EINVAL;
			return -EINVAL;
		}
		}


		btf_verifier_log(env, "\t%s val=%d\n",
		btf_verifier_log(env, "\t%s val=%d\n",
				 btf_name_by_offset(btf, enums[i].name),
				 btf_name_by_offset(btf, enums[i].name_off),
				 enums[i].val);
				 enums[i].val);
	}
	}


@@ -1636,7 +1636,7 @@ static void btf_enum_seq_show(const struct btf *btf, const struct btf_type *t,
	for (i = 0; i < nr_enums; i++) {
	for (i = 0; i < nr_enums; i++) {
		if (v == enums[i].val) {
		if (v == enums[i].val) {
			seq_printf(m, "%s",
			seq_printf(m, "%s",
				   btf_name_by_offset(btf, enums[i].name));
				   btf_name_by_offset(btf, enums[i].name_off));
			return;
			return;
		}
		}
	}
	}
@@ -1687,9 +1687,9 @@ static s32 btf_check_meta(struct btf_verifier_env *env,
		return -EINVAL;
		return -EINVAL;
	}
	}


	if (!btf_name_offset_valid(env->btf, t->name)) {
	if (!btf_name_offset_valid(env->btf, t->name_off)) {
		btf_verifier_log(env, "[%u] Invalid name_offset:%u",
		btf_verifier_log(env, "[%u] Invalid name_offset:%u",
				 env->log_type_id, t->name);
				 env->log_type_id, t->name_off);
		return -EINVAL;
		return -EINVAL;
	}
	}


+3 −5
Original line number Original line Diff line number Diff line
@@ -6,9 +6,7 @@
#include <linux/types.h>
#include <linux/types.h>


#define BTF_MAGIC	0xeB9F
#define BTF_MAGIC	0xeB9F
#define BTF_MAGIC_SWAP	0x9FeB
#define BTF_VERSION	1
#define BTF_VERSION	1
#define BTF_FLAGS_COMPR	0x01


struct btf_header {
struct btf_header {
	__u16	magic;
	__u16	magic;
@@ -43,7 +41,7 @@ struct btf_header {
#define BTF_STR_OFFSET(ref)	((ref) & BTF_MAX_NAME_OFFSET)
#define BTF_STR_OFFSET(ref)	((ref) & BTF_MAX_NAME_OFFSET)


struct btf_type {
struct btf_type {
	__u32 name;
	__u32 name_off;
	/* "info" bits arrangement
	/* "info" bits arrangement
	 * bits  0-15: vlen (e.g. # of struct's members)
	 * bits  0-15: vlen (e.g. # of struct's members)
	 * bits 16-23: unused
	 * bits 16-23: unused
@@ -105,7 +103,7 @@ struct btf_type {
 * info in "struct btf_type").
 * info in "struct btf_type").
 */
 */
struct btf_enum {
struct btf_enum {
	__u32	name;
	__u32	name_off;
	__s32	val;
	__s32	val;
};
};


@@ -122,7 +120,7 @@ struct btf_array {
 * "struct btf_type").
 * "struct btf_type").
 */
 */
struct btf_member {
struct btf_member {
	__u32	name;
	__u32	name_off;
	__u32	type;
	__u32	type;
	__u32	offset;	/* offset in bits */
	__u32	offset;	/* offset in bits */
};
};
+1 −1
Original line number Original line Diff line number Diff line
@@ -281,7 +281,7 @@ int32_t btf__find_by_name(const struct btf *btf, const char *type_name)


	for (i = 1; i <= btf->nr_types; i++) {
	for (i = 1; i <= btf->nr_types; i++) {
		const struct btf_type *t = btf->types[i];
		const struct btf_type *t = btf->types[i];
		const char *name = btf_name_by_offset(btf, t->name);
		const char *name = btf_name_by_offset(btf, t->name_off);


		if (name && !strcmp(type_name, name))
		if (name && !strcmp(type_name, name))
			return i;
			return i;