selftests/powerpc: Properly handle failure in switch_endian_test

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
This commit is contained in:
Michael Ellerman
2020-08-19 11:57:27 +10:00
parent 09275d717d
commit 003d6f5fd2

View 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