Patchwork [07/10] libffi: make thread support optional

login
register
mail settings
Submitter Thomas Petazzoni
Date Nov. 17, 2012, 10:24 p.m.
Message ID <1952f1984c0a2fae4cd5eabc15f9b7eb37623224.1353191025.git.thomas.petazzoni@free-electrons.com>
Download mbox | patch
Permalink /patch/199883/
State Rejected
Headers show

Comments

Thomas Petazzoni - Nov. 17, 2012, 10:24 p.m.
Fixes:

  http://autobuild.buildroot.org/results/7ee57d01917ea72d1811469e482513dda2ceb1ea/build-end.log

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
 ...ffi-0003-Make-thread-support-conditionnal.patch |   73 ++++++++++++++++++++
 1 file changed, 73 insertions(+)
 create mode 100644 package/libffi/libffi-0003-Make-thread-support-conditionnal.patch
Peter Korsgaard - Nov. 17, 2012, 10:46 p.m.
>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@free-electrons.com> writes:

 Thomas> Fixes:
 Thomas>   http://autobuild.buildroot.org/results/7ee57d01917ea72d1811469e482513dda2ceb1ea/build-end.log

 Thomas> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> ---
 Thomas>  ...ffi-0003-Make-thread-support-conditionnal.patch |   73 ++++++++++++++++++++
 Thomas>  1 file changed, 73 insertions(+)
 Thomas>  create mode 100644 package/libffi/libffi-0003-Make-thread-support-conditionnal.patch

 Thomas> diff --git a/package/libffi/libffi-0003-Make-thread-support-conditionnal.patch b/package/libffi/libffi-0003-Make-thread-support-conditionnal.patch
 Thomas> new file mode 100644
 Thomas> index 0000000..90d98d6
 Thomas> --- /dev/null
 Thomas> +++ b/package/libffi/libffi-0003-Make-thread-support-conditionnal.patch
 Thomas> @@ -0,0 +1,73 @@
 Thomas> +From a7f6342120060564a829704cceb843e53e0b34a9 Mon Sep 17 00:00:00 2001
 Thomas> +From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> +Date: Sat, 17 Nov 2012 18:44:16 +0100
 Thomas> +Subject: [PATCH 3/3] Make thread support conditionnal
 Thomas> +
 Thomas> +When libffi is linked against a C library that does not have thread
 Thomas> +support, it is not necessary to use a mutex to protect global
 Thomas> +variables, since the application calling libffi cannot be
 Thomas> +multi-threaded.
 Thomas> +
 Thomas> +Therefore, make the libffi thread support conditionnal: when we're
 Thomas> +building against uClibc with no thread support, don't use the
 Thomas> +pthread_mutex.
 Thomas> +
 Thomas> +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 Thomas> +---
 Thomas> + src/closures.c |   12 ++++++++++++
 Thomas> + 1 file changed, 12 insertions(+)
 Thomas> +
 Thomas> +diff --git a/src/closures.c b/src/closures.c
 Thomas> +index 1b37827..3d151f6 100644
 Thomas> +--- a/src/closures.c
 Thomas> ++++ b/src/closures.c
 Thomas> +@@ -70,7 +70,10 @@
 Thomas> + 
 Thomas> + # elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */
 Thomas> + 
 Thomas> ++#if defined(__UCLIBC__) && !defined(__HAS_NO_THREADS__)
 Thomas> + #define USE_LOCKS 1
 Thomas> ++#endif

Ehh, what about glibc?

Shouldn't it be !__UCLIBC__ || !__HAS_NO_THREADS__ ?

Patch

diff --git a/package/libffi/libffi-0003-Make-thread-support-conditionnal.patch b/package/libffi/libffi-0003-Make-thread-support-conditionnal.patch
new file mode 100644
index 0000000..90d98d6
--- /dev/null
+++ b/package/libffi/libffi-0003-Make-thread-support-conditionnal.patch
@@ -0,0 +1,73 @@ 
+From a7f6342120060564a829704cceb843e53e0b34a9 Mon Sep 17 00:00:00 2001
+From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+Date: Sat, 17 Nov 2012 18:44:16 +0100
+Subject: [PATCH 3/3] Make thread support conditionnal
+
+When libffi is linked against a C library that does not have thread
+support, it is not necessary to use a mutex to protect global
+variables, since the application calling libffi cannot be
+multi-threaded.
+
+Therefore, make the libffi thread support conditionnal: when we're
+building against uClibc with no thread support, don't use the
+pthread_mutex.
+
+Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+---
+ src/closures.c |   12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/src/closures.c b/src/closures.c
+index 1b37827..3d151f6 100644
+--- a/src/closures.c
++++ b/src/closures.c
+@@ -70,7 +70,10 @@
+ 
+ # elif FFI_MMAP_EXEC_WRIT /* !FFI_EXEC_TRAMPOLINE_TABLE */
+ 
++#if defined(__UCLIBC__) && !defined(__HAS_NO_THREADS__)
+ #define USE_LOCKS 1
++#endif
++
+ #define USE_DL_PREFIX 1
+ #ifdef __GNUC__
+ #ifndef USE_BUILTIN_FFS
+@@ -116,7 +119,10 @@
+ #include <mntent.h>
+ #endif /* HAVE_MNTENT */
+ #include <sys/param.h>
++
++#if defined(__UCLIBC__) && !defined(__HAS_NO_THREADS__)
+ #include <pthread.h>
++#endif
+ 
+ /* We don't want sys/mman.h to be included after we redefine mmap and
+    dlmunmap.  */
+@@ -214,8 +220,10 @@ static int dlmunmap(void *, size_t);
+ 
+ #if !(defined(X86_WIN32) || defined(X86_WIN64) || defined(__OS2__)) || defined (__CYGWIN__) || defined(__INTERIX)
+ 
++#if defined(__UCLIBC__) && !defined(__HAS_NO_THREADS__)
+ /* A mutex used to synchronize access to *exec* variables in this file.  */
+ static pthread_mutex_t open_temp_exec_file_mutex = PTHREAD_MUTEX_INITIALIZER;
++#endif
+ 
+ /* A file descriptor of a temporary file from which we'll map
+    executable pages.  */
+@@ -473,9 +481,13 @@ dlmmap (void *start, size_t length, int prot,
+ 
+   if (execsize == 0 || execfd == -1)
+     {
++#if defined(__UCLIBC__) && !defined(__HAS_NO_THREADS__)
+       pthread_mutex_lock (&open_temp_exec_file_mutex);
++#endif
+       ptr = dlmmap_locked (start, length, prot, flags, offset);
++#if defined(__UCLIBC__) && !defined(__HAS_NO_THREADS__)
+       pthread_mutex_unlock (&open_temp_exec_file_mutex);
++#endif
+ 
+       return ptr;
+     }
+-- 
+1.7.9.5
+