xref: /linux/tools/testing/selftests/bpf/progs/test_global_func4.c (revision 9a87ffc99ec8eb8d35eed7c4f816d75f5cc9662e)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2020 Facebook */
3 #include <stddef.h>
4 #include <linux/bpf.h>
5 #include <bpf/bpf_helpers.h>
6 #include "bpf_misc.h"
7 
8 __attribute__ ((noinline))
f1(struct __sk_buff * skb)9 int f1(struct __sk_buff *skb)
10 {
11 	return skb->len;
12 }
13 
14 __attribute__ ((noinline))
f2(int val,struct __sk_buff * skb)15 int f2(int val, struct __sk_buff *skb)
16 {
17 	return f1(skb) + val;
18 }
19 
20 __attribute__ ((noinline))
f3(int val,struct __sk_buff * skb,int var)21 int f3(int val, struct __sk_buff *skb, int var)
22 {
23 	return f2(var, skb) + val;
24 }
25 
26 __attribute__ ((noinline))
f4(struct __sk_buff * skb)27 int f4(struct __sk_buff *skb)
28 {
29 	return f3(1, skb, 2);
30 }
31 
32 __attribute__ ((noinline))
f5(struct __sk_buff * skb)33 int f5(struct __sk_buff *skb)
34 {
35 	return f4(skb);
36 }
37 
38 __attribute__ ((noinline))
f6(struct __sk_buff * skb)39 int f6(struct __sk_buff *skb)
40 {
41 	return f5(skb);
42 }
43 
44 __attribute__ ((noinline))
f7(struct __sk_buff * skb)45 int f7(struct __sk_buff *skb)
46 {
47 	return f6(skb);
48 }
49 
50 SEC("tc")
51 __success
global_func4(struct __sk_buff * skb)52 int global_func4(struct __sk_buff *skb)
53 {
54 	return f7(skb);
55 }
56