mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
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:
parent
340ab42c26
commit
274c428325
@ -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モード
|
||||
|
||||
Loading…
Reference in New Issue
Block a user