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

[commits] r10032 - in /trunk: libc/ libc/elf/ libc/hurd/ libc/hurd/hurd/ libc/include/ libc/io/ libc/libio/ libc/malloc/ libc/manual/ ...



Author: joseph
Date: Sat Mar 13 10:20:12 2010
New Revision: 10032

Log:
Merge changes between r9801 and r10031 from /fsf/trunk.

Added:
    trunk/libc/sysdeps/i386/i686/multiarch/memcmp-sse4.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/memcmp-sse4.S
    trunk/libc/sysdeps/i386/i686/multiarch/memcmp-ssse3.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/memcmp-ssse3.S
    trunk/libc/sysdeps/i386/i686/multiarch/memcmp.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/memcmp.S
    trunk/libc/sysdeps/i386/i686/multiarch/strcmp-sse4.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/strcmp-sse4.S
    trunk/libc/sysdeps/i386/i686/multiarch/strcmp-ssse3.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/strcmp-ssse3.S
    trunk/libc/sysdeps/i386/i686/multiarch/strcmp.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/strcmp.S
    trunk/libc/sysdeps/i386/i686/multiarch/strncmp-c.c
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/strncmp-c.c
    trunk/libc/sysdeps/i386/i686/multiarch/strncmp-sse4.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/strncmp-sse4.S
    trunk/libc/sysdeps/i386/i686/multiarch/strncmp-ssse3.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/strncmp-ssse3.S
    trunk/libc/sysdeps/i386/i686/multiarch/strncmp.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/i386/i686/multiarch/strncmp.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/memcpy.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/memcpy.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/memcpy.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/memcpy.S
    trunk/libc/sysdeps/sparc/elf/
      - copied from r10031, fsf/trunk/libc/sysdeps/sparc/elf/
    trunk/libc/sysdeps/sparc/sparc32/dl-irel.h
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/sparc/sparc32/dl-irel.h
    trunk/libc/sysdeps/sparc/sparc32/dl-plt.h
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/sparc/sparc32/dl-plt.h
    trunk/libc/sysdeps/sparc/sparc32/sparcv9/multiarch/
      - copied from r10031, fsf/trunk/libc/sysdeps/sparc/sparc32/sparcv9/multiarch/
    trunk/libc/sysdeps/sparc/sparc64/align-cpy.S
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/sparc/sparc64/align-cpy.S
    trunk/libc/sysdeps/sparc/sparc64/dl-irel.h
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/sparc/sparc64/dl-irel.h
    trunk/libc/sysdeps/sparc/sparc64/dl-plt.h
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/sparc/sparc64/dl-plt.h
    trunk/libc/sysdeps/sparc/sparc64/memcopy.h
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/sparc/sparc64/memcopy.h
    trunk/libc/sysdeps/sparc/sparc64/multiarch/
      - copied from r10031, fsf/trunk/libc/sysdeps/sparc/sparc64/multiarch/
    trunk/libc/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c
      - copied unchanged from r10031, fsf/trunk/libc/sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c
    trunk/ports/sysdeps/m68k/dl-tls.h
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/m68k/dl-tls.h
    trunk/ports/sysdeps/m68k/libc-tls.c
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/m68k/libc-tls.c
    trunk/ports/sysdeps/m68k/nptl/
      - copied from r10031, fsf/trunk/ports/sysdeps/m68k/nptl/
    trunk/ports/sysdeps/m68k/tls-macros.h
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/m68k/tls-macros.h
    trunk/ports/sysdeps/unix/sysv/linux/m68k/bits/m68k-vdso.h
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/unix/sysv/linux/m68k/bits/m68k-vdso.h
    trunk/ports/sysdeps/unix/sysv/linux/m68k/coldfire/
      - copied from r10031, fsf/trunk/ports/sysdeps/unix/sysv/linux/m68k/coldfire/
    trunk/ports/sysdeps/unix/sysv/linux/m68k/init-first.c
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/unix/sysv/linux/m68k/init-first.c
    trunk/ports/sysdeps/unix/sysv/linux/m68k/libc-m68k-vdso.c
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/unix/sysv/linux/m68k/libc-m68k-vdso.c
    trunk/ports/sysdeps/unix/sysv/linux/m68k/m680x0/m68k-helpers.S
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/unix/sysv/linux/m68k/m680x0/m68k-helpers.S
    trunk/ports/sysdeps/unix/sysv/linux/m68k/m68k-vdso.c
      - copied unchanged from r10031, fsf/trunk/ports/sysdeps/unix/sysv/linux/m68k/m68k-vdso.c
    trunk/ports/sysdeps/unix/sysv/linux/m68k/nptl/
      - copied from r10031, fsf/trunk/ports/sysdeps/unix/sysv/linux/m68k/nptl/
Removed:
    trunk/libc/sysdeps/powerpc/powerpc32/power7/Implies
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/Implies
    trunk/libc/sysdeps/powerpc/powerpc64/power7/Implies
    trunk/libc/sysdeps/powerpc/powerpc64/power7/fpu/Implies
    trunk/libc/sysdeps/sparc/sparc32/bcopy.c
    trunk/libc/sysdeps/sparc/sparc32/memmove.c
    trunk/libc/sysdeps/sparc/sparc32/sparcv8/udiv_qrnnd.S
    trunk/libc/sysdeps/sparc/sparc32/sparcv9/bcopy.c
    trunk/libc/sysdeps/sparc/sparc32/sparcv9/memmove.c
    trunk/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9b/
    trunk/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v/
    trunk/libc/sysdeps/sparc/sparc32/sparcv9/sparcv9v2/
    trunk/libc/sysdeps/sparc/sparc32/udiv_qrnnd.S
    trunk/libc/sysdeps/sparc/sparc64/bcopy.c
    trunk/libc/sysdeps/sparc/sparc64/memmove.c
    trunk/libc/sysdeps/sparc/sparc64/sparcv9b/
    trunk/libc/sysdeps/sparc/sparc64/sparcv9v/
    trunk/libc/sysdeps/sparc/sparc64/sparcv9v2/
    trunk/ports/sysdeps/unix/sysv/linux/m68k/bits/sigcontext.h
    trunk/ports/sysdeps/unix/sysv/linux/m68k/bits/siginfo.h
Modified:
    trunk/libc/ChangeLog
    trunk/libc/README
    trunk/libc/config.make.in
    trunk/libc/configure
    trunk/libc/configure.in
    trunk/libc/elf/dl-dst.h
    trunk/libc/elf/dl-load.c
    trunk/libc/elf/elf.h
    trunk/libc/elf/tls-macros.h
    trunk/libc/hurd/hurd/ioctl.h
    trunk/libc/hurd/hurdioctl.c
    trunk/libc/include/fenv.h
    trunk/libc/io/ftw.c
    trunk/libc/libio/iovdprintf.c
    trunk/libc/malloc/malloc.c
    trunk/libc/manual/charset.texi
    trunk/libc/manual/errno.texi
    trunk/libc/manual/getopt.texi
    trunk/libc/manual/math.texi
    trunk/libc/manual/memory.texi
    trunk/libc/manual/message.texi
    trunk/libc/manual/resource.texi
    trunk/libc/manual/stdio.texi
    trunk/libc/manual/time.texi
    trunk/libc/math/fegetenv.c
    trunk/libc/math/math_private.h
    trunk/libc/nptl/ChangeLog
    trunk/libc/nptl/allocatestack.c
    trunk/libc/nptl/pthread_create.c
    trunk/libc/nptl/sysdeps/pthread/createthread.c
    trunk/libc/resolv/res_send.c
    trunk/libc/sysdeps/i386/configure
    trunk/libc/sysdeps/i386/configure.in
    trunk/libc/sysdeps/i386/fpu/fegetenv.c
    trunk/libc/sysdeps/i386/i686/Makefile
    trunk/libc/sysdeps/i386/i686/multiarch/Makefile
    trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S
    trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3.S
    trunk/libc/sysdeps/i386/i686/multiarch/memset-sse2-rep.S
    trunk/libc/sysdeps/i386/i686/multiarch/memset-sse2.S
    trunk/libc/sysdeps/i386/lshift.S
    trunk/libc/sysdeps/i386/rshift.S
    trunk/libc/sysdeps/ia64/fpu/fegetenv.c
    trunk/libc/sysdeps/ia64/memchr.S
    trunk/libc/sysdeps/powerpc/fpu/fegetenv.c
    trunk/libc/sysdeps/powerpc/powerpc32/configure
    trunk/libc/sysdeps/powerpc/powerpc32/configure.in
    trunk/libc/sysdeps/powerpc/powerpc32/dl-machine.h
    trunk/libc/sysdeps/powerpc/powerpc32/dl-start.S
    trunk/libc/sysdeps/powerpc/powerpc32/elf/start.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceil.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_floor.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_floorf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_lround.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_rint.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_rintf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_round.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_roundf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_trunc.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_truncf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S
    trunk/libc/sysdeps/powerpc/powerpc32/memset.S
    trunk/libc/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S
    trunk/libc/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S
    trunk/libc/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S
    trunk/libc/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S
    trunk/libc/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S
    trunk/libc/sysdeps/s390/fpu/fegetenv.c
    trunk/libc/sysdeps/s390/s390-64/utf16-utf32-z9.c
    trunk/libc/sysdeps/s390/s390-64/utf8-utf16-z9.c
    trunk/libc/sysdeps/sh/sh4/fpu/fegetenv.c
    trunk/libc/sysdeps/sparc/Makefile
    trunk/libc/sysdeps/sparc/fpu/fegetenv.c
    trunk/libc/sysdeps/sparc/sparc32/dl-machine.h
    trunk/libc/sysdeps/sparc/sparc32/memcpy.S
    trunk/libc/sysdeps/sparc/sparc32/sparcv9/strlen.S
    trunk/libc/sysdeps/sparc/sparc32/strlen.S
    trunk/libc/sysdeps/sparc/sparc64/Implies
    trunk/libc/sysdeps/sparc/sparc64/Makefile
    trunk/libc/sysdeps/sparc/sparc64/dl-machine.h
    trunk/libc/sysdeps/sparc/sparc64/memchr.S
    trunk/libc/sysdeps/sparc/sparc64/memcpy.S
    trunk/libc/sysdeps/sparc/sparc64/strlen.S
    trunk/libc/sysdeps/unix/sysv/linux/bits/in.h
    trunk/libc/sysdeps/unix/sysv/linux/internal_statvfs.c
    trunk/libc/sysdeps/unix/sysv/linux/linux_fsinfo.h
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/power7/fpu/Implies
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/power7/fpu/Implies
    trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c
    trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c
    trunk/libc/sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h
    trunk/libc/sysdeps/unix/sysv/linux/sparc/Versions
    trunk/libc/sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c
    trunk/libc/sysdeps/unix/sysv/linux/sys/mount.h
    trunk/libc/sysdeps/x86_64/Implies
    trunk/libc/sysdeps/x86_64/dl-machine.h
    trunk/libc/sysdeps/x86_64/fpu/fegetenv.c
    trunk/ports/ChangeLog.arm
    trunk/ports/ChangeLog.hppa
    trunk/ports/ChangeLog.m68k
    trunk/ports/ChangeLog.mips
    trunk/ports/ChangeLog.powerpc
    trunk/ports/sysdeps/arm/eabi/fegetenv.c
    trunk/ports/sysdeps/arm/fpu/fegetenv.c
    trunk/ports/sysdeps/hppa/nptl/tls.h
    trunk/ports/sysdeps/m68k/dl-machine.h
    trunk/ports/sysdeps/m68k/fpu/fegetenv.c
    trunk/ports/sysdeps/m68k/jmpbuf-unwind.h
    trunk/ports/sysdeps/m68k/m680x0/fpu/bits/mathinline.h
    trunk/ports/sysdeps/m68k/m680x0/fpu/s_ccos.c
    trunk/ports/sysdeps/m68k/m680x0/fpu/s_ccosh.c
    trunk/ports/sysdeps/mips/fpu/fegetenv.c
    trunk/ports/sysdeps/powerpc/nofpu/fegetenv.c
    trunk/ports/sysdeps/unix/sysv/linux/hppa/bits/mman.h
    trunk/ports/sysdeps/unix/sysv/linux/hppa/bits/socket.h
    trunk/ports/sysdeps/unix/sysv/linux/hppa/makecontext.c
    trunk/ports/sysdeps/unix/sysv/linux/m68k/Makefile
    trunk/ports/sysdeps/unix/sysv/linux/m68k/Versions
    trunk/ports/sysdeps/unix/sysv/linux/m68k/clone.S
    trunk/ports/sysdeps/unix/sysv/linux/m68k/register-dump.h
    trunk/ports/sysdeps/unix/sysv/linux/m68k/socket.S
    trunk/ports/sysdeps/unix/sysv/linux/m68k/sysdep.h
    trunk/ports/sysdeps/unix/sysv/linux/m68k/vfork.S

