about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-07-21 08:25:57 +0000
committerJakub Jelinek <jakub@redhat.com>2005-07-21 08:25:57 +0000
commit736e2ab430e006ba09a2fe34d7887d3812ac808f (patch)
treef2d5948776e91112fcfd9199a757cd58e1be867a
parent366c71f353afc163b8d31c9db6e90919b5c2e1c0 (diff)
downloadglibc-736e2ab430e006ba09a2fe34d7887d3812ac808f.tar.gz
glibc-736e2ab430e006ba09a2fe34d7887d3812ac808f.tar.xz
glibc-736e2ab430e006ba09a2fe34d7887d3812ac808f.zip
Updated to fedora-glibc-20050721T0814
-rw-r--r--ChangeLog314
-rw-r--r--Makerules2
-rw-r--r--argp/argp-fmtstream.c40
-rw-r--r--argp/argp-help.c103
-rw-r--r--assert/assert-perr.c10
-rw-r--r--assert/assert.c11
-rw-r--r--config.make.in1
-rwxr-xr-xconfigure30
-rw-r--r--configure.in15
-rw-r--r--debug/Depend1
-rw-r--r--debug/Makefile28
-rw-r--r--debug/Versions9
-rw-r--r--debug/confstr_chk.c30
-rw-r--r--debug/fgetws_chk.c54
-rw-r--r--debug/fgetws_u_chk.c61
-rw-r--r--debug/fwprintf_chk.c45
-rw-r--r--debug/getdomainname_chk.c29
-rw-r--r--debug/getgroups_chk.c30
-rw-r--r--debug/gethostname_chk.c29
-rw-r--r--debug/getlogin_r_chk.c29
-rw-r--r--debug/mbsnrtowcs_chk.c31
-rw-r--r--debug/mbsrtowcs_chk.c31
-rw-r--r--debug/ptsname_r_chk.c29
-rw-r--r--debug/realpath_chk.c60
-rw-r--r--debug/swprintf_chk.c37
-rw-r--r--debug/tst-chk1.c480
-rw-r--r--debug/ttyname_r_chk.c29
-rw-r--r--debug/vfwprintf_chk.c42
-rw-r--r--debug/vswprintf_chk.c75
-rw-r--r--debug/vwprintf_chk.c43
-rw-r--r--debug/wcpcpy_chk.c45
-rw-r--r--debug/wcpncpy_chk.c33
-rw-r--r--debug/wcrtomb_chk.c35
-rw-r--r--debug/wcscat_chk.c55
-rw-r--r--debug/wcscpy_chk.c61
-rw-r--r--debug/wcsncat_chk.c96
-rw-r--r--debug/wcsncpy_chk.c33
-rw-r--r--debug/wcsnrtombs_chk.c31
-rw-r--r--debug/wcsrtombs_chk.c31
-rw-r--r--debug/wctomb_chk.c36
-rw-r--r--debug/wmemcpy_chk.c30
-rw-r--r--debug/wmemmove_chk.c30
-rw-r--r--debug/wmempcpy_chk.c31
-rw-r--r--debug/wmemset_chk.c30
-rw-r--r--debug/wprintf_chk.c46
-rw-r--r--fedora/branch.mk4
-rw-r--r--gmon/gmon.c12
-rw-r--r--include/bits/stdlib.h1
-rw-r--r--include/bits/wchar2.h1
-rw-r--r--include/fenv.h2
-rw-r--r--include/libc-symbols.h18
-rw-r--r--include/stdio.h2
-rw-r--r--include/stdlib.h4
-rw-r--r--include/time.h2
-rw-r--r--include/wchar.h9
-rw-r--r--inet/rcmd.c99
-rw-r--r--libio/strfile.h13
-rw-r--r--libio/vswprintf.c13
-rw-r--r--localedata/ChangeLog10
-rw-r--r--localedata/locales/vi_VN390
-rw-r--r--malloc/obstack.c11
-rw-r--r--manual/Makefile2
-rw-r--r--misc/Makefile15
-rw-r--r--misc/error.c77
-rw-r--r--misc/getpass.c20
-rw-r--r--misc/tst-error1.c26
-rw-r--r--nptl/ChangeLog21
-rw-r--r--nptl/Makefile3
-rw-r--r--nptl/sysdeps/pthread/pthread.h27
-rw-r--r--nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h7
-rw-r--r--nptl/tst-initializers1.c48
-rw-r--r--nscd/Makefile5
-rw-r--r--nscd/connections.c25
-rw-r--r--nscd/grpcache.c2
-rw-r--r--nscd/nscd.c4
-rw-r--r--nscd/nscd_helper.c106
-rw-r--r--posix/bits/unistd.h98
-rw-r--r--posix/getopt.c50
-rw-r--r--posix/regcomp.c4
-rw-r--r--resolv/res_hconf.c60
-rw-r--r--stdio-common/Makefile2
-rw-r--r--stdio-common/fxprintf.c54
-rw-r--r--stdio-common/perror.c7
-rw-r--r--stdio-common/psignal.c21
-rw-r--r--stdlib/Makefile2
-rw-r--r--stdlib/bits/stdlib.h75
-rw-r--r--stdlib/fmtmsg.c51
-rw-r--r--stdlib/stdlib.h8
-rw-r--r--string/bits/string3.h16
-rw-r--r--sunrpc/auth_unix.c8
-rw-r--r--sunrpc/clnt_perr.c21
-rw-r--r--sunrpc/clnt_tcp.c8
-rw-r--r--sunrpc/clnt_udp.c8
-rw-r--r--sunrpc/clnt_unix.c8
-rw-r--r--sunrpc/svc_simple.c14
-rw-r--r--sunrpc/svc_tcp.c16
-rw-r--r--sunrpc/svc_udp.c29
-rw-r--r--sunrpc/svc_unix.c16
-rw-r--r--sunrpc/xdr.c15
-rw-r--r--sunrpc/xdr_array.c8
-rw-r--r--sunrpc/xdr_rec.c7
-rw-r--r--sunrpc/xdr_ref.c9
-rw-r--r--sysdeps/alpha/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/alpha/fpu/fesetround.c3
-rw-r--r--sysdeps/generic/clock_gettime.c3
-rw-r--r--sysdeps/generic/feholdexcpt.c3
-rw-r--r--sysdeps/generic/fesetround.c3
-rw-r--r--sysdeps/generic/s_significand.c2
-rw-r--r--sysdeps/generic/s_significandf.c4
-rw-r--r--sysdeps/generic/stpncpy_chk.c85
-rw-r--r--sysdeps/generic/wordexp.c7
-rw-r--r--sysdeps/i386/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/i386/fpu/fesetround.c3
-rw-r--r--sysdeps/ia64/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/ia64/fpu/fesetround.c3
-rw-r--r--sysdeps/ieee754/dbl-64/s_sincos.c6
-rw-r--r--sysdeps/ieee754/flt-32/e_atan2f.c2
-rw-r--r--sysdeps/powerpc/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/powerpc/fpu/fesetround.c3
-rw-r--r--sysdeps/powerpc/fpu/libm-test-ulps15
-rw-r--r--sysdeps/s390/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/s390/fpu/fesetround.c3
-rw-r--r--sysdeps/s390/fpu/libm-test-ulps15
-rw-r--r--sysdeps/s390/s390-64/bcopy.S14
-rw-r--r--sysdeps/sh/sh4/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/sh/sh4/fpu/fesetround.c3
-rw-r--r--sysdeps/sparc/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/sparc/fpu/fesetround.c3
-rw-r--r--sysdeps/unix/clock_gettime.c1
-rw-r--r--sysdeps/unix/sysv/linux/ia64/has_cpuclock.c12
-rw-r--r--sysdeps/x86_64/fpu/feholdexcpt.c3
-rw-r--r--sysdeps/x86_64/fpu/fesetround.c3
-rw-r--r--sysdeps/x86_64/fpu/libm-test-ulps15
-rw-r--r--sysdeps/x86_64/fpu/s_sincos.S61
-rw-r--r--sysdeps/x86_64/fpu/s_sincosl.S7
-rw-r--r--wcsmbs/bits/wchar2.h398
-rw-r--r--wcsmbs/wchar.h7
-rw-r--r--wcsmbs/wcsncpy.c5
138 files changed, 3786 insertions, 872 deletions
diff --git a/ChangeLog b/ChangeLog
index 66ad07ce84..9f8bfa838b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,281 @@
+2005-07-20  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/fpu/libm-test-ulps: Adjust expected atan2f results.
+	* sysdeps/powerpc/fpu/libm-test-ulps: Likewise.
+	* sysdeps/s390/fpu/libm-test-ulps: Likewise.
+
+2005-07-20  Bob Wilson  <bob.wilson@acm.org>
+            Darin Petkov  <darin@tensilica.com>
+
+	* sysdeps/ieee754/flt-32/e_atan2f.c (pi_lo): Correct exponent value.
+
+2005-07-20  Jakub Jelinek  <jakub@redhat.com>
+
+	* include/stdio.h (__fxprintf): Remove wfmt argument.
+	* stdio-common/fxprintf.c: Include assert.h, ctype.h and wchar.h.
+	(__fxprintf): Remove wfmt argument, create wfmt format string on
+	the fly from fmt.
+	* argp/argp-fmtstream.c: Adjust all __fxprintf callers.
+	* argp/argp-help.c: Likewise.
+	* assert/assert-perr.c: Likewise.
+	* assert/assert.c: Likewise.
+	* gmon/gmon.c: Likewise.
+	* inet/rcmd.c: Likewise.
+	* malloc/obstack.c: Likewise.
+	* misc/error.c: Likewise.
+	* misc/getpass.c: Likewise.
+	* posix/getopt.c: Likewise.
+	* resolv/res_hconf.c: Likewise.
+	* stdio-common/perror.c: Likewise.
+	* stdio-common/psignal.c: Likewise.
+	* stdlib/fmtmsg.c: Likewise.
+	* sunrpc/auth_unix.c: Likewise.
+	* sunrpc/clnt_perr.c: Likewise.
+	* sunrpc/clnt_tcp.c: Likewise.
+	* sunrpc/clnt_udp.c: Likewise.
+	* sunrpc/clnt_unix.c: Likewise.
+	* sunrpc/svc_simple.c: Likewise.
+	* sunrpc/svc_tcp.c: Likewise.
+	* sunrpc/svc_udp.c: Likewise.
+	* sunrpc/svc_unix.c: Likewise.
+	* sunrpc/xdr.c: Likewise.
+	* sunrpc/xdr_array.c: Likewise.
+	* sunrpc/xdr_rec.c: Likewise.
+	* sunrpc/xdr_ref.c: Likewise.
+	* sysdeps/generic/wordexp.c: Likewise.
+
+2005-07-20  Ulrich Drepper  <drepper@redhat.com>
+
+	* wcsmbs/bits/wchar2.h: Add definitions for wcrtomb, mbsrtowcs,
+	wcsrtombs, mbsnrtowcs, and wcsnrtombs.
+	* debug/Makefile (routines): Add wcrtomb_chk, mbsrtowcs_chk,
+	wcsrtombs_chk, mbsnrtowcs_chk, and wcsnrtombs_chk.
+	* debug/Versions: Add __wcrtomb_chk, __mbsrtowcs_chk,
+	__wcsrtombs_chk, __mbsnrtowcs_chk, and __wcsnrtombs_chk.
+	* debug/tst-chk1.c: Add tests for new functions.
+	* debug/mbsnrtowcs_chk.c: New file.
+	* debug/mbsrtowcs_chk.c: New file.
+	* debug/wcrtomb_chk.c: New file.
+	* debug/wcsnrtombs_chk.c: New file.
+	* debug/wcsrtombs_chk.c: New file.
+
+2005-07-19  Ulrich Drepper  <drepper@redhat.com>
+
+	* stdio-common/Makefile (aux): Add fxprintf.
+	* stdio-common/fxprintf.c: New file.
+	* include/stdio.h: Add declaration for __fxprintf.
+	* argp/argp-fmtstream.c: Use __fxprintf instead of inline stream
+	orientation test and two separate function calls.
+	* argp/argp-help.c: Likewise.
+	* assert/assert-perr.c: Likewise.
+	* assert/assert.c: Likewise.
+	* gmon/gmon.c: Likewise.
+	* inet/rcmd.c: Likewise.
+	* malloc/obstack.c: Likewise.
+	* misc/error.c: Likewise.
+	* misc/getpass.c: Likewise.
+	* posix/getopt.c: Likewise.
+	* resolv/res_hconf.c: Likewise.
+	* stdio-common/perror.c: Likewise.
+	* stdio-common/psignal.c: Likewise.
+	* stdlib/fmtmsg.c: Likewise.
+	* sunrpc/auth_unix.c: Likewise.
+	* sunrpc/clnt_perr.c: Likewise.
+	* sunrpc/clnt_tcp.c: Likewise.
+	* sunrpc/clnt_udp.c: Likewise.
+	* sunrpc/clnt_unix.c: Likewise.
+	* sunrpc/svc_simple.c: Likewise.
+	* sunrpc/svc_tcp.c: Likewise.
+	* sunrpc/svc_udp.c: Likewise.
+	* sunrpc/svc_unix.c: Likewise.
+	* sunrpc/xdr.c: Likewise.
+	* sunrpc/xdr_array.c: Likewise.
+	* sunrpc/xdr_rec.c: Likewise.
+	* sunrpc/xdr_ref.c: Likewise.
+	* sysdeps/generic/wordexp.c: Likewise.
+
+	* misc/Makefile: Add rules to build and run tst-error1.
+	* misc/tst-error1.c: New file.
+	* misc/error.c: Fix memory leak and possibly endless loop.
+
+	* configure.in: Check for -fstack-protector gcc option.
+	* config.make.in (have-ssp): Add template.
+	* nscd/Makefile (nscd-cflags): Add -fstack-protector if supported.
+
+	* nscd/nscd.c (main): Don't ignore result of chdir call.
+
+2005-07-18  Roland McGrath  <roland@redhat.com>
+
+	[BZ #869]
+	* Makerules ($(objpfx)stubs): Do cd into $(objdir) to reduce size of
+	objdump command line.
+
+2005-07-18  Ulrich Drepper  <drepper@redhat.com>
+
+	* nscd/Makefile (nscd-cflags): Add _FORTIFY_SOURCE.
+
+	* nscd/connections.c: Fix a few wur warnings.
+
+	[BZ #1113]
+	* nscd/grpcache.c (cache_addgr): Use correct maximum for group ID
+	length.  Patch by Ivan Gyurdiev <ivg2@cornell.edu>.
+
+	* debug/confstr_chk.c: New file.
+	* debug/getdomainname_chk.c: New file.
+	* debug/getgroups_chk.c: New file.
+	* debug/gethostname_chk.c: New file.
+	* debug/getlogin_r_chk.c: New file.
+	* debug/ttyname_r_chk.c: New file.
+	* posix/bits/unistd.h: Add definitions for new debug versions.
+	* debug/tst-chk1.c: Add tests for new functions.
+	* debug/Versions: Export new functions.
+	* debug/Makefile (routines): Add new files.
+
+	* stdlib/bits/stdlib.h: Fix typo.
+
+2005-07-13  Thorsten Kukuk  <kukuk@suse.de>
+
+	* manual/Makefile (libc/index.html): Depend on dir-add.texi.
+
+2005-07-15  Ulrich Drepper  <drepper@redhat.com>
+
+	* stdlib/bits/stdlib.h: Use __REDIRECT_NTH instead of __REDIRECT
+	where necessary.
+	* wcsmbs/bits/wchar2.h: Likewise.
+
+2005-07-15  Andreas Jaeger  <aj@suse.de>
+
+	* debug/Makefile (tst-lfschk3-ENV): New, set locale.
+	(tst-lfschk2-ENV): New.
+	(tst-lfschk1-ENV): New.
+	(tst-chk3-ENV): New.
+	(tst-chk2-ENV): New.
+	(tst-chk1-ENV): New.
+
+	[BZ #1079]
+	* include/stdlib.h: Remove malloc attribute from __posix_memalign.
+	* stdlib/stdlib.h: Likewise.
+
+2005-07-15  Ulrich Drepper  <drepper@redhat.com>
+
+	* wcsmbs/bits/wchar2.h: New file.
+	* include/bits/wchar2.h: New file.
+	* wcsmbs/wchar.h: Include <bits/wchar2.h> if fortification is
+	requested.
+	* wcsmbs/wcsncpy.c: Add __wcsncpy alias.
+	* string/bits/string3.h: Add fortified stpncpy definitions.
+	* sysdeps/generic/stpncpy_chk.c: New file.
+	* libio/vswprintf.c: Move _IO_wstrnfile definition to strfile.h.
+	Export _IO_wstrn_jumps.
+	* libio/strfile.h: Define _IO_wstrnfile and declare _IO_wstrn_jumps.
+	* include/wchar.h: Declare __wcsncpy and __vswprintf_chk.
+	* debug/fgetws_chk.c: New file.
+	* debug/fgetws_u_chk.c: New file.
+	* debug/fwprintf_chk.c: New file.
+	* debug/swprintf_chk.c: New file.
+	* debug/vfwprintf_chk.c: New file.
+	* debug/vswprintf_chk.c: New file.
+	* debug/vwprintf_chk.c: New file.
+	* debug/wcpcpy_chk.c: New file.
+	* debug/wcpncpy_chk.c: New file.
+	* debug/wcscat_chk.c: New file.
+	* debug/wcscpy_chk.c: New file.
+	* debug/wcsncat_chk.c: New file.
+	* debug/wcsncpy_chk.c: New file.
+	* debug/wmemcpy_chk.c: New file.
+	* debug/wmemmove_chk.c: New file.
+	* debug/wmempcpy_chk.c: New file.
+	* debug/wmemset_chk.c: New file.
+	* debug/wprintf_chk.c: New file.
+	* debug/tst-chk1.c: Add tests for new functions.
+	* debug/Versions: Export new functions.
+	* debug/Makefile (routines): Add new functions.
+
+2005-07-13  Ulrich Drepper  <drepper@redhat.com>
+
+	* nscd/nscd_helper.c: Add a few __builtin_expect.
+
+	[BZ #1080]
+	* nscd/connections.c (send_ro_fd): Make sure BUF is aligned correctly.
+	* nscd/nscd_helper.c (wait_on_socket): New function.
+	(get_mapping): Use wait_on_socket instead of poll.  The former handles
+	EINTR of poll correctly.
+	(__nscd_open_socket): Likewise.
+	(get_mapping): Make sure BUF is aligned correctly.
+	(get_mapping): Use munmap on correct pointer.
+
+2005-07-12  Ulrich Drepper  <drepper@redhat.com>
+
+	* include/libc-symbols.h: Define macros for librt hidden symbols.
+	* include/time.h: Add librt_hidden_proto definition for clock_gettime.
+	* sysdeps/generic/clock_gettime.c: Add librt_hidden_def.
+	* sysdeps/unix/clock_gettime.c: Likewise.
+
+	* stdlib/bits/stdlib.h: New file.
+	* stdlib/stdlib.h: Include <bits/stdlib.h> if fortification is
+	requested.
+	* Makefile (headers): Add bits/stdlib.h.
+	* include/bits/stdlib.h: New file.
+	* debug/Depend: New file.
+	* debug/ptsname_r_chk.c: New file.
+	* debug/realpath_chk.c: New file.
+	* debug/wctomb_chk.c: New file.
+	* debug/Makefile (routines): Add ptsname_r_chk, realpath_chk, and
+	wctomb_chk.
+	* debug/Versions: Export __ptsname_r_chk, __realpath_chk, and
+	__wctomb_chk.
+	* debug/tst-chk1.c: Add tests for __ptsname_r_chk, __realpath_chk, and
+	__wctomb_chk.
+
+2005-07-12  Jakub Jelinek  <jakub@redhat.com>
+
+	[BZ #1106]
+	* sysdeps/unix/sysv/linux/ia64/has_cpuclock.c: Include not-cancel.h.
+	(has_cpuclock): Use open_not_cancel_2 instead of open, read_not_cancel
+	instead of read and close_not_cancel_no_status instead of close.
+
+	[BZ #1106]
+	* sysdeps/s390/s390-64/bcopy.S (__bcopy): Use
+	HIDDEN_BUILTIN_JUMPTARGET to jump to memmove.
+
+2005-06-27  Carlos O'Donell  <carlos@systemhalted.org>
+
+	* posix/regcomp.c (re_compile_internal): Call __libc_lock_init
+	after init_dfa.
+
+2005-07-08  Ulrich Drepper  <drepper@redhat.com>
+
+	* sysdeps/x86_64/fpu/s_sincosl.S: Use retq not ret.  Remove
+	alignment.
+	* sysdeps/x86_64/fpu/s_sincos.S: New file.
+
+	* include/fenv.h: Add libm_hidden_proto for fesetround and
+	feholdexcept.
+	* sysdeps/alpha/fpu/feholdexcpt.c: Add libm_hidden_def.
+	* sysdeps/alpha/fpu/fesetround.c: Likewise.
+	* sysdeps/generic/feholdexcpt.c: Likewise.
+	* sysdeps/generic/fesetround.c: Likewise.
+	* sysdeps/i386/fpu/feholdexcpt.c: Likewise.
+	* sysdeps/i386/fpu/fesetround.c: Likewise.
+	* sysdeps/ia64/fpu/feholdexcpt.c: Likewise.
+	* sysdeps/ia64/fpu/fesetround.c: Likewise.
+	* sysdeps/powerpc/fpu/feholdexcpt.c: Likewise.
+	* sysdeps/powerpc/fpu/fesetround.c: Likewise.
+	* sysdeps/s390/fpu/feholdexcpt.c: Likewise.
+	* sysdeps/s390/fpu/fesetround.c: Likewise.
+	* sysdeps/sh/sh4/fpu/feholdexcpt.c: Likewise.
+	* sysdeps/sh/sh4/fpu/fesetround.c: Likewise.
+	* sysdeps/sparc/fpu/feholdexcpt.c: Likewise.
+	* sysdeps/sparc/fpu/fesetround.c: Likewise.
+	* sysdeps/x86_64/fpu/feholdexcpt.c: Likewise.
+	* sysdeps/x86_64/fpu/fesetround.c: Likewise.
+	* sysdeps/generic/s_significand.c (__significand): Use __ilogb not
+	ilogb.
+	* sysdeps/generic/s_significandf.c (__significandf): Use __ilogbf
+	not ilogbf.
+	* sysdeps/ieee754/dbl-64/s_sincos.c (__sincos): Use __sin and
+	__cos, not sin and cos.
+
 2005-07-07  Ulrich Drepper  <drepper@redhat.com>
 
 	* resolv/res_send.c (send_dg): Recognize referral results and
@@ -86,6 +364,7 @@
 
 2005-07-05  Thorsten Kukuk  <kukuk@suse.de>
 
+	[BZ #1111]
 	* nis/nss_compat/compat-grp.c (internal_getgrgid_r): Check if NSS
 	module provides getgrgid_r.
 	(getgrnam_plusgroup): Preserve original return value.
@@ -95,6 +374,7 @@
 
 2005-07-05  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1101]
 	* posix/regex_internal.c (build_wcs_buffer): Use MB_LEN_MAX not
 	MB_CUR_MAX.
 	(build_wcs_upper_buffer): Likewise.
@@ -129,11 +409,13 @@
 
 2005-06-23  Thorsten Kukuk  <kukuk@suse.de>
 
+	[BZ #1109]
 	* nscd/nscd_stat.c (receive_print_stats): Replace YESSTR/NOSTR
 	with own translation.
 
 2005-06-25  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1097]
 	* sunrpc/xdr.c (xdr_hyper, xdr_u_hyper): When decoding, cast
 	t2 to uint32_t instead of ulong.
 	* sunrpc/Makefile (tests): Add tst-xdrmem.
@@ -185,6 +467,7 @@
 
 2005-06-20  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #653]
 	* sysdeps/unix/sysv/linux/sys/quota.h: Add definitions and types for
 	_LINUX_QUOTA_VERSION >= 2.
 	(_LINUX_QUOTA_VERSION): Define if not yet defined.
@@ -204,9 +487,11 @@
 
 2005-06-17  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1106]
 	* time/mktime.c: Always include <string.h> for prototype of
 	implicitly used memcpy.
 
+	[BZ #1104]
 	* sysdeps/unix/sysv/linux/powerpc/powerpc32/truncate64.c
 	(truncate64): Use __truncate, not truncate.
 	(__have_no_truncate64): Renamed from have_no_truncate64.
@@ -280,6 +565,7 @@
 
 2005-06-17  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1106]
 	* sysdeps/posix/sigignore.c: Include <string.h> to tell the compiler
 	to use __GI_memset.
 	* sysdeps/posix/signal.c: Likewise.
@@ -291,12 +577,14 @@
 
 2005-06-15  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1088]
 	* hesiod/hesiod.c (hesiod_init): Don't check for ctx->classes[0] == 0
 	or both classes equal here.
 	(parse_config_file): If both classes are equal, clear the second one.
 
 2005-06-08  Karl Kelley  <kekelley@iastate.edu>
 
+	[BZ #1088]
 	* hesiod/hesiod_p.h (struct hesiod_p): Add classes array.
 	* hesiod/hesiod.c (hesiod_init): Initialize classes.  Fail if no
 	valid classes were given or if both are equal.
@@ -307,6 +595,7 @@
 
 2005-06-14  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1085]
 	* configure.in: Add test for availability of libaudit.
 	* config.h.in: Define HAVE_LIBAUDIT.
 	* config.make.in: Define have-libaudit.
@@ -339,6 +628,7 @@
 
 2005-06-13  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1096]
 	* sysdeps/unix/sysv/linux/netlinkaccess.h (__netlink_sendreq,
 	__netlink_receive): Remove prototypes.
 	(__netlink_request): New prototype.
@@ -547,6 +837,7 @@
 
 2005-05-23  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1086]
 	* sunrpc/bindrsvprt.c (LOWPORT): Apparently some mountd
 	implementations are broken and don't accept ports < 512.
 
@@ -558,6 +849,7 @@
 
 2005-05-23  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1086]
 	* sunrpc/pm_getport.c (__get_socket): New function.
 	(pmap_getport): Use it to open a non-reserved socket to the portmapper
 	for TCP.
@@ -566,6 +858,7 @@
 	non-reserved socket for the portmapper.
 	Based on a patch by Steve Dickson <steved@redhat.com>.
 
+	[BZ #1086]
 	* sunrpc/bindrsvprt.c (bindresvport): Try harder to find a port.
 	If we tried looking at the usual range without success extend the
 	range to even lower ports.
@@ -831,6 +1124,7 @@
 
 2005-04-29  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1083]
 	* sysdeps/posix/posix_fallocate.c (posix_fallocate): If len == 0,
 	call ftruncate if offset is bigger than current size.  Make sure
 	the file is offset + len bytes long if that is more than current size.
@@ -854,6 +1148,7 @@
 
 2005-04-29  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1093]
 	* nis/nis_table.c: Fix realloc handling.
 	* nis/nis_removemember.c: Likewise.
 
@@ -935,6 +1230,7 @@
 
 2005-04-27  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1094]
 	* nscd/connections.c (nscd_run): Use time() value in prune_cache
 	call, not timeout value, since the latter might be from another clock.
 
@@ -1004,6 +1300,7 @@
 
 2005-04-26  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1105]
 	* time/strptime_l.c (__strptime_internal): Handle 'z' to set
 	tm_gmtoff.
 	* time/Makefile (tests): Add tst-strptime2.
@@ -1011,6 +1308,7 @@
 
 2005-04-26  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1081]
 	* elf/dl-close.c: Include stddef.h.
 	(_dl_close): If called recursively, just remember GC needs to be rerun
 	and decrease l_direct_opencount.  Avoid GC if l_direct_opencount
@@ -1037,6 +1335,7 @@
 
 2005-04-26  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1110]
 	* stdio-common/vfscanf.c: Correctly account for characters of
 	decimal points right after +-.
 
@@ -1056,6 +1355,7 @@
 
 2005-04-24  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1110]
 	* stdio-common/vfscanf.c: Fix parsing of decimal point after +-.
 	Patch by Hamed Malek <hamed@bamdad.org>.
 
@@ -1136,6 +1436,7 @@
 
 2005-04-12  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1090]
 	* stdlib/random_r.c (__initstate_r): Don't use non-existing state.
 	* string/tst-strfry.c: New file.
 	* string/Makefile (tests): Add tst-strfry.
@@ -1315,6 +1616,7 @@
 
 2005-04-04  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1082]
 	* sunrpc/pmap_rmt.c (xdr_rmtcall_args): Use a dummy arglen instead
 	of trying to encode uninitialized arglen.
 
@@ -1519,6 +1821,7 @@
 
 2005-03-29  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1087]
 	* posix/fnmatch.c (fnmatch): For short patterns or strings attempt to
 	avoid calling mbsrtowcs twice.
 
@@ -1675,6 +1978,7 @@
 
 2005-03-21  Thorsten Kukuk  <kukuk@suse.de>
 
+	[BZ #1098]
 	* sunrpc/xdr_stdio.c (xdrstdio_getlong, xdrstdio_putlong):
 	Convert correctly between long/int on 64bit big-endian.
 
@@ -1731,7 +2035,7 @@
 
 2005-02-27  Denis Barbier  <barbier@debian.org>
 
-	[BZ #38]
+	[BZ #549]
 	* locale/iso-4217.def: Add CSD currency.
 
 2005-03-19  Ulrich Drepper  <drepper@redhat.com>
@@ -2031,6 +2335,7 @@
 	* iconv/gconv_simple.c (internal_utf8_loop): Make start unsigned
 	to avoid warning.
 
+	[BZ #1101]
 	* posix/regex_internal.c [_LIBC] (build_wcs_buffer): Avoid using
 	dynamically sized array.
 	(build_wcs_upper_buffer): Likewise.
@@ -2298,12 +2603,14 @@
 
 2005-02-22  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1095]
 	* malloc/Makefile (CFLAGS-mcheck-init.c): Add.
 	* sunrpc/Makefile: Add $(PIC-ccflag) to CFLAGS-x* for
 	librpcsvc.a objects.
 
 2005-02-21  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1107]
 	* iconvdata/ibm930.h: Correct Yen mapping.
 	* iconvdata/ibm939.h: Likewise.
 	* iconvdata/testdata/IBM930..UTF8: Adjust test data.
@@ -2602,6 +2909,7 @@
 
 2005-02-11  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1100]
 	* debug/chk_fail.c (__chk_fail): Add a while (1) loop around
 	__libc_message to kill GCC warning about noreturn function returning.
 
@@ -2839,6 +3147,7 @@
 
 2005-01-30  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1103]
 	* nscd/nscd_helper.c (get_mapping): Use MSG_NOSIGNAL if available.
 	* nscd/connections.c (send_ro_fd): Likewise.
 
