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