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))
9 int f1(struct __sk_buff *skb)
10 {
11 	return skb->len;
12 }
13 
14 __attribute__ ((noinline))
15 int f2(int val, struct __sk_buff *skb)
16 {
17 	return f1(skb) + val;
18 }
19 
20 __attribute__ ((noinline))
21 int f3(int val, struct __sk_buff *skb, int var)
22 {
23 	return f2(var, skb) + val;
24 }
25 
26 __attribute__ ((noinline))
27 int f4(struct __sk_buff *skb)
28 {
29 	return f3(1, skb, 2);
30 }
31 
32 __attribute__ ((noinline))
33 int f5(struct __sk_buff *skb)
34 {
35 	return f4(skb);
36 }
37 
38 __attribute__ ((noinline))
39 int f6(struct __sk_buff *skb)
40 {
41 	return f5(skb);
42 }
43 
44 __attribute__ ((noinline))
45 int f7(struct __sk_buff *skb)
46 {
47 	return f6(skb);
48 }
49 
50 __attribute__ ((noinline))
51 int f8(struct __sk_buff *skb)
52 {
53 	return f7(skb);
54 }
55 
56 SEC("tc")
57 __failure __msg("the call stack of 8 frames")
58 int global_func3(struct __sk_buff *skb)
59 {
60 	return f8(skb);
61 }
62