From 9786d424a36b3c600250290e15168e2d401b995b Mon Sep 17 00:00:00 2001 From: Yonghong Song Date: Thu, 13 Aug 2026 08:06:41 -0700 Subject: [PATCH] selftests/bpf: Fix chained_global_func_calls_success() for cpu v4 The chained_global_func_calls_success() test hardcodes the instruction counts reported by the verifier's per-subprog stats: subprog {{[0-9]+}} (global_good) global insns_self 5 insns_total 5 stack processed 14 insns global_good() does 'return arr[0]', where arr[] is an int array and the return type is long. Without cpu v4 this is a zero-extending load followed by a <<32/s>>32 sign-extension pair. With -mcpu=v4 llvm emits a single sign-extending load instead: 18: (18) r1 = 0xffa00000008eb000 20: (81) r0 = *(s32 *)(r1 +0) 21: (95) exit so the subprog is 3 insns rather than 5, and the whole program is 12 processed insns rather than 14. test_progs-cpuv4 fails with: EXPECTED REGEX: 'subprog {{[0-9]+}} (global_good) global insns_self 5 insns_total 5 stack' #606/1 verifier_global_subprogs/chained_global_func_calls_success:FAIL Select the expected counts based on __BPF_CPU_VERSION__. Fixes: c2e6c7de8830 ("bpf: Show more useful info in stack depth stats") Signed-off-by: Yonghong Song Signed-off-by: Daniel Borkmann Link: https://lore.kernel.org/bpf/20260813150641.3347662-1-yonghong.song@linux.dev --- tools/testing/selftests/bpf/progs/verifier_global_subprogs.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/verifier_global_subprogs.c b/tools/testing/selftests/bpf/progs/verifier_global_subprogs.c index 7b65eea97ebc..966f49348787 100644 --- a/tools/testing/selftests/bpf/progs/verifier_global_subprogs.c +++ b/tools/testing/selftests/bpf/progs/verifier_global_subprogs.c @@ -54,8 +54,13 @@ __msg("Validating global_good() func") __msg("('global_good') is safe for any args that match its prototype") __msg("subprog 0 (chained_global_func_calls_success) main insns_self 7 insns_total 7 stack") __msg("subprog {{[0-9]+}} (global_calls_good_only) global insns_self 2 insns_total 2 stack") +#if defined(__BPF_CPU_VERSION__) && __BPF_CPU_VERSION__ >= 4 +__msg("subprog {{[0-9]+}} (global_good) global insns_self 3 insns_total 3 stack") +__msg("processed 12 insns") +#else __msg("subprog {{[0-9]+}} (global_good) global insns_self 5 insns_total 5 stack") __msg("processed 14 insns") +#endif int chained_global_func_calls_success(void) { int sum = 0;