summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexei Starovoitov <ast@kernel.org>2023-12-26 22:11:47 +0300
committerAndrii Nakryiko <andrii@kernel.org>2024-01-03 22:08:23 +0300
commit0bcc62aa9813f519db58df14ddf1d523fa971e62 (patch)
tree884e35b466cf0bda2af66675bc3379dae60d37e1
parent907dbd3ede5ffd4f9519dd1fae2a8a983603bf3b (diff)
downloadlinux-0bcc62aa9813f519db58df14ddf1d523fa971e62.tar.xz
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.h5
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