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);

Reply via email to