Modified: trunk/libc/ChangeLog
==============================================================================
--- trunk/libc/ChangeLog (original)
+++ trunk/libc/ChangeLog Sat Mar 13 10:20:12 2010
@@ -1,3 +1,446 @@
+2010-03-12  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/sys/mount.h (UMOUNT_NOFOLLOW): Define.
+
+2010-03-12  Andreas Schwab  <schwab@xxxxxxxxxx>
+
+	* elf/dl-dst.h: Include "trusted-dirs.h".
+	(DL_DST_REQUIRED): Take $LIB into account.
+
+2010-03-11  Roland McGrath  <roland@xxxxxxxxxx>
+
+	* elf/elf.h (R_X86_64_GOT64, R_X86_64_GOTPCREL64): New macros.
+	(R_X86_64_GOTPC64, R_X86_64_GOTPLT64, R_X86_64_PLTOFF64): New macros.
+
+2010-03-10  Luis Machado  <luisgpm@xxxxxxxxxx>
+
+	* sysdeps/powerpc/powerpc64/power7/memcpy.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/memcpy.S: New file.
+
+2010-03-09  David S. Miller  <davem@xxxxxxxxxxxxx>
+
+	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Handling
+	of R_SPARC_TLS_LE_* needs to use 32-bit loads and stores, not
+	64-bit ones.
+
+	* sysdeps/sparc/sparc32/memcpy.S: Fix build.
+
+	* sysdeps/sparc/sparc32/strlen.S: Optimize.
+	* sysdeps/sparc/sparc64/strlen.S: Likewise.
+	* sysdeps/sparc/sparc32/sparcv9/strlen.S (ASI_PNF, ASI_BLK_P,
+	XCC): Delete definitions, not needed.
+
+2010-03-07  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/internal_statvfs.c (__statvfs_getflags):
+	Little follow-up patch from last change.
+
+2010-03-06  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/internal_statvfs.c: Handle ext4 and logfs.
+	* sysdeps/unix/sysv/linux/linux_fsinfo.h: Add entry for logfs.
+
+2010-02-18  Yann Droneaud  <yann@xxxxxxxxxxx>
+
+	* resolv/res_send.c: Fixed DEBUG statements.
+	Moved tmpbuf declaration to block beginning and
+	updated pointer names used in multiple DprintQ() calls
+
+2010-02-18  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* config.make.in (config-asflags-i686): Define.
+	* configure.in: Substitute libc_cv_as_i686.
+	* sysdeps/i386/configure.in: Check if assembler supports -mtune=i686.
+	* sysdeps/i386/i686/Makefile (CFLAGS-.oX): Add -Wa,-mtune=i686
+	if assembler supports -mtune=i686.
+	(ASFLAGS-.oX): Likewise.
+
+2010-03-04  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* elf/elf.h (R_X86_64_SIZE32): Define.
+	(R_X86_64_SIZE64): Define.
+
+2010-03-02  Richard Guenther  <rguenther@xxxxxxx>
+
+	* sysdeps/x86_64/dl-machine.h (elf_machine_rela): R_X86_64_PC32
+	is sign-extending.
+
+2010-03-03  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/bits/in.h: Add a few more definitions from
+	the kernel headers.
+
+2010-03-04  David S. Miller  <davem@xxxxxxxxxxxxx>
+
+	* sysdeps/sparc/sparc64/Implies: Add ieee754/dbl-64/wordsize-64 entry.
+
+	* sysdeps/sparc/sparc32/sparcv8/udiv_qrnnd.S: Delete.
+	* sysdeps/sparc/sparc32/udiv_qrnnd.S: Delete.
+
+2010-03-03  David S. Miller  <davem@xxxxxxxxxxxxx>
+
+	* math/math_private.h (INSERT_WORDS64): Fix argument order.
+
+2010-03-03  Aurelien Jarno  <aurelien@xxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/sparc/sparc64/msgrcv.c: New file.
+
+2010-03-03  David S. Miller  <davem@xxxxxxxxxxxxx>
+
+	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_lazy_rel): Must
+	pass '1' for 't' argument to sparc_fixup_plt.
+	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_lazy_rel):
+	Likewise.
+	* sysdeps/sparc/sparc32/dl-plt.h (OPCODE_BA_PT): Define.
+	(sparc_fixup_plt): Document 't' argument.  Enable branch
+	optimization and use v9 branches when possible.  Explain why we
+	cannot unconditionally patch the branch into the first PLT
+	instruction.
+	* sysdeps/sparc/sparc64/dl-plt.h (sparc64_fixup_plt): Document 't'
+	argument.  Use v9 branches when possible.  Explain why we can in
+	fact unconditionally use a branch in the first PLT instruction
+	here.
+
+2010-02-28  Roland McGrath  <roland@xxxxxxxxxx>
+
+	* elf/elf.h (NT_X86_XSTATE): New macro.
+
+2010-02-25  David S. Miller  <davem@xxxxxxxxxxxxx>
+
+	* sysdeps/sparc/sparc64/Makefile: Add align-cpy rule.
+	* sysdeps/sparc/sparc64/align-cpy.S: New.
+	* sysdeps/sparc/sparc64/memcpy.S (__align_cpy_1, __align_cpy_2,
+	__align_cpy_4, __align_cpy_8, __align_cpy_16): Remove.
+	* sysdeps/sparc/sparc64/sparcv9b/memcpy.S (__align_cpy_1,
+	__align_cpy_2, __align_cpy_4, __align_cpy_8, __align_cpy_16):
+	Remove.
+	* sysdeps/sparc/sparc64/sparcv9v/memcpy.S (__align_cpy_1,
+	__align_cpy_2, __align_cpy_4, __align_cpy_8, __align_cpy_16):
+	Remove.
+	* sysdeps/sparc/sparc64/sparcv9v2/memcpy.S (__align_cpy_1,
+	__align_cpy_2, __align_cpy_4, __align_cpy_8, __align_cpy_16):
+	Remove.
+
+	* sysdeps/sparc/sparc32/bcopy.c: Delete.
+	* sysdeps/sparc/sparc32/memmove.c: Delete.
+	* sysdeps/sparc/sparc32/sparcv9/bcopy.c: Delete.
+	* sysdeps/sparc/sparc32/sparcv9/memmove.c: Delete.
+	* sysdeps/sparc/sparc64/bcopy.c: Delete.
+	* sysdeps/sparc/sparc64/memmove.c: Delete.
+	* sysdeps/sparc/sparc64/memcopy.h: New.
+	* sysdeps/sparc/sparc32/memcpy.S (bcopy, memmove): Remove.
+	* sysdeps/sparc/sparc64/memcpy.S (bcopy, memmove): Likewise.
+	* sysdeps/sparc/sparc64/sparcv9b/memcpy.S (bcopy, memmove): Likewise.
+	* sysdeps/sparc/sparc64/sparcv9v/memcpy.S (bcopy, memmove): Likewise.
+	* sysdeps/sparc/sparc64/sparcv9v2/memcpy.S (bcopy, memmove): Likewise.
+
+	* sysdeps/sparc/elf/rtld-global-offsets.sym: New file.
+	* sysdeps/sparc/Makefile (csu): Add rtld-global-offsets.sym to
+	gen-as-const-headers.
+	* sysdeps/sparc/sparc32/sparcv9/multiarch/Makefile: New file.
+	* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy.S: New file.
+	* sysdeps/sparc/sparc32/sparcv9/multiarch/memset.S: New file.
+	* sysdeps/sparc/sparc32/sparcv9/sparcv9b/memcpy.S: Move to...
+	* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-ultra3.S: ...here.
+	* sysdeps/sparc/sparc32/sparcv9/sparcv9v/memcpy.S: Move to...
+	* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara1.S: ...here.
+	* sysdeps/sparc/sparc32/sparcv9/sparcv9v/memset.S: Move to...
+	* sysdeps/sparc/sparc32/sparcv9/multiarch/memset-niagara1.S: ...here.
+	* sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memcpy.S: Move to...
+	* sysdeps/sparc/sparc32/sparcv9/multiarch/memcpy-niagara2.S: ...here.
+	* sysdeps/sparc/sparc32/sparcv9/sparcv9v2/memset.S: Removed.
+	* sysdeps/sparc/sparc64/multiarch/Makefile: New file.
+	* sysdeps/sparc/sparc64/sparcv9v/memcpy.S: Move to...
+	* sysdeps/sparc/sparc64/multiarch/memcpy-niagara1.S: ...here.
+	* sysdeps/sparc/sparc64/sparcv9v2/memcpy.S: Move to...
+	* sysdeps/sparc/sparc64/multiarch/memcpy-niagara2.S: ...here.
+	* sysdeps/sparc/sparc64/sparcv9b/memcpy.S: Move to...
+	* sysdeps/sparc/sparc64/multiarch/memcpy-ultra3.S: ...here.
+	* sysdeps/sparc/sparc64/sparcv9v/memset.S: Move to...
+	* sysdeps/sparc/sparc64/multiarch/memset-niagara1.S: ...here.
+	* sysdeps/sparc/sparc64/sparcv9v2/memset.S: Removed.
+	* sysdeps/sparc/sparc64/multiarch/memcpy.S: New file.
+	* sysdeps/sparc/sparc64/multiarch/memset.S: New file.
+
+2010-02-20  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	[BZ #11332]
+	* sysdeps/i386/i686/multiarch/strcmp-sse4.S: Use cfi_remember_state
+	and cfi_restore_state only if USE_AS_STRNCMP is defined.
+
+2010-02-24  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/x86_64/Implies: Add ieee754/dbl-64/wordsize-64 entry.
+
+2010-02-24  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S
+	(bk_write_less32bytes_2): Renamed to ...
+	(bk_write_less48bytes): This.
+	Use unsigned conditional jumps.
+	Correct unwind info.
+	Use add/sub instead of lea if possible.
+	(shl_0_gobble_cache_loop_tail): Removed.
+	(large_page): Properly adjust ECX.
+
+	* sysdeps/i386/i686/multiarch/memcpy-ssse3.S: Use unsigned
+	conditional jumps.
+	Correct unwind info.
+
+	* sysdeps/i386/i686/multiarch/memset-sse2-rep.S: Remove redundant
+	punpcklbw.
+	Use unsigned conditional jumps.
+	(128bytesormore_nt): Renamed to ...
+	(128bytesormore_endof_L1): This.
+	Use add instead of lea if possible.
+	Correct unwind info.
+	* sysdeps/i386/i686/multiarch/memset-sse2.S: Remove redundant
+	punpcklbw.
+	Use unsigned conditional jumps.
+	Use add instead of lea if possible.
+	Correct unwind info.
+
+2010-02-24  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #11319]
+	* libio/iovdprintf.c (_IO_vdprintf): Explicitly flush stream before
+	undoing the stream because _IO_FINISH doesn't report failures.
+
+	[BZ #5553]
+	* malloc/malloc.c (public_vALLOc): Set ar_ptr when trying main_arena.
+	(public_pVALLOc): Likewise.
+	Patch by Petr Baudis.
+
+2010-02-22  Jim Meyering  <meyering@xxxxxxxxxx>
+
+	* manual/math.texi (BSD Random): Fix a typo: s/are/is/
+
+	* manual/charset.texi: Adjust grammar.
+
+	* manual/errno.texi (Error Messages): Fix doubled-words and typos.
+	* manual/charset.texi (Selecting the Conversion): Likewise.
+	* manual/getopt.texi (Getopt Long Options): Likewise.
+	* manual/memory.texi (Resizing the Data Segment): Likewise.
+	* manual/message.texi (GUI program problems): Likewise.
+	* manual/resource.texi (CPU Affinity): Likewise.
+	* manual/stdio.texi (Streams and Threads): Likewise.
+	* manual/time.texi (High Accuracy Clock): Likewise.
+
+2009-02-20  David S. Miller  <davem@xxxxxxxxxxxxx>
+
+	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_runtime_setup):
+	Adjust rela->r_offset by l->l_addr when rewriting PLT.
+
+	* sysdeps/sparc/sparc64/memchr.S: Use unsigned branch on greater to
+	test end of buffer.
+
+	* sysdeps/unix/sysv/linux/sparc/sparc32/makecontext.c
+	(__makecontext): Adjust arg counter properly when copying arg
+	stack slots.
+
+2009-02-20  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_runtime_setup):
+	Adjust rela->r_offset by l->l_addr when rewriting PLT.
+
+2010-02-19  Carl Fredrik Hammar  <hammy.lite@xxxxxxxxx>
+
+	* hurd/hurdioctl.c (tiocsctty): Call `do_tiocsctty' instead of
+	non-existent `tiocsctty_port'.
+
+2010-02-16  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/i386/i686/multiarch/memcmp.S (memcmp): Use CPUID_OFFSET
+	instead of FEATURE_OFFSET.
+	* sysdeps/i386/i686/multiarch/strcmp.S (strcmp): Likewise.
+
+	* sysdeps/i386/i686/multiarch/memcmp-sse4.S: Add alignnments.
+	Fix one unwind info problem.
+
+	* sysdeps/i386/i686/multiarch/memcmp-ssse3.S (less1bytes): Add CFI_POP.
+
+	* sysdeps/i386/i686/multiarch/strcmp-sse4.S: Simplify unwind info.
+
+2010-02-17  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+	    Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/i386/i686/multiarch/strcmp-ssse3.S: Fix typo in unwind info.
+	Clean up a bit.
+
+2010-02-17  Carl Fredrik Hammar  <hammy.lite@xxxxxxxxx>
+
+	* hurd/hurdioctl.c (tiocsctty): Only get FD ports, do work in...
+	(tiocsctty_port): ...this new function.
+
+	* hurd/hurd/ioctl.h (_HURD_HANDLE_IOCTLS_1): Cast to
+	`ioctl_handler_t'.
+
+2010-02-15  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/i386/i686/multiarch/memcmp-sse4.S: Fix unwind info.
+	* sysdeps/i386/i686/multiarch/memcmp-ssse3.S: Likewise.
+	* sysdeps/i386/i686/multiarch/strcmp-sse4.S: Likewise.
+	* sysdeps/i386/i686/multiarch/strcmp-ssse3.S: Likewise.
+
+	* sysdeps/i386/i686/multiarch/strcmp-sse4.S: Don't fall through to
+	undefined code.
+
+2010-02-12  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/i386/i686/multiarch/Makefile (sysdep_routines): Add
+	strcmp-ssse3, strcmp-sse4, strncmp-c, strncmp-ssse3, strncmp-sse4,
+	memcmp-c, memcmp-ssse3, and memcmp-sse4.
+	* sysdeps/i386/i686/multiarch/memcmp-sse4.S: New file.
+	* sysdeps/i386/i686/multiarch/memcmp-ssse3.S: New file.
+	* sysdeps/i386/i686/multiarch/memcmp.S: New file.
+	* sysdeps/i386/i686/multiarch/strcmp-sse4.S: New file.
+	* sysdeps/i386/i686/multiarch/strcmp-ssse3.S: New file.
+	* sysdeps/i386/i686/multiarch/strcmp.S: New file.
+	* sysdeps/i386/i686/multiarch/strncmp-c.c: New file.
+	* sysdeps/i386/i686/multiarch/strncmp-sse4.S: New file.
+	* sysdeps/i386/i686/multiarch/strncmp-ssse3.S: New file.
+	* sysdeps/i386/i686/multiarch/strncmp.S: New file.
+
+2010-02-12  Luis Machado  <luisgpm@xxxxxxxxxx>
+
+	* sysdeps/powerpc/powerpc32/dl-machine.h: Removed old PPC_REL16 check.
+	* sysdeps/powerpc/powerpc32/dl-machine.h: Likewise.
+	* sysdeps/powerpc/powerpc32/elf/start.S: Likewise.
+	* sysdeps/powerpc/powerpc32/memset.S: Likewise.
+	* sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S: Likewise.
+	* sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S: Likewise.
+	* sysdeps/powerpc/powerpc32/configure.in: Fail if R_PPC_REL16
+	is not supported.
+	* sysdeps/powerpc/powerpc32/fpu/s_round.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_truncf.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_floorf.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_ceilf.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_ceil.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_floor.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_roundf.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_rintf.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_trunc.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/setjmp-common.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_lround.S: Likewise.
+	* sysdeps/powerpc/powerpc32/fpu/s_rint.S: Likewise.
+	* sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S: Likewise.
+	* sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S: Likewise.
+	* sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S: Likewise.
+	* sysdeps/powerpc/powerpc32/dl-start.S: Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S:
+	Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S:
+	Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S:
+	Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S:
+	Likewise.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S: Likewise.
+
+2010-02-12  Alan Modra  <amodra@xxxxxxxxx>
+
+	* elf/tls-macros.h [__powerpc__] (__TLS_CALL_CLOBBERS): Remove r3.
+	Define and use for __powerpc64__ too.
+	[__powerpc__] (TLS_LD): Add r3 to clobbers.
+	[__powerpc__] (TLS_GD): Set asm output.  Make __result r3 reg.
+	[__powerpc64__] (TLS_GD): Make __result r3 reg.
+	[__powerpc64__] (TLS_IE): Relax output constraint.
+
+2010-02-11  Andreas Krebbel  <Andreas.Krebbel@xxxxxxxxxx>
+
+	* sysdeps/s390/s390-64/utf8-utf16-z9.c: Disable hardware
+	instructions cu21 and cu24.  Add well-formedness checking
+	parameter and adjust the software implementation.
+	* sysdeps/s390/s390-64/utf16-utf32-z9.c: Likewise.
+
+2010-02-10  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #11271]
+	* io/ftw.c (ftw_startup): Close	descriptor for initial directory
+	after changing back to it.
+
+2010-02-05  David S. Miller  <davem@xxxxxxxxxxxxx>
+
+	* elf/elf.h (R_SPARC_JMP_IREL, R_SPARC_IRELATIVE): Define.
+	* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Handle new
+	ifunc relocs.
+	(elf_machine_lazy_rel): Likewise.
+	(sparc_fixup_plt): Pull out to...
+	* sysdeps/sparc/sparc32/dl-plt.h: ...here.
+	* sysdeps/sparc/sparc32/dl-irel.h: New file.
+	* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Handle new
+	ifunc relocs.
+	(elf_machine_lazy_rel): Likewise.
+	(sparc64_fixup_plt): Pull out to...
+	* sysdeps/sparc/sparc64/dl-plt.h: ...here.
+	* sysdeps/sparc/sparc64/dl-irel.h: New file.
+
+2010-02-09  Maxim Kuvyrkov  <maxim@xxxxxxxxxxxxxxxx>
+
+	* elf/elf.h: Define m68k TLS relocations.
+
+2010-02-10  Luis Machado  <luisgpm@xxxxxxxxxx>
+
+	* sysdeps/powerpc/powerpc64/power7/Implies: Removed.
+	* sysdeps/powerpc/powerpc64/power7/fpu/Implies: Removed.
+	* sysdeps/powerpc/powerpc32/power7/Implies: Removed.
+	* sysdeps/powerpc/powerpc32/power7/fpu/Implies: Removed.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/power7/fpu/Implies: Add
+	64-bit power7 fpu path.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/power7/fpu/Implies: Add
+	32-bit power7 fpu math.
+
+2010-02-09  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/i386/rshift.S: More compact unwind information.
+
+	* sysdeps/i386/lshift.S: Fix unwind information.
+
+2010-02-08  Luis Machado  <luisgpm@xxxxxxxxxx>
+
+	* sysdeps/powerpc/powerpc64/power7/fpu/s_isnan.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S: New file.
+	* sysdeps/powerpc/powerpc64/power7/fpu/s_isnanf.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_isnanf.S: New file.
+	* sysdeps/powerpc/powerpc64/power7/fpu/s_isinf.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S: New file.
+	* sysdeps/powerpc/powerpc64/power7/fpu/s_isinff.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_isinff.S: New file.
+	* sysdeps/powerpc/powerpc64/power7/fpu/s_finite.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S: New file.
+	* sysdeps/powerpc/powerpc64/power7/fpu/s_finitef.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/fpu/s_finitef.S: New file.
+
+2010-02-08  Andreas Schwab  <schwab@xxxxxxxxxx>
+
+	* include/fenv.h: Add hidden proto for fegetenv.
+	* math/fegetenv.c: Add hidden alias.
+	* sysdeps/i386/fpu/fegetenv.c: Likewise.
+	* sysdeps/ia64/fpu/fegetenv.c: Likewise.
+	* sysdeps/powerpc/fpu/fegetenv.c: Likewise.
+	* sysdeps/sh/sh4/fpu/fegetenv.c: Likewise.
+	* sysdeps/sparc/fpu/fegetenv.c: Likewise.
+	* sysdeps/x86_64/fpu/fegetenv.c: Likewise
+	* sysdeps/s390/fpu/fegetenv.c: Likewise.  Remove unused headers.
+
+2010-02-05  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	[BZ #11230]
+	* sysdeps/ia64/memchr.S: Don't read beyond the last byte
+	during recovery.
+
+2010-01-26  Andreas Schwab  <schwab@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmp32.c: Use internal
+	interface.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.c: Likewise.
+	* sysdeps/unix/sysv/linux/s390/s390-32/utmpx32.h: Declare internal
+	utmpx interface.
+
+	* sysdeps/unix/sysv/linux/sparc/Versions: Add new errlist compat
+	entry for 2.12.
+
 2010-02-03  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	[BZ #11235]

Modified: trunk/libc/README
==============================================================================
--- trunk/libc/README (original)
+++ trunk/libc/README Sat Mar 13 10:20:12 2010
@@ -42,19 +42,22 @@
 The GNU C Library implements much of the POSIX.1 functionality in the
 GNU/Hurd system, using configurations i[34567]86-*-gnu.
 
-When working with Linux kernels, the GNU C Library version 2.4 is
-intended primarily for use with Linux kernel version 2.6.0 and later.
-We only support using the NPTL implementation of pthreads, which is now
-the default configuration.  Most of the C library will continue to work
-on older Linux kernels and many programs will not require a 2.6 kernel
-to run correctly.  However, pthreads and related functionality will not
-work at all on old kernels and we do not recommend using glibc 2.4 with
-any Linux kernel prior to 2.6.
+When working with Linux kernels, the GNU C Library version from
+version 2.4 on is intended primarily for use with Linux kernel version
+2.6.0 and later.  We only support using the NPTL implementation of
+pthreads, which is now the default configuration.  Most of the C
+library will continue to work on older Linux kernels and many programs
+will not require a 2.6 kernel to run correctly.  However, pthreads and
+related functionality will not work at all on old kernels and we do
+not recommend using glibc 2.4 with any Linux kernel prior to 2.6.
 
 All Linux kernel versions prior to 2.6.16 are known to have some bugs that
 may cause some of the tests related to pthreads in "make check" to fail.
 If you see such problems, please try the test suite on the most recent
 Linux kernel version that you can use, before pursuing those bugs further.
+
+Also note that the shared version of the libgcc_s library must be
+installed for the pthread library to work correctly.
 
 The old LinuxThreads add-on implementation of pthreads for older Linux
 kernels is no longer supported, and we are not distributing it with this
@@ -76,7 +79,6 @@
 	sparc*-*-linux-gnu
 	sparc64*-*-linux-gnu
 
-	alpha*-*-linux-gnu	Requires Linux 2.6.9 for NPTL
 	sh[34]-*-linux-gnu	Requires Linux 2.6.11
 
 The code for other CPU configurations supported by volunteers outside of
@@ -85,6 +87,7 @@
 same place where you got the main glibc distribution files.
 Currently these configurations are known to work using the `ports' add-on:
 
