Date: Wednesday, December 28, 2011 @ 03:02:40
  Author: allan
Revision: 145697

upgpkg: glibc 2.15-2

fix random freezes (FS#27737) and nvidia libgl crashes

Added:
  glibc/trunk/glibc-2.15-lddebug-scopes.patch
  glibc/trunk/glibc-2.15-revert-c5a0802a.patch
Modified:
  glibc/trunk/PKGBUILD

----------------------------------+
 PKGBUILD                         |   14 ++
 glibc-2.15-lddebug-scopes.patch  |   27 ++++
 glibc-2.15-revert-c5a0802a.patch |  229 +++++++++++++++++++++++++++++++++++++
 3 files changed, 269 insertions(+), 1 deletion(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD    2011-12-28 00:18:26 UTC (rev 145696)
+++ PKGBUILD    2011-12-28 08:02:40 UTC (rev 145697)
@@ -6,7 +6,7 @@
 
 pkgname=glibc
 pkgver=2.15
-pkgrel=1
+pkgrel=2
 _glibcdate=20111227
 pkgdesc="GNU C Library"
 arch=('i686' 'x86_64')
@@ -29,6 +29,8 @@
         glibc-2.14-revert-4768ae77.patch
         glibc-2.14-reexport-rpc-interface.patch
         glibc-2.14-reinstall-nis-rpc-headers.patch
+        glibc-2.15-lddebug-scopes.patch
+        glibc-2.15-revert-c5a0802a.patch
         nscd
         locale.gen.txt
         locale-gen)
@@ -41,6 +43,8 @@
          '7da8c554a3b591c7401d7023b1928afc'
          'c5de2a946215d647c8af5432ec4b0da0'
          '55febbb72139ac7b65757df085024b83'
+         '3c219ddfb619b6df903cac4cc42c611d'
+         '7ae3e426251ae33e73dbad71f9c91378'
          'b587ee3a70c9b3713099295609afde49'
          '07ac979b6ab5eeb778d55f041529d623'
          '476e9113489f93b348b21e144b6a8fcf')
@@ -88,6 +92,14 @@
   # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=bdd816a3 (only 
fedora branch...)
   patch -Np1 -i ${srcdir}/glibc-2.14-reinstall-nis-rpc-headers.patch
 
+  # propriety nvidia crash - 
https://bugzilla.redhat.com/show_bug.cgi?id=737223 
+  # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=0c95ab64  (only 
fedora branch...)
+  patch -Np1 -i ${srcdir}/glibc-2.15-lddebug-scopes.patch
+
+  # revert commit c5a0802a - causes various hangs
+  # https://bugzilla.redhat.com/show_bug.cgi?id=769421
+  patch -Np1 -i ${srcdir}/glibc-2.15-revert-c5a0802a.patch
+
   install -dm755 ${pkgdir}/etc
   touch ${pkgdir}/etc/ld.so.conf
 

Added: glibc-2.15-lddebug-scopes.patch
===================================================================
--- glibc-2.15-lddebug-scopes.patch                             (rev 0)
+++ glibc-2.15-lddebug-scopes.patch     2011-12-28 08:02:40 UTC (rev 145697)
@@ -0,0 +1,27 @@
+From 0c95ab64cb4ec0d22bb222647d9d20c7b4903e38 Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <sch...@redhat.com>
+Date: Fri, 7 Oct 2011 09:31:27 +0200
+Subject: [PATCH] Horrible workaround for horribly broken software
+
+---
+ elf/rtld.c |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/elf/rtld.c b/elf/rtld.c
+index 978c609..8422b9f 100644
+--- a/elf/rtld.c
++++ b/elf/rtld.c
+@@ -1393,7 +1393,9 @@ of this helper program; chances are you did not intend 
to run this program.\n\
+             char *copy = malloc (len);
+             if (copy == NULL)
+               _dl_fatal_printf ("out of memory\n");
+-            l->l_libname->name = l->l_name = memcpy (copy, dsoname, len);
++            l->l_libname->name = memcpy (copy, dsoname, len);
++            if (GLRO(dl_debug_mask))
++              l->l_name = copy;
+           }
+ 
+         /* Add the vDSO to the object list.  */
+-- 
+1.7.3.4
+

Added: glibc-2.15-revert-c5a0802a.patch
===================================================================
--- glibc-2.15-revert-c5a0802a.patch                            (rev 0)
+++ glibc-2.15-revert-c5a0802a.patch    2011-12-28 08:02:40 UTC (rev 145697)
@@ -0,0 +1,229 @@
+diff -rup 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       
2011-12-22 18:04:12.937212834 +0000
++++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S       
2011-12-22 18:04:42.104222278 +0000
+@@ -137,7 +137,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
+@@ -151,9 +150,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
+@@ -398,78 +394,6 @@ __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)
+@@ -642,10 +566,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
+Only in b/nptl/sysdeps/unix/sysv/linux/i386/i486: pthread_cond_wait.S.orig
+diff -rup 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  2011-12-22 
18:04:12.941212837 +0000
++++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S  2011-12-22 
18:05:05.155229737 +0000
+@@ -23,7 +23,6 @@
+ #include <lowlevelcond.h>
+ #include <tcb-offsets.h>
+ #include <pthread-pi-defines.h>
+-#include <pthread-errnos.h>
+ 
+ #include <kernel-features.h>
+ 
+@@ -137,14 +136,11 @@ __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
+@@ -331,70 +327,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
+-      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)
+@@ -547,15 +479,11 @@ __condvar_cleanup1:
+       .uleb128 .LcleanupSTART-.LSTARTCODE
+       .uleb128 .LcleanupEND-.LcleanupSTART
+       .uleb128 __condvar_cleanup1-.LSTARTCODE
+-      .uleb128 0
+-      .uleb128 .LcleanupSTART2-.LSTARTCODE
+-      .uleb128 .LcleanupEND2-.LcleanupSTART2
+-      .uleb128 __condvar_cleanup1-.LSTARTCODE
+-      .uleb128 0
++      .uleb128  0
+       .uleb128 .LcallUR-.LSTARTCODE
+       .uleb128 .LENDCODE-.LcallUR
+       .uleb128 0
+-      .uleb128 0
++      .uleb128  0
+ .Lcstend:
+ 
+ 
+Only in b/nptl/sysdeps/unix/sysv/linux/x86_64: pthread_cond_wait.S.orig
+Only in b/nptl/sysdeps/unix/sysv/linux/x86_64: pthread_cond_wait.S.rej

Reply via email to