@@ -2967,6 +3276,7 @@
 
 2005-01-26  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1100]
 	* debug/chk_fail.c (__chk_fail): Print program name in final message.
 
 	* sysdeps/unix/sysv/linux/kernel-features.h: Found reference to
@@ -2994,6 +3304,7 @@
 
 2005-01-14  GOTO Masanori  <gotom@debian.or.jp>
 
+	[BZ #1108]
 	* sunrpc/rpc_main.c (s_output): Generate #include <rpc/pmap_clnt.h>
 	irrespective of Cflag.
 
@@ -3218,6 +3529,7 @@
 	as backlog.
 	* sunrpc/svc_unix.c (svcunix_create): Likewise.
 
+	[BZ #1099]
 	* grp/putgrent.c (putgrent): Don't write 0 as group
 	ID if groupname starts with + or -.
 	* pwd/putpwent.c (putpwent): Don't write 0 as user or
diff --git a/Makerules b/Makerules
index 63b07a24a6..e95d3107ec 100644
--- a/Makerules
+++ b/Makerules
@@ -1390,7 +1390,7 @@ objs-for-stubs := $(foreach o,$(object-suffixes-for-libc),$(o-objects)) \
 		  $(addprefix $(objpfx),$(extra-objs))
 $(objpfx)stubs: $(objs-for-stubs)
 ifneq (,$(strip $(objs-for-stubs)))
-	$(OBJDUMP) -h $^ | \
+	(cd $(objdir); $(OBJDUMP) -h $(patsubst $(objpfx)%,%,$^)) | \
 	$(AWK) '/\.gnu\.glibc-stub\./ { \
 	          sub(/\.gnu\.glibc-stub\./, "", $$2); \
 		  stubs[$$2] = 1; } \
diff --git a/argp/argp-fmtstream.c b/argp/argp-fmtstream.c
index 215160bdcd..1004e6762a 100644
--- a/argp/argp-fmtstream.c
+++ b/argp/argp-fmtstream.c
@@ -1,5 +1,5 @@
 /* Word-wrapping and line-truncating streams
-   Copyright (C) 1997,1998,1999,2001,2002,2003 Free Software Foundation, Inc.
+   Copyright (C) 1997-1999,2001,2002,2003,2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Miles Bader <miles@gnu.ai.mit.edu>.
 
@@ -102,11 +102,10 @@ __argp_fmtstream_free (argp_fmtstream_t fs)
   if (fs->p > fs->buf)
     {
 #ifdef USE_IN_LIBIO
-      if (_IO_fwide (fs->stream, 0) > 0)
-	__fwprintf (fs->stream, L"%.*s", (int) (fs->p - fs->buf), fs->buf);
-      else
+      __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf);
+#else
+      fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
 #endif
-	fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
     }
   free (fs->buf);
   free (fs);
@@ -291,17 +290,15 @@ __argp_fmtstream_update (argp_fmtstream_t fs)
 	      else
 		/* Output the first line so we can use the space.  */
 		{
-#ifdef USE_IN_LIBIO
-		  if (_IO_fwide (fs->stream, 0) > 0)
-		    __fwprintf (fs->stream, L"%.*s\n",
-				(int) (nl - fs->buf), fs->buf);
-		  else
+#ifdef _LIBC
+		  __fxprintf (fs->stream, "%.*s\n",
+			      (int) (nl - fs->buf), fs->buf);
+#else
+		  if (nl > fs->buf)
+		    fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream);
+		  putc_unlocked ('\n', fs->stream);
 #endif
-		    {
-		      if (nl > fs->buf)
-			fwrite_unlocked (fs->buf, 1, nl - fs->buf, fs->stream);
-		      putc_unlocked ('\n', fs->stream);
-		    }
+
 		  len += buf - fs->buf;
 		  nl = buf = fs->buf;
 		}
@@ -360,15 +357,12 @@ __argp_fmtstream_ensure (struct argp_fmtstream *fs, size_t amount)
       /* Flush FS's buffer.  */
       __argp_fmtstream_update (fs);
 
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (fs->stream, 0) > 0)
-	{
-	  __fwprintf (fs->stream, L"%.*s", (int) (fs->p - fs->buf), fs->buf);
-	  wrote = fs->p - fs->buf;
-	}
-      else
+#ifdef _LIBC
+      __fxprintf (fs->stream, "%.*s", (int) (fs->p - fs->buf), fs->buf);
+      wrote = fs->p - fs->buf;
+#else
+      wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
 #endif
-	wrote = fwrite_unlocked (fs->buf, 1, fs->p - fs->buf, fs->stream);
       if (wrote == fs->p - fs->buf)
 	{
 	  fs->p = fs->buf;
diff --git a/argp/argp-help.c b/argp/argp-help.c
index 67018709d3..ee61ed4d5c 100644
--- a/argp/argp-help.c
+++ b/argp/argp-help.c
@@ -1,5 +1,5 @@
 /* Hierarchial argument parsing help output
-   Copyright (C) 1995-2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1995-2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Miles Bader <miles@gnu.ai.mit.edu>.
 
@@ -1763,33 +1763,26 @@ __argp_error (const struct argp_state *state, const char *fmt, ...)
 
 	  va_start (ap, fmt);
 
-#ifdef USE_IN_LIBIO
-	  if (_IO_fwide (stream, 0) > 0)
-	    {
-	      char *buf;
+#ifdef _LIBC
+	  char *buf;
 
-	      if (__asprintf (&buf, fmt, ap) < 0)
-		buf = NULL;
+	  if (__asprintf (&buf, fmt, ap) < 0)
+	    buf = NULL;
 
-	      __fwprintf (stream, L"%s: %s\n",
-			  state ? state->name : __argp_short_program_name (),
-			  buf);
+	  __fxprintf (stream, "%s: %s\n",
+		      state ? state->name : __argp_short_program_name (), buf);
 
-	      free (buf);
-	    }
-	  else
-#endif
-	    {
-	      fputs_unlocked (state
-			      ? state->name : __argp_short_program_name (),
-			      stream);
-	      putc_unlocked (':', stream);
-	      putc_unlocked (' ', stream);
+	  free (buf);
+#else
+	  fputs_unlocked (state ? state->name : __argp_short_program_name (),
+			  stream);
+	  putc_unlocked (':', stream);
+	  putc_unlocked (' ', stream);
 
-	      vfprintf (stream, fmt, ap);
+	  vfprintf (stream, fmt, ap);
 
-	      putc_unlocked ('\n', stream);
-	    }
+	  putc_unlocked ('\n', stream);
+#endif
 
 	  __argp_state_help (state, stream, ARGP_HELP_STD_ERR);
 
@@ -1827,41 +1820,34 @@ __argp_failure (const struct argp_state *state, int status, int errnum,
 	  __flockfile (stream);
 #endif
 
-#ifdef USE_IN_LIBIO
-	  if (_IO_fwide (stream, 0) > 0)
-	    __fwprintf (stream, L"%s",
-			state ? state->name : __argp_short_program_name ());
-	  else
+#ifdef _LIBC
+	  __fxprintf (stream, "%s",
+		      state ? state->name : __argp_short_program_name ());
+#else
+	  fputs_unlocked (state ? state->name : __argp_short_program_name (),
+			  stream);
 #endif
-	    fputs_unlocked (state
-			    ? state->name : __argp_short_program_name (),
-			    stream);
 
 	  if (fmt)
 	    {
 	      va_list ap;
 
 	      va_start (ap, fmt);
-#ifdef USE_IN_LIBIO
-	      if (_IO_fwide (stream, 0) > 0)
-		{
-		  char *buf;
+#ifdef _LIBC
+	      char *buf;
 
-		  if (__asprintf (&buf, fmt, ap) < 0)
-		    buf = NULL;
+	      if (__asprintf (&buf, fmt, ap) < 0)
+		buf = NULL;
 
-		  __fwprintf (stream, L": %s", buf);
+	      __fxprintf (stream, ": %s", buf);
 
-		  free (buf);
-		}
-	      else
-#endif
-		{
-		  putc_unlocked (':', stream);
-		  putc_unlocked (' ', stream);
+	      free (buf);
+#else
+	      putc_unlocked (':', stream);
+	      putc_unlocked (' ', stream);
 
-		  vfprintf (stream, fmt, ap);
-		}
+	      vfprintf (stream, fmt, ap);
+#endif
 
 	      va_end (ap);
 	    }
@@ -1870,21 +1856,18 @@ __argp_failure (const struct argp_state *state, int status, int errnum,
 	    {
 	      char buf[200];
 
-#ifdef USE_IN_LIBIO
-	      if (_IO_fwide (stream, 0) > 0)
-		__fwprintf (stream, L": %s",
-			    __strerror_r (errnum, buf, sizeof (buf)));
-	      else
-#endif
-		{
-		  putc_unlocked (':', stream);
-		  putc_unlocked (' ', stream);
-#if defined _LIBC || defined HAVE_STRERROR_R
-		  fputs (__strerror_r (errnum, buf, sizeof (buf)), stream);
+#ifdef _LIBC
+	      __fxprintf (stream, ": %s",
+			  __strerror_r (errnum, buf, sizeof (buf)));
 #else
-		  fputs (strerror (errnum), stream);
+	      putc_unlocked (':', stream);
+	      putc_unlocked (' ', stream);
+# ifdef HAVE_STRERROR_R
+	      fputs (__strerror_r (errnum, buf, sizeof (buf)), stream);
+# else
+	      fputs (strerror (errnum), stream);
+# endif
 #endif
-		}
 	    }
 
 #ifdef USE_IN_LIBIO
diff --git a/assert/assert-perr.c b/assert/assert-perr.c
index 3017c9fd9c..dd54246360 100644
--- a/assert/assert-perr.c
+++ b/assert/assert-perr.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994-1998,2001,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1994-1998,2001,2002,2005 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
@@ -61,13 +61,7 @@ __assert_perror_fail (int errnum,
 		  __strerror_r (errnum, errbuf, sizeof errbuf)) >= 0)
     {
       /* Print the message.  */
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s", buf);
-      else
-#endif
-	(void) fputs (buf, stderr);
-
+      (void) __fxprintf (NULL, "%s", buf);
       (void) fflush (stderr);
 
       /* We have to free the buffer since the appplication might catch the
diff --git a/assert/assert.c b/assert/assert.c
index 20c86eba52..0ef4ca62e4 100644
--- a/assert/assert.c
+++ b/assert/assert.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1991,1994-1996,1998,2001,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1991,1994-1996,1998,2001,2002,2005
+   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
@@ -60,13 +61,7 @@ __assert_fail (const char *assertion, const char *file, unsigned int line,
 		  assertion) >= 0)
     {
       /* Print the message.  */
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s", buf);
-      else
-#endif
-	(void) fputs (buf, stderr);
-
+      (void) __fxprintf (NULL, "%s", buf);
       (void) fflush (stderr);
 
       /* We have to free the buffer since the application might catch the
diff --git a/config.make.in b/config.make.in
index 1ab4bfbfc4..3687507a17 100644
--- a/config.make.in
+++ b/config.make.in
@@ -58,6 +58,7 @@ have-cpp-asm-debuginfo = @libc_cv_cpp_asm_debuginfo@
 enable-check-abi = @enable_check_abi@
 have-forced-unwind = @libc_cv_forced_unwind@
 have-fpie = @libc_cv_fpie@
+have-ssp = @libc_cv_ssp@
 have-selinux = @have_selinux@
 have-libaudit = @have_libaudit@
 have-cc-with-libunwind = @libc_cv_cc_with_libunwind@
diff --git a/configure b/configure
index 402da463f9..a449415c01 100755
--- a/configure
+++ b/configure
@@ -313,7 +313,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_cc_with_libunwind libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_z_relro libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie fno_unit_at_a_time libc_cv_have_initfini no_whole_archive exceptions LIBGD have_libaudit have_selinux EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS with_fp with_cvs enable_check_abi oldest_abi bindnow force_install all_warnings build build_cpu build_vendor build_os host host_cpu host_vendor host_os subdirs add_ons base_machine sysnames INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC OBJEXT BUILD_CC cross_compiling CPP CXX CXXFLAGS ac_ct_CXX AR OBJDUMP RANLIB ac_ct_RANLIB MIG AS LD PWD_P MAKE MSGFMT MAKEINFO SED AUTOCONF SYSINCLUDES libc_cv_gcc_static_libgcc BASH libc_cv_have_bash2 KSH libc_cv_have_ksh AWK PERL INSTALL_INFO BISON VERSIONING libc_cv_asm_protected_directive libc_cv_initfinit_array libc_cv_cc_with_libunwind libc_cv_z_nodelete libc_cv_z_nodlopen libc_cv_z_initfirst libc_cv_z_relro libc_cv_Bgroup libc_cv_libgcc_s_suffix libc_cv_as_needed ASFLAGS_config libc_cv_z_combreloc libc_cv_z_execstack libc_cv_fpie fno_unit_at_a_time libc_cv_ssp libc_cv_have_initfini no_whole_archive exceptions LIBGD have_libaudit have_selinux EGREP sizeof_long_double libc_cv_gcc_unwind_find_fde uname_sysname uname_release uname_version old_glibc_headers libc_cv_slibdir libc_cv_localedir libc_cv_sysconfdir libc_cv_rootsbindir libc_cv_forced_unwind use_ldconfig ldd_rewrite_script gnu_ld gnu_as elf xcoff static shared pic_default profile omitfp bounded static_nss nopic_initfini DEFINES mach_interface_list VERSION RELEASE LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -5799,6 +5799,33 @@ if test $libc_cv_fno_unit_at_a_time = yes; then
 fi
 
 
+echo "$as_me:$LINENO: checking for -fstack-protector" >&5
+echo $ECHO_N "checking for -fstack-protector... $ECHO_C" >&6
+if test "${libc_cv_ssp+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat > conftest.c <<EOF
+int foo;
+main () { return 0;}
+EOF
+if { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fstack-protector
+			    -o conftest conftest.c 1>&5'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }
+then
+  libc_cv_ssp=yes
+else
+  libc_cv_ssp=no
+fi
+rm -f conftest*
+fi
+echo "$as_me:$LINENO: result: $libc_cv_ssp" >&5
+echo "${ECHO_T}$libc_cv_ssp" >&6
+
+
 if test $elf != yes; then
   echo "$as_me:$LINENO: checking for .init and .fini sections" >&5
 echo $ECHO_N "checking for .init and .fini sections... $ECHO_C" >&6
@@ -8434,6 +8461,7 @@ s,@libc_cv_z_combreloc@,$libc_cv_z_combreloc,;t t
 s,@libc_cv_z_execstack@,$libc_cv_z_execstack,;t t
 s,@libc_cv_fpie@,$libc_cv_fpie,;t t
 s,@fno_unit_at_a_time@,$fno_unit_at_a_time,;t t
+s,@libc_cv_ssp@,$libc_cv_ssp,;t t
 s,@libc_cv_have_initfini@,$libc_cv_have_initfini,;t t
 s,@no_whole_archive@,$no_whole_archive,;t t
 s,@exceptions@,$exceptions,;t t
diff --git a/configure.in b/configure.in
index 4396891db5..21756e00a8 100644
--- a/configure.in
+++ b/configure.in
@@ -1508,6 +1508,21 @@ if test $libc_cv_fno_unit_at_a_time = yes; then
 fi
 AC_SUBST(fno_unit_at_a_time)
 
+AC_CACHE_CHECK(for -fstack-protector, libc_cv_ssp, [dnl
+cat > conftest.c <<EOF
+int foo;
+main () { return 0;}
+EOF
+if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -fstack-protector
+			    -o conftest conftest.c 1>&AS_MESSAGE_LOG_FD])
+then
+  libc_cv_ssp=yes
+else
+  libc_cv_ssp=no
+fi
+rm -f conftest*])
+AC_SUBST(libc_cv_ssp)
+
 if test $elf != yes; then
   AC_CACHE_CHECK(for .init and .fini sections, libc_cv_have_initfini,
 		 [AC_TRY_COMPILE(, [asm (".section .init");
diff --git a/debug/Depend b/debug/Depend
new file mode 100644
index 0000000000..f3e1156a4e
--- /dev/null
+++ b/debug/Depend
@@ -0,0 +1 @@
+localedata
diff --git a/debug/Makefile b/debug/Makefile
index 6ec08dc94a..009c05c9d9 100644
--- a/debug/Makefile
+++ b/debug/Makefile
@@ -26,12 +26,21 @@ distribute = sigcontextinfo.h register-dump.h frame.h
 
 routines  = backtrace backtracesyms backtracesymsfd noophooks \
 	    memcpy_chk memmove_chk mempcpy_chk memset_chk stpcpy_chk \
-	    strcat_chk strcpy_chk strncat_chk strncpy_chk \
+	    strcat_chk strcpy_chk strncat_chk strncpy_chk stpncpy_chk \
 	    sprintf_chk vsprintf_chk snprintf_chk vsnprintf_chk \
 	    printf_chk fprintf_chk vprintf_chk vfprintf_chk \
 	    gets_chk chk_fail readonly-area fgets_chk fgets_u_chk \
 	    read_chk pread_chk pread64_chk recv_chk recvfrom_chk \
-	    readlink_chk getwd_chk getcwd_chk stack_chk_fail \
+	    readlink_chk getwd_chk getcwd_chk realpath_chk ptsname_r_chk \
+	    wctomb_chk wcscpy_chk wmemcpy_chk wmemmove_chk wmempcpy_chk \
+	    wcpcpy_chk wcsncpy_chk wcscat_chk wcsncat_chk wmemset_chk \
+	    wcpncpy_chk \
+	    swprintf_chk vswprintf_chk wprintf_chk fwprintf_chk \
+	    vwprintf_chk vfwprintf_chk fgetws_chk fgetws_u_chk \
+	    confstr_chk getgroups_chk ttyname_r_chk getlogin_r_chk \
+	    gethostname_chk getdomainname_chk wcrtomb_chk mbsnrtowcs_chk \
+	    wcsnrtombs_chk mbsrtowcs_chk wcsrtombs_chk \
+	    stack_chk_fail \
 	    $(static-only-routines)
 static-only-routines := warning-nop stack_chk_fail_local
 
@@ -47,12 +56,27 @@ CFLAGS-vfprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions)
 CFLAGS-gets_chk.c = -D_IO_MTSAFE_IO $(exceptions)
 CFLAGS-fgets_chk.c = -D_IO_MTSAFE_IO $(exceptions)
 CFLAGS-fgets_u_chk.c = -D_IO_MTSAFE_IO $(exceptions)
+CFLAGS-swprintf_chk.c = -D_IO_MTSAFE_IO
+CFLAGS-vswprintf_chk.c = -D_IO_MTSAFE_IO
+CFLAGS-wprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions)
+CFLAGS-fwprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions)
+CFLAGS-vwprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions)
+CFLAGS-vfwprintf_chk.c = -D_IO_MTSAFE_IO $(exceptions)
+CFLAGS-fgetws_chk.c = -D_IO_MTSAFE_IO $(exceptions)
+CFLAGS-fgetws_u_chk.c = -D_IO_MTSAFE_IO $(exceptions)
 CFLAGS-read_chk.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-pread_chk.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-pread64_chk.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-recv_chk.c = -fexceptions -fasynchronous-unwind-tables
 CFLAGS-recvfrom_chk.c = -fexceptions -fasynchronous-unwind-tables
 
+tst-chk1-ENV = LOCPATH=$(common-objpfx)localedata
+tst-chk2-ENV = LOCPATH=$(common-objpfx)localedata
+tst-chk3-ENV = LOCPATH=$(common-objpfx)localedata
+tst-lfschk1-ENV = LOCPATH=$(common-objpfx)localedata
+tst-lfschk2-ENV = LOCPATH=$(common-objpfx)localedata
+tst-lfschk3-ENV = LOCPATH=$(common-objpfx)localedata
+
 tests = backtrace-tst tst-chk1 tst-chk2 tst-chk3 \
 	tst-lfschk1 tst-lfschk2 tst-lfschk3 test-strcpy_chk test-stpcpy_chk
 
diff --git a/debug/Versions b/debug/Versions
index 051f4df000..2f4183bceb 100644
--- a/debug/Versions
+++ b/debug/Versions
@@ -23,6 +23,15 @@ libc {
     __read_chk; __pread_chk; __pread64_chk;
     __readlink_chk; __getcwd_chk; __getwd_chk;
     __recv_chk; __recvfrom_chk;
+    __realpath_chk; __ptsname_r_chk; __wctomb_chk;
+    __stpncpy_chk;
+    __wcscpy_chk; __wmemcpy_chk; __wmemmove_chk; __wmempcpy_chk; __wcpcpy_chk;
+    __wcsncpy_chk; __wcscat_chk; __wcsncat_chk; __wmemset_chk; __wcpncpy_chk;
+    __swprintf_chk; __vswprintf_chk; __wprintf_chk; __fwprintf_chk;
+    __vwprintf_chk; __vfwprintf_chk; __fgetws_chk; __fgetws_unlocked_chk;
+    __confstr_chk; __getgroups_chk; __ttyname_r_chk; __getlogin_r_chk;
+    __gethostname_chk; __getdomainname_chk; __wcrtomb_chk; __mbsnrtowcs_chk;
+    __wcsnrtombs_chk; __mbsrtowcs_chk; __wcsrtombs_chk;
 
     __stack_chk_fail;
   }
diff --git a/debug/confstr_chk.c b/debug/confstr_chk.c
new file mode 100644
index 0000000000..dae7714fcf
--- /dev/null
+++ b/debug/confstr_chk.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@readhat.com>, 20055.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <unistd.h>
+
+
+size_t
+__confstr_chk (int name, char *buf, size_t len, size_t buflen)
+{
+  if (__builtin_expect (buflen < len, 0))
+    __chk_fail ();
+
+  return confstr (name, buf, len);
+}
diff --git a/debug/fgetws_chk.c b/debug/fgetws_chk.c
new file mode 100644
index 0000000000..d080ccb473
--- /dev/null
+++ b/debug/fgetws_chk.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2001, 2005
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include "libioP.h"
+#include <wchar.h>
+#include <sys/param.h>
+
+wchar_t *
+__fgetws_chk (wchar_t *buf, size_t size, int n, _IO_FILE *fp)
+{
+  _IO_size_t count;
+  wchar_t *result;
+  int old_error;
+  CHECK_FILE (fp, NULL);
+  if (n <= 0)
+    return NULL;
+  _IO_acquire_lock (fp);
+  /* This is very tricky since a file descriptor may be in the
+     non-blocking mode. The error flag doesn't mean much in this
+     case. We return an error only when there is a new error. */
+  old_error = fp->_IO_file_flags & _IO_ERR_SEEN;
+  fp->_IO_file_flags &= ~_IO_ERR_SEEN;
+  count = _IO_getwline (fp, buf, MIN ((size_t) n - 1, size), L'\n', 1);
+  /* If we read in some bytes and errno is EAGAIN, that error will
+     be reported for next read. */
+  if (count == 0 || (_IO_ferror_unlocked (fp) && errno != EAGAIN))
+    result = NULL;
+  else if (count >= size)
+    __chk_fail ();
+  else
+    {
+      buf[count] = '\0';
+      result = buf;
+    }
+  fp->_IO_file_flags |= old_error;
+  _IO_release_lock (fp);
+  return result;
+}
diff --git a/debug/fgetws_u_chk.c b/debug/fgetws_u_chk.c
new file mode 100644
index 0000000000..b6cc87b80d
--- /dev/null
+++ b/debug/fgetws_u_chk.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 1993, 95, 96, 97, 98, 99, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.
+
+   As a special exception, if you link the code in this file with
+   files compiled with a GNU compiler to produce an executable,
+   that does not cause the resulting executable to be covered by
+   the GNU Lesser General Public License.  This exception does not
+   however invalidate any other reasons why the executable file
+   might be covered by the GNU Lesser General Public License.
+   This exception applies to code released by its copyright holders
+   in files containing the exception.  */
+
+#include "libioP.h"
+#include <wchar.h>
+#include <sys/param.h>
+
+wchar_t *
+__fgetws_unlocked_chk (wchar_t *buf, size_t size, int n, _IO_FILE *fp)
+{
+  _IO_size_t count;
+  wchar_t *result;
+  int old_error;
+  CHECK_FILE (fp, NULL);
+  if (n <= 0)
+    return NULL;
+  /* This is very tricky since a file descriptor may be in the
+     non-blocking mode. The error flag doesn't mean much in this
+     case. We return an error only when there is a new error. */
+  old_error = fp->_IO_file_flags & _IO_ERR_SEEN;
+  fp->_IO_file_flags &= ~_IO_ERR_SEEN;
+  count = _IO_getwline (fp, buf, MIN ((size_t) n - 1, size), L'\n', 1);
+  /* If we read in some bytes and errno is EAGAIN, that error will
+     be reported for next read. */
+  if (count == 0 || ((fp->_IO_file_flags & _IO_ERR_SEEN)
+  		     && errno != EAGAIN))
+    result = NULL;
+  else if (count >= size)
+    __chk_fail ();
+  else
+    {
+      buf[count] = '\0';
+      result = buf;
+    }
+  fp->_IO_file_flags |= old_error;
+  return result;
+}
diff --git a/debug/fwprintf_chk.c b/debug/fwprintf_chk.c
new file mode 100644
index 0000000000..710c89f3c8
--- /dev/null
+++ b/debug/fwprintf_chk.c
@@ -0,0 +1,45 @@
+/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdarg.h>
+#include <wchar.h>
+#include "../libio/libioP.h"
+
+
+/* Write formatted output to FP from the format string FORMAT.  */
+int
+__fwprintf_chk (FILE *fp, int flag, const wchar_t *format, ...)
+{
+  va_list ap;
+  int done;
+
+  _IO_acquire_lock (fp);
+  if (flag > 0)
+    fp->_flags2 |= _IO_FLAGS2_FORTIFY;
+
+  va_start (ap, format);
+  done = _IO_vfwprintf (fp, format, ap);
+  va_end (ap);
+
+  if (flag > 0)
+    fp->_flags2 &= ~_IO_FLAGS2_FORTIFY;
+  _IO_release_lock (fp);
+
+  return done;
+}
diff --git a/debug/getdomainname_chk.c b/debug/getdomainname_chk.c
new file mode 100644
index 0000000000..a85464589b
--- /dev/null
+++ b/debug/getdomainname_chk.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <unistd.h>
+
+
+int
+__getdomainname_chk (char *buf, size_t buflen, size_t nreal)
+{
+  if (buflen > nreal)
+    __chk_fail ();
+
+  return getdomainname (buf, buflen);
+}
diff --git a/debug/getgroups_chk.c b/debug/getgroups_chk.c
new file mode 100644
index 0000000000..6401b023d3
--- /dev/null
+++ b/debug/getgroups_chk.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <errno.h>
+#include <unistd.h>
+
+
+char *
+__getgroups_chk (int size, __gid_t list[], size_t listlen)
+{
+  if (__builtin_expect (size * sizeof (__gid_t) > listlen, 0))
+    __chk_fail ();
+
+  return __getgroups (size, list);
+}
diff --git a/debug/gethostname_chk.c b/debug/gethostname_chk.c
new file mode 100644
index 0000000000..734cc56b0b
--- /dev/null
+++ b/debug/gethostname_chk.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <unistd.h>
+
+
+int
+__gethostname_chk (char *buf, size_t buflen, size_t nreal)
+{
+  if (buflen > nreal)
+    __chk_fail ();
+
+  return __gethostname (buf, buflen);
+}
diff --git a/debug/getlogin_r_chk.c b/debug/getlogin_r_chk.c
new file mode 100644
index 0000000000..ae495cd7ab
--- /dev/null
+++ b/debug/getlogin_r_chk.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <unistd.h>
+
+
+int
+__getlogin_r_chk (char *buf, size_t buflen, size_t nreal)
+{
+  if (buflen > nreal)
+    __chk_fail ();
+
+  return getlogin_r (buf, buflen);
+}
diff --git a/debug/mbsnrtowcs_chk.c b/debug/mbsnrtowcs_chk.c
new file mode 100644
index 0000000000..2041eac87f
--- /dev/null
+++ b/debug/mbsnrtowcs_chk.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <locale.h>
+#include <wchar.h>
+
+
+size_t
+__mbsnrtowcs_chk (wchar_t *dst, __const char **src, size_t nmc, size_t len,
+		  mbstate_t *ps, size_t dstlen)
+{
+  if (__builtin_expect (dstlen < len * sizeof (wchar_t), 0))
+    __chk_fail ();
+
+  return __mbsnrtowcs (dst, src, nmc, len, ps);
+}
diff --git a/debug/mbsrtowcs_chk.c b/debug/mbsrtowcs_chk.c
new file mode 100644
index 0000000000..fd4b3bf76b
--- /dev/null
+++ b/debug/mbsrtowcs_chk.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <locale.h>
+#include <wchar.h>
+
+
+size_t
+__mbsrtowcs_chk (wchar_t *dst, __const char **src, size_t len,
+		 mbstate_t *ps, size_t dstlen)
+{
+  if (__builtin_expect (dstlen < len * sizeof (wchar_t), 0))
+    __chk_fail ();
+
+  return __mbsrtowcs (dst, src, len, ps);
+}
diff --git a/debug/ptsname_r_chk.c b/debug/ptsname_r_chk.c
new file mode 100644
index 0000000000..5f03592bd1
--- /dev/null
+++ b/debug/ptsname_r_chk.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdlib.h>
+
+
+int
+__ptsname_r_chk (int fd, char *buf, size_t buflen, size_t nreal)
+{
+  if (buflen > nreal)
+    __chk_fail ();
+
+  return __ptsname_r (fd, buf, buflen);
+}
diff --git a/debug/realpath_chk.c b/debug/realpath_chk.c
new file mode 100644
index 0000000000..961aea0b85
--- /dev/null
+++ b/debug/realpath_chk.c
@@ -0,0 +1,60 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+
+char *
+__realpath_chk (const char *buf, char *resolved, size_t resolvedlen)
+{
+#ifdef PATH_MAX
+  if (resolvedlen < PATH_MAX)
+    __chk_fail ();
+
+  return __realpath (buf, resolved);
+#else
+  long int pathmax =__pathconf (buf, _PC_PATH_MAX);
+  if (pathmax != -1)
+    {
+      /* We do have a fixed limit.  */
+      if (resolvedlen < pathmax)
+	__chk_fail ();
+
+      return __realpath (buf, resolved);
+    }
+
+  /* Since there is no fixed limit we check whether the size is large
+     enough.  */
+  char *res = __realpath (buf, NULL);
+  if (res != NULL)
+    {
+      size_t actlen = strlen (res) + 1;
+      if (actlen > resolvedlen)
+	__chk_fail ();
+
+      memcpy (resolved, res, actlen);
+      free (res);
+      res = resolved;
+    }
+
+  return res;
+#endif
+}
diff --git a/debug/swprintf_chk.c b/debug/swprintf_chk.c
new file mode 100644
index 0000000000..554cbe66a3
--- /dev/null
+++ b/debug/swprintf_chk.c
@@ -0,0 +1,37 @@
+/* Copyright (C) 1991,1995,1997,1998,1999,2000,2003,2005
+	Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdarg.h>
+#include <wchar.h>
+
+/* Write formatted output into S, according to the format string FORMAT.  */
+/* VARARGS5 */
+int
+__swprintf_chk (wchar_t *s, size_t n, int flag, size_t s_len,
+		const wchar_t *format, ...)
+{
+  va_list arg;
+  int done;
+
+  va_start (arg, format);
+  done = __vswprintf_chk (s, n, flag, s_len, format, arg);
+  va_end (arg);
+
+  return done;
+}
diff --git a/debug/tst-chk1.c b/debug/tst-chk1.c
index dca41ab6dc..f444a14c2a 100644
--- a/debug/tst-chk1.c
+++ b/debug/tst-chk1.c
@@ -21,15 +21,17 @@
 #define __noreturn__
 
 #include <fcntl.h>
