[packages/glibc] - rel 4; more upstream git branch updates

arekm arekm at pld-linux.org
Wed May 18 13:18:36 CEST 2016


commit ee4a0bb9cd9a8e7f552c9948963a69c61865845c
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Wed May 18 13:16:40 2016 +0200

    - rel 4; more upstream git branch updates

 glibc-git.patch | 60944 ------------------------------------------------------
 glibc.spec      |     3 +-
 2 files changed, 2 insertions(+), 60945 deletions(-)
---
diff --git a/glibc.spec b/glibc.spec
index f339506..a7b1265 100644
--- a/glibc.spec
+++ b/glibc.spec
@@ -41,7 +41,7 @@ Summary(tr.UTF-8):	GNU libc
 Summary(uk.UTF-8):	GNU libc версії
 Name:		glibc
 Version:	%{core_version}
-Release:	3
+Release:	4
 Epoch:		6
 License:	LGPL v2.1+
 Group:		Libraries
@@ -58,6 +58,7 @@ Source7:	%{name}-LD-path.c
 Source9:	nscd.tmpfiles
 # git diff glibc-2.23..release/2.23/master
 Patch0:		glibc-git.patch
+# Patch0-md5:	7cfc6221a37d8c2bd9896e3dc37a42af
 # against GNU TP (libc domain)
 #Patch1:		%{name}-pl.po-update.patch
 Patch2:		%{name}-pld.patch
