[boost/f21] Boost.Atomic: Fixed incorrect initialization of 128-bit values
Petr Machata
pmachata at fedoraproject.org
Fri Jan 2 13:36:17 UTC 2015
commit 6c7e1e8c6e64a19cb6fe858b47241c384937ecfc
Author: Petr Machata <pmachata at redhat.com>
Date: Fri Jan 2 14:12:06 2015 +0100
Boost.Atomic: Fixed incorrect initialization of 128-bit values
boost-1.55.0-atomic-int128_1.patch | 48 +++++++++++++++++++++++++
boost-1.55.0-atomic-int128_2.patch | 68 ++++++++++++++++++++++++++++++++++++
boost.spec | 15 +++++++-
3 files changed, 130 insertions(+), 1 deletions(-)
---
diff --git a/boost-1.55.0-atomic-int128_1.patch b/boost-1.55.0-atomic-int128_1.patch
new file mode 100644
index 0000000..eafd53e
--- /dev/null
+++ b/boost-1.55.0-atomic-int128_1.patch
@@ -0,0 +1,48 @@
+From 6bb71fdd8f7cc346d90fb14beb38b7297fc1ffd9 Mon Sep 17 00:00:00 2001
+From: Andrey Semashev <andrey.semashev at gmail.com>
+Date: Sun, 26 Jan 2014 13:58:48 +0400
+Subject: [PATCH] Fixed incorrect initialization of 128-bit values, when no
+ native support for 128-bit integers is available.
+
+---
+ include/boost/atomic/detail/cas128strong.hpp | 10 +++++++---
+ 1 file changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/include/boost/atomic/detail/cas128strong.hpp b/include/boost/atomic/detail/cas128strong.hpp
+index 906c13e..dcb4d7d 100644
+--- a/include/boost/atomic/detail/cas128strong.hpp
++++ b/include/boost/atomic/detail/cas128strong.hpp
+@@ -196,15 +196,17 @@ protected:
+
+ public:
+ BOOST_DEFAULTED_FUNCTION(base_atomic(void), {})
+- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
++ explicit base_atomic(value_type const& v) BOOST_NOEXCEPT
+ {
++ memset(&v_, 0, sizeof(v_));
+ memcpy(&v_, &v, sizeof(value_type));
+ }
+
+ void
+ store(value_type const& value, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+- storage_type value_s = 0;
++ storage_type value_s;
++ memset(&value_s, 0, sizeof(value_s));
+ memcpy(&value_s, &value, sizeof(value_type));
+ platform_fence_before_store(order);
+ platform_store128(value_s, &v_);
+@@ -247,7 +249,9 @@ public:
+ memory_order success_order,
+ memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+- storage_type expected_s = 0, desired_s = 0;
++ storage_type expected_s, desired_s;
++ memset(&expected_s, 0, sizeof(expected_s));
++ memset(&desired_s, 0, sizeof(desired_s));
+ memcpy(&expected_s, &expected, sizeof(value_type));
+ memcpy(&desired_s, &desired, sizeof(value_type));
+
+--
+2.1.0
+
diff --git a/boost-1.55.0-atomic-int128_2.patch b/boost-1.55.0-atomic-int128_2.patch
new file mode 100644
index 0000000..212a67e
--- /dev/null
+++ b/boost-1.55.0-atomic-int128_2.patch
@@ -0,0 +1,68 @@
+From e4bde20f2eec0a51be14533871d2123bd2ab9cf3 Mon Sep 17 00:00:00 2001
+From: Andrey Semashev <andrey.semashev at gmail.com>
+Date: Fri, 28 Feb 2014 12:43:11 +0400
+Subject: [PATCH] More compilation fixes for the case when 128-bit integers are
+ not supported.
+
+---
+ include/boost/atomic/detail/gcc-atomic.hpp | 17 ++++++++++++-----
+ 1 file changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/include/boost/atomic/detail/gcc-atomic.hpp b/include/boost/atomic/detail/gcc-atomic.hpp
+index a130590..4af99a1 100644
+--- a/include/boost/atomic/detail/gcc-atomic.hpp
++++ b/include/boost/atomic/detail/gcc-atomic.hpp
+@@ -958,14 +958,16 @@ protected:
+
+ public:
+ BOOST_DEFAULTED_FUNCTION(base_atomic(void), {})
+- explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0)
++ explicit base_atomic(value_type const& v) BOOST_NOEXCEPT
+ {
++ memset(&v_, 0, sizeof(v_));
+ memcpy(&v_, &v, sizeof(value_type));
+ }
+
+ void store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+- storage_type tmp = 0;
++ storage_type tmp;
++ memset(&tmp, 0, sizeof(tmp));
+ memcpy(&tmp, &v, sizeof(value_type));
+ __atomic_store_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order));
+ }
+@@ -980,7 +982,8 @@ public:
+
+ value_type exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT
+ {
+- storage_type tmp = 0;
++ storage_type tmp;
++ memset(&tmp, 0, sizeof(tmp));
+ memcpy(&tmp, &v, sizeof(value_type));
+ tmp = __atomic_exchange_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order));
+ value_type res;
+@@ -994,7 +997,9 @@ public:
+ memory_order success_order,
+ memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+- storage_type expected_s = 0, desired_s = 0;
++ storage_type expected_s, desired_s;
++ memset(&expected_s, 0, sizeof(expected_s));
++ memset(&desired_s, 0, sizeof(desired_s));
+ memcpy(&expected_s, &expected, sizeof(value_type));
+ memcpy(&desired_s, &desired, sizeof(value_type));
+ const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, false,
+@@ -1010,7 +1015,9 @@ public:
+ memory_order success_order,
+ memory_order failure_order) volatile BOOST_NOEXCEPT
+ {
+- storage_type expected_s = 0, desired_s = 0;
++ storage_type expected_s, desired_s;
++ memset(&expected_s, 0, sizeof(expected_s));
++ memset(&desired_s, 0, sizeof(desired_s));
+ memcpy(&expected_s, &expected, sizeof(value_type));
+ memcpy(&desired_s, &desired, sizeof(value_type));
+ const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, true,
+--
+2.1.0
+
diff --git a/boost.spec b/boost.spec
index 46e5698..1796330 100644
--- a/boost.spec
+++ b/boost.spec
@@ -36,7 +36,7 @@ Name: boost
Summary: The free peer-reviewed portable C++ source libraries
Version: 1.55.0
%define version_enc 1_55_0
-Release: 4%{?dist}
+Release: 6%{?dist}
License: Boost and MIT and Python
%define toplev_dirname %{name}_%{version_enc}
@@ -99,6 +99,7 @@ Patch5: boost-1.48.0-add-bjam-man-page.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=828856
# https://bugzilla.redhat.com/show_bug.cgi?id=828857
+# https://svn.boost.org/trac/boost/ticket/6701
Patch15: boost-1.50.0-pool.patch
# https://svn.boost.org/trac/boost/ticket/8844
@@ -160,6 +161,10 @@ Patch57: boost-1.55.0-spirit-unused_typedefs.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=1159960
Patch58: boost-1.54.0-smart_ptr-shared_ptr_at.patch
+# https://bugzilla.redhat.com/show_bug.cgi?id=1177066
+Patch59: boost-1.55.0-atomic-int128_1.patch
+Patch60: boost-1.55.0-atomic-int128_2.patch
+
%bcond_with tests
%bcond_with docs_generated
@@ -647,6 +652,8 @@ a number of significant features and is now developed independently
%patch56 -p1
%patch57 -p1
%patch58 -p1
+%patch59 -p2
+%patch60 -p2
# At least python2_version needs to be a macro so that it's visible in
# %%install as well.
@@ -1249,6 +1256,12 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/bjam.1*
%changelog
+* Fri Jan 2 2015 Petr Machata <pmachata at redhat.com> - 1.55.0-6
+- Boost.Atomic: Fixed incorrect initialization of 128-bit values, when
+ no native support for 128-bit integers is available.
+ (boost-1.55.0-atomic-int128_1.patch,
+ boost-1.55.0-atomic-int128_2.patch)
+
* Wed Nov 12 2014 Petr Machata <pmachata at redhat.com> - 1.55.0-4
- Fix boost::shared_ptr<T>::operator[], which was ill-formed for
non-array T's. (boost-1.54.0-smart_ptr-shared_ptr_at.patch)
More information about the scm-commits
mailing list