about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-03-14 17:22:27 +0000
committerJakub Jelinek <jakub@redhat.com>2008-03-14 17:22:27 +0000
commitb87b7fc3e6e41cf8006fb2341c236a46f6d8bdd4 (patch)
tree8b042dd05d766dd46dfa953aec240207eae14208
parent5c25449dd9fd706f79ee6d92019f28044d9270fa (diff)
downloadglibc-b87b7fc3e6e41cf8006fb2341c236a46f6d8bdd4.tar.gz
glibc-b87b7fc3e6e41cf8006fb2341c236a46f6d8bdd4.tar.xz
glibc-b87b7fc3e6e41cf8006fb2341c236a46f6d8bdd4.zip
Updated to fedora-glibc-20080310T1651
-rw-r--r--ChangeLog122
-rw-r--r--dlfcn/dlinfo.c4
-rw-r--r--elf/Makefile7
-rw-r--r--elf/Versions1
-rw-r--r--elf/dl-iteratephdr.c4
-rw-r--r--elf/dl-sysdep.c3
-rw-r--r--elf/dl-tls.c3
-rw-r--r--elf/rtld.c8
-rw-r--r--fedora/branch.mk4
-rw-r--r--fedora/glibc.spec.in5
-rw-r--r--hurd/hurdsig.c9
-rw-r--r--inet/inet6_opt.c10
-rw-r--r--io/tst-fchownat.c15
-rw-r--r--localedata/ChangeLog10
-rw-r--r--localedata/locales/es_CR4
-rw-r--r--localedata/locales/pt_PT2
-rw-r--r--nptl/ChangeLog6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h6
-rw-r--r--po/be.po24
-rw-r--r--po/bg.po22
-rw-r--r--po/ca.po22
-rw-r--r--po/cs.po22
-rw-r--r--po/da.po22
-rw-r--r--po/de.po22
-rw-r--r--po/es.po22
-rw-r--r--po/fr.po22
-rw-r--r--po/hr.po22
-rw-r--r--po/ko.po22
-rw-r--r--po/nl.po22
-rw-r--r--po/rw.po22
-rw-r--r--po/sk.po22
-rw-r--r--po/sv.po22
-rw-r--r--po/tr.po22
-rw-r--r--po/zh_CN.po22
-rw-r--r--po/zh_TW.po22
-rw-r--r--posix/getopt.c65
-rw-r--r--stdlib/Makefile4
-rw-r--r--stdlib/strtod_l.c23
-rw-r--r--stdlib/tens_in_limb.c31
-rw-r--r--stdlib/tst-strtod6.c53
-rw-r--r--sysdeps/generic/ldsodefs.h8
-rw-r--r--sysdeps/ia64/ieee754.h8
-rw-r--r--sysdeps/ieee754/ieee754.h8
-rw-r--r--sysdeps/mach/hurd/i386/trampoline.c6
-rw-r--r--sysdeps/unix/sysv/linux/bits/posix_opt.h7
-rw-r--r--sysdeps/unix/sysv/linux/dl-osinfo.h97
-rw-r--r--sysdeps/unix/sysv/linux/dl-sysdep.c104
-rw-r--r--sysdeps/unix/sysv/linux/dl-sysdep.h11
-rw-r--r--sysdeps/unix/sysv/linux/fpathconf.c5
-rw-r--r--sysdeps/unix/sysv/linux/pathconf.c48
-rw-r--r--sysdeps/unix/sysv/linux/pathconf.h13
-rw-r--r--sysdeps/unix/sysv/linux/sysconf.c20
-rw-r--r--sysdeps/x86_64/cacheinfo.c10
-rw-r--r--sysdeps/x86_64/memset.S1365
-rw-r--r--sysdeps/x86_64/rtld-memset.c1
55 files changed, 1997 insertions, 489 deletions
diff --git a/ChangeLog b/ChangeLog
index 584a44c50d..bbb9e35712 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,121 @@
+2008-03-09  Andreas Jaeger  <aj@suse.de>
+
+	[BZ #5753]
+	* sysdeps/ia64/ieee754.h: Use protected namespace
+	__BIG_ENDIAN/__LITTLE_ENDIAN.
+	* sysdeps/ieee754/ieee754.h: Likewise.
+	Patch by Aurelien Jarno <aurelien@aurel32.net>.
+
+2008-03-08  Roland McGrath  <roland@frob.com>
+
+	* hurd/hurdsig.c (_hurd_internal_post_signal): When normal rules would
+	ignore a signal that came from a machine exception, treat it as a
+	fatal core-dump signal instead.
+	Reported by Samuel Thibault <samuel.thibault@ens-lyon.org>.
+
+	* sysdeps/mach/hurd/i386/trampoline.c (_hurd_setup_sighandler):
+	Clear DF bit in thread state's eflags.
+	Reported by Samuel Thibault <samuel.thibault@ens-lyon.org>.
+
+2008-03-08  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #5774]
+	* stdlib/strtod_l.c (____STRTOF_INTERNAL): Consume closing brace
+	of NAN(...) sequence.
+	* stdlib/Makefile (tests): Add tst-strtod6.
+	* stdlib/tst-strtod6.c: New file.
+
+	* inet/inet6_opt.c (inet6_opt_init): Check extlen for overflow.
+
+	[BZ #5762]
+	* posix/getopt.c (_getopt_internal_r): Clarify error message by
+	putting offending option character in quotes.  Clean up error
+	messages.
+	* po/be.po: Adjust msgstr in translation file.
+	* po/bg.po: Likewise.
+	* po/ca.po: Likewise.
+	* po/cs.po: Likewise.
+	* po/da.po: Likewise.
+	* po/de.po: Likewise.
+	* po/es.po: Likewise.
+	* po/fr.po: Likewise.
+	* po/hr.po: Likewise.
+	* po/ko.po: Likewise.
+	* po/nl.po: Likewise.
+	* po/rw.po: Likewise.
+	* po/sk.po: Likewise.
+	* po/sv.po: Likewise.
+	* po/tr.po: Likewise.
+	* po/zh_CN.po: Likewise.
+	* po/zh_TW.po: Likewise.
+
+	[BZ #5760]
+	* inet/inet6_opt.c (inet6_opt_init): Fix ip6h_len computation.
+	Patch by Roland Bless <roland@bless.de>.
+
+	* sysdeps/unix/sysv/linux/dl-sysdep.c: Avoid unnecessary code for
+	.o file.
+	* elf/Makefile (routines): Add dl-sysdep.
+	(elide-routines.os): Likewise.
+
+2008-03-07  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #5786]
+	* elf/dl-sysdep.c: Undefine ROUND after use.
+	* sysdeps/generic/ldsodefs.h [HAVE_DL_DISCOVER_OSVERSION]
+	(struct rtld_global_ro): Add _dl_tls_get_addr_soft element.
+	* elf/rtld.c (rtld_global_ro): Initialize _dl_discover_osversion.
+	* sysdeps/unix/sysv/linux/dl-osinfo.h: Move _dl_discover_osversion
+	to ...
+	* sysdeps/unix/sysv/linux/dl-sysdep.c: ...here.
+	* sysdeps/unix/sysv/linux/dl-sysdep.h: Declare _dl_discover_osversion
+	if necessary.
+	* sysdeps/unix/sysv/linux/sysconf.c: Handle _SC_ARG_MAX here.
+
+	* sysdeps/generic/ldsodefs.h (struct rtld_global_ro): Add
+	_dl_tls_get_addr_soft element.
+	* elf/rtld.c (rtld_global_ro): Initialize _dl_tls_get_addr_soft.
+	* elf/Versions (ld): Don't export _dl_tls_get_addr_soft.
+	* dlfcn/dlinfo.c (dlinfo_doit): Access dl_tls_get_addr_soft through
+	GLRO.
+	* elf/dl-iteratephdr.c (__dl_iterate_phdr): Likewise.
+	* elf/dl-tls.c (_dl_tls_get_addr_soft): Use attribute_hidden instead
+	of internal_function.
+
+	* stdlib/Makefile (aux): Add tens_in_limb.
+	* stdlib/strtod_l.c: Move _tens_in_limb definition to...
+	* stdlib/tens_in_limb.c: ...here.  New file.
+
+	[BZ #5778]
+	* sysdeps/unix/sysv/linux/pathconf.h: Declare
+	__statfs_chown_restricted.
+	* sysdeps/unix/sysv/linux/fpathconf.c: Call __statfs_chown_restricted
+	for _PC_CHOWN_RESTRICTED.
+	* sysdeps/unix/sysv/linux/pathconf.c: Likewise.
+	Implement __statfs_chown_restricted.
+	* sysdeps/unix/sysv/linux/bits/posix_opt.h: Change
+	_POSIX_CHOWN_RESTRICTED value to zero.
+	* io/tst-fchownat.c: Correctly handle _POSIX_CHOWN_RESTRICTED
+	defined to zero.
+
+	* sysdeps/x86_64/rtld-memset.c: New file.
+
+2008-02-26  Harsha Jagasia  <harsha.jagasia@amd.com>
+
+	* sysdeps/x86_64/cacheinfo.c (NOT_USED_RIGHT_NOW): Remove ifdef guards.
+
+	* sysdeps/x86_64/memset.S: Rewrite non-SSE code path as tuned for AMD
+	Barcelona machine.  Make default fall through branch of
+	__x86_64_preferred_memory_instruction check as the integer code path.
+
+2007-10-15  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* sysdeps/x86_64/cacheinfo.c
+	(__x86_64_preferred_memory_instruction): New variable.
+	(init_cacheinfo): Initialize __x86_64_preferred_memory_instruction.
+
+	* sysdeps/x86_64/memset.S: Rewrite.
+
 2008-03-04  Jakub Jelinek  <jakub@redhat.com>
 
 	* include/stdio.h (__asprintf_chk, __dprintf_chk,
@@ -309,7 +427,7 @@
 	* stdlib/Makefile: Add rules to build and run tst-makecontext2.
 	* stdlib/tst-makecontext2.c: New test.
 
-008-01-08  Jakub Jelinek  <jakub@redhat.com>
+2008-01-08  Jakub Jelinek  <jakub@redhat.com>
 
 	* iconv/loop.c (UPDATE_PARAMS): Define to empty statement if not
 	defined.
@@ -392,7 +510,7 @@
 
 2007-12-17  Ulrich Drepper  <drepper@redhat.com>
 
-	* malloc/malloc.c (public_cALLOc): For arena other than
+	* malloc/malloc.c (public_cALLOc): For arenas other than
 	main_arena, count all bytes inside the mprotect_size range of the
 	heap as uninitialized.
 
diff --git a/dlfcn/dlinfo.c b/dlfcn/dlinfo.c
index b3a3e13899..e8585ea989 100644
--- a/dlfcn/dlinfo.c
+++ b/dlfcn/dlinfo.c
@@ -1,5 +1,5 @@
 /* dlinfo -- Get information from the dynamic linker.
-   Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2006, 2007, 2008 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
@@ -101,7 +101,7 @@ RTLD_SELF used in code not dynamically loaded"));
       {
 	void *data = NULL;
 	if (l->l_tls_modid != 0)
-	  data = _dl_tls_get_addr_soft (l);
+	  data = GLRO(dl_tls_get_addr_soft) (l);
 	*(void **) args->arg = data;
 	break;
       }
diff --git a/elf/Makefile b/elf/Makefile
index 4230b55df6..2dd2424b28 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1995-2004, 2005, 2006, 2007 Free Software Foundation, Inc.
+# Copyright (C) 1995-2007, 2008 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
@@ -23,7 +23,7 @@ subdir		:= elf
 headers		= elf.h bits/elfclass.h link.h bits/link.h
 routines	= $(dl-routines) dl-support dl-iteratephdr \
 		  dl-addr enbl-secure dl-profstub \
-		  dl-origin dl-libc dl-sym dl-tsd
+		  dl-origin dl-libc dl-sym dl-tsd dl-sysdep
 
 # The core dynamic linking functions are in libc for the static and
 # profiled libraries.
@@ -33,7 +33,8 @@ dl-routines	= $(addprefix dl-,load cache lookup object reloc deps \
 				  execstack caller open close trampoline)
 all-dl-routines = $(dl-routines) $(sysdep-dl-routines)
 # But they are absent from the shared libc, because that code is in ld.so.
-elide-routines.os = $(all-dl-routines) dl-support enbl-secure dl-origin
+elide-routines.os = $(all-dl-routines) dl-support enbl-secure dl-origin \
+		    dl-sysdep
 shared-only-routines += dl-caller
 
 # ld.so uses those routines, plus some special stuff for being the program
diff --git a/elf/Versions b/elf/Versions
index 967ebdb3a5..87e27c5a7a 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -57,7 +57,6 @@ ld {
     _dl_allocate_tls; _dl_deallocate_tls;
     _dl_get_tls_static_info; _dl_allocate_tls_init;
     _dl_tls_setup; _dl_rtld_di_serinfo;
-    _dl_tls_get_addr_soft;
     _dl_make_stack_executable;
     # Only here for gdb while a better method is developed.
     _dl_debug_state;
diff --git a/elf/dl-iteratephdr.c b/elf/dl-iteratephdr.c
index 55cf10852e..c49671583b 100644
--- a/elf/dl-iteratephdr.c
+++ b/elf/dl-iteratephdr.c
@@ -1,5 +1,5 @@
 /* Get loaded objects program headers.
-   Copyright (C) 2001,2002,2003,2004,2006,2007 Free Software Foundation, Inc.
+   Copyright (C) 2001-2004,2006,2007,2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Jakub Jelinek <jakub@redhat.com>, 2001.
 
@@ -72,7 +72,7 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
       info.dlpi_tls_data = NULL;
       info.dlpi_tls_modid = l->l_tls_modid;
       if (info.dlpi_tls_modid != 0)
-	info.dlpi_tls_data = _dl_tls_get_addr_soft (l);
+	info.dlpi_tls_data = GLRO(dl_tls_get_addr_soft) (l);
       ret = callback (&info, sizeof (struct dl_phdr_info), data);
       if (ret)
 	break;
diff --git a/elf/dl-sysdep.c b/elf/dl-sysdep.c
index 85e331a90f..dd55905e14 100644
--- a/elf/dl-sysdep.c
+++ b/elf/dl-sysdep.c
@@ -1,5 +1,5 @@
 /* Operating system support for run-time dynamic linker.  Generic Unix version.
-   Copyright (C) 1995-1998, 2000-2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-1998, 2000-2007, 2008 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
@@ -398,6 +398,7 @@ _dl_important_hwcaps (const char *platform, size_t platform_len, size_t *sz,
 		  }
 		note = ((const void *) (note + 1)
 			+ ROUND (note->vendorlen) + ROUND (note->datalen));
+#undef ROUND
 	      }
 	    if (dsocaps != NULL)
 	      break;
diff --git a/elf/dl-tls.c b/elf/dl-tls.c
index 3059481043..76a3f25c0f 100644
--- a/elf/dl-tls.c
+++ b/elf/dl-tls.c
@@ -1,5 +1,5 @@
 /* Thread-local storage handling in the ELF dynamic linker.  Generic version.
-   Copyright (C) 2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 2002,2003,2004,2005,2006,2008 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
@@ -758,7 +758,6 @@ __tls_get_addr (GET_ADDR_ARGS)
 /* Look up the module's TLS block as for __tls_get_addr,
    but never touch anything.  Return null if it's not allocated yet.  */
 void *
-internal_function
 _dl_tls_get_addr_soft (struct link_map *l)
 {
   if (__builtin_expect (l->l_tls_modid == 0, 0))
diff --git a/elf/rtld.c b/elf/rtld.c
index 98817d9fa0..46bece7fa3 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -1,5 +1,5 @@
 /* Run time dynamic linker.
-   Copyright (C) 1995-2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-2006, 2007, 2008 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
@@ -161,7 +161,11 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
     ._dl_lookup_symbol_x = _dl_lookup_symbol_x,
     ._dl_check_caller = _dl_check_caller,
     ._dl_open = _dl_open,
-    ._dl_close = _dl_close
+    ._dl_close = _dl_close,
+    ._dl_tls_get_addr_soft = _dl_tls_get_addr_soft,
+#ifdef HAVE_DL_DISCOVER_OSVERSION
+    ._dl_discover_osversion = _dl_discover_osversion
+#endif
   };
 /* If we would use strong_alias here the compiler would see a
    non-hidden definition.  This would undo the effect of the previous
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 6d3081a4f9..31fb015b9a 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -3,5 +3,5 @@ glibc-branch := fedora
 glibc-base := HEAD
 DIST_BRANCH := devel
 COLLECTION := dist-f8
-fedora-sync-date := 2008-03-05 08:57 UTC
-fedora-sync-tag := fedora-glibc-20080305T0857
+fedora-sync-date := 2008-03-10 16:51 UTC
+fedora-sync-tag := fedora-glibc-20080310T1651
diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in
index e21f3f62d5..8c1a062f91 100644
--- a/fedora/glibc.spec.in
+++ b/fedora/glibc.spec.in
@@ -19,7 +19,7 @@
 Summary: The GNU libc libraries
 Name: glibc
 Version: @glibcversion@
-Release: 8
+Release: 10
 # GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries.
 # Things that are linked directly into dynamically linked programs
 # and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional
@@ -976,6 +976,9 @@ rm -f *.filelist*
 %endif
 
 %changelog
+* Fri Mar 14 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-10
+- update to trunk
+
 * Wed Mar  5 2008 Jakub Jelinek <jakub@redhat.com> 2.7.90-8
 - update to trunk
   - {,v}{as,d}printf and obstack_{,v}printf fortification (#435905)
diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c
index e12d19da12..27050c99d9 100644
--- a/hurd/hurdsig.c
+++ b/hurd/hurdsig.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991,92,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2005
+/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000,2001,2002,2005,2008
    	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -743,6 +743,11 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss,
       break;
 
     case ignore:
+      if (detail->exc)
+	/* Blocking or ignoring a machine exception is fatal.
+	   Otherwise we could just spin on the faulting instruction.  */
+	goto fatal;
+
       /* Nobody cares about this signal.  If there was a call to resume
 	 above in SIGCONT processing and we've left a thread suspended,
 	 now's the time to set it going. */
@@ -759,6 +764,8 @@ _hurd_internal_post_signal (struct hurd_sigstate *ss,
 	 Nothing to do but die; BSD gets SIGILL in this case.  */
       detail->code = signo;	/* XXX ? */
       signo = SIGILL;
+
+    fatal:
       act = core;
       /* FALLTHROUGH */
 
diff --git a/inet/inet6_opt.c b/inet/inet6_opt.c
index 17d3fee213..ccf7af5f61 100644
--- a/inet/inet6_opt.c
+++ b/inet/inet6_opt.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2006, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2006.
 
@@ -34,12 +34,16 @@ inet6_opt_init (void *extbuf, socklen_t extlen)
 {
   if (extbuf != NULL)
     {
-      if (extlen <= 0 || (extlen % 8) != 0)
+      if (extlen <= 0 || (extlen % 8) != 0 || extlen > 256 * 8)
 	return -1;
 
       /* Fill in the length in units of 8 octets.  */
       struct ip6_hbh *extp = (struct ip6_hbh *) extbuf;
-      extp->ip6h_len = extlen / 8;
+
+      /* RFC 2460 requires that the header extension length is the
+	 length of the option header in 8-byte units, not including
+	 the first 8 bytes.  Hence we have to subtract one.  */
+      extp->ip6h_len = extlen / 8 - 1;
     }
 
   return sizeof (struct ip6_hbh);
diff --git a/io/tst-fchownat.c b/io/tst-fchownat.c
index fd32ac9e6b..da8fd3b023 100644
--- a/io/tst-fchownat.c
+++ b/io/tst-fchownat.c
@@ -19,14 +19,17 @@ static int dir_fd;
 static void
 prepare (void)
 {
-#if _POSIX_CHOWN_RESTRICTED > 0
-  uid_t uid = getuid ();
-  if (uid != 0)
+#if _POSIX_CHOWN_RESTRICTED == 0
+  if (pathconf (test_dir, _PC_CHOWN_RESTRICTED) != 0)
+#endif
     {
-      puts ("need root privileges");
-      exit (0);
+      uid_t uid = getuid ();
+      if (uid != 0)
+	{
+	  puts ("need root privileges");
+	  exit (0);
+	}
     }
-#endif
 
   size_t test_dir_len = strlen (test_dir);
   static const char dir_name[] = "/tst-fchownat.XXXXXX";
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index 8da017d52b..6cf41833bf 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,13 @@
+2008-03-08  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #5602]
+	* locales/pt_PT: Fix mon_decimal_point.
+
+2008-03-07  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #5777]
+	* locales/es_CR: Define am/pm format.
+
 2008-03-04  Ulrich Drepper  <drepper@redhat.com>
 
 	* SUPPORTED (SUPPORTED-LOCALES): Add shs_CA.UTF-8.
diff --git a/localedata/locales/es_CR b/localedata/locales/es_CR
index aa335a2fe9..753b22b055 100644
--- a/localedata/locales/es_CR
+++ b/localedata/locales/es_CR
@@ -108,8 +108,8 @@ mon     "<U0065><U006E><U0065><U0072><U006F>";/
 d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
 d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
 t_fmt   "<U0025><U0054>"
-am_pm   "";""
-t_fmt_ampm ""
+am_pm   "<U0061><U002E><U006D><U002E>";"<U0070><U002E><U006D><U002E>"
+t_fmt_ampm "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0070>"
 date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
diff --git a/localedata/locales/pt_PT b/localedata/locales/pt_PT
index ceadccaee1..39ec101bd9 100644
--- a/localedata/locales/pt_PT
+++ b/localedata/locales/pt_PT
@@ -65,7 +65,7 @@ END LC_MESSAGES
 LC_MONETARY
 int_curr_symbol           "<U0045><U0055><U0052><U0020>"
 currency_symbol           "<U20AC>"
-mon_decimal_point         "<U0024>"
+mon_decimal_point         "<U002C>"
 mon_thousands_sep         "<U002E>"
 mon_grouping              3;3
 positive_sign             ""
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 1be97bab71..6d94c1ff4a 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,9 @@
+2008-03-07  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #5778]
+	* sysdeps/unix/sysv/linux/bits/posix_opt.h: Change
+	_POSIX_CHOWN_RESTRICTED value to zero.
+
 2008-01-31  Roland McGrath  <roland@redhat.com>
 
 	* Makefile (omit-deps): Variable removed.
diff --git a/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h b/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
index dd0798a073..06d35ceb16 100644
--- a/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
+++ b/nptl/sysdeps/unix/sysv/linux/bits/posix_opt.h
@@ -1,5 +1,5 @@
 /* Define POSIX options for Linux.
-   Copyright (C) 1996-2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1996-2004, 2006, 2008 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
@@ -47,8 +47,8 @@
 /* Setting of memory protections is supported.  */
 #define	_POSIX_MEMORY_PROTECTION	200112L
 
-/* Only root can change owner of file.  */
-#define	_POSIX_CHOWN_RESTRICTED	1
+/* Some filesystems allow all users to change file ownership.  */
+#define	_POSIX_CHOWN_RESTRICTED	0
 
 /* `c_cc' member of 'struct termios' structure can be disabled by
    using the value _POSIX_VDISABLE.  */
diff --git a/po/be.po b/po/be.po
index b69264a1ee..fb9c3e53f4 100644
--- a/po/be.po
+++ b/po/be.po
@@ -3448,59 +3448,59 @@ msgstr "ÐераÑÐ¿Ð°Ð·Ð½Ð°Ð½Ð°Ñ Ð¿ÐµÑ€Ð°Ð¼ÐµÐ½Ð½Ð°Ñ \"%s\""
 
 #: posix/getopt.c:692 posix/getopt.c:704
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr ""
 
 #: posix/getopt.c:737 posix/getopt.c:741
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr ""
 
 #: posix/getopt.c:750 posix/getopt.c:755
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr ""
 
 #: posix/getopt.c:791 posix/getopt.c:804 posix/getopt.c:1093
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr ""
 
 #: posix/getopt.c:842 posix/getopt.c:845
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr ""
 
 #: posix/getopt.c:853 posix/getopt.c:856
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr ""
 
 #: posix/getopt.c:903 posix/getopt.c:906
 #, c-format
-msgid "%s: illegal option -- %c\n"
-msgstr "%s: недапушчальны выраб -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
+msgstr "%s: недапушчальны выраб -- '%c'\n"
 
 #: posix/getopt.c:912 posix/getopt.c:915
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr ""
 
 #: posix/getopt.c:962 posix/getopt.c:973 posix/getopt.c:1159
 #: posix/getopt.c:1172
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr ""
 
 #: posix/getopt.c:1025 posix/getopt.c:1036
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr ""
 
 #: posix/getopt.c:1060 posix/getopt.c:1072
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr ""
 
 #: posix/regcomp.c:136
diff --git a/po/bg.po b/po/bg.po
index 279476dd29..a8bcbb3b8d 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -4210,59 +4210,59 @@ msgstr ""
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr ""
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr ""
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr ""
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr ""
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr ""
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr ""
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr ""
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr ""
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr ""
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr ""
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr ""
 
 #: posix/regcomp.c:135
diff --git a/po/ca.po b/po/ca.po
index add3c495e7..98b9bd65ac 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -4497,59 +4497,59 @@ msgstr "la variable «%s» no és reconeguda"
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: l’opció «%s» és ambígua\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: l’opció «--%s» no admet arguments\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: l’opció «%c%s» no admet arguments\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: l’opció «%s» necessita un argument\n"
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: l’opció «--%s» no és reconeguda\n"
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: l’opció «%c%s» no és reconeguda\n"
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: no es permet l’opció «%c»\n"
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: l’opció «%c» no és vàlida\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: l’opció «%c» necessita un argument\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: l’opció «-W %s» és ambígua\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: l’opció «-W %s» no admet arguments\n"
 
 #: posix/regcomp.c:135
diff --git a/po/cs.po b/po/cs.po
index cd34a0349b..d1d3d72aa9 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -4359,35 +4359,35 @@ msgstr "Neznámá proměnná „%s“"
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: pÅ™epínaÄ â€ž%s“ není jednoznaÄný\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: pÅ™epínaÄ â€ž--%s“ musí být zadán bez argumentu\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: pÅ™epínaÄ â€ž%c%s“ musí být zadán bez argumentu\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: pÅ™epínaÄ â€ž%s“ vyžaduje argument\n"
 
 # Říká, že žádný pÅ™epínaÄ takového jména nebyl nalezen.
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: neznámý pÅ™epínaÄ â€ž--%s“\n"
 
 # Říká, že žádný pÅ™epínaÄ takového jména nebyl nalezen.
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: neznámý pÅ™epínaÄ â€ž%c%s“\n"
 
 # Rozdíl mezi 'illegal option' a 'invalid option' není žádný. To která zpráva
@@ -4395,29 +4395,29 @@ msgstr "%s: neznámý pÅ™epínaÄ â€ž%c%s“\n"
 # 'Illegal option' je POSIXové.
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: neznámý pÅ™epínaÄ -- %c\n"
 
 # Vysvětlení viz 'illegal option'
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: neznámý pÅ™epínaÄ -- %c\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: pÅ™epínaÄ vyžaduje argument – %c\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: pÅ™epínaÄ â€ž-W %s“ není jednoznaÄný\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: pÅ™epínaÄ â€ž-W %s“ musí být zadán bez argumentu\n"
 
 # Nenalezeno
diff --git a/po/da.po b/po/da.po
index bf62fd54cc..73f077ec15 100644
--- a/po/da.po
+++ b/po/da.po
@@ -3473,59 +3473,59 @@ msgstr "Ukendt variabel '%s'"
 
 #: posix/getopt.c:692 posix/getopt.c:704
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: flaget '%s' er flertydigt\n"
 
 #: posix/getopt.c:737 posix/getopt.c:741
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: flaget '--%s' tager ikke argumenter\n"
 
 #: posix/getopt.c:750 posix/getopt.c:755
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: flaget '%c%s' tager ikke argumenter\n"
 
 #: posix/getopt.c:791 posix/getopt.c:804 posix/getopt.c:1093
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: flaget '%s' skal have et argument\n"
 
 #: posix/getopt.c:842 posix/getopt.c:845
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: ukendt flag '--%s'\n"
 
 #: posix/getopt.c:853 posix/getopt.c:856
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: ukendt flag '%c%s'\n"
 
 #: posix/getopt.c:903 posix/getopt.c:906
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: ulovligt flag -- %c\n"
 
 #: posix/getopt.c:912 posix/getopt.c:915
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: ugyldigt flag -- %c\n"
 
 #: posix/getopt.c:962 posix/getopt.c:973 posix/getopt.c:1159
 #: posix/getopt.c:1172
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: flaget skal have et argument -- %c\n"
 
 #: posix/getopt.c:1025 posix/getopt.c:1036
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: flaget '-W %s' er flertydigt\n"
 
 #: posix/getopt.c:1060 posix/getopt.c:1072
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: flaget '-W %s' tager ikke argumenter\n"
 
 #: posix/regcomp.c:136
diff --git a/po/de.po b/po/de.po
index 346cc8435b..b564f55894 100644
--- a/po/de.po
+++ b/po/de.po
@@ -3590,59 +3590,59 @@ msgstr "Unbekannte Variable »%s«"
 
 #: posix/getopt.c:692 posix/getopt.c:711
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: Die Option »%s« ist nicht eindeutig\n"
 
 #: posix/getopt.c:744 posix/getopt.c:748
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: Die Option »--%s« erlaubt kein Argument\n"
 
 #: posix/getopt.c:757 posix/getopt.c:762
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: Die Option »%c%s« erlaubt kein Argument\n"
 
 #: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159
 #: posix/getopt.c:1181
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: Die Option »%s« erfordert ein Argument\n"
 
 #: posix/getopt.c:867 posix/getopt.c:870
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: Unbekannte Option »--%s«\n"
 
 #: posix/getopt.c:878 posix/getopt.c:881
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: Unbekannte Option »%c%s«\n"
 
 #: posix/getopt.c:936 posix/getopt.c:939
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: Die Option ist nicht erlaubt -- »%c«\n"
 
 #: posix/getopt.c:945 posix/getopt.c:948
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: Ungültige Option -- %c\n"
 
 #: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
 #: posix/getopt.c:1255
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: Diese Option benötigt ein Argument -- »%c«\n"
 
 #: posix/getopt.c:1074 posix/getopt.c:1093
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: Die Option »-W %s« ist nicht eindeutig\n"
 
 #: posix/getopt.c:1117 posix/getopt.c:1138
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: Die Option »-W %s« erlaubt kein Argument\n"
 
 #: posix/regcomp.c:150
diff --git a/po/es.po b/po/es.po
index 14d547fc97..493a54c60d 100644
--- a/po/es.po
+++ b/po/es.po
@@ -3920,38 +3920,38 @@ msgstr "Variable no reconocida `%s'"
 
 #: posix/getopt.c:692 posix/getopt.c:711
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: la opción `%s' es ambigua\n"
 
 #: posix/getopt.c:744 posix/getopt.c:748
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: la opción `--%s' no admite ningún argumento\n"
 
 #: posix/getopt.c:757 posix/getopt.c:762
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: la opción `%c%s' no admite ningún argumento\n"
 
 #: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159
 #: posix/getopt.c:1181
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: la opción `%s' requiere un argumento\n"
 
 #: posix/getopt.c:867 posix/getopt.c:870
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: opción no reconocida `--%s'\n"
 
 #: posix/getopt.c:878 posix/getopt.c:881
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: opción no reconocida `%c%s'\n"
 
 #: posix/getopt.c:936 posix/getopt.c:939
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: opción ilegal -- %c\n"
 
 # ¿Qué tiene de malo "inválida"? sv
@@ -3970,23 +3970,23 @@ msgstr "%s: opción ilegal -- %c\n"
 #
 #: posix/getopt.c:945 posix/getopt.c:948
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: opción inválida -- %c\n"
 
 #: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
 #: posix/getopt.c:1255
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: la opción requiere un argumento --%c\n"
 
 #: posix/getopt.c:1074 posix/getopt.c:1093
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: la opción `-W %s' es ambigua\n"
 
 #: posix/getopt.c:1117 posix/getopt.c:1138
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: la opción `-W %s' no admite ningún argumento\n"
 
 #: posix/regcomp.c:150
diff --git a/po/fr.po b/po/fr.po
index deeb1821ff..f01e522cca 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -4330,59 +4330,59 @@ msgstr "Variable non reconnue « %s »"
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s : l'option « %s » est ambiguë\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s : l'option « --%s » ne permet pas d'argument\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s : l'option « %c%s » ne permet pas d'argument.\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s : l'option « %s » requiert un argument\n"
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s : option non reconnue « --%s »\n"
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s : option non reconnue « %c%s »\n"
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s : option non permise -- %c\n"
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s : option invalide -- %c\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s : l'option requiert un argument -- %c\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s : l'option « -W %s » est ambiguë\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s : l'option « -W %s » ne permet pas d'argument\n"
 
 #: posix/regcomp.c:135
diff --git a/po/hr.po b/po/hr.po
index 68e7c4f3f3..b36e040d75 100644
--- a/po/hr.po
+++ b/po/hr.po
@@ -599,7 +599,7 @@ msgstr "%s: smeće pri kraju završnog datuma u znakovnom nizu %Zd u `era' polju
 
 #: posix/getopt.c:887 posix/getopt.c:890
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: nedozvoljena opcija -- %c\n"
 
 #: locale/programs/ld-address.c:578 locale/programs/ld-collate.c:3738 locale/programs/ld-ctype.c:2846 locale/programs/ld-identification.c:445 locale/programs/ld-measurement.c:234 locale/programs/ld-messages.c:329 locale/programs/ld-monetary.c:934 locale/programs/ld-name.c:303 locale/programs/ld-numeric.c:373 locale/programs/ld-paper.c:236 locale/programs/ld-telephone.c:311 locale/programs/ld-time.c:1197
@@ -629,7 +629,7 @@ msgstr "%s: neispravan broj pravila za sortiranje"
 
 #: posix/getopt.c:896 posix/getopt.c:899
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: nedozvoljena opcija -- %c\n"
 
 #: locale/programs/ld-time.c:330
@@ -754,37 +754,37 @@ msgstr "%s: brojÄani kod zemlje `%d' nije ispravan"
 
 #: posix/getopt.c:743 posix/getopt.c:748
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: opcija `%c%s' ne dopušta argument\n"
 
 #: posix/getopt.c:688 posix/getopt.c:698
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: opcija `%s' je nejednoznaÄna\n"
 
 #: posix/getopt.c:782 posix/getopt.c:793 posix/getopt.c:1070 posix/getopt.c:1082
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: opcija `%s' zahtijeva argument\n"
 
 #: posix/getopt.c:730 posix/getopt.c:734
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: opcija `--%s' ne dopušta argument\n"
 
 #: posix/getopt.c:1038 posix/getopt.c:1049
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: opcija `-W %s' ne dopušta argument\n"
 
 #: posix/getopt.c:1004 posix/getopt.c:1014
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: opcija `-W %s' je nejednoznaÄna\n"
 
 #: posix/getopt.c:942 posix/getopt.c:952 posix/getopt.c:1136 posix/getopt.c:1147
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: opcija zahtijeva argument -- %c\n"
 
 #: locale/programs/ld-collate.c:1327 locale/programs/ld-collate.c:3675
@@ -949,12 +949,12 @@ msgstr ""
 
 #: posix/getopt.c:841 posix/getopt.c:844
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: neprepoznata opcija `%c%s'\n"
 
 #: posix/getopt.c:830 posix/getopt.c:833
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: neprepoznata opcija `--%s'\n"
 
 #: timezone/zic.c:449
diff --git a/po/ko.po b/po/ko.po
index b58238a20c..947e4a425e 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -4330,59 +4330,59 @@ msgstr "ì¸ì‹í•  수 없는 변수 `%s'"
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: `%s' ì˜µì…˜ì€ ëª¨í˜¸í•œ 옵션입니다\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: `--%s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: `%c%s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: `%s' ì˜µì…˜ì€ ì¸ìˆ˜ê°€ 필요합니다\n"
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: ì¸ì‹í•  수 없는 옵션 `--%s'\n"
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: ì¸ì‹í•  수 없는 옵션 `%c%s'\n"
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: ìž˜ëª»ëœ ì˜µì…˜ -- %c\n"
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: 부ì ì ˆí•œ 옵션 -- %c\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: ì´ ì˜µì…˜ì€ ì¸ìˆ˜ê°€ 필요합니다 -- %c\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: `-W %s' ì˜µì…˜ì€ ëª¨í˜¸í•œ 옵션입니다\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: `-W %s' ì˜µì…˜ì€ ì¸ìˆ˜ë¥¼ 허용하지 않습니다\n"
 
 #: posix/regcomp.c:135
diff --git a/po/nl.po b/po/nl.po
index 7a8b439dcb..418fe74d6b 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -4356,59 +4356,59 @@ msgstr "Onbekende variabele '%s'"
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: optie '%s' is niet eenduidig\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: optie '--%s' staat geen argument toe\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: optie '%c%s' staat geen argument toe\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: optie '%s' vereist een argument\n"
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: onbekende optie '--%s'\n"
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: onbekende optie '%c%s'\n"
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: ongeldige optie -- %c\n"
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: ongeldige optie -- %c\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: optie vereist een argument -- %c\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: optie '-W %s' is niet eenduidig\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: optie '-W %s' staat geen argument toe\n"
 
 #: posix/regcomp.c:135
diff --git a/po/rw.po b/po/rw.po
index 1216e74ad6..479e02f8a2 100644
--- a/po/rw.po
+++ b/po/rw.po
@@ -3941,59 +3941,59 @@ msgstr "IMPINDURAGACIRO"
 
 #: posix/getopt.c:692 posix/getopt.c:711
 #, fuzzy, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s:Ihitamo ni"
 
 #: posix/getopt.c:744 posix/getopt.c:748
 #, fuzzy, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s:Ihitamo Kwemerera"
 
 #: posix/getopt.c:757 posix/getopt.c:762
 #, fuzzy, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s:Ihitamo Kwemerera"
 
 #: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159
 #: posix/getopt.c:1181
 #, fuzzy, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s:Ihitamo"
 
 #: posix/getopt.c:867 posix/getopt.c:870
 #, fuzzy, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s:Ihitamo"
 
 #: posix/getopt.c:878 posix/getopt.c:881
 #, fuzzy, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s:Ihitamo"
 
 #: posix/getopt.c:936 posix/getopt.c:939
 #, fuzzy, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s:Ihitamo"
 
 #: posix/getopt.c:945 posix/getopt.c:948
 #, fuzzy, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s:Sibyo Ihitamo"
 
 #: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
 #: posix/getopt.c:1255
 #, fuzzy, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s:Ihitamo"
 
 #: posix/getopt.c:1074 posix/getopt.c:1093
 #, fuzzy, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s:Ihitamo ni"
 
 #: posix/getopt.c:1117 posix/getopt.c:1138
 #, fuzzy, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s:Ihitamo Kwemerera"
 
 #: posix/regcomp.c:150
diff --git a/po/sk.po b/po/sk.po
index ca25159381..ac19325bbb 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -3512,59 +3512,59 @@ msgstr "Nerozpoznaná premenná `%s'"
 
 #: posix/getopt.c:692 posix/getopt.c:711
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: voľba `%s' nie je jednoznaÄná\n"
 
 #: posix/getopt.c:744 posix/getopt.c:748
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: voľba `--%s' nedovoľuje použiť argument\n"
 
 #: posix/getopt.c:757 posix/getopt.c:762
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: voľba `%c%s' nedovoľuje použiť argument\n"
 
 #: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159
 #: posix/getopt.c:1181
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: voľba `%s' vyžaduje argument\n"
 
 #: posix/getopt.c:867 posix/getopt.c:870
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: nerozpoznaná voľba `--%s'\n"
 
 #: posix/getopt.c:878 posix/getopt.c:881
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: nerozpoznaná voľba `%c%s'\n"
 
 #: posix/getopt.c:936 posix/getopt.c:939
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: neprípustná voľba -- %c\n"
 
 #: posix/getopt.c:945 posix/getopt.c:948
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: chybná voľba -- %c\n"
 
 #: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
 #: posix/getopt.c:1255
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: voľba vyžaduje argument -- %c\n"
 
 #: posix/getopt.c:1074 posix/getopt.c:1093
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: voľba `-W %s' nie je jednoznaÄná\n"
 
 #: posix/getopt.c:1117 posix/getopt.c:1138
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: voľba `-W %s' nedovoľuje pouťiť argument\n"
 
 #: posix/regcomp.c:150
diff --git a/po/sv.po b/po/sv.po
index 9464e5e6b4..0d4e308115 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -4328,59 +4328,59 @@ msgstr "Okänd variabel \"%s\""
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: flaggan \"%s\" är tvetydig\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: flaggan \"--%s\" tar inget argument\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: flaggan \"%c%s\" tar inget argument\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: flaggan \"%s\" behöver ett argument\n"
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: okänd flagga \"--%s\"\n"
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: okänd flagga \"%c%s\"\n"
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: otillåten flagga -- %c\n"
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: ogiltig flagga -- %c\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: flaggan behöver ett argument -- %c\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: flaggan \"-W %s\" är tvetydig\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: flaggan \"-W %s\" tar inget argument\n"
 
 #: posix/regcomp.c:135
diff --git a/po/tr.po b/po/tr.po
index e3801d6e9f..ba3982646d 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -4330,59 +4330,59 @@ msgstr "Tanınmayan değişken `%s'"
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: `%s' seçeneği burada belirsiz\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: `--%s' seçeneği argümansız kullanılır\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: `%c%s' seçeneği argümansız kullanılır\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: `%s' seçeneği bir argümanla kullanılır\n"
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: tanınmayan seçenek `--%s'\n"
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: tanınmayan seçenek: `%c%s'\n"
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: kuraldışı seçenek -- %c\n"
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: geçersiz seçenek -- %c\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: seçenek bir argümanla kullanılır -- %c\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: `-W %s' seçeneği burada belirsiz\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: `-W %s' seçeneği argümansız kullanılır\n"
 
 #: posix/regcomp.c:135
diff --git a/po/zh_CN.po b/po/zh_CN.po
index b42bef9db9..14207f057a 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -4195,59 +4195,59 @@ msgstr "ä¸å¯è¯†åˆ«çš„å˜é‡â€œ%sâ€"
 
 #: posix/getopt.c:571 posix/getopt.c:587
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s:选项“%sâ€å…·æœ‰äºŒä¹‰æ€§\n"
 
 #: posix/getopt.c:620 posix/getopt.c:624
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s:选项“--%sâ€ä¸æŽ¥å—任何å‚æ•°\n"
 
 #: posix/getopt.c:633 posix/getopt.c:638
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s:选项“%c%sâ€ä¸æŽ¥å—å‚æ•°\n"
 
 #: posix/getopt.c:681 posix/getopt.c:700 posix/getopt.c:1016
 #: posix/getopt.c:1035
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s:选项“%sâ€éœ€è¦ä¸€ä¸ªå‚æ•°\n"
 
 #: posix/getopt.c:738 posix/getopt.c:741
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s:无法识别的选项“--%sâ€\n"
 
 #: posix/getopt.c:749 posix/getopt.c:752
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s:无法识别的选项“%c%sâ€\n"
 
 #: posix/getopt.c:804 posix/getopt.c:807
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s:无效选项 -- %c\n"
 
 #: posix/getopt.c:813 posix/getopt.c:816
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s:无效选项 -- %c\n"
 
 #: posix/getopt.c:868 posix/getopt.c:884 posix/getopt.c:1088
 #: posix/getopt.c:1106
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s:选项需è¦ä¸€ä¸ªå‚æ•° -- %c\n"
 
 #: posix/getopt.c:937 posix/getopt.c:953
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s:选项“-W %sâ€å…·æœ‰äºŒä¹‰æ€§\n"
 
 #: posix/getopt.c:977 posix/getopt.c:995
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s:选项“-W %sâ€ä¸æŽ¥å—å‚æ•°\n"
 
 #: posix/regcomp.c:135
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 7fbf3c7118..6ccffec2bc 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -3545,59 +3545,59 @@ msgstr "無法識別的變數 `%s'"
 
 #: posix/getopt.c:692 posix/getopt.c:711
 #, c-format
-msgid "%s: option `%s' is ambiguous\n"
+msgid "%s: option '%s' is ambiguous\n"
 msgstr "%s: é¸é … `%s' å«ç¾©ä¸æ¸…\n"
 
 #: posix/getopt.c:744 posix/getopt.c:748
 #, c-format
-msgid "%s: option `--%s' doesn't allow an argument\n"
+msgid "%s: option '--%s' doesn't allow an argument\n"
 msgstr "%s: é¸é … `--%s' ä¸å…許附加引數\n"
 
 #: posix/getopt.c:757 posix/getopt.c:762
 #, c-format
-msgid "%s: option `%c%s' doesn't allow an argument\n"
+msgid "%s: option '%c%s' doesn't allow an argument\n"
 msgstr "%s: é¸é … `%c%s' ä¸å…許附加引數\n"
 
 #: posix/getopt.c:807 posix/getopt.c:829 posix/getopt.c:1159
 #: posix/getopt.c:1181
 #, c-format
-msgid "%s: option `%s' requires an argument\n"
+msgid "%s: option '%s' requires an argument\n"
 msgstr "%s: é¸é … `%s' 需è¦ä¸€å€‹å¼•æ•¸\n"
 
 #: posix/getopt.c:867 posix/getopt.c:870
 #, c-format
-msgid "%s: unrecognized option `--%s'\n"
+msgid "%s: unrecognized option '--%s'\n"
 msgstr "%s: 未知的é¸é … `--%s'\n"
 
 #: posix/getopt.c:878 posix/getopt.c:881
 #, c-format
-msgid "%s: unrecognized option `%c%s'\n"
+msgid "%s: unrecognized option '%c%s'\n"
 msgstr "%s: 未知的é¸é … `%c%s'\n"
 
 #: posix/getopt.c:936 posix/getopt.c:939
 #, c-format
-msgid "%s: illegal option -- %c\n"
+msgid "%s: illegal option -- '%c'\n"
 msgstr "%s: ä¸åˆæ³•çš„é¸é … -- %c\n"
 
 #: posix/getopt.c:945 posix/getopt.c:948
 #, c-format
-msgid "%s: invalid option -- %c\n"
+msgid "%s: invalid option -- '%c'\n"
 msgstr "%s: ä¸é©ç”¨çš„é¸é … -- %c\n"
 
 #: posix/getopt.c:1003 posix/getopt.c:1022 posix/getopt.c:1234
 #: posix/getopt.c:1255
 #, c-format
-msgid "%s: option requires an argument -- %c\n"
+msgid "%s: option requires an argument -- '%c'\n"
 msgstr "%s: é¸é …需è¦ä¸€å€‹å¼•æ•¸ -- %c\n"
 
 #: posix/getopt.c:1074 posix/getopt.c:1093
 #, c-format
-msgid "%s: option `-W %s' is ambiguous\n"
+msgid "%s: option '-W %s' is ambiguous\n"
 msgstr "%s: é¸é … `-W %s' å«ç¾©ä¸æ¸…\n"
 
 #: posix/getopt.c:1117 posix/getopt.c:1138
 #, c-format
-msgid "%s: option `-W %s' doesn't allow an argument\n"
+msgid "%s: option '-W %s' doesn't allow an argument\n"
 msgstr "%s: é¸é … `-W %s' ä¸å…許附加引數\n"
 
 #: posix/regcomp.c:150
diff --git a/posix/getopt.c b/posix/getopt.c
index b1cecd31aa..103f572b07 100644
--- a/posix/getopt.c
+++ b/posix/getopt.c
@@ -1,9 +1,8 @@
 /* Getopt for GNU.
-   NOTE: getopt is now part of the C library, so if you don't know what
+   NOTE: getopt is part of the C library, so if you don't know what
    "Keep this file name-space clean" means, talk to drepper@gnu.org
    before changing it!
-   Copyright (C) 1987,88,89,90,91,92,93,94,95,96,98,99,2000,2001,2002,2003,2004
-   	Free Software Foundation, Inc.
+   Copyright (C) 1987-1996,1998-2004,2008 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
@@ -568,7 +567,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 #if defined _LIBC && defined USE_IN_LIBIO
 	      char *buf;
 
-	      if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
+	      if (__asprintf (&buf, _("%s: option '%s' is ambiguous\n"),
 			      argv[0], argv[d->optind]) >= 0)
 		{
 		  _IO_flockfile (stderr);
@@ -584,7 +583,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		  free (buf);
 		}
 #else
-	      fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+	      fprintf (stderr, _("%s: option '%s' is ambiguous\n"),
 		       argv[0], argv[d->optind]);
 #endif
 	    }
@@ -618,11 +617,11 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			  /* --option */
 #if defined _LIBC && defined USE_IN_LIBIO
 			  n = __asprintf (&buf, _("\
-%s: option `--%s' doesn't allow an argument\n"),
+%s: option '--%s' doesn't allow an argument\n"),
 					  argv[0], pfound->name);
 #else
 			  fprintf (stderr, _("\
-%s: option `--%s' doesn't allow an argument\n"),
+%s: option '--%s' doesn't allow an argument\n"),
 				   argv[0], pfound->name);
 #endif
 			}
@@ -631,12 +630,12 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			  /* +option or -option */
 #if defined _LIBC && defined USE_IN_LIBIO
 			  n = __asprintf (&buf, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
+%s: option '%c%s' doesn't allow an argument\n"),
 					  argv[0], argv[d->optind - 1][0],
 					  pfound->name);
 #else
 			  fprintf (stderr, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
+%s: option '%c%s' doesn't allow an argument\n"),
 				   argv[0], argv[d->optind - 1][0],
 				   pfound->name);
 #endif
@@ -679,7 +678,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		      char *buf;
 
 		      if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
+%s: option '%s' requires an argument\n"),
 				      argv[0], argv[d->optind - 1]) >= 0)
 			{
 			  _IO_flockfile (stderr);
@@ -697,7 +696,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			}
 #else
 		      fprintf (stderr,
-			       _("%s: option `%s' requires an argument\n"),
+			       _("%s: option '%s' requires an argument\n"),
 			       argv[0], argv[d->optind - 1]);
 #endif
 		    }
@@ -735,10 +734,10 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		{
 		  /* --option */
 #if defined _LIBC && defined USE_IN_LIBIO
-		  n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
+		  n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"),
 				  argv[0], d->__nextchar);
 #else
-		  fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+		  fprintf (stderr, _("%s: unrecognized option '--%s'\n"),
 			   argv[0], d->__nextchar);
 #endif
 		}
@@ -746,10 +745,10 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		{
 		  /* +option or -option */
 #if defined _LIBC && defined USE_IN_LIBIO
-		  n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
+		  n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"),
 				  argv[0], argv[d->optind][0], d->__nextchar);
 #else
-		  fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+		  fprintf (stderr, _("%s: unrecognized option '%c%s'\n"),
 			   argv[0], argv[d->optind][0], d->__nextchar);
 #endif
 		}
@@ -799,21 +798,22 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 
 	    if (d->__posixly_correct)
 	      {
-		/* 1003.2 specifies the format of this message.  */
 #if defined _LIBC && defined USE_IN_LIBIO
-		n = __asprintf (&buf, _("%s: illegal option -- %c\n"),
+		n = __asprintf (&buf, _("%s: illegal option -- '%c'\n"),
 				argv[0], c);
 #else
-		fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c);
+		fprintf (stderr, _("%s: illegal option -- '%c'\n"), argv[0],
+			 c);
 #endif
 	      }
 	    else
 	      {
 #if defined _LIBC && defined USE_IN_LIBIO
-		n = __asprintf (&buf, _("%s: invalid option -- %c\n"),
+		n = __asprintf (&buf, _("%s: invalid option -- '%c'\n"),
 				argv[0], c);
 #else
-		fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c);
+		fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0],
+			 c);
 #endif
 	      }
 
@@ -860,12 +860,11 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 	  {
 	    if (print_errors)
 	      {
-		/* 1003.2 specifies the format of this message.  */
 #if defined _LIBC && defined USE_IN_LIBIO
 		char *buf;
 
 		if (__asprintf (&buf,
-				_("%s: option requires an argument -- %c\n"),
+				_("%s: option requires an argument -- '%c'\n"),
 				argv[0], c) >= 0)
 		  {
 		    _IO_flockfile (stderr);
@@ -881,7 +880,8 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		    free (buf);
 		  }
 #else
-		fprintf (stderr, _("%s: option requires an argument -- %c\n"),
+		fprintf (stderr,
+			 _("%s: option requires an argument -- '%c'\n"),
 			 argv[0], c);
 #endif
 	      }
@@ -934,7 +934,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 #if defined _LIBC && defined USE_IN_LIBIO
 		char *buf;
 
-		if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
+		if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"),
 				argv[0], argv[d->optind]) >= 0)
 		  {
 		    _IO_flockfile (stderr);
@@ -950,7 +950,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		    free (buf);
 		  }
 #else
-		fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+		fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"),
 			 argv[0], argv[d->optind]);
 #endif
 	      }
