1360301a6SAlexei Starovoitov // SPDX-License-Identifier: GPL-2.0-only
2360301a6SAlexei Starovoitov /* Copyright (c) 2020 Facebook */
395ebb376SAndrii Nakryiko #include <stddef.h>
495ebb376SAndrii Nakryiko #include <linux/bpf.h>
595ebb376SAndrii Nakryiko #include <bpf/bpf_helpers.h>
695ebb376SAndrii Nakryiko #include "bpf_misc.h"
795ebb376SAndrii Nakryiko 
8360301a6SAlexei Starovoitov #define MAX_STACK (512 - 3 * 32)
995ebb376SAndrii Nakryiko 
1095ebb376SAndrii Nakryiko static __attribute__ ((noinline))
f0(int var,struct __sk_buff * skb)1195ebb376SAndrii Nakryiko int f0(int var, struct __sk_buff *skb)
1295ebb376SAndrii Nakryiko {
1395ebb376SAndrii Nakryiko 	return skb->len;
1495ebb376SAndrii Nakryiko }
1595ebb376SAndrii Nakryiko 
1695ebb376SAndrii Nakryiko __attribute__ ((noinline))
f1(struct __sk_buff * skb)1795ebb376SAndrii Nakryiko int f1(struct __sk_buff *skb)
1895ebb376SAndrii Nakryiko {
1995ebb376SAndrii Nakryiko 	volatile char buf[MAX_STACK] = {};
2095ebb376SAndrii Nakryiko 
21*c8ed6685SAndrii Nakryiko 	__sink(buf[MAX_STACK - 1]);
22*c8ed6685SAndrii Nakryiko 
2395ebb376SAndrii Nakryiko 	return f0(0, skb) + skb->len;
2495ebb376SAndrii Nakryiko }
2595ebb376SAndrii Nakryiko 
2695ebb376SAndrii Nakryiko int f3(int, struct __sk_buff *skb, int);
2795ebb376SAndrii Nakryiko 
2895ebb376SAndrii Nakryiko __attribute__ ((noinline))
f2(int val,struct __sk_buff * skb)2995ebb376SAndrii Nakryiko int f2(int val, struct __sk_buff *skb)
3095ebb376SAndrii Nakryiko {
3195ebb376SAndrii Nakryiko 	return f1(skb) + f3(val, skb, 1);
3295ebb376SAndrii Nakryiko }
3395ebb376SAndrii Nakryiko 
3495ebb376SAndrii Nakryiko __attribute__ ((noinline))
f3(int val,struct __sk_buff * skb,int var)3595ebb376SAndrii Nakryiko int f3(int val, struct __sk_buff *skb, int var)
3695ebb376SAndrii Nakryiko {
3795ebb376SAndrii Nakryiko 	volatile char buf[MAX_STACK] = {};
3895ebb376SAndrii Nakryiko 
39*c8ed6685SAndrii Nakryiko 	__sink(buf[MAX_STACK - 1]);
40*c8ed6685SAndrii Nakryiko 
4195ebb376SAndrii Nakryiko 	return skb->ifindex * val * var;
4295ebb376SAndrii Nakryiko }
4395ebb376SAndrii Nakryiko 
4495ebb376SAndrii Nakryiko SEC("tc")
4595ebb376SAndrii Nakryiko __success
global_func2(struct __sk_buff * skb)4695ebb376SAndrii Nakryiko int global_func2(struct __sk_buff *skb)
4795ebb376SAndrii Nakryiko {
4895ebb376SAndrii Nakryiko 	return f0(1, skb) + f1(skb) + f2(2, skb) + f3(3, skb, 4);
4995ebb376SAndrii Nakryiko }
50