+	alpha*-*-linux-gnu	Requires Linux 2.6.9 for NPTL
 	arm-*-linux-gnu		Requires Linux 2.6.15 for NPTL, no SMP support
 	arm-*-linux-gnueabi	Requires Linux 2.6.16-rc1 for NPTL, no SMP
 	mips-*-linux-gnu	Requires Linux 2.6.12 for NPTL

Modified: trunk/libc/config.make.in
==============================================================================
--- trunk/libc/config.make.in (original)
+++ trunk/libc/config.make.in Sat Mar 13 10:20:12 2010
@@ -36,6 +36,7 @@
 
 config-cflags-sse4 = @libc_cv_cc_sse4@
 config-cflags-avx = @libc_cv_cc_avx@
+config-asflags-i686 = @libc_cv_as_i686@
 
 defines = @DEFINES@
 sysincludes = @SYSINCLUDES@

Modified: trunk/libc/configure
==============================================================================
--- trunk/libc/configure (original)
+++ trunk/libc/configure Sat Mar 13 10:20:12 2010
@@ -657,6 +657,7 @@
 elf
 ldd_rewrite_script
 use_ldconfig
+libc_cv_as_i686
 libc_cv_cc_avx
 libc_cv_cc_sse4
 libc_cv_cpp_asm_debuginfo
@@ -8899,6 +8900,7 @@
 
 
 
+
 if test $elf = yes; then
   cat >>confdefs.h <<\_ACEOF
 #define HAVE_ELF 1

Modified: trunk/libc/configure.in
==============================================================================
--- trunk/libc/configure.in (original)
+++ trunk/libc/configure.in Sat Mar 13 10:20:12 2010
@@ -2342,6 +2342,7 @@
 AC_SUBST(libc_cv_cpp_asm_debuginfo)
 AC_SUBST(libc_cv_cc_sse4)
 AC_SUBST(libc_cv_cc_avx)
+AC_SUBST(libc_cv_as_i686)
 
 AC_SUBST(use_ldconfig)
 AC_SUBST(ldd_rewrite_script)

Modified: trunk/libc/elf/dl-dst.h
==============================================================================
--- trunk/libc/elf/dl-dst.h (original)
+++ trunk/libc/elf/dl-dst.h Sat Mar 13 10:20:12 2010
@@ -17,6 +17,8 @@
    License along with the GNU C Library; if not, write to the Free
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
+
+#include "trusted-dirs.h"
 
 /* Determine the number of DST elements in the name.  Only if IS_PATH is
    nonzero paths are recognized (i.e., multiple, ':' separated filenames).  */
@@ -39,12 +41,13 @@
 									      \
     if (__cnt > 0)							      \
       {									      \
-	size_t origin_len;						      \
+	size_t dst_len;						      	      \
 	/* Now we make a guess how many extra characters on top of the	      \
 	   length of S we need to represent the result.  We know that	      \
 	   we have CNT replacements.  Each at most can use		      \
-	     MAX (strlen (ORIGIN), strlen (_dl_platform))		      \
-	   minus 7 (which is the length of "$ORIGIN").			      \
+	     MAX (MAX (strlen (ORIGIN), strlen (_dl_platform)),		      \
+		  strlen (DL_DST_LIB))					      \
+	   minus 4 (which is the length of "$LIB").			      \
 									      \
 	   First get the origin string if it is not available yet.	      \
 	   This can only happen for the map of the executable.  */	      \
@@ -53,14 +56,16 @@
 	  {								      \
 	    assert ((l)->l_name[0] == '\0');				      \
 	    (l)->l_origin = _dl_get_origin ();				      \
-	    origin_len = ((l)->l_origin && (l)->l_origin != (char *) -1	      \
+	    dst_len = ((l)->l_origin && (l)->l_origin != (char *) -1	      \
 			  ? strlen ((l)->l_origin) : 0);		      \
 	  }								      \
 	else								      \
-	  origin_len = (l)->l_origin == (char *) -1			      \
+	  dst_len = (l)->l_origin == (char *) -1			      \
 	    ? 0 : strlen ((l)->l_origin);				      \
-									      \
-	__len += __cnt * (MAX (origin_len, GLRO(dl_platformlen)) - 7);	      \
+	dst_len = MAX (MAX (dst_len, GLRO(dl_platformlen)), 		      \
+		       strlen (DL_DST_LIB));				      \
+	if (dst_len > 4)						      \
+	  __len += __cnt * (dst_len - 4);				      \
       }									      \
 									      \
     __len; })
@@ -72,7 +77,7 @@
   if ((l) == NULL)							      \
     {									      \
       const char *origin = _dl_get_origin ();				      \
-      origin_len = (origin && origin != (char *) -1 ? strlen (origin) : 0);   \
+      dst_len = (origin && origin != (char *) -1 ? strlen (origin) : 0);      \
     }									      \
   else
 #endif

