mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 18:13:41 +02:00
selftests/bpf: Test bpf_usdt_arg_size() function
Update usdt tests to also check for correct behavior of bpf_usdt_arg_size(). Signed-off-by: Ihor Solodrai <ihor.solodrai@linux.dev> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Reviewed-by: Jiri Olsa <jolsa@kernel.org> Link: https://lore.kernel.org/bpf/20250224235756.2612606-2-ihor.solodrai@linux.dev
This commit is contained in:
parent
b62dff1440
commit
0ba0ef012e
|
|
@ -45,7 +45,7 @@ static void subtest_basic_usdt(void)
|
|||
LIBBPF_OPTS(bpf_usdt_opts, opts);
|
||||
struct test_usdt *skel;
|
||||
struct test_usdt__bss *bss;
|
||||
int err;
|
||||
int err, i;
|
||||
|
||||
skel = test_usdt__open_and_load();
|
||||
if (!ASSERT_OK_PTR(skel, "skel_open"))
|
||||
|
|
@ -75,6 +75,7 @@ static void subtest_basic_usdt(void)
|
|||
ASSERT_EQ(bss->usdt0_cookie, 0xcafedeadbeeffeed, "usdt0_cookie");
|
||||
ASSERT_EQ(bss->usdt0_arg_cnt, 0, "usdt0_arg_cnt");
|
||||
ASSERT_EQ(bss->usdt0_arg_ret, -ENOENT, "usdt0_arg_ret");
|
||||
ASSERT_EQ(bss->usdt0_arg_size, -ENOENT, "usdt0_arg_size");
|
||||
|
||||
/* auto-attached usdt3 gets default zero cookie value */
|
||||
ASSERT_EQ(bss->usdt3_cookie, 0, "usdt3_cookie");
|
||||
|
|
@ -86,6 +87,9 @@ static void subtest_basic_usdt(void)
|
|||
ASSERT_EQ(bss->usdt3_args[0], 1, "usdt3_arg1");
|
||||
ASSERT_EQ(bss->usdt3_args[1], 42, "usdt3_arg2");
|
||||
ASSERT_EQ(bss->usdt3_args[2], (uintptr_t)&bla, "usdt3_arg3");
|
||||
ASSERT_EQ(bss->usdt3_arg_sizes[0], 4, "usdt3_arg1_size");
|
||||
ASSERT_EQ(bss->usdt3_arg_sizes[1], 8, "usdt3_arg2_size");
|
||||
ASSERT_EQ(bss->usdt3_arg_sizes[2], 8, "usdt3_arg3_size");
|
||||
|
||||
/* auto-attached usdt12 gets default zero cookie value */
|
||||
ASSERT_EQ(bss->usdt12_cookie, 0, "usdt12_cookie");
|
||||
|
|
@ -104,6 +108,11 @@ static void subtest_basic_usdt(void)
|
|||
ASSERT_EQ(bss->usdt12_args[10], nums[idx], "usdt12_arg11");
|
||||
ASSERT_EQ(bss->usdt12_args[11], t1.y, "usdt12_arg12");
|
||||
|
||||
int usdt12_expected_arg_sizes[12] = { 4, 4, 8, 8, 4, 8, 8, 8, 4, 2, 2, 1 };
|
||||
|
||||
for (i = 0; i < 12; i++)
|
||||
ASSERT_EQ(bss->usdt12_arg_sizes[i], usdt12_expected_arg_sizes[i], "usdt12_arg_size");
|
||||
|
||||
/* trigger_func() is marked __always_inline, so USDT invocations will be
|
||||
* inlined in two different places, meaning that each USDT will have
|
||||
* at least 2 different places to be attached to. This verifies that
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ int usdt0_called;
|
|||
u64 usdt0_cookie;
|
||||
int usdt0_arg_cnt;
|
||||
int usdt0_arg_ret;
|
||||
int usdt0_arg_size;
|
||||
|
||||
SEC("usdt")
|
||||
int usdt0(struct pt_regs *ctx)
|
||||
|
|
@ -26,6 +27,7 @@ int usdt0(struct pt_regs *ctx)
|
|||
usdt0_arg_cnt = bpf_usdt_arg_cnt(ctx);
|
||||
/* should return -ENOENT for any arg_num */
|
||||
usdt0_arg_ret = bpf_usdt_arg(ctx, bpf_get_prandom_u32(), &tmp);
|
||||
usdt0_arg_size = bpf_usdt_arg_size(ctx, bpf_get_prandom_u32());
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -34,6 +36,7 @@ u64 usdt3_cookie;
|
|||
int usdt3_arg_cnt;
|
||||
int usdt3_arg_rets[3];
|
||||
u64 usdt3_args[3];
|
||||
int usdt3_arg_sizes[3];
|
||||
|
||||
SEC("usdt//proc/self/exe:test:usdt3")
|
||||
int usdt3(struct pt_regs *ctx)
|
||||
|
|
@ -50,12 +53,15 @@ int usdt3(struct pt_regs *ctx)
|
|||
|
||||
usdt3_arg_rets[0] = bpf_usdt_arg(ctx, 0, &tmp);
|
||||
usdt3_args[0] = (int)tmp;
|
||||
usdt3_arg_sizes[0] = bpf_usdt_arg_size(ctx, 0);
|
||||
|
||||
usdt3_arg_rets[1] = bpf_usdt_arg(ctx, 1, &tmp);
|
||||
usdt3_args[1] = (long)tmp;
|
||||
usdt3_arg_sizes[1] = bpf_usdt_arg_size(ctx, 1);
|
||||
|
||||
usdt3_arg_rets[2] = bpf_usdt_arg(ctx, 2, &tmp);
|
||||
usdt3_args[2] = (uintptr_t)tmp;
|
||||
usdt3_arg_sizes[2] = bpf_usdt_arg_size(ctx, 2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -64,12 +70,15 @@ int usdt12_called;
|
|||
u64 usdt12_cookie;
|
||||
int usdt12_arg_cnt;
|
||||
u64 usdt12_args[12];
|
||||
int usdt12_arg_sizes[12];
|
||||
|
||||
SEC("usdt//proc/self/exe:test:usdt12")
|
||||
int BPF_USDT(usdt12, int a1, int a2, long a3, long a4, unsigned a5,
|
||||
long a6, __u64 a7, uintptr_t a8, int a9, short a10,
|
||||
short a11, signed char a12)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (my_pid != (bpf_get_current_pid_tgid() >> 32))
|
||||
return 0;
|
||||
|
||||
|
|
@ -90,6 +99,11 @@ int BPF_USDT(usdt12, int a1, int a2, long a3, long a4, unsigned a5,
|
|||
usdt12_args[9] = a10;
|
||||
usdt12_args[10] = a11;
|
||||
usdt12_args[11] = a12;
|
||||
|
||||
bpf_for(i, 0, 12) {
|
||||
usdt12_arg_sizes[i] = bpf_usdt_arg_size(ctx, i);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user