FIQハンドラ(デバッガモニタ等)でSWIを使うケースへ対処。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@221 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2009-01-28 04:36:47 +00:00
parent 340ab42c26
commit 274c428325

View File

@ -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モード