[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commits] r8595 - in /trunk: libc/ libc/assert/ libc/csu/ libc/dlfcn/ libc/elf/ libc/include/ libc/inet/netinet/ libc/libio/ libc/loca...



Author: joseph
Date: Wed Jun 24 09:26:34 2009
New Revision: 8595

Log:
Merge changes between r8519 and r8594 from /fsf/trunk.

Added:
    trunk/libc/.gitattributes
      - copied unchanged from r8594, fsf/trunk/libc/.gitattributes
    trunk/libc/elf/ifuncdep1.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncdep1.c
    trunk/libc/elf/ifuncdep1pic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncdep1pic.c
    trunk/libc/elf/ifuncdep2.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncdep2.c
    trunk/libc/elf/ifuncdep2pic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncdep2pic.c
    trunk/libc/elf/ifuncdep5.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncdep5.c
    trunk/libc/elf/ifuncdep5pic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncdep5pic.c
    trunk/libc/elf/ifuncmain1.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1.c
    trunk/libc/elf/ifuncmain1pic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1pic.c
    trunk/libc/elf/ifuncmain1picstatic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1picstatic.c
    trunk/libc/elf/ifuncmain1pie.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1pie.c
    trunk/libc/elf/ifuncmain1static.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1static.c
    trunk/libc/elf/ifuncmain1staticpic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1staticpic.c
    trunk/libc/elf/ifuncmain1staticpie.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1staticpie.c
    trunk/libc/elf/ifuncmain1vis.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1vis.c
    trunk/libc/elf/ifuncmain1vispic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1vispic.c
    trunk/libc/elf/ifuncmain1vispie.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain1vispie.c
    trunk/libc/elf/ifuncmain2.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain2.c
    trunk/libc/elf/ifuncmain2pic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain2pic.c
    trunk/libc/elf/ifuncmain2picstatic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain2picstatic.c
    trunk/libc/elf/ifuncmain2static.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain2static.c
    trunk/libc/elf/ifuncmain3.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain3.c
    trunk/libc/elf/ifuncmain4.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain4.c
    trunk/libc/elf/ifuncmain4picstatic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain4picstatic.c
    trunk/libc/elf/ifuncmain4static.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain4static.c
    trunk/libc/elf/ifuncmain5.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain5.c
    trunk/libc/elf/ifuncmain5pic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain5pic.c
    trunk/libc/elf/ifuncmain5picstatic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain5picstatic.c
    trunk/libc/elf/ifuncmain5pie.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain5pie.c
    trunk/libc/elf/ifuncmain5static.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain5static.c
    trunk/libc/elf/ifuncmain5staticpic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain5staticpic.c
    trunk/libc/elf/ifuncmain6pie.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain6pie.c
    trunk/libc/elf/ifuncmain7.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain7.c
    trunk/libc/elf/ifuncmain7pic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain7pic.c
    trunk/libc/elf/ifuncmain7picstatic.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain7picstatic.c
    trunk/libc/elf/ifuncmain7pie.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain7pie.c
    trunk/libc/elf/ifuncmain7static.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmain7static.c
    trunk/libc/elf/ifuncmod1.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmod1.c
    trunk/libc/elf/ifuncmod3.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmod3.c
    trunk/libc/elf/ifuncmod5.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmod5.c
    trunk/libc/elf/ifuncmod6.c
      - copied unchanged from r8594, fsf/trunk/libc/elf/ifuncmod6.c
    trunk/libc/localedata/locales/dv_MV
      - copied unchanged from r8594, fsf/trunk/libc/localedata/locales/dv_MV
    trunk/libc/localedata/locales/ur_IN
      - copied unchanged from r8594, fsf/trunk/libc/localedata/locales/ur_IN
    trunk/libc/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c
      - copied unchanged from r8594, fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/pthread_sigqueue.c
    trunk/libc/posix/execvpe.c
      - copied unchanged from r8594, fsf/trunk/libc/posix/execvpe.c
    trunk/libc/sysdeps/x86_64/multiarch/ifunc-defines.sym
      - copied unchanged from r8594, fsf/trunk/libc/sysdeps/x86_64/multiarch/ifunc-defines.sym
    trunk/libc/sysdeps/x86_64/multiarch/rawmemchr.S
      - copied unchanged from r8594, fsf/trunk/libc/sysdeps/x86_64/multiarch/rawmemchr.S
    trunk/libc/sysdeps/x86_64/multiarch/strcmp.S
      - copied unchanged from r8594, fsf/trunk/libc/sysdeps/x86_64/multiarch/strcmp.S
    trunk/libc/sysdeps/x86_64/multiarch/strlen.S
      - copied unchanged from r8594, fsf/trunk/libc/sysdeps/x86_64/multiarch/strlen.S
    trunk/libc/sysdeps/x86_64/multiarch/strncmp-c.c
      - copied unchanged from r8594, fsf/trunk/libc/sysdeps/x86_64/multiarch/strncmp-c.c
    trunk/libc/sysdeps/x86_64/multiarch/strncmp.S
      - copied unchanged from r8594, fsf/trunk/libc/sysdeps/x86_64/multiarch/strncmp.S
    trunk/ports/sysdeps/arm/eabi/backtrace.c
      - copied unchanged from r8594, fsf/trunk/ports/sysdeps/arm/eabi/backtrace.c
Removed:
    trunk/libc/sysdeps/unix/sysv/linux/grantpt.c
Modified:
    trunk/libc/ChangeLog
    trunk/libc/Makeconfig
    trunk/libc/NEWS
    trunk/libc/Versions.def
    trunk/libc/assert/assert-perr.c
    trunk/libc/assert/assert.c
    trunk/libc/csu/elf-init.c
    trunk/libc/dlfcn/dlfcn.h
    trunk/libc/elf/Makefile
    trunk/libc/elf/dl-lookup.c
    trunk/libc/elf/dl-sysdep.c
    trunk/libc/include/stdlib.h
    trunk/libc/include/unistd.h
    trunk/libc/inet/netinet/icmp6.h
    trunk/libc/libio/Makefile
    trunk/libc/libio/fileops.c
    trunk/libc/libio/tst-fgetwc.c
    trunk/libc/localedata/ChangeLog
    trunk/libc/localedata/SUPPORTED
    trunk/libc/localedata/locales/de_AT
    trunk/libc/login/Makefile
    trunk/libc/login/programs/pt_chown.c
    trunk/libc/malloc/malloc.c
    trunk/libc/manual/charset.texi
    trunk/libc/misc/sys/select.h
    trunk/libc/nis/nss_compat/compat-initgroups.c
    trunk/libc/nis/nss_nis/nis-pwd.c
    trunk/libc/nptl/ChangeLog
    trunk/libc/nptl/Makefile
    trunk/libc/nptl/Versions
    trunk/libc/nptl/sysdeps/pthread/bits/sigthread.h
    trunk/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
    trunk/libc/nscd/Makefile
    trunk/libc/nss/getent.c
    trunk/libc/po/bg.po
    trunk/libc/po/id.po
    trunk/libc/po/sv.po
    trunk/libc/posix/Makefile
    trunk/libc/posix/Versions
    trunk/libc/posix/execvp.c
    trunk/libc/posix/tst-cpucount.c
    trunk/libc/posix/unistd.h
    trunk/libc/resolv/res_send.c
    trunk/libc/stdlib/Versions
    trunk/libc/stdlib/abort.c
    trunk/libc/string/strncmp.c
    trunk/libc/string/test-memchr.c
    trunk/libc/sunrpc/rpcinfo.c
    trunk/libc/sysdeps/generic/pty-private.h
    trunk/libc/sysdeps/i386/dl-irel.h
    trunk/libc/sysdeps/i386/dl-machine.h
    trunk/libc/sysdeps/posix/libc_fatal.c
    trunk/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S
    trunk/libc/sysdeps/powerpc/powerpc32/power6/memset.S
    trunk/libc/sysdeps/unix/grantpt.c
    trunk/libc/sysdeps/unix/sysv/linux/bits/socket.h
    trunk/libc/sysdeps/unix/sysv/linux/libc_fatal.c
    trunk/libc/sysdeps/unix/sysv/linux/net/if_arp.h
    trunk/libc/sysdeps/unix/sysv/linux/sparc/bits/socket.h
    trunk/libc/sysdeps/x86_64/bits/select.h
    trunk/libc/sysdeps/x86_64/dl-irel.h
    trunk/libc/sysdeps/x86_64/dl-machine.h
    trunk/libc/sysdeps/x86_64/memchr.S
    trunk/libc/sysdeps/x86_64/multiarch/Makefile
    trunk/libc/sysdeps/x86_64/multiarch/init-arch.h
    trunk/libc/sysdeps/x86_64/rawmemchr.S
    trunk/libc/sysdeps/x86_64/strlen.S
    trunk/libc/time/tzfile.c
    trunk/libc/timezone/africa
    trunk/libc/timezone/antarctica
    trunk/libc/timezone/asia
    trunk/libc/timezone/australasia
    trunk/libc/timezone/backward
    trunk/libc/timezone/etcetera
    trunk/libc/timezone/europe
    trunk/libc/timezone/factory
    trunk/libc/timezone/iso3166.tab
    trunk/libc/timezone/leapseconds
    trunk/libc/timezone/northamerica
    trunk/libc/timezone/pacificnew
    trunk/libc/timezone/solar87
    trunk/libc/timezone/solar88
    trunk/libc/timezone/solar89
    trunk/libc/timezone/southamerica
    trunk/libc/timezone/systemv
    trunk/libc/timezone/tzselect.ksh
    trunk/libc/timezone/yearistype
    trunk/libc/timezone/zdump.c
    trunk/libc/timezone/zic.c
    trunk/libc/timezone/zone.tab
    trunk/ports/ChangeLog.arm
    trunk/ports/ChangeLog.mips
    trunk/ports/sysdeps/arm/eabi/Makefile
    trunk/ports/sysdeps/arm/preconfigure
    trunk/ports/sysdeps/unix/sysv/linux/arm/eabi/configure
    trunk/ports/sysdeps/unix/sysv/linux/arm/eabi/configure.in
    trunk/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h
    trunk/ports/sysdeps/unix/sysv/linux/mips/bits/socket.h

