void
__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
{
+#if defined(__arm__)
mcontext_t *mcontext = &((ucontext_t *) ucontext)->uc_mcontext;
/* ARM Bump has to be an even number because of odd/even architecture. */
((mcontext_t *) mcontext)->arm_pc += 2;
+#endif
+
+ /* Other ports, based on dwarf2 unwinding, typically leverage
+ kernel CFI coordinated with libgcc's explicit support for signal
+ frames. */
}
static void
{
__gnat_adjust_context_for_raise (sig, ucontext);
+ /* The ARM port relies on a sigtramp. Others such as aarch64,
+ dwarf info based, rely on kernel CFI. */
+#if defined(__arm__)
__gnat_sigtramp (sig, (void *) si, (void *) ucontext,
(__sigtramphandler_t *)&__gnat_map_signal);
+#else
+ __gnat_map_signal (sig, si, ucontext);
+#endif
}
/* This must be in keeping with System.OS_Interface.Alternate_Stack_Size. */