From 19a0be3d6b537bc6c9566608cd657bcb96c2dec7 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Tue, 22 Apr 2014 09:51:14 -0700 Subject: [PATCH] Enable __gnat_alternate_stack for most linux * init.c [__linux__] (HAVE_GNAT_ALTERNATE_STACK): New define. (__gnat_alternate_stack): Enable for all linux except ia64. From-SVN: r209653 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/init.c | 13 +++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 96bc09b95152..0d3c7920e0e4 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2014-04-22 Richard Henderson + + * init.c [__linux__] (HAVE_GNAT_ALTERNATE_STACK): New define. + (__gnat_alternate_stack): Enable for all linux except ia64. + 2014-04-22 Eric Botcazou * fe.h (Compiler_Abort): Replace Fat_Pointer with String_Pointer. diff --git a/gcc/ada/init.c b/gcc/ada/init.c index c3824ab7ef30..48319d62f413 100644 --- a/gcc/ada/init.c +++ b/gcc/ada/init.c @@ -556,9 +556,14 @@ __gnat_error_handler (int sig, siginfo_t *si ATTRIBUTE_UNUSED, void *ucontext) Raise_From_Signal_Handler (exception, msg); } -#if defined (i386) || defined (__x86_64__) || defined (__powerpc__) -/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */ -char __gnat_alternate_stack[16 * 1024]; /* 2 * SIGSTKSZ */ +#ifndef __ia64__ +#define HAVE_GNAT_ALTERNATE_STACK 1 +/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. + It must be larger than MINSIGSTKSZ and hopefully near 2 * SIGSTKSZ. */ +# if 16 * 1024 < MINSIGSTKSZ +# error "__gnat_alternate_stack too small" +# endif +char __gnat_alternate_stack[16 * 1024]; #endif #ifdef __XENO__ @@ -612,7 +617,7 @@ __gnat_install_handler (void) sigaction (SIGBUS, &act, NULL); if (__gnat_get_interrupt_state (SIGSEGV) != 's') { -#if defined (i386) || defined (__x86_64__) || defined (__powerpc__) +#ifdef HAVE_GNAT_ALTERNATE_STACK /* Setup an alternate stack region for the handler execution so that stack overflows can be handled properly, avoiding a SEGV generation from stack usage by the handler itself. */ -- 2.47.3