Mercurial > hg > CbC > CbC_gcc
comparison gcc/ada/sigtramp.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 /**************************************************************************** | |
2 * * | |
3 * GNAT COMPILER COMPONENTS * | |
4 * * | |
5 * S I G T R A M P * | |
6 * * | |
7 * C Header File * | |
8 * * | |
9 * Copyright (C) 2011-2015, Free Software Foundation, Inc. * | |
10 * * | |
11 * GNAT is free software; you can redistribute it and/or modify it under * | |
12 * terms of the GNU General Public License as published by the Free Soft- * | |
13 * ware Foundation; either version 3, or (at your option) any later ver- * | |
14 * sion. GNAT is distributed in the hope that it will be useful, but WITH- * | |
15 * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * | |
16 * or FITNESS FOR A PARTICULAR PURPOSE. * | |
17 * * | |
18 * As a special exception under Section 7 of GPL version 3, you are granted * | |
19 * additional permissions described in the GCC Runtime Library Exception, * | |
20 * version 3.1, as published by the Free Software Foundation. * | |
21 * * | |
22 * You should have received a copy of the GNU General Public License and * | |
23 * a copy of the GCC Runtime Library Exception along with this program; * | |
24 * see the files COPYING3 and COPYING.RUNTIME respectively. If not, see * | |
25 * <http://www.gnu.org/licenses/>. * | |
26 * * | |
27 * GNAT was originally developed by the GNAT team at New York University. * | |
28 * Extensive contributions were provided by Ada Core Technologies Inc. * | |
29 * * | |
30 ****************************************************************************/ | |
31 | |
32 /* On targets where this is implemented, we resort to a signal trampoline to | |
33 set up the DWARF Call Frame Information that lets unwinders walk through | |
34 the signal frame up into the interrupted user code. This file introduces | |
35 the relevant declarations. It should only be #included on targets that do | |
36 implement the signal trampoline. */ | |
37 | |
38 #ifdef __cplusplus | |
39 extern "C" { | |
40 #endif | |
41 | |
42 /* This typedef signature sometimes conflicts with the sighandler_t from | |
43 system headers so call it something unique. */ | |
44 typedef void __sigtramphandler_t (int signo, void *siginfo, void *sigcontext); | |
45 | |
46 /* The vxsim target has a different sigcontext structure than the one we're | |
47 compiling the run-time with. We thus need to adjust it in this case */ | |
48 #if defined(__vxworks) && (defined (__i386__) || defined (__x86_64__)) && !defined (VTHREADS) | |
49 #define __HANDLE_VXSIM_SC | |
50 extern void __gnat_set_is_vxsim(int val); | |
51 #endif | |
52 | |
53 extern void __gnat_sigtramp (int signo, void *siginfo, void *sigcontext, | |
54 __sigtramphandler_t * handler); | |
55 | |
56 /* The signal trampoline is to be called from an established signal handler. | |
57 It sets up the DWARF CFI and calls HANDLER (SIGNO, SIGINFO, SIGCONTEXT). | |
58 | |
59 The trampoline construct makes it so that the unwinder jumps over it + the | |
60 signal handler + the kernel frame. For a typical backtrace from the raise | |
61 function: | |
62 | |
63 #0 __gnat_Unwind_RaiseException | |
64 #1 Raise_From_Signal_Handler | |
65 #2 __gnat_map_signal | |
66 #3 __gnat_sigtramp | |
67 #4 __gnat_error_handler | |
68 #5 <kernel frame> | |
69 #6 interrupted function | |
70 | |
71 The unwinder will unwind frames 0, 1 and 2 as usual. But the CFI of frame | |
72 3 is set up as if the caller of frame 3 was frame 6 so, when frame 3 is | |
73 unwound, the unwinder ends up in frame 6 directly. It's possible to do so | |
74 because the kernel has saved the context of frame 6 and passed it on to | |
75 __gnat_error_handler and __gnat_sigtramp. */ | |
76 | |
77 #ifdef __cplusplus | |
78 } | |
79 #endif |