@@ -975,7 +975,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			char *buf;
 
 			if (__asprintf (&buf, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
+%s: option '-W %s' doesn't allow an argument\n"),
 					argv[0], pfound->name) >= 0)
 			  {
 			    _IO_flockfile (stderr);
@@ -993,7 +993,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			  }
 #else
 			fprintf (stderr, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
+%s: option '-W %s' doesn't allow an argument\n"),
 				 argv[0], pfound->name);
 #endif
 		      }
@@ -1014,7 +1014,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			char *buf;
 
 			if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
+%s: option '%s' requires an argument\n"),
 					argv[0], argv[d->optind - 1]) >= 0)
 			  {
 			    _IO_flockfile (stderr);
@@ -1032,7 +1032,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			  }
 #else
 			fprintf (stderr,
-				 _("%s: option `%s' requires an argument\n"),
+				 _("%s: option '%s' requires an argument\n"),
 				 argv[0], argv[d->optind - 1]);
 #endif
 		      }
@@ -1081,12 +1081,11 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 	      {
 		if (print_errors)
 		  {
-		    /* 1003.2 specifies the format of this message.  */
 #if defined _LIBC && defined USE_IN_LIBIO
 		    char *buf;
 
 		    if (__asprintf (&buf, _("\
-%s: option requires an argument -- %c\n"),
+%s: option requires an argument -- '%c'\n"),
 				    argv[0], c) >= 0)
 		      {
 			_IO_flockfile (stderr);
@@ -1103,7 +1102,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		      }
 #else
 		    fprintf (stderr,
-			     _("%s: option requires an argument -- %c\n"),
+			     _("%s: option requires an argument -- '%c'\n"),
 			     argv[0], c);
 #endif
 		  }
@@ -1200,7 +1199,7 @@ main (int argc, char **argv)
 	  break;
 
 	case 'c':
-	  printf ("option c with value `%s'\n", optarg);
+	  printf ("option c with value '%s'\n", optarg);
 	  break;
 
 	case '?':
diff --git a/stdlib/Makefile b/stdlib/Makefile
index 736c562374..1fe7f70177 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -52,7 +52,7 @@ routines	:=							      \
 	rpmatch strfmon strfmon_l getsubopt xpg_basename fmtmsg		      \
 	strtoimax strtoumax wcstoimax wcstoumax				      \
 	getcontext setcontext makecontext swapcontext
-aux =	grouping groupingwc
+aux =	grouping groupingwc tens_in_limb
 
 # These routines will be omitted from the libc shared object.
 # Instead the static object files will be included in a special archive
@@ -69,7 +69,7 @@ tests		:= tst-strtol tst-strtod testmb testrand testsort testdiv   \
 		   test-a64l tst-qsort tst-system testmb2 bug-strtod2	    \
 		   tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \
 		   tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2	    \
-		   tst-makecontext2
+		   tst-makecontext2 tst-strtod6
 
 include ../Makeconfig
 
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
index 86b408e1fe..9c2f86a32b 100644
--- a/stdlib/strtod_l.c
+++ b/stdlib/strtod_l.c
@@ -1,5 +1,5 @@
 /* Convert string representing a number to float value, using given locale.
-   Copyright (C) 1997,1998,2002,2004,2005,2006,2007
+   Copyright (C) 1997,1998,2002,2004,2005,2006,2007,2008
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -148,23 +148,7 @@ extern FLOAT MPN2FLOAT (mp_srcptr mpn, int exponent, int negative);
 # error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
 #endif
 
-
-/* Local data structure.  */
-static const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
-{    0,                   10,                   100,
-     1000,                10000,                100000L,
-     1000000L,            10000000L,            100000000L,
-     1000000000L
-#if BITS_PER_MP_LIMB > 32
-	        ,	  10000000000ULL,       100000000000ULL,
-     1000000000000ULL,    10000000000000ULL,    100000000000000ULL,
-     1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL,
-     1000000000000000000ULL, 10000000000000000000ULL
-#endif
-#if BITS_PER_MP_LIMB > 64
-  #error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
-#endif
-};
+extern const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1];
 
 #ifndef	howmany
 #define	howmany(x,y)		(((x)+((y)-1))/(y))
