Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /* Copyright (c) 2022, Oracle and/or its affiliates. */
0003 
0004 #include <test_progs.h>
0005 #include "test_uprobe_autoattach.skel.h"
0006 
0007 /* uprobe attach point */
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     /* trigger & validate uprobe & uretprobe */
0031     trigger_ret = autoattach_trigger_func(trigger_val);
0032 
0033     skel->bss->test_pid = getpid();
0034 
0035     /* trigger & validate shared library u[ret]probes attached by name */
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 }