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 Starovoitovint 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 Starovoitovint f2(int val, struct __sk_buff *skb) 18360301a6SAlexei Starovoitov { 19360301a6SAlexei Starovoitov return f1(skb) + f3(val, (void *)&val); /* type mismatch */ 20360301a6SAlexei Starovoitov } 21360301a6SAlexei Starovoitov 22360301a6SAlexei Starovoitov __attribute__ ((noinline)) f3(int val,struct __sk_buff * skb)23360301a6SAlexei Starovoitovint 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("expected pointer to ctx, but got PTR") global_func5(struct __sk_buff * skb)30*95ebb376SAndrii Nakryikoint global_func5(struct __sk_buff *skb) 31360301a6SAlexei Starovoitov { 32360301a6SAlexei Starovoitov return f1(skb) + f2(2, skb) + f3(3, skb); 33360301a6SAlexei Starovoitov } 34