Modified: trunk/libc/elf/dl-load.c
==============================================================================
--- trunk/libc/elf/dl-load.c (original)
+++ trunk/libc/elf/dl-load.c Sat Mar 13 10:20:12 2010
@@ -1,5 +1,5 @@
 /* Map in a shared object's segments from the file.
-   Copyright (C) 1995-2005, 2006, 2007, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1995-2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -313,7 +313,7 @@
 expand_dynamic_string_token (struct link_map *l, const char *s)
 {
   /* We make two runs over the string.  First we determine how large the
-     resulting string is and then we copy it over.  Since this is now
+     resulting string is and then we copy it over.  Since this is no
      frequently executed operation we are looking here not for performance
      but rather for code size.  */
   size_t cnt;
@@ -391,7 +391,7 @@
       size_t len = strlen (cp);
 
       /* `strsep' can pass an empty string.  This has to be
-         interpreted as `use the current directory'. */
+	 interpreted as `use the current directory'. */
       if (len == 0)
 	{
 	  static const char curwd[] = "./";
@@ -1519,7 +1519,7 @@
 /* Print search path.  */
 static void
 print_search_path (struct r_search_path_elem **list,
-                   const char *what, const char *name)
+		   const char *what, const char *name)
 {
   char buf[max_dirnamelen + max_capstrlen];
   int first = 1;
@@ -2044,7 +2044,7 @@
       fd = -1;
 
       /* When the object has the RUNPATH information we don't use any
-         RPATHs.  */
+	 RPATHs.  */
       if (loader == NULL || loader->l_info[DT_RUNPATH] == NULL)
 	{
 	  /* This is the executable's map (if there is one).  Make sure that
@@ -2067,7 +2067,7 @@
 	      }
 
 	  /* If dynamically linked, try the DT_RPATH of the executable
-             itself.  NB: we do this for lookups in any namespace.  */
+	     itself.  NB: we do this for lookups in any namespace.  */
 	  if (fd == -1 && !did_main_map
 	      && main_map != NULL && main_map->l_type != lt_loaded
 	      && cache_rpath (main_map, &main_map->l_rpath_dirs, DT_RPATH,
@@ -2164,7 +2164,7 @@
 
       /* Add another newline when we are tracing the library loading.  */
       if (__builtin_expect (GLRO_dl_debug_mask & DL_DEBUG_LIBS, 0))
-        _dl_debug_printf ("\n");
+	_dl_debug_printf ("\n");
     }
   else
     {

Modified: trunk/libc/elf/elf.h
==============================================================================
--- trunk/libc/elf/elf.h (original)
+++ trunk/libc/elf/elf.h Sat Mar 13 10:20:12 2010
@@ -619,6 +619,7 @@
 #define NT_PPC_VSX	0x102		/* PowerPC VSX registers */
 #define NT_386_TLS	0x200		/* i386 TLS slots (struct user_desc) */
 #define NT_386_IOPERM	0x201		/* x86 io permission bitmap (1=deny) */
+#define NT_X86_XSTATE	0x202		/* x86 extended state using xsave */
 
 /* Legal values for the note segment descriptor types for object files.  */
 
@@ -1123,8 +1124,29 @@
 #define R_68K_GLOB_DAT	20		/* Create GOT entry */
 #define R_68K_JMP_SLOT	21		/* Create PLT entry */
 #define R_68K_RELATIVE	22		/* Adjust by program base */
+#define R_68K_TLS_GD32      25          /* 32 bit GOT offset for GD */
+#define R_68K_TLS_GD16      26          /* 16 bit GOT offset for GD */
+#define R_68K_TLS_GD8       27          /* 8 bit GOT offset for GD */
+#define R_68K_TLS_LDM32     28          /* 32 bit GOT offset for LDM */
+#define R_68K_TLS_LDM16     29          /* 16 bit GOT offset for LDM */
+#define R_68K_TLS_LDM8      30          /* 8 bit GOT offset for LDM */
+#define R_68K_TLS_LDO32     31          /* 32 bit module-relative offset */
+#define R_68K_TLS_LDO16     32          /* 16 bit module-relative offset */
+#define R_68K_TLS_LDO8      33          /* 8 bit module-relative offset */
+#define R_68K_TLS_IE32      34          /* 32 bit GOT offset for IE */
+#define R_68K_TLS_IE16      35          /* 16 bit GOT offset for IE */
+#define R_68K_TLS_IE8       36          /* 8 bit GOT offset for IE */
+#define R_68K_TLS_LE32      37          /* 32 bit offset relative to
+					   static TLS block */
+#define R_68K_TLS_LE16      38          /* 16 bit offset relative to
+					   static TLS block */
+#define R_68K_TLS_LE8       39          /* 8 bit offset relative to
+					   static TLS block */
+#define R_68K_TLS_DTPMOD32  40          /* 32 bit module number */
+#define R_68K_TLS_DTPREL32  41          /* 32 bit module-relative offset */
+#define R_68K_TLS_TPREL32   42          /* 32 bit TP-relative offset */
 /* Keep this the last entry.  */
-#define R_68K_NUM	23
+#define R_68K_NUM	43
 
 /* Intel 80386 specific definitions.  */
 
@@ -1303,6 +1325,8 @@
 #define R_SPARC_H34		85
 #define R_SPARC_SIZE32		86
 #define R_SPARC_SIZE64		87
+#define R_SPARC_JMP_IREL	248
+#define R_SPARC_IRELATIVE	249
 #define R_SPARC_GNU_VTINHERIT	250
 #define R_SPARC_GNU_VTENTRY	251
 #define R_SPARC_REV32		252
@@ -2642,7 +2666,15 @@
 #define R_X86_64_GOTOFF64	25	/* 64 bit offset to GOT */
 #define R_X86_64_GOTPC32	26	/* 32 bit signed pc relative
 					   offset to GOT */
-/* 27 .. 33 */
+#define R_X86_64_GOT64		27	/* 64-bit GOT entry offset */
+#define R_X86_64_GOTPCREL64	28	/* 64-bit PC relative offset
+					   to GOT entry */
+#define R_X86_64_GOTPC64	29	/* 64-bit PC relative offset to GOT */
+#define R_X86_64_GOTPLT64	30 	/* like GOT64, says PLT entry needed */
+#define R_X86_64_PLTOFF64	31	/* 64-bit GOT relative offset
+					   to PLT entry */
+#define R_X86_64_SIZE32		32	/* Size of symbol plus 32-bit addend */
+#define R_X86_64_SIZE64		33	/* Size of symbol plus 64-bit addend */
 #define R_X86_64_GOTPC32_TLSDESC 34	/* GOT offset for TLS descriptor.  */
 #define R_X86_64_TLSDESC_CALL   35	/* Marker for call through TLS
 					   descriptor.  */

Modified: trunk/libc/elf/tls-macros.h
==============================================================================
--- trunk/libc/elf/tls-macros.h (original)
+++ trunk/libc/elf/tls-macros.h Sat Mar 13 10:20:12 2010
@@ -701,154 +701,146 @@
      (int *) (__builtin_thread_pointer() + __offset); })
 # endif
 
-#elif defined __powerpc__ && !defined __powerpc64__
-
-#include "config.h"
-
-# define __TLS_CALL_CLOBBERS						\
-	"0", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12",	\
+#elif defined __powerpc__
+
+# define __TLS_CALL_CLOBBERS						      \
+	"0", "4", "5", "6", "7", "8", "9", "10", "11", "12",		      \
 	"lr", "ctr", "cr0", "cr1", "cr5", "cr6", "cr7"
 
+# ifndef __powerpc64__
+
+#  include "config.h"
+
 /* PowerPC32 Local Exec TLS access.  */
-# define TLS_LE(x)				\
-  ({ int *__result;				\
-     asm ("addi %0,2," #x "@tprel"		\
-	  : "=r" (__result));			\
+#  define TLS_LE(x)							      \
+  ({ int *__result;							      \
+     asm ("addi %0,2," #x "@tprel"					      \
+	  : "=r" (__result));						      \
      __result; })
 
 /* PowerPC32 Initial Exec TLS access.  */
-# ifdef HAVE_ASM_PPC_REL16
-#  define TLS_IE(x)					\
-  ({ int *__result;					\
-     asm ("bcl 20,31,1f\n1:\t"				\
-	  "mflr %0\n\t"					\
-	  "addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"	\
-	  "addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"	\
-	  "lwz %0," #x "@got@tprel(%0)\n\t"		\
-	  "add %0,%0," #x "@tls"			\
-	  : "=b" (__result) :				\
-	  : "lr");					\
+#  ifdef HAVE_ASM_PPC_REL16
+#   define TLS_IE(x)							      \
+  ({ int *__result;							      \
+     asm ("bcl 20,31,1f\n1:\t"						      \
+	  "mflr %0\n\t"							      \
+	  "addis %0,%0,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"			      \
+	  "addi %0,%0,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"			      \
+	  "lwz %0," #x "@got@tprel(%0)\n\t"				      \
+	  "add %0,%0," #x "@tls"					      \
+	  : "=b" (__result) :						      \
+	  : "lr");							      \
      __result; })
-# else
-#  define TLS_IE(x)					\
-  ({ int *__result;					\
-     asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t"	\
-	  "mflr %0\n\t"					\
-	  "lwz %0," #x "@got@tprel(%0)\n\t"		\
-	  "add %0,%0," #x "@tls"			\
-	  : "=b" (__result) :				\
-	  : "lr");					\
+#  else
+#   define TLS_IE(x)							      \
+  ({ int *__result;							      \
+     asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t"			      \
+	  "mflr %0\n\t"							      \
+	  "lwz %0," #x "@got@tprel(%0)\n\t"				      \
+	  "add %0,%0," #x "@tls"					      \
+	  : "=b" (__result) :						      \
+	  : "lr");							      \
      __result; })
-# endif
+#  endif
 
 /* PowerPC32 Local Dynamic TLS access.  */
-# ifdef HAVE_ASM_PPC_REL16
-#  define TLS_LD(x)					\
-  ({ int *__result;					\
-     asm ("bcl 20,31,1f\n1:\t"				\
-	  "mflr 3\n\t"					\
-	  "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"	\
-	  "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"	\
-	  "addi 3,3," #x "@got@tlsld\n\t"		\
-	  "bl __tls_get_addr@plt\n\t"			\
-	  "addi %0,3," #x "@dtprel"			\
-	  : "=r" (__result) :				\
-	  : __TLS_CALL_CLOBBERS);			\
+#  ifdef HAVE_ASM_PPC_REL16
+#   define TLS_LD(x)							      \
+  ({ int *__result;							      \
+     asm ("bcl 20,31,1f\n1:\t"						      \
+	  "mflr 3\n\t"							      \
+	  "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"			      \
+	  "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"			      \
+	  "addi 3,3," #x "@got@tlsld\n\t"				      \
+	  "bl __tls_get_addr@plt\n\t"					      \
+	  "addi %0,3," #x "@dtprel"					      \
+	  : "=r" (__result) :						      \
+	  : "3", __TLS_CALL_CLOBBERS);					      \
      __result; })
-# else
-#  define TLS_LD(x)					\
-  ({ int *__result;					\
-     asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t"	\
-	  "mflr 3\n\t"					\
-	  "addi 3,3," #x "@got@tlsld\n\t"		\
-	  "bl __tls_get_addr@plt\n\t"			\
-	  "addi %0,3," #x "@dtprel"			\
-	  : "=r" (__result) :				\
-	  : __TLS_CALL_CLOBBERS);			\
+#  else
+#   define TLS_LD(x)							      \
+  ({ int *__result;							      \
+     asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t"			      \
+	  "mflr 3\n\t"							      \
+	  "addi 3,3," #x "@got@tlsld\n\t"				      \
+	  "bl __tls_get_addr@plt\n\t"					      \
+	  "addi %0,3," #x "@dtprel"					      \
+	  : "=r" (__result) :						      \
+	  : "3", __TLS_CALL_CLOBBERS);					      \
      __result; })
-# endif
+#  endif
 
 /* PowerPC32 General Dynamic TLS access.  */
-# ifdef HAVE_ASM_PPC_REL16
-#  define TLS_GD(x)					\
-  ({ register int *__result __asm__ ("r3");		\
-     asm ("bcl 20,31,1f\n1:\t"				\
-	  "mflr 3\n\t"					\
-	  "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"	\
-	  "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"	\
-	  "addi 3,3," #x "@got@tlsgd\n\t"		\
-	  "bl __tls_get_addr@plt"			\
-	  : :						\
-	  : __TLS_CALL_CLOBBERS);			\
+#  ifdef HAVE_ASM_PPC_REL16
+#   define TLS_GD(x)							      \
+  ({ register int *__result __asm__ ("r3");				      \
+     asm ("bcl 20,31,1f\n1:\t"						      \
+	  "mflr 3\n\t"							      \
+	  "addis 3,3,_GLOBAL_OFFSET_TABLE_-1b@ha\n\t"			      \
+	  "addi 3,3,_GLOBAL_OFFSET_TABLE_-1b@l\n\t"			      \
+	  "addi 3,3," #x "@got@tlsgd\n\t"				      \
+	  "bl __tls_get_addr@plt"					      \
+	  : "=r" (__result) :						      \
+	  : __TLS_CALL_CLOBBERS);					      \
      __result; })
-# else
-#  define TLS_GD(x)					\
-  ({ register int *__result __asm__ ("r3");		\
-     asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t"	\
-	  "mflr 3\n\t"					\
-	  "addi 3,3," #x "@got@tlsgd\n\t"		\
-	  "bl __tls_get_addr@plt"			\
-	  : :						\
-	  : __TLS_CALL_CLOBBERS);			\
+#  else
+#   define TLS_GD(x)							      \
+  ({ register int *__result __asm__ ("r3");				      \
+     asm ("bl _GLOBAL_OFFSET_TABLE_@local-4\n\t"			      \
+	  "mflr 3\n\t"							      \
+	  "addi 3,3," #x "@got@tlsgd\n\t"				      \
+	  "bl __tls_get_addr@plt"					      \
+	  : "=r" (__result) :						      \
+	  : __TLS_CALL_CLOBBERS);					      \
      __result; })
-# endif
-
-#elif defined __powerpc__ && defined __powerpc64__
+#  endif
+
+# else
 
 /* PowerPC64 Local Exec TLS access.  */
-# define TLS_LE(x) \
-  ({  int * __result;  \
-      asm ( \
-        "  addis %0,13," #x "@tprel@ha\n"  \
-        "  addi  %0,%0," #x "@tprel@l\n"   \
-        : "=b" (__result) );  \
-      __result;  \
+#  define TLS_LE(x)							      \
+  ({ int * __result;							      \
+     asm ("addis %0,13," #x "@tprel@ha\n\t"				      \
+	  "addi  %0,%0," #x "@tprel@l"					      \
+	  : "=b" (__result) );						      \
+     __result;								      \
   })
 /* PowerPC64 Initial Exec TLS access.  */
-#  define TLS_IE(x) \
-  ({  int * __result;  \
-      asm (  \
-        "  ld  %0," #x "@got@tprel(2)\n"  \
-        "  add %0,%0," #x "@tls\n"   \
-        : "=b" (__result) );  \
-      __result;  \
+#  define TLS_IE(x)							      \
+  ({ int * __result;							      \
+     asm ("ld  %0," #x "@got@tprel(2)\n\t"				      \
+	  "add %0,%0," #x "@tls"					      \
+	  : "=r" (__result) );						      \
+     __result;								      \
   })
-# ifdef HAVE_ASM_GLOBAL_DOT_NAME
-#  define __TLS_GET_ADDR ".__tls_get_addr"
-# else
-#  define __TLS_GET_ADDR "__tls_get_addr"
-# endif
+#  ifdef HAVE_ASM_GLOBAL_DOT_NAME
+#   define __TLS_GET_ADDR ".__tls_get_addr"
+#  else
+#   define __TLS_GET_ADDR "__tls_get_addr"
+#  endif
 /* PowerPC64 Local Dynamic TLS access.  */
-#  define TLS_LD(x) \
-  ({  int * __result;  \
-      asm (  \
-        "  addi  3,2," #x "@got@tlsld\n"  \
-        "  bl    " __TLS_GET_ADDR "\n"  \
-        "  nop   \n"  \
-        "  addis %0,3," #x "@dtprel@ha\n"  \
-        "  addi  %0,%0," #x "@dtprel@l\n"  \
-        : "=b" (__result) :  \
-        : "0", "3", "4", "5", "6", "7",    \
-          "8", "9", "10", "11", "12",      \
-          "lr", "ctr",  \
-          "cr0", "cr1", "cr5", "cr6", "cr7");  \
-      __result;  \
+#  define TLS_LD(x)							      \
+  ({ int * __result;							      \
+     asm ("addi  3,2," #x "@got@tlsld\n\t"				      \
+	  "bl    " __TLS_GET_ADDR "\n\t"				      \
+	  "nop   \n\t"							      \
+	  "addis %0,3," #x "@dtprel@ha\n\t"				      \
+	  "addi  %0,%0," #x "@dtprel@l"					      \
+	  : "=b" (__result) :						      \
+	  : "3", __TLS_CALL_CLOBBERS);					      \
+     __result;								      \
   })
 /* PowerPC64 General Dynamic TLS access.  */
-#  define TLS_GD(x) \
-  ({  int * __result;  \
-      asm (  \
-        "  addi  3,2," #x "@got@tlsgd\n"  \
-        "  bl    " __TLS_GET_ADDR "\n"  \
-        "  nop   \n"  \
-        "  mr    %0,3\n"  \
-        : "=b" (__result) :  \
-        : "0", "3", "4", "5", "6", "7",    \
-          "8", "9", "10", "11", "12",      \
-          "lr", "ctr",  \
-          "cr0", "cr1", "cr5", "cr6", "cr7");  \
-      __result;  \
+#  define TLS_GD(x)							      \
+  ({ register int *__result __asm__ ("r3");				      \
+     asm ("addi  3,2," #x "@got@tlsgd\n\t"				      \
+	  "bl    " __TLS_GET_ADDR "\n\t"				      \
+	  "nop   "							      \
+	  : "=r" (__result) :						      \
+	  : __TLS_CALL_CLOBBERS);					      \
+     __result;								      \
   })
+# endif
 
 #elif !defined TLS_LE || !defined TLS_IE \
       || !defined TLS_LD || !defined TLS_GD

Modified: trunk/libc/hurd/hurd/ioctl.h
==============================================================================
--- trunk/libc/hurd/hurd/ioctl.h (original)
+++ trunk/libc/hurd/hurd/ioctl.h Sat Mar 13 10:20:12 2010
@@ -57,7 +57,7 @@
   static const struct ioctl_handler handler##_ioctl_handler##moniker	      \
   	__attribute__ ((__unused__)) =					      \
     { _IOC_NOTYPE (first), _IOC_NOTYPE (last),				      \
-	(int (*) (int, int, void *)) (handler), NULL };	      		      \
+	(ioctl_handler_t) (handler), NULL };				      \
   text_set_element (_hurd_ioctl_handler_lists,				      \
                     handler##_ioctl_handler##moniker)
 #define	_HURD_HANDLE_IOCTLS(handler, first, last)			      \

Modified: trunk/libc/hurd/hurdioctl.c
==============================================================================
--- trunk/libc/hurd/hurdioctl.c (original)
+++ trunk/libc/hurd/hurdioctl.c Sat Mar 13 10:20:12 2010
@@ -1,5 +1,5 @@
 /* ioctl commands which must be done in the C library.
-   Copyright (C) 1994,95,96,97,99,2001,2002,2009
+   Copyright (C) 1994,95,96,97,99,2001,2002,2009,2010
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -239,6 +239,32 @@
 }
 
 
+static inline error_t
+do_tiocsctty (io_t port, io_t ctty)
+{
+  mach_port_t cttyid;
+  error_t err;
+
+  if (ctty != MACH_PORT_NULL)
+    /* PORT is already the ctty.  Nothing to do.  */
+    return 0;
+
+  /* Get PORT's cttyid port.  */
+  err = __term_getctty (port, &cttyid);
+  if (err)
+    return err;
+
+  /* Change the terminal's pgrp to ours.  */
+  err = __tioctl_tiocspgrp (port, _hurd_pgrp);
+  if (err)
+    __mach_port_deallocate (__mach_task_self (), cttyid);
+  else
+    /* Make it our own.  */
+    install_ctty (cttyid);
+
+  return err;
+}
+
 /* Make FD be the controlling terminal.
    This function is called for `ioctl (fd, TCIOSCTTY)'.  */
 