@@ -610,6 +594,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
 		  mant = STRTOULL (startp + 1, &endp, 0);
 		  if (endp == cp)
 		    SET_MANTISSA (retval, mant);
+
+		  /* Consume the closing brace.  */
+		  ++cp;
 		}
 	    }
 
diff --git a/stdlib/tens_in_limb.c b/stdlib/tens_in_limb.c
new file mode 100644
index 0000000000..b6e35aa35a
--- /dev/null
+++ b/stdlib/tens_in_limb.c
@@ -0,0 +1,31 @@
+#include <gmp.h>
+
+
+/* Definitions according to limb size used.  */
+#if	BITS_PER_MP_LIMB == 32
+# define MAX_DIG_PER_LIMB	9
+# define MAX_FAC_PER_LIMB	1000000000UL
+#elif	BITS_PER_MP_LIMB == 64
+# define MAX_DIG_PER_LIMB	19
+# define MAX_FAC_PER_LIMB	10000000000000000000ULL
+#else
+# error "mp_limb_t size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+
+/* Local data structure.  */
+const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1] =
+{    0,                   10,                   100,
+     1000,                10000,                100000L,
+     1000000L,            10000000L,            100000000L,
+     1000000000L
+#if BITS_PER_MP_LIMB > 32
+	        ,	  10000000000ULL,       100000000000ULL,
+     1000000000000ULL,    10000000000000ULL,    100000000000000ULL,
+     1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL,
+     1000000000000000000ULL, 10000000000000000000ULL
+#endif
+#if BITS_PER_MP_LIMB > 64
+  #error "Need to expand tens_in_limb table to" MAX_DIG_PER_LIMB
+#endif
+};
diff --git a/stdlib/tst-strtod6.c b/stdlib/tst-strtod6.c
new file mode 100644
index 0000000000..fdb104f9ca
--- /dev/null
+++ b/stdlib/tst-strtod6.c
@@ -0,0 +1,53 @@
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int
+do_test (void)
+{
+  static const char str[] = "NaN(blabla)something";
+  char *endp;
+  int result = 0;
+
+  double d = strtod (str, &endp);
+  if (!isnan (d))
+    {
+      puts ("strtod did not return NAN");
+      result = 1;
+    }
+  if (strcmp (endp, "something") != 0)
+    {
+      puts  ("strtod set incorrect end pointer");
+      result = 1;
+    }
+
+  float f = strtof (str, &endp);
+  if (!isnanf (f))
+    {
+      puts ("strtof did not return NAN");
+      result = 1;
+    }
+  if (strcmp (endp, "something") != 0)
+    {
+      puts  ("strtof set incorrect end pointer");
+      result = 1;
+    }
+
+  long double ld = strtold (str, &endp);
+  if (!isnan (ld))
+    {
+      puts ("strtold did not return NAN");
+      result = 1;
+    }
+  if (strcmp (endp, "something") != 0)
+    {
+      puts  ("strtold set incorrect end pointer");
+      result = 1;
+    }
+
+  return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 958a099b82..9d1ebdf615 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -1,5 +1,5 @@
 /* Run-time dynamic linker data structures for loaded ELF shared objects.
-   Copyright (C) 1995-2006, 2007 Free Software Foundation, Inc.
+   Copyright (C) 1995-2006, 2007, 2008 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
@@ -655,6 +655,10 @@ struct rtld_global_ro
   void *(*_dl_open) (const char *file, int mode, const void *caller_dlopen,
 		     Lmid_t nsid, int argc, char *argv[], char *env[]);
   void (*_dl_close) (void *map);
+  void *(*_dl_tls_get_addr_soft) (struct link_map *);
+#ifdef HAVE_DL_DISCOVER_OSVERSION
+  int (*_dl_discover_osversion) (void);
+#endif
 
   /* List of auditing interfaces.  */
   struct audit_ifaces *_dl_audit;
@@ -1069,7 +1073,7 @@ extern struct link_map *_dl_update_slotinfo (unsigned long int req_modid);
 
 /* Look up the module's TLS block as for __tls_get_addr,
    but never touch anything.  Return null if it's not allocated yet.  */
-extern void *_dl_tls_get_addr_soft (struct link_map *l) internal_function;
+extern void *_dl_tls_get_addr_soft (struct link_map *l) attribute_hidden;
 
 extern int _dl_addr_inside_object (struct link_map *l, const ElfW(Addr) addr)
      internal_function attribute_hidden;
diff --git a/sysdeps/ia64/ieee754.h b/sysdeps/ia64/ieee754.h
index f5a71f5b92..44629430f8 100644
--- a/sysdeps/ia64/ieee754.h
+++ b/sysdeps/ia64/ieee754.h
@@ -80,7 +80,7 @@ union ieee754_double
 	unsigned int mantissa1:32;
 #endif				/* Big endian.  */
 #if	__BYTE_ORDER == __LITTLE_ENDIAN
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int mantissa0:20;
 	unsigned int exponent:11;
 	unsigned int negative:1;
@@ -106,7 +106,7 @@ union ieee754_double
 	unsigned int mantissa0:19;
 	unsigned int mantissa1:32;
 #else
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int mantissa0:19;
 	unsigned int quiet_nan:1;
 	unsigned int exponent:11;
@@ -143,7 +143,7 @@ union ieee854_long_double
 	unsigned int mantissa1:32;
 #endif
 #if	__BYTE_ORDER == __LITTLE_ENDIAN
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int empty0:32;
 	unsigned int exponent:15;
 	unsigned int negative:1;
@@ -175,7 +175,7 @@ union ieee854_long_double
 	unsigned int mantissa1:32;
 #endif
 #if	__BYTE_ORDER == __LITTLE_ENDIAN
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int empty0:32;
 	unsigned int exponent:15;
 	unsigned int negative:1;
diff --git a/sysdeps/ieee754/ieee754.h b/sysdeps/ieee754/ieee754.h
index 7131e5de6c..b17c29ab73 100644
--- a/sysdeps/ieee754/ieee754.h
+++ b/sysdeps/ieee754/ieee754.h
@@ -80,7 +80,7 @@ union ieee754_double
 	unsigned int mantissa1:32;
 #endif				/* Big endian.  */
 #if	__BYTE_ORDER == __LITTLE_ENDIAN
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int mantissa0:20;
 	unsigned int exponent:11;
 	unsigned int negative:1;
@@ -106,7 +106,7 @@ union ieee754_double
 	unsigned int mantissa0:19;
 	unsigned int mantissa1:32;
 #else
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int mantissa0:19;
 	unsigned int quiet_nan:1;
 	unsigned int exponent:11;
@@ -142,7 +142,7 @@ union ieee854_long_double
 	unsigned int mantissa1:32;
 #endif
 #if	__BYTE_ORDER == __LITTLE_ENDIAN
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int exponent:15;
 	unsigned int negative:1;
 	unsigned int empty:16;
@@ -171,7 +171,7 @@ union ieee854_long_double
 	unsigned int mantissa1:32;
 #endif
 #if	__BYTE_ORDER == __LITTLE_ENDIAN
-# if	__FLOAT_WORD_ORDER == BIG_ENDIAN
+# if	__FLOAT_WORD_ORDER == __BIG_ENDIAN
 	unsigned int exponent:15;
 	unsigned int negative:1;
 	unsigned int empty:16;
diff --git a/sysdeps/mach/hurd/i386/trampoline.c b/sysdeps/mach/hurd/i386/trampoline.c
index dddc6f3ef6..99d9308360 100644
--- a/sysdeps/mach/hurd/i386/trampoline.c
+++ b/sysdeps/mach/hurd/i386/trampoline.c
@@ -1,5 +1,5 @@
 /* Set thread_state for sighandler, and sigcontext to recover.  i386 version.
-   Copyright (C) 1994,1995,1996,1997,1998,1999,2005
+   Copyright (C) 1994,1995,1996,1997,1998,1999,2005,2008
 	Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -21,6 +21,7 @@
 #include <hurd/signal.h>
 #include <hurd/userlink.h>
 #include <thread_state.h>
+#include <mach/machine/eflags.h>
 #include <assert.h>
 #include <errno.h>
 #include "hurdfault.h"
@@ -218,6 +219,9 @@ _hurd_setup_sighandler (struct hurd_sigstate *ss, __sighandler_t handler,
   /* We pass the handler function to the trampoline code in %edx.  */
   state->basic.edx = (int) handler;
 
+  /* The x86 ABI says the DF bit is clear on entry to any function.  */
+  state->basic.efl &= ~EFL_DF;
+
   return scp;
 }
 
