dev-libs/libatomic_ops: Fix building with GCC-7
authorPeter Levine <plevine457@gmail.com>
Sat, 31 Mar 2018 05:19:48 +0000 (01:19 -0400)
committerAndreas Sturmlechner <asturm@gentoo.org>
Wed, 4 Apr 2018 21:09:32 +0000 (23:09 +0200)
Bug: https://bugs.gentoo.org/638222
Closes: https://github.com/gentoo/gentoo/pull/7729
Package-Manager: Portage-2.3.16, Repoman-2.3.6
Closes: https://github.com/gentoo/gentoo/pull/7729

dev-libs/libatomic_ops/files/libatomic_ops-7.6.4-gcc7.patch [new file with mode: 0644]
dev-libs/libatomic_ops/libatomic_ops-7.6.4.ebuild

diff --git a/dev-libs/libatomic_ops/files/libatomic_ops-7.6.4-gcc7.patch b/dev-libs/libatomic_ops/files/libatomic_ops-7.6.4-gcc7.patch
new file mode 100644 (file)
index 0000000..66cabfa
--- /dev/null
@@ -0,0 +1,40 @@
+Upstream commit: https://github.com/ivmai/libatomic_ops/commit/759fa976432e4f09b4a436774fff7119da050042
+
+From 759fa976432e4f09b4a436774fff7119da050042 Mon Sep 17 00:00:00 2001
+From: Ivan Maidanski <ivmai@mail.ru>
+Date: Thu, 29 Mar 2018 01:42:38 +0300
+Subject: [PATCH] Fix 'undefined reference to __atomic_load/store/cas_16' error
+ (gcc-7/x64)
+
+Issue #34 (libatomic_ops).
+
+* src/atomic_ops/sysdeps/gcc/x86.h [!AO_DISABLE_GCC_ATOMICS
+&& !__APPLE_CC__ && !__clang__ && AO_GNUC_PREREQ(7, 0)
+&& !AO_PREFER_BUILTIN_ATOMICS && !AO_THREAD_SANITIZER
+&& !__MINGW32__] (AO_SKIPATOMIC_double_compare_and_swap_ANY,
+AO_SKIPATOMIC_DOUBLE_LOAD_STORE_ANY): Define macro; add comment.
+---
+ src/atomic_ops/sysdeps/gcc/x86.h | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/src/atomic_ops/sysdeps/gcc/x86.h b/src/atomic_ops/sysdeps/gcc/x86.h
+index d7c06c5..b4ca39f 100644
+--- a/src/atomic_ops/sysdeps/gcc/x86.h
++++ b/src/atomic_ops/sysdeps/gcc/x86.h
+@@ -67,7 +67,15 @@
+ #       define AO_SKIPATOMIC_DOUBLE_LOAD_STORE_ANY
+ #     endif
+ #   endif /* __x86_64__ */
+-# endif /* __clang__ */
++
++# elif AO_GNUC_PREREQ(7, 0) && !defined(AO_PREFER_BUILTIN_ATOMICS) \
++       && !defined(AO_THREAD_SANITIZER) && !defined(__MINGW32__)
++    /* gcc-7.x/x64 (gcc-7.2, at least) requires -latomic flag in case   */
++    /* of double-word atomic operations use (but not in case of TSan).  */
++    /* TODO: Revise it for the future gcc-7 releases. */
++#   define AO_SKIPATOMIC_double_compare_and_swap_ANY
++#   define AO_SKIPATOMIC_DOUBLE_LOAD_STORE_ANY
++# endif /* __GNUC__ && !__clang__ */
+ # ifdef AO_SKIPATOMIC_DOUBLE_LOAD_STORE_ANY
+ #   define AO_SKIPATOMIC_double_load
index 8a81529189211261b03d35c7b78fa4ea94ff6582..efae3090fbcdaca0d220fb5b64ceeeba151d197e 100644 (file)
@@ -14,6 +14,8 @@ SLOT="0"
 KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sh ~sparc ~x86 ~amd64-fbsd ~x86-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris"
 IUSE=""
 
+PATCHES=( "${FILESDIR}"/${P}-gcc7.patch )
+
 multilib_src_configure() {
        ECONF_SOURCE=${S} econf
 }