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