linux/tools/bpf/bpftool
Andrii Nakryiko 1cf5b23988 bpftool: Apply preserve_access_index attribute to all types in BTF dump
This patch makes structs and unions, emitted through BTF dump, automatically
CO-RE-relocatable (unless disabled with `#define BPF_NO_PRESERVE_ACCESS_INDEX`,
specified before including generated header file).

This effectivaly turns usual bpf_probe_read() call into equivalent of
bpf_core_read(), by automatically applying builtin_preserve_access_index to
any field accesses of types in generated C types header.

This is especially useful for tp_btf/fentry/fexit BPF program types. They
allow direct memory access, so BPF C code just uses straightfoward a->b->c
access pattern to read data from kernel. But without kernel structs marked as
CO-RE relocatable through preserve_access_index attribute, one has to enclose
all the data reads into a special __builtin_preserve_access_index code block,
like so:

__builtin_preserve_access_index(({
    x = p->pid; /* where p is struct task_struct *, for example */
}));

This is very inconvenient and obscures the logic quite a bit. By marking all
auto-generated types with preserve_access_index attribute the above code is
reduced to just a clean and natural `x = p->pid;`.

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200113073143.1779940-5-andriin@fb.com
2020-01-13 17:48:13 -08:00
..
bash-completion bpftool: Add gen skeleton BASH completions 2019-12-15 15:58:06 -08:00
Documentation bpftool: Work-around rst2man conversion bug 2019-12-18 17:03:52 -08:00
.gitignore tools: bpf: account for generated feature/ and libbpf/ directories 2019-08-31 00:38:16 +02:00
btf_dumper.c tools: bpftool: fix format strings and arguments for jsonw_printf() 2019-08-15 22:06:46 -07:00
btf.c bpftool: Apply preserve_access_index attribute to all types in BTF dump 2020-01-13 17:48:13 -08:00
cfg.c tools: bpftool: teach cfg code about JMP32 2019-01-26 13:33:01 -08:00
cfg.h tools: bpftool: replace Netronome boilerplate with SPDX license headers 2018-12-13 12:08:44 +01:00
cgroup.c bpf: Print error message for bpftool cgroup show 2019-12-26 10:35:54 +01:00
common.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2019-09-06 16:49:17 +02:00
feature.c bpftool: Add misc section and probe for large INSN limit 2020-01-08 19:34:45 +01:00
gen.c bpftool: Make skeleton C code compilable with C++ compiler 2019-12-27 10:11:05 +01:00
jit_disasm.c tools: bpftool: Fix json dump crash on powerpc 2019-07-05 23:50:38 +02:00
json_writer.c tools: bpftool: move "__printf()" attributes to header file 2019-08-15 22:06:46 -07:00
json_writer.h tools: bpftool: move "__printf()" attributes to header file 2019-08-15 22:06:46 -07:00
main.c bpftool: Add skeleton codegen command 2019-12-15 15:58:05 -08:00
main.h bpftool: Add skeleton codegen command 2019-12-15 15:58:05 -08:00
Makefile tools: bpftool: do not link twice against libbpf.a in Makefile 2019-08-31 00:38:16 +02:00
map_perf_ring.c tools: bpftool: fix arguments for p_err() in do_event_pipe() 2019-08-15 22:06:46 -07:00
map.c bpftool: Match maps by name 2019-12-15 09:03:18 -08:00
net.c libbpf: Move non-public APIs from libbpf.h to libbpf_internal.h 2019-12-15 15:58:04 -08:00
netlink_dumper.c tools: bpftool: dual license all files 2018-12-13 12:08:44 +01:00
netlink_dumper.h tools: bpftool: dual license all files 2018-12-13 12:08:44 +01:00
perf.c tools: bpftool: compile with $(EXTRA_WARNINGS) 2019-08-14 22:57:36 +02:00
prog.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2019-12-27 14:20:10 -08:00
tracelog.c tools: bpftool: add an option to prevent auto-mount of bpffs, tracefs 2018-12-18 14:47:17 +01:00
xlated_dumper.c bpftool: Don't crash on missing jited insns or ksyms 2019-12-11 13:57:26 +01:00
xlated_dumper.h tools: bpftool: replace Netronome boilerplate with SPDX license headers 2018-12-13 12:08:44 +01:00