1 // SPDX-License-Identifier: GPL-2.0 2 #define _GNU_SOURCE 3 #include <test_progs.h> 4 #include "test_task_pt_regs.skel.h" 5 6 /* uprobe attach point */ 7 static noinline void trigger_func(void) 8 { 9 asm volatile (""); 10 } 11 12 void test_task_pt_regs(void) 13 { 14 struct test_task_pt_regs *skel; 15 struct bpf_link *uprobe_link; 16 ssize_t uprobe_offset; 17 bool match; 18 19 uprobe_offset = get_uprobe_offset(&trigger_func); 20 if (!ASSERT_GE(uprobe_offset, 0, "uprobe_offset")) 21 return; 22 23 skel = test_task_pt_regs__open_and_load(); 24 if (!ASSERT_OK_PTR(skel, "skel_open")) 25 return; 26 if (!ASSERT_OK_PTR(skel->bss, "check_bss")) 27 goto cleanup; 28 29 uprobe_link = bpf_program__attach_uprobe(skel->progs.handle_uprobe, 30 false /* retprobe */, 31 0 /* self pid */, 32 "/proc/self/exe", 33 uprobe_offset); 34 if (!ASSERT_OK_PTR(uprobe_link, "attach_uprobe")) 35 goto cleanup; 36 skel->links.handle_uprobe = uprobe_link; 37 38 /* trigger & validate uprobe */ 39 trigger_func(); 40 41 if (!ASSERT_EQ(skel->bss->uprobe_res, 1, "check_uprobe_res")) 42 goto cleanup; 43 44 match = !memcmp(&skel->bss->current_regs, &skel->bss->ctx_regs, 45 sizeof(skel->bss->current_regs)); 46 ASSERT_TRUE(match, "check_regs_match"); 47 48 cleanup: 49 test_task_pt_regs__destroy(skel); 50 } 51