Em Mon, Nov 09, 2020 at 03:06:55PM -0300, Arnaldo Carvalho de Melo escreveu: > > I'm fixing it up by hand to try together with pahole's patches. > Due to: > 33def8498fdde180 ("treewide: Convert macro and uses of __section(foo) to __section("foo")") > For convenience: asm-generic/vmlinux.lds.h | 16 +++++++++++++++- linux/bpf.h | 8 +++++++- linux/init.h | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) --- diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index b2b3d81b1535a5ab..f91029b3443bf0d2 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -685,8 +685,21 @@ .BTF_ids : AT(ADDR(.BTF_ids) - LOAD_OFFSET) { \ *(.BTF_ids) \ } + +/* + * .init.bpf.preserve_type + * + * This section store special BPF function and marks them + * with begin/end symbols pair for the sake of pahole tool. + */ +#define INIT_BPF_PRESERVE_TYPE \ + __init_bpf_preserve_type_begin = .; \ + *(.init.bpf.preserve_type) \ + __init_bpf_preserve_type_end = .; \ + MEM_DISCARD(init.bpf.preserve_type) #else #define BTF +#define INIT_BPF_PRESERVE_TYPE #endif /* @@ -741,7 +754,8 @@ #define INIT_TEXT \ *(.init.text .init.text.*) \ *(.text.startup) \ - MEM_DISCARD(init.text*) + MEM_DISCARD(init.text*) \ + INIT_BPF_PRESERVE_TYPE #define EXIT_DATA \ *(.exit.data .exit.data.*) \ diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 2b16bf48aab61a1f..73e8ededde3e9c09 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1276,10 +1276,16 @@ struct bpf_link *bpf_link_get_from_fd(u32 ufd); int bpf_obj_pin_user(u32 ufd, const char __user *pathname); int bpf_obj_get_user(const char __user *pathname, int flags); +#ifdef CONFIG_DEBUG_INFO_BTF +#define BPF_INIT __init_bpf_preserve_type +#else +#define BPF_INIT __init +#endif + #define BPF_ITER_FUNC_PREFIX "bpf_iter_" #define DEFINE_BPF_ITER_FUNC(target, args...) \ extern int bpf_iter_ ## target(args); \ - int __init bpf_iter_ ## target(args) { return 0; } + int BPF_INIT bpf_iter_ ## target(args) { return 0; } struct bpf_iter_aux_info { struct bpf_map *map; diff --git a/include/linux/init.h b/include/linux/init.h index 7b53cb3092ee9956..a7c71e3b5f9a1d65 100644 --- a/include/linux/init.h +++ b/include/linux/init.h @@ -52,6 +52,7 @@ #define __initconst __section(".init.rodata") #define __exitdata __section(".exit.data") #define __exit_call __used __section(".exitcall.exit") +#define __init_bpf_preserve_type __section(".init.bpf.preserve_type") /* * modpost check for section mismatches during the kernel build.