1360301a6SAlexei Starovoitov // SPDX-License-Identifier: GPL-2.0-only
2360301a6SAlexei Starovoitov /* Copyright (c) 2020 Facebook */
3360301a6SAlexei Starovoitov #include <stddef.h>
4360301a6SAlexei Starovoitov #include <linux/bpf.h>
53e689141SToke Høiland-Jørgensen #include <bpf/bpf_helpers.h>
6*95ebb376SAndrii Nakryiko #include "bpf_misc.h"
7360301a6SAlexei Starovoitov 
8360301a6SAlexei Starovoitov __attribute__ ((noinline))
f1(struct __sk_buff * skb)9360301a6SAlexei Starovoitov int f1(struct __sk_buff *skb)
10360301a6SAlexei Starovoitov {
11360301a6SAlexei Starovoitov 	return skb->len;
12360301a6SAlexei Starovoitov }
13360301a6SAlexei Starovoitov 
14360301a6SAlexei Starovoitov __attribute__ ((noinline))
f2(int val,struct __sk_buff * skb)15360301a6SAlexei Starovoitov int f2(int val, struct __sk_buff *skb)
16360301a6SAlexei Starovoitov {
17360301a6SAlexei Starovoitov 	return f1(skb) + val;
18360301a6SAlexei Starovoitov }
19360301a6SAlexei Starovoitov 
20360301a6SAlexei Starovoitov __attribute__ ((noinline))
f3(int val,struct __sk_buff * skb,int var)21360301a6SAlexei Starovoitov int f3(int val, struct __sk_buff *skb, int var)
22360301a6SAlexei Starovoitov {
23360301a6SAlexei Starovoitov 	return f2(var, skb) + val;
24360301a6SAlexei Starovoitov }
25360301a6SAlexei Starovoitov 
26360301a6SAlexei Starovoitov __attribute__ ((noinline))
f4(struct __sk_buff * skb)27360301a6SAlexei Starovoitov int f4(struct __sk_buff *skb)
28360301a6SAlexei Starovoitov {
29360301a6SAlexei Starovoitov 	return f3(1, skb, 2);
30360301a6SAlexei Starovoitov }
31360301a6SAlexei Starovoitov 
32360301a6SAlexei Starovoitov __attribute__ ((noinline))
f5(struct __sk_buff * skb)33360301a6SAlexei Starovoitov int f5(struct __sk_buff *skb)
34360301a6SAlexei Starovoitov {
35360301a6SAlexei Starovoitov 	return f4(skb);
36360301a6SAlexei Starovoitov }
37360301a6SAlexei Starovoitov 
38360301a6SAlexei Starovoitov __attribute__ ((noinline))
f6(struct __sk_buff * skb)39360301a6SAlexei Starovoitov int f6(struct __sk_buff *skb)
40360301a6SAlexei Starovoitov {
41360301a6SAlexei Starovoitov 	return f5(skb);
42360301a6SAlexei Starovoitov }
43360301a6SAlexei Starovoitov 
44360301a6SAlexei Starovoitov __attribute__ ((noinline))
f7(struct __sk_buff * skb)45360301a6SAlexei Starovoitov int f7(struct __sk_buff *skb)
46360301a6SAlexei Starovoitov {
47360301a6SAlexei Starovoitov 	return f6(skb);
48360301a6SAlexei Starovoitov }
49360301a6SAlexei Starovoitov 
50360301a6SAlexei Starovoitov __attribute__ ((noinline))
f8(struct __sk_buff * skb)51360301a6SAlexei Starovoitov int f8(struct __sk_buff *skb)
52360301a6SAlexei Starovoitov {
53360301a6SAlexei Starovoitov 	return f7(skb);
54360301a6SAlexei Starovoitov }
55360301a6SAlexei Starovoitov 
56c22bdd28SAndrii Nakryiko SEC("tc")
57*95ebb376SAndrii Nakryiko __failure __msg("the call stack of 8 frames")
global_func3(struct __sk_buff * skb)58*95ebb376SAndrii Nakryiko int global_func3(struct __sk_buff *skb)
59360301a6SAlexei Starovoitov {
60360301a6SAlexei Starovoitov 	return f8(skb);
61360301a6SAlexei Starovoitov }
62