Modified: trunk/libc/ChangeLog
==============================================================================
--- trunk/libc/ChangeLog (original)
+++ trunk/libc/ChangeLog Wed Jun 24 09:26:34 2009
@@ -1,3 +1,369 @@
+2009-06-23  Andreas Schwab  <aschwab@xxxxxxxxxx>
+
+	* time/tzfile.c (__tzfile_read): Don't use an empty TZ string.
+
+2009-06-22  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* po/id.po: Update from translation team.
+
+	* po/bg.po: Update from translation team.
+
+2009-06-22  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* string/strncmp.c (STRNCMP): New.  Defined to strncmp if not
+	defined.
+	(strncmp): Renamed to STRNCMP.
+	* sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add
+	strncmp-c for string.
+	* sysdeps/x86_64/multiarch/init-arch.h (HAS_SSE4_2): Define.
+	* sysdeps/x86_64/multiarch/strcmp.S: New file.
+	* sysdeps/x86_64/multiarch/strncmp.S: New file.
+	* sysdeps/x86_64/multiarch/strncmp-c.c: New file.
+
+2009-06-19  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* elf/Makefile (distribute): Add ifuncmain1staticpie.c,
+	ifuncmain5.c, ifuncmain5pic.c, ifuncmain5picstatic.c,
+	ifuncmain5pie.c, ifuncmain5static.c, ifuncmain5staticpic.c,
+	ifuncdep5.c, ifuncdep5pic.c, ifuncmod5.c, ifuncmain7.c,
+	ifuncmain7pic.c, ifuncmain7picstatic.c, ifuncmain7pie.c, and
+	ifuncmain7static.c.
+	(tests-static): Add ifuncmain5static, ifuncmain5picstatic,
+	ifuncmain7static, and ifuncmain7picstatic.
+	(tests): Also depend on $(objpfx)ifuncmain1staticpie.out,
+	$(objpfx)ifuncmain5pie.out, $(objpfx)ifuncmain6pie.out, and
+	$(objpfx)ifuncmain7pie.out.
+	(modules-names): Add ifuncmod5 ifuncmod6
+	(ifuncmod5.so-no-z-defs): Define.
+	(ifuncmod6.so-no-z-defs): Define.
+	(CFLAGS-ifuncmain5pic.c): Define.
+	(CFLAGS-ifuncmain5picstatic.c): Define.
+	(CFLAGS-ifuncmain5staticpic.c): Define.
+	(CFLAGS-ifuncdep5pic.c): Define.
+	(CFLAGS-ifuncmain7pic.c): Define.
+	(CFLAGS-ifuncmain7picstatic.c): Define.
+	(CFLAGS-ifuncmain1staticpie.c): Define.
+	(CFLAGS-ifuncmain5pie.c): Define.
+	(CFLAGS-ifuncmain6pie.c): Define.
+	(CFLAGS-ifuncmain7pie.c): Define.
+	($(objpfx)ifuncmain1staticpie.out): Define.
+	($(objpfx)ifuncmain1staticpie): Define.
+	($(objpfx)ifuncmain5pie.out): Define.
+	($(objpfx)ifuncmain5pie): Define.
+	($(objpfx)ifuncmain6pie.out): Define.
+	($(objpfx)ifuncmain6pie): Define.
+	($(objpfx)ifuncmain5): Define.
+	($(objpfx)ifuncmain5pic): Define.
+	($(objpfx)ifuncmain5static): Define.
+	($(objpfx)ifuncmain5staticpic): Define.
+	($(objpfx)ifuncmain5picstatic): Define.
+	(generated): Add ifuncmain1staticpie, ifuncmain1staticpie.out,
+	ifuncmain5pie, ifuncmain5pie.out, ifuncmain6pie, and
+	ifuncmain6pie.out.
+	* elf/b/elf/ifuncmain1staticpie.c: New file.
+	* elf/ifuncdep5.c: New file.
+	* elf/ifuncdep5pic.c: New file.
+	* elf/ifuncmain5.c: New file.
+	* elf/ifuncmain5pic.c: New file.
+	* elf/ifuncmain5picstatic.c: New file.
+	* elf/ifuncmain5pie.c: New file.
+	* elf/ifuncmain5static.c: New file.
+	* elf/ifuncmain5staticpic.c: New file.
+	* elf/ifuncmain6pie.c: New file.
+	* elf/ifuncmain7.c: New file.
+	* elf/ifuncmain7pic.c: New file.
+	* elf/ifuncmain7picstatic.c: New file.
+	* elf/ifuncmain7pie.c: New file.
+	* elf/ifuncmain7static.c: New file.
+	* elf/ifuncmod5.c: New file.
+	* elf/ifuncmod6.c: New file.
+
+2009-06-20  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10085]
+	* nis/nss_compat/compat-initgroups.c (nss_setgrent): New variable.
+	(nss_endgrent): New variable.
+	(struct ent_t): Add need_endgrent and skip_initgroups_dyn
+	fields. Change type of files to bool and adjust all users.
+	(init_nss_interface): Initialize nss_setgrent and nss_endgrent.
+	(internal_endgrent): Call nss_endgrent if necessary.
+	(add_group): New function.  Broken out of...
+	(check_and_add_group): ...here.
+	(getgrent_next_nss): Remove test that any callback is available.
+	Use skip_initgroups_dyn to determine whether to use initgroups_dyn
+	callback.  If there is no blacklist we can trust the results returned
+	by the initgroups_dyn callback.  In case there is a callback and we
+	find a group entry for the group ID but it doesn't contain the
+	correct member, switch to the slow mode and use getgrent_r.
+	(internal_getgrent_r): When we see a +: entry, determine whether
+	there is any callback and which we can use the initgroups_dyn
+	callback.
+
+2009-06-18  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* malloc/malloc.c (_int_malloc): Add some consistency checks.
+	(_int_free): Likewise.
+
+	* sysdeps/unix/sysv/linux/bits/socket.h: Define PF_IEEE802154 and
+	AF_IEEE802154.
+	* sysdeps/unix/sysv/linux/sparc/bits/socket.h: Likewise.
+	* sysdeps/unix/sysv/linux/net/if_arp.h: Define ARPHRD_IEEE802154
+	and ARPHRD_IEEE802154_PHY.
+
+	* sysdeps/unix/sysv/linux/sparc/bits/socket.h: Add missing definitions
+	relative to generic Linux version.
+
+2009-06-17  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* elf/Makefile ($(objpfx)ifuncmain1pie): Use $(+link-pie).
+	($(objpfx)ifuncmain1vispie): Likewise.
+
+2009-06-16  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* login/Makefile: Build pt_chown as PIE.
+
+2009-06-15  Andreas Schwab  <aschwab@xxxxxxxxxx>
+
+	* debug/xtrace.sh (do_help): Don't treat bug reporting message as
+	a format string.
+	* elf/sln.c (usage): Likewise.
+	* malloc/memusage.sh (do_help): Likewise.
+	* nss/getent.c (more_help): Likewise.
+	* posix/getconf.c (main): Likewise.
+	* sunrpc/rpcinfo.c (usage): Likewise.
+	* sysdeps/unix/sysv/linux/lddlibc4.c (main): Likewise.
+
+2009-06-16  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* login/programs/pt_chown.c: Use libcap to drop privileges other than
+	those needed.
+	* login/Makefile: If necessary link pt_chown with -lcap.
+	* sysdeps/generic/pty-private.h: Define FAIL_ENOMEM.
+	* sysdeps/unix/grantpt.c: Handle FAIL_ENOMEM.
+
+2009-06-16  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* sysdeps/x86_64/memchr.S (memchr): Use unsigned instead of signed
+	comparisons.
+	* string/test-memchr.c (do_random_tests): Test very large lengths
+	as well.
+
+2009-06-02  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* Makeconfig (+link-pie): Define.
+	(+prectorS): Define.
+	(+postctorS): Define.
+	* elf/Makefile ($(objpfx)tst-pie1): Use $(+link-pie).
+	* nscd/Makefile ($(objpfx)nscd): Likewise.
+
+2009-04-22  Ryan S. Arnold  <rsa@xxxxxxxxxx>
+
+	[BZ #10107]
+	* sysdeps/powerpc/powerpc32/power6/memcpy.S (memcpy): Replace cmpldi
+	with cmplwi.
+	* sysdeps/powerpc/powerpc32/power6/memset.S (memset): Likewise.
+
+2009-06-16  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/grantpt.c: Remove file after folding changes
+	into ...
+	* sysdeps/unix/grantpt.c: ...here.
+
+2009-06-15  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/grantpt.c (grantpt): Only call chown and
+	chmod if it is necessary.
+
+	[BZ #10166]
+	* sysdeps/unix/sysv/linux/grantpt.c: Remove shortcut which was used
+	when the slave device is in devpts or devfs.
+
+	[BZ #10183]
+	* posix/tst-cpucount.c: Don't try more than CPU_SETSIZE bits.
+
+	[BZ #10195]
+	* inet/netinet/icmp6.h (struct nd_opt_home_agent_info): Change type
+	of nd_opt_home_agent_info_preference to uint16_t.
+	Patch by Arnaud Ebalard <arno@xxxxxxxxxxxx>.
+
+	[BZ #10207]
+	* nss/getent.c: Add support for printing gshadow data.
+
+	[BZ #10203]
+	* nis/nss_nis/nis-pwd.c (internal_nis_endpwent): Free all buffers,
+	not just the currently used one and those which follow.
+	Patch by Joe Landers <jlanders@xxxxxxxxxx>.
+
+	[BZ #10196]
+	* libio/tst-fgetwc.c (do_test): Use de_DE.UTF-8 as locale name.
+	* libio/Makefile: Run tst-fgetwc with necessary envvar.
+	Patch by Bruce Dubbs <bdubbs@xxxxxxxxxxxxxxxxxxxx>.
+
+	[BZ #10217]
+	* stdlib/abort.c: Define variable __abort_msg.
+	* stdlib/Versions: Export __abort_msg with GLIBC_PRIVATE version.
+	* include/stdlib.h: Declare __abort_msg.
+	* assert/assert-perr.c: Don't free buffer for message immediately.
+	Store atomically in __abort_msg and free old buffer if necessary.
+	* assert/assert.c: Likewise.
+	* sysdeps/posix/libc_fatal.c: Allocate buffer for message, copy it,
+	store pointer in __abort_msg, and possibly free old string.
+	* sysdeps/unix/sysv/linux/libc_fatal.c: Likewise.
+
+	* time/tzfile.c (__tzfile_read): Correct computation of tzspec_len.
+
+	[BZ #10211]
+	* time/tzfile.c (__tzfile_compute): If we use the envvar format still
+	handle leap seconds if they are available.
+	Patch by Akinori Hattori <hattya@xxxxxxxxxx>.
+
+	* timezone/tzselect.ksh: Update from tzcode2009i.
+	* timezone/zdump.c: Likewise.
+	* timezone/zic.c: Likewise.
+
+	* timezone/africa: Update from tzdata2009i.
+	* timezone/antarctica: Likewise.
+	* timezone/asia: Likewise.
+	* timezone/australasia: Likewise.
+	* timezone/backward: Likewise.
+	* timezone/etcetera: Likewise.
+	* timezone/europe: Likewise.
+	* timezone/factory: Likewise.
+	* timezone/iso3166.tab: Likewise.
+	* timezone/leapseconds: Likewise.
+	* timezone/northamerica: Likewise.
+	* timezone/pacificnew: Likewise.
+	* timezone/solar87: Likewise.
+	* timezone/solar88: Likewise.
+	* timezone/solar89: Likewise.
+	* timezone/southamerica: Likewise.
+	* timezone/systemv: Likewise.
+	* timezone/yearistype: Likewise.
+	* timezone/zone.tab: Likewise.
+
+2009-06-15  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* elf/dl-lookup.c (_dl_debug_bindings): When resolving to
+	STT_GNU_IFUNC symbol or in 8 into type_class.
+
+	* sysdeps/i386/dl-irel.h (elf_irel): Use Elf32_Addr type
+	instead of Elf64_Addr.
+
+2009-06-14  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* po/sv.po: Update from translation team.
+
+	[BZ #10229]
+	* misc/sys/select.h (__NFDBITS): Expression should have type int.
+	* sysdeps/x86_64/bits/select.h: Remove asm versions for __FD_SET,
+	__FD_CLR, and __FD_ISSET.  gcc nowadays generates better code from
+	the C version.
+
+2009-06-12  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* Versions.def: Add GLIBC_2.11 for libpthread.
+
+2009-06-11  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* resolv/res_send.c (send_dg): Remember we switched to
+	single-request mode.
+
+2009-06-09  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* dlfcn/dlfcn.h: Remove comma at end of enum.
+	Patch by J.H.M. Dassen <rdassen@xxxxxxxxxx>.
+
+	* libio/fileops.c (_IO_new_file_fopen): Don't prematurely stop
+	parsing mode string.
+
+2009-06-05  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/x86_64/rawmemchr.S: Minor optimization.
+
+	* sysdeps/x86_64/multiarch/rawmemchr.S: New file.
+
+	* sysdeps/x86_64/multiarch/strlen.S: New file.
+	* sysdeps/x86_64/multiarch/ifunc-defines.sym: New file.
+	* sysdeps/x86_64/multiarch/Makefile: Add rule to build ifunc-defines.h.
+	* sysdeps/x86_64/multiarch/init-arch.h: Name structure with register
+	content.
+
+	* csu/elf-init.c: Only compile in IFUNC functionality if USE_MULTIARCH
+	is defined.
+
+2009-06-04  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/x86_64/strlen.S: Minor optimizations.
+
+2009-06-02  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* elf/Makefile (distribute): Add ifuncmain1.c, ifuncmain1pic.c,
+	ifuncmain1vis.c, ifuncmain1vispic.c, ifuncmain1static.c,
+	ifuncmain1staticpic.c, ifuncmain1picstatic.c, ifuncdep1.c,
+	ifuncdep1pic.c, ifuncmod1.c, ifuncmain1pie.c, ifuncmain1vispie.c,
+	ifuncmain2.c, ifuncmain2static.c, ifuncdep2.c,
+	funcmain2pic.c, ifuncmain2picstatic.c, ifuncdep2pic.c,
+	ifuncmain3.c, ifuncmod3.c,.
+	ifuncmain4.c, ifuncmain4static.c, ifuncmain4picstatic.c.
+	(tests-static): Add ifuncmain1static, ifuncmain1picstatic,
+	ifuncmain2static, ifuncmain2picstatic, ifuncmain4static,
+	ifuncmain4picstatic.
+	(tests): Add ifuncmain1, ifuncmain1pic, ifuncmain1vis,
+	ifuncmain1vispic, ifuncmain1staticpic, ifuncmain2, ifuncmain2pic,
+	ifuncmain3, ifuncmain4.
+	(tests): Depend on $(objpfx)ifuncmain1pie.out and
+	$(objpfx)ifuncmain1vispie.out.
+	(modules-names): Add ifuncmod1 ifuncmod3.
+	(generated): Add ifuncmain1pie ifuncmain1pie.out
+	ifuncmain1vispie ifuncmain1vispie.out.
+	Define rules to build and run the tests.
+	* elf/ifuncdep1.c: New file.
+	* elf/ifuncdep1pic.c: New file.
+	* elf/ifuncdep2.c: New file.
+	* elf/ifuncdep2pic.c: New file.
+	* elf/ifuncmain1.c: New file.
+	* elf/ifuncmain1pic.c: New file.
+	* elf/ifuncmain1picstatic.c: New file.
+	* elf/ifuncmain1pie.c: New file.
+	* elf/ifuncmain1static.c: New file.
+	* elf/ifuncmain1staticpic.c: New file.
+	* elf/ifuncmain1vis.c: New file..
+	* elf/ifuncmain1vispic.c: New file..
+	* elf/ifuncmain1vispie.c: New file.
+	* elf/ifuncmain2.c: New file.
+	* elf/ifuncmain2pic.c: New file.
+	* elf/ifuncmain2picstatic.c: New file.
+	* elf/ifuncmain2static.c: New file.
+	* elf/ifuncmain3.c: New file.
+	* elf/ifuncmain4.c: New file.
+	* elf/ifuncmain4picstatic.c: New file.
+	* elf/ifuncmain4static.c: New file.
+	* elf/ifuncmod1.c: New file.
+	* elf/ifuncmod3.c: New file.
+
+2009-06-03  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* elf/dl-sysdep.c (_dl_show_auxv): Terminate correct string.
+
+2009-06-02  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10221]
+	* posix/Makefile (routines): Add execvpe.
+	* posix/Versions: Export execvpe for GLIBC_2.11.
+	* posix/execvp.c: Now only a wrapper.  Move code to...
+	* posix/execvpe.c: ...here.  New file.
+	* posix/unistd.h: Declare execvpe.
+
+2009-06-01  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/i386/dl-machine.h (elf_machine_rel): Reorder conditions
+	for STT_GNU_IFUNC handling for efficiency.
+	* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
+
+	* sysdeps/i386/dl-irel.h (elf_irel): Use __libc_fatal instead of just
+	_exit.
+	* sysdeps/x86_64/dl-irel.h (elf_irela): Likewise.
+
 2009-05-31  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* sysdeps/x86_64/multiarch/sched_cpucount.c: Also use optimized code

Modified: trunk/libc/Makeconfig
==============================================================================
--- trunk/libc/Makeconfig (original)
+++ trunk/libc/Makeconfig Wed Jun 24 09:26:34 2009
@@ -434,6 +434,19 @@
 			   $(common-objpfx)libc% $(+postinit),$^) \
 	      $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
 endif
+# Command for linking PIE programs with the C library.
+ifndef +link-pie
++link-pie = $(CC) -pie -Wl,-O1 -nostdlib -nostartfiles -o $@ \
+	     $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
+	     $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
+	     $(addprefix $(csu-objpfx),S$(start-installed-name)) \
+	     $(+preinit) $(+prectorS) \
+	     $(filter-out $(addprefix $(csu-objpfx),start.o \
+	     S$(start-installed-name))\
+	     $(+preinit) $(link-extra-libs) \
+	     $(common-objpfx)libc% $(+postinit),$^) \
+	     $(link-extra-libs) $(link-libc) $(+postctorS) $(+postinit)
+endif
 # Command for statically linking programs with the C library.
 ifndef +link-static
 +link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
@@ -538,6 +551,9 @@
 +postinit = $(addprefix $(csu-objpfx),crtn.o)
 +prector = `$(CC) --print-file-name=crtbegin.o`
 +postctor = `$(CC) --print-file-name=crtend.o`
+# Variants of the two previous definitions for linking PIE programs.
++prectorS = `$(CC) --print-file-name=crtbeginS.o`
++postctorS = `$(CC) --print-file-name=crtendS.o`
 +interp = $(addprefix $(elf-objpfx),interp.os)
 endif
 csu-objpfx = $(common-objpfx)csu/

Modified: trunk/libc/NEWS
==============================================================================
--- trunk/libc/NEWS (original)
+++ trunk/libc/NEWS Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes.  2009-5-31
+GNU C Library NEWS -- history of user-visible changes.  2009-6-1
 Copyright (C) 1992-2008, 2009 Free Software Foundation, Inc.
 See the end for copying conditions.
 
@@ -6,6 +6,9 @@
 using `glibc' in the "product" field.
 
 Version 2.11
+
+* New interfaces: execvpe
+  Implemented by Ulrich Drepper.
 
 * checking version of longjmp added that fails if an uninitialized stack
   frame would be created.  Implemented by Ulrich Drepper.

Modified: trunk/libc/Versions.def
==============================================================================
--- trunk/libc/Versions.def (original)
+++ trunk/libc/Versions.def Wed Jun 24 09:26:34 2009
@@ -89,6 +89,7 @@
   GLIBC_2.3.4
   GLIBC_2.4
   GLIBC_2.6
+  GLIBC_2.11
   GLIBC_PRIVATE
 }
 libresolv {

Modified: trunk/libc/assert/assert-perr.c
==============================================================================
--- trunk/libc/assert/assert-perr.c (original)
+++ trunk/libc/assert/assert-perr.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994-1998,2001,2002,2005 Free Software Foundation, Inc.
+/* Copyright (C) 1994-1998,2001,2002,2005,2009 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
@@ -17,6 +17,7 @@
    02111-1307 USA.  */
 
 #include <assert.h>
+#include <atomic.h>
 #include <libintl.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -64,9 +65,10 @@
       (void) __fxprintf (NULL, "%s", buf);
       (void) fflush (stderr);
 
-      /* We have to free the buffer since the appplication might catch the
-	 SIGABRT.  */
-      free (buf);
+      /* We have to free the old buffer since the application might
+	 catch the SIGABRT signal.  */
+      char *old = atomic_exchange_acq (&__abort_msg, buf);
+      free (old);
     }
   else
     {

Modified: trunk/libc/assert/assert.c
==============================================================================
--- trunk/libc/assert/assert.c (original)
+++ trunk/libc/assert/assert.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,1994-1996,1998,2001,2002,2005
+/* Copyright (C) 1991,1994-1996,1998,2001,2002,2005,2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -18,6 +18,7 @@
    02111-1307 USA.  */
 
 #include <assert.h>
+#include <atomic.h>
 #include <libintl.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -43,6 +44,7 @@
 # include FATAL_PREPARE_INCLUDE
 #endif
 
+
 #undef __assert_fail
 void
 __assert_fail (const char *assertion, const char *file, unsigned int line,
@@ -64,9 +66,10 @@
       (void) __fxprintf (NULL, "%s", buf);
       (void) fflush (stderr);
 
-      /* We have to free the buffer since the application might catch the
-	 SIGABRT.  */
-      free (buf);
+      /* We have to free the old buffer since the application might
+	 catch the SIGABRT signal.  */
+      char *old = atomic_exchange_acq (&__abort_msg, buf);
+      free (old);
     }
   else
     {

Modified: trunk/libc/csu/elf-init.c
==============================================================================
--- trunk/libc/csu/elf-init.c (original)
+++ trunk/libc/csu/elf-init.c Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* Startup support for ELF initializers/finalizers in the main executable.
-   Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003, 2004, 2005, 2009 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
@@ -36,7 +36,7 @@
 
 #include <stddef.h>
 
-#ifndef LIBC_NONSHARED
+#if defined USE_MULTIARCH && !defined LIBC_NONSHARED
 # include <link.h>
 # include <dl-irel.h>
 
@@ -80,7 +80,7 @@
   /* For dynamically linked executables the preinit array is executed by
      the dynamic linker (before initializing any shared object.  */
 
-#ifndef LIBC_NONSHARED
+#if defined USE_MULTIARCH && !defined LIBC_NONSHARED
 # ifdef ELF_MACHINE_IRELA
   {
     const size_t size = __rela_iplt_end - __rela_iplt_start;

Modified: trunk/libc/dlfcn/dlfcn.h
==============================================================================
--- trunk/libc/dlfcn/dlfcn.h (original)
+++ trunk/libc/dlfcn/dlfcn.h Wed Jun 24 09:26:34 2009
@@ -1,6 +1,5 @@
 /* User functions for run-time dynamic loading.
-   Copyright (C) 1995-1999,2000,2001,2003,2004,2006
-	Free Software Foundation, Inc.
+   Copyright (C) 1995-2001,2003,2004,2006,2009 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
@@ -164,7 +163,7 @@
        segment, or if the calling thread has not allocated a block for it.  */
     RTLD_DI_TLS_DATA = 10,
 
-    RTLD_DI_MAX = 10,
+    RTLD_DI_MAX = 10
   };
 
 

Modified: trunk/libc/elf/Makefile
==============================================================================
--- trunk/libc/elf/Makefile (original)
+++ trunk/libc/elf/Makefile Wed Jun 24 09:26:34 2009
@@ -93,7 +93,24 @@
 		   order2mod1.c order2mod2.c order2mod3.c order2mod4.c \
 		   tst-stackguard1.c tst-stackguard1-static.c \
 		   tst-array5.c tst-array5-static.c tst-array5dep.c \
-		   tst-array5.exp tst-leaks1.c check-execstack.c
+		   tst-array5.exp tst-leaks1.c check-execstack.c \
+		   ifuncmain1.c ifuncmain1pic.c ifuncmain1vis.c \
+		   ifuncmain1vispic.c ifuncmain1static.c \
+		   ifuncmain1staticpic.c ifuncmain1picstatic.c \
+		   ifuncdep1.c ifuncdep1pic.c ifuncmod1.c \
+		   ifuncmain1pie.c ifuncmain1vispie.c \
+		   ifuncmain1staticpie.c \
+		   ifuncmain2.c ifuncmain2static.c ifuncdep2.c \
+		   ifuncmain2pic.c ifuncmain2picstatic.c ifuncdep2pic.c \
+		   ifuncmain3.c ifuncmod3.c \
+		   ifuncmain4.c ifuncmain4static.c ifuncmain4picstatic.c \
+		   ifuncmain5.c ifuncmain5pic.c ifuncmain5picstatic.c \
+		   ifuncmain5pie.c ifuncmain5static.c \
+		   ifuncmain5staticpic.c \
+		   ifuncdep5.c ifuncdep5pic.c ifuncmod5.c \
+		   ifuncmain6pie.c ifuncmod6.c \
+		   ifuncmain7.c ifuncmain7pic.c ifuncmain7picstatic.c \
+		   ifuncmain7pie.c ifuncmain7static.c
 
 CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables
@@ -232,6 +249,28 @@
 
 # filtmod1.so has a special rule
 modules-names-nobuild := filtmod1
+
+ifeq (yes,$(multi-arch))
+tests-static += ifuncmain1static ifuncmain1picstatic \
+		ifuncmain2static ifuncmain2picstatic \
+		ifuncmain4static ifuncmain4picstatic \
+		ifuncmain5static ifuncmain5picstatic \
+		ifuncmain7static ifuncmain7picstatic
+
+ifeq (yes,$(build-shared))
+tests += ifuncmain1 ifuncmain1pic ifuncmain1vis ifuncmain1vispic \
+	 ifuncmain1staticpic \
+	 ifuncmain2 ifuncmain2pic ifuncmain3 ifuncmain4 \
+	 ifuncmain5 ifuncmain5pic ifuncmain5staticpic \
+	 ifuncmain7 ifuncmain7pic
+ifeq (yes,$(have-fpie))
+tests: $(objpfx)ifuncmain1pie.out $(objpfx)ifuncmain1vispie.out \
+	$(objpfx)ifuncmain1staticpie.out $(objpfx)ifuncmain5pie.out \
+	$(objpfx)ifuncmain6pie.out $(objpfx)ifuncmain7pie.out
+endif
+modules-names += ifuncmod1 ifuncmod3 ifuncmod5 ifuncmod6
+endif
+endif
 
 
 include ../Rules
@@ -507,6 +546,9 @@
 reldep9mod1.so-no-z-defs = yes
 unload3mod4.so-no-z-defs = yes
 unload4mod1.so-no-z-defs = yes
+ifuncmod1.so-no-z-defs = yes
+ifuncmod5.so-no-z-defs = yes
+ifuncmod6.so-no-z-defs = yes
 
 ifeq ($(build-shared),yes)
 # Build all the modules even when not actually running test programs.
@@ -834,14 +876,7 @@
 	  $< > $@
 
 $(objpfx)tst-pie1: $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so
-	$(LINK.o) -pie -Wl,-O1 \
-	  $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-	  $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
-	  $(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
-	  $(LDFLAGS) $(LDFLAGS-$(@F)) \
-	  -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-	  -o $@ $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so \
-	  $(common-objpfx)libc_nonshared.a
+	$(+link-pie)
 
 generated += tst-pie1 tst-pie1.out tst-pie1.o
 endif
@@ -962,3 +997,111 @@
 $(objpfx)tst-addr1: $(libdl)
 
 $(objpfx)tst-thrlock: $(libdl) $(shared-thread-library)
+
+CFLAGS-ifuncmain1pic.c += $(pic-ccflag)
+CFLAGS-ifuncmain1picstatic.c += $(pic-ccflag)
+CFLAGS-ifuncmain1staticpic.c += $(pic-ccflag)
+CFLAGS-ifuncdep1pic.c += $(pic-ccflag)
+CFLAGS-ifuncmain1vispic.c += $(pic-ccflag)
+CFLAGS-ifuncmain2pic.c += $(pic-ccflag)
+CFLAGS-ifuncmain2picstatic.c += $(pic-ccflag)
+CFLAGS-ifuncdep2pic.c += $(pic-ccflag)
+CFLAGS-ifuncmain4picstatic.c += $(pic-ccflag)
+CFLAGS-ifuncmain5pic.c += $(pic-ccflag)
+CFLAGS-ifuncmain5picstatic.c += $(pic-ccflag)
+CFLAGS-ifuncmain5staticpic.c += $(pic-ccflag)
+CFLAGS-ifuncdep5pic.c += $(pic-ccflag)
+CFLAGS-ifuncmain7pic.c += $(pic-ccflag)
+CFLAGS-ifuncmain7picstatic.c += $(pic-ccflag)
+
+LDFLAGS-ifuncmain3 = -Wl,-export-dynamic
+
+ifeq (yesyes,$(have-fpie)$(build-shared))
+CFLAGS-ifuncmain1pie.c += $(pie-ccflag)
+CFLAGS-ifuncmain1vispie.c += $(pie-ccflag)
+CFLAGS-ifuncmain1staticpie.c += $(pie-ccflag)
+CFLAGS-ifuncmain5pie.c += $(pie-ccflag)
+CFLAGS-ifuncmain6pie.c += $(pie-ccflag)
+CFLAGS-ifuncmain7pie.c += $(pie-ccflag)
+
+$(objpfx)ifuncmain1pie.out: $(objpfx)ifuncmain1pie
+	$(elf-objpfx)$(rtld-installed-name) \
+	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	  $< > $@
+
+$(objpfx)ifuncmain1pie: $(objpfx)ifuncmain1pie.o $(objpfx)ifuncmod1.so
+	$(+link-pie)
+
+generated += ifuncmain1pie ifuncmain1pie.out
+
+$(objpfx)ifuncmain1staticpie.out: $(objpfx)ifuncmain1staticpie
+	$(elf-objpfx)$(rtld-installed-name) \
+	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	  $< > $@
+
+$(objpfx)ifuncmain1staticpie: $(objpfx)ifuncmain1staticpie.o $(objpfx)ifuncdep1pic.o
+	$(+link-pie)
+
+generated += ifuncmain1staticpie ifuncmain1staticpie.out
+
+$(objpfx)ifuncmain1vispie.out: $(objpfx)ifuncmain1vispie
+	$(elf-objpfx)$(rtld-installed-name) \
+	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	  $< > $@
+
+$(objpfx)ifuncmain1vispie: $(objpfx)ifuncmain1vispie.o $(objpfx)ifuncmod1.so
+	$(+link-pie)
+
+generated += ifuncmain1vispie ifuncmain1vispie.out
+
+$(objpfx)ifuncmain5pie.out: $(objpfx)ifuncmain5pie
+	$(elf-objpfx)$(rtld-installed-name) \
+	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	  $< > $@
+
+$(objpfx)ifuncmain5pie: $(objpfx)ifuncmain5pie.o $(objpfx)ifuncmod5.so
+	$(+link-pie)
+
+generated += ifuncmain5pie ifuncmain5pie.out
+
+$(objpfx)ifuncmain6pie.out: $(objpfx)ifuncmain6pie
+	$(elf-objpfx)$(rtld-installed-name) \
+	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	  $< > $@
+
+$(objpfx)ifuncmain6pie: $(objpfx)ifuncmain6pie.o $(objpfx)ifuncmod6.so
+	$(+link-pie)
+
+generated += ifuncmain6pie ifuncmain6pie.out
+
+$(objpfx)ifuncmain7pie.out: $(objpfx)ifuncmain7pie
+	$(elf-objpfx)$(rtld-installed-name) \
+	  --library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
+	  $< > $@
+
+$(objpfx)ifuncmain7pie: $(objpfx)ifuncmain7pie.o
+	$(+link-pie)
+
+generated += ifuncmain7pie ifuncmain7pie.out
+endif
+
+$(objpfx)ifuncmain1: $(addprefix $(objpfx),ifuncmod1.so)
+$(objpfx)ifuncmain1pic: $(addprefix $(objpfx),ifuncmod1.so)
+$(objpfx)ifuncmain1staticpic: $(addprefix $(objpfx),ifuncdep1pic.o)
+$(objpfx)ifuncmain1static: $(addprefix $(objpfx),ifuncdep1.o)
+$(objpfx)ifuncmain1picstatic: $(addprefix $(objpfx),ifuncdep1pic.o)
+$(objpfx)ifuncmain1vis: $(addprefix $(objpfx),ifuncmod1.so)
+$(objpfx)ifuncmain1vispic: $(addprefix $(objpfx),ifuncmod1.so)
+$(objpfx)ifuncmain2: $(addprefix $(objpfx),ifuncdep2.o)
+$(objpfx)ifuncmain2pic: $(addprefix $(objpfx),ifuncdep2pic.o)
+$(objpfx)ifuncmain2static: $(addprefix $(objpfx),ifuncdep2.o)
+$(objpfx)ifuncmain2picstatic: $(addprefix $(objpfx),ifuncdep2pic.o)
+
+$(objpfx)ifuncmain3: $(libdl)
+$(objpfx)ifuncmain3.out: $(objpfx)ifuncmod3.so
+
+$(objpfx)ifuncmain5: $(addprefix $(objpfx),ifuncmod5.so)
+$(objpfx)ifuncmain5pic: $(addprefix $(objpfx),ifuncmod5.so)
+$(objpfx)ifuncmain5static: $(addprefix $(objpfx),ifuncdep5.o)
+$(objpfx)ifuncmain5staticpic: $(addprefix $(objpfx),ifuncdep5pic.o)
+$(objpfx)ifuncmain5picstatic: $(addprefix $(objpfx),ifuncdep5pic.o)

Modified: trunk/libc/elf/dl-lookup.c
==============================================================================
--- trunk/libc/elf/dl-lookup.c (original)
+++ trunk/libc/elf/dl-lookup.c Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* Look up a symbol in the loaded objects.
-   Copyright (C) 1995-2005, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-2005, 2006, 2007, 2009 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
@@ -542,15 +542,20 @@
 	    conflict = 1;
 	}
 
-      if (value->s
-	  && (__builtin_expect (ELFW(ST_TYPE) (value->s->st_info)
-				== STT_TLS, 0)))
-	type_class = 4;
+      if (value->s)
+	{
+	  if (__builtin_expect (ELFW(ST_TYPE) (value->s->st_info)
+				== STT_TLS, 0))
+	    type_class = 4;
+	  else if (__builtin_expect (ELFW(ST_TYPE) (value->s->st_info)
+				     == STT_GNU_IFUNC, 0))
+	    type_class |= 8;
+	}
 
       if (conflict
 	  || GLRO(dl_trace_prelink_map) == undef_map
 	  || GLRO(dl_trace_prelink_map) == NULL
-	  || type_class == 4)
+	  || type_class >= 4)
 	{
 	  _dl_printf ("%s 0x%0*Zx 0x%0*Zx -> 0x%0*Zx 0x%0*Zx ",
 		      conflict ? "conflict" : "lookup",

Modified: trunk/libc/elf/dl-sysdep.c
==============================================================================
--- trunk/libc/elf/dl-sysdep.c (original)
+++ trunk/libc/elf/dl-sysdep.c Wed Jun 24 09:26:34 2009
@@ -335,7 +335,7 @@
 
       /* Unknown value: print a generic line.  */
       char buf2[17];
-      buf[sizeof (buf2) - 1] = '\0';
+      buf2[sizeof (buf2) - 1] = '\0';
       const char *val2 = _itoa ((unsigned long int) av->a_un.a_val,
 				buf2 + sizeof buf2 - 1, 16, 0);
       const char *val =  _itoa ((unsigned long int) av->a_type,

Modified: trunk/libc/include/stdlib.h
==============================================================================
--- trunk/libc/include/stdlib.h (original)
+++ trunk/libc/include/stdlib.h Wed Jun 24 09:26:34 2009
@@ -221,6 +221,9 @@
 extern void *__default_morecore (ptrdiff_t) __THROW;
 libc_hidden_proto (__default_morecore)
 
+extern char *__abort_msg;
+libc_hidden_proto (__abort_msg)
+
 __END_DECLS
 
 #undef __Need_M_And_C

Modified: trunk/libc/include/unistd.h
==============================================================================
--- trunk/libc/include/unistd.h (original)
+++ trunk/libc/include/unistd.h Wed Jun 24 09:26:34 2009
@@ -61,6 +61,8 @@
 extern int __fchdir (int __fd);
 extern char *__getcwd (char *__buf, size_t __size);
 extern int __rmdir (const char *__path);
+extern int __execvpe (const char *file, char *const argv[],
+		      char *const envp[]);
 
 /* Get the canonical absolute name of the named directory, and put it in SIZE
    bytes of BUF.  Returns NULL if the directory couldn't be determined or

Modified: trunk/libc/inet/netinet/icmp6.h
==============================================================================
--- trunk/libc/inet/netinet/icmp6.h (original)
+++ trunk/libc/inet/netinet/icmp6.h Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1997,2000,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1997,2000,2006,2009 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
@@ -339,7 +339,7 @@
     uint8_t   nd_opt_home_agent_info_type;
     uint8_t   nd_opt_home_agent_info_len;
     uint16_t  nd_opt_home_agent_info_reserved;
-    int16_t   nd_opt_home_agent_info_preference;
+    uint16_t  nd_opt_home_agent_info_preference;
     uint16_t  nd_opt_home_agent_info_lifetime;
   };
 

Modified: trunk/libc/libio/Makefile
==============================================================================
--- trunk/libc/libio/Makefile (original)
+++ trunk/libc/libio/Makefile Wed Jun 24 09:26:34 2009
@@ -175,6 +175,7 @@
 bug-ungetwc2-ENV = LOCPATH=$(common-objpfx)localedata
 tst-swscanf-ENV = LOCPATH=$(common-objpfx)localedata
 bug-ftell-ENV = LOCPATH=$(common-objpfx)localedata
+tst-fgetwc-ENV = LOCPATH=$(common-objpfx)localedata
 
 generated = tst-fopenloc.mtrace tst-fopenloc.check
 

Modified: trunk/libc/libio/fileops.c
==============================================================================
--- trunk/libc/libio/fileops.c (original)
+++ trunk/libc/libio/fileops.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007, 2008
+/* Copyright (C) 1993, 1995, 1997-2005, 2006, 2007, 2008, 2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Per Bothner <bothner@xxxxxxxxxx>.
@@ -319,11 +319,11 @@
 	  continue;
 	case 'c':
 	  fp->_flags2 |= _IO_FLAGS2_NOTCANCEL;
-	  break;
+	  continue;
 #ifdef O_CLOEXEC
 	case 'e':
 	  oflags |= O_CLOEXEC;
-	  break;
+	  continue;
 #endif
 	default:
 	  /* Ignore.  */

Modified: trunk/libc/libio/tst-fgetwc.c
==============================================================================
--- trunk/libc/libio/tst-fgetwc.c (original)
+++ trunk/libc/libio/tst-fgetwc.c Wed Jun 24 09:26:34 2009
@@ -6,7 +6,7 @@
 static int
 do_test (void)
 {
-  if (setlocale (LC_ALL, "de_DE.utf8") == NULL)
+  if (setlocale (LC_ALL, "de_DE.UTF-8") == NULL)
     {
       puts ("setlocale failed");
       return 1;

Modified: trunk/libc/localedata/ChangeLog
==============================================================================
--- trunk/libc/localedata/ChangeLog (original)
+++ trunk/libc/localedata/ChangeLog Wed Jun 24 09:26:34 2009
@@ -1,3 +1,21 @@
+2009-06-16  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10011]
+	* locales/de_AT: Define week, first_weekday, first_workday.
+	Patch by Paul Marcher <flyer@xxxxxxxxx>.
+
+2009-06-15  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10213]
+	* SUPPORTED (SUPPORTED-LOCALES): Add dv_MV.UTF-8 entry.
+	* locales/dv_MV: New file.
+	Contributed by sofwathullah.mohamed@xxxxxxxxxx
+
+2009-06-09  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* locales/ur_IN: New file.
+	Contributed by Pravin Satpute <psatpute@xxxxxxxxxx>.
+
 2009-05-04  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* localedata/locales/bn_BD: Remove comment about missing collation

Modified: trunk/libc/localedata/SUPPORTED
==============================================================================
--- trunk/libc/localedata/SUPPORTED (original)
+++ trunk/libc/localedata/SUPPORTED Wed Jun 24 09:26:34 2009
@@ -98,6 +98,7 @@
 de_LU.UTF-8/UTF-8 \
 de_LU/ISO-8859-1 \
 de_LU@euro/ISO-8859-15 \
+dv_MV/UTF-8 \
 dz_BT/UTF-8 \
 el_GR.UTF-8/UTF-8 \
 el_GR/ISO-8859-7 \

Modified: trunk/libc/localedata/locales/de_AT
==============================================================================
--- trunk/libc/localedata/locales/de_AT (original)
+++ trunk/libc/localedata/locales/de_AT Wed Jun 24 09:26:34 2009
@@ -121,6 +121,9 @@
 date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
+week    7;19971130;4
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 LC_PAPER

Modified: trunk/libc/login/Makefile
==============================================================================
--- trunk/libc/login/Makefile (original)
+++ trunk/libc/login/Makefile Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-# Copyright (C) 1996-1998,2000-2002,2003,2007 Free Software Foundation, Inc.
+# Copyright (C) 1996-1998,2000-2003,2007, 2009 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
@@ -58,6 +58,24 @@
 	     $(resolvobjdir)/libresolv.a $(common-objpfx)libc.a
 endif
 
+ifeq (yesyes,$(have-fpie)$(build-shared))
+pt_chown-cflags += $(pie-ccflag)
+endif
+ifeq (yes,$(have-ssp))
+pt_chown-cflags += -fstack-protector
+endif
+ifeq (yes,$(have-libcap))
+libcap = -lcap
+endif
+CFLAGS-pt_chown.c = $(pt_chown-cflags)
+LDLIBS-pt_chown = $(libcap)
+ifeq (yesyes,$(have-fpie)$(build-shared))
+LDFLAGS-pt_chown = -Wl,-z,now
+
+$(objpfx)pt_chown: $(objpfx)pt_chown.o
+	$(+link-pie)
+endif
+
 # pt_chown needs to be setuid root.
 $(inst_libexecdir)/pt_chown: $(objpfx)pt_chown $(+force)
 	$(make-target-directory)

Modified: trunk/libc/login/programs/pt_chown.c
==============================================================================
--- trunk/libc/login/programs/pt_chown.c (original)
+++ trunk/libc/login/programs/pt_chown.c Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* pt_chmod - helper program for `grantpt'.
-   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by C. Scott Ananian <cananian@xxxxxxxxxxxxxxxxxxxx>, 1998.
 
@@ -29,6 +29,10 @@
 #include <string.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#ifdef HAVE_LIBCAP
+# include <sys/capability.h>
+# include <sys/prctl.h>
+#endif
 
 #include "pty-private.h"
 
@@ -99,7 +103,7 @@
 do_pt_chown (void)
 {
   char *pty;
-  struct stat st;
+  struct stat64 st;
   struct group *p;
   gid_t gid;
 
@@ -110,7 +114,7 @@
 
   /* Check that the returned slave pseudo terminal is a
      character device.  */
-  if (stat (pty, &st) < 0 || !S_ISCHR(st.st_mode))
+  if (stat64 (pty, &st) < 0 || !S_ISCHR (st.st_mode))
     return FAIL_EINVAL;
 
   /* Get the group ID of the special `tty' group.  */
@@ -119,12 +123,13 @@
 
   /* Set the owner to the real user ID, and the group to that special
      group ID.  */
-  if (chown (pty, getuid (), gid) < 0)
+  if (st.st_gid != gid && chown (pty, getuid (), gid) < 0)
     return FAIL_EACCES;
 
   /* Set the permission mode to readable and writable by the owner,
      and writable by the group.  */
-  if (chmod (pty, S_IRUSR|S_IWUSR|S_IWGRP) < 0)
+  if ((st.st_mode & ACCESSPERMS) != (S_IRUSR|S_IWUSR|S_IWGRP)
+      && chmod (pty, S_IRUSR|S_IWUSR|S_IWGRP) < 0)
     return FAIL_EACCES;
 
   return 0;
@@ -135,16 +140,43 @@
 main (int argc, char *argv[])
 {
   uid_t euid = geteuid ();
+  uid_t uid = getuid ();
   int remaining;
 
-  /* Normal invocation of this program is with no arguments and
-     with privileges.
-     FIXME: Should use capable (CAP_CHOWN|CAP_FOWNER).  */
   if (argc == 1 && euid == 0)
-    return do_pt_chown ();
+    {
+#ifdef HAVE_LIBCAP
+  /* Drop privileges.  */
+      if (uid != euid)
+	{
+	  static const cap_value_t cap_list[] =
+	    { CAP_CHOWN, CAP_FOWNER	};
+# define ncap_list (sizeof (cap_list) / sizeof (cap_list[0]))
+	  cap_t caps = cap_init ();
+	  if (caps == NULL)
+	    error (FAIL_ENOMEM, errno,
+		   _("Failed to initialize drop of capabilities"));
+
+	  /* There is no reason why these should not work.  */
+	  cap_set_flag (caps, CAP_PERMITTED, ncap_list, cap_list, CAP_SET);
+	  cap_set_flag (caps, CAP_EFFECTIVE, ncap_list, cap_list, CAP_SET);
+
+	  int res = cap_set_proc (caps);
+
+	  cap_free (caps);
+
+	  if (__builtin_expect (res != 0, 0))
+	    error (FAIL_EXEC, errno, _("cap_set_proc failed"));
+	}
+#endif
+
+      /* Normal invocation of this program is with no arguments and
+	 with privileges.  */
+      return do_pt_chown ();
+    }
 
   /* We aren't going to be using privileges, so drop them right now. */
-  setuid (getuid ());
+  setuid (uid);
 
   /* Set locale via LC_ALL.  */
   setlocale (LC_ALL, "");

Modified: trunk/libc/malloc/malloc.c
==============================================================================
--- trunk/libc/malloc/malloc.c (original)
+++ trunk/libc/malloc/malloc.c Wed Jun 24 09:26:34 2009
@@ -4241,6 +4241,8 @@
   mchunkptr       fwd;              /* misc temp for linking */
   mchunkptr       bck;              /* misc temp for linking */
 
+  const char *errstr = NULL;
+
   /*
     Convert request size to internal form by adding SIZE_SZ bytes
     overhead plus possibly more to obtain necessary alignment and/or
@@ -4276,8 +4278,11 @@
 #endif
     if (victim != 0) {
       if (__builtin_expect (fastbin_index (chunksize (victim)) != idx, 0))
-	malloc_printerr (check_action, "malloc(): memory corruption (fast)",
-			 chunk2mem (victim));
+	{
+	  errstr = "malloc(): memory corruption (fast)";
+	errout:
+	  malloc_printerr (check_action, errstr, chunk2mem (victim));
+	}
 #ifndef ATOMIC_FASTBINS
       *fb = victim->fd;
 #endif
@@ -4306,6 +4311,11 @@
         malloc_consolidate(av);
       else {
         bck = victim->bk;
+	if (__builtin_expect (bck->fd != victim, 0))
+	  {
+	    errstr = "malloc(): smallbin double linked list corrupted";
+	    goto errout;
+	  }
         set_inuse_bit_at_offset(victim, nb);
         bin->bk = bck;
         bck->fd = bin;
@@ -4515,6 +4525,11 @@
              have to perform a complete insert here.  */
 	  bck = unsorted_chunks(av);
 	  fwd = bck->fd;
+	  if (__builtin_expect (fwd->bk != bck, 0))
+	    {
+	      errstr = "malloc(): corrupted unsorted chunks";
+	      goto errout;
+	    }
 	  remainder->bk = bck;
 	  remainder->fd = fwd;
 	  bck->fd = remainder;
@@ -4610,6 +4625,11 @@
 	     have to perform a complete insert here.  */
 	  bck = unsorted_chunks(av);
 	  fwd = bck->fd;
+	  if (__builtin_expect (fwd->bk != bck, 0))
+	    {
+	      errstr = "malloc(): corrupted unsorted chunks 2";
+	      goto errout;
+	    }
 	  remainder->bk = bck;
 	  remainder->fd = fwd;
 	  bck->fd = remainder;
@@ -4901,6 +4921,11 @@
 
       bck = unsorted_chunks(av);
       fwd = bck->fd;
+      if (__builtin_expect (fwd->bk != bck, 0))
+	{
+	  errstr = "free(): corrupted unsorted chunks";
+	  goto errout;
+	}
       p->fd = fwd;
       p->bk = bck;
       if (!in_smallbin_range(size))

Modified: trunk/libc/manual/charset.texi
==============================================================================
--- trunk/libc/manual/charset.texi (original)
+++ trunk/libc/manual/charset.texi Wed Jun 24 09:26:34 2009
@@ -1234,7 +1234,7 @@
       /* @r{If any characters must be carried forward,}
          @r{put them at the beginning of @code{buffer}.} */
       if (filled > 0)
-        memmove (inp, buffer, filled);
+        memmove (buffer, inp, filled);
     @}
 
   return 1;

Modified: trunk/libc/misc/sys/select.h
==============================================================================
--- trunk/libc/misc/sys/select.h (original)
+++ trunk/libc/misc/sys/select.h Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* `fd_set' type and related macros, and `select'/`pselect' declarations.
-   Copyright (C) 1996,97,98,99,2000,01,02,2003 Free Software Foundation, Inc.
+   Copyright (C) 1996-2003, 2009 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
@@ -59,7 +59,7 @@
 #undef	__FDELT
 #undef	__FDMASK
 /* It's easier to assume 8-bit bytes than to get CHAR_BIT.  */
-#define __NFDBITS	(8 * sizeof (__fd_mask))
+#define __NFDBITS	(8 * (int) sizeof (__fd_mask))
 #define	__FDELT(d)	((d) / __NFDBITS)
 #define	__FDMASK(d)	((__fd_mask) 1 << ((d) % __NFDBITS))
 

Modified: trunk/libc/nis/nss_compat/compat-initgroups.c
==============================================================================
--- trunk/libc/nis/nss_compat/compat-initgroups.c (original)
+++ trunk/libc/nis/nss_compat/compat-initgroups.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998-2004, 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1998-2004, 2006, 2007, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@xxxxxxx>, 1998.
 
@@ -43,8 +43,10 @@
 static enum nss_status (*nss_getgrgid_r) (gid_t gid, struct group * grp,
 					  char *buffer, size_t buflen,
 					  int *errnop);
+static enum nss_status (*nss_setgrent) (int stayopen);
 static enum nss_status (*nss_getgrent_r) (struct group * grp, char *buffer,
 					  size_t buflen, int *errnop);
+static enum nss_status (*nss_endgrent) (void);
 
 /* Protect global state against multiple changers.  */
 __libc_lock_define_initialized (static, lock)
@@ -68,7 +70,9 @@
 
 struct ent_t
 {
-  bool_t files;
+  bool files;
+  bool need_endgrent;
+  bool skip_initgroups_dyn;
   FILE *stream;
   struct blacklist_t blacklist;
 };
@@ -106,7 +110,9 @@
       nss_initgroups_dyn = __nss_lookup_function (ni, "initgroups_dyn");
       nss_getgrnam_r = __nss_lookup_function (ni, "getgrnam_r");
       nss_getgrgid_r = __nss_lookup_function (ni, "getgrgid_r");
+      nss_setgrent = __nss_lookup_function (ni, "setgrent");
       nss_getgrent_r = __nss_lookup_function (ni, "getgrent_r");
+      nss_endgrent = __nss_lookup_function (ni, "endgrent");
     }
 
   __libc_lock_unlock (lock);
@@ -117,7 +123,7 @@
 {
   enum nss_status status = NSS_STATUS_SUCCESS;
 
-  ent->files = TRUE;
+  ent->files = true;
 
   if (ni == NULL)
     init_nss_interface ();
@@ -195,54 +201,68 @@
   else
     ent->blacklist.current = 0;
 
+  if (ent->need_endgrent && nss_endgrent != NULL)
+    nss_endgrent ();
+
   return NSS_STATUS_SUCCESS;
 }
 
+/* Add new group record.  */
+static void
+add_group (long int *start, long int *size, gid_t **groupsp, long int limit,
+	   gid_t gid)
+{
+  gid_t *groups = *groupsp;
+
+  /* Matches user.  Insert this group.  */
+  if (__builtin_expect (*start == *size, 0))
+    {
+      /* Need a bigger buffer.  */
+      gid_t *newgroups;
+      long int newsize;
+
+      if (limit > 0 && *size == limit)
+	/* We reached the maximum.  */
+	return;
+
+      if (limit <= 0)
+	newsize = 2 * *size;
+      else
+	newsize = MIN (limit, 2 * *size);
+
+      newgroups = realloc (groups, newsize * sizeof (*groups));
+      if (newgroups == NULL)
+	return;
+      *groupsp = groups = newgroups;
+      *size = newsize;
+    }
+
+  groups[*start] = gid;
+  *start += 1;
+}
+
 /* This function checks, if the user is a member of this group and if
-   yes, add the group id to the list.  */
-static void
+   yes, add the group id to the list.  Return nonzero is we couldn't
+   handle the group because the user is not in the member list.  */
+static int
 check_and_add_group (const char *user, gid_t group, long int *start,
 		     long int *size, gid_t **groupsp, long int limit,
 		     struct group *grp)
 {
-  gid_t *groups = *groupsp;
   char **member;
 
   /* Don't add main group to list of groups.  */
   if (grp->gr_gid == group)
-    return;
+    return 0;
 
   for (member = grp->gr_mem; *member != NULL; ++member)
     if (strcmp (*member, user) == 0)
       {
-	/* Matches user.  Insert this group.  */
-	if (*start == *size)
-	  {
-	    /* Need a bigger buffer.  */
-	    gid_t *newgroups;
-	    long int newsize;
-
-	    if (limit > 0 && *size == limit)
-	      /* We reached the maximum.  */
-	      return;
-
-	    if (limit <= 0)
-	      newsize = 2 * *size;
-	    else
-	      newsize = MIN (limit, 2 * *size);
-
-	    newgroups = realloc (groups, newsize * sizeof (*groups));
-	    if (newgroups == NULL)
-	      return;
-	    *groupsp = groups = newgroups;
-	    *size = newsize;
-	  }
-
-	groups[*start] = grp->gr_gid;
-	*start += 1;
-
-	break;
+	add_group (start, size, groupsp, limit, grp->gr_gid);
+	return 0;
       }
+
+  return 1;
 }
 
 /* Get the next group from NSS  (+ entry). If the NSS module supports
@@ -255,15 +275,10 @@
   enum nss_status status;
   struct group grpbuf;
 
-  /* if this module does not support getgrent_r and initgroups_dyn,
-     abort. We cannot find the needed group entries.  */
-  if (nss_getgrent_r == NULL && nss_initgroups_dyn == NULL)
-    return NSS_STATUS_UNAVAIL;
-
   /* Try nss_initgroups_dyn if supported. We also need getgrgid_r.
      If this function is not supported, step through the whole group
      database with getgrent_r.  */
-  if (nss_initgroups_dyn && nss_getgrgid_r)
+  if (! ent->skip_initgroups_dyn)
     {
       long int mystart = 0;
       long int mysize = limit <= 0 ? *size : limit;
@@ -282,39 +297,56 @@
       if (nss_initgroups_dyn (user, group, &mystart, &mysize, &mygroups,
 			      limit, errnop) == NSS_STATUS_SUCCESS)
 	{
-	  /* A temporary buffer. We use the normal buffer, until we find
-	     an entry, for which this buffer is to small.  In this case, we
-	     overwrite the pointer with one to a bigger buffer.  */
-	  char *tmpbuf = buffer;
-	  size_t tmplen = buflen;
-	  int i;
-
-	  for (i = 0; i < mystart; i++)
+	  /* If there is no blacklist we can trust the underlying
+	     initgroups implementation.  */
+	  if (ent->blacklist.current <= 1)
+	    for (int i = 0; i < mystart; i++)
+	      add_group (start, size, groupsp, limit, mygroups[i]);
+	  else
 	    {
-	      while ((status = nss_getgrgid_r (mygroups[i], &grpbuf, tmpbuf,
-					       tmplen,
-					       errnop)) == NSS_STATUS_TRYAGAIN
-		     && *errnop == ERANGE)
-		if (tmpbuf == buffer)
-		  {
-		    tmplen *= 2;
-		    tmpbuf = __alloca (tmplen);
-		  }
-		else
-		  tmpbuf = extend_alloca (tmpbuf, tmplen, 2 * tmplen);
-
-	      if (__builtin_expect  (status != NSS_STATUS_NOTFOUND, 1))
+	      /* A temporary buffer. We use the normal buffer, until we find
+		 an entry, for which this buffer is to small.  In this case, we
+		 overwrite the pointer with one to a bigger buffer.  */
+	      char *tmpbuf = buffer;
+	      size_t tmplen = buflen;
+
+	      for (int i = 0; i < mystart; i++)
 		{
-		  if (__builtin_expect  (status != NSS_STATUS_SUCCESS, 0))
+		  while ((status = nss_getgrgid_r (mygroups[i], &grpbuf,
+						   tmpbuf, tmplen, errnop))
+			 == NSS_STATUS_TRYAGAIN
+			 && *errnop == ERANGE)
+		    if (tmpbuf == buffer)
+		      {
+			tmplen *= 2;
+			tmpbuf = __alloca (tmplen);
+		      }
+		    else
+		      tmpbuf = extend_alloca (tmpbuf, tmplen, 2 * tmplen);
+
+		  if (__builtin_expect  (status != NSS_STATUS_NOTFOUND, 1))
 		    {
-		      free (mygroups);
-		      return status;
+		      if (__builtin_expect  (status != NSS_STATUS_SUCCESS, 0))
+			{
+			  free (mygroups);
+			  return status;
+			}
+
+		      if (!in_blacklist (grpbuf.gr_name,
+					 strlen (grpbuf.gr_name), ent)
+			  && check_and_add_group (user, group, start, size,
+						  groupsp, limit, &grpbuf))
+			{
+			  if (nss_setgrent != NULL)
+			    {
+			      nss_setgrent (1);
+			      ent->need_endgrent = true;
+			    }
+			  ent->skip_initgroups_dyn = true;
+
+			  goto iter;
+			}
 		    }
-
-		  if (!in_blacklist (grpbuf.gr_name,
-				     strlen (grpbuf.gr_name), ent))
-		    check_and_add_group (user, group, start, size, groupsp,
-					 limit, &grpbuf);
 		}
 	    }
 
@@ -327,17 +359,21 @@
     }
 
   /* If we come here, the NSS module does not support initgroups_dyn
-     and we have to step through the whole list ourself.  */
+     or we were confronted with a split group.  In these cases we have
+     to step through the whole list ourself.  */
+ iter:
   do
     {
       if ((status = nss_getgrent_r (&grpbuf, buffer, buflen, errnop)) !=
 	  NSS_STATUS_SUCCESS)
-	return status;
+	break;
     }
   while (in_blacklist (grpbuf.gr_name, strlen (grpbuf.gr_name), ent));
 
-  check_and_add_group (user, group, start, size, groupsp, limit, &grpbuf);
-  return NSS_STATUS_SUCCESS;
+  if (status == NSS_STATUS_SUCCESS)
+    check_and_add_group (user, group, start, size, groupsp, limit, &grpbuf);
+
+  return status;
 }
 
 static enum nss_status
@@ -435,7 +471,21 @@
       /* +:... */
       if (grpbuf.gr_name[0] == '+' && grpbuf.gr_name[1] == '\0')
 	{
-	  ent->files = FALSE;
+	  /* If the selected module does not support getgrent_r or
+	     initgroups_dyn, abort. We cannot find the needed group
+	     entries.  */
+	  if (nss_getgrent_r == NULL && nss_initgroups_dyn == NULL)
+	    return NSS_STATUS_UNAVAIL;
+
+	  ent->files = false;
+
+	  if (nss_initgroups_dyn == NULL && nss_setgrent != NULL)
+	    {
+	      nss_setgrent (1);
+	      ent->need_endgrent = true;
+	    }
+	  ent->skip_initgroups_dyn = true;
+
 	  return getgrent_next_nss (ent, buffer, buflen, user, group,
 				    start, size, groupsp, limit, errnop);
 	}
@@ -455,7 +505,7 @@
   size_t buflen = sysconf (_SC_GETPW_R_SIZE_MAX);
   char *tmpbuf;
   enum nss_status status;
-  ent_t intern = { TRUE, NULL, {NULL, 0, 0} };
+  ent_t intern = { true, false, false, NULL, {NULL, 0, 0} };
 
   status = internal_setgrent (&intern);
   if (status != NSS_STATUS_SUCCESS)

Modified: trunk/libc/nis/nss_nis/nis-pwd.c
==============================================================================
--- trunk/libc/nis/nss_nis/nis-pwd.c (original)
+++ trunk/libc/nis/nss_nis/nis-pwd.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996-1998,2001,2002,2003,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1998,2001-2003,2006,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@xxxxxxxxxxxxxxxxxxx>, 1996.
 
@@ -116,7 +116,7 @@
       oldkeylen = 0;
     }
 
-  struct response_t *curr = intern.next;
+  struct response_t *curr = intern.start;
 
   while (curr != NULL)
     {

Modified: trunk/libc/nptl/ChangeLog
==============================================================================
--- trunk/libc/nptl/ChangeLog (original)
+++ trunk/libc/nptl/ChangeLog Wed Jun 24 09:26:34 2009
@@ -1,3 +1,18 @@
+2009-06-12  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* Makefile (libpthread-routines): Add pthread_sigqueue.
+	* Versions: Add pthread_sigqueue for GLIBC_2.11.
+	* sysdeps/pthread/bits/sigthread.h: Declare pthread_sigqueue.
+	* sysdeps/unix/sysv/linux/pthread_sigqueue.c: New file.
+
+2009-06-11  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10262]
+	* sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
+	(LOAD_FUTEX_WAIT_ABS): Fix futex parameter in case private futexes
+	cannot be assumed.
+	Patch by Bryan Kadzban <bz-glibc@xxxxxxxxxxxxxxxxxxx>.
+
 2009-05-16  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* libc-cancellation.c: Move __libc_cleanup_routine to...

Modified: trunk/libc/nptl/Makefile
==============================================================================
--- trunk/libc/nptl/Makefile (original)
+++ trunk/libc/nptl/Makefile Wed Jun 24 09:26:34 2009
@@ -88,7 +88,7 @@
 		      pthread_barrierattr_setpshared \
 		      pthread_key_create pthread_key_delete \
 		      pthread_getspecific pthread_setspecific \
-		      pthread_sigmask pthread_kill \
+		      pthread_sigmask pthread_kill pthread_sigqueue \
 		      pthread_cancel pthread_testcancel \
 		      pthread_setcancelstate pthread_setcanceltype \
 		      pthread_once \

Modified: trunk/libc/nptl/Versions
==============================================================================
--- trunk/libc/nptl/Versions (original)
+++ trunk/libc/nptl/Versions Wed Jun 24 09:26:34 2009
@@ -240,6 +240,10 @@
     pthread_mutex_getprioceiling; pthread_mutex_setprioceiling;
   };
 
+  GLIBC_2.11 {
+    pthread_sigqueue;
+  };
+
   GLIBC_PRIVATE {
     __pthread_initialize_minimal;
     __pthread_clock_gettime; __pthread_clock_settime;

Modified: trunk/libc/nptl/sysdeps/pthread/bits/sigthread.h
==============================================================================
--- trunk/libc/nptl/sysdeps/pthread/bits/sigthread.h (original)
+++ trunk/libc/nptl/sysdeps/pthread/bits/sigthread.h Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* Signal handling function for threaded programs.
-   Copyright (C) 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2000, 2002, 2009 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
@@ -35,4 +35,10 @@
 /* Send signal SIGNO to the given thread. */
 extern int pthread_kill (pthread_t __threadid, int __signo) __THROW;
 
+#ifdef __USE_GNU
+/* Queue signal and data to a thread.  */
+extern int pthread_sigqueue (pthread_t __threadid, int __signo,
+			     const union sigval __value) __THROW;
+#endif
+
 #endif	/* bits/sigthread.h */

Modified: trunk/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S
==============================================================================
--- trunk/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S (original)
+++ trunk/libc/nptl/sysdeps/unix/sysv/linux/i386/i486/lowlevellock.S Wed Jun 24 09:26:34 2009
@@ -60,7 +60,7 @@
 # define LOAD_FUTEX_WAIT_ABS(reg) \
 	xorl	$FUTEX_PRIVATE_FLAG, reg ; \
 	andl	%gs:PRIVATE_FUTEX, reg ; \
-	orl	$FUTEX_WAIT | FUTEX_CLOCK_REALTIME, reg
+	orl	$FUTEX_WAIT_BITSET | FUTEX_CLOCK_REALTIME, reg
 # define LOAD_FUTEX_WAKE(reg) \
 	xorl	$FUTEX_PRIVATE_FLAG, reg ; \
 	andl	%gs:PRIVATE_FUTEX, reg ; \

Modified: trunk/libc/nscd/Makefile
==============================================================================
--- trunk/libc/nscd/Makefile (original)
+++ trunk/libc/nscd/Makefile Wed Jun 24 09:26:34 2009
@@ -1,5 +1,4 @@
-# Copyright (C) 1998,2000,2002,2003,2004,2005,2006,2007,2008
-#	Free Software Foundation, Inc.
+# Copyright (C) 1998,2000,2002-2009 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
@@ -137,13 +136,7 @@
 relro-LDFLAGS += -Wl,-z,now
 
 $(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
-	$(LINK.o) -pie -Wl,-O1 $(nscd-cflags) \
-	  $(sysdep-LDFLAGS) $(config-LDFLAGS) $(relro-LDFLAGS) \
-	  $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
-	  $(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
-	  $(LDFLAGS) $(LDFLAGS-$(@F)) \
-	  -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-	  -o $@ $^ $(LDLIBS-nscd) $(common-objpfx)libc_nonshared.a
+	$(+link-pie)
 endif
 
 # This makes sure -DNOT_IN_libc is passed for all these modules.

Modified: trunk/libc/nss/getent.c
==============================================================================
--- trunk/libc/nss/getent.c (original)
+++ trunk/libc/nss/getent.c Wed Jun 24 09:26:34 2009
@@ -24,6 +24,7 @@
 #include <ctype.h>
 #include <error.h>
 #include <grp.h>
+#include <gshadow.h>
 #include <libintl.h>
 #include <locale.h>
 #include <mcheck.h>
@@ -232,6 +233,70 @@
 	result = 2;
       else
 	print_group (grp);
+    }
+
+  return result;
+}
+
+/* This is for gshadow */
+static void
+print_gshadow (struct sgrp *sg)
+{
+  unsigned int i = 0;
+
+  printf ("%s:%s:",
+	  sg->sg_namp ? sg->sg_namp : "",
+	  sg->sg_passwd ? sg->sg_passwd : "");
+
+  while (sg->sg_adm[i] != NULL)
+    {
+      fputs_unlocked (sg->sg_adm[i], stdout);
+      ++i;
+      if (sg->sg_adm[i] != NULL)
+	putchar_unlocked (',');
+    }
+
+  putchar_unlocked (':');
+
+  i = 0;
+  while (sg->sg_mem[i] != NULL)
+    {
+      fputs_unlocked (sg->sg_mem[i], stdout);
+      ++i;
+      if (sg->sg_mem[i] != NULL)
+	putchar_unlocked (',');
+    }
+
+  putchar_unlocked ('\n');
+}
+
+static int
+gshadow_keys (int number, char *key[])
+{
+  int result = 0;
+  int i;
+
+  if (number == 0)
+    {
+      struct sgrp *sg;
+
+      setsgent ();
+      while ((sg = getsgent ()) != NULL)
+	print_gshadow (sg);
+      endsgent ();
+      return result;
+    }
+
+  for (i = 0; i < number; ++i)
+    {
+      struct sgrp *sg;
+
+      sg = getsgnam (key[i]);
+
+      if (sg == NULL)
+	result = 2;
+      else
+	print_gshadow (sg);
     }
 
   return result;
@@ -778,6 +843,7 @@
 DA(aliases)
 DN(ethers)
 D(group)
+D(gshadow)
 DN(hosts)
 DN(netgroup)
 DN(networks)

Modified: trunk/libc/po/bg.po
==============================================================================
--- trunk/libc/po/bg.po (original)
+++ trunk/libc/po/bg.po Wed Jun 24 09:26:34 2009
@@ -6,9 +6,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: libc 2.9.90\n"
+"Project-Id-Version: libc 2.10.1\n"
 "POT-Creation-Date: 2009-02-06 12:40-0800\n"
-"PO-Revision-Date: 2009-02-28 12:36+0200\n"
+"PO-Revision-Date: 2009-06-23 01:27+0300\n"
 "Last-Translator: Roumen Petrov <transl@xxxxxxxxxxxxxxxxx>\n"
 "Language-Team: Bulgarian <dict@xxxxxxxxxx>\n"
 "MIME-Version: 1.0\n"
@@ -651,7 +651,7 @@
 
 #: elf/dl-reloc.c:211
 msgid "cannot make segment writable for relocation"
-msgstr "дялът не може да се маркира като записваем за \"непреместваем код\""
+msgstr "дялът не може да се маркира като записваем за \"преместваем код\""
 
 #: elf/dl-reloc.c:277
 #, c-format
@@ -661,7 +661,7 @@
 #: elf/dl-reloc.c:288
 #, c-format
 msgid "%s: out of memory to store relocation results for %s\n"
-msgstr "%s: недостиг на памет за съхраняване на резултата за \"непреместваем код\" на %s\n"
+msgstr "%s: недостиг на памет за съхраняване на резултата за \"преместваем код\" на %s\n"
 
 #: elf/dl-reloc.c:304
 msgid "cannot restore segment prot after reloc"
@@ -922,8 +922,8 @@
 "Употреба: ldd [ОПЦИЯ]... ФАЙЛ...\n"
 "      --help              Извеждане на тази помощ и изход\n"
 "      --version           Извеждане на информация за версията и изход\n"
-"  -d, --data-relocs       Обработване на непреместваеми данни\n"
-"  -r, --function-relocs   Обработване на непреместваеми данни и функции\n"
+"  -d, --data-relocs       Обработване на преместваеми данни\n"
+"  -r, --function-relocs   Обработване на преместваеми данни и функции\n"
 "  -u, --unused            Извеждане на неизползваните директни зависимости\n"
 "  -v, --verbose           Извеждане на подробна информация\n"
 
@@ -1591,7 +1591,7 @@
 #: locale/programs/charmap.c:888
 #, c-format
 msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
-msgstr "боя на байтовете, в последователност от байтове за начало и край на диапазон, не е същия: %d vs %d"
+msgstr "боя на байтовете, в последователност от байтове за начало и край на диапазон, не е същия: %d с/у %d"
 
 #: locale/programs/charmap.c:993 locale/programs/ld-collate.c:3044
 #: locale/programs/repertoire.c:419
@@ -4791,7 +4791,7 @@
 
 #: sunrpc/rpc_main.c:352
 msgid "cannot find any C preprocessor (cpp)\n"
-msgstr "не е намерен някакъв Си препроцесор (cpp)\n"
+msgstr "не е намерен никакъв Си препроцесор (cpp)\n"
 
 #: sunrpc/rpc_main.c:421
 #, c-format

Modified: trunk/libc/po/id.po
==============================================================================
--- trunk/libc/po/id.po (original)
+++ trunk/libc/po/id.po Wed Jun 24 09:26:34 2009
@@ -5,9 +5,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: libc 2.9.90\n"
+"Project-Id-Version: libc 2.10.1\n"
 "POT-Creation-Date: 2009-02-06 12:40-0800\n"
-"PO-Revision-Date: 2009-03-10 11:30+0700\n"
+"PO-Revision-Date: 2009-06-23 12:30+0700\n"
 "Last-Translator: Arif E. Nugroho <arif_endro@xxxxxxxxx>\n"
 "Language-Team: Indonesian <translation-team-id@xxxxxxxxxxxxxxxxxxxxx>\n"
 "MIME-Version: 1.0\n"
@@ -86,7 +86,7 @@
 
 #: argp/argp-parse.c:766
 msgid "(PROGRAM ERROR) Option should have been recognized!?"
-msgstr "(APLIKASI ERROR) Opsi seharusnya telah dikenal!?"
+msgstr "(APLIKASI ERROR) Pilihan seharusnya telah dikenal!?"
 
 #: assert/assert-perr.c:57
 #, c-format
@@ -2864,7 +2864,7 @@
 "      --usage             Tampilkan sebuah pesan penggunaan singkat\n"
 "   -V,--version           Tampilkan informasi versi dan keluar\n"
 "\n"
-" Opsi berikut hanya berlaku ketika menghasilkan keluaran graphis:\n"
+" Pilihan berikut hanya berlaku ketika menghasilkan keluaran graphis:\n"
 "   -t,--time-based        Buat graphis linear dengan waktu\n"
 "   -T,--total             Juga gambar graphis dari total penggunaan memori\n"
 "      --title=STRING      Gunakan STRING sebagai judul dari grapik\n"
@@ -3987,7 +3987,7 @@
 #: nscd/nscd_conf.c:274
 #, c-format
 msgid "Unknown option: %s %s %s"
-msgstr "Opsi tidak dikenal: %s %s %s"
+msgstr "Pilihan tidak dikenal: %s %s %s"
 
 #: nscd/nscd_conf.c:287
 #, c-format

Modified: trunk/libc/po/sv.po
==============================================================================
--- trunk/libc/po/sv.po (original)
+++ trunk/libc/po/sv.po Wed Jun 24 09:26:34 2009
@@ -1,14 +1,14 @@
-# GNU libc message catalog for swedish
+# GNU libc message catalog for Swedish
 # Copyright © 1996, 1998, 2001, 2002, 2003, 2006, 2008, 2009 Free Software Foundation, Inc.
 # This file is distributed under the same license as the glibc package.
 # Jan Djärv <jan.h.d@xxxxxxxxxx>, 1996, 1998, 2001, 2002, 2003, 2006, 2007, 2008, 2009
-# Revision: 1.60
+# Revision: 1.61
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: libc 2.9.90\n"
 "POT-Creation-Date: 2009-02-06 12:40-0800\n"
-"PO-Revision-Date: 2009-02-28 17:57+0100\n"
+"PO-Revision-Date: 2009-06-14 20:41+0200\n"
 "Last-Translator: Jan Djärv <jan.h.d@xxxxxxxxxx>\n"
 "Language-Team: Swedish <tp-sv@xxxxxxxxxxxxxxx>\n"
 "MIME-Version: 1.0\n"
@@ -295,11 +295,11 @@
 
 #: debug/xtrace.sh:33
 msgid "Try \\`xtrace --help' for more information.\\n"
-msgstr "Försök med \\\"xtrace --help\\\" för mer information\\n"
+msgstr "Försök med \"xtrace --help\" för mer information\\n"
 
 #: debug/xtrace.sh:39
 msgid "xtrace: option \\`$1' requires an argument.\\n"
-msgstr "xtrace: flaggan \\\"$1\\\" behöver ett argument\\n"
+msgstr "xtrace: flaggan \"$1\" behöver ett argument\\n"
 
 #: debug/xtrace.sh:46
 msgid ""
@@ -328,7 +328,7 @@
 
 #: debug/xtrace.sh:127
 msgid "xtrace: unrecognized option \\`$1'\\n"
-msgstr "xtrace: okänd flagga \\\"$1\\\"\\n"
+msgstr "xtrace: okänd flagga \"$1\"\\n"
 
 #: debug/xtrace.sh:140
 msgid "No program name given\\n"
@@ -337,12 +337,12 @@
 #: debug/xtrace.sh:148
 #, sh-format
 msgid "executable \\`$program' not found\\n"
-msgstr "program \\\"$program\\\" hittades inte\\n"
+msgstr "program \"$program\" hittades inte\\n"
 
 #: debug/xtrace.sh:152
 #, sh-format
 msgid "\\`$program' is no executable\\n"
-msgstr "\\\"$program\\\" är inte en körbar binär\\n"
+msgstr "\"$program\" är inte en körbar binär\\n"
 
 #: dlfcn/dlinfo.c:64
 msgid "RTLD_SELF used in code not dynamically loaded"
@@ -932,7 +932,7 @@
 
 #: elf/ldd.bash.in:82
 msgid "ldd: option \\`$1' is ambiguous"
-msgstr "ldd: flaggan \\\"$1\\\" är tvetydig"
+msgstr "ldd: flaggan \"$1\" är tvetydig"
 
 #: elf/ldd.bash.in:89
 msgid "unrecognized option"
@@ -940,7 +940,7 @@
 
 #: elf/ldd.bash.in:90 elf/ldd.bash.in:128
 msgid "Try \\`ldd --help' for more information."
-msgstr "Försök med \\\"ldd --help\\\" för mer information"
+msgstr "Försök med \"ldd --help\" för mer information"
 
 #: elf/ldd.bash.in:127
 msgid "missing file arguments"
@@ -1051,7 +1051,7 @@
 #: elf/sln.c:179
 #, c-format
 msgid "%s: destination must not be a directory\n"
-msgstr "%s: målet måste vara en katalog\n"
+msgstr "%s: målet måste inte vara en katalog\n"
 
 #: elf/sln.c:185
 #, c-format
@@ -2824,11 +2824,11 @@
 
 #: malloc/memusage.sh:27
 msgid "Try \\`memusage --help' for more information."
-msgstr "Försök med \\\"memusage --help\\\" för mer information"
+msgstr "Försök med \"memusage --help\" för mer information"
 
 #: malloc/memusage.sh:33
 msgid "memusage: option \\`$1' requires an argument"
-msgstr "memusage: flaggan \\\"$1\\\" behöver ett argument"
+msgstr "memusage: flaggan \"$1\" behöver ett argument"
 
 #: malloc/memusage.sh:39
 msgid ""
@@ -2897,11 +2897,11 @@
 
 #: malloc/memusage.sh:193
 msgid "memusage: option \\`${1##*=}' is ambiguous"
-msgstr "memusage: flaggan \\\"${1##*=}\\\" är tvetydig"
+msgstr "memusage: flaggan \"${1##*=}\" är tvetydig"
 
 #: malloc/memusage.sh:202
 msgid "memusage: unrecognized option \\`$1'"
-msgstr "memusage: okänd flagga \\\"$1\\\""
+msgstr "memusage: okänd flagga \"$1\""
 
 #: malloc/memusage.sh:215
 msgid "No program name given"
@@ -3463,7 +3463,7 @@
 #: nis/nss_nisplus/nisplus-publickey.c:220
 #, c-format
 msgid "netname2user: missing group id list in `%s'"
-msgstr "netname2user: gruppid-lista saknas i \"%s\"."
+msgstr "netname2user: gruppid-lista saknas i \"%s\""
 
 #: nis/nss_nisplus/nisplus-publickey.c:302
 #: nis/nss_nisplus/nisplus-publickey.c:308
@@ -4371,10 +4371,10 @@
 "\n"
 msgstr ""
 "Användning: getconf [-v SPEC] VAR\n"
-"  eller:    getconf [-v SPEC] PATH_VAR PATH\n"
+"  eller:    getconf [-v SPEC] VÄG_VAR VÄG\n"
 "\n"
-"Hämta konfigureringsvärdet för variabeln VAR, eller för variabeln PATH_VAR\n"
-"för sökväg PATH.  Om SPEC är given hämta värden för kompileringsspecifikationen\n"
+"Hämta konfigureringsvärdet för variabeln VAR, eller för variabeln VÄG_VAR\n"
+"för sökväg VÄG.  Om SPEC är given hämta värden för kompileringsspecifikationen\n"
 "SPEC.\n"
 "\n"
 
@@ -4431,13 +4431,13 @@
 #: posix/getopt.c:800 posix/getopt.c:803
 #, c-format
 msgid "%s: invalid option -- '%c'\n"
-msgstr "%s: ogiltig flagga -- %c\n"
+msgstr "%s: ogiltig flagga -- \"%c\"\n"
 
 #: posix/getopt.c:853 posix/getopt.c:870 posix/getopt.c:1073
 #: posix/getopt.c:1091
 #, c-format
 msgid "%s: option requires an argument -- '%c'\n"
-msgstr "%s: flaggan behöver ett argument -- %c\n"
+msgstr "%s: flaggan behöver ett argument -- \"%c\"\n"
 
 #: posix/getopt.c:923 posix/getopt.c:939
 #, c-format
@@ -4611,7 +4611,7 @@
 
 #: sunrpc/auth_unix.c:350
 msgid "auth_unix.c: Fatal marshalling problem"
-msgstr "auth_unix.c - Fatalt kodningsproblem"
+msgstr "auth_unix.c: Fatalt kodningsproblem"
 
 #: sunrpc/clnt_perr.c:105 sunrpc/clnt_perr.c:121
 #, c-format
@@ -4907,7 +4907,7 @@
 #: sunrpc/rpc_main.c:1473
 #, c-format
 msgid "-C\t\tANSI C mode\n"
-msgstr "-C\t\tANSI-läge\n"
+msgstr "-C\t\tANSI C-läge\n"
 
 #: sunrpc/rpc_main.c:1474
 #, c-format
@@ -4917,7 +4917,7 @@
 #: sunrpc/rpc_main.c:1475
 #, c-format
 msgid "-h\t\tgenerate header file\n"
-msgstr "-h\t\tgenerera huvudfiler\n"
+msgstr "-h\t\tgenerera huvudfil\n"
 
 #: sunrpc/rpc_main.c:1476
 #, c-format

Modified: trunk/libc/posix/Makefile
==============================================================================
--- trunk/libc/posix/Makefile (original)
+++ trunk/libc/posix/Makefile Wed Jun 24 09:26:34 2009
@@ -45,7 +45,7 @@
 	wait waitpid wait3 wait4 waitid					      \
 	alarm sleep pause nanosleep					      \
 	fork vfork _exit						      \
-	execve fexecve execv execle execl execvp execlp			      \
+	execve fexecve execv execle execl execvp execlp execvpe		      \
 	getpid getppid							      \
 	getuid geteuid getgid getegid getgroups setuid setgid group_member    \
 	getpgid setpgid getpgrp bsd-getpgrp setpgrp getsid setsid	      \

Modified: trunk/libc/posix/Versions
==============================================================================
--- trunk/libc/posix/Versions (original)
+++ trunk/libc/posix/Versions Wed Jun 24 09:26:34 2009
@@ -131,6 +131,9 @@
   GLIBC_2.10 {
     __posix_getopt;
   }
+  GLIBC_2.11 {
+    execvpe;
+  }
   GLIBC_PRIVATE {
     __libc_fork; __libc_pwrite;
   }

Modified: trunk/libc/posix/execvp.c
==============================================================================
--- trunk/libc/posix/execvp.c (original)
+++ trunk/libc/posix/execvp.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92, 1995-99, 2002, 2004, 2005, 2007
+/* Copyright (C) 1991,92, 1995-99, 2002, 2004, 2005, 2007, 2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -17,31 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <alloca.h>
 #include <unistd.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <paths.h>
-
-
-/* The file is accessible but it is not an executable file.  Invoke
-   the shell to interpret it as a script.  */
-static void
-internal_function
-scripts_argv (const char *file, char *const argv[], int argc, char **new_argv)
-{
-  /* Construct an argument list for the shell.  */
-  new_argv[0] = (char *) _PATH_BSHELL;
-  new_argv[1] = (char *) file;
-  while (argc > 1)
-    {
-      new_argv[argc] = argv[argc - 1];
-      --argc;
-    }
-}
 
 
 /* Execute FILE, searching in the `PATH' environment variable if it contains
@@ -51,170 +27,6 @@
      const char *file;
      char *const argv[];
 {
-  if (*file == '\0')
-    {
-      /* We check the simple case first. */
-      __set_errno (ENOENT);
-      return -1;
-    }
-
-  if (strchr (file, '/') != NULL)
-    {
-      /* Don't search when it contains a slash.  */
-      __execve (file, argv, __environ);
-
-      if (errno == ENOEXEC)
-	{
-	  /* Count the arguments.  */
-	  int argc = 0;
-	  while (argv[argc++])
-	    ;
-	  size_t len = (argc + 1) * sizeof (char *);
-	  char **script_argv;
-	  void *ptr = NULL;
-	  if (__libc_use_alloca (len))
-	    script_argv = alloca (len);
-	  else
-	    script_argv = ptr = malloc (len);
-
-	  if (script_argv != NULL)
-	    {
-	      scripts_argv (file, argv, argc, script_argv);
-	      __execve (script_argv[0], script_argv, __environ);
-
-	      free (ptr);
-	    }
-	}
-    }
-  else
-    {
-      size_t pathlen;
-      size_t alloclen = 0;
-      char *path = getenv ("PATH");
-      if (path == NULL)
-	{
-	  pathlen = confstr (_CS_PATH, (char *) NULL, 0);
-	  alloclen = pathlen + 1;
-	}
-      else
-	pathlen = strlen (path);
-
-      size_t len = strlen (file) + 1;
-      alloclen += pathlen + len + 1;
-
-      char *name;
-      char *path_malloc = NULL;
-      if (__libc_use_alloca (alloclen))
-	name = alloca (alloclen);
-      else
-	{
-	  path_malloc = name = malloc (alloclen);
-	  if (name == NULL)
-	    return -1;
-	}
-
-      if (path == NULL)
-	{
-	  /* There is no `PATH' in the environment.
-	     The default search path is the current directory
-	     followed by the path `confstr' returns for `_CS_PATH'.  */
-	  path = name + pathlen + len + 1;
-	  path[0] = ':';
-	  (void) confstr (_CS_PATH, path + 1, pathlen);
-	}
-
-      /* Copy the file name at the top.  */
-      name = (char *) memcpy (name + pathlen + 1, file, len);
-      /* And add the slash.  */
-      *--name = '/';
-
-      char **script_argv = NULL;
-      void *script_argv_malloc = NULL;
-      bool got_eacces = false;
-      char *p = path;
-      do
-	{
-	  char *startp;
-
-	  path = p;
-	  p = __strchrnul (path, ':');
-
-	  if (p == path)
-	    /* Two adjacent colons, or a colon at the beginning or the end
-	       of `PATH' means to search the current directory.  */
-	    startp = name + 1;
-	  else
-	    startp = (char *) memcpy (name - (p - path), path, p - path);
-
-	  /* Try to execute this name.  If it works, execve will not return. */
-	  __execve (startp, argv, __environ);
-
-	  if (errno == ENOEXEC)
-	    {
-	      if (script_argv == NULL)
-		{
-		  /* Count the arguments.  */
-		  int argc = 0;
-		  while (argv[argc++])
-		    ;
-		  size_t arglen = (argc + 1) * sizeof (char *);
-		  if (__libc_use_alloca (alloclen + arglen))
-		    script_argv = alloca (arglen);
-		  else
-		    script_argv = script_argv_malloc = malloc (arglen);
-		  if (script_argv == NULL)
-		    {
-		      /* A possible EACCES error is not as important as
-			 the ENOMEM.  */
-		      got_eacces = false;
-		      break;
-		    }
-		  scripts_argv (startp, argv, argc, script_argv);
-		}
-
-	      __execve (script_argv[0], script_argv, __environ);
-	    }
-
-	  switch (errno)
-	    {
-	    case EACCES:
-	      /* Record the we got a `Permission denied' error.  If we end
-		 up finding no executable we can use, we want to diagnose
-		 that we did find one but were denied access.  */
-	      got_eacces = true;
-	    case ENOENT:
-	    case ESTALE:
-	    case ENOTDIR:
-	      /* Those errors indicate the file is missing or not executable
-		 by us, in which case we want to just try the next path
-		 directory.  */
-	    case ENODEV:
-	    case ETIMEDOUT:
-	      /* Some strange filesystems like AFS return even
-		 stranger error numbers.  They cannot reasonably mean
-		 anything else so ignore those, too.  */
-	      break;
-
-	    default:
-	      /* Some other error means we found an executable file, but
-		 something went wrong executing it; return the error to our
-		 caller.  */
-	      return -1;
-	    }
-	}
-      while (*p++ != '\0');
-
-      /* We tried every element and none of them worked.  */
-      if (got_eacces)
-	/* At least one failure was due to permissions, so report that
-	   error.  */
-	__set_errno (EACCES);
-
-      free (script_argv_malloc);
-      free (path_malloc);
-    }
-
-  /* Return the error from the last attempt (probably ENOENT).  */
-  return -1;
+  return __execvpe (file, argv, __environ);
 }
 libc_hidden_def (execvp)

Modified: trunk/libc/posix/tst-cpucount.c
==============================================================================
--- trunk/libc/posix/tst-cpucount.c (original)
+++ trunk/libc/posix/tst-cpucount.c Wed Jun 24 09:26:34 2009
@@ -1,5 +1,6 @@
 #include <sched.h>
 #include <stdio.h>
+#include <sys/param.h>
 
 static int
 do_test (void)
@@ -8,7 +9,7 @@
 
   CPU_ZERO (&c);
 
-  for (int cnt = 0; cnt < 130; ++cnt)
+  for (int cnt = 0; cnt < MIN (CPU_SETSIZE, 130); ++cnt)
     {
       int n = CPU_COUNT (&c);
       if (n != cnt)

Modified: trunk/libc/posix/unistd.h
==============================================================================
--- trunk/libc/posix/unistd.h (original)
+++ trunk/libc/posix/unistd.h Wed Jun 24 09:26:34 2009
@@ -551,6 +551,14 @@
 extern int execlp (__const char *__file, __const char *__arg, ...)
      __THROW __nonnull ((1));
 
+#ifdef __USE_GNU
+/* Execute FILE, searching in the `PATH' environment variable if it contains
+   no slashes, with arguments ARGV and environment from `environ'.  */
+extern int execvpe (__const char *__file, char *__const __argv[],
+		    char *__const __envp[])
+     __THROW __nonnull ((1));
+#endif
+
 
 #if defined __USE_MISC || defined __USE_XOPEN
 /* Add INC to priority of the current process.  */

Modified: trunk/libc/resolv/res_send.c
==============================================================================
--- trunk/libc/resolv/res_send.c (original)
+++ trunk/libc/resolv/res_send.c Wed Jun 24 09:26:34 2009
@@ -1008,7 +1008,7 @@
 		seconds /= statp->nscount;
 	if (seconds <= 0)
 		seconds = 1;
-	bool single_request = ((statp->options) & RES_SNGLKUP) != 0;// XXX
+	bool single_request = (statp->options & RES_SNGLKUP) != 0;// XXX
 	int save_gotsomewhere = *gotsomewhere;
  retry:
 	evNowTime(&now);
@@ -1059,6 +1059,7 @@
 		       have received the first answer.  */
 		    if (!single_request)
 		      {
+			statp->options |= RES_SNGLKUP;
 			single_request = true;
 			*gotsomewhere = save_gotsomewhere;
 			goto retry;

Modified: trunk/libc/stdlib/Versions
==============================================================================
--- trunk/libc/stdlib/Versions (original)
+++ trunk/libc/stdlib/Versions Wed Jun 24 09:26:34 2009
@@ -104,5 +104,7 @@
     # functions which have an additional interface since they are
     # are cancelable.
     __libc_system;
+    # Variable which needs a dynamic symbol table entry.
+    __abort_msg;
   }
 }

Modified: trunk/libc/stdlib/abort.c
==============================================================================
--- trunk/libc/stdlib/abort.c (original)
+++ trunk/libc/stdlib/abort.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,93,95,96,97,98,2001,02 Free Software Foundation, Inc.
+/* Copyright (C) 1991,93,1995-1998,2001,02,2009 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
@@ -35,6 +35,10 @@
 # include <libio/libioP.h>
 # define fflush(s) _IO_flush_all_lockp (0)
 #endif
+
+/* Exported variable to locate abort message in core files etc.  */
+char *__abort_msg __attribute__ ((nocommon));
+libc_hidden_def (__abort_msg)
 
 /* We must avoid to run in circles.  Therefore we remember how far we
    already got.  */

Modified: trunk/libc/string/strncmp.c
==============================================================================
--- trunk/libc/string/strncmp.c (original)
+++ trunk/libc/string/strncmp.c Wed Jun 24 09:26:34 2009
@@ -21,15 +21,16 @@
 
 #undef strncmp
 
+#ifndef STRNCMP
+#define STRNCMP strncmp
+#endif
+
 /* Compare no more than N characters of S1 and S2,
    returning less than, equal to or greater than zero
    if S1 is lexicographically less than, equal to or
    greater than S2.  */
 int
-strncmp (s1, s2, n)
-     const char *s1;
-     const char *s2;
-     size_t n;
+STRNCMP (const char *s1, const char *s2, size_t n)
 {
   unsigned reg_char c1 = '\0';
   unsigned reg_char c2 = '\0';
@@ -70,4 +71,5 @@
 
   return c1 - c2;
 }
-libc_hidden_builtin_def (strncmp)
+
+libc_hidden_builtin_def (STRNCMP)

Modified: trunk/libc/string/test-memchr.c
==============================================================================
--- trunk/libc/string/test-memchr.c (original)
+++ trunk/libc/string/test-memchr.c Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* Test and measure memchr functions.
-   Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Jakub Jelinek <jakub@xxxxxxxxxx>, 1999.
 
@@ -144,7 +144,12 @@
 	}
 
       if (pos < len)
-	result = (char *) (p + pos + align);
+	{
+	  size_t r = random ();
+	  if ((r & 31) == 0)
+	    len = ~(uintptr_t) (p + align) - ((r >> 5) & 31);
+	  result = (char *) (p + pos + align);
+	}
       else
 	result = NULL;
 

Modified: trunk/libc/sunrpc/rpcinfo.c
==============================================================================
--- trunk/libc/sunrpc/rpcinfo.c (original)
+++ trunk/libc/sunrpc/rpcinfo.c Wed Jun 24 09:26:34 2009
@@ -687,7 +687,8 @@
   fputs (_("       rpcinfo -p [ host ]\n"), stream);
   fputs (_("       rpcinfo -b prognum versnum\n"), stream);
   fputs (_("       rpcinfo -d prognum versnum\n"), stream);
-  fprintf (stream, _("\n\
+  fputc ('\n', stream);
+  fprintf (stream, _("\
 For bug reporting instructions, please see:\n\
 %s.\n"), REPORT_BUGS_TO);
 }

Modified: trunk/libc/sysdeps/generic/pty-private.h
==============================================================================
--- trunk/libc/sysdeps/generic/pty-private.h (original)
+++ trunk/libc/sysdeps/generic/pty-private.h Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* Internal defenitions and declarations for pseudo terminal functions.
-   Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+   Copyright (C) 1998, 1999, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Zack Weinberg <zack@xxxxxxxxxxxxxxxxxxxxxx>, 1998.
 
@@ -39,7 +39,8 @@
   FAIL_EBADF = 1,
   FAIL_EINVAL,
   FAIL_EACCES,
-  FAIL_EXEC
+  FAIL_EXEC,
+  FAIL_ENOMEM
 };
 
 #endif /* pty-private.h  */

Modified: trunk/libc/sysdeps/i386/dl-irel.h
==============================================================================
--- trunk/libc/sysdeps/i386/dl-irel.h (original)
+++ trunk/libc/sysdeps/i386/dl-irel.h Wed Jun 24 09:26:34 2009
@@ -21,6 +21,7 @@
 #ifndef _DL_IREL_H
 #define _DL_IREL_H
 
+#include <stdio.h>
 #include <unistd.h>
 
 #define ELF_MACHINE_IREL	1
@@ -34,11 +35,11 @@
 
   if (__builtin_expect (r_type == R_386_IRELATIVE, 1))
     {
-      Elf64_Addr value = ((Elf32_Addr (*) (void)) (*reloc_addr)) ();
+      Elf32_Addr value = ((Elf32_Addr (*) (void)) (*reloc_addr)) ();
       *reloc_addr = value;
     }
   else
-    _exit (-1);
+    __libc_fatal ("unexpected reloc type in static binary");
 }
 
 #endif /* dl-irel.h */

Modified: trunk/libc/sysdeps/i386/dl-machine.h
==============================================================================
--- trunk/libc/sysdeps/i386/dl-machine.h (original)
+++ trunk/libc/sysdeps/i386/dl-machine.h Wed Jun 24 09:26:34 2009
@@ -345,9 +345,9 @@
       Elf32_Addr value = sym_map == NULL ? 0 : sym_map->l_addr + sym->st_value;
 
       if (sym != NULL
-	  && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1)
 	  && __builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC,
-			       0))
+			       0)
+	  && __builtin_expect (sym->st_shndx != SHN_UNDEF, 1))
 	value = ((Elf32_Addr (*) (void)) value) ();
 
       switch (r_type)

