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

[commits] r8394 - in /trunk: libc/ libc/debug/ libc/elf/ libc/gmon/ libc/gshadow/ libc/iconv/ libc/iconvdata/ libc/include/ libc/inet/...



Author: joseph
Date: Thu Apr 30 14:37:18 2009
New Revision: 8394

Log:
Merge changes between r8303 and r8393 from /fsf/trunk.

Added:
    trunk/libc/gshadow/
      - copied from r8393, fsf/trunk/libc/gshadow/
    trunk/libc/include/gshadow.h
      - copied unchanged from r8393, fsf/trunk/libc/include/gshadow.h
    trunk/libc/nss/nss_files/files-sgrp.c
      - copied unchanged from r8393, fsf/trunk/libc/nss/nss_files/files-sgrp.c
    trunk/libc/nss/sgrp-lookup.c
      - copied unchanged from r8393, fsf/trunk/libc/nss/sgrp-lookup.c
    trunk/libc/shadow/tst-shadow.c
      - copied unchanged from r8393, fsf/trunk/libc/shadow/tst-shadow.c
    trunk/ports/sysdeps/hppa/hppa1.1/s_signbit.c
      - copied unchanged from r8393, fsf/trunk/ports/sysdeps/hppa/hppa1.1/s_signbit.c
    trunk/ports/sysdeps/unix/bsd/osf/alpha/
      - copied from r8393, fsf/trunk/ports/sysdeps/unix/bsd/osf/alpha/
    trunk/ports/sysdeps/unix/sysv/linux/mips/getcontext.S
      - copied unchanged from r8393, fsf/trunk/ports/sysdeps/unix/sysv/linux/mips/getcontext.S
    trunk/ports/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h
      - copied unchanged from r8393, fsf/trunk/ports/sysdeps/unix/sysv/linux/mips/kernel_rt_sigframe.h
    trunk/ports/sysdeps/unix/sysv/linux/mips/makecontext.S
      - copied unchanged from r8393, fsf/trunk/ports/sysdeps/unix/sysv/linux/mips/makecontext.S
    trunk/ports/sysdeps/unix/sysv/linux/mips/setcontext.S
      - copied unchanged from r8393, fsf/trunk/ports/sysdeps/unix/sysv/linux/mips/setcontext.S
    trunk/ports/sysdeps/unix/sysv/linux/mips/swapcontext.S
      - copied unchanged from r8393, fsf/trunk/ports/sysdeps/unix/sysv/linux/mips/swapcontext.S
    trunk/ports/sysdeps/unix/sysv/linux/mips/ucontext_i.sym
      - copied unchanged from r8393, fsf/trunk/ports/sysdeps/unix/sysv/linux/mips/ucontext_i.sym
Modified:
    trunk/libc/ChangeLog
    trunk/libc/Makeconfig
    trunk/libc/Makefile
    trunk/libc/NEWS
    trunk/libc/debug/vasprintf_chk.c
    trunk/libc/debug/vsnprintf_chk.c
    trunk/libc/debug/vsprintf_chk.c
    trunk/libc/elf/dl-load.c
    trunk/libc/elf/dl-open.c
    trunk/libc/elf/dl-profile.c
    trunk/libc/elf/dl-runtime.c
    trunk/libc/elf/rtld.c
    trunk/libc/elf/sprof.c
    trunk/libc/gmon/gmon.c
    trunk/libc/iconv/gconv_simple.c
    trunk/libc/iconvdata/sjis.c
    trunk/libc/include/features.h
    trunk/libc/inet/inet6_option.c
    trunk/libc/inet/rcmd.c
    trunk/libc/inet/rexec.c
    trunk/libc/libio/iovsprintf.c
    trunk/libc/libio/iovsscanf.c
    trunk/libc/libio/strfile.h
    trunk/libc/libio/tst-widetext.input
    trunk/libc/libio/vasprintf.c
    trunk/libc/libio/vsnprintf.c
    trunk/libc/locale/locarchive.h
    trunk/libc/locale/programs/locarchive.c
    trunk/libc/localedata/ChangeLog
    trunk/libc/localedata/SUPPORTED
    trunk/libc/localedata/locales/cs_CZ
    trunk/libc/localedata/locales/csb_PL
    trunk/libc/localedata/locales/da_DK
    trunk/libc/localedata/locales/de_DE
    trunk/libc/localedata/locales/en_GB
    trunk/libc/localedata/locales/en_PH
    trunk/libc/localedata/locales/es_CL
    trunk/libc/localedata/locales/es_CO
    trunk/libc/localedata/locales/es_MX
    trunk/libc/localedata/locales/es_US
    trunk/libc/localedata/locales/es_VE
    trunk/libc/localedata/locales/et_EE
    trunk/libc/localedata/locales/fil_PH
    trunk/libc/localedata/locales/fr_FR
    trunk/libc/localedata/locales/fur_IT
    trunk/libc/localedata/locales/fy_DE
    trunk/libc/localedata/locales/ht_HT
    trunk/libc/localedata/locales/hu_HU
    trunk/libc/localedata/locales/ik_CA
    trunk/libc/localedata/locales/iu_CA
    trunk/libc/localedata/locales/li_BE
    trunk/libc/localedata/locales/li_NL
    trunk/libc/localedata/locales/mk_MK
    trunk/libc/localedata/locales/nb_NO
    trunk/libc/localedata/locales/nds_DE
    trunk/libc/localedata/locales/nds_NL
    trunk/libc/localedata/locales/nn_NO
    trunk/libc/localedata/locales/pl_PL
    trunk/libc/localedata/locales/sc_IT
    trunk/libc/localedata/locales/sk_SK
    trunk/libc/localedata/locales/sr_ME
    trunk/libc/localedata/locales/sr_RS
    trunk/libc/localedata/locales/sr_RS@latin
    trunk/libc/localedata/locales/tl_PH
    trunk/libc/localedata/locales/uk_UA
    trunk/libc/malloc/arena.c
    trunk/libc/malloc/hooks.c
    trunk/libc/malloc/malloc.c
    trunk/libc/math/libm-test.inc
    trunk/libc/math/w_fmod.c
    trunk/libc/math/w_fmodf.c
    trunk/libc/math/w_fmodl.c
    trunk/libc/misc/hsearch_r.c
    trunk/libc/misc/preadv.c
    trunk/libc/misc/preadv64.c
    trunk/libc/misc/pwritev.c
    trunk/libc/misc/pwritev64.c
    trunk/libc/misc/sys/uio.h
    trunk/libc/nptl/ChangeLog
    trunk/libc/nptl/cancellation.c
    trunk/libc/nptl/libc-cancellation.c
    trunk/libc/nptl/pthread_attr_setschedparam.c
    trunk/libc/nptl/sem_open.c
    trunk/libc/nptl/sysdeps/i386/tls.h
    trunk/libc/nptl/sysdeps/unix/sysv/linux/libc_pthread_init.c
    trunk/libc/nptl/sysdeps/x86_64/tls.h
    trunk/libc/nscd/connections.c
    trunk/libc/nscd/nscd_helper.c
    trunk/libc/nss/Makefile
    trunk/libc/nss/Versions
    trunk/libc/nss/nss_files/files-parse.c
    trunk/libc/nss/nsswitch.c
    trunk/libc/nss/nsswitch.conf
    trunk/libc/po/ca.po
    trunk/libc/posix/bits/posix1_lim.h
    trunk/libc/resolv/res_send.c
    trunk/libc/shadow/Makefile
    trunk/libc/shadow/sgetspent_r.c
    trunk/libc/stdio-common/isoc99_vsscanf.c
    trunk/libc/stdio-common/printf.h
    trunk/libc/stdio-common/psiginfo.c
    trunk/libc/stdio-common/reg-modifier.c
    trunk/libc/stdio-common/stdio_lim.h.in
    trunk/libc/stdlib/random_r.c
    trunk/libc/stdlib/strfmon_l.c
    trunk/libc/stdlib/strtod_l.c
    trunk/libc/stdlib/tst-strtod.c
    trunk/libc/sunrpc/clnt_raw.c
    trunk/libc/sysdeps/generic/paths.h
    trunk/libc/sysdeps/i386/fpu/s_cos.S
    trunk/libc/sysdeps/i386/fpu/s_cosf.S
    trunk/libc/sysdeps/i386/fpu/s_cosl.S
    trunk/libc/sysdeps/i386/fpu/s_sin.S
    trunk/libc/sysdeps/i386/fpu/s_sinf.S
    trunk/libc/sysdeps/i386/fpu/s_sinl.S
    trunk/libc/sysdeps/i386/fpu/s_tan.S
    trunk/libc/sysdeps/i386/fpu/s_tanf.S
    trunk/libc/sysdeps/i386/fpu/s_tanl.S
    trunk/libc/sysdeps/ieee754/dbl-64/s_expm1.c
    trunk/libc/sysdeps/ieee754/dbl-64/s_sin.c
    trunk/libc/sysdeps/ieee754/dbl-64/s_tan.c
    trunk/libc/sysdeps/ieee754/flt-32/s_cosf.c
    trunk/libc/sysdeps/ieee754/flt-32/s_expm1f.c
    trunk/libc/sysdeps/ieee754/flt-32/s_sinf.c
    trunk/libc/sysdeps/ieee754/flt-32/s_tanf.c
    trunk/libc/sysdeps/ieee754/k_standard.c
    trunk/libc/sysdeps/ieee754/ldbl-96/s_cosl.c
    trunk/libc/sysdeps/ieee754/ldbl-96/s_sinl.c
    trunk/libc/sysdeps/posix/preadv.c
    trunk/libc/sysdeps/posix/pwritev.c
    trunk/libc/sysdeps/posix/readv.c
    trunk/libc/sysdeps/sh/sh4/setjmp.S
    trunk/libc/sysdeps/unix/make-syscalls.sh
    trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h
    trunk/libc/sysdeps/unix/sysv/linux/ifaddrs.c
    trunk/libc/sysdeps/unix/sysv/linux/kernel-features.h
    trunk/libc/sysdeps/unix/sysv/linux/paths.h
    trunk/libc/sysdeps/unix/sysv/linux/preadv.c
    trunk/libc/sysdeps/unix/sysv/linux/pwritev.c
    trunk/libc/sysdeps/unix/sysv/linux/readv.c
    trunk/libc/sysdeps/unix/sysv/linux/sys/mount.h
    trunk/libc/sysdeps/unix/sysv/linux/sys/timex.h
    trunk/libc/sysdeps/unix/sysv/linux/writev.c
    trunk/libc/sysdeps/x86_64/dl-machine.h
    trunk/libc/sysdeps/x86_64/fpu/s_cosl.S
    trunk/libc/sysdeps/x86_64/fpu/s_expm1l.S
    trunk/libc/sysdeps/x86_64/fpu/s_sinl.S
    trunk/libc/sysdeps/x86_64/fpu/s_tanl.S
    trunk/ports/ChangeLog.arm
    trunk/ports/ChangeLog.hppa
    trunk/ports/ChangeLog.m68k
    trunk/ports/ChangeLog.mips
    trunk/ports/README
    trunk/ports/sysdeps/arm/eabi/fpu_control.h
    trunk/ports/sysdeps/hppa/dl-machine.h
    trunk/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h
    trunk/ports/sysdeps/unix/sysv/linux/hppa/bits/atomic.h
    trunk/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h
    trunk/ports/sysdeps/unix/sysv/linux/m68k/kernel-features.h
    trunk/ports/sysdeps/unix/sysv/linux/mips/Makefile
    trunk/ports/sysdeps/unix/sysv/linux/mips/kernel-features.h
    trunk/ports/sysdeps/unix/sysv/linux/mips/sys/ucontext.h

