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

source code of linux/tools/testing/selftests/bpf/progs/test_global_func3.c