On Mon, Nov 18, 2019 at 10:21:51PM -0800, Andrii Nakryiko wrote: > > -static __attribute__ ((noinline)) > -int test_pkt_access_subprog2(int val, volatile struct __sk_buff *skb) > +__attribute__ ((noinline)) > +int test_pkt_access_subprog2(int val, struct __sk_buff *skb) > { > return skb->len * val; > } Did you run test_progs -n 8? Above breaks it with: 10: (61) r1 = *(u32 *)(r6 +40) func 'test_pkt_access_subprog2' doesn't have 6-th argument invalid bpf_context access off=40 size=4 The point of the subprog2 is to test the scenario where BTF disagress with llvm optimizations.