0001
0002
0003 #include <sys/prctl.h>
0004 #include <test_progs.h>
0005 #include "bpf_syscall_macro.skel.h"
0006
0007 void test_bpf_syscall_macro(void)
0008 {
0009 struct bpf_syscall_macro *skel = NULL;
0010 int err;
0011 int exp_arg1 = 1001;
0012 unsigned long exp_arg2 = 12;
0013 unsigned long exp_arg3 = 13;
0014 unsigned long exp_arg4 = 14;
0015 unsigned long exp_arg5 = 15;
0016
0017
0018 skel = bpf_syscall_macro__open();
0019 if (!ASSERT_OK_PTR(skel, "bpf_syscall_macro__open"))
0020 return;
0021
0022 skel->rodata->filter_pid = getpid();
0023
0024
0025 err = bpf_syscall_macro__load(skel);
0026 if (!ASSERT_OK(err, "bpf_syscall_macro__load"))
0027 goto cleanup;
0028
0029
0030 err = bpf_syscall_macro__attach(skel);
0031 if (!ASSERT_OK(err, "bpf_syscall_macro__attach"))
0032 goto cleanup;
0033
0034
0035 prctl(exp_arg1, exp_arg2, exp_arg3, exp_arg4, exp_arg5);
0036 #if defined(__aarch64__) || defined(__s390__)
0037 ASSERT_NEQ(skel->bss->arg1, exp_arg1, "syscall_arg1");
0038 #else
0039 ASSERT_EQ(skel->bss->arg1, exp_arg1, "syscall_arg1");
0040 #endif
0041 ASSERT_EQ(skel->bss->arg2, exp_arg2, "syscall_arg2");
0042 ASSERT_EQ(skel->bss->arg3, exp_arg3, "syscall_arg3");
0043
0044 #ifdef __x86_64__
0045 ASSERT_NEQ(skel->bss->arg4_cx, exp_arg4, "syscall_arg4_from_cx");
0046 #else
0047 ASSERT_EQ(skel->bss->arg4_cx, exp_arg4, "syscall_arg4_from_cx");
0048 #endif
0049 ASSERT_EQ(skel->bss->arg4, exp_arg4, "syscall_arg4");
0050 ASSERT_EQ(skel->bss->arg5, exp_arg5, "syscall_arg5");
0051
0052
0053 ASSERT_EQ(skel->bss->arg1_core, exp_arg1, "syscall_arg1_core_variant");
0054 ASSERT_EQ(skel->bss->arg2_core, exp_arg2, "syscall_arg2_core_variant");
0055 ASSERT_EQ(skel->bss->arg3_core, exp_arg3, "syscall_arg3_core_variant");
0056
0057 #ifdef __x86_64__
0058 ASSERT_NEQ(skel->bss->arg4_core_cx, exp_arg4, "syscall_arg4_from_cx_core_variant");
0059 #else
0060 ASSERT_EQ(skel->bss->arg4_core_cx, exp_arg4, "syscall_arg4_from_cx_core_variant");
0061 #endif
0062 ASSERT_EQ(skel->bss->arg4_core, exp_arg4, "syscall_arg4_core_variant");
0063 ASSERT_EQ(skel->bss->arg5_core, exp_arg5, "syscall_arg5_core_variant");
0064
0065 ASSERT_EQ(skel->bss->option_syscall, exp_arg1, "BPF_KPROBE_SYSCALL_option");
0066 ASSERT_EQ(skel->bss->arg2_syscall, exp_arg2, "BPF_KPROBE_SYSCALL_arg2");
0067 ASSERT_EQ(skel->bss->arg3_syscall, exp_arg3, "BPF_KPROBE_SYSCALL_arg3");
0068 ASSERT_EQ(skel->bss->arg4_syscall, exp_arg4, "BPF_KPROBE_SYSCALL_arg4");
0069 ASSERT_EQ(skel->bss->arg5_syscall, exp_arg5, "BPF_KPROBE_SYSCALL_arg5");
0070
0071 cleanup:
0072 bpf_syscall_macro__destroy(skel);
0073 }