18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#include "common.h" 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci/* 58c2ecf20Sopenharmony_ci * Checks that registers contain what we expect, ie. they were not clobbered by 68c2ecf20Sopenharmony_ci * the syscall. 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * r15: pattern to check registers against. 98c2ecf20Sopenharmony_ci * 108c2ecf20Sopenharmony_ci * At the end r3 == 0 if everything's OK. 118c2ecf20Sopenharmony_ci */ 128c2ecf20Sopenharmony_ci nop # guaranteed to be illegal in reverse-endian 138c2ecf20Sopenharmony_ci mr r9,r15 148c2ecf20Sopenharmony_ci cmpd r9,r3 # check r3 158c2ecf20Sopenharmony_ci bne 1f 168c2ecf20Sopenharmony_ci addi r9,r15,4 # check r4 178c2ecf20Sopenharmony_ci cmpd r9,r4 188c2ecf20Sopenharmony_ci bne 1f 198c2ecf20Sopenharmony_ci lis r9,0x00FF # check CR 208c2ecf20Sopenharmony_ci ori r9,r9,0xF000 218c2ecf20Sopenharmony_ci mfcr r10 228c2ecf20Sopenharmony_ci and r10,r10,r9 238c2ecf20Sopenharmony_ci cmpw r9,r10 248c2ecf20Sopenharmony_ci addi r9,r15,34 258c2ecf20Sopenharmony_ci bne 1f 268c2ecf20Sopenharmony_ci addi r9,r15,32 # check LR 278c2ecf20Sopenharmony_ci mflr r10 288c2ecf20Sopenharmony_ci cmpd r9,r10 298c2ecf20Sopenharmony_ci bne 1f 308c2ecf20Sopenharmony_ci addi r9,r15,5 # check r5 318c2ecf20Sopenharmony_ci cmpd r9,r5 328c2ecf20Sopenharmony_ci bne 1f 338c2ecf20Sopenharmony_ci addi r9,r15,6 # check r6 348c2ecf20Sopenharmony_ci cmpd r9,r6 358c2ecf20Sopenharmony_ci bne 1f 368c2ecf20Sopenharmony_ci addi r9,r15,7 # check r7 378c2ecf20Sopenharmony_ci cmpd r9,r7 388c2ecf20Sopenharmony_ci bne 1f 398c2ecf20Sopenharmony_ci addi r9,r15,8 # check r8 408c2ecf20Sopenharmony_ci cmpd r9,r8 418c2ecf20Sopenharmony_ci bne 1f 428c2ecf20Sopenharmony_ci addi r9,r15,13 # check r13 438c2ecf20Sopenharmony_ci cmpd r9,r13 448c2ecf20Sopenharmony_ci bne 1f 458c2ecf20Sopenharmony_ci addi r9,r15,14 # check r14 468c2ecf20Sopenharmony_ci cmpd r9,r14 478c2ecf20Sopenharmony_ci bne 1f 488c2ecf20Sopenharmony_ci addi r9,r15,16 # check r16 498c2ecf20Sopenharmony_ci cmpd r9,r16 508c2ecf20Sopenharmony_ci bne 1f 518c2ecf20Sopenharmony_ci addi r9,r15,17 # check r17 528c2ecf20Sopenharmony_ci cmpd r9,r17 538c2ecf20Sopenharmony_ci bne 1f 548c2ecf20Sopenharmony_ci addi r9,r15,18 # check r18 558c2ecf20Sopenharmony_ci cmpd r9,r18 568c2ecf20Sopenharmony_ci bne 1f 578c2ecf20Sopenharmony_ci addi r9,r15,19 # check r19 588c2ecf20Sopenharmony_ci cmpd r9,r19 598c2ecf20Sopenharmony_ci bne 1f 608c2ecf20Sopenharmony_ci addi r9,r15,20 # check r20 618c2ecf20Sopenharmony_ci cmpd r9,r20 628c2ecf20Sopenharmony_ci bne 1f 638c2ecf20Sopenharmony_ci addi r9,r15,21 # check r21 648c2ecf20Sopenharmony_ci cmpd r9,r21 658c2ecf20Sopenharmony_ci bne 1f 668c2ecf20Sopenharmony_ci addi r9,r15,22 # check r22 678c2ecf20Sopenharmony_ci cmpd r9,r22 688c2ecf20Sopenharmony_ci bne 1f 698c2ecf20Sopenharmony_ci addi r9,r15,23 # check r23 708c2ecf20Sopenharmony_ci cmpd r9,r23 718c2ecf20Sopenharmony_ci bne 1f 728c2ecf20Sopenharmony_ci addi r9,r15,24 # check r24 738c2ecf20Sopenharmony_ci cmpd r9,r24 748c2ecf20Sopenharmony_ci bne 1f 758c2ecf20Sopenharmony_ci addi r9,r15,25 # check r25 768c2ecf20Sopenharmony_ci cmpd r9,r25 778c2ecf20Sopenharmony_ci bne 1f 788c2ecf20Sopenharmony_ci addi r9,r15,26 # check r26 798c2ecf20Sopenharmony_ci cmpd r9,r26 808c2ecf20Sopenharmony_ci bne 1f 818c2ecf20Sopenharmony_ci addi r9,r15,27 # check r27 828c2ecf20Sopenharmony_ci cmpd r9,r27 838c2ecf20Sopenharmony_ci bne 1f 848c2ecf20Sopenharmony_ci addi r9,r15,28 # check r28 858c2ecf20Sopenharmony_ci cmpd r9,r28 868c2ecf20Sopenharmony_ci bne 1f 878c2ecf20Sopenharmony_ci addi r9,r15,29 # check r29 888c2ecf20Sopenharmony_ci cmpd r9,r29 898c2ecf20Sopenharmony_ci bne 1f 908c2ecf20Sopenharmony_ci addi r9,r15,30 # check r30 918c2ecf20Sopenharmony_ci cmpd r9,r30 928c2ecf20Sopenharmony_ci bne 1f 938c2ecf20Sopenharmony_ci addi r9,r15,31 # check r31 948c2ecf20Sopenharmony_ci cmpd r9,r31 958c2ecf20Sopenharmony_ci bne 1f 968c2ecf20Sopenharmony_ci b 2f 978c2ecf20Sopenharmony_ci1: mr r3, r9 988c2ecf20Sopenharmony_ci li r0, __NR_exit 998c2ecf20Sopenharmony_ci sc 1008c2ecf20Sopenharmony_ci2: li r0, __NR_switch_endian 1018c2ecf20Sopenharmony_ci nop 102