This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit 94d449e7226120f90ce7b222a5411e17eca84a44 Author: anjiahao <[email protected]> AuthorDate: Wed Oct 25 20:11:20 2023 +0800 arch:Mark key functions to prohibit instrumentation to prevent recursive calls Signed-off-by: anjiahao <[email protected]> --- arch/arm/include/armv7-a/irq.h | 4 ++-- arch/arm/include/armv7-m/irq.h | 6 ++++-- arch/arm/include/armv8-m/irq.h | 6 ++++-- arch/arm/include/irq.h | 3 ++- arch/arm/src/armv7-a/sctlr.h | 1 + arch/risc-v/include/irq.h | 6 +++--- arch/xtensa/include/irq.h | 10 +++++----- arch/xtensa/src/esp32s3/esp32s3_start.c | 6 +++--- include/nuttx/irq.h | 4 ++-- sched/sched/sched.h | 2 +- 10 files changed, 27 insertions(+), 21 deletions(-) diff --git a/arch/arm/include/armv7-a/irq.h b/arch/arm/include/armv7-a/irq.h index 6c12500911..d95e0b9545 100644 --- a/arch/arm/include/armv7-a/irq.h +++ b/arch/arm/include/armv7-a/irq.h @@ -350,7 +350,7 @@ static inline irqstate_t irqstate(void) /* Disable IRQs and return the previous IRQ state */ -static inline irqstate_t up_irq_save(void) +noinstrument_function static inline irqstate_t up_irq_save(void) { unsigned int cpsr; @@ -392,7 +392,7 @@ static inline irqstate_t up_irq_enable(void) /* Restore saved IRQ & FIQ state */ -static inline void up_irq_restore(irqstate_t flags) +noinstrument_function static inline void up_irq_restore(irqstate_t flags) { __asm__ __volatile__ ( diff --git a/arch/arm/include/armv7-m/irq.h b/arch/arm/include/armv7-m/irq.h index f77ef08016..cfa94f44e5 100644 --- a/arch/arm/include/armv7-m/irq.h +++ b/arch/arm/include/armv7-m/irq.h @@ -394,7 +394,8 @@ static inline void up_irq_disable(void) /* Save the current primask state & disable IRQs */ -static inline irqstate_t up_irq_save(void) always_inline_function; +static inline irqstate_t up_irq_save(void) +always_inline_function noinstrument_function; static inline irqstate_t up_irq_save(void) { #ifdef CONFIG_ARMV7M_USEBASEPRI @@ -437,7 +438,8 @@ static inline void up_irq_enable(void) /* Restore saved primask state */ -static inline void up_irq_restore(irqstate_t flags) always_inline_function; +static inline void up_irq_restore(irqstate_t flags) +always_inline_function noinstrument_function; static inline void up_irq_restore(irqstate_t flags) { #ifdef CONFIG_ARMV7M_USEBASEPRI diff --git a/arch/arm/include/armv8-m/irq.h b/arch/arm/include/armv8-m/irq.h index ed4620a265..a440a4da98 100644 --- a/arch/arm/include/armv8-m/irq.h +++ b/arch/arm/include/armv8-m/irq.h @@ -367,7 +367,8 @@ static inline void up_irq_disable(void) /* Save the current primask state & disable IRQs */ -static inline irqstate_t up_irq_save(void) always_inline_function; +static inline irqstate_t up_irq_save(void) +always_inline_function noinstrument_function; static inline irqstate_t up_irq_save(void) { #ifdef CONFIG_ARMV8M_USEBASEPRI @@ -410,7 +411,8 @@ static inline void up_irq_enable(void) /* Restore saved primask state */ -static inline void up_irq_restore(irqstate_t flags) always_inline_function; +static inline void up_irq_restore(irqstate_t flags) +always_inline_function noinstrument_function; static inline void up_irq_restore(irqstate_t flags) { #ifdef CONFIG_ARMV8M_USEBASEPRI diff --git a/arch/arm/include/irq.h b/arch/arm/include/irq.h index 4d44388b75..69b47a3da1 100644 --- a/arch/arm/include/irq.h +++ b/arch/arm/include/irq.h @@ -116,7 +116,7 @@ EXTERN volatile uint32_t *g_current_regs[CONFIG_SMP_NCPUS]; ****************************************************************************/ #ifdef CONFIG_SMP -int up_cpu_index(void); +int up_cpu_index(void) noinstrument_function; #else # define up_cpu_index() (0) #endif @@ -134,6 +134,7 @@ int up_cpu_index(void); * ****************************************************************************/ +noinstrument_function static inline bool up_interrupt_context(void) { #ifdef CONFIG_SMP diff --git a/arch/arm/src/armv7-a/sctlr.h b/arch/arm/src/armv7-a/sctlr.h index c982a1080a..9f8b7cc24f 100644 --- a/arch/arm/src/armv7-a/sctlr.h +++ b/arch/arm/src/armv7-a/sctlr.h @@ -463,6 +463,7 @@ static inline unsigned int cp15_rdid(void) /* Get the Multiprocessor Affinity Register (MPIDR) */ +noinstrument_function static inline unsigned int cp15_rdmpidr(void) { return CP15_GET(MPIDR); diff --git a/arch/risc-v/include/irq.h b/arch/risc-v/include/irq.h index 54f0febbba..9d587b6d3d 100644 --- a/arch/risc-v/include/irq.h +++ b/arch/risc-v/include/irq.h @@ -680,7 +680,7 @@ int up_cpu_index(void); * ****************************************************************************/ -static inline irqstate_t up_irq_save(void) +noinstrument_function static inline irqstate_t up_irq_save(void) { irqstate_t flags; @@ -709,7 +709,7 @@ static inline irqstate_t up_irq_save(void) * ****************************************************************************/ -static inline void up_irq_restore(irqstate_t flags) +noinstrument_function static inline void up_irq_restore(irqstate_t flags) { __asm__ __volatile__ ( @@ -729,7 +729,7 @@ static inline void up_irq_restore(irqstate_t flags) * ****************************************************************************/ -static inline bool up_interrupt_context(void) +noinstrument_function static inline bool up_interrupt_context(void) { #ifdef CONFIG_SMP irqstate_t flags = up_irq_save(); diff --git a/arch/xtensa/include/irq.h b/arch/xtensa/include/irq.h index 9eaeb8ac97..ece60779f7 100644 --- a/arch/xtensa/include/irq.h +++ b/arch/xtensa/include/irq.h @@ -236,7 +236,7 @@ static inline uint32_t xtensa_getps(void) /* Set the value of the PS register */ -static inline void xtensa_setps(uint32_t ps) +noinstrument_function static inline void xtensa_setps(uint32_t ps) { __asm__ __volatile__ ( @@ -265,7 +265,7 @@ static inline uint32_t up_getsp(void) /* Restore the value of the PS register */ -static inline void up_irq_restore(uint32_t ps) +noinstrument_function static inline void up_irq_restore(uint32_t ps) { __asm__ __volatile__ ( @@ -279,7 +279,7 @@ static inline void up_irq_restore(uint32_t ps) /* Disable interrupts and return the previous value of the PS register */ -static inline uint32_t up_irq_save(void) +noinstrument_function static inline uint32_t up_irq_save(void) { uint32_t ps; @@ -313,7 +313,7 @@ static inline void up_irq_enable(void) /* Disable low- and medium- priority interrupts */ -static inline void up_irq_disable(void) +noinstrument_function static inline void up_irq_disable(void) { #ifdef __XTENSA_CALL0_ABI__ xtensa_setps(PS_INTLEVEL(XCHAL_EXCM_LEVEL) | PS_UM); @@ -440,7 +440,7 @@ int up_cpu_index(void); ****************************************************************************/ #ifndef __ASSEMBLY__ -static inline bool up_interrupt_context(void) +noinstrument_function static inline bool up_interrupt_context(void) { #ifdef CONFIG_SMP irqstate_t flags = up_irq_save(); diff --git a/arch/xtensa/src/esp32s3/esp32s3_start.c b/arch/xtensa/src/esp32s3/esp32s3_start.c index a42fcc2869..9b91277c03 100644 --- a/arch/xtensa/src/esp32s3/esp32s3_start.c +++ b/arch/xtensa/src/esp32s3/esp32s3_start.c @@ -170,7 +170,7 @@ uint32_t g_idlestack[IDLETHREAD_STACKWORDS] * ****************************************************************************/ -static void IRAM_ATTR configure_cpu_caches(void) +noinstrument_function static void IRAM_ATTR configure_cpu_caches(void) { int s_instr_flash2spiram_off = 0; int s_rodata_flash2spiram_off = 0; @@ -272,7 +272,7 @@ static void IRAM_ATTR disable_app_cpu(void) * ****************************************************************************/ -void noreturn_function IRAM_ATTR __esp32s3_start(void) +noinstrument_function void noreturn_function IRAM_ATTR __esp32s3_start(void) { uint32_t sp; @@ -508,7 +508,7 @@ static int map_rom_segments(void) * ****************************************************************************/ -void IRAM_ATTR __start(void) +noinstrument_function void IRAM_ATTR __start(void) { #ifdef CONFIG_ESP32S3_APP_FORMAT_MCUBOOT if (map_rom_segments() != 0) diff --git a/include/nuttx/irq.h b/include/nuttx/irq.h index 7c3c4c1b52..2822f83e26 100644 --- a/include/nuttx/irq.h +++ b/include/nuttx/irq.h @@ -184,7 +184,7 @@ int irqchain_detach(int irq, xcpt_t isr, FAR void *arg); ****************************************************************************/ #ifdef CONFIG_IRQCOUNT -irqstate_t enter_critical_section(void); +irqstate_t enter_critical_section(void) noinstrument_function; #else # define enter_critical_section() up_irq_save() #endif @@ -214,7 +214,7 @@ irqstate_t enter_critical_section(void); ****************************************************************************/ #ifdef CONFIG_IRQCOUNT -void leave_critical_section(irqstate_t flags); +void leave_critical_section(irqstate_t flags) noinstrument_function; #else # define leave_critical_section(f) up_irq_restore(f) #endif diff --git a/sched/sched/sched.h b/sched/sched/sched.h index 104d19ed8e..ceefc2b8c2 100644 --- a/sched/sched/sched.h +++ b/sched/sched/sched.h @@ -381,7 +381,7 @@ void nxsched_suspend(FAR struct tcb_s *tcb); #endif #ifdef CONFIG_SMP -FAR struct tcb_s *this_task(void); +FAR struct tcb_s *this_task(void) noinstrument_function; int nxsched_select_cpu(cpu_set_t affinity); int nxsched_pause_cpu(FAR struct tcb_s *tcb);
