This is the mail archive of the libffi-discuss@sourceware.org mailing list for the libffi project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]