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 <Torsten.Rasmussen@nordicsemi.no>
This commit is contained in:
Torsten Rasmussen 2021-08-27 09:39:35 +02:00 committed by Anas Nashif
commit 302fd804ce
2 changed files with 4 additions and 0 deletions

View file

@ -51,7 +51,9 @@ GTEXT(z_arm_pendsv)
GTEXT(z_arm_exc_spurious) GTEXT(z_arm_exc_spurious)
GTEXT(z_arm_prep_c) GTEXT(z_arm_prep_c)
#if defined(CONFIG_GEN_ISR_TABLES)
GTEXT(_isr_wrapper) GTEXT(_isr_wrapper)
#endif /* CONFIG_GEN_ISR_TABLES */
#else /* _ASMLANGUAGE */ #else /* _ASMLANGUAGE */

View file

@ -291,6 +291,7 @@ void irq_target_state_set_all_non_secure(void)
#endif /* CONFIG_ARM_SECURE_FIRMWARE */ #endif /* CONFIG_ARM_SECURE_FIRMWARE */
#ifdef CONFIG_DYNAMIC_INTERRUPTS #ifdef CONFIG_DYNAMIC_INTERRUPTS
#ifdef CONFIG_GEN_ISR_TABLES
int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, int arch_irq_connect_dynamic(unsigned int irq, unsigned int priority,
void (*routine)(const void *parameter), void (*routine)(const void *parameter),
const void *parameter, uint32_t flags) 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); z_arm_irq_priority_set(irq, priority, flags);
return irq; return irq;
} }
#endif /* CONFIG_GEN_ISR_TABLES */
#ifdef CONFIG_DYNAMIC_DIRECT_INTERRUPTS #ifdef CONFIG_DYNAMIC_DIRECT_INTERRUPTS
static inline void z_arm_irq_dynamic_direct_isr_dispatch(void) static inline void z_arm_irq_dynamic_direct_isr_dispatch(void)