diff options
| author | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-04 15:43:03 +0000 |
|---|---|---|
| committer | aph <aph@138bc75d-0d04-0410-961f-82ee72b054a4> | 2009-06-04 15:43:03 +0000 |
| commit | 6e59f66fb0acdbe9e8df199a73ad649de7ead875 (patch) | |
| tree | 631e1e01b4aacdc5f35c71b3054635f5885b664a /libffi/src/mips | |
| parent | 9d98ec1bf3906a98ae1d12ea0653ff2ded48debf (diff) | |
| download | ppe42-gcc-6e59f66fb0acdbe9e8df199a73ad649de7ead875.tar.gz ppe42-gcc-6e59f66fb0acdbe9e8df199a73ad649de7ead875.zip | |
2009-06-04 Andrew Haley <aph@redhat.com>
* src/powerpc/ppc_closure.S: Insert licence header.
* src/powerpc/linux64_closure.S: Likewise.
* src/m68k/sysv.S: Likewise.
* src/sh64/ffi.c: Change void (*)() to void (*)(void).
* src/powerpc/ffi.c: Likewise.
* src/powerpc/ffi_darwin.c: Likewise.
* src/m32r/ffi.c: Likewise.
* src/sh64/ffi.c: Likewise.
* src/x86/ffi64.c: Likewise.
* src/alpha/ffi.c: Likewise.
* src/alpha/osf.S: Likewise.
* src/frv/ffi.c: Likewise.
* src/s390/ffi.c: Likewise.
* src/pa/ffi.c: Likewise.
* src/pa/hpux32.S: Likewise.
* src/ia64/unix.S: Likewise.
* src/ia64/ffi.c: Likewise.
* src/sparc/ffi.c: Likewise.
* src/mips/ffi.c: Likewise.
* src/sh/ffi.c: Likewise.
2008-02-15 David Daney <ddaney@avtrex.com>
* src/mips/ffi.c (USE__BUILTIN___CLEAR_CACHE):
Define (conditionally), and use it to include cachectl.h.
(ffi_prep_closure_loc): Fix cache flushing.
* src/mips/ffitarget.h (_ABIN32, _ABI64, _ABIO32): Define.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@148172 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi/src/mips')
| -rw-r--r-- | libffi/src/mips/ffi.c | 24 | ||||
| -rw-r--r-- | libffi/src/mips/ffitarget.h | 13 |
2 files changed, 32 insertions, 5 deletions
diff --git a/libffi/src/mips/ffi.c b/libffi/src/mips/ffi.c index f21182b2223..b6887be839b 100644 --- a/libffi/src/mips/ffi.c +++ b/libffi/src/mips/ffi.c @@ -1,5 +1,6 @@ /* ----------------------------------------------------------------------- - ffi.c - Copyright (c) 1996, 2007 Red Hat, Inc. + ffi.c - Copyright (c) 1996, 2007, 2008 Red Hat, Inc. + Copyright (c) 2008 David Daney MIPS Foreign Function Interface @@ -29,6 +30,16 @@ #include <stdlib.h> +#ifdef __GNUC__ +# if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)) +# define USE__BUILTIN___CLEAR_CACHE 1 +# endif +#endif + +#ifndef USE__BUILTIN___CLEAR_CACHE +#include <sys/cachectl.h> +#endif + #ifdef FFI_DEBUG # define FFI_MIPS_STOP_HERE() ffi_stop_here() #else @@ -483,14 +494,14 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif) /* Low level routine for calling O32 functions */ extern int ffi_call_O32(void (*)(char *, extended_cif *, int, int), extended_cif *, unsigned, - unsigned, unsigned *, void (*)()); + unsigned, unsigned *, void (*)(void)); /* Low level routine for calling N32 functions */ extern int ffi_call_N32(void (*)(char *, extended_cif *, int, int), extended_cif *, unsigned, - unsigned, unsigned *, void (*)()); + unsigned, unsigned *, void (*)(void)); -void ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue) +void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue) { extended_cif ecif; @@ -616,8 +627,11 @@ ffi_prep_closure_loc (ffi_closure *closure, closure->fun = fun; closure->user_data = user_data; +#ifdef USE__BUILTIN___CLEAR_CACHE __builtin___clear_cache(clear_location, clear_location + FFI_TRAMPOLINE_SIZE); - +#else + cacheflush (clear_location, FFI_TRAMPOLINE_SIZE, ICACHE); +#endif return FFI_OK; } diff --git a/libffi/src/mips/ffitarget.h b/libffi/src/mips/ffitarget.h index bbc95c34797..214afe46560 100644 --- a/libffi/src/mips/ffitarget.h +++ b/libffi/src/mips/ffitarget.h @@ -27,6 +27,19 @@ #ifndef LIBFFI_TARGET_H #define LIBFFI_TARGET_H +#ifdef linux +#include <asm/sgidefs.h> +# ifndef _ABIN32 +# define _ABIN32 _MIPS_SIM_NABI32 +# endif +# ifndef _ABI64 +# define _ABI64 _MIPS_SIM_ABI64 +# endif +# ifndef _ABIO32 +# define _ABIO32 _MIPS_SIM_ABI32 +# endif +#endif + #if !defined(_MIPS_SIM) -- something is very wrong -- #else |

