diff options
author | Jiri Olsa <jolsa@kernel.org> | 2024-03-17 21:02:05 +0100 |
---|---|---|
committer | Jiri Olsa <jolsa@kernel.org> | 2024-03-17 21:25:48 +0100 |
commit | f6c0b2d247627a414fd18f789d9b5093b28f11a4 (patch) | |
tree | 70e32ec5a3e898a7776aedf9d819e20980e98e80 | |
parent | c7c32ea9c97a0e16a3bf62cc41cac231417a0f49 (diff) | |
download | perf-uretprobe_syscall_ci.tar.gz |
selftests/bpf: Overload uprobe trigger functions for x86uretprobe_syscall_ci
I'm getting endbr64 instruction generated at function entry on
some distros, which prevents the point of the uprobe benchmark.
Overloading the uprobe trigger functions with assembly to make
sure we get instructions we want at the function entry.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
-rw-r--r-- | tools/testing/selftests/bpf/Makefile | 9 | ||||
-rw-r--r-- | tools/testing/selftests/bpf/benchs/bench_trigger_x86.S | 33 |
2 files changed, 42 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/Makefile b/tools/testing/selftests/bpf/Makefile index e425a946276bb..bec2ac9dba559 100644 --- a/tools/testing/selftests/bpf/Makefile +++ b/tools/testing/selftests/bpf/Makefile @@ -723,6 +723,14 @@ $(OUTPUT)/test_cpp: test_cpp.cpp $(OUTPUT)/test_core_extern.skel.h $(BPFOBJ) $(call msg,CXX,,$@) $(Q)$(CXX) $(CFLAGS) $(filter %.a %.o %.cpp,$^) $(LDLIBS) -o $@ +ifeq ($(SRCARCH),x86) +$(OUTPUT)/bench_trigger_arch.o: benchs/bench_trigger_x86.S + $(call msg,CC,,$@) + $(Q)$(CC) $(CFLAGS) -c $< $(LDLIBS) -o $@ + +BENCH_ARCH_OBJS := $(OUTPUT)/bench_trigger_arch.o +endif + # Benchmark runner $(OUTPUT)/bench_%.o: benchs/bench_%.c bench.h $(BPFOBJ) $(call msg,CC,,$@) @@ -746,6 +754,7 @@ $(OUTPUT)/bench: $(OUTPUT)/bench.o \ $(TESTING_HELPERS) \ $(TRACE_HELPERS) \ $(CGROUP_HELPERS) \ + $(BENCH_ARCH_OBJS) \ $(OUTPUT)/bench_count.o \ $(OUTPUT)/bench_rename.o \ $(OUTPUT)/bench_trigger.o \ diff --git a/tools/testing/selftests/bpf/benchs/bench_trigger_x86.S b/tools/testing/selftests/bpf/benchs/bench_trigger_x86.S new file mode 100644 index 0000000000000..0076a2229921c --- /dev/null +++ b/tools/testing/selftests/bpf/benchs/bench_trigger_x86.S @@ -0,0 +1,33 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef ASM_NL +#define ASM_NL ; +#endif + +#define SYM_ENTRY(name) \ + .globl name ASM_NL \ + name: + +#define SYM_END(name) \ + .type name STT_FUNC ASM_NL \ + .size name, .-name ASM_NL + +.code64 +.section .text, "ax" + +SYM_ENTRY(uprobe_target_nop) + nop + ret +SYM_END(uprobe_target_nop) + +SYM_ENTRY(uprobe_target_push) + push %rax + pop %rax + ret +SYM_END(uprobe_target_push) + +SYM_ENTRY(uprobe_target_ret) + ret +SYM_END(uprobe_target_ret) + +.section .note.GNU-stack,"",@progbits |