SHA256
1
0
forked from pool/glibc

Accepting request 38894 from Base:System

Copy from Base:System/glibc based on submit request 38894 from user pbaudis

OBS-URL: https://build.opensuse.org/request/show/38894
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/glibc?expand=0&rev=18
This commit is contained in:
OBS User autobuild 2010-04-28 20:36:13 +00:00 committed by Git OBS Bridge
parent e85f837ddb
commit cff896bf5c
19 changed files with 852 additions and 67 deletions

View File

@ -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 <sysdep.h>
+#include <math_ldbl_opt.h>
/* 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

11
glibc-dl-x86-64-pc32.diff Normal file
View File

@ -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";

74
glibc-gai-private4.diff Normal file
View File

@ -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

148
glibc-getnprocs.diff Normal file
View File

@ -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<stdio.h>
#include<sys/sysinfo.h>
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);

39
glibc-memchr-ia64.diff Normal file
View File

@ -0,0 +1,39 @@
2010-02-05 H.J. Lu <hongjiu.lu@intel.com>
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;;

View File

@ -0,0 +1,28 @@
2010-03-04 Carlos Eduardo Seo <cseo@linux.vnet.ibm.com>
* 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 <sysdeps/unix/time.c>

124
glibc-resolv-reload.diff Normal file
View File

@ -0,0 +1,124 @@
From libc-alpha-return-22754-pasky=ucw.cz@sourceware.org Tue Mar 16 00:47:00 2010
Return-Path: <libc-alpha-return-22754-pasky=ucw.cz@sourceware.org>
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 <pasky@pasky.or.cz>; 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 <pasky@kam.mff.cuni.cz>; 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 <pasky@ucw.cz>; 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 <seb@riot.org>
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: <libc-alpha.sourceware.org>
List-Unsubscribe: <mailto:libc-alpha-unsubscribe-pasky=ucw.cz@sourceware.org>
List-Subscribe: <mailto:libc-alpha-subscribe@sourceware.org>
List-Archive: <http://sourceware.org/ml/libc-alpha/>
List-Post: <mailto:libc-alpha@sourceware.org>
List-Help: <mailto:libc-alpha-help@sourceware.org>, <http://sourceware.org/ml/#faqs>
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 <arpa/nameser.h>
#include <resolv.h>
#include <bits/libc-lock.h>
-
+#include <sys/stat.h>
/* 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--

View File

@ -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 @@
(<U006D>,<U004D>);(<U006E>,<U004E>);(<U006F>,<U004F>);(<U0070>,<U0050>);/
(<U0071>,<U0051>);(<U0072>,<U0052>);(<U0073>,<U0053>);(<U0074>,<U0054>);/
(<U0075>,<U0055>);(<U0076>,<U0056>);(<U0077>,<U0057>);(<U0078>,<U0058>);/
- (<U0079>,<U0059>);(<U007A>,<U005A>);(<U00B5>,<U039C>);(<U00DF>,<U1E9E>);/
+ (<U0079>,<U0059>);(<U007A>,<U005A>);(<U00B5>,<U039C>);/
(<U00E0>,<U00C0>);/
(<U00E1>,<U00C1>);(<U00E2>,<U00C2>);(<U00E3>,<U00C3>);(<U00E4>,<U00C4>);/
(<U00E5>,<U00C5>);(<U00E6>,<U00C6>);(<U00E7>,<U00C7>);(<U00E8>,<U00C8>);/

12
glibc-statfs64-ia64.diff Normal file
View File

@ -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 <sysdep.h>
#include <kernel-features.h>
+/* 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;

84
glibc-utf-s390.diff Normal file
View File

@ -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 <Andreas.Krebbel@de.ibm.com>
* 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)) \

32
glibc-valloc-assert.diff Normal file
View File

@ -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() */

View File

@ -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

View File

@ -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 <bits/stdio-lock.h> 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}

View File

@ -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/",

57
ld-prelink-unique.diff Normal file
View File

@ -0,0 +1,57 @@
2010-03-23 Jakub Jelinek <jakub@redhat.com>
* 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)

1
minmem
View File

@ -1 +0,0 @@
500000

View File

@ -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 <shlib-compat.h>
+#ifndef HAVE_CLOCK_GETTIME_VSYSCALL
+# undef INTERNAL_VSYSCALL
+# define INTERNAL_VSYSCALL INTERNAL_SYSCALL
+# undef INLINE_VSYSCALL
+# define INLINE_VSYSCALL INLINE_SYSCALL
+#else
+# include <bits/libc-vdso.h>
+#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);

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c59f80e38c9f6ad339d72bbfbc454364659686567b7689d33483b9cb4a12bf2a
size 36248

View File

@ -1,33 +0,0 @@
Index: resolv/res_libc.c
===================================================================
--- resolv/res_libc.c.orig
+++ resolv/res_libc.c
@@ -22,6 +22,7 @@
#include <arpa/nameser.h>
#include <resolv.h>
#include <bits/libc-lock.h>
+#include <sys/stat.h>
/* 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);