Modified: trunk/libc/ChangeLog
==============================================================================
--- trunk/libc/ChangeLog (original)
+++ trunk/libc/ChangeLog Thu Apr 30 14:37:18 2009
@@ -1,3 +1,336 @@
+2009-04-29  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/ifaddrs.c: Revert unintended 2008-08-12
+	comment change.
+
+2009-04-27  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* locale/programs/locarchive.c (create_archive): Add MAP_PRIVATE
+	to MAP_ANON in PROT_NONE mmap64 call.
+	(open_archive): Likewise.
+	(file_data_available_p): Use mmap64 instead of mremap.
+	(enlarge_archive): Likewise.  Update head if ah->addr changed.
+	Attempt to reserve address space after mmap64 region.
+
+2009-04-26  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/ieee754/dbl-64/s_expm1.c: Set errno for overflow.
+	* sysdeps/ieee754/flt-32/s_expm1f.c: Likewise.
+	* sysdeps/x86_64/fpu/s_expm1l.S: Likewise.
+
+	* sysdeps/ieee754/k_standard.c (__kernel_standard): Pole errors in
+	atanh should set ERANGE.
+
+	[BZ #10087]
+	* elf/dl-runtime.c (_dl_fixup): Use DL_FIXUP_VALUE_ADDR to access
+	result of lookup to make call to implement STT_GNU_IFUNC.
+	(_dl_profile_fixup): Likewise.
+	Patch by H.J. Lu <hjl.tools@xxxxxxxxx>.
+
+	* nscd/connections.c (send_ro_fd): Define temporary variable to avoid
+	warning.
+
+	* sysdeps/unix/sysv/linux/dl-osinfo.h (dl_fatal): Remove inline
+	from definition.
+
+	* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Don't define
+	label if it is not used.
+
+	* elf/dl-profile.c (_dl_start_profile): Define real-type variant
+	of gmon_hist_hdr and gmon_hdr structures and use them.
+	* elf/sprof.c: Likewise.
+
+	* elf/dl-load.c (open_verify): Add temporary variable to avoid
+	warning.
+
+	* nscd/nscd_helper.c (get_mapping): Avoid casts to avoid warnings.
+
+	* sunrpc/clnt_raw.c (clntraw_private_s): Use union in definition
+	to avoid cast.
+
+	* inet/rexec.c (rexec_af): Make sa2 a union to avoid warnings.
+	* inet/rcmd.c (rcmd_af): Make from a union of the various needed types
+	to avoid warnings.
+	(iruserok_af): Use ss_family instead of casts.
+
+	* gmon/gmon.c (write_hist): Define real-type variant of
+	gmon_hist_hdr structure and use it.
+	(write_gmon): Likewise for gmon_hdr.
+
+	* sysdeps/unix/sysv/linux/readv.c: Avoid declaration of replacement
+	function if we are not going to define it.
+	* sysdeps/unix/sysv/linux/writev.c: Likewise.
+
+	* inet/inet6_option.c (option_alloc): Add temporary variable to
+	avoid warning.
+
+	* libio/strfile.h (struct _IO_streambuf): Use correct type and
+	name of VTable element.
+	* libio/iovsprintf.c: Avoid casts to avoid warnings.
+	* libio/iovsscanf.c: Likewise.
+	* libio/vasprintf.c: Likewise.
+	* libio/vsnprintf.c: Likewise.
+	* stdio-common/isoc99_vsscanf.c: Likewise.
+	* stdlib/strfmon_l.c: Likewise.
+	* debug/vasprintf_chk.c: Likewise.
+	* debug/vsnprintf_chk.c: Likewise.
+	* debug/vsprintf_chk.c: Likewise.
+
+	* nss/nsswitch.c (__nss_lookup_function): En/Decrypt cached
+	function pointers.
+
+2009-04-26  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* sysdeps/ieee754/dbl-64/s_tan.c (tan): Fix -Wsequence-point warnings.
+
+2009-04-25  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* posix/bits/posix1_lim.h: Cleanup namespace a bit.
+
+	* sysdeps/i386/fpu/s_tan.S: Set errno for ±Inf.
+	* sysdeps/i386/fpu/s_tanf.S: Likewise.
+	* sysdeps/i386/fpu/s_tanl.S: Likewise.
+	* sysdeps/ieee754/dbl-64/s_tan.c: Likewise.
+	* sysdeps/ieee754/flt-32/s_tanf.c: Likewise.
+	* sysdeps/x86_64/fpu/s_tanl.S: Likewise.
+	* math/libm-test.inc: Add tests for errno after tan calls with
+	±Inf.
+
+	* sysdeps/ieee754/k_standard.c (__kernel_standard): Use correct
+	errno value vor pow(+-0,neg).
+	* math/libm-test.inc (pow_test): Add tests for errno value for
+	pole errors.
+
+	* math/w_fmod.c: Also handle x=±Inf as error.
+	* math/w_fmodf.c: Likewise.
+	* math/w_fmodl.c: Likewise.
+	* math/libm-test.inc (fmod_test): Add tests for errno after calls for
+	x=±Inf or y=0.
+
+	* sysdeps/i386/fpu/s_cos.S: Set errno for ±Inf.
+	* sysdeps/i386/fpu/s_cosf.S: Likewise.
+	* sysdeps/i386/fpu/s_cosl.S: Likewise.
+	* sysdeps/i386/fpu/s_sin.S: Likewise.
+	* sysdeps/i386/fpu/s_sinf.S: Likewise.
+	* sysdeps/i386/fpu/s_sinl.S: Likewise.
+	* sysdeps/ieee754/dbl-64/s_sin.c: Likewise.
+	* sysdeps/ieee754/flt-32/s_cosf.c: Likewise.
+	* sysdeps/ieee754/flt-32/s_sinf.c: Likewise.
+	* sysdeps/ieee754/ldbl-96/s_cosl.c: Likewise.
+	* sysdeps/ieee754/ldbl-96/s_sinl.c: Likewise.
+	* sysdeps/x86_64/fpu/s_cosl.S: Likewise.
+	* sysdeps/x86_64/fpu/s_sinl.S: Likewise.
+	* math/libm-test.inc: Add tests for errno after sin/cos calls with
+	±Inf.
+
+	* stdlib/strtod_l.c (round_and_return): We have to set errno to
+	ERANGE for underflows.
+	* stdlib/tst-strtod.c (tests): Two tests should set errno to ERANGE.
+
+	* stdio-common/stdio_lim.h.in (L_cuserid): Not part of POSIX since
+	the 2001 revision.
+
+	* libio/tst-widetext.input: Remove surrogates.
+
+	* include/features.h: _POSIX_C_SOURCE >= 200112L implies C99.
+
+	* sysdeps/ieee754/k_standard.c (__kernel_standard): Pole errors
+	for lgamma should set errno to ERANGE, not EDOM.
+	* math/libm-test.inc (lgamma_test): Check errno for pole errors.
+
+2009-04-24  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10093]
+	* iconv/gconv_simple.c (BODY for UTF-8 to INTERNAL): Don't accept
+	UTF-16 surrogates.
+
+	* locale/programs/locarchive.c (enlarge_archive): Conserve address
+	space when temporarily mapping the whole content of the old file.
+
+	[BZ #10100]
+	* misc/hsearch_r.c (hsearch_r): Add back ensurance that hval is
+	not zero.
+
+2009-04-24  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* iconvdata/sjis.c (BODY): Don't advance inptr before
+	STANDARD_FROM_LOOP_ERR_HANDLER (2) for 2 byte invalid input.
+	Use STANDARD_FROM_LOOP_ERR_HANDLER with 2 instead of 1 for
+	two byte chars.
+
+2009-04-24  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* locale/locarchive.h (struct locarhandle): Rename len field to
+	mmaped and add new reserved field.
+	* locale/programs/locarchive.c (RESERVE_MMAP_SIZE): Define.
+	(create_archive): Reserve address space and then map file into it.
+	(open_archive): Likewise.
+	(file_data_available_p): New function.
+	(compare_from_file): New function.
+	(close_archive): Adjust to member name changes.
+	(add_locale): Before comparing locale data, check it is mapped.
+	Otherwise fall back to reading from the file.
+
+2009-04-23  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* stdio-common/psiginfo.c: Include <errno.h>.
+
+2009-04-23  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #9920]
+	* stdlib/random_r.c (__srandom_r): Change type of word to int32_t
+	to get consistency between 32 and 64 bit architectures.
+
+	[BZ #10052]
+	* sysdeps/unix/make-syscalls.sh: Add rule to create target
+	directory for dummy syscall rules.
+	Patch by Chris Steinbroner <hesh@xxxxxxxxx>.
+
+2009-04-23  Aurelien Jarno  <aurelien@xxxxxxxxxxx>
+
+	[BZ #10092]
+	* sysdeps/unix/sysv/linux/sys/mount.h: Define MNT_DETACH and
+	MNT_EXPIRE.
+
+2009-04-23  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/preadv.c: The kernel API changed.  Adjust.
+	* sysdeps/unix/sysv/linux/pwritev.c: Likewise.
+
+2009-04-23  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* sysdeps/posix/pwritev.c (PWRITEV): Fix up comment.  Copy
+	data from vector to temporary buffer and call PWRITEV after it
+	instead of vice versa.
+	* sysdeps/posix/preadv.c: Fix up comment.
+	* misc/preadv.c: Likewise.
+	* misc/preadv64.c: Likewise.
+	* misc/pwritev.c: Likewise.
+	* misc/pwritev64.c: Likewise.
+	* misc/sys/uio.h (preadv, pwritev, preadv64, pwritev64): Likewise.
+
+2009-04-23  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* shadow/sgetspent_r.c (__sgetspent_r): Recognize too small buffers.
+
+	* shadow/Makefile (tests): Add tst-shadow.
+	* shadow/tst-shadow.c: New file.
+
+	[BZ #9955]
+	* gshadow/Makefile: New file.
+	* gshadow/Versions: New file.
+	* gshadow/fgetsgent.c: New file.
+	* gshadow/fgetsgent_r.c: New file.
+	* gshadow/getsgent.c: New file.
+	* gshadow/getsgent_r.c: New file.
+	* gshadow/getsgnam.c: New file.
+	* gshadow/getsgnam_r.c: New file.
+	* gshadow/gshadow.h: New file.
+	* gshadow/putsgent.c: New file.
+	* gshadow/sgetsgent.c: New file.
+	* gshadow/sgetsgent_r.c: New file.
+	* gshadow/tst-gshadow.c: New file.
+	* include/gshadow.h: New file.
+	* Makeconfig (all-subdirs): Add gshadow.
+	* Makefile (installed-headers): Add gshadow/gshadow.h.
+	* nss/Makefile (databases): Add sgrp.
+	* nss/Versions: Add gshadow functions as private exports.
+	* nss/nsswitch.conf: Add gshadow entry.
+	* nss/sgrp-lookup.c: New file.
+	* nss/nss_files/files-parse.c: Add STRING_LIST macro.  Rewrite
+	parse_list to handle STRING_LIST and TRAILING_LIST_PARSER.
+	* nss/nss_files/files-sgrp.c: New file.
+	* sysdeps/generic/paths.h: Add _PATH_GSHADOW.
+	* sysdeps/unix/sysv/linux/paths.h: Likewise.
+
+2009-04-22  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* stdio-common/printf.h: Add missing const to register_printf_modifier.
+	* stdio-common/reg-modifier.c: Likewise.
+
+2009-04-22  Andrew Stubbs  <ams@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/sh/sh4/setjmp.S (__sigsetjmp): Adjust JB_SIZE when there
+	is no FPU.
+
+2009-04-20  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10086]
+	* sysdeps/unix/sysv/linux/sys/timex.h: Add definitions from kernel
+	headers up to 2.6.30.
+
+	* po/ca.po: Update from translation team.
+
+2009-04-19  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #10069]
+	* elf/dl-open.c (dl_open_worker): We cannot guarantee that we can load
+	an object that uses static TLS if the TLS modid is higher than the
+	reserve we always allocate.  At least for multi-threaded code.
+
+2009-04-18  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* stdlib/strfmon_l.c (__vstrfmon_l): Don't wrap when computing width.
+	Numerically stable check for valid width.
+
+	* locale/programs/locarchive.c (open_archive): Map the entire file
+	and not just the administrative data.
+	(add_locale): When we find a hash sum match compare the content
+	to be sure.
+
+	* malloc/malloc.c (malloc_info): Output address space information.
+
+2009-04-17  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* malloc/malloc.c (malloc_info): Also output system memory information.
+
+	* sysdeps/unix/sysv/linux/kernel-features.h: All supported
+	architectures have preadv/pwritev in 2.6.30.
+
+	* sysdeps/posix/preadv.c: Reading of zero bytes is no error.
+	* sysdeps/posix/readv.c: Likewise.
+	Reported by Markus Armbruster <armbru@xxxxxxxxxx>.
+
+	* malloc/hooks.c (top_check): Force hook value into register.
+
+2009-04-16  Samuel Thibault  <samuel.thibault@xxxxxxxxxxxx>
+
+	* elf/rtld.c (dl_main): Really call _dl_sysdep_start_cleanup after all
+	calls to _dl_relocate_object.
+
+2009-04-16  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #9957]
+	* malloc/malloc.c (force_reg): Define.
+	(sYSMALLOc): Load hook variable into variable
+	before test and force into register.
+	(sYSTRIm): Likewise.
+	(public_mALLOc): Force hook value into register.
+	(public_fREe): Likewise.
+	(public_rEALLOc): Likewise.
+	(public_mEMALIGn): Likewise.
+	(public_vALLOc): Likewise.
+	(public_pVALLOc): Likewise.
+	(public_cALLOc): Likewise.
+	(__posix_memalign): Likewise.
+	* malloc/arena.c (ptmalloc_init): Load hook variable into variable
+	before test and force into register.
+	* malloc/hooks.c (top_check): Likewise.
+	(public_sET_STATe): Pretty printing.
+
+	* resolv/res_send.c (send_dg): Don't just ignore the result we got
+	in case we only receive one reply in single-request mode.
+
+2009-04-16  Jakub Jelinek  <jakub@xxxxxxxxxx>
+
+	* elf/dl-open.c (_dl_open): Bump GL(dl_nns) to 1 if no libraries
+	are dlopened in statically linked program even for __LM_ID_CALLER.
+
+2009-04-16  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* resolv/res_send.c (send_dg): Don't switch into single-request
+	mode if we already are in it.
+
 2009-04-15  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/getsysstats.c (next_line): Make sure there

Modified: trunk/libc/Makeconfig
==============================================================================
--- trunk/libc/Makeconfig (original)
+++ trunk/libc/Makeconfig Thu Apr 30 14:37:18 2009
@@ -944,7 +944,7 @@
 all-subdirs = csu assert ctype locale intl catgets math setjmp signal	    \
 	      stdlib stdio-common libio malloc string wcsmbs time dirent    \
 	      grp pwd posix io termios resource misc socket sysvipc gmon    \
-	      gnulib iconv iconvdata wctype manual shadow po argp	    \
+	      gnulib iconv iconvdata wctype manual shadow gshadow po argp   \
 	      crypt nss localedata timezone rt conform debug		    \
 	      $(add-on-subdirs) $(dlfcn) $(binfmt-subdir)
 

Modified: trunk/libc/Makefile
==============================================================================
--- trunk/libc/Makefile (original)
+++ trunk/libc/Makefile Thu Apr 30 14:37:18 2009
@@ -291,7 +291,7 @@
 		    crypt/crypt.h ctype/ctype.h debug/execinfo.h \
 		    dirent/dirent.h dlfcn/dlfcn.h elf/elf.h elf/link.h \
 		    gmon/sys/gmon.h gmon/sys/gmon_out.h gmon/sys/profil.h \
-		    grp/grp.h iconv/iconv.h iconv/gconv.h \
+		    grp/grp.h gshadow/gshadow.h iconv/iconv.h iconv/gconv.h \
 		    $(wildcard inet/netinet/*.h) \
 		    $(wildcard inet/arpa/*.h inet/protocols/*.h) \
 		    inet/aliases.h inet/ifaddrs.h inet/netinet/ip6.h \

Modified: trunk/libc/NEWS
==============================================================================
--- trunk/libc/NEWS (original)
+++ trunk/libc/NEWS Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes.  2009-4-13
+GNU C Library NEWS -- history of user-visible changes.  2009-4-23
 Copyright (C) 1992-2008, 2009 Free Software Foundation, Inc.
 See the end for copying conditions.
 
@@ -42,6 +42,9 @@
 
 * Extended printf hook support.  It is possible to use user-defined types
   and extend existing format specifiers.
+  Implemented by Ulrich Drepper.
+
+* Handling for group shadow files has been added.
   Implemented by Ulrich Drepper.
 
 

Modified: trunk/libc/debug/vasprintf_chk.c
==============================================================================
--- trunk/libc/debug/vasprintf_chk.c (original)
+++ trunk/libc/debug/vasprintf_chk.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1995,1997,1999-2002,2004,2006,2008
+/* Copyright (C) 1995,1997,1999-2002,2004,2006,2008,2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -53,8 +53,8 @@
 #ifdef _IO_MTSAFE_IO
   sf._sbf._f._lock = NULL;
 #endif
-  _IO_no_init ((_IO_FILE *) &sf._sbf, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, string, init_string_size, string);
   sf._sbf._f._flags &= ~_IO_USER_BUF;
   sf._s._allocate_buffer = (_IO_alloc_type) malloc;

Modified: trunk/libc/debug/vsnprintf_chk.c
==============================================================================
--- trunk/libc/debug/vsnprintf_chk.c (original)
+++ trunk/libc/debug/vsnprintf_chk.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1995, 1997, 1998, 2004, 2006
+/* Copyright (C) 1991, 1995, 1997, 1998, 2004, 2006, 2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -53,7 +53,7 @@
     }
 
   _IO_no_init (&sf.f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf.f._sbf) = &_IO_strn_jumps;
+  _IO_JUMPS (&sf.f._sbf) = &_IO_strn_jumps;
   s[0] = '\0';
 
   /* For flags > 0 (i.e. __USE_FORTIFY_LEVEL > 1) request that %n
@@ -62,7 +62,7 @@
     sf.f._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY;
 
   _IO_str_init_static_internal (&sf.f, s, maxlen - 1, s);
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf.f._sbf, format, args);
+  ret = INTUSE(_IO_vfprintf) (&sf.f._sbf._f, format, args);
 
   if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
     *sf.f._sbf._f._IO_write_ptr = '\0';

Modified: trunk/libc/debug/vsprintf_chk.c
==============================================================================
--- trunk/libc/debug/vsprintf_chk.c (original)
+++ trunk/libc/debug/vsprintf_chk.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994, 1997, 1999-2003, 2004, 2006
+/* Copyright (C) 1994, 1997, 1999-2003, 2004, 2006, 2009
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -75,7 +75,7 @@
     __chk_fail ();
 
   _IO_no_init (&f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &f._sbf) = &_IO_str_chk_jumps;
+  _IO_JUMPS (&f._sbf) = &_IO_str_chk_jumps;
   s[0] = '\0';
   _IO_str_init_static_internal (&f, s, slen - 1, s);
 
@@ -84,7 +84,7 @@
   if (flags > 0)
     f._sbf._f._flags2 |= _IO_FLAGS2_FORTIFY;
 
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &f._sbf, format, args);
+  ret = INTUSE(_IO_vfprintf) (&f._sbf._f, format, args);
 
   *f._sbf._f._IO_write_ptr = '\0';
   return ret;

Modified: trunk/libc/elf/dl-load.c
==============================================================================
--- trunk/libc/elf/dl-load.c (original)
+++ trunk/libc/elf/dl-load.c Thu Apr 30 14:37:18 2009
@@ -1655,7 +1655,8 @@
 						EI_PAD), 0))
 	{
 	  /* Something is wrong.  */
-	  if (*(Elf32_Word *) &ehdr->e_ident !=
+	  const Elf32_Word *magp = (const void *) ehdr->e_ident;
+	  if (*magp !=
 #if BYTE_ORDER == LITTLE_ENDIAN
 	      ((ELFMAG0 << (EI_MAG0 * 8)) |
 	       (ELFMAG1 << (EI_MAG1 * 8)) |

Modified: trunk/libc/elf/dl-open.c
==============================================================================
--- trunk/libc/elf/dl-open.c (original)
+++ trunk/libc/elf/dl-open.c Thu Apr 30 14:37:18 2009
@@ -490,6 +490,18 @@
 
 	  if (imap->l_need_tls_init)
 	    {
+	      /* For static TLS we have to allocate the memory here
+		 and now.  This includes allocating memory in the DTV.
+		 But we cannot change any DTV other than our own. So,
+		 if we cannot guarantee that there is room in the DTV
+		 we don't even try it and fail the load.
+
+		 XXX We could track the minimum DTV slots allocated in
+		 all threads.  */
+	      if (! RTLD_SINGLE_THREAD_P && imap->l_tls_modid > DTV_SURPLUS)
+		_dl_signal_error (0, "dlopen", NULL, N_("\
+cannot load any more object with static TLS"));
+
 	      imap->l_need_tls_init = 0;
 #ifdef SHARED
 	      /* Update the slot information data for at least the
@@ -580,7 +592,8 @@
     _dl_signal_error (EINVAL, file, NULL,
 		      N_("invalid target namespace in dlmopen()"));
 #ifndef SHARED
-  else if (nsid == LM_ID_BASE && GL(dl_ns)[LM_ID_BASE]._ns_loaded == NULL
+  else if ((nsid == LM_ID_BASE || nsid == __LM_ID_CALLER)
+	   && GL(dl_ns)[LM_ID_BASE]._ns_loaded == NULL
 	   && GL(dl_nns) == 0)
     GL(dl_nns) = 1;
 #endif

Modified: trunk/libc/elf/dl-profile.c
==============================================================================
--- trunk/libc/elf/dl-profile.c (original)
+++ trunk/libc/elf/dl-profile.c Thu Apr 30 14:37:18 2009
@@ -1,5 +1,5 @@
 /* Profiling of shared libraries.
-   Copyright (C) 1997-2002, 2003, 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997-2004, 2006, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
    Based on the BSD mcount implementation.
@@ -178,8 +178,6 @@
   const ElfW(Phdr) *ph;
   ElfW(Addr) mapstart = ~((ElfW(Addr)) 0);
   ElfW(Addr) mapend = 0;
-  struct gmon_hdr gmon_hdr;
-  struct gmon_hist_hdr hist_hdr;
   char *hist, *cp;
   size_t idx;
   size_t tossize;
@@ -251,15 +249,52 @@
 		   + 4 + 4 + fromssize * sizeof (struct here_cg_arc_record));
 
   /* Create the gmon_hdr we expect or write.  */
-  memset (&gmon_hdr, '\0', sizeof (struct gmon_hdr));
+  struct real_gmon_hdr
+  {
+    char cookie[4];
+    int32_t version;
+    char spare[3 * 4];
+  } gmon_hdr;
+  if (sizeof (gmon_hdr) != sizeof (struct gmon_hdr)
+      || (offsetof (struct real_gmon_hdr, cookie)
+	  != offsetof (struct gmon_hdr, cookie))
+      || (offsetof (struct real_gmon_hdr, version)
+	  != offsetof (struct gmon_hdr, version)))
+    abort ();
+
   memcpy (&gmon_hdr.cookie[0], GMON_MAGIC, sizeof (gmon_hdr.cookie));
-  *(int32_t *) gmon_hdr.version = GMON_SHOBJ_VERSION;
+  gmon_hdr.version = GMON_SHOBJ_VERSION;
+  memset (gmon_hdr.spare, '\0', sizeof (gmon_hdr.spare));
 
   /* Create the hist_hdr we expect or write.  */
-  *(char **) hist_hdr.low_pc = (char *) mapstart;
-  *(char **) hist_hdr.high_pc = (char *) mapend;
-  *(int32_t *) hist_hdr.hist_size = kcountsize / sizeof (HISTCOUNTER);
-  *(int32_t *) hist_hdr.prof_rate = __profile_frequency ();
+  struct real_gmon_hist_hdr
+  {
+    char *low_pc;
+    char *high_pc;
+    int32_t hist_size;
+    int32_t prof_rate;
+    char dimen[15];
+    char dimen_abbrev;
+  } hist_hdr;
+  if (sizeof (hist_hdr) != sizeof (struct gmon_hist_hdr)
+      || (offsetof (struct real_gmon_hist_hdr, low_pc)
+	  != offsetof (struct gmon_hist_hdr, low_pc))
+      || (offsetof (struct real_gmon_hist_hdr, high_pc)
+	  != offsetof (struct gmon_hist_hdr, high_pc))
+      || (offsetof (struct real_gmon_hist_hdr, hist_size)
+	  != offsetof (struct gmon_hist_hdr, hist_size))
+      || (offsetof (struct real_gmon_hist_hdr, prof_rate)
+	  != offsetof (struct gmon_hist_hdr, prof_rate))
+      || (offsetof (struct real_gmon_hist_hdr, dimen)
+	  != offsetof (struct gmon_hist_hdr, dimen))
+      || (offsetof (struct real_gmon_hist_hdr, dimen_abbrev)
+	  != offsetof (struct gmon_hist_hdr, dimen_abbrev)))
+    abort ();
+
+  hist_hdr.low_pc = (char *) mapstart;
+  hist_hdr.high_pc = (char *) mapend;
+  hist_hdr.hist_size = kcountsize / sizeof (HISTCOUNTER);
+  hist_hdr.prof_rate = __profile_frequency ();
   if (sizeof (hist_hdr.dimen) >= sizeof ("seconds"))
     {
       memcpy (hist_hdr.dimen, "seconds", sizeof ("seconds"));

Modified: trunk/libc/elf/dl-runtime.c
==============================================================================
--- trunk/libc/elf/dl-runtime.c (original)
+++ trunk/libc/elf/dl-runtime.c Thu Apr 30 14:37:18 2009
@@ -137,7 +137,7 @@
   value = elf_machine_plt_value (l, reloc, value);
 
   if (__builtin_expect (ELFW(ST_TYPE) (sym->st_info) == STT_GNU_IFUNC, 0))
-    value = ((DL_FIXUP_VALUE_TYPE (*) (void)) value) ();
+    value = ((DL_FIXUP_VALUE_TYPE (*) (void)) DL_FIXUP_VALUE_ADDR (value)) ();
 
   /* Finally, fix up the plt itself.  */
   if (__builtin_expect (GLRO(dl_bind_not), 0))
@@ -225,7 +225,8 @@
 
 	  if (__builtin_expect (ELFW(ST_TYPE) (defsym->st_info)
 				== STT_GNU_IFUNC, 0))
-	    value = ((DL_FIXUP_VALUE_TYPE (*) (void)) value) ();
+	    value = ((DL_FIXUP_VALUE_TYPE (*) (void))
+		     DL_FIXUP_VALUE_ADDR (value)) ();
 	}
       else
 	{
@@ -235,7 +236,8 @@
 
 	  if (__builtin_expect (ELFW(ST_TYPE) (refsym->st_info)
 				== STT_GNU_IFUNC, 0))
-	    value = ((DL_FIXUP_VALUE_TYPE (*) (void)) value) ();
+	    value = ((DL_FIXUP_VALUE_TYPE (*) (void))
+		     DL_FIXUP_VALUE_ADDR (value)) ();
 
 	  result = l;
 	}

Modified: trunk/libc/elf/rtld.c
==============================================================================
--- trunk/libc/elf/rtld.c (original)
+++ trunk/libc/elf/rtld.c Thu Apr 30 14:37:18 2009
@@ -2181,8 +2181,6 @@
 	  if (l->l_tls_blocksize != 0 && tls_init_tp_called)
 	    _dl_add_to_slotinfo (l);
 	}
-
-      _dl_sysdep_start_cleanup ();
     }
   else
     {
@@ -2237,13 +2235,6 @@
 
       HP_TIMING_DIFF (relocate_time, start, stop);
 
-      /* Do any necessary cleanups for the startup OS interface code.
-	 We do these now so that no calls are made after rtld re-relocation
-	 which might be resolved to different functions than we expect.
-	 We cannot do this before relocating the other objects because
-	 _dl_relocate_object might need to call `mprotect' for DT_TEXTREL.  */
-      _dl_sysdep_start_cleanup ();
-
       /* Now enable profiling if needed.  Like the previous call,
 	 this has to go here because the calls it makes should use the
 	 rtld versions of the functions (particularly calloc()), but it
@@ -2298,6 +2289,13 @@
       HP_TIMING_DIFF (add, start, stop);
       HP_TIMING_ACCUM_NT (relocate_time, add);
     }
+
+  /* Do any necessary cleanups for the startup OS interface code.
+     We do these now so that no calls are made after rtld re-relocation
+     which might be resolved to different functions than we expect.
+     We cannot do this before relocating the other objects because
+     _dl_relocate_object might need to call `mprotect' for DT_TEXTREL.  */
+  _dl_sysdep_start_cleanup ();
 
 #ifdef SHARED
   /* Auditing checkpoint: we have added all objects.  */

Modified: trunk/libc/elf/sprof.c
==============================================================================
--- trunk/libc/elf/sprof.c (original)
+++ trunk/libc/elf/sprof.c Thu Apr 30 14:37:18 2009
@@ -195,13 +195,24 @@
 };
 
 
+struct real_gmon_hist_hdr
+{
+  char *low_pc;
+  char *high_pc;
+  int32_t hist_size;
+  int32_t prof_rate;
+  char dimen[15];
+  char dimen_abbrev;
+};
+
+
 struct profdata
 {
   void *addr;
   off_t size;
 
   char *hist;
-  struct gmon_hist_hdr *hist_hdr;
+  struct real_gmon_hist_hdr *hist_hdr;
   uint16_t *kcount;
   uint32_t narcs;		/* Number of arcs in toset.  */
   struct here_cg_arc_record *data;
@@ -743,8 +754,6 @@
   int fd;
   struct stat st;
   void *addr;
-  struct gmon_hdr gmon_hdr;
-  struct gmon_hist_hdr hist_hdr;
   uint32_t *narcsp;
   size_t fromlimit;
   struct here_cg_arc_record *data;
@@ -831,10 +840,10 @@
 
   /* Pointer to data after the header.  */
   result->hist = (char *) ((struct gmon_hdr *) addr + 1);
-  result->hist_hdr = (struct gmon_hist_hdr *) ((char *) result->hist
-					       + sizeof (uint32_t));
+  result->hist_hdr = (struct real_gmon_hist_hdr *) ((char *) result->hist
+						    + sizeof (uint32_t));
   result->kcount = (uint16_t *) ((char *) result->hist + sizeof (uint32_t)
-				 + sizeof (struct gmon_hist_hdr));
+				 + sizeof (struct real_gmon_hist_hdr));
 
   /* Compute pointer to array of the arc information.  */
   narcsp = (uint32_t *) ((char *) result->kcount + shobj->kcountsize
@@ -844,18 +853,46 @@
 						+ sizeof (uint32_t));
 
   /* Create the gmon_hdr we expect or write.  */
-  memset (&gmon_hdr, '\0', sizeof (struct gmon_hdr));
+  struct real_gmon_hdr
+  {
+    char cookie[4];
+    int32_t version;
+    char spare[3 * 4];
+  } gmon_hdr;
+  if (sizeof (gmon_hdr) != sizeof (struct gmon_hdr)
+      || (offsetof (struct real_gmon_hdr, cookie)
+	  != offsetof (struct gmon_hdr, cookie))
+      || (offsetof (struct real_gmon_hdr, version)
+	  != offsetof (struct gmon_hdr, version)))
+    abort ();
+
   memcpy (&gmon_hdr.cookie[0], GMON_MAGIC, sizeof (gmon_hdr.cookie));
-  *(int32_t *) gmon_hdr.version = GMON_SHOBJ_VERSION;
+  gmon_hdr.version = GMON_SHOBJ_VERSION;
+  memset (gmon_hdr.spare, '\0', sizeof (gmon_hdr.spare));
 
   /* Create the hist_hdr we expect or write.  */
-  *(char **) hist_hdr.low_pc = (char *) shobj->lowpc - shobj->map->l_addr;
-  *(char **) hist_hdr.high_pc = (char *) shobj->highpc - shobj->map->l_addr;
+  struct real_gmon_hist_hdr hist_hdr;
+  if (sizeof (hist_hdr) != sizeof (struct gmon_hist_hdr)
+      || (offsetof (struct real_gmon_hist_hdr, low_pc)
+	  != offsetof (struct gmon_hist_hdr, low_pc))
+      || (offsetof (struct real_gmon_hist_hdr, high_pc)
+	  != offsetof (struct gmon_hist_hdr, high_pc))
+      || (offsetof (struct real_gmon_hist_hdr, hist_size)
+	  != offsetof (struct gmon_hist_hdr, hist_size))
+      || (offsetof (struct real_gmon_hist_hdr, prof_rate)
+	  != offsetof (struct gmon_hist_hdr, prof_rate))
+      || (offsetof (struct real_gmon_hist_hdr, dimen)
+	  != offsetof (struct gmon_hist_hdr, dimen))
+      || (offsetof (struct real_gmon_hist_hdr, dimen_abbrev)
+	  != offsetof (struct gmon_hist_hdr, dimen_abbrev)))
+    abort ();
+
+  hist_hdr.low_pc = (char *) shobj->lowpc - shobj->map->l_addr;
+  hist_hdr.high_pc = (char *) shobj->highpc - shobj->map->l_addr;
   if (do_test)
-    printf ("low_pc = %p\nhigh_pc = %p\n",
-	    *(char **) hist_hdr.low_pc, *(char **) hist_hdr.high_pc);
-  *(int32_t *) hist_hdr.hist_size = shobj->kcountsize / sizeof (HISTCOUNTER);
-  *(int32_t *) hist_hdr.prof_rate = __profile_frequency ();
+    printf ("low_pc = %p\nhigh_pc = %p\n", hist_hdr.low_pc, hist_hdr.high_pc);
+  hist_hdr.hist_size = shobj->kcountsize / sizeof (HISTCOUNTER);
+  hist_hdr.prof_rate = __profile_frequency ();
   strncpy (hist_hdr.dimen, "seconds", sizeof (hist_hdr.dimen));
   hist_hdr.dimen_abbrev = 's';
 
@@ -1283,7 +1320,7 @@
   size_t n;
   void *data = NULL;
 
-  tick_unit = 1.0 / *(uint32_t *) profdata->hist_hdr->prof_rate;
+  tick_unit = 1.0 / profdata->hist_hdr->prof_rate;
 
   printf ("Flat profile:\n\n"
 	  "Each sample counts as %g %s.\n",

Modified: trunk/libc/gmon/gmon.c
==============================================================================
--- trunk/libc/gmon/gmon.c (original)
+++ trunk/libc/gmon/gmon.c Thu Apr 30 14:37:18 2009
@@ -40,6 +40,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <stddef.h>
 #include <unistd.h>
 #include <libc-internal.h>
 #include <not-cancel.h>
@@ -180,10 +181,18 @@
      int fd;
 {
   u_char tag = GMON_TAG_TIME_HIST;
-  struct gmon_hist_hdr thdr __attribute__ ((aligned (__alignof__ (char *))));
 
   if (_gmonparam.kcountsize > 0)
     {
+      struct real_gmon_hist_hdr
+      {
+	char *low_pc;
+	char *high_pc;
+	int32_t hist_size;
+	int32_t prof_rate;
+	char dimen[15];
+	char dimen_abbrev;
+      } thdr;
       struct iovec iov[3] =
         {
 	  { &tag, sizeof (tag) },
@@ -191,11 +200,25 @@
 	  { _gmonparam.kcount, _gmonparam.kcountsize }
 	};
 
-      *(char **) thdr.low_pc = (char *) _gmonparam.lowpc;
-      *(char **) thdr.high_pc = (char *) _gmonparam.highpc;
-      *(int32_t *) thdr.hist_size = (_gmonparam.kcountsize
-				     / sizeof (HISTCOUNTER));
-      *(int32_t *) thdr.prof_rate = __profile_frequency ();
+      if (sizeof (thdr) != sizeof (struct gmon_hist_hdr)
+	  || (offsetof (struct real_gmon_hist_hdr, low_pc)
+	      != offsetof (struct gmon_hist_hdr, low_pc))
+	  || (offsetof (struct real_gmon_hist_hdr, high_pc)
+	      != offsetof (struct gmon_hist_hdr, high_pc))
+	  || (offsetof (struct real_gmon_hist_hdr, hist_size)
+	      != offsetof (struct gmon_hist_hdr, hist_size))
+	  || (offsetof (struct real_gmon_hist_hdr, prof_rate)
+	      != offsetof (struct gmon_hist_hdr, prof_rate))
+	  || (offsetof (struct real_gmon_hist_hdr, dimen)
+	      != offsetof (struct gmon_hist_hdr, dimen))
+	  || (offsetof (struct real_gmon_hist_hdr, dimen_abbrev)
+	      != offsetof (struct gmon_hist_hdr, dimen_abbrev)))
+	abort ();
+
+      thdr.low_pc = (char *) _gmonparam.lowpc;
+      thdr.high_pc = (char *) _gmonparam.highpc;
+      thdr.hist_size = _gmonparam.kcountsize / sizeof (HISTCOUNTER);
+      thdr.prof_rate = __profile_frequency ();
       strncpy (thdr.dimen, "seconds", sizeof (thdr.dimen));
       thdr.dimen_abbrev = 's';
 
@@ -318,7 +341,6 @@
 static void
 write_gmon (void)
 {
-    struct gmon_hdr ghdr __attribute__ ((aligned (__alignof__ (int))));
     int fd = -1;
     char *env;
 
@@ -350,9 +372,21 @@
       }
 
     /* write gmon.out header: */
-    memset (&ghdr, '\0', sizeof (struct gmon_hdr));
+    struct real_gmon_hdr
+    {
+      char cookie[4];
+      int32_t version;
+      char spare[3 * 4];
+    } ghdr;
+    if (sizeof (ghdr) != sizeof (struct gmon_hdr)
+	|| (offsetof (struct real_gmon_hdr, cookie)
+	    != offsetof (struct gmon_hdr, cookie))
+	|| (offsetof (struct real_gmon_hdr, version)
+	    != offsetof (struct gmon_hdr, version)))
+      abort ();
     memcpy (&ghdr.cookie[0], GMON_MAGIC, sizeof (ghdr.cookie));
-    *(int32_t *) ghdr.version = GMON_VERSION;
+    ghdr.version = GMON_VERSION;
+    memset (ghdr.spare, '\0', sizeof (ghdr.spare));
     write_not_cancel (fd, &ghdr, sizeof (struct gmon_hdr));
 
     /* write PC histogram: */

Modified: trunk/libc/iconv/gconv_simple.c
==============================================================================
--- trunk/libc/iconv/gconv_simple.c (original)
+++ trunk/libc/iconv/gconv_simple.c Thu Apr 30 14:37:18 2009
@@ -1,5 +1,5 @@
 /* Simple transformations functions.
-   Copyright (C) 1997-2005, 2007, 2008 Free Software Foundation, Inc.
+   Copyright (C) 1997-2005, 2007, 2008, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
 
@@ -1037,7 +1037,9 @@
 	/* If i < cnt, some trail byte was not >= 0x80, < 0xc0.		      \
 	   If cnt > 2 and ch < 2^(5*cnt-4), the wide character ch could	      \
 	   have been represented with fewer than cnt bytes.  */		      \
-	if (i < cnt || (cnt > 2 && (ch >> (5 * cnt - 4)) == 0))		      \
+	if (i < cnt || (cnt > 2 && (ch >> (5 * cnt - 4)) == 0)		      \
+	    /* Do not accept UTF-16 surrogates.  */			      \
+	    || (ch >= 0xd800 && ch <= 0xdfff))				      \
 	  {								      \
 	    /* This is an illegal encoding.  */				      \
 	    goto errout;						      \

Modified: trunk/libc/iconvdata/sjis.c
==============================================================================
--- trunk/libc/iconvdata/sjis.c (original)
+++ trunk/libc/iconvdata/sjis.c Thu Apr 30 14:37:18 2009
@@ -1,5 +1,5 @@
 /* Mapping tables for SJIS handling.
-   Copyright (C) 1997-2001, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1997-2001, 2002, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
 
@@ -4372,14 +4372,18 @@
 									      \
 	ch2 = inptr[1];							      \
 	idx = ch * 256 + ch2;						      \
-	if (__builtin_expect (ch2 < 0x40, 0)				      \
-	    || (__builtin_expect (idx > 0x84be, 0) && idx < 0x889f)	      \
-	    || (__builtin_expect (idx > 0x88fc, 0) && idx < 0x8940)	      \
-	    || (__builtin_expect (idx > 0x9ffc, 0) && idx < 0xe040)	      \
-	    || __builtin_expect (idx > 0xeaa4, 0))			      \
+	if (__builtin_expect (ch2 < 0x40, 0))				      \
 	  {								      \
 	    /* This is illegal.  */					      \
 	    STANDARD_FROM_LOOP_ERR_HANDLER (1);				      \
+	  }								      \
+	else if ((__builtin_expect (idx > 0x84be && idx < 0x889f, 0))	      \
+		 || (__builtin_expect (idx > 0x88fc && idx < 0x8940, 0))      \
+		 || (__builtin_expect (idx > 0x9ffc && idx < 0xe040, 0))      \
+		 || __builtin_expect (idx > 0xeaa4, 0))			      \
+	  {								      \
+	    /* This is illegal.  */					      \
+	    STANDARD_FROM_LOOP_ERR_HANDLER (2);				      \
 	  }								      \
 	else								      \
 	  {								      \
@@ -4395,13 +4399,13 @@
 	    else							      \
 	      ch = cjk_block4[(ch - 0xe0) * 192 + ch2 - 0x40];		      \
 									      \
+	    if (__builtin_expect (ch == 0, 0))				      \
+	      {								      \
+		/* This is an illegal character.  */			      \
+		STANDARD_FROM_LOOP_ERR_HANDLER (2);			      \
+	      }								      \
+									      \
 	    inptr += 2;							      \
-	  }								      \
-									      \
-	if (__builtin_expect (ch == 0, 0))				      \
-	  {								      \
-	    /* This is an illegal character.  */			      \
-	    STANDARD_FROM_LOOP_ERR_HANDLER (2);				      \
 	  }								      \
       }									      \
 									      \

Modified: trunk/libc/include/features.h
==============================================================================
--- trunk/libc/include/features.h (original)
+++ trunk/libc/include/features.h Thu Apr 30 14:37:18 2009
@@ -230,6 +230,8 @@
 
 #if (_POSIX_C_SOURCE - 0) >= 200112L
 # define __USE_XOPEN2K		1
+# undef __USE_ISOC99
+# define __USE_ISOC99		1
 #endif
 
 #if (_POSIX_C_SOURCE - 0) >= 200809L

Modified: trunk/libc/inet/inet6_option.c
==============================================================================
--- trunk/libc/inet/inet6_option.c (original)
+++ trunk/libc/inet/inet6_option.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2006, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 2003.
 
@@ -216,7 +216,8 @@
     /* Too long.  */
     return NULL;
 
-  ((struct ip6_ext *) CMSG_DATA (cmsg))->ip6e_len = len8b;
+  struct ip6_ext *ie = (void *) CMSG_DATA (cmsg);
+  ie->ip6e_len = len8b;
 
   return result;
 }

Modified: trunk/libc/inet/rcmd.c
==============================================================================
--- trunk/libc/inet/rcmd.c (original)
+++ trunk/libc/inet/rcmd.c Thu Apr 30 14:37:18 2009
@@ -112,7 +112,13 @@
 {
 	char paddr[INET6_ADDRSTRLEN];
 	struct addrinfo hints, *res, *ai;
-	struct sockaddr_storage from;
+	union
+	{
+	  struct sockaddr sa;
+	  struct sockaddr_storage ss;
+	  struct sockaddr_in sin;
+	  struct sockaddr_in6 sin6;
+	} from;
 	struct pollfd pfd[2];
 	int32_t oldmask;
 	pid_t pid;
@@ -274,14 +280,13 @@
 			(void)__close(s2);
 			goto bad;
 		}
-		s3 = TEMP_FAILURE_RETRY (accept(s2, (struct sockaddr *)&from,
-						&len));
-		switch (from.ss_family) {
+		s3 = TEMP_FAILURE_RETRY (accept(s2, &from.sa, &len));
+		switch (from.sa.sa_family) {
 		case AF_INET:
-			rport = ntohs(((struct sockaddr_in *)&from)->sin_port);
+			rport = ntohs(from.sin.sin_port);
 			break;
 		case AF_INET6:
-			rport = ntohs(((struct sockaddr_in6 *)&from)->sin6_port);
+			rport = ntohs(from.sin6.sin6_port);
 			break;
 		default:
 			rport = 0;
@@ -605,13 +610,13 @@
   memset (&ra, '\0', sizeof(ra));
   switch (af){
   case AF_INET:
-    ((struct sockaddr_in *)&ra)->sin_family = AF_INET;
+    ra.ss_family = AF_INET;
     memcpy (&(((struct sockaddr_in *)&ra)->sin_addr), raddr,
 	    sizeof(struct in_addr));
     ralen = sizeof(struct sockaddr_in);
     break;
   case AF_INET6:
-    ((struct sockaddr_in6 *)&ra)->sin6_family = AF_INET6;
+    ra.ss_family = AF_INET6;
     memcpy (&(((struct sockaddr_in6 *)&ra)->sin6_addr), raddr,
             sizeof(struct in6_addr));
     ralen = sizeof(struct sockaddr_in6);

Modified: trunk/libc/inet/rexec.c
==============================================================================
--- trunk/libc/inet/rexec.c (original)
+++ trunk/libc/inet/rexec.c Thu Apr 30 14:37:18 2009
@@ -56,7 +56,7 @@
 	int *fd2p;
 	sa_family_t af;
 {
-	struct sockaddr_storage sa2, from;
+	struct sockaddr_storage from;
 	struct addrinfo hints, *res0;
 	const char *orig_name = name;
 	const char *orig_pass = pass;
@@ -115,6 +115,11 @@
 	} else {
 		char num[32];
 		int s2;
+		union
+		{
+		  struct sockaddr_storage ss;
+		  struct sockaddr sa;
+		} sa2;
 		socklen_t sa2len;
 
 		s2 = __socket(res0->ai_family, res0->ai_socktype, 0);
@@ -124,17 +129,17 @@
 		}
 		__listen(s2, 1);
 		sa2len = sizeof (sa2);
-		if (__getsockname(s2, (struct sockaddr *)&sa2, &sa2len) < 0) {
+		if (__getsockname(s2, &sa2.sa, &sa2len) < 0) {
 			perror("getsockname");
 			(void) __close(s2);
 			goto bad;
-		} else if (sa2len != SA_LEN((struct sockaddr *)&sa2)) {
+		} else if (sa2len != SA_LEN(&sa2.sa)) {
 			__set_errno(EINVAL);
 			(void) __close(s2);
 			goto bad;
 		}
 		port = 0;
-		if (!getnameinfo((struct sockaddr *)&sa2, sa2len,
+		if (!getnameinfo(&sa2.sa, sa2len,
 				 NULL, 0, servbuff, sizeof(servbuff),
 				 NI_NUMERICSERV))
 			port = atoi(servbuff);

Modified: trunk/libc/libio/iovsprintf.c
==============================================================================
--- trunk/libc/libio/iovsprintf.c (original)
+++ trunk/libc/libio/iovsprintf.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2006, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -38,10 +38,10 @@
   sf._sbf._f._lock = NULL;
 #endif
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, string, -1, string);
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf._sbf, format, args);
-  _IO_putc_unlocked ('\0', (_IO_FILE *) &sf._sbf);
+  ret = INTUSE(_IO_vfprintf) (&sf._sbf._f, format, args);
+  _IO_putc_unlocked ('\0', &sf._sbf._f);
   return ret;
 }
 INTDEF2(__IO_vsprintf, _IO_vsprintf)

Modified: trunk/libc/libio/iovsscanf.c
==============================================================================
--- trunk/libc/libio/iovsscanf.c (original)
+++ trunk/libc/libio/iovsscanf.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997-2003, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1997-2003, 2006, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -40,9 +40,9 @@
   sf._sbf._f._lock = NULL;
 #endif
   _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, (char*)string, 0, NULL);
-  ret = INTUSE(_IO_vfscanf) ((_IO_FILE *) &sf._sbf, format, args, NULL);
+  ret = INTUSE(_IO_vfscanf) (&sf._sbf._f, format, args, NULL);
   return ret;
 }
 ldbl_weak_alias (_IO_vsscanf, __vsscanf)

Modified: trunk/libc/libio/strfile.h
==============================================================================
--- trunk/libc/libio/strfile.h (original)
+++ trunk/libc/libio/strfile.h Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1997, 1998, 1999, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 1993,1997,1998,1999,2005,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -47,7 +47,7 @@
 struct _IO_streambuf
 {
   struct _IO_FILE _f;
-  const void *_vtable;
+  const struct _IO_jump_t *vtable;
 };
 
 typedef struct _IO_strfile_

Modified: trunk/libc/libio/tst-widetext.input
==============================================================================
--- trunk/libc/libio/tst-widetext.input (original)
+++ trunk/libc/libio/tst-widetext.input Thu Apr 30 14:37:18 2009
@@ -1807,47 +1807,6 @@
 힤힥힦힧힨힩힪힫힬힭힮힯ힰힱힲힳힴힵힶힷힸힹힺힻힼힽힾힿퟀퟁퟂퟃퟄퟅퟆ퟇퟈퟉퟊ퟋퟌퟍퟎퟏퟐퟑퟒퟓퟔퟕퟖퟗퟘퟙퟚퟛퟜퟝퟞퟟퟠퟡퟢퟣ
 ퟤퟥퟦퟧퟨퟩퟪퟫퟬퟭퟮퟯퟰퟱퟲퟳퟴퟵퟶퟷퟸퟹퟺퟻ퟼퟽퟾퟿
 
-High Surrogates (U+D800-U+DB7F):
-
-í €í í ‚í ƒí „í …í †í ‡í ˆí ‰í Ší ‹í Œí í Ží í í ‘í ’í “í ”í •í –í —í ˜í ™í ší ›í œí í ží Ÿí  í ¡í ¢í £í ¤í ¥í ¦í §í ¨í ©í ªí «í ¬í ­í ®í ¯í °í ±í ²í ³í ´í µí ¶í ·í ¸í ¹í ºí »í ¼í ½í ¾í ¿
-í¡€í¡í¡‚í¡ƒí¡„í¡…í¡†í¡‡í¡ˆí¡‰í¡Ší¡‹í¡Œí¡í¡Ží¡í¡í¡‘í¡’í¡“í¡”í¡•í¡–í¡—í¡˜í¡™í¡ší¡›í¡œí¡í¡ží¡Ÿí¡ í¡¡í¡¢í¡£í¡¤í¡¥í¡¦í¡§í¡¨í¡©í¡ªí¡«í¡¬í¡­í¡®í¡¯í¡°í¡±í¡²í¡³í¡´í¡µí¡¶í¡·í¡¸í¡¹í¡ºí¡»í¡¼í¡½í¡¾í¡¿
-í¢€í¢í¢‚í¢ƒí¢„í¢…í¢†í¢‡í¢ˆí¢‰í¢Ší¢‹í¢Œí¢í¢Ží¢í¢í¢‘í¢’í¢“í¢”í¢•í¢–í¢—í¢˜í¢™í¢ší¢›í¢œí¢í¢ží¢Ÿí¢ í¢¡í¢¢í¢£í¢¤í¢¥í¢¦í¢§í¢¨í¢©í¢ªí¢«í¢¬í¢­í¢®í¢¯í¢°í¢±í¢²í¢³í¢´í¢µí¢¶í¢·í¢¸í¢¹í¢ºí¢»í¢¼í¢½í¢¾í¢¿
-í£€í£í£‚í£ƒí£„í£…í£†í£‡í£ˆí£‰í£Ší£‹í£Œí£í£Ží£í£í£‘í£’í£“í£”í£•í£–í£—í£˜í£™í£ší£›í£œí£í£ží£Ÿí£ í£¡í£¢í££í£¤í£¥í£¦í£§í£¨í£©í£ªí£«í£¬í£­í£®í£¯í£°í£±í£²í£³í£´í£µí£¶í£·í£¸í£¹í£ºí£»í£¼í£½í£¾í£¿
-í¤€í¤í¤‚í¤ƒí¤„í¤…í¤†í¤‡í¤ˆí¤‰í¤Ší¤‹í¤Œí¤í¤Ží¤í¤í¤‘í¤’í¤“í¤”í¤•í¤–í¤—í¤˜í¤™í¤ší¤›í¤œí¤í¤ží¤Ÿí¤ í¤¡í¤¢í¤£í¤¤í¤¥í¤¦í¤§í¤¨í¤©í¤ªí¤«í¤¬í¤­í¤®í¤¯í¤°í¤±í¤²í¤³í¤´í¤µí¤¶í¤·í¤¸í¤¹í¤ºí¤»í¤¼í¤½í¤¾í¤¿
-í¥€í¥í¥‚í¥ƒí¥„í¥…í¥†í¥‡í¥ˆí¥‰í¥Ší¥‹í¥Œí¥í¥Ží¥í¥í¥‘í¥’í¥“í¥”í¥•í¥–í¥—í¥˜í¥™í¥ší¥›í¥œí¥í¥ží¥Ÿí¥ í¥¡í¥¢í¥£í¥¤í¥¥í¥¦í¥§í¥¨í¥©í¥ªí¥«í¥¬í¥­í¥®í¥¯í¥°í¥±í¥²í¥³í¥´í¥µí¥¶í¥·í¥¸í¥¹í¥ºí¥»í¥¼í¥½í¥¾í¥¿
-í¦€í¦í¦‚í¦ƒí¦„í¦…í¦†í¦‡í¦ˆí¦‰í¦Ší¦‹í¦Œí¦í¦Ží¦í¦í¦‘í¦’í¦“í¦”í¦•í¦–í¦—í¦˜í¦™í¦ší¦›í¦œí¦í¦ží¦Ÿí¦ í¦¡í¦¢í¦£í¦¤í¦¥í¦¦í¦§í¦¨í¦©í¦ªí¦«í¦¬í¦­í¦®í¦¯í¦°í¦±í¦²í¦³í¦´í¦µí¦¶í¦·í¦¸í¦¹í¦ºí¦»í¦¼í¦½í¦¾í¦¿
-í§€í§í§‚í§ƒí§„í§…í§†í§‡í§ˆí§‰í§Ší§‹í§Œí§í§Ží§í§í§‘í§’í§“í§”í§•í§–í§—í§˜í§™í§ší§›í§œí§í§ží§Ÿí§ í§¡í§¢í§£í§¤í§¥í§¦í§§í§¨í§©í§ªí§«í§¬í§­í§®í§¯í§°í§±í§²í§³í§´í§µí§¶í§·í§¸í§¹í§ºí§»í§¼í§½í§¾í§¿
-í¨€í¨í¨‚í¨ƒí¨„í¨…í¨†í¨‡í¨ˆí¨‰í¨Ší¨‹í¨Œí¨í¨Ží¨í¨í¨‘í¨’í¨“í¨”í¨•í¨–í¨—í¨˜í¨™í¨ší¨›í¨œí¨í¨ží¨Ÿí¨ í¨¡í¨¢í¨£í¨¤í¨¥í¨¦í¨§í¨¨í¨©í¨ªí¨«í¨¬í¨­í¨®í¨¯í¨°í¨±í¨²í¨³í¨´í¨µí¨¶í¨·í¨¸í¨¹í¨ºí¨»í¨¼í¨½í¨¾í¨¿
-í©€í©í©‚í©ƒí©„í©…í©†í©‡í©ˆí©‰í©Ší©‹í©Œí©í©Ží©í©í©‘í©’í©“í©”í©•í©–í©—í©˜í©™í©ší©›í©œí©í©ží©Ÿí© í©¡í©¢í©£í©¤í©¥í©¦í©§í©¨í©©í©ªí©«í©¬í©­í©®í©¯í©°í©±í©²í©³í©´í©µí©¶í©·í©¸í©¹í©ºí©»í©¼í©½í©¾í©¿
-íª€íªíª‚íªƒíª„íª…íª†íª‡íªˆíª‰íªŠíª‹íªŒíªíªŽíªíªíª‘íª’íª“íª”íª•íª–íª—íª˜íª™íªšíª›íªœíªíªžíªŸíª íª¡íª¢íª£íª¤íª¥íª¦íª§íª¨íª©íªªíª«íª¬íª­íª®íª¯íª°íª±íª²íª³íª´íªµíª¶íª·íª¸íª¹íªºíª»íª¼íª½íª¾íª¿
-í«€í«í«‚í«ƒí«„í«…í«†í«‡í«ˆí«‰í«Ší«‹í«Œí«í«Ží«í«í«‘í«’í«“í«”í«•í«–í«—í«˜í«™í«ší«›í«œí«í«ží«Ÿí« í«¡í«¢í«£í«¤í«¥í«¦í«§í«¨í«©í«ªí««í«¬í«­í«®í«¯í«°í«±í«²í«³í«´í«µí«¶í«·í«¸í«¹í«ºí«»í«¼í«½í«¾í«¿
-í¬€í¬í¬‚í¬ƒí¬„í¬…í¬†í¬‡í¬ˆí¬‰í¬Ší¬‹í¬Œí¬í¬Ží¬í¬í¬‘í¬’í¬“í¬”í¬•í¬–í¬—í¬˜í¬™í¬ší¬›í¬œí¬í¬ží¬Ÿí¬ í¬¡í¬¢í¬£í¬¤í¬¥í¬¦í¬§í¬¨í¬©í¬ªí¬«í¬¬í¬­í¬®í¬¯í¬°í¬±í¬²í¬³í¬´í¬µí¬¶í¬·í¬¸í¬¹í¬ºí¬»í¬¼í¬½í¬¾í¬¿
-í­€í­í­‚í­ƒí­„í­…í­†í­‡í­ˆí­‰í­Ší­‹í­Œí­í­Ží­í­í­‘í­’í­“í­”í­•í­–í­—í­˜í­™í­ší­›í­œí­í­ží­Ÿí­ í­¡í­¢í­£í­¤í­¥í­¦í­§í­¨í­©í­ªí­«í­¬í­­í­®í­¯í­°í­±í­²í­³í­´í­µí­¶í­·í­¸í­¹í­ºí­»í­¼í­½í­¾í­¿
-
-High Private Use Surrogates (U+DB80-U+DBFF):
-
-í®€í®í®‚í®ƒí®„í®…í®†í®‡í®ˆí®‰í®Ší®‹í®Œí®í®Ží®í®í®‘í®’í®“í®”í®•í®–í®—í®˜í®™í®ší®›í®œí®í®ží®Ÿí® í®¡í®¢í®£í®¤í®¥í®¦í®§í®¨í®©í®ªí®«í®¬í®­í®®í®¯í®°í®±í®²í®³í®´í®µí®¶í®·í®¸í®¹í®ºí®»í®¼í®½í®¾í®¿
-í¯€í¯í¯‚í¯ƒí¯„í¯…í¯†í¯‡í¯ˆí¯‰í¯Ší¯‹í¯Œí¯í¯Ží¯í¯í¯‘í¯’í¯“í¯”í¯•í¯–í¯—í¯˜í¯™í¯ší¯›í¯œí¯í¯ží¯Ÿí¯ í¯¡í¯¢í¯£í¯¤í¯¥í¯¦í¯§í¯¨í¯©í¯ªí¯«í¯¬í¯­í¯®í¯¯í¯°í¯±í¯²í¯³í¯´í¯µí¯¶í¯·í¯¸í¯¹í¯ºí¯»í¯¼í¯½í¯¾í¯¿
-
-Low Surrogates (U+DC00-U+DFFF):
-
-í°€í°í°‚í°ƒí°„í°…í°†í°‡í°ˆí°‰í°Ší°‹í°Œí°í°Ží°í°í°‘í°’í°“í°”í°•í°–í°—í°˜í°™í°ší°›í°œí°í°ží°Ÿí° í°¡í°¢í°£í°¤í°¥í°¦í°§í°¨í°©í°ªí°«í°¬í°­í°®í°¯í°°í°±í°²í°³í°´í°µí°¶í°·í°¸í°¹í°ºí°»í°¼í°½í°¾í°¿
-í±€í±í±‚í±ƒí±„í±…í±†í±‡í±ˆí±‰í±Ší±‹í±Œí±í±Ží±í±í±‘í±’í±“í±”í±•í±–í±—í±˜í±™í±ší±›í±œí±í±ží±Ÿí± í±¡í±¢í±£í±¤í±¥í±¦í±§í±¨í±©í±ªí±«í±¬í±­í±®í±¯í±°í±±í±²í±³í±´í±µí±¶í±·í±¸í±¹í±ºí±»í±¼í±½í±¾í±¿
-í²€í²í²‚í²ƒí²„í²…í²†í²‡í²ˆí²‰í²Ší²‹í²Œí²í²Ží²í²í²‘í²’í²“í²”í²•í²–í²—í²˜í²™í²ší²›í²œí²í²ží²Ÿí² í²¡í²¢í²£í²¤í²¥í²¦í²§í²¨í²©í²ªí²«í²¬í²­í²®í²¯í²°í²±í²²í²³í²´í²µí²¶í²·í²¸í²¹í²ºí²»í²¼í²½í²¾í²¿
-í³€í³í³‚í³ƒí³„í³…í³†í³‡í³ˆí³‰í³Ší³‹í³Œí³í³Ží³í³í³‘í³’í³“í³”í³•í³–í³—í³˜í³™í³ší³›í³œí³í³ží³Ÿí³ í³¡í³¢í³£í³¤í³¥í³¦í³§í³¨í³©í³ªí³«í³¬í³­í³®í³¯í³°í³±í³²í³³í³´í³µí³¶í³·í³¸í³¹í³ºí³»í³¼í³½í³¾í³¿
-í´€í´í´‚í´ƒí´„í´…í´†í´‡í´ˆí´‰í´Ší´‹í´Œí´í´Ží´í´í´‘í´’í´“í´”í´•í´–í´—í´˜í´™í´ší´›í´œí´í´ží´Ÿí´ í´¡í´¢í´£í´¤í´¥í´¦í´§í´¨í´©í´ªí´«í´¬í´­í´®í´¯í´°í´±í´²í´³í´´í´µí´¶í´·í´¸í´¹í´ºí´»í´¼í´½í´¾í´¿
-íµ€íµíµ‚íµƒíµ„íµ…íµ†íµ‡íµˆíµ‰íµŠíµ‹íµŒíµíµŽíµíµíµ‘íµ’íµ“íµ”íµ•íµ–íµ—íµ˜íµ™íµšíµ›íµœíµíµžíµŸíµ íµ¡íµ¢íµ£íµ¤íµ¥íµ¦íµ§íµ¨íµ©íµªíµ«íµ¬íµ­íµ®íµ¯íµ°íµ±íµ²íµ³íµ´íµµíµ¶íµ·íµ¸íµ¹íµºíµ»íµ¼íµ½íµ¾íµ¿
-í¶€í¶í¶‚í¶ƒí¶„í¶…í¶†í¶‡í¶ˆí¶‰í¶Ší¶‹í¶Œí¶í¶Ží¶í¶í¶‘í¶’í¶“í¶”í¶•í¶–í¶—í¶˜í¶™í¶ší¶›í¶œí¶í¶ží¶Ÿí¶ í¶¡í¶¢í¶£í¶¤í¶¥í¶¦í¶§í¶¨í¶©í¶ªí¶«í¶¬í¶­í¶®í¶¯í¶°í¶±í¶²í¶³í¶´í¶µí¶¶í¶·í¶¸í¶¹í¶ºí¶»í¶¼í¶½í¶¾í¶¿
-í·€í·í·‚í·ƒí·„í·…í·†í·‡í·ˆí·‰í·Ší·‹í·Œí·í·Ží·í·í·‘í·’í·“í·”í·•í·–í·—í·˜í·™í·ší·›í·œí·í·ží·Ÿí· í·¡í·¢í·£í·¤í·¥í·¦í·§í·¨í·©í·ªí·«í·¬í·­í·®í·¯í·°í·±í·²í·³í·´í·µí·¶í··í·¸í·¹í·ºí·»í·¼í·½í·¾í·¿
-í¸€í¸í¸‚í¸ƒí¸„í¸…í¸†í¸‡í¸ˆí¸‰í¸Ší¸‹í¸Œí¸í¸Ží¸í¸í¸‘í¸’í¸“í¸”í¸•í¸–í¸—í¸˜í¸™í¸ší¸›í¸œí¸í¸ží¸Ÿí¸ í¸¡í¸¢í¸£í¸¤í¸¥í¸¦í¸§í¸¨í¸©í¸ªí¸«í¸¬í¸­í¸®í¸¯í¸°í¸±í¸²í¸³í¸´í¸µí¸¶í¸·í¸¸í¸¹í¸ºí¸»í¸¼í¸½í¸¾í¸¿
-í¹€í¹í¹‚í¹ƒí¹„í¹…í¹†í¹‡í¹ˆí¹‰í¹Ší¹‹í¹Œí¹í¹Ží¹í¹í¹‘í¹’í¹“í¹”í¹•í¹–í¹—í¹˜í¹™í¹ší¹›í¹œí¹í¹ží¹Ÿí¹ í¹¡í¹¢í¹£í¹¤í¹¥í¹¦í¹§í¹¨í¹©í¹ªí¹«í¹¬í¹­í¹®í¹¯í¹°í¹±í¹²í¹³í¹´í¹µí¹¶í¹·í¹¸í¹¹í¹ºí¹»í¹¼í¹½í¹¾í¹¿
-íº€íºíº‚íºƒíº„íº…íº†íº‡íºˆíº‰íºŠíº‹íºŒíºíºŽíºíºíº‘íº’íº“íº”íº•íº–íº—íº˜íº™íºšíº›íºœíºíºžíºŸíº íº¡íº¢íº£íº¤íº¥íº¦íº§íº¨íº©íºªíº«íº¬íº­íº®íº¯íº°íº±íº²íº³íº´íºµíº¶íº·íº¸íº¹íººíº»íº¼íº½íº¾íº¿
-í»€í»í»‚í»ƒí»„í»…í»†í»‡í»ˆí»‰í»Ší»‹í»Œí»í»Ží»í»í»‘í»’í»“í»”í»•í»–í»—í»˜í»™í»ší»›í»œí»í»ží»Ÿí» í»¡í»¢í»£í»¤í»¥í»¦í»§í»¨í»©í»ªí»«í»¬í»­í»®í»¯í»°í»±í»²í»³í»´í»µí»¶í»·í»¸í»¹í»ºí»»í»¼í»½í»¾í»¿
-í¼€í¼í¼‚í¼ƒí¼„í¼…í¼†í¼‡í¼ˆí¼‰í¼Ší¼‹í¼Œí¼í¼Ží¼í¼í¼‘í¼’í¼“í¼”í¼•í¼–í¼—í¼˜í¼™í¼ší¼›í¼œí¼í¼ží¼Ÿí¼ í¼¡í¼¢í¼£í¼¤í¼¥í¼¦í¼§í¼¨í¼©í¼ªí¼«í¼¬í¼­í¼®í¼¯í¼°í¼±í¼²í¼³í¼´í¼µí¼¶í¼·í¼¸í¼¹í¼ºí¼»í¼¼í¼½í¼¾í¼¿
-í½€í½í½‚í½ƒí½„í½…í½†í½‡í½ˆí½‰í½Ší½‹í½Œí½í½Ží½í½í½‘í½’í½“í½”í½•í½–í½—í½˜í½™í½ší½›í½œí½í½ží½Ÿí½ í½¡í½¢í½£í½¤í½¥í½¦í½§í½¨í½©í½ªí½«í½¬í½­í½®í½¯í½°í½±í½²í½³í½´í½µí½¶í½·í½¸í½¹í½ºí½»í½¼í½½í½¾í½¿
-í¾€í¾í¾‚í¾ƒí¾„í¾…í¾†í¾‡í¾ˆí¾‰í¾Ší¾‹í¾Œí¾í¾Ží¾í¾í¾‘í¾’í¾“í¾”í¾•í¾–í¾—í¾˜í¾™í¾ší¾›í¾œí¾í¾ží¾Ÿí¾ í¾¡í¾¢í¾£í¾¤í¾¥í¾¦í¾§í¾¨í¾©í¾ªí¾«í¾¬í¾­í¾®í¾¯í¾°í¾±í¾²í¾³í¾´í¾µí¾¶í¾·í¾¸í¾¹í¾ºí¾»í¾¼í¾½í¾¾í¾¿
-í¿€í¿í¿‚í¿ƒí¿„í¿…í¿†í¿‡í¿ˆí¿‰í¿Ší¿‹í¿Œí¿í¿Ží¿í¿í¿‘í¿’í¿“í¿”í¿•í¿–í¿—í¿˜í¿™í¿ší¿›í¿œí¿í¿ží¿Ÿí¿ í¿¡í¿¢í¿£í¿¤í¿¥í¿¦í¿§í¿¨í¿©í¿ªí¿«í¿¬í¿­í¿®í¿¯í¿°í¿±í¿²í¿³í¿´í¿µí¿¶í¿·í¿¸í¿¹í¿ºí¿»í¿¼í¿½í¿¾í¿¿
-
 Private Use (U+E000-U+F8FF):
 
 

Modified: trunk/libc/libio/vasprintf.c
==============================================================================
--- trunk/libc/libio/vasprintf.c (original)
+++ trunk/libc/libio/vasprintf.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,5 @@
-/* Copyright (C) 1995,1997,1999-2002,2004,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1995,1997,1999-2002,2004,2006,2009
+   Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -54,8 +55,8 @@
 #ifdef _IO_MTSAFE_IO
   sf._sbf._f._lock = NULL;
 #endif
-  _IO_no_init ((_IO_FILE *) &sf._sbf, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf._sbf) = &_IO_str_jumps;
+  _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
+  _IO_JUMPS (&sf._sbf) = &_IO_str_jumps;
   _IO_str_init_static_internal (&sf, string, init_string_size, string);
   sf._sbf._f._flags &= ~_IO_USER_BUF;
   sf._s._allocate_buffer = (_IO_alloc_type) malloc;

Modified: trunk/libc/libio/vsnprintf.c
==============================================================================
--- trunk/libc/libio/vsnprintf.c (original)
+++ trunk/libc/libio/vsnprintf.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1994,1997,1999-2003, 2004, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 1994,1997,1999-2004,2006,2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -114,10 +114,10 @@
     }
 
   _IO_no_init (&sf.f._sbf._f, _IO_USER_LOCK, -1, NULL, NULL);
-  _IO_JUMPS ((struct _IO_FILE_plus *) &sf.f._sbf) = &_IO_strn_jumps;
+  _IO_JUMPS (&sf.f._sbf) = &_IO_strn_jumps;
   string[0] = '\0';
   _IO_str_init_static_internal (&sf.f, string, maxlen - 1, string);
-  ret = INTUSE(_IO_vfprintf) ((_IO_FILE *) &sf.f._sbf, format, args);
+  ret = INTUSE(_IO_vfprintf) (&sf.f._sbf._f, format, args);
 
   if (sf.f._sbf._f._IO_buf_base != sf.overflow_buf)
     *sf.f._sbf._f._IO_write_ptr = '\0';

Modified: trunk/libc/locale/locarchive.h
==============================================================================
--- trunk/libc/locale/locarchive.h (original)
+++ trunk/libc/locale/locarchive.h Thu Apr 30 14:37:18 2009
@@ -1,5 +1,5 @@
 /* Definitions for locale archive handling.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -83,7 +83,8 @@
 {
   int fd;
   void *addr;
-  size_t len;
+  size_t mmaped;
+  size_t reserved;
 };
 
 

Modified: trunk/libc/locale/programs/locarchive.c
==============================================================================
--- trunk/libc/locale/programs/locarchive.c (original)
+++ trunk/libc/locale/programs/locarchive.c Thu Apr 30 14:37:18 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003, 2005, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2005, 2007, 2009 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 2002.
 
@@ -71,6 +71,10 @@
 #define INITIAL_NUM_SUMS	2000
 
 
+/* Size of the reserved address space area.  */
+#define RESERVE_MMAP_SIZE	512 * 1024 * 1024
+
+
 static void
 create_archive (const char *archivefname, struct locarhandle *ah)
 {
@@ -125,8 +129,22 @@
       error (EXIT_FAILURE, errval, _("cannot resize archive file"));
     }
 
+  /* To prepare for enlargements of the mmaped area reserve some
+     address space.  */
+  size_t reserved = RESERVE_MMAP_SIZE;
+  int xflags = 0;
+  if (total < reserved
+      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
+		       -1, 0)) != MAP_FAILED))
+    xflags = MAP_FIXED;
+  else
+    {
+      p = NULL;
+      reserved = total;
+    }
+
   /* Map the header and all the administration data structures.  */
-  p = mmap64 (NULL, total, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+  p = mmap64 (p, total, PROT_READ | PROT_WRITE, MAP_SHARED | xflags, fd, 0);
   if (p == MAP_FAILED)
     {
       int errval = errno;
@@ -170,7 +188,8 @@
 
   ah->fd = fd;
   ah->addr = p;
-  ah->len = total;
+  ah->mmaped = total;
+  ah->reserved = reserved;
 }
 
 
@@ -225,6 +244,51 @@
 static void add_alias (struct locarhandle *ah, const char *alias,
 		       bool replace, const char *oldname,
 		       uint32_t *locrec_offset_p);
+
+
+static bool
+file_data_available_p (struct locarhandle *ah, uint32_t offset, uint32_t size)
+{
+  if (offset < ah->mmaped && offset + size <= ah->mmaped)
+    return true;
+
+  struct stat64 st;
+  if (fstat64 (ah->fd, &st) != 0)
+    return false;
+
+  if (st.st_size > ah->reserved)
+    return false;
+
+  const size_t pagesz = getpagesize ();
+  size_t start = ah->mmaped & ~(pagesz - 1);
+  void *p = mmap64 (ah->addr + start, st.st_size - start,
+		    PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED,
+		    ah->fd, start);
+  if (p == MAP_FAILED)
+    {
+      ah->mmaped = start;
+      return false;
+    }
+
+  ah->mmaped = st.st_size;
+  return true;
+}
+
+
+static int
+compare_from_file (struct locarhandle *ah, void *p1, uint32_t offset2,
+		   uint32_t size)
+{
+  void *p2 = xmalloc (size);
+  if (pread (ah->fd, p2, size, offset2) != size)
+    WITH_CUR_LOCALE (error (4, errno,
+			    _("cannot read data from locale archive")));
+
+  int res = memcmp (p1, p2, size);
+  free (p2);
+  return res;
+}
+
 
 static void
 enlarge_archive (struct locarhandle *ah, const struct locarhead *head)
@@ -250,11 +314,24 @@
 
   /* Not all of the old file has to be mapped.  Change this now this
      we will have to access the whole content.  */
-  if (fstat64 (ah->fd, &st) != 0
-      || (ah->addr = mmap64 (NULL, st.st_size, PROT_READ | PROT_WRITE,
-			     MAP_SHARED, ah->fd, 0)) == MAP_FAILED)
+  if (fstat64 (ah->fd, &st) != 0)
+  enomap:
     error (EXIT_FAILURE, errno, _("cannot map locale archive file"));
-  ah->len = st.st_size;
+
+  if (st.st_size < ah->reserved)
+    ah->addr = mmap64 (ah->addr, st.st_size, PROT_READ | PROT_WRITE,
+		       MAP_SHARED | MAP_FIXED, ah->fd, 0);
+  else
+    {
+      munmap (ah->addr, ah->reserved);
+      ah->addr = mmap64 (NULL, st.st_size, PROT_READ | PROT_WRITE,
+			 MAP_SHARED, ah->fd, 0);
+      ah->reserved = st.st_size;
+      head = ah->addr;
+    }
+  if (ah->addr == MAP_FAILED)
+    goto enomap;
+  ah->mmaped = st.st_size;
 
   /* Create a temporary file in the correct directory.  */
   fd = mkstemp (fname);
@@ -315,8 +392,22 @@
       error (EXIT_FAILURE, errval, _("cannot resize archive file"));
     }
 
+  /* To prepare for enlargements of the mmaped area reserve some
+     address space.  */
+  size_t reserved = RESERVE_MMAP_SIZE;
+  int xflags = 0;
+  if (total < reserved
+      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
+		       -1, 0)) != MAP_FAILED))
+    xflags = MAP_FIXED;
+  else
+    {
+      p = NULL;
+      reserved = total;
+    }
+
   /* Map the header and all the administration data structures.  */
-  p = mmap64 (NULL, total, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+  p = mmap64 (p, total, PROT_READ | PROT_WRITE, MAP_SHARED | xflags, fd, 0);
   if (p == MAP_FAILED)
     {
       int errval = errno;
@@ -332,9 +423,10 @@
       error (EXIT_FAILURE, errval, _("cannot lock new archive"));
     }
 
-  new_ah.len = total;
+  new_ah.mmaped = total;
   new_ah.addr = p;
   new_ah.fd = fd;
+  new_ah.reserved = reserved;
 
   /* Walk through the hash name hash table to find out what data is
      still referenced and transfer it into the new file.  */
@@ -381,7 +473,7 @@
 	    = ((char *) ah->addr
 	       + oldnamehashtab[oldlocrecarray[cnt - 1].cnt].name_offset);
 
-	  add_alias (&new_ah, 
+	  add_alias (&new_ah,
 		     ((char *) ah->addr
 		      + oldnamehashtab[oldlocrecarray[cnt].cnt].name_offset),
 		     0, oldname, &last_locrec_offset);
@@ -515,18 +607,33 @@
     }
 
   ah->fd = fd;
-  ah->len = (head.sumhash_offset
-	     + head.sumhash_size * sizeof (struct sumhashent));
-
-  /* Now we know how large the administrative information part is.
-     Map all of it.  */
-  ah->addr = mmap64 (NULL, ah->len, PROT_READ | (readonly ? 0 : PROT_WRITE),
-		     MAP_SHARED, fd, 0);
+  ah->mmaped = st.st_size;
+
+  /* To prepare for enlargements of the mmaped area reserve some
+     address space.  */
+  size_t reserved = RESERVE_MMAP_SIZE;
+  int xflags = 0;
+  void *p;
+  if (st.st_size < reserved
+      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
+		       -1, 0)) != MAP_FAILED))
+    xflags = MAP_FIXED;
+  else
+    {
+      p = NULL;
+      reserved = st.st_size;
+    }
+
+  /* Map the entire file.  We might need to compare the category data
+     in the file with the newly added data.  */
+  ah->addr = mmap64 (p, st.st_size, PROT_READ | (readonly ? 0 : PROT_WRITE),
+		     MAP_SHARED | xflags, fd, 0);
   if (ah->addr == MAP_FAILED)
     {
       (void) lockf64 (fd, F_ULOCK, sizeof (struct locarhead));
       error (EXIT_FAILURE, errno, _("cannot map archive header"));
     }
