aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sigtramp.h
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2014-02-25 16:35:36 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2014-02-25 16:35:36 +0100
commit80c2c20282aae97e232df885461b828d5d6573b0 (patch)
tree80193eba32d9e6b7b50591ca71a891de016291d2 /gcc/ada/sigtramp.h
parent7b27e18398d1feefb4d30dbc127258b703676a17 (diff)
downloadgcc-80c2c20282aae97e232df885461b828d5d6573b0.zip
gcc-80c2c20282aae97e232df885461b828d5d6573b0.tar.gz
gcc-80c2c20282aae97e232df885461b828d5d6573b0.tar.bz2
[multiple changes]
2014-02-25 Robert Dewar <dewar@adacore.com> * errout.adb: Various changes for better msgs for anonmous access subprogram types. * erroutc.ads, erroutc.adb (Buffer_Ends_With): Version with character argument. (Buffer_Remove): Version with character argument. * sem_attr.adb (Resolve_Attribute, case Access): Better handling of mismatching conventions for access-to-subprogram case. * sem_prag.adb (Set_Convention_From_Pragma): Deal with anonymous access types in record. * sem_util.ads, sem_util.adb (Set_Convention): Handle anonymous access types, including in records. 2014-02-25 Doug Rupp <rupp@adacore.com> * sigtramp-ppcvxw.c, sigtramp.h, sigtramp-armvxw.c: Comment enhancements and corrections. 2014-02-25 Robert Dewar <dewar@adacore.com> * gnat_rm.texi: New section "Conventions and Anonymous Access Types" From-SVN: r208143
Diffstat (limited to 'gcc/ada/sigtramp.h')
-rw-r--r--gcc/ada/sigtramp.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/gcc/ada/sigtramp.h b/gcc/ada/sigtramp.h
index ef93e3f..59287f1 100644
--- a/gcc/ada/sigtramp.h
+++ b/gcc/ada/sigtramp.h
@@ -6,7 +6,7 @@
* *
* C Header File *
* *
- * Copyright (C) 2011, Free Software Foundation, Inc. *
+ * Copyright (C) 2011-2013, Free Software Foundation, Inc. *
* *
* GNAT 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- *
@@ -49,7 +49,25 @@ extern "C" {
/* 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). */
+ 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:
+
+ #0 __gnat_Unwind_RaiseException
+ #1 Raise_From_Signal_Handler
+ #2 __gnat_map_signal
+ #3 __gnat_sigtramp
+ #4 __gnat_error_handler
+ #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 3 and passed it on to
+ __gnat_sigtramp. */
#ifdef __cplusplus
}