Hello community,
here is the log from the commit of package glibc
checked in at Fri Apr 20 16:01:01 CEST 2007.
--------
--- glibc/glibc.changes 2007-03-25 10:01:24.000000000 +0200
+++ /mounts/work_src_done/STABLE/glibc/glibc.changes 2007-04-20 13:30:46.000000000 +0200
@@ -1,0 +2,23 @@
+Fri Apr 20 13:13:52 CEST 2007 - dmueller@suse.de
+
+- only keep symtab for libpthread*
+
+-------------------------------------------------------------------
+Thu Apr 19 23:22:35 CEST 2007 - pbaudis@suse.cz
+
+- Fix strtod() exponent limit calculations [#230909]
+- Fix random nscd crashes under very heavy passwd/group queries
+ load [#192391]
+- Add some enums from CVS to sys/personality.h [#253710]
+- Fix pthread_atfork()-induced hangs in threaded programs [#256237]
+- Fix llrintl() on ppc64 [#241183]
+- Fix makecontext() segfault [#249780]
+- Fix potential dladdr() breakage [#241464]
+- Fix some races in client programs with nscd garbage collection [#252138]
+
+-------------------------------------------------------------------
+Fri Mar 30 02:54:06 CEST 2007 - pbaudis@suse.cz
+
+- Update localtime during timezone update [#239888]
+
+-------------------------------------------------------------------
New:
----
glibc-2.5-dladdr.diff
glibc-2.5-makecontext.diff
glibc-2.5-nptl-forkref.diff
glibc-2.5-nscd-gc-clientraces.diff
glibc-2.5-nscd-getpwnam.diff
glibc-2.5-personality.diff
glibc-2.5-ppc-llrintl.diff
glibc-2.5-strtod.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ glibc.spec ++++++
--- /var/tmp/diff_new_pack.T30361/_old 2007-04-20 16:00:41.000000000 +0200
+++ /var/tmp/diff_new_pack.T30361/_new 2007-04-20 16:00:41.000000000 +0200
@@ -26,7 +26,7 @@
Obsoletes: ngpt ngpt-devel
Autoreqprov: on
Version: 2.5
-Release: 39
+Release: 42
%define snapshot_date 2006101200
URL: http://www.gnu.org/software/libc/libc.html
PreReq: filesystem
@@ -76,6 +76,14 @@
Patch34: glibc-2.5-ldconfig-old-cache.diff
Patch35: glibc-2.5-mallopt.diff
Patch36: timezone.diff
+Patch37: glibc-2.5-strtod.diff
+Patch38: glibc-2.5-nscd-getpwnam.diff
+Patch39: glibc-2.5-personality.diff
+Patch40: glibc-2.5-dladdr.diff
+Patch41: glibc-2.5-makecontext.diff
+Patch42: glibc-2.5-nscd-gc-clientraces.diff
+Patch43: glibc-2.5-ppc-llrintl.diff
+Patch44: glibc-2.5-nptl-forkref.diff
%description
The GNU C Library provides the most important standard libraries used
@@ -241,6 +249,14 @@
%patch34
%patch35
%patch36
+%patch37
+%patch38
+%patch39
+%patch40
+%patch41
+%patch42
+%patch43
+%patch44
%patch5
find . -name configure | xargs touch
@@ -394,7 +410,7 @@
# should be enabled. These symbols are _not_ exported, and we can't easily
# export them retroactively without changing the API. So we have to
# continue to "export" them via .symtab, instead of .dynsym :-(
-export STRIP_KEEP_SYMTAB=yes
+export STRIP_KEEP_SYMTAB=libpthread*
# 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
@@ -592,6 +608,17 @@
%postun info
%install_info_delete --info-dir=%{_infodir} %{_infodir}/libc.info.gz
+%post -n timezone
+if [ -f /etc/sysconfig/clock ];
+then
+ . /etc/sysconfig/clock
+ if [ -n "$TIMEZONE" -a -f /etc/localtime -a -f /usr/share/zoneinfo/$TIMEZONE ]; then
+ cp /usr/share/zoneinfo/$TIMEZONE /etc/localtime
+ else
+ [ -f /etc/localtime ] && echo "WARNING: Not updating /etc/localtime with new zone file" >&2
+ fi
+fi
+
%preun -n nscd
%stop_on_removal nscd
@@ -905,6 +932,20 @@
%{_libdir}/libdl_p.a
%changelog
+* Fri Apr 20 2007 - dmueller@suse.de
+- only keep symtab for libpthread*
+* Thu Apr 19 2007 - pbaudis@suse.cz
+- Fix strtod() exponent limit calculations [#230909]
+- Fix random nscd crashes under very heavy passwd/group queries
+ load [#192391]
+- Add some enums from CVS to sys/personality.h [#253710]
+- Fix pthread_atfork()-induced hangs in threaded programs [#256237]
+- Fix llrintl() on ppc64 [#241183]
+- Fix makecontext() segfault [#249780]
+- Fix potential dladdr() breakage [#241464]
+- Fix some races in client programs with nscd garbage collection [#252138]
+* Fri Mar 30 2007 - pbaudis@suse.cz
+- Update localtime during timezone update [#239888]
* Sun Mar 25 2007 - olh@suse.de
- temporary disable powerpc cputuned libs to reduce turnaround time
* Fri Feb 09 2007 - pbaudis@suse.cz
++++++ glibc-2.5-dladdr.diff ++++++
elf/dl-addr.c : (_dl_addr) : Ensure the addres lies in one of the segments loaded for a lib.
Sometimes, an entirely unrelated map (say libB) can be allocated in between the mapped segments of a lib (say libA). So, in these cases the _dl_addr for an address within libB, would return libA as the result. We fix this by ensuring that the address falls *IN ANY* of the loaded segments.
Index: glibc-2.5/elf/dl-addr.c
===================================================================
--- elf/dl-addr.c 2006-08-27 15:49:04.000000000 -0700
+++ elf/dl-addr.c 2007-02-27 15:34:27.000000000 -0800
@@ -28,6 +28,7 @@
struct link_map **mapp, const ElfW(Sym) **symbolp)
{
const ElfW(Addr) addr = DL_LOOKUP_ADDRESS (address);
+ int result = 0;
/* Protect against concurrent loads and unloads. */
__rtld_lock_lock_recursive (GL(dl_load_lock));
@@ -39,24 +40,26 @@
if (addr >= l->l_map_start && addr < l->l_map_end)
{
/* We know ADDRESS lies within L if in any shared object.
- Make sure it isn't past the end of L's segments. */
- size_t n = l->l_phnum;
- if (n > 0)
+ Make sure it lies within one of L's segments. */
+ int n = l->l_phnum;
+ while (--n >= 0)
{
- do
- --n;
- while (l->l_phdr[n].p_type != PT_LOAD);
- if (addr >= (l->l_addr +
- l->l_phdr[n].p_vaddr + l->l_phdr[n].p_memsz))
- /* Off the end of the highest-addressed shared object. */
+ if (l->l_phdr[n].p_type != PT_LOAD)
continue;
+ if ((addr >= l->l_addr +
+ l->l_phdr[n].p_vaddr) &&
+ (addr < l->l_addr +
+ l->l_phdr[n].p_vaddr + l->l_phdr[n].p_memsz))
+ {
+ match = l;
+ goto found_match;
+ }
}
- match = l;
- break;
}
- int result = 0;
+found_match:
+
if (match != NULL)
{
/* Now we know what object the address lies in. */
++++++ glibc-2.5-makecontext.diff ++++++
2006-12-19 Jakub Jelinek
* stdlib/Makefile (tests): Add tst-makecontext.
* stdlib/tst-makecontext.c: New test.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
(__makecontext): Don't realign uc_mcontext.uc_regs.
2006-12-13 Jakub Jelinek
* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S: Include
kernel-features.h.
diff -urN glibc-2.4-sles10GA/stdlib/Makefile glibc-2.4-sles10GA-patched/stdlib/Makefile
--- stdlib/Makefile 2006-02-28 03:55:21.000000000 -0600
+++ stdlib/Makefile 2007-03-14 11:17:31.566057264 -0500
@@ -66,7 +66,8 @@
test-canon test-canon2 tst-strtoll tst-environ \
tst-xpg-basename tst-random tst-random2 tst-bsearch \
tst-limits tst-rand48 bug-strtod tst-setcontext \
- test-a64l tst-qsort tst-system testmb2 bug-strtod2
+ test-a64l tst-qsort tst-system testmb2 bug-strtod2 \
+ test-makecontext
include ../Makeconfig
diff -urN glibc-2.4-sles10GA/stdlib/tst-makecontext.c glibc-2.4-sles10GA-patched/stdlib/tst-makecontext.c
--- stdlib/tst-makecontext.c Wed Dec 31 18:00:00 1969
+++ stdlib/tst-makecontext.c Wed Mar 14 11:15:53 2007
@@ -0,0 +1,67 @@
+/* Copyright (C) 2006, 2007 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
+#include
+#include
+#include
+
+ucontext_t ucp;
+char st1[8192];
+__thread int thr;
+
+void
+cf (int i)
+{
+ if (i != 78 || thr != 94)
+ {
+ printf ("i %d thr %d\n", i, thr);
+ exit (1);
+ }
+ exit (0);
+}
+
+int
+do_test (void)
+{
+ if (getcontext (&ucp) != 0)
+ {
+ if (errno == ENOSYS)
+ {
+ puts ("context handling not supported");
+ return 0;
+ }
+
+ puts ("getcontext failed");
+ return 1;
+ }
+ thr = 94;
+ ucp.uc_link = NULL;
+ ucp.uc_stack.ss_sp = st1;
+ ucp.uc_stack.ss_size = sizeof st1;
+ makecontext (&ucp, (void (*) (void)) cf, 1, 78);
+ if (setcontext (&ucp) != 0)
+ {
+ puts ("setcontext failed");
+ return 1;
+ }
+ return 2;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff -urN glibc-2.4-sles10GA/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S glibc-2.4-sles10GA-patched/sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S
--- sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S 2006-01-07 01:11:17.000000000 -0600
+++ sysdeps/unix/sysv/linux/powerpc/powerpc32/makecontext.S 2007-03-14 11:15:53.553047320 -0500
@@ -26,9 +26,7 @@
ENTRY(__makecontext)
/* Set up the first 7 args to the function in its registers */
- addi r11,r3,_UC_REG_SPACE+12
- clrrwi r11,r11,4
- stw r11,_UC_REGS_PTR(r3)
+ lwz r11,_UC_REGS_PTR(r3)
stw r6,_UC_GREGS+(PT_R3*4)(r11)
stw r7,_UC_GREGS+(PT_R4*4)(r11)
stw r8,_UC_GREGS+(PT_R5*4)(r11)
diff -urN glibc-2.4-sles10GA/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S glibc-2.4-sles10GA-patched/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S
--- sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S 2006-01-05 02:11:09.000000000 -0600
+++ sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext.S 2007-03-14 11:15:53.554047168 -0500
@@ -1,5 +1,5 @@
/* Jump to a new context.
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006 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
@@ -20,6 +20,7 @@
#include
#include
#include
+#include
#define __ASSEMBLY__
#include
++++++ glibc-2.5-nptl-forkref.diff ++++++
nptl/sysdeps/unix/sysv/linux/fork.c : __libc_fork()
Reset the refcntr for the fork-handlers in the child process to 1.
The refcntr may have been bumped up by the *OTHER* thread(s) doing a fork() in the parent process. This would leave the child with an incorrect refcntr for the fork-handlers leading us to wait for non-existing threads to drop the refcntr while doing __unregister_atfork(). Since there is only one thread in the child process, we reset it to 1, to reflect the actual count.
Index: libc/nptl/sysdeps/unix/sysv/linux/fork.c
===================================================================
--- nptl/sysdeps/unix/sysv/linux/fork.c 2003-12-20 15:37:13.000000000 -0800
+++ nptl/sysdeps/unix/sysv/linux/fork.c 2007-02-23 12:25:45.000000000 -0800
@@ -167,8 +167,12 @@
allp->handler->child_handler ();
/* Note that we do not have to wake any possible waiter.
- This is the only thread in the new process. */
- --allp->handler->refcntr;
+ This is the only thread in the new process.
+ The count may have been bumped up by the other threads in
+ the parent, doing a fork. We reset it to 1, to avoid waiting
+ for non-existing thread(s) to release the count.
+ */
+ allp->handler->refcntr = 1;
/* XXX We could at this point look through the object pool
and mark all objects not on the __fork_handlers list as
++++++ glibc-2.5-nscd-gc-clientraces.diff ++++++
++++ 1117 lines (skipped)
++++++ glibc-2.5-nscd-getpwnam.diff ++++++
diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c
index 010cf0c..56e4759 100644
--- nscd/pwdcache.c
+++ nscd/pwdcache.c
@@ -271,6 +271,7 @@ cache_addpw (struct database_dyn *db, in
{
/* Adjust pointer into the memory block. */
cp = (char *) newp + (cp - (char *) dataset);
+ key_copy = (char *) newp + (key_copy - (char *) dataset);
dataset = memcpy (newp, dataset, total + n);
alloca_used = false;
diff --git a/nscd/grpcache.c b/nscd/grpcache.c
index 54d1ef1..3852e8c 100644
--- nscd/grpcache.c
+++ nscd/grpcache.c
@@ -279,6 +279,7 @@ cache_addgr (struct database_dyn *db, in
/* Adjust pointers into the memory block. */
gr_name = (char *) newp + (gr_name - (char *) dataset);
cp = (char *) newp + (cp - (char *) dataset);
+ key_copy = (char *) newp + (key_copy - (char *) dataset);
dataset = memcpy (newp, dataset, total + n);
alloca_used = false;
++++++ glibc-2.5-personality.diff ++++++
--- sysdeps/unix/sysv/linux/sys/personality.h- 2007-03-15 03:55:27.946448000 +0100
+++ sysdeps/unix/sysv/linux/sys/personality.h 2007-03-15 03:55:47.106273000 +0100
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2007 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
@@ -16,7 +16,7 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-/* Taken verbatim from Linux 2.4 (include/linux/personality.h). */
+/* Taken verbatim from Linux 2.6 (include/linux/personality.h). */
#ifndef _SYS_PERSONALITY_H
#define _SYS_PERSONALITY_H 1
@@ -27,11 +27,14 @@
These occupy the top three bytes. */
enum
{
+ ADDR_NO_RANDOMIZE = 0x0040000,
+ FDPIC_FUNCPTRS = 0x0080000,
MMAP_PAGE_ZERO = 0x0100000,
ADDR_LIMIT_32BIT = 0x0800000,
SHORT_INODE = 0x1000000,
WHOLE_SECONDS = 0x2000000,
STICKY_TIMEOUTS = 0x4000000,
+ ADDR_LIMIT_3GB = 0x8000000
};
/* Personality types.
@@ -52,6 +55,7 @@
PER_SUNOS = 0x0006 | STICKY_TIMEOUTS,
PER_XENIX = 0x0007 | STICKY_TIMEOUTS | SHORT_INODE,
PER_LINUX32 = 0x0008,
+ PER_LINUX32_3GB = 0x0008 | ADDR_LIMIT_3GB,
PER_IRIX32 = 0x0009 | STICKY_TIMEOUTS, /* IRIX5 32-bit */
PER_IRIXN32 = 0x000a | STICKY_TIMEOUTS, /* IRIX6 new 32-bit */
PER_IRIX64 = 0x000b | STICKY_TIMEOUTS, /* IRIX6 64-bit */
++++++ glibc-2.5-ppc-llrintl.diff ++++++
diff -urN dummy-cpu/powerpc-cpu-v0.05/sysdeps/powerpc/powerpc32/powerpc64/fpu/s_llrint.S libc25/powerpc-cpu/sysdeps/powerpc/powerpc32/powerpc64/fpu/s_llrint.S
--- powerpc-cpu-v0.05/sysdeps/powerpc/powerpc32/powerpc64/fpu/s_llrint.S 2006-04-06 10:50:35.000000000 -0500
+++ powerpc-cpu/sysdeps/powerpc/powerpc32/powerpc64/fpu/s_llrint.S 2007-03-14 14:55:19.113013712 -0500
@@ -18,6 +18,7 @@
02110-1301 USA. */
#include
+#include
/* long long int[r3, r4] __llrint (double x[fp1]) */
ENTRY (__llrint)
@@ -41,3 +42,6 @@
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
++++++ glibc-2.5-strtod.diff ++++++
http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/strtod_l.c.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.14&r2=1.14.2.1
===================================================================
RCS file: /cvs/glibc/libc/stdlib/strtod_l.c,v
retrieving revision 1.14
retrieving revision 1.14.2.1
diff -u -r1.14 -r1.14.2.1
--- stdlib/strtod_l.c 2006/01/14 12:09:09 1.14
+++ stdlib/strtod_l.c 2007/01/12 18:07:19 1.14.2.1
@@ -662,20 +662,20 @@
/* If no other digit but a '0' is found the result is 0.0.
Return current read pointer. */
- if ((c < L_('0') || c > L_('9'))
- && (base == 16 && (c < (CHAR_TYPE) TOLOWER (L_('a'))
- || c > (CHAR_TYPE) TOLOWER (L_('f'))))
+ if (!((c >= L_('0') && c <= L_('9'))
+ || (base == 16 && ((CHAR_TYPE) TOLOWER (c) >= L_('a')
+ && (CHAR_TYPE) TOLOWER (c) <= L_('f')))
#ifdef USE_WIDE_CHAR
- && c != (wint_t) decimal
+ || c == (wint_t) decimal
#else
- && ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
+ || ({ for (cnt = 0; decimal[cnt] != '\0'; ++cnt)
if (decimal[cnt] != cp[cnt])
break;
- decimal[cnt] != '\0'; })
+ decimal[cnt] == '\0'; })
#endif
- && (base == 16 && (cp == start_of_digits
- || (CHAR_TYPE) TOLOWER (c) != L_('p')))
- && (base != 16 && (CHAR_TYPE) TOLOWER (c) != L_('e')))
+ || (base == 16 && (cp != start_of_digits
+ && (CHAR_TYPE) TOLOWER (c) == L_('p')))
+ || (base != 16 && (CHAR_TYPE) TOLOWER (c) == L_('e'))))
{
#ifdef USE_WIDE_CHAR
tp = __correctly_grouped_prefixwc (start_of_digits, cp, thousands,
@@ -721,7 +721,7 @@
c = *++cp;
}
- if (grouping && dig_no > 0)
+ if (grouping && cp > start_of_digits)
{
/* Check the grouping of the digits. */
#ifdef USE_WIDE_CHAR
@@ -759,13 +759,15 @@
}
}
- /* We have the number digits in the integer part. Whether these are all or
- any is really a fractional digit will be decided later. */
+ /* We have the number of digits in the integer part. Whether these
+ are all or any is really a fractional digit will be decided
+ later. */
int_no = dig_no;
lead_zero = int_no == 0 ? -1 : 0;
- /* Read the fractional digits. A special case are the 'american style'
- numbers like `16.' i.e. with decimal but without trailing digits. */
+ /* Read the fractional digits. A special case are the 'american
+ style' numbers like `16.' i.e. with decimal point but without
+ trailing digits. */
if (
#ifdef USE_WIDE_CHAR
c == (wint_t) decimal
@@ -815,15 +817,16 @@
if (base == 16)
exp_limit = (exp_negative ?
-MIN_EXP + MANT_DIG + 4 * int_no :
- MAX_EXP - 4 * int_no + lead_zero);
+ MAX_EXP - 4 * int_no + 4 * lead_zero + 3);
else
exp_limit = (exp_negative ?
-MIN_10_EXP + MANT_DIG + int_no :
- MAX_10_EXP - int_no + lead_zero);
+ MAX_10_EXP - int_no + lead_zero + 1);
do
{
exponent *= 10;
+ exponent += c - L_('0');
if (exponent > exp_limit)
/* The exponent is too large/small to represent a valid
@@ -853,7 +856,6 @@
/* NOTREACHED */
}
- exponent += c - L_('0');
c = *++cp;
}
while (c >= L_('0') && c <= L_('9'));
@@ -888,7 +890,7 @@
--expp;
--dig_no;
--int_no;
- ++exponent;
+ exponent += base == 16 ? 4 : 1;
}
while (dig_no > 0 && exponent < 0);
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org