diff mbox

[Ada] housekeeping work in sigtramp.h

Message ID 20151113111828.GA89977@adacore.com
State New
Headers show

Commit Message

Arnaud Charlet Nov. 13, 2015, 11:18 a.m. UTC
This adjusts various details in the header file.  No functional changes.

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

2015-11-13  Eric Botcazou  <ebotcazou@adacore.com>

	* sigtramp.h: Fix formatting throughout, do not include other
	headers, add missing preprocessor condition and 'extern' keywords.
	* sigtramp-armdroid.c: Include <sys/ucontext.h>.
	* init.c [Android]: Likewise.
diff mbox

Patch

Index: sigtramp.h
===================================================================
--- sigtramp.h	(revision 230301)
+++ sigtramp.h	(working copy)
@@ -29,44 +29,35 @@ 
  *                                                                          *
  ****************************************************************************/
 
-/* On targets where this is implemented, we resort to a signal handler
-   trampoline to set-up the DWARF Call Frame Information that let unwinders
-   walk through the signal frame up into the interrupted application code.
-   This file introduces the relevant declarations.  */
+/* On targets where this is implemented, we resort to a signal trampoline to
+   set up the DWARF Call Frame Information that lets unwinders walk through
+   the signal frame up into the interrupted user code.  This file introduces
+   the relevant declarations.  It should only be #included on targets that do
+   implement the signal trampoline.  */
 
-/* This file should only be #included on targets that do implement the
-   trampoline, which needs to expose the following interface:  */
-
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#ifdef __ANDROID__
-#include <stdlib.h>
-#include <sys/ucontext.h>
-#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);
 
-  /* 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);
-
-#if CPU == SIMNT || CPU == SIMPENTIUM || CPU == SIMLINUX
-  /* Vxsim requires a specially compiled handler.  */
-  void __gnat_sigtramp_vxsim  (int signo, void *siginfo, void *sigcontext,
-			 __sigtramphandler_t * handler);
+#if defined(__vxworks) && (CPU == SIMNT || CPU == SIMPENTIUM || CPU == SIMLINUX)
+/* Vxsim requires a specially compiled handler.  */
+extern void __gnat_sigtramp_vxsim (int signo, void *siginfo, void *sigcontext,
+				   __sigtramphandler_t * handler);
 #else
-  void __gnat_sigtramp  (int signo, void *siginfo, void *sigcontext,
-			 __sigtramphandler_t * handler);
+extern void __gnat_sigtramp (int signo, void *siginfo, void *sigcontext,
+			     __sigtramphandler_t * handler);
 #endif
 
-  /* To be called from an established signal handler.  Setup the DWARF CFI
-     bits letting unwinders walk through the signal frame up into the
-     interrupted application code, and then call HANDLER (SIGNO, SIGINFO,
-     SIGCONTEXT).
+/* The signal trampoline is to be called from an established signal handler.
+   It sets up the DWARF CFI and calls HANDLER (SIGNO, SIGINFO, SIGCONTEXT).
 
-     The sigtramp construct makes it so that the unwinder jumps over it + the
-     signal handler + the kernel frame. For a typical backtrace from the raise
-     function:
+   The trampoline construct makes it so that the unwinder jumps over it + the
+   signal handler + the kernel frame.  For a typical backtrace from the raise
+   function:
 
      #0  __gnat_Unwind_RaiseException
      #1  Raise_From_Signal_Handler
@@ -76,11 +67,11 @@ 
      #5  <kernel frame>
      #6  interrupted function
 
-     The unwinder will unwind frames 0, 1 and 2 as usual. But the CFI of frame
-     3 is set up as if the caller of frame 3 was frame 6 so, when frame 3 is
-     unwound, the unwinder ends up in frame 6 directly. It's possible to do so
-     since the kernel has saved the context of frame 6 and passed it on to
-     __gnat_sigtramp.  */
+   The unwinder will unwind frames 0, 1 and 2 as usual.  But the CFI of frame
+   3 is set up as if the caller of frame 3 was frame 6 so, when frame 3 is
+   unwound, the unwinder ends up in frame 6 directly.  It's possible to do so
+   because the kernel has saved the context of frame 6 and passed it on to
+   __gnat_error_handler and __gnat_sigtramp.  */
 
 #ifdef __cplusplus
 }
Index: init.c
===================================================================
--- init.c	(revision 230302)
+++ init.c	(working copy)
@@ -2530,6 +2530,7 @@ 
 /*******************/
 
 #include <signal.h>
+#include <sys/ucontext.h>
 #include "sigtramp.h"
 
 #define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
Index: sigtramp-armdroid.c
===================================================================
--- sigtramp-armdroid.c	(revision 230303)
+++ sigtramp-armdroid.c	(working copy)
@@ -33,6 +33,8 @@ 
  * ARM-Android version of the __gnat_sigtramp service *
  ******************************************************/
 
+#include <sys/ucontext.h>
+
 #include "sigtramp.h"
 /* See sigtramp.h for a general explanation of functionality.  */