aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Olsa <jolsa@kernel.org>2024-03-17 21:02:05 +0100
committerJiri Olsa <jolsa@kernel.org>2024-03-17 21:25:48 +0100
commitf6c0b2d247627a414fd18f789d9b5093b28f11a4 (patch)
tree70e32ec5a3e898a7776aedf9d819e20980e98e80
parentc7c32ea9c97a0e16a3bf62cc41cac231417a0f49 (diff)
downloadperf-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/Makefile9
-rw-r--r--tools/testing/selftests/bpf/benchs/bench_trigger_x86.S33
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