OSDN Git Service

selftests/powerpc: Properly handle failure in switch_endian_test
authorMichael Ellerman <mpe@ellerman.id.au>
Wed, 19 Aug 2020 01:57:27 +0000 (11:57 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 8 Sep 2020 12:24:13 +0000 (22:24 +1000)
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 <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200819015727.1977134-9-mpe@ellerman.id.au
tools/testing/selftests/powerpc/switch_endian/switch_endian_test.S

index cc49304..7887f78 100644 (file)
@@ -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