summaryrefslogtreecommitdiff
path: root/gcc/ada/s-intman-posix.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-14 08:43:46 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2007-08-14 08:43:46 +0000
commit6925ea9f399f9d12d3de44754eec7d5af40e620c (patch)
treee16196828a28026759286dfe4f709fc46d3c6c9f /gcc/ada/s-intman-posix.adb
parent81a1245619aa40d3dc8fd8d7efd65b39a8019179 (diff)
downloadgcc-6925ea9f399f9d12d3de44754eec7d5af40e620c.tar.gz
2007-08-14 Olivier Hainque <hainque@adacore.com>
* system-solaris-x86.ads (ZCX_By_Default): Switch to True. (GCC_ZCX_Support): Switch to True. * s-intman-solaris.adb (Notify_Exception): Call Adjust_Context_For_Raise before raising, as expected for signal handlers in general. * s-intman-posix.adb (Notify_Exception): Remove declaration of Adjust_Context_For_Raise, moved to the spec of this unit to be visible to other implementation bodies. * s-intman.ads (Adjust_Context_For_Raise): Declare and import here, to be visible by multiple implementation bodies. * init.c [VMS section] (__gnat_handle_vms_condition): Adjust context only for conditions coming from hardware. [alpha-tru64 section] (__gnat_adjust_context_for_raise): Implement, adjustments to signal context prior to exception raise from signal handler. (__gnat_map_signal for VxWorks): Map SIGSEGV to Storage_Error in RTP mode. Solaris section: (__gnat_adjust_context_for_raise): New function. Implementation of the machine context adjustments to perform prior to raise from a signal handler. Version for both sparc and x86. (HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE): Define. (__gnat_error_handler): Expect a third argument, ucontext_t *. Adjust it prior to raising as expected for any handler, before possible nested faults to make sure all the contexts in a chain have been adjusted by the time we propagate. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127433 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/s-intman-posix.adb')
-rw-r--r--gcc/ada/s-intman-posix.adb17
1 files changed, 3 insertions, 14 deletions
diff --git a/gcc/ada/s-intman-posix.adb b/gcc/ada/s-intman-posix.adb
index 0c451164076..38379dd1ecb 100644
--- a/gcc/ada/s-intman-posix.adb
+++ b/gcc/ada/s-intman-posix.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2006, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2007, Free Software Foundation, Inc. --
-- --
-- GNARL 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- --
@@ -113,17 +113,6 @@ package body System.Interrupt_Management is
is
pragma Unreferenced (siginfo);
- -- The GCC unwinder requires adjustments to the signal's machine context
- -- to be able to properly unwind through the signal handler. This is
- -- achieved by the target specific subprogram below, provided by init.c
- -- to be usable by the non-tasking handler also.
-
- procedure Adjust_Context_For_Raise
- (signo : Signal;
- ucontext : System.Address);
- pragma Import
- (C, Adjust_Context_For_Raise, "__gnat_adjust_context_for_raise");
-
Result : Interfaces.C.int;
begin
@@ -133,8 +122,8 @@ package body System.Interrupt_Management is
Result := pthread_sigmask (SIG_UNBLOCK, Signal_Mask'Access, null);
pragma Assert (Result = 0);
- -- Perform the necessary context adjustments required by the GCC/ZCX
- -- unwinder, harmless in the SJLJ case.
+ -- Perform the necessary context adjustments prior to a raise
+ -- from a signal handler.
Adjust_Context_For_Raise (signo, ucontext);