aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorManfred Hollstein <manfred@s-direktnet.de>1997-09-10 18:02:16 +0000
committerJeff Law <law@gcc.gnu.org>1997-09-10 12:02:16 -0600
commit9dfc6eba89b34917b26947ffb35984cdd3f70944 (patch)
tree35dddb59ce80ad05cd1f8abdfd38c1c050d5e344 /gcc
parent0021b564f4ce0b648a8d6ec49b29afe609370788 (diff)
downloadgcc-9dfc6eba89b34917b26947ffb35984cdd3f70944.zip
gcc-9dfc6eba89b34917b26947ffb35984cdd3f70944.tar.gz
gcc-9dfc6eba89b34917b26947ffb35984cdd3f70944.tar.bz2
* m88k/sysv3.h (INITIALIZE_TRAMPOLINE) Define.
* libgcc2.c (__enable_execute_stack): Provide for sysV88 too. From-SVN: r15256
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/config/m88k/sysv3.h18
-rw-r--r--gcc/libgcc2.c4
3 files changed, 23 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 40fef6a..dd4ceda 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -26,6 +26,9 @@ Wed Sep 10 01:32:54 1997 Jeffrey A Law (law@cygnus.com)
Wed Sep 10 00:29:29 1997 Manfred Hollstein <manfred@s-direktnet.de>
+ * m88k/sysv3.h (INITIALIZE_TRAMPOLINE) Define.
+ * libgcc2.c (__enable_execute_stack): Provide for sysV88 too.
+
* xm-m88k.h (USG): Only define if it hasn't already been defined.
* Makefile.in (risky-stage1): Delete gratutious whitespace.
diff --git a/gcc/config/m88k/sysv3.h b/gcc/config/m88k/sysv3.h
index 62fe897..e3c318e 100644
--- a/gcc/config/m88k/sysv3.h
+++ b/gcc/config/m88k/sysv3.h
@@ -137,3 +137,21 @@ do { \
if (((int *)__DTOR_LIST__)[i] != -1) \
__DTOR_LIST__[i] (); \
} while (0)
+
+#ifdef sysV88
+/* manfred@s-direktnet.de: Re-define INITIALIZE_TRAMPOLINE to additionally call
+ __enable_execute_stack.
+ I don't actually have a clue why nobody else than sysV88 and __DOLPHIN__
+ needs to call this; perhaps they didn't ever run the c-torture tests
+ getting segmentations violations and/or bus errors with nested functions. */
+#undef INITIALIZE_TRAMPOLINE
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+{ \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 40)), FNADDR); \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 36)), CXT); \
+ emit_call_insn (gen_call (gen_rtx (MEM, SImode, \
+ gen_rtx (SYMBOL_REF, Pmode, \
+ "__enable_execute_stack")), \
+ const0_rtx)); \
+}
+#endif
diff --git a/gcc/libgcc2.c b/gcc/libgcc2.c
index eb6a9ba..23a4e5a 100644
--- a/gcc/libgcc2.c
+++ b/gcc/libgcc2.c
@@ -2827,7 +2827,7 @@ __enable_execute_stack ()
}
#endif /* __convex__ */
-#ifdef __DOLPHIN__
+#if defined (__DOLPHIN__) || defined (sysV88)
/* Modified from the convex -code above. */
@@ -2857,7 +2857,7 @@ __enable_execute_stack ()
errno=save_errno;
}
-#endif /* __DOLPHIN__ */
+#endif /* __DOLPHIN__ or sysV88 */
#ifdef __pyr__