101 lines
1.9 KiB
ArmAsm
101 lines
1.9 KiB
ArmAsm
#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
|