+  ah->reserved = reserved;
 }
 
 
@@ -535,7 +642,7 @@
 {
   if (ah->fd != -1)
     {
-      munmap (ah->addr, ah->len);
+      munmap (ah->addr, ah->reserved);
       close (ah->fd);
     }
 }
@@ -761,10 +868,41 @@
 	  {
 	    if (memcmp (data[cnt].sum, sumhashtab[idx].sum, 16) == 0)
 	      {
-		/* Found it.  */
-		file_offsets[cnt] = sumhashtab[idx].file_offset;
-		--num_new_offsets;
-		break;
+		/* Check the content, there could be a collision of
+		   the hash sum.
+
+		   Unfortunately the sumhashent record does not include
+		   the size of the stored data.  So we have to search for
+		   it.  */
+		locrecent = (struct locrecent *) ((char *) ah->addr
+						  + head->locrectab_offset);
+		size_t iloc;
+		for (iloc = 0; iloc < head->locrectab_used; ++iloc)
+		  if (locrecent[iloc].refs != 0
+		      && (locrecent[iloc].record[cnt].offset
+			  == sumhashtab[idx].file_offset))
+		    break;
+
+		if (iloc != head->locrectab_used
+		    && data[cnt].size == locrecent[iloc].record[cnt].len
+		    /* We have to compare the content.  Either we can
+		       have the data mmaped or we have to read from
+		       the file.  */
+		    && (file_data_available_p (ah, sumhashtab[idx].file_offset,
+					       data[cnt].size)
+			? memcmp (data[cnt].addr,
+				  (char *) ah->addr
+				  + sumhashtab[idx].file_offset,
+				  data[cnt].size) == 0
+			: compare_from_file (ah, data[cnt].addr,
+					     sumhashtab[idx].file_offset,
+					     data[cnt].size) == 0))
+		  {
+		    /* Found it.  */
+		    file_offsets[cnt] = sumhashtab[idx].file_offset;
+		    --num_new_offsets;
+		    break;
+		  }
 	      }
 
 	    idx += incr;

Modified: trunk/libc/localedata/ChangeLog
==============================================================================
--- trunk/libc/localedata/ChangeLog (original)
+++ trunk/libc/localedata/ChangeLog Thu Apr 30 14:37:18 2009
@@ -1,3 +1,52 @@
+2009-03-08  Samuel Thibault  <samuel.thibault@xxxxxxxxxxxx>
+
+	* locales/cs.CZ: Change week[2] to 19971130, change first_weekday and
+	first_workday to 2.
+	* locales/da_DK: Likewise.
+	* locales/de_DE: Likewise.
+	* locales/fr_FR: Likewise.
+	* locales/fur_IT: Likewise.
+	* locales/fy_DE: Likewise.
+	* locales/ht_HT: Likewise.
+	* locales/hu_HU: Likewise.
+	* locales/li_BE: Likewise.
+	* locales/li_NL: Likewise.
+	* locales/mk_MK: Likewise.
+	* locales/nb_NO: Likewise.
+	* locales/nds_DE: Likewise.
+	* locales/nds_NL: Likewise.
+	* locales/nn_NO: Likewise.
+	* locales/pl_PL: Likewise.
+	* locales/sc_IT: Likewise.
+	* locales/sk_SK: Likewise.
+	* locales/uk_UA: Likewise.
+
+	* locales/csb_PL: Change week[2] to 19971130.
+	* locales/en_GB: Likewise.
+	* locales/et_EE: Likewise.
+
+	* locales/sr_ME: Set week to 7;19971130;4.
+	* locales/sr_RS: Likewise.
+	* locales/sr_RS@latin: Likewise.
+
+2009-04-22  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	[BZ #9963]
+	* locales/en_PH: Fix LC_PAPER.
+	* locales/es_CL: Likewise.
+	* locales/es_CO: Likewise.
+	* locales/es_MX: Likewise.
+	* locales/es_US: Likewise.
+	* locales/es_VE: Likewise.
+	* locales/fil_PH: Likewise.
+	* locales/ik_CA: Likewise.
+	* locales/iu_CA: Likewise.
+	* locales/tl_PH: Likewise.
+
+2009-04-18  Ulrich Drepper  <drepper@xxxxxxxxxx>
+
+	* SUPPORTED: Add ks_IN.
+
 2009-04-07  Ulrich Drepper  <drepper@xxxxxxxxxx>
 
 	* locales/ks_IN@devanagari: Replace duplicated information with copy.

Modified: trunk/libc/localedata/SUPPORTED
==============================================================================
--- trunk/libc/localedata/SUPPORTED (original)
+++ trunk/libc/localedata/SUPPORTED Thu Apr 30 14:37:18 2009
@@ -258,6 +258,7 @@
 kn_IN/UTF-8 \
 ko_KR.EUC-KR/EUC-KR \
 ko_KR.UTF-8/UTF-8 \
+ks_IN/UTF-8 \
 ks_IN@devanagari/UTF-8 \
 ku_TR.UTF-8/UTF-8 \
 ku_TR/ISO-8859-9 \

Modified: trunk/libc/localedata/locales/cs_CZ
==============================================================================
--- trunk/libc/localedata/locales/cs_CZ (original)
+++ trunk/libc/localedata/locales/cs_CZ Thu Apr 30 14:37:18 2009
@@ -2438,9 +2438,9 @@
 %		"<U004E><U006F><U0076>";/
 %		"<U0044><U0065><U0063>"
 
-week		7;19971201;4
-first_weekday	1
-first_workday	1
+week		7;19971130;4
+first_weekday	2
+first_workday	2
 
 d_t_fmt		"<U0025><U0061><U00A0><U0025><U002D><U0064><U002E><U00A0><U0025><U0042><U00A0><U0025><U0059><U002C><U00A0><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U00A0><U0025><U005A>"
 

Modified: trunk/libc/localedata/locales/csb_PL
==============================================================================
--- trunk/libc/localedata/locales/csb_PL (original)
+++ trunk/libc/localedata/locales/csb_PL Thu Apr 30 14:37:18 2009
@@ -184,7 +184,7 @@
 date_fmt       "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
-week    7;19971201;4
+week    7;19971130;4
 first_weekday 2
 first_workday 2
 END LC_TIME

Modified: trunk/libc/localedata/locales/da_DK
==============================================================================
--- trunk/libc/localedata/locales/da_DK (original)
+++ trunk/libc/localedata/locales/da_DK Thu Apr 30 14:37:18 2009
@@ -209,9 +209,9 @@
 date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
-week    7;19971201;4
-first_weekday 1
-first_workday 1
+week    7;19971130;4
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 LC_MESSAGES

Modified: trunk/libc/localedata/locales/de_DE
==============================================================================
--- trunk/libc/localedata/locales/de_DE (original)
+++ trunk/libc/localedata/locales/de_DE Thu Apr 30 14:37:18 2009
@@ -155,9 +155,9 @@
 <U0025><U0062><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
 <U0020><U0025><U005A><U0020><U0025><U0059>"
 
-week    7;19971201;4
-first_weekday 1
-first_workday 1
+week    7;19971130;4
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 LC_MESSAGES

Modified: trunk/libc/localedata/locales/en_GB
==============================================================================
--- trunk/libc/localedata/locales/en_GB (original)
+++ trunk/libc/localedata/locales/en_GB Thu Apr 30 14:37:18 2009
@@ -121,7 +121,7 @@
 date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
-week    7;19971201;4
+week    7;19971130;4
 first_weekday 2
 first_workday 2
 END LC_TIME

Modified: trunk/libc/localedata/locales/en_PH
==============================================================================
--- trunk/libc/localedata/locales/en_PH (original)
+++ trunk/libc/localedata/locales/en_PH Thu Apr 30 14:37:18 2009
@@ -166,11 +166,7 @@
 
 
 LC_PAPER
-% This is the ISO_IEC TR14652 Locale definition for the LC_PAPER category
-% generated by IBM Basic CountryPack Transformer.
-height      297
-width       210
-
+copy "tl_PH"
 END LC_PAPER
 
 

Modified: trunk/libc/localedata/locales/es_CL
==============================================================================
--- trunk/libc/localedata/locales/es_CL (original)
+++ trunk/libc/localedata/locales/es_CL Thu Apr 30 14:37:18 2009
@@ -125,10 +125,8 @@
 END LC_TIME
 
 LC_PAPER
-% FIXME
-height   297
-% FIXME
-width    210
+height   279
+width    216
 END LC_PAPER
 
 LC_TELEPHONE

Modified: trunk/libc/localedata/locales/es_CO
==============================================================================
--- trunk/libc/localedata/locales/es_CO (original)
+++ trunk/libc/localedata/locales/es_CO Thu Apr 30 14:37:18 2009
@@ -125,10 +125,8 @@
 END LC_TIME
 
 LC_PAPER
-% FIXME
-height   297
-% FIXME
-width    210
+height   279
+width    216
 END LC_PAPER
 
 LC_TELEPHONE

Modified: trunk/libc/localedata/locales/es_MX
==============================================================================
--- trunk/libc/localedata/locales/es_MX (original)
+++ trunk/libc/localedata/locales/es_MX Thu Apr 30 14:37:18 2009
@@ -125,10 +125,8 @@
 END LC_TIME
 
 LC_PAPER
-% FIXME
-height   297
-% FIXME
-width    210
+height   279
+width    216
 END LC_PAPER
 
 LC_TELEPHONE

Modified: trunk/libc/localedata/locales/es_US
==============================================================================
--- trunk/libc/localedata/locales/es_US (original)
+++ trunk/libc/localedata/locales/es_US Thu Apr 30 14:37:18 2009
@@ -177,8 +177,7 @@
 END LC_TIME
 
 LC_PAPER
-height   279
-width    216
+copy "en_US"
 END LC_PAPER
 
 LC_TELEPHONE

Modified: trunk/libc/localedata/locales/es_VE
==============================================================================
--- trunk/libc/localedata/locales/es_VE (original)
+++ trunk/libc/localedata/locales/es_VE Thu Apr 30 14:37:18 2009
@@ -126,10 +126,8 @@
 END LC_TIME
 
 LC_PAPER
-% FIXME
-height   297
-% FIXME
-width    210
+height   279
+width    216
 END LC_PAPER
 
 LC_TELEPHONE

Modified: trunk/libc/localedata/locales/et_EE
==============================================================================
--- trunk/libc/localedata/locales/et_EE (original)
+++ trunk/libc/localedata/locales/et_EE Thu Apr 30 14:37:18 2009
@@ -2196,7 +2196,7 @@
 date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
-week    7;19971201;4
+week    7;19971130;4
 first_weekday 1
 first_workday 1
 END LC_TIME

Modified: trunk/libc/localedata/locales/fil_PH
==============================================================================
--- trunk/libc/localedata/locales/fil_PH (original)
+++ trunk/libc/localedata/locales/fil_PH Thu Apr 30 14:37:18 2009
@@ -150,8 +150,7 @@
 END LC_MESSAGES
 
 LC_PAPER
-height      297
-width       210
+copy "tl_PH"
 END LC_PAPER
 
 LC_MEASUREMENT

Modified: trunk/libc/localedata/locales/fr_FR
==============================================================================
--- trunk/libc/localedata/locales/fr_FR (original)
+++ trunk/libc/localedata/locales/fr_FR Thu Apr 30 14:37:18 2009
@@ -141,9 +141,9 @@
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
 
-week    7;19971201;4
-first_weekday 1
-first_workday 1
+week    7;19971130;4
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 LC_PAPER

Modified: trunk/libc/localedata/locales/fur_IT
==============================================================================
--- trunk/libc/localedata/locales/fur_IT (original)
+++ trunk/libc/localedata/locales/fur_IT Thu Apr 30 14:37:18 2009
@@ -110,9 +110,9 @@
 date_fmt       "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
-week			7;19971201;4
-first_weekday		1
-first_workday		1
+week			7;19971130;4
+first_weekday		2
+first_workday		2
 END LC_TIME
 
 LC_PAPER

Modified: trunk/libc/localedata/locales/fy_DE
==============================================================================
--- trunk/libc/localedata/locales/fy_DE (original)
+++ trunk/libc/localedata/locales/fy_DE Thu Apr 30 14:37:18 2009
@@ -127,7 +127,7 @@
 t_fmt   "<U0025><U0054>"
 am_pm   "";""
 t_fmt_ampm ""
-week	7;19971201;4
-first_weekday	1
-first_workday	1
+week	7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME

Modified: trunk/libc/localedata/locales/ht_HT
==============================================================================
--- trunk/libc/localedata/locales/ht_HT (original)
+++ trunk/libc/localedata/locales/ht_HT Thu Apr 30 14:37:18 2009
@@ -139,9 +139,9 @@
 <U0020><U0025><U0068><U003A><U0025><U006D><U003A><U0025><U0073><U0020>/
 <U0025><U005A><U0020><U0025><U0079>"
 
-week    7;19971201;4
-first_weekday 1
-first_workday 1
+week    7;19971130;4
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 LC_PAPER

Modified: trunk/libc/localedata/locales/hu_HU
==============================================================================
--- trunk/libc/localedata/locales/hu_HU (original)
+++ trunk/libc/localedata/locales/hu_HU Thu Apr 30 14:37:18 2009
@@ -520,9 +520,9 @@
 t_fmt_ampm "<U0025><U0048><U002E><U0025><U004D><U002E><U0025><U0053>"
 date_fmt "<U0025><U0059><U002E><U0020><U0025><U0062><U002E><U0020><U0025><U0065><U002E><U002C>/
 <U0020><U0025><U0041><U002C><U0020><U0025><U0048><U002E><U0025><U004D><U002E><U0025><U0053><U0020><U0025><U005A>"
-week     7;19971201;4
-first_weekday	1
-first_workday	1
+week     7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME
 
 LC_PAPER

Modified: trunk/libc/localedata/locales/ik_CA
==============================================================================
--- trunk/libc/localedata/locales/ik_CA (original)
+++ trunk/libc/localedata/locales/ik_CA Thu Apr 30 14:37:18 2009
@@ -207,10 +207,8 @@
 noexpr      "<U005B><U006E><U004E><U0071><U0051><U005D><U002E><U002A>"
 END LC_MESSAGES
 
-% Default paper: A4
 LC_PAPER
-height 297
-width 210
+copy "en_CA"
 END LC_PAPER
 
 % Metric System (ISO 1000)

Modified: trunk/libc/localedata/locales/iu_CA
==============================================================================
--- trunk/libc/localedata/locales/iu_CA (original)
+++ trunk/libc/localedata/locales/iu_CA Thu Apr 30 14:37:18 2009
@@ -119,10 +119,8 @@
 noexpr      "<U005B><U006E><U004E><U005D><U002E><U002A>"
 END LC_MESSAGES
 
-% Default paper: A4
 LC_PAPER
-height 297
-width 210
+copy "en_CA"
 END LC_PAPER
 
 % FIXME

Modified: trunk/libc/localedata/locales/li_BE
==============================================================================
--- trunk/libc/localedata/locales/li_BE (original)
+++ trunk/libc/localedata/locales/li_BE Thu Apr 30 14:37:18 2009
@@ -126,7 +126,7 @@
 t_fmt   "<U0025><U0054>"
 am_pm   "";""
 t_fmt_ampm ""
-week	7;19971201;4
-first_weekday	1
-first_workday	1
+week	7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME

Modified: trunk/libc/localedata/locales/li_NL
==============================================================================
--- trunk/libc/localedata/locales/li_NL (original)
+++ trunk/libc/localedata/locales/li_NL Thu Apr 30 14:37:18 2009
@@ -127,7 +127,7 @@
 t_fmt   "<U0025><U0054>"
 am_pm   "";""
 t_fmt_ampm ""
-week	7;19971201;4
-first_weekday	1
-first_workday	1
+week	7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME

Modified: trunk/libc/localedata/locales/mk_MK
==============================================================================
--- trunk/libc/localedata/locales/mk_MK (original)
+++ trunk/libc/localedata/locales/mk_MK Thu Apr 30 14:37:18 2009
@@ -85,9 +85,9 @@
 date_fmt "<U0025><U0061><U002C><U0020><U0025><U0064><U0020><U0025><U0062>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
-week    7;19971201;4
-first_weekday 1 % Monday
-first_workday 1 % Monday
+week    7;19971130;4
+first_weekday 2 % Monday
+first_workday 2 % Monday
 END LC_TIME
 
 LC_MONETARY

Modified: trunk/libc/localedata/locales/nb_NO
==============================================================================
--- trunk/libc/localedata/locales/nb_NO (original)
+++ trunk/libc/localedata/locales/nb_NO Thu Apr 30 14:37:18 2009
@@ -201,9 +201,9 @@
 <U0062><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
 <U0020><U0025><U007A><U0020><U0025><U0059>"
 
-week    7;19971201;4
-first_weekday 1
-first_workday 1
+week    7;19971130;4
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 LC_MESSAGES

Modified: trunk/libc/localedata/locales/nds_DE
==============================================================================
--- trunk/libc/localedata/locales/nds_DE (original)
+++ trunk/libc/localedata/locales/nds_DE Thu Apr 30 14:37:18 2009
@@ -125,7 +125,7 @@
 t_fmt   "<U0025><U0054>"
 am_pm   "";""
 t_fmt_ampm ""
-week	7;19971201;4
-first_weekday	1
-first_workday	1
+week	7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME

Modified: trunk/libc/localedata/locales/nds_NL
==============================================================================
--- trunk/libc/localedata/locales/nds_NL (original)
+++ trunk/libc/localedata/locales/nds_NL Thu Apr 30 14:37:18 2009
@@ -124,7 +124,7 @@
 t_fmt   "<U0025><U0054>"
 am_pm   "";""
 t_fmt_ampm ""
-week	7;19971201;4
-first_weekday	1
-first_workday	1
+week	7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME

Modified: trunk/libc/localedata/locales/nn_NO
==============================================================================
--- trunk/libc/localedata/locales/nn_NO (original)
+++ trunk/libc/localedata/locales/nn_NO Thu Apr 30 14:37:18 2009
@@ -128,9 +128,9 @@
 <U0062><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>/
 <U0020><U0025><U007A><U0020><U0025><U0059>"
 
-week    7;19971201;4
-first_weekday 1
-first_workday 1
+week    7;19971130;4
+first_weekday 2
+first_workday 2
 END LC_TIME
 
 

Modified: trunk/libc/localedata/locales/pl_PL
==============================================================================
--- trunk/libc/localedata/locales/pl_PL (original)
+++ trunk/libc/localedata/locales/pl_PL Thu Apr 30 14:37:18 2009
@@ -2196,9 +2196,9 @@
 date_fmt "<U0025><U0061><U002C><U0020>/
 <U0025><U002D><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U002C><U0020>/
 <U0025><U0054><U0020><U0025><U005A>"
-week	7;19971201;4
-first_weekday	1
-first_workday	1
+week	7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME
 
 LC_PAPER

Modified: trunk/libc/localedata/locales/sc_IT
==============================================================================
--- trunk/libc/localedata/locales/sc_IT (original)
+++ trunk/libc/localedata/locales/sc_IT Thu Apr 30 14:37:18 2009
@@ -110,9 +110,9 @@
 date_fmt       "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
-week	7;19971201;4
-first_weekday	1
-first_workday	1
+week	7;19971130;4
+first_weekday	2
+first_workday	2
 END LC_TIME
 
 LC_PAPER

Modified: trunk/libc/localedata/locales/sk_SK
==============================================================================
--- trunk/libc/localedata/locales/sk_SK (original)
+++ trunk/libc/localedata/locales/sk_SK Thu Apr 30 14:37:18 2009
@@ -183,9 +183,9 @@
 <U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
 <U0025><U005A><U0020><U0025><U0059>"
 
-week		7;19971201;4
-first_weekday	1
-first_workday	1
+week		7;19971130;4
+first_weekday	2
+first_workday	2
 
 END LC_TIME
 

Modified: trunk/libc/localedata/locales/sr_ME
==============================================================================
--- trunk/libc/localedata/locales/sr_ME (original)
+++ trunk/libc/localedata/locales/sr_ME Thu Apr 30 14:37:18 2009
@@ -120,7 +120,7 @@
 date_fmt  "<U0025><U0061><U002c><U0020><U0025><U0065><U002E><U0020>/
 <U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
 <U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
-% week    7;19971201;4
+week    7;19971130;4
 first_weekday 2
 first_workday 2
 END LC_TIME

Modified: trunk/libc/localedata/locales/sr_RS
==============================================================================
--- trunk/libc/localedata/locales/sr_RS (original)
+++ trunk/libc/localedata/locales/sr_RS Thu Apr 30 14:37:18 2009
@@ -301,7 +301,7 @@
 date_fmt  "<U0025><U0061><U002C><U0020><U0025><U0065><U002E><U0020>/
 <U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
 <U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
-% week    7;19971201;4
+week    7;19971130;4
 first_weekday 2
 first_workday 2
 END LC_TIME

Modified: trunk/libc/localedata/locales/sr_RS@latin
==============================================================================
--- trunk/libc/localedata/locales/sr_RS@latin (original)
+++ trunk/libc/localedata/locales/sr_RS@latin Thu Apr 30 14:37:18 2009
@@ -121,7 +121,7 @@
 date_fmt  "<U0025><U0061><U002c><U0020><U0025><U0065><U002E><U0020>/
 <U0025><U0062><U0020><U0025><U0059><U002E><U0020><U0020><U0025><U0048>/
 <U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U000A>"
-% week    7;19971201;4
+week    7;19971130;4
 first_weekday 2
 first_workday 2
 END LC_TIME

Modified: trunk/libc/localedata/locales/tl_PH
==============================================================================
--- trunk/libc/localedata/locales/tl_PH (original)
+++ trunk/libc/localedata/locales/tl_PH Thu Apr 30 14:37:18 2009
@@ -144,8 +144,8 @@
 END LC_MESSAGES
 
 LC_PAPER
-height      297
-width       210
+height   279
+width    216
 END LC_PAPER
 
 LC_MEASUREMENT

Modified: trunk/libc/localedata/locales/uk_UA
==============================================================================
--- trunk/libc/localedata/locales/uk_UA (original)
+++ trunk/libc/localedata/locales/uk_UA Thu Apr 30 14:37:18 2009
@@ -901,7 +901,9 @@
 %
 % ISO 8601 conforming applications should use the values 7, 19971201 (a
 % Monday), and 4 (Thursday), respectively.
-week 7;19971201;4
+% week 7;19971201;4
+% But see BUG below.
+week 7;19971130;4
 
 % A list of abbreviated weekday names. (%a)
 %
@@ -1015,10 +1017,10 @@
 
 % Define the first day of the week to be displayed in a calendar.
 % This weekday is relative to the date defined in the <week> keyword.
-first_weekday 1
+first_weekday 2
 
 % Define the first workday relative to the <week> keyword
-first_workday 1
+first_workday 2
 
 % Zymovyj CHas (winter time) or z.ch. (or nothing)
 % Litnij CHas (summer time) or l.ch.

Modified: trunk/libc/malloc/arena.c
==============================================================================
--- trunk/libc/malloc/arena.c (original)
+++ trunk/libc/malloc/arena.c Thu Apr 30 14:37:18 2009
@@ -624,8 +624,9 @@
     if (check_action != 0)
       __malloc_check_init();
   }
-  if(__malloc_initialize_hook != NULL)
-    (*__malloc_initialize_hook)();
+  void (*hook) (void) = force_reg (__malloc_initialize_hook);
+  if (hook != NULL)
+    (*hook)();
   __malloc_initialized = 1;
 }
 