diff --git a/sysdeps/unix/sysv/linux/bits/posix_opt.h b/sysdeps/unix/sysv/linux/bits/posix_opt.h
index 1a96db2982..37612e0bd5 100644
--- a/sysdeps/unix/sysv/linux/bits/posix_opt.h
+++ b/sysdeps/unix/sysv/linux/bits/posix_opt.h
@@ -1,5 +1,6 @@
 /* Define POSIX options for Linux.
-   Copyright (C) 1996,1997,1999,2000,2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1996,1997,1999,2000,2002,2003,2008
+   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
@@ -51,8 +52,8 @@
 /* Setting of memory protections is supported.  */
 #define	_POSIX_MEMORY_PROTECTION	200112L
 
-/* Only root can change owner of file.  */
-#define	_POSIX_CHOWN_RESTRICTED	1
+/* Some filesystems allow all users to change file ownership.  */
+#define	_POSIX_CHOWN_RESTRICTED	0
 
 /* `c_cc' member of 'struct termios' structure can be disabled by
    using the value _POSIX_VDISABLE.  */
diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h
index f0600283b6..582412e300 100644
--- a/sysdeps/unix/sysv/linux/dl-osinfo.h
+++ b/sysdeps/unix/sysv/linux/dl-osinfo.h
@@ -1,6 +1,5 @@
 /* Operating system specific code for generic dynamic loader functions.  Linux.
-   Copyright (C) 2000,2001,2002,2004,2005,2006,2007
-	Free Software Foundation, Inc.
+   Copyright (C) 2000-2002,2004-2007,2008 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
@@ -18,10 +17,7 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
-#include <string.h>
 #include <errno.h>
-#include <fcntl.h>
-#include <sys/utsname.h>
 #include <kernel-features.h>
 #include <dl-sysdep.h>
 #include <stdint.h>
@@ -44,97 +40,6 @@ dl_fatal (const char *str)
 }
 #endif
 
-static inline int __attribute__ ((always_inline))
-_dl_discover_osversion (void)
-{
-#if (defined NEED_DL_SYSINFO || defined NEED_DL_SYSINFO_DSO) && defined SHARED
-  if (GLRO(dl_sysinfo_map) != NULL)
-    {
-      /* If the kernel-supplied DSO contains a note indicating the kernel's
-	 version, we don't need to call uname or parse any strings.  */
-
-      static const struct
-      {
-	ElfW(Nhdr) hdr;
-	char vendor[8];
-      } expected_note = { { sizeof "Linux", sizeof (ElfW(Word)), 0 }, "Linux" };
-      const ElfW(Phdr) *const phdr = GLRO(dl_sysinfo_map)->l_phdr;
-      const ElfW(Word) phnum = GLRO(dl_sysinfo_map)->l_phnum;
-      for (uint_fast16_t i = 0; i < phnum; ++i)
-	if (phdr[i].p_type == PT_NOTE)
-	  {
-	    const ElfW(Addr) start = (phdr[i].p_vaddr
-				      + GLRO(dl_sysinfo_map)->l_addr);
-	    const ElfW(Nhdr) *note = (const void *) start;
-	    while ((ElfW(Addr)) (note + 1) - start < phdr[i].p_memsz)
-	      {
-		if (!memcmp (note, &expected_note, sizeof expected_note))
-		  return *(const ElfW(Word) *) ((const void *) note
-						+ sizeof expected_note);
-#define ROUND(len) (((len) + sizeof note->n_type - 1) & -sizeof note->n_type)
-		note = ((const void *) (note + 1)
-			+ ROUND (note->n_namesz) + ROUND (note->n_descsz));
-#undef ROUND
-	      }
-	  }
-    }
-#endif
-
-  char bufmem[64];
-  char *buf = bufmem;
-  unsigned int version;
-  int parts;
-  char *cp;
-  struct utsname uts;
-
-  /* Try the uname system call.  */
-  if (__uname (&uts))
-    {
-      /* This was not successful.  Now try reading the /proc filesystem.  */
-      int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY);
-      if (fd < 0)
-	return -1;
-      ssize_t reslen = __read (fd, bufmem, sizeof (bufmem));
-      __close (fd);
-      if (reslen <= 0)
-	/* This also didn't work.  We give up since we cannot
-	   make sure the library can actually work.  */
-	return -1;
-      buf[MIN (reslen, (ssize_t) sizeof (bufmem) - 1)] = '\0';
-    }
-  else
-    buf = uts.release;
-
-  /* Now convert it into a number.  The string consists of at most
-     three parts.  */
-  version = 0;
-  parts = 0;
-  cp = buf;
-  while ((*cp >= '0') && (*cp <= '9'))
-    {
-      unsigned int here = *cp++ - '0';
-
-      while ((*cp >= '0') && (*cp <= '9'))
-	{
-	  here *= 10;
-	  here += *cp++ - '0';
-	}
-
-      ++parts;
-      version <<= 8;
-      version |= here;
-
-      if (*cp++ != '.' || parts == 3)
-	/* Another part following?  */
-	break;
-    }
-
-  if (parts < 3)
-    version <<= 8 * (3 - parts);
-
-  return version;
-}
-
 #define DL_SYSDEP_OSCHECK(FATAL)					      \
   do {									      \
     /* Test whether the kernel is new enough.  This test is only performed    \
diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.c b/sysdeps/unix/sysv/linux/dl-sysdep.c
index 42aec77e82..08ae9aa86d 100644
--- a/sysdeps/unix/sysv/linux/dl-sysdep.c
+++ b/sysdeps/unix/sysv/linux/dl-sysdep.c
@@ -1,5 +1,5 @@
 /* Dynamic linker system dependencies for Linux.
-   Copyright (C) 1995,1997,2001,2004,2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1995,1997,2001,2004,2005,2006, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -20,11 +20,15 @@
 /* Linux needs some special initialization, but otherwise uses
    the generic dynamic linker system interface code.  */
 
+#include <string.h>
+#include <fcntl.h>
 #include <unistd.h>
+#include <sys/utsname.h>
 #include <ldsodefs.h>
 #include <kernel-features.h>
 
-#define DL_SYSDEP_INIT frob_brk ()
+#ifdef SHARED
+# define DL_SYSDEP_INIT frob_brk ()
 
 static inline void
 frob_brk (void)
@@ -53,4 +57,98 @@ frob_brk (void)
 #endif
 }
 
-#include <elf/dl-sysdep.c>
+# include <elf/dl-sysdep.c>
+#endif
+
+
+int
+attribute_hidden
+_dl_discover_osversion (void)
+{
+#if (defined NEED_DL_SYSINFO || defined NEED_DL_SYSINFO_DSO) && defined SHARED
+  if (GLRO(dl_sysinfo_map) != NULL)
+    {
+      /* If the kernel-supplied DSO contains a note indicating the kernel's
+	 version, we don't need to call uname or parse any strings.  */
+
+      static const struct
+      {
+	ElfW(Nhdr) hdr;
+	char vendor[8];
+      } expected_note = { { sizeof "Linux", sizeof (ElfW(Word)), 0 }, "Linux" };
+      const ElfW(Phdr) *const phdr = GLRO(dl_sysinfo_map)->l_phdr;
+      const ElfW(Word) phnum = GLRO(dl_sysinfo_map)->l_phnum;
+      for (uint_fast16_t i = 0; i < phnum; ++i)
+	if (phdr[i].p_type == PT_NOTE)
+	  {
+	    const ElfW(Addr) start = (phdr[i].p_vaddr
+				      + GLRO(dl_sysinfo_map)->l_addr);
+	    const ElfW(Nhdr) *note = (const void *) start;
+	    while ((ElfW(Addr)) (note + 1) - start < phdr[i].p_memsz)
+	      {
+		if (!memcmp (note, &expected_note, sizeof expected_note))
+		  return *(const ElfW(Word) *) ((const void *) note
+						+ sizeof expected_note);
+#define ROUND(len) (((len) + sizeof note->n_type - 1) & -sizeof note->n_type)
+		note = ((const void *) (note + 1)
+			+ ROUND (note->n_namesz) + ROUND (note->n_descsz));
+#undef ROUND
+	      }
+	  }
+    }
+#endif
+
+  char bufmem[64];
+  char *buf = bufmem;
+  unsigned int version;
+  int parts;
+  char *cp;
+  struct utsname uts;
+
+  /* Try the uname system call.  */
+  if (__uname (&uts))
+    {
+      /* This was not successful.  Now try reading the /proc filesystem.  */
+      int fd = __open ("/proc/sys/kernel/osrelease", O_RDONLY);
+      if (fd < 0)
+	return -1;
+      ssize_t reslen = __read (fd, bufmem, sizeof (bufmem));
+      __close (fd);
+      if (reslen <= 0)
+	/* This also didn't work.  We give up since we cannot
+	   make sure the library can actually work.  */
+	return -1;
+      buf[MIN (reslen, (ssize_t) sizeof (bufmem) - 1)] = '\0';
+    }
+  else
+    buf = uts.release;
+
+  /* Now convert it into a number.  The string consists of at most
+     three parts.  */
+  version = 0;
+  parts = 0;
+  cp = buf;
+  while ((*cp >= '0') && (*cp <= '9'))
+    {
+      unsigned int here = *cp++ - '0';
+
+      while ((*cp >= '0') && (*cp <= '9'))
+	{
+	  here *= 10;
+	  here += *cp++ - '0';
+	}
+
+      ++parts;
+      version <<= 8;
+      version |= here;
+
+      if (*cp++ != '.' || parts == 3)
+	/* Another part following?  */
+	break;
+    }
+
+  if (parts < 3)
+    version <<= 8 * (3 - parts);
+
+  return version;
+}
diff --git a/sysdeps/unix/sysv/linux/dl-sysdep.h b/sysdeps/unix/sysv/linux/dl-sysdep.h
index becfc8df3f..0371fe87a1 100644
--- a/sysdeps/unix/sysv/linux/dl-sysdep.h
+++ b/sysdeps/unix/sysv/linux/dl-sysdep.h
@@ -1,5 +1,5 @@
 /* System-specific settings for dynamic linker code.  Linux version.
-   Copyright (C) 2005 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -25,3 +25,12 @@
    we aren't making direct use of it.  So enable this across the board.  */
 
 #define NEED_DL_SYSINFO_DSO	1
+
+
+/* The _dl_discover_osversion function is so far only needed in sysconf
+   to check for kernels later than 2.6.23.  */
+#if !defined ASSEMBLER && __LINUX_KERNEL_VERSION < 0x020617
+/* Get version of the OS.  */
+extern int _dl_discover_osversion (void) attribute_hidden;
+# define HAVE_DL_DISCOVER_OSVERSION	1
+#endif
diff --git a/sysdeps/unix/sysv/linux/fpathconf.c b/sysdeps/unix/sysv/linux/fpathconf.c
index c1cdb1b899..2701c9ec99 100644
--- a/sysdeps/unix/sysv/linux/fpathconf.c
+++ b/sysdeps/unix/sysv/linux/fpathconf.c
@@ -1,5 +1,5 @@
 /* Get file-specific information about descriptor FD.  Linux version.
-   Copyright (C) 1991,1995,1996,1998-2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1991,1995,1996,1998-2003,2008 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
@@ -45,6 +45,9 @@ __fpathconf (fd, name)
     case _PC_2_SYMLINKS:
       return __statfs_symlinks (__fstatfs (fd, &fsbuf), &fsbuf);
 
+    case _PC_CHOWN_RESTRICTED:
+      return __statfs_chown_restricted (__fstatfs (fd, &fsbuf), &fsbuf);
+
     default:
       return posix_fpathconf (fd, name);
     }
diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c
index e12a08434a..db03529fe8 100644
--- a/sysdeps/unix/sysv/linux/pathconf.c
+++ b/sysdeps/unix/sysv/linux/pathconf.c
@@ -1,5 +1,5 @@
 /* Get file-specific information about a file.  Linux version.
-   Copyright (C) 1991,1995,1996,1998-2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1991,1995,1996,1998-2003,2008 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
@@ -19,8 +19,10 @@
 
 #include <unistd.h>
 #include <errno.h>
+
 #include "pathconf.h"
 #include "linux_fsinfo.h"
+#include <not-cancel.h>
 
 static long int posix_pathconf (const char *file, int name);
 
@@ -46,6 +48,9 @@ __pathconf (const char *file, int name)
     case _PC_2_SYMLINKS:
       return __statfs_symlinks (__statfs (file, &fsbuf), &fsbuf);
 
+    case _PC_CHOWN_RESTRICTED:
+      return __statfs_chown_restricted (__statfs (file, &fsbuf), &fsbuf);
+
     default:
       return posix_pathconf (file, name);
     }
@@ -179,3 +184,44 @@ __statfs_symlinks (int result, const struct statfs *fsbuf)
       return 1;
     }
 }
+
+
+/* Used like: return __statfs_chown_restricted (__statfs (name, &buf), &buf);*/
+long int
+__statfs_chown_restricted (int result, const struct statfs *fsbuf)
+{
+  if (result < 0)
+    {
+      if (errno == ENOSYS)
+	/* Not possible, return the default value.  */
+	return 1;
+
+      /* Some error occured.  */
+      return -1;
+    }
+
+  int fd;
+  long int retval = 1;
+  switch (fsbuf->f_type)
+    {
+    case XFS_SUPER_MAGIC:
+      /* Read the value from /proc/sys/fs/xfs/restrict_chown.  If we cannot
+	 read it default to assume the restriction is in place.  */
+      fd = open_not_cancel_2 ("/proc/sys/fs/xfs/restrict_chown", O_RDONLY);
+      if (fd != -1)
+	{
+	  char buf[2];
+	  if (TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, 2)) == 2
+	      && buf[0] >= '0' && buf[0] <= '1')
+	    retval = buf[0] - '0';
+
+	  close_not_cancel_no_status (fd);
+	}
+      break;
+
+    default:
+      break;
+    }
+
+  return retval;
+}
diff --git a/sysdeps/unix/sysv/linux/pathconf.h b/sysdeps/unix/sysv/linux/pathconf.h
index 20e23685eb..806adcc5ea 100644
--- a/sysdeps/unix/sysv/linux/pathconf.h
+++ b/sysdeps/unix/sysv/linux/pathconf.h
@@ -1,5 +1,5 @@
 /* Common parts of Linux implementation of pathconf and fpathconf.
-   Copyright (C) 1991,1995,1996,1998-2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1991,1995,1996,1998-2003,2008 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
@@ -22,13 +22,18 @@
 #include <sys/statfs.h>
 
 
-/* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */
+/* Used like: return __statfs_link_max (__statfs (name, &buf), &buf); */
 extern long int __statfs_link_max (int result, const struct statfs *fsbuf);
 
 
