Commit 965c6167 authored by Yonghong Song's avatar Yonghong Song Committed by Daniel Borkmann
Browse files

selftests/bpf: Using llvm may_goto inline asm for cond_break macro

Currently, cond_break macro uses bytes to encode the may_goto insn.
Patch [1] in llvm implemented may_goto insn in BPF backend.
Replace byte-level encoding with llvm inline asm for better usability.
Using llvm may_goto insn is controlled by macro __BPF_FEATURE_MAY_GOTO.

  [1] https://github.com/llvm/llvm-project/commit/0e0bfacff71859d1f9212205f8f873d47029d3fb



Signed-off-by: default avatarYonghong Song <yonghong.song@linux.dev>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
Acked-by: default avatarJohn Fastabend <john.fastabend@gmail.com>
Link: https://lore.kernel.org/bpf/20240402025446.3215182-1-yonghong.song@linux.dev
parent 9dc182c5
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -326,6 +326,16 @@ l_true: \
       })
#endif

#ifdef __BPF_FEATURE_MAY_GOTO
#define cond_break					\
	({ __label__ l_break, l_continue;		\
	 asm volatile goto("may_goto %l[l_break]"	\
		      :::: l_break);			\
	goto l_continue;				\
	l_break: break;					\
	l_continue:;					\
	})
#else
#define cond_break					\
	({ __label__ l_break, l_continue;		\
	 asm volatile goto("1:.byte 0xe5;			\
@@ -337,6 +347,7 @@ l_true: \
	l_break: break;					\
	l_continue:;					\
	})
#endif

#ifndef bpf_nop_mov
#define bpf_nop_mov(var) \