@@ -246,27 +272,7 @@
 tiocsctty (int fd,
 	   int request)		/* Always TIOCSCTTY.  */
 {
-  mach_port_t cttyid;
-  error_t err;
-
-  /* Get FD's cttyid port, unless it is already ours.  */
-  err = HURD_DPORT_USE (fd, ctty != MACH_PORT_NULL ? EADDRINUSE :
-			__term_getctty (port, &cttyid));
-  if (err == EADDRINUSE)
-    /* FD is already the ctty.  Nothing to do.  */
-    return 0;
-  else if (err)
-    return __hurd_fail (err);
-
-  /* Change the terminal's pgrp to ours.  */
-  err = HURD_DPORT_USE (fd, __tioctl_tiocspgrp (port, _hurd_pgrp));
-  if (err)
-    return __hurd_fail (err);
-
-  /* Make it our own.  */
-  install_ctty (cttyid);
-
-  return 0;
+  return __hurd_fail (HURD_DPORT_USE (fd, do_tiocsctty (port, ctty)));
 }
 _HURD_HANDLE_IOCTL (tiocsctty, TIOCSCTTY);
 

Modified: trunk/libc/include/fenv.h
==============================================================================
--- trunk/libc/include/fenv.h (original)
+++ trunk/libc/include/fenv.h Sat Mar 13 10:20:12 2010
@@ -13,6 +13,7 @@
 extern int __feupdateenv (__const fenv_t *__envp);
 
 libm_hidden_proto (feraiseexcept)
+libm_hidden_proto (fegetenv)
 libm_hidden_proto (fesetenv)
 libm_hidden_proto (fesetround)
 libm_hidden_proto (feholdexcept)