-/* Used like: return statfs_filesize_max (__statfs (name, &buf), &buf); */
+/* Used like: return __statfs_filesize_max (__statfs (name, &buf), &buf); */
 extern long int __statfs_filesize_max (int result, const struct statfs *fsbuf);
 
 
-/* Used like: return statfs_link_max (__statfs (name, &buf), &buf); */
+/* Used like: return __statfs_link_max (__statfs (name, &buf), &buf); */
 extern long int __statfs_symlinks (int result, const struct statfs *fsbuf);
+
+
+/* Used like: return __statfs_chown_restricted (__statfs (name, &buf), &buf);*/
+extern long int __statfs_chown_restricted (int result,
+					   const struct statfs *fsbuf);
diff --git a/sysdeps/unix/sysv/linux/sysconf.c b/sysdeps/unix/sysv/linux/sysconf.c
index f9f6f1bfa5..ab9cddc306 100644
--- a/sysdeps/unix/sysv/linux/sysconf.c
+++ b/sysdeps/unix/sysv/linux/sysconf.c
@@ -1,5 +1,5 @@
 /* Get file-specific information about a file.  Linux version.
-   Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2006, 2008 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
@@ -23,7 +23,9 @@
 #include <sysdep.h>
 #include <time.h>
 #include <unistd.h>
+#include <sys/resource.h>
 #include <not-cancel.h>
+#include <ldsodefs.h>
 
 static long int posix_sysconf (int name);
 
@@ -70,6 +72,22 @@ __sysconf (int name)
       }
 #endif
 
+    case _SC_ARG_MAX:
+#if __LINUX_KERNEL_VERSION < 0x020617
+      /* Determine whether this is a kernel 2.6.23 or later.  Only
+	 then do we have an argument limit determined by the stack
+	 size.  */
+      if (GLRO(dl_discover_osversion) () >= 0x020617)
+#endif
+	{
+	  /* Use getrlimit to get the stack limit.  */
+	  struct rlimit rlimit;
+	  if (__getrlimit (RLIMIT_STACK, &rlimit) == 0)
+	    return MAX (ARG_MAX, rlimit.rlim_cur / 4);
+	}
+
+      return ARG_MAX;
+
     case _SC_NGROUPS_MAX:
       /* Try to read the information from the /proc/sys/kernel/ngroups_max
 	 file.  */
diff --git a/sysdeps/x86_64/cacheinfo.c b/sysdeps/x86_64/cacheinfo.c
index 6403081c90..6a3ea0f1cb 100644
--- a/sysdeps/x86_64/cacheinfo.c
+++ b/sysdeps/x86_64/cacheinfo.c
@@ -405,13 +405,10 @@ long int __x86_64_data_cache_size_half attribute_hidden = 32 * 1024 / 2;
 /* Shared cache size for use in memory and string routines, typically
    L2 or L3 size.  */
 long int __x86_64_shared_cache_size_half attribute_hidden = 1024 * 1024 / 2;
-#ifdef NOT_USED_RIGHT_NOW
 long int __x86_64_shared_cache_size attribute_hidden = 1024 * 1024;
-#endif
 /* PREFETCHW support flag for use in memory and string routines.  */
 int __x86_64_prefetchw attribute_hidden;
 
-#ifdef NOT_USED_RIGHT_NOW
 /* Instructions preferred for memory and string routines.
 
   0: Regular instructions
@@ -421,7 +418,6 @@ int __x86_64_prefetchw attribute_hidden;
 
   */
 int __x86_64_preferred_memory_instruction attribute_hidden;
-#endif
 
 
 static void
@@ -464,14 +460,12 @@ init_cacheinfo (void)
 		    : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx)
 		    : "0" (1));
 
-#ifdef NOT_USED_RIGHT_NOW
-      /* Intel prefers SSSE3 instructions for memory/string rountines
+      /* Intel prefers SSSE3 instructions for memory/string routines
 	 if they are avaiable.  */
       if ((ecx & 0x200))
 	__x86_64_preferred_memory_instruction = 3;
       else
 	__x86_64_preferred_memory_instruction = 2;
-#endif
 
       /* Figure out the number of logical threads that share the
 	 highest cache level.  */
@@ -577,8 +571,6 @@ init_cacheinfo (void)
   if (shared > 0)
     {
       __x86_64_shared_cache_size_half = shared / 2;
-#ifdef NOT_USED_RIGHT_NOW
       __x86_64_shared_cache_size = shared;
-#endif
     }
 }
diff --git a/sysdeps/x86_64/memset.S b/sysdeps/x86_64/memset.S
index 939240600d..c7bf2318de 100644
--- a/sysdeps/x86_64/memset.S
+++ b/sysdeps/x86_64/memset.S
@@ -1,8 +1,7 @@
 /* memset/bzero -- set memory area to CH/0
    Optimized version for x86-64.
-   Copyright (C) 2002, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2002-2005, 2007, 2008 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Andreas Jaeger <aj@suse.de>.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -20,13 +19,9 @@
    02111-1307 USA.  */
 
 #include <sysdep.h>
-#include "asm-syntax.h"
-#include "bp-sym.h"
-#include "bp-asm.h"
 
-/* This is somehow experimental and could made dependend on the cache
-   size.  */
-#define LARGE $120000
+#define __STOS_LOWER_BOUNDARY	$8192
+#define __STOS_UPPER_BOUNDARY	$65536
 
         .text
 #ifndef NOT_IN_libc
@@ -46,89 +41,1291 @@ END (__memset_chk)
 #endif
 ENTRY (memset)
 L(memset_entry):
-	cmp	$0x7,%rdx	/* Check for small length.  */
-	mov	%rdi,%rcx	/* Save ptr as return value.  */
-	jbe	7f
+	cmp    $0x1,%rdx
+	mov    %rdi,%rax	/* memset returns the dest address.  */
+	jne    L(ck2)
+	mov    %sil,(%rdi)
+	retq
+L(ck2):
+	mov    $0x101010101010101,%r9
+	mov    %rdx,%r8
+	movzbq %sil,%rdx
+	imul   %r9,%rdx
+L(now_dw_aligned):
+	cmp    $0x90,%r8
+	jg     L(ck_mem_ops_method)
+L(now_dw_aligned_small):
+	lea    L(setPxQx)(%rip),%r11
+	add    %r8,%rdi
+#ifndef PIC
+	jmpq   *(%r11,%r8,8)
+#else
+	movslq (%r11,%r8,4),%rcx
+	lea    (%rcx,%r11,1),%r11
+	jmpq   *%r11
+#endif
 
-	/* Populate 8 bit data to full 64-bit.  */
-	movabs	$0x0101010101010101,%r8
-	movzbl	%sil,%eax
-	imul	%rax,%r8
-	test	$0x7,%edi	/* Check for alignment.  */
-	je	2f
+L(Got0):
+	retq
 
