forked from pool/glibc
Accepting request 98594 from home:a_jaeger:my-factory-packages
Fix a few bugs. OBS-URL: https://build.opensuse.org/request/show/98594 OBS-URL: https://build.opensuse.org/package/show/Base:System/glibc?expand=0&rev=146
This commit is contained in:
parent
b5ae287187
commit
edcf84733c
3
glibc-2.15-2ba92745c36e.tar.bz2
Normal file
3
glibc-2.15-2ba92745c36e.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:65aacbb4b5218b686da63994150e7e34e71d85c45cc7c264b1d6ee55207d0b05
|
||||||
|
size 15776871
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:cb2366b1bf2bdf00c63c2f2be91ef41fe3bde49d898e1b1c7e53fc31fc34c58f
|
|
||||||
size 15776360
|
|
@ -1,3 +1,16 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
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
|
Mon Dec 26 12:53:55 UTC 2011 - aj@suse.de
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package glibc
|
# 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
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -79,7 +79,7 @@ Obsoletes: glibc-32bit
|
|||||||
%endif
|
%endif
|
||||||
Version: 2.15
|
Version: 2.15
|
||||||
Release: 11
|
Release: 11
|
||||||
%define git_id c0da14cdda1f
|
%define git_id 2ba92745c36e
|
||||||
%define glibc_ports_ver 2.15
|
%define glibc_ports_ver 2.15
|
||||||
%define ports_git_id 8a70b2dcabbf
|
%define ports_git_id 8a70b2dcabbf
|
||||||
Url: http://www.gnu.org/software/libc/libc.html
|
Url: http://www.gnu.org/software/libc/libc.html
|
||||||
@ -196,6 +196,8 @@ Patch82: crypt_blowfish-1.2-hack_around_arm.diff
|
|||||||
Patch84: nscd-avoid-gcc-warning.diff
|
Patch84: nscd-avoid-gcc-warning.diff
|
||||||
# PATCH-FIX-OPENSUSE fixed build-compare by omitting one more date - meissner@suse.de
|
# PATCH-FIX-OPENSUSE fixed build-compare by omitting one more date - meissner@suse.de
|
||||||
Patch87: glibc-nodate.patch
|
Patch87: glibc-nodate.patch
|
||||||
|
# PATCH-FIX-OPENSUSE revert pthread-cond-wait change since it causes hangs
|
||||||
|
Patch88: pthread-cond-wait-revert.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
The GNU C Library provides the most important standard libraries used
|
The GNU C Library provides the most important standard libraries used
|
||||||
@ -413,6 +415,7 @@ rm nscd/s-stamp
|
|||||||
%patch75 -p1
|
%patch75 -p1
|
||||||
%patch84
|
%patch84
|
||||||
%patch87 -p0
|
%patch87 -p0
|
||||||
|
%patch88 -p1 -R
|
||||||
|
|
||||||
#
|
#
|
||||||
# Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
|
# Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
|
||||||
|
252
pthread-cond-wait-revert.patch
Normal file
252
pthread-cond-wait-revert.patch
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
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 <schwab@redhat.com>
|
||||||
|
Date: Mon Nov 28 13:38:19 2011 +0100
|
||||||
|
|
||||||
|
Handle EAGAIN from FUTEX_WAIT_REQUEUE_PI
|
||||||
|
|
||||||
|
2011-11-28 Andreas Schwab <schwab@redhat.com>
|
||||||
|
|
||||||
|
* 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:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user