[arch-commits] Commit in glibc/trunk (4 files)

Allan McRae allan at archlinux.org
Tue Feb 14 06:41:58 UTC 2012


    Date: Tuesday, February 14, 2012 @ 01:41:58
  Author: allan
Revision: 150167

upgpkg: glibc 2.15-6

disable AVX strcasecmp due to Xen issue, add ARENA_TEST fix, add fix for nscd caching transient negative results

Added:
  glibc/trunk/glibc-2.15-arena.patch
  glibc/trunk/glibc-2.15-negative-result-cache.patch
  glibc/trunk/glibc-2.15-strcasecmp-disable-avx.patch
Modified:
  glibc/trunk/PKGBUILD

-----------------------------------------+
 PKGBUILD                                |   25 ++++-
 glibc-2.15-arena.patch                  |   29 ++++++
 glibc-2.15-negative-result-cache.patch  |  138 ++++++++++++++++++++++++++++++
 glibc-2.15-strcasecmp-disable-avx.patch |   48 ++++++++++
 4 files changed, 237 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2012-02-14 01:55:53 UTC (rev 150166)
+++ PKGBUILD	2012-02-14 06:41:58 UTC (rev 150167)
@@ -6,7 +6,7 @@
 
 pkgname=glibc
 pkgver=2.15
-pkgrel=5
+pkgrel=6
 _glibcdate=20111227
 pkgdesc="GNU C Library"
 arch=('i686' 'x86_64')
@@ -35,8 +35,11 @@
         glibc-2.15-scanf.patch
         glibc-2.15-ifunc.patch
         glibc-2.15-avx.patch
+        glibc-2.15-strcasecmp-disable-avx.patch
         glibc-2.15-gb18030.patch
         glibc-2.15-revert-netlink-cache.patch
+        glibc-2.15-arena.patch
+        glibc-2.15-negative-result-cache.patch
         nscd
         locale.gen.txt
         locale-gen)
@@ -55,8 +58,11 @@
          '39353f53168f4a7509ba5fe0d9f218b8'
          '136eb969f5d6bb6f5155f72a1a7cf23e'
          '41ae047ac88e8f6f547c70b0a0bc3b72'
+         'fccb89f6628f59752278e125c35941f8'
          'c4cd34f20ccd37817f6c1374bd4ee68e'
          '6771b0b2bb8aa3870a259fd2f46c424f'
+         'a9ffadcfd2d357f91fee0b861fd4a7c6'
+         '2c46b8e294de24c531f2253ff69aeef3'
          'b587ee3a70c9b3713099295609afde49'
          '07ac979b6ab5eeb778d55f041529d623'
          '476e9113489f93b348b21e144b6a8fcf')
@@ -80,8 +86,9 @@
   # http://sources.redhat.com/bugzilla/show_bug.cgi?id=4781
   patch -Np1 -i ${srcdir}/glibc-2.10-bz4781.patch
 
-  # http://sources.redhat.com/bugzilla/show_bug.cgi?id=411
+  # Undefine __i686 for gcc <= 4.6
   # http://sourceware.org/ml/libc-alpha/2009-07/msg00072.html
+  # fix in http://sourceware.org/git/?p=glibc.git;a=commit;h=d4a54ac6 requires additional backporting...
   patch -Np1 -i ${srcdir}/glibc-__i686.patch
 
   # http://www.exploit-db.com/exploits/15274/
@@ -115,6 +122,8 @@
 
   # revert commit c5a0802a - causes various hangs
   # https://bugzilla.redhat.com/show_bug.cgi?id=769421
+  # Note: fedora may have actual fix (not submitted upstream yet...)
+  # http://pkgs.fedoraproject.org/gitweb/?p=glibc.git;a=blob_plain;f=glibc-rh552960-2.patch
   patch -Np1 -i ${srcdir}/glibc-2.15-revert-c5a0802a.patch
 
   # fix realloc usage in vfscanf
