diff options
author | Alexei Starovoitov <ast@kernel.org> | 2023-12-26 11:11:47 -0800 |
---|---|---|
committer | Andrii Nakryiko <andrii@kernel.org> | 2024-01-03 11:08:23 -0800 |
commit | 0bcc62aa9813f519db58df14ddf1d523fa971e62 (patch) | |
tree | 884e35b466cf0bda2af66675bc3379dae60d37e1 | |
parent | 907dbd3ede5ffd4f9519dd1fae2a8a983603bf3b (diff) |
bpf: Add bpf_nop_mov() asm macro.
bpf_nop_mov(var) asm macro emits nop register move: rX = rX.
If 'var' is a scalar and not a fixed constant the verifier will assign ID to it.
If it's later spilled the stack slot will carry that ID as well.
Hence the range refining comparison "if rX < const" will update all copies
including spilled slot.
This macro is a temporary workaround until the verifier gets smarter.
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20231226191148.48536-6-alexei.starovoitov@gmail.com
-rw-r--r-- | tools/testing/selftests/bpf/bpf_experimental.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/bpf_experimental.h b/tools/testing/selftests/bpf/bpf_experimental.h index 2ef9949fbd63..f44875f8b367 100644 --- a/tools/testing/selftests/bpf/bpf_experimental.h +++ b/tools/testing/selftests/bpf/bpf_experimental.h @@ -323,6 +323,11 @@ l_true: \ }) #endif +#ifndef bpf_nop_mov +#define bpf_nop_mov(var) \ + asm volatile("%[reg]=%[reg]"::[reg]"r"((short)var)) +#endif + /* Description * Assert that a conditional expression is true. * Returns |