From 23acec2819911c3f8c7d78d443c2263debc2f437 Mon Sep 17 00:00:00 2001 From: nakasima Date: Tue, 3 Feb 2009 06:26:44 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=A5=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89?= =?UTF-8?q?=E3=81=AE=E3=82=B9=E3=82=BF=E3=83=83=E3=82=AF=E6=9B=B8=E3=81=8D?= =?UTF-8?q?=E6=8F=9B=E3=81=88=E3=81=AB=E3=82=88=E3=82=8B=E3=82=B7=E3=82=B9?= =?UTF-8?q?=E3=83=86=E3=83=A0=E3=83=A2=E3=83=BC=E3=83=89=E3=81=AE=E3=83=8F?= =?UTF-8?q?=E3=83=83=E3=82=AD=E3=83=B3=E3=82=B0=E3=81=AB=E5=AF=BE=E5=BF=9C?= =?UTF-8?q?=E3=80=82=20=E4=BD=86=E3=81=97DMA=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E3=83=8F=E3=83=83=E3=82=AD=E3=83=B3=E3=82=B0=E3=81=B8=E5=AF=BE?= =?UTF-8?q?=E5=BF=9C=E3=81=99=E3=82=8B=E3=81=AB=E3=81=AF=E3=83=A6=E3=83=BC?= =?UTF-8?q?=E3=82=B6=E3=83=A2=E3=83=BC=E3=83=89=E3=81=A8SVC=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E3=82=B9=E3=82=BF=E3=83=83=E3=82=AF?= =?UTF-8?q?=E3=82=92=E5=88=86=E3=81=91=E3=82=8B=E5=BF=85=E8=A6=81=E3=81=8C?= =?UTF-8?q?=E3=81=82=E3=82=8B=EF=BC=88OS=E3=81=AE=E3=83=A9=E3=83=83?= =?UTF-8?q?=E3=83=91=E3=83=BC=E3=81=A7=E5=AF=BE=E5=BF=9C=E4=BA=88=E5=AE=9A?= =?UTF-8?q?=EF=BC=89=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@247 b871894f-2f95-9b40-918c-086798483c85 --- .../bootrom/build/libraries/init/common/crt0_excp.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/trunk/bootrom/build/libraries/init/common/crt0_excp.c b/trunk/bootrom/build/libraries/init/common/crt0_excp.c index d12e155..e16f81c 100644 --- a/trunk/bootrom/build/libraries/init/common/crt0_excp.c +++ b/trunk/bootrom/build/libraries/init/common/crt0_excp.c @@ -263,12 +263,16 @@ asm void i_stupSwiHandler( void ) mov sp, r1 // ※SP_svc mov r1, lr mrs r0, spsr - stmfd sp!, {r0, lr} // SPSR_svc、LR_svcを退避 + stmfd sp!, {r0, lr} // SPSR_svc、LR_svcを退避(このLR_svcは最後にPOPするので安全) // 割り込み状態継承 and r0, r0, #(HW_PSR_CPU_MODE_MASK | HW_PSR_IRQ_DISABLE | HW_PSR_FIQ_DISABLE) - // ユーザモードならシステムモードへ - tst r0, #HW_PSR_SYS_MODE ^ HW_PSR_USR_MODE - orreq r0, r0, #HW_PSR_SYS_MODE + // ユーザモードなら割り込み禁止でシステムモードへ + // (割り込み禁止にするのは別スレッドからスタックへ退避したPCを + // 書き換えて、システムモードを乗っ取られないようにするため。 + // 但し、DMAによるハッキングへ対応するにはユーザモードとSVCモードの + // スタックを分ける必要がある(OSのラッパーで対応予定)。) + tst r0, #(HW_PSR_SYS_MODE ^ HW_PSR_USR_MODE) + orreq r0, r0, #(HW_PSR_SYS_MODE | HW_PSR_IRQ_DISABLE) msr cpsr_fsxc, r0 // 呼び出し元のモード