summaryrefslogtreecommitdiff
path: root/gcc/ada/init.c
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-16 12:41:38 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2009-04-16 12:41:38 +0000
commit0793eba56f0ea360620c1e8948899d00cb11a7b4 (patch)
tree630f3b21d444eb12ee9417639d119ed8165a6852 /gcc/ada/init.c
parent5b091c437a402dae7df69410b5da71bb47c11fad (diff)
downloadgcc-0793eba56f0ea360620c1e8948899d00cb11a7b4.tar.gz
2009-04-16 Tristan Gingold <gingold@adacore.com>
* s-intman-susv3.adb: New file. * init.c, s-osinte-darwin.ads: Fix stack checking in tasking mode git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@146179 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/init.c')
-rw-r--r--gcc/ada/init.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index af9ae61d397..e86a975d237 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -2117,6 +2117,7 @@ __gnat_error_handler (int sig, siginfo_t * si, void * uc)
switch (sig)
{
case SIGSEGV:
+ case SIGBUS:
/* FIXME: we need to detect the case of a *real* SIGSEGV. */
exception = &storage_error;
msg = "stack overflow or erroneous memory access";
@@ -2125,11 +2126,6 @@ __gnat_error_handler (int sig, siginfo_t * si, void * uc)
sigreturn (NULL, UC_RESET_ALT_STACK);
break;
- case SIGBUS:
- exception = &constraint_error;
- msg = "SIGBUS";
- break;
-
case SIGFPE:
exception = &constraint_error;
msg = "SIGFPE";
@@ -2172,12 +2168,12 @@ __gnat_install_handler (void)
sigaction (SIGFPE, &act, NULL);
if (__gnat_get_interrupt_state (SIGILL) != 's')
sigaction (SIGILL, &act, NULL);
- if (__gnat_get_interrupt_state (SIGBUS) != 's')
- sigaction (SIGBUS, &act, NULL);
act.sa_flags |= SA_ONSTACK;
if (__gnat_get_interrupt_state (SIGSEGV) != 's')
sigaction (SIGSEGV, &act, NULL);
+ if (__gnat_get_interrupt_state (SIGBUS) != 's')
+ sigaction (SIGBUS, &act, NULL);
__gnat_handler_installed = 1;
}