From 8a41dac559b11081b5bac24ce40c06c94aefceda Mon Sep 17 00:00:00 2001 From: nakasima Date: Thu, 25 Dec 2008 10:54:45 +0000 Subject: [PATCH] =?UTF-8?q?=E3=82=B3=E3=83=BC=E3=83=89=E6=95=B4=E7=90=86?= =?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@142 b871894f-2f95-9b40-918c-086798483c85 --- .../build/libraries/os/common/os_exception.c | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/trunk/bootrom/build/libraries/os/common/os_exception.c b/trunk/bootrom/build/libraries/os/common/os_exception.c index 07df6b9..c1fa31a 100644 --- a/trunk/bootrom/build/libraries/os/common/os_exception.c +++ b/trunk/bootrom/build/libraries/os/common/os_exception.c @@ -32,7 +32,14 @@ void i_osUndefInstHandler( void ); void osInitException( void ) { #ifdef SDK_ARM11 - *(OSExcpHandler*)HW_UDEF_VECTOR_BUF = i_osUndefInstHandler; + static BOOL isInit; + + if ( isInit == FALSE ) + { + isInit = TRUE; + + *(OSExcpHandler*)HW_UDEF_VECTOR_BUF = i_osUndefInstHandler; + } #endif // SDK_ARM11 } @@ -77,18 +84,18 @@ ASM void i_osUndefInstHandler( void ) adr lr, i_return tst r0, #HW_PSR_THUMB_STATE - bne i_stupUndefInstHandlerDummy + bne i_osUndefInstTerminate tst r0, #HW_PSR_JAVA_STATE - bne i_stupUndefInstHandlerDummy + bne i_osUndefInstTerminate ldr r0, [r12, #0] // called from ARM mov r12, r0, lsl #4 sub r12, r12, #0xC0000000 cmp r12, #0x30000000 - bhs i_stupUndefInstHandlerDummy + bhs i_osUndefInstTerminate - adr r12, i_return + adr r12, i_osUndefCPHandlerTable and r0, r0, #0x00000F00 ldr pc, [r12, r0, lsr #8-2] @@ -99,26 +106,26 @@ i_return INASM_EXTERN( _VFP_Computation_Engine ) -i_stupUndefCPHandlerTable - DCD i_stupUndefInstHandlerDummy // CP 0 - DCD i_stupUndefInstHandlerDummy // CP 1 - DCD i_stupUndefInstHandlerDummy // CP 2 - DCD i_stupUndefInstHandlerDummy // CP 3 - DCD i_stupUndefInstHandlerDummy // CP 4 - DCD i_stupUndefInstHandlerDummy // CP 5 - DCD i_stupUndefInstHandlerDummy // CP 6 - DCD i_stupUndefInstHandlerDummy // CP 7 - DCD i_stupUndefInstHandlerDummy // CP 8 - DCD i_stupUndefInstHandlerDummy // CP 9 - DCD i_vfpUndefInstHandler // CP 10 - DCD i_vfpUndefInstHandler // CP 11 - DCD i_stupUndefInstHandlerDummy // CP 12 - DCD i_stupUndefInstHandlerDummy // CP 13 - DCD i_stupUndefInstHandlerDummy // CP 14 - DCD i_stupUndefInstHandlerDummy // CP 15 +i_osUndefCPHandlerTable + DCD i_osUndefInstTerminate // CP 0 + DCD i_osUndefInstTerminate // CP 1 + DCD i_osUndefInstTerminate // CP 2 + DCD i_osUndefInstTerminate // CP 3 + DCD i_osUndefInstTerminate // CP 4 + DCD i_osUndefInstTerminate // CP 5 + DCD i_osUndefInstTerminate // CP 6 + DCD i_osUndefInstTerminate // CP 7 + DCD i_osUndefInstTerminate // CP 8 + DCD i_osUndefInstTerminate // CP 9 + DCD i_osUndefInstHandlerVFP // CP 10 + DCD i_osUndefInstHandlerVFP // CP 11 + DCD i_osUndefInstTerminate // CP 12 + DCD i_osUndefInstTerminate // CP 13 + DCD i_osUndefInstTerminate // CP 14 + DCD i_osUndefInstTerminate // CP 15 } -ASM void i_vfpUndefInstHandler( void ) +ASM void i_osUndefInstHandlerVFP( void ) { // VFP enable fmrx r12, fpexc @@ -142,7 +149,7 @@ LSYM(1) bx lr } -ASM void i_stupUndefInstHandlerDummy( void ) +ASM void i_osUndefInstTerminate( void ) { LSYM(1) b BSYM(1)