aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKresten Krab Thorup <krab@gcc.gnu.org>1993-09-22 17:45:18 +0000
committerKresten Krab Thorup <krab@gcc.gnu.org>1993-09-22 17:45:18 +0000
commit163d9996179cb12fb53a3f0d6f2a9447ea1c4303 (patch)
treed9d1e676951c3002b1fe1f0e0eca43589ebd9ead
parentc1381fd35793cbfdac84f74fe09179db5581c256 (diff)
downloadgcc-163d9996179cb12fb53a3f0d6f2a9447ea1c4303.zip
gcc-163d9996179cb12fb53a3f0d6f2a9447ea1c4303.tar.gz
gcc-163d9996179cb12fb53a3f0d6f2a9447ea1c4303.tar.bz2
(INITIALIZE_TRAMPOLINE): Append call to __enable_execute_stack.
(INITIALIZE_TRAMPOLINE): Append call to __enable_execute_stack. (CLEAR_INSN_CACHE): New macro. From-SVN: r5395
-rw-r--r--gcc/config/m68k/next.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/gcc/config/m68k/next.h b/gcc/config/m68k/next.h
index 845bf7c..55891b4 100644
--- a/gcc/config/m68k/next.h
+++ b/gcc/config/m68k/next.h
@@ -181,3 +181,26 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#define OBJC_FORWARDING_STACK_OFFSET 8
#define OBJC_FORWARDING_MIN_OFFSET 8
+
+/* INITIALIZE_TRAMPOLINE is changed so that it also enables executable
+ stack. The __enable_execute_stack also clears the insn cache. */
+
+/* NOTE: part of this is copied from m68k.h */
+#undef INITIALIZE_TRAMPOLINE
+#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+{ \
+ rtx _addr, _func; \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 2)), TRAMP); \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 18)), CXT); \
+ emit_move_insn (gen_rtx (MEM, SImode, plus_constant (TRAMP, 22)), FNADDR); \
+ _addr = memory_address (SImode, (TRAMP)); \
+ _func = gen_rtx (SYMBOL_REF, Pmode, "__enable_execute_stack"); \
+ emit_library_call (_func, 0, VOIDmode, 1, _addr, Pmode); \
+}
+
+/* A C expression used to clear the instruction cache from
+ address BEG to address END. On NeXTSTEP this i a system trap. */
+
+#define CLEAR_INSN_CACHE(BEG, END) \
+ asm volatile ("trap #2")
+