On Tue, Jun 16, 2020 at 3:05 AM Jiri Olsa <jolsa@xxxxxxxxxx> wrote: > > Adding support to generate .BTF_ids section that would > hold various BTF IDs list for verifier. > > Adding macros help to define lists of BTF IDs placed in > .BTF_ids section. They are initially filled with zeros > (during compilation) and resolved later during the > linking phase by btfid tool. > > Following defines list of one BTF ID that is accessible > within kernel code as bpf_skb_output_btf_ids array. > > extern int bpf_skb_output_btf_ids[]; > > BTF_ID_LIST(bpf_skb_output_btf_ids) > BTF_ID(struct, sk_buff) > > Suggested-by: Andrii Nakryiko <andrii.nakryiko@xxxxxxxxx> > Signed-off-by: Jiri Olsa <jolsa@xxxxxxxxxx> > --- > include/asm-generic/vmlinux.lds.h | 4 ++ > kernel/bpf/Makefile | 2 +- > kernel/bpf/btf_ids.c | 3 ++ > kernel/bpf/btf_ids.h | 70 +++++++++++++++++++++++++++++++ > 4 files changed, 78 insertions(+), 1 deletion(-) > create mode 100644 kernel/bpf/btf_ids.c > create mode 100644 kernel/bpf/btf_ids.h > > diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h > index db600ef218d7..0be2ee265931 100644 > --- a/include/asm-generic/vmlinux.lds.h > +++ b/include/asm-generic/vmlinux.lds.h > @@ -641,6 +641,10 @@ > __start_BTF = .; \ > *(.BTF) \ > __stop_BTF = .; \ > + } \ > + . = ALIGN(4); \ > + .BTF_ids : AT(ADDR(.BTF_ids) - LOAD_OFFSET) { \ > + *(.BTF_ids) \ > } > #else > #define BTF > diff --git a/kernel/bpf/Makefile b/kernel/bpf/Makefile > index 1131a921e1a6..21e4fc7c25ab 100644 > --- a/kernel/bpf/Makefile > +++ b/kernel/bpf/Makefile > @@ -7,7 +7,7 @@ obj-$(CONFIG_BPF_SYSCALL) += hashtab.o arraymap.o percpu_freelist.o bpf_lru_list > obj-$(CONFIG_BPF_SYSCALL) += local_storage.o queue_stack_maps.o ringbuf.o > obj-$(CONFIG_BPF_SYSCALL) += disasm.o > obj-$(CONFIG_BPF_JIT) += trampoline.o > -obj-$(CONFIG_BPF_SYSCALL) += btf.o > +obj-$(CONFIG_BPF_SYSCALL) += btf.o btf_ids.o > obj-$(CONFIG_BPF_JIT) += dispatcher.o > ifeq ($(CONFIG_NET),y) > obj-$(CONFIG_BPF_SYSCALL) += devmap.o > diff --git a/kernel/bpf/btf_ids.c b/kernel/bpf/btf_ids.c > new file mode 100644 > index 000000000000..e7f9d94ad293 > --- /dev/null > +++ b/kernel/bpf/btf_ids.c > @@ -0,0 +1,3 @@ > +// SPDX-License-Identifier: GPL-2.0-only > + > +#include "btf_ids.h" hm... what's the purpose of this btf_ids.c file? > diff --git a/kernel/bpf/btf_ids.h b/kernel/bpf/btf_ids.h > new file mode 100644 > index 000000000000..68aa5c38a37f > --- /dev/null > +++ b/kernel/bpf/btf_ids.h [...]