aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMike Stump <mrs@gcc.gnu.org>1996-07-25 22:00:09 +0000
committerMike Stump <mrs@gcc.gnu.org>1996-07-25 22:00:09 +0000
commitbbe79f845fe1c695ba61bece26f1369f4bbfddd3 (patch)
tree0d27cbf158dad94c1a0a09b1a658bcb78b107539 /gcc
parent5703bb66031e55b695395004578410c8e4e08f31 (diff)
downloadgcc-bbe79f845fe1c695ba61bece26f1369f4bbfddd3.zip
gcc-bbe79f845fe1c695ba61bece26f1369f4bbfddd3.tar.gz
gcc-bbe79f845fe1c695ba61bece26f1369f4bbfddd3.tar.bz2
install EH code
From-SVN: r12564
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/pa/pa.h31
1 files changed, 23 insertions, 8 deletions
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index ac03586..16d20f98 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -2323,12 +2323,27 @@ extern void hppa_encode_label ();
removing the dead (but important) initialization of
REFERENCE. */
-#define DO_GLOBAL_DTORS_BODY \
-do { \
- extern void __gcc_plt_call (); \
- void (*reference)() = &__gcc_plt_call; \
- func_ptr *p; \
- __asm__ ("" : : "r" (reference)); \
- for (p = __DTOR_LIST__ + 1; *p; ) \
- (*p++) (); \
+#define DO_GLOBAL_DTORS_BODY \
+do { \
+ extern void __gcc_plt_call (); \
+ void (*reference)() = &__gcc_plt_call; \
+ func_ptr *p; \
+ __asm__ ("" : : "r" (reference)); \
+ for (p = __DTOR_LIST__ + 1; *p; ) \
+ (*p++) (); \
} while (0)
+
+/* The current return address is in [%sp-20]. */
+#define RETURN_ADDR_RTX(COUNT, FRAME) \
+ ((COUNT == 0) \
+ ? gen_rtx (MEM, Pmode, \
+ memory_address (Pmode, plus_constant (FRAME, \
+ 5 * UNITS_PER_WORD))) \
+ : (rtx) 0)
+
+/* Used to mask out junk bits from the return address, such as
+ processor state, interrupt status, condition codes and the like. */
+#define MASK_RETURN_ADDR \
+ /* The priviledge level is in the two low order bits, mask em out \
+ of the return address. */ \
+ (GEN_INT (0xfffffffc))