From edb2b1b1fa0af901ab22ed58a4644115d3f4bbff Mon Sep 17 00:00:00 2001
From: Eric Botcazou <ebotcazou@adacore.com>
Date: Tue, 8 Apr 2014 20:35:14 +0000
Subject: [PATCH] re PR ada/60411 (Ada bootstrap failure on ARM)

	PR ada/60411
	* sigtramp.h: Add Android support.

From-SVN: r209227
---
 gcc/ada/ChangeLog  |  1 +
 gcc/ada/sigtramp.h | 25 ++++++++++++++++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 3353b89867a6..e3a690ad0ec4 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -5,6 +5,7 @@
 	* s-linux-android.ads: New file.
 	* s-intman-android.adb: Likewise.
 	* sigtramp-armdroid.c: Likewise.
+	* sigtramp.h: Add Android support.
 
 2014-04-07  Eric Botcazou  <ebotcazou@adacore.com>
 
diff --git a/gcc/ada/sigtramp.h b/gcc/ada/sigtramp.h
index cf5f4707ee34..7419e172510e 100644
--- a/gcc/ada/sigtramp.h
+++ b/gcc/ada/sigtramp.h
@@ -6,7 +6,7 @@
  *                                                                          *
  *                              C Header File                               *
  *                                                                          *
- *          Copyright (C) 2011-2013, Free Software Foundation, Inc.         *
+ *          Copyright (C) 2011-2014, Free Software Foundation, Inc.         *
  *                                                                          *
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
  * terms of the  GNU General Public License as published  by the Free Soft- *
@@ -41,10 +41,29 @@
 extern "C" {
 #endif
 
-  typedef void sighandler_t (int signo, void *siginfo, void *sigcontext);
+#ifdef __ANDROID__
+#include <stdlib.h>
+#include <asm/signal.h>
+#include <asm/sigcontext.h>
+
+/* Android SDK doesn't define these structs */
+typedef struct sigcontext mcontext_t;
+
+typedef struct ucontext
+  {
+    unsigned long uc_flags;
+    struct ucontext *uc_link;
+    stack_t uc_stack;
+    mcontext_t uc_mcontext;
+} ucontext_t;
+#endif
+
+  /* This typedef signature sometimes conflicts with the sighandler_t from
+     system headers so call it something unique.  */
+  typedef void __sigtramphandler_t (int signo, void *siginfo, void *sigcontext);
 
   void __gnat_sigtramp  (int signo, void *siginfo, void *sigcontext,
-			 sighandler_t * handler);
+			 __sigtramphandler_t * handler);
 
   /* To be called from an established signal handler.  Setup the DWARF CFI
      bits letting unwinders walk through the signal frame up into the
-- 
GitLab