+#include <locale.h>
 #include <paths.h>
 #include <setjmp.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
+#include <wchar.h>
 #include <sys/socket.h>
 #include <sys/un.h>
-#include <unistd.h>
 
 char *temp_filename;
 static void do_prepare (void);
@@ -74,13 +76,20 @@ handler (int sig)
 }
 
 char buf[10];
+wchar_t wbuf[10];
 volatile size_t l0;
 volatile char *p;
+volatile wchar_t *wp;
 const char *str1 = "JIHGFEDCBA";
 const char *str2 = "F";
 const char *str3 = "%s%n%s%n";
 const char *str4 = "Hello, ";
 const char *str5 = "World!\n";
+const wchar_t *wstr1 = L"JIHGFEDCBA";
+const wchar_t *wstr2 = L"F";
+const wchar_t *wstr3 = L"%s%n%s%n";
+const wchar_t *wstr4 = L"Hello, ";
+const wchar_t *wstr5 = L"World!\n";
 char buf2[10] = "%s";
 int num1 = 67;
 int num2 = 987654;
@@ -125,6 +134,7 @@ do_test (void)
   setenv ("LIBC_FATAL_STDERR_", "1", 1);
 
   struct A { char buf1[9]; char buf2[1]; } a;
+  struct wA { wchar_t buf1[9]; wchar_t buf2[1]; } wa;
 
   printf ("Test checking routines at fortify level %d\n",
 #ifdef __USE_FORTIFY_LEVEL
@@ -140,7 +150,8 @@ do_test (void)
   if (memcmp (buf, "aabcdefghi", 10))
     FAIL ();
 
-  if (mempcpy (buf + 5, "abcde", 5) != buf + 10 || memcmp (buf, "aabcdabcde", 10))
+  if (mempcpy (buf + 5, "abcde", 5) != buf + 10
+      || memcmp (buf, "aabcdabcde", 10))
     FAIL ();
 
   memset (buf + 8, 'j', 2);
@@ -171,7 +182,8 @@ do_test (void)
   if (memcmp (buf, "aabcdefghi", 10))
     FAIL ();
 
-  if (mempcpy (buf + 5, "abcde", l0 + 5) != buf + 10 || memcmp (buf, "aabcdabcde", 10))
+  if (mempcpy (buf + 5, "abcde", l0 + 5) != buf + 10
+      || memcmp (buf, "aabcdabcde", 10))
     FAIL ();
 
   memset (buf + 8, 'j', l0 + 2);
@@ -189,20 +201,24 @@ do_test (void)
   if (memcmp (buf, "aabcEDX\0\0", 10))
     FAIL ();
 
-  if (sprintf (buf + 7, "%d", num1) != 2 || memcmp (buf, "aabcEDX67", 10))
+  if (stpncpy (buf + 5, "cd", l0 + 5) != buf + 7
+      || memcmp (buf, "aabcEcd\0\0", 10))
+    FAIL ();
+
+  if (sprintf (buf + 7, "%d", num1) != 2 || memcmp (buf, "aabcEcd67", 10))
     FAIL ();
 
-  if (snprintf (buf + 7, 3, "%d", num2) != 6 || memcmp (buf, "aabcEDX98", 10))
+  if (snprintf (buf + 7, 3, "%d", num2) != 6 || memcmp (buf, "aabcEcd98", 10))
     FAIL ();
 
   buf[l0 + 8] = '\0';
   strcat (buf, "A");
-  if (memcmp (buf, "aabcEDX9A", 10))
+  if (memcmp (buf, "aabcEcd9A", 10))
     FAIL ();
 
   buf[l0 + 7] = '\0';
   strncat (buf, "ZYXWV", l0 + 2);
-  if (memcmp (buf, "aabcEDXZY", 10))
+  if (memcmp (buf, "aabcEcdZY", 10))
     FAIL ();
 
   memcpy (a.buf1, "abcdefghij", l0 + 10);
@@ -226,14 +242,16 @@ do_test (void)
   if (memcmp (a.buf1, "aabcEDCBA", 10))
     FAIL ();
 
-  if (stpcpy (a.buf1 + 8, str2) != a.buf1 + 9 || memcmp (a.buf1, "aabcEDCBF", 10))
+  if (stpcpy (a.buf1 + 8, str2) != a.buf1 + 9
+      || memcmp (a.buf1, "aabcEDCBF", 10))
     FAIL ();
 
   strncpy (a.buf1 + 6, "X", l0 + 4);
   if (memcmp (a.buf1, "aabcEDX\0\0", 10))
     FAIL ();
 
-  if (sprintf (a.buf1 + 7, "%d", num1) != 2 || memcmp (a.buf1, "aabcEDX67", 10))
+  if (sprintf (a.buf1 + 7, "%d", num1) != 2
+      || memcmp (a.buf1, "aabcEDX67", 10))
     FAIL ();
 
   if (snprintf (a.buf1 + 7, 3, "%d", num2) != 6
@@ -284,6 +302,10 @@ do_test (void)
   CHK_FAIL_END
 
   CHK_FAIL_START
+  stpncpy (buf + 6, "cd", l0 + 5);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
   sprintf (buf + 8, "%d", num1);
   CHK_FAIL_END
 
@@ -354,6 +376,215 @@ do_test (void)
   CHK_FAIL_END
 #endif
 
+
+  /* These ops can be done without runtime checking of object size.  */
+  wmemcpy (wbuf, L"abcdefghij", 10);
+  wmemmove (wbuf + 1, wbuf, 9);
+  if (wmemcmp (wbuf, L"aabcdefghi", 10))
+    FAIL ();
+
+  if (wmempcpy (wbuf + 5, L"abcde", 5) != wbuf + 10
+      || wmemcmp (wbuf, L"aabcdabcde", 10))
+    FAIL ();
+
+  wmemset (wbuf + 8, L'j', 2);
+  if (wmemcmp (wbuf, L"aabcdabcjj", 10))
+    FAIL ();
+
+  wcscpy (wbuf + 4, L"EDCBA");
+  if (wmemcmp (wbuf, L"aabcEDCBA", 10))
+    FAIL ();
+
+  if (wcpcpy (wbuf + 8, L"F") != wbuf + 9 || wmemcmp (wbuf, L"aabcEDCBF", 10))
+    FAIL ();
+
+  wcsncpy (wbuf + 6, L"X", 4);
+  if (wmemcmp (wbuf, L"aabcEDX\0\0", 10))
+    FAIL ();
+
+  if (swprintf (wbuf + 7, 3, L"%ls", L"987654") >= 0
+      || wmemcmp (wbuf, L"aabcEDX98", 10))
+    FAIL ();
+
+  /* These ops need runtime checking, but shouldn't __chk_fail.  */
+  wmemcpy (wbuf, L"abcdefghij", l0 + 10);
+  wmemmove (wbuf + 1, wbuf, l0 + 9);
+  if (wmemcmp (wbuf, L"aabcdefghi", 10))
+    FAIL ();
+
+  if (wmempcpy (wbuf + 5, L"abcde", l0 + 5) != wbuf + 10
+      || wmemcmp (wbuf, L"aabcdabcde", 10))
+    FAIL ();
+
+  wmemset (wbuf + 8, L'j', l0 + 2);
+  if (wmemcmp (wbuf, L"aabcdabcjj", 10))
+    FAIL ();
+
+  wcscpy (wbuf + 4, wstr1 + 5);
+  if (wmemcmp (wbuf, L"aabcEDCBA", 10))
+    FAIL ();
+
+  if (wcpcpy (wbuf + 8, wstr2) != wbuf + 9 || wmemcmp (wbuf, L"aabcEDCBF", 10))
+    FAIL ();
+
+  wcsncpy (wbuf + 6, L"X", l0 + 4);
+  if (wmemcmp (wbuf, L"aabcEDX\0\0", 10))
+    FAIL ();
+
+  if (wcpncpy (wbuf + 5, L"cd", l0 + 5) != wbuf + 7
+      || wmemcmp (wbuf, L"aabcEcd\0\0", 10))
+    FAIL ();
+
+  if (swprintf (wbuf + 7, 3, L"%d", num2) >= 0
+      || wmemcmp (wbuf, L"aabcEcd98", 10))
+    FAIL ();
+
+  wbuf[l0 + 8] = L'\0';
+  wcscat (wbuf, L"A");
+  if (wmemcmp (wbuf, L"aabcEcd9A", 10))
+    FAIL ();
+
+  wbuf[l0 + 7] = L'\0';
+  wcsncat (wbuf, L"ZYXWV", l0 + 2);
+  if (wmemcmp (wbuf, L"aabcEcdZY", 10))
+    FAIL ();
+
+  wmemcpy (wa.buf1, L"abcdefghij", l0 + 10);
+  wmemmove (wa.buf1 + 1, wa.buf1, l0 + 9);
+  if (wmemcmp (wa.buf1, L"aabcdefghi", 10))
+    FAIL ();
+
+  if (wmempcpy (wa.buf1 + 5, L"abcde", l0 + 5) != wa.buf1 + 10
+      || wmemcmp (wa.buf1, L"aabcdabcde", 10))
+    FAIL ();
+
+  wmemset (wa.buf1 + 8, L'j', l0 + 2);
+  if (wmemcmp (wa.buf1, L"aabcdabcjj", 10))
+    FAIL ();
+
+#if __USE_FORTIFY_LEVEL < 2
+  /* The following tests are supposed to crash with -D_FORTIFY_SOURCE=2
+     and sufficient GCC support, as the string operations overflow
+     from a.buf1 into a.buf2.  */
+  wcscpy (wa.buf1 + 4, wstr1 + 5);
+  if (wmemcmp (wa.buf1, L"aabcEDCBA", 10))
+    FAIL ();
+
+  if (wcpcpy (wa.buf1 + 8, wstr2) != wa.buf1 + 9
+      || wmemcmp (wa.buf1, L"aabcEDCBF", 10))
+    FAIL ();
+
+  wcsncpy (wa.buf1 + 6, L"X", l0 + 4);
+  if (wmemcmp (wa.buf1, L"aabcEDX\0\0", 10))
+    FAIL ();
+
+  if (swprintf (wa.buf1 + 7, 3, L"%d", num2) >= 0
+      || wmemcmp (wa.buf1, L"aabcEDX98", 10))
+    FAIL ();
+
+  wa.buf1[l0 + 8] = L'\0';
+  wcscat (wa.buf1, L"A");
+  if (wmemcmp (wa.buf1, L"aabcEDX9A", 10))
+    FAIL ();
+
+  wa.buf1[l0 + 7] = L'\0';
+  wcsncat (wa.buf1, L"ZYXWV", l0 + 2);
+  if (wmemcmp (wa.buf1, L"aabcEDXZY", 10))
+    FAIL ();
+
+#endif
+
+#if __USE_FORTIFY_LEVEL >= 1
+  /* Now check if all buffer overflows are caught at runtime.  */
+
+  CHK_FAIL_START
+  wmemcpy (wbuf + 1, L"abcdefghij", l0 + 10);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wmemmove (wbuf + 2, wbuf + 1, l0 + 9);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+    wp = wmempcpy (wbuf + 6, L"abcde", l0 + 5);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wmemset (wbuf + 9, L'j', l0 + 2);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wcscpy (wbuf + 5, wstr1 + 5);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wp = wcpcpy (wbuf + 9, wstr2);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wcsncpy (wbuf + 7, L"X", l0 + 4);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wcpncpy (wbuf + 6, L"cd", l0 + 5);
+  CHK_FAIL_END
+
+  wmemcpy (wbuf, wstr1 + 2, l0 + 9);
+  CHK_FAIL_START
+  wcscat (wbuf, L"AB");
+  CHK_FAIL_END
+
+  wmemcpy (wbuf, wstr1 + 3, l0 + 8);
+  CHK_FAIL_START
+  wcsncat (wbuf, L"ZYXWV", l0 + 3);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wmemcpy (wa.buf1 + 1, L"abcdefghij", l0 + 10);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wmemmove (wa.buf1 + 2, wa.buf1 + 1, l0 + 9);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wp = wmempcpy (wa.buf1 + 6, L"abcde", l0 + 5);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wmemset (wa.buf1 + 9, L'j', l0 + 2);
+  CHK_FAIL_END
+
+#if __USE_FORTIFY_LEVEL >= 2
+# define O 0
+#else
+# define O 1
+#endif
+
+  CHK_FAIL_START
+  wcscpy (wa.buf1 + (O + 4), wstr1 + 5);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wp = wcpcpy (wa.buf1 + (O + 8), wstr2);
+  CHK_FAIL_END
+
+  CHK_FAIL_START
+  wcsncpy (wa.buf1 + (O + 6), L"X", l0 + 4);
+  CHK_FAIL_END
+
+  wmemcpy (wa.buf1, wstr1 + (3 - O), l0 + 8 + O);
+  CHK_FAIL_START
+  wcscat (wa.buf1, L"AB");
+  CHK_FAIL_END
+
+  wmemcpy (wa.buf1, wstr1 + (4 - O), l0 + 7 + O);
+  CHK_FAIL_START
+  wcsncat (wa.buf1, L"ZYXWV", l0 + 3);
+  CHK_FAIL_END
+#endif
+
+
   /* Now checks for %n protection.  */
 
   /* Constant literals passed directly are always ok
@@ -794,5 +1025,236 @@ do_test (void)
   if (rmdir (fname) != 0)
     FAIL ();
 
+
+#if PATH_MAX > 0
+  char largebuf[PATH_MAX];
+  char *realres = realpath (".", largebuf);
+#endif
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  char realbuf[1];
+  realres = realpath (".", realbuf);
+  CHK_FAIL_END
+#endif
+
+  if (setlocale (LC_ALL, "de_DE.UTF-8") != NULL)
+    {
+      /* First a simple test.  */
+      char enough[MB_CUR_MAX];
+      if (wctomb (enough, L'A') != 1)
+	{
+	  puts ("first wctomb test failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      /* We know the wchar_t encoding is ISO 10646.  So pick a
+	 character which has a multibyte representation which does not
+	 fit.  */
+      CHK_FAIL_START
+      char smallbuf[2];
+      if (wctomb (smallbuf, L'\x100') != 2)
+	{
+	  puts ("second wctomb test failed");
+	  ret = 1;
+	}
+      CHK_FAIL_END
+#endif
+
+      mbstate_t s;
+      memset (&s, '\0', sizeof (s));
+      if (wcrtomb (enough, L'A', &s) != 1)
+	{
+	  puts ("first wcrtomb test failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      /* We know the wchar_t encoding is ISO 10646.  So pick a
+	 character which has a multibyte representation which does not
+	 fit.  */
+      CHK_FAIL_START
+      char smallbuf[2];
+      if (wcrtomb (smallbuf, L'\x100', &s) != 2)
+	{
+	  puts ("second wcrtomb test failed");
+	  ret = 1;
+	}
+      CHK_FAIL_END
+#endif
+
+      wchar_t wenough[10];
+      memset (&s, '\0', sizeof (s));
+      const char *cp = "A";
+      if (mbsrtowcs (wenough, &cp, 10, &s) != 1)
+	{
+	  puts ("first mbsrtowcs test failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      /* We know the wchar_t encoding is ISO 10646.  So pick a
+	 character which has a multibyte representation which does not
+	 fit.  */
+      CHK_FAIL_START
+      wchar_t wsmallbuf[2];
+      cp = "ABC";
+      mbsrtowcs (wsmallbuf, &cp, 10, &s);
+      CHK_FAIL_END
+#endif
+
+      memset (&s, '\0', sizeof (s));
+      cp = "A";
+      if (mbsnrtowcs (wenough, &cp, 1, 10, &s) != 1)
+	{
+	  puts ("first mbsnrtowcs test failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      /* We know the wchar_t encoding is ISO 10646.  So pick a
+	 character which has a multibyte representation which does not
+	 fit.  */
+      CHK_FAIL_START
+      wchar_t wsmallbuf[2];
+      cp = "ABC";
+      mbsnrtowcs (wsmallbuf, &cp, 3, 10, &s);
+      CHK_FAIL_END
+#endif
+
+      memset (&s, '\0', sizeof (s));
+      const wchar_t *wcp = L"A";
+      if (wcsrtombs (enough, &wcp, 10, &s) != 1)
+	{
+	  puts ("first wcsrtombs test failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      /* We know the wchar_t encoding is ISO 10646.  So pick a
+	 character which has a multibyte representation which does not
+	 fit.  */
+      CHK_FAIL_START
+      char smallbuf[2];
+      wcp = L"ABC";
+      wcsrtombs (smallbuf, &wcp, 10, &s);
+      CHK_FAIL_END
+#endif
+
+      memset (&s, '\0', sizeof (s));
+      wcp = L"A";
+      if (wcsnrtombs (enough, &wcp, 1, 10, &s) != 1)
+	{
+	  puts ("first wcsnrtombs test failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      /* We know the wchar_t encoding is ISO 10646.  So pick a
+	 character which has a multibyte representation which does not
+	 fit.  */
+      CHK_FAIL_START
+      char smallbuf[2];
+      wcp = L"ABC";
+      wcsnrtombs (smallbuf, &wcp, 3, 10, &s);
+      CHK_FAIL_END
+#endif
+    }
+  else
+    {
+      puts ("cannot set locale");
+      ret = 1;
+    }
+
+  fd = posix_openpt (O_RDWR);
+  if (fd != -1)
+    {
+      char enough[1000];
+      if (ptsname_r (fd, enough, sizeof (enough)) != 0)
+	{
+	  puts ("first ptsname_r failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      CHK_FAIL_START
+      char smallbuf[2];
+      if (ptsname_r (fd, smallbuf, sizeof (smallbuf) + 1) == 0)
+	{
+	  puts ("second ptsname_r somehow suceeded");
+	  ret = 1;
+	}
+      CHK_FAIL_END
+#endif
+      close (fd);
+    }
+
+  confstr (_CS_GNU_LIBC_VERSION, largebuf, sizeof (largebuf));
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  char smallbuf[1];
+  confstr (_CS_GNU_LIBC_VERSION, smallbuf, sizeof (largebuf));
+  CHK_FAIL_END
+#endif
+
+  gid_t grpslarge[5];
+  int ngr = getgroups (5, grpslarge);
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  char smallbuf[1];
+  ngr = getgroups (5, (gid_t *) smallbuf);
+  CHK_FAIL_END
+#endif
+
+  fd = open (_PATH_TTY, O_RDONLY);
+  if (fd != -1)
+    {
+      char enough[1000];
+      if (ttyname_r (fd, enough, sizeof (enough)) != 0)
+	{
+	  puts ("first ttyname_r failed");
+	  ret = 1;
+	}
+
+#if __USE_FORTIFY_LEVEL >= 1
+      CHK_FAIL_START
+      char smallbuf[2];
+      if (ttyname_r (fd, smallbuf, sizeof (smallbuf) + 1) == 0)
+	{
+	  puts ("second ttyname_r somehow suceeded");
+	  ret = 1;
+	}
+      CHK_FAIL_END
+#endif
+      close (fd);
+    }
+
+  char hostnamelarge[1000];
+  gethostname (hostnamelarge, sizeof (hostnamelarge));
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  char smallbuf[1];
+  gethostname (smallbuf, sizeof (hostnamelarge));
+  CHK_FAIL_END
+#endif
+
+  char loginlarge[1000];
+  getlogin_r (loginlarge, sizeof (hostnamelarge));
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  char smallbuf[1];
+  getlogin_r (smallbuf, sizeof (loginlarge));
+  CHK_FAIL_END
+#endif
+
+  char domainnamelarge[1000];
+  int res = getdomainname (domainnamelarge, sizeof (domainnamelarge));
+#if __USE_FORTIFY_LEVEL >= 1
+  CHK_FAIL_START
+  char smallbuf[1];
+  res = getdomainname (smallbuf, sizeof (domainnamelarge));
+  CHK_FAIL_END
+#endif
+
   return ret;
 }
diff --git a/debug/ttyname_r_chk.c b/debug/ttyname_r_chk.c
new file mode 100644
index 0000000000..9b06d5a718
--- /dev/null
+++ b/debug/ttyname_r_chk.c
@@ -0,0 +1,29 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <unistd.h>
+
+
+int
+__ttyname_r_chk (int fd, char *buf, size_t buflen, size_t nreal)
+{
+  if (buflen > nreal)
+    __chk_fail ();
+
+  return __ttyname_r (fd, buf, buflen);
+}
diff --git a/debug/vfwprintf_chk.c b/debug/vfwprintf_chk.c
new file mode 100644
index 0000000000..d4af557ae4
--- /dev/null
+++ b/debug/vfwprintf_chk.c
@@ -0,0 +1,42 @@
+/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdarg.h>
+#include <wchar.h>
+#include "../libio/libioP.h"
+
+
+/* Write formatted output to FP from the format string FORMAT.  */
+int
+__vfwprintf_chk (FILE *fp, int flag, const wchar_t *format, va_list ap)
+{
+  int done;
+
+  _IO_acquire_lock (fp);
+  if (flag > 0)
+    fp->_flags2 |= _IO_FLAGS2_FORTIFY;
+
+  done = _IO_vfwprintf (fp, format, ap);
+
+  if (flag > 0)
+    fp->_flags2 &= ~_IO_FLAGS2_FORTIFY;
+  _IO_release_lock (fp);
+
+  return done;
+}
diff --git a/debug/vswprintf_chk.c b/debug/vswprintf_chk.c
new file mode 100644
index 0000000000..f9a50c6e5d
--- /dev/null
+++ b/debug/vswprintf_chk.c
@@ -0,0 +1,75 @@
+/* Copyright (C) 1991,1995,1997,1998,2004,2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdarg.h>
+#include <wchar.h>
+#include "../libio/libioP.h"
+#include "../libio/strfile.h"
+
+
+/* Write formatted output into S, according to the format
+   string FORMAT, writing no more than MAXLEN characters.  */
+/* VARARGS5 */
+int
+__vswprintf_chk (wchar_t *s, size_t maxlen, int flags, size_t slen,
+		 const wchar_t *format, va_list args)
+{
+  /* XXX Maybe for less strict version do not fail immediately.
+     Though, maxlen is supposed to be the size of buffer pointed
+     to by s, so a conforming program can't pass such maxlen
+     to *snprintf.  */
+  if (__builtin_expect (slen < maxlen, 0))
+    __chk_fail ();
+
+  _IO_wstrnfile sf;
+  struct _IO_wide_data wd;
+  int ret;
+#ifdef _IO_MTSAFE_IO
+  sf.f._sbf._f._lock = NULL;
+#endif
+
+  /* We need to handle the special case where MAXLEN is 0.  Use the
+     overflow buffer right from the start.  */
+  if (__builtin_expect (maxlen == 0, 0))
+    /* Since we have to write at least the terminating L'\0' a buffer
+       length of zero always makes the function fail.  */
+    return -1;
+
+  _IO_no_init (&sf.f._sbf._f, _IO_USER_LOCK, 0, &wd, &_IO_wstrn_jumps);
+  _IO_fwide (&sf.f._sbf._f, 1);
+  s[0] = L'\0';
+
+  /* For flags > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n
+     can only come from read-only format strings.  */
+  if (flags > 0)
+    sf.f._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY;
+
+  _IO_wstr_init_static (&sf.f._sbf._f, s, maxlen - 1, s);
+  ret = _IO_vfwprintf ((_IO_FILE *) &sf.f._sbf, format, args);
+
+  if (sf.f._sbf._f._wide_data->_IO_buf_base == sf.overflow_buf)
+    /* ISO C99 requires swprintf/vswprintf to return an error if the
+       output does not fit int he provided buffer.  */
+    return -1;
+
+  /* Terminate the string.  */
+  *sf.f._sbf._f._wide_data->_IO_write_ptr = '\0';
+
+  return ret;
+}
+libc_hidden_def (__vswprintf_chk)
diff --git a/debug/vwprintf_chk.c b/debug/vwprintf_chk.c
new file mode 100644
index 0000000000..3b959b2968
--- /dev/null
+++ b/debug/vwprintf_chk.c
@@ -0,0 +1,43 @@
+/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <wchar.h>
+#include "../libio/libioP.h"
+
+
+/* Write formatted output to stdout from the format string FORMAT.  */
+int
+__vwprintf_chk (int flag, const wchar_t *format, va_list ap)
+{
+  int done;
+
+  _IO_acquire_lock (stdout);
+  if (flag > 0)
+    stdout->_flags2 |= _IO_FLAGS2_FORTIFY;
+
+  done = _IO_vfwprintf (stdout, format, ap);
+
+  if (flag > 0)
+    stdout->_flags2 &= ~_IO_FLAGS2_FORTIFY;
+  _IO_release_lock (stdout);
+
+  return done;
+}
diff --git a/debug/wcpcpy_chk.c b/debug/wcpcpy_chk.c
new file mode 100644
index 0000000000..c48ec68ccc
--- /dev/null
+++ b/debug/wcpcpy_chk.c
@@ -0,0 +1,45 @@
+/* Copyright (C) 1996, 1997, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+
+#define __need_ptrdiff_t
+#include <stddef.h>
+
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in
+   DEST.  Check for overflows.  */
+wchar_t *
+__wcpcpy_chk (wchar_t *dest, const wchar_t *src, size_t destlen)
+{
+  wchar_t *wcp = (wchar_t *) dest - 1;
+  wint_t c;
+  const ptrdiff_t off = src - dest + 1;
+
+  do
+    {
+      if (__builtin_expect (destlen-- == 0, 0))
+	__chk_fail ();
+      c = wcp[off];
+      *++wcp = c;
+    }
+  while (c != L'\0');
+
+  return wcp;
+}
diff --git a/debug/wcpncpy_chk.c b/debug/wcpncpy_chk.c
new file mode 100644
index 0000000000..ea1340191a
--- /dev/null
+++ b/debug/wcpncpy_chk.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 1995, 1996, 1997, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+
+
+/* Copy no more than N wide-characters of SRC to DEST.	*/
+wchar_t *
+__wcpncpy_chk (wchar_t *dest, const wchar_t *src, size_t n, size_t destlen)
+{
+  if (__builtin_expect (destlen < n, 0))
+    __chk_fail ();
+
+  /* This function is not often enough used to justify not using a
+     tail call.  */
+  return __wcpncpy (dest, src, n);
+}
diff --git a/debug/wcrtomb_chk.c b/debug/wcrtomb_chk.c
new file mode 100644
index 0000000000..228430f373
--- /dev/null
+++ b/debug/wcrtomb_chk.c
@@ -0,0 +1,35 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <langinfo.h>
+#include <locale.h>
+#include <stdlib.h>
+#include <wchar.h>
+#include <locale/localeinfo.h>
+
+
+size_t
+__wcrtomb_chk (char *s, wchar_t wchar, mbstate_t *ps, size_t buflen)
+{
+  /* We do not have to implement the full wctomb semantics since we
+     know that S cannot be NULL when we come here.  */
+  if (buflen < MB_CUR_MAX)
+    __chk_fail ();
+
+  return __wcrtomb (s, wchar, ps);
+}
diff --git a/debug/wcscat_chk.c b/debug/wcscat_chk.c
new file mode 100644
index 0000000000..eef04519fd
--- /dev/null
+++ b/debug/wcscat_chk.c
@@ -0,0 +1,55 @@
+/* Copyright (C) 1995, 1996, 1997, 2001, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+
+
+/* Append SRC on the end of DEST.  Check for overflows.  */
+wchar_t *
+__wcscat_chk (wchar_t *dest, const wchar_t *src, size_t destlen)
+{
+  register wchar_t *s1 = dest;
+  register const wchar_t *s2 = src;
+  wchar_t c;
+
+  /* Find the end of the string.  */
+  do
+    {
+      if (__builtin_expect (destlen-- == 0, 0))
+	__chk_fail ();
+      c = *s1++;
+    }
+  while (c != L'\0');
+
+  /* Make S1 point before the next character, so we can increment
+     it while memory is read (wins on pipelined cpus).	*/
+  s1 -= 2;
+  ++destlen;
+
+  do
+    {
+      if (__builtin_expect (destlen-- == 0, 0))
+	__chk_fail ();
+      c = *s2++;
+      *++s1 = c;
+    }
+  while (c != L'\0');
+
+  return dest;
+}
diff --git a/debug/wcscpy_chk.c b/debug/wcscpy_chk.c
new file mode 100644
index 0000000000..93b78cd01c
--- /dev/null
+++ b/debug/wcscpy_chk.c
@@ -0,0 +1,61 @@
+/* Copyright (C) 1995, 1996, 1997, 2003, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stddef.h>
+#include <wchar.h>
+
+
+/* Copy SRC to DEST.  */
+wchar_t *
+__wcscpy_chk (wchar_t *dest, const wchar_t *src, size_t n)
+{
+  wint_t c;
+  wchar_t *wcp;
+
+  if (__alignof__ (wchar_t) >= sizeof (wchar_t))
+    {
+      const ptrdiff_t off = dest - src - 1;
+
+      wcp = (wchar_t *) src;
+
+      do
+	{
+	  if (__builtin_expect (n-- == 0, 0))
+	    __chk_fail ();
+	  c = *wcp++;
+	  wcp[off] = c;
+	}
+      while (c != L'\0');
+    }
+  else
+    {
+      wcp = dest;
+
+      do
+	{
+	  if (__builtin_expect (n-- == 0, 0))
+	    __chk_fail ();
+	  c = *src++;
+	  *wcp++ = c;
+	}
+      while (c != L'\0');
+    }
+
+  return dest;
+}
diff --git a/debug/wcsncat_chk.c b/debug/wcsncat_chk.c
new file mode 100644
index 0000000000..b28773ff27
--- /dev/null
+++ b/debug/wcsncat_chk.c
@@ -0,0 +1,96 @@
+/* Copyright (C) 1995, 1996, 1997, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+
+
+/* Append no more than N wide-character of SRC onto DEST.  */
+wchar_t *
+__wcsncat_chk (wchar_t *dest, const wchar_t *src, size_t n, size_t destlen)
+{
+  wchar_t c;
+  wchar_t * const s = dest;
+
+  /* Find the end of DEST.  */
+  do
+    {
+      if (__builtin_expect (destlen-- == 0, 0))
+	__chk_fail ();
+      c = *dest++;
+    }
+  while (c != L'\0');
+
+  /* Make DEST point before next character, so we can increment
+     it while memory is read (wins on pipelined cpus).	*/
+  ++destlen;
+  dest -= 2;
+
+  if (n >= 4)
+    {
+      size_t n4 = n >> 2;
+      do
+	{
+	  if (__builtin_expect (destlen-- == 0, 0))
+	    __chk_fail ();
+	  c = *src++;
+	  *++dest = c;
+	  if (c == L'\0')
+	    return s;
+	  if (__builtin_expect (destlen-- == 0, 0))
+	    __chk_fail ();
+	  c = *src++;
+	  *++dest = c;
+	  if (c == L'\0')
+	    return s;
+	  if (__builtin_expect (destlen-- == 0, 0))
+	    __chk_fail ();
+	  c = *src++;
+	  *++dest = c;
+	  if (c == L'\0')
+	    return s;
+	  if (__builtin_expect (destlen-- == 0, 0))
+	    __chk_fail ();
+	  c = *src++;
+	  *++dest = c;
+	  if (c == L'\0')
+	    return s;
+	} while (--n4 > 0);
+      n &= 3;
+    }
+
+  while (n > 0)
+    {
+      if (__builtin_expect (destlen-- == 0, 0))
+	__chk_fail ();
+      c = *src++;
+      *++dest = c;
+      if (c == L'\0')
+	return s;
+      n--;
+    }
+
+  if (c != L'\0')
+    {
+      if (__builtin_expect (destlen-- == 0, 0))
+	__chk_fail ();
+      *++dest = L'\0';
+    }
+
+  return s;
+}
diff --git a/debug/wcsncpy_chk.c b/debug/wcsncpy_chk.c
new file mode 100644
index 0000000000..199e4b01ab
--- /dev/null
+++ b/debug/wcsncpy_chk.c
@@ -0,0 +1,33 @@
+/* Copyright (C) 1995, 1996, 1997, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+
+
+/* Copy no more than N wide-characters of SRC to DEST.	*/
+wchar_t *
+__wcsncpy_chk (wchar_t *dest, const wchar_t *src, size_t n, size_t destlen)
+{
+  if (__builtin_expect (destlen < n, 0))
+    __chk_fail ();
+
+  /* This function is not often enough used to justify not using a
+     tail call.  */
+  return __wcsncpy (dest, src, n);
+}
diff --git a/debug/wcsnrtombs_chk.c b/debug/wcsnrtombs_chk.c
new file mode 100644
index 0000000000..67644bd557
--- /dev/null
+++ b/debug/wcsnrtombs_chk.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <locale.h>
+#include <wchar.h>
+
+
+size_t
+__wcsnrtombs_chk (char *dst, __const wchar_t **src, size_t nwc, size_t len,
+		  mbstate_t *ps, size_t dstlen)
+{
+  if (__builtin_expect (dstlen < len, 0))
+    __chk_fail ();
+
+  return __wcsnrtombs (dst, src, nwc, len, ps);
+}
diff --git a/debug/wcsrtombs_chk.c b/debug/wcsrtombs_chk.c
new file mode 100644
index 0000000000..9334267bae
--- /dev/null
+++ b/debug/wcsrtombs_chk.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <locale.h>
+#include <wchar.h>
+
+
+size_t
+__wcsrtombs_chk (char *dst, __const wchar_t **src, size_t len,
+		 mbstate_t *ps, size_t dstlen)
+{
+  if (__builtin_expect (dstlen < len, 0))
+    __chk_fail ();
+
+  return __wcsrtombs (dst, src, len, ps);
+}
diff --git a/debug/wctomb_chk.c b/debug/wctomb_chk.c
new file mode 100644
index 0000000000..d0366346b8
--- /dev/null
+++ b/debug/wctomb_chk.c
@@ -0,0 +1,36 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <locale.h>
+#include <stdlib.h>
+#include <wcsmbs/wcsmbsload.h>
+
+
+extern mbstate_t __no_r_state attribute_hidden;	/* Defined in mbtowc.c.  */
+
+
+int
+__wctomb_chk (char *s, wchar_t wchar, size_t buflen)
+{
+  /* We do not have to implement the full wctomb semantics since we
+     know that S cannot be NULL when we come here.  */
+  if (buflen < MB_CUR_MAX)
+    __chk_fail ();
+
+  return __wcrtomb (s, wchar, &__no_r_state);
+}
diff --git a/debug/wmemcpy_chk.c b/debug/wmemcpy_chk.c
new file mode 100644
index 0000000000..eeee927e91
--- /dev/null
+++ b/debug/wmemcpy_chk.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1996, 1997, 1999, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+#include <string.h>
+
+
+wchar_t *
+__wmemcpy_chk (wchar_t *s1, const wchar_t *s2, size_t n, size_t ns1)
+{
+  if (__builtin_expect (ns1 < n, 0))
+    __chk_fail ();
+  return (wchar_t *) memcpy ((char *) s1, (char *) s2, n * sizeof (wchar_t));
+}
diff --git a/debug/wmemmove_chk.c b/debug/wmemmove_chk.c
new file mode 100644
index 0000000000..da0446eb28
--- /dev/null
+++ b/debug/wmemmove_chk.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1996, 1997, 1999, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper, <drepper@gnu.ai.mit.edu>
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+#include <string.h>
+
+
+wchar_t *
+__wmemmove_chk (wchar_t *s1, const wchar_t *s2, size_t n, size_t ns1)
+{
+  if (__builtin_expect (ns1 < n, 0))
+    __chk_fail ();
+  return (wchar_t *) memmove ((char *) s1, (char *) s2, n * sizeof (wchar_t));
+}
diff --git a/debug/wmempcpy_chk.c b/debug/wmempcpy_chk.c
new file mode 100644
index 0000000000..52c629a354
--- /dev/null
+++ b/debug/wmempcpy_chk.c
@@ -0,0 +1,31 @@
+/* Copyright (C) 1999, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, 1999.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+#include <string.h>
+
+
+wchar_t *
+__wmempcpy_chk (wchar_t *s1, const wchar_t *s2, size_t n, size_t ns1)
+{
+  if (__builtin_expect (ns1 < n, 0))
+    __chk_fail ();
+  return (wchar_t *) __mempcpy ((char *) s1, (char *) s2,
+				n * sizeof (wchar_t));
+}
diff --git a/debug/wmemset_chk.c b/debug/wmemset_chk.c
new file mode 100644
index 0000000000..5ed88e83a2
--- /dev/null
+++ b/debug/wmemset_chk.c
@@ -0,0 +1,30 @@
+/* Copyright (C) 1996,97,99,2002,2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <wchar.h>
+
+
+wchar_t *
+__wmemset_chk (wchar_t *s, wchar_t c, size_t n, size_t dstlen)
+{
+  if (__builtin_expect (dstlen < n, 0))
+    __chk_fail ();
+
+  return wmemset (s, c, n);
+}
diff --git a/debug/wprintf_chk.c b/debug/wprintf_chk.c
new file mode 100644
index 0000000000..e0a82617ad
--- /dev/null
+++ b/debug/wprintf_chk.c
@@ -0,0 +1,46 @@
+/* Copyright (C) 1991, 1995, 1996, 1997, 2001, 2004, 2005
+   Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <wchar.h>
+#include "../libio/libioP.h"
+
+
+/* Write formatted output to stdout from the format string FORMAT.  */
+int
+__wprintf_chk (int flag, const wchar_t *format, ...)
+{
+  va_list ap;
+  int done;
+
+  _IO_acquire_lock (stdout);
+  if (flag > 0)
+    stdout->_flags2 |= _IO_FLAGS2_FORTIFY;
+
+  va_start (ap, format);
+  done = _IO_vfwprintf (stdout, format, ap);
+  va_end (ap);
+
+  if (flag > 0)
+    stdout->_flags2 &= ~_IO_FLAGS2_FORTIFY;
+  _IO_release_lock (stdout);
+
+  return done;
+}
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 7aea6ca945..c00168229f 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -1,5 +1,5 @@
 # This file is updated automatically by Makefile.
 glibc-branch := fedora
 glibc-base := HEAD
-fedora-sync-date := 2005-07-08 08:11 UTC
-fedora-sync-tag := fedora-glibc-20050708T0811
+fedora-sync-date := 2005-07-21 08:14 UTC
+fedora-sync-tag := fedora-glibc-20050721T0814
diff --git a/gmon/gmon.c b/gmon/gmon.c
index 8eb0736193..d292454ab5 100644
--- a/gmon/gmon.c
+++ b/gmon/gmon.c
@@ -331,7 +331,7 @@ write_gmon (void)
       {
 	size_t len = strlen (env);
 	char buf[len + 20];
-	sprintf (buf, "%s.%u", env, __getpid ());
+	snprintf (buf, sizeof (buf), "%s.%u", env, __getpid ());
 	fd = open_not_cancel (buf, O_CREAT|O_TRUNC|O_WRONLY|O_NOFOLLOW, 0666);
       }
 
@@ -343,14 +343,8 @@ write_gmon (void)
 	  {
 	    char buf[300];
 	    int errnum = errno;
-#ifdef USE_IN_LIBIO
-	    if (_IO_fwide (stderr, 0) > 0)
-	      __fwprintf (stderr, L"_mcleanup: gmon.out: %s\n",
-			  __strerror_r (errnum, buf, sizeof buf));
-	    else
-#endif
-	      fprintf (stderr, "_mcleanup: gmon.out: %s\n",
-		       __strerror_r (errnum, buf, sizeof buf));
+	    __fxprintf (NULL, "_mcleanup: gmon.out: %s\n",
+			__strerror_r (errnum, buf, sizeof buf));
 	    return;
 	  }
       }
diff --git a/include/bits/stdlib.h b/include/bits/stdlib.h
new file mode 100644
index 0000000000..8541e278c7
--- /dev/null
+++ b/include/bits/stdlib.h
@@ -0,0 +1 @@
+#include <stdlib/bits/stdlib.h>
diff --git a/include/bits/wchar2.h b/include/bits/wchar2.h
new file mode 100644
index 0000000000..a18dccfc55
--- /dev/null
+++ b/include/bits/wchar2.h
@@ -0,0 +1 @@
+#include <wcsmbs/bits/wchar2.h>
diff --git a/include/fenv.h b/include/fenv.h
index 206309179f..673eb4b977 100644
--- a/include/fenv.h
+++ b/include/fenv.h
@@ -13,5 +13,7 @@ extern int __feupdateenv (__const fenv_t *__envp);
 
 libm_hidden_proto (feraiseexcept)
 libm_hidden_proto (fesetenv)
+libm_hidden_proto (fesetround)
+libm_hidden_proto (feholdexcept)
 
 #endif
diff --git a/include/libc-symbols.h b/include/libc-symbols.h
index cdbc4ef202..4fef305814 100644
--- a/include/libc-symbols.h
+++ b/include/libc-symbols.h
@@ -708,6 +708,24 @@ for linking")
 # define libresolv_hidden_data_ver(local, name)
 #endif
 
+#if defined NOT_IN_libc && defined IS_IN_librt
+# define librt_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
+# define librt_hidden_def(name) hidden_def (name)
+# define librt_hidden_weak(name) hidden_weak (name)
+# define librt_hidden_ver(local, name) hidden_ver (local, name)
+# define librt_hidden_data_def(name) hidden_data_def (name)
+# define librt_hidden_data_weak(name) hidden_data_weak (name)
+# define librt_hidden_data_ver(local, name) hidden_data_ver (local, name)
+#else
+# define librt_hidden_proto(name, attrs...)
+# define librt_hidden_def(name)
+# define librt_hidden_weak(name)
+# define librt_hidden_ver(local, name)
+# define librt_hidden_data_def(name)
+# define librt_hidden_data_weak(name)
+# define librt_hidden_data_ver(local, name)
+#endif
+
 #if defined NOT_IN_libc && defined IS_IN_libdl
 # define libdl_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
 # define libdl_hidden_def(name) hidden_def (name)
diff --git a/include/stdio.h b/include/stdio.h
index c8c89ad878..9220db5b80 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -79,6 +79,8 @@ extern int __ftrylockfile (FILE *__stream);
 extern int __getc_unlocked (FILE *__fp);
 extern wint_t __getwc_unlocked (FILE *__fp);
 
+extern int __fxprintf (FILE *__fp, const char *__fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
 
 extern __const char *__const _sys_errlist_internal[] attribute_hidden;
 extern int _sys_nerr_internal attribute_hidden;
diff --git a/include/stdlib.h b/include/stdlib.h
index 7723bf6856..49e87576f3 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -95,8 +95,8 @@ extern int __cxa_atexit_internal (void (*func) (void *), void *arg, void *d)
 
 extern void __cxa_finalize (void *d);
 
-extern int __posix_memalign (void **memptr, size_t alignment, size_t size)
-     __attribute_malloc__;
+extern int __posix_memalign (void **memptr, size_t alignment, size_t size);
+
 extern void *__libc_memalign (size_t alignment, size_t size)
      __attribute_malloc__;
 
diff --git a/include/time.h b/include/time.h
index 795eb5f504..3d8fef8bf9 100644
--- a/include/time.h
+++ b/include/time.h
@@ -17,6 +17,8 @@ libc_hidden_proto (localtime)
 libc_hidden_proto (strftime)
 libc_hidden_proto (strptime)
 
+librt_hidden_proto (clock_gettime)
+
 /* Now define the internal interfaces.  */
 struct tm;
 
diff --git a/include/wchar.h b/include/wchar.h
index 0f91114c41..e8079e6d80 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -82,6 +82,8 @@ extern size_t __wcsnrtombs (char *__restrict __dst,
 			    __const wchar_t **__restrict __src,
 			    size_t __nwc, size_t __len,
 			    __mbstate_t *__restrict __ps);
+extern wchar_t *__wcsncpy (wchar_t *__restrict __dest,
+			 __const wchar_t *__restrict __src, size_t __n);
 extern wchar_t *__wcpcpy (wchar_t *__dest, __const wchar_t *__src);
 extern wchar_t *__wcpncpy (wchar_t *__dest, __const wchar_t *__src,
 			   size_t __n);
@@ -112,6 +114,13 @@ extern int __vfwprintf (__FILE *__restrict __s,
      /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
 
 
+extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
+			    int __flag, size_t __s_len,
+			    __const wchar_t *__restrict __format,
+			    __gnuc_va_list __arg)
+     /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
+libc_hidden_proto (__vswprintf_chk)
+
 /* Internal functions.  */
 extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len,
 			     mbstate_t *ps, __locale_t l) attribute_hidden;
diff --git a/inet/rcmd.c b/inet/rcmd.c
index 0bcb731a16..da6c070764 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -137,21 +137,13 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 	(void)__snprintf(num, sizeof(num), "%d", ntohs(rport));
 	error = getaddrinfo(*ahost, num, &hints, &res);
 	if (error) {
-		if (error == EAI_NONAME && *ahost != NULL) {
-			if (_IO_fwide (stderr, 0) > 0)
-				__fwprintf(stderr, L"%s: Unknown host\n",
-					   *ahost);
-			else
-				fprintf(stderr, "%s: Unknown host\n", *ahost);
-		} else {
-			if (_IO_fwide (stderr, 0) > 0)
-				__fwprintf(stderr, L"rcmd: getaddrinfo: %s\n",
-					   gai_strerror(error));
-			else
-				fprintf(stderr, "rcmd: getaddrinfo: %s\n",
-					gai_strerror(error));
-		}
-                return (-1);
+		if (error == EAI_NONAME && *ahost != NULL)
+			__fxprintf(NULL, "%s: Unknown host\n", *ahost);
+		else
+			__fxprintf(NULL, "rcmd: getaddrinfo: %s\n",
+				   gai_strerror(error));
+
+                return -1;
 	}
 
 	pfd[0].events = POLLIN;
@@ -161,13 +153,9 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 		free (ahostbuf);
 		ahostbuf = strdup (res->ai_canonname);
 		if (ahostbuf == NULL) {
-			if (_IO_fwide (stderr, 0) > 0)
-				__fwprintf(stderr, L"%s",
-					   _("rcmd: Cannot allocate memory\n"));
-			else
-				fputs(_("rcmd: Cannot allocate memory\n"),
-				      stderr);
-			return (-1);
+			__fxprintf(NULL, "%s",
+				   _("rcmd: Cannot allocate memory\n"));
+			return -1;
 		}
 		*ahost = ahostbuf;
 	} else
@@ -180,20 +168,12 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 
 		s = rresvport_af(&lport, ai->ai_family);
 		if (s < 0) {
-			if (errno == EAGAIN) {
-				if (_IO_fwide (stderr, 0) > 0)
-					__fwprintf(stderr, L"%s",
-						   _("rcmd: socket: All ports in use\n"));
-				else
-					fputs(_("rcmd: socket: All ports in use\n"),
-					      stderr);
-			} else {
-				if (_IO_fwide (stderr, 0) > 0)
-					__fwprintf(stderr,
-						   L"rcmd: socket: %m\n");
-				else
-					fprintf(stderr, "rcmd: socket: %m\n");
-			}
+			if (errno == EAGAIN)
+				__fxprintf(NULL, "%s", _("\
+rcmd: socket: All ports in use\n"));
+			else
+				__fxprintf(NULL, "rcmd: socket: %m\n");
+
 			__sigsetmask(oldmask);
 			freeaddrinfo(res);
 			return -1;
@@ -220,10 +200,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 			if (__asprintf (&buf, _("connect to address %s: "),
 					paddr) >= 0)
 			  {
-			    if (_IO_fwide (stderr, 0) > 0)
-			      __fwprintf(stderr, L"%s", buf);
-			    else
-			      fputs (buf, stderr);
+			    __fxprintf(NULL, "%s", buf);
 			    free (buf);
 			  }
 			__set_errno (oerrno);
@@ -235,10 +212,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 				    NI_NUMERICHOST);
 			if (__asprintf (&buf, _("Trying %s...\n"), paddr) >= 0)
 			  {
-			    if (_IO_fwide (stderr, 0) > 0)
-			      __fwprintf (stderr, L"%s", buf);
-			    else
-			      fputs (buf, stderr);
+			    __fxprintf (NULL, "%s", buf);
 			    free (buf);
 			  }
 			continue;
@@ -251,14 +225,8 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 			continue;
 		}
 		freeaddrinfo(res);
-		if (_IO_fwide (stderr, 0) > 0)
-			(void)__fwprintf(stderr, L"%s: %s\n", *ahost,
-					 __strerror_r(errno,
-						      errbuf, sizeof (errbuf)));
-		else
-			(void)fprintf(stderr, "%s: %s\n", *ahost,
-				      __strerror_r(errno,
-						   errbuf, sizeof (errbuf)));
+		(void)__fxprintf(NULL, "%s: %s\n", *ahost,
+				 __strerror_r(errno, errbuf, sizeof (errbuf)));
 		__sigsetmask(oldmask);
 		return -1;
 	}
@@ -281,10 +249,7 @@ rcmd_af(ahost, rport, locuser, remuser, cmd, fd2p, af)
 			if (__asprintf (&buf, _("\
 rcmd: write (setting up stderr): %m\n")) >= 0)
 			  {
-			    if (_IO_fwide (stderr, 0) > 0)
-			      __fwprintf(stderr, L"%s", buf);
-			    else
-			      fputs (buf, stderr);
+			    __fxprintf(NULL, "%s", buf);
 			    free (buf);
 			  }
 			(void)__close(s2);
@@ -303,10 +268,7 @@ rcmd: poll (setting up stderr): %m\n")) >= 0)
 				&& __asprintf(&buf, _("\
 poll: protocol failure in circuit setup\n")) >= 0))
 			  {
-			    if (_IO_fwide (stderr, 0) > 0)
-			      __fwprintf (stderr, L"%s", buf);
-			    else
-			      fputs (buf, stderr);
+			    __fxprintf (NULL, "%s", buf);
 			    free  (buf);
 			  }
 			(void)__close(s2);
@@ -327,12 +289,7 @@ poll: protocol failure in circuit setup\n")) >= 0))
 		}
 		(void)__close(s2);
 		if (s3 < 0) {
-			if (_IO_fwide (stderr, 0) > 0)
-				(void)__fwprintf(stderr,
-						 L"rcmd: accept: %m\n");
-			else
-				(void)fprintf(stderr,
-					      "rcmd: accept: %m\n");
+			(void)__fxprintf(NULL, "rcmd: accept: %m\n");
 			lport = 0;
 			goto bad;
 		}
@@ -344,10 +301,7 @@ poll: protocol failure in circuit setup\n")) >= 0))
 			if (__asprintf(&buf, _("\
 socket: protocol failure in circuit setup\n")) >= 0)
 			  {
-			    if (_IO_fwide (stderr, 0) > 0)
-			      __fwprintf (stderr, L"%s", buf);
-			    else
-			      fputs (buf, stderr);
+			    __fxprintf (NULL, "%s", buf);
 			    free (buf);
 			  }
 			goto bad2;
@@ -373,10 +327,7 @@ socket: protocol failure in circuit setup\n")) >= 0)
 		    || (n != 0
 			&& __asprintf(&buf, "rcmd: %s: %m\n", *ahost) >= 0))
 		  {
-		    if (_IO_fwide (stderr, 0) > 0)
-		      __fwprintf (stderr, L"%s", buf);
-		    else
-		      fputs (buf, stderr);
+		    __fxprintf (NULL, "%s", buf);
 		    free (buf);
 		  }
 		goto bad2;
diff --git a/libio/strfile.h b/libio/strfile.h
index b91111a9d6..53a36a3db8 100644
--- a/libio/strfile.h
+++ b/libio/strfile.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997, 1998, 1999, 2005 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
@@ -73,3 +73,14 @@ typedef struct
 } _IO_strnfile;
 
 extern const struct _IO_jump_t _IO_strn_jumps attribute_hidden;
+
+
+typedef struct
+{
+  _IO_strfile f;
+  /* This is used for the characters which do not fit in the buffer
+     provided by the user.  */
+  wchar_t overflow_buf[64];
+} _IO_wstrnfile;
+
+extern const struct _IO_jump_t _IO_wstrn_jumps attribute_hidden;
diff --git a/libio/vswprintf.c b/libio/vswprintf.c
index 42168aade4..eda8495241 100644
--- a/libio/vswprintf.c
+++ b/libio/vswprintf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1997,1999-2002,2004 Free Software Foundation, Inc.
+/* Copyright (C) 1994,1997,1999-2002,2004,2005 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
@@ -29,15 +29,6 @@
 #include "strfile.h"
 
 
-typedef struct
-{
-  _IO_strfile f;
-  /* This is used for the characters which do not fit in the buffer
-     provided by the user.  */
-  wchar_t overflow_buf[64];
-} _IO_wstrnfile;
-
-
 static wint_t _IO_wstrn_overflow (_IO_FILE *fp, wint_t c) __THROW;
 
 static wint_t
@@ -75,7 +66,7 @@ _IO_wstrn_overflow (fp, c)
 }
 
 
-static const struct _IO_jump_t _IO_wstrn_jumps =
+const struct _IO_jump_t _IO_wstrn_jumps attribute_hidden =
 {
   JUMP_INIT_DUMMY,
   JUMP_INIT(finish, _IO_wstr_finish),
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index d80d6cef79..4095ee0782 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,3 +1,8 @@
+2005-07-08  Ulrich Drepper  <drepper@redhat.com>
+
+	[BZ #408]
+	* locales/vi_VN: Update locale.
+
 2005-07-05  Ulrich Drepper  <drepper@redhat.com>
 
 	* locales/en_US: Remove duplicate am_pn entry.
@@ -10,14 +15,17 @@
 
 2005-05-22  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1092]
 	* locales/mn_MN: Update.  Patch by Sanlig Badral <s_badral@yahoo.com>.
 
 2005-04-28  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1084]
 	* SUPPORTED: Add UTF-8 locales where UTF-8 was not already supported.
 
 2005-04-26  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1091]
 	* locales/fa_IR: Add alt_digits, change date and time
 	representation, and various cleanups.
 	Patch by Hamed Malek <hamed@bamdad.org>.
@@ -36,10 +44,12 @@
 
 2005-03-18  Andreas Schwab  <schwab@suse.de>
 
+	[BZ #622]
 	* locales/pa_IN (am_pm): Fix character names.
 
 2005-03-18  Ulrich Drepper  <drepper@redhat.com>
 
+	[BZ #1084]
 	* SUPPORTED (SUPPORTED-LOCALES): Add af_ZA.UTF-8.
 
 2004-12-19  Roland McGrath  <roland@frob.com>
diff --git a/localedata/locales/vi_VN b/localedata/locales/vi_VN
index df8fe35f6b..7fc8018552 100644
--- a/localedata/locales/vi_VN
+++ b/localedata/locales/vi_VN
@@ -1,23 +1,35 @@
-comment_char    %
-escape_char     /
-% Vietnamese language locale for Vietnam.
-% Contributed by Kentaroh Noji <knoji@jp.ibm.com> and
-% Tetsuji Orita <orita@jp.ibm.com>.
-
-% Revised by Le Hong Boi
+escape_char /
+comment_char %
+%
+% Vietnamese language locale for Vietnam
+% Source: TCVN table and info from vietnamese native speakers
+% Address:
+% Contact: Pablo Saratxaga
+% Email: srtxg@chanae.alphanet.ch
+% Tel:
+% Fax:
+% Language: vi
+% Territory: VN
+% Revision: 0.7
+% Date: 2003-02-06
+% Users: general
+% Repertoiremap:
+% Charset: UTF-8
+% Distribution and use is free, also
+% for commercial purposes.
 
 LC_IDENTIFICATION
 title      "Vietnamese language locale for Vietnam"
-source     "IBM Globalization Center of Competency, Yamato Software Laboratory"
-address    "1623-14, Shimotsuruma, Yamato-shi, Kanagawa-ken, 242-8502, Japan"
-contact    ""
-email      "bug-glibc-locales@gnu.org"
+source     "TCVN table and info from vietnamese native speakers"
+address    ""
+contact    "Pablo Saratxaga"
+email      "srtxg@chanae.alphanet.ch"
 tel        ""
 fax        ""
 language   "Vietnamese"
 territory  "Vietnam"
-revision   "1.0"
-date       "2000-07-20"
+revision   "0.6"
+date       "2001-01-29"
 %
 category  "vi_VN:2000";LC_IDENTIFICATION
 category  "vi_VN:2000";LC_CTYPE
@@ -30,200 +42,248 @@ category  "vi_VN:2000";LC_PAPER
 category  "vi_VN:2000";LC_NAME
 category  "vi_VN:2000";LC_ADDRESS
 category  "vi_VN:2000";LC_TELEPHONE
+category  "vi_VN:2000";LC_MEASUREMENT
 
 END LC_IDENTIFICATION
 
 LC_CTYPE
 copy "i18n"
+translit_start
+
+% dong sign -> d// -> dd
+<U20AB> "<U0111>";"<U0064><U0064>"
+
+translit_end
 END LC_CTYPE
 
 LC_COLLATE
-
 % Copy the template from ISO/IEC 14651
 copy "iso14651_t1"
 
+% A( A^ E^ O+ U+ DD are treatead as base letters
+% ordering of accents is: grave, hook, tilde, acute, dot below
+% a a( a> b c d d/ e e> f g h i j k l m n o o+ p q r s t u u+ v w x y z
+
+collating-symbol <a(>
+collating-symbol <a/>>
+collating-symbol <d//>
+collating-symbol <e/>>
+collating-symbol <o/>>
+collating-symbol <o9>
+collating-symbol <u9>
+
+collating-symbol <HOK>
+
+reorder-after <BAS>
+<GRA>
+<HOK>
+<TIL>
+<ACA>
+<PCT>
+
+reorder-after <a>
+<a(>
+<a/>>
+reorder-after <d>
+<d//>
+reorder-after <e>
+<e/>>
+reorder-after <o>
+<o/>>
+<o9>
+reorder-after <u>
+<u9>
+
+reorder-after <U0061>
+<U1EA3> <a>;<HOK>;<MIN>;IGNORE
+<U0103> <a(>;<BAS>;<MIN>;IGNORE
+<U1EB1> <a(>;<GRA>;<MIN>;IGNORE
+<U1EB3> <a(>;<HOK>;<MIN>;IGNORE
+<U1EB5> <a(>;<TIL>;<MIN>;IGNORE
+<U1EAF> <a(>;<ACA>;<MIN>;IGNORE
+<U1EB7> <a(>;<PCT>;<MIN>;IGNORE
+<U00E2> <a/>>;<BAS>;<MIN>;IGNORE
+<U1EA7> <a/>>;<GRA>;<MIN>;IGNORE
+<U1EA9> <a/>>;<HOK>;<MIN>;IGNORE
+<U1EAB> <a/>>;<TIL>;<MIN>;IGNORE
+<U1EA5> <a/>>;<ACA>;<MIN>;IGNORE
+<U1EAD> <a/>>;<PCT>;<MIN>;IGNORE
+reorder-after <U0041>
+<U1EA2> <a>;<HOK>;<CAP>;IGNORE
+<U0102> <a(>;<BAS>;<CAP>;IGNORE
+<U1EB0> <a(>;<GRA>;<CAP>;IGNORE
+<U1EB3> <a(>;<HOK>;<CAP>;IGNORE
+<U1EB4> <a(>;<TIL>;<CAP>;IGNORE
+<U1EAE> <a(>;<ACA>;<CAP>;IGNORE
+<U1EB6> <a(>;<PCT>;<CAP>;IGNORE
+<U00C2> <a/>>;<BAS>;<CAP>;IGNORE
+<U1EA6> <a/>>;<GRA>;<CAP>;IGNORE
+<U1EA8> <a/>>;<HOK>;<CAP>;IGNORE
+<U1EAA> <a/>>;<TIL>;<CAP>;IGNORE
+<U1EA4> <a/>>;<ACA>;<CAP>;IGNORE
+<U1EAC> <a/>>;<PCT>;<CAP>;IGNORE
+
+reorder-after <U0064>
+<U0111> <d//>;<BAS>;<MIN>;IGNORE
+<U00F0> <d//>;<PCL>;<MIN>;IGNORE
+reorder-after <U0044>
+<U0110> <d//>;<BAS>;<CAP>;IGNORE
+<U00D0> <d//>;<PCL>;<CAP>;IGNORE
+
+reorder-after <U0065>
+<U1EBB> <e>;<HOK>;<MIN>;IGNORE
+<U00EA> <e/>>;<BAS>;<MIN>;IGNORE
+<U1EC1> <e/>>;<GRA>;<MIN>;IGNORE
+<U1EC3> <e/>>;<HOK>;<MIN>;IGNORE
+<U1EC5> <e/>>;<TIL>;<MIN>;IGNORE
+<U1EBF> <e/>>;<ACA>;<MIN>;IGNORE
+<U1EC7> <e/>>;<PCT>;<MIN>;IGNORE
+reorder-after <U0045>
+<U1EBA> <e>;<HOK>;<CAP>;IGNORE
+<U00CA> <e/>>;<BAS>;<CAP>;IGNORE
+<U1EC0> <e/>>;<GRA>;<CAP>;IGNORE
+<U1EC2> <e/>>;<HOK>;<CAP>;IGNORE
+<U1EC4> <e/>>;<TIL>;<CAP>;IGNORE
+<U1EBE> <e/>>;<ACA>;<CAP>;IGNORE
+<U1EC6> <e/>>;<PCT>;<CAP>;IGNORE
+
+reorder-after <U0069>
+<U1EC9> <i>;<HOK>;<MIN>;IGNORE
+reorder-after <U0049>
+<U1EC8> <i>;<HOK>;<CAP>;IGNORE
+
+reorder-after <U006F>
+<U1ECF> <o>;<HOK>;<MIN>;IGNORE
+<U00F4> <o/>>;<BAS>;<MIN>;IGNORE
+<U1ED3> <o/>>;<GRA>;<MIN>;IGNORE
+<U1ED5> <o/>>;<HOK>;<MIN>;IGNORE
+<U1ED7> <o/>>;<TIL>;<MIN>;IGNORE
+<U1ED1> <o/>>;<ACA>;<MIN>;IGNORE
+<U1ED9> <o/>>;<PCT>;<MIN>;IGNORE
+<U01A1> <o9>;<BAS>;<MIN>;IGNORE
+<U1EDD> <o9>;<GRA>;<MIN>;IGNORE
+<U1EDF> <o9>;<HOK>;<MIN>;IGNORE
+<U1EE1> <o9>;<TIL>;<MIN>;IGNORE
+<U1EDB> <o9>;<ACA>;<MIN>;IGNORE
+<U1EE3> <o9>;<PCT>;<MIN>;IGNORE
+reorder-after <U004F>
+<U1ECE> <o>;<HOK>;<CAP>;IGNORE
+<U00D4> <o/>>;<BAS>;<CAP>;IGNORE
+<U1ED2> <o/>>;<GRA>;<CAP>;IGNORE
+<U1ED4> <o/>>;<HOK>;<CAP>;IGNORE
+<U1ED6> <o/>>;<TIL>;<CAP>;IGNORE
+<U1ED0> <o/>>;<ACA>;<CAP>;IGNORE
+<U1ED8> <o/>>;<PCT>;<CAP>;IGNORE
+<U01A0> <o9>;<BAS>;<CAP>;IGNORE
+<U1EDC> <o9>;<GRA>;<CAP>;IGNORE
+<U1EDE> <o9>;<HOK>;<CAP>;IGNORE
+<U1EE0> <o9>;<TIL>;<CAP>;IGNORE
+<U1EDA> <o9>;<ACA>;<CAP>;IGNORE
+<U1EE2> <o9>;<PCT>;<CAP>;IGNORE
+
+reorder-after <U0075>
+<U1EE7> <u>;<HOK>;<MIN>;IGNORE
+<U01B0> <u9>;<BAS>;<MIN>;IGNORE
+<U1EEB> <u9>;<GRA>;<MIN>;IGNORE
+<U1EED> <u9>;<HOK>;<MIN>;IGNORE
+<U1EEF> <u9>;<TIL>;<MIN>;IGNORE
+<U1EE9> <u9>;<ACA>;<MIN>;IGNORE
+<U1EF1> <u9>;<PCT>;<MIN>;IGNORE
+reorder-after <U0055>
+<U1EE6> <u>;<HOK>;<CAP>;IGNORE
+<U01AF> <u9>;<BAS>;<CAP>;IGNORE
+<U1EEA> <u9>;<GRA>;<CAP>;IGNORE
+<U1EEC> <u9>;<HOK>;<CAP>;IGNORE
+<U1EEE> <u9>;<TIL>;<CAP>;IGNORE
+<U1EE8> <u9>;<ACA>;<CAP>;IGNORE
+<U1EF0> <u9>;<PCT>;<CAP>;IGNORE
+
+reorder-after <U0079>
+<U1EF7> <y>;<HOK>;<MIN>;IGNORE
+reorder-after <U0059>
+<U1EF6> <y>;<HOK>;<CAP>;IGNORE
+
+reorder-end
+
 END LC_COLLATE
 
 LC_MONETARY
-% This is the POSIX Locale definition the LC_MONETARY category.
-% These are generated based on XML base Locale difintion file
-% for IBM Class for Unicode/Java
-%
 int_curr_symbol       "<U0056><U004E><U0044><U0020>"
 currency_symbol       "<U20AB>"
 mon_decimal_point     "<U002C>"
 mon_thousands_sep     "<U002E>"
-mon_grouping          3
+mon_grouping          3;3
 positive_sign         ""
 negative_sign         "<U002D>"
-int_frac_digits       2
-frac_digits           2
+int_frac_digits       4
+frac_digits           4
 p_cs_precedes         0
 p_sep_by_space        0
 n_cs_precedes         1
 n_sep_by_space        0
 p_sign_posn           1
 n_sign_posn           1
-%
 END LC_MONETARY
 
-
 LC_NUMERIC
-% This is the POSIX Locale definition for the LC_NUMERIC  category.
-%
-decimal_point          "<U002C>"
-thousands_sep          "<U002E>"
-grouping               3
-%
+decimal_point        "<U002C>"
+thousands_sep        "<U002E>"
+grouping             3;3
 END LC_NUMERIC
 
-
 LC_TIME
-% This is the POSIX Locale definition for the LC_TIME category.
-% These are generated based on XML base Locale difintion file
-% for IBM Class for Unicode/Java
-%
-% Abbreviated weekday names (%a)
-abday       "<U0043><U004E><U0020>";/
-            "<U0054><U0068><U0020><U0032><U0020>";/
-            "<U0054><U0068><U0020><U0033><U0020>";/
-            "<U0054><U0068><U0020><U0034><U0020>";/
-            "<U0054><U0068><U0020><U0035><U0020>";/
-            "<U0054><U0068><U0020><U0036><U0020>";/
-            "<U0054><U0068><U0020><U0037><U0020>"
-%
-% Full weekday names (%A)
-day         "<U0043><U0068><U0075><U0309><U0020><U006E><U0068><U00E2><U0323>/
-<U0074><U0020>";/
-            "<U0054><U0068><U01B0><U0301><U0020><U0068><U0061><U0069><U0020>";/
-            "<U0054><U0068><U01B0><U0301><U0020><U0062><U0061><U0020>";/
-            "<U0054><U0068><U01B0><U0301><U0020><U0074><U01B0><U0020>";/
-            "<U0054><U0068><U01B0><U0301><U0020><U006E><U0103><U006D><U0020>";/
-            "<U0054><U0068><U01B0><U0301><U0020><U0073><U00E1><U0075><U0020>";/
-            "<U0054><U0068><U01B0><U0301><U0020><U0062><U0061><U0309><U0079>/
-<U0020>"
-%
-% Abbreviated month names (%b)
-abmon       "<U0054><U0068><U0067><U0020><U0031>";/
-            "<U0054><U0068><U0067><U0020><U0032>";/
-            "<U0054><U0068><U0067><U0020><U0033>";/
-            "<U0054><U0068><U0067><U0020><U0034>";/
-            "<U0054><U0068><U0067><U0020><U0035>";/
-            "<U0054><U0068><U0067><U0020><U0036>";/
-            "<U0054><U0068><U0067><U0020><U0037>";/
-            "<U0054><U0068><U0067><U0020><U0038>";/
-            "<U0054><U0068><U0067><U0020><U0039>";/
-            "<U0054><U0068><U0067><U0020><U0031><U0030>";/
-            "<U0054><U0068><U0067><U0020><U0031><U0031>";/
-            "<U0054><U0068><U0067><U0020><U0031><U0032>"
-%
-% Full month names (%B)
-mon         "<U0054><U0068><U00E1><U006E><U0067><U0020><U006D><U00F4><U0323>/
-<U0074>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U0068><U0061><U0069>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U0062><U0061>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U0074><U01B0>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U006E><U0103><U006D>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U0073><U00E1><U0075>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U0062><U0061><U0309>/
-<U0079>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U0074><U00E1><U006D>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U0063><U0068><U00ED>/
-<U006E>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U006D><U01B0><U01A1>/
-<U0300><U0069>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U006D><U01B0><U01A1>/
-<U0300><U0069><U0020><U006D><U00F4><U0323><U0074>";/
-            "<U0054><U0068><U00E1><U006E><U0067><U0020><U006D><U01B0><U01A1>/
-<U0300><U0069><U0020><U0068><U0061><U0069>"
-%
-% Equivalent of AM PM
-am_pm       "";""
-%
-% Appropriate date and time representation
-% %A %d %b %Y%H:%M:%S %Z
-d_t_fmt     "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
-<U0020><U0025><U005A><U0020><U0025><U0041><U0020><U0025><U0064><U0020>/
-<U0025><U0062><U0020><U0025><U0059>"
-%
-% Appropriate date representation
-% %A %d %b %Y
-d_fmt       "<U0025><U0041><U0020><U0025><U0064><U0020><U0025><U0062>/
-<U0020><U0025><U0059>"
-%
-% Appropriate time representation
-% %H:%M:%S %Z
-t_fmt       "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
-<U0020><U0025><U005A>"
-%
-% Appropriate 12 h time representation (%r)
-t_fmt_ampm ""
-%
-% Appropriate date representation (date(1))   "%H:%M:%S %a %e %b %Y %Z"
-date_fmt       "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
-<U0020><U0025><U0061><U0020><U0025><U0065><U0020><U0025><U0062>/
-<U0020><U0025><U0059><U0020><U0025><U005A>"
+abday    "<U0043><U004E>";"<U0054><U0068><U0032>";/
+         "<U0054><U0068><U0033>";"<U0054><U0068><U0034>";/
+         "<U0054><U0068><U0035>";"<U0054><U0068><U0036>";/
+         "<U0054><U0068><U0037>"
+day      "<U0063><U0068><U1EE7><U0020><U006E><U0068><U1EAD><U0074>";/
+         "<U0074><U0068><U1EE9><U0020><U0068><U0061><U0069>";/
+         "<U0074><U0068><U1EE9><U0020><U0062><U0061>";/
+         "<U0074><U0068><U1EE9><U0020><U0074><U01B0>";/
+         "<U0074><U0068><U1EE9><U0020><U006E><U0103><U006D>";/
+         "<U0074><U0068><U1EE9><U0020><U0073><U00E1><U0075>";/
+         "<U0074><U0068><U1EE9><U0020><U0062><U1EA3><U0079>"
+abmon    "<U0054><U0068><U0067><U0031>";"<U0054><U0068><U0067><U0032>";/
+         "<U0054><U0068><U0067><U0033>";"<U0054><U0068><U0067><U0034>";/
+         "<U0054><U0068><U0067><U0035>";"<U0054><U0068><U0067><U0036>";/
+         "<U0054><U0068><U0067><U0037>";"<U0054><U0068><U0067><U0038>";/
+         "<U0054><U0068><U0067><U0039>";"<U0054><U0068><U0067><U0031><U0030>";/
+         "<U0054><U0068><U0067><U0031><U0031>";"<U0054><U0068><U0067><U0031><U0032>"
+mon      "<U0074><U0068><U00E1><U006E><U0067><U0020><U0067><U0069><U00EA><U006E><U0067>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0068><U0061><U0069>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0062><U0061>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0074><U01B0>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U006E><U0103><U006D>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0073><U00E1><U0075>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0062><U1EA3><U0079>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0074><U00E1><U006D>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0063><U0068><U00ED><U006E>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U006D><U01B0><U1EDD><U0069>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U006D><U1ED9><U0074>";/
+         "<U0074><U0068><U00E1><U006E><U0067><U0020><U0063><U0068><U1EA1><U0070>"
+d_t_fmt  "<U0025><U0041><U002C><U0020><U0025><U0064><U0020><U0025><U0042><U0020><U006E><U0103><U006D><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
+d_fmt    "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0059>"
+t_fmt    "<U0025><U0054>"
+am_pm    "<U0073><U00E1><U006E><U0067>";"<U0063><U0068><U0069><U1EC1><U0075>"
+t_fmt_ampm  "<U0025><U0049><U003A><U0025><U004D><U0020><U0025><U0070>"
+date_fmt  "<U0025><U0041><U002C><U0020><U0025><U0064><U0020><U0025><U0042><U0020><U006E><U0103><U006D><U0020><U0025><U0059><U0020><U0025><U0054><U0020><U0025><U005A>"
 END LC_TIME
 
-
+% yes: Va^ng / Da.
+% no: Kho^ng
 LC_MESSAGES
-yesexpr "<U005E><U005B><U0079><U0059><U005D><U002E><U002A>"
-noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
+yesstr   "<U0056><U00E2><U006E><U0067>"
+nostr    "<U004B><U0068><U00F4><U006E><U0067>"
+yesexpr  "<U005E><U005B><U0031><U0079><U0059><U0076><U0056><U0064><U0044><U0063><U0043><U005D><U002E><U002A>"
+noexpr   "<U005E><U005B><U0030><U006E><U004E><U006B><U004B><U005D><U002E><U002A>"
 END LC_MESSAGES
 
-
 LC_PAPER
-% This is the ISO_IEC TR14652 Locale definition for the
-% LC_PAPER category
 height      297
 width       210
-
 END LC_PAPER
 
-
-LC_NAME
-% This is the ISO_IEC TR14652 Locale definition for the
-% LC_NAME category.
-%
-name_fmt    "<U0025><U0070><U0025><U0074><U0025><U0066><U0025><U0074>/
-<U0025><U0067>"
-name_gen    ""
-name_mr     "<U00D4><U002E>"
-name_mrs    "<U0042><U002E>"
-name_miss   "<U0043><U002E>"
-name_ms     ""
-
-END LC_NAME
-
-
-LC_ADDRESS
-% This is the ISO_IEC TR14652 Locale definition for the
-% LC_ADDRESS
-postal_fmt  "<U0025><U007A><U0025><U0063><U0025><U0054><U0025><U0073>/
-<U0025><U0062><U0025><U0065><U0025><U0072>"
-country_name "<U0056><U0069><U1EC7><U0074><U0020><U006E><U0061><U006D>"
-lang_name "<U0056><U0069><U1EC7><U0074><U0020><U006E><U0067><U1EEF>"
-
-country_ab2 "<U0056><U004E>"
-country_ab3 "<U0056><U004E><U004D>"
-country_num 704
-END LC_ADDRESS
-
-
-LC_TELEPHONE
-% This is the ISO_IEC TR14652 Locale definition for the
-%
-tel_int_fmt "<U002B><U0025><U0063><U0020><U003B><U0025><U0061><U0020>/
-<U003B><U0025><U006C>"
-int_prefix  "<U0038><U0034>"
-int_select  "<U0030><U0030>"
-
-END LC_TELEPHONE
-
-
 LC_MEASUREMENT
-% This is the ISO_IEC TR14652 Locale definition for the
-%
 measurement 1
-
 END LC_MEASUREMENT
+
diff --git a/malloc/obstack.c b/malloc/obstack.c
index fddda3ec5b..aba21f9aac 100644
--- a/malloc/obstack.c
+++ b/malloc/obstack.c
@@ -1,6 +1,6 @@
 /* obstack.c - subroutines used implicitly by object stack macros
-   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997,
-   1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
+   1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.  Its master source is NOT part of
    the C library, however.  The master source lives in /gd/gnu/lib.
 
@@ -410,12 +410,7 @@ print_and_abort (void)
      happen because the "memory exhausted" message appears in other places
      like this and the translation should be reused instead of creating
      a very similar string which requires a separate translation.  */
-# if defined _LIBC && defined USE_IN_LIBIO
-  if (_IO_fwide (stderr, 0) > 0)
-    __fwprintf (stderr, L"%s\n", _("memory exhausted"));
-  else
-# endif
-    fprintf (stderr, "%s\n", _("memory exhausted"));
+  (void) __fxprintf (NULL, "%s\n", _("memory exhausted"));
   exit (obstack_exit_failure);
 }
 
diff --git a/manual/Makefile b/manual/Makefile
index a29fdd29a3..c007b2cc4e 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -80,7 +80,7 @@ libc.dvi libc.pdf libc.info: chapters.texi top-menu.texi dir-add.texi \
 libc.dvi libc.pdf: texinfo.tex
 
 html: libc/index.html
-libc/index.html: chapters.texi top-menu.texi libm-err.texi
+libc/index.html: chapters.texi top-menu.texi dir-add.texi libm-err.texi
 	$(MAKEINFO) --html libc.texinfo
 
 # Generate the summary from the Texinfo source files for each chapter.
diff --git a/misc/Makefile b/misc/Makefile
index 862eb1b800..cd5b64e7ab 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2002, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 1991-2002, 2003, 2004, 2005 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
@@ -65,6 +65,8 @@ routines := brk sbrk sstk ioctl \
 
 distribute := device-nrs.h
 
+generated := tst-error1.mtrace tst-error1-mem
+
 include ../Makeconfig
 
 aux := init-misc
@@ -73,7 +75,11 @@ install-lib := libbsd-compat.a libg.a
 endif
 gpl2lgpl := error.c error.h
 
-tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch
+tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch \
+	 tst-error1
+ifeq (no,$(cross-compiling))
+tests: $(objpfx)tst-error1-mem
+endif
 
 CFLAGS-tsearch.c = $(uses-callbacks)
 CFLAGS-lsearch.c = $(uses-callbacks)
@@ -106,3 +112,8 @@ endif
 ifeq ($(build-bounded),yes)
 $(objpfx)tst-tsearch-bp: $(common-objpfx)math/libm_b.a
 endif
+
+tst-error1-ENV = MALLOC_TRACE=$(objpfx)tst-error1.mtrace
+tst-error1-ARGS = $(objpfx)tst-error1.out
+$(objpfx)tst-error1-mem: $(objpfx)tst-error1.out
+	$(common-objpfx)malloc/mtrace $(objpfx)tst-error1.mtrace > $@
diff --git a/misc/error.c b/misc/error.c
index 2501583366..29060e94de 100644
--- a/misc/error.c
+++ b/misc/error.c
@@ -1,7 +1,6 @@
 /* Error handler for noninteractive utilities
-   Copyright (C) 1990-1998, 2000-2003, 2004 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.  Its master source is NOT part of
-   the C library, however.  The master source lives in /gd/gnu/lib.
+   Copyright (C) 1990-1998, 2000-2004, 2005 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
@@ -74,6 +73,7 @@ unsigned int error_message_count;
 
 # define program_name program_invocation_name
 # include <errno.h>
+# include <limits.h>
 # include <libio/libioP.h>
 
 /* In GNU libc we want do not want to use the common name `error' directly.
@@ -158,14 +158,10 @@ print_errno_message (int errnum)
 #endif
 
 #if _LIBC
-  if (_IO_fwide (stderr, 0) > 0)
-    {
-      __fwprintf (stderr, L": %s", s);
-      return;
-    }
-#endif
-
+  __fxprintf (NULL, ": %s", s);
+#else
   fprintf (stderr, ": %s", s);
+#endif
 }
 
 #ifdef VA_START
@@ -182,14 +178,15 @@ error_tail (int status, int errnum, const char *message, va_list args)
       mbstate_t st;
       size_t res;
       const char *tmp;
+      bool use_malloc = false;
 
-      do
+      while (1)
 	{
-	  if (len < ALLOCA_LIMIT)
+	  if (__libc_use_alloca (len * sizeof (wchar_t)))
 	    wmessage = (wchar_t *) alloca (len * sizeof (wchar_t));
 	  else
 	    {
-	      if (wmessage != NULL && len / 2 < ALLOCA_LIMIT)
+	      if (!use_malloc)
 		wmessage = NULL;
 
 	      wchar_t *p = (wchar_t *) realloc (wmessage,
@@ -201,18 +198,38 @@ error_tail (int status, int errnum, const char *message, va_list args)
 		  return;
 		}
 	      wmessage = p;
+	      use_malloc = true;
 	    }
 
 	  memset (&st, '\0', sizeof (st));
 	  tmp = message;
+
+	  res = mbsrtowcs (wmessage, &tmp, len, &st);
+	  if (res != len)
+	    break;
+
+	  if (__builtin_expect (len >= SIZE_MAX / 2, 0))
+	    {
+	      /* This reallyy should not happen if everything is fine.  */
+	      res = (size_t) -1;
+	      break;
+	    }
+
+	  len *= 2;
 	}
-      while ((res = mbsrtowcs (wmessage, &tmp, len, &st)) == len);
 
       if (res == (size_t) -1)
-	/* The string cannot be converted.  */
-	wmessage = (wchar_t *) L"???";
+	{
+	  /* The string cannot be converted.  */
+	  if (use_malloc)
+	    free (wmessage);
+	  wmessage = (wchar_t *) L"???";
+	}
 
       __vfwprintf (stderr, wmessage, args);
+
+      if (use_malloc)
+	free (wmessage);
     }
   else
 #  endif
@@ -226,11 +243,10 @@ error_tail (int status, int errnum, const char *message, va_list args)
   if (errnum)
     print_errno_message (errnum);
 # if _LIBC
-  if (_IO_fwide (stderr, 0) > 0)
-    putwc (L'\n', stderr);
-  else
+  __fxprintf (NULL, "\n");
+# else
+  putc ('\n', stderr);
 # endif
-    putc ('\n', stderr);
   fflush (stderr);
   if (status)
     exit (status);
@@ -275,11 +291,10 @@ error (status, errnum, message, va_alist)
   else
     {
 #if _LIBC
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s: ", program_name);
-      else
+      __fxprintf (NULL, "%s: ", program_name);
+#else
+      fprintf (stderr, "%s: ", program_name);
 #endif
-	fprintf (stderr, "%s: ", program_name);
     }
 
 #ifdef VA_START
@@ -359,21 +374,19 @@ error_at_line (status, errnum, file_name, line_number, message, va_alist)
   else
     {
 #if _LIBC
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s: ", program_name);
-      else
+      __fxprintf (NULL, "%s:", program_name);
+#else
+      fprintf (stderr, "%s:", program_name);
 #endif
-	fprintf (stderr, "%s:", program_name);
     }
 
   if (file_name != NULL)
     {
 #if _LIBC
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s:%d: ", file_name, line_number);
-      else
+      __fxprintf (NULL, "%s:%d: ", file_name, line_number);
+#else
+      fprintf (stderr, "%s:%d: ", file_name, line_number);
 #endif
-	fprintf (stderr, "%s:%d: ", file_name, line_number);
     }
 
 #ifdef VA_START
diff --git a/misc/getpass.c b/misc/getpass.c
index 62e56866a1..5290c3c7d3 100644
--- a/misc/getpass.c
+++ b/misc/getpass.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-1999, 2001, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1992-1999,2001,2003,2004,2005 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
@@ -91,12 +91,7 @@ getpass (prompt)
     tty_changed = 0;
 
   /* Write the prompt.  */
-#ifdef USE_IN_LIBIO
-  if (_IO_fwide (out, 0) > 0)
-    __fwprintf (out, L"%s", prompt);
-  else
-#endif
-    fputs_unlocked (prompt, out);
+  __fxprintf (out, "%s", prompt);
   fflush_unlocked (out);
 
   /* Read the password.  */
@@ -110,15 +105,8 @@ getpass (prompt)
 	  /* Remove the newline.  */
 	  buf[nread - 1] = '\0';
 	  if (tty_changed)
-	    {
-	      /* Write the newline that was not echoed.  */
-#ifdef USE_IN_LIBIO
-	      if (_IO_fwide (out, 0) > 0)
-		putwc_unlocked (L'\n', out);
-	      else
-#endif
-		putc_unlocked ('\n', out);
-	    }
+	    /* Write the newline that was not echoed.  */
+	    __fxprintf (out, "\n");
 	}
     }
 
diff --git a/misc/tst-error1.c b/misc/tst-error1.c
new file mode 100644
index 0000000000..e84843ed2f
--- /dev/null
+++ b/misc/tst-error1.c
@@ -0,0 +1,26 @@
+#include <error.h>
+#include <mcheck.h>
+#include <stdio.h>
+#include <string.h>
+#include <wchar.h>
+
+static int
+do_test (int argc, char *argv[])
+{
+  mtrace ();
+  (void) freopen (argc == 1 ? "/dev/stdout" : argv[1], "a", stderr);
+  /* Orient the stream.  */
+  fwprintf (stderr, L"hello world\n");
+  char buf[20000];
+  static const char str[] = "hello world! ";
+  for (int i = 0; i < 1000; ++i)
+    memcpy (&buf[i * (sizeof (str) - 1)], str, sizeof (str));
+  error (0, 0, str);
+  error (0, 0, buf);
+  error (0, 0, buf);
+  error (0, 0, str);
+  return 0;
+}
+
+#define TEST_FUNCTION do_test (argc, argv)
+#include "../test-skeleton.c"
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index aa5874a243..0128865672 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,23 @@
+2005-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+	[BZ #1102]
+	* sysdeps/pthread/pthread.h (PTHREAD_MUTEX_INITIALIZER,
+	PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP,
+	PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP,
+	PTHREAD_MUTEX_ADAPTIVE_NP, PTHREAD_RWLOCK_INITIALIZER,
+	PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP,
+	PTHREAD_COND_INITIALIZER): Supply zeros for all fields
+	in the structure.
+	* Makefile (tests): Add tst-initializers1.
+	(CFLAGS-tst-initializers1.c): Set.
+	* tst-initializers1.c: New test.
+
+2005-07-11  Jakub Jelinek  <jakub@redhat.com>
+
+	* sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h (pthread_rwlock_t):
+	Make sure __flags are located at offset 48 from the start of the
+	structure.
+
 2005-07-02  Roland McGrath  <roland@redhat.com>
 
 	* Makeconfig: Comment fix.
@@ -122,6 +142,7 @@
 
 2005-04-05  Jakub Jelinek  <jakub@redhat.com>
 
+	[BZ #1102]
 	* sysdeps/pthread/pthread.h (__pthread_cleanup_routine): Use
 	__inline instead of inline.
 	* sysdeps/pthread/bits/libc-lock.h (__libc_cleanup_routine): Likewise.
diff --git a/nptl/Makefile b/nptl/Makefile
index 184375a461..1fbe464518 100644
--- a/nptl/Makefile
+++ b/nptl/Makefile
@@ -241,7 +241,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 \
 	tst-backtrace1 \
 	tst-oddstacklimit \
 	tst-vfork1 tst-vfork2 tst-vfork1x tst-vfork2x \
-	tst-getpid1 tst-getpid2
+	tst-getpid1 tst-getpid2 tst-initializers1
 xtests = tst-setuid1 tst-setuid1-static
 
 # Files which must not be linked with libpthread.
@@ -412,6 +412,7 @@ CFLAGS-tst-cleanupx4.c += -fexceptions
 CFLAGS-tst-oncex3.c += -fexceptions
 CFLAGS-tst-oncex4.c += -fexceptions
 CFLAGS-tst-align.c += $(stack-align-test-flags)
+CFLAGS-tst-initializers1.c += -W -Wall -Werror
 
 tst-cancel7-ARGS = --command "$(built-program-cmd)"
 tst-cancelx7-ARGS = $(tst-cancel7-ARGS)
diff --git a/nptl/sysdeps/pthread/pthread.h b/nptl/sysdeps/pthread/pthread.h
index 05f3b31fb5..92e66f7c72 100644
--- a/nptl/sysdeps/pthread/pthread.h
+++ b/nptl/sysdeps/pthread/pthread.h
@@ -62,22 +62,22 @@ enum
 
 /* Mutex initializers.  */
 #define PTHREAD_MUTEX_INITIALIZER \
-  { { 0, } }
+  { { 0, 0, 0, 0, 0, 0 } }
 #ifdef __USE_GNU
 # if __WORDSIZE == 64
 #  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
-  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0 } }
 #  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
-  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0 } }
 #  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
-  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
+  { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0 } }
 # else
 #  define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \
-  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP } }
+  { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, 0 } }
 #  define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \
-  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP } }
+  { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, 0 } }
 #  define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \
-  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP } }
+  { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, 0 } }
 # endif
 #endif
 
@@ -93,8 +93,13 @@ enum
 };
 
 /* Read-write lock initializers.  */
-# define PTHREAD_RWLOCK_INITIALIZER \
-  { { 0, } }
+# if __WORDSIZE == 64
+#  define PTHREAD_RWLOCK_INITIALIZER \
+  { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
+# else
+#  define PTHREAD_RWLOCK_INITIALIZER \
+  { { 0, 0, 0, 0, 0, 0, 0, 0 } }
+# endif
 # ifdef __USE_GNU
 #  if __WORDSIZE == 64
 #   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
@@ -102,7 +107,7 @@ enum
       PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
 #  else
 #   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
-  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
+  { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 0 } }
 #  endif
 # endif
 #endif  /* Unix98 or XOpen2K */
@@ -140,7 +145,7 @@ enum
 
 
 /* Conditional variable handling.  */
-#define PTHREAD_COND_INITIALIZER { { 0, } }
+#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } }
 
 
 /* Cleanup buffers */
diff --git a/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h b/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
index d13d6e86a4..86b47037e4 100644
--- a/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
+++ b/nptl/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
@@ -1,5 +1,5 @@
 /* Machine-specific pthread type layouts.  Alpha version.
-   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 2003, 2004, 2005 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
@@ -117,8 +117,9 @@ typedef union
     unsigned int __nr_readers_queued;
     unsigned int __nr_writers_queued;
     int __writer;
-
-    unsigned int __reserved[6];
+    int __pad1;
+    unsigned long int __pad2;
+    unsigned long int __pad3;
     /* FLAGS must stay at this position in the structure to maintain
        binary compatibility.  */
     unsigned int __flags;
diff --git a/nptl/tst-initializers1.c b/nptl/tst-initializers1.c
new file mode 100644
index 0000000000..ccd27286e8
--- /dev/null
+++ b/nptl/tst-initializers1.c
@@ -0,0 +1,48 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Jakub Jelinek <jakub@redhat.com>, 2005.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <pthread.h>
+
+pthread_mutex_t mtx_normal = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t mtx_recursive = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
+pthread_mutex_t mtx_errorchk = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
+pthread_mutex_t mtx_adaptive = PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP;
+pthread_rwlock_t rwl_normal = PTHREAD_RWLOCK_INITIALIZER;
+pthread_rwlock_t rwl_writer
+  = PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP;
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+
+int
+main (void)
+{
+  if (mtx_normal.__data.__kind != PTHREAD_MUTEX_TIMED_NP)
+    return 1;
+  if (mtx_recursive.__data.__kind != PTHREAD_MUTEX_RECURSIVE_NP)
+    return 1;
+  if (mtx_errorchk.__data.__kind != PTHREAD_MUTEX_ERRORCHECK_NP)
+    return 1;
+  if (mtx_adaptive.__data.__kind != PTHREAD_MUTEX_ADAPTIVE_NP)
+    return 1;
+  if (rwl_normal.__data.__flags != PTHREAD_RWLOCK_PREFER_READER_NP)
+    return 1;
+  if (rwl_writer.__data.__flags
+      != PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP)
+    return 1;
+  return 0;
+}
diff --git a/nscd/Makefile b/nscd/Makefile
index 2ebd90b989..5a2d29a0a5 100644
--- a/nscd/Makefile
+++ b/nscd/Makefile
@@ -84,10 +84,13 @@ CFLAGS-nscd_gethst_r.c = -fexceptions
 CFLAGS-nscd_getai.c = -fexceptions
 CFLAGS-nscd_initgroups.c = -fexceptions
 
-nscd-cflags = -DIS_IN_nscd=1
+nscd-cflags = -DIS_IN_nscd=1 -D_FORTIFY_SOURCE=2
 ifeq (yesyes,$(have-fpie)$(build-shared))
 nscd-cflags += -fpie
 endif
+ifeq (yes,$(have-ssp))
+nscd-cflags += -fstack-protector
+endif
 
 CFLAGS-nscd.c += $(nscd-cflags)
 CFLAGS-connections.c += $(nscd-cflags)
diff --git a/nscd/connections.c b/nscd/connections.c
index 0ca7585f14..d18851f828 100644
--- a/nscd/connections.c
+++ b/nscd/connections.c
@@ -393,20 +393,23 @@ cannot create read-only descriptor for \"%s\"; no mmap"),
 		if (offset % ps != 0)
 		  {
 		    towrite = MIN (remaining, ps - (offset % ps));
-		    pwrite (fd, tmpbuf, towrite, offset);
+		    if (pwrite (fd, tmpbuf, towrite, offset) != towrite)
+		      goto write_fail;
 		    offset += towrite;
 		    remaining -= towrite;
 		  }
 
 		while (remaining > ps)
 		  {
-		    pwrite (fd, tmpbuf, ps, offset);
+		    if (pwrite (fd, tmpbuf, ps, offset) == -1)
+		      goto write_fail;
 		    offset += ps;
 		    remaining -= ps;
 		  }
 
