Commit 003d6f5f authored by Michael Ellerman's avatar Michael Ellerman

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: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200819015727.1977134-9-mpe@ellerman.id.au
parent 09275d71
...@@ -3,9 +3,13 @@ ...@@ -3,9 +3,13 @@
.data .data
.balign 8 .balign 8
message: success_message:
.ascii "success: switch_endian_test\n\0" .ascii "success: switch_endian_test\n\0"
.balign 8
failure_message:
.ascii "failure: switch_endian_test\n\0"
.section ".toc" .section ".toc"
.balign 8 .balign 8
pattern: pattern:
...@@ -64,6 +68,9 @@ FUNC_START(_start) ...@@ -64,6 +68,9 @@ FUNC_START(_start)
li r0, __NR_switch_endian li r0, __NR_switch_endian
sc sc
tdi 0, 0, 0x48 // b +8 if the endian was switched
b .Lfail // exit if endian didn't switch
#include "check-reversed.S" #include "check-reversed.S"
/* Flip back, r0 already has the switch syscall number */ /* Flip back, r0 already has the switch syscall number */
...@@ -71,12 +78,20 @@ FUNC_START(_start) ...@@ -71,12 +78,20 @@ FUNC_START(_start)
#include "check.S" #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 r0, __NR_write
li r3, 1 /* stdout */ li r3, 1 /* stdout */
ld r4, message@got(%r2)
li r5, 28 /* strlen(message3) */
sc sc
li r0, __NR_exit li r0, __NR_exit
li r3, 0 mr r3, r14
sc sc
b . b .
.Lfail:
ld r4, failure_message@got(%r2)
li r5, 28 // strlen(failure_message)
li r14, 1
b .Lout
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment