From e2f97e264e2e7806c47e31e3f8048d66d7b8623c Mon Sep 17 00:00:00 2001 From: Krister Walfridsson Date: Sun, 8 Sep 2002 18:06:18 +0200 Subject: [PATCH] netbsd.h (INITIALIZE_TRAMPOLINE): Redefine. * config/arm/netbsd.h (INITIALIZE_TRAMPOLINE): Redefine. (CLEAR_INSN_CACHE): Define. From-SVN: r56954 --- gcc/ChangeLog | 5 +++++ gcc/config/arm/netbsd.h | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 97747a29f3d0..8dc77e2b08cd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2002-09-08 Krister Walfridsson + + * config/arm/netbsd.h (INITIALIZE_TRAMPOLINE): Redefine. + (CLEAR_INSN_CACHE): Define. + 2002-09-08 Kazu Hirata * basic-block.h: Fix comment formatting. diff --git a/gcc/config/arm/netbsd.h b/gcc/config/arm/netbsd.h index 5a080d392fe7..e5582673671e 100644 --- a/gcc/config/arm/netbsd.h +++ b/gcc/config/arm/netbsd.h @@ -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); \ +}