-		if (remaining > 0)
-		  pwrite (fd, tmpbuf, remaining, offset);
+		if (remaining > 0
+		    && pwrite (fd, tmpbuf, remaining, offset) != remaining)
+		  goto write_fail;
 
 		/* Create the header of the file.  */
 		struct database_pers_head head =
@@ -426,6 +429,7 @@ cannot create read-only descriptor for \"%s\"; no mmap"),
 		    || (mem = mmap (NULL, total, PROT_READ | PROT_WRITE,
 				    MAP_SHARED, fd, 0)) == MAP_FAILED)
 		  {
+		  write_fail:
 		    unlink (dbs[cnt].db_filename);
 		    dbg_log (_("cannot write to database file %s: %s"),
 			     dbs[cnt].db_filename, strerror (errno));
@@ -604,9 +608,14 @@ send_ro_fd (struct database_dyn *db, char *key, int fd)
   iov[0].iov_len = strlen (key) + 1;
 
   /* Prepare the control message to transfer the descriptor.  */
-  char buf[CMSG_SPACE (sizeof (int))];
+  union
+  {
+    struct cmsghdr hdr;
+    char bytes[CMSG_SPACE (sizeof (int))];
+  } buf;
   struct msghdr msg = { .msg_iov = iov, .msg_iovlen = 1,
-			.msg_control = buf, .msg_controllen = sizeof (buf) };
+			.msg_control = buf.bytes,
+			.msg_controllen = sizeof (buf) };
   struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg);
 
   cmsg->cmsg_level = SOL_SOCKET;
