- Resync with upstream sources.
- Drop local stap patch now obsolete. - Drop local s390 patch which avoided problems with old assemblers - Drop old fortify source patch to deal with old compilers
This commit is contained in:
parent
080a305bf2
commit
665e71fb89
@ -1,80 +0,0 @@
|
|||||||
From 5a0546afb448a71cf045b980eb27c13bf5783920 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andreas Schwab <schwab@redhat.com>
|
|
||||||
Date: Thu, 9 Jun 2011 15:36:02 +0200
|
|
||||||
Subject: [PATCH] Revert "Use .machine to prevent AS from complaining about
|
|
||||||
z9-109 instructions in iconv modules"
|
|
||||||
|
|
||||||
This reverts commit 2739047682590b1df473401b4febf424f857fccf.
|
|
||||||
---
|
|
||||||
ChangeLog | 7 -------
|
|
||||||
sysdeps/s390/s390-64/utf16-utf32-z9.c | 5 +----
|
|
||||||
sysdeps/s390/s390-64/utf8-utf16-z9.c | 5 +----
|
|
||||||
sysdeps/s390/s390-64/utf8-utf32-z9.c | 5 +----
|
|
||||||
4 files changed, 3 insertions(+), 19 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/ChangeLog b/ChangeLog
|
|
||||||
index 3ed77d0..90590d9 100644
|
|
||||||
--- a/ChangeLog
|
|
||||||
+++ b/ChangeLog
|
|
||||||
@@ -684,13 +684,6 @@
|
|
||||||
* stdlib/bug-getcontext.c: New file.
|
|
||||||
* stdlib/Makefile: Add rules to build and run bug-getcontext.
|
|
||||||
|
|
||||||
-2011-04-13 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
|
||||||
-
|
|
||||||
- * sysdeps/s390/s390-64/utf16-utf32-z9.c: Wrap the z9-109
|
|
||||||
- instructions into .machine "z9-109".
|
|
||||||
- * sysdeps/s390/s390-64/utf8-utf16-z9.c: Likewise.
|
|
||||||
- * sysdeps/s390/s390-64/utf8-utf32-z9.c: Likewise.
|
|
||||||
-
|
|
||||||
2011-04-11 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
|
|
||||||
|
|
||||||
* sysdeps/s390/s390-32/elf/start.S (_start): Skip extra zeroes
|
|
||||||
diff --git a/sysdeps/s390/s390-64/utf16-utf32-z9.c b/sysdeps/s390/s390-64/utf16-utf32-z9.c
|
|
||||||
index 5bcaaae..14daf21 100644
|
|
||||||
--- a/sysdeps/s390/s390-64/utf16-utf32-z9.c
|
|
||||||
+++ b/sysdeps/s390/s390-64/utf16-utf32-z9.c
|
|
||||||
@@ -169,10 +169,7 @@ gconv_end (struct __gconv_step *data)
|
|
||||||
register unsigned long long outlen asm("11") = outend - outptr; \
|
|
||||||
uint64_t cc = 0; \
|
|
||||||
\
|
|
||||||
- asm volatile (".machine push \n\t" \
|
|
||||||
- ".machine \"z9-109\" \n\t" \
|
|
||||||
- "0: " INSTRUCTION " \n\t" \
|
|
||||||
- ".machine pop \n\t" \
|
|
||||||
+ asm volatile ("0: " INSTRUCTION " \n\t" \
|
|
||||||
" jo 0b \n\t" \
|
|
||||||
" ipm %2 \n" \
|
|
||||||
: "+a" (pOutput), "+a" (pInput), "+d" (cc), \
|
|
||||||
diff --git a/sysdeps/s390/s390-64/utf8-utf16-z9.c b/sysdeps/s390/s390-64/utf8-utf16-z9.c
|
|
||||||
index 812a42f..5f73f3c 100644
|
|
||||||
--- a/sysdeps/s390/s390-64/utf8-utf16-z9.c
|
|
||||||
+++ b/sysdeps/s390/s390-64/utf8-utf16-z9.c
|
|
||||||
@@ -151,10 +151,7 @@ gconv_end (struct __gconv_step *data)
|
|
||||||
register unsigned long long outlen asm("11") = outend - outptr; \
|
|
||||||
uint64_t cc = 0; \
|
|
||||||
\
|
|
||||||
- asm volatile (".machine push \n\t" \
|
|
||||||
- ".machine \"z9-109\" \n\t" \
|
|
||||||
- "0: " INSTRUCTION " \n\t" \
|
|
||||||
- ".machine pop \n\t" \
|
|
||||||
+ asm volatile ("0: " INSTRUCTION " \n\t" \
|
|
||||||
" jo 0b \n\t" \
|
|
||||||
" ipm %2 \n" \
|
|
||||||
: "+a" (pOutput), "+a" (pInput), "+d" (cc), \
|
|
||||||
diff --git a/sysdeps/s390/s390-64/utf8-utf32-z9.c b/sysdeps/s390/s390-64/utf8-utf32-z9.c
|
|
||||||
index 0ffd848..17ef8bc 100644
|
|
||||||
--- a/sysdeps/s390/s390-64/utf8-utf32-z9.c
|
|
||||||
+++ b/sysdeps/s390/s390-64/utf8-utf32-z9.c
|
|
||||||
@@ -155,10 +155,7 @@ gconv_end (struct __gconv_step *data)
|
|
||||||
register unsigned long long outlen asm("11") = outend - outptr; \
|
|
||||||
uint64_t cc = 0; \
|
|
||||||
\
|
|
||||||
- asm volatile (".machine push \n\t" \
|
|
||||||
- ".machine \"z9-109\" \n\t" \
|
|
||||||
- "0: " INSTRUCTION " \n\t" \
|
|
||||||
- ".machine pop \n\t" \
|
|
||||||
+ asm volatile ("0: " INSTRUCTION " \n\t" \
|
|
||||||
" jo 0b \n\t" \
|
|
||||||
" ipm %2 \n" \
|
|
||||||
: "+a" (pOutput), "+a" (pInput), "+d" (cc), \
|
|
@ -1,31 +0,0 @@
|
|||||||
From 8c508c82e7ded8bb87e2784e25be9d9f8871d6b9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jakub Jelinek <jakub@redhat.com>
|
|
||||||
Date: Mon, 15 Nov 2004 13:15:02 +0000
|
|
||||||
Subject: [PATCH] Restore change unintentionally killed during merge.
|
|
||||||
|
|
||||||
---
|
|
||||||
debug/tst-chk1.c | 4 ++--
|
|
||||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c
|
|
||||||
index 37320c3..0e5ba88 100644
|
|
||||||
--- a/debug/tst-chk1.c
|
|
||||||
+++ b/debug/tst-chk1.c
|
|
||||||
@@ -244,7 +244,7 @@ do_test (void)
|
|
||||||
if (memcmp (a.buf1, "aabcdabcjj", 10))
|
|
||||||
FAIL ();
|
|
||||||
|
|
||||||
-#if __USE_FORTIFY_LEVEL < 2
|
|
||||||
+#if __USE_FORTIFY_LEVEL < 2 || !__GNUC_PREREQ (4, 0)
|
|
||||||
/* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2
|
|
||||||
and sufficient GCC support, as the string operations overflow
|
|
||||||
from a.buf1 into a.buf2. */
|
|
||||||
@@ -359,7 +359,7 @@ do_test (void)
|
|
||||||
memset (a.buf1 + 9, 'j', l0 + 2);
|
|
||||||
CHK_FAIL_END
|
|
||||||
|
|
||||||
-# if __USE_FORTIFY_LEVEL >= 2
|
|
||||||
+# if __USE_FORTIFY_LEVEL >= 2 && __GNUC_PREREQ (4, 0)
|
|
||||||
# define O 0
|
|
||||||
# else
|
|
||||||
# define O 1
|
|
@ -1,18 +1,16 @@
|
|||||||
diff --git a/nptl/Makefile b/nptl/Makefile
|
diff -Nrup a/nptl/Makefile b/nptl/Makefile
|
||||||
index f21276c..de324fa 100644
|
--- a/nptl/Makefile 2012-10-05 07:42:57.935825028 -0600
|
||||||
--- a/nptl/Makefile
|
+++ b/nptl/Makefile 2012-10-05 07:44:08.989533264 -0600
|
||||||
+++ b/nptl/Makefile
|
@@ -206,7 +206,7 @@ tests = tst-typesizes \
|
||||||
@@ -206,7 +206,8 @@ tests = tst-typesizes \
|
|
||||||
tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
|
tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
|
||||||
tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
|
tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
|
||||||
tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
|
tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
|
||||||
- tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 tst-cond-except \
|
- tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 \
|
||||||
+ tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 tst-cond25 \
|
+ tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 tst-cond25 \
|
||||||
+ tst-cond-except \
|
tst-cond-except \
|
||||||
tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \
|
tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \
|
||||||
tst-robust6 tst-robust7 tst-robust8 tst-robust9 \
|
tst-robust6 tst-robust7 tst-robust8 tst-robust9 \
|
||||||
tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 tst-robustpi5 \
|
@@ -276,6 +276,7 @@ gen-as-const-headers = pthread-errnos.sy
|
||||||
@@ -276,6 +276,7 @@ gen-as-const-headers = pthread-errnos.sym
|
|
||||||
LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
|
LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
|
||||||
|
|
||||||
LDFLAGS-tst-cond24 = -lrt
|
LDFLAGS-tst-cond24 = -lrt
|
||||||
@ -20,10 +18,9 @@ index f21276c..de324fa 100644
|
|||||||
|
|
||||||
include ../Makeconfig
|
include ../Makeconfig
|
||||||
|
|
||||||
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
|
diff -Nrup a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
|
||||||
index 6761c13..884987c 100644
|
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2012-10-05 07:22:36.000000000 -0600
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
|
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2012-10-05 07:43:27.448703838 -0600
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
|
|
||||||
@@ -649,10 +649,24 @@ __condvar_tw_cleanup:
|
@@ -649,10 +649,24 @@ __condvar_tw_cleanup:
|
||||||
movl $0x7fffffff, %edx
|
movl $0x7fffffff, %edx
|
||||||
ENTER_KERNEL
|
ENTER_KERNEL
|
||||||
@ -38,23 +35,22 @@ index 6761c13..884987c 100644
|
|||||||
+ andl $(ROBUST_BIT|PI_BIT), %ebx
|
+ andl $(ROBUST_BIT|PI_BIT), %ebx
|
||||||
+ cmpl $PI_BIT, %ebx
|
+ cmpl $PI_BIT, %ebx
|
||||||
+ jne 8f
|
+ jne 8f
|
||||||
+
|
|
||||||
|
- movl %esi, (%esp)
|
||||||
+ movl (%eax), %ebx
|
+ movl (%eax), %ebx
|
||||||
+ andl $TID_MASK, %ebx
|
+ andl $TID_MASK, %ebx
|
||||||
+ cmpl %ebx, %gs:TID
|
+ cmpl %ebx, %gs:TID
|
||||||
+ je 9f
|
+ je 9f
|
||||||
+
|
+
|
||||||
+8: call __pthread_mutex_cond_lock
|
+8: call __pthread_mutex_cond_lock
|
||||||
|
+
|
||||||
- movl %esi, (%esp)
|
|
||||||
+9: movl %esi, (%esp)
|
+9: movl %esi, (%esp)
|
||||||
.LcallUR:
|
.LcallUR:
|
||||||
call _Unwind_Resume
|
call _Unwind_Resume
|
||||||
hlt
|
hlt
|
||||||
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
|
diff -Nrup 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 0af06ac..bf1e5fe 100644
|
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2012-10-05 07:22:36.000000000 -0600
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
|
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2012-10-05 07:43:27.449703835 -0600
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
|
|
||||||
@@ -566,10 +566,24 @@ __condvar_w_cleanup:
|
@@ -566,10 +566,24 @@ __condvar_w_cleanup:
|
||||||
movl $0x7fffffff, %edx
|
movl $0x7fffffff, %edx
|
||||||
ENTER_KERNEL
|
ENTER_KERNEL
|
||||||
@ -69,32 +65,30 @@ index 0af06ac..bf1e5fe 100644
|
|||||||
+ andl $(ROBUST_BIT|PI_BIT), %ebx
|
+ andl $(ROBUST_BIT|PI_BIT), %ebx
|
||||||
+ cmpl $PI_BIT, %ebx
|
+ cmpl $PI_BIT, %ebx
|
||||||
+ jne 8f
|
+ jne 8f
|
||||||
+
|
|
||||||
|
- movl %esi, (%esp)
|
||||||
+ movl (%eax), %ebx
|
+ movl (%eax), %ebx
|
||||||
+ andl $TID_MASK, %ebx
|
+ andl $TID_MASK, %ebx
|
||||||
+ cmpl %ebx, %gs:TID
|
+ cmpl %ebx, %gs:TID
|
||||||
+ je 9f
|
+ je 9f
|
||||||
+
|
+
|
||||||
+8: call __pthread_mutex_cond_lock
|
+8: call __pthread_mutex_cond_lock
|
||||||
|
+
|
||||||
- movl %esi, (%esp)
|
|
||||||
+9: movl %esi, (%esp)
|
+9: movl %esi, (%esp)
|
||||||
.LcallUR:
|
.LcallUR:
|
||||||
call _Unwind_Resume
|
call _Unwind_Resume
|
||||||
hlt
|
hlt
|
||||||
diff --git a/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym b/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym
|
diff -Nrup a/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym b/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym
|
||||||
index 46fbd0d..0ac51db 100644
|
--- a/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym 2012-10-05 07:22:36.000000000 -0600
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym
|
+++ b/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym 2012-10-05 07:43:27.487703680 -0600
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym
|
@@ -6,3 +6,4 @@ MUTEX_KIND offsetof (pthread_mutex_t, __
|
||||||
@@ -6,3 +6,4 @@ MUTEX_KIND offsetof (pthread_mutex_t, __data.__kind)
|
|
||||||
ROBUST_BIT PTHREAD_MUTEX_ROBUST_NORMAL_NP
|
ROBUST_BIT PTHREAD_MUTEX_ROBUST_NORMAL_NP
|
||||||
PI_BIT PTHREAD_MUTEX_PRIO_INHERIT_NP
|
PI_BIT PTHREAD_MUTEX_PRIO_INHERIT_NP
|
||||||
PS_BIT PTHREAD_MUTEX_PSHARED_BIT
|
PS_BIT PTHREAD_MUTEX_PSHARED_BIT
|
||||||
+TID_MASK FUTEX_TID_MASK
|
+TID_MASK FUTEX_TID_MASK
|
||||||
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
diff -Nrup a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
||||||
index b669abb..eb13326 100644
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2012-10-05 07:22:36.000000000 -0600
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2012-10-05 07:43:27.489703672 -0600
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
|
||||||
@@ -771,10 +771,24 @@ __condvar_cleanup2:
|
@@ -771,10 +771,24 @@ __condvar_cleanup2:
|
||||||
movl $SYS_futex, %eax
|
movl $SYS_futex, %eax
|
||||||
syscall
|
syscall
|
||||||
@ -109,23 +103,22 @@ index b669abb..eb13326 100644
|
|||||||
+ andl $(ROBUST_BIT|PI_BIT), %eax
|
+ andl $(ROBUST_BIT|PI_BIT), %eax
|
||||||
+ cmpl $PI_BIT, %eax
|
+ cmpl $PI_BIT, %eax
|
||||||
+ jne 7f
|
+ jne 7f
|
||||||
+
|
|
||||||
|
- movq 24(%rsp), %rdi
|
||||||
+ movl (%rdi), %eax
|
+ movl (%rdi), %eax
|
||||||
+ andl $TID_MASK, %eax
|
+ andl $TID_MASK, %eax
|
||||||
+ cmpl %eax, %fs:TID
|
+ cmpl %eax, %fs:TID
|
||||||
+ je 8f
|
+ je 8f
|
||||||
+
|
+
|
||||||
+7: callq __pthread_mutex_cond_lock
|
+7: callq __pthread_mutex_cond_lock
|
||||||
|
+
|
||||||
- movq 24(%rsp), %rdi
|
|
||||||
+8: movq 24(%rsp), %rdi
|
+8: movq 24(%rsp), %rdi
|
||||||
movq FRAME_SIZE(%rsp), %r15
|
movq FRAME_SIZE(%rsp), %r15
|
||||||
movq FRAME_SIZE+8(%rsp), %r14
|
movq FRAME_SIZE+8(%rsp), %r14
|
||||||
movq FRAME_SIZE+16(%rsp), %r13
|
movq FRAME_SIZE+16(%rsp), %r13
|
||||||
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
|
diff -Nrup 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 ec403cd..6c6dc0e 100644
|
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2012-10-05 07:22:36.000000000 -0600
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
|
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2012-10-05 07:43:27.490703667 -0600
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
|
|
||||||
@@ -495,10 +495,24 @@ __condvar_cleanup1:
|
@@ -495,10 +495,24 @@ __condvar_cleanup1:
|
||||||
movl $SYS_futex, %eax
|
movl $SYS_futex, %eax
|
||||||
syscall
|
syscall
|
||||||
@ -140,24 +133,22 @@ index ec403cd..6c6dc0e 100644
|
|||||||
+ andl $(ROBUST_BIT|PI_BIT), %eax
|
+ andl $(ROBUST_BIT|PI_BIT), %eax
|
||||||
+ cmpl $PI_BIT, %eax
|
+ cmpl $PI_BIT, %eax
|
||||||
+ jne 7f
|
+ jne 7f
|
||||||
+
|
|
||||||
|
- movq 24(%rsp), %rdi
|
||||||
+ movl (%rdi), %eax
|
+ movl (%rdi), %eax
|
||||||
+ andl $TID_MASK, %eax
|
+ andl $TID_MASK, %eax
|
||||||
+ cmpl %eax, %fs:TID
|
+ cmpl %eax, %fs:TID
|
||||||
+ je 8f
|
+ je 8f
|
||||||
+
|
+
|
||||||
+7: callq __pthread_mutex_cond_lock
|
+7: callq __pthread_mutex_cond_lock
|
||||||
|
+
|
||||||
- movq 24(%rsp), %rdi
|
|
||||||
+8: movq 24(%rsp), %rdi
|
+8: movq 24(%rsp), %rdi
|
||||||
.LcallUR:
|
.LcallUR:
|
||||||
call _Unwind_Resume@PLT
|
call _Unwind_Resume@PLT
|
||||||
hlt
|
hlt
|
||||||
diff --git a/nptl/tst-cond25.c b/nptl/tst-cond25.c
|
diff -Nrup a/nptl/tst-cond25.c b/nptl/tst-cond25.c
|
||||||
new file mode 100644
|
--- a/nptl/tst-cond25.c 1969-12-31 17:00:00.000000000 -0700
|
||||||
index 0000000..4488e74
|
+++ b/nptl/tst-cond25.c 2012-10-05 07:43:27.491703663 -0600
|
||||||
--- /dev/null
|
|
||||||
+++ b/nptl/tst-cond25.c
|
|
||||||
@@ -0,0 +1,282 @@
|
@@ -0,0 +1,282 @@
|
||||||
+/* Verify that condition variables synchronized by PI mutexes don't hang on
|
+/* Verify that condition variables synchronized by PI mutexes don't hang on
|
||||||
+ on cancellation.
|
+ on cancellation.
|
||||||
|
@ -1,717 +0,0 @@
|
|||||||
diff -Nrup a/nptl/Makefile b/nptl/Makefile
|
|
||||||
--- a/nptl/Makefile 2012-10-02 06:37:02.202769148 -0600
|
|
||||||
+++ b/nptl/Makefile 2012-10-02 06:38:22.574397081 -0600
|
|
||||||
@@ -206,7 +206,7 @@ tests = tst-typesizes \
|
|
||||||
tst-cond1 tst-cond2 tst-cond3 tst-cond4 tst-cond5 tst-cond6 tst-cond7 \
|
|
||||||
tst-cond8 tst-cond9 tst-cond10 tst-cond11 tst-cond12 tst-cond13 \
|
|
||||||
tst-cond14 tst-cond15 tst-cond16 tst-cond17 tst-cond18 tst-cond19 \
|
|
||||||
- tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond-except \
|
|
||||||
+ tst-cond20 tst-cond21 tst-cond22 tst-cond23 tst-cond24 tst-cond-except \
|
|
||||||
tst-robust1 tst-robust2 tst-robust3 tst-robust4 tst-robust5 \
|
|
||||||
tst-robust6 tst-robust7 tst-robust8 tst-robust9 \
|
|
||||||
tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 tst-robustpi5 \
|
|
||||||
@@ -274,6 +274,7 @@ gen-as-const-headers = pthread-errnos.sy
|
|
||||||
|
|
||||||
LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst
|
|
||||||
|
|
||||||
+LDFLAGS-tst-cond24 = -lrt
|
|
||||||
|
|
||||||
include ../Makeconfig
|
|
||||||
|
|
||||||
diff -Nrup a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
|
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2012-10-02 06:05:17.000000000 -0600
|
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2012-10-02 06:37:54.959525283 -0600
|
|
||||||
@@ -273,9 +273,24 @@ __pthread_cond_timedwait:
|
|
||||||
jne 9f
|
|
||||||
|
|
||||||
15: cmpl $-ETIMEDOUT, %esi
|
|
||||||
- jne 8b
|
|
||||||
+ je 28f
|
|
||||||
|
|
||||||
- addl $1, wakeup_seq(%ebx)
|
|
||||||
+ /* We need to go back to futex_wait. If we're using requeue_pi, then
|
|
||||||
+ release the mutex we had acquired and go back. */
|
|
||||||
+ movl 24(%esp), %edx
|
|
||||||
+ test %edx, %edx
|
|
||||||
+ jz 8b
|
|
||||||
+
|
|
||||||
+ /* Adjust the mutex values first and then unlock it. The unlock
|
|
||||||
+ should always succeed or else the kernel did not lock the mutex
|
|
||||||
+ correctly. */
|
|
||||||
+ movl dep_mutex(%ebx), %eax
|
|
||||||
+ call __pthread_mutex_cond_lock_adjust
|
|
||||||
+ xorl %edx, %edx
|
|
||||||
+ call __pthread_mutex_unlock_usercnt
|
|
||||||
+ jmp 8b
|
|
||||||
+
|
|
||||||
+28: addl $1, wakeup_seq(%ebx)
|
|
||||||
adcl $0, wakeup_seq+4(%ebx)
|
|
||||||
addl $1, cond_futex(%ebx)
|
|
||||||
movl $ETIMEDOUT, %esi
|
|
||||||
diff -Nrup a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
|
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2012-10-02 06:05:17.000000000 -0600
|
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2012-10-02 06:37:54.961525273 -0600
|
|
||||||
@@ -136,7 +136,6 @@ __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
|
|
||||||
@@ -152,9 +151,6 @@ __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
|
|
||||||
@@ -206,12 +202,12 @@ __pthread_cond_wait:
|
|
||||||
cmpl 8(%esp), %edx
|
|
||||||
jne 7f
|
|
||||||
cmpl 4(%esp), %edi
|
|
||||||
- je 8b
|
|
||||||
+ je 22f
|
|
||||||
|
|
||||||
7: cmpl %ecx, %edx
|
|
||||||
jne 9f
|
|
||||||
cmp %eax, %edi
|
|
||||||
- je 8b
|
|
||||||
+ je 22f
|
|
||||||
|
|
||||||
9: addl $1, woken_seq(%ebx)
|
|
||||||
adcl $0, woken_seq+4(%ebx)
|
|
||||||
@@ -287,6 +283,22 @@ __pthread_cond_wait:
|
|
||||||
jmp 20b
|
|
||||||
|
|
||||||
cfi_adjust_cfa_offset(-FRAME_SIZE);
|
|
||||||
+
|
|
||||||
+ /* We need to go back to futex_wait. If we're using requeue_pi, then
|
|
||||||
+ release the mutex we had acquired and go back. */
|
|
||||||
+22: movl 16(%esp), %edx
|
|
||||||
+ test %edx, %edx
|
|
||||||
+ jz 8b
|
|
||||||
+
|
|
||||||
+ /* Adjust the mutex values first and then unlock it. The unlock
|
|
||||||
+ should always succeed or else the kernel did not lock the mutex
|
|
||||||
+ correctly. */
|
|
||||||
+ movl dep_mutex(%ebx), %eax
|
|
||||||
+ call __pthread_mutex_cond_lock_adjust
|
|
||||||
+ xorl %edx, %edx
|
|
||||||
+ call __pthread_mutex_unlock_usercnt
|
|
||||||
+ jmp 8b
|
|
||||||
+
|
|
||||||
/* Initial locking failed. */
|
|
||||||
1:
|
|
||||||
#if cond_lock == 0
|
|
||||||
@@ -400,77 +412,6 @@ __pthread_cond_wait:
|
|
||||||
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)
|
|
||||||
@@ -651,10 +592,6 @@ __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 -Nrup a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S
|
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2012-10-02 06:05:17.000000000 -0600
|
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2012-10-02 06:37:55.000525092 -0600
|
|
||||||
@@ -103,7 +103,7 @@ __pthread_cond_timedwait:
|
|
||||||
mov %RSI_LP, dep_mutex(%rdi)
|
|
||||||
|
|
||||||
22:
|
|
||||||
- xorl %r15d, %r15d
|
|
||||||
+ xorb %r15b, %r15b
|
|
||||||
|
|
||||||
#ifndef __ASSUME_FUTEX_CLOCK_REALTIME
|
|
||||||
# ifdef PIC
|
|
||||||
@@ -190,18 +190,36 @@ __pthread_cond_timedwait:
|
|
||||||
movl $SYS_futex, %eax
|
|
||||||
syscall
|
|
||||||
|
|
||||||
- movl $1, %r15d
|
|
||||||
+ cmpl $0, %eax
|
|
||||||
+ sete %r15b
|
|
||||||
+
|
|
||||||
#ifdef __ASSUME_REQUEUE_PI
|
|
||||||
jmp 62f
|
|
||||||
#else
|
|
||||||
- cmpq $-4095, %rax
|
|
||||||
- jnae 62f
|
|
||||||
+ je 62f
|
|
||||||
+
|
|
||||||
+ /* If we raced for the futex with someone else, the syscall may return
|
|
||||||
+ an EAGAIN. Act as if you did a regular FUTEX_WAIT and returned
|
|
||||||
+ successfully from it. Let the sequence numbers hold you back if
|
|
||||||
+ you were not supposed to be woken up. That way, you don't forget
|
|
||||||
+ to take the mutex lock on your way out. We retry using normal
|
|
||||||
+ futex functions only if the kernel returned ENOSYS, since normal
|
|
||||||
+ and PI futexes don't mix.
|
|
||||||
+
|
|
||||||
+ Note that we don't check for EAGAIN specifically; we assume that the
|
|
||||||
+ only other error the futex function could return is EAGAIN (barring
|
|
||||||
+ the ETIMEOUT of course, for the timeout case in futex) since
|
|
||||||
+ anything else would mean an error in our function. It is too
|
|
||||||
+ expensive to do that check for every call (which is quite common in
|
|
||||||
+ case of a large number of threads), so it has been skipped. */
|
|
||||||
+ cmpl $-ENOSYS, %eax
|
|
||||||
+ jne 62f
|
|
||||||
|
|
||||||
subq $cond_futex, %rdi
|
|
||||||
#endif
|
|
||||||
|
|
||||||
61: movl $(FUTEX_WAIT_BITSET|FUTEX_PRIVATE_FLAG), %esi
|
|
||||||
-60: xorl %r15d, %r15d
|
|
||||||
+60: xorb %r15b, %r15b
|
|
||||||
xorl %eax, %eax
|
|
||||||
/* The following only works like this because we only support
|
|
||||||
two clocks, represented using a single bit. */
|
|
||||||
@@ -248,7 +266,23 @@ __pthread_cond_timedwait:
|
|
||||||
ja 39f
|
|
||||||
|
|
||||||
45: cmpq $-ETIMEDOUT, %r14
|
|
||||||
- jne 38b
|
|
||||||
+ je 99f
|
|
||||||
+
|
|
||||||
+ /* We need to go back to futex_wait. If we're using requeue_pi, then
|
|
||||||
+ release the mutex we had acquired and go back. */
|
|
||||||
+ test %r15b, %r15b
|
|
||||||
+ jz 38b
|
|
||||||
+
|
|
||||||
+ /* Adjust the mutex values first and then unlock it. The unlock
|
|
||||||
+ should always succeed or else the kernel did not lock the
|
|
||||||
+ mutex correctly. */
|
|
||||||
+ movq %r8, %rdi
|
|
||||||
+ callq __pthread_mutex_cond_lock_adjust
|
|
||||||
+ xorl %esi, %esi
|
|
||||||
+ callq __pthread_mutex_unlock_usercnt
|
|
||||||
+ /* Reload cond_var. */
|
|
||||||
+ movq 8(%rsp), %rdi
|
|
||||||
+ jmp 38b
|
|
||||||
|
|
||||||
99: incq wakeup_seq(%rdi)
|
|
||||||
incl cond_futex(%rdi)
|
|
||||||
@@ -298,7 +332,7 @@ __pthread_cond_timedwait:
|
|
||||||
/* If requeue_pi is used the kernel performs the locking of the
|
|
||||||
mutex. */
|
|
||||||
41: movq 16(%rsp), %rdi
|
|
||||||
- testl %r15d, %r15d
|
|
||||||
+ testb %r15b, %r15b
|
|
||||||
jnz 64f
|
|
||||||
|
|
||||||
callq __pthread_mutex_cond_lock
|
|
||||||
diff -Nrup a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
|
|
||||||
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2012-10-02 06:05:17.000000000 -0600
|
|
||||||
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2012-10-02 06:37:55.002525084 -0600
|
|
||||||
@@ -136,19 +136,33 @@ __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
|
|
||||||
+ cmpl $0, %eax
|
|
||||||
+ sete %r8b
|
|
||||||
+
|
|
||||||
#ifdef __ASSUME_REQUEUE_PI
|
|
||||||
jmp 62f
|
|
||||||
#else
|
|
||||||
- cmpq $-4095, %rax
|
|
||||||
- jnae 62f
|
|
||||||
+ je 62f
|
|
||||||
+
|
|
||||||
+ /* If we raced for the futex with someone else, the syscall may return
|
|
||||||
+ an EAGAIN. Act as if you did a regular FUTEX_WAIT and returned
|
|
||||||
+ successfully from it. Let the sequence numbers hold you back if
|
|
||||||
+ you were not supposed to be woken up. That way, you don't forget
|
|
||||||
+ to take the mutex lock on your way out. We retry using normal
|
|
||||||
+ futex functions only if the kernel returned ENOSYS, since normal
|
|
||||||
+ and PI futexes don't mix.
|
|
||||||
+
|
|
||||||
+ Note that we don't check for EAGAIN specifically; we assume that the
|
|
||||||
+ only other error the futex function could return is EAGAIN since
|
|
||||||
+ anything else would mean an error in our function. It is too
|
|
||||||
+ expensive to do that check for every call (which is quite common in
|
|
||||||
+ case of a large number of threads), so it has been skipped. */
|
|
||||||
+ cmpl $-ENOSYS, %eax
|
|
||||||
+ jne 62f
|
|
||||||
|
|
||||||
# ifndef __ASSUME_PRIVATE_FUTEX
|
|
||||||
movl $FUTEX_WAIT, %esi
|
|
||||||
@@ -161,7 +175,7 @@ __pthread_cond_wait:
|
|
||||||
#else
|
|
||||||
orl %fs:PRIVATE_FUTEX, %esi
|
|
||||||
#endif
|
|
||||||
-60: xorl %r8d, %r8d
|
|
||||||
+60: xorb %r8b, %r8b
|
|
||||||
movl $SYS_futex, %eax
|
|
||||||
syscall
|
|
||||||
|
|
||||||
@@ -191,10 +205,10 @@ __pthread_cond_wait:
|
|
||||||
jne 16f
|
|
||||||
|
|
||||||
cmpq 24(%rsp), %r9
|
|
||||||
- jbe 8b
|
|
||||||
+ jbe 19f
|
|
||||||
|
|
||||||
cmpq %rax, %r9
|
|
||||||
- jna 8b
|
|
||||||
+ jna 19f
|
|
||||||
|
|
||||||
incq woken_seq(%rdi)
|
|
||||||
|
|
||||||
@@ -236,7 +250,7 @@ __pthread_cond_wait:
|
|
||||||
/* If requeue_pi is used the kernel performs the locking of the
|
|
||||||
mutex. */
|
|
||||||
11: movq 16(%rsp), %rdi
|
|
||||||
- testl %r8d, %r8d
|
|
||||||
+ testb %r8b, %r8b
|
|
||||||
jnz 18f
|
|
||||||
|
|
||||||
callq __pthread_mutex_cond_lock
|
|
||||||
@@ -253,6 +267,23 @@ __pthread_cond_wait:
|
|
||||||
xorl %eax, %eax
|
|
||||||
jmp 14b
|
|
||||||
|
|
||||||
+ /* We need to go back to futex_wait. If we're using requeue_pi, then
|
|
||||||
+ release the mutex we had acquired and go back. */
|
|
||||||
+19: testb %r8b, %r8b
|
|
||||||
+ jz 8b
|
|
||||||
+
|
|
||||||
+ /* Adjust the mutex values first and then unlock it. The unlock
|
|
||||||
+ should always succeed or else the kernel did not lock the mutex
|
|
||||||
+ correctly. */
|
|
||||||
+ movq 16(%rsp), %rdi
|
|
||||||
+ callq __pthread_mutex_cond_lock_adjust
|
|
||||||
+ movq %rdi, %r8
|
|
||||||
+ xorl %esi, %esi
|
|
||||||
+ callq __pthread_mutex_unlock_usercnt
|
|
||||||
+ /* Reload cond_var. */
|
|
||||||
+ movq 8(%rsp), %rdi
|
|
||||||
+ jmp 8b
|
|
||||||
+
|
|
||||||
/* Initial locking failed. */
|
|
||||||
1:
|
|
||||||
#if cond_lock != 0
|
|
||||||
@@ -331,69 +362,6 @@ __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
|
|
||||||
- LP_OP(cmp) $-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
|
|
||||||
- LP_OP(cmp) $-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
|
|
||||||
- mov dep_mutex(%rdi), %R8_LP
|
|
||||||
- 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)
|
|
||||||
@@ -547,10 +515,6 @@ __condvar_cleanup1:
|
|
||||||
.uleb128 .LcleanupEND-.LcleanupSTART
|
|
||||||
.uleb128 __condvar_cleanup1-.LSTARTCODE
|
|
||||||
.uleb128 0
|
|
||||||
- .uleb128 .LcleanupSTART2-.LSTARTCODE
|
|
||||||
- .uleb128 .LcleanupEND2-.LcleanupSTART2
|
|
||||||
- .uleb128 __condvar_cleanup1-.LSTARTCODE
|
|
||||||
- .uleb128 0
|
|
||||||
.uleb128 .LcallUR-.LSTARTCODE
|
|
||||||
.uleb128 .LENDCODE-.LcallUR
|
|
||||||
.uleb128 0
|
|
||||||
diff -Nrup a/nptl/tst-cond24.c b/nptl/tst-cond24.c
|
|
||||||
--- a/nptl/tst-cond24.c 1969-12-31 17:00:00.000000000 -0700
|
|
||||||
+++ b/nptl/tst-cond24.c 2012-10-02 06:37:55.003525080 -0600
|
|
||||||
@@ -0,0 +1,249 @@
|
|
||||||
+/* Verify that condition variables synchronized by PI mutexes don't hang.
|
|
||||||
+ Copyright (C) 2012 Free Software Foundation, Inc.
|
|
||||||
+ This file is part of the GNU C Library.
|
|
||||||
+
|
|
||||||
+ The GNU C Library is free software; you can redistribute it and/or
|
|
||||||
+ modify it under the terms of the GNU Lesser General Public
|
|
||||||
+ License as published by the Free Software Foundation; either
|
|
||||||
+ version 2.1 of the License, or (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
+ Lesser General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU Lesser General Public
|
|
||||||
+ License along with the GNU C Library; if not, see
|
|
||||||
+ <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+#include <pthread.h>
|
|
||||||
+#include <stdio.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <string.h>
|
|
||||||
+#include <errno.h>
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include <sys/syscall.h>
|
|
||||||
+#include <unistd.h>
|
|
||||||
+#include <sys/time.h>
|
|
||||||
+#include <time.h>
|
|
||||||
+
|
|
||||||
+#define THREADS_NUM 5
|
|
||||||
+#define MAXITER 50000
|
|
||||||
+
|
|
||||||
+static pthread_mutex_t mutex;
|
|
||||||
+static pthread_mutexattr_t mutex_attr;
|
|
||||||
+static pthread_cond_t cond;
|
|
||||||
+static pthread_t threads[THREADS_NUM];
|
|
||||||
+static int pending = 0;
|
|
||||||
+
|
|
||||||
+typedef void * (*threadfunc) (void *);
|
|
||||||
+
|
|
||||||
+void *
|
|
||||||
+thread_fun_timed (void *arg)
|
|
||||||
+{
|
|
||||||
+ int *ret = arg;
|
|
||||||
+ int rv, i;
|
|
||||||
+
|
|
||||||
+ printf ("Started thread_fun_timed[%d]\n", *ret);
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < MAXITER / THREADS_NUM; i++)
|
|
||||||
+ {
|
|
||||||
+ rv = pthread_mutex_lock (&mutex);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ *ret = 1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while (!pending)
|
|
||||||
+ {
|
|
||||||
+ struct timespec ts;
|
|
||||||
+ clock_gettime(CLOCK_REALTIME, &ts);
|
|
||||||
+ ts.tv_sec += 20;
|
|
||||||
+ rv = pthread_cond_timedwait (&cond, &mutex, &ts);
|
|
||||||
+
|
|
||||||
+ /* There should be no timeout either. */
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_cond_wait: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ *ret = 1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ pending--;
|
|
||||||
+
|
|
||||||
+ rv = pthread_mutex_unlock (&mutex);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ *ret = 1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ *ret = 0;
|
|
||||||
+
|
|
||||||
+out:
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void *
|
|
||||||
+thread_fun (void *arg)
|
|
||||||
+{
|
|
||||||
+ int *ret = arg;
|
|
||||||
+ int rv, i;
|
|
||||||
+
|
|
||||||
+ printf ("Started thread_fun[%d]\n", *ret);
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < MAXITER / THREADS_NUM; i++)
|
|
||||||
+ {
|
|
||||||
+ rv = pthread_mutex_lock (&mutex);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ *ret = 1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while (!pending)
|
|
||||||
+ {
|
|
||||||
+ rv = pthread_cond_wait (&cond, &mutex);
|
|
||||||
+
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_cond_wait: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ *ret = 1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ pending--;
|
|
||||||
+
|
|
||||||
+ rv = pthread_mutex_unlock (&mutex);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ *ret = 1;
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ *ret = 0;
|
|
||||||
+
|
|
||||||
+out:
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+do_test_wait (threadfunc f)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ int rv;
|
|
||||||
+ int counter = 0;
|
|
||||||
+ int retval[THREADS_NUM];
|
|
||||||
+
|
|
||||||
+ puts ("Starting test");
|
|
||||||
+
|
|
||||||
+ rv = pthread_mutexattr_init (&mutex_attr);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutexattr_init: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ rv = pthread_mutexattr_setprotocol (&mutex_attr, PTHREAD_PRIO_INHERIT);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutexattr_setprotocol: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ rv = pthread_mutex_init (&mutex, &mutex_attr);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutex_init: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ rv = pthread_cond_init (&cond, NULL);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_cond_init: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < THREADS_NUM; i++)
|
|
||||||
+ {
|
|
||||||
+ retval[i] = i;
|
|
||||||
+ rv = pthread_create (&threads[i], NULL, f, &retval[i]);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_create: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (; counter < MAXITER; counter++)
|
|
||||||
+ {
|
|
||||||
+ rv = pthread_mutex_lock (&mutex);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutex_lock: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!(counter % 100))
|
|
||||||
+ printf ("counter: %d\n", counter);
|
|
||||||
+ pending += 1;
|
|
||||||
+
|
|
||||||
+ rv = pthread_cond_signal (&cond);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_cond_signal: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ rv = pthread_mutex_unlock (&mutex);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_mutex_unlock: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < THREADS_NUM; i++)
|
|
||||||
+ {
|
|
||||||
+ void *ret;
|
|
||||||
+ rv = pthread_join (threads[i], &ret);
|
|
||||||
+ if (rv)
|
|
||||||
+ {
|
|
||||||
+ printf ("pthread_join: %s(%d)\n", strerror (rv), rv);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ if (ret && *(int *)ret)
|
|
||||||
+ {
|
|
||||||
+ printf ("Thread %d returned with an error\n", i);
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+do_test (void)
|
|
||||||
+{
|
|
||||||
+ puts ("Testing pthread_cond_wait");
|
|
||||||
+ int ret = do_test_wait (thread_fun);
|
|
||||||
+ if (ret)
|
|
||||||
+ return ret;
|
|
||||||
+
|
|
||||||
+ puts ("Testing pthread_cond_timedwait");
|
|
||||||
+ return do_test_wait (thread_fun_timed);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#define TIMEOUT 10
|
|
||||||
+#define TEST_FUNCTION do_test ()
|
|
||||||
+#include "../test-skeleton.c"
|
|
@ -1,12 +0,0 @@
|
|||||||
diff -Nrup c/scripts/check-local-headers.sh d/scripts/check-local-headers.sh
|
|
||||||
--- c/scripts/check-local-headers.sh 2012-05-20 19:47:38.000000000 -0600
|
|
||||||
+++ d/scripts/check-local-headers.sh 2012-05-20 23:54:51.258670072 -0600
|
|
||||||
@@ -28,7 +28,7 @@ exec ${AWK} -v includedir="$includedir"
|
|
||||||
BEGIN {
|
|
||||||
status = 0
|
|
||||||
exclude = "^" includedir \
|
|
||||||
- "/(.*-.*-.*/|)(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h)"
|
|
||||||
+ "/(.*-.*-.*/|)(asm[-/]|linux/|selinux/|gd|nss3/|sys/capability\\.h|libaudit\\.h|sys/sdt(-config)?\\.h))"
|
|
||||||
}
|
|
||||||
/^[^ ]/ && $1 ~ /.*:/ { obj = $1 }
|
|
||||||
{
|
|
31
glibc.spec
31
glibc.spec
@ -1,4 +1,4 @@
|
|||||||
%define glibcsrcdir glibc-2.16.90-05699367
|
%define glibcsrcdir glibc-2.16.90-c30e8edf
|
||||||
%define glibcversion 2.16.90
|
%define glibcversion 2.16.90
|
||||||
### glibc.spec.in follows:
|
### glibc.spec.in follows:
|
||||||
%define run_glibc_tests 1
|
%define run_glibc_tests 1
|
||||||
@ -27,7 +27,7 @@
|
|||||||
Summary: The GNU libc libraries
|
Summary: The GNU libc libraries
|
||||||
Name: glibc
|
Name: glibc
|
||||||
Version: %{glibcversion}
|
Version: %{glibcversion}
|
||||||
Release: 21%{?dist}
|
Release: 22%{?dist}
|
||||||
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
|
# GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
|
||||||
# Things that are linked directly into dynamically linked programs
|
# Things that are linked directly into dynamically linked programs
|
||||||
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
|
# and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
|
||||||
@ -56,10 +56,12 @@ Source1: %{glibcsrcdir}-fedora.tar.gz
|
|||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Patches that are highly unlikely to ever be accepated upstream.
|
# Patches that are highly unlikely to ever be accepted upstream.
|
||||||
#
|
#
|
||||||
# Is this still necessary, if so, it needs to go upstream
|
|
||||||
Patch0001: %{name}-stap.patch
|
# Configuration twiddle, not sure there's a good case to get upstream to
|
||||||
|
# change this.
|
||||||
|
Patch0001: %{name}-fedora-nscd.patch
|
||||||
|
|
||||||
# Reverting an upstream patch. Once upstream fixes the problem
|
# Reverting an upstream patch. Once upstream fixes the problem
|
||||||
# Remove this patch and resync.
|
# Remove this patch and resync.
|
||||||
@ -110,7 +112,6 @@ Patch0037: %{name}-fedora-test-debug-gnuc-hack.patch
|
|||||||
Patch0038: %{name}-fedora-getconf.patch
|
Patch0038: %{name}-fedora-getconf.patch
|
||||||
Patch0039: %{name}-fedora-getrlimit-PLT.patch
|
Patch0039: %{name}-fedora-getrlimit-PLT.patch
|
||||||
Patch0040: %{name}-fedora-i386-tls-direct-seg-refs.patch
|
Patch0040: %{name}-fedora-i386-tls-direct-seg-refs.patch
|
||||||
Patch0041: %{name}-fedora-test-debug-gnuc-compat.patch
|
|
||||||
Patch0042: %{name}-fedora-include-bits-ldbl.patch
|
Patch0042: %{name}-fedora-include-bits-ldbl.patch
|
||||||
Patch0043: %{name}-fedora-ldd.patch
|
Patch0043: %{name}-fedora-ldd.patch
|
||||||
Patch0044: %{name}-fedora-linux-tcsetattr.patch
|
Patch0044: %{name}-fedora-linux-tcsetattr.patch
|
||||||
@ -123,9 +124,7 @@ Patch0050: %{name}-fedora-locarchive.patch
|
|||||||
Patch0051: %{name}-fedora-manual-dircategory.patch
|
Patch0051: %{name}-fedora-manual-dircategory.patch
|
||||||
Patch0052: %{name}-fedora-nis-rh188246.patch
|
Patch0052: %{name}-fedora-nis-rh188246.patch
|
||||||
Patch0053: %{name}-fedora-nptl-linklibc.patch
|
Patch0053: %{name}-fedora-nptl-linklibc.patch
|
||||||
Patch0054: %{name}-fedora-nscd.patch
|
|
||||||
Patch0055: %{name}-fedora-nss-files-overflow-fix.patch
|
Patch0055: %{name}-fedora-nss-files-overflow-fix.patch
|
||||||
Patch0056: %{name}-fedora-s390-rh711330.patch
|
|
||||||
Patch0057: %{name}-fedora-ppc-unwind.patch
|
Patch0057: %{name}-fedora-ppc-unwind.patch
|
||||||
Patch0058: %{name}-fedora-pt_chown.patch
|
Patch0058: %{name}-fedora-pt_chown.patch
|
||||||
Patch0059: %{name}-fedora-regcomp-sw11561.patch
|
Patch0059: %{name}-fedora-regcomp-sw11561.patch
|
||||||
@ -185,9 +184,6 @@ Patch2027: %{name}-rh819430.patch
|
|||||||
# See http://sourceware.org/ml/libc-alpha/2012-06/msg00074.html
|
# See http://sourceware.org/ml/libc-alpha/2012-06/msg00074.html
|
||||||
Patch2028: %{name}-rh767693-2.patch
|
Patch2028: %{name}-rh767693-2.patch
|
||||||
|
|
||||||
# Upstream BZ 14417
|
|
||||||
Patch2061: %{name}-rh552960.patch
|
|
||||||
|
|
||||||
# Upstream BZ 14652
|
# Upstream BZ 14652
|
||||||
Patch2062: %{name}-rh552960-2.patch
|
Patch2062: %{name}-rh552960-2.patch
|
||||||
|
|
||||||
@ -414,7 +410,7 @@ package or when debugging this package.
|
|||||||
%prep
|
%prep
|
||||||
%setup -q -n %{glibcsrcdir} -b1
|
%setup -q -n %{glibcsrcdir} -b1
|
||||||
|
|
||||||
%patch0001 -E -p1
|
%patch0001 -p1
|
||||||
%patch0002 -p1
|
%patch0002 -p1
|
||||||
%patch0003 -p1
|
%patch0003 -p1
|
||||||
%patch0004 -p1
|
%patch0004 -p1
|
||||||
@ -454,7 +450,6 @@ package or when debugging this package.
|
|||||||
%patch0038 -p1
|
%patch0038 -p1
|
||||||
%patch0039 -p1
|
%patch0039 -p1
|
||||||
%patch0040 -p1
|
%patch0040 -p1
|
||||||
%patch0041 -p1
|
|
||||||
%patch0042 -p1
|
%patch0042 -p1
|
||||||
%patch0043 -p1
|
%patch0043 -p1
|
||||||
%patch0044 -p1
|
%patch0044 -p1
|
||||||
@ -467,14 +462,11 @@ package or when debugging this package.
|
|||||||
%patch0051 -p1
|
%patch0051 -p1
|
||||||
%patch0052 -p1
|
%patch0052 -p1
|
||||||
%patch0053 -p1
|
%patch0053 -p1
|
||||||
%patch0054 -p1
|
|
||||||
%patch0055 -p1
|
%patch0055 -p1
|
||||||
%patch0056 -p1
|
|
||||||
%patch0057 -p1
|
%patch0057 -p1
|
||||||
%patch0058 -p1
|
%patch0058 -p1
|
||||||
%patch0059 -p1
|
%patch0059 -p1
|
||||||
%patch0060 -p1
|
%patch0060 -p1
|
||||||
%patch2061 -p1
|
|
||||||
%patch2062 -p1
|
%patch2062 -p1
|
||||||
|
|
||||||
# On powerpc32, hp timing is only available in power4/power6
|
# On powerpc32, hp timing is only available in power4/power6
|
||||||
@ -1270,6 +1262,13 @@ rm -f *.filelist*
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Oct 5 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-22
|
||||||
|
- Resync with upstream sources
|
||||||
|
- Drop local 552960 patch now that it's upstream
|
||||||
|
- Drop local stap patch now obsolete
|
||||||
|
- Drop local s390 patch which avoided problems with old assemblers
|
||||||
|
- Drop old fortify source patch to deal with old compilers
|
||||||
|
|
||||||
* Thu Oct 4 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-21
|
* Thu Oct 4 2012 Siddhesh Poyarekar <siddhesh@redhat.com> - 2.16.90-21
|
||||||
- Take mutex in cleanup only if it is not already taken.
|
- Take mutex in cleanup only if it is not already taken.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user