aboutsummaryrefslogtreecommitdiff
path: root/libffi/include
diff options
context:
space:
mode:
authorAndreas Tobler <andreast@gcc.gnu.org>2003-10-21 21:01:58 +0200
committerAndreas Tobler <andreast@gcc.gnu.org>2003-10-21 21:01:58 +0200
commit1450eb7a07b5967bb4370d458385b945835f6df0 (patch)
tree9d7d39e0a966f4e98e779b43dc0089cf9c08478a /libffi/include
parent6b5a2662c72cc5281b19edb3848a463d6bf98e69 (diff)
downloadgcc-1450eb7a07b5967bb4370d458385b945835f6df0.zip
gcc-1450eb7a07b5967bb4370d458385b945835f6df0.tar.gz
gcc-1450eb7a07b5967bb4370d458385b945835f6df0.tar.bz2
[multiple changes]
2003-10-21 Andreas Tobler <a.tobler@schweiz.ch> * configure.in: AC_LINK_FILES(ffitarget.h). * configure: Regenerate. * Makefile.in: Likewise. * include/Makefile.in: Likewise. * testsuite/Makefile.in: Likewise. * fficonfig.h.in: Likewise. 2003-10-21 Paolo Bonzini <bonzini@gnu.org> Richard Henderson <rth@redhat.com> Avoid that ffi.h includes fficonfig.h. * Makefile.am (EXTRA_DIST): Include ffitarget.h files (TARGET_SRC_MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. (TARGET_SRC_MIPS_SGI): Removed. (MIPS_GCC): Renamed to TARGET_SRC_MIPS_IRIX. (MIPS_SGI): Removed. (CLEANFILES): Removed. (mostlyclean-am, clean-am, mostlyclean-sub, clean-sub): New targets. * acconfig.h: Removed. * configure.in: Compute sizeofs only for double and long double. Use them to define and subst HAVE_LONG_DOUBLE. Include comments into AC_DEFINE instead of using acconfig.h. Create include/ffitarget.h instead of include/fficonfig.h. Rename MIPS_GCC to MIPS_IRIX, drop MIPS_SGI since we are in gcc's tree. AC_DEFINE EH_FRAME_FLAGS. * include/Makefile.am (DISTCLEANFILES): New automake macro. (hack_DATA): Add ffitarget.h. * include/ffi.h.in: Remove all system specific definitions. Declare raw API even if it is not installed, why bother? Use limits.h instead of SIZEOF_* to define ffi_type_*. Do not define EH_FRAME_FLAGS, it is in fficonfig.h now. Include ffitarget.h instead of fficonfig.h. Remove ALIGN macro. (UINT_ARG, INT_ARG): Removed, use ffi_arg and ffi_sarg instead. * include/ffi_common.h (bool): Do not define. (ffi_assert): Accept failed assertion. (ffi_type_test): Return void and accept file/line. (FFI_ASSERT): Pass stringized failed assertion. (FFI_ASSERT_AT): New macro. (FFI_ASSERT_VALID_TYPE): New macro. (UINT8, SINT8, UINT16, SINT16, UINT32, SINT32, UINT64, SINT64): Define here with gcc's __attribute__ macro instead of in ffi.h (FLOAT32, ALIGN): Define here instead of in ffi.h * include/ffi-mips.h: Removed. Its content moved to src/mips/ffitarget.h after separating assembly and C sections. * src/alpha/ffi.c, src/alpha/ffi.c, src/java_raw_api.c src/prep_cif.c, src/raw_api.c, src/ia64/ffi.c, src/mips/ffi.c, src/mips/n32.S, src/mips/o32.S, src/mips/ffitarget.h, src/sparc/ffi.c, src/x86/ffi64.c: SIZEOF_ARG -> FFI_SIZEOF_ARG. * src/ia64/ffi.c: Include stdbool.h (provided by GCC 2.95+). * src/debug.c (ffi_assert): Accept stringized failed assertion. (ffi_type_test): Rewritten. * src/prep-cif.c (initialize_aggregate, ffi_prep_cif): Call FFI_ASSERT_VALID_TYPE. * src/alpha/ffitarget.h, src/arm/ffitarget.h, src/ia64/ffitarget.h, src/m68k/ffitarget.h, src/mips/ffitarget.h, src/powerpc/ffitarget.h, src/s390/ffitarget.h, src/sh/ffitarget.h, src/sh64/ffitarget.h, src/sparc/ffitarget.h, src/x86/ffitarget.h: New files. * src/alpha/osf.S, src/arm/sysv.S, src/ia64/unix.S, src/m68k/sysv.S, src/mips/n32.S, src/mips/o32.S, src/powerpc/aix.S, src/powerpc/darwin.S, src/powerpc/ffi_darwin.c, src/powerpc/linux64.S, src/powerpc/linux64_closure.S, src/powerpc/ppc_closure.S, src/powerpc/sysv.S, src/s390/sysv.S, src/sh/sysv.S, src/sh64/sysv.S, src/sparc/v8.S, src/sparc/v9.S, src/x86/sysv.S, src/x86/unix64.S, src/x86/win32.S: include fficonfig.h From-SVN: r72766
Diffstat (limited to 'libffi/include')
-rw-r--r--libffi/include/Makefile.am7
-rw-r--r--libffi/include/Makefile.in7
-rw-r--r--libffi/include/ffi.h.in474
-rw-r--r--libffi/include/ffi_common.h51
4 files changed, 105 insertions, 434 deletions
diff --git a/libffi/include/Makefile.am b/libffi/include/Makefile.am
index 74fd5a6..f9231a6 100644
--- a/libffi/include/Makefile.am
+++ b/libffi/include/Makefile.am
@@ -1,9 +1,10 @@
## Process this with automake to create Makefile.in
-AUTOMAKE_OPTIONS = foreign
+AUTOMAKE_OPTIONS=foreign
-EXTRA_DIST = ffi.h.in ffi_common.h ffi_mips.h
+DISTCLEANFILES=ffitarget.h
+EXTRA_DIST=ffi.h.in ffi_common.h
hackdir=$(includedir)
-hack_DATA=fficonfig.h ffi.h ffi_mips.h \ No newline at end of file
+hack_DATA=ffitarget.h ffi.h
diff --git a/libffi/include/Makefile.in b/libffi/include/Makefile.in
index d2cb67d..0eb1919 100644
--- a/libffi/include/Makefile.in
+++ b/libffi/include/Makefile.in
@@ -72,6 +72,7 @@ DLLTOOL = @DLLTOOL@
EXEEXT = @EXEEXT@
GCJ = @GCJ@
GCJFLAGS = @GCJFLAGS@
+HAVE_LONG_DOUBLE = @HAVE_LONG_DOUBLE@
LIBTOOL = @LIBTOOL@
LN_S = @LN_S@
MAINT = @MAINT@
@@ -91,11 +92,12 @@ toolexeclibdir = @toolexeclibdir@
AUTOMAKE_OPTIONS = foreign
-EXTRA_DIST = ffi.h.in ffi_common.h ffi_mips.h
+DISTCLEANFILES = ffitarget.h
+EXTRA_DIST = ffi.h.in ffi_common.h
hackdir = $(includedir)
-hack_DATA = fficonfig.h ffi.h ffi_mips.h
+hack_DATA = ffitarget.h ffi.h
mkinstalldirs = $(SHELL) $(top_srcdir)/${libffi_basedir}../mkinstalldirs
CONFIG_HEADER = ../fficonfig.h
CONFIG_CLEAN_FILES = ffi.h
@@ -196,6 +198,7 @@ clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
+ -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
maintainer-clean-generic:
mostlyclean-am: mostlyclean-generic
diff --git a/libffi/include/ffi.h.in b/libffi/include/ffi.h.in
index fe32ea2..9f61d48 100644
--- a/libffi/include/ffi.h.in
+++ b/libffi/include/ffi.h.in
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------*-C-*-
- libffi @VERSION@ - Copyright (c) 1996-2003 Cygnus Solutions
+ libffi @VERSION@ - Copyright (c) 1996-2003 Red Hat, Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
@@ -60,258 +60,70 @@ extern "C" {
/* ---- System configuration information --------------------------------- */
-#include <fficonfig.h>
+#include <ffitarget.h>
-#if !defined(LIBFFI_ASM)
-#include <stddef.h>
-#if defined(FFI_DEBUG)
-#include <stdio.h>
-#endif
-#endif
-
-/* ---- Generic type definitions ----------------------------------------- */
-
-#define FLOAT32 float
-#define FLOAT64 double
-#define FLOAT80 long double
-
-#define UINT8 unsigned char
-#define SINT8 signed char
-
-#if SIZEOF_INT == 2
-
-#define UINT16 unsigned int
-#define SINT16 int
-#define ffi_type_uint ffi_type_uint16
-#define ffi_type_sint ffi_type_sint16
-
-#else
-#if SIZEOF_SHORT == 2
-
-#define UINT16 unsigned short
-#define SINT16 short
-#define ffi_type_ushort ffi_type_uint16
-#define ffi_type_sshort ffi_type_sint16
-
-#endif
-#endif
-
-#if SIZEOF_INT == 4
-
-#define UINT32 unsigned int
-#define SINT32 int
-#define ffi_type_uint ffi_type_uint32
-#define ffi_type_sint ffi_type_sint32
-
-#else
-#if SIZEOF_SHORT == 4
-
-#define UINT32 unsigned short
-#define SINT32 short
-#define ffi_type_ushort ffi_type_uint32
-#define ffi_type_sshort ffi_type_sint32
-
-#else
-#if SIZEOF_LONG == 4
-
-#define UINT32 unsigned long
-#define SINT32 long
-#define ffi_type_ulong ffi_type_uint32
-#define ffi_type_slong ffi_type_sint32
+#ifndef LIBFFI_ASM
-#endif
-#endif
-#endif
-
-#if SIZEOF_INT == 8
-
-#define UINT64 unsigned int
-#define SINT64 int
-#define ffi_type_uint ffi_type_uint64
-#define ffi_type_sint ffi_type_sint64
-
-#else
-#if SIZEOF_LONG == 8
-
-#define UINT64 unsigned long
-#define SINT64 long
-#define ffi_type_ulong ffi_type_uint64
-#define ffi_type_slong ffi_type_sint64
-
-#else
-#if SIZEOF_LONG_LONG == 8
-
-#define UINT64 unsigned long long
-#define SINT64 long long
-#define ffi_type_ulong ffi_type_uint64
-#define ffi_type_slong ffi_type_sint64
-
-#endif
-#endif
-#endif
-
-/* ---- System specific configurations ----------------------------------- */
+#include <stddef.h>
+#include <limits.h>
-#ifdef MIPS
-#include <ffi_mips.h>
+/* LONG_LONG_MAX is not always defined (not if STRICT_ANSI, for example).
+ But we can find it either under the correct ANSI name, or under GNU
+ C's internal name. */
+#ifdef LONG_LONG_MAX
+# define FFI_LONG_LONG_MAX LONG_LONG_MAX
#else
-#define SIZEOF_ARG SIZEOF_VOID_P
-#endif
-
-#ifdef POWERPC
-#if defined (__powerpc64__)
-#define POWERPC64
-#endif
-#endif
-
-#ifdef SPARC
-#if defined(__arch64__) || defined(__sparcv9)
-#define SPARC64
-#endif
-#endif
-
-#ifdef S390
-#if defined (__s390x__)
-#define S390X
-#endif
-#endif
-
-#ifdef X86_64
-#if defined (__i386__)
-#undef X86_64
-#define X86
-#endif
+# ifdef LLONG_MAX
+# define FFI_LONG_LONG_MAX LLONG_MAX
+# else
+# ifdef __GNUC__
+# define FFI_LONG_LONG_MAX __LONG_LONG_MAX__
+# endif
+# endif
#endif
-#ifdef LIBFFI_ASM
-
-#ifdef HAVE_RO_EH_FRAME
-#define EH_FRAME_FLAGS "a"
+#if SCHAR_MAX == 127
+# define ffi_type_uchar ffi_type_uint8
+# define ffi_type_schar ffi_type_sint8
#else
-#define EH_FRAME_FLAGS "aw"
+ #error "char size not supported"
#endif
+#if SHRT_MAX == 32767
+# define ffi_type_ushort ffi_type_uint16
+# define ffi_type_sshort ffi_type_sint16
+#elif SHRT_MAX == 2147483647
+# define ffi_type_ushort ffi_type_uint32
+# define ffi_type_sshort ffi_type_sint32
#else
-
-/* ---- Generic type definitions ----------------------------------------- */
-
-#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
-/* The closure code assumes that this works on pointers, i.e. a size_t */
-/* can hold a pointer. */
-
-typedef enum ffi_abi {
-
- /* Leave this for debugging purposes */
- FFI_FIRST_ABI = 0,
-
- /* ---- Sparc -------------------- */
-#ifdef SPARC
- FFI_V8,
- FFI_V8PLUS,
- FFI_V9,
-#ifdef SPARC64
- FFI_DEFAULT_ABI = FFI_V9,
+ #error "short size not supported"
+#endif
+
+#if INT_MAX == 32767
+# define ffi_type_uint ffi_type_uint16
+# define ffi_type_sint ffi_type_sint16
+#elif INT_MAX == 2147483647
+# define ffi_type_uint ffi_type_uint32
+# define ffi_type_sint ffi_type_sint32
+#elif INT_MAX == 9223372036854775807
+# define ffi_type_uint ffi_type_uint64
+# define ffi_type_sint ffi_type_sint64
#else
- FFI_DEFAULT_ABI = FFI_V8,
-#endif
+ #error "int size not supported"
#endif
- /* ---- Intel x86 Win32 ---------- */
-#ifdef X86_WIN32
- FFI_SYSV,
- FFI_STDCALL,
- /* TODO: Add fastcall support for the sake of completeness */
- FFI_DEFAULT_ABI = FFI_SYSV,
-#endif
-
- /* ---- Intel x86 and AMD x86-64 - */
-#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__))
- FFI_SYSV,
- FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */
-#ifdef __i386__
- FFI_DEFAULT_ABI = FFI_SYSV,
-#else
- FFI_DEFAULT_ABI = FFI_UNIX64,
-#endif
-#endif
-
- /* ---- Intel ia64 ---------------- */
-#ifdef IA64
- FFI_UNIX, /* Linux and all Unix variants use the same conventions */
- FFI_DEFAULT_ABI = FFI_UNIX,
-#endif
-
- /* ---- Mips --------------------- */
-#ifdef MIPS
- FFI_O32,
- FFI_N32,
- FFI_N64,
-#endif
-
- /* ---- Alpha -------------------- */
-#ifdef ALPHA
- FFI_OSF,
- FFI_DEFAULT_ABI = FFI_OSF,
-#endif
-
- /* ---- Motorola m68k ------------ */
-#ifdef M68K
- FFI_SYSV,
- FFI_DEFAULT_ABI = FFI_SYSV,
-#endif
-
- /* ---- PowerPC ------------------ */
-#ifdef POWERPC
- FFI_SYSV,
- FFI_GCC_SYSV,
- FFI_LINUX64,
-# ifdef POWERPC64
- FFI_DEFAULT_ABI = FFI_LINUX64,
-# else
- FFI_DEFAULT_ABI = FFI_GCC_SYSV,
+#define ffi_type_ulong ffi_type_uint64
+#define ffi_type_slong ffi_type_sint64
+#if LONG_MAX == 2147483647
+# if FFI_LONG_LONG_MAX != 9223372036854775807
+ #error "no 64-bit data type supported"
# endif
+#elif LONG_MAX != 9223372036854775807
+ #error "long size not supported"
#endif
-#ifdef POWERPC_AIX
- FFI_AIX,
- FFI_DARWIN,
- FFI_DEFAULT_ABI = FFI_AIX,
-#endif
-
-#ifdef POWERPC_DARWIN
- FFI_AIX,
- FFI_DARWIN,
- FFI_DEFAULT_ABI = FFI_DARWIN,
-#endif
-
- /* ---- ARM --------------------- */
-#ifdef ARM
- FFI_SYSV,
- FFI_DEFAULT_ABI = FFI_SYSV,
-#endif
-
- /* ---- S390 --------------------- */
-#ifdef S390
- FFI_SYSV,
- FFI_DEFAULT_ABI = FFI_SYSV,
-#endif
-
- /* ---- SuperH ------------------- */
-#ifdef SH
- FFI_SYSV,
- FFI_DEFAULT_ABI = FFI_SYSV,
-#endif
-
- /* ---- SuperH - SHmedia --------- */
-#ifdef SH64
- FFI_SYSV,
- FFI_DEFAULT_ABI = FFI_SYSV,
-#endif
-
- /* Leave this for debugging purposes */
- FFI_LAST_ABI
-
-} ffi_abi;
+/* The closure code assumes that this works on pointers, i.e. a size_t */
+/* can hold a pointer. */
typedef struct _ffi_type
{
@@ -336,9 +148,6 @@ extern ffi_type ffi_type_double;
extern ffi_type ffi_type_longdouble;
extern ffi_type ffi_type_pointer;
-/* Characters are 8 bit integral types */
-#define ffi_type_schar ffi_type_sint8
-#define ffi_type_uchar ffi_type_uint8
typedef enum {
FFI_OK = 0,
@@ -355,53 +164,27 @@ typedef struct {
/*@dependent@*/ ffi_type *rtype;
unsigned bytes;
unsigned flags;
-
-#ifdef MIPS
-#if _MIPS_SIM == _ABIN32
- unsigned rstruct_flag;
-#endif
-#endif
-
-#ifdef SH64
- long long flags2;
+#ifdef FFI_EXTRA_CIF_FIELDS
+ FFI_EXTRA_CIF_FIELDS;
#endif
-
} ffi_cif;
-#if SIZEOF_ARG == 4
-typedef UINT32 ffi_arg;
-#else
-#if SIZEOF_ARG == 8
-typedef UINT64 ffi_arg;
-#else
--- unsupported configuration
-#endif
-#endif
-
/* ---- Definitions for the raw API -------------------------------------- */
-#if !FFI_NO_RAW_API
-
-#if SIZEOF_ARG == 4
-
-#define UINT_ARG UINT32
-#define SINT_ARG SINT32
-
-#endif
-
-#if SIZEOF_ARG == 8
-
-#define UINT_ARG UINT64
-#define SINT_ARG SINT64
-
+#ifndef FFI_SIZEOF_ARG
+# if LONG_MAX == 2147483647
+# define FFI_SIZEOF_ARG 4
+# elif LONG_MAX == 9223372036854775807
+# define FFI_SIZEOF_ARG 8
+# endif
#endif
typedef union {
- SINT_ARG sint;
- UINT_ARG uint;
- float flt;
- char data[SIZEOF_ARG];
- void* ptr;
+ ffi_sarg sint;
+ ffi_arg uint;
+ float flt;
+ char data[FFI_SIZEOF_ARG];
+ void* ptr;
} ffi_raw;
void ffi_raw_call (/*@dependent@*/ ffi_cif *cif,
@@ -413,8 +196,6 @@ void ffi_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
void ffi_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
size_t ffi_raw_size (ffi_cif *cif);
-#if !NO_JAVA_RAW_API
-
/* This is analogous to the raw API, except it uses Java parameter */
/* packing, even on 64-bit machines. I.e. on 64-bit machines */
/* longs and doubles are followed by an empty 64-bit word. */
@@ -428,120 +209,8 @@ void ffi_java_ptrarray_to_raw (ffi_cif *cif, void **args, ffi_raw *raw);
void ffi_java_raw_to_ptrarray (ffi_cif *cif, ffi_raw *raw, void **args);
size_t ffi_java_raw_size (ffi_cif *cif);
-#endif /* !NO_JAVA_RAW_API */
-
-#endif /* !FFI_NO_RAW_API */
-
/* ---- Definitions for closures ----------------------------------------- */
-#ifdef __i386__
-
-#define FFI_CLOSURES 1 /* x86 supports closures */
-#define FFI_TRAMPOLINE_SIZE 10
-#define FFI_NATIVE_RAW_API 1 /* and has native raw api support */
-
-#elif defined(IA64)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 24 /* Really the following struct, which */
- /* can be interpreted as a C function */
- /* decriptor: */
-
-struct ffi_ia64_trampoline_struct {
- void * code_pointer; /* Pointer to ffi_closure_UNIX */
- void * fake_gp; /* Pointer to closure, installed as gp */
- void * real_gp; /* Real gp value, reinstalled by */
- /* ffi_closure_UNIX. */
-};
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(ALPHA)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 24
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(POWERPC)
-
-#define FFI_CLOSURES 1
-#ifdef POWERPC64
-#define FFI_TRAMPOLINE_SIZE 24
-#else
-#define FFI_TRAMPOLINE_SIZE 40
-#endif
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(POWERPC_DARWIN)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 40
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(POWERPC_AIX)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 24 /* see struct below */
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(SPARC64)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 24
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(SPARC)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 16
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(S390)
-
-#define FFI_CLOSURES 1
-#ifdef S390X
-#define FFI_TRAMPOLINE_SIZE 32
-#else
-#define FFI_TRAMPOLINE_SIZE 16
-#endif
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(SH)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 16
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(SH64)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 32
-#define FFI_NATIVE_RAW_API 0
-
-#elif defined(__x86_64__)
-
-#define FFI_CLOSURES 1
-#define FFI_TRAMPOLINE_SIZE 24
-#define FFI_NATIVE_RAW_API 0
-
-#else
-
-#define FFI_CLOSURES 0
-#define FFI_NATIVE_RAW_API 0
-
-#endif
-
-#if defined(POWERPC_DARWIN) || defined(POWERPC_AIX)
-
-struct ffi_aix_trampoline_struct {
- void * code_pointer; /* Pointer to ffi_closure_ASM */
- void * toc; /* TOC */
- void * static_chain; /* Pointer to closure */
-};
-
-#endif
-
-
-
#if FFI_CLOSURES
typedef struct {
@@ -557,8 +226,6 @@ ffi_prep_closure (ffi_closure*,
void (*fun)(ffi_cif*,void*,void**,void*),
void *user_data);
-#if !FFI_NO_RAW_API
-
typedef struct {
char tramp[FFI_TRAMPOLINE_SIZE];
@@ -586,15 +253,12 @@ ffi_prep_raw_closure (ffi_raw_closure*,
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
void *user_data);
-#ifndef NO_JAVA_RAW_API
ffi_status
ffi_prep_java_raw_closure (ffi_raw_closure*,
ffi_cif *cif,
void (*fun)(ffi_cif*,void*,ffi_raw*,void*),
void *user_data);
-#endif
-#endif /* !FFI_NO_RAW_API */
#endif /* FFI_CLOSURES */
/* ---- Public interface definition -------------------------------------- */
@@ -617,25 +281,25 @@ void ffi_call(/*@dependent@*/ ffi_cif *cif,
#endif
+/* If these change, update src/mips/ffitarget.h. */
#define FFI_TYPE_VOID 0
#define FFI_TYPE_INT 1
#define FFI_TYPE_FLOAT 2
#define FFI_TYPE_DOUBLE 3
-#if SIZEOF_LONG_DOUBLE == SIZEOF_DOUBLE
-#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
-#else
+#if @HAVE_LONG_DOUBLE@
#define FFI_TYPE_LONGDOUBLE 4
+#else
+#define FFI_TYPE_LONGDOUBLE FFI_TYPE_DOUBLE
#endif
-
-#define FFI_TYPE_UINT8 5 /* If this changes, update ffi_mips.h. */
-#define FFI_TYPE_SINT8 6 /* If this changes, update ffi_mips.h. */
+#define FFI_TYPE_UINT8 5
+#define FFI_TYPE_SINT8 6
#define FFI_TYPE_UINT16 7
#define FFI_TYPE_SINT16 8
#define FFI_TYPE_UINT32 9
#define FFI_TYPE_SINT32 10
#define FFI_TYPE_UINT64 11
#define FFI_TYPE_SINT64 12
-#define FFI_TYPE_STRUCT 13 /* If this changes, update ffi_mips.h. */
+#define FFI_TYPE_STRUCT 13
#define FFI_TYPE_POINTER 14
/* This should always refer to the last type code (for sanity checks) */
diff --git a/libffi/include/ffi_common.h b/libffi/include/ffi_common.h
index c9d4acf..1b948d5 100644
--- a/libffi/include/ffi_common.h
+++ b/libffi/include/ffi_common.h
@@ -1,7 +1,5 @@
/* -----------------------------------------------------------------------
- ffi_common.h - Copyright (c) 1996 Cygnus Solutions
-
- $Id: ffi_common.h,v 1.1.1.1 1998/11/29 16:48:16 green Exp $
+ ffi_common.h - Copyright (c) 1996 Red Hat, Inc.
Common internal definitions and macros. Only necessary for building
libffi.
@@ -14,6 +12,8 @@
extern "C" {
#endif
+#include <fficonfig.h>
+
/* Do not move this. Some versions of AIX are very picky about where
this is positioned. */
#ifdef __GNUC__
@@ -41,36 +41,26 @@ char *alloca ();
# endif
#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef TRUE
-#define TRUE (!FALSE)
-#endif
-
-#ifndef __cplusplus
-/* bool is a keyword in C++ */
-/*@-cppnames@*/
-typedef int bool;
-/*@=cppnames@*/
+#if defined(FFI_DEBUG)
+#include <stdio.h>
#endif
#ifdef FFI_DEBUG
-
-/* Debugging functions */
-/*@exits@*/ int ffi_assert(/*@temp@*/ char *file, int line);
+/*@exits@*/ void ffi_assert(/*@temp@*/ char *expr, /*@temp@*/ char *file, int line);
void ffi_stop_here(void);
-bool ffi_type_test(/*@temp@*/ /*@out@*/ ffi_type *a);
-
-#define FFI_ASSERT(x) ((x) ? 0 : ffi_assert(__FILE__,__LINE__))
+void ffi_type_test(/*@temp@*/ /*@out@*/ ffi_type *a, /*@temp@*/ char *file, int line);
+#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__))
+#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l)))
+#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__)
#else
-
#define FFI_ASSERT(x)
-
+#define FFI_ASSERT_AT(x, f, l)
+#define FFI_ASSERT_VALID_TYPE(x)
#endif
+#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1)
+
/* Perform machine dependent cif processing */
ffi_status ffi_prep_cif_machdep(ffi_cif *cif);
@@ -82,6 +72,19 @@ typedef struct
/*@dependent@*/ void **avalue;
} extended_cif;
+/* Terse sized type definitions. */
+typedef unsigned int UINT8 __attribute__((__mode__(__QI__)));
+typedef signed int SINT8 __attribute__((__mode__(__QI__)));
+typedef unsigned int UINT16 __attribute__((__mode__(__HI__)));
+typedef signed int SINT16 __attribute__((__mode__(__HI__)));
+typedef unsigned int UINT32 __attribute__((__mode__(__SI__)));
+typedef signed int SINT32 __attribute__((__mode__(__SI__)));
+typedef unsigned int UINT64 __attribute__((__mode__(__DI__)));
+typedef signed int SINT64 __attribute__((__mode__(__DI__)));
+
+typedef float FLOAT32;
+
+
#ifdef __cplusplus
}
#endif