Commit a1a86ebf authored by Samuel Martin's avatar Samuel Martin Committed by Peter Korsgaard
Browse files

liburcu: disable build with gcc-4.8.x on ARM

Because of a gcc bug [1], liburcu checks for compiler version [2] and
stops the build prematurely if gcc-4.8.[0-2] is detected for ARM.

However a bug fix exists [3] and may be backported by ARM toolchain
providers; that's what is done in Buildroot [4] or Linaro [5].

So, this change:
- add a patch in liburcu to allow build with ARM gcc-4.8.2;
- adds a new hidden symbol to reflect the toolchain status with regard
  to this bug [1];
- and controls liburcu visibility.

However, a limitation of this is when the user is using a custom
toolchain; that's why the bug details have been added in the liburcu
help message.

[1] http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854
[2] http://git.lttng.org/?p=userspace-rcu.git;a=commitdiff;h=4b79310
[3] http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=204665
[4] http://git.buildroot.net/buildroot/commit/?id=c443c2be1768ebbdcb76c55d0a08fd7c983488c8
[5] http://bazaar.launchpad.net/~linaro-toolchain-dev/gcc-linaro/4.8/revision/122147



[Peter: hide normal toolchain comment if bug, add comment explaining issue if bug]
Signed-off-by: default avatarSamuel Martin <s.martin49@gmail.com>
Signed-off-by: default avatarPeter Korsgaard <peter@korsgaard.com>
parent 7e634a48
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
config BR2_PACKAGE_LIBURCU
	bool "liburcu"
	depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug
	depends on BR2_TOOLCHAIN_HAS_THREADS
	help
	  Userspace implementation of the Read-Copy-Update (RCU)
@@ -8,8 +9,18 @@ config BR2_PACKAGE_LIBURCU
	  the LTTng tracing infrastructure, but can be used for other
	  purposes as well.

	  On ARM, because of bug:
	    http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854
	  liburcu cannot be built using gcc 4.8.0, 4.8.1 or 4.8.2 without the
	  following bug fix:
	    http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=204665

	  http://lttng.org/urcu

comment "liburcu needs a toolchain w/ threads"
	depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug
	depends on !BR2_TOOLCHAIN_HAS_THREADS

comment "liburcu needs a toolchain not affected by GCC bug 58854"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_58854
+40 −0
Original line number Diff line number Diff line
From 54d8fe7ae40902d6d38e670f4024092f53c14e1f Mon Sep 17 00:00:00 2001
From: Samuel Martin <s.martin49@gmail.com>
Date: Sat, 8 Mar 2014 13:19:14 +0100
Subject: [PATCH] Only blacklist ARM gcc 4.8.0 and 4.8.1

Since many ARM toolchain providers include the bug fix for PR58854 in
their latest releases based on gcc-4.8.2, then only blacklist gcc 4.8.0
and 4.8.1.

Signed-off-by: Samuel Martin <s.martin49@gmail.com>
---
 urcu/compiler.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/urcu/compiler.h b/urcu/compiler.h
index 1e30903..56115f1 100644
--- a/urcu/compiler.h
+++ b/urcu/compiler.h
@@ -118,10 +118,17 @@
 				+ __GNUC_PATCHLEVEL__)
 
 /*
+ * Official gcc releases from 4.8.0 to 4.8.2 have the following bug,
+ * however, many arm toolchain providers have the included the fix for
+ * their latest 4.8.2 releases.
+ * So, we only blacklist gcc 4.8.0 and 4.8.1.
+ * Unfortunately, this bug is not easy to test, so we rely on the
+ * knowledge of the user on its compiler.
+ *
  * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854
  */
 # ifdef __ARMEL__
-#  if URCU_GCC_VERSION >= 40800 && URCU_GCC_VERSION <= 40802
+#  if URCU_GCC_VERSION >= 40800 && URCU_GCC_VERSION <= 40801
 #   error Your gcc version produces clobbered frame accesses
 #  endif
 # endif
-- 
1.9.0
+5 −0
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ config BR2_PACKAGE_LTTNG_LIBUST
	depends on BR2_LARGEFILE
	# liburcu only works on some architectures and requires threads support"
	depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug
	depends on BR2_TOOLCHAIN_HAS_THREADS
	help
	  Userspace tracing library for the Lttng tracing
@@ -20,3 +21,7 @@ config BR2_PACKAGE_LTTNG_LIBUST
comment "lttng-libust needs a toolchain w/ wchar, largefile, threads"
	depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64
	depends on !BR2_USE_WCHAR || !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug

comment "lttng-libust needs a toolchain not affected by GCC bug 58854"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_58854
+5 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@ config BR2_PACKAGE_LTTNG_TOOLS
	select BR2_PACKAGE_UTIL_LINUX_LIBUUID
	# liburcu only works on some architectures and requires thread support
	depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug
	depends on BR2_LARGEFILE
	depends on BR2_USE_WCHAR # util-linux
	depends on BR2_TOOLCHAIN_HAS_THREADS
@@ -31,3 +32,7 @@ comment "lttng-tools needs a toolchain w/ largefile, threads, wchar"
	depends on BR2_arm || BR2_armeb || BR2_i386 || BR2_powerpc || BR2_x86_64
	depends on !BR2_LARGEFILE || !BR2_TOOLCHAIN_HAS_THREADS || \
		!BR2_USE_WCHAR
	depends on !BR2_TOOLCHAIN_HAS_GCC_BUG_58854 # liburcu/gcc-4.8.x bug

comment "lttng-tools needs a toolchain not affected by GCC bug 58854"
	depends on BR2_TOOLCHAIN_HAS_GCC_BUG_58854
+3 −0
Original line number Diff line number Diff line
@@ -11,6 +11,9 @@ config BR2_LARGEFILE
config BR2_INET_IPV6
	bool

config BR2_TOOLCHAIN_HAS_GCC_BUG_58854
	bool

config BR2_TOOLCHAIN_HAS_NATIVE_RPC
	bool

Loading