Modified: trunk/libc/io/ftw.c
==============================================================================
--- trunk/libc/io/ftw.c (original)
+++ trunk/libc/io/ftw.c Sat Mar 13 10:20:12 2010
@@ -1,5 +1,5 @@
 /* File tree walker functions.
-   Copyright (C) 1996-2004, 2006, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 1996-2004, 2006-2008, 2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1996.
 
@@ -790,6 +790,7 @@
     {
       int save_err = errno;
       __fchdir (cwdfd);
+      close_not_cancel_no_status (cwdfd);
       __set_errno (save_err);
     }
   else if (cwd != NULL)

Modified: trunk/libc/libio/iovdprintf.c
==============================================================================
--- trunk/libc/libio/iovdprintf.c (original)
+++ trunk/libc/libio/iovdprintf.c Sat Mar 13 10:20:12 2010
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1997-2000, 2001, 2002, 2003, 2006
+/* Copyright (C) 1995, 1997-2000, 2001, 2002, 2003, 2006, 2010
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -60,6 +60,9 @@
 
   done = INTUSE(_IO_vfprintf) (&tmpfil.file, format, arg);
 
+  if (done != EOF && _IO_do_flush (&tmpfil.file) == EOF)
+    done = EOF;
+
   _IO_FINISH (&tmpfil.file);
 
   return done;

Modified: trunk/libc/malloc/malloc.c
==============================================================================
--- trunk/libc/malloc/malloc.c (original)
+++ trunk/libc/malloc/malloc.c Sat Mar 13 10:20:12 2010
@@ -1,5 +1,5 @@
 /* Malloc implementation for multiple threads without lock contention.
-   Copyright (C) 1996-2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1996-2009, 2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Wolfram Gloger <wg@xxxxxxxxx>
    and Doug Lea <dl@xxxxxxxxxxxxx>, 2001.
@@ -3933,9 +3933,10 @@
   if(!p) {
     /* Maybe the failure is due to running out of mmapped areas. */
     if(ar_ptr != &main_arena) {
-      (void)mutex_lock(&main_arena.mutex);
-      p = _int_memalign(&main_arena, pagesz, bytes);
-      (void)mutex_unlock(&main_arena.mutex);
+      ar_ptr = &main_arena;
+      (void)mutex_lock(&ar_ptr->mutex);
+      p = _int_memalign(ar_ptr, pagesz, bytes);
+      (void)mutex_unlock(&ar_ptr->mutex);
     } else {
 #if USE_ARENAS
       /* ... or sbrk() has failed and there is still a chance to mmap() */
@@ -3978,9 +3979,10 @@
   if(!p) {
     /* Maybe the failure is due to running out of mmapped areas. */
     if(ar_ptr != &main_arena) {
-      (void)mutex_lock(&main_arena.mutex);
-      p = _int_memalign(&main_arena, pagesz, rounded_bytes);
-      (void)mutex_unlock(&main_arena.mutex);
+      ar_ptr = &main_arena;
+      (void)mutex_lock(&ar_ptr->mutex);
+      p = _int_memalign(ar_ptr, pagesz, rounded_bytes);
+      (void)mutex_unlock(&ar_ptr->mutex);
     } else {
 #if USE_ARENAS
       /* ... or sbrk() has failed and there is still a chance to mmap() */

Modified: trunk/libc/manual/charset.texi
==============================================================================
--- trunk/libc/manual/charset.texi (original)
+++ trunk/libc/manual/charset.texi Sat Mar 13 10:20:12 2010
@@ -393,7 +393,7 @@
 by the functions we are about to describe.  Each locale uses its own
 character set (given as an argument to @code{localedef}) and this is the
 one assumed as the external multibyte encoding.  The wide character
-character set always is UCS-4, at least on GNU systems.
+set is always UCS-4, at least on GNU systems.
 
 A characteristic of each multibyte character set is the maximum number
 of bytes that can be necessary to represent one character.  This
@@ -577,8 +577,8 @@
 and is declared in @file{wchar.h}.
 @end deftypefun
 
-Despite the limitation that the single byte value always is interpreted
-in the initial state this function is actually useful most of the time.
+Despite the limitation that the single byte value is always interpreted
+in the initial state, this function is actually useful most of the time.
 Most characters are either entirely single-byte character sets or they
 are extension to ASCII.  But then it is possible to write code like this
 (not that this specific example is very useful):
@@ -607,10 +607,10 @@
 on the character of the character set used for @code{wchar_t}
 representation.  In other situations the bytes are not constant at
 compile time and so the compiler cannot do the work.  In situations like
-this it is necessary @code{btowc}.
+this, using @code{btowc} is required.
 
 @noindent
-There also is a function for the conversion in the other direction.
+There is also a function for the conversion in the other direction.
 
 @comment wchar.h
 @comment ISO

Modified: trunk/libc/manual/errno.texi
==============================================================================
--- trunk/libc/manual/errno.texi (original)
+++ trunk/libc/manual/errno.texi Sat Mar 13 10:20:12 2010
@@ -1425,7 +1425,7 @@
 @code{perror} generates is not what is wanted and there is no way to
 extend or change what @code{perror} does.  The GNU coding standard, for
 instance, requires error messages to be preceded by the program name and
-programs which read some input files should should provide information
+programs which read some input files should provide information
 about the input file name and the line number in case an error is
 encountered while reading the file.  For these occasions there are two
 functions available which are widely used throughout the GNU project.

Modified: trunk/libc/manual/getopt.texi
==============================================================================
--- trunk/libc/manual/getopt.texi (original)
+++ trunk/libc/manual/getopt.texi Sat Mar 13 10:20:12 2010
@@ -269,7 +269,7 @@
 @var{argv} of the next remaining argument.
 @end deftypefun
 
-Since long option names were used before before the @code{getopt_long}
+Since long option names were used before the @code{getopt_long}
 options was invented there are program interfaces which require programs
 to recognize options like @w{@samp{-option value}} instead of
 @w{@samp{--option value}}.  To enable these programs to use the GNU

Modified: trunk/libc/manual/math.texi
==============================================================================
--- trunk/libc/manual/math.texi (original)
+++ trunk/libc/manual/math.texi Sat Mar 13 10:20:12 2010
@@ -1421,7 +1421,7 @@
 
 The GNU C library contains four additional functions which contain the
 state as an explicit parameter and therefore make it possible to handle
-thread-local PRNGs.  Beside this there are no difference.  In fact, the
+thread-local PRNGs.  Beside this there is no difference.  In fact, the
 four functions already discussed are implemented internally using the
 following interfaces.
 

Modified: trunk/libc/manual/memory.texi
==============================================================================
--- trunk/libc/manual/memory.texi (original)
+++ trunk/libc/manual/memory.texi Sat Mar 13 10:20:12 2010
@@ -2379,7 +2379,7 @@
 @c The Brk system call in Linux (as opposed to the GNU C Library function)
 @c is considerably different.  It always returns the new end of the data
 @c segment, whether it succeeds or fails.  The GNU C library Brk determines
-@c it's a failure if and only if if the system call returns an address less
+@c it's a failure if and only if the system call returns an address less
 @c than the address requested.
 
 @end deftypefun

Modified: trunk/libc/manual/message.texi
==============================================================================
--- trunk/libc/manual/message.texi (original)
+++ trunk/libc/manual/message.texi Sat Mar 13 10:20:12 2010
@@ -1466,7 +1466,7 @@
 handle these kind of problems with the @code{gettext} functions.
 
 @noindent
-As as example consider the following fictional situation.  A GUI program
+As an example consider the following fictional situation.  A GUI program
 has a menu bar with the following entries:
 
 @smallexample

Modified: trunk/libc/manual/resource.texi
==============================================================================
--- trunk/libc/manual/resource.texi (original)
+++ trunk/libc/manual/resource.texi Sat Mar 13 10:20:12 2010
@@ -1288,7 +1288,7 @@
 The POSIX standard up to this date is of not much help to solve this
 problem.  The Linux kernel provides a set of interfaces to allow
 specifying @emph{affinity sets} for a process.  The scheduler will
-schedule the thread or process on on CPUs specified by the affinity
+schedule the thread or process on CPUs specified by the affinity
 masks.  The interfaces which the GNU C library define follow to some
 extend the Linux kernel interface.
 

Modified: trunk/libc/manual/stdio.texi
==============================================================================
--- trunk/libc/manual/stdio.texi (original)
+++ trunk/libc/manual/stdio.texi Sat Mar 13 10:20:12 2010
@@ -574,7 +574,7 @@
 introduction of threads) were implemented as macros which are very fast
 if the buffer is not empty.  With the addition of locking requirements
 these functions are no longer implemented as macros since they would
-would expand to too much code.
+expand to too much code.
 But these macros are still available with the same functionality under the new
 names @code{putc_unlocked} and @code{getc_unlocked}.  This possibly huge
 difference of speed also suggests the use of the @code{_unlocked}

Modified: trunk/libc/manual/time.texi
==============================================================================
--- trunk/libc/manual/time.texi (original)
+++ trunk/libc/manual/time.texi Sat Mar 13 10:20:12 2010
@@ -972,7 +972,7 @@
 large offsets or jitter).
 
 @item long int stbcnt
-This counter denotes the number of of calibrations where the stability
+This counter denotes the number of calibrations where the stability
 exceeded the threshold.
 @end table
 @end deftp

Modified: trunk/libc/math/fegetenv.c
==============================================================================
--- trunk/libc/math/fegetenv.c (original)
+++ trunk/libc/math/fegetenv.c Sat Mar 13 10:20:12 2010
@@ -32,6 +32,7 @@
 strong_alias (__fegetenv, __old_fegetenv)
 compat_symbol (libm, BP_SYM (__old_fegetenv), BP_SYM (fegetenv), GLIBC_2_1);
 #endif
+libm_hidden_ver (__fegetenv, fegetenv)
 versioned_symbol (libm, BP_SYM (__fegetenv), BP_SYM (fegetenv), GLIBC_2_2);
 
 stub_warning (fegetenv)

Modified: trunk/libc/math/math_private.h
==============================================================================
--- trunk/libc/math/math_private.h (original)
+++ trunk/libc/math/math_private.h Sat Mar 13 10:20:12 2010
@@ -111,7 +111,7 @@
 } while (0)
 
 /* Get all in one, efficient on 64-bit machines.  */
-#define INSERT_WORDS64(i,d)					\
+#define INSERT_WORDS64(d,i)					\
 do {								\
   ieee_double_shape_type iw_u;					\
   iw_u.word = (i);						\

Modified: trunk/libc/nptl/ChangeLog
==============================================================================
--- trunk/libc/nptl/ChangeLog (original)
+++ trunk/libc/nptl/ChangeLog Sat Mar 13 10:20:12 2010
@@ -1,3 +1,28 @@
+2010-03-09  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* pthread_create.c (__pthread_create_2_1): If priorities are incorrect
+	and the call fails wake eventually waiting setxid threads.  Don't free
+	stack here if we try starting a thread.
+	* sysdeps/pthread/createthread.c (do_clone): Only wake setxid waiter
+	if the clone call failed.
+
+2010-03-08  Andreas Schwab  <schwab@xxxxxxxxxx>
+
+	* pthread_create.c (__pthread_create_2_1): Don't set setxid_futex.
+	* allocatestack.c (get_cached_stack): Set setxid_futex.
+	(allocate_stack): Likewise.
+
+2010-03-05  Andreas Schwab  <schwab@xxxxxxxxxx>
+	    Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* allocatestack.c (setxid_mark_thread): Delay handling of thread if
+	it is creating a thread or it is just being created.
+	* pthread_create.c (start_thread): Wake setxid thread if it is
+	waiting.
+	(__pthread_create_2_1): Initialize setxid_futex.
+	* sysdeps/pthread/createthread.c (do_clone): Wake setxid thread if it
+	is waiting.
+
 2010-01-15  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S:

Modified: trunk/libc/nptl/allocatestack.c
==============================================================================
--- trunk/libc/nptl/allocatestack.c (original)
+++ trunk/libc/nptl/allocatestack.c Sat Mar 13 10:20:12 2010
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2009, 2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 2002.
 
@@ -212,6 +212,9 @@
 
       return NULL;
     }
+
+  /* Don't allow setxid until cloned.  */
+  result->setxid_futex = -1;
 
   /* Dequeue the entry.  */
   stack_list_del (&result->list);
@@ -380,7 +383,7 @@
 			       - TLS_TCB_SIZE - adj);
 #elif TLS_DTV_AT_TP
       pd = (struct pthread *) (((uintptr_t) attr->stackaddr
-			        - __static_tls_size - adj)
+				- __static_tls_size - adj)
 			       - TLS_PRE_TCB_SIZE);
 #endif
 
@@ -417,6 +420,9 @@
 
       /* The process ID is also the same as that of the caller.  */
       pd->pid = THREAD_GETMEM (THREAD_SELF, pid);
+
+      /* Don't allow setxid until cloned.  */
+      pd->setxid_futex = -1;
 
       /* Allocate the DTV for this thread.  */
       if (_dl_allocate_tls (TLS_TPADJ (pd)) == NULL)
@@ -546,13 +552,16 @@
 #ifndef __ASSUME_PRIVATE_FUTEX
 	  /* The thread must know when private futexes are supported.  */
 	  pd->header.private_futex = THREAD_GETMEM (THREAD_SELF,
-                                                    header.private_futex);
+						    header.private_futex);
 #endif
 
 #ifdef NEED_DL_SYSINFO
 	  /* Copy the sysinfo value from the parent.  */
 	  THREAD_SYSINFO(pd) = THREAD_SELF_SYSINFO;
 #endif
+
+	  /* Don't allow setxid until cloned.  */
+	  pd->setxid_futex = -1;
 
 	  /* The process ID is also the same as that of the caller.  */
 	  pd->pid = THREAD_GETMEM (THREAD_SELF, pid);
@@ -968,6 +977,13 @@
 setxid_mark_thread (struct xid_command *cmdp, struct pthread *t)
 {
   int ch;
+
+  /* Wait until this thread is cloned.  */
+  if (t->setxid_futex == -1
+      && ! atomic_compare_and_exchange_bool_acq (&t->setxid_futex, -2, -1))
+    do
+      lll_futex_wait (&t->setxid_futex, -2, LLL_PRIVATE);
+    while (t->setxid_futex == -2);
 
   /* Don't let the thread exit before the setxid handler runs.  */
   t->setxid_futex = 0;

Modified: trunk/libc/nptl/pthread_create.c
==============================================================================
--- trunk/libc/nptl/pthread_create.c (original)
+++ trunk/libc/nptl/pthread_create.c Sat Mar 13 10:20:12 2010
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007,2008,2009 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007,2008,2009,2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 2002.
 
@@ -242,6 +242,10 @@
   __resp = &pd->res;
 #endif
 
+  /* Allow setxid from now onwards.  */
+  if (__builtin_expect (atomic_exchange_acq (&pd->setxid_futex, 0) == -2, 0))
+    lll_futex_wake (&pd->setxid_futex, 1, LLL_PRIVATE);
+
 #ifdef __NR_set_robust_list
 # ifndef __ASSUME_SET_ROBUST_LIST
   if (__set_robust_list_avail >= 0)
@@ -538,33 +542,23 @@
       if (pd->schedparam.sched_priority < minprio
 	  || pd->schedparam.sched_priority > maxprio)
 	{
-	  err = EINVAL;
-	  goto errout;
+	  /* Perhaps a thread wants to change the IDs and if waiting
+	     for this stillborn thread.  */
+	  if (__builtin_expect (atomic_exchange_acq (&pd->setxid_futex, 0)
+				== -2, 0))
+	    lll_futex_wake (&pd->setxid_futex, 1, LLL_PRIVATE);
+
+	  __deallocate_stack (pd);
+
+	  return EINVAL;
 	}
     }
 
   /* Pass the descriptor to the caller.  */
   *newthread = (pthread_t) pd;
 
-  /* Remember whether the thread is detached or not.  In case of an
-     error we have to free the stacks of non-detached stillborn
-     threads.  */
-  bool is_detached = IS_DETACHED (pd);
-
   /* Start the thread.  */
-  err = create_thread (pd, iattr, STACK_VARIABLES_ARGS);
-  if (err != 0)
-    {
-      /* Something went wrong.  Free the resources.  */
-      if (!is_detached)
-	{
-	errout:
-	  __deallocate_stack (pd);
-	}
-      return err;
-    }
-
-  return 0;
+  return create_thread (pd, iattr, STACK_VARIABLES_ARGS);
 }
 versioned_symbol (libpthread, __pthread_create_2_1, pthread_create, GLIBC_2_1);
 

Modified: trunk/libc/nptl/sysdeps/pthread/createthread.c
==============================================================================
--- trunk/libc/nptl/sysdeps/pthread/createthread.c (original)
+++ trunk/libc/nptl/sysdeps/pthread/createthread.c Sat Mar 13 10:20:12 2010
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002-2007, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2007, 2008, 2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 2002.
 
@@ -28,7 +28,7 @@
 #include "kernel-features.h"
 
 
-#define CLONE_SIGNAL    	(CLONE_SIGHAND | CLONE_THREAD)
+#define CLONE_SIGNAL		(CLONE_SIGHAND | CLONE_THREAD)
 
 /* Unless otherwise specified, the thread "register" is going to be
    initialized with a pointer to the TCB.  */
@@ -72,16 +72,20 @@
      that cares whether the thread count is correct.  */
   atomic_increment (&__nptl_nthreads);
 
