Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/bpf: __imm_insn & __imm_const macro for bpf_misc.h

Add two convenience macro for BPF test cases,
allowing the following usage:

#include <linux/filter.h>

...
asm volatile (
...
".8byte %[raw_insn];"
...
"r1 += %[st_foo_offset];"
...
:
: __imm_insn(raw_insn, BPF_RAW_INSN(...)),
__imm_const(st_foo_offset, offsetof(struct st, foo))
: __clobber_all);

Signed-off-by: Eduard Zingerman <eddyz87@gmail.com>
Link: https://lore.kernel.org/r/20230325025524.144043-3-eddyz87@gmail.com
Signed-off-by: Alexei Starovoitov <ast@kernel.org>

authored by

Eduard Zingerman and committed by
Alexei Starovoitov
207b1ba3 3e5329e1

+2
+2
tools/testing/selftests/bpf/progs/bpf_misc.h
··· 35 35 #define __clobber_all "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "memory" 36 36 #define __clobber_common "r0", "r1", "r2", "r3", "r4", "r5", "memory" 37 37 #define __imm(name) [name]"i"(name) 38 + #define __imm_const(name, expr) [name]"i"(expr) 38 39 #define __imm_addr(name) [name]"i"(&name) 39 40 #define __imm_ptr(name) [name]"p"(&name) 41 + #define __imm_insn(name, expr) [name]"i"(*(long *)&(expr)) 40 42 41 43 #if defined(__TARGET_ARCH_x86) 42 44 #define SYSCALL_WRAPPER 1