286 lines
9.6 KiB
Plaintext
286 lines
9.6 KiB
Plaintext
Index: libffi/ChangeLog
|
|
===================================================================
|
|
--- libffi.orig/ChangeLog
|
|
+++ libffi/ChangeLog
|
|
@@ -111,6 +111,23 @@
|
|
|
|
* configure: Regenerate.
|
|
|
|
+2011-02-13 Anthony Green <green@moxielogic.com>
|
|
+
|
|
+ * include/ffi_common.h (UNLIKELY, LIKELY): Define.
|
|
+ * src/x86/ffi64.c (UNLIKELY, LIKELY): Remove definition.
|
|
+ * src/prep_cif.c (UNLIKELY, LIKELY): Remove definition.
|
|
+
|
|
+ * src/prep_cif.c (initialize_aggregate): Convert assertion into
|
|
+ FFI_BAD_TYPEDEF return. Initialize arg size and alignment to 0.
|
|
+
|
|
+ * src/pa/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test,
|
|
+ just return FFI_BAD_ABI when things are wrong.
|
|
+ * src/arm/ffi.c (ffi_prep_closure_loc): Ditto.
|
|
+ * src/powerpc/ffi.c (ffi_prep_closure_loc): Ditto.
|
|
+ * src/mips/ffi.c (ffi_prep_closure_loc): Ditto.
|
|
+ * src/ia64/ffi.c (ffi_prep_closure_loc): Ditto.
|
|
+ * src/avr32/ffi.c (ffi_prep_closure_loc): Ditto.
|
|
+
|
|
2011-02-11 Anthony Green <green@moxielogic.com>
|
|
|
|
* src/sparc/ffi.c (ffi_prep_closure_loc): Don't ASSERT ABI test,
|
|
Index: libffi/include/ffi_common.h
|
|
===================================================================
|
|
--- libffi.orig/include/ffi_common.h
|
|
+++ libffi/include/ffi_common.h
|
|
@@ -1,7 +1,8 @@
|
|
/* -----------------------------------------------------------------------
|
|
- ffi_common.h - Copyright (c) 1996 Red Hat, Inc.
|
|
- Copyright (C) 2007 Free Software Foundation, Inc
|
|
-
|
|
+ ffi_common.h - Copyright (C) 2011 Anthony Green
|
|
+ Copyright (C) 2007 Free Software Foundation, Inc
|
|
+ Copyright (c) 1996 Red Hat, Inc.
|
|
+
|
|
Common internal definitions and macros. Only necessary for building
|
|
libffi.
|
|
----------------------------------------------------------------------- */
|
|
@@ -112,11 +113,14 @@ typedef signed int SINT64 __attribute_
|
|
|
|
typedef float FLOAT32;
|
|
|
|
+#ifndef __GNUC__
|
|
+#define __builtin_expect(x, expected_value) (x)
|
|
+#endif
|
|
+#define LIKELY(x) __builtin_expect((x),1)
|
|
+#define UNLIKELY(x) __builtin_expect((x),1)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|
|
-
|
|
-
|
|
Index: libffi/src/arm/ffi.c
|
|
===================================================================
|
|
--- libffi.orig/src/arm/ffi.c
|
|
+++ libffi/src/arm/ffi.c
|
|
@@ -1,7 +1,9 @@
|
|
/* -----------------------------------------------------------------------
|
|
- ffi.c - Copyright (c) 1998, 2008, 2011 Red Hat, Inc.
|
|
- Copyright (c) 2011 Plausible Labs Cooperative, Inc.
|
|
-
|
|
+ ffi.c - Copyright (c) 2011 Plausible Labs Cooperative, Inc.
|
|
+ Copyright (c) 2011 Anthony Green
|
|
+ Copyright (c) 2011 Free Software Foundation
|
|
+ Copyright (c) 1998, 2008, 2011 Red Hat, Inc.
|
|
+
|
|
ARM Foreign Function Interface
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
@@ -586,7 +588,7 @@ ffi_prep_closure_loc (ffi_closure* closu
|
|
else if (cif->abi == FFI_VFP)
|
|
closure_func = &ffi_closure_VFP;
|
|
else
|
|
- FFI_ASSERT (0);
|
|
+ return FFI_BAD_ABI;
|
|
|
|
#if FFI_EXEC_TRAMPOLINE_TABLE
|
|
void **config = FFI_TRAMPOLINE_CODELOC_CONFIG(codeloc);
|
|
Index: libffi/src/avr32/ffi.c
|
|
===================================================================
|
|
--- libffi.orig/src/avr32/ffi.c
|
|
+++ libffi/src/avr32/ffi.c
|
|
@@ -1,5 +1,6 @@
|
|
/* -----------------------------------------------------------------------
|
|
- ffi.c - Copyright (c) 2009 Bradley Smith <brad@brad-smith.co.uk>
|
|
+ ffi.c - Copyright (c) 2011 Anthony Green
|
|
+ Copyright (c) 2009 Bradley Smith <brad@brad-smith.co.uk>
|
|
|
|
AVR32 Foreign Function Interface
|
|
|
|
@@ -394,7 +395,8 @@ ffi_status ffi_prep_closure_loc(ffi_clos
|
|
void (*fun)(ffi_cif*, void*, void**, void*), void *user_data,
|
|
void *codeloc)
|
|
{
|
|
- FFI_ASSERT(cif->abi == FFI_SYSV);
|
|
+ if (cif->abi != FFI_SYSV)
|
|
+ return FFI_BAD_ABI;
|
|
|
|
unsigned char *__tramp = (unsigned char*)(&closure->tramp[0]);
|
|
unsigned int __fun = (unsigned int)(&ffi_closure_SYSV);
|
|
Index: libffi/src/ia64/ffi.c
|
|
===================================================================
|
|
--- libffi.orig/src/ia64/ffi.c
|
|
+++ libffi/src/ia64/ffi.c
|
|
@@ -1,6 +1,7 @@
|
|
/* -----------------------------------------------------------------------
|
|
ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc.
|
|
Copyright (c) 2000 Hewlett Packard Company
|
|
+ Copyright (c) 2011 Anthony Green
|
|
|
|
IA64 Foreign Function Interface
|
|
|
|
@@ -429,7 +430,8 @@ ffi_prep_closure_loc (ffi_closure* closu
|
|
struct ffi_ia64_trampoline_struct *tramp;
|
|
struct ia64_fd *fd;
|
|
|
|
- FFI_ASSERT (cif->abi == FFI_UNIX);
|
|
+ if (cif->abi != FFI_UNIX)
|
|
+ return FFI_BAD_ABI;
|
|
|
|
tramp = (struct ffi_ia64_trampoline_struct *)closure->tramp;
|
|
fd = (struct ia64_fd *)(void *)ffi_closure_unix;
|
|
Index: libffi/src/mips/ffi.c
|
|
===================================================================
|
|
--- libffi.orig/src/mips/ffi.c
|
|
+++ libffi/src/mips/ffi.c
|
|
@@ -1,6 +1,7 @@
|
|
/* -----------------------------------------------------------------------
|
|
- ffi.c - Copyright (c) 1996, 2007, 2008 Red Hat, Inc.
|
|
- Copyright (c) 2008 David Daney
|
|
+ ffi.c - Copyright (c) 2011 Anthony Green
|
|
+ Copyright (c) 2008 David Daney
|
|
+ Copyright (c) 1996, 2007, 2008, 2011 Red Hat, Inc.
|
|
|
|
MIPS Foreign Function Interface
|
|
|
|
@@ -662,10 +663,12 @@ ffi_prep_closure_loc (ffi_closure *closu
|
|
char *clear_location = (char *) codeloc;
|
|
|
|
#if defined(FFI_MIPS_O32)
|
|
- FFI_ASSERT(cif->abi == FFI_O32 || cif->abi == FFI_O32_SOFT_FLOAT);
|
|
+ if (cif->abi != FFI_O32 && cif->abi != FFI_O32_SOFT_FLOAT)
|
|
+ return FFI_BAD_ABI;
|
|
fn = ffi_closure_O32;
|
|
#else /* FFI_MIPS_N32 */
|
|
- FFI_ASSERT(cif->abi == FFI_N32 || cif->abi == FFI_N64);
|
|
+ if (cif->abi != FFI_N32 && cif->abi != FFI_N64)
|
|
+ return FFI_BAD_ABI;
|
|
fn = ffi_closure_N32;
|
|
#endif /* FFI_MIPS_O32 */
|
|
|
|
Index: libffi/src/pa/ffi.c
|
|
===================================================================
|
|
--- libffi.orig/src/pa/ffi.c
|
|
+++ libffi/src/pa/ffi.c
|
|
@@ -1,9 +1,11 @@
|
|
/* -----------------------------------------------------------------------
|
|
- ffi.c - (c) 2003-2004 Randolph Chung <tausq@debian.org>
|
|
+ ffi.c - (c) 2011 Anthony Green
|
|
(c) 2008 Red Hat, Inc.
|
|
-
|
|
+ (c) 2006 Free Software Foundation, Inc.
|
|
+ (c) 2003-2004 Randolph Chung <tausq@debian.org>
|
|
+
|
|
HPPA Foreign Function Interface
|
|
- HP-UX PA ABI support (c) 2006 Free Software Foundation, Inc.
|
|
+ HP-UX PA ABI support
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
a copy of this software and associated documentation files (the
|
|
@@ -633,7 +635,8 @@ ffi_prep_closure_loc (ffi_closure* closu
|
|
UINT32 *tmp;
|
|
#endif
|
|
|
|
- FFI_ASSERT (cif->abi == FFI_PA32);
|
|
+ if (cif->abi != FFI_PA32)
|
|
+ return FFI_BAD_ABI;
|
|
|
|
/* Make a small trampoline that will branch to our
|
|
handler function. Use PC-relative addressing. */
|
|
Index: libffi/src/powerpc/ffi.c
|
|
===================================================================
|
|
--- libffi.orig/src/powerpc/ffi.c
|
|
+++ libffi/src/powerpc/ffi.c
|
|
@@ -1,7 +1,8 @@
|
|
/* -----------------------------------------------------------------------
|
|
- ffi.c - Copyright (c) 1998 Geoffrey Keating
|
|
- Copyright (C) 2007, 2008 Free Software Foundation, Inc
|
|
- Copyright (C) 2008 Red Hat, Inc
|
|
+ ffi.c - Copyright (C) 2011 Anthony Green
|
|
+ Copyright (C) 2008 Red Hat, Inc
|
|
+ Copyright (C) 2007, 2008 Free Software Foundation, Inc
|
|
+ Copyright (c) 1998 Geoffrey Keating
|
|
|
|
PowerPC Foreign Function Interface
|
|
|
|
@@ -949,14 +950,16 @@ ffi_prep_closure_loc (ffi_closure *closu
|
|
#ifdef POWERPC64
|
|
void **tramp = (void **) &closure->tramp[0];
|
|
|
|
- FFI_ASSERT (cif->abi == FFI_LINUX64);
|
|
+ if (cif->abi != FFI_LINUX64)
|
|
+ return FFI_BAD_ABI;
|
|
/* Copy function address and TOC from ffi_closure_LINUX64. */
|
|
memcpy (tramp, (char *) ffi_closure_LINUX64, 16);
|
|
tramp[2] = codeloc;
|
|
#else
|
|
unsigned int *tramp;
|
|
|
|
- FFI_ASSERT (cif->abi == FFI_GCC_SYSV || cif->abi == FFI_SYSV);
|
|
+ if (! (cif->abi == FFI_GCC_SYSV || cif->abi == FFI_SYSV))
|
|
+ return FFI_BAD_ABI;
|
|
|
|
tramp = (unsigned int *) &closure->tramp[0];
|
|
tramp[0] = 0x7c0802a6; /* mflr r0 */
|
|
Index: libffi/src/prep_cif.c
|
|
===================================================================
|
|
--- libffi.orig/src/prep_cif.c
|
|
+++ libffi/src/prep_cif.c
|
|
@@ -27,12 +27,6 @@
|
|
#include <ffi_common.h>
|
|
#include <stdlib.h>
|
|
|
|
-#ifndef __GNUC__
|
|
-#define __builtin_expect(x, expected_value) (x)
|
|
-#endif
|
|
-#define LIKELY(x) __builtin_expect((x),1)
|
|
-#define UNLIKELY(x) __builtin_expect((x),1)
|
|
-
|
|
/* Round up to FFI_SIZEOF_ARG. */
|
|
|
|
#define STACK_ARG_SIZE(x) ALIGN(x, FFI_SIZEOF_ARG)
|
|
@@ -44,11 +38,11 @@ static ffi_status initialize_aggregate(f
|
|
{
|
|
ffi_type **ptr;
|
|
|
|
- FFI_ASSERT(arg != NULL);
|
|
+ if (UNLIKELY(arg == NULL || arg->elements == NULL))
|
|
+ return FFI_BAD_TYPEDEF;
|
|
|
|
- FFI_ASSERT(arg->elements != NULL);
|
|
- FFI_ASSERT(arg->size == 0);
|
|
- FFI_ASSERT(arg->alignment == 0);
|
|
+ arg->size = 0;
|
|
+ arg->alignment = 0;
|
|
|
|
ptr = &(arg->elements[0]);
|
|
|
|
Index: libffi/src/x86/ffi64.c
|
|
===================================================================
|
|
--- libffi.orig/src/x86/ffi64.c
|
|
+++ libffi/src/x86/ffi64.c
|
|
@@ -1,7 +1,8 @@
|
|
/* -----------------------------------------------------------------------
|
|
- ffi64.c - Copyright (c) 2002, 2007 Bo Thorsen <bo@suse.de>
|
|
+ ffi64.c - Copyright (c) 20011 Anthony Green
|
|
Copyright (c) 2008, 2010 Red Hat, Inc.
|
|
-
|
|
+ Copyright (c) 2002, 2007 Bo Thorsen <bo@suse.de>
|
|
+
|
|
x86-64 Foreign Function Interface
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
@@ -28,12 +29,6 @@
|
|
#include <ffi.h>
|
|
#include <ffi_common.h>
|
|
|
|
-#ifndef __GNUC__
|
|
-#define __builtin_expect(x, expected_value) (x)
|
|
-#endif
|
|
-#define LIKELY(x) __builtin_expect((x),1)
|
|
-#define UNLIKELY(x) __builtin_expect((x),1)
|
|
-
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
|