@@ -960,7 +969,9 @@ cannot change to old working directory: %s; disabling paranoia mode"),
       setuid (server_uid);
       setgid (server_gid);
     }
-  chdir ("/");
+  if (chdir ("/") != 0)
+    dbg_log (_("cannot change current working directory to \"/\": %s"),
+	     strerror (errno));
   paranoia = 0;
 }
 
diff --git a/nscd/grpcache.c b/nscd/grpcache.c
index 5d327f360c..c938554b25 100644
--- a/nscd/grpcache.c
+++ b/nscd/grpcache.c
@@ -167,7 +167,7 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
       char *gr_name;
       char *cp;
       const size_t key_len = strlen (key);
-      const size_t buf_len = 3 + sizeof (grp->gr_gid) + key_len + 1;
+      const size_t buf_len = 3 * sizeof (grp->gr_gid) + key_len + 1;
       char *buf = alloca (buf_len);
       ssize_t n;
       size_t cnt;
diff --git a/nscd/nscd.c b/nscd/nscd.c
index e6921c2ceb..4d14f06ecf 100644
--- a/nscd/nscd.c
+++ b/nscd/nscd.c
@@ -243,7 +243,9 @@ main (int argc, char **argv)
 
       setsid ();
 
-      chdir ("/");
+      if (chdir ("/") != 0)
+	error (EXIT_FAILURE, errno,
+	       _("cannot change current working cirectory to \"/\""));
 
       openlog ("nscd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
 
diff --git a/nscd/nscd_helper.c b/nscd/nscd_helper.c
index c99cb430aa..65e78a1174 100644
--- a/nscd/nscd_helper.c
+++ b/nscd/nscd_helper.c
@@ -26,6 +26,7 @@
 #include <sys/poll.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
+#include <sys/time.h>
 #include <sys/uio.h>
 #include <sys/un.h>
 #include <not-cancel.h>
@@ -135,6 +136,36 @@ __nscd_unmap (struct mapped_database *mapped)
 }
 
 
