Skip to content

Commit cb7e0e8

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

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
@@ -154,12 +154,62 @@ static void test_stacktrace_kprobe_multi(bool retprobe)
154154
stacktrace_map__destroy(skel);
155155
}
156156

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

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)