This is the mail archive of the
libffi-discuss@sourceware.org
mailing list for the libffi project.
ctypes patches
- From: Thomas Heller <theller at ctypes dot org>
- To: libffi-discuss at sourceware dot org
- Date: Tue, 26 Feb 2008 17:49:04 +0100
- Subject: ctypes patches
Here are patches from the Python/ctypes libffi fork, for the src directory.
It would be great if they were applied, in full or partially, to the libffi CVS repository.
Comments on the patch:
- replace 'void (*)()' with 'void (*)(void)' everywhere.
- replace C++ comments with C comments in src/x86/ffi.c
- (src/x86/sysv.S) Patch #1560695: Add .note.GNU-stack to ctypes' sysv.S so that
ctypes isn't considered as requiring executable stacks.
- src/powerpc/darwin_closure.S: Try to fix the build on Mac OS X 10.3.
The 'live_support' segment attribute is not supported in this version.
- powerpc/ffi_darwin.S, powerpc/darwin.S, powerpc/darwin_closure.S, x86/darwin.S:
The complete body of these files is surrounded by a #ifdef <arch>/#endif block,
where <arch> is the architecture to build for. This allows (with additional
changes to configure.ac and configure) to build universal (fat) binaries on OS X.
Thomas
Index: src/alpha/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/alpha/ffi.c,v
retrieving revision 1.6
diff -u -r1.6 ffi.c
--- src/alpha/ffi.c 15 Feb 2008 01:24:05 -0000 1.6
+++ src/alpha/ffi.c 26 Feb 2008 16:33:18 -0000
@@ -39,7 +39,7 @@
# define FFI_TYPE_LONGDOUBLE 4
#endif
-extern void ffi_call_osf(void *, unsigned long, unsigned, void *, void (*)())
+extern void ffi_call_osf(void *, unsigned long, unsigned, void *, void (*)(void))
FFI_HIDDEN;
extern void ffi_closure_osf(void) FFI_HIDDEN;
@@ -76,7 +76,7 @@
void
-ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
{
unsigned long *stack, *argp;
long i, avn;
Index: src/arm/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/arm/ffi.c,v
retrieving revision 1.7
diff -u -r1.7 ffi.c
--- src/arm/ffi.c 15 Feb 2008 01:24:05 -0000 1.7
+++ src/arm/ffi.c 26 Feb 2008 16:33:12 -0000
@@ -149,9 +149,9 @@
}
extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
- unsigned, unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned, unsigned *, void (*fn)(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;
Index: src/cris/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/cris/ffi.c,v
retrieving revision 1.2
diff -u -r1.2 ffi.c
--- src/cris/ffi.c 29 Jan 2008 15:15:17 -0000 1.2
+++ src/cris/ffi.c 26 Feb 2008 16:33:13 -0000
@@ -236,11 +236,11 @@
extern void ffi_call_SYSV (int (*)(char *, extended_cif *),
extended_cif *,
- unsigned, unsigned, unsigned *, void (*fn) ())
+ unsigned, unsigned, unsigned *, void (*fn)(void))
__attribute__ ((__visibility__ ("hidden")));
void
-ffi_call (ffi_cif * cif, void (*fn) (), void *rvalue, void **avalue)
+ffi_call (ffi_cif * cif, void (*fn)(void), void *rvalue, void **avalue)
{
extended_cif ecif;
Index: src/frv/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/frv/ffi.c,v
retrieving revision 1.3
diff -u -r1.3 ffi.c
--- src/frv/ffi.c 15 Feb 2008 01:24:05 -0000 1.3
+++ src/frv/ffi.c 26 Feb 2008 16:35:06 -0000
@@ -126,10 +126,10 @@
extended_cif *,
unsigned, unsigned,
unsigned *,
- void (*fn)());
+ void (*fn)(void));
void ffi_call(ffi_cif *cif,
- void (*fn)(),
+ void (*fn)(void),
void *rvalue,
void **avalue)
{
Index: src/ia64/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/ia64/ffi.c,v
retrieving revision 1.6
diff -u -r1.6 ffi.c
--- src/ia64/ffi.c 15 Feb 2008 01:24:05 -0000 1.6
+++ src/ia64/ffi.c 26 Feb 2008 16:35:06 -0000
@@ -270,10 +270,10 @@
return FFI_OK;
}
-extern int ffi_call_unix (struct ia64_args *, PTR64, void (*)(), UINT64);
+extern int ffi_call_unix (struct ia64_args *, PTR64, void (*)(void), UINT64);
void
-ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
{
struct ia64_args *stack;
long i, avn, gpcount, fpcount;
Index: src/m32r/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/m32r/ffi.c,v
retrieving revision 1.3
diff -u -r1.3 ffi.c
--- src/m32r/ffi.c 29 Jan 2008 15:15:19 -0000 1.3
+++ src/m32r/ffi.c 26 Feb 2008 16:35:06 -0000
@@ -172,9 +172,9 @@
}
extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
- unsigned, unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned, unsigned *, void (*fn)(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;
Index: src/m68k/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/m68k/ffi.c,v
retrieving revision 1.4
diff -u -r1.4 ffi.c
--- src/m68k/ffi.c 29 Jan 2008 15:15:19 -0000 1.4
+++ src/m68k/ffi.c 26 Feb 2008 16:35:06 -0000
@@ -14,7 +14,7 @@
void ffi_call_SYSV (extended_cif *,
unsigned, unsigned,
- void *, void (*fn) ());
+ void *, void (*fn)(void));
void *ffi_prep_args (void *stack, extended_cif *ecif);
void ffi_closure_SYSV (ffi_closure *);
void ffi_closure_struct_SYSV (ffi_closure *);
@@ -166,7 +166,7 @@
}
void
-ffi_call (ffi_cif *cif, void (*fn) (), void *rvalue, void **avalue)
+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
{
extended_cif ecif;
Index: src/mips/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/mips/ffi.c,v
retrieving revision 1.9
diff -u -r1.9 ffi.c
--- src/mips/ffi.c 16 Feb 2008 01:02:00 -0000 1.9
+++ src/mips/ffi.c 26 Feb 2008 16:35:06 -0000
@@ -494,14 +494,14 @@
/* 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;
Index: src/pa/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/pa/ffi.c,v
retrieving revision 1.4
diff -u -r1.4 ffi.c
--- src/pa/ffi.c 15 Feb 2008 01:24:05 -0000 1.4
+++ src/pa/ffi.c 26 Feb 2008 16:35:01 -0000
@@ -368,9 +368,9 @@
extern void ffi_call_pa32(void (*)(UINT32 *, extended_cif *, unsigned),
extended_cif *, unsigned, unsigned, unsigned *,
- void (*fn)());
+ void (*fn)(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;
Index: src/powerpc/darwin.S
===================================================================
RCS file: /cvs/libffi/libffi/src/powerpc/darwin.S,v
retrieving revision 1.1
diff -u -r1.1 darwin.S
--- src/powerpc/darwin.S 24 Dec 2006 23:12:13 -0000 1.1
+++ src/powerpc/darwin.S 26 Feb 2008 16:34:55 -0000
@@ -1,3 +1,4 @@
+#ifdef __ppc__
/* -----------------------------------------------------------------------
darwin.S - Copyright (c) 2000 John Hornkvist
Copyright (c) 2004 Free Software Foundation, Inc.
@@ -243,3 +244,4 @@
.align LOG2_GPR_BYTES
LLFB0$non_lazy_ptr:
.g_long LFB0
+#endif
Index: src/powerpc/darwin_closure.S
===================================================================
RCS file: /cvs/libffi/libffi/src/powerpc/darwin_closure.S,v
retrieving revision 1.1
diff -u -r1.1 darwin_closure.S
--- src/powerpc/darwin_closure.S 24 Dec 2006 23:12:13 -0000 1.1
+++ src/powerpc/darwin_closure.S 26 Feb 2008 16:34:50 -0000
@@ -1,3 +1,4 @@
+#ifdef __ppc__
/* -----------------------------------------------------------------------
darwin_closure.S - Copyright (c) 2002, 2003, 2004, Free Software Foundation,
Inc. based on ppc_closure.S
@@ -246,7 +247,7 @@
/* END(ffi_closure_ASM) */
.data
-.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms+live_support
+.section __TEXT,__eh_frame,coalesced,no_toc+strip_static_syms
EH_frame1:
.set L$set$0,LECIE1-LSCIE1
.long L$set$0 ; Length of Common Information Entry
@@ -315,3 +316,4 @@
.align LOG2_GPR_BYTES
LLFB1$non_lazy_ptr:
.g_long LFB1
+#endif
Index: src/powerpc/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/powerpc/ffi.c,v
retrieving revision 1.6
diff -u -r1.6 ffi.c
--- src/powerpc/ffi.c 29 Jan 2008 15:15:19 -0000 1.6
+++ src/powerpc/ffi.c 26 Feb 2008 16:34:44 -0000
@@ -871,13 +871,13 @@
}
extern void ffi_call_SYSV(extended_cif *, unsigned, unsigned, unsigned *,
- void (*fn)());
+ void (*fn)(void));
extern void FFI_HIDDEN ffi_call_LINUX64(extended_cif *, unsigned long,
unsigned long, unsigned long *,
- void (*fn)());
+ void (*fn)(void));
void
-ffi_call(ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
{
extended_cif ecif;
Index: src/powerpc/ffi_darwin.c
===================================================================
RCS file: /cvs/libffi/libffi/src/powerpc/ffi_darwin.c,v
retrieving revision 1.3
diff -u -r1.3 ffi_darwin.c
--- src/powerpc/ffi_darwin.c 29 Jan 2008 15:15:20 -0000 1.3
+++ src/powerpc/ffi_darwin.c 26 Feb 2008 16:34:40 -0000
@@ -1,3 +1,4 @@
+#if !(defined(__APPLE__) && !defined(__ppc__))
/* -----------------------------------------------------------------------
ffi_darwin.c
@@ -425,11 +426,11 @@
}
extern void ffi_call_AIX(extended_cif *, unsigned, unsigned, unsigned *,
- void (*fn)(), void (*fn2)());
+ void (*fn)(void), void (*fn2)(void));
extern void ffi_call_DARWIN(extended_cif *, unsigned, unsigned, unsigned *,
- void (*fn)(), void (*fn2)());
+ void (*fn)(void), void (*fn2)(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;
@@ -798,3 +799,4 @@
/* Tell ffi_closure_ASM to perform return type promotions. */
return cif->rtype->type;
}
+#endif
Index: src/s390/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/s390/ffi.c,v
retrieving revision 1.4
diff -u -r1.4 ffi.c
--- src/s390/ffi.c 29 Jan 2008 15:15:20 -0000 1.4
+++ src/s390/ffi.c 26 Feb 2008 16:34:36 -0000
@@ -88,7 +88,7 @@
void (*)(unsigned char *, extended_cif *),
unsigned,
void *,
- void (*fn)());
+ void (*fn)(void));
extern void ffi_closure_SYSV(void);
@@ -498,7 +498,7 @@
void
ffi_call(ffi_cif *cif,
- void (*fn)(),
+ void (*fn)(void),
void *rvalue,
void **avalue)
{
Index: src/sh/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/sh/ffi.c,v
retrieving revision 1.4
diff -u -r1.4 ffi.c
--- src/sh/ffi.c 15 Feb 2008 01:24:05 -0000 1.4
+++ src/sh/ffi.c 26 Feb 2008 16:34:28 -0000
@@ -406,9 +406,9 @@
}
extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
- unsigned, unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned, unsigned *, void (*fn)(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;
UINT64 trvalue;
Index: src/sh64/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/sh64/ffi.c,v
retrieving revision 1.3
diff -u -r1.3 ffi.c
--- src/sh64/ffi.c 15 Feb 2008 01:24:05 -0000 1.3
+++ src/sh64/ffi.c 26 Feb 2008 16:34:32 -0000
@@ -239,12 +239,12 @@
/*@out@*/ extended_cif *,
unsigned, unsigned, long long,
/*@out@*/ unsigned *,
- void (*fn)());
+ void (*fn)(void));
/*@=declundef@*/
/*@=exportheader@*/
void ffi_call(/*@dependent@*/ ffi_cif *cif,
- void (*fn)(),
+ void (*fn)(void),
/*@out@*/ void *rvalue,
/*@dependent@*/ void **avalue)
{
Index: src/sparc/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/sparc/ffi.c,v
retrieving revision 1.6
diff -u -r1.6 ffi.c
--- src/sparc/ffi.c 15 Feb 2008 01:24:05 -0000 1.6
+++ src/sparc/ffi.c 26 Feb 2008 16:34:24 -0000
@@ -359,13 +359,13 @@
#ifdef SPARC64
extern int ffi_call_v9(void *, extended_cif *, unsigned,
- unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned *, void (*fn)(void));
#else
extern int ffi_call_v8(void *, extended_cif *, unsigned,
- unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned *, void (*fn)(void));
#endif
-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;
void *rval = rvalue;
Index: src/x86/darwin.S
===================================================================
RCS file: /cvs/libffi/libffi/src/x86/darwin.S,v
retrieving revision 1.3
diff -u -r1.3 darwin.S
--- src/x86/darwin.S 15 Feb 2008 01:24:06 -0000 1.3
+++ src/x86/darwin.S 26 Feb 2008 16:34:19 -0000
@@ -1,3 +1,4 @@
+#ifdef __i386__
/* -----------------------------------------------------------------------
darwin.S - Copyright (c) 1996, 1998, 2001, 2002, 2003, 2005 Red Hat, Inc.
Copyright (C) 2008 Free Software Foundation, Inc.
@@ -441,3 +442,5 @@
#endif
#endif /* ifndef __x86_64__ */
+
+#endif /* defined __i386__ */
Index: src/x86/ffi.c
===================================================================
RCS file: /cvs/libffi/libffi/src/x86/ffi.c,v
retrieving revision 1.12
diff -u -r1.12 ffi.c
--- src/x86/ffi.c 15 Feb 2008 01:24:06 -0000 1.12
+++ src/x86/ffi.c 26 Feb 2008 16:34:12 -0000
@@ -180,15 +180,15 @@
}
extern void ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *,
- unsigned, unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned, unsigned *, void (*fn)(void));
#ifdef X86_WIN32
extern void ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *,
- unsigned, unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned, unsigned *, void (*fn)(void));
#endif /* X86_WIN32 */
-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;
@@ -249,7 +249,7 @@
void **respp;
void *args;
{
- // our various things...
+ /* our various things... */
ffi_cif *cif;
void **arg_area;
@@ -423,16 +423,16 @@
extern void
ffi_call_SYSV(void (*)(char *, extended_cif *), extended_cif *, unsigned,
- unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned *, void (*fn)(void));
#ifdef X86_WIN32
extern void
ffi_call_STDCALL(void (*)(char *, extended_cif *), extended_cif *, unsigned,
- unsigned, unsigned *, void (*fn)());
+ unsigned, unsigned *, void (*fn)(void));
#endif /* X86_WIN32 */
void
-ffi_raw_call(ffi_cif *cif, void (*fn)(), void *rvalue, ffi_raw *fake_avalue)
+ffi_raw_call(ffi_cif *cif, void (*fn)(void), void *rvalue, ffi_raw *fake_avalue)
{
extended_cif ecif;
void **avalue = (void **)fake_avalue;
Index: src/x86/ffi64.c
===================================================================
RCS file: /cvs/libffi/libffi/src/x86/ffi64.c,v
retrieving revision 1.3
diff -u -r1.3 ffi64.c
--- src/x86/ffi64.c 15 Feb 2008 01:24:06 -0000 1.3
+++ src/x86/ffi64.c 26 Feb 2008 16:33:32 -0000
@@ -43,7 +43,7 @@
};
extern void ffi_call_unix64 (void *args, unsigned long bytes, unsigned flags,
- void *raddr, void (*fnaddr)(), unsigned ssecount);
+ void *raddr, void (*fnaddr)(void), unsigned ssecount);
/* All reference to register classes here is identical to the code in
gcc/config/i386/i386.c. Do *not* change one without the other. */
@@ -340,7 +340,7 @@
}
void
-ffi_call (ffi_cif *cif, void (*fn)(), void *rvalue, void **avalue)
+ffi_call (ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
{
enum x86_64_reg_class classes[MAX_CLASSES];
char *stack, *argp;
Index: src/x86/sysv.S
===================================================================
RCS file: /cvs/libffi/libffi/src/x86/sysv.S,v
retrieving revision 1.8
diff -u -r1.8 sysv.S
--- src/x86/sysv.S 15 Feb 2008 01:24:06 -0000 1.8
+++ src/x86/sysv.S 26 Feb 2008 16:33:37 -0000
@@ -431,3 +431,7 @@
#endif
#endif /* ifndef __x86_64__ */
+
+#ifdef __ELF__
+.section .note.GNU-stack,"",%progbits
+#endif