[Ada] armhf-linux: symbolic tracebacks

2020-12-16 Thread Pierre-Marie de Rodat
Implement symbolic tracebacks on armhf-linux.  It's an ELF target so
just a matter of some bookkeeping changes.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

* libgnat/s-objrea.ads (Object_Arch): Add ARM enum
* libgnat/s-objrea.adb (Initialize): Add EM_ARM case.
(Read_Address): Add ARM case to 32bit read.
* Makefile.rtl: Add trasym units to the runtime for armhf-linux.diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
--- a/gcc/ada/Makefile.rtl
+++ b/gcc/ada/Makefile.rtl
@@ -2381,12 +2381,14 @@ ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),)
   s-tasinf.adb
Res.Arch := x86_64;
 
+when EM_ARM =>
+   Res.Arch := ARM;
+
 when others =>
raise Format_Error with "unrecognized architecture";
  end case;
@@ -2030,6 +2033,7 @@ package body System.Object_Reader is
 | MIPS
 | PPC
 | SPARC
+| ARM
  =>
 Address_32 := Read (S);
 return uint64 (Address_32);


diff --git a/gcc/ada/libgnat/s-objrea.ads b/gcc/ada/libgnat/s-objrea.ads
--- a/gcc/ada/libgnat/s-objrea.ads
+++ b/gcc/ada/libgnat/s-objrea.ads
@@ -117,9 +117,12 @@ package System.Object_Reader is
   PPC,
   --  32-bit PowerPC
 
-  PPC64);
+  PPC64,
   --  64-bit PowerPC
 
+  ARM);
+  --  32-bit ARM
+
--
-- Target types --
--




[Ada] armhf-linux: symbolic tracebacks

2020-12-14 Thread Pierre-Marie de Rodat
Implement non-symbolic tracebacks as a first step towards symbolic.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

* tracebak.c: Add a section for ARM Linux.diff --git a/gcc/ada/tracebak.c b/gcc/ada/tracebak.c
--- a/gcc/ada/tracebak.c
+++ b/gcc/ada/tracebak.c
@@ -309,6 +309,13 @@ __gnat_backtrace (void **array,
 #define USING_ARM_UNWINDING 1
 #endif
 
+/*-- ARM Linux  -*/
+#elif (defined (__ARMEL__) && defined (__linux))
+
+#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__)) || \