-  if (ARCH_CLONE (fct, STACK_VARIABLES_ARGS, clone_flags,
-		  pd, &pd->tid, TLS_VALUE, &pd->tid) == -1)
+  int rc = ARCH_CLONE (fct, STACK_VARIABLES_ARGS, clone_flags,
+		       pd, &pd->tid, TLS_VALUE, &pd->tid);
+
+  if (__builtin_expect (rc == -1, 0))
     {
       atomic_decrement (&__nptl_nthreads); /* Oops, we lied for a second.  */
 
-      /* Failed.  If the thread is detached, remove the TCB here since
-	 the caller cannot do this.  The caller remembered the thread
-	 as detached and cannot reverify that it is not since it must
-	 not access the thread descriptor again.  */
-      if (IS_DETACHED (pd))
+      /* Perhaps a thread wants to change the IDs and if waiting
+	 for this stillborn thread.  */
+      if (__builtin_expect (atomic_exchange_acq (&pd->setxid_futex, 0)
+			    == -2, 0))
+	lll_futex_wake (&pd->setxid_futex, 1, LLL_PRIVATE);
+
+      /* Free the resources.  */
 	__deallocate_stack (pd);
 
       /* We have to translate error codes.  */
@@ -114,6 +118,9 @@
 	      (void) INTERNAL_SYSCALL (tkill, err2, 2, pd->tid, SIGCANCEL);
 #endif
 
+	      /* We do not free the stack here because the canceled thread
+		 itself will do this.  */
+
 	      return (INTERNAL_SYSCALL_ERROR_P (res, err)
 		      ? INTERNAL_SYSCALL_ERRNO (res, err)
 		      : 0);

Modified: trunk/libc/resolv/res_send.c
==============================================================================
--- trunk/libc/resolv/res_send.c (original)
+++ trunk/libc/resolv/res_send.c Sat Mar 13 10:20:12 2010
@@ -490,6 +490,9 @@
 	for (try = 0; try < statp->retry; try++) {
 	    for (ns = 0; ns < MAXNS; ns++)
 	    {
+#ifdef DEBUG
+		char tmpbuf[40];
+#endif
 		struct sockaddr_in6 *nsap = EXT(statp).nsaddrs[ns];
 
 		if (nsap == NULL)
@@ -530,9 +533,6 @@
 		}
 #endif
 
-#ifdef DEBUG
-		char tmpbuf[40];
-#endif
 		Dprint(statp->options & RES_DEBUG,
 		       (stdout, ";; Querying server (# %d) address = %s\n",
 			ns + 1, inet_ntop(AF_INET6, &nsap->sin6_addr,
@@ -575,11 +575,12 @@
 			(statp->pfcode & RES_PRF_REPLY),
 			(stdout, "%s", ""),
 			ans, (resplen > anssiz) ? anssiz : resplen);
-		if (buf2 != NULL)
+		if (buf2 != NULL) {
 		  DprintQ((statp->options & RES_DEBUG) ||
 			  (statp->pfcode & RES_PRF_REPLY),
 			  (stdout, "%s", ""),
 			  *ansp2, (*resplen2 > *nansp2) ? *nansp2 : *resplen2);
+		}
 
 		/*
 		 * If we have temporarily opened a virtual circuit,
@@ -883,7 +884,7 @@
 			(statp->pfcode & RES_PRF_REPLY),
 			(stdout, ";; old answer (unexpected):\n"),
 			*thisansp,
-			(rlen > *thisanssiz) ? *thisanssiz: rlen);
+			(rlen > *thisanssizp) ? *thisanssizp: rlen);
 		goto read_len;
 	}
 
@@ -1186,7 +1187,7 @@
 			 */
 			Dprint(statp->options & RES_DEBUG,
 			       (stdout, ";; undersized: %d\n",
-				*thisresplen));
+				*thisresplenp));
 			*terrno = EMSGSIZE;
 			goto err_out;
 		}
@@ -1201,8 +1202,8 @@
 				(statp->pfcode & RES_PRF_REPLY),
 				(stdout, ";; old answer:\n"),
 				thisansp,
-				(*thisresplen > *thisanssiz)
-				? *thisanssiz : *thisresplen);
+				(*thisresplenp > *thisanssizp)
+				? *thisanssizp : *thisresplenp);
 			goto wait;
 		}
 		if (!(statp->options & RES_INSECURE1) &&
@@ -1216,8 +1217,8 @@
 				(statp->pfcode & RES_PRF_REPLY),
 				(stdout, ";; not our server:\n"),
 				thisansp,
-				(*thisresplen > *thisanssiz)
-				? *thisanssiz : *thisresplen);
+				(*thisresplenp > *thisanssizp)
+				? *thisanssizp : *thisresplenp);
 			goto wait;
 		}
 #ifdef RES_USE_EDNS0
@@ -1232,9 +1233,9 @@
 			DprintQ(statp->options & RES_DEBUG,
 				(stdout,
 				 "server rejected query with EDNS0:\n"),
-				thisans,
-				(*thisresplen > *thisanssiz)
-				? *thisanssiz : *thisresplen);
+				thisansp,
+				(*thisresplenp > *thisanssizp)
+				? *thisanssizp : *thisresplenp);
 			/* record the error */
 			statp->_flags |= RES_F_EDNS0ERR;
 			goto err_out;
@@ -1258,8 +1259,8 @@
 				(statp->pfcode & RES_PRF_REPLY),
 				(stdout, ";; wrong query name:\n"),
 				thisansp,
-				(*thisresplen > *thisanssiz)
-				? *thisanssiz : *thisresplen);
+				(*thisresplenp > *thisanssizp)
+				? *thisanssizp : *thisresplenp);
 			goto wait;
 		}
 		if (anhp->rcode == SERVFAIL ||
@@ -1268,8 +1269,8 @@
 			DprintQ(statp->options & RES_DEBUG,
 				(stdout, "server rejected query:\n"),
 				thisansp,
-				(*thisresplen > *thisanssiz)
-				? *thisanssiz : *thisresplen);
+				(*thisresplenp > *thisanssizp)
+				? *thisanssizp : *thisresplenp);
 
 			if (recvresp1 || (buf2 != NULL && recvresp2))
 			  return resplen;
@@ -1295,8 +1296,8 @@
 			DprintQ(statp->options & RES_DEBUG,
 				(stdout, "referred query:\n"),
 				thisansp,
-				(*thisresplen > *thisanssiz)
-				? *thisanssiz : *thisresplen);
+				(*thisresplenp > *thisanssizp)
+				? *thisanssizp : *thisresplenp);
 			goto next_ns;
 		}
 		if (!(statp->options & RES_IGNTC) && anhp->tc) {

Modified: trunk/libc/sysdeps/i386/configure
==============================================================================
--- trunk/libc/sysdeps/i386/configure (original)
+++ trunk/libc/sysdeps/i386/configure Sat Mar 13 10:20:12 2010
@@ -637,3 +637,22 @@
 _ACEOF
 
 fi
+
+{ $as_echo "$as_me:$LINENO: checking for assembler -mtune=i686 support" >&5
+$as_echo_n "checking for assembler -mtune=i686 support... " >&6; }
+if test "${libc_cv_as_i686+set}" = set; then
+  $as_echo_n "(cached) " >&6
+else
+  if { ac_try='${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  libc_cv_as_i686=yes
+else
+  libc_cv_as_i686=no
+fi
+fi
+{ $as_echo "$as_me:$LINENO: result: $libc_cv_as_i686" >&5
+$as_echo "$libc_cv_as_i686" >&6; }

Modified: trunk/libc/sysdeps/i386/configure.in
==============================================================================
--- trunk/libc/sysdeps/i386/configure.in (original)
+++ trunk/libc/sysdeps/i386/configure.in Sat Mar 13 10:20:12 2010
@@ -47,3 +47,11 @@
 if test $libc_cv_cc_sse4 = yes; then
   AC_DEFINE(HAVE_SSE4_SUPPORT)
 fi
+
+dnl Check if -Wa,-mtune=i686 works.
+AC_CACHE_CHECK(for assembler -mtune=i686 support, libc_cv_as_i686, [dnl
+if AC_TRY_COMMAND([${CC-cc} -Wa,-mtune=i686 -xc /dev/null -S -o /dev/null]); then
+  libc_cv_as_i686=yes
+else
+  libc_cv_as_i686=no
+fi])

Modified: trunk/libc/sysdeps/i386/fpu/fegetenv.c
==============================================================================
--- trunk/libc/sysdeps/i386/fpu/fegetenv.c (original)
+++ trunk/libc/sysdeps/i386/fpu/fegetenv.c Sat Mar 13 10:20:12 2010
@@ -40,4 +40,5 @@
 compat_symbol (libm, BP_SYM (__old_fegetenv), BP_SYM (fegetenv), GLIBC_2_1);
 #endif
 
+libm_hidden_ver (__fegetenv, fegetenv)
 versioned_symbol (libm, BP_SYM (__fegetenv), BP_SYM (fegetenv), GLIBC_2_2);

Modified: trunk/libc/sysdeps/i386/i686/Makefile
==============================================================================
--- trunk/libc/sysdeps/i386/i686/Makefile (original)
+++ trunk/libc/sysdeps/i386/i686/Makefile Sat Mar 13 10:20:12 2010
@@ -9,3 +9,19 @@
 ifeq ($(subdir),string)
 sysdep_routines += cacheinfo
 endif
+
+ifeq (yes,$(config-asflags-i686))
+CFLAGS-.o += -Wa,-mtune=i686
+CFLAGS-.os += -Wa,-mtune=i686
+CFLAGS-.op += -Wa,-mtune=i686
+CFLAGS-.og += -Wa,-mtune=i686
+CFLAGS-.ob += -Wa,-mtune=i686
+CFLAGS-.oS += -Wa,-mtune=i686
+
+ASFLAGS-.o += -Wa,-mtune=i686
+ASFLAGS-.os += -Wa,-mtune=i686
+ASFLAGS-.op += -Wa,-mtune=i686
+ASFLAGS-.og += -Wa,-mtune=i686
+ASFLAGS-.ob += -Wa,-mtune=i686
+ASFLAGS-.oS += -Wa,-mtune=i686
+endif

Modified: trunk/libc/sysdeps/i386/i686/multiarch/Makefile
==============================================================================
--- trunk/libc/sysdeps/i386/i686/multiarch/Makefile (original)
+++ trunk/libc/sysdeps/i386/i686/multiarch/Makefile Sat Mar 13 10:20:12 2010
@@ -7,7 +7,9 @@
 sysdep_routines += bzero-sse2 memset-sse2 memcpy-ssse3 mempcpy-ssse3 \
 		   memmove-ssse3 memcpy-ssse3-rep mempcpy-ssse3-rep \
 		   memmove-ssse3-rep bcopy-ssse3 bcopy-ssse3-rep \
-		   memset-sse2-rep bzero-sse2-rep
+		   memset-sse2-rep bzero-sse2-rep strcmp-ssse3 \
+		   strcmp-sse4 strncmp-c strncmp-ssse3 strncmp-sse4 \
+		   memcmp-ssse3 memcmp-sse4
 ifeq (yes,$(config-cflags-sse4))
 sysdep_routines += strcspn-c strpbrk-c strspn-c strstr-c strcasestr-c
 CFLAGS-strcspn-c.c += -msse4

Modified: trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S
==============================================================================
--- trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S (original)
+++ trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3-rep.S Sat Mar 13 10:20:12 2010
@@ -127,10 +127,8 @@
 	cmp	%eax, %edx
 	jb	L(copy_forward)
 	je	L(fwd_write_0bytes)
-	cmp	$32, %ecx
-	jge	L(memmove_bwd)
-	jmp	L(bk_write_less32bytes_2)
-L(memmove_bwd):
+	cmp	$48, %ecx
+	jb	L(bk_write_less48bytes)
 	add	%ecx, %eax
 	cmp	%eax, %edx
 	movl	SRC(%esp), %eax
@@ -139,12 +137,12 @@
 L(copy_forward):
 #endif
 	cmp	$48, %ecx
-	jge	L(48bytesormore)
+	jae	L(48bytesormore)
 
 L(fwd_write_less32bytes):
 #ifndef USE_AS_MEMMOVE
 	cmp	%dl, %al
-	jl	L(bk_write)
+	jb	L(bk_write)
 #endif
 	add	%ecx, %edx
 	add	%ecx, %eax
@@ -162,6 +160,7 @@
 	movl	%edx, %edi
 	and	$-16, %edx
 	PUSH (%esi)
+	cfi_remember_state
 	add	$16, %edx
 	movl	%edi, %esi
 	sub	%edx, %edi
@@ -181,7 +180,7 @@
 #endif
 
 	mov	%eax, %edi
-	jge	L(large_page)
+	jae	L(large_page)
 	and	$0xf, %edi
 	jz	L(shl_0)
 
@@ -201,7 +200,7 @@
 	movdqa	%xmm0, (%edx, %edi)
 	movdqa	%xmm1, 16(%edx, %edi)
 	lea	32(%edi), %edi
-	jl	L(shl_0_end)
+	jb	L(shl_0_end)
 
 	movdqa	(%eax, %edi), %xmm0
 	movdqa	16(%eax, %edi), %xmm1
@@ -209,7 +208,7 @@
 	movdqa	%xmm0, (%edx, %edi)
 	movdqa	%xmm1, 16(%edx, %edi)
 	lea	32(%edi), %edi
-	jl	L(shl_0_end)
+	jb	L(shl_0_end)
 
 	movdqa	(%eax, %edi), %xmm0
 	movdqa	16(%eax, %edi), %xmm1
@@ -217,7 +216,7 @@
 	movdqa	%xmm0, (%edx, %edi)
 	movdqa	%xmm1, 16(%edx, %edi)
 	lea	32(%edi), %edi
-	jl	L(shl_0_end)
+	jb	L(shl_0_end)
 
 	movdqa	(%eax, %edi), %xmm0
 	movdqa	16(%eax, %edi), %xmm1
@@ -234,6 +233,8 @@
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 L(shl_0_gobble):
 
 #ifdef DATA_CACHE_SIZE_HALF
@@ -251,8 +252,8 @@
 	shr	$3, %esi
 	sub	%esi, %edi
 	cmp	%edi, %ecx
-	jge	L(shl_0_gobble_mem_start)
-	lea	-128(%ecx), %ecx
+	jae	L(shl_0_gobble_mem_start)
+	sub	$128, %ecx
 	ALIGN (4)
 L(shl_0_gobble_cache_loop):
 	movdqa	(%eax), %xmm0
@@ -275,11 +276,10 @@
 	movaps	%xmm7, 0x70(%edx)
 	lea	0x80(%edx), %edx
 
-	jge	L(shl_0_gobble_cache_loop)
-L(shl_0_gobble_cache_loop_tail):
-	cmp	$-0x40, %ecx
-	lea	0x80(%ecx), %ecx
-	jl	L(shl_0_cache_less_64bytes)
+	jae	L(shl_0_gobble_cache_loop)
+	add	$0x80, %ecx
+	cmp	$0x40, %ecx
+	jb	L(shl_0_cache_less_64bytes)
 
 	movdqa	(%eax), %xmm0
 	sub	$0x40, %ecx
@@ -297,7 +297,7 @@
 	add	$0x40, %edx
 L(shl_0_cache_less_64bytes):
 	cmp	$0x20, %ecx
-	jl	L(shl_0_cache_less_32bytes)
+	jb	L(shl_0_cache_less_32bytes)
 	movdqa	(%eax), %xmm0
 	sub	$0x20, %ecx
 	movdqa	0x10(%eax), %xmm1
@@ -307,7 +307,7 @@
 	add	$0x20, %edx
 L(shl_0_cache_less_32bytes):
 	cmp	$0x10, %ecx
-	jl	L(shl_0_cache_less_16bytes)
+	jb	L(shl_0_cache_less_16bytes)
 	sub	$0x10, %ecx
 	movdqa	(%eax), %xmm0
 	add	$0x10, %eax
@@ -320,12 +320,13 @@
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4)
 
-
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_0_gobble_mem_start):
 	cmp	%al, %dl
 	je	L(copy_page_by_rep)
