aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/init.c
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2013-04-12 15:41:03 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2013-04-12 15:41:03 +0200
commitb69cd36a46e574d92de18e1ede3d31e951ccf30e (patch)
tree983081c2f329d06316f9687cf9737e4c99522cc8 /gcc/ada/init.c
parent7893514cf6a62a34a48f61ddd4b03bdd47b1b4be (diff)
downloadgcc-b69cd36a46e574d92de18e1ede3d31e951ccf30e.zip
gcc-b69cd36a46e574d92de18e1ede3d31e951ccf30e.tar.gz
gcc-b69cd36a46e574d92de18e1ede3d31e951ccf30e.tar.bz2
[multiple changes]
2013-04-12 Robert Dewar <dewar@adacore.com> * namet.adb, namet.ads: Minor addition (7 arg version of Nam_In). * exp_prag.adb, sem_ch3.adb, sem_intr.adb, sem_type.adb, exp_util.adb, sem_aux.adb, exp_ch9.adb, sem_ch7.adb, sem_ch10.adb, sem_prag.adb, par-ch2.adb, tbuild.adb, rtsfind.adb, freeze.adb, sem_util.adb, sem_res.adb, sem_attr.adb, exp_ch2.adb, prj-makr.adb, sem_elab.adb, exp_ch4.adb, sem_ch4.adb, sem_mech.adb, sem_ch6.adb, par-prag.adb, prj-nmsc.adb, exp_disp.adb, sem_ch8.adb, sem_warn.adb, par-util.adb, sem_eval.adb, exp_intr.adb, sem_ch13.adb, exp_cg.adb, lib-xref.adb, sem_disp.adb, exp_ch3.adb: Minor code reorganization (use Nam_In). 2013-04-12 Doug Rupp <rupp@adacore.com> * init.c: Don't clobber condition code on VMS. From-SVN: r197917
Diffstat (limited to 'gcc/ada/init.c')
-rw-r--r--gcc/ada/init.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 8473ff0..d5057c8 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -906,6 +906,10 @@ extern Exception_Code Base_Code_In (Exception_Code);
/* DEC Ada exceptions are not defined in a header file, so they
must be declared. */
+#define FAC_MASK 0x0fff0000
+#define MSG_MASK 0x0000fff8
+#define DECADA_M_FACILITY 0x00310000
+
#define ADA$_ALREADY_OPEN 0x0031a594
#define ADA$_CONSTRAINT_ERRO 0x00318324
#define ADA$_DATA_ERROR 0x003192c4
@@ -1060,7 +1064,7 @@ __gnat_default_resignal_p (int code)
int i, iexcept;
for (i = 0; facility_resignal_table [i]; i++)
- if ((code & 0xfff0000) == facility_resignal_table [i])
+ if ((code & FAC_MASK) == facility_resignal_table [i])
return 1;
for (i = 0, iexcept = 0;
@@ -1231,7 +1235,14 @@ __gnat_handle_vms_condition (int *sigargs, void *mechargs)
message[0] = 0;
/* Subtract PC & PSL fields as per ABI for SYS$PUTMSG. */
sigargs[0] -= 2;
- SYS$PUTMSG (sigargs, copy_msg, &gnat_facility, message);
+
+ /* If it was a DEC Ada specific condtiion, make it GNAT otherwise
+ keep the old facility. */
+ if (sigargs [1] & FAC_MASK == DECADA_M_FACILITY)
+ SYS$PUTMSG (sigargs, copy_msg, &gnat_facility, message);
+ else
+ SYS$PUTMSG (sigargs, copy_msg, 0, message);
+
/* Add back PC & PSL fields as per ABI for SYS$PUTMSG. */
sigargs[0] += 2;
msg = message;