@@ -129,6 +138,8 @@
   # http://sourceware.org/git/?p=glibc.git;a=commit;h=afc5ed09
   # http://sourceware.org/git/?p=glibc.git;a=commit;h=08cf777f
   patch -Np1 -i ${srcdir}/glibc-2.15-avx.patch
+  # and "fix" strcasecmp
+  patch -Np1 -i ${srcdir}/glibc-2.15-strcasecmp-disable-avx.patch
 
   # fix GB18030 charmap
   # http://sourceware.org/bugzilla/show_bug.cgi?id=11837
@@ -137,10 +148,18 @@
   patch -Np1 -i ${srcdir}/glibc-2.15-gb18030.patch
 
   # fix crash in __nscd_get_mapping if nscd not running
-  # http://sourceware.org/bugzilla/show_bug.cgi?id=13594
+  # http://sourceware.org/bugzilla/show_bug.cgi?id=13594 (potential "fix" in comment)
   # reverts commit 3a2c0242 and other necessary following changes...
   patch -Np1 -i ${srcdir}/glibc-2.15-revert-netlink-cache.patch
 
+  # handle ARENA_TEST correctly
+  # http://sourceware.org/git/?p=glibc.git;a=commit;h=41b81892
+  patch -Np1 -i ${srcdir}/glibc-2.15-arena.patch
+
+  # Do not cache negative results in nscd if these are transient
+  # http://sourceware.org/git/?p=glibc.git;a=commit;h=3e1aa84e
+  patch -Np1 -i ${srcdir}/glibc-2.15-negative-result-cache.patch
+
   install -dm755 ${pkgdir}/etc
   touch ${pkgdir}/etc/ld.so.conf
 

