162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#include "common.h" 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci * Checks that registers contain what we expect, ie. they were not clobbered by 662306a36Sopenharmony_ci * the syscall. 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * r15: pattern to check registers against. 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * At the end r3 == 0 if everything's OK. 1162306a36Sopenharmony_ci */ 1262306a36Sopenharmony_ci nop # guaranteed to be illegal in reverse-endian 1362306a36Sopenharmony_ci mr r9,r15 1462306a36Sopenharmony_ci cmpd r9,r3 # check r3 1562306a36Sopenharmony_ci bne 1f 1662306a36Sopenharmony_ci addi r9,r15,4 # check r4 1762306a36Sopenharmony_ci cmpd r9,r4 1862306a36Sopenharmony_ci bne 1f 1962306a36Sopenharmony_ci lis r9,0x00FF # check CR 2062306a36Sopenharmony_ci ori r9,r9,0xF000 2162306a36Sopenharmony_ci mfcr r10 2262306a36Sopenharmony_ci and r10,r10,r9 2362306a36Sopenharmony_ci cmpw r9,r10 2462306a36Sopenharmony_ci addi r9,r15,34 2562306a36Sopenharmony_ci bne 1f 2662306a36Sopenharmony_ci addi r9,r15,32 # check LR 2762306a36Sopenharmony_ci mflr r10 2862306a36Sopenharmony_ci cmpd r9,r10 2962306a36Sopenharmony_ci bne 1f 3062306a36Sopenharmony_ci addi r9,r15,5 # check r5 3162306a36Sopenharmony_ci cmpd r9,r5 3262306a36Sopenharmony_ci bne 1f 3362306a36Sopenharmony_ci addi r9,r15,6 # check r6 3462306a36Sopenharmony_ci cmpd r9,r6 3562306a36Sopenharmony_ci bne 1f 3662306a36Sopenharmony_ci addi r9,r15,7 # check r7 3762306a36Sopenharmony_ci cmpd r9,r7 3862306a36Sopenharmony_ci bne 1f 3962306a36Sopenharmony_ci addi r9,r15,8 # check r8 4062306a36Sopenharmony_ci cmpd r9,r8 4162306a36Sopenharmony_ci bne 1f 4262306a36Sopenharmony_ci addi r9,r15,13 # check r13 4362306a36Sopenharmony_ci cmpd r9,r13 4462306a36Sopenharmony_ci bne 1f 4562306a36Sopenharmony_ci addi r9,r15,14 # check r14 4662306a36Sopenharmony_ci cmpd r9,r14 4762306a36Sopenharmony_ci bne 1f 4862306a36Sopenharmony_ci addi r9,r15,16 # check r16 4962306a36Sopenharmony_ci cmpd r9,r16 5062306a36Sopenharmony_ci bne 1f 5162306a36Sopenharmony_ci addi r9,r15,17 # check r17 5262306a36Sopenharmony_ci cmpd r9,r17 5362306a36Sopenharmony_ci bne 1f 5462306a36Sopenharmony_ci addi r9,r15,18 # check r18 5562306a36Sopenharmony_ci cmpd r9,r18 5662306a36Sopenharmony_ci bne 1f 5762306a36Sopenharmony_ci addi r9,r15,19 # check r19 5862306a36Sopenharmony_ci cmpd r9,r19 5962306a36Sopenharmony_ci bne 1f 6062306a36Sopenharmony_ci addi r9,r15,20 # check r20 6162306a36Sopenharmony_ci cmpd r9,r20 6262306a36Sopenharmony_ci bne 1f 6362306a36Sopenharmony_ci addi r9,r15,21 # check r21 6462306a36Sopenharmony_ci cmpd r9,r21 6562306a36Sopenharmony_ci bne 1f 6662306a36Sopenharmony_ci addi r9,r15,22 # check r22 6762306a36Sopenharmony_ci cmpd r9,r22 6862306a36Sopenharmony_ci bne 1f 6962306a36Sopenharmony_ci addi r9,r15,23 # check r23 7062306a36Sopenharmony_ci cmpd r9,r23 7162306a36Sopenharmony_ci bne 1f 7262306a36Sopenharmony_ci addi r9,r15,24 # check r24 7362306a36Sopenharmony_ci cmpd r9,r24 7462306a36Sopenharmony_ci bne 1f 7562306a36Sopenharmony_ci addi r9,r15,25 # check r25 7662306a36Sopenharmony_ci cmpd r9,r25 7762306a36Sopenharmony_ci bne 1f 7862306a36Sopenharmony_ci addi r9,r15,26 # check r26 7962306a36Sopenharmony_ci cmpd r9,r26 8062306a36Sopenharmony_ci bne 1f 8162306a36Sopenharmony_ci addi r9,r15,27 # check r27 8262306a36Sopenharmony_ci cmpd r9,r27 8362306a36Sopenharmony_ci bne 1f 8462306a36Sopenharmony_ci addi r9,r15,28 # check r28 8562306a36Sopenharmony_ci cmpd r9,r28 8662306a36Sopenharmony_ci bne 1f 8762306a36Sopenharmony_ci addi r9,r15,29 # check r29 8862306a36Sopenharmony_ci cmpd r9,r29 8962306a36Sopenharmony_ci bne 1f 9062306a36Sopenharmony_ci addi r9,r15,30 # check r30 9162306a36Sopenharmony_ci cmpd r9,r30 9262306a36Sopenharmony_ci bne 1f 9362306a36Sopenharmony_ci addi r9,r15,31 # check r31 9462306a36Sopenharmony_ci cmpd r9,r31 9562306a36Sopenharmony_ci bne 1f 9662306a36Sopenharmony_ci b 2f 9762306a36Sopenharmony_ci1: mr r3, r9 9862306a36Sopenharmony_ci li r0, __NR_exit 9962306a36Sopenharmony_ci sc 10062306a36Sopenharmony_ci2: li r0, __NR_switch_endian 10162306a36Sopenharmony_ci nop 102