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