Commit 2dc26d5a authored by Andrii Nakryiko's avatar Andrii Nakryiko Committed by Alexei Starovoitov
Browse files

selftests/bpf: add BPF_CORE_READ relocatable read macro



Add BPF_CORE_READ macro used in tests to do bpf_core_read(), which
automatically captures offset relocation.

Signed-off-by: default avatarAndrii Nakryiko <andriin@fb.com>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent ddc7c304
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -504,4 +504,24 @@ struct pt_regs;
				(void *)(PT_REGS_FP(ctx) + sizeof(ip))); })
#endif

/*
 * BPF_CORE_READ abstracts away bpf_probe_read() call and captures offset
 * relocation for source address using __builtin_preserve_access_index()
 * built-in, provided by Clang.
 *
 * __builtin_preserve_access_index() takes as an argument an expression of
 * taking an address of a field within struct/union. It makes compiler emit
 * a relocation, which records BTF type ID describing root struct/union and an
 * accessor string which describes exact embedded field that was used to take
 * an address. See detailed description of this relocation format and
 * semantics in comments to struct bpf_offset_reloc in libbpf_internal.h.
 *
 * This relocation allows libbpf to adjust BPF instruction to use correct
 * actual field offset, based on target kernel BTF type that matches original
 * (local) BTF, used to record relocation.
 */
#define BPF_CORE_READ(dst, src)						\
	bpf_probe_read((dst), sizeof(*(src)),				\
		       __builtin_preserve_access_index(src))

#endif