1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* Copyright (c) 2021 Facebook */ |
3 | #include "vmlinux.h" |
4 | #include <bpf/bpf_helpers.h> |
5 | #include <bpf/bpf_tracing.h> |
6 | |
7 | #if __has_attribute(btf_decl_tag) |
8 | #define __tag1 __attribute__((btf_decl_tag("tag1"))) |
9 | #define __tag2 __attribute__((btf_decl_tag("tag2"))) |
10 | volatile const bool skip_tests __tag1 __tag2 = false; |
11 | #else |
12 | #define __tag1 |
13 | #define __tag2 |
14 | volatile const bool skip_tests = true; |
15 | #endif |
16 | |
17 | struct key_t { |
18 | int a; |
19 | int b __tag1 __tag2; |
20 | int c; |
21 | } __tag1 __tag2; |
22 | |
23 | typedef struct { |
24 | int a; |
25 | int b; |
26 | } value_t __tag1 __tag2; |
27 | |
28 | struct { |
29 | __uint(type, BPF_MAP_TYPE_HASH); |
30 | __uint(max_entries, 3); |
31 | __type(key, struct key_t); |
32 | __type(value, value_t); |
33 | } hashmap1 SEC(".maps" ); |
34 | |
35 | |
36 | static __noinline int foo(int x __tag1 __tag2) __tag1 __tag2 |
37 | { |
38 | struct key_t key; |
39 | value_t val = {}; |
40 | |
41 | key.a = key.b = key.c = x; |
42 | bpf_map_update_elem(&hashmap1, &key, &val, 0); |
43 | return 0; |
44 | } |
45 | |
46 | SEC("fentry/bpf_fentry_test1" ) |
47 | int BPF_PROG(sub, int x) |
48 | { |
49 | return foo(x); |
50 | } |
51 | |