diff options
| author | Thomas Zimmermann <[email protected]> | 2023-10-11 09:50:59 +0200 | 
|---|---|---|
| committer | Thomas Zimmermann <[email protected]> | 2023-10-11 09:50:59 +0200 | 
| commit | 57390019b68b83f96eb98f490367b9df1f2d77cb (patch) | |
| tree | e6d4b6c75efdd2d7fb7d37f980688c491be3ff6a /tools/testing/selftests/bpf/prog_tests/bpf_cookie.c | |
| parent | e5f9d543419c78ac58f3b3557bc5a76b20ff600b (diff) | |
| parent | 389af786f92ecdff35883551d54bf4e507ffcccb (diff) | |
Merge drm/drm-next into drm-misc-next
Updating drm-misc-next to the state of Linux v6.6-rc2.
Signed-off-by: Thomas Zimmermann <[email protected]>
Diffstat (limited to 'tools/testing/selftests/bpf/prog_tests/bpf_cookie.c')
| -rw-r--r-- | tools/testing/selftests/bpf/prog_tests/bpf_cookie.c | 78 | 
1 files changed, 78 insertions, 0 deletions
diff --git a/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c b/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c index 26b2d1bffdfd..1454cebc262b 100644 --- a/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c +++ b/tools/testing/selftests/bpf/prog_tests/bpf_cookie.c @@ -11,6 +11,7 @@  #include <bpf/btf.h>  #include "test_bpf_cookie.skel.h"  #include "kprobe_multi.skel.h" +#include "uprobe_multi.skel.h"  /* uprobe attach point */  static noinline void trigger_func(void) @@ -239,6 +240,81 @@ cleanup:  	bpf_link__destroy(link1);  	kprobe_multi__destroy(skel);  } + +/* defined in prog_tests/uprobe_multi_test.c */ +void uprobe_multi_func_1(void); +void uprobe_multi_func_2(void); +void uprobe_multi_func_3(void); + +static void uprobe_multi_test_run(struct uprobe_multi *skel) +{ +	skel->bss->uprobe_multi_func_1_addr = (__u64) uprobe_multi_func_1; +	skel->bss->uprobe_multi_func_2_addr = (__u64) uprobe_multi_func_2; +	skel->bss->uprobe_multi_func_3_addr = (__u64) uprobe_multi_func_3; + +	skel->bss->pid = getpid(); +	skel->bss->test_cookie = true; + +	uprobe_multi_func_1(); +	uprobe_multi_func_2(); +	uprobe_multi_func_3(); + +	ASSERT_EQ(skel->bss->uprobe_multi_func_1_result, 1, "uprobe_multi_func_1_result"); +	ASSERT_EQ(skel->bss->uprobe_multi_func_2_result, 1, "uprobe_multi_func_2_result"); +	ASSERT_EQ(skel->bss->uprobe_multi_func_3_result, 1, "uprobe_multi_func_3_result"); + +	ASSERT_EQ(skel->bss->uretprobe_multi_func_1_result, 1, "uretprobe_multi_func_1_result"); +	ASSERT_EQ(skel->bss->uretprobe_multi_func_2_result, 1, "uretprobe_multi_func_2_result"); +	ASSERT_EQ(skel->bss->uretprobe_multi_func_3_result, 1, "uretprobe_multi_func_3_result"); +} + +static void uprobe_multi_attach_api_subtest(void) +{ +	struct bpf_link *link1 = NULL, *link2 = NULL; +	struct uprobe_multi *skel = NULL; +	LIBBPF_OPTS(bpf_uprobe_multi_opts, opts); +	const char *syms[3] = { +		"uprobe_multi_func_1", +		"uprobe_multi_func_2", +		"uprobe_multi_func_3", +	}; +	__u64 cookies[3]; + +	cookies[0] = 3; /* uprobe_multi_func_1 */ +	cookies[1] = 1; /* uprobe_multi_func_2 */ +	cookies[2] = 2; /* uprobe_multi_func_3 */ + +	opts.syms = syms; +	opts.cnt = ARRAY_SIZE(syms); +	opts.cookies = &cookies[0]; + +	skel = uprobe_multi__open_and_load(); +	if (!ASSERT_OK_PTR(skel, "uprobe_multi")) +		goto cleanup; + +	link1 = bpf_program__attach_uprobe_multi(skel->progs.uprobe, -1, +						 "/proc/self/exe", NULL, &opts); +	if (!ASSERT_OK_PTR(link1, "bpf_program__attach_uprobe_multi")) +		goto cleanup; + +	cookies[0] = 2; /* uprobe_multi_func_1 */ +	cookies[1] = 3; /* uprobe_multi_func_2 */ +	cookies[2] = 1; /* uprobe_multi_func_3 */ + +	opts.retprobe = true; +	link2 = bpf_program__attach_uprobe_multi(skel->progs.uretprobe, -1, +						      "/proc/self/exe", NULL, &opts); +	if (!ASSERT_OK_PTR(link2, "bpf_program__attach_uprobe_multi_retprobe")) +		goto cleanup; + +	uprobe_multi_test_run(skel); + +cleanup: +	bpf_link__destroy(link2); +	bpf_link__destroy(link1); +	uprobe_multi__destroy(skel); +} +  static void uprobe_subtest(struct test_bpf_cookie *skel)  {  	DECLARE_LIBBPF_OPTS(bpf_uprobe_opts, opts); @@ -515,6 +591,8 @@ void test_bpf_cookie(void)  		kprobe_multi_attach_api_subtest();  	if (test__start_subtest("uprobe"))  		uprobe_subtest(skel); +	if (test__start_subtest("multi_uprobe_attach_api")) +		uprobe_multi_attach_api_subtest();  	if (test__start_subtest("tracepoint"))  		tp_subtest(skel);  	if (test__start_subtest("perf_event"))  |