diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2013-04-12 15:41:03 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2013-04-12 15:41:03 +0200 |
commit | b69cd36a46e574d92de18e1ede3d31e951ccf30e (patch) | |
tree | 983081c2f329d06316f9687cf9737e4c99522cc8 /gcc/ada/init.c | |
parent | 7893514cf6a62a34a48f61ddd4b03bdd47b1b4be (diff) | |
download | gcc-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.c | 15 |
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; |