lib1funcs.asm (__clear_cache): Define if L_clear_cache.
* config/arm/lib1funcs.asm (__clear_cache): Define if L_clear_cache. * config/arm/linux-eabi.h (CLEAR_INSN_CACHE): Define to give an error if used. * config/arm/t-linux-eabi (LIB1ASMFUNCS): Add _clear_cache. From-SVN: r147956
This commit is contained in:
parent
b45d27197f
commit
8a66e987b5
4 changed files with 35 additions and 14 deletions
|
@ -1,3 +1,11 @@
|
|||
2009-05-28 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* config/arm/lib1funcs.asm (__clear_cache): Define if
|
||||
L_clear_cache.
|
||||
* config/arm/linux-eabi.h (CLEAR_INSN_CACHE): Define to give an
|
||||
error if used.
|
||||
* config/arm/t-linux-eabi (LIB1ASMFUNCS): Add _clear_cache.
|
||||
|
||||
2009-05-28 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* tree-ssa-alias.c (ao_ref_init): New function.
|
||||
|
|
|
@ -1096,6 +1096,27 @@ LSYM(Lover12):
|
|||
FUNC_END div0
|
||||
|
||||
#endif /* L_dvmd_lnx */
|
||||
#ifdef L_clear_cache
|
||||
#if defined __ARM_EABI__ && defined __linux__
|
||||
@ EABI GNU/Linux call to cacheflush syscall.
|
||||
FUNC_START clear_cache
|
||||
push {r7}
|
||||
#if __ARM_ARCH__ >= 7 || defined(__ARM_ARCH_6T2__)
|
||||
movw r7, #2
|
||||
movt r7, #0xf
|
||||
#else
|
||||
mov r7, #0xf0000
|
||||
add r7, r7, #2
|
||||
#endif
|
||||
mov r2, #0
|
||||
swi 0
|
||||
pop {r7}
|
||||
RET
|
||||
FUNC_END clear_cache
|
||||
#else
|
||||
#error "This is only for ARM EABI GNU/Linux"
|
||||
#endif
|
||||
#endif /* L_clear_cache */
|
||||
/* ------------------------------------------------------------------------ */
|
||||
/* Dword shift operations. */
|
||||
/* All the following Dword shift variants rely on the fact that
|
||||
|
|
|
@ -72,16 +72,8 @@
|
|||
do not use -lfloat. */
|
||||
#undef LIBGCC_SPEC
|
||||
|
||||
/* Clear the instruction cache from `beg' to `end'. This makes an
|
||||
inline system call to SYS_cacheflush. */
|
||||
/* Clear the instruction cache from `beg' to `end'. This is
|
||||
implemented in lib1funcs.asm, so ensure an error if this definition
|
||||
is used. */
|
||||
#undef CLEAR_INSN_CACHE
|
||||
#define CLEAR_INSN_CACHE(BEG, END) \
|
||||
{ \
|
||||
register unsigned long _beg __asm ("a1") = (unsigned long) (BEG); \
|
||||
register unsigned long _end __asm ("a2") = (unsigned long) (END); \
|
||||
register unsigned long _flg __asm ("a3") = 0; \
|
||||
register unsigned long _scno __asm ("r7") = 0xf0002; \
|
||||
__asm __volatile ("swi 0 @ sys_cacheflush" \
|
||||
: "=r" (_beg) \
|
||||
: "0" (_beg), "r" (_end), "r" (_flg), "r" (_scno)); \
|
||||
}
|
||||
#define CLEAR_INSN_CACHE(BEG, END) not used
|
||||
|
|
|
@ -24,8 +24,8 @@ TARGET_LIBGCC2_CFLAGS = -fPIC
|
|||
MULTILIB_OPTIONS =
|
||||
MULTILIB_DIRNAMES =
|
||||
|
||||
# Use a version of div0 which raises SIGFPE.
|
||||
LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx
|
||||
# Use a version of div0 which raises SIGFPE, and a special __clear_cache.
|
||||
LIB1ASMFUNCS := $(filter-out _dvmd_tls,$(LIB1ASMFUNCS)) _dvmd_lnx _clear_cache
|
||||
|
||||
# Multilib the standard Linux files. Don't include crti.o or crtn.o,
|
||||
# which are provided by glibc.
|
||||
|
|
Loading…
Add table
Reference in a new issue