toolchain: add BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS hidden option
authorFabrice Fontaine <fontaine.fabrice@gmail.com>
Fri, 17 Aug 2018 22:10:13 +0000 (00:10 +0200)
committerThomas Petazzoni <thomas.petazzoni@bootlin.com>
Sat, 18 Aug 2018 12:32:07 +0000 (14:32 +0200)
Add BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS variable and
use it in BR2_TOOLCHAIN_HAS_GCC_BUG_64735.

This new variable will be used to select boost atomic when lock-free
atomic ints are not available

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
toolchain/Config.in

index 3a53a32a6d65410833c31c5596d8b05df76adf13..ad02af5215c986b96bbc97a39152ca2bbc93e7db 100644 (file)
@@ -69,18 +69,35 @@ comment "Toolchain Generic Options"
 config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_19615
        bool
 
-# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735
-# exception_ptr, nested_exception, and future from libstdc++ are not
-# available for architectures not supporting always lock-free atomic
-# ints before GCC 7
+# Atomic types can be:
+#  - never lock-free
+#  - sometimes lock-free
+#  - always lock-free
+# see https://en.cppreference.com/w/c/atomic/ATOMIC_LOCK_FREE_consts
+#
+# On most architectures, gcc provides "always lock-free" atomic types,
+# but a few architectures are limited to "sometimes lock-free"
+# types. This hidden option allows to know if the architecture
+# provides "always lock-free" atomic types.
+config BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
+       bool
+       default y
+       depends on !BR2_nios2
+       depends on !BR2_ARM_CPU_ARMV4
+       depends on !BR2_ARM_CPU_ARMV5
+       depends on !BR2_sparc_v8
+       depends on !BR2_m68k_cf5208
+
+# Prior to gcc 7.x, exception_ptr, nested_exception and future from
+# libstdc++ would only be provided on architectures that support
+# always lock-free atomic ints. See
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735. This issue has
+# been removed in GCC 7.x, where exception propagation is now
+# supported without lock-free atomic int.
 config BR2_TOOLCHAIN_HAS_GCC_BUG_64735
        bool
-       default y if BR2_nios2
-       default y if BR2_ARM_CPU_ARMV4
-       default y if BR2_ARM_CPU_ARMV5
-       default y if BR2_sparc_v8
-       default y if BR2_m68k_cf5208
-       depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_7
+       default y if !BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS && \
+               !BR2_TOOLCHAIN_GCC_AT_LEAST_7
 
 # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85180. This bug no
 # longer exists in gcc 8.x.