--- gcc/config/m68k/next.h 2018/04/24 18:10:24 1.1 +++ gcc/config/m68k/next.h 2018/04/24 18:20:59 1.1.1.3 @@ -1,5 +1,5 @@ /* Target definitions for GNU compiler for mc680x0 running NeXTSTEP - Copyright (C) 1989, 1990, 1991, 1992, 1993 Free Software Foundation, Inc. + Copyright (C) 1989, 90, 91, 92, 93, 1994 Free Software Foundation, Inc. This file is part of GNU CC. @@ -33,7 +33,7 @@ the Free Software Foundation, 675 Mass A /* Names to predefine in the preprocessor for this target machine. */ -#define CPP_PREDEFINES "-Dmc68000 -Dm68k -DNeXT -Dunix -D__MACH__ -D__BIG_ENDIAN__ -D__ARCHITECTURE__=\"m68k\"" +#define CPP_PREDEFINES "-Dmc68000 -Dm68k -DNeXT -Dunix -D__MACH__ -D__BIG_ENDIAN__ -D__ARCHITECTURE__=\"m68k\" -Asystem(unix) -Asystem(mach) -Acpu(m68k) -Amachine(m68k)" /* Every structure or union's size must be a multiple of 2 bytes. (Why isn't this in m68k.h?) */ @@ -175,9 +175,34 @@ the Free Software Foundation, 675 Mass A #undef GO_IF_INDEXABLE_BASE(X, ADDR) #define GO_IF_INDEXABLE_BASE(X, ADDR) \ -{ if (GET_CODE (X) == REG && REG_OK_FOR_BASE_P (X)) goto ADDR; } +{ if (LEGITIMATE_BASE_REG_P (X)) goto ADDR; } /* This accounts for the return pc and saved fp on the m68k. */ #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") + +/* GCC is the primary compiler for NeXTSTEP, so we don't need this. */ +#undef PCC_STATIC_STRUCT_RETURN