diff --git a/glibc-2.5-ppc-llrintl.diff b/glibc-2.5-ppc-llrintl.diff deleted file mode 100644 index 3a65665..0000000 --- a/glibc-2.5-ppc-llrintl.diff +++ /dev/null @@ -1,19 +0,0 @@ -Index: powerpc-cpu/sysdeps/powerpc/powerpc32/powerpc64/fpu/s_llrint.S -=================================================================== ---- powerpc-cpu/sysdeps/powerpc/powerpc32/powerpc64/fpu/s_llrint.S.orig -+++ powerpc-cpu/sysdeps/powerpc/powerpc32/powerpc64/fpu/s_llrint.S -@@ -18,6 +18,7 @@ - 02110-1301 USA. */ - - #include -+#include - - /* long long int[r3, r4] __llrint (double x[fp1]) */ - ENTRY (__llrint) -@@ -41,3 +42,6 @@ weak_alias (__llrint, llrint) - strong_alias (__llrint, __llrintl) - weak_alias (__llrint, llrintl) - #endif -+#if LONG_DOUBLE_COMPAT(libm, GLIBC_2_1) -+compat_symbol (libm, __llrint, llrintl, GLIBC_2_1) -+#endif diff --git a/glibc-dl-x86-64-pc32.diff b/glibc-dl-x86-64-pc32.diff new file mode 100644 index 0000000..76c25fa --- /dev/null +++ b/glibc-dl-x86-64-pc32.diff @@ -0,0 +1,11 @@ +--- sysdeps/x86_64/dl-machine.h~ 2010-03-01 18:51:13.914317000 +0100 ++++ sysdeps/x86_64/dl-machine.h 2010-03-01 18:52:01.258038000 +0100 +@@ -453,7 +453,7 @@ + case R_X86_64_PC32: + value += reloc->r_addend - (Elf64_Addr) reloc_addr; + *(unsigned int *) reloc_addr = value; +- if (__builtin_expect (value != (unsigned int) value, 0)) ++ if (__builtin_expect (value != (int) value, 0)) + { + fmt = "\ + %s: Symbol `%s' causes overflow in R_X86_64_PC32 relocation\n"; diff --git a/glibc-gai-private4.diff b/glibc-gai-private4.diff new file mode 100644 index 0000000..8dfc671 --- /dev/null +++ b/glibc-gai-private4.diff @@ -0,0 +1,74 @@ +Pending acceptance upstream when this gets RFC'd: +http://sourceware.org/bugzilla/show_bug.cgi?id=11438 + +--- posix/gai.conf~ 2010-04-20 13:05:50.197813000 +0200 ++++ posix/gai.conf 2010-04-20 13:08:46.472675000 +0200 +@@ -66,3 +66,68 @@ + #scopev4 ::ffff:172.16.0.0/108 5 + #scopev4 ::ffff:192.168.0.0/112 5 + #scopev4 ::ffff:0.0.0.0/96 14 ++ ++ ++# Back in 2003, the sorting algorithm used by getaddrinfo() was defined in RFC ++# 3484. However, this document did not take into account (or foresee) the ++# ubiquity of IPv4 NAT on today's internet. This in turn causes some real ++# operational problems that's hindering the deployment of IPv6 for content ++# providers. ++# ++# The problem scenario is the following: ++# ++# An end user is located in a network numbered with private (RFC 1918) IPv4 ++# addresses and transitional 6to4 (RFC 3056) IPv6 addresses. The network is ++# connected to the internet by a CPE/SOHO device implementing NAT for IPv4 and ++# anycasted 6to4 (RFC 3068) for IPv6. ++# ++# When the user attempts to connect to a server whose hostname has both IPv4 ++# and IPv6 addresses published in DNS, an IPv6 connection using the ++# transitional 6to4 service will be preferred. This happens because the scope ++# comparsion fails for IPv4, the RFC 1918 addresses are assumed to have ++# site-local scope, which is smaller than the global scope of the server's IPv4 ++# address. For IPv6, both the server's and the client's (6to4) address have ++# global scope. ++# ++# Unfortunately, the operational reality is that a transitional technique such ++# as 6to4 is much less reliable than IPv4. The relay routers might be located ++# far away from the optimal IPv4 path, and thus cause a significant latency ++# increase, or they might not even work optimally (they're usually operated by ++# voulenteering third parties on a best-effort basis), and finally some ISPs ++# simply filter away all proto-41 traffic. Transitional techniques are useful ++# to give end users with IPv4-only service a real shot at accessing IPv6-only ++# content, but it should never be preferred over IPv4 service when accessing ++# dual-stacked content. ++# ++# RFC 3484 even acknowledges this, by saying to "«avoid the use of transitional ++# addresses when native addresses are available"». ++# ++# An IETF draft document which describes the problem in a much more detailed ++# manner than I have is available here: ++# ++# http://tools.ietf.org/html/draft-denis-v6ops-nat-addrsel-00 ++# ++# There's also an IETF draft that aims to revise RFC 3484 in order to fix this ++# problem (amongst others): ++# ++# http://tools.ietf.org/html/draft-arifumi-6man-rfc3484-revise-02 ++# ++# Quoting from this document: ++# ++# > 2.7. To change private IPv4 address scope ++# > ++# > As detailed in Remi's draft [I-D.denis-v6ops-nat-addrsel], when a ++# > host is in NATed site, and has a private IPv4 address and ++# > transitional addresses like 6to4 and Teredo, the host chooses ++# > transitional IPv6 address to access most of the dual-stack servers. ++# > ++# > This is because private IPv4 address is defined to be site-local ++# > scope, and as in RFC 3484, the scope matching rules (Rule 2) set ++# > lower priority for private IPv4 address. ++# > ++# > By changing the address scope of private IPv4 address to global, this ++# > problem can be solved. ++ ++scopev4 ::ffff:10.0.0.0/104 14 ++scopev4 ::ffff:172.16.0.0/108 14 ++scopev4 ::ffff:192.168.0.0/112 14 diff --git a/glibc-getnprocs.diff b/glibc-getnprocs.diff new file mode 100644 index 0000000..adb6e9d --- /dev/null +++ b/glibc-getnprocs.diff @@ -0,0 +1,148 @@ +This bug is in reference to a bug introduced in glibc 2.11 but present in glibc +HEAD by the following patch set: + + http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=6a3d03ff58742430a252beac4a1917506512e319 + +The patch came from this bugzilla bug: + + https://bugzilla.redhat.com/show_bug.cgi?id=494631 + +Which simply proposed the first part: + + + nl = memchr (*cp, '\n', *re - *cp); + + while (nl == NULL && *re == buffer_end) + + { + + /* Truncate too long lines. */ + + *re = buffer + 3 * (buffer_end - buffer) / 4; + + n = read_not_cancel (fd, *re, buffer_end - *re); + + if (n < 0) + + return NULL; + + + + nl = memchr (*re, '\n', n); + + **re = '\n'; + + *re += n; + + } + } + + else + + nl = memchr (*cp, '\n', *re - *cp); + +This was checked in with a second part: + + else if (nl + 5 >= *re) + { + memmove (buffer, nl, *re - nl); + *re = buffer + (*re - nl); + nl = *cp = buffer; + + ssize_t n = read_not_cancel (fd, *re, buffer_end - *re); + if (n < 0) + return NULL; + + *re += n; + } + +Which is meant to determine whether there's enough room at the end of the +buffer to hold "cpu*\n". + + else if (nl + 5 >= *re) + { + memmove (buffer, nl, *re - nl); + *re = buffer + (*re - nl); + nl = *cp = buffer; + + ssize_t n = read_not_cancel (fd, *re, buffer_end - *re); + if (n < 0) + return NULL; + + *re += n; + } + + *cp = nl + 1; + +This second block is erroneous (and redundant). If there's not enough room to +complete a cpu[:digit:] line it'll try to move what's partially in the end of +the buffer to the front (preserving that portion) and then read in a bunch +more, assuming that a \n is in the next read. + +But it actually ends up overwriting the current line with the contents of the +second line. + +Consider the following line + +| C | P | U | 1 | \n | C | P | U | 2 | \n | C | P | U | 3 | F | O | O | B | A | +R | F | O | O | B | +A | R | \n | ... + +where sizeof(buffer) == 12. + +The first time through 'buffer' is filled as follows: + +| C | P | U | 1 | \n | C | P | U | 2 | \n | C | P | + +and 'cpu1' is the line that is returned. The second time through 'cpu2' is the +line that is supposed to be returned but this problematic branch is hit and the +last C P is copied to the front of the buffer over top of C P U 2. Following +this U 3 F O O B A R F O is read into the rest of 'buffer': + +| C | P ||| U | 3 | F | O | O | B | A | R | F | O | + +This throws off the whole incrementing calculation. + +This second else block isn't necessary. Jakub's first part covers the scenario +shown in the example above quite well: + +The following test case: + +#include +#include +int main() +{ +int lcpus=get_nprocs(); +printf("logical cpus = %d\n",lcpus); +return 0; +} + +Can be run against the attached /proc/stat file which is known to reproduce the +problem: + +This stat file can be used with the testcase by bind mounting it over +/proc/stat: +cp stat /dev/shm/stat +mount --bind /dev/shm/stat /proc/stat + +When run this should show: + +logical cpus = 1024 + +since cpu1024 is high cpu number. But it shows something like: + +logical cpus = 137 + +Also attached is a patch which removes the erroneous else block. + +When re-run against with this patch it reports the correct number of cpus. + +Thanks to Milton Miller for describing this problem. + + +--- glibc-2.11.1/sysdeps/unix/sysv/linux/getsysstats.c 2010-01-18 11:01:41.000000000 -0600 ++++ glibc-2.11.1-new/sysdeps/unix/sysv/linux/getsysstats.c 2010-03-23 08:00:26.000000000 -0500 +@@ -117,18 +117,6 @@ + if (nl == NULL) + nl = *re - 1; + } +- else if (nl + 5 >= *re) +- { +- memmove (buffer, nl, *re - nl); +- *re = buffer + (*re - nl); +- nl = *cp = buffer; +- +- ssize_t n = read_not_cancel (fd, *re, buffer_end - *re); +- if (n < 0) +- return NULL; +- +- *re += n; +- } + + *cp = nl + 1; + assert (*cp <= *re); diff --git a/glibc-memchr-ia64.diff b/glibc-memchr-ia64.diff new file mode 100644 index 0000000..a95937d --- /dev/null +++ b/glibc-memchr-ia64.diff @@ -0,0 +1,39 @@ +2010-02-05 H.J. Lu + + PR libc/11230 + * sysdeps/ia64/memchr.S: Don't read beyond the last byte + during recovery. + +diff --git a/sysdeps/ia64/memchr.S b/sysdeps/ia64/memchr.S +index cdd71ca..56d8056 100644 +--- a/sysdeps/ia64/memchr.S ++++ b/sysdeps/ia64/memchr.S +@@ -47,7 +47,7 @@ + #define saved_lc r16 + #define chr r17 + #define len r18 +-#define pos0 r20 ++#define last r20 + #define val r21 + #define tmp r24 + #define chrx8 r25 +@@ -67,6 +67,7 @@ ENTRY(__memchr) + mov saved_pr = pr // save the predicates + .body + mov ret0 = str ++ add last = str, in2 // last byte + and tmp = 7, str // tmp = str % 8 + cmp.ne p7, p0 = r0, r0 // clear p7 + extr.u chr = in1, 0, 8 // chr = (unsigned char) in1 +@@ -143,7 +144,10 @@ ENTRY(__memchr) + ld8 tmp = [ret0];; // load the first unchecked 8byte + xor aux[1] = tmp, chrx8;; + czx1.r poschr[1] = aux[1];; +- cmp.ne p7, p0 = 8, poschr[1] ++ cmp.ne p7, p0 = 8, poschr[1];; ++(p7) add ret0 = addr[MEMLAT+2], poschr[1];; ++(p7) cmp.geu p6, p7 = ret0, last // don't go over the last byte ++(p6) br.cond.spnt .notfound;; + (p7) br.cond.spnt .foundit;; + adds ret0 = 8, ret0 // load the next unchecked 8byte + br.sptk .l4;; diff --git a/glibc-ppc64-vdso-time.diff b/glibc-ppc64-vdso-time.diff new file mode 100644 index 0000000..bba82b6 --- /dev/null +++ b/glibc-ppc64-vdso-time.diff @@ -0,0 +1,28 @@ +2010-03-04 Carlos Eduardo Seo + + * sysdeps/unix/sysv/linux/powerpc/powerpc64/time.c: New file. + +Index: src/sysdeps/unix/sysv/linux/powerpc/powerpc64/time.c +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ src/sysdeps/unix/sysv/linux/powerpc/powerpc64/time.c 2010-03-04 20:02:23.000000000 -0300 +@@ -0,0 +1,19 @@ ++/* Copyright (C) 2010 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, write to the Free ++ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA ++ 02111-1307 USA. */ ++ ++#include diff --git a/glibc-resolv-reload.diff b/glibc-resolv-reload.diff new file mode 100644 index 0000000..0011838 --- /dev/null +++ b/glibc-resolv-reload.diff @@ -0,0 +1,124 @@ +From libc-alpha-return-22754-pasky=ucw.cz@sourceware.org Tue Mar 16 00:47:00 2010 +Return-Path: +X-Original-To: pasky@pasky.or.cz +Delivered-To: pasky@pasky.or.cz +Received: from nikam.ms.mff.cuni.cz (nikam-dmz.ms.mff.cuni.cz [195.113.20.16]) + by machine.or.cz (Postfix) with ESMTPS id C1B8586202A + for ; Tue, 16 Mar 2010 00:47:00 +0100 (CET) +Received: by nikam.ms.mff.cuni.cz (Postfix) + id 9CDEC9AC7A4; Tue, 16 Mar 2010 00:47:00 +0100 (CET) +Delivered-To: pasky@kam.mff.cuni.cz +Received: from jabberwock.ucw.cz (jabberwock.ucw.cz [89.250.246.4]) + by nikam.ms.mff.cuni.cz (Postfix) with ESMTP id 99F0E9AC77B + for ; Tue, 16 Mar 2010 00:47:00 +0100 (CET) +Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) + by jabberwock.ucw.cz (Postfix) with SMTP id 14E1ACF040 + for ; Tue, 16 Mar 2010 00:46:59 +0100 (CET) +Received: (qmail 18956 invoked by alias); 15 Mar 2010 23:46:58 -0000 +Delivered-To: moderator for libc-alpha@sourceware.org +Received: (qmail 15843 invoked by uid 22791); 15 Mar 2010 17:23:15 -0000 +X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 + tests=BAYES_00 +X-Spam-Check-By: sourceware.org +Message-ID: <4B9E6CFA.7020002@riot.org> +Date: Mon, 15 Mar 2010 18:23:06 +0100 +From: Sebastian Kienzl +User-Agent: Thunderbird 2.0.0.23 (Windows/20090812) +MIME-Version: 1.0 +To: libc-alpha@sourceware.org +Subject: Reloading of /etc/resolv.conf +Content-Type: multipart/mixed; + boundary="------------060407080409020101000002" +Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm +Precedence: bulk +List-Id: +List-Unsubscribe: +List-Subscribe: +List-Archive: +List-Post: +List-Help: , +Sender: libc-alpha-owner@sourceware.org +Delivered-To: mailing list libc-alpha@sourceware.org + +This is a multi-part message in MIME format. +--------------060407080409020101000002 +Content-Type: text/plain; charset=ISO-8859-15; format=flowed +Content-Transfer-Encoding: 7bit + +Hello! + +There's a patch in the wild against the resolver which makes it reload +/etc/resolv.conf on change, see +http://sources.redhat.com/ml/libc-alpha/2004-09/msg00130.html + +However, this patch actually doesn't work properly for multi-threaded +programs, as only one thread will notice the change and refresh its +resolver state. I've attached a proper patch. It's for 2.5 but it should +work with current versions, too. + +Even though the patch may not be interesting for upstream, I decided to +let you know about this problem, since the mentioned patch seems to be +used by at least Debian and Ubuntu. + +Regards, +Seb. + + + +--------------060407080409020101000002 +Content-Type: text/plain; + name="glibc-2.5-resolvconf.patch" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline; + filename="glibc-2.5-resolvconf.patch" + +diff -ur resolv.orig/res_libc.c resolv/res_libc.c +--- resolv.orig/res_libc.c 2005-11-01 01:06:40.000000000 +0100 ++++ resolv/res_libc.c 2010-03-15 14:13:18.000000000 +0100 +@@ -22,7 +22,7 @@ + #include + #include + #include +- ++#include + + /* The following bit is copied from res_data.c (where it is #ifdef'ed + out) since res_init() should go into libc.so but the rest of that +@@ -89,12 +89,34 @@ + return (__res_vinit(&_res, 1)); + } + ++static time_t resconf_mtime; ++__libc_lock_define_initialized (static, resconf_mtime_lock); ++ ++/* Check if the modification time of resolv.conf has changed. ++ If so, have all threads re-initialize their resolver states */ ++static void ++__res_check_resconf (void) ++{ ++ struct stat statbuf; ++ if (stat (_PATH_RESCONF, &statbuf) == 0) { ++ __libc_lock_lock (resconf_mtime_lock); ++ if (statbuf.st_mtime != resconf_mtime) { ++ resconf_mtime = statbuf.st_mtime; ++ atomicinclock (lock); ++ atomicinc (__res_initstamp); ++ atomicincunlock (lock); ++ } ++ __libc_lock_unlock (resconf_mtime_lock); ++ } ++} ++ + /* Initialize resp if RES_INIT is not yet set or if res_init in some other + thread requested re-initializing. */ + int + __res_maybe_init (res_state resp, int preinit) + { + if (resp->options & RES_INIT) { ++ __res_check_resconf (); + if (__res_initstamp != resp->_u._ext.initstamp) { + if (resp->nscount > 0) + __res_iclose (resp, true); + + +--------------060407080409020101000002-- diff --git a/glibc-sap-captialsharps.diff b/glibc-sap-captialsharps.diff new file mode 100644 index 0000000..b0b9e6d --- /dev/null +++ b/glibc-sap-captialsharps.diff @@ -0,0 +1,11 @@ +--- localedata/locales/i18n~ 2010-01-19 03:51:14.208960000 +0100 ++++ localedata/locales/i18n 2010-01-19 03:51:24.444040000 +0100 +@@ -928,7 +928,7 @@ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ +- (,);(,);(,);(,);/ ++ (,);(,);(,);/ + (,);/ + (,);(,);(,);(,);/ + (,);(,);(,);(,);/ diff --git a/glibc-statfs64-ia64.diff b/glibc-statfs64-ia64.diff new file mode 100644 index 0000000..1804a68 --- /dev/null +++ b/glibc-statfs64-ia64.diff @@ -0,0 +1,12 @@ +--- sysdeps/unix/sysv/linux/statfs64.c~ 2010-01-27 02:47:32.884315000 +0100 ++++ sysdeps/unix/sysv/linux/statfs64.c 2010-01-27 02:49:17.943657000 +0100 +@@ -24,6 +24,9 @@ + #include + #include + ++/* On IA64, ia32el does not provide wrapper for statfs64() for some reason. ++ Force the compatibility code to get compiled in. [bnc#534828] */ ++#undef __ASSUME_STATFS64 + + # if __ASSUME_STATFS64 == 0 + int __no_statfs64 attribute_hidden; diff --git a/glibc-utf-s390.diff b/glibc-utf-s390.diff new file mode 100644 index 0000000..83caab0 --- /dev/null +++ b/glibc-utf-s390.diff @@ -0,0 +1,84 @@ +Hi, + +unfortunately it turned out that the UTF-16 to UTF-32 and UTF-16 to +UTF-8 conversion instructions fail to recognize certain conditions if +the input stream is corrupted. + +The attached patch disables these instructions and adjusts the +software implementation in order to take care of the error condition. +Hopefully we can re-enable them if a millicode fix becomes available. + +Tested without regressions on s390x. + +Please apply if you think it is ok. + +Bye, + +-Andreas- + + +2010-02-11 Andreas Krebbel + + * sysdeps/s390/s390-64/utf8-utf16-z9.c: Disable hardware + instructions cu21 and cu24. Add well-formedness checking + parameter and adjust the software implementation. + * sysdeps/s390/s390-64/utf16-utf32-z9.c: Likewise. + + +Index: libc/sysdeps/s390/s390-64/utf8-utf16-z9.c +=================================================================== +--- libc.orig/sysdeps/s390/s390-64/utf8-utf16-z9.c ++++ libc/sysdeps/s390/s390-64/utf8-utf16-z9.c +@@ -345,9 +345,12 @@ gconv_end (struct __gconv_step *data) + Operation. */ + #define BODY \ + { \ +- if (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) \ ++ /* The hardware instruction currently fails to report an error for \ ++ isolated low surrogates so we have to disable the instruction \ ++ until this gets resolved. */ \ ++ if (0) /* (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) */ \ + { \ +- HARDWARE_CONVERT ("cu21 %0, %1"); \ ++ HARDWARE_CONVERT ("cu21 %0, %1, 1"); \ + if (inptr != inend) \ + { \ + /* Check if the third byte is \ +@@ -388,7 +391,7 @@ gconv_end (struct __gconv_step *data) + \ + outptr += 2; \ + } \ +- else if (c >= 0x0800 && c <= 0xd7ff) \ ++ else if ((c >= 0x0800 && c <= 0xd7ff) || c > 0xdfff) \ + { \ + /* Three byte UTF-8 char. */ \ + \ +Index: libc/sysdeps/s390/s390-64/utf16-utf32-z9.c +=================================================================== +--- libc.orig/sysdeps/s390/s390-64/utf16-utf32-z9.c ++++ libc/sysdeps/s390/s390-64/utf16-utf32-z9.c +@@ -203,7 +203,10 @@ gconv_end (struct __gconv_step *data) + swapping). */ + #define BODY \ + { \ +- if (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) \ ++ /* The hardware instruction currently fails to report an error for \ ++ isolated low surrogates so we have to disable the instruction \ ++ until this gets resolved. */ \ ++ if (0) /* (GLRO (dl_hwcap) & HWCAP_S390_ETF3EH) */ \ + { \ + HARDWARE_CONVERT ("cu24 %0, %1, 1"); \ + if (inptr != inend) \ +@@ -229,6 +232,12 @@ gconv_end (struct __gconv_step *data) + } \ + else \ + { \ ++ /* An isolated low-surrogate was found. This has to be \ ++ considered ill-formed. */ \ ++ if (__builtin_expect (u1 >= 0xdc00, 0)) \ ++ { \ ++ STANDARD_FROM_LOOP_ERR_HANDLER (2); \ ++ } \ + /* It's a surrogate character. At least the first word says \ + it is. */ \ + if (__builtin_expect (inptr + 4 > inend, 0)) \ diff --git a/glibc-valloc-assert.diff b/glibc-valloc-assert.diff new file mode 100644 index 0000000..b884029 --- /dev/null +++ b/glibc-valloc-assert.diff @@ -0,0 +1,32 @@ +Index: glibc-2.11.1/malloc/malloc.c +=================================================================== +--- glibc-2.11.1.orig/malloc/malloc.c 2010-01-18 18:01:41.000000000 +0100 ++++ glibc-2.11.1/malloc/malloc.c 2010-02-23 13:47:59.000000000 +0100 +@@ -3933,9 +3933,10 @@ public_vALLOc(size_t bytes) + if(!p) { + /* Maybe the failure is due to running out of mmapped areas. */ + if(ar_ptr != &main_arena) { +- (void)mutex_lock(&main_arena.mutex); +- p = _int_memalign(&main_arena, pagesz, bytes); +- (void)mutex_unlock(&main_arena.mutex); ++ ar_ptr = &main_arena; ++ (void)mutex_lock(&ar_ptr->mutex); ++ p = _int_memalign(ar_ptr, pagesz, bytes); ++ (void)mutex_unlock(&ar_ptr->mutex); + } else { + #if USE_ARENAS + /* ... or sbrk() has failed and there is still a chance to mmap() */ +@@ -3978,9 +3979,10 @@ public_pVALLOc(size_t bytes) + if(!p) { + /* Maybe the failure is due to running out of mmapped areas. */ + if(ar_ptr != &main_arena) { +- (void)mutex_lock(&main_arena.mutex); +- p = _int_memalign(&main_arena, pagesz, rounded_bytes); +- (void)mutex_unlock(&main_arena.mutex); ++ ar_ptr = &main_arena; ++ (void)mutex_lock(&ar_ptr->mutex); ++ p = _int_memalign(ar_ptr, pagesz, rounded_bytes); ++ (void)mutex_unlock(&ar_ptr->mutex); + } else { + #if USE_ARENAS + /* ... or sbrk() has failed and there is still a chance to mmap() */ diff --git a/glibc.changes b/glibc.changes index de4e885..4fd017f 100644 --- a/glibc.changes +++ b/glibc.changes @@ -1,8 +1,105 @@ +------------------------------------------------------------------- +Mon Apr 26 22:09:40 CEST 2010 - pbaudis@suse.cz + +- Remove stale resolv.dynamic.diff patch file + +------------------------------------------------------------------- +Thu Apr 22 08:30:50 CEST 2010 - meissner@suse.de + +- for powerpc32 build a generic library and also a power4 library + to allow older 32bit powerpc to work. bnc#596271 + +------------------------------------------------------------------- +Tue Apr 20 13:15:19 CEST 2010 - pbaudis@suse.cz + +- Consider private IPv4 addresses as global-scope in gai.conf [bnc#597616] + +------------------------------------------------------------------- +Wed Mar 24 13:04:12 CET 2010 - pbaudis@suse.cz + +- Fix get_nprocs() large CPU count handling [bnc#590665] + +------------------------------------------------------------------- +Tue Mar 23 15:09:09 CET 2010 - pbaudis@suse.cz + +- Fix interference of STB_GNU_UNIQUE and prelink [bnc#586979] +- Make time() use VDSO on PPC64 [bnc#590216] +- Make pthread_cond_timedway() use VDSO on PPC64 [bnc#590517] + +------------------------------------------------------------------- +Thu Mar 18 14:45:34 CET 2010 - pbaudis@suse.cz + +- Add PreReq for cat to glibc-locale [bnc#588997] + +------------------------------------------------------------------- +Thu Mar 18 14:29:42 CET 2010 - pbaudis@suse.cz + +- Fix /etc/resolv.conf change detection for multi-threaded applications + (by Sebastian Kienzl) + +------------------------------------------------------------------- +Fri Mar 5 12:59:44 CET 2010 - pbaudis@suse.cz + +- Fix spurious mapping from lowercase sharp s to uppercase sharp S + which is less standard and causes problems for ISO encodings [bnc#541773] + +------------------------------------------------------------------- +Mon Mar 1 18:55:37 CET 2010 - pbaudis@suse.cz + +- Fix spurious overflow messages on some R_X86_64_PC32 relocations, + patch by Richard Guenther [bnc#583019] + +------------------------------------------------------------------- +Wed Feb 24 11:53:41 CET 2010 - pbaudis@suse.cz + +- Fix assertion failures within valloc(), patch by Michael Matz + [bnc#581391] + +------------------------------------------------------------------- +Wed Feb 17 12:02:24 CET 2010 - pbaudis@suse.cz + +- S/390: Disable two UTF conversion instructions due to the hardware + mishandling some error conditions in the input stream [bnc#579871] + +------------------------------------------------------------------- +Mon Feb 15 22:34:29 CET 2010 - pbaudis@suse.cz + +- Further fix previous power5 fix + ------------------------------------------------------------------- Sun Feb 14 15:33:33 CET 2010 - rguenther@suse.de - avoid spurious differences in nscd on rebuilds. +------------------------------------------------------------------- +Thu Feb 11 21:36:32 CET 2010 - pbaudis@suse.cz + +- Fix another upgrade problem on power5 and older - correctly remove + the old optimized libraries; found out by matz@suse.de [bnc#563978] + +------------------------------------------------------------------- +Fri Feb 5 21:07:54 CET 2010 - pbaudis@suse.cz + +- Final fix for memchr() overflow on IA64 provided by upstream + [bnc#567516] + +------------------------------------------------------------------- +Thu Jan 28 17:11:59 CET 2010 - pbaudis@suse.cz + +- Fix another memchr() overflow on IA64; another known one still + remains a mystery [bnc#567516] + +------------------------------------------------------------------- +Wed Jan 27 02:49:46 CET 2010 - pbaudis@suse.cz + +- Remove now-obsolete powerpc-cpu addon usage [bnc#572819] +- Fix statfs64() on IA64 in 32-bit mode ia32el [bnc#534828] + +------------------------------------------------------------------- +Tue Jan 26 03:33:38 CET 2010 - pbaudis@suse.cz + +- Fix upgrade from previous distributions on power5 and older [bnc#563978] + ------------------------------------------------------------------- Mon Jan 25 17:35:25 CET 2010 - meissner@suse.de diff --git a/glibc.spec b/glibc.spec index 663edc5..842560c 100644 --- a/glibc.spec +++ b/glibc.spec @@ -28,8 +28,15 @@ BuildRequires: libselinux-devel %define enable_stackguard_randomization 1 %ifarch ppc ppc64 %define optimize_power 1 + %ifarch ppc + %define powerpc_optimize_base power3 + %define powerpc_optimize_tune power3 + %define powerpc_optimize_cpu_power4 1 + %else %define powerpc_optimize_base power4 %define powerpc_optimize_tune power5 + %define powerpc_optimize_cpu_power4 0 + %endif # We are not building Power CPU specific optimizations for openSUSE. %define powerpc_optimize_cpu_power6 0 %define powerpc_optimize_cpu_power7 0 @@ -37,11 +44,12 @@ BuildRequires: libselinux-devel %else %define optimize_power 0 %define powerpc_optimize_base 0 + %define powerpc_optimize_cpu_power4 0 %define powerpc_optimize_cpu_power6 0 %define powerpc_optimize_cpu_power7 0 %define powerpc_optimize_cpu_cell 0 %endif # ppc, ppc64 -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ +License: GPLv2+ Summary: Standard Shared Libraries (from the GNU C Library) Group: System/Libraries Obsoletes: ngpt <= 2.2.2 ngpt-devel <= 2.2.2 @@ -56,7 +64,7 @@ Obsoletes: glibc-32bit Provides: rtld(GNU_HASH) AutoReqProv: on Version: 2.11.1 -Release: 2 +Release: 3 Url: http://www.gnu.org/software/libc/libc.html PreReq: filesystem BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -70,7 +78,6 @@ Source9: nscd.init Source10: bindresvport.blacklist Source11: ctype_b.c Source12: glibc_post_upgrade.c -Source14: powerpc-cpu.tar.bz2 Source15: glibc.rpmlintrc Source16: baselibs.conf %if %_target_cpu == "i686" @@ -82,7 +89,7 @@ NoSource: 0 Patch0: glibc-2.3-SuSE.diff Patch1: glibc-2.3.90-noversion.diff Patch2: glibc-2.3.90-fnmatch.diff -Patch3: resolv.dynamic.diff +Patch3: glibc-resolv-reload.diff Patch4: glibc-2.3.locales.diff.bz2 Patch5: crypt_blowfish-1.0-suse.diff Patch7: glibc-version.diff @@ -106,7 +113,6 @@ Patch24: glibc-2.3.3-nscd-db-path.diff Patch25: glibc-2.3.5-nscd-zeronegtimeout.diff Patch26: glibc-2.3.90-langpackdir.diff Patch27: glibc-nptl-2.4-nofixsyscallnr.diff -Patch29: glibc-2.5-ppc-llrintl.diff Patch30: glibc-2.6-configure.diff Patch31: glibc-2.2-sunrpc.diff Patch32: glibc-2.8-getconf.diff @@ -125,6 +131,17 @@ Patch46: glibc-2.10.99-ia64-include.diff Patch47: libm-x86-64-exceptions.diff Patch48: glibc-uio-cell.diff Patch50: glibc-nameserver-localhost.diff +Patch54: glibc-statfs64-ia64.diff +Patch55: glibc-memchr-ia64.diff +Patch56: glibc-utf-s390.diff +Patch57: glibc-valloc-assert.diff +Patch58: glibc-dl-x86-64-pc32.diff +Patch59: glibc-sap-captialsharps.diff +Patch60: ld-prelink-unique.diff +Patch61: glibc-ppc64-vdso-time.diff +Patch62: nptl-ppc64-vdso-timedwait.diff +Patch63: glibc-getnprocs.diff +Patch64: glibc-gai-private4.diff Patch500: ARM_glibc-2.10.1-local-eabi-wchar.diff Patch501: ARM_glibc-2.10.1-local-hwcap-updates.diff Patch502: ARM_glibc-2.10.1-local-lowlevellock.diff @@ -184,6 +201,7 @@ License: GPLv2+ ; LGPLv2.1+ Summary: Locale Data for Localized Programs Group: System/Libraries Requires: glibc = %{version} +PreReq: /bin/cat AutoReqProv: on # bug437293 %ifarch ppc64 @@ -278,10 +296,10 @@ versions of your software. # add glibc-ports for arm # this is CURRENTLY BROKEN; ARM-interested contributors need to provide # new tested glibc-ports source -%setup -n glibc-%{version} -q -a 2 -a 3 -a 4 -a 14 +%setup -n glibc-%{version} -q -a 2 -a 3 -a 4 %else # any other leave out ports -%setup -n glibc-%{version} -q -a 3 -a 4 -a 14 +%setup -n glibc-%{version} -q -a 3 -a 4 %endif %patch0 # libNoVersion part is only active on ix86 @@ -320,7 +338,6 @@ touch -r nscd/s-stamp nscd/nscd_stat.c rm nscd/s-stamp %patch26 %patch27 -%patch29 %patch30 %patch31 %patch32 @@ -339,6 +356,17 @@ rm nscd/s-stamp %patch47 %patch48 -p1 %patch50 -p1 +%patch54 +%patch55 -p1 +%patch56 -p1 +%patch57 -p1 +%patch58 +%patch59 +%patch60 -p1 +%patch61 -p1 +%patch62 -p1 +%patch63 -p1 +%patch64 %ifarch %arm armv5tel armv7l %patch500 %patch501 @@ -364,6 +392,7 @@ rm nscd/s-stamp # rm -fv sysdeps/powerpc/powerpc32/power4/hp-timing.c sysdeps/powerpc/powerpc32/power4/hp-timing.h find . -name configure | xargs touch + ####################################################################### ### ### BUILD @@ -441,6 +470,7 @@ PARALLEL="%{?jobs:-j%jobs}" # fails to build otherwise - need to recheck and fix %define enable_stackguard_randomization 0 %endif + configure_and_build_glibc() { local dirname="$1"; shift local cflags="$1"; shift @@ -464,6 +494,7 @@ configure_and_build_glibc() { make $PARALLEL cd .. } + %if !%{optimize_power} # # Build base glibc @@ -475,9 +506,17 @@ configure_and_build_glibc() { # # First, base build: pBuildFlags="$BuildFlags -mcpu=%{powerpc_optimize_base} -mtune=%{powerpc_optimize_tune}" - configure_and_build_glibc base "$pBuildFlags" "$add_ons,powerpc-cpu" --with-cpu=%{powerpc_optimize_base} + %if %{powerpc_optimize_base} != "power3" + configure_and_build_glibc base "$pBuildFlags" "$add_ons" --with-cpu=%{powerpc_optimize_base} + %else + # Use no default CPU + configure_and_build_glibc base "$pBuildFlags" "$add_ons" + %endif # Then other power variants: for pcpu in \ + %if %{powerpc_optimize_cpu_power4} + power4 \ + %endif %if %{powerpc_optimize_cpu_power6} power6 \ %endif @@ -485,7 +524,7 @@ configure_and_build_glibc() { power7 \ %endif ; do - configure_and_build_glibc $pcpu "$BuildFlags -mcpu=$pcpu" "$add_ons,powerpc-cpu" \ + configure_and_build_glibc $pcpu "$BuildFlags -mcpu=$pcpu" "$add_ons" \ --with-cpu=$pcpu --disable-runbinaries done # Eventually, special Cell variant: @@ -493,17 +532,22 @@ configure_and_build_glibc() { configure_and_build_glibc ppc-cell-be "$BuildFlags -mcpu=cell" "$add_ons" --disable-runbinaries %endif %endif # optimize_power + # # Build html documentation # make -C cc-base html + # # Build glibc_post_upgrade binary # $BuildCC -static -Os -g $RPM_SOURCE_DIR/glibc_post_upgrade.c -o glibc_post_upgrade \ -Lcc-base -Bcc-base/csu \ - '-DREMOVE_TLS_DIRS' \ + '-DREMOVE_TLS_DIRS' '-DREMOVE_PPC_OPTIMIZE_POWER5' \ %ifarch ppc ppc64 + %if !%{powerpc_optimize_cpu_power4} + '-DREMOVE_PPC_OPTIMIZE_POWER4' \ + %endif %if !%{powerpc_optimize_cpu_power6} '-DREMOVE_PPC_OPTIMIZE_POWER6' \ %endif @@ -515,6 +559,7 @@ $BuildCC -static -Os -g $RPM_SOURCE_DIR/glibc_post_upgrade.c -o glibc_post_upgra %endif %endif '-DLIBDIR="/%{_lib}"' '-DGCONV_MODULES_DIR="%{_prefix}/%{_lib}/gconv"' + ####################################################################### ### ### CHECK @@ -536,6 +581,7 @@ $BuildCC -static -Os -g $RPM_SOURCE_DIR/glibc_post_upgrade.c -o glibc_post_upgra %endif %endif make -C cc-base check-abi || echo check-abi failed + ####################################################################### ### ### INSTALL @@ -553,12 +599,15 @@ make -C cc-base check-abi || echo check-abi failed # debugging tools currently require these sections directly inside the main # files - specifically valgrind and PurifyPlus. export STRIP_KEEP_SYMTAB=*.so* + # Make sure we will create the gconv-modules.cache mkdir -p $RPM_BUILD_ROOT%{_libdir}/gconv touch $RPM_BUILD_ROOT%{_libdir}/gconv/gconv-modules.cache + # Install base glibc # Do not install in parallel, timezone Makefile will fail make install_root=$RPM_BUILD_ROOT install -C cc-base + # Install power-optimized glibc %if %{optimize_power} # run ldconfig to create the library symlinks @@ -566,6 +615,9 @@ make install_root=$RPM_BUILD_ROOT install -C cc-base # it may contain instructions not suitable for the cpu on the builhost my_ldconfig=/sbin/ldconfig for pcpu in \ + %if %{powerpc_optimize_cpu_power4} + power4 \ + %endif %if %{powerpc_optimize_cpu_power6} power6 \ %endif @@ -597,6 +649,7 @@ make install_root=$RPM_BUILD_ROOT install -C cc-base fi %endif %endif # optimize_power + # Install locales %if %{build_locales} # Do not install locales in parallel! @@ -606,31 +659,43 @@ make install_root=$RPM_BUILD_ROOT install -C cc-base %endif # Create file list for glibc-locale package %{find_lang} libc + # Prepare obsolete/, used only on some architectures: export RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/%{_lib}/obsolete + # NPTL is not usable outside of glibc, so include # the generic one (RH#162634) cp -av bits/stdio-lock.h $RPM_BUILD_ROOT%{_prefix}/include/bits/stdio-lock.h + %ifarch s390x # s390x is different ... mkdir $RPM_BUILD_ROOT/lib ln -sf ../%{_lib}/ld-%{version}.so $RPM_BUILD_ROOT/lib/ld64.so.1 %endif + # Miscelanna: + install -m 0700 glibc_post_upgrade $RPM_BUILD_ROOT%{_sbindir} + install -m 644 $RPM_SOURCE_DIR/bindresvport.blacklist $RPM_BUILD_ROOT/etc install -m 644 $RPM_SOURCE_DIR/nsswitch.conf $RPM_BUILD_ROOT/etc install -m 644 posix/gai.conf $RPM_BUILD_ROOT/etc + mkdir -p $RPM_BUILD_ROOT/etc/default install -m 644 nis/nss $RPM_BUILD_ROOT/etc/default/ + mkdir -p $RPM_BUILD_ROOT/usr/include/resolv install -m 0644 resolv/mapv4v6addr.h $RPM_BUILD_ROOT/usr/include/resolv/ install -m 0644 resolv/mapv4v6hostent.h $RPM_BUILD_ROOT/usr/include/resolv/ + mkdir -p $RPM_BUILD_ROOT/usr/share/doc/glibc cp -p manual/libc/*.html $RPM_BUILD_ROOT/usr/share/doc/glibc + cd manpages; make install_root=$RPM_BUILD_ROOT install; cd .. + # nscd tools: + cp nscd/nscd.conf $RPM_BUILD_ROOT/etc mkdir -p $RPM_BUILD_ROOT/etc/apparmor.d cp $RPM_SOURCE_DIR/usr.sbin.nscd $RPM_BUILD_ROOT/etc/apparmor.d @@ -640,6 +705,7 @@ ln -sf /etc/init.d/nscd $RPM_BUILD_ROOT/usr/sbin/rcnscd mkdir -p $RPM_BUILD_ROOT/var/run/nscd touch $RPM_BUILD_ROOT/var/run/nscd/{passwd,group,hosts} touch $RPM_BUILD_ROOT/var/run/nscd/{socket,nscd.pid} + # # Create ld.so.conf # @@ -679,23 +745,28 @@ mkdir -p $RPM_BUILD_ROOT/var/cache/ldconfig # Empty the ld.so.cache: rm -f $RPM_BUILD_ROOT/etc/ld.so.cache touch $RPM_BUILD_ROOT/etc/ld.so.cache + # libNoVersion belongs only to glibc-obsolete: %ifarch %ix86 rm -f $RPM_BUILD_ROOT%{_libdir}/libNoVersion* mkdir -p $RPM_BUILD_ROOT/%{_lib}/obsolete/noversion mv -v $RPM_BUILD_ROOT/%{_lib}/libNoVersion* $RPM_BUILD_ROOT/%{_lib}/obsolete/noversion/ %endif + # Don't look at ldd! We don't wish a /bin/sh requires chmod 644 $RPM_BUILD_ROOT/usr/bin/ldd + # Remove timezone data, now coming in standalone package: for i in sbin/sln usr/bin/tzselect usr/sbin/zic usr/sbin/zdump etc/localtime; do rm -f $RPM_BUILD_ROOT/$i done rm -rf $RPM_BUILD_ROOT/usr/share/zoneinfo + # Remove the buildflags tracking section and the build-id for o in $RPM_BUILD_ROOT/%{_libdir}/crt[1in].o $RPM_BUILD_ROOT/%{_libdir}/lib*_nonshared.a; do objcopy -R ".comment.SUSE.OPTs" -R ".note.gnu.build-id" $o done + ####################################################################### ### ### ... @@ -732,11 +803,13 @@ done %restart_on_update nscd %insserv_cleanup exit 0 + ####################################################################### ### ### FILES ### ####################################################################### + # glibc %files @@ -833,6 +906,9 @@ exit 0 /%{_lib}/%1/librt.so.1\ /%{_lib}/%1/libthread_db-1.0.so\ /%{_lib}/%1/libthread_db.so.1 + %if %{powerpc_optimize_cpu_power4} + %{optimized_libs power4} + %endif %if %{powerpc_optimize_cpu_power6} %{optimized_libs power6} %{optimized_libs power6x} diff --git a/glibc_post_upgrade.c b/glibc_post_upgrade.c index a479c79..ebd1e6e 100644 --- a/glibc_post_upgrade.c +++ b/glibc_post_upgrade.c @@ -34,6 +34,9 @@ main (void) char initpath[256]; struct stat root, init_root; + /* First, get rid of platform-optimized libraries. We remove any we have + ever built, since otherwise we might end up using some old leftover + libraries when new ones aren't installed in their place anymore. */ #ifdef REMOVE_TLS_DIRS const char *library[] = {"libc.so.6", "libc.so.6.1", "libm.so.6", "libm.so.6.1", "librt.so.1", "librtkaio.so.1", @@ -43,6 +46,14 @@ main (void) "/lib/i686/", #endif #ifdef __powerpc64__ +#ifdef REMOVE_PPC_OPTIMIZE_POWER4 + "/lib64/power4/", + "/lib64/ppc970/", +#endif +#ifdef REMOVE_PPC_OPTIMIZE_POWER5 + "/lib64/power5/", + "/lib64/power5+/", +#endif #ifdef REMOVE_PPC_OPTIMIZE_POWER6 "/lib64/power6/", "/lib64/power6x/", @@ -55,6 +66,14 @@ main (void) #endif #endif /* __powerpc64__ */ #ifdef __powerpc__ +#ifdef REMOVE_PPC_OPTIMIZE_POWER4 + "/lib/power4/", + "/lib/ppc970/", +#endif +#ifdef REMOVE_PPC_OPTIMIZE_POWER5 + "/lib/power5/", + "/lib/power5+/", +#endif #ifdef REMOVE_PPC_OPTIMIZE_POWER6 "/lib/power6/", "/lib/power6x/", diff --git a/ld-prelink-unique.diff b/ld-prelink-unique.diff new file mode 100644 index 0000000..12302db --- /dev/null +++ b/ld-prelink-unique.diff @@ -0,0 +1,57 @@ +2010-03-23 Jakub Jelinek + + * elf/dl-lookup.c (do_lookup_x): If tab->entries is NULL, + but tab->size != 0, just unlock and goto success, without + allocating anything or entering anything into the hash table. + (_dl_debug_bindings): Temporarily set tab->entries to NULL + around do_lookup_x in undef_map->l_local_scope[0]. + +--- libc/elf/dl-lookup.c.jj 2009-12-16 00:10:37.000000000 +0100 ++++ libc/elf/dl-lookup.c 2010-03-23 11:03:45.850560036 +0100 +@@ -1,5 +1,6 @@ + /* Look up a symbol in the loaded objects. +- Copyright (C) 1995-2005, 2006, 2007, 2009 Free Software Foundation, Inc. ++ Copyright (C) 1995-2005, 2006, 2007, 2009, 2010 ++ 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 +@@ -414,6 +415,20 @@ do_lookup_x (const char *undef_name, uin + assert (!RTLD_CHECK_FOREIGN_CALL); + #endif + ++#ifdef SHARED ++ /* If tab->entries is NULL, but tab->size is not, it means ++ this is the second, conflict finding, lookup for ++ LD_TRACE_PRELINKING in _dl_debug_bindings. Don't ++ allocate anything and don't enter anything into the ++ hash table. */ ++ if (__builtin_expect (tab->size, 0)) ++ { ++ assert (GLRO(dl_debug_mask) & DL_DEBUG_PRELINK); ++ __rtld_lock_unlock_recursive (tab->lock); ++ goto success; ++ } ++#endif ++ + #define INITIAL_NUNIQUE_SYM_TABLE 31 + size = INITIAL_NUNIQUE_SYM_TABLE; + entries = calloc (sizeof (struct unique_sym), size); +@@ -917,13 +932,17 @@ _dl_debug_bindings (const char *undef_na + { + const uint_fast32_t new_hash = dl_new_hash (undef_name); + unsigned long int old_hash = 0xffffffff; ++ struct unique_sym *saved_entries ++ = GL(dl_ns)[LM_ID_BASE]._ns_unique_sym_table.entries; + ++ GL(dl_ns)[LM_ID_BASE]._ns_unique_sym_table.entries = NULL; + do_lookup_x (undef_name, new_hash, &old_hash, *ref, &val, + undef_map->l_local_scope[0], 0, version, 0, NULL, + type_class, undef_map); + + if (val.s != value->s || val.m != value->m) + conflict = 1; ++ GL(dl_ns)[LM_ID_BASE]._ns_unique_sym_table.entries = saved_entries; + } + + if (value->s) diff --git a/minmem b/minmem deleted file mode 100644 index 827ecbf..0000000 --- a/minmem +++ /dev/null @@ -1 +0,0 @@ -500000 diff --git a/nptl-ppc64-vdso-timedwait.diff b/nptl-ppc64-vdso-timedwait.diff new file mode 100644 index 0000000..b41cb03 --- /dev/null +++ b/nptl-ppc64-vdso-timedwait.diff @@ -0,0 +1,29 @@ +Index: glibc-2.11.1/nptl/pthread_cond_timedwait.c +=================================================================== +--- glibc-2.11.1.old/nptl/pthread_cond_timedwait.c ++++ glibc-2.11.1/nptl/pthread_cond_timedwait.c +@@ -27,6 +27,15 @@ + + #include + ++#ifndef HAVE_CLOCK_GETTIME_VSYSCALL ++# undef INTERNAL_VSYSCALL ++# define INTERNAL_VSYSCALL INTERNAL_SYSCALL ++# undef INLINE_VSYSCALL ++# define INLINE_VSYSCALL INLINE_SYSCALL ++#else ++# include ++#endif ++ + + /* Cleanup handler, defined in pthread_cond_wait.c. */ + extern void __condvar_cleanup (void *arg) +@@ -102,7 +111,7 @@ __pthread_cond_timedwait (cond, mutex, a + #ifdef __NR_clock_gettime + INTERNAL_SYSCALL_DECL (err); + int ret; +- ret = INTERNAL_SYSCALL (clock_gettime, err, 2, ++ ret = INTERNAL_VSYSCALL (clock_gettime, err, 2, + (cond->__data.__nwaiters + & ((1 << COND_NWAITERS_SHIFT) - 1)), + &rt); diff --git a/powerpc-cpu.tar.bz2 b/powerpc-cpu.tar.bz2 deleted file mode 100644 index 715978c..0000000 --- a/powerpc-cpu.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c59f80e38c9f6ad339d72bbfbc454364659686567b7689d33483b9cb4a12bf2a -size 36248 diff --git a/resolv.dynamic.diff b/resolv.dynamic.diff deleted file mode 100644 index f9c45e7..0000000 --- a/resolv.dynamic.diff +++ /dev/null @@ -1,33 +0,0 @@ -Index: resolv/res_libc.c -=================================================================== ---- resolv/res_libc.c.orig -+++ resolv/res_libc.c -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - - /* The following bit is copied from res_data.c (where it is #ifdef'ed -@@ -95,6 +96,20 @@ int - __res_maybe_init (res_state resp, int preinit) - { - if (resp->options & RES_INIT) { -+ static time_t last_mtime, last_check; -+ time_t now; -+ struct stat statbuf; -+ -+ time (&now); -+ if (now != last_check) { -+ last_check = now; -+ if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) { -+ last_mtime = statbuf.st_mtime; -+ atomicinclock (lock); -+ atomicinc (__res_initstamp); -+ atomicincunlock (lock); -+ } -+ } - if (__res_initstamp != resp->_u._ext.initstamp) { - if (resp->nscount > 0) - __res_iclose (resp, true);