Skip to content

Commit d5460b1

Browse files
committed
selftests/bpf: Add stacktrace test for kprobe/kretprobe
Signed-off-by: Jiri Olsa <[email protected]>
1 parent a0f37f5 commit d5460b1

File tree

2 files changed

+57
-0
lines changed

2 files changed

+57
-0
lines changed

tools/testing/selftests/bpf/prog_tests/stacktrace_map.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,52 @@ static void test_stacktrace_kprobe_multi(bool retprobe)
153153
stacktrace_map__destroy(skel);
154154
}
155155

156+
static void test_stacktrace_kprobe(bool retprobe)
157+
{
158+
LIBBPF_OPTS(bpf_kprobe_opts, opts,
159+
.retprobe = retprobe
160+
);
161+
LIBBPF_OPTS(bpf_test_run_opts, topts);
162+
struct stacktrace_map *skel;
163+
int prog_fd, err;
164+
165+
skel = stacktrace_map__open_and_load();
166+
if (!ASSERT_OK_PTR(skel, "stacktrace_map__open_and_load"))
167+
return;
168+
169+
skel->links.kprobe_stack_test = bpf_program__attach_kprobe_opts(skel->progs.kprobe_stack_test,
170+
"bpf_testmod_stacktrace_test", &opts);
171+
if (!ASSERT_OK_PTR(skel->links.kprobe_stack_test, "bpf_program__attach_kprobe_opts"))
172+
goto cleanup;
173+
174+
prog_fd = bpf_program__fd(skel->progs.trigger);
175+
err = bpf_prog_test_run_opts(prog_fd, &topts);
176+
ASSERT_OK(err, "test_run");
177+
ASSERT_EQ(topts.retval, 0, "test_run");
178+
179+
trigger_module_test_read(1);
180+
181+
load_kallsyms();
182+
183+
if (retprobe) {
184+
check_stacktrace_ips(bpf_map__fd(skel->maps.stackmap), skel->bss->stack_key, 4,
185+
ksym_get_addr("bpf_testmod_stacktrace_test_4"),
186+
ksym_get_addr("bpf_testmod_stacktrace_test_3"),
187+
ksym_get_addr("bpf_testmod_stacktrace_test_2"),
188+
ksym_get_addr("bpf_testmod_stacktrace_test_1"));
189+
} else {
190+
check_stacktrace_ips(bpf_map__fd(skel->maps.stackmap), skel->bss->stack_key, 5,
191+
ksym_get_addr("bpf_testmod_stacktrace_test"),
192+
ksym_get_addr("bpf_testmod_stacktrace_test_4"),
193+
ksym_get_addr("bpf_testmod_stacktrace_test_3"),
194+
ksym_get_addr("bpf_testmod_stacktrace_test_2"),
195+
ksym_get_addr("bpf_testmod_stacktrace_test_1"));
196+
}
197+
198+
cleanup:
199+
stacktrace_map__destroy(skel);
200+
}
201+
156202
void test_stacktrace_map(void)
157203
{
158204
if (test__start_subtest("tp"))
@@ -167,4 +213,8 @@ void test_stacktrace(void)
167213
test_stacktrace_kprobe_multi(false);
168214
if (test__start_subtest("kretprobe_multi"))
169215
test_stacktrace_kprobe_multi(true);
216+
if (test__start_subtest("kprobe"))
217+
test_stacktrace_kprobe(false);
218+
if (test__start_subtest("kretprobe"))
219+
test_stacktrace_kprobe(true);
170220
}

tools/testing/selftests/bpf/progs/stacktrace_map.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,11 @@ int kprobe_multi_stack_test(struct pt_regs *ctx)
112112
return 0;
113113
}
114114

115+
SEC("kprobe")
116+
int kprobe_stack_test(struct pt_regs *ctx)
117+
{
118+
stack_key = bpf_get_stackid(ctx, &stackmap, 0);
119+
return 0;
120+
}
121+
115122
char _license[] SEC("license") = "GPL";

0 commit comments

Comments
 (0)