Modified: trunk/libc/sysdeps/posix/libc_fatal.c
==============================================================================
--- trunk/libc/sysdeps/posix/libc_fatal.c (original)
+++ trunk/libc/sysdeps/posix/libc_fatal.c Wed Jun 24 09:26:34 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993,1994,1995,1997,2000,2004,2005
+/* Copyright (C) 1993-1995,1997,2000,2004,2005,2009
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -17,6 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#include <atomic.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <paths.h>
@@ -123,6 +124,20 @@
 
       if (TEMP_FAILURE_RETRY (__writev (fd, iov, nlist)) == total)
 	written = true;
+
+      char *buf = do_abort ? malloc (total + 1) : NULL;
+      if (buf != NULL)
+	{
+	  char *wp = buf;
+	  for (int cnt = 0; cnt < nlist; ++cnt)
+	    wp = mempcpy (wp, iov[cnt].iov_base, iov[cnt].iov_len);
+	  *wp = '\0';
+
+	  /* We have to free the old buffer since the application might
+	     catch the SIGABRT signal.  */
+	  char *old = atomic_exchange_acq (&__abort_msg, buf);
+	  free (old);
+	}
     }
 
   va_end (ap);

Modified: trunk/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/power6/memcpy.S Wed Jun 24 09:26:34 2009
@@ -1,5 +1,5 @@
 /* Optimized memcpy implementation for PowerPC32 on POWER6.
-   Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2006, 2009 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
@@ -25,9 +25,9 @@
    Returns 'dst'.
 
    Memcpy handles short copies (< 32-bytes) using a binary move blocks 
-   (no loops) of lwz/stw.  The tail (remaining 1-3) bytes is handled 
-   with the appropriate combination of byte and halfword load/stores. 
-   There is minimal effort to optimize the alignment of short moves.  
+   (no loops) of lwz/stw.  The tail (remaining 1-3) bytes is handled
+   with the appropriate combination of byte and halfword load/stores.
+   There is minimal effort to optimize the alignment of short moves.
 
    Longer moves (>= 32-bytes) justify the effort to get at least the
    destination word (4-byte) aligned.  Further optimization is
@@ -80,11 +80,11 @@
     bne-   cr6,L(wdu)   /* If source is not word aligned. .L6 */
     clrlwi 11,31,30  /* calculate the number of tail bytes */
     b      L(word_aligned)