-	.p2align 4
-1:	/* Align ptr to 8 byte.  */
-	mov	%sil,(%rcx)
-	dec	%rdx
-	inc	%rcx
-	test	$0x7,%ecx
-	jne	1b
-
-2:	/* Check for really large regions.  */
-	mov	%rdx,%rax
-	shr	$0x6,%rax
-	je	4f
-	cmp	LARGE, %rdx
-	jae	11f
+	.pushsection .rodata
+	.balign     16
+#ifndef PIC
+L(setPxQx):
+	.quad       L(Got0), L(P1Q0), L(P2Q0), L(P3Q0)
+	.quad       L(P4Q0), L(P5Q0), L(P6Q0), L(P7Q0)
+	.quad       L(P0Q1), L(P1Q1), L(P2Q1), L(P3Q1)
+	.quad       L(P4Q1), L(P5Q1), L(P6Q1), L(P7Q1)
+	.quad       L(P0Q2), L(P1Q2), L(P2Q2), L(P3Q2)
+	.quad       L(P4Q2), L(P5Q2), L(P6Q2), L(P7Q2)
+	.quad       L(P0Q3), L(P1Q3), L(P2Q3), L(P3Q3)
+	.quad       L(P4Q3), L(P5Q3), L(P6Q3), L(P7Q3)
+	.quad       L(P0Q4), L(P1Q4), L(P2Q4), L(P3Q4)
+	.quad       L(P4Q4), L(P5Q4), L(P6Q4), L(P7Q4)
+	.quad       L(P0Q5), L(P1Q5), L(P2Q5), L(P3Q5)
+	.quad       L(P4Q5), L(P5Q5), L(P6Q5), L(P7Q5)
+	.quad       L(P0Q6), L(P1Q6), L(P2Q6), L(P3Q6)
+	.quad       L(P4Q6), L(P5Q6), L(P6Q6), L(P7Q6)
+	.quad       L(P0Q7), L(P1Q7), L(P2Q7), L(P3Q7)
+	.quad       L(P4Q7), L(P5Q7), L(P6Q7), L(P7Q7)
+	.quad       L(P0Q8), L(P1Q8), L(P2Q8), L(P3Q8)
+	.quad       L(P4Q8), L(P5Q8), L(P6Q8), L(P7Q8)
+	.quad       L(P0Q9), L(P1Q9), L(P2Q9), L(P3Q9)
+	.quad       L(P4Q9), L(P5Q9), L(P6Q9), L(P7Q9)
+	.quad       L(P0QA), L(P1QA), L(P2QA), L(P3QA)
+	.quad       L(P4QA), L(P5QA), L(P6QA), L(P7QA)
+	.quad       L(P0QB), L(P1QB), L(P2QB), L(P3QB)
+	.quad       L(P4QB), L(P5QB), L(P6QB), L(P7QB)
+	.quad       L(P0QC), L(P1QC), L(P2QC), L(P3QC)
+	.quad       L(P4QC), L(P5QC), L(P6QC), L(P7QC)
+	.quad       L(P0QD), L(P1QD), L(P2QD), L(P3QD)
+	.quad       L(P4QD), L(P5QD), L(P6QD), L(P7QD)
+	.quad       L(P0QE), L(P1QE), L(P2QE), L(P3QE)
+	.quad       L(P4QE), L(P5QE), L(P6QE), L(P7QE)
+	.quad       L(P0QF), L(P1QF), L(P2QF), L(P3QF)
+	.quad       L(P4QF), L(P5QF), L(P6QF), L(P7QF)
+	.quad       L(P0QG), L(P1QG), L(P2QG), L(P3QG)
+	.quad       L(P4QG), L(P5QG), L(P6QG), L(P7QG)
+	.quad       L(P0QH), L(P1QH), L(P2QH), L(P3QH)
+	.quad       L(P4QH), L(P5QH), L(P6QH), L(P7QH)
+	.quad       L(P0QI)
+# ifdef USE_EXTRA_TABLE
+	.quad       L(P1QI), L(P2QI), L(P3QI), L(P4QI)
+	.quad       L(P5QI), L(P6QI), L(P7QI)
+# endif
+#else
+L(setPxQx):
+	.int       L(Got0)-L(setPxQx)
+	.int       L(P1Q0)-L(setPxQx)
+	.int       L(P2Q0)-L(setPxQx)
+	.int       L(P3Q0)-L(setPxQx)
+	.int       L(P4Q0)-L(setPxQx)
+	.int       L(P5Q0)-L(setPxQx)
+	.int       L(P6Q0)-L(setPxQx)
+	.int       L(P7Q0)-L(setPxQx)
+
+	.int       L(P0Q1)-L(setPxQx)
+	.int       L(P1Q1)-L(setPxQx)
+	.int       L(P2Q1)-L(setPxQx)
+	.int       L(P3Q1)-L(setPxQx)
+	.int       L(P4Q1)-L(setPxQx)
+	.int       L(P5Q1)-L(setPxQx)
+	.int       L(P6Q1)-L(setPxQx)
+	.int       L(P7Q1)-L(setPxQx)
+
+	.int       L(P0Q2)-L(setPxQx)
+	.int       L(P1Q2)-L(setPxQx)
+	.int       L(P2Q2)-L(setPxQx)
+	.int       L(P3Q2)-L(setPxQx)
+	.int       L(P4Q2)-L(setPxQx)
+	.int       L(P5Q2)-L(setPxQx)
+	.int       L(P6Q2)-L(setPxQx)
+	.int       L(P7Q2)-L(setPxQx)
+
+	.int       L(P0Q3)-L(setPxQx)
+	.int       L(P1Q3)-L(setPxQx)
+	.int       L(P2Q3)-L(setPxQx)
+	.int       L(P3Q3)-L(setPxQx)
+	.int       L(P4Q3)-L(setPxQx)
+	.int       L(P5Q3)-L(setPxQx)
+	.int       L(P6Q3)-L(setPxQx)
+	.int       L(P7Q3)-L(setPxQx)
+
+	.int       L(P0Q4)-L(setPxQx)
+	.int       L(P1Q4)-L(setPxQx)
+	.int       L(P2Q4)-L(setPxQx)
+	.int       L(P3Q4)-L(setPxQx)
+	.int       L(P4Q4)-L(setPxQx)
+	.int       L(P5Q4)-L(setPxQx)
+	.int       L(P6Q4)-L(setPxQx)
+	.int       L(P7Q4)-L(setPxQx)
+
+	.int       L(P0Q5)-L(setPxQx)
+	.int       L(P1Q5)-L(setPxQx)
+	.int       L(P2Q5)-L(setPxQx)
+	.int       L(P3Q5)-L(setPxQx)
+	.int       L(P4Q5)-L(setPxQx)
+	.int       L(P5Q5)-L(setPxQx)
+	.int       L(P6Q5)-L(setPxQx)
+	.int       L(P7Q5)-L(setPxQx)
+
+	.int       L(P0Q6)-L(setPxQx)
+	.int       L(P1Q6)-L(setPxQx)
+	.int       L(P2Q6)-L(setPxQx)
+	.int       L(P3Q6)-L(setPxQx)
+	.int       L(P4Q6)-L(setPxQx)
+	.int       L(P5Q6)-L(setPxQx)
+	.int       L(P6Q6)-L(setPxQx)
+	.int       L(P7Q6)-L(setPxQx)
+
+	.int       L(P0Q7)-L(setPxQx)
+	.int       L(P1Q7)-L(setPxQx)
+	.int       L(P2Q7)-L(setPxQx)
+	.int       L(P3Q7)-L(setPxQx)
+	.int       L(P4Q7)-L(setPxQx)
+	.int       L(P5Q7)-L(setPxQx)
+	.int       L(P6Q7)-L(setPxQx)
+	.int       L(P7Q7)-L(setPxQx)
+
+	.int       L(P0Q8)-L(setPxQx)
+	.int       L(P1Q8)-L(setPxQx)
+	.int       L(P2Q8)-L(setPxQx)
+	.int       L(P3Q8)-L(setPxQx)
+	.int       L(P4Q8)-L(setPxQx)
+	.int       L(P5Q8)-L(setPxQx)
+	.int       L(P6Q8)-L(setPxQx)
+	.int       L(P7Q8)-L(setPxQx)
+
+	.int       L(P0Q9)-L(setPxQx)
+	.int       L(P1Q9)-L(setPxQx)
+	.int       L(P2Q9)-L(setPxQx)
+	.int       L(P3Q9)-L(setPxQx)
+	.int       L(P4Q9)-L(setPxQx)
+	.int       L(P5Q9)-L(setPxQx)
+	.int       L(P6Q9)-L(setPxQx)
+	.int       L(P7Q9)-L(setPxQx)
+
+	.int       L(P0QA)-L(setPxQx)
+	.int       L(P1QA)-L(setPxQx)
+	.int       L(P2QA)-L(setPxQx)
+	.int       L(P3QA)-L(setPxQx)
+	.int       L(P4QA)-L(setPxQx)
+	.int       L(P5QA)-L(setPxQx)
+	.int       L(P6QA)-L(setPxQx)
+	.int       L(P7QA)-L(setPxQx)
+
+	.int       L(P0QB)-L(setPxQx)
+	.int       L(P1QB)-L(setPxQx)
+	.int       L(P2QB)-L(setPxQx)
+	.int       L(P3QB)-L(setPxQx)
+	.int       L(P4QB)-L(setPxQx)
+	.int       L(P5QB)-L(setPxQx)
+	.int       L(P6QB)-L(setPxQx)
+	.int       L(P7QB)-L(setPxQx)
+
+	.int       L(P0QC)-L(setPxQx)
+	.int       L(P1QC)-L(setPxQx)
+	.int       L(P2QC)-L(setPxQx)
+	.int       L(P3QC)-L(setPxQx)
+	.int       L(P4QC)-L(setPxQx)
+	.int       L(P5QC)-L(setPxQx)
+	.int       L(P6QC)-L(setPxQx)
+	.int       L(P7QC)-L(setPxQx)
+
+	.int       L(P0QD)-L(setPxQx)
+	.int       L(P1QD)-L(setPxQx)
+	.int       L(P2QD)-L(setPxQx)
+	.int       L(P3QD)-L(setPxQx)
+	.int       L(P4QD)-L(setPxQx)
+	.int       L(P5QD)-L(setPxQx)
+	.int       L(P6QD)-L(setPxQx)
+	.int       L(P7QD)-L(setPxQx)
+
+	.int       L(P0QE)-L(setPxQx)
+	.int       L(P1QE)-L(setPxQx)
+	.int       L(P2QE)-L(setPxQx)
+	.int       L(P3QE)-L(setPxQx)
+	.int       L(P4QE)-L(setPxQx)
+	.int       L(P5QE)-L(setPxQx)
+	.int       L(P6QE)-L(setPxQx)
+	.int       L(P7QE)-L(setPxQx)
+
+	.int       L(P0QF)-L(setPxQx)
+	.int       L(P1QF)-L(setPxQx)
+	.int       L(P2QF)-L(setPxQx)
+	.int       L(P3QF)-L(setPxQx)
+	.int       L(P4QF)-L(setPxQx)
+	.int       L(P5QF)-L(setPxQx)
+	.int       L(P6QF)-L(setPxQx)
+	.int       L(P7QF)-L(setPxQx)
+
+	.int       L(P0QG)-L(setPxQx)
+	.int       L(P1QG)-L(setPxQx)
+	.int       L(P2QG)-L(setPxQx)
+	.int       L(P3QG)-L(setPxQx)
+	.int       L(P4QG)-L(setPxQx)
+	.int       L(P5QG)-L(setPxQx)
+	.int       L(P6QG)-L(setPxQx)
+	.int       L(P7QG)-L(setPxQx)
+
+	.int       L(P0QH)-L(setPxQx)
+	.int       L(P1QH)-L(setPxQx)
+	.int       L(P2QH)-L(setPxQx)
+	.int       L(P3QH)-L(setPxQx)
+	.int       L(P4QH)-L(setPxQx)
+	.int       L(P5QH)-L(setPxQx)
+	.int       L(P6QH)-L(setPxQx)
+	.int       L(P7QH)-L(setPxQx)
+
+	.int       L(P0QI)-L(setPxQx)
+# ifdef USE_EXTRA_TABLE
+	.int       L(P1QI)-L(setPxQx)
+	.int       L(P2QI)-L(setPxQx)
+	.int       L(P3QI)-L(setPxQx)
+	.int       L(P4QI)-L(setPxQx)
+	.int       L(P5QI)-L(setPxQx)
+	.int       L(P6QI)-L(setPxQx)
+	.int       L(P7QI)-L(setPxQx)
+# endif
+#endif
+	.popsection
+
+	.balign     16
+#ifdef USE_EXTRA_TABLE
+L(P1QI): mov    %rdx,-0x91(%rdi)
+#endif
+L(P1QH): mov    %rdx,-0x89(%rdi)
+L(P1QG): mov    %rdx,-0x81(%rdi)
+#		   .balign     16
+L(P1QF): mov    %rdx,-0x79(%rdi)
+L(P1QE): mov    %rdx,-0x71(%rdi)
+L(P1QD): mov    %rdx,-0x69(%rdi)
+L(P1QC): mov    %rdx,-0x61(%rdi)
+L(P1QB): mov    %rdx,-0x59(%rdi)
+L(P1QA): mov    %rdx,-0x51(%rdi)
+L(P1Q9): mov    %rdx,-0x49(%rdi)
+L(P1Q8): mov    %rdx,-0x41(%rdi)
+L(P1Q7): mov    %rdx,-0x39(%rdi)
+L(P1Q6): mov    %rdx,-0x31(%rdi)
+L(P1Q5): mov    %rdx,-0x29(%rdi)
+L(P1Q4): mov    %rdx,-0x21(%rdi)
+L(P1Q3): mov    %rdx,-0x19(%rdi)
+L(P1Q2): mov    %rdx,-0x11(%rdi)
+L(P1Q1): mov    %rdx,-0x9(%rdi)
+L(P1Q0): mov    %dl,-0x1(%rdi)
+		retq
+
+	.balign     16
+L(P0QI): mov    %rdx,-0x90(%rdi)
+L(P0QH): mov    %rdx,-0x88(%rdi)
+#		   .balign     16
+L(P0QG): mov    %rdx,-0x80(%rdi)
+L(P0QF): mov    %rdx,-0x78(%rdi)
+L(P0QE): mov    %rdx,-0x70(%rdi)
+L(P0QD): mov    %rdx,-0x68(%rdi)
+L(P0QC): mov    %rdx,-0x60(%rdi)
+L(P0QB): mov    %rdx,-0x58(%rdi)
+L(P0QA): mov    %rdx,-0x50(%rdi)
+L(P0Q9): mov    %rdx,-0x48(%rdi)
+L(P0Q8): mov    %rdx,-0x40(%rdi)
+L(P0Q7): mov    %rdx,-0x38(%rdi)
+L(P0Q6): mov    %rdx,-0x30(%rdi)
+L(P0Q5): mov    %rdx,-0x28(%rdi)
+L(P0Q4): mov    %rdx,-0x20(%rdi)
+L(P0Q3): mov    %rdx,-0x18(%rdi)
+L(P0Q2): mov    %rdx,-0x10(%rdi)
+L(P0Q1): mov    %rdx,-0x8(%rdi)
+L(P0Q0): retq
+
+
+	.balign     16
+#ifdef USE_EXTRA_TABLE
+L(P2QI): mov    %rdx,-0x92(%rdi)
+#endif
+L(P2QH): mov    %rdx,-0x8a(%rdi)
+L(P2QG): mov    %rdx,-0x82(%rdi)
+#		   .balign     16
+L(P2QF): mov    %rdx,-0x7a(%rdi)
+L(P2QE): mov    %rdx,-0x72(%rdi)
+L(P2QD): mov    %rdx,-0x6a(%rdi)
+L(P2QC): mov    %rdx,-0x62(%rdi)
+L(P2QB): mov    %rdx,-0x5a(%rdi)
+L(P2QA): mov    %rdx,-0x52(%rdi)
+L(P2Q9): mov    %rdx,-0x4a(%rdi)
+L(P2Q8): mov    %rdx,-0x42(%rdi)
+L(P2Q7): mov    %rdx,-0x3a(%rdi)
+L(P2Q6): mov    %rdx,-0x32(%rdi)
+L(P2Q5): mov    %rdx,-0x2a(%rdi)
+L(P2Q4): mov    %rdx,-0x22(%rdi)
+L(P2Q3): mov    %rdx,-0x1a(%rdi)
+L(P2Q2): mov    %rdx,-0x12(%rdi)
+L(P2Q1): mov    %rdx,-0xa(%rdi)
+L(P2Q0): mov    %dx,-0x2(%rdi)
+		retq
+
+	.balign     16
+#ifdef USE_EXTRA_TABLE
+L(P3QI): mov    %rdx,-0x93(%rdi)
+#endif
+L(P3QH): mov    %rdx,-0x8b(%rdi)
+L(P3QG): mov    %rdx,-0x83(%rdi)
+#		   .balign     16
+L(P3QF): mov    %rdx,-0x7b(%rdi)
+L(P3QE): mov    %rdx,-0x73(%rdi)
+L(P3QD): mov    %rdx,-0x6b(%rdi)
+L(P3QC): mov    %rdx,-0x63(%rdi)
+L(P3QB): mov    %rdx,-0x5b(%rdi)
+L(P3QA): mov    %rdx,-0x53(%rdi)
+L(P3Q9): mov    %rdx,-0x4b(%rdi)
+L(P3Q8): mov    %rdx,-0x43(%rdi)
+L(P3Q7): mov    %rdx,-0x3b(%rdi)
+L(P3Q6): mov    %rdx,-0x33(%rdi)
+L(P3Q5): mov    %rdx,-0x2b(%rdi)
+L(P3Q4): mov    %rdx,-0x23(%rdi)
+L(P3Q3): mov    %rdx,-0x1b(%rdi)
+L(P3Q2): mov    %rdx,-0x13(%rdi)
+L(P3Q1): mov    %rdx,-0xb(%rdi)
+L(P3Q0): mov    %dx,-0x3(%rdi)
+		mov    %dl,-0x1(%rdi)
+		retq
+
+	.balign     16
+#ifdef USE_EXTRA_TABLE
+L(P4QI): mov    %rdx,-0x94(%rdi)
+#endif
+L(P4QH): mov    %rdx,-0x8c(%rdi)
+L(P4QG): mov    %rdx,-0x84(%rdi)
+#		   .balign     16
+L(P4QF): mov    %rdx,-0x7c(%rdi)
+L(P4QE): mov    %rdx,-0x74(%rdi)
+L(P4QD): mov    %rdx,-0x6c(%rdi)
+L(P4QC): mov    %rdx,-0x64(%rdi)
+L(P4QB): mov    %rdx,-0x5c(%rdi)
+L(P4QA): mov    %rdx,-0x54(%rdi)
+L(P4Q9): mov    %rdx,-0x4c(%rdi)
+L(P4Q8): mov    %rdx,-0x44(%rdi)
+L(P4Q7): mov    %rdx,-0x3c(%rdi)
+L(P4Q6): mov    %rdx,-0x34(%rdi)
+L(P4Q5): mov    %rdx,-0x2c(%rdi)
+L(P4Q4): mov    %rdx,-0x24(%rdi)
+L(P4Q3): mov    %rdx,-0x1c(%rdi)
+L(P4Q2): mov    %rdx,-0x14(%rdi)
+L(P4Q1): mov    %rdx,-0xc(%rdi)
+L(P4Q0): mov    %edx,-0x4(%rdi)
+		retq
+
+	.balign     16
+#if defined(USE_EXTRA_TABLE)
+L(P5QI): mov    %rdx,-0x95(%rdi)
+#endif
+L(P5QH): mov    %rdx,-0x8d(%rdi)
+L(P5QG): mov    %rdx,-0x85(%rdi)
+#		   .balign     16
+L(P5QF): mov    %rdx,-0x7d(%rdi)
+L(P5QE): mov    %rdx,-0x75(%rdi)
+L(P5QD): mov    %rdx,-0x6d(%rdi)
+L(P5QC): mov    %rdx,-0x65(%rdi)
+L(P5QB): mov    %rdx,-0x5d(%rdi)
+L(P5QA): mov    %rdx,-0x55(%rdi)
+L(P5Q9): mov    %rdx,-0x4d(%rdi)
+L(P5Q8): mov    %rdx,-0x45(%rdi)
+L(P5Q7): mov    %rdx,-0x3d(%rdi)
+L(P5Q6): mov    %rdx,-0x35(%rdi)
+L(P5Q5): mov    %rdx,-0x2d(%rdi)
+L(P5Q4): mov    %rdx,-0x25(%rdi)
+L(P5Q3): mov    %rdx,-0x1d(%rdi)
+L(P5Q2): mov    %rdx,-0x15(%rdi)
+L(P5Q1): mov    %rdx,-0xd(%rdi)
+L(P5Q0): mov    %edx,-0x5(%rdi)
+		mov    %dl,-0x1(%rdi)
+		retq
+
+	.balign     16
+#ifdef USE_EXTRA_TABLE
+L(P6QI): mov    %rdx,-0x96(%rdi)
+#endif
+L(P6QH): mov    %rdx,-0x8e(%rdi)
+L(P6QG): mov    %rdx,-0x86(%rdi)
+#		   .balign     16
+L(P6QF): mov    %rdx,-0x7e(%rdi)
+L(P6QE): mov    %rdx,-0x76(%rdi)
+L(P6QD): mov    %rdx,-0x6e(%rdi)
+L(P6QC): mov    %rdx,-0x66(%rdi)
+L(P6QB): mov    %rdx,-0x5e(%rdi)
+L(P6QA): mov    %rdx,-0x56(%rdi)
+L(P6Q9): mov    %rdx,-0x4e(%rdi)
+L(P6Q8): mov    %rdx,-0x46(%rdi)
+L(P6Q7): mov    %rdx,-0x3e(%rdi)
+L(P6Q6): mov    %rdx,-0x36(%rdi)
+L(P6Q5): mov    %rdx,-0x2e(%rdi)
+L(P6Q4): mov    %rdx,-0x26(%rdi)
+L(P6Q3): mov    %rdx,-0x1e(%rdi)
+L(P6Q2): mov    %rdx,-0x16(%rdi)
+L(P6Q1): mov    %rdx,-0xe(%rdi)
+L(P6Q0): mov    %edx,-0x6(%rdi)
+		mov    %dx,-0x2(%rdi)
+		retq
+
+	.balign     16
+#ifdef USE_EXTRA_TABLE
+L(P7QI): mov    %rdx,-0x97(%rdi)
+#endif
+L(P7QH): mov    %rdx,-0x8f(%rdi)
+L(P7QG): mov    %rdx,-0x87(%rdi)
+#		   .balign     16
+L(P7QF): mov    %rdx,-0x7f(%rdi)
+L(P7QE): mov    %rdx,-0x77(%rdi)
+L(P7QD): mov    %rdx,-0x6f(%rdi)
+L(P7QC): mov    %rdx,-0x67(%rdi)
+L(P7QB): mov    %rdx,-0x5f(%rdi)
+L(P7QA): mov    %rdx,-0x57(%rdi)
+L(P7Q9): mov    %rdx,-0x4f(%rdi)
+L(P7Q8): mov    %rdx,-0x47(%rdi)
+L(P7Q7): mov    %rdx,-0x3f(%rdi)
+L(P7Q6): mov    %rdx,-0x37(%rdi)
+L(P7Q5): mov    %rdx,-0x2f(%rdi)
+L(P7Q4): mov    %rdx,-0x27(%rdi)
+L(P7Q3): mov    %rdx,-0x1f(%rdi)
+L(P7Q2): mov    %rdx,-0x17(%rdi)
+L(P7Q1): mov    %rdx,-0xf(%rdi)
+L(P7Q0): mov    %edx,-0x7(%rdi)
+		mov    %dx,-0x3(%rdi)
+		mov    %dl,-0x1(%rdi)
+		retq
+
+	.balign     16
+L(ck_mem_ops_method):
+
+# align to 16 byte boundary first
+	#test $0xf,%rdi
+	#jz L(aligned_now)
+	 lea    L(AliPxQx)(%rip),%r11
+	 mov    $0x10,%r10
+	 mov    %rdi,%r9
+	 and    $0xf,%r9
+	 sub    %r9,%r10
+	 and    $0xf,%r10
+	 add    %r10,%rdi
+	 sub    %r10,%r8
+#ifndef PIC
+	jmpq   *(%r11,%r10,8)
+#else
+	movslq (%r11,%r10,4),%rcx
+	lea    (%rcx,%r11,1),%r11
+	jmpq   *%r11
+#endif
+
+	.pushsection .rodata
+	.balign     16
+#ifndef PIC
+L(AliPxQx):
+	.quad       L(aligned_now), L(A1Q0), L(A2Q0), L(A3Q0)
+	.quad	    L(A4Q0), L(A5Q0), L(A6Q0), L(A7Q0)
+	.quad       L(A0Q1), L(A1Q1), L(A2Q1), L(A3Q1)
+	.quad       L(A4Q1), L(A5Q1), L(A6Q1), L(A7Q1)
+#else
+L(AliPxQx):
+	.int       L(aligned_now)-L(AliPxQx)
+	.int       L(A1Q0)-L(AliPxQx)
+	.int       L(A2Q0)-L(AliPxQx)
+	.int       L(A3Q0)-L(AliPxQx)
+	.int       L(A4Q0)-L(AliPxQx)
+	.int       L(A5Q0)-L(AliPxQx)
+	.int       L(A6Q0)-L(AliPxQx)
+	.int       L(A7Q0)-L(AliPxQx)
+
+	.int       L(A0Q1)-L(AliPxQx)
+	.int       L(A1Q1)-L(AliPxQx)
+	.int       L(A2Q1)-L(AliPxQx)
+	.int       L(A3Q1)-L(AliPxQx)
+	.int       L(A4Q1)-L(AliPxQx)
+	.int       L(A5Q1)-L(AliPxQx)
+	.int       L(A6Q1)-L(AliPxQx)
+	.int       L(A7Q1)-L(AliPxQx)
+#endif
+	.popsection
+
+	.balign     16
+L(A5Q1):    mov    %dl,-0xd(%rdi)
+L(A4Q1):    mov    %edx,-0xc(%rdi)
+L(A0Q1):    mov    %rdx,-0x8(%rdi)
+L(A0Q0):    jmp     L(aligned_now)
+
+	.balign     16
+L(A1Q1):   mov    %dl,-0x9(%rdi)
+	mov    %rdx,-0x8(%rdi)
+	jmp    L(aligned_now)
+
+	.balign     16
+L(A1Q0):   mov    %dl,-0x1(%rdi)
+	jmp    L(aligned_now)
+
+	.balign     16
+L(A3Q1):    mov    %dl,-0xb(%rdi)
+L(A2Q1):    mov    %dx,-0xa(%rdi)
+	mov    %rdx,-0x8(%rdi)
+	jmp    L(aligned_now)
+
+	.balign     16
+L(A3Q0):    mov    %dl,-0x3(%rdi)
+L(A2Q0):    mov    %dx,-0x2(%rdi)
+	jmp    L(aligned_now)
+
+	.balign     16
+L(A5Q0):    mov    %dl,-0x5(%rdi)
+L(A4Q0):    mov    %edx,-0x4(%rdi)
+	jmp    L(aligned_now)
+
+	.balign     16
+L(A7Q1):    mov    %dl,-0xf(%rdi)
+L(A6Q1):    mov    %dx,-0xe(%rdi)
+	mov    %edx,-0xc(%rdi)
+	mov    %rdx,-0x8(%rdi)
+	jmp    L(aligned_now)
+
+	.balign     16
+L(A7Q0):    mov    %dl,-0x7(%rdi)
+L(A6Q0):    mov    %dx,-0x6(%rdi)
+	mov    %edx,-0x4(%rdi)
+	jmp    L(aligned_now)
+
+	.balign     16
+L(aligned_now):
+
+	 cmpl   $0x1,__x86_64_preferred_memory_instruction(%rip)
+	 jg     L(SSE_pre)
+
+L(8byte_move_try):
+	cmpq	__STOS_LOWER_BOUNDARY,%r8
+	jae	L(8byte_stos_try)
+
+	.balign     16
+L(8byte_move):
+	movq	%r8,%rcx
+	shrq	$7,%rcx
+	jz	L(8byte_move_skip)
 
 	.p2align 4