diff --git a/glibc-git.patch b/glibc-git.patch
deleted file mode 100644
index d41788c..0000000
--- a/glibc-git.patch
+++ /dev/null
@@ -1,60944 +0,0 @@
-diff --git a/ChangeLog b/ChangeLog
-index 2e4afb7..4764955 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,5 +1,476 @@
-+2016-03-31  Adhemerval Zanella  <adhemerval.zanella at linaro.org>
-+
-+	* elf/tst-dlsym-error.c: Include <string.h> for strchrnul.
-+
-+2016-03-31  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19509]
-+	* elf/dl-lookup.c (_dl_lookup_symbol_x): Report error even if
-+	skip_map != NULL.
-+	* elf/tst-dlsym-error.c: New file.
-+	* elf/Makefile (tests): Add tst-dlsym-error.
-+	(tst-dlsym-error): Link against libdl.
-+
-+2016-03-07  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19610]
-+	* elf/ldconfig.c (opt_link): Update comment.
-+	(options): Update help string for option -X.
-+	(search_dir): Unlink stale symbolic link only if updating symbolic
-+	links.
-+	* elf/tst-ldconfig-X.sh: New file.
-+	* elf/Makefile (tests-special): Add tst-ldconfig-X.out.
-+	(tst-ldconfig-X.out): New rule to run tst-ldconfig-X.sh.
-+
-+2016-05-04  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19779]
-+	CVE-2016-1234
-+	Avoid copying names of directory entries.
-+	* posix/glob.c (DIRENT_MUST_BE, DIRENT_MIGHT_BE_SYMLINK)
-+	(DIRENT_MIGHT_BE_DIR, CONVERT_D_INO, CONVERT_D_TYPE)
-+	(CONVERT_DIRENT_DIRENT64, REAL_DIR_ENTRY): Remove macros.
-+	(struct readdir_result): New type.
-+	(D_TYPE_TO_RESULT, D_INO_TO_RESULT, READDIR_RESULT_INITIALIZER)
-+	(GL_READDIR): New macros.
-+	(readdir_result_might_be_symlink, readdir_result_might_be_dir)
-+	(convert_dirent, convert_dirent64): New functions.
-+	(glob_in_dir): Use struct readdir_result.  Call convert_dirent or
-+	convert_dirent64.  Adjust references to the readdir result.
-+	* sysdeps/unix/sysv/linux/i386/glob64.c:
-+	(convert_dirent, GL_READDIR): Redefine for second file inclusion.
-+	* posix/bug-glob2.c (LONG_NAME): Define.
-+	(filesystem): Add LONG_NAME.
-+	(my_DIR): Increase the size of room_for_dirent.
-+
-+2016-04-29  Florian Weimer  <fweimer at redhat.com>
-+
-+	glob: Simplify and document the interface for the GLOB_ALTDIRFUNC
-+	callback function gl_readdir.
-+	* posix/glob.c (NAMELEN, CONVERT_D_NAMLEN): Remove.
-+	(CONVERT_DIRENT_DIRENT64): Use strcpy instead of memcpy.
-+	(glob_in_dir): Remove len.  Use strdup instead of malloc and
-+	memcpy to copy the name.
-+	* manual/pattern.texi (Calling Glob): Document requirements for
-+	implementations of the gl_readdir callback function.
-+	* manual/examples/mkdirent.c: New example.
-+	* posix/bug-glob2.c (my_readdir): Set d_ino to 1 unconditionally,
-+	per the manual guidance.
-+	* posix/tst-gnuglob.c (my_readdir): Likewise.
-+
-+2016-04-04  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19633]
-+	Use specified locale for number formatting in strfmon_l.
-+	* locale/localeinfo.h (__nl_lookup, _nl_lookup_wstr)
-+	(__nl_lookup_word): New inline functions.
-+	* include/printf.h (__print_fp_l): Declare.
-+	* stdio-common/printf_fp.c (___printf_fp_l): Renamed from
-+	___printf_fp.  Add locale argument.  Replace _NL_CURRENT with
-+	_nl_lookup and _NL_CURRENT_WORD with _nl_lookup_word.
-+	(___printf_fp): New function.
-+	* stdlib/strfmon_l.c (__printf_fp): Remove declaration.
-+	(__vstrfmon_l): Call __printf_fp_l instead of printf_fp.
-+	* stdlib/tst-strfmon_l.c (do_test): New test.
-+	* stdlib/Makefile (tests): Add kt.
-+	(LOCALES): Build additional locales.
-+	(tst-strfmon_l.out): Require locales.
-+
-+2016-03-25  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ# 19860]
-+	* sysdeps/x86_64/tst-audit10.c (avx512_enabled): Always return
-+	zero if the compiler does not provide the AVX512F bit.
-+
-+2016-03-08  Roland McGrath  <roland at hack.frob.com>
-+
-+	* sysdeps/x86_64/tst-audit10.c: #include <cpu-features.h>.
-+	* sysdeps/x86_64/tst-audit10-aux.c: Move audit_test extern decl ...
-+	(tst_audit10_aux) [__AVX512F__]: ... here.
-+
-+2016-03-07  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19269]
-+	* sysdeps/x86_64/Makefile (tst-audit4): Depend on
-+	tst-audit4-aux.o.
-+	(tst-audit10): Depend on tst-audit10-aux.o.
-+	(CFLAGS-tst-audit4-aux.c): Compile with AVX enabled.
-+	(CFLAGS-tst-audit10-aux.c): Compile with AVX512 enabled.
-+	* sysdeps/x86_64/tst-audit4.c (do_test): Call tst_audit4_aux
-+	instead of inline AVX code.
-+	* sysdeps/x86_64/tst-audit10.c (do_test): Call tst_audit10_aux
-+	instead of inline AVX512 code.
-+	* sysdeps/x86_64/tst-audit4-aux.c: New file
-+	* sysdeps/x86_64/tst-audit10-aux.c: New file
-+
-+2016-04-27  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19825]
-+	* resolv/res_send.c (send_vc): Remove early *resplen2
-+	initialization.  Set *resplen2 on socket error.  Call
-+	close_and_return_error for other errors.
-+
-+2016-03-25  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19868]
-+	* resolv/nss_dns/dns-network.c (getanswer_r): Implement additional
-+	DNS packet syntax checks (which were not needed before).  Skip
-+	over non-PTR records.
-+
-+2016-04-27  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19831]
-+	* resolv/nss_dns/dns-host.c (rrtype_to_rdata_length): New
-+	function.
-+	(getanswer_r): Check RDATA length against RRTYPE and QTYPE.
-+	(gaih_getanswer_slice): Check RDATA length against RRTYPE.
-+
-+2016-04-27  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19862]
-+	* resolv/nss_dns/dns-host.c (AskedForGot): Remove.
-+	(getanswer_r): Do not call syslog.
-+	(gaih_getanswer_slice): Likewise.
-+	* resolv/gethnamaddr.c (AskedForGot): Remove.
-+	(getanswer): Do not call syslog.
-+	(gethostbyaddr): Likewise.
-+
-+2016-04-27  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19830]
-+	* resolv/nss_dns/dns-host.c (getanswer_r): Check RDATA length.
-+	(gaih_getanswer_slice): Likewise.
-+	* resolv/nss_dns/dns-canon.c (_nss_dns_getcanonname_r): Likewise.
-+	Also check for availability of RR metadata.
-+
-+2016-04-11  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19865]
-+	* resolv/nss_dns/dns-canon.c (_nss_dns_getcanonname_r): Restore
-+	original buffer before retry.
-+
-+2016-04-14  Florian Weimer  <fweimer at redhat.com>
-+
-+	* malloc/arena.c (__malloc_fork_lock_parent)
-+	(__malloc_fork_unlock_parent, __malloc_fork_unlock_child): Add
-+	internal_function attribute.
-+
-+2016-04-14  Florian Weimer  <fweimer at redhat.com>
-+
-+	Remove malloc hooks from fork handler.  They are no longer needed
-+	because malloc runs right before fork, and no malloc calls from
-+	other fork handlers are not possible anymore.
-+	* malloc/malloc.c (malloc_atfork, free_atfork): Remove
-+	declarations.
-+	* malloc/arena.c (save_malloc_hook, save_free_hook, save_arena)
-+	(ATFORK_ARENA_PTR, malloc_atfork, free_atfork)
-+	(atfork_recursive_cntr): Remove.
-+	(__malloc_fork_lock_parent): Do not override malloc hooks and
-+	thread_arena.
-+	(__malloc_fork_unlock_parent): Do not restore malloc hooks and
-+	thread_arena.
-+	(__malloc_fork_unlock_child): Do not restore malloc hooks.  Use
-+	thread_arena instead of save_arena.
-+
-+2016-04-14  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19431]
-+	Run the malloc fork handler as late as possible to avoid deadlocks.
-+	* malloc/malloc-internal.h: New file.
-+	* malloc/malloc.c: Include it.
-+	* malloc/arena.c (ATFORK_MEM): Remove.
-+	(__malloc_fork_lock_parent): Rename from ptmalloc_lock_all.
-+	Update comment.
-+	(__malloc_fork_unlock_parent): Rename from ptmalloc_unlock_all.
-+	(__malloc_fork_unlock_child): Rename from ptmalloc_unlock_all2.
-+	Remove outdated comment.
-+	(ptmalloc_init): Do not call thread_atfork.  Remove
-+	thread_atfork_static.
-+	* malloc/tst-malloc-fork-deadlock.c: New file.
-+	* Makefile (tests): Add tst-malloc-fork-deadlock.
-+	(tst-malloc-fork-deadlock): Link against libpthread.
-+	* manual/memory.texi (Aligned Memory Blocks): Update safety
-+	annotation comments.
-+	* sysdeps/nptl/fork.c (__libc_fork): Call
-+	__malloc_fork_lock_parent, __malloc_fork_unlock_parent,
-+	__malloc_fork_unlock_child.
-+	* sysdeps/mach/hurd/fork.c (__fork): Likewise.
-+
-+2016-03-22  Samuel Thibault  <samuel.thibault at ens-lyon.org>
-+
-+	* malloc/Makefile ($(objpfx)tst-malloc-backtrace,
-+	$(objpfx)tst-malloc-thread-exit, $(objpfx)tst-malloc-thread-fail): Use
-+	$(shared-thread-library) instead of hardcoding the path to libpthread.
-+
-+2016-02-19  Florian Weimer  <fweimer at redhat.com>
-+
-+	* sysdeps/generic/malloc-machine.h: Assume mutex_init is always
-+	available.  Do not define NO_THREADS.
-+	* malloc/malloc.c: Do not check NO_THREADS.
-+	* malloc/arena.c: Likewise.
-+
-+2016-05-02  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #20031]
-+	* hesiod/hesiod.c (get_txt_records): Return error if TXT record is
-+	completely empty.
-+
-+2016-05-02  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19573]
-+	* hesiod/Makefile (libnss_hesiod-routines): Remove hesiod-init.
-+	* hesiod/nss_hesiod/hesiod-init.c: Remove file.
-+	* hesiod/nss_hesiod/nss_hesiod.h: Likewise.
-+	* hesiod/hesiod.h (__hesiod_res_get, __hesiod_res_set): Remove.
-+	(hesiod_init, hesiod_end, hesiod_to_bind, hesiod_resolve)
-+	(hesiod_free_list): Mark as hidden.
-+	* hesiod/hesiod_p (struct hesiod_p): Remove res, free_res,
-+	res_set, res_get.
-+	* hesiod/hesiod.c: Remove unnecessary forward declarations.
-+	(init, __hesiod_res_get, __hesiod_res_set): Remove.
-+	(hesiod_init): Remove obsolete res_ninit call.
-+	(hesiod_end): Do not free resolver state.  Do not invoke callback.
-+	(hesiod_bind): Do not call init.
-+	(get_txt_records): Use res_mkquery, res_send instead of
-+	res_nmkquery, res_nsend.
-+	* hesiod/nss_hesiod/hesiod-grp.c (lookup): Call hesiod_init
-+	instead of _nss_hesiod_init.
-+	(_nss_hesiod_initgroups_dyn): Likewise.
-+	* hesiod/nss_hesiod/hesiod-proto.c (lookup): Likewise.
-+	* hesiod/nss_hesiod/hesiod-pwd.c (lookup): Likewise.
-+	* hesiod/nss_hesiod/hesiod-service.c (lookup): Likewise.
-+
-+2016-05-02  Florian Weimer  <fweimer at redhat.com>
-+
-+	* hesiod/hesiod.h: Remove RCS keyword.
-+	* hesiod/hesiod_p.h: Likewise.
-+	* hesiod/hesiod.c: Likewise.
-+
-+2016-05-04  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19787]
-+	* inet/getnameinfo.c (check_sprintf_result): New function.
-+	(CHECKED_SNPRINTF): New macro.
-+	(gni_host_inet_numeric): Use CHECKED_SNPRINTF to write the scope
-+	to the host buffer.
-+	(gni_host_local): Use checked_copy to copy the host name.
-+	(gni_serv_inet): Use CHECKED_SNPRINTF to write the service name.
-+	(gni_serv_local): Use checked_copy to copy the service name.
-+	(getnameinfo): Remove unnecessary truncation of result buffers.
-+
-+2016-05-04  Florian Weimer  <fweimer at redhat.com>
-+
-+	* inet/getnameinfo.c (gni_host_inet_numeric): Return EAI_OVERFLOW
-+	in case of inet_ntop failure.
-+
-+2016-05-04  Florian Weimer  <fweimer at redhat.com>
-+
-+	* inet/getnameinfo.c (gni_host_inet_name): Use temporaries to
-+	avoid long lines.
-+	(gni_host_inet_numeric): Likewise.  Reduce scope of local
-+	variables.
-+	(gni_host_inet, gni_host_local): Add comment.
-+	(gni_host): Add comment.  Use temporary to avoid long lines.
-+
-+2016-04-29  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19642]
-+	* inet/getnameinfo.c (gni_host_inet_name, gni_host_inet_numeric)
-+	(gni_host_inet, gni_host_local, gni_host, gni_serv_inet)
-+	(gni_serv_local, gni_serv): New functions extracted from
-+	getnameinfo.
-+	(getnameinfo): Call gni_host and gni_serv to perform the
-+	processing.  Always free scratch buffer.
-+
-+2016-04-28  Florian Weimer  <fweimer at redhat.com>
-+
-+	* inet/getnameinfo.c (getnameinfo): Do not preserve errno.
-+
-+2016-03-29  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19837]
-+	* nss/nss_db/db-XXX.c (_nss_db_getENTNAME_r): Propagate ERANGE
-+	error if parse_line fails.
-+
-+2016-04-20  Yvan Roux  <yvan.roux at linaro.org>
-+
-+	* stdlib/setenv.c (unsetenv): Fix ambiguous 'else'.
-+	* nis/nis_call.c (nis_server_cache_add): Likewise.
-+
-+2016-04-09  Mike Frysinger  <vapier at gentoo.org>
-+
-+	* sysdeps/i386/configure.ac: Change == to = when calling test.
-+	* sysdeps/x86_64/configure.ac: Likewise.
-+	* sysdeps/i386/configure: Regenerated.
-+	* sysdeps/x86_64/configure: Likewise.
-+
-+2016-04-01  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19879]
-+	CVE-2016-3075
-+	* resolv/nss_dns/dns-network.c (_nss_dns_getnetbyname_r): Do not
-+	copy name.
-+
-+2016-04-01  Stefan Liebler  <stli at linux.vnet.ibm.com>
-+
-+	* sysdeps/s390/bits/link.h: (La_s390_vr) New typedef.
-+	(La_s390_32_regs): Append vector register lr_v24-lr_v31.
-+	(La_s390_64_regs): Likewise.
-+	(La_s390_32_retval): Append vector register lrv_v24.
-+	(La_s390_64_retval): Likeweise.
-+	* sysdeps/s390/s390-32/dl-trampoline.h (_dl_runtime_profile):
-+	Handle extended structs La_s390_32_regs and La_s390_32_retval.
-+	* sysdeps/s390/s390-64/dl-trampoline.h (_dl_runtime_profile):
-+	Handle extended structs La_s390_64_regs and La_s390_64_retval.
-+
-+2016-04-01  Stefan Liebler  <stli at linux.vnet.ibm.com>
-+
-+	* sysdeps/s390/s390-32/dl-trampoline.S: Include dl-trampoline.h twice
-+	to create a non-vector/vector version for _dl_runtime_resolve and
-+	_dl_runtime_profile. Move implementation to ...
-+	* sysdeps/s390/s390-32/dl-trampoline.h: ... here.
-+	(_dl_runtime_resolve) Save and restore fpr/vrs.
-+	(_dl_runtime_profile) Save and restore vrs and fix some issues
-+	if _dl_call_pltexit is called.
-+	* sysdeps/s390/s390-32/dl-machine.h (elf_machine_runtime_setup):
-+	Choose the correct resolver function if running on a machine with vx.
-+	* sysdeps/s390/s390-64/dl-trampoline.S: Include dl-trampoline.h twice
-+	to create a non-vector/vector version for _dl_runtime_resolve and
-+	_dl_runtime_profile. Move implementation to ...
-+	* sysdeps/s390/s390-64/dl-trampoline.h: ... here.
-+	(_dl_runtime_resolve) Save and restore fpr/vrs.
-+	(_dl_runtime_profile) Save and restore vrs and fix some issues
-+	* sysdeps/s390/s390-64/dl-machine.h: (elf_machine_runtime_setup):
-+	Choose the correct resolver function if running on a machine with vx.
-+
-+2016-03-25  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19791]
-+	* resolv/res_send.c (close_and_return_error): New function.
-+	(send_dg): Initialize *resplen2 after reopen failure.  Call
-+	close_and_return_error for error returns.  On error paths without
-+	__res_iclose, initialze *resplen2 explicitly.  Update comment for
-+	successful return.
-+
-+2016-03-21  Dylan Alex Simon  <dylan-sourceware at dylex.net>
-+
-+	[BZ #19822]
-+	* math/Makefile ($(inst_libdir)/libm.so): Write output to $@.tmp and
-+	move it to the final $@ location.
-+
-+2016-03-15  Andreas Schwab  <schwab at suse.de>
-+
-+	[BZ #19257]
-+	* resolv/res_init.c (__res_iclose): Use statp->nscount instead of
-+	statp->_u._ext.nscount as loop count.
-+
-+2016-03-11  H.J. Lu  <hongjiu.lu at intel.com>
-+
-+	[BZ #19758]
-+	* sysdeps/unix/sysv/linux/x86_64/64/dl-librecon.h
-+	(EXTRA_LD_ENVVARS): Or bit_Prefer_MAP_32BIT_EXEC.
-+
-+2016-03-11  H.J. Lu  <hongjiu.lu at intel.com>
-+
-+	[BZ #19759]
-+	* sysdeps/x86/bits/string.h (_HAVE_STRING_ARCH_mempcpy): New.
-+
-+2016-03-10  H.J. Lu  <hongjiu.lu at intel.com>
-+
-+	[BZ #19762]
-+	* sysdeps/i386/i686/multiarch/bcopy.S (bcopy): Use
-+	HAS_ARCH_FEATURE with Fast_Rep_String.
-+	* sysdeps/i386/i686/multiarch/bzero.S (__bzero): Likewise.
-+	* sysdeps/i386/i686/multiarch/memcpy.S (memcpy): Likewise.
-+	* sysdeps/i386/i686/multiarch/memcpy_chk.S (__memcpy_chk):
-+	Likewise.
-+	* sysdeps/i386/i686/multiarch/memmove_chk.S (__memmove_chk):
-+	Likewise.
-+	* sysdeps/i386/i686/multiarch/mempcpy.S (__mempcpy): Likewise.
-+	* sysdeps/i386/i686/multiarch/mempcpy_chk.S (__mempcpy_chk):
-+	Likewise.
-+	* sysdeps/i386/i686/multiarch/memset.S (memset): Likewise.
-+	* sysdeps/i386/i686/multiarch/memset_chk.S (__memset_chk):
-+	Likewise.
-+
-+2016-03-09  Aurelien Jarno  <aurelien at aurel32.net>
-+
-+	[BZ #19792]
-+	* sysdeps/unix/sysv/linux/mips/makecontext.S (__makecontext):
-+	Terminate FDE before return label.
-+
-+2016-03-08  Aurelien Jarno  <aurelien at aurel32.net>
-+
-+	* include/sys/auxv.h: New file.
-+
-+2016-03-07  Hongjiu Zhang  <noctuorare at gmail.com>
-+
-+	* elf/sln.c (makesymlink): Change struct stat to stat64, and lstat
-+	to lstat64.
-+
-+2016-02-24  Marko Myllynen  <myllynen at redhat.com>
-+
-+	* NEWS (2.23): Fix typo in bug 19048 text.
-+
-+2016-02-24  Andreas Schwab  <schwab at suse.de>
-+
-+	* math/test-math-isinff.cc (do_test): Only call isinfl and isnanl
-+	if !NO_LONG_DOUBLE.
-+
-+2016-02-22  Roland McGrath  <roland at hack.frob.com>
-+
-+	* sysdeps/arm/nacl/libc.abilist (GLIBC_2.23): Add GLIBC_2.23,
-+	fts64_children, fts64_close, fts64_open, fts64_read and fts64_set.
-+
-+2016-02-22  H.J. Lu  <hongjiu.lu at intel.com>
-+
-+	[BZ #19679]
-+	* sysdeps/x86_64/dl-trampoline.S (DL_RUNIME_UNALIGNED_VEC_SIZE):
-+	Renamed to ...
-+	(DL_RUNTIME_UNALIGNED_VEC_SIZE): This.  Set to 8.
-+	(DL_RUNIME_RESOLVE_REALIGN_STACK): Renamed to ...
-+	(DL_RUNTIME_RESOLVE_REALIGN_STACK): This.  Updated.
-+	(DL_RUNIME_RESOLVE_REALIGN_STACK): Renamed to ...
-+	(DL_RUNTIME_RESOLVE_REALIGN_STACK): This.
-+	* sysdeps/x86_64/dl-trampoline.h
-+	(DL_RUNIME_RESOLVE_REALIGN_STACK): Renamed to ...
-+	(DL_RUNTIME_RESOLVE_REALIGN_STACK): This.
-+
- 2016-02-18  Adhemerval Zanella  <adhemerval.zanella at linaro.org>
- 
-+	* configure: Regenerated.
-+
-+	* po/libc.pot: Regenerated.
-+
-+	* po/be.po: Updated translation.
-+	* po/bg.po: Likewise.
-+	* po/ca.po: Likewise.
-+	* po/cs.po: Likewise.
-+	* po/da.po: Likewise.
-+	* po/el.po: Likewise.
-+	* po/eo.po: Likewise.
-+	* po/es.po: Likewise.
-+	* po/fi.po: Likewise.
-+	* po/fr.po: Likewise.
-+	* po/gl.po: Likewise.
-+	* po/hr.po: Likewise.
-+	* po/hu.po: Likewise.
-+	* po/ia.po: Likewise.
-+	* po/id.po: Likewise.
-+	* po/it.po: Likewise.
-+	* po/ja.po: Likewise.
-+	* po/lt.po: Likewise.
-+	* po/nb.po: Likewise.
-+	* po/nl.po: Likewise.
-+	* po/pt_BR.po: Likewise.
-+	* po/rw.po: Likewise.
-+	* po/sk.po: Likewise.
-+	* po/sl.po: Likewise.
-+	* po/sv.po: Likewise.
-+	* po/tr.po: Likewise.
-+	* po/zh_CN.po: Likewise.
-+	* po/zh_TW.po: Likewise.
-+
- 	* version.h (RELEASE): Set to "stable".
- 	(VERSION): Set to 2.23.
- 	* include/feature.h (__GLIBC_MINOR__): Set to 23.
-diff --git a/NEWS b/NEWS
-index c0276cf..9c1c638 100644
---- a/NEWS
-+++ b/NEWS
-@@ -5,6 +5,33 @@ See the end for copying conditions.
- Please send GNU C library bug reports via <http://sourceware.org/bugzilla/>
- using `glibc' in the "product" field.
- 

-+Version 2.23.1
-+
-+Security related changes:
-+
-+* The getnetbyname implementation in nss_dns had a potentially unbounded
-+  alloca call (in the form of a call to strdupa), leading to a stack
-+  overflow (stack exhaustion) and a crash if getnetbyname is invoked
-+  on a very long name.  (CVE-2016-3075)
-+
-+* The glob function suffered from a stack-based buffer overflow when it was
-+  called with the GLOB_ALTDIRFUNC flag and encountered a long file name.
-+  Reported by Alexander Cherepanov.  (CVE-2016-1234)
-+
-+The following bugs are resolved with this release:
-+
-+  [19679] gcc-4.9.3 C++ exception handling broken due to unaligned stack
-+  [19758] Or bit_Prefer_MAP_32BIT_EXEC in EXTRA_LD_ENVVARS
-+  [19759] Don't inline mempcpy for x86
-+  [19762] Use HAS_ARCH_FEATURE with Fast_Rep_String
-+  [19791] Assertion failure in res_query.c with un-connectable name server
-+    addresses
-+  [19792] MIPS: backtrace yields infinite backtrace with makecontext
-+  [19822] libm.so install clobbers old version
-+  [19879] network: nss_dns: Stack overflow in getnetbyname implementation
-+    (CVE-2016-3075)
-+
-+

- Version 2.23
- 
- * Unicode 8.0.0 Support: Character encoding, character type info, and
-@@ -38,7 +65,7 @@ Version 2.23
-   unnecessary serialization of memory allocation requests across threads.
-   The defect is now corrected.  Users should see a substantial increase in
-   the concurent throughput of allocation requests for applications which
--  trigger this bug.  Affected applications typically create create and
-+  trigger this bug.  Affected applications typically create and
-   destroy threads frequently.  (Bug 19048 was reported and analyzed by
-   Ericsson.)
- 
-diff --git a/configure b/configure
-index 06ea87e..8fe5937 100755
---- a/configure
-+++ b/configure
-@@ -3864,7 +3864,7 @@ if test -z "$enable_hacker_mode" && test x"$libc_config_ok" != xyes; then
- *** The GNU C library is currently unavailable for this platform.
- *** If you are interested in seeing glibc on this platform visit
- *** the \"How to submit a new port\" in the wiki:
--***   https://sourceware.org/glibc/wiki/HomePage#Development
-+***   https://sourceware.org/glibc/wiki/#Development
- *** and join the community!" "$LINENO" 5
-     ;;
-   esac
-diff --git a/elf/Makefile b/elf/Makefile
-index 63a5355..c3dc451 100644
---- a/elf/Makefile
-+++ b/elf/Makefile
-@@ -149,7 +149,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
- 	 tst-nodelete) \
- 	 tst-initorder tst-initorder2 tst-relsort1 tst-null-argv \
- 	 tst-ptrguard1 tst-tlsalign tst-tlsalign-extern tst-nodelete-opened \
--	 tst-nodelete2 tst-audit11 tst-audit12
-+	 tst-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error
- #	 reldep9
- ifeq ($(build-hardcoded-path-in-tests),yes)
- tests += tst-dlopen-aout
-@@ -163,7 +163,8 @@ endif
- endif
- ifeq ($(run-built-tests),yes)
- tests-special += $(objpfx)tst-leaks1-mem.out \
--		 $(objpfx)tst-leaks1-static-mem.out $(objpfx)noload-mem.out
-+		 $(objpfx)tst-leaks1-static-mem.out $(objpfx)noload-mem.out \
-+		 $(objpfx)tst-ldconfig-X.out
- endif
- tlsmod17a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
- tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-@@ -1252,3 +1253,9 @@ $(objpfx)tst-prelink-cmp.out: tst-prelink.exp \
- 			      $(objpfx)tst-prelink-conflict.out
- 	cmp $^ > $@; \
- 	$(evaluate-test)
-+
-+$(objpfx)tst-ldconfig-X.out : tst-ldconfig-X.sh $(objpfx)ldconfig
-+	$(SHELL) $< '$(common-objpfx)' '$(test-wrapper)' '$(test-wrapper-env)' > $@; \
-+	$(evaluate-test)
-+
-+$(objpfx)tst-dlsym-error: $(libdl)
-diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
-index f577759..6d299c1 100644
---- a/elf/dl-lookup.c
-+++ b/elf/dl-lookup.c
-@@ -858,7 +858,6 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
-   if (__glibc_unlikely (current_value.s == NULL))
-     {
-       if ((*ref == NULL || ELFW(ST_BIND) ((*ref)->st_info) != STB_WEAK)
--	  && skip_map == NULL
- 	  && !(GLRO(dl_debug_mask) & DL_DEBUG_UNUSED))
- 	{
- 	  /* We could find no value for a strong reference.  */
-diff --git a/elf/ldconfig.c b/elf/ldconfig.c
-index 9c6f2ba..467ca82 100644
---- a/elf/ldconfig.c
-+++ b/elf/ldconfig.c
-@@ -100,7 +100,8 @@ int opt_format = 1;
- /* Build cache.  */
- static int opt_build_cache = 1;
- 
--/* Generate links.  */
-+/* Enable symbolic link processing.  If set, create or update symbolic
-+   links, and remove stale symbolic links.  */
- static int opt_link = 1;
- 
- /* Only process directories specified on the command line.  */
-@@ -141,7 +142,7 @@ static const struct argp_option options[] =
-   { "print-cache", 'p', NULL, 0, N_("Print cache"), 0},
-   { "verbose", 'v', NULL, 0, N_("Generate verbose messages"), 0},
-   { NULL, 'N', NULL, 0, N_("Don't build cache"), 0},
--  { NULL, 'X', NULL, 0, N_("Don't generate links"), 0},
-+  { NULL, 'X', NULL, 0, N_("Don't update symbolic links"), 0},
-   { NULL, 'r', N_("ROOT"), 0, N_("Change to and use ROOT as root directory"), 0},
-   { NULL, 'C', N_("CACHE"), 0, N_("Use CACHE as cache file"), 0},
-   { NULL, 'f', N_("CONF"), 0, N_("Use CONF as configuration file"), 0},
-@@ -800,7 +801,7 @@ search_dir (const struct dir_entry *entry)
- 		error (0, errno, _("Cannot stat %s"), file_name);
- 
- 	      /* Remove stale symlinks.  */
--	      if (strstr (direntry->d_name, ".so."))
-+	      if (opt_link && strstr (direntry->d_name, ".so."))
- 		unlink (real_file_name);
- 	      continue;
- 	    }
-diff --git a/elf/sln.c b/elf/sln.c
-index 9d57be2..f52cb9f 100644
---- a/elf/sln.c
-+++ b/elf/sln.c
-@@ -164,11 +164,11 @@ makesymlinks (const char *file)
- static int
- makesymlink (const char *src, const char *dest)
- {
--  struct stat stats;
-+  struct stat64 stats;
-   const char *error;
- 
-   /* Destination must not be a directory. */
--  if (lstat (dest, &stats) == 0)
-+  if (lstat64 (dest, &stats) == 0)
-     {
-       if (S_ISDIR (stats.st_mode))
- 	{
-diff --git a/elf/tst-dlsym-error.c b/elf/tst-dlsym-error.c
-new file mode 100644
-index 0000000..fb084c5
---- /dev/null
-+++ b/elf/tst-dlsym-error.c
-@@ -0,0 +1,114 @@
-+/* Test error reporting for dlsym, dlvsym failures.
-+   Copyright (C) 2016 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
-+#include <dlfcn.h>
-+#include <gnu/lib-names.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+/* Used to disambiguate symbol names.  */
-+static int counter;
-+
-+static void
-+test_one (void *handle, const char *name, void *(func) (void *, const char *),
-+          const char *suffix)
-+{
-+  ++counter;
-+  char symbol[32];
-+  snprintf (symbol, sizeof (symbol), "no_such_symbol_%d", counter);
-+  char *expected_message;
-+  if (asprintf (&expected_message, ": undefined symbol: %s%s",
-+                symbol, suffix) < 0)
-+    {
-+      printf ("error: asprintf: %m\n");
-+      abort ();
-+    }
-+
-+  void *addr = func (handle, symbol);
-+  if (addr != NULL)
-+    {
-+      printf ("error: %s: found symbol \"no_such_symbol\"\n", name);
-+      abort ();
-+    }
-+  const char *message = dlerror ();
-+  if (message == NULL)
-+    {
-+      printf ("error: %s: missing error message\n", name);
-+      abort ();
-+    }
-+  const char *message_without_path = strchrnul (message, ':');
-+  if (strcmp (message_without_path, expected_message) != 0)
-+    {
-+      printf ("error: %s: unexpected error message: %s\n", name, message);
-+      abort ();
-+    }
-+  free (expected_message);
-+
-+  message = dlerror ();
-+  if (message != NULL)
-+    {
-+      printf ("error: %s: unexpected error message: %s\n", name, message);
-+      abort ();
-+    }
-+}
-+
-+static void
-+test_handles (const char *name, void *(func) (void *, const char *),
-+              const char *suffix)
-+{
-+  test_one (RTLD_DEFAULT, name, func, suffix);
-+  test_one (RTLD_NEXT, name, func, suffix);
-+
-+  void *handle = dlopen (LIBC_SO, RTLD_LAZY);
-+  if (handle == NULL)
-+    {
-+      printf ("error: cannot dlopen %s: %s\n", LIBC_SO, dlerror ());
-+      abort ();
-+    }
-+  test_one (handle, name, func, suffix);
-+  dlclose (handle);
-+}
-+
-+static void *
-+dlvsym_no_such_version (void *handle, const char *name)
-+{
-+  return dlvsym (handle, name, "NO_SUCH_VERSION");
-+}
-+
-+static void *
-+dlvsym_glibc_private (void *handle, const char *name)
-+{
-+  return dlvsym (handle, name, "GLIBC_PRIVATE");
-+}
-+
-+static int
-+do_test (void)
-+{
-+  test_handles ("dlsym", dlsym, "");
-+  test_handles ("dlvsym", dlvsym_no_such_version,
-+                ", version NO_SUCH_VERSION");
-+  test_handles ("dlvsym", dlvsym_glibc_private,
-+                ", version GLIBC_PRIVATE");
-+
-+  return 0;
-+}
-+
-+
-+#define TEST_FUNCTION do_test ()
-+#include "../test-skeleton.c"
-diff --git a/elf/tst-ldconfig-X.sh b/elf/tst-ldconfig-X.sh
-new file mode 100644
-index 0000000..0c122a5
---- /dev/null
-+++ b/elf/tst-ldconfig-X.sh
-@@ -0,0 +1,62 @@
-+#!/bin/sh
-+# Test that ldconfig -X does not remove stale symbolic links.
-+# Copyright (C) 2000-2016 Free Software Foundation, Inc.
-+# This file is part of the GNU C Library.
-+
-+# The GNU C Library is free software; you can redistribute it and/or
-+# modify it under the terms of the GNU Lesser General Public
-+# License as published by the Free Software Foundation; either
-+# version 2.1 of the License, or (at your option) any later version.
-+
-+# The GNU C Library is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+# Lesser General Public License for more details.
-+
-+# You should have received a copy of the GNU Lesser General Public
-+# License along with the GNU C Library; if not, see
-+# <http://www.gnu.org/licenses/>.
-+
-+set -ex
-+
-+common_objpfx=$1
-+test_wrapper_env=$2
-+run_program_env=$3
-+
-+testroot="${common_objpfx}elf/bug19610-test-directory"
-+cleanup () {
-+    rm -rf "$testroot"
-+}
-+trap cleanup 0
-+
-+rm -rf "$testroot"
-+mkdir -p $testroot/lib $testroot/etc
-+
-+# Relative symbolic link target.
-+ln -s libdoesnotexist.so.1.1 $testroot/lib/libdoesnotexist.so.1
-+
-+# Absolute symbolic link target.
-+ln -s $testroot/opt/sw/lib/libdoesnotexist2.so.1.1 $testroot/lib/
-+
-+errors=0
-+check_files () {
-+    for name in libdoesnotexist.so.1 libdoesnotexist2.so.1.1 ; do
-+	path="$testroot/lib/$name"
-+	if test ! -h $path ; then
-+	    echo "error: missing file: $path"
-+	    errors=1
-+	fi
-+    done
-+}
-+
-+check_files
-+
-+${test_wrapper_env} \
-+${run_program_env} \
-+${common_objpfx}elf/ldconfig -X -f /dev/null \
-+  -C $testroot/etc/ld.so.cache \
-+  $testroot/lib
-+
-+check_files
-+
-+exit $errors
-diff --git a/hesiod/Makefile b/hesiod/Makefile
-index d68a859..2d1966c 100644
---- a/hesiod/Makefile
-+++ b/hesiod/Makefile
-@@ -28,7 +28,7 @@ extra-libs-others = $(extra-libs)
- subdir-dirs = nss_hesiod
- vpath %.c nss_hesiod
- 
--libnss_hesiod-routines	:= hesiod hesiod-grp hesiod-init hesiod-proto \
-+libnss_hesiod-routines	:= hesiod hesiod-grp hesiod-proto \
- 			   hesiod-pwd hesiod-service
- # Build only shared library
- libnss_hesiod-inhibit-o	= $(filter-out .os,$(object-suffixes))
-diff --git a/hesiod/hesiod.c b/hesiod/hesiod.c
-index 657dabe..98ddee3 100644
---- a/hesiod/hesiod.c
-+++ b/hesiod/hesiod.c
-@@ -1,6 +1,19 @@
--#if defined(LIBC_SCCS) && !defined(lint)
--static const char rcsid[] = "$BINDId: hesiod.c,v 1.21 2000/02/28 14:51:08 vixie Exp $";
--#endif
-+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
- 
- /*
-  * Copyright (c) 1996,1999 by Internet Software Consortium.
-@@ -52,18 +65,9 @@ static const char rcsid[] = "$BINDId: hesiod.c,v 1.21 2000/02/28 14:51:08 vixie
- 
- /* Forward */
- 
--int		hesiod_init(void **context);
--void		hesiod_end(void *context);
--char *		hesiod_to_bind(void *context, const char *name,
--			       const char *type);
--char **		hesiod_resolve(void *context, const char *name,
--			       const char *type);
--void		hesiod_free_list(void *context, char **list);
--
- static int	parse_config_file(struct hesiod_p *ctx, const char *filename);
- static char **	get_txt_records(struct hesiod_p *ctx, int class,
- 				const char *name);
--static int	init(struct hesiod_p *ctx);
- 
- /* Public */
- 
-@@ -82,7 +86,6 @@ hesiod_init(void **context) {
- 
- 	ctx->LHS = NULL;
- 	ctx->RHS = NULL;
--	ctx->res = NULL;
- 	/* Set default query classes. */
- 	ctx->classes[0] = C_IN;
- 	ctx->classes[1] = C_HS;
-@@ -131,11 +134,6 @@ hesiod_init(void **context) {
- 		goto cleanup;
- 	}
- 
--#if 0
--	if (res_ninit(ctx->res) < 0)
--		goto cleanup;
--#endif
--
- 	*context = ctx;
- 	return (0);
- 
-@@ -152,12 +150,8 @@ hesiod_end(void *context) {
- 	struct hesiod_p *ctx = (struct hesiod_p *) context;
- 	int save_errno = errno;
- 
--	if (ctx->res)
--		res_nclose(ctx->res);
- 	free(ctx->RHS);
- 	free(ctx->LHS);
--	if (ctx->res && ctx->free_res)
--		(*ctx->free_res)(ctx->res);
- 	free(ctx);
- 	__set_errno(save_errno);
- }
-@@ -232,10 +226,6 @@ hesiod_resolve(void *context, const char *name, const char *type) {
- 
- 	if (bindname == NULL)
- 		return (NULL);
--	if (init(ctx) == -1) {
--		free(bindname);
--		return (NULL);
--	}
- 
- 	retvec = get_txt_records(ctx, ctx->classes[0], bindname);
- 
-@@ -365,13 +355,13 @@ get_txt_records(struct hesiod_p *ctx, int class, const char *name) {
- 	/*
- 	 * Construct the query and send it.
- 	 */
--	n = res_nmkquery(ctx->res, QUERY, name, class, T_TXT, NULL, 0,
-+	n = res_mkquery(QUERY, name, class, T_TXT, NULL, 0,
- 			 NULL, qbuf, MAX_HESRESP);
- 	if (n < 0) {
- 		__set_errno(EMSGSIZE);
- 		return (NULL);
- 	}
--	n = res_nsend(ctx->res, qbuf, n, abuf, MAX_HESRESP);
-+	n = res_send(qbuf, n, abuf, MAX_HESRESP);
- 	if (n < 0) {
- 		__set_errno(ECONNREFUSED);
- 		return (NULL);
-@@ -421,7 +411,7 @@ get_txt_records(struct hesiod_p *ctx, int class, const char *name) {
- 		cp += INT16SZ + INT32SZ;	/* skip the ttl, too */
- 		rr.dlen = ns_get16(cp);
- 		cp += INT16SZ;
--		if (cp + rr.dlen > eom) {
-+		if (rr.dlen == 0 || cp + rr.dlen > eom) {
- 			__set_errno(EMSGSIZE);
- 			goto cleanup;
- 		}
-@@ -464,44 +454,3 @@ get_txt_records(struct hesiod_p *ctx, int class, const char *name) {
- 	free(list);
- 	return (NULL);
- }
--
--struct __res_state *
--__hesiod_res_get(void *context) {
--	struct hesiod_p *ctx = context;
--
--	if (!ctx->res) {
--		struct __res_state *res;
--		res = (struct __res_state *)calloc(1, sizeof *res);
--		if (res == NULL)
--			return (NULL);
--		__hesiod_res_set(ctx, res, free);
--	}
--
--	return (ctx->res);
--}
--
--void
--__hesiod_res_set(void *context, struct __res_state *res,
--		 void (*free_res)(void *)) {
--	struct hesiod_p *ctx = context;
--
--	if (ctx->res && ctx->free_res) {
--		res_nclose(ctx->res);
--		(*ctx->free_res)(ctx->res);
--	}
--
--	ctx->res = res;
--	ctx->free_res = free_res;
--}
--
--static int
--init(struct hesiod_p *ctx) {
--
--	if (!ctx->res && !__hesiod_res_get(ctx))
--		return (-1);
--
--	if (__res_maybe_init (ctx->res, 0) == -1)
--		return (-1);
--
--	return (0);
--}
-diff --git a/hesiod/hesiod.h b/hesiod/hesiod.h
-index 82fce30..c4f5356 100644
---- a/hesiod/hesiod.h
-+++ b/hesiod/hesiod.h
-@@ -1,3 +1,20 @@
-+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
- /*
-  * Copyright (c) 1996,1999 by Internet Software Consortium.
-  *
-@@ -19,22 +36,15 @@
-  * This file is primarily maintained by <tytso at mit.edu> and <ghudson at mit.edu>.
-  */
- 
--/*
-- * $BINDId: hesiod.h,v 1.7 1999/01/08 19:22:45 vixie Exp $
-- */
--
- #ifndef _HESIOD_H_INCLUDED
- #define _HESIOD_H_INCLUDED
- 
--int		hesiod_init (void **context);
--void		hesiod_end (void *context);
-+int		hesiod_init (void **context) attribute_hidden;
-+void		hesiod_end (void *context) attribute_hidden;
- char *		hesiod_to_bind (void *context, const char *name,
--				const char *type);
-+				const char *type) attribute_hidden;
- char **		hesiod_resolve (void *context, const char *name,
--				const char *type);
--void		hesiod_free_list (void *context, char **list);
--struct __res_state * __hesiod_res_get (void *context);
--void		__hesiod_res_set (void *context, struct __res_state *,
--				  void (*)(void *));
-+				const char *type) attribute_hidden;
-+void		hesiod_free_list (void *context, char **list) attribute_hidden;
- 
- #endif /*_HESIOD_H_INCLUDED*/
-diff --git a/hesiod/hesiod_p.h b/hesiod/hesiod_p.h
-index 5010d71..1d6d826 100644
---- a/hesiod/hesiod_p.h
-+++ b/hesiod/hesiod_p.h
-@@ -1,3 +1,20 @@
-+/* Copyright (C) 1997-2016 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
- /*
-  * Copyright (c) 1996,1999 by Internet Software Consortium.
-  *
-@@ -20,10 +37,6 @@
-  */
- 
- /*
-- * $BINDId: hesiod_p.h,v 1.9 1999/01/08 19:24:39 vixie Exp $
-- */
--
--/*
-  * hesiod_p.h -- private definitions for the hesiod library
-  */
- 
-@@ -36,11 +49,6 @@
- struct hesiod_p {
- 	char *		LHS;		/* normally ".ns" */
- 	char *		RHS;		/* AKA the default hesiod domain */
--	struct __res_state * res;	/* resolver context */
--	void		(*free_res)(void *);
--	void		(*res_set)(struct hesiod_p *, struct __res_state *,
--				   void (*)(void *));
--	struct __res_state * (*res_get)(struct hesiod_p *);
- 	int		classes[2];	/* The class search order. */
- };
- 
-diff --git a/hesiod/nss_hesiod/hesiod-grp.c b/hesiod/nss_hesiod/hesiod-grp.c
-index 7e4ecb4..944e5e0 100644
---- a/hesiod/nss_hesiod/hesiod-grp.c
-+++ b/hesiod/nss_hesiod/hesiod-grp.c
-@@ -26,8 +26,6 @@
- #include <string.h>
- #include <sys/param.h>
- 
--#include "nss_hesiod.h"
--
- /* Get the declaration of the parser function.  */
- #define ENTNAME grent
- #define STRUCTURE group
-@@ -58,8 +56,7 @@ lookup (const char *name, const char *type, struct group *grp,
-   size_t len;
-   int olderr = errno;
- 
--  context = _nss_hesiod_init ();
--  if (context == NULL)
-+  if (hesiod_init (&context) < 0)
-     return NSS_STATUS_UNAVAIL;
- 
-   list = hesiod_resolve (context, name, type);
-@@ -179,8 +176,7 @@ _nss_hesiod_initgroups_dyn (const char *user, gid_t group, long int *start,
-   gid_t *groups = *groupsp;
-   int save_errno;
- 
--  context = _nss_hesiod_init ();
--  if (context == NULL)
-+  if (hesiod_init (&context) < 0)
-     return NSS_STATUS_UNAVAIL;
- 
-   list = hesiod_resolve (context, user, "grplist");
-diff --git a/hesiod/nss_hesiod/hesiod-init.c b/hesiod/nss_hesiod/hesiod-init.c
-deleted file mode 100644
-index 2315040..0000000
---- a/hesiod/nss_hesiod/hesiod-init.c
-+++ /dev/null
-@@ -1,38 +0,0 @@
--/* Copyright (C) 2000-2016 Free Software Foundation, Inc.
--   This file is part of the GNU C Library.
--   Contributed by Mark Kettenis <kettenis at phys.uva.nl>, 2000.
--
--   The GNU C Library is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 of the License, or (at your option) any later version.
--
--   The GNU C Library is distributed in the hope that it will be useful,
--   but WITHOUT ANY WARRANTY; without even the implied warranty of
--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, see
--   <http://www.gnu.org/licenses/>.  */
--
--#include <sys/cdefs.h>		/* Needs to come before <hesiod.h>.  */
--#include <hesiod.h>
--#include <resolv.h>
--#include <stddef.h>
--
--#include "nss_hesiod.h"
--
--void *
--_nss_hesiod_init (void)
--{
--  void *context;
--
--  if (hesiod_init (&context) == -1)
--    return NULL;
--
--  /* Use the default (per-thread) resolver state.  */
--  __hesiod_res_set (context, &_res, NULL);
--
--  return context;
--}
-diff --git a/hesiod/nss_hesiod/hesiod-proto.c b/hesiod/nss_hesiod/hesiod-proto.c
-index 3c59e73..8a13bba 100644
---- a/hesiod/nss_hesiod/hesiod-proto.c
-+++ b/hesiod/nss_hesiod/hesiod-proto.c
-@@ -25,8 +25,6 @@
- #include <stdlib.h>
- #include <string.h>
- 
--#include "nss_hesiod.h"
--
- /* Declare a parser for Hesiod protocol entries.  Although the format
-    of the entries is identical to those in /etc/protocols, here is no
-    predefined parser for us to use.  */
-@@ -68,8 +66,7 @@ lookup (const char *name, const char *type, struct protoent *proto,
-   int found;
-   int olderr = errno;
- 
--  context = _nss_hesiod_init ();
--  if (context == NULL)
-+  if (hesiod_init (&context) < 0)
-     return NSS_STATUS_UNAVAIL;
- 
-   list = hesiod_resolve (context, name, type);
-diff --git a/hesiod/nss_hesiod/hesiod-pwd.c b/hesiod/nss_hesiod/hesiod-pwd.c
-index 1ddf3e3..c119167 100644
---- a/hesiod/nss_hesiod/hesiod-pwd.c
-+++ b/hesiod/nss_hesiod/hesiod-pwd.c
-@@ -24,8 +24,6 @@
- #include <stdlib.h>
- #include <string.h>
- 
--#include "nss_hesiod.h"
--
- /* Get the declaration of the parser function.  */
- #define ENTNAME pwent
- #define STRUCTURE passwd
-@@ -56,8 +54,7 @@ lookup (const char *name, const char *type, struct passwd *pwd,
-   size_t len;
-   int olderr = errno;
- 
--  context = _nss_hesiod_init ();
--  if (context == NULL)
-+  if (hesiod_init (&context) < 0)
-     return NSS_STATUS_UNAVAIL;
- 
-   list = hesiod_resolve (context, name, type);
-diff --git a/hesiod/nss_hesiod/hesiod-service.c b/hesiod/nss_hesiod/hesiod-service.c
-index 756345f..2df9cbb 100644
---- a/hesiod/nss_hesiod/hesiod-service.c
-+++ b/hesiod/nss_hesiod/hesiod-service.c
-@@ -25,8 +25,6 @@
- #include <stdlib.h>
- #include <string.h>
- 
--#include "nss_hesiod.h"
--
- /* Hesiod uses a format for service entries that differs from the
-    traditional format.  We therefore declare our own parser.  */
- 
-@@ -69,8 +67,7 @@ lookup (const char *name, const char *type, const char *protocol,
-   int found;
-   int olderr = errno;
- 
--  context = _nss_hesiod_init ();
--  if (context == NULL)
-+  if (hesiod_init (&context) < 0)
-     return NSS_STATUS_UNAVAIL;
- 
-   list = hesiod_resolve (context, name, type);
-diff --git a/hesiod/nss_hesiod/nss_hesiod.h b/hesiod/nss_hesiod/nss_hesiod.h
-deleted file mode 100644
-index a6ed8ee..0000000
---- a/hesiod/nss_hesiod/nss_hesiod.h
-+++ /dev/null
-@@ -1,20 +0,0 @@
--/* Copyright (C) 2000-2016 Free Software Foundation, Inc.
--   This file is part of the GNU C Library.
--   Contributed by Mark Kettenis <kettenis at phys.uva.nl>, 2000.
--
--   The GNU C Library is free software; you can redistribute it and/or
--   modify it under the terms of the GNU Lesser General Public
--   License as published by the Free Software Foundation; either
--   version 2.1 of the License, or (at your option) any later version.
--
--   The GNU C Library is distributed in the hope that it will be useful,
--   but WITHOUT ANY WARRANTY; without even the implied warranty of
--   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--   Lesser General Public License for more details.
--
--   You should have received a copy of the GNU Lesser General Public
--   License along with the GNU C Library; if not, see
--   <http://www.gnu.org/licenses/>.  */
--
--/* Initialize a Hesiod context.  */
--extern void *_nss_hesiod_init (void);
-diff --git a/include/printf.h b/include/printf.h
-index c0bd2d2..b12b5dc 100644
---- a/include/printf.h
-+++ b/include/printf.h
-@@ -1,6 +1,7 @@
- #ifndef	_PRINTF_H
- 
- #include <stdio-common/printf.h>
-+#include <xlocale.h>
- 
- /* Now define the internal interfaces.  */
- extern int __printf_fphex (FILE *, const struct printf_info *,
-@@ -8,5 +9,8 @@ extern int __printf_fphex (FILE *, const struct printf_info *,
- extern int __printf_fp (FILE *, const struct printf_info *,
- 			const void *const *);
- libc_hidden_proto (__printf_fp)
-+extern int __printf_fp_l (FILE *, locale_t, const struct printf_info *,
-+			  const void *const *);
-+libc_hidden_proto (__printf_fp_l)
- 
- #endif
-diff --git a/include/sys/auxv.h b/include/sys/auxv.h
-new file mode 100644
-index 0000000..dede2c3
---- /dev/null
-+++ b/include/sys/auxv.h
-@@ -0,0 +1 @@
-+#include <misc/sys/auxv.h>
-diff --git a/inet/getnameinfo.c b/inet/getnameinfo.c
-index 40f67f0..283da55 100644
---- a/inet/getnameinfo.c
-+++ b/inet/getnameinfo.c
-@@ -1,3 +1,21 @@
-+/* Convert socket address to string using Name Service Switch modules.
-+   Copyright (C) 1997-2016 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public
-+   License as published by the Free Software Foundation; either
-+   version 2.1 of the License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; if not, see
-+   <http://www.gnu.org/licenses/>.  */
-+
- /* The Inner Net License, Version 2.00
- 
-   The author(s) grant permission for redistribution and use in source and
-@@ -169,20 +187,322 @@ nrl_domainname (void)
-   return domain;
- };
- 
-+/* Copy a string to a destination buffer with length checking.  Return
-+   EAI_OVERFLOW if the buffer is not large enough, and 0 on
-+   success.  */
-+static int
-+checked_copy (char *dest, size_t destlen, const char *source)
-+{
-+  size_t source_length = strlen (source);
-+  if (source_length + 1 > destlen)
-+    return EAI_OVERFLOW;
-+  memcpy (dest, source, source_length + 1);
-+  return 0;
-+}
- 
--int
--getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
--	     socklen_t hostlen, char *serv, socklen_t servlen,
--	     int flags)
-+/* Helper function for CHECKED_SNPRINTF below.  */
-+static int
-+check_sprintf_result (int result, size_t destlen)
-+{
-+  if (result < 0)
-+    return EAI_SYSTEM;
-+  if ((size_t) result >= destlen)
-+    /* If ret == destlen, there was no room for the terminating NUL
-+       character.  */
-+    return EAI_OVERFLOW;
-+  return 0;
-+}
-+
-+/* Format a string in the destination buffer.  Return 0 on success,
-+   EAI_OVERFLOW in case the buffer is too small, or EAI_SYSTEM on any
-+   other error.  */
-+#define CHECKED_SNPRINTF(dest, destlen, format, ...)			\
-+  check_sprintf_result							\
-+    (__snprintf (dest, destlen, format, __VA_ARGS__), destlen)
-+
-+/* Convert host name, AF_INET/AF_INET6 case, name only.  */
-+static int
-+gni_host_inet_name (struct scratch_buffer *tmpbuf,
-+		    const struct sockaddr *sa, socklen_t addrlen,
-+		    char *host, socklen_t hostlen, int flags)
- {
--  int serrno = errno;
-   int herrno;
-   struct hostent th;
--  int ok = 0;
--  struct scratch_buffer tmpbuf;
-+  struct hostent *h = NULL;
-+  if (sa->sa_family == AF_INET6)
-+    {
-+      const struct sockaddr_in6 *sin6p = (const struct sockaddr_in6 *) sa;
-+      while (__gethostbyaddr_r (&sin6p->sin6_addr, sizeof(struct in6_addr),
-+				AF_INET6, &th, tmpbuf->data, tmpbuf->length,
-+				&h, &herrno))
-+	if (herrno == NETDB_INTERNAL && errno == ERANGE)
-+	  {
-+	    if (!scratch_buffer_grow (tmpbuf))
-+	      {
-+		__set_h_errno (herrno);
-+		return EAI_MEMORY;
-+	      }
-+	  }
-+	else
-+	  break;
-+    }
-+  else
-+    {
-+      const struct sockaddr_in *sinp = (const struct sockaddr_in *) sa;
-+      while (__gethostbyaddr_r (&sinp->sin_addr, sizeof(struct in_addr),
-+				AF_INET, &th, tmpbuf->data, tmpbuf->length,
-+				&h, &herrno))
-+	if (herrno == NETDB_INTERNAL && errno == ERANGE)
-+	    {
-+	      if (!scratch_buffer_grow (tmpbuf))
-+		{
-+		  __set_h_errno (herrno);
-+		  return EAI_MEMORY;
-+		}
-+	    }
-+	else
-+	  break;
-+    }
- 
--  scratch_buffer_init (&tmpbuf);
-+  if (h == NULL)
-+    {
-+      if (herrno == NETDB_INTERNAL)
-+	{
-+	  __set_h_errno (herrno);
-+	  return EAI_SYSTEM;
-+	}
-+      if (herrno == TRY_AGAIN)
-+	{
-+	  __set_h_errno (herrno);
-+	  return EAI_AGAIN;
-+	}
-+    }
-+
-+  if (h)
-+    {
-+      char *c;
-+      if ((flags & NI_NOFQDN)
-+	  && (c = nrl_domainname ())
-+	  && (c = strstr (h->h_name, c))
-+	  && (c != h->h_name) && (*(--c) == '.'))
-+	/* Terminate the string after the prefix.  */
-+	*c = '\0';
-+
-+#ifdef HAVE_LIBIDN
-+      /* If requested, convert from the IDN format.  */
-+      if (flags & NI_IDN)
-+	{
-+	  int idn_flags = 0;
-+	  if  (flags & NI_IDN_ALLOW_UNASSIGNED)
-+	    idn_flags |= IDNA_ALLOW_UNASSIGNED;
-+	  if (flags & NI_IDN_USE_STD3_ASCII_RULES)
-+	    idn_flags |= IDNA_USE_STD3_ASCII_RULES;
-+
-+	  char *out;
-+	  int rc = __idna_to_unicode_lzlz (h->h_name, &out,
-+					   idn_flags);
-+	  if (rc != IDNA_SUCCESS)
-+	    {
-+	      if (rc == IDNA_MALLOC_ERROR)
-+		return EAI_MEMORY;
-+	      if (rc == IDNA_DLOPEN_ERROR)
-+		return EAI_SYSTEM;
-+	      return EAI_IDN_ENCODE;
-+	    }
-+
-+	  if (out != h->h_name)
-+	    {
-+	      h->h_name = strdupa (out);
-+	      free (out);
-+	    }
-+	}
-+#endif
-+
-+      size_t len = strlen (h->h_name) + 1;
-+      if (len > hostlen)
-+	return EAI_OVERFLOW;
- 
-+      memcpy (host, h->h_name, len);
-+
-+      return 0;
-+    }
-+
-+  return EAI_NONAME;
-+}
-+
-+/* Convert host name, AF_INET/AF_INET6 case, numeric conversion.  */
-+static int
-+gni_host_inet_numeric (struct scratch_buffer *tmpbuf,
-+		       const struct sockaddr *sa, socklen_t addrlen,
-+		       char *host, socklen_t hostlen, int flags)
-+{
-+  if (sa->sa_family == AF_INET6)
-+    {
-+      const struct sockaddr_in6 *sin6p = (const struct sockaddr_in6 *) sa;
-+      if (inet_ntop (AF_INET6, &sin6p->sin6_addr, host, hostlen) == NULL)
-+	return EAI_OVERFLOW;
-+
-+      uint32_t scopeid = sin6p->sin6_scope_id;
-+      if (scopeid != 0)
-+	{
-+	  size_t used_hostlen = __strnlen (host, hostlen);
-+	  /* Location of the scope string in the host buffer.  */
-+	  char *scope_start = host + used_hostlen;
-+	  size_t scope_length = hostlen - used_hostlen;
-+
-+	  if (IN6_IS_ADDR_LINKLOCAL (&sin6p->sin6_addr)
-+	      || IN6_IS_ADDR_MC_LINKLOCAL (&sin6p->sin6_addr))
-+	    {
-+	      char scopebuf[IFNAMSIZ];
-+	      if (if_indextoname (scopeid, scopebuf) != NULL)
-+		return CHECKED_SNPRINTF
-+		  (scope_start, scope_length,
-+		   "%c%s", SCOPE_DELIMITER, scopebuf);
-+	    }
-+	  return CHECKED_SNPRINTF
-+	    (scope_start, scope_length, "%c%u", SCOPE_DELIMITER, scopeid);
-+	}
-+    }
-+  else
-+    {
-+      const struct sockaddr_in *sinp = (const struct sockaddr_in *) sa;
-+      if (inet_ntop (AF_INET, &sinp->sin_addr, host, hostlen) == NULL)
-+	return EAI_OVERFLOW;
-+    }
-+  return 0;
-+}
-+
-+/* Convert AF_INET or AF_INET6 socket address, host part.  */
-+static int
-+gni_host_inet (struct scratch_buffer *tmpbuf,
-+	       const struct sockaddr *sa, socklen_t addrlen,
-+	       char *host, socklen_t hostlen, int flags)
-+{
-+  if (!(flags & NI_NUMERICHOST))
-+    {
-+      int result = gni_host_inet_name
-+	(tmpbuf, sa, addrlen, host, hostlen, flags);
-+      if (result != EAI_NONAME)
-+	return result;
-+    }
-+
-+  if (flags & NI_NAMEREQD)
-+    return EAI_NONAME;
-+  else
-+    return gni_host_inet_numeric
-+      (tmpbuf, sa, addrlen, host, hostlen, flags);
-+}
-+
-+/* Convert AF_LOCAL socket address, host part.   */
-+static int
-+gni_host_local (struct scratch_buffer *tmpbuf,
-+		const struct sockaddr *sa, socklen_t addrlen,
-+		char *host, socklen_t hostlen, int flags)
-+{
-+  if (!(flags & NI_NUMERICHOST))
-+    {
-+      struct utsname utsname;
-+      if (uname (&utsname) == 0)
-+	return checked_copy (host, hostlen, utsname.nodename);
-+    }
-+
-+  if (flags & NI_NAMEREQD)
-+    return EAI_NONAME;
-+
-+  return checked_copy (host, hostlen, "localhost");
-+}
-+
-+/* Convert the host part of an AF_LOCAK socket address.   */
-+static int
-+gni_host (struct scratch_buffer *tmpbuf,
-+	  const struct sockaddr *sa, socklen_t addrlen,
-+	  char *host, socklen_t hostlen, int flags)
-+{
-+  switch (sa->sa_family)
-+    {
-+    case AF_INET:
-+    case AF_INET6:
-+      return gni_host_inet (tmpbuf, sa, addrlen, host, hostlen, flags);
-+
-+    case AF_LOCAL:
-+      return gni_host_local (tmpbuf, sa, addrlen, host, hostlen, flags);
-+
-+    default:
-+      return EAI_FAMILY;
-+    }
-+}
-+
-+/* Convert service to string, AF_INET and AF_INET6 variant.  */
-+static int
-+gni_serv_inet (struct scratch_buffer *tmpbuf,
-+	       const struct sockaddr *sa, socklen_t addrlen,
-+	       char *serv, socklen_t servlen, int flags)
-+{
-+  _Static_assert
-+    (offsetof (struct sockaddr_in, sin_port)
-+     == offsetof (struct sockaddr_in6, sin6_port)
-+     && sizeof (((struct sockaddr_in) {}).sin_port) == sizeof (in_port_t)
-+     && sizeof (((struct sockaddr_in6) {}).sin6_port) == sizeof (in_port_t),
-+     "AF_INET and AF_INET6 port consistency");
-+  const struct sockaddr_in *sinp = (const struct sockaddr_in *) sa;
-+  if (!(flags & NI_NUMERICSERV))
-+    {
-+      struct servent *s, ts;
-+      int e;
-+      while ((e = __getservbyport_r (sinp->sin_port,
-+				     ((flags & NI_DGRAM)
-+				      ? "udp" : "tcp"), &ts,
-+				     tmpbuf->data, tmpbuf->length, &s)))
-+	{
-+	  if (e == ERANGE)
-+	    {
-+	      if (!scratch_buffer_grow (tmpbuf))
-+		return EAI_MEMORY;
-+	    }
-+	  else
-+	    break;
-+	}
-+      if (s)
-+	return checked_copy (serv, servlen, s->s_name);
-+      /* Fall through to numeric conversion.  */
-+    }
-+  return CHECKED_SNPRINTF (serv, servlen, "%d", ntohs (sinp->sin_port));
-+}
-+
-+/* Convert service to string, AF_LOCAL variant.  */
-+static int
-+gni_serv_local (struct scratch_buffer *tmpbuf,
-+	       const struct sockaddr *sa, socklen_t addrlen,
-+	       char *serv, socklen_t servlen, int flags)
-+{
-+  return checked_copy
-+    (serv, servlen, ((const struct sockaddr_un *) sa)->sun_path);
-+}
-+
-+/* Convert service to string, dispatching to the implementations
-+   above.  */
-+static int
-+gni_serv (struct scratch_buffer *tmpbuf,
-+	  const struct sockaddr *sa, socklen_t addrlen,
-+	  char *serv, socklen_t servlen, int flags)
-+{
-+  switch (sa->sa_family)
-+    {
-+    case AF_INET:
-+    case AF_INET6:
-+      return gni_serv_inet (tmpbuf, sa, addrlen, serv, servlen, flags);
-+    case AF_LOCAL:
-+      return gni_serv_local (tmpbuf, sa, addrlen, serv, servlen, flags);
-+    default:
-+      return EAI_FAMILY;
-+    }
-+}
-+
-+int
-+getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
-+	     socklen_t hostlen, char *serv, socklen_t servlen,
-+	     int flags)
-+{
-   if (flags & ~(NI_NUMERICHOST|NI_NUMERICSERV|NI_NOFQDN|NI_NAMEREQD|NI_DGRAM
- #ifdef HAVE_LIBIDN
- 		|NI_IDN|NI_IDN_ALLOW_UNASSIGNED|NI_IDN_USE_STD3_ASCII_RULES
-@@ -214,256 +534,30 @@ getnameinfo (const struct sockaddr *sa, socklen_t addrlen, char *host,
-       return EAI_FAMILY;
-     }
- 
--  if (host != NULL && hostlen > 0)
--    switch (sa->sa_family)
--      {
--      case AF_INET:
--      case AF_INET6:
--	if (!(flags & NI_NUMERICHOST))
--	  {
--	    struct hostent *h = NULL;
--	    if (sa->sa_family == AF_INET6)
--	      {
--		while (__gethostbyaddr_r ((const void *) &(((const struct sockaddr_in6 *) sa)->sin6_addr),
--					  sizeof(struct in6_addr),
--					  AF_INET6, &th,
--					  tmpbuf.data, tmpbuf.length,
--					  &h, &herrno))
--		  if (herrno == NETDB_INTERNAL && errno == ERANGE)
--		    {
--		      if (!scratch_buffer_grow (&tmpbuf))
--			{
--			  __set_h_errno (herrno);
--			  return EAI_MEMORY;
--			}
--		    }
--		  else
--		    break;
--	      }
--	    else
--	      {
--		while (__gethostbyaddr_r ((const void *) &(((const struct sockaddr_in *)sa)->sin_addr),
--					  sizeof(struct in_addr),
--					  AF_INET, &th,
--					  tmpbuf.data, tmpbuf.length,
--					  &h, &herrno))
--		  if (herrno == NETDB_INTERNAL && errno == ERANGE)
--		    {
--		      if (!scratch_buffer_grow (&tmpbuf))
--			{
--			  __set_h_errno (herrno);
--			  return EAI_MEMORY;
--			}
--		    }
--		  else
--		    break;
--	      }
--
--	    if (h == NULL)
--	      {
--		if (herrno == NETDB_INTERNAL)
--		  {
--		    __set_h_errno (herrno);
--		    return EAI_SYSTEM;
--		  }
--		if (herrno == TRY_AGAIN)
--		  {
--		    __set_h_errno (herrno);
--		    return EAI_AGAIN;
--		  }
--	      }
--
--	    if (h)
--	      {
--		char *c;
--		if ((flags & NI_NOFQDN)
--		    && (c = nrl_domainname ())
--		    && (c = strstr (h->h_name, c))
--		    && (c != h->h_name) && (*(--c) == '.'))
--		  /* Terminate the string after the prefix.  */
--		  *c = '\0';
--
--#ifdef HAVE_LIBIDN
--		/* If requested, convert from the IDN format.  */
--		if (flags & NI_IDN)
--		  {
--		    int idn_flags = 0;
--		    if  (flags & NI_IDN_ALLOW_UNASSIGNED)
--		      idn_flags |= IDNA_ALLOW_UNASSIGNED;
--		    if (flags & NI_IDN_USE_STD3_ASCII_RULES)
--		      idn_flags |= IDNA_USE_STD3_ASCII_RULES;
--
--		    char *out;
--		    int rc = __idna_to_unicode_lzlz (h->h_name, &out,
--						     idn_flags);
--		    if (rc != IDNA_SUCCESS)
--		      {
--			if (rc == IDNA_MALLOC_ERROR)
--			  return EAI_MEMORY;
--			if (rc == IDNA_DLOPEN_ERROR)
--			  return EAI_SYSTEM;
--			return EAI_IDN_ENCODE;
--		      }
--
--		    if (out != h->h_name)
--		      {
--			h->h_name = strdupa (out);
--			free (out);
--		      }
--		  }
--#endif
--
--		size_t len = strlen (h->h_name) + 1;
--		if (len > hostlen)
--		  return EAI_OVERFLOW;
--
--		memcpy (host, h->h_name, len);
--
--		ok = 1;
--	      }
--	  }
--
--	if (!ok)
--	  {
--	    if (flags & NI_NAMEREQD)
--	      {
--		__set_errno (serrno);
--		return EAI_NONAME;
--	      }
--	    else
--	      {
--		const char *c;
--		if (sa->sa_family == AF_INET6)
--		  {
--		    const struct sockaddr_in6 *sin6p;
--		    uint32_t scopeid;
--
--		    sin6p = (const struct sockaddr_in6 *) sa;
--
--		    c = inet_ntop (AF_INET6,
--				   (const void *) &sin6p->sin6_addr, host, hostlen);
--		    scopeid = sin6p->sin6_scope_id;
--		    if (scopeid != 0)
--		      {
--			/* Buffer is >= IFNAMSIZ+1.  */
--			char scopebuf[IFNAMSIZ + 1];
--			char *scopeptr;
--			int ni_numericscope = 0;
--			size_t real_hostlen = __strnlen (host, hostlen);
--			size_t scopelen = 0;
--
--			scopebuf[0] = SCOPE_DELIMITER;
--			scopebuf[1] = '\0';
--			scopeptr = &scopebuf[1];
--
--			if (IN6_IS_ADDR_LINKLOCAL (&sin6p->sin6_addr)
--			    || IN6_IS_ADDR_MC_LINKLOCAL (&sin6p->sin6_addr))
--			  {
--			    if (if_indextoname (scopeid, scopeptr) == NULL)
--			      ++ni_numericscope;
--			    else
--			      scopelen = strlen (scopebuf);
--			  }
--			else
--			  ++ni_numericscope;
--
--			if (ni_numericscope)
--			  scopelen = 1 + __snprintf (scopeptr,
--						     (scopebuf
--						      + sizeof scopebuf
--						      - scopeptr),
--						     "%u", scopeid);
--
--			if (real_hostlen + scopelen + 1 > hostlen)
--			  /* Signal the buffer is too small.  This is
--			     what inet_ntop does.  */
--			  c = NULL;
--			else
--			  memcpy (host + real_hostlen, scopebuf, scopelen + 1);
--		      }
--		  }
--		else
--		  c = inet_ntop (AF_INET,
--				 (const void *) &(((const struct sockaddr_in *) sa)->sin_addr),
--				 host, hostlen);
--		if (c == NULL)
--		  return EAI_OVERFLOW;
--	      }
--	    ok = 1;
--	  }
--	break;
--
--      case AF_LOCAL:
--	if (!(flags & NI_NUMERICHOST))
--	  {
--	    struct utsname utsname;
--
--	    if (!uname (&utsname))
--	      {
--		strncpy (host, utsname.nodename, hostlen);
--		break;
--	      };
--	  };
--
--	if (flags & NI_NAMEREQD)
--	   {
--	    __set_errno (serrno);
--	    return EAI_NONAME;
--	  }
--
--	strncpy (host, "localhost", hostlen);
--	break;
-+  struct scratch_buffer tmpbuf;
-+  scratch_buffer_init (&tmpbuf);
- 
--      default:
--	return EAI_FAMILY;
-+  if (host != NULL && hostlen > 0)
-+    {
-+      int result = gni_host (&tmpbuf, sa, addrlen, host, hostlen, flags);
-+      if (result != 0)
-+	{
-+	  scratch_buffer_free (&tmpbuf);
-+	  return result;
-+	}
-     }
- 
-   if (serv && (servlen > 0))
--    switch (sa->sa_family)
--      {
--      case AF_INET:
--      case AF_INET6:
--	if (!(flags & NI_NUMERICSERV))
--	  {
--	    struct servent *s, ts;
--	    int e;
--	    while ((e = __getservbyport_r (((const struct sockaddr_in *) sa)->sin_port,
--					   ((flags & NI_DGRAM)
--					    ? "udp" : "tcp"), &ts,
--					   tmpbuf.data, tmpbuf.length, &s)))
--	      {
--		if (e == ERANGE)
--		  {
--		    if (!scratch_buffer_grow (&tmpbuf))
--		      return EAI_MEMORY;
--		  }
--		else
--		  break;
--	      }
--	    if (s)
--	      {
--		strncpy (serv, s->s_name, servlen);
--		break;
--	      }
--	  }
--
--	if (__snprintf (serv, servlen, "%d",
--			ntohs (((const struct sockaddr_in *) sa)->sin_port))
--	    + 1 > servlen)
--	  return EAI_OVERFLOW;
--
--	break;
--
--      case AF_LOCAL:
--	strncpy (serv, ((const struct sockaddr_un *) sa)->sun_path, servlen);
--	break;
-+    {
-+      int result = gni_serv (&tmpbuf, sa, addrlen, serv, servlen, flags);
-+      if (result != 0)
-+	{
-+	  scratch_buffer_free (&tmpbuf);
-+	  return result;
-+	}
-     }
- 
--  if (host && (hostlen > 0))
--    host[hostlen-1] = 0;
--  if (serv && (servlen > 0))
--    serv[servlen-1] = 0;
--  errno = serrno;
-+  scratch_buffer_free (&tmpbuf);
-   return 0;
- }
- libc_hidden_def (getnameinfo)
-diff --git a/locale/localeinfo.h b/locale/localeinfo.h
-index 5c4e6ef..94627f3 100644
---- a/locale/localeinfo.h
-+++ b/locale/localeinfo.h
-@@ -299,6 +299,27 @@ extern __thread struct __locale_data *const *_nl_current_##category \
- 
- #endif
- 
-+/* Extract CATEGORY locale's string for ITEM.  */
-+static inline const char *
-+_nl_lookup (locale_t l, int category, int item)
-+{
-+  return l->__locales[category]->values[_NL_ITEM_INDEX (item)].string;
-+}
-+
-+/* Extract CATEGORY locale's wide string for ITEM.  */
-+static inline const wchar_t *
-+_nl_lookup_wstr (locale_t l, int category, int item)
-+{
-+  return (wchar_t *) l->__locales[category]
-+    ->values[_NL_ITEM_INDEX (item)].wstr;
-+}
-+
-+/* Extract the CATEGORY locale's word for ITEM.  */
-+static inline uint32_t
-+_nl_lookup_word (locale_t l, int category, int item)
-+{
-+  return l->__locales[category]->values[_NL_ITEM_INDEX (item)].word;
-+}
- 
- /* Default search path if no LOCPATH environment variable.  */
- extern const char _nl_default_locale_path[] attribute_hidden;
-diff --git a/localedata/ChangeLog b/localedata/ChangeLog
-index 05ccd90..dd1c2b1 100644
---- a/localedata/ChangeLog
-+++ b/localedata/ChangeLog
-@@ -1,3 +1,10 @@
-+2016-02-19  Florian Weimer  <fweimer at redhat.com>
-+
-+	[BZ #19581]
-+	* locales/sr_ME (date_fmt): Remove newline.
-+	* locales/sr_RS (date_fmt): Likewise.
-+	* locales/sr_RS at latin (date_fmt): Likewise.
-+
- 2016-02-08  Mike Frysinger  <vapier at gentoo.org>
- 
- 	* locales/an_ES: Convert to UTF-8 encodings.
-diff --git a/localedata/locales/sr_ME b/localedata/locales/sr_ME
-index 4f243dc..dd68df8 100644
---- a/localedata/locales/sr_ME
-+++ b/localedata/locales/sr_ME
-@@ -119,7 +119,7 @@ am_pm   "";""
- t_fmt_ampm "<U0025><U0054>"
- date_fmt  "<U0025><U0061><U002c><U0020><U0025><U0065><U002E><U0020>/
- <U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
--<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
-+<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A>"
- week    7;19971130;4
- first_weekday 2
- first_workday 2
-diff --git a/localedata/locales/sr_RS b/localedata/locales/sr_RS
-index 2ae085b..ffea86f 100644
---- a/localedata/locales/sr_RS
-+++ b/localedata/locales/sr_RS
-@@ -300,7 +300,7 @@ am_pm   "";""
- t_fmt_ampm "<U0025><U0054>"
- date_fmt  "<U0025><U0061><U002C><U0020><U0025><U0065><U002E><U0020>/
- <U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
--<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
-+<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A>"
- week    7;19971130;4
- first_weekday 2
- first_workday 2
-diff --git a/localedata/locales/sr_RS at latin b/localedata/locales/sr_RS at latin
-index da6628b..fd10ea6 100644
---- a/localedata/locales/sr_RS at latin
-+++ b/localedata/locales/sr_RS at latin
-@@ -120,7 +120,7 @@ am_pm   "";""
- t_fmt_ampm "<U0025><U0054>"
- date_fmt  "<U0025><U0061><U002c><U0020><U0025><U0065><U002E><U0020>/
- <U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
--<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
-+<U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A>"
- week    7;19971130;4
- first_weekday 2
- first_workday 2
-diff --git a/malloc/Makefile b/malloc/Makefile
-index 360288b..3283f4f 100644
---- a/malloc/Makefile
-+++ b/malloc/Makefile
-@@ -29,7 +29,7 @@ tests := mallocbug tst-malloc tst-valloc tst-calloc tst-obstack \
- 	 tst-malloc-usable tst-realloc tst-posix_memalign \
- 	 tst-pvalloc tst-memalign tst-mallopt tst-scratch_buffer \
- 	 tst-malloc-backtrace tst-malloc-thread-exit \
--	 tst-malloc-thread-fail
-+	 tst-malloc-thread-fail tst-malloc-fork-deadlock
- test-srcs = tst-mtrace
- 
- routines = malloc morecore mcheck mtrace obstack \
-@@ -46,12 +46,10 @@ extra-libs-others = $(extra-libs)
- libmemusage-routines = memusage
- libmemusage-inhibit-o = $(filter-out .os,$(object-suffixes))
- 
--$(objpfx)tst-malloc-backtrace: $(common-objpfx)nptl/libpthread.so \
--			       $(common-objpfx)nptl/libpthread_nonshared.a
--$(objpfx)tst-malloc-thread-exit: $(common-objpfx)nptl/libpthread.so \
--			       $(common-objpfx)nptl/libpthread_nonshared.a
--$(objpfx)tst-malloc-thread-fail: $(common-objpfx)nptl/libpthread.so \
--			       $(common-objpfx)nptl/libpthread_nonshared.a
-+$(objpfx)tst-malloc-backtrace: $(shared-thread-library)
-+$(objpfx)tst-malloc-thread-exit: $(shared-thread-library)
-+$(objpfx)tst-malloc-thread-fail: $(shared-thread-library)
-+$(objpfx)tst-malloc-fork-deadlock: $(shared-thread-library)
- 
- # These should be removed by `make clean'.
- extra-objs = mcheck-init.o libmcheck.a
-diff --git a/malloc/arena.c b/malloc/arena.c
-index 1edb4d4..47715b6 100644
---- a/malloc/arena.c
-+++ b/malloc/arena.c
-@@ -130,149 +130,43 @@ int __malloc_initialized = -1;
- 
- /**************************************************************************/
- 
--#ifndef NO_THREADS
--
- /* atfork support.  */
- 
--static void *(*save_malloc_hook)(size_t __size, const void *);
--static void (*save_free_hook) (void *__ptr, const void *);
--static void *save_arena;
--
--# ifdef ATFORK_MEM
--ATFORK_MEM;
--# endif
--
--/* Magic value for the thread-specific arena pointer when
--   malloc_atfork() is in use.  */
--
--# define ATFORK_ARENA_PTR ((void *) -1)
--
--/* The following hooks are used while the `atfork' handling mechanism
--   is active. */
--
--static void *
--malloc_atfork (size_t sz, const void *caller)
--{
--  void *victim;
--
--  if (thread_arena == ATFORK_ARENA_PTR)
--    {
--      /* We are the only thread that may allocate at all.  */
--      if (save_malloc_hook != malloc_check)
--        {
--          return _int_malloc (&main_arena, sz);
--        }
--      else
--        {
--          if (top_check () < 0)
--            return 0;
--
--          victim = _int_malloc (&main_arena, sz + 1);
--          return mem2mem_check (victim, sz);
--        }
--    }
--  else
--    {
--      /* Suspend the thread until the `atfork' handlers have completed.
--         By that time, the hooks will have been reset as well, so that
--         mALLOc() can be used again. */
--      (void) mutex_lock (&list_lock);
--      (void) mutex_unlock (&list_lock);
--      return __libc_malloc (sz);
--    }
--}
--
--static void
--free_atfork (void *mem, const void *caller)
--{
--  mstate ar_ptr;
--  mchunkptr p;                          /* chunk corresponding to mem */
--
--  if (mem == 0)                              /* free(0) has no effect */
--    return;
--
--  p = mem2chunk (mem);         /* do not bother to replicate free_check here */
--
--  if (chunk_is_mmapped (p))                       /* release mmapped memory. */
--    {
--      munmap_chunk (p);
--      return;
--    }
--
--  ar_ptr = arena_for_chunk (p);
--  _int_free (ar_ptr, p, thread_arena == ATFORK_ARENA_PTR);
--}
--
--
--/* Counter for number of times the list is locked by the same thread.  */
--static unsigned int atfork_recursive_cntr;
-+/* The following three functions are called around fork from a
-+   multi-threaded process.  We do not use the general fork handler
-+   mechanism to make sure that our handlers are the last ones being
-+   called, so that other fork handlers can use the malloc
-+   subsystem.  */
- 
--/* The following two functions are registered via thread_atfork() to
--   make sure that the mutexes remain in a consistent state in the
--   fork()ed version of a thread.  Also adapt the malloc and free hooks
--   temporarily, because the `atfork' handler mechanism may use
--   malloc/free internally (e.g. in LinuxThreads). */
--
--static void
--ptmalloc_lock_all (void)
-+void
-+internal_function
-+__malloc_fork_lock_parent (void)
- {
--  mstate ar_ptr;
--
-   if (__malloc_initialized < 1)
-     return;
- 
-   /* We do not acquire free_list_lock here because we completely
--     reconstruct free_list in ptmalloc_unlock_all2.  */
-+     reconstruct free_list in __malloc_fork_unlock_child.  */
- 
--  if (mutex_trylock (&list_lock))
--    {
--      if (thread_arena == ATFORK_ARENA_PTR)
--        /* This is the same thread which already locks the global list.
--           Just bump the counter.  */
--        goto out;
-+  (void) mutex_lock (&list_lock);
- 
--      /* This thread has to wait its turn.  */
--      (void) mutex_lock (&list_lock);
--    }
--  for (ar_ptr = &main_arena;; )
-+  for (mstate ar_ptr = &main_arena;; )
-     {
-       (void) mutex_lock (&ar_ptr->mutex);
-       ar_ptr = ar_ptr->next;
-       if (ar_ptr == &main_arena)
-         break;
-     }
--  save_malloc_hook = __malloc_hook;
--  save_free_hook = __free_hook;
--  __malloc_hook = malloc_atfork;
--  __free_hook = free_atfork;
--  /* Only the current thread may perform malloc/free calls now.
--     save_arena will be reattached to the current thread, in
--     ptmalloc_lock_all, so save_arena->attached_threads is not
--     updated.  */
--  save_arena = thread_arena;
--  thread_arena = ATFORK_ARENA_PTR;
--out:
--  ++atfork_recursive_cntr;
- }
- 
--static void
--ptmalloc_unlock_all (void)
-+void
-+internal_function
-+__malloc_fork_unlock_parent (void)
- {
--  mstate ar_ptr;
--
-   if (__malloc_initialized < 1)
-     return;
- 
--  if (--atfork_recursive_cntr != 0)
--    return;
--
--  /* Replace ATFORK_ARENA_PTR with save_arena.
--     save_arena->attached_threads was not changed in ptmalloc_lock_all
--     and is still correct.  */
--  thread_arena = save_arena;
--  __malloc_hook = save_malloc_hook;
--  __free_hook = save_free_hook;
--  for (ar_ptr = &main_arena;; )
-+  for (mstate ar_ptr = &main_arena;; )
-     {
-       (void) mutex_unlock (&ar_ptr->mutex);
-       ar_ptr = ar_ptr->next;
-@@ -282,35 +176,23 @@ ptmalloc_unlock_all (void)
-   (void) mutex_unlock (&list_lock);
- }
- 
--# ifdef __linux__
--
--/* In NPTL, unlocking a mutex in the child process after a
--   fork() is currently unsafe, whereas re-initializing it is safe and
--   does not leak resources.  Therefore, a special atfork handler is
--   installed for the child. */
--
--static void
--ptmalloc_unlock_all2 (void)
-+void
-+internal_function
-+__malloc_fork_unlock_child (void)
- {
--  mstate ar_ptr;
--
-   if (__malloc_initialized < 1)
-     return;
- 
--  thread_arena = save_arena;
--  __malloc_hook = save_malloc_hook;
--  __free_hook = save_free_hook;
--
--  /* Push all arenas to the free list, except save_arena, which is
-+  /* Push all arenas to the free list, except thread_arena, which is
-      attached to the current thread.  */
-   mutex_init (&free_list_lock);
--  if (save_arena != NULL)
--    ((mstate) save_arena)->attached_threads = 1;
-+  if (thread_arena != NULL)
-+    thread_arena->attached_threads = 1;
-   free_list = NULL;
--  for (ar_ptr = &main_arena;; )
-+  for (mstate ar_ptr = &main_arena;; )
-     {
-       mutex_init (&ar_ptr->mutex);
--      if (ar_ptr != save_arena)
-+      if (ar_ptr != thread_arena)
-         {
- 	  /* This arena is no longer attached to any thread.  */
- 	  ar_ptr->attached_threads = 0;
-@@ -323,15 +205,8 @@ ptmalloc_unlock_all2 (void)
-     }
- 
-   mutex_init (&list_lock);
--  atfork_recursive_cntr = 0;
- }
- 
--# else
--
--#  define ptmalloc_unlock_all2 ptmalloc_unlock_all
--# endif
--#endif  /* !NO_THREADS */
--
- /* Initialization routine. */
- #include <string.h>
- extern char **_environ;
-@@ -400,7 +275,6 @@ ptmalloc_init (void)
- #endif
- 
-   thread_arena = &main_arena;
--  thread_atfork (ptmalloc_lock_all, ptmalloc_unlock_all, ptmalloc_unlock_all2);
-   const char *s = NULL;
-   if (__glibc_likely (_environ != NULL))
-     {
-@@ -475,14 +349,6 @@ ptmalloc_init (void)
-   __malloc_initialized = 1;
- }
- 
--/* There are platforms (e.g. Hurd) with a link-time hook mechanism. */
--#ifdef thread_atfork_static
--thread_atfork_static (ptmalloc_lock_all, ptmalloc_unlock_all,		      \
--                      ptmalloc_unlock_all2)
--#endif
--
--
--
- /* Managing heaps and arenas (for concurrent threads) */
- 
- #if MALLOC_DEBUG > 1
-@@ -831,7 +697,8 @@ _int_new_arena (size_t size)
-      limit is reached).  At this point, some arena has to be attached
-      to two threads.  We could acquire the arena lock before list_lock
-      to make it less likely that reused_arena picks this new arena,
--     but this could result in a deadlock with ptmalloc_lock_all.  */
-+     but this could result in a deadlock with
-+     __malloc_fork_lock_parent.  */
- 
-   (void) mutex_lock (&a->mutex);
- 
-diff --git a/malloc/malloc-internal.h b/malloc/malloc-internal.h
-new file mode 100644
-index 0000000..b830d3f
---- /dev/null
-+++ b/malloc/malloc-internal.h
-@@ -0,0 +1,32 @@
-+/* Internal declarations for malloc, for use within libc.
-+   Copyright (C) 2016 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public License as
-+   published by the Free Software Foundation; either version 2.1 of the
-+   License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; see the file COPYING.LIB.  If
-+   not, see <http://www.gnu.org/licenses/>.  */
-+
-+#ifndef _MALLOC_PRIVATE_H
-+#define _MALLOC_PRIVATE_H
-+
-+/* Called in the parent process before a fork.  */
-+void __malloc_fork_lock_parent (void) internal_function attribute_hidden;
-+
-+/* Called in the parent process after a fork.  */
-+void __malloc_fork_unlock_parent (void) internal_function attribute_hidden;
-+
-+/* Called in the child process after a fork.  */
-+void __malloc_fork_unlock_child (void) internal_function attribute_hidden;
-+
-+
-+#endif /* _MALLOC_PRIVATE_H */
-diff --git a/malloc/malloc.c b/malloc/malloc.c
-index d20d595..39e4298 100644
---- a/malloc/malloc.c
-+++ b/malloc/malloc.c
-@@ -244,6 +244,7 @@
- /* For ALIGN_UP et. al.  */
- #include <libc-internal.h>
- 
-+#include <malloc/malloc-internal.h>
- 
- /*
-   Debugging:
-@@ -1074,10 +1075,6 @@ static void*   realloc_check(void* oldmem, size_t bytes,
- 			       const void *caller);
- static void*   memalign_check(size_t alignment, size_t bytes,
- 				const void *caller);
--#ifndef NO_THREADS
--static void*   malloc_atfork(size_t sz, const void *caller);
--static void      free_atfork(void* mem, const void *caller);
--#endif
- 
- /* ------------------ MMAP support ------------------  */
- 
-diff --git a/malloc/tst-malloc-fork-deadlock.c b/malloc/tst-malloc-fork-deadlock.c
-new file mode 100644
-index 0000000..94549ca
---- /dev/null
-+++ b/malloc/tst-malloc-fork-deadlock.c
-@@ -0,0 +1,220 @@
-+/* Test concurrent fork, getline, and fflush (NULL).
-+   Copyright (C) 2016 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+
-+   The GNU C Library is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU Lesser General Public License as
-+   published by the Free Software Foundation; either version 2.1 of the
-+   License, or (at your option) any later version.
-+
-+   The GNU C Library is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+   Lesser General Public License for more details.
-+
-+   You should have received a copy of the GNU Lesser General Public
-+   License along with the GNU C Library; see the file COPYING.LIB.  If
-+   not, see <http://www.gnu.org/licenses/>.  */
-+
-+#include <sys/wait.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include <stdio.h>
-+#include <pthread.h>
-+#include <stdbool.h>
-+#include <stdlib.h>
-+#include <malloc.h>
-+#include <time.h>
-+#include <string.h>
-+#include <signal.h>
-+
-+static int do_test (void);
-+#define TEST_FUNCTION do_test ()
-+#include "../test-skeleton.c"
-+
-+enum {
-+  /* Number of threads which call fork.  */
-+  fork_thread_count = 4,
-+  /* Number of threads which call getline (and, indirectly,
-+     malloc).  */
-+  read_thread_count = 8,
-+};
-+
-+static bool termination_requested;
-+
-+static void *
-+fork_thread_function (void *closure)
-+{
-+  while (!__atomic_load_n (&termination_requested, __ATOMIC_RELAXED))
-+    {
-+      pid_t pid = fork ();
-+      if (pid < 0)
-+        {
-+          printf ("error: fork: %m\n");
-+          abort ();
-+        }
-+      else if (pid == 0)
-+        _exit (17);
-+
-+      int status;
-+      if (waitpid (pid, &status, 0) < 0)
-+        {
-+          printf ("error: waitpid: %m\n");
-+          abort ();
-+        }
-+      if (!WIFEXITED (status) || WEXITSTATUS (status) != 17)
-+        {
-+          printf ("error: waitpid returned invalid status: %d\n", status);
-+          abort ();
-+        }
-+    }
-+  return NULL;
-+}
-+
-+static char *file_to_read;
-+
-+static void *
-+read_thread_function (void *closure)
-+{
-+  FILE *f = fopen (file_to_read, "r");
-+  if (f == NULL)
-+    {
-+      printf ("error: fopen (%s): %m\n", file_to_read);
-+      abort ();
-+    }
-+
-+  while (!__atomic_load_n (&termination_requested, __ATOMIC_RELAXED))
-+    {
-+      rewind (f);
-+      char *line = NULL;
-+      size_t line_allocated = 0;
-+      ssize_t ret = getline (&line, &line_allocated, f);
-+      if (ret < 0)
-+        {
-+          printf ("error: getline: %m\n");
-+          abort ();
-+        }
-+      free (line);
-+    }
-+  fclose (f);
-+
-+  return NULL;
-+}
-+
-+static void *
-+flushall_thread_function (void *closure)
-+{
-+  while (!__atomic_load_n (&termination_requested, __ATOMIC_RELAXED))
-+    if (fflush (NULL) != 0)
-+      {
-+        printf ("error: fflush (NULL): %m\n");
-+        abort ();
-+      }
-+  return NULL;
-+}
-+
-+static void
-+create_threads (pthread_t *threads, size_t count, void *(*func) (void *))
-+{
-+  for (size_t i = 0; i < count; ++i)
-+    {
-+      int ret = pthread_create (threads + i, NULL, func, NULL);
-+      if (ret != 0)
-+        {
-+          errno = ret;
-+          printf ("error: pthread_create: %m\n");
-+          abort ();
-+        }
-+    }
-+}
-+
-+static void
-+join_threads (pthread_t *threads, size_t count)
-+{
-+  for (size_t i = 0; i < count; ++i)
-+    {
-+      int ret = pthread_join (threads[i], NULL);
-+      if (ret != 0)
-+        {
-+          errno = ret;
-+          printf ("error: pthread_join: %m\n");
-+          abort ();
-+        }
-+    }
-+}
-+
-+/* Create a file which consists of a single long line, and assigns
-+   file_to_read.  The hope is that this triggers an allocation in
-+   getline which needs a lock.  */
-+static void
-+create_file_with_large_line (void)
-+{
-+  int fd = create_temp_file ("bug19431-large-line", &file_to_read);
-+  if (fd < 0)
-+    {
-+      printf ("error: create_temp_file: %m\n");
-+      abort ();
-+    }
-+  FILE *f = fdopen (fd, "w+");
-+  if (f == NULL)
-+    {
-+      printf ("error: fdopen: %m\n");
-+      abort ();
-+    }
-+  for (int i = 0; i < 50000; ++i)
-+    fputc ('x', f);
-+  fputc ('\n', f);
-+  if (ferror (f))
-+    {
-+      printf ("error: fputc: %m\n");
-+      abort ();
-+    }
-+  if (fclose (f) != 0)
-+    {
-+      printf ("error: fclose: %m\n");
-+      abort ();
-+    }
-+}
-+
-+static int
-+do_test (void)
-+{
-+  /* Make sure that we do not exceed the arena limit with the number
-+     of threads we configured.  */
-+  if (mallopt (M_ARENA_MAX, 400) == 0)
-+    {
-+      printf ("error: mallopt (M_ARENA_MAX) failed\n");
-+      return 1;
-+    }
-+
-+  /* Leave some room for shutting down all threads gracefully.  */
-+  int timeout = 3;
-+  if (timeout > TIMEOUT)
-+    timeout = TIMEOUT - 1;
-+
-+  create_file_with_large_line ();
-+
-+  pthread_t fork_threads[fork_thread_count];
-+  create_threads (fork_threads, fork_thread_count, fork_thread_function);
-+  pthread_t read_threads[read_thread_count];
-+  create_threads (read_threads, read_thread_count, read_thread_function);
-+  pthread_t flushall_threads[1];
-+  create_threads (flushall_threads, 1, flushall_thread_function);
-+
-+  struct timespec ts = {timeout, 0};
-+  if (nanosleep (&ts, NULL))
-+    {
-+      printf ("error: error: nanosleep: %m\n");
-+      abort ();
-+    }
-+
-+  __atomic_store_n (&termination_requested, true, __ATOMIC_RELAXED);
-+
-+  join_threads (flushall_threads, 1);
-+  join_threads (read_threads, read_thread_count);
-+  join_threads (fork_threads, fork_thread_count);
-+
-+  free (file_to_read);
-+
-+  return 0;
-+}
-diff --git a/manual/examples/mkdirent.c b/manual/examples/mkdirent.c
-new file mode 100644
-index 0000000..f8400f4
---- /dev/null
-+++ b/manual/examples/mkdirent.c
-@@ -0,0 +1,42 @@
-+/* Example for creating a struct dirent object for use with glob.
-+   Copyright (C) 2016 Free Software Foundation, Inc.
-+
-+   This program is free software; you can redistribute it and/or
-+   modify it under the terms of the GNU General Public License
-+   as published by the Free Software Foundation; either version 2
-+   of the License, or (at your option) any later version.
-+
-+   This program is distributed in the hope that it will be useful,
-+   but WITHOUT ANY WARRANTY; without even the implied warranty of
-+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+   GNU General Public License for more details.
-+
-+   You should have received a copy of the GNU General Public License
-+   along with this program; if not, if not, see <http://www.gnu.org/licenses/>.
-+*/
-+
-+#include <dirent.h>
-+#include <errno.h>
-+#include <stddef.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+struct dirent *
-+mkdirent (const char *name)
-+{
-+  size_t dirent_size = offsetof (struct dirent, d_name) + 1;
-+  size_t name_length = strlen (name);
-+  size_t total_size = dirent_size + name_length;
-+  if (total_size < dirent_size)
-+    {
-+      errno = ENOMEM;
-+      return NULL;
-+    }
-+  struct dirent *result = malloc (total_size);
-+  if (result == NULL)
-+    return NULL;
-+  result->d_type = DT_UNKNOWN;
-+  result->d_ino = 1;            /* Do not skip this entry.  */
-+  memcpy (result->d_name, name, name_length + 1);
-+  return result;
-+}
-diff --git a/manual/memory.texi b/manual/memory.texi
-index 700555e..cdeb472 100644
---- a/manual/memory.texi
-+++ b/manual/memory.texi
-@@ -1051,14 +1051,6 @@ systems that do not support @w{ISO C11}.
- @c     _dl_addr_inside_object ok
- @c    determine_info ok
- @c    __rtld_lock_unlock_recursive (dl_load_lock) @aculock
-- at c   thread_atfork @asulock @aculock @acsfd @acsmem
-- at c    __register_atfork @asulock @aculock @acsfd @acsmem
-- at c     lll_lock (__fork_lock) @asulock @aculock
-- at c     fork_handler_alloc @asulock @aculock @acsfd @acsmem
-- at c      calloc dup @asulock @aculock @acsfd @acsmem
-- at c     __linkin_atfork ok
-- at c      catomic_compare_and_exchange_bool_acq ok
-- at c     lll_unlock (__fork_lock) @aculock
- @c   *_environ @mtsenv
- @c   next_env_entry ok
- @c   strcspn dup ok
-diff --git a/manual/pattern.texi b/manual/pattern.texi
-index d1b9275..565e7eb 100644
---- a/manual/pattern.texi
-+++ b/manual/pattern.texi
-@@ -237,7 +237,44 @@ function used to read the contents of a directory.  It is used if the
- @code{GLOB_ALTDIRFUNC} bit is set in the flag parameter.  The type of
- this field is @w{@code{struct dirent *(*) (void *)}}.
- 
--This is a GNU extension.
-+An implementation of @code{gl_readdir} needs to initialize the following
-+members of the @code{struct dirent} object:
-+
-+ at table @code
-+ at item d_type
-+This member should be set to the file type of the entry if it is known.
-+Otherwise, the value @code{DT_UNKNOWN} can be used.  The @code{glob}
-+function may use the specified file type to avoid callbacks in cases
-+where the file type indicates that the data is not required.
-+
-+ at item d_ino
-+This member needs to be non-zero, otherwise @code{glob} may skip the
-+current entry and call the @code{gl_readdir} callback function again to
-+retrieve another entry.
-+
-+ at item d_name
-+This member must be set to the name of the entry.  It must be
-+null-terminated.
-+ at end table
-+
-+The example below shows how to allocate a @code{struct dirent} object
-+containing a given name.
-+
-+ at smallexample
-+ at include mkdirent.c.texi
-+ at end smallexample
-+
-+The @code{glob} function reads the @code{struct dirent} members listed
-+above and makes a copy of the file name in the @code{d_name} member
-+immediately after the @code{gl_readdir} callback function returns.
-+Future invocations of any of the callback functions may dealloacte or
-+reuse the buffer.  It is the responsibility of the caller of the
-+ at code{glob} function to allocate and deallocate the buffer, around the
-+call to @code{glob} or using the callback functions.  For example, an
-+application could allocate the buffer in the @code{gl_readdir} callback
-+function, and deallocate it in the @code{gl_closedir} callback function.
-+
-+The @code{gl_readdir} member is a GNU extension.
- 
- @item gl_opendir
- The address of an alternative implementation of the @code{opendir}
-diff --git a/math/Makefile b/math/Makefile
-index 7d573a0..6aa87f9 100644
---- a/math/Makefile
-+++ b/math/Makefile
-@@ -100,7 +100,8 @@ $(inst_libdir)/libm.so: $(common-objpfx)format.lds \
- 	 cat $<; \
- 	 echo 'GROUP ( $(slibdir)/libm.so$(libm.so-version) ' \
- 	      'AS_NEEDED ( $(libdir)/libmvec_nonshared.a $(slibdir)/libmvec.so$(libmvec.so-version) ) )' \
--	) > $@
-+	) > $@.new
-+	mv -f $@.new $@
- endif
- 
- # Rules for the test suite.
-diff --git a/math/test-math-isinff.cc b/math/test-math-isinff.cc
-index 195d753..ecff1dc 100644
---- a/math/test-math-isinff.cc
-+++ b/math/test-math-isinff.cc
-@@ -30,12 +30,17 @@ do_test (void)
-      header fix this test will not compile.  */
-   if (isinff (1.0f)
-       || !isinff (INFINITY)
-+#ifndef NO_LONG_DOUBLE
-       || isinfl (1.0L)
-       || !isinfl (INFINITY)
-+#endif
-       || isnanf (2.0f)
-       || !isnanf (NAN)
-+#ifndef NO_LONG_DOUBLE
-       || isnanl (2.0L)
--      || !isnanl (NAN))
-+      || !isnanl (NAN)
-+#endif
-+      )
-     {
-       printf ("FAIL: Failed to call is* functions.\n");
-       exit (1);
-diff --git a/nis/nis_call.c b/nis/nis_call.c
-index 3fa37e4..cb7839a 100644
---- a/nis/nis_call.c
-+++ b/nis/nis_call.c
-@@ -680,16 +680,18 @@ nis_server_cache_add (const_nis_name name, int search_parent,
-   /* Choose which entry should be evicted from the cache.  */
-   loc = &nis_server_cache[0];
-   if (*loc != NULL)
--    for (i = 1; i < 16; ++i)
--      if (nis_server_cache[i] == NULL)
--	{
-+    {
-+      for (i = 1; i < 16; ++i)
-+	if (nis_server_cache[i] == NULL)
-+	  {
-+	    loc = &nis_server_cache[i];
-+	    break;
-+	  }
-+	else if ((*loc)->uses > nis_server_cache[i]->uses
-+		 || ((*loc)->uses == nis_server_cache[i]->uses
-+		     && (*loc)->expires > nis_server_cache[i]->expires))
- 	  loc = &nis_server_cache[i];
--	  break;
--	}
--      else if ((*loc)->uses > nis_server_cache[i]->uses
--	       || ((*loc)->uses == nis_server_cache[i]->uses
--		   && (*loc)->expires > nis_server_cache[i]->expires))
--	loc = &nis_server_cache[i];
-+    }
-   old = *loc;
-   *loc = new;
- 
-diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
-index 03c18d7..125a5e9 100644
---- a/nss/nss_db/db-XXX.c
-+++ b/nss/nss_db/db-XXX.c
-@@ -288,8 +288,8 @@ CONCAT(_nss_db_get,ENTNAME_r) (struct STRUCTURE *result, char *buffer,
- 	    }
- 	  if (err < 0)
- 	    {
--	      H_ERRNO_SET (HOST_NOT_FOUND);
--	      status = NSS_STATUS_NOTFOUND;
-+	      H_ERRNO_SET (NETDB_INTERNAL);
-+	      status = NSS_STATUS_TRYAGAIN;
- 	      break;
- 	    }
- 
-diff --git a/po/be.po b/po/be.po
-index 66d1235..ffb39b4 100644
---- a/po/be.po
-+++ b/po/be.po
-@@ -6,7 +6,7 @@
- msgid ""
- msgstr ""
- "Project-Id-Version: libc 2.19.90\n"
--"POT-Creation-Date: 2015-01-20 22:14-0500\n"
-+"POT-Creation-Date: 2015-07-31 00:10-0400\n"
- "PO-Revision-Date: 2014-12-24 15:35+0300\n"
- "Last-Translator: Viktar Siarheichyk <vics at eq.by>\n"
- "Language-Team: Belarusian <i18n at mova.org>\n"
-@@ -139,10 +139,10 @@ msgid ""
- msgstr ""
- 
- #: catgets/gencat.c:229 debug/pcprofiledump.c:209 elf/ldconfig.c:307
--#: elf/pldd.c:244 elf/sln.c:85 elf/sprof.c:372 iconv/iconv_prog.c:408
-+#: elf/pldd.c:252 elf/sln.c:85 elf/sprof.c:372 iconv/iconv_prog.c:408
- #: iconv/iconvconfig.c:379 locale/programs/locale.c:277
- #: locale/programs/localedef.c:376 login/programs/pt_chown.c:88
--#: malloc/memusagestat.c:563 nss/getent.c:969 nss/makedb.c:369
-+#: malloc/memusagestat.c:563 nss/getent.c:973 nss/makedb.c:369
- #: posix/getconf.c:486 sunrpc/rpcinfo.c:691
- #: sysdeps/unix/sysv/linux/lddlibc4.c:61
- #, c-format
-@@ -152,7 +152,7 @@ msgid ""
- msgstr ""
- 
- #: catgets/gencat.c:245 debug/pcprofiledump.c:225 debug/xtrace.sh:64
--#: elf/ldconfig.c:323 elf/ldd.bash.in:38 elf/pldd.c:260 elf/sotruss.sh:75
-+#: elf/ldconfig.c:323 elf/ldd.bash.in:38 elf/pldd.c:268 elf/sotruss.sh:75
- #: elf/sprof.c:389 iconv/iconv_prog.c:425 iconv/iconvconfig.c:396
- #: locale/programs/locale.c:294 locale/programs/localedef.c:402
- #: login/programs/pt_chown.c:62 malloc/memusage.sh:71
-@@ -166,7 +166,7 @@ msgid ""
- msgstr ""
- 
- #: catgets/gencat.c:250 debug/pcprofiledump.c:230 debug/xtrace.sh:68
--#: elf/ldconfig.c:328 elf/pldd.c:265 elf/sprof.c:395 iconv/iconv_prog.c:430
-+#: elf/ldconfig.c:328 elf/pldd.c:273 elf/sprof.c:395 iconv/iconv_prog.c:430
- #: iconv/iconvconfig.c:401 locale/programs/locale.c:299
- #: locale/programs/localedef.c:407 malloc/memusage.sh:75
- #: malloc/memusagestat.c:586 nscd/nscd.c:514 nss/getent.c:91 nss/makedb.c:390
-@@ -422,12 +422,12 @@ msgstr ""
- msgid "Renaming of %s to %s failed"
- msgstr ""
- 
--#: elf/dl-close.c:385 elf/dl-open.c:470
-+#: elf/dl-close.c:396 elf/dl-open.c:478
- #, fuzzy
- msgid "cannot create scope list"
- msgstr "немагчыма стварыць кэш для шляху пошуку"
- 
--#: elf/dl-close.c:770
-+#: elf/dl-close.c:816
- msgid "shared object not open"
- msgstr ""
- 
-@@ -501,131 +501,131 @@ msgstr ""
- msgid "cannot stat shared object"
- msgstr ""
- 
--#: elf/dl-load.c:963
-+#: elf/dl-load.c:962
- msgid "cannot open zero fill device"
- msgstr ""
- 
--#: elf/dl-load.c:1010 elf/dl-load.c:2165
-+#: elf/dl-load.c:1009 elf/dl-load.c:2159
- msgid "cannot create shared object descriptor"
- msgstr ""
- 
--#: elf/dl-load.c:1029 elf/dl-load.c:1570 elf/dl-load.c:1682
-+#: elf/dl-load.c:1028 elf/dl-load.c:1568 elf/dl-load.c:1680
- msgid "cannot read file data"
- msgstr ""
- 
--#: elf/dl-load.c:1069
-+#: elf/dl-load.c:1068
- msgid "ELF load command alignment not page-aligned"
- msgstr ""
- 
--#: elf/dl-load.c:1076
-+#: elf/dl-load.c:1075
- msgid "ELF load command address/offset not properly aligned"
- msgstr ""
- 
--#: elf/dl-load.c:1160
-+#: elf/dl-load.c:1159
- msgid "cannot allocate TLS data structures for initial thread"
- msgstr ""
- 
--#: elf/dl-load.c:1183
-+#: elf/dl-load.c:1182
- msgid "cannot handle TLS data"
- msgstr ""
- 
--#: elf/dl-load.c:1202
-+#: elf/dl-load.c:1201
- msgid "object file has no loadable segments"
- msgstr ""
- 
--#: elf/dl-load.c:1211 elf/dl-load.c:1662
-+#: elf/dl-load.c:1210 elf/dl-load.c:1660
- msgid "cannot dynamically load executable"
- msgstr ""
- 
--#: elf/dl-load.c:1232
-+#: elf/dl-load.c:1231
- msgid "object file has no dynamic section"
- msgstr ""
- 
--#: elf/dl-load.c:1255
-+#: elf/dl-load.c:1254
- msgid "shared object cannot be dlopen()ed"
- msgstr ""
- 
--#: elf/dl-load.c:1268
-+#: elf/dl-load.c:1267
- msgid "cannot allocate memory for program header"
- msgstr "немагчыма разьмеркаваць памяць для загалоўку праграмы"
- 
--#: elf/dl-load.c:1284 elf/dl-open.c:195
-+#: elf/dl-load.c:1283 elf/dl-open.c:195
- #, fuzzy
- #| msgid "invalid saved time"
- msgid "invalid caller"
- msgstr "нерэчаісны захаваны час"
- 
--#: elf/dl-load.c:1307 elf/dl-load.h:130
-+#: elf/dl-load.c:1306 elf/dl-load.h:130
- msgid "cannot change memory protections"
- msgstr ""
- 
--#: elf/dl-load.c:1327
-+#: elf/dl-load.c:1326
- msgid "cannot enable executable stack as shared object requires"
- msgstr ""
- 
--#: elf/dl-load.c:1340
-+#: elf/dl-load.c:1339
- #, fuzzy
- #| msgid "cannot create internal descriptor"
- msgid "cannot close file descriptor"
- msgstr "немагчыма стварыць унутраны дэскрыптар"
- 
--#: elf/dl-load.c:1570
-+#: elf/dl-load.c:1568
- msgid "file too short"
- msgstr ""
- 
--#: elf/dl-load.c:1605
-+#: elf/dl-load.c:1603
- msgid "invalid ELF header"
- msgstr ""
- 
--#: elf/dl-load.c:1617
-+#: elf/dl-load.c:1615
- msgid "ELF file data encoding not big-endian"
- msgstr ""
- 
--#: elf/dl-load.c:1619
-+#: elf/dl-load.c:1617
- msgid "ELF file data encoding not little-endian"
- msgstr ""
- 
--#: elf/dl-load.c:1623
-+#: elf/dl-load.c:1621
- msgid "ELF file version ident does not match current one"
- msgstr ""
- 
--#: elf/dl-load.c:1627
-+#: elf/dl-load.c:1625
- msgid "ELF file OS ABI invalid"
- msgstr ""
- 
--#: elf/dl-load.c:1630
-+#: elf/dl-load.c:1628
- msgid "ELF file ABI version invalid"
- msgstr "нерэчаісная ABI вэрсыя ELF файла"
- 
--#: elf/dl-load.c:1633
-+#: elf/dl-load.c:1631
- msgid "nonzero padding in e_ident"
- msgstr ""
- 
--#: elf/dl-load.c:1636
-+#: elf/dl-load.c:1634
- msgid "internal error"
- msgstr ""
- 
--#: elf/dl-load.c:1643
-+#: elf/dl-load.c:1641
- msgid "ELF file version does not match current one"
- msgstr ""
- 
--#: elf/dl-load.c:1651
-+#: elf/dl-load.c:1649
- msgid "only ET_DYN and ET_EXEC can be loaded"
- msgstr ""
- 
--#: elf/dl-load.c:1667
-+#: elf/dl-load.c:1665
- msgid "ELF file's phentsize not the expected size"
- msgstr ""
- 
--#: elf/dl-load.c:2184
-+#: elf/dl-load.c:2178
- msgid "wrong ELF class: ELFCLASS64"
- msgstr ""
- 
--#: elf/dl-load.c:2185
-+#: elf/dl-load.c:2179
- msgid "wrong ELF class: ELFCLASS32"
- msgstr ""
- 
--#: elf/dl-load.c:2188
-+#: elf/dl-load.c:2182
- msgid "cannot open shared object file"
- msgstr ""
- 
-@@ -637,11 +637,11 @@ msgstr ""
- msgid "cannot map zero-fill pages"
- msgstr ""
- 
--#: elf/dl-lookup.c:791
-+#: elf/dl-lookup.c:845
- msgid "relocation error"
- msgstr ""
- 
--#: elf/dl-lookup.c:818
-+#: elf/dl-lookup.c:872
- msgid "symbol lookup error"
- msgstr ""
- 
-@@ -649,51 +649,42 @@ msgstr ""
- msgid "cannot extend global scope"
- msgstr ""
- 
--#: elf/dl-open.c:520
-+#: elf/dl-open.c:528
- msgid "TLS generation counter wrapped!  Please report this."
- msgstr ""
- 
--#: elf/dl-open.c:542
--msgid "cannot load any more object with static TLS"
--msgstr ""
--
--#: elf/dl-open.c:599
-+#: elf/dl-open.c:592
- msgid "invalid mode for dlopen()"
- msgstr ""
- 
--#: elf/dl-open.c:616
-+#: elf/dl-open.c:609
- msgid "no more namespaces available for dlmopen()"
- msgstr ""
- 
--#: elf/dl-open.c:634
-+#: elf/dl-open.c:633
- msgid "invalid target namespace in dlmopen()"
- msgstr ""
- 
--#: elf/dl-reloc.c:120
-+#: elf/dl-reloc.c:121
- #, fuzzy
- #| msgid "Cannot allocate memory"
- msgid "cannot allocate memory in static TLS block"
- msgstr "немагчыма разьмеркаваць памяць"
- 
--#: elf/dl-reloc.c:212
-+#: elf/dl-reloc.c:206
- msgid "cannot make segment writable for relocation"
- msgstr ""
- 
--#: elf/dl-reloc.c:275
--#, c-format
--msgid "%s: no PLTREL found in object %s\n"
--msgstr ""
--
--#: elf/dl-reloc.c:290
-+#: elf/dl-reloc.c:276
- #, c-format
- msgid "%s: out of memory to store relocation results for %s\n"
- msgstr ""
- 
--#: elf/dl-reloc.c:306
-+#: elf/dl-reloc.c:292
- msgid "cannot restore segment prot after reloc"
- msgstr ""
- 
--#: elf/dl-reloc.c:335
-+#: elf/dl-reloc.c:323
- msgid "cannot apply additional memory protection after relocation"
- msgstr ""
- 
-@@ -701,7 +692,7 @@ msgstr ""
- msgid "RTLD_NEXT used in code not dynamically loaded"
- msgstr ""
- 
--#: elf/dl-tls.c:933
-+#: elf/dl-tls.c:934
- #, fuzzy
- msgid "cannot create TLS data structures"
- msgstr "немагчыма стварыць унутраныя дэскрыптары"
-@@ -846,7 +837,7 @@ msgstr ""
- msgid "Can't open directory %s"
- msgstr "Немагчыма адчыніць тэчку %s"
- 
--#: elf/ldconfig.c:793 elf/ldconfig.c:855 elf/readlib.c:90
-+#: elf/ldconfig.c:793 elf/ldconfig.c:855 elf/readlib.c:97
- #, c-format
- msgid "Input file %s not found.\n"
- msgstr "Файл уводу %s неадшуканы.\n"
-@@ -975,7 +966,7 @@ msgstr ""
- msgid "No such file or directory"
- msgstr "файл ці тэчка ня йснуе"
- 
--#: elf/ldd.bash.in:150 inet/rcmd.c:488
-+#: elf/ldd.bash.in:150 inet/rcmd.c:492
- msgid "not regular file"
- msgstr ""
- 
-@@ -1024,70 +1015,76 @@ msgstr "немагчыма прачытаць загаловак"
- msgid "cannot read program interpreter"
- msgstr "немагчыма прачытаць загаловак"
- 
--#: elf/pldd-xx.c:196
-+#: elf/pldd-xx.c:197
- #, fuzzy, c-format
- #| msgid "cannot read header"
- msgid "cannot read link map"
- msgstr "немагчыма прачытаць загаловак"
- 
--#: elf/pldd-xx.c:207
-+#: elf/pldd-xx.c:209
- #, fuzzy, c-format
- #| msgid "cannot read header"
- msgid "cannot read object name"
- msgstr "немагчыма прачытаць загаловак"
- 
--#: elf/pldd.c:63
-+#: elf/pldd-xx.c:219
-+#, fuzzy, c-format
-+#| msgid "cannot allocate memory for program header"
-+msgid "cannot allocate buffer for object name"
-+msgstr "немагчыма разьмеркаваць памяць для загалоўку праграмы"
-+
-+#: elf/pldd.c:64
- msgid "List dynamic shared objects loaded into process."
- msgstr ""
- 
--#: elf/pldd.c:67
-+#: elf/pldd.c:68
- msgid "PID"
- msgstr ""
- 
--#: elf/pldd.c:99
-+#: elf/pldd.c:100
- #, c-format
- msgid "Exactly one parameter with process ID required.\n"
- msgstr ""
- 
--#: elf/pldd.c:111
-+#: elf/pldd.c:112
- #, c-format
- msgid "invalid process ID '%s'"
- msgstr ""
- 
--#: elf/pldd.c:119
-+#: elf/pldd.c:120
- #, fuzzy, c-format
- #| msgid "cannot open `%s'"
- msgid "cannot open %s"
- msgstr "немагчыма адчыніць \"%s\""
- 
--#: elf/pldd.c:144
-+#: elf/pldd.c:152
- #, fuzzy, c-format
- #| msgid "cannot open `%s'"
- msgid "cannot open %s/task"
- msgstr "немагчыма адчыніць \"%s\""
- 
--#: elf/pldd.c:147
-+#: elf/pldd.c:155
- #, c-format
- msgid "cannot prepare reading %s/task"
- msgstr ""
- 
--#: elf/pldd.c:160
-+#: elf/pldd.c:168
- #, c-format
- msgid "invalid thread ID '%s'"
- msgstr ""
- 
--#: elf/pldd.c:171
-+#: elf/pldd.c:179
- #, fuzzy, c-format
- #| msgid "cannot find C preprocessor: %s \n"
- msgid "cannot attach to process %lu"
- msgstr "немагчыма адшукаць C прэпрацэсар: %s \n"
- 
--#: elf/pldd.c:286
-+#: elf/pldd.c:294
- #, c-format
- msgid "cannot get information about process %lu"
- msgstr ""
- 
--#: elf/pldd.c:299
-+#: elf/pldd.c:307
- #, c-format
- msgid "process %lu is no ELF program"
- msgstr ""
-@@ -1122,27 +1119,27 @@ msgstr ""
- msgid "more than one dynamic segment\n"
- msgstr ""
- 
--#: elf/readlib.c:96
-+#: elf/readlib.c:103
- #, c-format
- msgid "Cannot fstat file %s.\n"
- msgstr ""
- 
--#: elf/readlib.c:107
-+#: elf/readlib.c:114
- #, c-format
- msgid "File %s is empty, not checked."
- msgstr ""
- 
--#: elf/readlib.c:113
-+#: elf/readlib.c:120
- #, c-format
- msgid "File %s is too small, not checked."
- msgstr ""
- 
--#: elf/readlib.c:123
-+#: elf/readlib.c:130
- #, c-format
- msgid "Cannot mmap file %s.\n"
- msgstr ""
- 
--#: elf/readlib.c:161
-+#: elf/readlib.c:169
- #, c-format
- msgid "%s is not an ELF file - it has the wrong magic bytes at the start.\n"
- msgstr "%s - гэта не ELF файл - ён мае памылковы \"чароўны байт\" на пачатку файлу.\n"
-@@ -1263,10 +1260,10 @@ msgstr ""
- msgid "failed to load shared object `%s'"
- msgstr ""
- 
--#: elf/sprof.c:442
-+#: elf/sprof.c:442 elf/sprof.c:825 elf/sprof.c:923
- #, c-format
--msgid "cannot create internal descriptors"
--msgstr "немагчыма стварыць унутраныя дэскрыптары"
-+msgid "cannot create internal descriptor"
-+msgstr "немагчыма стварыць унутраны дэскрыптар"
- 
- #: elf/sprof.c:554
- #, c-format
-@@ -1334,11 +1331,6 @@ msgstr ""
- msgid "error while closing the profiling data file"
- msgstr ""
- 
--#: elf/sprof.c:825 elf/sprof.c:923
--#, c-format
--msgid "cannot create internal descriptor"
--msgstr "немагчыма стварыць унутраны дэскрыптар"
--
- #: elf/sprof.c:899
- #, c-format
- msgid "`%s' is no correct profile data file for `%s'"
-@@ -1583,27 +1575,27 @@ msgstr ""
- msgid "rcmd: %s: short read"
- msgstr ""
- 
--#: inet/rcmd.c:486
-+#: inet/rcmd.c:490
- msgid "lstat failed"
- msgstr ""
- 
--#: inet/rcmd.c:493
-+#: inet/rcmd.c:497
- msgid "cannot open"
- msgstr "немагчыма адчыніць"
- 
--#: inet/rcmd.c:495
-+#: inet/rcmd.c:499
- msgid "fstat failed"
- msgstr ""
- 
--#: inet/rcmd.c:497
-+#: inet/rcmd.c:501
- msgid "bad owner"
- msgstr "дрэнны ўладальнік"
- 
--#: inet/rcmd.c:499
-+#: inet/rcmd.c:503
- msgid "writeable by other than owner"
- msgstr ""
- 
--#: inet/rcmd.c:501
-+#: inet/rcmd.c:505
- msgid "hard linked somewhere"
- msgstr ""
- 
-@@ -1723,8 +1715,8 @@ msgid "no symbolic name given for end of range"
- msgstr ""
- 
- #: locale/programs/charmap.c:610 locale/programs/ld-address.c:528
--#: locale/programs/ld-collate.c:2626 locale/programs/ld-collate.c:3784
--#: locale/programs/ld-ctype.c:2162 locale/programs/ld-ctype.c:2913
-+#: locale/programs/ld-collate.c:2635 locale/programs/ld-collate.c:3793
-+#: locale/programs/ld-ctype.c:2128 locale/programs/ld-ctype.c:2840
- #: locale/programs/ld-identification.c:368
- #: locale/programs/ld-measurement.c:215 locale/programs/ld-messages.c:298
- #: locale/programs/ld-monetary.c:740 locale/programs/ld-name.c:264
-@@ -1750,8 +1742,8 @@ msgid "%s: error in state machine"
- msgstr ""
- 
- #: locale/programs/charmap.c:850 locale/programs/ld-address.c:544
--#: locale/programs/ld-collate.c:2623 locale/programs/ld-collate.c:3977
--#: locale/programs/ld-ctype.c:2159 locale/programs/ld-ctype.c:2930
-+#: locale/programs/ld-collate.c:2632 locale/programs/ld-collate.c:3986
-+#: locale/programs/ld-ctype.c:2125 locale/programs/ld-ctype.c:2857
- #: locale/programs/ld-identification.c:384
- #: locale/programs/ld-measurement.c:231 locale/programs/ld-messages.c:314
- #: locale/programs/ld-monetary.c:756 locale/programs/ld-name.c:280
-@@ -1772,7 +1764,7 @@ msgstr ""
- msgid "number of bytes for byte sequence of beginning and end of range not the same: %d vs %d"
- msgstr ""
- 
--#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2903
-+#: locale/programs/charmap.c:993 locale/programs/ld-collate.c:2912
- #: locale/programs/repertoire.c:419
- msgid "invalid names for character range"
- msgstr ""
-@@ -1794,8 +1786,8 @@ msgstr ""
- msgid "resulting bytes for range not representable."
- msgstr ""
- 
--#: locale/programs/ld-address.c:135 locale/programs/ld-collate.c:1565
--#: locale/programs/ld-ctype.c:465 locale/programs/ld-identification.c:133
-+#: locale/programs/ld-address.c:135 locale/programs/ld-collate.c:1566
-+#: locale/programs/ld-ctype.c:431 locale/programs/ld-identification.c:133
- #: locale/programs/ld-measurement.c:94 locale/programs/ld-messages.c:97
- #: locale/programs/ld-monetary.c:193 locale/programs/ld-name.c:94
- #: locale/programs/ld-numeric.c:98 locale/programs/ld-paper.c:91
-@@ -1860,7 +1852,7 @@ msgid "%s: numeric country code `%d' not valid"
- msgstr ""
- 
- #: locale/programs/ld-address.c:436 locale/programs/ld-address.c:473
--#: locale/programs/ld-address.c:511 locale/programs/ld-ctype.c:2537
-+#: locale/programs/ld-address.c:511 locale/programs/ld-ctype.c:2489
- #: locale/programs/ld-identification.c:280
- #: locale/programs/ld-measurement.c:198 locale/programs/ld-messages.c:267
- #: locale/programs/ld-monetary.c:495 locale/programs/ld-monetary.c:530
-@@ -1882,8 +1874,8 @@ msgstr "%s: поле `%s' абвешчана больш чым адзін раз
- msgid "%s: unknown character in field `%s'"
- msgstr ""
- 
--#: locale/programs/ld-address.c:525 locale/programs/ld-collate.c:3782
--#: locale/programs/ld-ctype.c:2910 locale/programs/ld-identification.c:365
-+#: locale/programs/ld-address.c:525 locale/programs/ld-collate.c:3791
-+#: locale/programs/ld-ctype.c:2837 locale/programs/ld-identification.c:365
- #: locale/programs/ld-measurement.c:212 locale/programs/ld-messages.c:296
- #: locale/programs/ld-monetary.c:738 locale/programs/ld-name.c:262
- #: locale/programs/ld-numeric.c:324 locale/programs/ld-paper.c:212
-@@ -1892,12 +1884,12 @@ msgstr ""
- msgid "%s: incomplete `END' line"
- msgstr ""
- 
--#: locale/programs/ld-address.c:535 locale/programs/ld-collate.c:551
--#: locale/programs/ld-collate.c:603 locale/programs/ld-collate.c:899
--#: locale/programs/ld-collate.c:912 locale/programs/ld-collate.c:2592
--#: locale/programs/ld-collate.c:2613 locale/programs/ld-collate.c:3967
--#: locale/programs/ld-ctype.c:1891 locale/programs/ld-ctype.c:2149
--#: locale/programs/ld-ctype.c:2735 locale/programs/ld-ctype.c:2921
-+#: locale/programs/ld-address.c:535 locale/programs/ld-collate.c:552
-+#: locale/programs/ld-collate.c:604 locale/programs/ld-collate.c:900
-+#: locale/programs/ld-collate.c:913 locale/programs/ld-collate.c:2601
-+#: locale/programs/ld-collate.c:2622 locale/programs/ld-collate.c:3976
-+#: locale/programs/ld-ctype.c:1857 locale/programs/ld-ctype.c:2115
-+#: locale/programs/ld-ctype.c:2687 locale/programs/ld-ctype.c:2848
- #: locale/programs/ld-identification.c:375
- #: locale/programs/ld-measurement.c:222 locale/programs/ld-messages.c:305
- #: locale/programs/ld-monetary.c:747 locale/programs/ld-name.c:271
-@@ -1907,479 +1899,479 @@ msgstr ""
- msgid "%s: syntax error"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:426
-+#: locale/programs/ld-collate.c:427
- #, c-format
- msgid "`%.*s' already defined in charmap"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:435
-+#: locale/programs/ld-collate.c:436
- #, c-format
- msgid "`%.*s' already defined in repertoire"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:442
-+#: locale/programs/ld-collate.c:443
- #, c-format
- msgid "`%.*s' already defined as collating symbol"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:449
-+#: locale/programs/ld-collate.c:450
- #, c-format
- msgid "`%.*s' already defined as collating element"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:480 locale/programs/ld-collate.c:506
-+#: locale/programs/ld-collate.c:481 locale/programs/ld-collate.c:507
- #, c-format
- msgid "%s: `forward' and `backward' are mutually excluding each other"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:490 locale/programs/ld-collate.c:516
--#: locale/programs/ld-collate.c:532
-+#: locale/programs/ld-collate.c:491 locale/programs/ld-collate.c:517
-+#: locale/programs/ld-collate.c:533
- #, c-format
- msgid "%s: `%s' mentioned more than once in definition of weight %d"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:588
-+#: locale/programs/ld-collate.c:589
- #, c-format
- msgid "%s: too many rules; first entry only had %d"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:624
-+#: locale/programs/ld-collate.c:625
- #, c-format
- msgid "%s: not enough sorting rules"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:789
-+#: locale/programs/ld-collate.c:790
- #, c-format
- msgid "%s: empty weight string not allowed"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:884
-+#: locale/programs/ld-collate.c:885
- #, c-format
- msgid "%s: weights must use the same ellipsis symbol as the name"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:940
-+#: locale/programs/ld-collate.c:941
- #, c-format
- msgid "%s: too many values"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1060 locale/programs/ld-collate.c:1235
-+#: locale/programs/ld-collate.c:1061 locale/programs/ld-collate.c:1236
- #, c-format
- msgid "order for `%.*s' already defined at %s:%Zu"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1110
-+#: locale/programs/ld-collate.c:1111
- #, c-format
- msgid "%s: the start and the end symbol of a range must stand for characters"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1137
-+#: locale/programs/ld-collate.c:1138
- #, c-format
- msgid "%s: byte sequences of first and last character must have the same length"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1179
-+#: locale/programs/ld-collate.c:1180
- #, c-format
- msgid "%s: byte sequence of first character of range is not lower than that of the last character"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1304
-+#: locale/programs/ld-collate.c:1305
- #, c-format
- msgid "%s: symbolic range ellipsis must not directly follow `order_start'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1308
-+#: locale/programs/ld-collate.c:1309
- #, c-format
- msgid "%s: symbolic range ellipsis must not be directly followed by `order_end'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1328 locale/programs/ld-ctype.c:1408
-+#: locale/programs/ld-collate.c:1329 locale/programs/ld-ctype.c:1374
- #, c-format
- msgid "`%s' and `%.*s' are not valid names for symbolic range"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1378 locale/programs/ld-collate.c:3718
-+#: locale/programs/ld-collate.c:1379 locale/programs/ld-collate.c:3727
- #, c-format
- msgid "%s: order for `%.*s' already defined at %s:%Zu"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1387
-+#: locale/programs/ld-collate.c:1388
- #, c-format
- msgid "%s: `%s' must be a character"
- msgstr "%s: `%s' павінен быць знакам"
- 
--#: locale/programs/ld-collate.c:1582
-+#: locale/programs/ld-collate.c:1583
- #, c-format
- msgid "%s: `position' must be used for a specific level in all sections or none"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1607
-+#: locale/programs/ld-collate.c:1608
- #, c-format
- msgid "symbol `%s' not defined"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1683 locale/programs/ld-collate.c:1789
-+#: locale/programs/ld-collate.c:1684 locale/programs/ld-collate.c:1790
- #, c-format
- msgid "symbol `%s' has the same encoding as"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1687 locale/programs/ld-collate.c:1793
-+#: locale/programs/ld-collate.c:1688 locale/programs/ld-collate.c:1794
- #, c-format
- msgid "symbol `%s'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1833
-+#: locale/programs/ld-collate.c:1834
- #, c-format
- msgid "no definition of `UNDEFINED'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:1862
-+#: locale/programs/ld-collate.c:1863
- #, c-format
- msgid "too many errors; giving up"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:2518 locale/programs/ld-collate.c:3906
-+#: locale/programs/ld-collate.c:2527 locale/programs/ld-collate.c:3915
- #, fuzzy, c-format
- #| msgid "conversion to `%s' is not supported"
- msgid "%s: nested conditionals not supported"
- msgstr "пераўтварэньне ў \"%s\" не падтрымліваецца"
- 
--#: locale/programs/ld-collate.c:2536
-+#: locale/programs/ld-collate.c:2545
- #, fuzzy, c-format
- #| msgid "%s: More than one -l option specified\n"
- msgid "%s: more than one 'else'"
- msgstr "%s: больш чым адзін выбар -l зададзены\n"
- 
--#: locale/programs/ld-collate.c:2711
-+#: locale/programs/ld-collate.c:2720
- #, c-format
- msgid "%s: duplicate definition of `%s'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:2747
-+#: locale/programs/ld-collate.c:2756
- #, c-format
- msgid "%s: duplicate declaration of section `%s'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:2883
-+#: locale/programs/ld-collate.c:2892
- #, c-format
- msgid "%s: unknown character in collating symbol name"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3012
-+#: locale/programs/ld-collate.c:3021
- #, c-format
- msgid "%s: unknown character in equivalent definition name"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3023
-+#: locale/programs/ld-collate.c:3032
- #, c-format
- msgid "%s: unknown character in equivalent definition value"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3033
-+#: locale/programs/ld-collate.c:3042
- #, c-format
- msgid "%s: unknown symbol `%s' in equivalent definition"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3042
-+#: locale/programs/ld-collate.c:3051
- msgid "error while adding equivalent collating symbol"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3080
-+#: locale/programs/ld-collate.c:3089
- #, c-format
- msgid "duplicate definition of script `%s'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3128
-+#: locale/programs/ld-collate.c:3137
- #, fuzzy, c-format
- #| msgid "unknown set `%s'"
- msgid "%s: unknown section name `%.*s'"
- msgstr "невядомае мноства `%s'"
- 
--#: locale/programs/ld-collate.c:3157
-+#: locale/programs/ld-collate.c:3166
- #, c-format
- msgid "%s: multiple order definitions for section `%s'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3185
-+#: locale/programs/ld-collate.c:3194
- #, c-format
- msgid "%s: invalid number of sorting rules"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3212
-+#: locale/programs/ld-collate.c:3221
- #, c-format
- msgid "%s: multiple order definitions for unnamed section"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3267 locale/programs/ld-collate.c:3397
--#: locale/programs/ld-collate.c:3760
-+#: locale/programs/ld-collate.c:3276 locale/programs/ld-collate.c:3406
-+#: locale/programs/ld-collate.c:3769
- #, c-format
- msgid "%s: missing `order_end' keyword"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3330
-+#: locale/programs/ld-collate.c:3339
- #, c-format
- msgid "%s: order for collating symbol %.*s not yet defined"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3348
-+#: locale/programs/ld-collate.c:3357
- #, c-format
- msgid "%s: order for collating element %.*s not yet defined"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3359
-+#: locale/programs/ld-collate.c:3368
- #, c-format
- msgid "%s: cannot reorder after %.*s: symbol not known"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3411 locale/programs/ld-collate.c:3772
-+#: locale/programs/ld-collate.c:3420 locale/programs/ld-collate.c:3781
- #, c-format
- msgid "%s: missing `reorder-end' keyword"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3445 locale/programs/ld-collate.c:3643
-+#: locale/programs/ld-collate.c:3454 locale/programs/ld-collate.c:3652
- #, c-format
- msgid "%s: section `%.*s' not known"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3510
-+#: locale/programs/ld-collate.c:3519
- #, c-format
- msgid "%s: bad symbol <%.*s>"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3706
-+#: locale/programs/ld-collate.c:3715
- #, c-format
- msgid "%s: cannot have `%s' as end of ellipsis range"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3756
-+#: locale/programs/ld-collate.c:3765
- #, c-format
- msgid "%s: empty category description not allowed"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3775
-+#: locale/programs/ld-collate.c:3784
- #, c-format
- msgid "%s: missing `reorder-sections-end' keyword"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3939
-+#: locale/programs/ld-collate.c:3948
- #, c-format
- msgid "%s: '%s' without matching 'ifdef' or 'ifndef'"
- msgstr ""
- 
--#: locale/programs/ld-collate.c:3957
-+#: locale/programs/ld-collate.c:3966
- #, c-format
- msgid "%s: 'endif' without matching 'ifdef' or 'ifndef'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:484
-+#: locale/programs/ld-ctype.c:450
- #, c-format
- msgid "No character set name specified in charmap"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:513
-+#: locale/programs/ld-ctype.c:479
- #, c-format
- msgid "character L'\\u%0*x' in class `%s' must be in class `%s'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:528
-+#: locale/programs/ld-ctype.c:494
- #, c-format
- msgid "character L'\\u%0*x' in class `%s' must not be in class `%s'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:542 locale/programs/ld-ctype.c:600
-+#: locale/programs/ld-ctype.c:508 locale/programs/ld-ctype.c:566
- #, c-format
- msgid "internal error in %s, line %u"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:571
-+#: locale/programs/ld-ctype.c:537
- #, c-format
- msgid "character '%s' in class `%s' must be in class `%s'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:587
-+#: locale/programs/ld-ctype.c:553
- #, c-format
- msgid "character '%s' in class `%s' must not be in class `%s'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:617 locale/programs/ld-ctype.c:655
-+#: locale/programs/ld-ctype.c:583 locale/programs/ld-ctype.c:621
- #, c-format
- msgid "<SP> character not in class `%s'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:629 locale/programs/ld-ctype.c:666
-+#: locale/programs/ld-ctype.c:595 locale/programs/ld-ctype.c:632
- #, c-format
- msgid "<SP> character must not be in class `%s'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:644
-+#: locale/programs/ld-ctype.c:610
- #, c-format
- msgid "character <SP> not defined in character map"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:780
-+#: locale/programs/ld-ctype.c:746
- #, c-format
- msgid "`digit' category has not entries in groups of ten"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:829
-+#: locale/programs/ld-ctype.c:795
- #, c-format
- msgid "no input digits defined and none of the standard names in the charmap"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:894
-+#: locale/programs/ld-ctype.c:860
- #, c-format
- msgid "not all characters used in `outdigit' are available in the charmap"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:911
-+#: locale/programs/ld-ctype.c:877
- #, c-format
- msgid "not all characters used in `outdigit' are available in the repertoire"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1176
-+#: locale/programs/ld-ctype.c:1142
- #, c-format
- msgid "character class `%s' already defined"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1182
-+#: locale/programs/ld-ctype.c:1148
- #, c-format
- msgid "implementation limit: no more than %Zd character classes allowed"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1208
-+#: locale/programs/ld-ctype.c:1174
- #, c-format
- msgid "character map `%s' already defined"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1214
-+#: locale/programs/ld-ctype.c:1180
- #, c-format
- msgid "implementation limit: no more than %d character maps allowed"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1479 locale/programs/ld-ctype.c:1604
--#: locale/programs/ld-ctype.c:1710 locale/programs/ld-ctype.c:2400
--#: locale/programs/ld-ctype.c:3397
-+#: locale/programs/ld-ctype.c:1445 locale/programs/ld-ctype.c:1570
-+#: locale/programs/ld-ctype.c:1676 locale/programs/ld-ctype.c:2352
-+#: locale/programs/ld-ctype.c:3324
- #, c-format
- msgid "%s: field `%s' does not contain exactly ten entries"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1507 locale/programs/ld-ctype.c:2081
-+#: locale/programs/ld-ctype.c:1473 locale/programs/ld-ctype.c:2047
- #, c-format
- msgid "to-value <U%0*X> of range is smaller than from-value <U%0*X>"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1634
-+#: locale/programs/ld-ctype.c:1600
- msgid "start and end character sequence of range must have the same length"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:1641
-+#: locale/programs/ld-ctype.c:1607
- msgid "to-value character sequence is smaller than from-value sequence"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2001 locale/programs/ld-ctype.c:2052
-+#: locale/programs/ld-ctype.c:1967 locale/programs/ld-ctype.c:2018
- msgid "premature end of `translit_ignore' definition"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2007 locale/programs/ld-ctype.c:2058
--#: locale/programs/ld-ctype.c:2100
-+#: locale/programs/ld-ctype.c:1973 locale/programs/ld-ctype.c:2024
-+#: locale/programs/ld-ctype.c:2066
- msgid "syntax error"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2233
-+#: locale/programs/ld-ctype.c:2199
- #, c-format
- msgid "%s: syntax error in definition of new character class"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2248
-+#: locale/programs/ld-ctype.c:2214
- #, c-format
- msgid "%s: syntax error in definition of new character map"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2422
-+#: locale/programs/ld-ctype.c:2374
- msgid "ellipsis range must be marked by two operands of same type"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2431
-+#: locale/programs/ld-ctype.c:2383
- msgid "with symbolic name range values the absolute ellipsis `...' must not be used"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2446
-+#: locale/programs/ld-ctype.c:2398
- msgid "with UCS range values one must use the hexadecimal symbolic ellipsis `..'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2460
-+#: locale/programs/ld-ctype.c:2412
- msgid "with character code range values one must use the absolute ellipsis `...'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2611
-+#: locale/programs/ld-ctype.c:2563
- #, c-format
- msgid "duplicated definition for mapping `%s'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2697 locale/programs/ld-ctype.c:2841
-+#: locale/programs/ld-ctype.c:2649 locale/programs/ld-ctype.c:2793
- #, c-format
- msgid "%s: `translit_start' section does not end with `translit_end'"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2792
-+#: locale/programs/ld-ctype.c:2744
- #, c-format
- msgid "%s: duplicate `default_missing' definition"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2797
-+#: locale/programs/ld-ctype.c:2749
- msgid "previous definition was here"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2819
-+#: locale/programs/ld-ctype.c:2771
- #, c-format
- msgid "%s: no representable `default_missing' definition found"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2962 locale/programs/ld-ctype.c:3059
--#: locale/programs/ld-ctype.c:3079 locale/programs/ld-ctype.c:3100
--#: locale/programs/ld-ctype.c:3121 locale/programs/ld-ctype.c:3142
--#: locale/programs/ld-ctype.c:3163 locale/programs/ld-ctype.c:3203
--#: locale/programs/ld-ctype.c:3224 locale/programs/ld-ctype.c:3289
--#: locale/programs/ld-ctype.c:3331 locale/programs/ld-ctype.c:3356
-+#: locale/programs/ld-ctype.c:2889 locale/programs/ld-ctype.c:2986
-+#: locale/programs/ld-ctype.c:3006 locale/programs/ld-ctype.c:3027
-+#: locale/programs/ld-ctype.c:3048 locale/programs/ld-ctype.c:3069
-+#: locale/programs/ld-ctype.c:3090 locale/programs/ld-ctype.c:3130
-+#: locale/programs/ld-ctype.c:3151 locale/programs/ld-ctype.c:3216
-+#: locale/programs/ld-ctype.c:3258 locale/programs/ld-ctype.c:3283
- #, c-format
- msgid "%s: character `%s' not defined while needed as default value"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:2967 locale/programs/ld-ctype.c:3064
--#: locale/programs/ld-ctype.c:3084 locale/programs/ld-ctype.c:3105
--#: locale/programs/ld-ctype.c:3126 locale/programs/ld-ctype.c:3147
--#: locale/programs/ld-ctype.c:3168 locale/programs/ld-ctype.c:3208
--#: locale/programs/ld-ctype.c:3229 locale/programs/ld-ctype.c:3294
-+#: locale/programs/ld-ctype.c:2894 locale/programs/ld-ctype.c:2991
-+#: locale/programs/ld-ctype.c:3011 locale/programs/ld-ctype.c:3032
-+#: locale/programs/ld-ctype.c:3053 locale/programs/ld-ctype.c:3074
-+#: locale/programs/ld-ctype.c:3095 locale/programs/ld-ctype.c:3135
-+#: locale/programs/ld-ctype.c:3156 locale/programs/ld-ctype.c:3221
- #, c-format
- msgid "%s: character `%s' in charmap not representable with one byte"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:3338 locale/programs/ld-ctype.c:3363
-+#: locale/programs/ld-ctype.c:3265 locale/programs/ld-ctype.c:3290
- #, c-format
- msgid "%s: character `%s' needed as default value not representable with one byte"
- msgstr ""
- 
--#: locale/programs/ld-ctype.c:3419
-+#: locale/programs/ld-ctype.c:3346
- #, c-format
- msgid "no output digits defined and none of the standard names in the charmap"
- msgstr ""
<Skipped 56995 lines>
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/glibc.git/commitdiff/ee4a0bb9cd9a8e7f552c9948963a69c61865845c



More information about the pld-cvs-commit mailing list