Modified: trunk/libc/malloc/hooks.c
==============================================================================
--- trunk/libc/malloc/hooks.c (original)
+++ trunk/libc/malloc/hooks.c Thu Apr 30 14:37:18 2009
@@ -235,8 +235,9 @@
       return -1;
     }
   /* Call the `morecore' hook if necessary.  */
-  if (__after_morecore_hook)
-    (*__after_morecore_hook) ();
+  void (*hook) (void) = force_reg (__after_morecore_hook);
+  if (hook)
+    (*hook) ();
   main_arena.system_mem = (new_brk - mp_.sbrk_base) + sbrk_size;
 
   top(&main_arena) = (mchunkptr)(brk + front_misalign);
@@ -669,10 +670,10 @@
         !disallow_malloc_check)
       __malloc_check_init ();
     else if (!ms->using_malloc_checking && using_malloc_checking) {
-      __malloc_hook = 0;
-      __free_hook = 0;
-      __realloc_hook = 0;
-      __memalign_hook = 0;
+      __malloc_hook = NULL;
+      __free_hook = NULL;
+      __realloc_hook = NULL;
+      __memalign_hook = NULL;
       using_malloc_checking = 0;
     }
   }

Modified: trunk/libc/malloc/malloc.c
==============================================================================
--- trunk/libc/malloc/malloc.c (original)
+++ trunk/libc/malloc/malloc.c Thu Apr 30 14:37:18 2009
@@ -22,6 +22,10 @@
 /*
   This is a version (aka ptmalloc2) of malloc/free/realloc written by
   Doug Lea and adapted to multiple threads/arenas by Wolfram Gloger.
+
+  There have been substantial changesmade after the integration into
+  glibc in all parts of the code.  Do not look for much commonality
+  with the ptmalloc2 version.
 
 * Version ptmalloc2-20011215
   based on:
@@ -563,6 +567,13 @@
 #endif
 #endif
 #endif
+
+
+/* Force a value to be in a register and stop the compiler referring
+   to the source (mostly memory location) again.  */
+#define force_reg(val) \
+  ({ __typeof (val) _v; asm ("" : "=r" (_v) : "0" (val)); _v; })
+
 
 /*
   MALLOC_FAILURE_ACTION is the action to take before "return 0" when
@@ -3165,8 +3176,9 @@
 
   if (brk != (char*)(MORECORE_FAILURE)) {
     /* Call the `morecore' hook if necessary.  */
