| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #include "common.h" | |
| /* | |
| * Checks that registers contain what we expect, ie. they were not clobbered by | |
| * the syscall. | |
| * | |
| * r15: pattern to check registers against. | |
| * | |
| * At the end r3 == 0 if everything's OK. | |
| */ | |
| nop # guaranteed to be illegal in reverse-endian | |
| mr r9,r15 | |
| cmpd r9,r3 # check r3 | |
| bne 1f | |
| addi r9,r15,4 # check r4 | |
| cmpd r9,r4 | |
| bne 1f | |
| lis r9,0x00FF # check CR | |
| ori r9,r9,0xF000 | |
| mfcr r10 | |
| and r10,r10,r9 | |
| cmpw r9,r10 | |
| addi r9,r15,34 | |
| bne 1f | |
| addi r9,r15,32 # check LR | |
| mflr r10 | |
| cmpd r9,r10 | |
| bne 1f | |
| addi r9,r15,5 # check r5 | |
| cmpd r9,r5 | |
| bne 1f | |
| addi r9,r15,6 # check r6 | |
| cmpd r9,r6 | |
| bne 1f | |
| addi r9,r15,7 # check r7 | |
| cmpd r9,r7 | |
| bne 1f | |
| addi r9,r15,8 # check r8 | |
| cmpd r9,r8 | |
| bne 1f | |
| addi r9,r15,13 # check r13 | |
| cmpd r9,r13 | |
| bne 1f | |
| addi r9,r15,14 # check r14 | |
| cmpd r9,r14 | |
| bne 1f | |
| addi r9,r15,16 # check r16 | |
| cmpd r9,r16 | |
| bne 1f | |
| addi r9,r15,17 # check r17 | |
| cmpd r9,r17 | |
| bne 1f | |
| addi r9,r15,18 # check r18 | |
| cmpd r9,r18 | |
| bne 1f | |
| addi r9,r15,19 # check r19 | |
| cmpd r9,r19 | |
| bne 1f | |
| addi r9,r15,20 # check r20 | |
| cmpd r9,r20 | |
| bne 1f | |
| addi r9,r15,21 # check r21 | |
| cmpd r9,r21 | |
| bne 1f | |
| addi r9,r15,22 # check r22 | |
| cmpd r9,r22 | |
| bne 1f | |
| addi r9,r15,23 # check r23 | |
| cmpd r9,r23 | |
| bne 1f | |
| addi r9,r15,24 # check r24 | |
| cmpd r9,r24 | |
| bne 1f | |
| addi r9,r15,25 # check r25 | |
| cmpd r9,r25 | |
| bne 1f | |
| addi r9,r15,26 # check r26 | |
| cmpd r9,r26 | |
| bne 1f | |
| addi r9,r15,27 # check r27 | |
| cmpd r9,r27 | |
| bne 1f | |
| addi r9,r15,28 # check r28 | |
| cmpd r9,r28 | |
| bne 1f | |
| addi r9,r15,29 # check r29 | |
| cmpd r9,r29 | |
| bne 1f | |
| addi r9,r15,30 # check r30 | |
| cmpd r9,r30 | |
| bne 1f | |
| addi r9,r15,31 # check r31 | |
| cmpd r9,r31 | |
| bne 1f | |
| b 2f | |
| 1: mr r3, r9 | |
| li r0, __NR_exit | |
| sc | |
| 2: li r0, __NR_switch_endian | |
| nop |