]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
netbsd.h (INITIALIZE_TRAMPOLINE): Redefine.
authorKrister Walfridsson <cato@df.lth.se>
Sun, 8 Sep 2002 16:06:18 +0000 (18:06 +0200)
committerKrister Walfridsson <kristerw@gcc.gnu.org>
Sun, 8 Sep 2002 16:06:18 +0000 (16:06 +0000)
* config/arm/netbsd.h (INITIALIZE_TRAMPOLINE): Redefine.
(CLEAR_INSN_CACHE): Define.

From-SVN: r56954

gcc/ChangeLog
gcc/config/arm/netbsd.h

index 97747a29f3d0fb1a022dc0ec6f6bb750c9af237d..8dc77e2b08cdae0d33ad3e921ef821219dd4b892 100644 (file)
@@ -1,3 +1,8 @@
+2002-09-08  Krister Walfridsson  <cato@df.lth.se>
+
+       * config/arm/netbsd.h (INITIALIZE_TRAMPOLINE): Redefine.
+       (CLEAR_INSN_CACHE): Define.
+
 2002-09-08  Kazu Hirata  <kazu@cs.umass.edu>
 
        * basic-block.h: Fix comment formatting.
index 5a080d392fe763cd48802ee632554db7b07d6df5..e5582673671eb3ffaa02a7177814d3780a937139 100644 (file)
@@ -147,3 +147,30 @@ Boston, MA 02111-1307, USA.  */
    requirements.  */
 #undef  DEFAULT_STRUCTURE_SIZE_BOUNDARY
 #define DEFAULT_STRUCTURE_SIZE_BOUNDARY 8
+
+/* Emit code to set up a trampoline and synchronise 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)                                     \
+{                                                                      \
+  extern int sysarch(int number, void *args);                          \
+  struct {                                                             \
+    unsigned int  addr;                                                \
+    int           len;                                                 \
+  } s;                                                                 \
+  s.addr = (unsigned int)(BEG);                                        \
+  s.len = (END) - (BEG);                                               \
+  (void)sysarch(0, &s);                                                \
+}