From 3e171489bd26fb6547cb687a2883fd292dc574f7 Mon Sep 17 00:00:00 2001 From: yanghuatao Date: Wed, 24 Apr 2024 01:06:17 +0800 Subject: [PATCH] toolchain/ghs: Fix green hills toolchain build Vela link error [elxr] (error #412) unresolved symbols: __builtin_frame_address from libarch.a(arm_checkstack.o) Signed-off-by: yanghuatao --- arch/arm/include/armv6-m/irq.h | 13 +++++++++++++ arch/arm/include/armv7-a/irq.h | 13 +++++++++++++ arch/arm/include/armv7-m/irq.h | 13 +++++++++++++ arch/arm/include/armv7-r/irq.h | 13 +++++++++++++ arch/arm/include/armv8-m/irq.h | 13 +++++++++++++ arch/arm/include/armv8-r/irq.h | 13 +++++++++++++ arch/arm/include/irq.h | 2 -- arch/arm/include/tlsr82/irq.h | 13 +++++++++++++ 8 files changed, 91 insertions(+), 2 deletions(-) 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__ */ /****************************************************************************