From 1450eb7a07b5967bb4370d458385b945835f6df0 Mon Sep 17 00:00:00 2001 From: Andreas Tobler Date: Tue, 21 Oct 2003 21:01:58 +0200 Subject: [multiple changes] 2003-10-21 Andreas Tobler * 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 Richard Henderson 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 --- libffi/include/Makefile.am | 7 +- libffi/include/Makefile.in | 7 +- libffi/include/ffi.h.in | 474 +++++++------------------------------------- libffi/include/ffi_common.h | 51 ++--- 4 files changed, 105 insertions(+), 434 deletions(-) (limited to 'libffi/include') 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 +#include -#if !defined(LIBFFI_ASM) -#include -#if defined(FFI_DEBUG) -#include -#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 +#include -#ifdef MIPS -#include +/* 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 + /* 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 #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 -- cgit v1.1