-  /* Copy words from source to destination, assuming the destination is 
+  /* Copy words from source to destination, assuming the destination is
      aligned on a word boundary.
 
      At this point we know there are at least 29 bytes left (32-3) to copy.
-     The next step is to determine if the source is also word aligned. 
+     The next step is to determine if the source is also word aligned.
      If not branch to the unaligned move code at .L6. which uses
      a load, shift, store strategy.
 
@@ -100,9 +100,9 @@
 
   /* Move words where destination and source are word aligned.
      Use an unrolled loop to copy 4 words (16-bytes) per iteration.
-     If the the copy is not an exact multiple of 16 bytes, 1-3 
+     If the the copy is not an exact multiple of 16 bytes, 1-3
      words are copied as needed to set up the main loop.  After
-     the main loop exits there may be a tail of 1-3 bytes. These bytes are 
+     the main loop exits there may be a tail of 1-3 bytes. These bytes are
      copied a halfword/byte at a time as needed to preserve alignment.  */
 L(word_aligned):
     mtcrf 0x01,9
@@ -121,7 +121,7 @@
     addi  10,3,8
     bf    31,4f
     lwz   0,8(12)
-    stw   0,8(3)    
+    stw   0,8(3)
     blt   cr1,3f
     addi  11,12,12
     addi  10,3,12
