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 Nakryikoint 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 Nakryikoint 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 Nakryikoint 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 Nakryikoint 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 Nakryikoint 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 Nakryikoint 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 Nakryikoint 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 Nakryikoint global_func4(struct __sk_buff *skb) 53*95ebb376SAndrii Nakryiko { 54*95ebb376SAndrii Nakryiko return f7(skb); 55*95ebb376SAndrii Nakryiko } 56