diff --git a/arch/arm/include/armv6-m/irq.h b/arch/arm/include/armv6-m/irq.h index e900b6b1c5a..335e81c2bd0 100644 --- a/arch/arm/include/armv6-m/irq.h +++ b/arch/arm/include/armv6-m/irq.h @@ -330,6 +330,19 @@ static inline void setcontrol(uint32_t control) : "memory"); } +static inline_function uint32_t up_getsp(void) +{ + register uint32_t sp; + + __asm__ __volatile__ + ( + "mov %0, sp\n" + : "=r" (sp) + ); + + return sp; +} + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/arch/arm/include/armv7-a/irq.h b/arch/arm/include/armv7-a/irq.h index 1bc4ce0ce5c..61437233f77 100644 --- a/arch/arm/include/armv7-a/irq.h +++ b/arch/arm/include/armv7-a/irq.h @@ -406,6 +406,19 @@ noinstrument_function static inline void up_irq_restore(irqstate_t flags) ); } +static inline_function uint32_t up_getsp(void) +{ + register uint32_t sp; + + __asm__ __volatile__ + ( + "mov %0, sp\n" + : "=r" (sp) + ); + + return sp; +} + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/arch/arm/include/armv7-m/irq.h b/arch/arm/include/armv7-m/irq.h index cfa94f44e50..8a9e1f801ff 100644 --- a/arch/arm/include/armv7-m/irq.h +++ b/arch/arm/include/armv7-m/irq.h @@ -535,6 +535,19 @@ static inline void setcontrol(uint32_t control) : "memory"); } +static inline_function uint32_t up_getsp(void) +{ + register uint32_t sp; + + __asm__ __volatile__ + ( + "mov %0, sp\n" + : "=r" (sp) + ); + + return sp; +} + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/arch/arm/include/armv7-r/irq.h b/arch/arm/include/armv7-r/irq.h index 09a107a3171..a31c90ebbb9 100644 --- a/arch/arm/include/armv7-r/irq.h +++ b/arch/arm/include/armv7-r/irq.h @@ -402,6 +402,19 @@ static inline void up_irq_restore(irqstate_t flags) ); } +static inline_function uint32_t up_getsp(void) +{ + register uint32_t sp; + + __asm__ __volatile__ + ( + "mov %0, sp\n" + : "=r" (sp) + ); + + return sp; +} + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/arch/arm/include/armv8-m/irq.h b/arch/arm/include/armv8-m/irq.h index a440a4da989..4e3f3b9b0cd 100644 --- a/arch/arm/include/armv8-m/irq.h +++ b/arch/arm/include/armv8-m/irq.h @@ -508,6 +508,19 @@ static inline void setcontrol(uint32_t control) : "memory"); } +static inline_function uint32_t up_getsp(void) +{ + uint32_t sp; + + __asm__ __volatile__ + ( + "mov %0, sp\n" + : "=r" (sp) + ); + + return sp; +} + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/arch/arm/include/armv8-r/irq.h b/arch/arm/include/armv8-r/irq.h index e094657485a..b0e1a9ff8d7 100644 --- a/arch/arm/include/armv8-r/irq.h +++ b/arch/arm/include/armv8-r/irq.h @@ -402,6 +402,19 @@ static inline void up_irq_restore(irqstate_t flags) ); } +static inline_function uint32_t up_getsp(void) +{ + register uint32_t sp; + + __asm__ __volatile__ + ( + "mov %0, sp\n" + : "=r" (sp) + ); + + return sp; +} + #endif /* __ASSEMBLY__ */ /**************************************************************************** diff --git a/arch/arm/include/irq.h b/arch/arm/include/irq.h index 21e221816bd..137592728c3 100644 --- a/arch/arm/include/irq.h +++ b/arch/arm/include/irq.h @@ -66,8 +66,6 @@ * Pre-processor Prototypes ****************************************************************************/ -#define up_getsp() (uintptr_t)__builtin_frame_address(0) - #ifndef __ASSEMBLY__ #ifdef __cplusplus diff --git a/arch/arm/include/tlsr82/irq.h b/arch/arm/include/tlsr82/irq.h index d7032bfbb17..edb15a17027 100644 --- a/arch/arm/include/tlsr82/irq.h +++ b/arch/arm/include/tlsr82/irq.h @@ -236,6 +236,19 @@ static inline uint32_t getcontrol(void) return 0; } +static inline_function uint32_t up_getsp(void) +{ + register uint32_t sp; + + __asm__ __volatile__ + ( + "tmov %0, sp\n" + : "=r" (sp) + ); + + return sp; +} + #endif /* __ASSEMBLY__ */ /****************************************************************************