arm.h (ARM_EMIT_TRAMPOLINE_CACHE_CLEAR): Define.
authorPaul Brook <paul@codesourcery.com>
Sun, 1 May 2005 15:28:53 +0000 (15:28 +0000)
committerPaul Brook <pbrook@gcc.gnu.org>
Sun, 1 May 2005 15:28:53 +0000 (15:28 +0000)
2005-01-05  Paul Brook  <paul@codesourcery.com>

* config/arm/arm.h (ARM_EMIT_TRAMPOLINE_CACHE_CLEAR): Define.
(INITIALIZE_TRAMPOLINE): Use it.
* config/arm/linux-gas.h (INITIALIZE_TRAMPOLINE): Remove.
* config/arm/netbsd.h (INITIALIZE_TRAMPOLINE): Remove.
* config/arm/netbsd-elf.h (INITIALIZE_TRAMPOLINE): Remove.

From-SVN: r99068

gcc/ChangeLog
gcc/config/arm/arm.h
gcc/config/arm/linux-gas.h
gcc/config/arm/netbsd-elf.h
gcc/config/arm/netbsd.h

index 1148ec2..db25a0a 100644 (file)
@@ -1,3 +1,11 @@
+2005-01-05  Paul Brook  <paul@codesourcery.com>
+
+       * config/arm/arm.h (ARM_EMIT_TRAMPOLINE_CACHE_CLEAR): Define.
+       (INITIALIZE_TRAMPOLINE): Use it.
+       * config/arm/linux-gas.h (INITIALIZE_TRAMPOLINE): Remove.
+       * config/arm/netbsd.h (INITIALIZE_TRAMPOLINE): Remove.
+       * config/arm/netbsd-elf.h (INITIALIZE_TRAMPOLINE): Remove.
+
 2005-05-01  Gerald Pfeifer  <gerald@pfeifer.com>
 
        * doc/install.texi (Specific): Omit dots in the @anchors names
index 6310a62..2fcf63f 100644 (file)
@@ -1986,6 +1986,16 @@ typedef struct
 /* Alignment required for a trampoline in bits.  */
 #define TRAMPOLINE_ALIGNMENT  32
 
+/* Call __clear_cache after setting up the trampoline unless this is a nop.  */
+#ifdef CLEAR_INSN_CACHE
+#define ARM_EMIT_TRAMPOLINE_CACHE_CLEAR(TRAMP)                         \
+  emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),      \
+                    0, VOIDmode, 2, TRAMP, Pmode,                      \
+                    plus_constant (TRAMP, TRAMPOLINE_SIZE), Pmode);
+#else
+#define ARM_EMIT_TRAMPOLINE_CACHE_CLEAR(TRAMP) do {} while (0)
+#endif
+
 /* Emit RTL insns to initialize the variable parts of a trampoline.
    FNADDR is an RTX for the address of the function's pure code.
    CXT is an RTX for the static chain value for the function.  */
@@ -2000,6 +2010,7 @@ typedef struct
                               plus_constant (TRAMP,                    \
                                              TARGET_ARM ? 12 : 20)),   \
                  FNADDR);                                              \
+  ARM_EMIT_TRAMPOLINE_CACHE_CLEAR (TRAMP);                             \
 }
 #endif
 
index 85ae98a..45afa6e 100644 (file)
 #undef  WCHAR_TYPE_SIZE
 #define WCHAR_TYPE_SIZE BITS_PER_WORD
 
-/* Emit code to set up a trampoline and synchronize the caches.  */
-#undef  INITIALIZE_TRAMPOLINE
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                      \
-{                                                                      \
-  emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 8)),    \
-                 (CXT));                                               \
-  emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 12)),   \
-                 (FNADDR));                                            \
-  emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),      \
-                    0, VOIDmode, 2, TRAMP, Pmode,                      \
-                    plus_constant (TRAMP, TRAMPOLINE_SIZE), Pmode);    \
-}
-
 /* Clear the instruction cache from `beg' to `end'.  This makes an
    inline system call to SYS_cacheflush.  */
 #define CLEAR_INSN_CACHE(BEG, END)                                     \
index 9cf47c7..602619f 100644 (file)
 #undef DEFAULT_STRUCTURE_SIZE_BOUNDARY
 #define DEFAULT_STRUCTURE_SIZE_BOUNDARY 8
 
-/* Emit code to set up a trampoline and synchronize the caches.  */
-#undef INITIALIZE_TRAMPOLINE
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                      \
-do                                                                     \
-  {                                                                    \
-    emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 8)),  \
-                   (CXT));                                             \
-    emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 12)), \
-                   (FNADDR));                                          \
-    emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),    \
-                      0, VOIDmode, 2, TRAMP, Pmode,                    \
-                      plus_constant (TRAMP, TRAMPOLINE_SIZE), Pmode);  \
-  }                                                                    \
-while (0)
-
 /* Clear the instruction cache from `BEG' to `END'.  This makes a
    call to the ARM_SYNC_ICACHE architecture specific syscall.  */
 #define CLEAR_INSN_CACHE(BEG, END)                                     \
index 8b9e437..59a7b80 100644 (file)
 #undef  DEFAULT_STRUCTURE_SIZE_BOUNDARY
 #define DEFAULT_STRUCTURE_SIZE_BOUNDARY 8
 
-/* Emit code to set up a trampoline and synchronize the caches.  */
-#undef  INITIALIZE_TRAMPOLINE
-#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT)                      \
-{                                                                      \
-  emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 8)),   \
-                 (CXT));                                               \
-  emit_move_insn (gen_rtx_MEM (SImode, plus_constant ((TRAMP), 12)),  \
-                 (FNADDR));                                            \
-  emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),      \
-                    0, VOIDmode, 2, TRAMP, Pmode,                      \
-                    plus_constant (TRAMP, TRAMPOLINE_SIZE), Pmode);    \
-}
-
 /* Clear the instruction cache from `BEG' to `END'.  This makes a
    call to the ARM32_SYNC_ICACHE architecture specific syscall.  */
 #define CLEAR_INSN_CACHE(BEG, END)                                     \