-3:	/* Copy 64 bytes.  */
-	mov	%r8,(%rcx)
-	mov	%r8,0x8(%rcx)
-	mov	%r8,0x10(%rcx)
-	mov	%r8,0x18(%rcx)
-	mov	%r8,0x20(%rcx)
-	mov	%r8,0x28(%rcx)
-	mov	%r8,0x30(%rcx)
-	mov	%r8,0x38(%rcx)
-	add	$0x40,%rcx
-	dec	%rax
-	jne	3b
-
-4:	/* Copy final bytes.  */
-	and	$0x3f,%edx
-	mov	%rdx,%rax
-	shr	$0x3,%rax
-	je	6f
-
-5:	/* First in chunks of 8 bytes.  */
-	mov	%r8,(%rcx)
-	add	$0x8,%rcx
-	dec	%rax
-	jne	5b
-6:
-	and	$0x7,%edx
-7:
-	test	%rdx,%rdx
-	je	9f
-8:	/* And finally as bytes (up to 7).  */
-	mov	%sil,(%rcx)
-	inc	%rcx
-	dec	%rdx
-	jne	8b
-9:
-	/* Load result (only if used as memset).  */
-	mov	%rdi,%rax	/* start address of destination is result */
+
+L(8byte_move_loop):
+	decq	%rcx
+
+	movq	%rdx,    (%rdi)
+	movq	%rdx,  8 (%rdi)
+	movq	%rdx, 16 (%rdi)
+	movq	%rdx, 24 (%rdi)
+	movq	%rdx, 32 (%rdi)
+	movq	%rdx, 40 (%rdi)
+	movq	%rdx, 48 (%rdi)
+	movq	%rdx, 56 (%rdi)
+	movq	%rdx, 64 (%rdi)
+	movq	%rdx, 72 (%rdi)
+	movq	%rdx, 80 (%rdi)
+	movq	%rdx, 88 (%rdi)
+	movq	%rdx, 96 (%rdi)
+	movq	%rdx, 104 (%rdi)
+	movq	%rdx, 112 (%rdi)
+	movq	%rdx, 120 (%rdi)
+
+	leaq	128 (%rdi),%rdi
+
+	jnz     L(8byte_move_loop)
+
+L(8byte_move_skip):
+	andl	$127,%r8d
+	lea    	(%rdi,%r8,1),%rdi
+	lea    	L(setPxQx)(%rip),%r11
+
+#ifndef PIC
+	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
+#else
+	movslq	(%r11,%r8,4),%rcx
+	lea    	(%rcx,%r11,1),%r11
+	jmpq   	*%r11
+#endif
+
+	.balign     16
+L(8byte_stos_try):
+	mov    __x86_64_shared_cache_size(%rip),%r9d // ck largest cache size
+	cmpq	%r8,%r9		// calculate the lesser of remaining
+	cmovaq	%r8,%r9		// bytes and largest cache size
+	jbe	L(8byte_stos)
+
+L(8byte_move_reuse_try):
+	cmp	__STOS_UPPER_BOUNDARY,%r8
+	jae	L(8byte_move)
+
+	.balign     16
+L(8byte_stos):
+	movq	%r9,%rcx
+	andq	$-8,%r9
+
+	shrq	$3,%rcx
+	jz	L(8byte_stos_skip)
+
+	xchgq	%rax,%rdx
+
+	rep
+	stosq
+
+	xchgq	%rax,%rdx
+
+L(8byte_stos_skip):
+	subq	%r9,%r8
+	ja	L(8byte_nt_move)
+
+	andl	$7,%r8d
+	lea    	(%rdi,%r8,1),%rdi
+	lea    	L(setPxQx)(%rip),%r11
+#ifndef PIC
+	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
+#else
+	movslq	(%r11,%r8,4),%rcx
+	lea	(%rcx,%r11,1),%r11
+	jmpq   	*%r11
+#endif
+
+	.balign     16
+L(8byte_nt_move):
+	movq	%r8,%rcx
+	shrq	$7,%rcx
+	jz      L(8byte_nt_move_skip)
+
+	.balign     16
+L(8byte_nt_move_loop):
+	decq	%rcx
+
+	movntiq	%rdx,     (%rdi)
+	movntiq	%rdx,   8 (%rdi)
+	movntiq	%rdx,  16 (%rdi)
+	movntiq	%rdx,  24 (%rdi)
+	movntiq	%rdx,  32 (%rdi)
+	movntiq	%rdx,  40 (%rdi)
+	movntiq	%rdx,  48 (%rdi)
+	movntiq	%rdx,  56 (%rdi)
+	movntiq	%rdx,  64 (%rdi)
+	movntiq	%rdx,  72 (%rdi)
+	movntiq	%rdx,  80 (%rdi)
+	movntiq	%rdx,  88 (%rdi)
+	movntiq	%rdx,  96 (%rdi)
+	movntiq	%rdx, 104 (%rdi)
+	movntiq	%rdx, 112 (%rdi)
+	movntiq	%rdx, 120 (%rdi)
+
+	leaq	128 (%rdi),%rdi
+
+	jnz     L(8byte_nt_move_loop)
+
+	sfence
+
+L(8byte_nt_move_skip):
+	andl	$127,%r8d
+
+	lea    	(%rdi,%r8,1),%rdi
+	lea    	L(setPxQx)(%rip),%r11
+#ifndef PIC
+	jmpq   	*(%r11,%r8,8) # old scheme remained for nonPIC
+#else
+	movslq	(%r11,%r8,4),%rcx
+	lea    	(%rcx,%r11,1),%r11
+	jmpq   	*%r11
+#endif
+
+L(SSE_pre):
+	 # fill RegXMM0 with the pattern
+	 movd   %rdx,%xmm0
+	 punpcklqdq %xmm0,%xmm0
+
+	 lea    L(SSExDx)(%rip),%r9        # for later after the alignment
+	 cmp    $0xb0,%r8 # 176
+	 jge    L(byte32sse2_pre)
+
+	 add    %r8,%rdi
+#ifndef PIC
+	 jmpq   *(%r9,%r8,8)
+#else
+	 movslq    (%r9,%r8,4),%rcx
+	 lea    (%rcx,%r9,1),%r9
+	 jmpq   *%r9
+#endif
+
+L(SSE0QB):  movdqa %xmm0,-0xb0(%rdi)
+L(SSE0QA):  movdqa %xmm0,-0xa0(%rdi)
+L(SSE0Q9):  movdqa %xmm0,-0x90(%rdi)
+L(SSE0Q8):  movdqa %xmm0,-0x80(%rdi)
+L(SSE0Q7):  movdqa %xmm0,-0x70(%rdi)
+L(SSE0Q6):  movdqa %xmm0,-0x60(%rdi)
+L(SSE0Q5):  movdqa %xmm0,-0x50(%rdi)
+L(SSE0Q4):  movdqa %xmm0,-0x40(%rdi)
+L(SSE0Q3):  movdqa %xmm0,-0x30(%rdi)
+L(SSE0Q2):  movdqa %xmm0,-0x20(%rdi)
+L(SSE0Q1):  movdqa %xmm0,-0x10(%rdi)
+L(SSE0Q0):  retq
+
+L(SSE1QB):  movdqa %xmm0,-0xb1(%rdi)
+L(SSE1QA):  movdqa %xmm0,-0xa1(%rdi)
+L(SSE1Q9):  movdqa %xmm0,-0x91(%rdi)
+L(SSE1Q8):  movdqa %xmm0,-0x81(%rdi)
+L(SSE1Q7):  movdqa %xmm0,-0x71(%rdi)
+L(SSE1Q6):  movdqa %xmm0,-0x61(%rdi)
+L(SSE1Q5):  movdqa %xmm0,-0x51(%rdi)
+L(SSE1Q4):  movdqa %xmm0,-0x41(%rdi)
+L(SSE1Q3):  movdqa %xmm0,-0x31(%rdi)
+L(SSE1Q2):  movdqa %xmm0,-0x21(%rdi)
+L(SSE1Q1):  movdqa %xmm0,-0x11(%rdi)
+L(SSE1Q0):  mov    %dl,-0x1(%rdi)
 	retq
 
-	.p2align 4
-11:	/* Copy 64 bytes without polluting the cache.  */
-	/* We could use	movntdq    %xmm0,(%rcx) here to further
-	   speed up for large cases but let's not use XMM registers.  */
-	movnti	%r8,(%rcx)
-	movnti  %r8,0x8(%rcx)
-	movnti  %r8,0x10(%rcx)
-	movnti  %r8,0x18(%rcx)
-	movnti  %r8,0x20(%rcx)
-	movnti  %r8,0x28(%rcx)
-	movnti  %r8,0x30(%rcx)
-	movnti  %r8,0x38(%rcx)
-	add	$0x40,%rcx
-	dec	%rax
-	jne	11b
+L(SSE2QB):  movdqa %xmm0,-0xb2(%rdi)
+L(SSE2QA):  movdqa %xmm0,-0xa2(%rdi)
+L(SSE2Q9):  movdqa %xmm0,-0x92(%rdi)
+L(SSE2Q8):  movdqa %xmm0,-0x82(%rdi)
+L(SSE2Q7):  movdqa %xmm0,-0x72(%rdi)
+L(SSE2Q6):  movdqa %xmm0,-0x62(%rdi)
+L(SSE2Q5):  movdqa %xmm0,-0x52(%rdi)
+L(SSE2Q4):  movdqa %xmm0,-0x42(%rdi)
+L(SSE2Q3):  movdqa %xmm0,-0x32(%rdi)
+L(SSE2Q2):  movdqa %xmm0,-0x22(%rdi)
+L(SSE2Q1):  movdqa %xmm0,-0x12(%rdi)
+L(SSE2Q0):  mov    %dx,-0x2(%rdi)
+	retq
+
+L(SSE3QB):  movdqa %xmm0,-0xb3(%rdi)
+L(SSE3QA):  movdqa %xmm0,-0xa3(%rdi)
+L(SSE3Q9):  movdqa %xmm0,-0x93(%rdi)
+L(SSE3Q8):  movdqa %xmm0,-0x83(%rdi)
+L(SSE3Q7):  movdqa %xmm0,-0x73(%rdi)
+L(SSE3Q6):  movdqa %xmm0,-0x63(%rdi)
+L(SSE3Q5):  movdqa %xmm0,-0x53(%rdi)
+L(SSE3Q4):  movdqa %xmm0,-0x43(%rdi)
+L(SSE3Q3):  movdqa %xmm0,-0x33(%rdi)
+L(SSE3Q2):  movdqa %xmm0,-0x23(%rdi)
+L(SSE3Q1):  movdqa %xmm0,-0x13(%rdi)
+L(SSE3Q0):  mov    %dx,-0x3(%rdi)
+	mov    %dl,-0x1(%rdi)
+	retq
+
+L(SSE4QB):  movdqa %xmm0,-0xb4(%rdi)
+L(SSE4QA):  movdqa %xmm0,-0xa4(%rdi)
+L(SSE4Q9):  movdqa %xmm0,-0x94(%rdi)
+L(SSE4Q8):  movdqa %xmm0,-0x84(%rdi)
+L(SSE4Q7):  movdqa %xmm0,-0x74(%rdi)
+L(SSE4Q6):  movdqa %xmm0,-0x64(%rdi)
+L(SSE4Q5):  movdqa %xmm0,-0x54(%rdi)
+L(SSE4Q4):  movdqa %xmm0,-0x44(%rdi)
+L(SSE4Q3):  movdqa %xmm0,-0x34(%rdi)
+L(SSE4Q2):  movdqa %xmm0,-0x24(%rdi)
+L(SSE4Q1):  movdqa %xmm0,-0x14(%rdi)
+L(SSE4Q0):  mov    %edx,-0x4(%rdi)
+	retq
+
+L(SSE5QB):  movdqa %xmm0,-0xb5(%rdi)
+L(SSE5QA):  movdqa %xmm0,-0xa5(%rdi)
+L(SSE5Q9):  movdqa %xmm0,-0x95(%rdi)
+L(SSE5Q8):  movdqa %xmm0,-0x85(%rdi)
+L(SSE5Q7):  movdqa %xmm0,-0x75(%rdi)
+L(SSE5Q6):  movdqa %xmm0,-0x65(%rdi)
+L(SSE5Q5):  movdqa %xmm0,-0x55(%rdi)
+L(SSE5Q4):  movdqa %xmm0,-0x45(%rdi)
+L(SSE5Q3):  movdqa %xmm0,-0x35(%rdi)
+L(SSE5Q2):  movdqa %xmm0,-0x25(%rdi)
+L(SSE5Q1):  movdqa %xmm0,-0x15(%rdi)
+L(SSE5Q0):  mov    %edx,-0x5(%rdi)
+	mov    %dl,-0x1(%rdi)
+	retq
+
+
+L(SSE6QB):  movdqa %xmm0,-0xb6(%rdi)
+L(SSE6QA):  movdqa %xmm0,-0xa6(%rdi)
+L(SSE6Q9):  movdqa %xmm0,-0x96(%rdi)
+L(SSE6Q8):  movdqa %xmm0,-0x86(%rdi)
+L(SSE6Q7):  movdqa %xmm0,-0x76(%rdi)
+L(SSE6Q6):  movdqa %xmm0,-0x66(%rdi)
+L(SSE6Q5):  movdqa %xmm0,-0x56(%rdi)
+L(SSE6Q4):  movdqa %xmm0,-0x46(%rdi)
+L(SSE6Q3):  movdqa %xmm0,-0x36(%rdi)
+L(SSE6Q2):  movdqa %xmm0,-0x26(%rdi)
+L(SSE6Q1):  movdqa %xmm0,-0x16(%rdi)
+L(SSE6Q0):  mov    %edx,-0x6(%rdi)
+	mov    %dx,-0x2(%rdi)
+	retq
+
+L(SSE7QB):  movdqa %xmm0,-0xb7(%rdi)
+L(SSE7QA):  movdqa %xmm0,-0xa7(%rdi)
+L(SSE7Q9):  movdqa %xmm0,-0x97(%rdi)
+L(SSE7Q8):  movdqa %xmm0,-0x87(%rdi)
+L(SSE7Q7):  movdqa %xmm0,-0x77(%rdi)
+L(SSE7Q6):  movdqa %xmm0,-0x67(%rdi)
+L(SSE7Q5):  movdqa %xmm0,-0x57(%rdi)
+L(SSE7Q4):  movdqa %xmm0,-0x47(%rdi)
+L(SSE7Q3):  movdqa %xmm0,-0x37(%rdi)
+L(SSE7Q2):  movdqa %xmm0,-0x27(%rdi)
+L(SSE7Q1):  movdqa %xmm0,-0x17(%rdi)
+L(SSE7Q0):  mov    %edx,-0x7(%rdi)
+	mov    %dx,-0x3(%rdi)
+	mov    %dl,-0x1(%rdi)
+	retq
+
+L(SSE8QB):  movdqa %xmm0,-0xb8(%rdi)
+L(SSE8QA):  movdqa %xmm0,-0xa8(%rdi)
+L(SSE8Q9):  movdqa %xmm0,-0x98(%rdi)
+L(SSE8Q8):  movdqa %xmm0,-0x88(%rdi)
+L(SSE8Q7):  movdqa %xmm0,-0x78(%rdi)
+L(SSE8Q6):  movdqa %xmm0,-0x68(%rdi)
+L(SSE8Q5):  movdqa %xmm0,-0x58(%rdi)
+L(SSE8Q4):  movdqa %xmm0,-0x48(%rdi)
+L(SSE8Q3):  movdqa %xmm0,-0x38(%rdi)
+L(SSE8Q2):  movdqa %xmm0,-0x28(%rdi)
+L(SSE8Q1):  movdqa %xmm0,-0x18(%rdi)
+L(SSE8Q0):  mov    %rdx,-0x8(%rdi)
+	retq
+
+L(SSE9QB):  movdqa %xmm0,-0xb9(%rdi)
+L(SSE9QA):  movdqa %xmm0,-0xa9(%rdi)
+L(SSE9Q9):  movdqa %xmm0,-0x99(%rdi)
+L(SSE9Q8):  movdqa %xmm0,-0x89(%rdi)
+L(SSE9Q7):  movdqa %xmm0,-0x79(%rdi)
+L(SSE9Q6):  movdqa %xmm0,-0x69(%rdi)
+L(SSE9Q5):  movdqa %xmm0,-0x59(%rdi)
+L(SSE9Q4):  movdqa %xmm0,-0x49(%rdi)
+L(SSE9Q3):  movdqa %xmm0,-0x39(%rdi)
+L(SSE9Q2):  movdqa %xmm0,-0x29(%rdi)
+L(SSE9Q1):  movdqa %xmm0,-0x19(%rdi)
+L(SSE9Q0):  mov    %rdx,-0x9(%rdi)
+	mov    %dl,-0x1(%rdi)
+	retq
+
+L(SSE10QB): movdqa %xmm0,-0xba(%rdi)
+L(SSE10QA): movdqa %xmm0,-0xaa(%rdi)
+L(SSE10Q9): movdqa %xmm0,-0x9a(%rdi)
+L(SSE10Q8): movdqa %xmm0,-0x8a(%rdi)
+L(SSE10Q7): movdqa %xmm0,-0x7a(%rdi)
+L(SSE10Q6): movdqa %xmm0,-0x6a(%rdi)
+L(SSE10Q5): movdqa %xmm0,-0x5a(%rdi)
+L(SSE10Q4): movdqa %xmm0,-0x4a(%rdi)
+L(SSE10Q3): movdqa %xmm0,-0x3a(%rdi)
+L(SSE10Q2): movdqa %xmm0,-0x2a(%rdi)
+L(SSE10Q1): movdqa %xmm0,-0x1a(%rdi)
+L(SSE10Q0): mov    %rdx,-0xa(%rdi)
+	mov    %dx,-0x2(%rdi)
+	retq
+
+L(SSE11QB): movdqa %xmm0,-0xbb(%rdi)
+L(SSE11QA): movdqa %xmm0,-0xab(%rdi)
+L(SSE11Q9): movdqa %xmm0,-0x9b(%rdi)
+L(SSE11Q8): movdqa %xmm0,-0x8b(%rdi)
+L(SSE11Q7): movdqa %xmm0,-0x7b(%rdi)
+L(SSE11Q6): movdqa %xmm0,-0x6b(%rdi)
+L(SSE11Q5): movdqa %xmm0,-0x5b(%rdi)
+L(SSE11Q4): movdqa %xmm0,-0x4b(%rdi)
+L(SSE11Q3): movdqa %xmm0,-0x3b(%rdi)
+L(SSE11Q2): movdqa %xmm0,-0x2b(%rdi)
+L(SSE11Q1): movdqa %xmm0,-0x1b(%rdi)
+L(SSE11Q0): mov    %rdx,-0xb(%rdi)
+	mov    %dx,-0x3(%rdi)
+	mov    %dl,-0x1(%rdi)
+	retq
+
+L(SSE12QB): movdqa %xmm0,-0xbc(%rdi)
+L(SSE12QA): movdqa %xmm0,-0xac(%rdi)
+L(SSE12Q9): movdqa %xmm0,-0x9c(%rdi)
+L(SSE12Q8): movdqa %xmm0,-0x8c(%rdi)
+L(SSE12Q7): movdqa %xmm0,-0x7c(%rdi)
+L(SSE12Q6): movdqa %xmm0,-0x6c(%rdi)
+L(SSE12Q5): movdqa %xmm0,-0x5c(%rdi)
+L(SSE12Q4): movdqa %xmm0,-0x4c(%rdi)
+L(SSE12Q3): movdqa %xmm0,-0x3c(%rdi)
+L(SSE12Q2): movdqa %xmm0,-0x2c(%rdi)
+L(SSE12Q1): movdqa %xmm0,-0x1c(%rdi)
+L(SSE12Q0): mov    %rdx,-0xc(%rdi)
+	mov    %edx,-0x4(%rdi)
+	retq
+
+L(SSE13QB): movdqa %xmm0,-0xbd(%rdi)
+L(SSE13QA): movdqa %xmm0,-0xad(%rdi)
+L(SSE13Q9): movdqa %xmm0,-0x9d(%rdi)
+L(SSE13Q8): movdqa %xmm0,-0x8d(%rdi)
+L(SSE13Q7): movdqa %xmm0,-0x7d(%rdi)
+L(SSE13Q6): movdqa %xmm0,-0x6d(%rdi)
+L(SSE13Q5): movdqa %xmm0,-0x5d(%rdi)
+L(SSE13Q4): movdqa %xmm0,-0x4d(%rdi)
+L(SSE13Q3): movdqa %xmm0,-0x3d(%rdi)
+L(SSE13Q2): movdqa %xmm0,-0x2d(%rdi)
+L(SSE13Q1): movdqa %xmm0,-0x1d(%rdi)
+L(SSE13Q0): mov    %rdx,-0xd(%rdi)
+	mov    %edx,-0x5(%rdi)
+	mov    %dl,-0x1(%rdi)
+	retq
+
+L(SSE14QB): movdqa %xmm0,-0xbe(%rdi)
+L(SSE14QA): movdqa %xmm0,-0xae(%rdi)
+L(SSE14Q9): movdqa %xmm0,-0x9e(%rdi)
+L(SSE14Q8): movdqa %xmm0,-0x8e(%rdi)
+L(SSE14Q7): movdqa %xmm0,-0x7e(%rdi)
+L(SSE14Q6): movdqa %xmm0,-0x6e(%rdi)
+L(SSE14Q5): movdqa %xmm0,-0x5e(%rdi)
+L(SSE14Q4): movdqa %xmm0,-0x4e(%rdi)
+L(SSE14Q3): movdqa %xmm0,-0x3e(%rdi)
+L(SSE14Q2): movdqa %xmm0,-0x2e(%rdi)
+L(SSE14Q1): movdqa %xmm0,-0x1e(%rdi)
+L(SSE14Q0): mov    %rdx,-0xe(%rdi)
+	mov    %edx,-0x6(%rdi)
+	mov    %dx,-0x2(%rdi)
+	retq
+
+L(SSE15QB): movdqa %xmm0,-0xbf(%rdi)
+L(SSE15QA): movdqa %xmm0,-0xaf(%rdi)
+L(SSE15Q9): movdqa %xmm0,-0x9f(%rdi)
+L(SSE15Q8): movdqa %xmm0,-0x8f(%rdi)
+L(SSE15Q7): movdqa %xmm0,-0x7f(%rdi)
+L(SSE15Q6): movdqa %xmm0,-0x6f(%rdi)
+L(SSE15Q5): movdqa %xmm0,-0x5f(%rdi)
+L(SSE15Q4): movdqa %xmm0,-0x4f(%rdi)
+L(SSE15Q3): movdqa %xmm0,-0x3f(%rdi)
+L(SSE15Q2): movdqa %xmm0,-0x2f(%rdi)
+L(SSE15Q1): movdqa %xmm0,-0x1f(%rdi)
+L(SSE15Q0): mov    %rdx,-0xf(%rdi)
+	mov    %edx,-0x7(%rdi)
+	mov    %dx,-0x3(%rdi)
+	mov    %dl,-0x1(%rdi)
+	retq
+
+	.balign     16
+L(byte32sse2_pre):
+
+	mov    __x86_64_shared_cache_size(%rip),%r9d  # The largest cache size
+	cmp    %r9,%r8
+	jg     L(sse2_nt_move_pre)
+	#jmp    L(byte32sse2)
+	.balign     16
+L(byte32sse2):
+	lea    -0x80(%r8),%r8 # 128
+	cmp    $0x80,%r8   # 128
+	movdqa %xmm0,(%rdi)
+	movdqa %xmm0,0x10(%rdi)
+	movdqa %xmm0,0x20(%rdi)
+	movdqa %xmm0,0x30(%rdi)
+	movdqa %xmm0,0x40(%rdi)
+	movdqa %xmm0,0x50(%rdi)
+	movdqa %xmm0,0x60(%rdi)
+	movdqa %xmm0,0x70(%rdi)
+
+	lea    0x80(%rdi),%rdi
+	jge    L(byte32sse2)
+	lea    L(SSExDx)(%rip),%r11
+	add    %r8,%rdi
+#ifndef PIC
+	jmpq   *(%r11,%r8,8)
+#else
+	movslq    (%r11,%r8,4),%rcx
+	lea   (%rcx,%r11,1),%r11
+	jmpq   *%r11
+#endif
+
+	.balign     16
+L(sse2_nt_move_pre):
+	cmp    $0x0,%r9
+	je     L(byte32sse2)
+	jmp    L(sse2_nt_move)
+
+	.balign     16
+L(sse2_nt_move):
+	lea    -0x80(%r8),%r8
+	cmp    $0x80,%r8
+
+	movntdq %xmm0,(%rdi)
+	movntdq %xmm0,0x10(%rdi)
+	movntdq %xmm0,0x20(%rdi)
+	movntdq %xmm0,0x30(%rdi)
+	movntdq %xmm0,0x40(%rdi)
+	movntdq %xmm0,0x50(%rdi)
+	movntdq %xmm0,0x60(%rdi)
+	movntdq %xmm0,0x70(%rdi)
+
+	lea    0x80(%rdi),%rdi
+	jge    L(sse2_nt_move)
+	lea    L(SSExDx)(%rip),%r11
 	sfence
