| // SPDX-License-Identifier: GPL-2.0 |
| /* Copyright (c) 2019 Facebook */ |
| |
| #include <stdint.h> |
| #include <stdbool.h> |
| #include <linux/ptrace.h> |
| #include <linux/bpf.h> |
| #include <bpf/bpf_helpers.h> |
| |
| /* non-existing BPF helper, to test dead code elimination */ |
| static int (*bpf_missing_helper)(const void *arg1, int arg2) = (void *) 999; |
| |
| extern int LINUX_KERNEL_VERSION __kconfig; |
| extern bool CONFIG_BPF_SYSCALL __kconfig; /* strong */ |
| extern enum libbpf_tristate CONFIG_TRISTATE __kconfig __weak; |
| extern bool CONFIG_BOOL __kconfig __weak; |
| extern char CONFIG_CHAR __kconfig __weak; |
| extern uint16_t CONFIG_USHORT __kconfig __weak; |
| extern int CONFIG_INT __kconfig __weak; |
| extern uint64_t CONFIG_ULONG __kconfig __weak; |
| extern const char CONFIG_STR[8] __kconfig __weak; |
| extern uint64_t CONFIG_MISSING __kconfig __weak; |
| |
| uint64_t kern_ver = -1; |
| uint64_t bpf_syscall = -1; |
| uint64_t tristate_val = -1; |
| uint64_t bool_val = -1; |
| uint64_t char_val = -1; |
| uint64_t ushort_val = -1; |
| uint64_t int_val = -1; |
| uint64_t ulong_val = -1; |
| char str_val[8] = {-1, -1, -1, -1, -1, -1, -1, -1}; |
| uint64_t missing_val = -1; |
| |
| SEC("raw_tp/sys_enter") |
| int handle_sys_enter(struct pt_regs *ctx) |
| { |
| int i; |
| |
| kern_ver = LINUX_KERNEL_VERSION; |
| bpf_syscall = CONFIG_BPF_SYSCALL; |
| tristate_val = CONFIG_TRISTATE; |
| bool_val = CONFIG_BOOL; |
| char_val = CONFIG_CHAR; |
| ushort_val = CONFIG_USHORT; |
| int_val = CONFIG_INT; |
| ulong_val = CONFIG_ULONG; |
| |
| for (i = 0; i < sizeof(CONFIG_STR); i++) { |
| str_val[i] = CONFIG_STR[i]; |
| } |
| |
| if (CONFIG_MISSING) |
| /* invalid, but dead code - never executed */ |
| missing_val = bpf_missing_helper(ctx, 123); |
| else |
| missing_val = 0xDEADC0DE; |
| |
| return 0; |
| } |
| |
| char _license[] SEC("license") = "GPL"; |