The package rpms/nspr.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/nspr.git/commit/?id=61be66d1e3283....
Change:
+%ifarch i686 x86_64
Thanks.
Full change:
============
commit 61be66d1e328383f72c9392738a0bc8b68cf1a45
Author: Paolo Bonzini <pbonzini(a)redhat.com>
Date: Wed Mar 13 17:24:33 2019 +0100
prefer gcc atomics on i686 and x86_64, to ensure gnu.property notes are there
Patch originally by Daiki Ueno.
diff --git a/nspr-gcc-atomics.patch b/nspr-gcc-atomics.patch
new file mode 100644
index 0000000..b94e840
--- /dev/null
+++ b/nspr-gcc-atomics.patch
@@ -0,0 +1,77 @@
+diff --git a/pr/include/md/_linux.h b/pr/include/md/_linux.h
+--- a/pr/include/md/_linux.h
++++ b/pr/include/md/_linux.h
+@@ -82,53 +82,73 @@
+ #define NO_DLOPEN_NULL
+ #endif
+
+ #if defined(__FreeBSD_kernel__) || defined(__GNU__)
+ #define _PR_HAVE_SOCKADDR_LEN
+ #endif
+
+ #if defined(__i386__)
++#if defined(__GNUC__)
++/* Use GCC built-in functions */
++#define _PR_HAVE_ATOMIC_OPS
++#define _MD_INIT_ATOMIC()
++#define _MD_ATOMIC_INCREMENT(ptr) __sync_add_and_fetch(ptr, 1)
++#define _MD_ATOMIC_DECREMENT(ptr) __sync_sub_and_fetch(ptr, 1)
++#define _MD_ATOMIC_ADD(ptr, i) __sync_add_and_fetch(ptr, i)
++#define _MD_ATOMIC_SET(ptr, nv) __sync_lock_test_and_set(ptr, nv)
++#else
+ #define _PR_HAVE_ATOMIC_OPS
+ #define _MD_INIT_ATOMIC()
+ extern PRInt32 _PR_x86_AtomicIncrement(PRInt32 *val);
+ #define _MD_ATOMIC_INCREMENT _PR_x86_AtomicIncrement
+ extern PRInt32 _PR_x86_AtomicDecrement(PRInt32 *val);
+ #define _MD_ATOMIC_DECREMENT _PR_x86_AtomicDecrement
+ extern PRInt32 _PR_x86_AtomicAdd(PRInt32 *ptr, PRInt32 val);
+ #define _MD_ATOMIC_ADD _PR_x86_AtomicAdd
+ extern PRInt32 _PR_x86_AtomicSet(PRInt32 *val, PRInt32 newval);
+ #define _MD_ATOMIC_SET _PR_x86_AtomicSet
+ #endif
++#endif
+
+ #if defined(__ia64__)
+ #define _PR_HAVE_ATOMIC_OPS
+ #define _MD_INIT_ATOMIC()
+ extern PRInt32 _PR_ia64_AtomicIncrement(PRInt32 *val);
+ #define _MD_ATOMIC_INCREMENT _PR_ia64_AtomicIncrement
+ extern PRInt32 _PR_ia64_AtomicDecrement(PRInt32 *val);
+ #define _MD_ATOMIC_DECREMENT _PR_ia64_AtomicDecrement
+ extern PRInt32 _PR_ia64_AtomicAdd(PRInt32 *ptr, PRInt32 val);
+ #define _MD_ATOMIC_ADD _PR_ia64_AtomicAdd
+ extern PRInt32 _PR_ia64_AtomicSet(PRInt32 *val, PRInt32 newval);
+ #define _MD_ATOMIC_SET _PR_ia64_AtomicSet
+ #endif
+
+ #if defined(__x86_64__)
++#if defined(__GNUC__)
++/* Use GCC built-in functions */
++#define _PR_HAVE_ATOMIC_OPS
++#define _MD_INIT_ATOMIC()
++#define _MD_ATOMIC_INCREMENT(ptr) __sync_add_and_fetch(ptr, 1)
++#define _MD_ATOMIC_DECREMENT(ptr) __sync_sub_and_fetch(ptr, 1)
++#define _MD_ATOMIC_ADD(ptr, i) __sync_add_and_fetch(ptr, i)
++#define _MD_ATOMIC_SET(ptr, nv) __sync_lock_test_and_set(ptr, nv)
++#else
+ #define _PR_HAVE_ATOMIC_OPS
+ #define _MD_INIT_ATOMIC()
+ extern PRInt32 _PR_x86_64_AtomicIncrement(PRInt32 *val);
+ #define _MD_ATOMIC_INCREMENT _PR_x86_64_AtomicIncrement
+ extern PRInt32 _PR_x86_64_AtomicDecrement(PRInt32 *val);
+ #define _MD_ATOMIC_DECREMENT _PR_x86_64_AtomicDecrement
+ extern PRInt32 _PR_x86_64_AtomicAdd(PRInt32 *ptr, PRInt32 val);
+ #define _MD_ATOMIC_ADD _PR_x86_64_AtomicAdd
+ extern PRInt32 _PR_x86_64_AtomicSet(PRInt32 *val, PRInt32 newval);
+ #define _MD_ATOMIC_SET _PR_x86_64_AtomicSet
+ #endif
++#endif
+
+ #if defined(__or1k__)
+ #if defined(__GNUC__)
+ /* Use GCC built-in functions */
+ #define _PR_HAVE_ATOMIC_OPS
+ #define _MD_INIT_ATOMIC()
+ #define _MD_ATOMIC_INCREMENT(ptr) __sync_add_and_fetch(ptr, 1)
+ #define _MD_ATOMIC_DECREMENT(ptr) __sync_sub_and_fetch(ptr, 1)
diff --git a/nspr.spec b/nspr.spec
index 7eae55e..350d1ec 100644
--- a/nspr.spec
+++ b/nspr.spec
@@ -11,7 +11,7 @@ rpm.define(string.format("nspr_archive_version %s",
Summary: Netscape Portable Runtime
Name: nspr
Version: %{nspr_version}
-Release: 2%{?dist}
+Release: 3%{?dist}
License: MPLv2.0
URL:
http://www.mozilla.org/projects/nspr/
Conflicts: filesystem < 3
@@ -24,6 +24,7 @@ Source0: %{name}-%{nspr_archive_version}.tar.gz
Source1: nspr-config.xml
Patch1: nspr-config-pc.patch
+Patch2: nspr-gcc-atomics.patch
%description
NSPR provides platform independence for non-GUI operating system
@@ -54,6 +55,9 @@ Header files for doing development with the Netscape Portable Runtime.
cp ./nspr/config/nspr-config.in ./nspr/config/nspr-config-pc.in
%patch1 -p0 -b .flags
+pushd nspr
+%patch2 -p1 -b .gcc-atomics
+popd
%build
%define _configure ./nspr/configure
@@ -72,6 +76,10 @@ cp ./nspr/config/nspr-config.in ./nspr/config/nspr-config-pc.in
--enable-optimize="$RPM_OPT_FLAGS" \
--disable-debug
+# The assembly files are only for legacy atomics, to which we prefer GCC atomics
+%ifarch i686 x86_64
+sed -i '/^PR_MD_ASFILES/d' config/autoconf.mk
+%endif
make
date +"%e %B %Y" | tr -d '\n' > date.xml
@@ -140,6 +148,9 @@ done
%{_mandir}/man*/*
%changelog
+* Wed Mar 13 2019 Paolo Bonzini <pbonzini(a)redhat.com> - 4.20.0-3
+- Prefer GCC atomics on i686 and x86_64
+
* Fri Feb 01 2019 Fedora Release Engineering <releng(a)fedoraproject.org> - 4.20.0-2
- Rebuilt for
https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild