1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* Copyright (c) 2019 Facebook */ |
3 | |
4 | #include <stdint.h> |
5 | #include <stdbool.h> |
6 | #include <linux/ptrace.h> |
7 | #include <linux/bpf.h> |
8 | #include <bpf/bpf_helpers.h> |
9 | |
10 | /* non-existing BPF helper, to test dead code elimination */ |
11 | static int (*bpf_missing_helper)(const void *arg1, int arg2) = (void *) 999; |
12 | |
13 | extern int LINUX_KERNEL_VERSION __kconfig; |
14 | extern int LINUX_UNKNOWN_VIRTUAL_EXTERN __kconfig __weak; |
15 | extern bool CONFIG_BPF_SYSCALL __kconfig; /* strong */ |
16 | extern enum libbpf_tristate CONFIG_TRISTATE __kconfig __weak; |
17 | extern bool CONFIG_BOOL __kconfig __weak; |
18 | extern char CONFIG_CHAR __kconfig __weak; |
19 | extern uint16_t CONFIG_USHORT __kconfig __weak; |
20 | extern int CONFIG_INT __kconfig __weak; |
21 | extern uint64_t CONFIG_ULONG __kconfig __weak; |
22 | extern const char CONFIG_STR[8] __kconfig __weak; |
23 | extern uint64_t CONFIG_MISSING __kconfig __weak; |
24 | |
25 | uint64_t kern_ver = -1; |
26 | uint64_t unkn_virt_val = -1; |
27 | uint64_t bpf_syscall = -1; |
28 | uint64_t tristate_val = -1; |
29 | uint64_t bool_val = -1; |
30 | uint64_t char_val = -1; |
31 | uint64_t ushort_val = -1; |
32 | uint64_t int_val = -1; |
33 | uint64_t ulong_val = -1; |
34 | char str_val[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; |
35 | uint64_t missing_val = -1; |
36 | |
37 | SEC("raw_tp/sys_enter" ) |
38 | int handle_sys_enter(struct pt_regs *ctx) |
39 | { |
40 | int i; |
41 | |
42 | kern_ver = LINUX_KERNEL_VERSION; |
43 | unkn_virt_val = LINUX_UNKNOWN_VIRTUAL_EXTERN; |
44 | bpf_syscall = CONFIG_BPF_SYSCALL; |
45 | tristate_val = CONFIG_TRISTATE; |
46 | bool_val = CONFIG_BOOL; |
47 | char_val = CONFIG_CHAR; |
48 | ushort_val = CONFIG_USHORT; |
49 | int_val = CONFIG_INT; |
50 | ulong_val = CONFIG_ULONG; |
51 | |
52 | for (i = 0; i < sizeof(CONFIG_STR); i++) { |
53 | str_val[i] = CONFIG_STR[i]; |
54 | } |
55 | |
56 | if (CONFIG_MISSING) |
57 | /* invalid, but dead code - never executed */ |
58 | missing_val = bpf_missing_helper(ctx, 123); |
59 | else |
60 | missing_val = 0xDEADC0DE; |
61 | |
62 | return 0; |
63 | } |
64 | |
65 | char _license[] SEC("license" ) = "GPL" ; |
66 | |