1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2023 Meta Platforms, Inc. and affiliates. */
5 #include <bpf/bpf_helpers.h>
6 #include <bpf/bpf_tracing.h>
8 #if (defined(__TARGET_ARCH_arm64) || defined(__TARGET_ARCH_x86) || \
9 (defined(__TARGET_ARCH_riscv) && __riscv_xlen == 64)) && __clang_major__ >= 18
10 const volatile int skip = 0;
12 const volatile int skip = 1;
15 volatile const short val1 = -1;
16 volatile const int val2 = -1;
19 int done1, done2, ret1, ret2;
21 SEC("?raw_tp/sys_enter")
22 int rdonly_map_prog(const void *ctx)
28 /* val1/val2 readonly map */
35 SEC("?raw_tp/sys_enter")
36 int map_val_prog(const void *ctx)
42 /* val1/val2 regular read/write map */
49 struct bpf_testmod_struct_arg_1 {
55 SEC("?fentry/bpf_testmod_test_arg_ptr_to_struct")
56 int BPF_PROG2(test_ptr_struct_arg, struct bpf_testmod_struct_arg_1 *, p)
58 /* probed memory access */
63 long long set_optlen, set_retval;
65 SEC("?cgroup/getsockopt")
66 int _getsockopt(volatile struct bpf_sockopt *ctx)
68 int old_optlen, old_retval;
70 old_optlen = ctx->optlen;
71 old_retval = ctx->retval;
76 /* sign extension for ctx member */
77 set_optlen = ctx->optlen;
78 set_retval = ctx->retval;
80 ctx->optlen = old_optlen;
81 ctx->retval = old_retval;
89 int _tc(volatile struct __sk_buff *skb)
98 /* narrowed sign extension for ctx member */
99 #if __clang_major__ >= 18
100 /* force narrow one-byte signed load. Otherwise, compiler may
101 * generate a 32-bit unsigned load followed by an s8 movsx.
103 asm volatile ("r1 = *(s8 *)(%[ctx] + %[off_mark])\n\t"
105 : [tmp_mark]"=r"(tmp_mark)
107 [off_mark]"i"(offsetof(struct __sk_buff, mark))
110 tmp_mark = (char)skb->mark;
114 skb->mark = old_mark;
119 char _license[] SEC("license") = "GPL";