ada: Fix build for RTEMS

Message ID 20220427122731.59578-1-sebastian.huber@embedded-brains.de
State New
Headers
Series ada: Fix build for RTEMS |

Commit Message

Sebastian Huber April 27, 2022, 12:27 p.m. UTC
  Commit 621cccba3f8b0cd2757feda171e66e3820b55c2c broke the Ada build for all
RTEMS targets except aarch64.

gcc/ada/

	* tracebak.c: Add support for ARM RTEMS. Add support for RTEMS to PPC
	ELF.  Add support for RTEMS to SPARC.  Merge aarch64 support of Linux
	and RTEMS.
---
 gcc/ada/tracebak.c | 32 ++++++++++++++------------------
 1 file changed, 14 insertions(+), 18 deletions(-)
  

Comments

Arnaud Charlet April 27, 2022, 12:36 p.m. UTC | #1
This patch is OK, thank you and sorry for the breakage!

Arno

> Commit 621cccba3f8b0cd2757feda171e66e3820b55c2c broke the Ada build for all
> RTEMS targets except aarch64.
> 
> gcc/ada/
> 
>    * tracebak.c: Add support for ARM RTEMS. Add support for RTEMS to PPC
>    ELF.  Add support for RTEMS to SPARC.  Merge aarch64 support of Linux
>    and RTEMS.
> ---
> gcc/ada/tracebak.c | 32 ++++++++++++++------------------
> 1 file changed, 14 insertions(+), 18 deletions(-)
> 
> diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c
> index 54e547d2414..6cc5d301737 100644
> --- a/gcc/ada/tracebak.c
> +++ b/gcc/ada/tracebak.c
> @@ -316,6 +316,13 @@ __gnat_backtrace (void **array,
> #define PC_ADJUST -2
> #define USING_ARM_UNWINDING 1
> 
> +/*---------------------- ARM RTEMS ------------------------------------ -*/
> +#elif (defined (__arm__) && defined (__rtems__))
> +
> +#define USE_GCC_UNWINDER
> +#define PC_ADJUST -2
> +#define USING_ARM_UNWINDING 1
> +
> /*---------------------- PPC AIX/PPC Lynx 178/Older Darwin --------------*/
> #elif ((defined (_POWER) && defined (_AIX)) || \
>        (defined (__powerpc__) && defined (__Lynx__) && !defined(__ELF__)) || \
> @@ -370,11 +377,12 @@ extern void __runnit(); /* thread entry point.  */
> 
> #define BASE_SKIP 1
> 
> -/*----------- PPC ELF (GNU/Linux & VxWorks & Lynx178e) -------------------*/
> +/*----------- PPC ELF (GNU/Linux & VxWorks & Lynx178e & RTEMS ) ----------*/
> 
> #elif (defined (_ARCH_PPC) && defined (__vxworks)) ||  \
>   (defined (__powerpc__) && defined (__Lynx__) && defined(__ELF__)) || \
> -  (defined (__linux__) && defined (__powerpc__))
> +  (defined (__linux__) && defined (__powerpc__)) || \
> +  (defined (__powerpc__) && defined (__rtems__))
> 
> #if defined (_ARCH_PPC64) && !defined (__USING_SJLJ_EXCEPTIONS__)
> #define USE_GCC_UNWINDER
> @@ -404,9 +412,9 @@ struct layout
> 
> #define BASE_SKIP 1
> 
> -/*-------------------------- SPARC Solaris -----------------------------*/
> +/*-------------------------- SPARC Solaris or RTEMS --------------------*/
> 
> -#elif defined (__sun__) && defined (__sparc__)
> +#elif (defined (__sun__) || defined (__rtems__)) && defined (__sparc__)
> 
> #define USE_GENERIC_UNWINDER
> 
> @@ -551,21 +559,9 @@ is_return_from(void *symbol_addr, void *ret_addr)
> #error Unhandled QNX architecture.
> #endif
> 
> -/*---------------------------- RTEMS ---------------------------------*/
> -
> -#elif defined (__rtems__)
> -
> -#define USE_GCC_UNWINDER
> -
> -#if defined (__aarch64__)
> -#define PC_ADJUST -4
> -#else
> -#error Unhandled RTEMS architecture.
> -#endif
> -
> -/*------------------- aarch64-linux ----------------------------------*/
> +/*------------------- aarch64-linux or aarch64-rtems -----------------*/
> 
> -#elif (defined (__aarch64__) && defined (__linux__))
> +#elif (defined (__aarch64__) && (defined (__linux__) || defined (__rtems__)))
> 
> #define USE_GCC_UNWINDER
> #define PC_ADJUST -4
> -- 
> 2.34.1
>
  

Patch

diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c
index 54e547d2414..6cc5d301737 100644
--- a/gcc/ada/tracebak.c
+++ b/gcc/ada/tracebak.c
@@ -316,6 +316,13 @@  __gnat_backtrace (void **array,
 #define PC_ADJUST -2
 #define USING_ARM_UNWINDING 1
 
+/*---------------------- ARM RTEMS ------------------------------------ -*/
+#elif (defined (__arm__) && defined (__rtems__))
+
+#define USE_GCC_UNWINDER
+#define PC_ADJUST -2
+#define USING_ARM_UNWINDING 1
+
 /*---------------------- PPC AIX/PPC Lynx 178/Older Darwin --------------*/
 #elif ((defined (_POWER) && defined (_AIX)) || \
        (defined (__powerpc__) && defined (__Lynx__) && !defined(__ELF__)) || \
@@ -370,11 +377,12 @@  extern void __runnit(); /* thread entry point.  */
 
 #define BASE_SKIP 1
 
-/*----------- PPC ELF (GNU/Linux & VxWorks & Lynx178e) -------------------*/
+/*----------- PPC ELF (GNU/Linux & VxWorks & Lynx178e & RTEMS ) ----------*/
 
 #elif (defined (_ARCH_PPC) && defined (__vxworks)) ||  \
   (defined (__powerpc__) && defined (__Lynx__) && defined(__ELF__)) || \
-  (defined (__linux__) && defined (__powerpc__))
+  (defined (__linux__) && defined (__powerpc__)) || \
+  (defined (__powerpc__) && defined (__rtems__))
 
 #if defined (_ARCH_PPC64) && !defined (__USING_SJLJ_EXCEPTIONS__)
 #define USE_GCC_UNWINDER
@@ -404,9 +412,9 @@  struct layout
 
 #define BASE_SKIP 1
 
-/*-------------------------- SPARC Solaris -----------------------------*/
+/*-------------------------- SPARC Solaris or RTEMS --------------------*/
 
-#elif defined (__sun__) && defined (__sparc__)
+#elif (defined (__sun__) || defined (__rtems__)) && defined (__sparc__)
 
 #define USE_GENERIC_UNWINDER
 
@@ -551,21 +559,9 @@  is_return_from(void *symbol_addr, void *ret_addr)
 #error Unhandled QNX architecture.
 #endif
 
-/*---------------------------- RTEMS ---------------------------------*/
-
-#elif defined (__rtems__)
-
-#define USE_GCC_UNWINDER
-
-#if defined (__aarch64__)
-#define PC_ADJUST -4
-#else
-#error Unhandled RTEMS architecture.
-#endif
-
-/*------------------- aarch64-linux ----------------------------------*/
+/*------------------- aarch64-linux or aarch64-rtems -----------------*/
 
-#elif (defined (__aarch64__) && defined (__linux__))
+#elif (defined (__aarch64__) && (defined (__linux__) || defined (__rtems__)))
 
 #define USE_GCC_UNWINDER
 #define PC_ADJUST -4