Commit 79b47344 authored by Daniel Xu's avatar Daniel Xu Committed by Alexei Starovoitov
Browse files

bpf: btf: Support flags for BTF_SET8 sets



This commit adds support for flags on BTF_SET8s. struct btf_id_set8
already supported 32 bits worth of flags, but was only used for
alignment purposes before.

We now use these bits to encode flags. The first use case is tagging
kfunc sets with a flag so that pahole can recognize which
BTF_ID_FLAGS(func, ..) are actual kfuncs.

Signed-off-by: default avatarDaniel Xu <dxu@dxuuu.xyz>
Link: https://lore.kernel.org/r/7bb152ec76d6c2c930daec88e995bf18484a5ebb.1706491398.git.dxu@dxuuu.xyz


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent 2ef61296
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ struct btf_id_set8 {

#include <linux/compiler.h> /* for __PASTE */
#include <linux/compiler_attributes.h> /* for __maybe_unused */
#include <linux/stringify.h>

/*
 * Following macros help to define lists of BTF IDs placed
@@ -183,17 +184,18 @@ extern struct btf_id_set name;
 * .word (1 << 3) | (1 << 1) | (1 << 2)
 *
 */
#define __BTF_SET8_START(name, scope)			\
#define __BTF_SET8_START(name, scope, flags)		\
__BTF_ID_LIST(name, local)				\
asm(							\
".pushsection " BTF_IDS_SECTION ",\"a\";       \n"	\
"." #scope " __BTF_ID__set8__" #name ";        \n"	\
"__BTF_ID__set8__" #name ":;                   \n"	\
".zero 8                                       \n"	\
".zero 4                                       \n"	\
".long " __stringify(flags)                   "\n"	\
".popsection;                                  \n");

#define BTF_SET8_START(name)				\
__BTF_ID_LIST(name, local)				\
__BTF_SET8_START(name, local)
__BTF_SET8_START(name, local, 0)

#define BTF_SET8_END(name)				\
asm(							\