Commit 8237e754 authored by Jiri Olsa's avatar Jiri Olsa Committed by Alexei Starovoitov

selftests/bpf: Add test for bpf_get_func_ip in kprobe+offset probe

Adding test for bpf_get_func_ip in kprobe+ofset probe.
Because of the offset value it's arch specific, enabling
the new test only for x86_64 architecture.
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20210714094400.396467-9-jolsa@kernel.org
parent a2488b5f
...@@ -8,10 +8,21 @@ void test_get_func_ip_test(void) ...@@ -8,10 +8,21 @@ void test_get_func_ip_test(void)
__u32 duration = 0, retval; __u32 duration = 0, retval;
int err, prog_fd; int err, prog_fd;
skel = get_func_ip_test__open_and_load(); skel = get_func_ip_test__open();
if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open_and_load")) if (!ASSERT_OK_PTR(skel, "get_func_ip_test__open"))
return; return;
/* test6 is x86_64 specifc because of the instruction
* offset, disabling it for all other archs
*/
#ifndef __x86_64__
bpf_program__set_autoload(skel->progs.test6, false);
#endif
err = get_func_ip_test__load(skel);
if (!ASSERT_OK(err, "get_func_ip_test__load"))
goto cleanup;
err = get_func_ip_test__attach(skel); err = get_func_ip_test__attach(skel);
if (!ASSERT_OK(err, "get_func_ip_test__attach")) if (!ASSERT_OK(err, "get_func_ip_test__attach"))
goto cleanup; goto cleanup;
...@@ -33,6 +44,9 @@ void test_get_func_ip_test(void) ...@@ -33,6 +44,9 @@ void test_get_func_ip_test(void)
ASSERT_EQ(skel->bss->test3_result, 1, "test3_result"); ASSERT_EQ(skel->bss->test3_result, 1, "test3_result");
ASSERT_EQ(skel->bss->test4_result, 1, "test4_result"); ASSERT_EQ(skel->bss->test4_result, 1, "test4_result");
ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); ASSERT_EQ(skel->bss->test5_result, 1, "test5_result");
#ifdef __x86_64__
ASSERT_EQ(skel->bss->test6_result, 1, "test6_result");
#endif
cleanup: cleanup:
get_func_ip_test__destroy(skel); get_func_ip_test__destroy(skel);
......
...@@ -10,6 +10,7 @@ extern const void bpf_fentry_test2 __ksym; ...@@ -10,6 +10,7 @@ extern const void bpf_fentry_test2 __ksym;
extern const void bpf_fentry_test3 __ksym; extern const void bpf_fentry_test3 __ksym;
extern const void bpf_fentry_test4 __ksym; extern const void bpf_fentry_test4 __ksym;
extern const void bpf_modify_return_test __ksym; extern const void bpf_modify_return_test __ksym;
extern const void bpf_fentry_test6 __ksym;
__u64 test1_result = 0; __u64 test1_result = 0;
SEC("fentry/bpf_fentry_test1") SEC("fentry/bpf_fentry_test1")
...@@ -60,3 +61,13 @@ int BPF_PROG(test5, int a, int *b, int ret) ...@@ -60,3 +61,13 @@ int BPF_PROG(test5, int a, int *b, int ret)
test5_result = (const void *) addr == &bpf_modify_return_test; test5_result = (const void *) addr == &bpf_modify_return_test;
return ret; return ret;
} }
__u64 test6_result = 0;
SEC("kprobe/bpf_fentry_test6+0x5")
int test6(struct pt_regs *ctx)
{
__u64 addr = bpf_get_func_ip(ctx);
test6_result = (const void *) addr == &bpf_fentry_test6 + 5;
return 0;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment