0001
0002
0003
0004 #include <test_progs.h>
0005 #include "test_uprobe_autoattach.skel.h"
0006
0007
0008 static noinline int autoattach_trigger_func(int arg)
0009 {
0010 asm volatile ("");
0011 return arg + 1;
0012 }
0013
0014 void test_uprobe_autoattach(void)
0015 {
0016 struct test_uprobe_autoattach *skel;
0017 int trigger_val = 100, trigger_ret;
0018 size_t malloc_sz = 1;
0019 char *mem;
0020
0021 skel = test_uprobe_autoattach__open_and_load();
0022 if (!ASSERT_OK_PTR(skel, "skel_open"))
0023 return;
0024
0025 if (!ASSERT_OK(test_uprobe_autoattach__attach(skel), "skel_attach"))
0026 goto cleanup;
0027
0028 skel->bss->test_pid = getpid();
0029
0030
0031 trigger_ret = autoattach_trigger_func(trigger_val);
0032
0033 skel->bss->test_pid = getpid();
0034
0035
0036 mem = malloc(malloc_sz);
0037
0038 ASSERT_EQ(skel->bss->uprobe_byname_parm1, trigger_val, "check_uprobe_byname_parm1");
0039 ASSERT_EQ(skel->bss->uprobe_byname_ran, 1, "check_uprobe_byname_ran");
0040 ASSERT_EQ(skel->bss->uretprobe_byname_rc, trigger_ret, "check_uretprobe_byname_rc");
0041 ASSERT_EQ(skel->bss->uretprobe_byname_ran, 2, "check_uretprobe_byname_ran");
0042 ASSERT_EQ(skel->bss->uprobe_byname2_parm1, malloc_sz, "check_uprobe_byname2_parm1");
0043 ASSERT_EQ(skel->bss->uprobe_byname2_ran, 3, "check_uprobe_byname2_ran");
0044 ASSERT_EQ(skel->bss->uretprobe_byname2_rc, mem, "check_uretprobe_byname2_rc");
0045 ASSERT_EQ(skel->bss->uretprobe_byname2_ran, 4, "check_uretprobe_byname2_ran");
0046
0047 free(mem);
0048 cleanup:
0049 test_uprobe_autoattach__destroy(skel);
0050 }