Message ID | 1410784002-8659-1-git-send-email-jezz@sysmic.org |
---|---|
State | Changes Requested |
Headers | show |
Dear Jérôme Pouiller, On Mon, 15 Sep 2014 14:26:41 +0200, Jérôme Pouiller wrote: > From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > > Fixes: > > http://autobuild.buildroot.org/results/7ee57d01917ea72d1811469e482513dda2ceb1ea/build-end.log > > Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> > Signed-off-by: Jérôme Pouiller <jezz@sysmic.org> To be honest, I am wondering if we really should bother merging a patch to make libffi usable on configurations that have thread support disabled. Nowadays, not having thread support is also impossible due to the large number of libraries/applications that rely on threads. libffi is generally used in "big" things like Python or glib, so not having thread support in systems using such big things is a bit unlikely. In addition, I'm not sure the patch could be upstreamed as is, which means we would have to carry it in Buildroot forever. Peter, Arnout, Gustavo, what is your point of view on this? Thomas
On 10/29/2014 06:24 PM, Thomas Petazzoni wrote: > To be honest, I am wondering if we really should bother merging a patch > to make libffi usable on configurations that have thread support > disabled. Nowadays, not having thread support is also impossible due to > the large number of libraries/applications that rely on threads. libffi > is generally used in "big" things like Python or glib, so not having > thread support in systems using such big things is a bit unlikely. > > In addition, I'm not sure the patch could be upstreamed as is, which > means we would have to carry it in Buildroot forever. > > Peter, Arnout, Gustavo, what is your point of view on this? +1, ditching threads (uClibc) is for really small targets which these days would mostly mean noMMU. Regards.
On 29/10/14 22:24, Thomas Petazzoni wrote: > Dear Jérôme Pouiller, > > On Mon, 15 Sep 2014 14:26:41 +0200, Jérôme Pouiller wrote: >> From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> >> >> Fixes: >> >> http://autobuild.buildroot.org/results/7ee57d01917ea72d1811469e482513dda2ceb1ea/build-end.log >> >> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> >> Signed-off-by: Jérôme Pouiller <jezz@sysmic.org> > > To be honest, I am wondering if we really should bother merging a patch > to make libffi usable on configurations that have thread support > disabled. Nowadays, not having thread support is also impossible due to > the large number of libraries/applications that rely on threads. libffi > is generally used in "big" things like Python or glib, so not having > thread support in systems using such big things is a bit unlikely. > > In addition, I'm not sure the patch could be upstreamed as is, which > means we would have to carry it in Buildroot forever. > > Peter, Arnout, Gustavo, what is your point of view on this? I agree. Removing toolchain requirements from a package is really a feature patch, so we shouldn't do it unless it's upstreamable or when it's more of a build issue than a code issue. There may be an exception when a package that has a lot of dependants suddenly grows a toolchain dependency, but that's not the case here. On the other hand, why shouldn't this patch be upstreamable? Regards, Arnout
Dear Arnout Vandecappelle, On Thu, 30 Oct 2014 09:09:35 +0100, Arnout Vandecappelle wrote: > I agree. Removing toolchain requirements from a package is really a feature > patch, so we shouldn't do it unless it's upstreamable or when it's more of a > build issue than a code issue. There may be an exception when a package that has > a lot of dependants suddenly grows a toolchain dependency, but that's not the > case here. Agreed. > On the other hand, why shouldn't this patch be upstreamable? Because it shouldn't hardcode: +#if !defined(__UCLIBC__) || !defined(__HAS_NO_THREADS__) But instead detect in configure.ac if threads are available, and then use that. So, what I would propose is that if Jérôme is really interested in having libffi available in non-threaded configurations, he works on a patch that is upstreamable, submit it upstream, and once it's upstream, we backport it in Buildroot, until upstream does a new release. What do you think? Thomas
On Thursday 30 October 2014 11:31:34 Thomas Petazzoni wrote: > Dear Arnout Vandecappelle, > > On Thu, 30 Oct 2014 09:09:35 +0100, Arnout Vandecappelle wrote: > > I agree. Removing toolchain requirements from a package is really a > > feature > > > > patch, so we shouldn't do it unless it's upstreamable or when it's more of > > a build issue than a code issue. There may be an exception when a package > > that has a lot of dependants suddenly grows a toolchain dependency, but > > that's not the case here. > > Agreed. > > > On the other hand, why shouldn't this patch be upstreamable? > > Because it shouldn't hardcode: > > +#if !defined(__UCLIBC__) || !defined(__HAS_NO_THREADS__) > > But instead detect in configure.ac if threads are available, and then > use that. > > So, what I would propose is that if Jérôme is really interested in > having libffi available in non-threaded configurations, he works on a > patch that is upstreamable, submit it upstream, and once it's upstream, > we backport it in Buildroot, until upstream does a new release. My only objective was to fix properly an autobuilder failure :). We can keep current implementation and mark this patch as rejected. I have noticed that dependency to BR2_TOOLCHAIN_HAS_THREADS is not properly propagated to all packages that depend on python. I will check that (and send a patch before 2014.11rc1 release).
diff --git a/package/libffi/libffi-006-Make-thread-support-conditionnal.patch b/package/libffi/libffi-006-Make-thread-support-conditionnal.patch new file mode 100644 index 0000000..72e7e5d --- /dev/null +++ b/package/libffi/libffi-006-Make-thread-support-conditionnal.patch @@ -0,0 +1,74 @@ +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> +Signed-off-by: Jérôme Pouiller <jezz@sysmic.org> +--- + 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 +