123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #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
|