-	lea	-128(%ecx), %ecx
+	sub	$128, %ecx
 L(shl_0_gobble_mem_loop):
 	prefetchnta 0x1c0(%eax)
 	prefetchnta 0x280(%eax)
@@ -352,10 +353,10 @@
 	movaps	%xmm7, 0x70(%edx)
 	lea	0x80(%edx), %edx
 
-	jge	L(shl_0_gobble_mem_loop)
-	cmp	$-0x40, %ecx
-	lea	0x80(%ecx), %ecx
-	jl	L(shl_0_mem_less_64bytes)
+	jae	L(shl_0_gobble_mem_loop)
+	add	$0x80, %ecx
+	cmp	$0x40, %ecx
+	jb	L(shl_0_mem_less_64bytes)
 
 	movdqa	(%eax), %xmm0
 	sub	$0x40, %ecx
@@ -373,7 +374,7 @@
 	add	$0x40, %edx
 L(shl_0_mem_less_64bytes):
 	cmp	$0x20, %ecx
-	jl	L(shl_0_mem_less_32bytes)
+	jb	L(shl_0_mem_less_32bytes)
 	movdqa	(%eax), %xmm0
 	sub	$0x20, %ecx
 	movdqa	0x10(%eax), %xmm1
@@ -383,7 +384,7 @@
 	add	$0x20, %edx
 L(shl_0_mem_less_32bytes):
 	cmp	$0x10, %ecx
-	jl	L(shl_0_mem_less_16bytes)
+	jb	L(shl_0_mem_less_16bytes)
 	sub	$0x10, %ecx
 	movdqa	(%eax), %xmm0
 	add	$0x10, %eax
@@ -396,14 +397,15 @@
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4)
 
-
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_1):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-1(%eax), %eax
+	sub	$1, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_1_loop):
@@ -418,7 +420,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_1_end)
+	jb	L(shl_1_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -433,20 +435,22 @@
 	jae	L(shl_1_loop)
 
 L(shl_1_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	1(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_2):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-2(%eax), %eax
+	sub	$2, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_2_loop):
@@ -461,7 +465,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_2_end)
+	jb	L(shl_2_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -476,20 +480,22 @@
 	jae	L(shl_2_loop)
 
 L(shl_2_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	2(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_3):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-3(%eax), %eax
+	sub	$3, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_3_loop):
@@ -504,7 +510,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_3_end)
+	jb	L(shl_3_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -519,20 +525,22 @@
 	jae	L(shl_3_loop)
 
 L(shl_3_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	3(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_4):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-4(%eax), %eax
+	sub	$4, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_4_loop):
@@ -547,7 +555,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_4_end)
+	jb	L(shl_4_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -562,20 +570,22 @@
 	jae	L(shl_4_loop)
 
 L(shl_4_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	4(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_5):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-5(%eax), %eax
+	sub	$5, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_5_loop):
@@ -590,7 +600,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_5_end)
+	jb	L(shl_5_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -605,21 +615,22 @@
 	jae	L(shl_5_loop)
 
 L(shl_5_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	5(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
-
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_6):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-6(%eax), %eax
+	sub	$6, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_6_loop):
@@ -634,7 +645,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_6_end)
+	jb	L(shl_6_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -649,20 +660,22 @@
 	jae	L(shl_6_loop)
 
 L(shl_6_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	6(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_7):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-7(%eax), %eax
+	sub	$7, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_7_loop):
@@ -677,7 +690,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_7_end)
+	jb	L(shl_7_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -692,20 +705,22 @@
 	jae	L(shl_7_loop)
 
 L(shl_7_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	7(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_8):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-8(%eax), %eax
+	sub	$8, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_8_loop):
@@ -720,7 +735,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_8_end)
+	jb	L(shl_8_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -735,20 +750,22 @@
 	jae	L(shl_8_loop)
 
 L(shl_8_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	8(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_9):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-9(%eax), %eax
+	sub	$9, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_9_loop):
@@ -763,7 +780,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_9_end)
+	jb	L(shl_9_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -778,20 +795,22 @@
 	jae	L(shl_9_loop)
 
 L(shl_9_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	9(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_10):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-10(%eax), %eax
+	sub	$10, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_10_loop):
@@ -806,7 +825,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_10_end)
+	jb	L(shl_10_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -821,20 +840,22 @@
 	jae	L(shl_10_loop)
 
 L(shl_10_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	10(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_11):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-11(%eax), %eax
+	sub	$11, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_11_loop):
@@ -849,7 +870,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_11_end)
+	jb	L(shl_11_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -864,20 +885,22 @@
 	jae	L(shl_11_loop)
 
 L(shl_11_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	11(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_12):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-12(%eax), %eax
+	sub	$12, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_12_loop):
@@ -892,7 +915,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_12_end)
+	jb	L(shl_12_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -907,20 +930,22 @@
 	jae	L(shl_12_loop)
 
 L(shl_12_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	12(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_13):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-13(%eax), %eax
+	sub	$13, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_13_loop):
@@ -935,7 +960,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_13_end)
+	jb	L(shl_13_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -950,20 +975,22 @@
 	jae	L(shl_13_loop)
 
 L(shl_13_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	13(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_14):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-14(%eax), %eax
+	sub	$14, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_14_loop):
@@ -978,7 +1005,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_14_end)
+	jb	L(shl_14_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -993,21 +1020,22 @@
 	jae	L(shl_14_loop)
 
 L(shl_14_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	14(%edi, %eax), %eax
 	POP (%edi)
 	BRANCH_TO_JMPTBL_ENTRY_TAIL(L(table_48bytes_fwd), %ecx, 4)
 
-
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_15):
 	BRANCH_TO_JMPTBL_ENTRY_VALUE(L(table_48bytes_fwd))
-	lea	-15(%eax), %eax
+	sub	$15, %eax
 	movaps	(%eax), %xmm1
 	xor	%edi, %edi
-	lea	-32(%ecx), %ecx
+	sub	$32, %ecx
 	movdqu	%xmm0, (%esi)
 	POP (%esi)
 L(shl_15_loop):
@@ -1022,7 +1050,7 @@
 	movdqa	%xmm2, -32(%edx, %edi)
 	movdqa	%xmm3, -16(%edx, %edi)
 
-	jl	L(shl_15_end)
+	jb	L(shl_15_end)
 
 	movdqa	16(%eax, %edi), %xmm2
 	sub	$32, %ecx
@@ -1037,7 +1065,7 @@
 	jae	L(shl_15_loop)
 
 L(shl_15_end):
-	lea	32(%ecx), %ecx
+	add	$32, %ecx
 	add	%ecx, %edi
 	add	%edi, %edx
 	lea	15(%edi, %eax), %eax
@@ -1241,20 +1269,23 @@
 	movl	DEST(%esp), %eax
 # endif
 #endif
-	RETURN
-
+	RETURN_END
+
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(large_page):
 	movdqu	(%eax), %xmm1
-	lea	16(%eax), %eax
 	movdqu	%xmm0, (%esi)
 	movntdq	%xmm1, (%edx)
-	lea	16(%edx), %edx
+	add	$0x10, %eax
+	add	$0x10, %edx
+	sub	$0x10, %ecx
 	cmp	%al, %dl
 	je	L(copy_page_by_rep)
 L(large_page_loop_init):
 	POP (%esi)
-	lea	-0x90(%ecx), %ecx
+	sub	$0x80, %ecx
 	POP (%edi)
 L(large_page_loop):
 	prefetchnta	0x1c0(%eax)
@@ -1280,9 +1311,9 @@
 	movntdq	%xmm7, 0x70(%edx)
 	lea	0x80(%edx), %edx
 	jae	L(large_page_loop)
-	cmp	$-0x40, %ecx
-	lea	0x80(%ecx), %ecx
-	jl	L(large_page_less_64bytes)
+	add	$0x80, %ecx
+	cmp	$0x40, %ecx
+	jb	L(large_page_less_64bytes)
 
 	movdqu	(%eax), %xmm0
 	movdqu	0x10(%eax), %xmm1
@@ -1298,7 +1329,7 @@
 	sub	$0x40, %ecx
 L(large_page_less_64bytes):
 	cmp	$32, %ecx
-	jl	L(large_page_less_32bytes)
+	jb	L(large_page_less_32bytes)
 	movdqu	(%eax), %xmm0
 	movdqu	0x10(%eax), %xmm1
 	lea	0x20(%eax), %eax
@@ -1312,6 +1343,8 @@
 	sfence
 	BRANCH_TO_JMPTBL_ENTRY (L(table_48bytes_fwd), %ecx, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(copy_page_by_rep):
 	mov	%eax, %esi
@@ -1658,18 +1691,18 @@
 L(copy_backward):
 	PUSH (%esi)
 	movl	%eax, %esi
-	lea	(%ecx,%edx,1),%edx
-	lea	(%ecx,%esi,1),%esi
+	add	%ecx, %edx
+	add	%ecx, %esi
 	testl	$0x3, %edx
 	jnz	L(bk_align)
 
 L(bk_aligned_4):
 	cmp	$64, %ecx
-	jge	L(bk_write_more64bytes)
+	jae	L(bk_write_more64bytes)
 
 L(bk_write_64bytesless):
 	cmp	$32, %ecx
-	jl	L(bk_write_less32bytes)
+	jb	L(bk_write_less32bytes)
 
 L(bk_write_more32bytes):
 	/* Copy 32 bytes at a time.  */
@@ -1698,13 +1731,14 @@
 	sub	%ecx, %edx
 	sub	%ecx, %eax
 	POP (%esi)
-L(bk_write_less32bytes_2):
+L(bk_write_less48bytes):
 	BRANCH_TO_JMPTBL_ENTRY (L(table_48_bytes_bwd), %ecx, 4)
 
+	CFI_PUSH (%esi)
 	ALIGN (4)
 L(bk_align):
 	cmp	$8, %ecx
-	jle	L(bk_write_less32bytes)
+	jbe	L(bk_write_less32bytes)
 	testl	$1, %edx
 	/* We get here only if (EDX & 3 ) != 0 so if (EDX & 1) ==0,
 	   then (EDX & 2) must be != 0.  */
@@ -1760,7 +1794,7 @@
 
 L(bk_ssse3_cpy_pre):
 	cmp	$64, %ecx
-	jl	L(bk_write_more32bytes)
+	jb	L(bk_write_more32bytes)
 
 L(bk_ssse3_cpy):
 	sub	$64, %esi
@@ -1775,7 +1809,7 @@
 	movdqu	(%esi), %xmm0
 	movdqa	%xmm0, (%edx)
 	cmp	$64, %ecx
-	jge	L(bk_ssse3_cpy)
+	jae	L(bk_ssse3_cpy)
 	jmp	L(bk_write_64bytesless)
 
 #endif

Modified: trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3.S
==============================================================================
--- trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3.S (original)
+++ trunk/libc/sysdeps/i386/i686/multiarch/memcpy-ssse3.S Sat Mar 13 10:20:12 2010
@@ -128,7 +128,7 @@
 	jb	L(copy_forward)
 	je	L(fwd_write_0bytes)
 	cmp	$32, %ecx
-	jge	L(memmove_bwd)
+	jae	L(memmove_bwd)
 	jmp	L(bk_write_less32bytes_2)
 L(memmove_bwd):
 	add	%ecx, %eax
@@ -139,12 +139,12 @@
 L(copy_forward):
 #endif
 	cmp	$48, %ecx
-	jge	L(48bytesormore)
+	jae	L(48bytesormore)
 
 L(fwd_write_less32bytes):
 #ifndef USE_AS_MEMMOVE
 	cmp	%dl, %al
-	jl	L(bk_write)
+	jb	L(bk_write)
 #endif
 	add	%ecx, %edx
 	add	%ecx, %eax
@@ -162,6 +162,7 @@
 	movl	%edx, %edi
 	and	$-16, %edx
 	PUSH (%esi)
+	cfi_remember_state
 	add	$16, %edx
 	movl	%edi, %esi
 	sub	%edx, %edi
@@ -181,12 +182,14 @@
 #endif
 
 	mov	%eax, %edi
-	jge	L(large_page)
+	jae	L(large_page)
 	and	$0xf, %edi
 	jz	L(shl_0)
 
 	BRANCH_TO_JMPTBL_ENTRY (L(shl_table), %edi, 4)
 
+	cfi_restore_state
+	cfi_remember_state
 	ALIGN (4)
 L(shl_0):
 	movdqu	%xmm0, (%esi)
@@ -202,7 +205,7 @@
 	movdqa	%xmm0, (%edx, %edi)
 	movdqa	%xmm1, 16(%edx, %edi)
 	lea	32(%edi), %edi

[... 4782 lines stripped ...]