Index: libffi/ChangeLog =================================================================== --- libffi.orig/ChangeLog +++ libffi/ChangeLog @@ -182,6 +182,14 @@ * testsuite/libffi.call/cls_longdouble.c: Likewise. * testsuite/libffi.call/huge_struct.c: Likewise. +2010-08-04 Dan Witte + + * src/x86/ffitarget.h: Add X86_ANY define for all x86/x86_64 + platforms. + * src/x86/ffi.c: Remove redundant ifdef checks. + * src/prep_cif.c: Push stack space computation into src/x86/ffi.c + for X86_ANY so return value space doesn't get added twice. + 2010-07-22 Dan Witte * src/*/ffitarget.h: Make FFI_LAST_ABI one past the last valid ABI. Index: libffi/src/prep_cif.c =================================================================== --- libffi.orig/src/prep_cif.c +++ libffi/src/prep_cif.c @@ -110,7 +110,7 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ff FFI_ASSERT_VALID_TYPE(cif->rtype); /* x86, x86-64 and s390 stack space allocation is handled in prep_machdep. */ -#if !defined M68K && !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA +#if !defined M68K && !defined X86_ANY && !defined S390 && !defined PA /* Make space for the return structure pointer */ if (cif->rtype->type == FFI_TYPE_STRUCT #ifdef SPARC @@ -131,7 +131,7 @@ ffi_status ffi_prep_cif(ffi_cif *cif, ff check after the initialization. */ FFI_ASSERT_VALID_TYPE(*ptr); -#if !defined __i386__ && !defined __x86_64__ && !defined S390 && !defined PA +#if !defined X86_ANY && !defined S390 && !defined PA #ifdef SPARC if (((*ptr)->type == FFI_TYPE_STRUCT && ((*ptr)->size > 16 || cif->abi != FFI_V9)) Index: libffi/src/x86/ffi.c =================================================================== --- libffi.orig/src/x86/ffi.c +++ libffi/src/x86/ffi.c @@ -155,12 +155,10 @@ ffi_status ffi_prep_cif_machdep(ffi_cif switch (cif->rtype->type) { case FFI_TYPE_VOID: -#if defined(X86) || defined (X86_WIN32) || defined(X86_FREEBSD) || defined(X86_DARWIN) || defined(X86_WIN64) case FFI_TYPE_UINT8: case FFI_TYPE_UINT16: case FFI_TYPE_SINT8: case FFI_TYPE_SINT16: -#endif #ifdef X86_WIN64 case FFI_TYPE_UINT32: case FFI_TYPE_SINT32: Index: libffi/src/x86/ffitarget.h =================================================================== --- libffi.orig/src/x86/ffitarget.h +++ libffi/src/x86/ffitarget.h @@ -31,6 +31,9 @@ /* ---- System specific configurations ----------------------------------- */ +/* For code common to all platforms on x86 and x86_64. */ +#define X86_ANY + #if defined (X86_64) && defined (__i386__) #undef X86_64 #define X86 @@ -67,16 +70,14 @@ typedef enum ffi_abi { FFI_LAST_ABI, /* TODO: Add fastcall support for the sake of completeness */ FFI_DEFAULT_ABI = FFI_SYSV -#endif -#ifdef X86_WIN64 +#elif defined(X86_WIN64) FFI_WIN64, FFI_LAST_ABI, FFI_DEFAULT_ABI = FFI_WIN64 -#else +#else /* ---- Intel x86 and AMD x86-64 - */ -#if !defined(X86_WIN32) && (defined(__i386__) || defined(__x86_64__) || defined(__i386) || defined(__amd64)) FFI_SYSV, FFI_UNIX64, /* Unix variants all use the same ABI for x86-64 */ FFI_LAST_ABI, @@ -86,7 +87,6 @@ typedef enum ffi_abi { FFI_DEFAULT_ABI = FFI_UNIX64 #endif #endif -#endif /* X86_WIN64 */ } ffi_abi; #endif