From 665e71fb895ea085783de1bebca451966c09287f Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Fri, 5 Oct 2012 12:24:19 -0600 Subject: [PATCH] - 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 --- glibc-fedora-s390-rh711330.patch | 80 --- glibc-fedora-test-debug-gnuc-compat.patch | 31 - glibc-rh552960-2.patch | 85 ++- glibc-rh552960.patch | 717 ---------------------- glibc-stap.patch | 12 - glibc.spec | 31 +- 6 files changed, 53 insertions(+), 903 deletions(-) delete mode 100644 glibc-fedora-s390-rh711330.patch delete mode 100644 glibc-fedora-test-debug-gnuc-compat.patch delete mode 100644 glibc-rh552960.patch delete mode 100644 glibc-stap.patch diff --git a/glibc-fedora-s390-rh711330.patch b/glibc-fedora-s390-rh711330.patch deleted file mode 100644 index d9eb36b..0000000 --- a/glibc-fedora-s390-rh711330.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 5a0546afb448a71cf045b980eb27c13bf5783920 Mon Sep 17 00:00:00 2001 -From: Andreas Schwab -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 -- -- * 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 - - * 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), \ diff --git a/glibc-fedora-test-debug-gnuc-compat.patch b/glibc-fedora-test-debug-gnuc-compat.patch deleted file mode 100644 index e10ff7c..0000000 --- a/glibc-fedora-test-debug-gnuc-compat.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 8c508c82e7ded8bb87e2784e25be9d9f8871d6b9 Mon Sep 17 00:00:00 2001 -From: Jakub Jelinek -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 diff --git a/glibc-rh552960-2.patch b/glibc-rh552960-2.patch index 79842d5..c541073 100644 --- a/glibc-rh552960-2.patch +++ b/glibc-rh552960-2.patch @@ -1,18 +1,16 @@ -diff --git a/nptl/Makefile b/nptl/Makefile -index f21276c..de324fa 100644 ---- a/nptl/Makefile -+++ b/nptl/Makefile -@@ -206,7 +206,8 @@ tests = tst-typesizes \ +diff -Nrup a/nptl/Makefile b/nptl/Makefile +--- a/nptl/Makefile 2012-10-05 07:42:57.935825028 -0600 ++++ b/nptl/Makefile 2012-10-05 07:44:08.989533264 -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-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-cond-except \ + 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 \ -@@ -276,6 +276,7 @@ gen-as-const-headers = pthread-errnos.sym +@@ -276,6 +276,7 @@ gen-as-const-headers = pthread-errnos.sy LDFLAGS-pthread.so = -Wl,--enable-new-dtags,-z,nodelete,-z,initfirst LDFLAGS-tst-cond24 = -lrt @@ -20,10 +18,9 @@ index f21276c..de324fa 100644 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 -index 6761c13..884987c 100644 ---- 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 +--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2012-10-05 07:22:36.000000000 -0600 ++++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S 2012-10-05 07:43:27.448703838 -0600 @@ -649,10 +649,24 @@ __condvar_tw_cleanup: movl $0x7fffffff, %edx ENTER_KERNEL @@ -38,23 +35,22 @@ index 6761c13..884987c 100644 + andl $(ROBUST_BIT|PI_BIT), %ebx + cmpl $PI_BIT, %ebx + jne 8f -+ + +- movl %esi, (%esp) + movl (%eax), %ebx + andl $TID_MASK, %ebx + cmpl %ebx, %gs:TID + je 9f + +8: call __pthread_mutex_cond_lock - -- movl %esi, (%esp) ++ +9: movl %esi, (%esp) .LcallUR: call _Unwind_Resume 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 -index 0af06ac..bf1e5fe 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 +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-05 07:22:36.000000000 -0600 ++++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2012-10-05 07:43:27.449703835 -0600 @@ -566,10 +566,24 @@ __condvar_w_cleanup: movl $0x7fffffff, %edx ENTER_KERNEL @@ -69,32 +65,30 @@ index 0af06ac..bf1e5fe 100644 + andl $(ROBUST_BIT|PI_BIT), %ebx + cmpl $PI_BIT, %ebx + jne 8f -+ + +- movl %esi, (%esp) + movl (%eax), %ebx + andl $TID_MASK, %ebx + cmpl %ebx, %gs:TID + je 9f + +8: call __pthread_mutex_cond_lock - -- movl %esi, (%esp) ++ +9: movl %esi, (%esp) .LcallUR: call _Unwind_Resume hlt -diff --git 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 -+++ b/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym -@@ -6,3 +6,4 @@ MUTEX_KIND offsetof (pthread_mutex_t, __data.__kind) +diff -Nrup a/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym b/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym +--- a/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym 2012-10-05 07:22:36.000000000 -0600 ++++ b/nptl/sysdeps/unix/sysv/linux/pthread-pi-defines.sym 2012-10-05 07:43:27.487703680 -0600 +@@ -6,3 +6,4 @@ MUTEX_KIND offsetof (pthread_mutex_t, __ ROBUST_BIT PTHREAD_MUTEX_ROBUST_NORMAL_NP PI_BIT PTHREAD_MUTEX_PRIO_INHERIT_NP PS_BIT PTHREAD_MUTEX_PSHARED_BIT +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 -index b669abb..eb13326 100644 ---- 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 +--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2012-10-05 07:22:36.000000000 -0600 ++++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S 2012-10-05 07:43:27.489703672 -0600 @@ -771,10 +771,24 @@ __condvar_cleanup2: movl $SYS_futex, %eax syscall @@ -109,23 +103,22 @@ index b669abb..eb13326 100644 + andl $(ROBUST_BIT|PI_BIT), %eax + cmpl $PI_BIT, %eax + jne 7f -+ + +- movq 24(%rsp), %rdi + movl (%rdi), %eax + andl $TID_MASK, %eax + cmpl %eax, %fs:TID + je 8f + +7: callq __pthread_mutex_cond_lock - -- movq 24(%rsp), %rdi ++ +8: movq 24(%rsp), %rdi movq FRAME_SIZE(%rsp), %r15 movq FRAME_SIZE+8(%rsp), %r14 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 -index ec403cd..6c6dc0e 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 +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-05 07:22:36.000000000 -0600 ++++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2012-10-05 07:43:27.490703667 -0600 @@ -495,10 +495,24 @@ __condvar_cleanup1: movl $SYS_futex, %eax syscall @@ -140,24 +133,22 @@ index ec403cd..6c6dc0e 100644 + andl $(ROBUST_BIT|PI_BIT), %eax + cmpl $PI_BIT, %eax + jne 7f -+ + +- movq 24(%rsp), %rdi + movl (%rdi), %eax + andl $TID_MASK, %eax + cmpl %eax, %fs:TID + je 8f + +7: callq __pthread_mutex_cond_lock - -- movq 24(%rsp), %rdi ++ +8: movq 24(%rsp), %rdi .LcallUR: call _Unwind_Resume@PLT hlt -diff --git a/nptl/tst-cond25.c b/nptl/tst-cond25.c -new file mode 100644 -index 0000000..4488e74 ---- /dev/null -+++ b/nptl/tst-cond25.c +diff -Nrup a/nptl/tst-cond25.c b/nptl/tst-cond25.c +--- a/nptl/tst-cond25.c 1969-12-31 17:00:00.000000000 -0700 ++++ b/nptl/tst-cond25.c 2012-10-05 07:43:27.491703663 -0600 @@ -0,0 +1,282 @@ +/* Verify that condition variables synchronized by PI mutexes don't hang on + on cancellation. diff --git a/glibc-rh552960.patch b/glibc-rh552960.patch deleted file mode 100644 index eef7122..0000000 --- a/glibc-rh552960.patch +++ /dev/null @@ -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 -+ . */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#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" diff --git a/glibc-stap.patch b/glibc-stap.patch deleted file mode 100644 index e52e020..0000000 --- a/glibc-stap.patch +++ /dev/null @@ -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 } - { diff --git a/glibc.spec b/glibc.spec index 46921cc..75d6fb8 100644 --- a/glibc.spec +++ b/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 ### glibc.spec.in follows: %define run_glibc_tests 1 @@ -27,7 +27,7 @@ Summary: The GNU libc libraries Name: glibc Version: %{glibcversion} -Release: 21%{?dist} +Release: 22%{?dist} # GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries. # Things that are linked directly into dynamically linked programs # 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 # Remove this patch and resync. @@ -110,7 +112,6 @@ Patch0037: %{name}-fedora-test-debug-gnuc-hack.patch Patch0038: %{name}-fedora-getconf.patch Patch0039: %{name}-fedora-getrlimit-PLT.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 Patch0043: %{name}-fedora-ldd.patch Patch0044: %{name}-fedora-linux-tcsetattr.patch @@ -123,9 +124,7 @@ Patch0050: %{name}-fedora-locarchive.patch Patch0051: %{name}-fedora-manual-dircategory.patch Patch0052: %{name}-fedora-nis-rh188246.patch Patch0053: %{name}-fedora-nptl-linklibc.patch -Patch0054: %{name}-fedora-nscd.patch Patch0055: %{name}-fedora-nss-files-overflow-fix.patch -Patch0056: %{name}-fedora-s390-rh711330.patch Patch0057: %{name}-fedora-ppc-unwind.patch Patch0058: %{name}-fedora-pt_chown.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 Patch2028: %{name}-rh767693-2.patch -# Upstream BZ 14417 -Patch2061: %{name}-rh552960.patch - # Upstream BZ 14652 Patch2062: %{name}-rh552960-2.patch @@ -414,7 +410,7 @@ package or when debugging this package. %prep %setup -q -n %{glibcsrcdir} -b1 -%patch0001 -E -p1 +%patch0001 -p1 %patch0002 -p1 %patch0003 -p1 %patch0004 -p1 @@ -454,7 +450,6 @@ package or when debugging this package. %patch0038 -p1 %patch0039 -p1 %patch0040 -p1 -%patch0041 -p1 %patch0042 -p1 %patch0043 -p1 %patch0044 -p1 @@ -467,14 +462,11 @@ package or when debugging this package. %patch0051 -p1 %patch0052 -p1 %patch0053 -p1 -%patch0054 -p1 %patch0055 -p1 -%patch0056 -p1 %patch0057 -p1 %patch0058 -p1 %patch0059 -p1 %patch0060 -p1 -%patch2061 -p1 %patch2062 -p1 # On powerpc32, hp timing is only available in power4/power6 @@ -1270,6 +1262,13 @@ rm -f *.filelist* %endif %changelog +* Fri Oct 5 2012 Siddhesh Poyarekar - 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 - 2.16.90-21 - Take mutex in cleanup only if it is not already taken.