+static int
+wait_on_socket (int sock)
+{
+  struct pollfd fds[1];
+  fds[0].fd = sock;
+  fds[0].events = POLLIN | POLLERR | POLLHUP;
+  int n = __poll (fds, 1, 5 * 1000);
+  if (n == -1 && __builtin_expect (errno == EINTR, 0))
+    {
+      /* Handle the case where the poll() call is interrupted by a
+	 signal.  We cannot just use TEMP_FAILURE_RETRY since it might
+	 lead to infinite loops.  */
+      struct timeval now;
+      (void) __gettimeofday (&now, NULL);
+      long int end = (now.tv_sec + 5) * 1000 + (now.tv_usec + 500) / 1000;
+      while (1)
+	{
+	  long int timeout = end - (now.tv_sec * 1000
+				    + (now.tv_usec + 500) / 1000);
+	  n = __poll (fds, 1, timeout);
+	  if (n != -1 || errno != EINTR)
+	    break;
+	  (void) __gettimeofday (&now, NULL);
+	}
+    }
+
+  return n;
+}
+
+
 /* Try to get a file descriptor for the shared meory segment
    containing the database.  */
 static struct mapped_database *
@@ -166,8 +197,8 @@ get_mapping (request_type type, const char *key,
   iov[1].iov_base = (void *) key;
   iov[1].iov_len = keylen;
 
-  if (TEMP_FAILURE_RETRY (__writev (sock, iov, 2))
-      != iov[0].iov_len + iov[1].iov_len)
+  if (__builtin_expect (TEMP_FAILURE_RETRY (__writev (sock, iov, 2))
+			!= iov[0].iov_len + iov[1].iov_len, 0))
     /* We cannot even write the request.  */
     goto out_close2;
 
@@ -176,73 +207,80 @@ get_mapping (request_type type, const char *key,
   iov[0].iov_base = resdata;
   iov[0].iov_len = keylen;
 
-  char buf[CMSG_SPACE (sizeof (int))];
+  union
+  {
+    struct cmsghdr hdr;
+    char bytes[CMSG_SPACE (sizeof (int))];
+  } buf;
   struct msghdr msg = { .msg_iov = iov, .msg_iovlen = 1,
-			.msg_control = buf, .msg_controllen = sizeof (buf) };
+			.msg_control = buf.bytes,
+			.msg_controllen = sizeof (buf) };
   struct cmsghdr *cmsg = CMSG_FIRSTHDR (&msg);
 
   cmsg->cmsg_level = SOL_SOCKET;
   cmsg->cmsg_type = SCM_RIGHTS;
   cmsg->cmsg_len = CMSG_LEN (sizeof (int));
 
+  /* This access is well-aligned since BUF is correctly aligned for an
+     int and CMSG_DATA preserves this alignment.  */
   *(int *) CMSG_DATA (cmsg) = -1;
 
   msg.msg_controllen = cmsg->cmsg_len;
 
-  struct pollfd fds[1];
-  fds[0].fd = sock;
-  fds[0].events = POLLIN | POLLERR | POLLHUP;
-  if (__poll (fds, 1, 5 * 1000) <= 0)
-    /* Failure or timeout.  */
+  if (wait_on_socket (sock) <= 0)
     goto out_close2;
 
 #ifndef MSG_NOSIGNAL
 # define MSG_NOSIGNAL 0
 #endif
-  if (TEMP_FAILURE_RETRY (__recvmsg (sock, &msg, MSG_NOSIGNAL)) != keylen)
+  if (__builtin_expect (TEMP_FAILURE_RETRY (__recvmsg (sock, &msg,
+						       MSG_NOSIGNAL))
+			!= keylen, 0))
     goto out_close2;
 
   mapfd = *(int *) CMSG_DATA (cmsg);
 
-  if (CMSG_FIRSTHDR (&msg)->cmsg_len != CMSG_LEN (sizeof (int)))
+  if (__builtin_expect (CMSG_FIRSTHDR (&msg)->cmsg_len
+			!= CMSG_LEN (sizeof (int)), 0))
     goto out_close;
 
   struct stat64 st;
-  if (strcmp (resdata, key) != 0
-      || fstat64 (mapfd, &st) != 0
-      || st.st_size < sizeof (struct database_pers_head))
+  if (__builtin_expect (strcmp (resdata, key) != 0, 0)
+      || __builtin_expect (fstat64 (mapfd, &st) != 0, 0)
+      || __builtin_expect (st.st_size < sizeof (struct database_pers_head), 0))
     goto out_close;
 
   struct database_pers_head head;
-  if (TEMP_FAILURE_RETRY (__pread (mapfd, &head, sizeof (head), 0))
-      != sizeof (head))
+  if (__builtin_expect (TEMP_FAILURE_RETRY (__pread (mapfd, &head,
+						     sizeof (head), 0))
+			!= sizeof (head), 0))
     goto out_close;
 
-  if (head.version != DB_VERSION || head.header_size != sizeof (head)
+  if (__builtin_expect (head.version != DB_VERSION, 0)
+      || __builtin_expect (head.header_size != sizeof (head), 0)
       /* This really should not happen but who knows, maybe the update
 	 thread got stuck.  */
-      || (! head.nscd_certainly_running
-	  && head.timestamp + MAPPING_TIMEOUT < time (NULL)))
+      || __builtin_expect (! head.nscd_certainly_running
+			   && head.timestamp + MAPPING_TIMEOUT < time (NULL),
+			   0))
     goto out_close;
 
   size_t size = (sizeof (head) + roundup (head.module * sizeof (ref_t), ALIGN)
 		 + head.data_size);
 
-  if (st.st_size < size)
+  if (__builtin_expect (st.st_size < size, 0))
     goto out_close;
 
   /* The file is large enough, map it now.  */
   void *mapping = __mmap (NULL, size, PROT_READ, MAP_SHARED, mapfd, 0);
-  if (mapping != MAP_FAILED)
+  if (__builtin_expect (mapping != MAP_FAILED, 1))
     {
       /* Allocate a record for the mapping.  */
-      struct mapped_database *newp;
-
-      newp = malloc (sizeof (*newp));
+      struct mapped_database *newp = malloc (sizeof (*newp));
       if (newp == NULL)
 	{
 	  /* Ugh, after all we went through the memory allocation failed.  */
-	  __munmap (result, size);
+	  __munmap (mapping, size);
 	  goto out_close;
 	}
 
@@ -372,19 +410,13 @@ __nscd_open_socket (const char *key, size_t keylen, request_type type,
       vec[1].iov_len = keylen;
 
       ssize_t nbytes = TEMP_FAILURE_RETRY (__writev (sock, vec, 2));
-      if (nbytes == (ssize_t) (sizeof (request_header) + keylen))
-	{
+      if (nbytes == (ssize_t) (sizeof (request_header) + keylen)
 	  /* Wait for data.  */
-	  struct pollfd fds[1];
-	  fds[0].fd = sock;
-	  fds[0].events = POLLIN | POLLERR | POLLHUP;
-	  if (__poll (fds, 1, 5 * 1000) > 0)
-	    {
-	      nbytes = TEMP_FAILURE_RETRY (__read (sock, response,
-						   responselen));
-	      if (nbytes == (ssize_t) responselen)
-		return sock;
-	    }
+	  && wait_on_socket (sock) > 0)
+	{
+	  nbytes = TEMP_FAILURE_RETRY (__read (sock, response, responselen));
+	  if (nbytes == (ssize_t) responselen)
+	    return sock;
 	}
 
       close_not_cancel_no_status (sock);
diff --git a/posix/bits/unistd.h b/posix/bits/unistd.h
index cb82818ade..b6c756a9de 100644
--- a/posix/bits/unistd.h
+++ b/posix/bits/unistd.h
@@ -128,3 +128,101 @@ __NTH (getwd (char *__buf))
   return __getwd_alias (__buf);
 }
 #endif
+
+extern size_t __confstr_chk (int __name, char *__buf, size_t __len,
+			     size_t __buflen) __THROW;
+extern size_t __REDIRECT_NTH (__confstr_alias, (int __name, char *__buf,
+						size_t __len), confstr);
+
+extern __always_inline size_t
+confstr (int __name, char *__buf, size_t __len)
+{
+  if (__bos (__buf) != (size_t) -1
+      && (!__builtin_constant_p (__len) || __bos (__buf) < __len))
+    return __confstr_chk (__name, __buf, __len, __bos (__buf));
+  return __confstr_alias (__name, __buf, __len);
+}
+
+
+extern int __getgroups_chk (int __size, __gid_t __list[], size_t listlen)
+     __THROW __wur;
+extern int __REDIRECT_NTH (__getgroups_alias, (int __size, __gid_t __list[]),
+			   getgroups) __wur;
+
+extern __always_inline int
+getgroups (int __size, __gid_t __list[])
+{
+  if (__bos (__list) != (size_t) -1
+      && (!__builtin_constant_p (__size)
+	  || __size * sizeof (__gid_t) > __bos (__list)))
+    return __getgroups_chk (__size, __list, __bos (__list));
+  return __getgroups_alias (__size, __list);
+}
+
+
+extern int __ttyname_r_chk (int __fd, char *__buf, size_t __buflen,
+			    size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ttyname_r_alias, (int __fd, char *__buf,
+					       size_t __buflen), ttyname_r)
+     __nonnull ((2));
+
+extern __always_inline int
+ttyname_r (int __fd, char *__buf, size_t __buflen)
+{
+  if (__bos (__buf) != (size_t) -1
+      && (!__builtin_constant_p (__buflen) || __buflen > __bos (__buf)))
+    return __ttyname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+  return __ttyname_r_alias (__fd, __buf, __buflen);
+}
+
+
+#if defined __USE_REENTRANT || defined __USE_UNIX98
+extern int __getlogin_r_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __nonnull ((1));
+extern int __REDIRECT (__getlogin_r_alias, (char *__buf, size_t __buflen),
+		       getlogin_r) __nonnull ((1));
+
+extern __always_inline int
+getlogin_r (char *__buf, size_t __buflen)
+{
+  if (__bos (__buf) != (size_t) -1
+      && (!__builtin_constant_p (__buflen) || __buflen > __bos (__buf)))
+    return __getlogin_r_chk (__buf, __buflen, __bos (__buf));
+  return __getlogin_r_alias (__buf, __buflen);
+}
+#endif
+
+
+#if defined __USE_BSD || defined __USE_UNIX98
+extern int __gethostname_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __THROW __nonnull ((1));
+extern int __REDIRECT_NTH (__gethostname_alias, (char *__buf, size_t __buflen),
+			   gethostname) __nonnull ((1));
+
+extern __always_inline int
+gethostname (char *__buf, size_t __buflen)
+{
+  if (__bos (__buf) != (size_t) -1
+      && (!__builtin_constant_p (__buflen) || __buflen > __bos (__buf)))
+    return __gethostname_chk (__buf, __buflen, __bos (__buf));
+  return __gethostname_alias (__buf, __buflen);
+}
+#endif
+
+
+#if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98)
+extern int __getdomainname_chk (char *__buf, size_t __buflen, size_t __nreal)
+     __THROW __nonnull ((1)) __wur;
+extern int __REDIRECT_NTH (__getdomainname_alias, (char *__buf,
+						   size_t __buflen),
+			   getdomainname) __nonnull ((1)) __wur;
+
+extern __always_inline int
+getdomainname (char *__buf, size_t __buflen)
+{
+  if (__bos (__buf) != (size_t) -1
+      && (!__builtin_constant_p (__buflen) || __buflen > __bos (__buf)))
+    return __getdomainname_chk (__buf, __buflen, __bos (__buf));
+  return __getdomainname_alias (__buf, __buflen);
+}
+#endif
diff --git a/posix/getopt.c b/posix/getopt.c
index 9ad13a4a92..b1cecd31aa 100644
--- a/posix/getopt.c
+++ b/posix/getopt.c
@@ -576,10 +576,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
 		  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		  if (_IO_fwide (stderr, 0) > 0)
-		    __fwprintf (stderr, L"%s", buf);
-		  else
-		    fputs (buf, stderr);
+		  __fxprintf (NULL, "%s", buf);
 
 		  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 		  _IO_funlockfile (stderr);
@@ -654,10 +651,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			  ((_IO_FILE *) stderr)->_flags2
 			    |= _IO_FLAGS2_NOTCANCEL;
 
-			  if (_IO_fwide (stderr, 0) > 0)
-			    __fwprintf (stderr, L"%s", buf);
-			  else
-			    fputs (buf, stderr);
+			  __fxprintf (NULL, "%s", buf);
 
 			  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 			  _IO_funlockfile (stderr);
@@ -694,10 +688,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			  ((_IO_FILE *) stderr)->_flags2
 			    |= _IO_FLAGS2_NOTCANCEL;
 
-			  if (_IO_fwide (stderr, 0) > 0)
-			    __fwprintf (stderr, L"%s", buf);
-			  else
-			    fputs (buf, stderr);
+			  __fxprintf (NULL, "%s", buf);
 
 			  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 			  _IO_funlockfile (stderr);
@@ -771,10 +762,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		  int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
 		  ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		  if (_IO_fwide (stderr, 0) > 0)
-		    __fwprintf (stderr, L"%s", buf);
-		  else
-		    fputs (buf, stderr);
+		  __fxprintf (NULL, "%s", buf);
 
 		  ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 		  _IO_funlockfile (stderr);
@@ -837,10 +825,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
 		((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		if (_IO_fwide (stderr, 0) > 0)
-		  __fwprintf (stderr, L"%s", buf);
-		else
-		  fputs (buf, stderr);
+		__fxprintf (NULL, "%s", buf);
 
 		((_IO_FILE *) stderr)->_flags2 = old_flags2;
 		_IO_funlockfile (stderr);
@@ -888,10 +873,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
 		    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		    if (_IO_fwide (stderr, 0) > 0)
-		      __fwprintf (stderr, L"%s", buf);
-		    else
-		      fputs (buf, stderr);
+		    __fxprintf (NULL, "%s", buf);
 
 		    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 		    _IO_funlockfile (stderr);
@@ -960,10 +942,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 		    int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
 		    ((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-		    if (_IO_fwide (stderr, 0) > 0)
-		      __fwprintf (stderr, L"%s", buf);
-		    else
-		      fputs (buf, stderr);
+		    __fxprintf (NULL, "%s", buf);
 
 		    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 		    _IO_funlockfile (stderr);
@@ -1005,10 +984,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			    ((_IO_FILE *) stderr)->_flags2
 			      |= _IO_FLAGS2_NOTCANCEL;
 
-			    if (_IO_fwide (stderr, 0) > 0)
-			      __fwprintf (stderr, L"%s", buf);
-			    else
-			      fputs (buf, stderr);
+			    __fxprintf (NULL, "%s", buf);
 
 			    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 			    _IO_funlockfile (stderr);
@@ -1047,10 +1023,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			    ((_IO_FILE *) stderr)->_flags2
 			      |= _IO_FLAGS2_NOTCANCEL;
 
-			    if (_IO_fwide (stderr, 0) > 0)
-			      __fwprintf (stderr, L"%s", buf);
-			    else
-			      fputs (buf, stderr);
+			    __fxprintf (NULL, "%s", buf);
 
 			    ((_IO_FILE *) stderr)->_flags2 = old_flags2;
 			    _IO_funlockfile (stderr);
@@ -1121,10 +1094,7 @@ _getopt_internal_r (int argc, char *const *argv, const char *optstring,
 			int old_flags2 = ((_IO_FILE *) stderr)->_flags2;
 			((_IO_FILE *) stderr)->_flags2 |= _IO_FLAGS2_NOTCANCEL;
 
-			if (_IO_fwide (stderr, 0) > 0)
-			  __fwprintf (stderr, L"%s", buf);
-			else
-			  fputs (buf, stderr);
+			__fxprintf (NULL, "%s", buf);
 
 			((_IO_FILE *) stderr)->_flags2 = old_flags2;
 			_IO_funlockfile (stderr);
diff --git a/posix/regcomp.c b/posix/regcomp.c
index 2053b024dc..37e06797ac 100644
--- a/posix/regcomp.c
+++ b/posix/regcomp.c
@@ -774,8 +774,6 @@ re_compile_internal (preg, pattern, length, syntax)
     }
   preg->used = sizeof (re_dfa_t);
 
-  __libc_lock_init (dfa->lock);
-
   err = init_dfa (dfa, length);
   if (BE (err != REG_NOERROR, 0))
     {
@@ -789,6 +787,8 @@ re_compile_internal (preg, pattern, length, syntax)
   strncpy (dfa->re_str, pattern, length + 1);
 #endif
 
+  __libc_lock_init (dfa->lock);
+
   err = re_string_construct (&regexp, pattern, length, preg->translate,
 			     syntax & RE_ICASE, dfa);
   if (BE (err != REG_NOERROR, 0))
diff --git a/resolv/res_hconf.c b/resolv/res_hconf.c
index 91cd300482..9beb881701 100644
--- a/resolv/res_hconf.c
+++ b/resolv/res_hconf.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995-2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995-2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by David Mosberger (davidm@azstarnet.com).
 
@@ -150,12 +150,7 @@ arg_service_list (const char *fname, int line_num, const char *args,
 			  fname, line_num, start) < 0)
 	    return 0;
 
-#ifdef USE_IN_LIBIO
-	  if (_IO_fwide (stderr, 0) > 0)
-	    __fwprintf (stderr, L"%s", buf);
-	  else
-#endif
-	    fputs (buf, stderr);
+	  __fxprintf (NULL, "%s", buf);
 
 	  free (buf);
 	  return 0;
@@ -169,12 +164,7 @@ arg_service_list (const char *fname, int line_num, const char *args,
 			  fname, line_num, SERVICE_MAX) < 0)
 	    return 0;
 
-#ifdef USE_IN_LIBIO
-	  if (_IO_fwide (stderr, 0) > 0)
-	    __fwprintf (stderr, L"%s", buf);
-	  else
-#endif
-	    fputs (buf, stderr);
+	  __fxprintf (NULL, "%s", buf);
 
 	  free (buf);
 	  return 0;
@@ -197,12 +187,7 @@ arg_service_list (const char *fname, int line_num, const char *args,
 			      fname, line_num) < 0)
 		return 0;
 
-#ifdef USE_IN_LIBIO
-	      if (_IO_fwide (stderr, 0) > 0)
-		__fwprintf (stderr, L"%s", buf);
-	      else
-#endif
-		fputs (buf, stderr);
+	      __fxprintf (NULL, "%s", buf);
 
 	      free (buf);
 	      return 0;
@@ -238,14 +223,9 @@ arg_trimdomain_list (const char *fname, int line_num, const char *args,
 			  fname, line_num, TRIMDOMAINS_MAX) < 0)
 	    return 0;
 
-#ifdef USE_IN_LIBIO
-	      if (_IO_fwide (stderr, 0) > 0)
-		__fwprintf (stderr, L"%s", buf);
-	      else
-#endif
-		fputs (buf, stderr);
+	  __fxprintf (NULL, "%s", buf);
 
-	      free (buf);
+	  free (buf);
 	  return 0;
 	}
       _res_hconf.trimdomain[_res_hconf.num_trimdomains++] =
@@ -264,12 +244,7 @@ arg_trimdomain_list (const char *fname, int line_num, const char *args,
 			      fname, line_num) < 0)
 		return 0;
 
-#ifdef USE_IN_LIBIO
-	      if (_IO_fwide (stderr, 0) > 0)
-		__fwprintf (stderr, L"%s", buf);
-	      else
-#endif
-		fputs (buf, stderr);
+	      __fxprintf (NULL, "%s", buf);
 
 	      free (buf);
 	      return 0;
@@ -327,12 +302,7 @@ arg_bool (const char *fname, int line_num, const char *args, unsigned flag)
 		      fname, line_num, args) < 0)
 	return 0;
 
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s", buf);
-      else
-#endif
-	fputs (buf, stderr);
+      __fxprintf (NULL, "%s", buf);
 
       free (buf);
       return 0;
@@ -375,12 +345,7 @@ parse_line (const char *fname, int line_num, const char *str)
 		      fname, line_num, start) < 0)
 	return;
 
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s", buf);
-      else
-#endif
-	fputs (buf, stderr);
+      __fxprintf (NULL, "%s", buf);
 
       free (buf);
       return;
@@ -405,12 +370,7 @@ parse_line (const char *fname, int line_num, const char *str)
 			    fname, line_num, str) < 0)
 	      break;
 
-#ifdef USE_IN_LIBIO
-	    if (_IO_fwide (stderr, 0) > 0)
-	      __fwprintf (stderr, L"%s", buf);
-	    else
-#endif
-	      fputs (buf, stderr);
+	    __fxprintf (NULL, "%s", buf);
 
 	    free (buf);
 	  }
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index 2e797e4dfe..d860d75dee 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -40,7 +40,7 @@ install-others = $(inst_includedir)/bits/stdio_lim.h
 
 include ../Makeconfig
 
-aux	:= errlist siglist printf-parsemb printf-parsewc
+aux	:= errlist siglist printf-parsemb printf-parsewc fxprintf
 distribute := _itoa.h _itowa.h _i18n_number.h \
 	      printf-parse.h stdio_lim.h.in tst-unbputc.sh tst-printf.sh
 