-    if (__builtin_expect (__after_morecore_hook != NULL, 0))
-      (*__after_morecore_hook) ();
+    void (*hook) (void) = force_reg (__after_morecore_hook);
+    if (__builtin_expect (hook != NULL, 0))
+      (*hook) ();
   } else {
   /*
     If have mmap, try using it as a backup when MORECORE fails or
@@ -3302,10 +3314,12 @@
         if (snd_brk == (char*)(MORECORE_FAILURE)) {
           correction = 0;
           snd_brk = (char*)(MORECORE(0));
-        } else
+        } else {
 	  /* Call the `morecore' hook if necessary.  */
-	  if (__builtin_expect (__after_morecore_hook != NULL, 0))
-	    (*__after_morecore_hook) ();
+	  void (*hook) (void) = force_reg (__after_morecore_hook);
+	  if (__builtin_expect (hook != NULL, 0))
+	    (*hook) ();
+	}
       }
 
       /* handle non-contiguous cases */
@@ -3453,8 +3467,9 @@
 
       MORECORE(-extra);
       /* Call the `morecore' hook if necessary.  */
-      if (__builtin_expect (__after_morecore_hook != NULL, 0))
-	(*__after_morecore_hook) ();
+      void (*hook) (void) = force_reg (__after_morecore_hook);
+      if (__builtin_expect (hook != NULL, 0))
+	(*hook) ();
       new_brk = (char*)(MORECORE(0));
 
       if (new_brk != (char*)MORECORE_FAILURE) {
@@ -3579,7 +3594,8 @@
   mstate ar_ptr;
   Void_t *victim;
 
-  __malloc_ptr_t (*hook) (size_t, __const __malloc_ptr_t) = __malloc_hook;
+  __malloc_ptr_t (*hook) (size_t, __const __malloc_ptr_t)
+    = force_reg (__malloc_hook);
   if (__builtin_expect (hook != NULL, 0))
     return (*hook)(bytes, RETURN_ADDRESS (0));
 
@@ -3655,7 +3671,8 @@
   mstate ar_ptr;
   mchunkptr p;                          /* chunk corresponding to mem */
 
-  void (*hook) (__malloc_ptr_t, __const __malloc_ptr_t) = __free_hook;
+  void (*hook) (__malloc_ptr_t, __const __malloc_ptr_t)
+    = force_reg (__free_hook);
   if (__builtin_expect (hook != NULL, 0)) {
     (*hook)(mem, RETURN_ADDRESS (0));
     return;
@@ -3713,7 +3730,7 @@
   Void_t* newp;             /* chunk to return */
 
   __malloc_ptr_t (*hook) (__malloc_ptr_t, size_t, __const __malloc_ptr_t) =
-    __realloc_hook;
+    force_reg (__realloc_hook);
   if (__builtin_expect (hook != NULL, 0))
     return (*hook)(oldmem, bytes, RETURN_ADDRESS (0));
 
@@ -3825,7 +3842,7 @@
 
   __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
 					__const __malloc_ptr_t)) =
-    __memalign_hook;
+    force_reg (__memalign_hook);
   if (__builtin_expect (hook != NULL, 0))
     return (*hook)(alignment, bytes, RETURN_ADDRESS (0));
 
@@ -3882,7 +3899,7 @@
 
   __malloc_ptr_t (*hook) __MALLOC_PMT ((size_t, size_t,
 					__const __malloc_ptr_t)) =
-    __memalign_hook;
+    force_reg (__memalign_hook);
   if (__builtin_expect (hook != NULL, 0))
     return (*hook)(pagesz, bytes, RETURN_ADDRESS (0));
 
@@ -3929,7 +3946,7 @@
 

[... 6616 lines stripped ...]