From: Abhishek Dubey <[email protected]> Verifier testcase result for tailcalls:
# ./test_progs -t verifier_tailcall #617/1 verifier_tailcall/invalid map type for tail call:OK #617/2 verifier_tailcall/invalid map type for tail call @unpriv:OK #617 verifier_tailcall:OK #618/1 verifier_tailcall_jit/main:OK #618 verifier_tailcall_jit:OK Summary: 2/3 PASSED, 0 SKIPPED, 0 FAILED Signed-off-by: Abhishek Dubey <[email protected]> --- .../bpf/progs/verifier_tailcall_jit.c | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c b/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c index 8d60c634a114..17475ecb3207 100644 --- a/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c +++ b/tools/testing/selftests/bpf/progs/verifier_tailcall_jit.c @@ -90,6 +90,75 @@ __jited(" popq %rax") __jited(" jmp {{.*}}") /* jump to tail call tgt */ __jited("L0: leave") __jited(" {{(retq|jmp 0x)}}") /* return or jump to rethunk */ +__arch_powerpc64 +/* program entry for main(), regular function prologue */ +__jited(" nop") +__jited(" ld 2, 16(13)") +__jited(" li 9, 0") +__jited(" std 9, -8(1)") +__jited(" mflr 0") +__jited(" std 0, 16(1)") +__jited(" stdu 1, {{.*}}(1)") +/* load address and call sub() via count register */ +__jited(" lis 12, {{.*}}") +__jited(" sldi 12, 12, 32") +__jited(" oris 12, 12, {{.*}}") +__jited(" ori 12, 12, {{.*}}") +__jited(" mtctr 12") +__jited(" bctrl") +__jited(" mr 8, 3") +__jited(" li 8, 0") +__jited(" addi 1, 1, {{.*}}") +__jited(" ld 0, 16(1)") +__jited(" mtlr 0") +__jited(" mr 3, 8") +__jited(" blr") +__jited("...") +__jited("func #1") +/* subprogram entry for sub() */ +__jited(" nop") +__jited(" ld 2, 16(13)") +/* tail call prologue for subprogram */ +__jited(" ld 10, 0(1)") +__jited(" ld 9, -8(10)") +__jited(" cmplwi 9, 33") +__jited(" bt {{.*}}, {{.*}}") +__jited(" addi 9, 10, -8") +__jited(" std 9, -8(1)") +__jited(" lis {{.*}}, {{.*}}") +__jited(" sldi {{.*}}, {{.*}}, 32") +__jited(" oris {{.*}}, {{.*}}, {{.*}}") +__jited(" ori {{.*}}, {{.*}}, {{.*}}") +__jited(" li {{.*}}, 0") +__jited(" lwz 9, {{.*}}({{.*}})") +__jited(" slwi {{.*}}, {{.*}}, 0") +__jited(" cmplw {{.*}}, 9") +__jited(" bf 0, {{.*}}") +/* bpf_tail_call implementation */ +__jited(" ld 9, -8(1)") +__jited(" cmplwi 9, 33") +__jited(" bf {{.*}}, {{.*}}") +__jited(" ld 9, 0(9)") +__jited(" cmplwi 9, 33") +__jited(" bt {{.*}}, {{.*}}") +__jited(" addi 9, 9, 1") +__jited(" mulli 10, {{.*}}, 8") +__jited(" add 10, 10, {{.*}}") +__jited(" ld 10, {{.*}}(10)") +__jited(" cmpldi 10, 0") +__jited(" bt {{.*}}, {{.*}}") +__jited(" ld 10, {{.*}}(10)") +__jited(" addi 10, 10, 16") +__jited(" mtctr 10") +__jited(" ld 10, -8(1)") +__jited(" cmplwi 10, 33") +__jited(" bt {{.*}}, {{.*}}") +__jited(" addi 10, 1, -8") +__jited(" std 9, 0(10)") +__jited(" bctr") +__jited(" mr 3, 8") +__jited(" blr") + SEC("tc") __naked int main(void) { -- 2.52.0