@@ -135,7 +135,7 @@
     addi  11,12,4
     stw   6,0(3)
     addi  10,3,4
-    
+
     .align  4
 4:
     lwz   6,0(11)
@@ -149,14 +149,14 @@
     addi  11,11,16
     addi  10,10,16
     bdnz  4b
-3:  
+3:
     clrrwi 0,31,2
     mtcrf 0x01,31
     beq   cr6,0f
 .L9:
     add   3,3,0
     add   12,12,0
-    
+
 /*  At this point we have a tail of 0-3 bytes and we know that the
     destination is word aligned.  */
 2:  bf    30,1f
@@ -175,7 +175,7 @@
     addi 1,1,32
     blr
 
-/* Copy up to 31 bytes.  This divided into two cases 0-8 bytes and 9-31 
+/* Copy up to 31 bytes.  This divided into two cases 0-8 bytes and 9-31
    bytes.  Each case is handled without loops, using binary (1,2,4,8)
    tests.
 
@@ -208,7 +208,7 @@
     andi. 0,8,3
     beq   cr6,L(wus_8)	/* Handle moves of 8 bytes.  */
 /* At least 9 bytes left.  Get the source word aligned.  */
-    cmpldi	cr1,5,16
+    cmplwi	cr1,5,16
     mr    12,4
     ble   cr6,L(wus_4)  /* Handle moves of 0-8 bytes.  */
     mr    11,3
@@ -241,7 +241,7 @@

[... 2166 lines stripped ...]