-	jmp	4b
+	add    %r8,%rdi
+#ifndef PIC
+	jmpq   *(%r11,%r8,8)
+#else
+	movslq (%r11,%r8,4),%rcx
+	lea   (%rcx,%r11,1),%r11
+	jmpq   *%r11
+#endif
+
+	.pushsection .rodata
+	.balign     16
+#ifndef PIC
+L(SSExDx):
+	.quad       L(SSE0Q0), L(SSE1Q0), L(SSE2Q0), L(SSE3Q0)
+	.quad       L(SSE4Q0), L(SSE5Q0), L(SSE6Q0), L(SSE7Q0)
+	.quad       L(SSE8Q0), L(SSE9Q0), L(SSE10Q0), L(SSE11Q0)
+	.quad       L(SSE12Q0), L(SSE13Q0), L(SSE14Q0), L(SSE15Q0)
+	.quad       L(SSE0Q1), L(SSE1Q1), L(SSE2Q1), L(SSE3Q1)
+	.quad       L(SSE4Q1), L(SSE5Q1), L(SSE6Q1), L(SSE7Q1)
+	.quad       L(SSE8Q1), L(SSE9Q1), L(SSE10Q1), L(SSE11Q1)
+	.quad       L(SSE12Q1), L(SSE13Q1), L(SSE14Q1), L(SSE15Q1)
+	.quad       L(SSE0Q2), L(SSE1Q2), L(SSE2Q2), L(SSE3Q2)
+	.quad       L(SSE4Q2), L(SSE5Q2), L(SSE6Q2), L(SSE7Q2)
+	.quad       L(SSE8Q2), L(SSE9Q2), L(SSE10Q2), L(SSE11Q2)
+	.quad       L(SSE12Q2), L(SSE13Q2), L(SSE14Q2), L(SSE15Q2)
+	.quad       L(SSE0Q3), L(SSE1Q3), L(SSE2Q3), L(SSE3Q3)
+	.quad       L(SSE4Q3), L(SSE5Q3), L(SSE6Q3), L(SSE7Q3)
+	.quad       L(SSE8Q3), L(SSE9Q3), L(SSE10Q3), L(SSE11Q3)
+	.quad       L(SSE12Q3), L(SSE13Q3), L(SSE14Q3), L(SSE15Q3)
+	.quad       L(SSE0Q4), L(SSE1Q4), L(SSE2Q4), L(SSE3Q4)
+	.quad       L(SSE4Q4), L(SSE5Q4), L(SSE6Q4), L(SSE7Q4)
+	.quad       L(SSE8Q4), L(SSE9Q4), L(SSE10Q4), L(SSE11Q4)
+	.quad       L(SSE12Q4), L(SSE13Q4), L(SSE14Q4), L(SSE15Q4)
+	.quad       L(SSE0Q5), L(SSE1Q5), L(SSE2Q5), L(SSE3Q5)
+	.quad       L(SSE4Q5), L(SSE5Q5), L(SSE6Q5), L(SSE7Q5)
+	.quad       L(SSE8Q5), L(SSE9Q5), L(SSE10Q5), L(SSE11Q5)
+	.quad       L(SSE12Q5), L(SSE13Q5), L(SSE14Q5), L(SSE15Q5)
+	.quad       L(SSE0Q6), L(SSE1Q6), L(SSE2Q6), L(SSE3Q6)
+	.quad       L(SSE4Q6), L(SSE5Q6), L(SSE6Q6), L(SSE7Q6)
+	.quad       L(SSE8Q6), L(SSE9Q6), L(SSE10Q6), L(SSE11Q6)
+	.quad       L(SSE12Q6), L(SSE13Q6), L(SSE14Q6), L(SSE15Q6)
+	.quad       L(SSE0Q7), L(SSE1Q7), L(SSE2Q7), L(SSE3Q7)
+	.quad       L(SSE4Q7), L(SSE5Q7), L(SSE6Q7), L(SSE7Q7)
+	.quad       L(SSE8Q7), L(SSE9Q7), L(SSE10Q7), L(SSE11Q7)
+	.quad       L(SSE12Q7), L(SSE13Q7), L(SSE14Q7), L(SSE15Q7)
+	.quad       L(SSE0Q8), L(SSE1Q8), L(SSE2Q8), L(SSE3Q8)
+	.quad       L(SSE4Q8), L(SSE5Q8), L(SSE6Q8), L(SSE7Q8)
+	.quad       L(SSE8Q8), L(SSE9Q8), L(SSE10Q8), L(SSE11Q8)
+	.quad       L(SSE12Q8), L(SSE13Q8), L(SSE14Q8), L(SSE15Q8)
+	.quad       L(SSE0Q9), L(SSE1Q9), L(SSE2Q9), L(SSE3Q9)
+	.quad       L(SSE4Q9), L(SSE5Q9), L(SSE6Q9), L(SSE7Q9)
+	.quad       L(SSE8Q9), L(SSE9Q9), L(SSE10Q9), L(SSE11Q9)
+	.quad       L(SSE12Q9), L(SSE13Q9), L(SSE14Q9), L(SSE15Q9)
+	.quad       L(SSE0QA), L(SSE1QA), L(SSE2QA), L(SSE3QA)
+	.quad       L(SSE4QA), L(SSE5QA), L(SSE6QA), L(SSE7QA)
+	.quad       L(SSE8QA), L(SSE9QA), L(SSE10QA), L(SSE11QA)
+	.quad       L(SSE12QA), L(SSE13QA), L(SSE14QA), L(SSE15QA)
+	.quad       L(SSE0QB), L(SSE1QB), L(SSE2QB), L(SSE3QB)
+	.quad       L(SSE4QB), L(SSE5QB), L(SSE6QB), L(SSE7QB)
+	.quad       L(SSE8QB), L(SSE9QB), L(SSE10QB), L(SSE11QB)
+	.quad       L(SSE12QB), L(SSE13QB), L(SSE14QB), L(SSE15QB)
+#else
+L(SSExDx):
+	.int       L(SSE0Q0) -L(SSExDx)
+	.int       L(SSE1Q0) -L(SSExDx)
+	.int       L(SSE2Q0) -L(SSExDx)
+	.int       L(SSE3Q0) -L(SSExDx)
+	.int       L(SSE4Q0) -L(SSExDx)
+	.int       L(SSE5Q0) -L(SSExDx)
+	.int       L(SSE6Q0) -L(SSExDx)
+	.int       L(SSE7Q0) -L(SSExDx)
+
+	.int       L(SSE8Q0) -L(SSExDx)
+	.int       L(SSE9Q0) -L(SSExDx)
+	.int       L(SSE10Q0)-L(SSExDx)
+	.int       L(SSE11Q0)-L(SSExDx)
+	.int       L(SSE12Q0)-L(SSExDx)
+	.int       L(SSE13Q0)-L(SSExDx)
+	.int       L(SSE14Q0)-L(SSExDx)
+	.int       L(SSE15Q0)-L(SSExDx)
+
+	.int       L(SSE0Q1) -L(SSExDx)
+	.int       L(SSE1Q1) -L(SSExDx)
+	.int       L(SSE2Q1) -L(SSExDx)
+	.int       L(SSE3Q1) -L(SSExDx)
+	.int       L(SSE4Q1) -L(SSExDx)
+	.int       L(SSE5Q1) -L(SSExDx)
+	.int       L(SSE6Q1) -L(SSExDx)
+	.int       L(SSE7Q1) -L(SSExDx)
+
+	.int       L(SSE8Q1) -L(SSExDx)
+	.int       L(SSE9Q1) -L(SSExDx)
+	.int       L(SSE10Q1)-L(SSExDx)
+	.int       L(SSE11Q1)-L(SSExDx)
+	.int       L(SSE12Q1)-L(SSExDx)
+	.int       L(SSE13Q1)-L(SSExDx)
+	.int       L(SSE14Q1)-L(SSExDx)
+	.int       L(SSE15Q1)-L(SSExDx)
+
+	.int       L(SSE0Q2) -L(SSExDx)
+	.int       L(SSE1Q2) -L(SSExDx)
+	.int       L(SSE2Q2) -L(SSExDx)
+	.int       L(SSE3Q2) -L(SSExDx)
+	.int       L(SSE4Q2) -L(SSExDx)
+	.int       L(SSE5Q2) -L(SSExDx)
+	.int       L(SSE6Q2) -L(SSExDx)
+	.int       L(SSE7Q2) -L(SSExDx)
+
+	.int       L(SSE8Q2) -L(SSExDx)
+	.int       L(SSE9Q2) -L(SSExDx)
+	.int       L(SSE10Q2)-L(SSExDx)
+	.int       L(SSE11Q2)-L(SSExDx)
+	.int       L(SSE12Q2)-L(SSExDx)
+	.int       L(SSE13Q2)-L(SSExDx)
+	.int       L(SSE14Q2)-L(SSExDx)
+	.int       L(SSE15Q2)-L(SSExDx)
+
+	.int       L(SSE0Q3) -L(SSExDx)
+	.int       L(SSE1Q3) -L(SSExDx)
+	.int       L(SSE2Q3) -L(SSExDx)
+	.int       L(SSE3Q3) -L(SSExDx)
+	.int       L(SSE4Q3) -L(SSExDx)
+	.int       L(SSE5Q3) -L(SSExDx)
+	.int       L(SSE6Q3) -L(SSExDx)
+	.int       L(SSE7Q3) -L(SSExDx)
+
+	.int       L(SSE8Q3) -L(SSExDx)
+	.int       L(SSE9Q3) -L(SSExDx)
+	.int       L(SSE10Q3)-L(SSExDx)
+	.int       L(SSE11Q3)-L(SSExDx)
+	.int       L(SSE12Q3)-L(SSExDx)
+	.int       L(SSE13Q3)-L(SSExDx)
+	.int       L(SSE14Q3)-L(SSExDx)
+	.int       L(SSE15Q3)-L(SSExDx)
+
+	.int       L(SSE0Q4) -L(SSExDx)
+	.int       L(SSE1Q4) -L(SSExDx)
+	.int       L(SSE2Q4) -L(SSExDx)
+	.int       L(SSE3Q4) -L(SSExDx)
+	.int       L(SSE4Q4) -L(SSExDx)
+	.int       L(SSE5Q4) -L(SSExDx)
+	.int       L(SSE6Q4) -L(SSExDx)
+	.int       L(SSE7Q4) -L(SSExDx)
+
+	.int       L(SSE8Q4) -L(SSExDx)
+	.int       L(SSE9Q4) -L(SSExDx)
+	.int       L(SSE10Q4)-L(SSExDx)
+	.int       L(SSE11Q4)-L(SSExDx)
+	.int       L(SSE12Q4)-L(SSExDx)
+	.int       L(SSE13Q4)-L(SSExDx)
+	.int       L(SSE14Q4)-L(SSExDx)
+	.int       L(SSE15Q4)-L(SSExDx)
+
+	.int       L(SSE0Q5) -L(SSExDx)
+	.int       L(SSE1Q5) -L(SSExDx)
+	.int       L(SSE2Q5) -L(SSExDx)
+	.int       L(SSE3Q5) -L(SSExDx)
+	.int       L(SSE4Q5) -L(SSExDx)
+	.int       L(SSE5Q5) -L(SSExDx)
+	.int       L(SSE6Q5) -L(SSExDx)
+	.int       L(SSE7Q5) -L(SSExDx)
+
+	.int       L(SSE8Q5) -L(SSExDx)
+	.int       L(SSE9Q5) -L(SSExDx)
+	.int       L(SSE10Q5)-L(SSExDx)
+	.int       L(SSE11Q5)-L(SSExDx)
+	.int       L(SSE12Q5)-L(SSExDx)
+	.int       L(SSE13Q5)-L(SSExDx)
+	.int       L(SSE14Q5)-L(SSExDx)
+	.int       L(SSE15Q5)-L(SSExDx)
+
+	.int       L(SSE0Q6) -L(SSExDx)
+	.int       L(SSE1Q6) -L(SSExDx)
+	.int       L(SSE2Q6) -L(SSExDx)
+	.int       L(SSE3Q6) -L(SSExDx)
+	.int       L(SSE4Q6) -L(SSExDx)
+	.int       L(SSE5Q6) -L(SSExDx)
+	.int       L(SSE6Q6) -L(SSExDx)
+	.int       L(SSE7Q6) -L(SSExDx)
+
+	.int       L(SSE8Q6) -L(SSExDx)
+	.int       L(SSE9Q6) -L(SSExDx)
+	.int       L(SSE10Q6)-L(SSExDx)
+	.int       L(SSE11Q6)-L(SSExDx)
+	.int       L(SSE12Q6)-L(SSExDx)
+	.int       L(SSE13Q6)-L(SSExDx)
+	.int       L(SSE14Q6)-L(SSExDx)
+	.int       L(SSE15Q6)-L(SSExDx)
+
+	.int       L(SSE0Q7) -L(SSExDx)
+	.int       L(SSE1Q7) -L(SSExDx)
+	.int       L(SSE2Q7) -L(SSExDx)
+	.int       L(SSE3Q7) -L(SSExDx)
+	.int       L(SSE4Q7) -L(SSExDx)
+	.int       L(SSE5Q7) -L(SSExDx)
+	.int       L(SSE6Q7) -L(SSExDx)
+	.int       L(SSE7Q7) -L(SSExDx)
+
+	.int       L(SSE8Q7) -L(SSExDx)
+	.int       L(SSE9Q7) -L(SSExDx)
+	.int       L(SSE10Q7)-L(SSExDx)
+	.int       L(SSE11Q7)-L(SSExDx)
+	.int       L(SSE12Q7)-L(SSExDx)
+	.int       L(SSE13Q7)-L(SSExDx)
+	.int       L(SSE14Q7)-L(SSExDx)
+	.int       L(SSE15Q7)-L(SSExDx)
+
+	.int       L(SSE0Q8) -L(SSExDx)
+	.int       L(SSE1Q8) -L(SSExDx)
+	.int       L(SSE2Q8) -L(SSExDx)
+	.int       L(SSE3Q8) -L(SSExDx)
+	.int       L(SSE4Q8) -L(SSExDx)
+	.int       L(SSE5Q8) -L(SSExDx)
+	.int       L(SSE6Q8) -L(SSExDx)
+	.int       L(SSE7Q8) -L(SSExDx)
+
+	.int       L(SSE8Q8) -L(SSExDx)
+	.int       L(SSE9Q8) -L(SSExDx)
+	.int       L(SSE10Q8)-L(SSExDx)
+	.int       L(SSE11Q8)-L(SSExDx)
+	.int       L(SSE12Q8)-L(SSExDx)
+	.int       L(SSE13Q8)-L(SSExDx)
+	.int       L(SSE14Q8)-L(SSExDx)
+	.int       L(SSE15Q8)-L(SSExDx)
+
+	.int       L(SSE0Q9) -L(SSExDx)
+	.int       L(SSE1Q9) -L(SSExDx)
+	.int       L(SSE2Q9) -L(SSExDx)
+	.int       L(SSE3Q9) -L(SSExDx)
+	.int       L(SSE4Q9) -L(SSExDx)
+	.int       L(SSE5Q9) -L(SSExDx)
+	.int       L(SSE6Q9) -L(SSExDx)
+	.int       L(SSE7Q9) -L(SSExDx)
+
+	.int       L(SSE8Q9) -L(SSExDx)
+	.int       L(SSE9Q9) -L(SSExDx)
+	.int       L(SSE10Q9)-L(SSExDx)
+	.int       L(SSE11Q9)-L(SSExDx)
+	.int       L(SSE12Q9)-L(SSExDx)
+	.int       L(SSE13Q9)-L(SSExDx)
+	.int       L(SSE14Q9)-L(SSExDx)
+	.int       L(SSE15Q9)-L(SSExDx)
+
+	.int       L(SSE0QA) -L(SSExDx)
+	.int       L(SSE1QA) -L(SSExDx)
+	.int       L(SSE2QA) -L(SSExDx)
+	.int       L(SSE3QA) -L(SSExDx)
+	.int       L(SSE4QA) -L(SSExDx)
+	.int       L(SSE5QA) -L(SSExDx)
+	.int       L(SSE6QA) -L(SSExDx)
+	.int       L(SSE7QA) -L(SSExDx)
+
+	.int       L(SSE8QA) -L(SSExDx)
+	.int       L(SSE9QA) -L(SSExDx)
+	.int       L(SSE10QA)-L(SSExDx)
+	.int       L(SSE11QA)-L(SSExDx)
+	.int       L(SSE12QA)-L(SSExDx)
+	.int       L(SSE13QA)-L(SSExDx)
+	.int       L(SSE14QA)-L(SSExDx)
+	.int       L(SSE15QA)-L(SSExDx)
+
+	.int       L(SSE0QB) -L(SSExDx)
+	.int       L(SSE1QB) -L(SSExDx)
+	.int       L(SSE2QB) -L(SSExDx)
+	.int       L(SSE3QB) -L(SSExDx)
+	.int       L(SSE4QB) -L(SSExDx)
+	.int       L(SSE5QB) -L(SSExDx)
+	.int       L(SSE6QB) -L(SSExDx)
+	.int       L(SSE7QB) -L(SSExDx)
+
+	.int       L(SSE8QB) -L(SSExDx)
+	.int       L(SSE9QB) -L(SSExDx)
+	.int       L(SSE10QB)-L(SSExDx)
+	.int       L(SSE11QB)-L(SSExDx)
+	.int       L(SSE12QB)-L(SSExDx)
+	.int       L(SSE13QB)-L(SSExDx)
+	.int       L(SSE14QB)-L(SSExDx)
+	.int       L(SSE15QB)-L(SSExDx)
+#endif
+	.popsection
 
 END (memset)
 libc_hidden_builtin_def (memset)
diff --git a/sysdeps/x86_64/rtld-memset.c b/sysdeps/x86_64/rtld-memset.c
new file mode 100644
index 0000000000..55f3835790
--- /dev/null
+++ b/sysdeps/x86_64/rtld-memset.c
@@ -0,0 +1 @@
+#include <string/memset.c>