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