diff options
author | Paul Brook <paul@codesourcery.com> | 2005-05-01 15:28:53 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2005-05-01 15:28:53 +0000 |
commit | 2a86f5154bf543a03a4939434b4b0a813c4b48ac (patch) | |
tree | 5f2da4acd08aad9e6f77eedc2d21e93f48290d02 /gcc | |
parent | d8fcd0856b9f3c56dee6d9f7afd22b0a710ee923 (diff) | |
download | gcc-2a86f5154bf543a03a4939434b4b0a813c4b48ac.zip gcc-2a86f5154bf543a03a4939434b4b0a813c4b48ac.tar.gz gcc-2a86f5154bf543a03a4939434b4b0a813c4b48ac.tar.bz2 |
arm.h (ARM_EMIT_TRAMPOLINE_CACHE_CLEAR): Define.
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/arm/arm.h | 11 | ||||
-rw-r--r-- | gcc/config/arm/linux-gas.h | 13 | ||||
-rw-r--r-- | gcc/config/arm/netbsd-elf.h | 15 | ||||
-rw-r--r-- | gcc/config/arm/netbsd.h | 13 |
5 files changed, 19 insertions, 41 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1148ec2..db25a0a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 6310a62..2fcf63f 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -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 diff --git a/gcc/config/arm/linux-gas.h b/gcc/config/arm/linux-gas.h index 85ae98a..45afa6e 100644 --- a/gcc/config/arm/linux-gas.h +++ b/gcc/config/arm/linux-gas.h @@ -42,19 +42,6 @@ #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) \ diff --git a/gcc/config/arm/netbsd-elf.h b/gcc/config/arm/netbsd-elf.h index 9cf47c7..602619f 100644 --- a/gcc/config/arm/netbsd-elf.h +++ b/gcc/config/arm/netbsd-elf.h @@ -136,21 +136,6 @@ #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) \ diff --git a/gcc/config/arm/netbsd.h b/gcc/config/arm/netbsd.h index 8b9e437..59a7b80 100644 --- a/gcc/config/arm/netbsd.h +++ b/gcc/config/arm/netbsd.h @@ -138,19 +138,6 @@ #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) \ |