From 2174ec336aeff2c17b7c6943e76bdb1551de4803 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 28 Aug 2024 04:19:39 +0200 Subject: [PATCH] arm: Remove _ARMV4_Exception_reserved_default() The default exception handler uses the Save Program Status Register (SPSR), however, if _ARMV4_Exception_reserved_default() would get called, the state of this register is unpredictable. Replace potential calls to _ARMV4_Exception_reserved_default() with an undefined instruction. --- bsps/arm/beagle/simscripts/gdbinit.bbxm | 1 - bsps/arm/csb336/start/start.S | 2 +- bsps/arm/csb337/start/start.S | 2 +- bsps/arm/edb7312/start/start.S | 2 +- bsps/arm/gumstix/start/start.S | 2 +- bsps/arm/rtl22xx/start/start.S | 2 +- bsps/arm/shared/start/start.S | 32 +++++++++---------- bsps/arm/smdk2410/start/start.S | 2 +- .../score/cpu/arm/armv4-exception-default.S | 11 ------- .../score/cpu/arm/include/rtems/score/armv4.h | 2 -- 10 files changed, 22 insertions(+), 36 deletions(-) diff --git a/bsps/arm/beagle/simscripts/gdbinit.bbxm b/bsps/arm/beagle/simscripts/gdbinit.bbxm index 32ae9dd9ad..70ad9f70ed 100644 --- a/bsps/arm/beagle/simscripts/gdbinit.bbxm +++ b/bsps/arm/beagle/simscripts/gdbinit.bbxm @@ -7,7 +7,6 @@ b _ARMV4_Exception_undef_default b _ARMV4_Exception_swi_default b _ARMV4_Exception_pref_abort_default b _ARMV4_Exception_data_abort_default -b _ARMV4_Exception_reserved_default b _ARMV4_Exception_irq_default b _ARMV4_Exception_fiq_default diff --git a/bsps/arm/csb336/start/start.S b/bsps/arm/csb336/start/start.S index acb75debad..e5d522cf1f 100644 --- a/bsps/arm/csb336/start/start.S +++ b/bsps/arm/csb336/start/start.S @@ -141,7 +141,7 @@ handler_addr_abort: .word _ARMV4_Exception_data_abort_default handler_addr_reserved: - .word _ARMV4_Exception_reserved_default + .word 0 handler_addr_irq: .word _ARMV4_Exception_interrupt diff --git a/bsps/arm/csb337/start/start.S b/bsps/arm/csb337/start/start.S index d2487278d8..e55bb54f61 100644 --- a/bsps/arm/csb337/start/start.S +++ b/bsps/arm/csb337/start/start.S @@ -134,7 +134,7 @@ handler_addr_abort: .word _ARMV4_Exception_data_abort_default handler_addr_reserved: - .word _ARMV4_Exception_reserved_default + .word 0 handler_addr_irq: .word _ARMV4_Exception_interrupt diff --git a/bsps/arm/edb7312/start/start.S b/bsps/arm/edb7312/start/start.S index 5a6d27eea3..eacc2dc85f 100644 --- a/bsps/arm/edb7312/start/start.S +++ b/bsps/arm/edb7312/start/start.S @@ -49,7 +49,7 @@ handler_addr_abort: .word _ARMV4_Exception_data_abort_default handler_addr_reserved: - .word _ARMV4_Exception_reserved_default + .word 0 handler_addr_irq: .word _ARMV4_Exception_interrupt diff --git a/bsps/arm/gumstix/start/start.S b/bsps/arm/gumstix/start/start.S index 55eb1106a8..91a8905dd0 100644 --- a/bsps/arm/gumstix/start/start.S +++ b/bsps/arm/gumstix/start/start.S @@ -138,7 +138,7 @@ handler_addr_abort: .word _ARMV4_Exception_data_abort_default handler_addr_reserved: - .word _ARMV4_Exception_reserved_default + .word 0 handler_addr_irq: .word _ARMV4_Exception_interrupt diff --git a/bsps/arm/rtl22xx/start/start.S b/bsps/arm/rtl22xx/start/start.S index 6254d34dd3..d4c61e7352 100644 --- a/bsps/arm/rtl22xx/start/start.S +++ b/bsps/arm/rtl22xx/start/start.S @@ -137,7 +137,7 @@ handler_addr_abort: .word _ARMV4_Exception_data_abort_default handler_addr_reserved: - .word _ARMV4_Exception_reserved_default + .word 0 handler_addr_irq: .word _ARMV4_Exception_interrupt diff --git a/bsps/arm/shared/start/start.S b/bsps/arm/shared/start/start.S index dfd0d3891d..1939768b1e 100644 --- a/bsps/arm/shared/start/start.S +++ b/bsps/arm/shared/start/start.S @@ -107,7 +107,7 @@ bsp_start_vector_table_begin: .Lhandler_addr_reserved: - .word _ARMV4_Exception_reserved_default + .word 0 .Lhandler_addr_irq: @@ -121,38 +121,38 @@ bsp_start_vector_table_end: #ifdef BSP_START_IN_HYP_SUPPORT bsp_start_hyp_vector_table_begin: - ldr pc, .Lhandler_addr_hyp_reset + udf ldr pc, .Lhandler_addr_hyp_undef - ldr pc, .Lhandler_addr_hyp_swi - ldr pc, .Lhandler_addr_hyp_prefetch - ldr pc, .Lhandler_addr_hyp_abort - ldr pc, .Lhandler_addr_hyp_hyp - ldr pc, .Lhandler_addr_hyp_irq - ldr pc, .Lhandler_addr_hyp_fiq + udf + udf + udf + udf + udf + udf .Lhandler_addr_hyp_reset: - .word _ARMV4_Exception_reserved_default + .word 0 .Lhandler_addr_hyp_undef: - .word _ARMV4_Exception_reserved_default + .word _ARMV4_Exception_undef_default .Lhandler_addr_hyp_swi: - .word _ARMV4_Exception_reserved_default + .word 0 .Lhandler_addr_hyp_prefetch: - .word _ARMV4_Exception_reserved_default + .word 0 .Lhandler_addr_hyp_abort: - .word _ARMV4_Exception_reserved_default + .word 0 .Lhandler_addr_hyp_hyp: - .word _ARMV4_Exception_reserved_default + .word 0 .Lhandler_addr_hyp_irq: - .word _ARMV4_Exception_reserved_default + .word 0 .Lhandler_addr_hyp_fiq: - .word _ARMV4_Exception_reserved_default + .word 0 #endif /* Start entry */ diff --git a/bsps/arm/smdk2410/start/start.S b/bsps/arm/smdk2410/start/start.S index 5e4d4655fe..39a682acf3 100644 --- a/bsps/arm/smdk2410/start/start.S +++ b/bsps/arm/smdk2410/start/start.S @@ -187,7 +187,7 @@ handler_addr_abort: .word _ARMV4_Exception_data_abort_default handler_addr_reserved: - .word _ARMV4_Exception_reserved_default + .word 0 handler_addr_irq: .word _ARMV4_Exception_interrupt diff --git a/cpukit/score/cpu/arm/armv4-exception-default.S b/cpukit/score/cpu/arm/armv4-exception-default.S index da1e4e3a70..13b0e63fd6 100644 --- a/cpukit/score/cpu/arm/armv4-exception-default.S +++ b/cpukit/score/cpu/arm/armv4-exception-default.S @@ -42,7 +42,6 @@ .globl _ARMV4_Exception_swi_default .globl _ARMV4_Exception_data_abort_default .globl _ARMV4_Exception_pref_abort_default -.globl _ARMV4_Exception_reserved_default .globl _ARMV4_Exception_fiq_default .section ".text" @@ -89,16 +88,6 @@ _ARMV4_Exception_data_abort_default: b save_more_context -_ARMV4_Exception_reserved_default: - - /* Save context and load vector */ - sub sp, #MORE_CONTEXT_SIZE - stmdb sp!, {r0-r12} - mov r4, #5 - mov r5, #ARM_PSR_I - - b save_more_context - _ARMV4_Exception_fiq_default: /* Save context and load vector */ diff --git a/cpukit/score/cpu/arm/include/rtems/score/armv4.h b/cpukit/score/cpu/arm/include/rtems/score/armv4.h index 968386ed01..ab2e47ed83 100644 --- a/cpukit/score/cpu/arm/include/rtems/score/armv4.h +++ b/cpukit/score/cpu/arm/include/rtems/score/armv4.h @@ -77,8 +77,6 @@ void _ARMV4_Exception_data_abort_default( void ); void _ARMV4_Exception_pref_abort_default( void ); -void _ARMV4_Exception_reserved_default( void ); - void _ARMV4_Exception_fiq_default( void ); static inline uint32_t _ARMV4_Status_irq_enable( void )