From 302fd804ce2c2b2c98e28dbc7c176424fdc0b89d Mon Sep 17 00:00:00 2001 From: Torsten Rasmussen Date: Fri, 27 Aug 2021 09:39:35 +0200 Subject: [PATCH] interrupts: safeguard isr_wrapper and isr_install ld linker will only resolve undefined symbols inside functions that is actually being called. However, not all linkers behaves this way. Certain linkers, for example armlink, resolves all undefined symbols even if during a later stage at the linking the function will be pruned. Therefore `ifdef CONFIG_GEN_ISR_TABLES` has been placed to safeguard functions that will call undefined symbols when CONFIG_GEN_ISR_TABLES=y. Signed-off-by: Torsten Rasmussen --- arch/arm/core/aarch32/cortex_m/vector_table.h | 2 ++ arch/arm/core/aarch32/irq_manage.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/arch/arm/core/aarch32/cortex_m/vector_table.h b/arch/arm/core/aarch32/cortex_m/vector_table.h index 3fbe6593b72..a78af2444ec 100644 --- a/arch/arm/core/aarch32/cortex_m/vector_table.h +++ b/arch/arm/core/aarch32/cortex_m/vector_table.h @@ -51,7 +51,9 @@ GTEXT(z_arm_pendsv) GTEXT(z_arm_exc_spurious) GTEXT(z_arm_prep_c) +#if defined(CONFIG_GEN_ISR_TABLES) GTEXT(_isr_wrapper) +#endif /* CONFIG_GEN_ISR_TABLES */ #else /* _ASMLANGUAGE */ diff --git a/arch/arm/core/aarch32/irq_manage.c b/arch/arm/core/aarch32/irq_manage.c index 1a8305920bf..be0a3d03ed8 100644 --- a/arch/arm/core/aarch32/irq_manage.c +++ b/arch/arm/core/aarch32/irq_manage.c @@ -291,6 +291,7 @@ void irq_target_state_set_all_non_secure(void) #endif /* CONFIG_ARM_SECURE_FIRMWARE */ #ifdef CONFIG_DYNAMIC_INTERRUPTS +#ifdef CONFIG_GEN_ISR_TABLES int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, void (*routine)(const void *parameter), const void *parameter, uint32_t flags) @@ -299,6 +300,7 @@ int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, z_arm_irq_priority_set(irq, priority, flags); return irq; } +#endif /* CONFIG_GEN_ISR_TABLES */ #ifdef CONFIG_DYNAMIC_DIRECT_INTERRUPTS static inline void z_arm_irq_dynamic_direct_isr_dispatch(void)