Added: glibc-2.15-arena.patch
===================================================================
--- glibc-2.15-arena.patch	                        (rev 0)
+++ glibc-2.15-arena.patch	2012-02-14 06:41:58 UTC (rev 150167)
@@ -0,0 +1,29 @@
+diff --git a/malloc/arena.c b/malloc/arena.c
+index d3cf4b9..b1c9469 100644
+--- a/malloc/arena.c
++++ b/malloc/arena.c
+@@ -828,7 +828,7 @@ arena_get2(mstate a_tsd, size_t size)
+ 	{
+ 	  if (mp_.arena_max != 0)
+ 	    narenas_limit = mp_.arena_max;
+-	  else
++	  else if (narenas > mp_.arena_test)
+ 	    {
+ 	      int n  = __get_nprocs ();
+ 
+@@ -842,7 +842,14 @@ arena_get2(mstate a_tsd, size_t size)
+ 	}
+     repeat:;
+       size_t n = narenas;
+-      if (__builtin_expect (n <= mp_.arena_test || n < narenas_limit, 0))
++      /* NB: the following depends on the fact that (size_t)0 - 1 is a
++	 very large number and that the underflow is OK.  If arena_max
++	 is set the value of arena_test is irrelevant.  If arena_test
++	 is set but narenas is not yet larger or equal to arena_test
++	 narenas_limit is 0.  There is no possibility for narenas to
++	 be too big for the test to always fail since there is not
++	 enough address space to create that many arenas.  */
++      if (__builtin_expect (n <= narenas_limit - 1, 0))
+ 	{
+ 	  if (catomic_compare_and_exchange_bool_acq (&narenas, n + 1, n))
+ 	    goto repeat;

Added: glibc-2.15-negative-result-cache.patch
===================================================================
--- glibc-2.15-negative-result-cache.patch	                        (rev 0)
+++ glibc-2.15-negative-result-cache.patch	2012-02-14 06:41:58 UTC (rev 150167)
@@ -0,0 +1,138 @@
+diff --git a/nscd/aicache.c b/nscd/aicache.c
+index aaaf80d..e1f1244 100644
+--- a/nscd/aicache.c
++++ b/nscd/aicache.c
+@@ -1,5 +1,5 @@
+ /* Cache handling for host lookup.
+-   Copyright (C) 2004-2008, 2009, 2010, 2011 Free Software Foundation, Inc.
++   Copyright (C) 2004-2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper at redhat.com>, 2004.
+ 
+@@ -514,8 +514,9 @@ next_nip:
+       if (fd != -1)
+ 	TEMP_FAILURE_RETRY (send (fd, &notfound, total, MSG_NOSIGNAL));
+ 
+-      /* If we cannot permanently store the result, so be it.  */
+-      if (__builtin_expect (db->negtimeout == 0, 0))
++      /* If we have a transient error or cannot permanently store the
++	 result, so be it.  */
++      if (rc4 == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
+ 	{
+ 	  /* Mark the old entry as obsolete.  */
+ 	  if (dh != NULL)
+diff --git a/nscd/grpcache.c b/nscd/grpcache.c
+index e9607c6..a698f36 100644
+--- a/nscd/grpcache.c
++++ b/nscd/grpcache.c
+@@ -1,5 +1,5 @@
+ /* Cache handling for group lookup.
+-   Copyright (C) 1998-2008, 2009, 2011 Free Software Foundation, Inc.
++   Copyright (C) 1998-2008, 2009, 2011, 2012 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper at cygnus.com>, 1998.
+ 
+@@ -120,8 +120,9 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
+ 	  else
+ 	    written = total;
+ 
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (db->negtimeout == 0)
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
+ 	    {
+ 	      /* Mark the old entry as obsolete.  */
+ 	      if (dh != NULL)
+diff --git a/nscd/hstcache.c b/nscd/hstcache.c
+index 4d68ade..c72feaa 100644
+--- a/nscd/hstcache.c
++++ b/nscd/hstcache.c
+@@ -1,5 +1,5 @@
+ /* Cache handling for host lookup.
+-   Copyright (C) 1998-2008, 2009, 2011 Free Software Foundation, Inc.
++   Copyright (C) 1998-2008, 2009, 2011, 2012 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper at cygnus.com>, 1998.
+ 
+@@ -141,8 +141,9 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
+ 					MSG_NOSIGNAL)) != total)
+ 	    all_written = false;
+ 
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (__builtin_expect (db->negtimeout == 0, 0))
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
+ 	    {
+ 	      /* Mark the old entry as obsolete.  */
+ 	      if (dh != NULL)
+diff --git a/nscd/initgrcache.c b/nscd/initgrcache.c
+index 4ac9942..2019991 100644
+--- a/nscd/initgrcache.c
++++ b/nscd/initgrcache.c
+@@ -1,5 +1,5 @@
+ /* Cache handling for host lookup.
+-   Copyright (C) 2004-2006, 2008, 2009, 2011 Free Software Foundation, Inc.
++   Copyright (C) 2004-2006, 2008, 2009, 2011, 2012 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper at redhat.com>, 2004.
+ 
+@@ -202,8 +202,9 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
+ 	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+ 						MSG_NOSIGNAL));
+ 
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (__builtin_expect (db->negtimeout == 0, 0))
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (all_tryagain || __builtin_expect (db->negtimeout == 0, 0))
+ 	    {
+ 	      /* Mark the old entry as obsolete.  */
+ 	      if (dh != NULL)
+diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c
+index 49e130c..e2ba09d 100644
+--- a/nscd/pwdcache.c
++++ b/nscd/pwdcache.c
+@@ -1,5 +1,5 @@
+ /* Cache handling for passwd lookup.
+-   Copyright (C) 1998-2008, 2009, 2011 Free Software Foundation, Inc.
++   Copyright (C) 1998-2008, 2009, 2011, 2012 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper at cygnus.com>, 1998.
+ 
+@@ -124,8 +124,9 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req,
+ 	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+ 						MSG_NOSIGNAL));
+ 
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (__builtin_expect (db->negtimeout == 0, 0))
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errno == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
+ 	    {
+ 	      /* Mark the old entry as obsolete.  */
+ 	      if (dh != NULL)
+diff --git a/nscd/servicescache.c b/nscd/servicescache.c
+index d3d5dce..a6337e3 100644
+--- a/nscd/servicescache.c
++++ b/nscd/servicescache.c
+@@ -1,5 +1,5 @@
+ /* Cache handling for services lookup.
+-   Copyright (C) 2007, 2008, 2009, 2011 Free Software Foundation, Inc.
++   Copyright (C) 2007, 2008, 2009, 2011, 2012 Free Software Foundation, Inc.
+    This file is part of the GNU C Library.
+    Contributed by Ulrich Drepper <drepper at drepper.com>, 2007.
+ 
+@@ -108,8 +108,9 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
+ 	    written = TEMP_FAILURE_RETRY (send (fd, &notfound, total,
+ 						MSG_NOSIGNAL));
+ 
+-	  /* If we cannot permanently store the result, so be it.  */
+-	  if (__builtin_expect (db->negtimeout == 0, 0))
++	  /* If we have a transient error or cannot permanently store
++	     the result, so be it.  */
++	  if (errval == EAGAIN || __builtin_expect (db->negtimeout == 0, 0))
+ 	    {
+ 	      /* Mark the old entry as obsolete.  */
+ 	      if (dh != NULL)

Added: glibc-2.15-strcasecmp-disable-avx.patch
===================================================================
--- glibc-2.15-strcasecmp-disable-avx.patch	                        (rev 0)
+++ glibc-2.15-strcasecmp-disable-avx.patch	2012-02-14 06:41:58 UTC (rev 150167)
@@ -0,0 +1,48 @@
+diff --git a/sysdeps/x86_64/multiarch/strcmp.S b/sysdeps/x86_64/multiarch/strcmp.S
+index f93c83d..d8aa889 100644
+--- a/sysdeps/x86_64/multiarch/strcmp.S
++++ b/sysdeps/x86_64/multiarch/strcmp.S
+@@ -105,11 +105,6 @@ ENTRY(__strcasecmp)
+	jne	1f
+	call	__init_cpu_features
+ 1:
+-#  ifdef HAVE_AVX_SUPPORT
+-	leaq	__strcasecmp_avx(%rip), %rax
+-	testl	$bit_AVX, __cpu_features+CPUID_OFFSET+index_AVX(%rip)
+-	jnz	2f
+-#  endif
+	leaq	__strcasecmp_sse42(%rip), %rax
+	testl	$bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+	jnz	2f
+@@ -128,11 +123,6 @@ ENTRY(__strncasecmp)
+	jne	1f
+	call	__init_cpu_features
+ 1:
+-#  ifdef HAVE_AVX_SUPPORT
+-	leaq	__strncasecmp_avx(%rip), %rax
+-	testl	$bit_AVX, __cpu_features+CPUID_OFFSET+index_AVX(%rip)
+-	jnz	2f
+-#  endif
+	leaq	__strncasecmp_sse42(%rip), %rax
+	testl	$bit_SSE4_2, __cpu_features+CPUID_OFFSET+index_SSE4_2(%rip)
+	jnz	2f
+@@ -152,19 +142,6 @@ weak_alias (__strncasecmp, strncasecmp)
+ # include "strcmp-sse42.S"
+
+
+-# ifdef HAVE_AVX_SUPPORT
+-#  if defined USE_AS_STRCASECMP_L || defined USE_AS_STRNCASECMP_L
+-#   define LABEL(l) .L##l##_avx
+-#   define GLABEL(l) l##_avx
+-#   define USE_AVX 1
+-#   undef STRCMP_SSE42
+-#   define STRCMP_SSE42 STRCMP_AVX
+-#   define SECTION avx
+-#   include "strcmp-sse42.S"
+-#  endif
+-# endif
+-
+-
+ # undef ENTRY
+ # define ENTRY(name) \
+	.type STRCMP_SSE2, @function; \




More information about the arch-commits mailing list