diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-14 08:43:46 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-08-14 08:43:46 +0000 |
commit | 6925ea9f399f9d12d3de44754eec7d5af40e620c (patch) | |
tree | e16196828a28026759286dfe4f709fc46d3c6c9f /gcc/ada/s-intman-posix.adb | |
parent | 81a1245619aa40d3dc8fd8d7efd65b39a8019179 (diff) | |
download | gcc-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.adb | 17 |
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); |