diff --git a/stdio-common/fxprintf.c b/stdio-common/fxprintf.c
new file mode 100644
index 0000000000..298e5f22b0
--- /dev/null
+++ b/stdio-common/fxprintf.c
@@ -0,0 +1,54 @@
+/* Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@gnu.org>.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <assert.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <wchar.h>
+
+
+int
+__fxprintf (FILE *fp, const char *fmt, ...)
+{
+  if (fp == NULL)
+    fp = stderr;
+
+  va_list ap;
+  va_start (ap, fmt);
+
+  int res;
+  if (_IO_fwide (fp, 0) > 0)
+    {
+      size_t len = strlen (fmt) + 1, i;
+      wchar_t wfmt[len];
+      for (i = 0; i < len; ++i)
+	{
+	  assert (isascii (fmt[i]));
+	  wfmt[i] = fmt[i];
+	}
+      res = __vfwprintf (fp, wfmt, ap);
+    }
+  else
+    res = _IO_vfprintf (fp, fmt, ap);
+
+  va_end (ap);
+
+  return res;
+}
diff --git a/stdio-common/perror.c b/stdio-common/perror.c
index f0751375b5..3ee61520f4 100644
--- a/stdio-common/perror.c
+++ b/stdio-common/perror.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1993,1997,1998,2000-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1991-1993,1997,1998,2000-2005 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
@@ -37,10 +37,7 @@ perror_internal (FILE *fp, const char *s, int errnum)
 
   errstring = __strerror_r (errnum, buf, sizeof buf);
 
-  if (_IO_fwide (fp, 0) > 0)
-    (void) __fwprintf (fp, L"%s%s%s\n", s, colon, errstring);
-  else
-    (void) fprintf (fp, "%s%s%s\n", s, colon, errstring);
+  (void) __fxprintf (fp, "%s%s%s\n", s, colon, errstring);
 }
 
 
diff --git a/stdio-common/psignal.c b/stdio-common/psignal.c
index 2e6588c692..be95095350 100644
--- a/stdio-common/psignal.c
+++ b/stdio-common/psignal.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 2001, 2002, 2004
+/* Copyright (C) 1991, 1992, 1995, 1996, 1997, 2001, 2002, 2004, 2005
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -47,29 +47,16 @@ psignal (int sig, const char *s)
     colon = ": ";
 
   if (sig >= 0 && sig < NSIG && (desc = INTUSE(_sys_siglist)[sig]) != NULL)
-    {
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s%s%s\n", s, colon, _(desc));
-      else
-	(void) fprintf (stderr, "%s%s%s\n", s, colon, _(desc));
-    }
+    (void) __fxprintf (NULL, "%s%s%s\n", s, colon, _(desc));
   else
     {
       char *buf;
 
       if (__asprintf (&buf, _("%s%sUnknown signal %d\n"), s, colon, sig) < 0)
-	{
-	  if (_IO_fwide (stderr, 0) > 0)
-	    (void) __fwprintf (stderr, L"%s%s%s\n", s, colon, _("Unknown signal"));
-	  else
-	    (void) fprintf (stderr, "%s%s%s\n", s, colon, _("Unknown signal"));
-	}
+	(void) __fxprintf (NULL, "%s%s%s\n", s, colon, _("Unknown signal"));
       else
 	{
-	  if (_IO_fwide (stderr, 0) > 0)
-	    (void) __fwprintf (stderr, L"%s",  buf);
-	  else
-	    (void) fputs (buf, stderr);
+	  (void) __fxprintf (NULL, "%s", buf);
 
 	  free (buf);
 	}
diff --git a/stdlib/Makefile b/stdlib/Makefile
index fafe6061a0..841663129d 100644
--- a/stdlib/Makefile
+++ b/stdlib/Makefile
@@ -23,7 +23,7 @@ subdir	:= stdlib
 
 headers	:= stdlib.h alloca.h monetary.h fmtmsg.h ucontext.h sys/ucontext.h    \
 	   inttypes.h stdint.h bits/wordsize.h bits/wchar.h		      \
-	   errno.h sys/errno.h bits/errno.h
+	   errno.h sys/errno.h bits/errno.h bits/stdlib.h
 
 routines	:=							      \
 	atof atoi atol atoll						      \
diff --git a/stdlib/bits/stdlib.h b/stdlib/bits/stdlib.h
new file mode 100644
index 0000000000..7ca6c8613c
--- /dev/null
+++ b/stdlib/bits/stdlib.h
@@ -0,0 +1,75 @@
+/* Checking macros for stdlib functions.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _STDLIB_H
+# error "Never include <bits/stdlib.h> directly; use <stdlib.h> instead."
+#endif
+
+extern char *__realpath_chk (__const char *__restrict __name,
+			     char *__restrict __resolved,
+			     size_t __resolvedlen) __THROW __wur;
+extern char *__REDIRECT_NTH (__realpath_alias,
+			     (__const char *__restrict __name,
+			      char *__restrict __resolved), realpath) __wur;
+
+extern __always_inline __wur char *
+realpath (const char *__name, char *__resolved)
+{
+  if (__bos (__resolved) != (size_t) -1)
+    return __realpath_chk (__name, __resolved, __bos (__resolved));
+
+  return __realpath_alias (__name, __resolved);
+}
+
+
+extern int __ptsname_r_chk (int __fd, char *__buf, size_t __buflen,
+			    size_t __nreal) __THROW __nonnull ((2));
+extern int __REDIRECT_NTH (__ptsname_r_alias, (int __fd, char *__buf,
+					       size_t __buflen), ptsname_r)
+     __nonnull ((2));
+
+extern __always_inline int
+ptsname_r (int __fd, char *__buf, size_t __buflen)
+{
+  if (__bos (__buf) != (size_t) -1
+      && (!__builtin_constant_p (__buflen) || __buflen > __bos (__buf)))
+    return __ptsname_r_chk (__fd, __buf, __buflen, __bos (__buf));
+  return __ptsname_r_alias (__fd, __buf, __buflen);
+}
+
+
+extern int __wctomb_chk (char *__s, wchar_t __wchar, size_t __buflen)
+  __THROW __wur;
+extern int __REDIRECT_NTH (__wctomb_alias, (char *__s, wchar_t __wchar),
+			   wctomb) __wur;
+
+extern __always_inline __wur int
+wctomb (char *__s, wchar_t __wchar)
+{
+  /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+     But this would only disturb the namespace.  So we define our own
+     version here.  */
+#define __STDLIB_MB_LEN_MAX	16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __STDLIB_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+  if (__bos (__s) != (size_t) -1 && __STDLIB_MB_LEN_MAX > __bos (__s))
+    return __wctomb_chk (__s, __wchar, __bos (__s));
+  return __wctomb_alias (__s, __wchar);
+}
diff --git a/stdlib/fmtmsg.c b/stdlib/fmtmsg.c
index b5d7436956..e0f4061cee 100644
--- a/stdlib/fmtmsg.c
+++ b/stdlib/fmtmsg.c
@@ -154,42 +154,21 @@ fmtmsg (long int classification, const char *label, int severity,
       int do_action = (print & action_mask) && action != MM_NULLACT;
       int do_tag = (print & tag_mask) && tag != MM_NULLTAG;
 
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	{
-	  if (__fwprintf (stderr, L"%s%s%s%s%s%s%s%s%s%s\n",
-			  do_label ? label : "",
-			  do_label
-			  && (do_severity | do_text | do_action | do_tag)
-			  ? ": " : "",
-			  do_severity ? severity_rec->string : "",
-			  do_severity && (do_text | do_action | do_tag)
-			  ? ": " : "",
-			  do_text ? text : "",
-			  do_text && (do_action | do_tag) ? "\n" : "",
-			  do_action ? "TO FIX: " : "",
-			  do_action ? action : "",
-			  do_action && do_tag ? "  " : "",
-			  do_tag ? tag : "") < 0)
-	    /* Oh, oh.  An error occurred during the output.  */
-	    result = MM_NOMSG;
-	}
-      else
-#endif
-	if (fprintf (stderr, "%s%s%s%s%s%s%s%s%s%s\n",
-		     do_label ? label : "",
-		     do_label && (do_severity | do_text | do_action | do_tag)
-		     ? ": " : "",
-		     do_severity ? severity_rec->string : "",
-		     do_severity && (do_text | do_action | do_tag) ? ": " : "",
-		     do_text ? text : "",
-		     do_text && (do_action | do_tag) ? "\n" : "",
-		     do_action ? "TO FIX: " : "",
-		     do_action ? action : "",
-		     do_action && do_tag ? "  " : "",
-		     do_tag ? tag : "") < 0)
-	  /* Oh, oh.  An error occurred during the output.  */
-	  result = MM_NOMSG;
+      if (__fxprintf (stderr, "%s%s%s%s%s%s%s%s%s%s\n",
+		      do_label ? label : "",
+		      do_label && (do_severity | do_text | do_action | do_tag)
+		      ? ": " : "",
+		      do_severity ? severity_rec->string : "",
+		      do_severity && (do_text | do_action | do_tag)
+		      ? ": " : "",
+		      do_text ? text : "",
+		      do_text && (do_action | do_tag) ? "\n" : "",
+		      do_action ? "TO FIX: " : "",
+		      do_action ? action : "",
+		      do_action && do_tag ? "  " : "",
+		      do_tag ? tag : "") < 0)
+	/* Oh, oh.  An error occurred during the output.  */
+	result = MM_NOMSG;
     }
 
   if (classification & MM_CONSOLE)
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 4a1571e7db..bff7722e2c 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -618,7 +618,7 @@ extern void *valloc (size_t __size) __THROW __attribute_malloc__ __wur;
 #ifdef __USE_XOPEN2K
 /* Allocate memory of SIZE bytes with an alignment of ALIGNMENT.  */
 extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
-     __THROW __attribute_malloc__ __nonnull ((1)) __wur;
+     __THROW __nonnull ((1)) __wur;
 #endif
 
 __BEGIN_NAMESPACE_STD
@@ -961,6 +961,12 @@ extern int getloadavg (double __loadavg[], int __nelem)
      __THROW __nonnull ((1));
 #endif
 
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
+# include <bits/stdlib.h>
+#endif
+
 #endif /* don't just need malloc and calloc */
 #undef __need_malloc_and_calloc
 
diff --git a/string/bits/string3.h b/string/bits/string3.h
index bcda42a232..8da73ffde2 100644
--- a/string/bits/string3.h
+++ b/string/bits/string3.h
@@ -144,6 +144,22 @@ __strncpy_ichk (char *__restrict __dest, const char *__restrict __src,
 }
 
 
