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


Reply via email to