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 "[email protected]"

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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- 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 - [email protected]
+
+- Update to d35dce5213b3:
+  - caching of network information for getaddrinfo
+  - bugfixes
+
+-------------------------------------------------------------------
+Sat Oct 29 18:37:46 UTC 2011 - [email protected]
+
+- Update to 21b64b153631:
+  - various bugfixes
+
+-------------------------------------------------------------------
+Thu Oct 27 08:44:14 UTC 2011 - [email protected]
+
+- 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 - [email protected]
+
+- Update to a201fbcf9cc3:
+  - More libm optimizations
+  - Optimize wcslen, strnlen
+
+-------------------------------------------------------------------
@@ -71,0 +170,14 @@
+Tue Oct 18 07:42:40 UTC 2011 - [email protected]
+
+- 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 - [email protected]
+
+- 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 
[email protected]
@@ -161,8 +148,6 @@
 Patch36:        glibc-no-unwind-tables.diff
 # PATCH-FEATURE-SLE increase cpusetsize to 4096, needs to be kept for 
compatibility [email protected]
 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 [email protected]
 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 [email protected]
-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 <bits/sigcontext.h> [email protected]
-Patch60:        glibc-x86-bits-sigcontext.patch
-# PATCH-FEATURE-UPSTREAM Speedup getsysstats call [email protected]
-Patch61:        glibc-2.15-getsysstats-speedup.patch
-# PATCH-FIX-UPSTREAM Fix gcc 4.6 warnings [email protected]
-Patch62:        glibc-2.13-warnings.fix
-# PATCH-FIX-OPENSUSE Fix localedef locale-archive creation bso#10855 
[email protected]
-Patch63:        glibc-2.13-localedef.patch
-# PATCH-FIX-UPSTREAM Fix futex bug bso#12403 [email protected]
-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 [email protected]
@@ -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 
[email protected]
 Patch68:        glibc-fix-lookup-crash.patch
-# PATCH-FIX-UPSTREAM Add vdso support to support Linux 3.1, fix order of 
relocations [email protected]
-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 [email protected]
 Patch71:        x86-cpuid-level2.patch
-# PATCH-FIX-UPSTREAM Avoid use of vsyscall [email protected]
-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) [email protected]
 Patch74:        glibc-2.14-fix-ctors.patch
-# PATCH-FIX-UPSTREAM Fix trace and ifuncs [email protected]
-Patch75:        glibc-2.15-ifunc-trace.patch
-# PATCH-FIX-UPSTREAM Fix trace and ifuncs (talk to [email protected])
-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 [email protected]
 Patch80:        crypt_blowfish-1.2-sha.diff
 # PATCH-FEATURE-OPENSUSE -- use separate symbol version for Owl extensions - 
[email protected]
 Patch81:        crypt_blowfish-1.2-versioning.diff
 # PATCH-FIX-OPENSUSE Avoid build failure on noexecstack marker on ARM 
[email protected]
 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 - [email protected]
-Patch86:        tzfile-corruption-fix.patch
 # PATCH-FIX-OPENSUSE fixed build-compare by omitting one more date - 
[email protected]
 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 <paths.h>
+#include <string.h>
 #include <nscd/nscd.h>
 
 
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 <errno.h>
 #include <grp.h>
 #include <paths.h>
+#include <string.h>
 
 #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 <[email protected]>
Date:   Mon Nov 28 13:38:19 2011 +0100

    Handle EAGAIN from FUTEX_WAIT_REQUEUE_PI

2011-11-28  Andreas Schwab  <[email protected]>

        * 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 <lowlevelcond.h>
 #include <tcb-offsets.h>
 #include <pthread-pi-defines.h>
+#include <pthread-errnos.h>
 
 #include <kernel-features.h>
 
@@ -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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to