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

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
Loading
Loading
Loading
Loading
+19 −4
Original line number Diff line number Diff line
@@ -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