On older CPUs the switch_endian() syscall doesn't work. Currently that
causes the switch_endian_test to just crash. Instead detect the
failure and properly exit with a failure message.

Signed-off-by: Michael Ellerman <m...@ellerman.id.au>
---
 .../switch_endian/switch_endian_test.S        | 23 +++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/tools/testing/selftests/powerpc/switch_endian/switch_endian_test.S 
b/tools/testing/selftests/powerpc/switch_endian/switch_endian_test.S
index cc4930467235..7887f78cf072 100644
--- a/tools/testing/selftests/powerpc/switch_endian/switch_endian_test.S
+++ b/tools/testing/selftests/powerpc/switch_endian/switch_endian_test.S
@@ -3,9 +3,13 @@
 
        .data
        .balign 8
-message:
+success_message:
        .ascii "success: switch_endian_test\n\0"
 
+       .balign 8
+failure_message:
+       .ascii "failure: switch_endian_test\n\0"
+
        .section ".toc"
        .balign 8
 pattern:
@@ -64,6 +68,9 @@ FUNC_START(_start)
        li r0, __NR_switch_endian
        sc
 
+       tdi   0, 0, 0x48        // b +8 if the endian was switched
+       b     .Lfail            // exit if endian didn't switch
+
 #include "check-reversed.S"
 
        /* Flip back, r0 already has the switch syscall number */
@@ -71,12 +78,20 @@ FUNC_START(_start)
 
 #include "check.S"
 
+       ld      r4, success_message@got(%r2)
+       li      r5, 28  // strlen(success_message)
+       li      r14, 0  // exit status
+.Lout:
        li      r0, __NR_write
        li      r3, 1   /* stdout */
-       ld      r4, message@got(%r2)
-       li      r5, 28  /* strlen(message3) */
        sc
        li      r0, __NR_exit
-       li      r3, 0
+       mr      r3, r14
        sc
        b       .
+
+.Lfail:
+       ld      r4, failure_message@got(%r2)
+       li      r5, 28  // strlen(failure_message)
+       li      r14, 1
+       b       .Lout
-- 
2.25.1

Reply via email to