| /* 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 |