+// XXX We have no corresponding builtin yet.
+extern char *__stpncpy_chk (char *__dest, const char *__src, size_t __n,
+			    size_t __destlen) __THROW;
+extern char *__REDIRECT (__stpncpy_alias, (char *__dest, const char *__src,
+					   size_t __n), stpncpy) __THROW;
+
+extern __always_inline char *
+stpncpy (char *__dest, const char *__src, size_t __n)
+{
+  if (__bos (__dest) != (size_t) -1
+      && (!__builtin_constant_p (__n) || __n <= __bos (__dest)))
+    return __stpncpy_chk (__dest, __src, __n, __bos (__dest));
+  return __stpncpy_alias (__dest, __src, __n);
+}
+
+
 #define strcat(dest, src) \
   ((__bos (dest) != (size_t) -1)					\
    ? __builtin___strcat_chk (dest, src, __bos (dest))			\
diff --git a/sunrpc/auth_unix.c b/sunrpc/auth_unix.c
index 1cf18cb6b3..c5a874bbbe 100644
--- a/sunrpc/auth_unix.c
+++ b/sunrpc/auth_unix.c
@@ -111,13 +111,7 @@ authunix_create (char *machname, uid_t uid, gid_t gid, int len,
   if (auth == NULL || au == NULL)
     {
 no_memory:
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s",
-			   _("authunix_create: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("authunix_create: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s", _("authunix_create: out of memory\n"));
       mem_free (auth, sizeof (*auth));
       mem_free (au, sizeof (*au));
       return NULL;
diff --git a/sunrpc/clnt_perr.c b/sunrpc/clnt_perr.c
index 4fa5e62c0f..6446b32740 100644
--- a/sunrpc/clnt_perr.c
+++ b/sunrpc/clnt_perr.c
@@ -155,12 +155,7 @@ libc_hidden_def (clnt_sperror)
 void
 clnt_perror (CLIENT * rpch, const char *msg)
 {
-#ifdef USE_IN_LIBIO
-  if (_IO_fwide (stderr, 0) > 0)
-    (void) __fwprintf (stderr, L"%s", clnt_sperror (rpch, msg));
-  else
-#endif
-    (void) fputs (clnt_sperror (rpch, msg), stderr);
+  (void) __fxprintf (NULL, "%s", clnt_sperror (rpch, msg));
 }
 libc_hidden_def (clnt_perror)
 
@@ -289,12 +284,7 @@ libc_hidden_def (clnt_sperrno)
 void
 clnt_perrno (enum clnt_stat num)
 {
-#ifdef USE_IN_LIBIO
-  if (_IO_fwide (stderr, 0) > 0)
-    (void) __fwprintf (stderr, L"%s", clnt_sperrno (num));
-  else
-#endif
-    (void) fputs (clnt_sperrno (num), stderr);
+  (void) __fxprintf (NULL, "%s", clnt_sperrno (num));
 }
 
 
@@ -337,12 +327,7 @@ libc_hidden_def (clnt_spcreateerror)
 void
 clnt_pcreateerror (const char *msg)
 {
-#ifdef USE_IN_LIBIO
-  if (_IO_fwide (stderr, 0) > 0)
-    (void) __fwprintf (stderr, L"%s", clnt_spcreateerror (msg));
-  else
-#endif
-    (void) fputs (clnt_spcreateerror (msg), stderr);
+  (void) __fxprintf (NULL, "%s", clnt_spcreateerror (msg));
 }
 
 struct auth_errtab
diff --git a/sunrpc/clnt_tcp.c b/sunrpc/clnt_tcp.c
index 5d02cd99cb..095baa87aa 100644
--- a/sunrpc/clnt_tcp.c
+++ b/sunrpc/clnt_tcp.c
@@ -128,13 +128,7 @@ clnttcp_create (struct sockaddr_in *raddr, u_long prog, u_long vers,
   if (h == NULL || ct == NULL)
     {
       struct rpc_createerr *ce = &get_rpc_createerr ();
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s",
-			   _("clnttcp_create: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("clnttcp_create: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s", _("clnttcp_create: out of memory\n"));
       ce->cf_stat = RPC_SYSTEMERROR;
       ce->cf_error.re_errno = ENOMEM;
       goto fooy;
diff --git a/sunrpc/clnt_udp.c b/sunrpc/clnt_udp.c
index f3787dd1a5..f4a46b5036 100644
--- a/sunrpc/clnt_udp.c
+++ b/sunrpc/clnt_udp.c
@@ -136,13 +136,7 @@ clntudp_bufcreate (struct sockaddr_in *raddr, u_long program, u_long version,
   if (cl == NULL || cu == NULL)
     {
       struct rpc_createerr *ce = &get_rpc_createerr ();
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s",
-			   _("clntudp_create: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("clntudp_create: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s", _("clntudp_create: out of memory\n"));
       ce->cf_stat = RPC_SYSTEMERROR;
       ce->cf_error.re_errno = ENOMEM;
       goto fooy;
diff --git a/sunrpc/clnt_unix.c b/sunrpc/clnt_unix.c
index fae1cd8229..4e93e0d855 100644
--- a/sunrpc/clnt_unix.c
+++ b/sunrpc/clnt_unix.c
@@ -125,13 +125,7 @@ clntunix_create (struct sockaddr_un *raddr, u_long prog, u_long vers,
   if (h == NULL || ct == NULL)
     {
       struct rpc_createerr *ce = &get_rpc_createerr ();
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s",
-			   _("clntunix_create: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("clntunix_create: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s", _("clntunix_create: out of memory\n"));
       ce->cf_stat = RPC_SYSTEMERROR;
       ce->cf_error.re_errno = ENOMEM;
       goto fooy;
diff --git a/sunrpc/svc_simple.c b/sunrpc/svc_simple.c
index 5ac21ffdbd..6c1c9c914e 100644
--- a/sunrpc/svc_simple.c
+++ b/sunrpc/svc_simple.c
@@ -125,12 +125,7 @@ registerrpc (u_long prognum, u_long versnum, u_long procnum,
  err_out:
   if (buf == NULL)
     return -1;
-#ifdef USE_IN_LIBIO
-  if (_IO_fwide (stderr, 0) > 0)
-    (void) __fwprintf (stderr, L"%s", buf);
-  else
-#endif
-    (void) fputs (buf, stderr);
+  (void) __fxprintf (NULL, "%s", buf);
   free (buf);
   return -1;
 }
@@ -189,12 +184,7 @@ universal (struct svc_req *rqstp, SVCXPRT *transp_l)
  err_out2:
   if (buf == NULL)
     exit (1);
-#ifdef USE_IN_LIBIO
-  if (_IO_fwide (stderr, 0) > 0)
-    __fwprintf (stderr, L"%s", buf);
-  else
-#endif
-    fputs (buf, stderr);
+  __fxprintf (NULL, "%s", buf);
   free (buf);
   exit (1);
 }
diff --git a/sunrpc/svc_tcp.c b/sunrpc/svc_tcp.c
index 873d39d52a..539a2b8d98 100644
--- a/sunrpc/svc_tcp.c
+++ b/sunrpc/svc_tcp.c
@@ -176,12 +176,7 @@ svctcp_create (int sock, u_int sendsize, u_int recvsize)
   xprt = (SVCXPRT *) mem_alloc (sizeof (SVCXPRT));
   if (r == NULL || xprt == NULL)
     {
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s", _("svctcp_create: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("svctcp_create: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s", _("svctcp_create: out of memory\n"));
       mem_free (r, sizeof (*r));
       mem_free (xprt, sizeof (SVCXPRT));
       return NULL;
@@ -219,13 +214,8 @@ makefd_xprt (int fd, u_int sendsize, u_int recvsize)
   cd = (struct tcp_conn *) mem_alloc (sizeof (struct tcp_conn));
   if (xprt == (SVCXPRT *) NULL || cd == NULL)
     {
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s",
-			   _("svc_tcp: makefd_xprt: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("svc_tcp: makefd_xprt: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s",
+			 _("svc_tcp: makefd_xprt: out of memory\n"));
       mem_free (xprt, sizeof (SVCXPRT));
       mem_free (cd, sizeof (struct tcp_conn));
       return NULL;
diff --git a/sunrpc/svc_udp.c b/sunrpc/svc_udp.c
index 45f99440b2..c0c115abeb 100644
--- a/sunrpc/svc_udp.c
+++ b/sunrpc/svc_udp.c
@@ -149,12 +149,7 @@ svcudp_bufcreate (sock, sendsz, recvsz)
   buf = mem_alloc (((MAX (sendsz, recvsz) + 3) / 4) * 4);
   if (xprt == NULL || su == NULL || buf == NULL)
     {
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s", _("svcudp_create: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("svcudp_create: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s", _("svcudp_create: out of memory\n"));
       mem_free (xprt, sizeof (SVCXPRT));
       mem_free (su, sizeof (*su));
       mem_free (buf, ((MAX (sendsz, recvsz) + 3) / 4) * 4);
@@ -176,14 +171,8 @@ svcudp_bufcreate (sock, sendsz, recvsz)
        + sizeof(struct cmsghdr) + sizeof (struct in_pktinfo))
       > sizeof (xprt->xp_pad))
     {
-# ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s",
-			   _("svcudp_create: xp_pad is too small for IP_PKTINFO\n"));
-      else
-# endif
-	(void) fputs (_("svcudp_create: xp_pad is too small for IP_PKTINFO\n"),
-		      stderr);
+      (void) __fxprintf (NULL,"%s", _("\
+svcudp_create: xp_pad is too small for IP_PKTINFO\n"));
       return NULL;
     }
   pad = 1;
@@ -411,16 +400,8 @@ svcudp_destroy (xprt)
 
 #define SPARSENESS 4		/* 75% sparse */
 
-#ifdef USE_IN_LIBIO
-# define CACHE_PERROR(msg)	\
-	if (_IO_fwide (stderr, 0) > 0)					      \
-		(void) __fwprintf(stderr, L"%s\n", msg);		      \
-	else								      \
-		(void) fprintf(stderr, "%s\n", msg)
-#else
-# define CACHE_PERROR(msg)	\
-	(void) fprintf(stderr,"%s\n", msg)
-#endif
+#define CACHE_PERROR(msg)	\
+	(void) __fxprintf(NULL, "%s\n", msg)
 
 #define ALLOC(type, size)	\
 	(type *) mem_alloc((unsigned) (sizeof(type) * (size)))
diff --git a/sunrpc/svc_unix.c b/sunrpc/svc_unix.c
index d95e884434..1b7b1fbd4f 100644
--- a/sunrpc/svc_unix.c
+++ b/sunrpc/svc_unix.c
@@ -173,12 +173,7 @@ svcunix_create (int sock, u_int sendsize, u_int recvsize, char *path)
   xprt = (SVCXPRT *) mem_alloc (sizeof (SVCXPRT));
   if (r == NULL || xprt == NULL)
     {
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	__fwprintf (stderr, L"%s", _("svcunix_create: out of memory\n"));
-      else
-#endif
-	fputs (_("svcunix_create: out of memory\n"), stderr);
+      __fxprintf (NULL, "%s", _("svcunix_create: out of memory\n"));
       mem_free (r, sizeof (*r));
       mem_free (xprt, sizeof (SVCXPRT));
       return NULL;
@@ -216,13 +211,8 @@ makefd_xprt (int fd, u_int sendsize, u_int recvsize)
   cd = (struct unix_conn *) mem_alloc (sizeof (struct unix_conn));
   if (xprt == (SVCXPRT *) NULL || cd == (struct unix_conn *) NULL)
     {
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s",
-			   _("svc_unix: makefd_xprt: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("svc_unix: makefd_xprt: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s",
+			 _("svc_unix: makefd_xprt: out of memory\n"));
       mem_free (xprt, sizeof (SVCXPRT));
       mem_free (cd, sizeof (struct unix_conn));
       return NULL;
diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c
index 1f25e3e9c0..21e339b4ee 100644
--- a/sunrpc/xdr.c
+++ b/sunrpc/xdr.c
@@ -563,12 +563,7 @@ xdr_bytes (xdrs, cpp, sizep, maxsize)
 	}
       if (sp == NULL)
 	{
-#ifdef USE_IN_LIBIO
-	  if (_IO_fwide (stderr, 0) > 0)
-	    (void) __fwprintf (stderr, L"%s", _("xdr_bytes: out of memory\n"));
-	  else
-#endif
-	    (void) fputs (_("xdr_bytes: out of memory\n"), stderr);
+	  (void) __fxprintf (NULL, "%s", _("xdr_bytes: out of memory\n"));
 	  return FALSE;
 	}
       /* fall into ... */
@@ -720,13 +715,7 @@ xdr_string (xdrs, cpp, maxsize)
 	*cpp = sp = (char *) mem_alloc (nodesize);
       if (sp == NULL)
 	{
-#ifdef USE_IN_LIBIO
-	  if (_IO_fwide (stderr, 0) > 0)
-	    (void) __fwprintf (stderr, L"%s",
-			       _("xdr_string: out of memory\n"));
-	  else
-#endif
-	    (void) fputs (_("xdr_string: out of memory\n"), stderr);
+	  (void) __fxprintf (NULL, "%s", _("xdr_string: out of memory\n"));
 	  return FALSE;
 	}
       sp[size] = 0;
diff --git a/sunrpc/xdr_array.c b/sunrpc/xdr_array.c
index 9f67e7fe62..765f8995d3 100644
--- a/sunrpc/xdr_array.c
+++ b/sunrpc/xdr_array.c
@@ -105,13 +105,7 @@ xdr_array (xdrs, addrp, sizep, maxsize, elsize, elproc)
 	*addrp = target = mem_alloc (nodesize);
 	if (target == NULL)
 	  {
-#ifdef USE_IN_LIBIO
-	    if (_IO_fwide (stderr, 0) > 0)
-	      (void) __fwprintf (stderr, L"%s",
-				 _("xdr_array: out of memory\n"));
-	    else
-#endif
-	      (void) fputs (_("xdr_array: out of memory\n"), stderr);
+	    (void) __fxprintf (NULL, "%s", _("xdr_array: out of memory\n"));
 	    return FALSE;
 	  }
 	__bzero (target, nodesize);
diff --git a/sunrpc/xdr_rec.c b/sunrpc/xdr_rec.c
index 5e59c88523..1be3a4ad26 100644
--- a/sunrpc/xdr_rec.c
+++ b/sunrpc/xdr_rec.c
@@ -153,12 +153,7 @@ xdrrec_create (XDR *xdrs, u_int sendsize,
 
   if (rstrm == NULL || buf == NULL)
     {
-#ifdef USE_IN_LIBIO
-      if (_IO_fwide (stderr, 0) > 0)
-	(void) __fwprintf (stderr, L"%s", _("xdrrec_create: out of memory\n"));
-      else
-#endif
-	(void) fputs (_("xdrrec_create: out of memory\n"), stderr);
+      (void) __fxprintf (NULL, "%s", _("xdrrec_create: out of memory\n"));
       mem_free (rstrm, sizeof (RECSTREAM));
       mem_free (buf, sendsize + recvsize + BYTES_PER_XDR_UNIT);
       /*
diff --git a/sunrpc/xdr_ref.c b/sunrpc/xdr_ref.c
index ab706d7f84..961c82edd2 100644
--- a/sunrpc/xdr_ref.c
+++ b/sunrpc/xdr_ref.c
@@ -82,13 +82,8 @@ xdr_reference (xdrs, pp, size, proc)
 	*pp = loc = (caddr_t) mem_alloc (size);
 	if (loc == NULL)
 	  {
-#ifdef USE_IN_LIBIO
-	    if (_IO_fwide (stderr, 0) > 0)
-	      (void) __fwprintf (stderr, L"%s",
-				 _("xdr_reference: out of memory\n"));
-	    else
-#endif
-	      (void) fputs (_("xdr_reference: out of memory\n"), stderr);
+	    (void) __fxprintf (NULL, "%s",
+			       _("xdr_reference: out of memory\n"));
 	    return FALSE;
 	  }
 	__bzero (loc, (int) size);
diff --git a/sysdeps/alpha/fpu/feholdexcpt.c b/sysdeps/alpha/fpu/feholdexcpt.c
index 77d4cc1180..79aa970ac0 100644
--- a/sysdeps/alpha/fpu/feholdexcpt.c
+++ b/sysdeps/alpha/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@tamu.edu>, 1997
 
@@ -31,3 +31,4 @@ feholdexcept (fenv_t *envp)
 
   return 0;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/alpha/fpu/fesetround.c b/sysdeps/alpha/fpu/fesetround.c
index c4dc196016..54b2bcf673 100644
--- a/sysdeps/alpha/fpu/fesetround.c
+++ b/sysdeps/alpha/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1997, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Richard Henderson <rth@tamu.edu>, 1997
 
@@ -40,3 +40,4 @@ fesetround (int round)
 
   return 0;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/generic/clock_gettime.c b/sysdeps/generic/clock_gettime.c
index 85bb79c548..ff306120ba 100644
--- a/sysdeps/generic/clock_gettime.c
+++ b/sysdeps/generic/clock_gettime.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2005 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
@@ -26,5 +26,6 @@ clock_gettime (clockid_t clock_id, struct timespec *tp)
   __set_errno (ENOSYS);
   return -1;
 }
+librt_hidden_def (clock_gettime)
 stub_warning (clock_gettime)
 #include <stub-tag.h>
diff --git a/sysdeps/generic/feholdexcpt.c b/sysdeps/generic/feholdexcpt.c
index 927a6dc95c..8680d1e492 100644
--- a/sysdeps/generic/feholdexcpt.c
+++ b/sysdeps/generic/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -25,5 +25,6 @@ feholdexcept (fenv_t *envp)
 {
   return 1;		/* Signal failure.  */
 }
+libm_hidden_def (feholdexcept)
 stub_warning (feholdexcept)
 #include <stub-tag.h>
diff --git a/sysdeps/generic/fesetround.c b/sysdeps/generic/fesetround.c
index e5a27d2aa0..5b14826390 100644
--- a/sysdeps/generic/fesetround.c
+++ b/sysdeps/generic/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -25,5 +25,6 @@ fesetround (int round)
 {
   return 1;	/* Signal we are unable to set the direction.  */
 }
+libm_hidden_def (fesetround)
 stub_warning (fesetround)
 #include <stub-tag.h>
diff --git a/sysdeps/generic/s_significand.c b/sysdeps/generic/s_significand.c
index 4ab078c473..f95b6481c2 100644
--- a/sysdeps/generic/s_significand.c
+++ b/sysdeps/generic/s_significand.c
@@ -30,7 +30,7 @@ static char rcsid[] = "$NetBSD: s_significand.c,v 1.6 1995/05/10 20:48:11 jtc Ex
 	double x;
 #endif
 {
-	return __ieee754_scalb(x,(double) -ilogb(x));
+	return __ieee754_scalb(x,(double) -__ilogb(x));
 }
 weak_alias (__significand, significand)
 #ifdef NO_LONG_DOUBLE
diff --git a/sysdeps/generic/s_significandf.c b/sysdeps/generic/s_significandf.c
index 2893a4e1b7..cf5eb59efc 100644
--- a/sysdeps/generic/s_significandf.c
+++ b/sysdeps/generic/s_significandf.c
@@ -8,7 +8,7 @@
  *
  * Developed at SunPro, a Sun Microsystems, Inc. business.
  * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice 
+ * software is freely granted, provided that this notice
  * is preserved.
  * ====================================================
  */
@@ -27,6 +27,6 @@ static char rcsid[] = "$NetBSD: s_significandf.c,v 1.3 1995/05/10 20:48:13 jtc E
 	float x;
 #endif
 {
-	return __ieee754_scalbf(x,(float) -ilogbf(x));
+	return __ieee754_scalbf(x,(float) -__ilogbf(x));
 }
 weak_alias (__significandf, significandf)
diff --git a/sysdeps/generic/stpncpy_chk.c b/sysdeps/generic/stpncpy_chk.c
new file mode 100644
index 0000000000..d136339dea
--- /dev/null
+++ b/sysdeps/generic/stpncpy_chk.c
@@ -0,0 +1,85 @@
+/* Copyright (C) 1993,1995,1996,1997,2002,2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+/* This is almost copied from strncpy.c, written by Torbjorn Granlund.  */
+
+#include <string.h>
+
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the terminating '\0' in DEST, if any, or else DEST + N.  */
+char *
+__stpncpy_chk (char *dest, const char *src, size_t n, size_t destlen)
+{
+  char c;
+  char *s = dest;
+
+  if (__builtin_expect (destlen < n, 0))
+    __chk_fail ();
+
+  if (n >= 4)
+    {
+      size_t n4 = n >> 2;
+
+      for (;;)
+	{
+	  c = *src++;
+	  *dest++ = c;
+	  if (c == '\0')
+	    break;
+	  c = *src++;
+	  *dest++ = c;
+	  if (c == '\0')
+	    break;
+	  c = *src++;
+	  *dest++ = c;
+	  if (c == '\0')
+	    break;
+	  c = *src++;
+	  *dest++ = c;
+	  if (c == '\0')
+	    break;
+	  if (--n4 == 0)
+	    goto last_chars;
+	}
+      n -= dest - s;
+      goto zero_fill;
+    }
+
+ last_chars:
+  n &= 3;
+  if (n == 0)
+    return dest;
+
+  for (;;)
+    {
+      c = *src++;
+      --n;
+      *dest++ = c;
+      if (c == '\0')
+	break;
+      if (n == 0)
+	return dest;
+    }
+
+ zero_fill:
+  while (n-- > 0)
+    dest[n] = '\0';
+
+  return dest - 1;
+}
diff --git a/sysdeps/generic/wordexp.c b/sysdeps/generic/wordexp.c
index 06d38f6b24..2eb58089c4 100644
--- a/sysdeps/generic/wordexp.c
+++ b/sysdeps/generic/wordexp.c
@@ -1798,12 +1798,7 @@ envsubst:
 	      if (str[0] == '\0')
 		str = _("parameter null or not set");
 
-#ifdef USE_IN_LIBIO
-	      if (_IO_fwide (stderr, 0) > 0)
-		__fwprintf (stderr, L"%s: %s\n", env, str);
-	      else
-#endif
-		fprintf (stderr, "%s: %s\n", env, str);
+	      __fxprintf (NULL, "%s: %s\n", env, str);
 	    }
 
 	  if (free_value)
diff --git a/sysdeps/i386/fpu/feholdexcpt.c b/sysdeps/i386/fpu/feholdexcpt.c
index 55096869a1..feaa24b8d9 100644
--- a/sysdeps/i386/fpu/feholdexcpt.c
+++ b/sysdeps/i386/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997, 1999, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -51,3 +51,4 @@ feholdexcept (fenv_t *envp)
 
   return 0;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/i386/fpu/fesetround.c b/sysdeps/i386/fpu/fesetround.c
index 2746f3ebf3..a868f275f0 100644
--- a/sysdeps/i386/fpu/fesetround.c
+++ b/sysdeps/i386/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1997, 2003, 2004 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2003, 2004, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -50,3 +50,4 @@ fesetround (int round)
 
   return 0;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/ia64/fpu/feholdexcpt.c b/sysdeps/ia64/fpu/feholdexcpt.c
index fd13de6c35..27c9a1109e 100644
--- a/sysdeps/ia64/fpu/feholdexcpt.c
+++ b/sysdeps/ia64/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Christian Boissat <Christian.Boissat@cern.ch>, 1999
 
@@ -31,3 +31,4 @@ feholdexcept (fenv_t *envp)
 
   return 1;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/ia64/fpu/fesetround.c b/sysdeps/ia64/fpu/fesetround.c
index 26a6be4ea3..351bcc2f10 100644
--- a/sysdeps/ia64/fpu/fesetround.c
+++ b/sysdeps/ia64/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Christian Boissat <Christian.Boissat@cern.ch>, 1999.
 
@@ -39,3 +39,4 @@ fesetround (int round)
 
   return 1;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/ieee754/dbl-64/s_sincos.c b/sysdeps/ieee754/dbl-64/s_sincos.c
index f0542c500c..e946f9f976 100644
--- a/sysdeps/ieee754/dbl-64/s_sincos.c
+++ b/sysdeps/ieee754/dbl-64/s_sincos.c
@@ -1,5 +1,5 @@
 /* Compute sine and cosine of argument.
-   Copyright (C) 1997, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2001, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -40,8 +40,8 @@ __sincos (double x, double *sinx, double *cosx)
     }
   else
     {
-      *sinx = sin (x);
-      *cosx = cos (x);
+      *sinx = __sin (x);
+      *cosx = __cos (x);
     }
 }
 weak_alias (__sincos, sincos)
diff --git a/sysdeps/ieee754/flt-32/e_atan2f.c b/sysdeps/ieee754/flt-32/e_atan2f.c
index 8b3398c0a3..c0cafb16b8 100644
--- a/sysdeps/ieee754/flt-32/e_atan2f.c
+++ b/sysdeps/ieee754/flt-32/e_atan2f.c
@@ -30,7 +30,7 @@ zero  = 0.0,
 pi_o_4  = 7.8539818525e-01,  /* 0x3f490fdb */
 pi_o_2  = 1.5707963705e+00,  /* 0x3fc90fdb */
 pi      = 3.1415927410e+00,  /* 0x40490fdb */
-pi_lo   = -8.7422776573e-07; /* 0xb3bbbd2e */
+pi_lo   = -8.7422776573e-08; /* 0xb3bbbd2e */
 
 #ifdef __STDC__
 	float __ieee754_atan2f(float y, float x)
diff --git a/sysdeps/powerpc/fpu/feholdexcpt.c b/sysdeps/powerpc/fpu/feholdexcpt.c
index 8ac875cc72..150becd678 100644
--- a/sysdeps/powerpc/fpu/feholdexcpt.c
+++ b/sysdeps/powerpc/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -36,3 +36,4 @@ feholdexcept (fenv_t *envp)
 
   return 0;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/powerpc/fpu/fesetround.c b/sysdeps/powerpc/fpu/fesetround.c
index f7cd6af135..67518d0df4 100644
--- a/sysdeps/powerpc/fpu/fesetround.c
+++ b/sysdeps/powerpc/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -39,3 +39,4 @@ fesetround (int round)
 
   return 0;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps
index 850a10746c..1ea3b60d9d 100644
--- a/sysdeps/powerpc/fpu/libm-test-ulps
+++ b/sysdeps/powerpc/fpu/libm-test-ulps
@@ -2,17 +2,14 @@
 
 # atan2
 Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
+float: 1
+ifloat: 1
 Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
+float: 1
+ifloat: 1
 Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
 float: 1
 ifloat: 1
-Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112":
-float: 6
-ifloat: 6
 
 # atanh
 Test "atanh (0.75) == 0.972955074527656652552676371721589865":
@@ -623,8 +620,8 @@ idouble: 1
 
 # Maximal error of functions:
 Function: "atan2":
-float: 6
-ifloat: 6
+float: 1
+ifloat: 1
 
 Function: "atanh":
 float: 1
diff --git a/sysdeps/s390/fpu/feholdexcpt.c b/sysdeps/s390/fpu/feholdexcpt.c
index 7fd7ea53ca..dee44dcee3 100644
--- a/sysdeps/s390/fpu/feholdexcpt.c
+++ b/sysdeps/s390/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
 
@@ -32,3 +32,4 @@ int feholdexcept (fenv_t *envp)
   _FPU_SETCW ((envp->fpc & ~(FE_ALL_EXCEPT << FPC_EXCEPTION_MASK_SHIFT)));
   return 0;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/s390/fpu/fesetround.c b/sysdeps/s390/fpu/fesetround.c
index 5f510fe0ad..d99f1db181 100644
--- a/sysdeps/s390/fpu/fesetround.c
+++ b/sysdeps/s390/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 2000 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Denis Joseph Barrow (djbarrow@de.ibm.com).
 
@@ -35,3 +35,4 @@ fesetround (int round)
 
   return 0;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps
index cfade822a3..552ad4afae 100644
--- a/sysdeps/s390/fpu/libm-test-ulps
+++ b/sysdeps/s390/fpu/libm-test-ulps
@@ -2,17 +2,14 @@
 
 # atan2
 Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
+float: 1
+ifloat: 1
 Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
+float: 1
+ifloat: 1
 Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
 float: 1
 ifloat: 1
-Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112":
-float: 6
-ifloat: 6
 
 # atanh
 Test "atanh (0.75) == 0.972955074527656652552676371721589865":
@@ -664,8 +661,8 @@ idouble: 1
 
 # Maximal error of functions:
 Function: "atan2":
-float: 6
-ifloat: 6
+float: 1
+ifloat: 1
 
 Function: "atanh":
 float: 1
diff --git a/sysdeps/s390/s390-64/bcopy.S b/sysdeps/s390/s390-64/bcopy.S
index ff7966723b..abcb1fb1b4 100644
--- a/sysdeps/s390/s390-64/bcopy.S
+++ b/sysdeps/s390/s390-64/bcopy.S
@@ -1,6 +1,6 @@
 /* bcopy -- copy a block from source to destination.  64 bit S/390 version.
    This file is part of the GNU C Library.
-   Copyright (C) 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc.
    Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -59,14 +59,10 @@ ENTRY(__bcopy)
 	jo	.L6
 	br	%r14
 .L7:				    # destructive overlay, can not use mvcle
-	lgr    %r1,%r2		    # bcopy is called with source,dest
-	lgr    %r2,%r3		    # memmove with dest,source! Oh, well...
-	lgr    %r3,%r1
-#ifdef PIC
-	jg     memmove@PLT
-#else
-	jg     memmove
-#endif
+	lgr	%r1,%r2		    # bcopy is called with source,dest
+	lgr	%r2,%r3		    # memmove with dest,source! Oh, well...
+	lgr	%r3,%r1
+	jg	HIDDEN_BUILTIN_JUMPTARGET(memmove)
 
 END(__bcopy)
 
diff --git a/sysdeps/sh/sh4/fpu/feholdexcpt.c b/sysdeps/sh/sh4/fpu/feholdexcpt.c
index dafb4f7daa..7aac5a0d39 100644
--- a/sysdeps/sh/sh4/fpu/feholdexcpt.c
+++ b/sysdeps/sh/sh4/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 1999, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -35,3 +35,4 @@ feholdexcept (fenv_t *envp)
 
   return 1;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/sh/sh4/fpu/fesetround.c b/sysdeps/sh/sh4/fpu/fesetround.c
index 9966838387..cf4349004e 100644
--- a/sysdeps/sh/sh4/fpu/fesetround.c
+++ b/sysdeps/sh/sh4/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1998, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1998, 2000, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de>, 1998.
 
@@ -41,3 +41,4 @@ fesetround (int round)
 
   return 1;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/sparc/fpu/feholdexcpt.c b/sysdeps/sparc/fpu/feholdexcpt.c
index 3bd2b16cf1..729637ad1b 100644
--- a/sysdeps/sparc/fpu/feholdexcpt.c
+++ b/sysdeps/sparc/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 1997, 1998 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1998, 2005 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
@@ -33,3 +33,4 @@ feholdexcept (fenv_t *envp)
 
   return 0;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/sparc/fpu/fesetround.c b/sysdeps/sparc/fpu/fesetround.c
index b18b344516..e3b441cd53 100644
--- a/sysdeps/sparc/fpu/fesetround.c
+++ b/sysdeps/sparc/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -35,3 +35,4 @@ fesetround (int round)
 
   return 0;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/unix/clock_gettime.c b/sysdeps/unix/clock_gettime.c
index 8f82ac848d..f698f0151b 100644
--- a/sysdeps/unix/clock_gettime.c
+++ b/sysdeps/unix/clock_gettime.c
@@ -131,3 +131,4 @@ clock_gettime (clockid_t clock_id, struct timespec *tp)
 
   return retval;
 }
+librt_hidden_def (clock_gettime)
diff --git a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
index ee19161272..39511cd2c5 100644
--- a/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
+++ b/sysdeps/unix/sysv/linux/ia64/has_cpuclock.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2001, 2003, 2004, 2005 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
@@ -21,7 +21,7 @@
 #include <unistd.h>
 #include <sys/stat.h>
 #include <sys/types.h>
-
+#include <not-cancel.h>
 
 static int itc_usable;
 
@@ -31,18 +31,18 @@ has_cpuclock (void)
   if (__builtin_expect (itc_usable == 0, 0))
     {
       int newval = 1;
-      int fd = open ("/proc/sal/itc_drift", O_RDONLY);
+      int fd = open_not_cancel_2 ("/proc/sal/itc_drift", O_RDONLY);
       if (__builtin_expect (fd != -1, 1))
 	{
 	  char buf[16];
 	  /* We expect the file to contain a single digit followed by
 	     a newline.  If the format changes we better not rely on
 	     the file content.  */
-	  if (read (fd, buf, sizeof buf) != 2 || buf[0] != '0'
-	      || buf[1] != '\n')
+	  if (read_not_cancel (fd, buf, sizeof buf) != 2
+	      || buf[0] != '0' || buf[1] != '\n')
 	    newval = -1;
 
-	  close (fd);
+	  close_not_cancel_no_status (fd);
 	}
 
       itc_usable = newval;
diff --git a/sysdeps/x86_64/fpu/feholdexcpt.c b/sysdeps/x86_64/fpu/feholdexcpt.c
index db53d0f07f..a9b21a3c25 100644
--- a/sysdeps/x86_64/fpu/feholdexcpt.c
+++ b/sysdeps/x86_64/fpu/feholdexcpt.c
@@ -1,5 +1,5 @@
 /* Store current floating-point environment and clear exceptions.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005 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
@@ -39,3 +39,4 @@ feholdexcept (fenv_t *envp)
 
   return 0;
 }
+libm_hidden_def (feholdexcept)
diff --git a/sysdeps/x86_64/fpu/fesetround.c b/sysdeps/x86_64/fpu/fesetround.c
index 429b7f1d0c..408116eee8 100644
--- a/sysdeps/x86_64/fpu/fesetround.c
+++ b/sysdeps/x86_64/fpu/fesetround.c
@@ -1,5 +1,5 @@
 /* Set current rounding direction.
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005 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
@@ -44,3 +44,4 @@ fesetround (int round)
 
   return 0;
 }
+libm_hidden_def (fesetround)
diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps
index b3ce8bfeee..425549dd0e 100644
--- a/sysdeps/x86_64/fpu/libm-test-ulps
+++ b/sysdeps/x86_64/fpu/libm-test-ulps
@@ -24,17 +24,14 @@ ldouble: 1
 
 # atan2
 Test "atan2 (-0.75, -1.0) == -2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
+float: 1
+ifloat: 1
 Test "atan2 (0.75, -1.0) == 2.49809154479650885165983415456218025":
-float: 3
-ifloat: 3
+float: 1
+ifloat: 1
 Test "atan2 (1.390625, 0.9296875) == 0.981498387184244311516296577615519772":
 float: 1
 ifloat: 1
-Test "atan2 (-0.00756827042671106339, -.001792735857538728036) == -1.80338464113663849327153994379639112":
-float: 6
-ifloat: 6
 
 # atanh
 Test "atanh (0.75) == 0.972955074527656652552676371721589865":
@@ -953,8 +950,8 @@ ildouble: 1
 ldouble: 1
 
 Function: "atan2":
-float: 6
-ifloat: 6
+float: 1
+ifloat: 1
 
 Function: "atanh":
 float: 1
diff --git a/sysdeps/x86_64/fpu/s_sincos.S b/sysdeps/x86_64/fpu/s_sincos.S
new file mode 100644
index 0000000000..9a33615340
--- /dev/null
+++ b/sysdeps/x86_64/fpu/s_sincos.S
@@ -0,0 +1,61 @@
+/* Compute sine and cosine of argument.
+   Copyright (C) 1997, 2000, 2001, 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#include <machine/asm.h>
+#include "bp-sym.h"
+#include "bp-asm.h"
+
+#define PARMS	LINKAGE		/* no space for saved regs */
+#define ANGLE	PARMS
+#define SINP	ANGLE+12
+#define COSP	SINP+PTR_SIZE
+
+	.text
+ENTRY (BP_SYM (__sincos))
+	ENTER
+
+	movsd	%xmm0, -8(%rsp)
+	fldl	-8(%rsp)
+	fsincos
+	fnstsw	%ax
+	testl	$0x400,%eax
+	jnz	1f
+	fstpl	(%rsi)
+	fstpl	(%rdi)
+
+	LEAVE
+	retq
+
+1:	fldpi
+	fadd	%st(0)
+	fxch	%st(1)
+2:	fprem1
+	fnstsw	%ax
+	testl	$0x400,%eax
+	jnz	2b
+	fstp	%st(1)
+	fsincos
+	fstpl	(%rsi)
+	fstpl	(%rdi)
+
+	LEAVE
+	retq
+END (BP_SYM (__sincos))
+weak_alias (BP_SYM (__sincos), BP_SYM (sincos))
diff --git a/sysdeps/x86_64/fpu/s_sincosl.S b/sysdeps/x86_64/fpu/s_sincosl.S
index 9a3025ab5f..b17eabe767 100644
--- a/sysdeps/x86_64/fpu/s_sincosl.S
+++ b/sysdeps/x86_64/fpu/s_sincosl.S
@@ -1,5 +1,5 @@
 /* Compute sine and cosine of argument.
-   Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2000, 2001, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
 
@@ -40,9 +40,8 @@ ENTRY (BP_SYM (__sincosl))
 	fstpt	(%rdi)
 
 	LEAVE
-	ret
+	retq
 
-	.align ALIGNARG(4)
 1:	fldpi
 	fadd	%st(0)
 	fxch	%st(1)
@@ -56,6 +55,6 @@ ENTRY (BP_SYM (__sincosl))
 	fstpt	(%rdi)
 
 	LEAVE
-	ret
+	retq
 END (BP_SYM (__sincosl))
 weak_alias (BP_SYM (__sincosl), BP_SYM (sincosl))
diff --git a/wcsmbs/bits/wchar2.h b/wcsmbs/bits/wchar2.h
new file mode 100644
index 0000000000..c102948f11
--- /dev/null
+++ b/wcsmbs/bits/wchar2.h
@@ -0,0 +1,398 @@
+/* Checking macros for wchar functions.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   02111-1307 USA.  */
+
+#ifndef _WCHAR_H
+# error "Never include <bits/wchar.h> directly; use <wchar.h> instead."
+#endif
+
+
+extern wchar_t *__wmemcpy_chk (wchar_t *__restrict __s1,
+			       __const wchar_t *__restrict __s2, size_t __n,
+			       size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemcpy_alias,
+				(wchar_t *__restrict __s1,
+				 __const wchar_t *__restrict __s2, size_t __n),
+				wmemcpy);
+
+extern __always_inline wchar_t *
+wmemcpy (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2,
+	 size_t __n)
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    return __wmemcpy_chk (__s1, __s2, __n, __bos0 (__s1) / sizeof (wchar_t));
+  return __wmemcpy_alias (__s1, __s2, __n);
+}
+
+
+extern wchar_t *__wmemmove_chk (wchar_t *__s1, __const wchar_t *__s2,
+				size_t __n, size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemmove_alias, (wchar_t *__s1,
+						   __const wchar_t *__s2,
+						   size_t __n), wmemmove);
+
+extern __always_inline wchar_t *
+wmemmove (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2,
+	  size_t __n)
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    return __wmemmove_chk (__s1, __s2, __n, __bos0 (__s1) / sizeof (wchar_t));
+  return __wmemmove_alias (__s1, __s2, __n);
+}
+
+
+#ifdef __USE_GNU
+extern wchar_t *__wmempcpy_chk (wchar_t *__restrict __s1,
+				__const wchar_t *__restrict __s2, size_t __n,
+				size_t __ns1) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmempcpy_alias,
+				(wchar_t *__restrict __s1,
+				 __const wchar_t *__restrict __s2,
+				 size_t __n), wmempcpy);
+
+extern __always_inline wchar_t *
+wmempcpy (wchar_t *__restrict __s1, __const wchar_t *__restrict __s2,
+	  size_t __n)
+{
+  if (__bos0 (__s1) != (size_t) -1)
+    return __wmempcpy_chk (__s1, __s2, __n, __bos0 (__s1) / sizeof (wchar_t));
+  return __wmempcpy_alias (__s1, __s2, __n);
+}
+#endif
+
+
+extern wchar_t *__wmemset_chk (wchar_t *__s, wchar_t __c, size_t __n,
+			       size_t __ns) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wmemset_alias, (wchar_t *__s, wchar_t __c,
+						  size_t __n), wmemset);
+
+extern __always_inline wchar_t *
+wmemset (wchar_t *__restrict __s, wchar_t __c, size_t __n)
+{
+  if (__bos0 (__s) != (size_t) -1)
+    return __wmemset_chk (__s, __c, __n, __bos0 (__s) / sizeof (wchar_t));
+  return __wmemset_alias (__s, __c, __n);
+}
+
+
+extern wchar_t *__wcscpy_chk (wchar_t *__restrict __dest,
+			      __const wchar_t *__restrict __src,
+			      size_t __n) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcscpy_alias,
+				(wchar_t *__restrict __dest,
+				 __const wchar_t *__restrict __src), wcscpy);
+
+extern __always_inline wchar_t *
+wcscpy (wchar_t *__dest, __const wchar_t *__src)
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcscpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcscpy_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcpcpy_chk (wchar_t *__dest, __const wchar_t *__src,
+			      size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcpcpy_alias, (wchar_t *__dest,
+						 __const wchar_t *__src),
+				wcpcpy);
+
+extern __always_inline wchar_t *
+wcpcpy (wchar_t *__dest, __const wchar_t *__src)
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcpcpy_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcpcpy_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcsncpy_chk (wchar_t *__restrict __dest,
+			       __const wchar_t *__restrict __src, size_t __n,
+			       size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcsncpy_alias,
+				(wchar_t *__restrict __dest,
+				 __const wchar_t *__restrict __src,
+				 size_t __n), wcsncpy);
+
+extern __always_inline wchar_t *
+wcsncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
+{
+  if (__bos (__dest) != (size_t) -1
+      && (!__builtin_constant_p (__n) || __bos (__dest) >= __n))
+    return __wcsncpy_chk (__dest, __src, __n,
+			  __bos (__dest) / sizeof (wchar_t));
+  return __wcsncpy_alias (__dest, __src, __n);
+}
+
+
+extern wchar_t *__wcpncpy_chk (wchar_t *__restrict __dest,
+			       __const wchar_t *__restrict __src, size_t __n,
+			       size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcpncpy_alias,
+				(wchar_t *__restrict __dest,
+				 __const wchar_t *__restrict __src,
+				 size_t __n), wcpncpy);
+
+extern __always_inline wchar_t *
+wcpncpy (wchar_t *__dest, __const wchar_t *__src, size_t __n)
+{
+  if (__bos (__dest) != (size_t) -1
+      && (!__builtin_constant_p (__n) || __bos (__dest) >= __n))
+    return __wcpncpy_chk (__dest, __src, __n,
+			  __bos (__dest) / sizeof (wchar_t));
+  return __wcpncpy_alias (__dest, __src, __n);
+}
+
+
+extern wchar_t *__wcscat_chk (wchar_t *__restrict __dest,
+			      __const wchar_t *__restrict __src,
+			      size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcscat_alias,
+				(wchar_t *__restrict __dest,
+				 __const wchar_t *__restrict __src), wcscat);
+
+extern __always_inline wchar_t *
+wcscat (wchar_t *__dest, __const wchar_t *__src)
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcscat_chk (__dest, __src, __bos (__dest) / sizeof (wchar_t));
+  return __wcscat_alias (__dest, __src);
+}
+
+
+extern wchar_t *__wcsncat_chk (wchar_t *__restrict __dest,
+			       __const wchar_t *__restrict __src,
+			       size_t __n, size_t __destlen) __THROW;
+extern wchar_t *__REDIRECT_NTH (__wcsncat_alias,
+				(wchar_t *__restrict __dest,
+				 __const wchar_t *__restrict __src,
+				 size_t __n), wcsncat);
+
+extern __always_inline wchar_t *
+wcsncat (wchar_t *__dest, __const wchar_t *__src, size_t __n)
+{
+  if (__bos (__dest) != (size_t) -1)
+    return __wcsncat_chk (__dest, __src, __n,
+			  __bos (__dest) / sizeof (wchar_t));
+  return __wcsncat_alias (__dest, __src, __n);
+}
+
+
+extern int __swprintf_chk (wchar_t *__restrict __s, size_t __n,
+			   int __flag, size_t __s_len,
+			   __const wchar_t *__restrict __format, ...)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 6))) */;
+
+/* XXX We might want to have support in gcc for swprintf.  */
+#define swprintf(s, n, format, ...) \
+  (__bos (s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1			      \
+   ? __swprintf_chk (s, n, __USE_FORTIFY_LEVEL - 1, __bos (s), format,	      \
+		     __VA_ARGS__)					      \
+   : swprintf (s, n, format, __VA_ARGS__))
+
+
+extern int __vswprintf_chk (wchar_t *__restrict __s, size_t __n,
+			    int __flag, size_t __s_len,
+			    __const wchar_t *__restrict __format,
+			    __gnuc_va_list __arg)
+     __THROW /* __attribute__ ((__format__ (__wprintf__, 5, 0))) */;
+extern int __REDIRECT_NTH (__vswprintf_alias,
+			   (wchar_t *__restrict __s, size_t __n,
+			    __const wchar_t *__restrict __format,
+			    __gnuc_va_list __arg), vswprintf)
+     /* __attribute__ ((__format__ (__wprintf__, 3, 0))) */;
+
+
+extern __always_inline int
+vswprintf (wchar_t *__s, size_t __n, __const wchar_t *__format,
+	   __gnuc_va_list __arg)
+{
+  if (__bos (__s) != (size_t) -1 || __USE_FORTIFY_LEVEL > 1)
+    return __vswprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1, __bos (__s),
+			    __format, __arg);
+  return vswprintf (__s, __n, __format, __arg);
+}
+
+
+#if __USE_FORTIFY_LEVEL > 1
+
+extern int __fwprintf_chk (FILE *__restrict __stream, int __flag,
+			   __const wchar_t *__restrict __format, ...);
+extern int __wprintf_chk (int __flag, __const wchar_t *__restrict __format,
+			  ...);
+extern int __vfwprintf_chk (FILE *__restrict __stream, int __flag,
+			    __const wchar_t *__restrict __format,
+			    _G_va_list __ap);
+extern int __vwprintf_chk (int __flag, __const wchar_t *__restrict __format,
+			   _G_va_list __ap);
+
+# define wprintf(...) \
+  __wprintf_chk (__USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+# define fwprintf(stream, ...) \
+  __fwprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, __VA_ARGS__)
+# define vwprintf(format, ap) \
+  __vwprintf_chk (__USE_FORTIFY_LEVEL - 1, format, ap)
+# define vfwprintf(stream, format, ap) \
+  __vfwprintf_chk (stream, __USE_FORTIFY_LEVEL - 1, format, ap)
+
+#endif
+
+extern wchar_t *__fgetws_chk (wchar_t *__restrict __s, size_t __size, int __n,
+			      FILE *__restrict __stream) __wur;
+extern wchar_t *__REDIRECT (__fgetws_alias,
+			    (wchar_t *__restrict __s, int __n,
+			     FILE *__restrict __stream), fgetws) __wur;
+
+extern __always_inline __wur wchar_t *
+fgetws (wchar_t *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1
+      && (!__builtin_constant_p (__n) || (size_t) __n > __bos (__s)))
+    return __fgetws_chk (__s, __bos (__s), __n, __stream);
+  return __fgetws_alias (__s, __n, __stream);
+}
+
+#ifdef __USE_GNU
+extern wchar_t *__fgetws_unlocked_chk (wchar_t *__restrict __s, size_t __size,
+				       int __n, FILE *__restrict __stream)
+  __wur;
+extern wchar_t *__REDIRECT (__fgetws_unlocked_alias,
+			    (wchar_t *__restrict __s, int __n,
+			     FILE *__restrict __stream), fgetws_unlocked)
+  __wur;
+
+extern __always_inline __wur wchar_t *
+fgetws_unlocked (wchar_t *__restrict __s, int __n, FILE *__restrict __stream)
+{
+  if (__bos (__s) != (size_t) -1
+      && (!__builtin_constant_p (__n) || (size_t) __n > __bos (__s)))
+    return __fgetws_unlocked_chk (__s, __bos (__s), __n, __stream);
+  return __fgetws_unlocked_alias (__s, __n, __stream);
+}
+#endif
+
+
+extern size_t __wcrtomb_chk (char *__s, wchar_t __wchar, mbstate_t *__p,
+			  size_t __buflen) __THROW __wur;
+extern size_t __REDIRECT_NTH (__wcrtomb_alias,
+			      (char *__restrict __s, wchar_t __wchar,
+			       mbstate_t *__restrict __ps), wcrtomb) __wur;
+
+extern __always_inline __wur size_t
+wcrtomb (char *__s, wchar_t __wchar, mbstate_t *__ps)
+{
+  /* We would have to include <limits.h> to get a definition of MB_LEN_MAX.
+     But this would only disturb the namespace.  So we define our own
+     version here.  */
+#define __WCHAR_MB_LEN_MAX	16
+#if defined MB_LEN_MAX && MB_LEN_MAX != __WCHAR_MB_LEN_MAX
+# error "Assumed value of MB_LEN_MAX wrong"
+#endif
+  if (__bos (__s) != (size_t) -1 && __WCHAR_MB_LEN_MAX > __bos (__s))
+    return __wcrtomb_chk (__s, __wchar, __ps, __bos (__s));
+  return __wcrtomb_alias (__s, __wchar, __ps);
+}
+
+
+extern size_t __mbsrtowcs_chk (wchar_t *__restrict __dst,
+			       __const char **__restrict __src,
+			       size_t __len, mbstate_t *__restrict __ps,
+			       size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbsrtowcs_alias,
+			      (wchar_t *__restrict __dst,
+			       __const char **__restrict __src,
+			       size_t __len, mbstate_t *__restrict __ps),
+			      mbsrtowcs);
+
+extern __always_inline size_t
+mbsrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src,
+	    size_t __len, mbstate_t *__restrict __ps)
+{
+  if (__bos (__dst) != (size_t) -1
+      && (!__builtin_constant_p (__len)
+	  || __len * sizeof (wchar_t) > __bos (__dst)))
+    return __mbsrtowcs_chk (__dst, __src, __len, __ps, __bos (__dst));
+  return __mbsrtowcs_alias (__dst, __src, __len, __ps);
+}
+
+
+extern size_t __wcsrtombs_chk (char *__restrict __dst,
+			       __const wchar_t **__restrict __src,
+			       size_t __len, mbstate_t *__restrict __ps,
+			       size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__wcsrtombs_alias,
+			      (char *__restrict __dst,
+			       __const wchar_t **__restrict __src,
+			       size_t __len, mbstate_t *__restrict __ps),
+			      wcsrtombs);
+
+extern __always_inline size_t
+wcsrtombs (char *__restrict __dst, __const wchar_t **__restrict __src,
+	   size_t __len, mbstate_t *__restrict __ps)
+{
+  if (__bos (__dst) != (size_t) -1
+      && (!__builtin_constant_p (__len) || __len > __bos (__dst)))
+    return __wcsrtombs_chk (__dst, __src, __len, __ps, __bos (__dst));
+  return __wcsrtombs_alias (__dst, __src, __len, __ps);
+}
+
+
+#ifdef __USE_GNU
+extern size_t __mbsnrtowcs_chk (wchar_t *__restrict __dst,
+				__const char **__restrict __src, size_t __nmc,
+				size_t __len, mbstate_t *__restrict __ps,
+				size_t __dstlen) __THROW;
+extern size_t __REDIRECT_NTH (__mbsnrtowcs_alias,
+			      (wchar_t *__restrict __dst,
+			       __const char **__restrict __src, size_t __nmc,
+			       size_t __len, mbstate_t *__restrict __ps),
+			      mbsnrtowcs);
+
+extern __always_inline size_t
+mbsnrtowcs (wchar_t *__restrict __dst, __const char **__restrict __src,
+	    size_t __nmc, size_t __len, mbstate_t *__restrict __ps)
+{
+  if (__bos (__dst) != (size_t) -1
+      && (!__builtin_constant_p (__len)
+	  || __len * sizeof (wchar_t) > __bos (__dst)))
+    return __mbsnrtowcs_chk (__dst, __src, __nmc, __len, __ps, __bos (__dst));
+  return __mbsnrtowcs_alias (__dst, __src, __nmc, __len, __ps);
+}
+
+
+extern size_t __wcsnrtombs_chk (char *__restrict __dst,
+				__const wchar_t **__restrict __src,
+				size_t __nwc, size_t __len,
+				mbstate_t *__restrict __ps, size_t __dstlen)
+     __THROW;
+extern size_t __REDIRECT_NTH (__wcsnrtombs_alias,
+			      (char *__restrict __dst,
+			       __const wchar_t **__restrict __src,
+			       size_t __nwc, size_t __len,
+			       mbstate_t *__restrict __ps), wcsnrtombs);
+
+extern __always_inline size_t
+wcsnrtombs (char *__restrict __dst, __const wchar_t **__restrict __src,
+	    size_t __nwc, size_t __len, mbstate_t *__restrict __ps)
+{
+  if (__bos (__dst) != (size_t) -1
+      && (!__builtin_constant_p (__len) || __len > __bos (__dst)))
+    return __wcsnrtombs_chk (__dst, __src, __nwc, __len, __ps, __bos (__dst));
+  return __wcsnrtombs_alias (__dst, __src, __nwc, __len, __ps);
+}
+#endif
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
index fe4ee80bff..0c02dcc574 100644
--- a/wcsmbs/wchar.h
+++ b/wcsmbs/wchar.h
@@ -833,6 +833,13 @@ extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
 # include <wctype.h>
 #endif
 
+
+/* Define some macros helping to catch buffer overflows.  */
+#if __USE_FORTIFY_LEVEL > 0 && !defined __cplusplus
+# include <bits/wchar2.h>
+#endif
+
+
 __END_DECLS
 
 #endif	/* _WCHAR_H defined */
diff --git a/wcsmbs/wcsncpy.c b/wcsmbs/wcsncpy.c
index 8469d94d79..06a20d2333 100644
--- a/wcsmbs/wcsncpy.c
+++ b/wcsmbs/wcsncpy.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1995, 1996, 1997, 2005 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
 
@@ -22,7 +22,7 @@
 
 /* Copy no more than N wide-characters of SRC to DEST.	*/
 wchar_t *
-wcsncpy (dest, src, n)
+__wcsncpy (dest, src, n)
      wchar_t *dest;
      const wchar_t *src;
      size_t n;
@@ -84,3 +84,4 @@ wcsncpy (dest, src, n)
 
   return s;
 }
+weak_alias (__wcsncpy, wcsncpy)