1360301a6SAlexei Starovoitov // SPDX-License-Identifier: GPL-2.0-only
2360301a6SAlexei Starovoitov /* Copyright (c) 2020 Facebook */
3360301a6SAlexei Starovoitov #include <stddef.h>
4360301a6SAlexei Starovoitov #include <linux/bpf.h>
53e689141SToke Høiland-Jørgensen #include <bpf/bpf_helpers.h>
6*95ebb376SAndrii Nakryiko #include "bpf_misc.h"
7360301a6SAlexei Starovoitov 
8360301a6SAlexei Starovoitov __attribute__ ((noinline))
f1(struct __sk_buff * skb)9360301a6SAlexei Starovoitov int f1(struct __sk_buff *skb)
10360301a6SAlexei Starovoitov {
11360301a6SAlexei Starovoitov 	return skb->len;
12360301a6SAlexei Starovoitov }
13360301a6SAlexei Starovoitov 
14360301a6SAlexei Starovoitov int f3(int, struct __sk_buff *skb);
15360301a6SAlexei Starovoitov 
16360301a6SAlexei Starovoitov __attribute__ ((noinline))
f2(int val,struct __sk_buff * skb)17360301a6SAlexei Starovoitov int f2(int val, struct __sk_buff *skb)
18360301a6SAlexei Starovoitov {
19360301a6SAlexei Starovoitov 	return f1(skb) + f3(val, skb + 1); /* type mismatch */
20360301a6SAlexei Starovoitov }
21360301a6SAlexei Starovoitov 
22360301a6SAlexei Starovoitov __attribute__ ((noinline))
f3(int val,struct __sk_buff * skb)23360301a6SAlexei Starovoitov int f3(int val, struct __sk_buff *skb)
24360301a6SAlexei Starovoitov {
25360301a6SAlexei Starovoitov 	return skb->ifindex * val;
26360301a6SAlexei Starovoitov }
27360301a6SAlexei Starovoitov 
28c22bdd28SAndrii Nakryiko SEC("tc")
29*95ebb376SAndrii Nakryiko __failure __msg("modified ctx ptr R2")
global_func6(struct __sk_buff * skb)30*95ebb376SAndrii Nakryiko int global_func6(struct __sk_buff *skb)
31360301a6SAlexei Starovoitov {
32360301a6SAlexei Starovoitov 	return f1(skb) + f2(2, skb) + f3(3, skb);
33360301a6SAlexei Starovoitov }
34