From 274c4283252c0cd07034cd9636770356c72b1464 Mon Sep 17 00:00:00 2001 From: nakasima Date: Wed, 28 Jan 2009 04:36:47 +0000 Subject: [PATCH] =?UTF-8?q?FIQ=E3=83=8F=E3=83=B3=E3=83=89=E3=83=A9?= =?UTF-8?q?=EF=BC=88=E3=83=87=E3=83=90=E3=83=83=E3=82=AC=E3=83=A2=E3=83=8B?= =?UTF-8?q?=E3=82=BF=E7=AD=89=EF=BC=89=E3=81=A7SWI=E3=82=92=E4=BD=BF?= =?UTF-8?q?=E3=81=86=E3=82=B1=E3=83=BC=E3=82=B9=E3=81=B8=E5=AF=BE=E5=87=A6?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@221 b871894f-2f95-9b40-918c-086798483c85 --- trunk/bootrom/build/libraries/init/common/crt0_excp.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/trunk/bootrom/build/libraries/init/common/crt0_excp.c b/trunk/bootrom/build/libraries/init/common/crt0_excp.c index e204841..7303dea 100644 --- a/trunk/bootrom/build/libraries/init/common/crt0_excp.c +++ b/trunk/bootrom/build/libraries/init/common/crt0_excp.c @@ -239,6 +239,10 @@ asm void i_stupSwiHandler( void ) { INASM_EXTERN( _start ) + // 不正確データアボート有効化(clear HW_PSR_IMPRECISE_ABORT) + // FIQハンドラでのSWI使用時のSP_svc上書き防止のため最初にFIQを禁止(IRQはHWが禁止する) + msr cpsr_cxsf, #(HW_PSR_SVC_MODE | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE) + // SVCモード mrs sp, spsr // ユーザモードならシステムモードへ @@ -250,8 +254,8 @@ asm void i_stupSwiHandler( void ) // 呼び出し元のモード sub sp, sp, #12 - stmfd sp!, {r11, r12, lr} - add r12, sp, #24 // ユーザスタック内のSPSR_svc、LR_svc退避アドレスをコピー + stmfd sp!, {r11, r12, lr} // このタイミングでデータアボートハンドラがSWIを使用するとSVCレジスタは復帰不能 + add r12, sp, #24 // 呼び出し元のスタック内へ確保したSPSR_svc、LR_svc用スタックアドレスをコピー msr cpsr_cxsf, #(HW_PSR_SVC_MODE | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE) // SVCモード