Hello community,
here is the log from the commit of package glibc for openSUSE:Factory checked in at 2012-01-06 11:44:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/glibc (Old)
and /work/SRC/openSUSE:Factory/.glibc.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "glibc", Maintainer is "matz@suse.com"
Changes:
--------
--- /work/SRC/openSUSE:Factory/glibc/glibc.changes 2011-12-27 18:35:38.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.glibc.new/glibc.changes 2012-01-06 11:44:09.000000000 +0100
@@ -1,0 +2,44 @@
+Tue Jan 3 19:42:17 UTC 2012 - aj@suse.de
+
+- Compile unwind-dw2-fde-glibc.c with -fno-strict-aliasing
+ (patch glibc-strict-aliasing.diff)
+- Build on i686 a separate library for usage under Xen.
+
+-------------------------------------------------------------------
+Tue Jan 3 15:36:12 UTC 2012 - aj@suse.de
+
+- Only use -mno-tls-direct-seg-refs on 32-bit x86, it's not needed
+ on x86-64.
+
+-------------------------------------------------------------------
+Tue Jan 3 14:37:48 UTC 2012 - aj@suse.de
+
+- Cleanup spec file:
+ - experimental malloc is not experimental anymore and only option
+ (drop patch glibc-malloc-arena-max.diff)
+ - remove obsolete configure flags
+
+-------------------------------------------------------------------
+Tue Jan 3 08:40:28 UTC 2012 - aj@suse.de
+
+- Update to 2ba92745c36e:
+ - Update copyright years
+ - Fix miscompilation of posix/regex_internal.c with GCC 4.7.
+
+-------------------------------------------------------------------
+Tue Jan 3 08:23:44 UTC 2012 - aj@suse.de
+
+- Revert pthread-cond-wait change for now since it causes hangs
+ (patch pthread-cond-wait-revert.patch).
+
+-------------------------------------------------------------------
+Mon Dec 26 12:53:55 UTC 2011 - aj@suse.de
+
+- Update to c0da14cdda1f (glibc-ports: 8a70b2dcabbf):
+ - new locales
+ - many bugfixes
+ - glibc 2.15
+ - obsoletes tzfile-corruption-fix.patch,
+ glibc-2.14-32args-printf.patch
+
+-------------------------------------------------------------------
@@ -12,0 +57,10 @@
+Mon Dec 5 09:29:32 UTC 2011 - aj@suse.de
+
+- Update to 52ad36a21973 (glibc-ports: 4a40b38f6355):
+ * fix many warnings
+ * bugfixes
+ * obsolete patches glibc-strict-aliasing.diff and
+ glibc-arm-clone-unwind-fix.diff
+
+
+-------------------------------------------------------------------
@@ -32,0 +87,15 @@
+Tue Nov 15 12:49:56 UTC 2011 - aj@suse.de
+
+- nscd now monitors resolv.conf, so simplify glibc-2.4.90-nscd.diff
+ patch and re-enable it
+- Adjust and re-enable glibc-2.3.3-nscd-db-path.diff
+
+-------------------------------------------------------------------
+Tue Nov 15 12:10:32 UTC 2011 - aj@suse.de
+
+- Update to 09f93bd3d6b1:
+ - Clean up internal fopen uses to always use close-on-exec
+ - Optimized strcasecmp and strncasecmp for SSSE3 and SSE4.2 on x86-32
+ - bugfixes
+
+-------------------------------------------------------------------
@@ -60,0 +130,29 @@
+Wed Nov 2 13:52:36 UTC 2011 - aj@suse.de
+
+- Update to d35dce5213b3:
+ - caching of network information for getaddrinfo
+ - bugfixes
+
+-------------------------------------------------------------------
+Sat Oct 29 18:37:46 UTC 2011 - aj@suse.de
+
+- Update to 21b64b153631:
+ - various bugfixes
+
+-------------------------------------------------------------------
+Thu Oct 27 08:44:14 UTC 2011 - aj@suse.de
+
+- Update to 804791474dc1:
+ - more libm optimizations
+- Remove AMD libm routines due to new upstream libm optimizations
+ and interfaces.
+- Fix build on x86.
+
+-------------------------------------------------------------------
+Mon Oct 24 19:02:46 UTC 2011 - aj@suse.de
+
+- Update to a201fbcf9cc3:
+ - More libm optimizations
+ - Optimize wcslen, strnlen
+
+-------------------------------------------------------------------
@@ -71,0 +170,14 @@
+Tue Oct 18 07:42:40 UTC 2011 - aj@suse.de
+
+- Update to glibc head 99ce7b04edf1:
+ - Optimize many libm functions
+ - Optimize access to isXYZ and toXYZ tables
+ - Optimized memcmp and wmemcmp for x86-64 and x86-32
+ - Add parameter annotation to modf
+ - Support optimized isXXX functions in C++ code
+ - Optimized memchr, memrchr, rawmemchr for x86-32
+ - Add nscd netgroupcache
+- Disable libm-x86-64.diff.bz2 since it needs changes following the
+ libm optimzations.
+
+-------------------------------------------------------------------
@@ -98,0 +211,12 @@
+
+-------------------------------------------------------------------
+Thu Sep 29 12:58:59 UTC 2011 - aj@suse.de
+
+- Update to 68577918437e:
+ * Obsoleted patches: glibc-gconvcache-s390.diff,
+ glibc-2.3.5-nscd-zeronegtimeout.diff,
+ glibc-x86-bits-sigcontext.patch,
+ glibc-2.15-getsysstats-speedup.patch, glibc-2.13-warnings.fix,
+ glibc-2.13-localedef.patch,
+ glibc-fix-rwlock-stack-imbalance.patch, glibc-2.15-vsyscall.patch,
+ glibc-2.15-avoid-vsyscall.patch
Old:
----
glibc-2.13-localedef.patch
glibc-2.13-warnings.fix
glibc-2.14-32args-printf.patch
glibc-2.14.1-4f2b767fef50.tar.bz2
glibc-2.15-avoid-vsyscall.patch
glibc-2.15-getsysstats-speedup.patch
glibc-2.15-ifunc-trace.patch
glibc-2.15-vsyscall.patch
glibc-2.3.3-amd64-s_ceil.diff
glibc-2.3.5-nscd-zeronegtimeout.diff
glibc-arm-clone-unwind-fix.diff
glibc-fix-rwlock-stack-imbalance.patch
glibc-gconvcache-s390.diff
glibc-malloc-arena-max.diff
glibc-ports-2.14.1.tar.bz2
glibc-ports-2.15-ifunc-trace.patch
glibc-x86-bits-sigcontext.patch
libm-x86-64-exceptions.diff
libm-x86-64.diff.bz2
tzfile-corruption-fix.patch
New:
----
glibc-2.15-2ba92745c36e.tar.bz2
glibc-2.15-nss_db-declarations.patch
glibc-ports-2.15-8a70b2dcabbf.tar.bz2
pthread-cond-wait-revert.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ glibc.spec ++++++
--- /var/tmp/diff_new_pack.rzGzDY/_old 2012-01-06 11:44:12.000000000 +0100
+++ /var/tmp/diff_new_pack.rzGzDY/_new 2012-01-06 11:44:12.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package glibc
#
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -56,14 +56,6 @@
# 2.6.16 is the SLES 10 kernel, use this as oldest supported kernel
# since many SUSE build machines have it
%define enablekernel 2.6.16
-%ifarch ppc ppc64
-# On PowerPC we got a memory corruption during building, disabling
-# exp_malloc fixed it. Disable it until we have found and fixed the
-# root cause.
-%define exp_malloc 0
-%else
-%define exp_malloc 1
-%endif
# ngpt was used in 8.1 and SLES8
Obsoletes: ngpt < 2.2.2
Obsoletes: ngpt-devel < 2.2.2
@@ -77,15 +69,16 @@
%ifarch ppc
Obsoletes: glibc-32bit
%endif
-Version: 2.14.1
-Release: 0
-%define git_id 4f2b767fef50
-%define glibc_ports_ver %version
+Version: 2.15
+Release: 11
+%define git_id 2ba92745c36e
+%define glibc_ports_ver 2.15
+%define ports_git_id 8a70b2dcabbf
Url: http://www.gnu.org/software/libc/libc.html
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Source: glibc-%{version}-%{git_id}.tar.bz2
%define glibc_ports_dir glibc-ports-%{glibc_ports_ver}
-Source2: http://ftp.gnu.org/gnu/glibc/glibc-ports-%{glibc_ports_ver}.tar.bz2
+Source2: glibc-ports-%{glibc_ports_ver}-%{ports_git_id}.tar.bz2
Source3: noversion.tar.bz2
Source4: manpages.tar.bz2
Source8: nsswitch.conf
@@ -130,23 +123,17 @@
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch12: glibc-2.3.2.no_archive.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
-Patch13: libm-x86-64.diff.bz2
-# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch14: glibc-2.3.90-bindresvport.blacklist.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch16: glibc-2.4.90-no_NO.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
-Patch18: glibc-2.3.3-amd64-s_ceil.diff
-# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch20: glibc-2.4-china.diff
# PATCH-FIX-OPENSUSE Fix gb18030 code bnc#54080
Patch21: glibc-2.3.4-gb18030-big5hkscs.diff.bz2
-# PATCH-FIX-OPENSUSE Handle
+# PATCH-FIX-OPENSUSE Handle timestamp, adjust nscd.conf
Patch22: glibc-2.4.90-nscd.diff
-# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
+# PATCH-FIX-OPENSUSE Fix path for nscd databases
Patch23: glibc-2.3.3-nscd-db-path.diff
-# PATCH-FIX-UPSTREAM - handle zero negative timeout, committed for glibc 2.15
-Patch24: glibc-2.3.5-nscd-zeronegtimeout.diff
# PATCH-FIX-OPENSUSE prefer -lang rpm packages
Patch25: glibc-2.3.90-langpackdir.diff
# PATCH-FIX-OPENSUSE Fix hangs in UDP RPC calls bso#5379 bnc#257745 aj@suse.de
@@ -161,8 +148,6 @@
Patch36: glibc-no-unwind-tables.diff
# PATCH-FEATURE-SLE increase cpusetsize to 4096, needs to be kept for compatibility kukuk@suse.de
Patch38: glibc-cpusetsize.diff
-# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
-Patch40: libm-x86-64-exceptions.diff
# PATCH-FIX-OPENSUSE - Allow compilation with -altivec aj@suse.de
Patch41: glibc-uio-cell.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
@@ -172,25 +157,11 @@
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch47: glibc-nscd-hconf.diff
# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
-Patch48: glibc-malloc-arena-max.diff
-# PATCH-MISSING-TAG -- See http://en.opensuse.org/openSUSE:Packaging_Patches_guidelines
Patch49: glibc-fini-unwind.diff
-# PATCH-FIX-UPSTREAM install gconv-modules aj@suse.de
-Patch50: glibc-gconvcache-s390.diff
# PATCH-FIX-OPENSUSE bnc#657627
Patch52: glibc-elf-localscope.diff
# FIX-OPENSUSE compile some files with -fno-strict-aliasing
Patch58: glibc-strict-aliasing.diff
-# PATCH-FIX-UPSTREAM fix x86 aj@suse.de
-Patch60: glibc-x86-bits-sigcontext.patch
-# PATCH-FEATURE-UPSTREAM Speedup getsysstats call aj@suse.de
-Patch61: glibc-2.15-getsysstats-speedup.patch
-# PATCH-FIX-UPSTREAM Fix gcc 4.6 warnings aj@suse.de
-Patch62: glibc-2.13-warnings.fix
-# PATCH-FIX-OPENSUSE Fix localedef locale-archive creation bso#10855 aj@suse.de
-Patch63: glibc-2.13-localedef.patch
-# PATCH-FIX-UPSTREAM Fix futex bug bso#12403 aj@suse.de
-Patch64: glibc-fix-rwlock-stack-imbalance.patch
# PATCH-FIX-OPENSUSE disable rewriting ::1 to 127.0.0.1 for /etc/hosts bnc#684534, bnc#706719
Patch65: glibc-fix-double-loopback.diff
# PATCH-FEATURE-OPENSUSE Revert sunrpc removal aj@suse.de
@@ -199,36 +170,26 @@
Patch67: glibc-revert-fseek-on-fclose.diff
# PATCH-FIX-OPENSUSE Fix crash (access-after-free) in dl_lookup_x bnc#703140 matz@suse.de
Patch68: glibc-fix-lookup-crash.patch
-# PATCH-FIX-UPSTREAM Add vdso support to support Linux 3.1, fix order of relocations aj@suse.de
-Patch70: glibc-2.15-vsyscall.patch
# PATCH-FIX-OPENSUSE Do not trigger an abort when an i586 Intel CPU is running the i686 library, as valgrind does. bnc#681398 aj@suse.de
Patch71: x86-cpuid-level2.patch
-# PATCH-FIX-UPSTREAM Avoid use of vsyscall aj@suse.de
-Patch72: glibc-2.15-avoid-vsyscall.patch
# PATCH-FIX-UPSTREAM Fix assertion error in res_query.c (bso#13013)
Patch73: glibc-resolv-assert.diff
# PATCH-FIX-OPENSUSE Run ctors (bnc#717671) aj@suse.de
Patch74: glibc-2.14-fix-ctors.patch
-# PATCH-FIX-UPSTREAM Fix trace and ifuncs aj@suse.de
-Patch75: glibc-2.15-ifunc-trace.patch
-# PATCH-FIX-UPSTREAM Fix trace and ifuncs (talk to aj@suse.de)
-Patch76: glibc-ports-2.15-ifunc-trace.patch
+# PATCH-FIX-OPENSUSE Fix missing declarations
+Patch75: glibc-2.15-nss_db-declarations.patch
# PATCH-FEATURE-OPENSUSE -- add sha support to crypt_blowfish lnussel@suse.de
Patch80: crypt_blowfish-1.2-sha.diff
# PATCH-FEATURE-OPENSUSE -- use separate symbol version for Owl extensions - lnussel@suse.de
Patch81: crypt_blowfish-1.2-versioning.diff
# PATCH-FIX-OPENSUSE Avoid build failure on noexecstack marker on ARM dmueller@suse.de
Patch82: crypt_blowfish-1.2-hack_around_arm.diff
-# PATCH-FIX-UPSTREAM fix unwinding when using clone()
-Patch83: glibc-arm-clone-unwind-fix.diff
# PATCH-FIX-OPENSUSE avoid false positive warning that triggers brp postcheck fail
Patch84: nscd-avoid-gcc-warning.diff
-# PATCH-FIX-OPENSUSE fix printf with > 32 args and printf specifiers bnc#733140, bso#13446
-Patch85: glibc-2.14-32args-printf.patch
-# PATCH-FIX-UPSTREAM fix tzfile heap overrun bnc#735850 - aj@suse.de
-Patch86: tzfile-corruption-fix.patch
# PATCH-FIX-OPENSUSE fixed build-compare by omitting one more date - meissner@suse.de
Patch87: glibc-nodate.patch
+# PATCH-FIX-OPENSUSE revert pthread-cond-wait change since it causes hangs
+Patch88: pthread-cond-wait-revert.patch
%description
The GNU C Library provides the most important standard libraries used
@@ -387,17 +348,7 @@
%endif
%prep
-%ifarch %arm
-# add glibc-ports for arm
%setup -n glibc-%{version} -q -a 2 -a 3 -a 4
-pushd %glibc_ports_dir
-%patch76 -p1
-%patch83 -p1
-popd
-%else
-# any other leave out ports
-%setup -n glibc-%{version} -q -a 3 -a 4
-%endif
# Owl crypt_blowfish
tar -xzf %SOURCE50
pushd crypt_blowfish-%{crypt_bf_version}
@@ -418,12 +369,8 @@
%patch7
%patch8
%patch12
-%patch13 -E
-# We have s_sincos.c in patch13, remove duplicate
-rm sysdeps/x86_64/fpu/s_sincos.S
%patch14
%patch16
-%patch18
%patch20
# XXX Did not patch for 2.14:
#%patch21
@@ -432,7 +379,6 @@
touch -r nscd/nscd_stat.c nscd/s-stamp
%patch22
%patch23
-%patch24
touch -r nscd/s-stamp nscd/nscd_stat.c
rm nscd/s-stamp
%patch25
@@ -442,37 +388,24 @@
%patch33
%patch36
%patch38
-%patch40
%patch41 -p1
%patch45
%patch46 -p1
%patch47 -p1
-%if !%{exp_malloc}
-%patch48 -p1
-%endif
%patch49
-%patch50
%patch52
%patch58
-%patch60 -p1
-%patch61 -p1
-%patch62 -p1
-%patch63 -p1
-%patch64 -p1
%patch65 -p1
%patch66 -p1
%patch67 -p1
%patch68 -p1
-%patch70 -p1
%patch71 -p1
-%patch72 -p1
%patch73 -p1
%patch74 -p1
%patch75 -p1
%patch84
-%patch85
-%patch86 -p1
%patch87 -p0
+%patch88 -p1 -R
#
# Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
@@ -552,7 +485,9 @@
%ifarch hppa
BuildFlags="$BuildFlags -mpa-risc-1-1 -fstrict-aliasing"
%endif
-%ifarch %ix86 x86_64
+%ifarch i386 i486 i586
+# Add this to avoid performance penalty on Xen for 32-bit x86
+# Note on i686 we build a special library
BuildFlags="$BuildFlags -mno-tls-direct-seg-refs"
%endif
# Add flags for all plattforms except AXP
@@ -579,7 +514,7 @@
cd "cc-$dirname"
%ifarch %arm
# remove asynchronous-unwind-tables during configure as it causes
- # some checks to fail spuriously on %arm
+ # some checks to fail spuriously on arm
conf_cflags="${cflags/-fasynchronous-unwind-tables/}"
conf_cflags="${conf_cflags/-funwind-tables/}"
%else
@@ -588,7 +523,7 @@
CFLAGS="$conf_cflags" CC="$BuildCC" CXX="$BuildCCplus" ../configure \
--prefix=%{_prefix} \
--libexecdir=%{_libdir} --infodir=%{_infodir} \
- --enable-add-ons=nptl$addons --without-cvs --enable-profile \
+ --enable-add-ons=nptl$addons --enable-profile \
"$@" \
%if %{enable_stackguard_randomization}
--enable-stackguard-randomization \
@@ -600,10 +535,7 @@
%ifarch mipsel
--without-fp \
%endif
-%if %{exp_malloc}
- --enable-experimental-malloc \
-%endif
- --with-tls --with-__thread --enable-kernel=%{enablekernel} \
+ --enable-kernel=%{enablekernel} \
--enable-bind-now
# Should we enable --enable-nss-crypt to build use freebl3 hash functions?
# explicitly set CFLAGS to use the full CFLAGS (not the reduced one for configure)
@@ -616,6 +548,9 @@
# Build base glibc
#
configure_and_build_glibc base "$BuildFlags" "$add_ons"
+%ifarch i686
+ configure_and_build_glibc nosegneg "$BuildFlags -mno-tls-direct-seg-refs" "$add_ons"
+%endif
%else
#
# Build POWER-optimized glibc
@@ -729,44 +664,63 @@
# Do not install in parallel, timezone Makefile will fail
make install_root=%{buildroot} install -C cc-base
+install_optimized_variant() {
+ local dirname="$1"; shift
+ local subdir="$1"; shift
+ local subdir_up="$1"; shift
+
+cd "cc-$dirname"
+destdir=$RPM_BUILD_ROOT/%{_lib}/$subdir
+mkdir -p $destdir
+# Don't run a complete make install, we know which libraries
+# we want
+for lib in libc math/libm nptl/libpthread rt/librt nptl_db/libthread_db
+do
+ libbase=${lib#*/}
+ libbaseso=$(basename $RPM_BUILD_ROOT/%{_lib}/${libbase}-*.so)
+ # Only install if different from base lib
+ if cmp -s ${lib}.so ../cc-base/${lib}.so; then
+ ln -sf $subdir_up/$libbaseso $destdir/$libbaseso
+ else
+ cp -a ${lib}.so $destdir/$libbaseso
+ fi
+ # Emulate ldconfig
+ ln -sf $libbaseso $destdir/$(basename $RPM_BUILD_ROOT/%{_lib}/${libbase}.so.*)
+done
+cd ..
+}
+# Install i686 glibc for Xen
+%ifarch i686
+install_optimized_variant nosegneg i686/nosegneg "../.."
+%endif
+
# Install power-optimized glibc
%if %{optimize_power}
- # run ldconfig to create the library symlinks
- # do not use the new ldconfig from the build directory because
- # it may contain instructions not suitable for the cpu on the builhost
- my_ldconfig=/sbin/ldconfig
- for pcpu in \
%if %{powerpc_optimize_cpu_power4}
- power4 \
+ install_optimized_variant power4 power4 ".."
%endif
%if %{powerpc_optimize_cpu_power6}
- power6 \
+ install_optimized_variant power6 power6 ".."
%endif
%if %{powerpc_optimize_cpu_power7}
- power7 \
+ install_optimized_variant power7 power7 ".."
%endif
%if %{powerpc_optimize_cpu_cell}
- ppc-cell-be \
+ install_optimized_variant ppc-cell-be ppc-cell-be ".."
%endif
- ; do
- make install_root=%{buildroot}/$pcpu install -C cc-$pcpu
- mkdir -p %{buildroot}/%{_lib}/$pcpu
- for i in libc-%{version} libm-%{version} libpthread-%{version} libthread_db-1.0 librt-%{version}; do
- mv %{buildroot}/$pcpu/%{_lib}/$i.so %{buildroot}/%{_lib}/$pcpu
- done
- $my_ldconfig -n %{buildroot}/%{_lib}/$pcpu/
- rm -rf %{buildroot}/$pcpu
- done
%if %{powerpc_optimize_cpu_power6}
# power6 is compatible with power6x
- # doing a symlink doesnt work, ldconfig follows them and accepts only the first real dir
+ # doing a directory symlink doesnt work, ldconfig follows them and accepts only the first real dir
if test -d %{buildroot}/%{_lib}/power6; then
mkdir -p %{buildroot}/%{_lib}/power6x
for i in %{buildroot}/%{_lib}/power6/*.so; do
b=`basename $i`
ln -vs ../power6/$b %{buildroot}/%{_lib}/power6x/$b
+ libbase=${b%.so}
+ libbaseso=$(basename $RPM_BUILD_ROOT/%{_lib}/${libbase}-*.so)
+ # Emulate ldconfig
+ ln -sf $libbaseso %{buildroot}/%{_lib}/power6x/$(basename $RPM_BUILD_ROOT/%{_lib}/${libbase}.so.*)
done
- $my_ldconfig -n %{buildroot}/%{_lib}/power6x/
fi
%endif
%endif # optimize_power
@@ -988,6 +942,8 @@
/%{_lib}/libnsl.so.1
/%{_lib}/libnss_compat-%{version}.so
/%{_lib}/libnss_compat.so.2
+/%{_lib}/libnss_db-%{version}.so
+/%{_lib}/libnss_db.so.2
/%{_lib}/libnss_dns-%{version}.so
/%{_lib}/libnss_dns.so.2
/%{_lib}/libnss_files-%{version}.so
@@ -1008,8 +964,7 @@
/%{_lib}/libthread_db.so.1
/%{_lib}/libutil-%{version}.so
/%{_lib}/libutil.so.1
-%if %{optimize_power}
- %define optimized_libs() \
+%define optimized_libs() \
%dir %attr(0755,root,root) /%{_lib}/%1\
/%{_lib}/%1/libc-%{version}.so\
/%{_lib}/%1/libc.so.6*\
@@ -1021,6 +976,12 @@
/%{_lib}/%1/librt.so.1\
/%{_lib}/%1/libthread_db-1.0.so\
/%{_lib}/%1/libthread_db.so.1
+
+%ifarch i686
+%dir %attr(0755,root,root) /%{_lib}/i686
+%{optimized_libs i686/nosegneg}
+%endif
+%if %{optimize_power}
%if %{powerpc_optimize_cpu_power4}
%{optimized_libs power4}
%endif
@@ -1047,11 +1008,14 @@
%endif
%{_bindir}/locale
%{_bindir}/localedef
+%{_bindir}/makedb
%verify(not mode caps) %attr(4755,root,root) %{_libdir}/pt_chown
%dir %attr(0755,root,root) %{_libdir}/getconf
%{_libdir}/getconf/*
%{_sbindir}/glibc_post_upgrade
%{_sbindir}/iconvconfig
+%dir /var/db
+/var/db/Makefile
%ifarch %ix86
@@ -1073,7 +1037,7 @@
%files devel
%defattr(-,root,root)
-%doc COPYING COPYING.LIB FAQ INSTALL NEWS NOTES README BUGS CONFORMANCE
+%doc COPYING COPYING.LIB FAQ NEWS NOTES README BUGS CONFORMANCE
%doc %{_mandir}/man1/catchsegv.1.gz
%doc %{_mandir}/man1/rpcgen.1.gz
%doc %{_mandir}/man1/sprof.1.gz
@@ -1170,5 +1134,6 @@
%{_bindir}/pcprofiledump
%{_bindir}/sotruss
%{_bindir}/xtrace
+%{_bindir}/pldd
%changelog
++++++ getaddrinfo-ipv6-sanity.diff ++++++
--- /var/tmp/diff_new_pack.rzGzDY/_old 2012-01-06 11:44:12.000000000 +0100
+++ /var/tmp/diff_new_pack.rzGzDY/_new 2012-01-06 11:44:12.000000000 +0100
@@ -13,7 +13,7 @@
{
const struct gaih_typeproto *tp = gaih_inet_typeproto;
struct gaih_servtuple *st = (struct gaih_servtuple *) &nullserv;
-@@ -766,7 +766,7 @@ gaih_inet (const char *name, const struc
+@@ -935,7 +935,7 @@ gaih_inet (const char *name, const struc
if (fct != NULL)
{
if (req->ai_family == AF_INET6
@@ -22,7 +22,7 @@
{
gethosts (AF_INET6, struct in6_addr);
no_inet6_data = no_data;
-@@ -2157,7 +2157,7 @@ getaddrinfo (const char *name, const cha
+@@ -2418,7 +2418,7 @@ getaddrinfo (const char *name, const cha
if (hints->ai_family == AF_UNSPEC || hints->ai_family == AF_INET
|| hints->ai_family == AF_INET6)
{
++++++ glibc-2.14.1-4f2b767fef50.tar.bz2 -> glibc-2.15-2ba92745c36e.tar.bz2 ++++++
/work/SRC/openSUSE:Factory/glibc/glibc-2.14.1-4f2b767fef50.tar.bz2 /work/SRC/openSUSE:Factory/.glibc.new/glibc-2.15-2ba92745c36e.tar.bz2 differ: char 11, line 1
++++++ glibc-2.15-nss_db-declarations.patch ++++++
diff --git a/nss/nss_db/db-init.c b/nss/nss_db/db-init.c
index 8228d61..85ac48f 100644
--- a/nss/nss_db/db-init.c
+++ b/nss/nss_db/db-init.c
@@ -18,6 +18,7 @@
02111-1307 USA. */
#include
+#include
#include
diff --git a/nss/nss_db/db-initgroups.c b/nss/nss_db/db-initgroups.c
index aa8163b..1b806e5 100644
--- a/nss/nss_db/db-initgroups.c
+++ b/nss/nss_db/db-initgroups.c
@@ -22,6 +22,7 @@
#include
#include
#include
+#include
#include "nss_db.h"
++++++ glibc-2.3.3-nscd-db-path.diff ++++++
--- /var/tmp/diff_new_pack.rzGzDY/_old 2012-01-06 11:44:12.000000000 +0100
+++ /var/tmp/diff_new_pack.rzGzDY/_new 2012-01-06 11:44:12.000000000 +0100
@@ -4,9 +4,11 @@
Index: nscd/nscd.h
===================================================================
---- nscd/nscd.h.orig
+diff --git a/nscd/nscd.h b/nscd/nscd.h
+index fdaf01b..23b6a94 100644
+--- nscd/nscd.h
+++ nscd/nscd.h
-@@ -105,10 +105,10 @@ struct database_dyn
+@@ -113,11 +113,11 @@ struct database_dyn
/* Paths of the file for the persistent storage. */
@@ -14,10 +16,12 @@
-#define _PATH_NSCD_GROUP_DB "/var/db/nscd/group"
-#define _PATH_NSCD_HOSTS_DB "/var/db/nscd/hosts"
-#define _PATH_NSCD_SERVICES_DB "/var/db/nscd/services"
+-#define _PATH_NSCD_NETGROUP_DB "/var/db/nscd/netgroup"
+#define _PATH_NSCD_PASSWD_DB "/var/run/nscd/passwd"
+#define _PATH_NSCD_GROUP_DB "/var/run/nscd/group"
+#define _PATH_NSCD_HOSTS_DB "/var/run/nscd/hosts"
+#define _PATH_NSCD_SERVICES_DB "/var/run/nscd/services"
++#define _PATH_NSCD_NETGROUP_DB "/var/run/nscd/netgroup"
/* Path used when not using persistent storage. */
#define _PATH_NSCD_XYZ_DB_TMP "/var/run/nscd/dbXXXXXX"
++++++ glibc-2.4.90-nscd.diff ++++++
--- /var/tmp/diff_new_pack.rzGzDY/_old 2012-01-06 11:44:12.000000000 +0100
+++ /var/tmp/diff_new_pack.rzGzDY/_new 2012-01-06 11:44:12.000000000 +0100
@@ -1,95 +1,3 @@
-Index: nscd/cache.c
-===================================================================
---- nscd/cache.c.orig 2010-01-18 18:01:41.000000000 +0100
-+++ nscd/cache.c 2010-02-14 14:58:08.000000000 +0100
-@@ -267,27 +267,29 @@
- if (table->inotify_descr < 0 && table->check_file && now != LONG_MAX)
- {
- struct stat64 st;
-+ time_t mtime;
-
-- if (stat64 (table->filename, &st) < 0)
-+ mtime = stat64 (table->filename, &st) ? LONG_MAX : st.st_mtime;
-+ if (mtime != table->file_mtime)
- {
-- char buf[128];
-- /* We cannot stat() the file, disable file checking if the
-- file does not exist. */
-- dbg_log (_("cannot stat() file `%s': %s"),
-- table->filename, strerror_r (errno, buf, sizeof (buf)));
-- if (errno == ENOENT)
-- table->check_file = 0;
-+ /* The file changed. Invalidate all entries. */
-+ now = LONG_MAX;
-+ table->file_mtime = mtime;
- }
-- else
-+ if (*table->filename2)
- {
-- if (st.st_mtime != table->file_mtime)
-+ mtime = stat64 (table->filename2, &st) ? LONG_MAX : st.st_mtime;
-+ if (mtime != table->file_mtime2)
- {
- /* The file changed. Invalidate all entries. */
- now = LONG_MAX;
-- table->file_mtime = st.st_mtime;
-+ table->file_mtime2 = mtime;
- }
- }
- }
-+ /* now == 0 means just check for changed files */
-+ if (now == (time_t)0)
-+ return 0;
-
- /* We run through the table and find values which are not valid anymore.
-
-Index: nscd/connections.c
-===================================================================
---- nscd/connections.c.orig 2010-01-18 18:01:41.000000000 +0100
-+++ nscd/connections.c 2010-02-14 14:58:08.000000000 +0100
-@@ -119,6 +119,7 @@ struct database_dyn dbs[lastdb] =
- .suggested_module = DEFAULT_SUGGESTED_MODULE,
- .reset_res = 0,
- .filename = "/etc/passwd",
-+ .filename2 = "",
- .db_filename = _PATH_NSCD_PASSWD_DB,
- .disabled_iov = &pwd_iov_disabled,
- .postimeout = 3600,
-@@ -140,6 +141,7 @@ struct database_dyn dbs[lastdb] =
- .suggested_module = DEFAULT_SUGGESTED_MODULE,
- .reset_res = 0,
- .filename = "/etc/group",
-+ .filename2 = "",
- .db_filename = _PATH_NSCD_GROUP_DB,
- .disabled_iov = &grp_iov_disabled,
- .postimeout = 3600,
-@@ -161,6 +163,7 @@ struct database_dyn dbs[lastdb] =
- .suggested_module = DEFAULT_SUGGESTED_MODULE,
- .reset_res = 1,
- .filename = "/etc/hosts",
-+ .filename2 = "/etc/resolv.conf",
- .db_filename = _PATH_NSCD_HOSTS_DB,
- .disabled_iov = &hst_iov_disabled,
- .postimeout = 3600,
-@@ -855,15 +858,9 @@ cannot set socket to close on exec: %s;
- /* We need the modification date of the file. */
- struct stat64 st;
-
-- if (stat64 (dbs[cnt].filename, &st) < 0)
-- {
-- /* We cannot stat() the file, disable file checking. */
-- dbg_log (_("cannot stat() file `%s': %s"),
-- dbs[cnt].filename, strerror (errno));
-- dbs[cnt].check_file = 0;
-- }
-- else
-- dbs[cnt].file_mtime = st.st_mtime;
-+ dbs[cnt].file_mtime = stat64 (dbs[cnt].filename, &st) ? LONG_MAX : st.st_mtime;
-+ if (*dbs[cnt].filename2)
-+ dbs[cnt].file_mtime2 = stat64 (dbs[cnt].filename2, &st) ? LONG_MAX : st.st_mtime;
- }
- }
-
Index: nscd/nscd.conf
===================================================================
--- nscd/nscd.conf.orig 2010-01-18 18:01:41.000000000 +0100
@@ -109,21 +17,6 @@
shared hosts yes
max-db-size hosts 33554432
-Index: nscd/nscd.h
-===================================================================
---- nscd/nscd.h.orig 2010-01-18 18:01:41.000000000 +0100
-+++ nscd/nscd.h 2010-02-14 14:59:07.000000000 +0100
-@@ -80,8 +80,10 @@ struct database_dyn
- int propagate;
- int reset_res;
- const char filename[16];
-+ const char filename2[17];
- const char *db_filename;
- time_t file_mtime;
-+ time_t file_mtime2;
- size_t suggested_module;
- size_t max_db_size;
-
Index: nscd/nscd_stat.c
===================================================================
--- nscd/nscd_stat.c.orig 2010-01-18 18:01:41.000000000 +0100
@@ -143,12 +36,3 @@
/* Statistic data for one database. */
struct dbstat
-@@ -302,7 +307,7 @@ receive_print_stats (void)
- data.dbs[i].maxnsearched,
- data.dbs[i].rdlockdelayed,
- data.dbs[i].wrlockdelayed,
-- data.dbs[i].addfailed, check_file, dbnames[i]);
-+ data.dbs[i].addfailed, check_file, (strcmp(dbnames[i], "hosts") ? dbnames[i] : "{hosts,resolv.conf}"));
- }
-
- if (selinux_enabled)
++++++ glibc-compiled-binaries.diff ++++++
--- /var/tmp/diff_new_pack.rzGzDY/_old 2012-01-06 11:44:12.000000000 +0100
+++ /var/tmp/diff_new_pack.rzGzDY/_new 2012-01-06 11:44:12.000000000 +0100
@@ -21,9 +21,9 @@
# Build tools.
Index: configure.in
===================================================================
---- configure.in.orig 2011-05-20 15:39:31.237690293 +0200
-+++ configure.in 2011-05-20 15:43:55.595111363 +0200
-@@ -16,6 +16,7 @@
+--- configure.in.orig
++++ configure.in
+@@ -16,6 +16,7 @@ if test $host != $build; then
AC_CHECK_PROGS(BUILD_CC, gcc cc)
fi
AC_SUBST(cross_compiling)
@@ -33,9 +33,9 @@
AC_PROG_CXX
Index: configure
===================================================================
---- configure.orig 2011-05-20 15:46:40.675628746 +0200
-+++ configure 2011-05-20 15:40:52.292884126 +0200
-@@ -545,6 +545,7 @@
+--- configure.orig
++++ configure
+@@ -554,6 +554,7 @@ ac_clean_files=
ac_config_libobj_dir=.
LIBOBJS=
cross_compiling=no
@@ -43,7 +43,7 @@
subdirs=
MFLAGS=
MAKEFLAGS=
-@@ -697,6 +696,7 @@
+@@ -706,6 +707,7 @@ CXXFLAGS
CXX
CPP
cross_compiling
@@ -51,7 +51,7 @@
BUILD_CC
OBJEXT
ac_ct_CC
-@@ -1244,6 +1242,13 @@
+@@ -1250,6 +1252,13 @@ do
as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done
@@ -65,7 +65,7 @@
# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
-@@ -1266,6 +1257,7 @@
+@@ -1265,6 +1274,7 @@ if test "x$host_alias" != x; then
If a cross compiler is detected then cross compile mode will be used" >&2
elif test "x$build_alias" != "x$host_alias"; then
cross_compiling=yes
@@ -73,9 +73,9 @@
fi
fi
-@@ -1454,6 +1444,9 @@
- --enable-experimental-malloc
- enable experimental malloc features
+@@ -1450,6 +1460,9 @@ Optional Features:
+ --enable-multi-arch enable single DSO with optimizations for multiple
+ architectures
--enable-nss-crypt enable libcrypt to use nss
+ --enable-runbinaries the compiled binaries should run on the buildhost because
+ it happens to have a compatible cpu
@@ -87,7 +87,7 @@
===================================================================
--- posix/Makefile.orig
+++ posix/Makefile
-@@ -302,7 +302,7 @@ $(inst_libexecdir)/getconf: $(inst_bindi
+@@ -320,7 +320,7 @@ $(inst_libexecdir)/getconf: $(inst_bindi
done < $(objpfx)getconf.speclist
$(objpfx)getconf.speclist: $(objpfx)getconf
@@ -100,7 +100,7 @@
===================================================================
--- sunrpc/Makefile.orig
+++ sunrpc/Makefile
-@@ -98,7 +98,7 @@ otherlibs += $(nssobjdir)/libnss_files.a
+@@ -108,7 +108,7 @@ otherlibs += $(nssobjdir)/libnss_files.a
$(resolvobjdir)/libresolv.a
endif
++++++ glibc-strict-aliasing.diff ++++++
--- /var/tmp/diff_new_pack.rzGzDY/_old 2012-01-06 11:44:12.000000000 +0100
+++ /var/tmp/diff_new_pack.rzGzDY/_new 2012-01-06 11:44:12.000000000 +0100
@@ -10,78 +10,3 @@
endif
before-compile = $(objpfx)trusted-dirs.h
-Index: inet/Makefile
-===================================================================
---- inet/Makefile.orig
-+++ inet/Makefile
-@@ -57,6 +57,8 @@ tests := htontest test_ifindex tst-ntoa
-
- include ../Rules
-
-+CFLAGS-tst-inet6_rth.c = -fno-strict-aliasing
-+
- ifeq ($(have-thread-library),yes)
-
- CFLAGS-gethstbyad_r.c = -DUSE_NSCD=1 -fexceptions
-Index: nis/Makefile
-===================================================================
---- nis/Makefile.orig
-+++ nis/Makefile
-@@ -69,6 +69,8 @@ libnss_nisplus-inhibit-o = $(filter-out
-
- include ../Rules
-
-+CFLAGS-nis_findserv.c = -fno-strict-aliasing
-+CFLAGS-ypclnt.c = -fno-strict-aliasing
-
- $(objpfx)libnss_compat.so: $(objpfx)libnsl.so$(libnsl.so-version)
- $(objpfx)libnss_nis.so: $(objpfx)libnsl.so$(libnsl.so-version) \
-Index: nss/Makefile
-===================================================================
---- nss/Makefile.orig
-+++ nss/Makefile
-@@ -75,6 +75,7 @@ endif
-
- include ../Rules
-
-+CFLAGS-files-hosts.c = -fno-strict-aliasing
-
- ifeq (yes,$(build-static-nss))
- $(objpfx)getent: $(objpfx)libnss_files.a
-Index: resolv/Makefile
-===================================================================
---- resolv/Makefile.orig
-+++ resolv/Makefile
-@@ -77,6 +77,7 @@ CPPFLAGS += -Dgethostbyname=res_gethostb
- -Dgetnetbyaddr=res_getnetbyaddr
-
- CFLAGS-res_hconf.c = -fexceptions
-+CFLAGS-res_send.c = -fno-strict-aliasing
-
- # The BIND code elicits some harmless warnings.
- +cflags += -Wno-strict-prototypes -Wno-write-strings
-Index: sunrpc/Makefile
-===================================================================
---- sunrpc/Makefile.orig
-+++ sunrpc/Makefile
-@@ -152,6 +152,10 @@ CFLAGS-openchild.c = -fexceptions
-
- CPPFLAGS += -D_RPC_THREAD_SAFE_
-
-+CFLAGS-clnt_tcp.c = -fno-strict-aliasing
-+CFLAGS-clnt_udp.c = -fno-strict-aliasing
-+CFLAGS-clnt_unix.c = -fno-strict-aliasing
-+
- $(objpfx)tst-getmyaddr: $(common-objpfx)linkobj/libc.so
- $(objpfx)tst-xdrmem: $(common-objpfx)linkobj/libc.so
- $(objpfx)tst-xdrmem2: $(common-objpfx)linkobj/libc.so
-Index: sysdeps/powerpc/powerpc64/elf/Makefile
-===================================================================
---- sysdeps/powerpc/powerpc64/elf/Makefile.orig
-+++ sysdeps/powerpc/powerpc64/elf/Makefile
-@@ -9,3 +9,5 @@ CFLAGS-rtld-mempcpy.os = $(no-special-re
- CFLAGS-rtld-memmove.os = $(no-special-regs)
- CFLAGS-rtld-memchr.os = $(no-special-regs)
- CFLAGS-rtld-strnlen.os = $(no-special-regs)
-+
-+CFLAGS-gmon-start.c = -fno-strict-aliasing
++++++ pthread-cond-wait-revert.patch ++++++
http://sourceware.org/ml/libc-alpha/2012-01/msg00002.html
The following patch:
Has been reported as causing numerous problems in Fedora & Debian. I
don't think anyone has done any serious analysis of the issue, but the
patch has been pulled from both distributions because of the
instability it's introduced.
https://bugzilla.redhat.com/show_bug.cgi?id=769421
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=651899
commit c5a0802a682dba23f92d47f0f99775aebfbe2539
Author: Andreas Schwab
Date: Mon Nov 28 13:38:19 2011 +0100
Handle EAGAIN from FUTEX_WAIT_REQUEUE_PI
2011-11-28 Andreas Schwab
* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Handle
EAGAIN from FUTEX_WAIT_REQUEUE_PI.
* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
index 53970d7..54590b7 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
@@ -134,6 +134,7 @@ __pthread_cond_wait:
cmpl $PI_BIT, %eax
jne 18f
+90:
movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %ecx
movl %ebp, %edx
xorl %esi, %esi
@@ -147,6 +148,9 @@ __pthread_cond_wait:
sete 16(%esp)
je 19f
+ cmpl $-EAGAIN, %eax
+ je 91f
+
/* Normal and PI futexes dont mix. Use normal futex functions only
if the kernel does not support the PI futex functions. */
cmpl $-ENOSYS, %eax
@@ -391,6 +395,78 @@ __pthread_cond_wait:
#endif
call __lll_unlock_wake
jmp 11b
+
+91:
+.LcleanupSTART2:
+ /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN. We need to
+ call it again. */
+
+ /* Get internal lock. */
+ movl $1, %edx
+ xorl %eax, %eax
+ LOCK
+#if cond_lock == 0
+ cmpxchgl %edx, (%ebx)
+#else
+ cmpxchgl %edx, cond_lock(%ebx)
+#endif
+ jz 92f
+
+#if cond_lock == 0
+ movl %ebx, %edx
+#else
+ leal cond_lock(%ebx), %edx
+#endif
+#if (LLL_SHARED-LLL_PRIVATE) > 255
+ xorl %ecx, %ecx
+#endif
+ cmpl $-1, dep_mutex(%ebx)
+ setne %cl
+ subl $1, %ecx
+ andl $(LLL_SHARED-LLL_PRIVATE), %ecx
+#if LLL_PRIVATE != 0
+ addl $LLL_PRIVATE, %ecx
+#endif
+ call __lll_lock_wait
+
+92:
+ /* Increment the cond_futex value again, so it can be used as a new
+ expected value. */
+ addl $1, cond_futex(%ebx)
+ movl cond_futex(%ebx), %ebp
+
+ /* Unlock. */
+ LOCK
+#if cond_lock == 0
+ subl $1, (%ebx)
+#else
+ subl $1, cond_lock(%ebx)
+#endif
+ je 93f
+#if cond_lock == 0
+ movl %ebx, %eax
+#else
+ leal cond_lock(%ebx), %eax
+#endif
+#if (LLL_SHARED-LLL_PRIVATE) > 255
+ xorl %ecx, %ecx
+#endif
+ cmpl $-1, dep_mutex(%ebx)
+ setne %cl
+ subl $1, %ecx
+ andl $(LLL_SHARED-LLL_PRIVATE), %ecx
+#if LLL_PRIVATE != 0
+ addl $LLL_PRIVATE, %ecx
+#endif
+ call __lll_unlock_wake
+
+93:
+ /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */
+ xorl %ecx, %ecx
+ movl dep_mutex(%ebx), %edi
+ jmp 90b
+.LcleanupEND2:
+
.size __pthread_cond_wait, .-__pthread_cond_wait
versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
GLIBC_2_3_2)
@@ -563,6 +639,10 @@ __condvar_w_cleanup:
.long .LcleanupEND-.Lsub_cond_futex
.long __condvar_w_cleanup-.LSTARTCODE
.uleb128 0
+ .long .LcleanupSTART2-.LSTARTCODE
+ .long .LcleanupEND2-.LcleanupSTART2
+ .long __condvar_w_cleanup-.LSTARTCODE
+ .uleb128 0
.long .LcallUR-.LSTARTCODE
.long .LENDCODE-.LcallUR
.long 0
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
index 7535baa..d837d15 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
@@ -23,6 +23,7 @@
#include
#include
#include
+#include
#include
@@ -133,11 +134,14 @@ __pthread_cond_wait:
cmpl $PI_BIT, %eax
jne 61f
+90:
movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %esi
movl $SYS_futex, %eax
syscall
movl $1, %r8d
+ cmpq $-EAGAIN, %rax
+ je 91f
#ifdef __ASSUME_REQUEUE_PI
jmp 62f
#else
@@ -324,6 +328,70 @@ __pthread_cond_wait:
13: movq %r10, %rax
jmp 14b
+
+91:
+.LcleanupSTART2:
+ /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN. We need to
+ call it again. */
+ movq 8(%rsp), %rdi
+
+ /* Get internal lock. */
+ movl $1, %esi
+ xorl %eax, %eax
+ LOCK
+#if cond_lock == 0
+ cmpxchgl %esi, (%rdi)
+#else
+ cmpxchgl %esi, cond_lock(%rdi)
+#endif
+ jz 92f
+
+#if cond_lock != 0
+ addq $cond_lock, %rdi
+#endif
+ cmpq $-1, dep_mutex-cond_lock(%rdi)
+ movl $LLL_PRIVATE, %eax
+ movl $LLL_SHARED, %esi
+ cmovne %eax, %esi
+ callq __lll_lock_wait
+#if cond_lock != 0
+ subq $cond_lock, %rdi
+#endif
+92:
+ /* Increment the cond_futex value again, so it can be used as a new
+ expected value. */
+ incl cond_futex(%rdi)
+ movl cond_futex(%rdi), %edx
+
+ /* Release internal lock. */
+ LOCK
+#if cond_lock == 0
+ decl (%rdi)
+#else
+ decl cond_lock(%rdi)
+#endif
+ jz 93f
+
+#if cond_lock != 0
+ addq $cond_lock, %rdi
+#endif
+ cmpq $-1, dep_mutex-cond_lock(%rdi)
+ movl $LLL_PRIVATE, %eax
+ movl $LLL_SHARED, %esi
+ cmovne %eax, %esi
+ /* The call preserves %rdx. */
+ callq __lll_unlock_wake
+#if cond_lock != 0
+ subq $cond_lock, %rdi
+#endif
+93:
+ /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */
+ xorq %r10, %r10
+ movq dep_mutex(%rdi), %r8
+ leaq cond_futex(%rdi), %rdi
+ jmp 90b
+.LcleanupEND2:
+
.size __pthread_cond_wait, .-__pthread_cond_wait
versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
GLIBC_2_3_2)
@@ -476,11 +544,15 @@ __condvar_cleanup1:
.uleb128 .LcleanupSTART-.LSTARTCODE
.uleb128 .LcleanupEND-.LcleanupSTART
.uleb128 __condvar_cleanup1-.LSTARTCODE
- .uleb128 0
+ .uleb128 0
+ .uleb128 .LcleanupSTART2-.LSTARTCODE
+ .uleb128 .LcleanupEND2-.LcleanupSTART2
+ .uleb128 __condvar_cleanup1-.LSTARTCODE
+ .uleb128 0
.uleb128 .LcallUR-.LSTARTCODE
.uleb128 .LENDCODE-.LcallUR
.uleb128 0
- .uleb128 0
+ .uleb128 0
.Lcstend:
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org