aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/init.c
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2012-07-09 15:27:22 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2012-07-09 15:27:22 +0200
commitc1107fa376b716f93c9c6f349bb46e1e767d41d6 (patch)
tree3116306d0d98adfdfd391185637bd4a43a7a293d /gcc/ada/init.c
parentd27f3ff4c3165d5decf103e63336095730745f82 (diff)
downloadgcc-c1107fa376b716f93c9c6f349bb46e1e767d41d6.zip
gcc-c1107fa376b716f93c9c6f349bb46e1e767d41d6.tar.gz
gcc-c1107fa376b716f93c9c6f349bb46e1e767d41d6.tar.bz2
[multiple changes]
2012-07-09 Vincent Pucci <pucci@adacore.com> * sem_ch9.adb (Check_Node): Allow attributes that denote static function for lock-free implementation. (Is_Static_Function): New routine. 2012-07-09 Tristan Gingold <gingold@adacore.com> * tracebak.c: Adjust skip_frames on Win64. 2012-07-09 Tristan Gingold <gingold@adacore.com> * init.c: Add __gnat_adjust_context_for_raise for ia64/hpux. * raise-gcc.c: __gnat_cleanupunwind_handler: Do not call _Unwind_GetGR on hpux when using libgcc unwinder. Part of 2012-07-09 Vincent Pucci <pucci@adacore.com> * exp_attr.adb, sem_attr.adb: Minor reformatting. * par-ch13.adb, par-ch4.adb, par-util.adb: Reformatting considering that internal attribute names are not defined anymore in the main attribute names list. * snames.adb-tmpl (Get_Attribute_Id): Special processinf for names CPU, Dispatching_Domain and Interrupt_Priority. (Is_Internal_Attribute_Name): Minor reformatting. * snames.ads-tmpl: New list of internal attribute names. Internal attributes moved at the end of the attribute Id list. From-SVN: r189380
Diffstat (limited to 'gcc/ada/init.c')
-rw-r--r--gcc/ada/init.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 4db5789..e28b264 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -304,6 +304,25 @@ __gnat_install_handler (void)
#include <signal.h>
#include <sys/ucontext.h>
+#if defined(__ia64__)
+#include <sys/uc_access.h>
+#define HAVE_GNAT_ADJUST_CONTEXT_FOR_RAISE
+
+void
+__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
+{
+ ucontext_t *uc = (ucontext_t *) ucontext;
+ uint64_t ip;
+
+ /* Adjust on itanium, as GetIPInfo is not supported. */
+ __uc_get_ip (uc, &ip);
+ __uc_set_ip (uc, ip + 1);
+}
+#endif /* __ia64__ */
+
+/* Tasking and Non-tasking signal handler. Map SIGnal to Ada exception
+ propagation after the required low level adjustments. */
+
static void
__gnat_error_handler (int sig,
siginfo_t *si ATTRIBUTE_UNUSED,
@@ -312,6 +331,10 @@ __gnat_error_handler (int sig,
struct Exception_Data *exception;
const char *msg;
+#if defined(__ia64__)
+ __gnat_adjust_context_for_raise (sig, ucontext);
+#endif
+
switch (sig)
{
case SIGSEGV: