15d8b583dSJiri Olsa // SPDX-License-Identifier: GPL-2.0
2*e43163edSJiri Olsa #include "vmlinux.h"
35d8b583dSJiri Olsa #include <bpf/bpf_helpers.h>
45d8b583dSJiri Olsa #include <bpf/bpf_tracing.h>
55d8b583dSJiri Olsa
65d8b583dSJiri Olsa char _license[] SEC("license") = "GPL";
75d8b583dSJiri Olsa
85d8b583dSJiri Olsa extern const void bpf_fentry_test1 __ksym;
95d8b583dSJiri Olsa extern const void bpf_fentry_test2 __ksym;
105d8b583dSJiri Olsa extern const void bpf_fentry_test3 __ksym;
115d8b583dSJiri Olsa extern const void bpf_fentry_test4 __ksym;
125d8b583dSJiri Olsa extern const void bpf_modify_return_test __ksym;
138237e754SJiri Olsa extern const void bpf_fentry_test6 __ksym;
14e3f9bc35SJiri Olsa extern const void bpf_fentry_test7 __ksym;
155d8b583dSJiri Olsa
16738c345bSJiri Olsa extern bool CONFIG_X86_KERNEL_IBT __kconfig __weak;
17738c345bSJiri Olsa
18738c345bSJiri Olsa /* This function is here to have CONFIG_X86_KERNEL_IBT
19738c345bSJiri Olsa * used and added to object BTF.
20738c345bSJiri Olsa */
unused(void)21738c345bSJiri Olsa int unused(void)
22738c345bSJiri Olsa {
23738c345bSJiri Olsa return CONFIG_X86_KERNEL_IBT ? 0 : 1;
24738c345bSJiri Olsa }
25738c345bSJiri Olsa
265d8b583dSJiri Olsa __u64 test1_result = 0;
275d8b583dSJiri Olsa SEC("fentry/bpf_fentry_test1")
BPF_PROG(test1,int a)285d8b583dSJiri Olsa int BPF_PROG(test1, int a)
295d8b583dSJiri Olsa {
305d8b583dSJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
315d8b583dSJiri Olsa
325d8b583dSJiri Olsa test1_result = (const void *) addr == &bpf_fentry_test1;
335d8b583dSJiri Olsa return 0;
345d8b583dSJiri Olsa }
355d8b583dSJiri Olsa
365d8b583dSJiri Olsa __u64 test2_result = 0;
375d8b583dSJiri Olsa SEC("fexit/bpf_fentry_test2")
BPF_PROG(test2,int a)385d8b583dSJiri Olsa int BPF_PROG(test2, int a)
395d8b583dSJiri Olsa {
405d8b583dSJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
415d8b583dSJiri Olsa
425d8b583dSJiri Olsa test2_result = (const void *) addr == &bpf_fentry_test2;
435d8b583dSJiri Olsa return 0;
445d8b583dSJiri Olsa }
455d8b583dSJiri Olsa
465d8b583dSJiri Olsa __u64 test3_result = 0;
475d8b583dSJiri Olsa SEC("kprobe/bpf_fentry_test3")
test3(struct pt_regs * ctx)485d8b583dSJiri Olsa int test3(struct pt_regs *ctx)
495d8b583dSJiri Olsa {
505d8b583dSJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
515d8b583dSJiri Olsa
525d8b583dSJiri Olsa test3_result = (const void *) addr == &bpf_fentry_test3;
535d8b583dSJiri Olsa return 0;
545d8b583dSJiri Olsa }
555d8b583dSJiri Olsa
565d8b583dSJiri Olsa __u64 test4_result = 0;
575d8b583dSJiri Olsa SEC("kretprobe/bpf_fentry_test4")
BPF_KRETPROBE(test4)585d8b583dSJiri Olsa int BPF_KRETPROBE(test4)
595d8b583dSJiri Olsa {
605d8b583dSJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
615d8b583dSJiri Olsa
625d8b583dSJiri Olsa test4_result = (const void *) addr == &bpf_fentry_test4;
635d8b583dSJiri Olsa return 0;
645d8b583dSJiri Olsa }
655d8b583dSJiri Olsa
665d8b583dSJiri Olsa __u64 test5_result = 0;
675d8b583dSJiri Olsa SEC("fmod_ret/bpf_modify_return_test")
BPF_PROG(test5,int a,int * b,int ret)685d8b583dSJiri Olsa int BPF_PROG(test5, int a, int *b, int ret)
695d8b583dSJiri Olsa {
705d8b583dSJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
715d8b583dSJiri Olsa
725d8b583dSJiri Olsa test5_result = (const void *) addr == &bpf_modify_return_test;
735d8b583dSJiri Olsa return ret;
745d8b583dSJiri Olsa }
758237e754SJiri Olsa
768237e754SJiri Olsa __u64 test6_result = 0;
77738c345bSJiri Olsa SEC("?kprobe")
test6(struct pt_regs * ctx)788237e754SJiri Olsa int test6(struct pt_regs *ctx)
798237e754SJiri Olsa {
808237e754SJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
818237e754SJiri Olsa
820e253f7eSJiri Olsa test6_result = (const void *) addr == 0;
838237e754SJiri Olsa return 0;
848237e754SJiri Olsa }
85*e43163edSJiri Olsa
86*e43163edSJiri Olsa unsigned long uprobe_trigger;
87*e43163edSJiri Olsa
88*e43163edSJiri Olsa __u64 test7_result = 0;
89*e43163edSJiri Olsa SEC("uprobe//proc/self/exe:uprobe_trigger")
BPF_UPROBE(test7)90*e43163edSJiri Olsa int BPF_UPROBE(test7)
91*e43163edSJiri Olsa {
92*e43163edSJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
93*e43163edSJiri Olsa
94*e43163edSJiri Olsa test7_result = (const void *) addr == (const void *) uprobe_trigger;
95*e43163edSJiri Olsa return 0;
96*e43163edSJiri Olsa }
97*e43163edSJiri Olsa
98*e43163edSJiri Olsa __u64 test8_result = 0;
99*e43163edSJiri Olsa SEC("uretprobe//proc/self/exe:uprobe_trigger")
BPF_URETPROBE(test8,int ret)100*e43163edSJiri Olsa int BPF_URETPROBE(test8, int ret)
101*e43163edSJiri Olsa {
102*e43163edSJiri Olsa __u64 addr = bpf_get_func_ip(ctx);
103*e43163edSJiri Olsa
104*e43163edSJiri Olsa test8_result = (const void *) addr == (const void *) uprobe_trigger;
105*e43163edSJiri Olsa return 0;
106*e43163edSJiri Olsa }
107