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

[Commits] r16333 - in /trunk: ./ libc/ libc/iconv/ libc/iconvdata/ libc/inet/ libc/inet/netinet/ libc/libidn/ libc/locale/ libc/locale...



Author: joseph
Date: Thu Dec 22 19:27:39 2011
New Revision: 16333

Log:
Merge changes between r16068 and r16332 from /fsf/trunk.

Added:
    trunk/libc/inet/tst-checks.c
      - copied unchanged from r16332, fsf/trunk/libc/inet/tst-checks.c
    trunk/libc/localedata/locales/bho_IN
      - copied unchanged from r16332, fsf/trunk/libc/localedata/locales/bho_IN
    trunk/libc/localedata/locales/brx_IN
      - copied unchanged from r16332, fsf/trunk/libc/localedata/locales/brx_IN
    trunk/libc/localedata/locales/es_CU
      - copied unchanged from r16332, fsf/trunk/libc/localedata/locales/es_CU
    trunk/libc/localedata/locales/unm_US
      - copied unchanged from r16332, fsf/trunk/libc/localedata/locales/unm_US
    trunk/libc/sysdeps/i386/i686/multiarch/wcschr-c.c
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcschr-c.c
    trunk/libc/sysdeps/i386/i686/multiarch/wcschr-sse2.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcschr-sse2.S
    trunk/libc/sysdeps/i386/i686/multiarch/wcschr.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcschr.S
    trunk/libc/sysdeps/i386/i686/multiarch/wcscpy-c.c
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcscpy-c.c
    trunk/libc/sysdeps/i386/i686/multiarch/wcscpy-ssse3.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcscpy-ssse3.S
    trunk/libc/sysdeps/i386/i686/multiarch/wcscpy.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcscpy.S
    trunk/libc/sysdeps/i386/i686/multiarch/wcsrchr-c.c
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcsrchr-c.c
    trunk/libc/sysdeps/i386/i686/multiarch/wcsrchr-sse2.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcsrchr-sse2.S
    trunk/libc/sysdeps/i386/i686/multiarch/wcsrchr.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/i386/i686/multiarch/wcsrchr.S
    trunk/libc/sysdeps/powerpc/locale-defines.sym
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/locale-defines.sym
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/Makefile
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/Makefile
    trunk/libc/sysdeps/powerpc/powerpc32/power7/strcasecmp.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/strcasecmp.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S
    trunk/libc/sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S
    trunk/libc/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/strcasecmp.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/strcasecmp.S
    trunk/libc/sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S
    trunk/libc/sysdeps/x86_64/multiarch/wcscpy-c.c
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/x86_64/multiarch/wcscpy-c.c
    trunk/libc/sysdeps/x86_64/multiarch/wcscpy-ssse3.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/x86_64/multiarch/wcscpy-ssse3.S
    trunk/libc/sysdeps/x86_64/multiarch/wcscpy.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/x86_64/multiarch/wcscpy.S
    trunk/libc/sysdeps/x86_64/wcschr.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/x86_64/wcschr.S
    trunk/libc/sysdeps/x86_64/wcsrchr.S
      - copied unchanged from r16332, fsf/trunk/libc/sysdeps/x86_64/wcsrchr.S
    trunk/libc/wcsmbs/test-wcscpy.c
      - copied unchanged from r16332, fsf/trunk/libc/wcsmbs/test-wcscpy.c
    trunk/libc/wcsmbs/test-wcsrchr.c
      - copied unchanged from r16332, fsf/trunk/libc/wcsmbs/test-wcsrchr.c
    trunk/ports/ChangeLog.linux-generic
      - copied unchanged from r16332, fsf/trunk/ports/ChangeLog.linux-generic
    trunk/ports/ChangeLog.tile
      - copied unchanged from r16332, fsf/trunk/ports/ChangeLog.tile
    trunk/ports/data/c++-types-tile-linux-gnu.data
      - copied unchanged from r16332, fsf/trunk/ports/data/c++-types-tile-linux-gnu.data
    trunk/ports/sysdeps/arm/eabi/armv6t2/
      - copied from r16332, fsf/trunk/ports/sysdeps/arm/eabi/armv6t2/
    trunk/ports/sysdeps/arm/eabi/armv7/
      - copied from r16332, fsf/trunk/ports/sysdeps/arm/eabi/armv7/
    trunk/ports/sysdeps/tile/
      - copied from r16332, fsf/trunk/ports/sysdeps/tile/
    trunk/ports/sysdeps/unix/sysv/linux/generic/
      - copied from r16332, fsf/trunk/ports/sysdeps/unix/sysv/linux/generic/
    trunk/ports/sysdeps/unix/sysv/linux/tile/
      - copied from r16332, fsf/trunk/ports/sysdeps/unix/sysv/linux/tile/
Removed:
    trunk/libc/sysdeps/x86_64/fpu/s_scalbln.c
    trunk/libc/sysdeps/x86_64/fpu/s_scalbn.c
    trunk/ports/sysdeps/unix/sysv/linux/mips/sys/syscall.h
Modified:
    trunk/   (props changed)
    trunk/libc/ChangeLog
    trunk/libc/NEWS
    trunk/libc/iconv/gconv.h
    trunk/libc/iconvdata/unicode.c
    trunk/libc/iconvdata/utf-16.c
    trunk/libc/iconvdata/utf-32.c
    trunk/libc/inet/Makefile
    trunk/libc/inet/netinet/in.h
    trunk/libc/libidn/ChangeLog
    trunk/libc/libidn/idna.c
    trunk/libc/locale/iso-639.def
    trunk/libc/localedata/ChangeLog
    trunk/libc/localedata/SUPPORTED
    trunk/libc/localedata/locales/nl_BE
    trunk/libc/malloc/mcheck.h
    trunk/libc/malloc/mtrace.c
    trunk/libc/manual/resource.texi
    trunk/libc/math/bits/math-finite.h
    trunk/libc/math/libm-test.inc
    trunk/libc/math/s_cacosh.c
    trunk/libc/math/s_cacoshf.c
    trunk/libc/math/s_cacoshl.c
    trunk/libc/nis/nis_findserv.c
    trunk/libc/nptl/ChangeLog
    trunk/libc/nptl/allocatestack.c
    trunk/libc/nptl/pthread_create.c
    trunk/libc/nptl/sysdeps/unix/sysv/linux/pthread_getname.c
    trunk/libc/nscd/aicache.c
    trunk/libc/resolv/res_init.c
    trunk/libc/stdio-common/vfprintf.c
    trunk/libc/stdlib/strtod_l.c
    trunk/libc/string/test-strcmp.c
    trunk/libc/string/test-strcpy.c
    trunk/libc/string/test-strrchr.c
    trunk/libc/sunrpc/clnt_tcp.c
    trunk/libc/sunrpc/clnt_udp.c
    trunk/libc/sunrpc/clnt_unix.c
    trunk/libc/sysdeps/generic/dl-hash.h
    trunk/libc/sysdeps/i386/i686/multiarch/Makefile
    trunk/libc/sysdeps/powerpc/Makefile
    trunk/libc/sysdeps/powerpc/fpu/e_hypot.c
    trunk/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S
    trunk/libc/sysdeps/powerpc/powerpc32/dl-start.S
    trunk/libc/sysdeps/powerpc/powerpc32/elf/start.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceil.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_floor.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_floorf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_lround.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_rint.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_rintf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_round.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_roundf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_trunc.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_truncf.S
    trunk/libc/sysdeps/powerpc/powerpc32/fpu/setjmp-common.S
    trunk/libc/sysdeps/powerpc/powerpc32/memset.S
    trunk/libc/sysdeps/powerpc/powerpc32/power4/fpu/s_llround.S
    trunk/libc/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrt.S
    trunk/libc/sysdeps/powerpc/powerpc32/power4/fpu/w_sqrtf.S
    trunk/libc/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrt.S
    trunk/libc/sysdeps/powerpc/powerpc32/power5/fpu/w_sqrtf.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_finite.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isinf.S
    trunk/libc/sysdeps/powerpc/powerpc32/power7/fpu/s_isnan.S
    trunk/libc/sysdeps/powerpc/powerpc32/sysdep.h
    trunk/libc/sysdeps/powerpc/powerpc64/power7/Makefile
    trunk/libc/sysdeps/unix/sysv/linux/Makefile
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/Makefile
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/brk.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/getcontext-common.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S
    trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
    trunk/libc/sysdeps/unix/sysv/linux/s390/Makefile
    trunk/libc/sysdeps/unix/sysv/linux/sparc/Makefile
    trunk/libc/sysdeps/unix/sysv/linux/sparc/sys/epoll.h
    trunk/libc/sysdeps/unix/sysv/linux/sys/epoll.h
    trunk/libc/sysdeps/unix/sysv/linux/x86_64/Makefile
    trunk/libc/sysdeps/unix/sysv/linux/x86_64/sys/epoll.h
    trunk/libc/sysdeps/x86_64/fpu/bits/fenv.h
    trunk/libc/sysdeps/x86_64/multiarch/Makefile
    trunk/libc/sysdeps/x86_64/multiarch/wmemcmp-c.c
    trunk/libc/time/tzfile.c
    trunk/libc/wcsmbs/Makefile
    trunk/libc/wcsmbs/wcschr.c
    trunk/ports/ChangeLog.arm
    trunk/ports/ChangeLog.m68k
    trunk/ports/ChangeLog.mips
    trunk/ports/sysdeps/arm/preconfigure
    trunk/ports/sysdeps/unix/sysv/linux/arm/sys/ucontext.h
    trunk/ports/sysdeps/unix/sysv/linux/m68k/syscall.S
    trunk/ports/sysdeps/unix/sysv/linux/mips/Makefile
    trunk/ports/sysdeps/unix/sysv/linux/mips/configure
    trunk/ports/sysdeps/unix/sysv/linux/mips/configure.in
    trunk/ports/sysdeps/unix/sysv/linux/mips/sys/epoll.h

Propchange: trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Dec 22 19:27:39 2011
@@ -1,1 +1,1 @@
-/fsf/trunk:15224-16068
+/fsf/trunk:15224-16332

Modified: trunk/libc/ChangeLog
==============================================================================
--- trunk/libc/ChangeLog (original)
+++ trunk/libc/ChangeLog Thu Dec 22 19:27:39 2011
@@ -1,3 +1,238 @@
+2011-12-22  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/Makefile (syscall-list-variants)
+	(syscall-list-default-options, syscall-list-default-condition)
+	(syscall-list-includes): Define.
+	($(objpfx)syscall-%.h $(objpfx)syscall-%.d): Support arbitrary
+	list of ABIs and options and #if conditions for each ABI.  Do not
+	handle common syscalls between ABIs specially.
+	* sysdeps/unix/sysv/linux/powerpc/Makefile (64bit-predefine):
+	Remove.
+	(syscall-list-variants, syscall-list-32bit-options)
+	(syscall-list-32bit-condition, syscall-list-64bit-options)
+	(syscall-list-64bit-condition): Define.
+	* sysdeps/unix/sysv/linux/s390/Makefile (64bit-predefine): Remove.
+	(syscall-list-variants, syscall-list-32bit-options)
+	(syscall-list-32bit-condition, syscall-list-64bit-options)
+	(syscall-list-64bit-condition): Define.
+	* sysdeps/unix/sysv/linux/sparc/Makefile (64bit-predefine):
+	Remove.
+	(syscall-list-variants, syscall-list-32bit-options)
+	(syscall-list-32bit-condition, syscall-list-64bit-options)
+	(syscall-list-64bit-condition): Define.
+	* sysdeps/unix/sysv/linux/x86_64/Makefile (64bit-predefine):
+	Remove.
+	(syscall-list-variants, syscall-list-32bit-options)
+	(syscall-list-32bit-condition, syscall-list-64bit-options)
+	(syscall-list-64bit-condition): Define.
+
+2011-12-22  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	* locale/iso-639.def: Add brx entry.
+
+	[BZ #13328]
+	* malloc/mtrace.c (tr_freehook): Avoid unnecessary unlock/lock.
+	Proposed by Mariusz_Cukr <marcukr@xxxxx>.
+
+	* sysdeps/x86_64/fpu/bits/fenv.h: Use __REDIRECT_NTH for
+	__feraiseexcept_renamed.
+
+2011-12-21  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	[BZ #13538]
+	* sysdeps/unix/sysv/linux/sys/epoll.h: Initialize EPOLLONESHOT and
+	EPOLLET with unsigned values.
+	* sysdeps/unix/sysv/linux/x86_64/sys/epoll.h: Likewise.
+	* sysdeps/unix/sysv/linux/sparc/sys/epoll.h: Likewise.
+
+	* math/s_cacosh.c: Use Kahan's formula if the subtraction could lead
+	to large cancellation.
+	* math/s_cacoshf.c: Likewise.
+	* math/s_cacoshl.c: Likewise.
+
+2011-11-18  Richard B. Kreckel  <kreckel@xxxxxxxx>
+
+	[BZ #13305]
+	* math/s_cacosh.c: Fix rare miscomputation in cacosh().
+	* math/s_cacoshf.c: Likewise.
+	* math/s_cacoshl.c: Likewise.
+
+2011-12-21  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	[BZ #13439]
+	* iconv/gconv.h: Define __GCONV_SWAP.
+	* iconvdata/unicode.c: The swap bit must be stored in __flags.
+	* iconvdata/utf-16.c: Likewise.
+	* iconvdata/utf-32.c: Likewise.
+
+2011-12-21  Andreas Schwab  <schwab@xxxxxxxxxxxxxx>
+
+	[BZ #13524]
+	* stdlib/strtod_l.c (____STRTOF_INTERNAL): Clear lowest limb of
+	numerator after shifting it by one limb.
+
+2011-12-19  Rafael ÃÂvila de EspÃÂndola  <rafael.espindola@xxxxxxxxx>
+
+	* sysdeps/x86_64/fpu/bits/fenv.h (feraiseexcept): Define it only
+	under [__USE_EXTERN_INLINES].
+
+2011-12-17  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	[BZ #13446]
+	* stdio-common/vfprintf.c (vfprintf): Fix extension of specs array.
+
+2011-11-22  Adhemerval Zanella  <azanella@xxxxxxxxxxxxxxxxxx>
+
+	* sysdeps/powerpc/Makefile: Added locale-defines.sym generation.
+	* sysdeps/powerpc/locale-defines.sym: Locale definitions for strcasecmp
+	optimized code.
+	* sysdeps/powerpc/powerpc32/power7/Makefile: New file.
+	* sysdeps/powerpc/powerpc32/power7/strcasecmp.S: New file.
+	* sysdeps/powerpc/powerpc32/power7/strcasecmp_l.S: New file.
+	* sysdeps/powerpc/powerpc64/power7/Makefile: Added unroll-loop option
+	for strncasecmp/strncasecmp_l compilation.
+	* sysdeps/powerpc/powerpc64/power7/strcasecmp.S: New file.
+	* sysdeps/powerpc/powerpc64/power7/strcasecmp_l.S: New file.
+
+2011-12-08  Marek Polacek  <mpolacek@xxxxxxxxxx>
+
+	[BZ #13484]
+	* math/bits/math-finite.h: Use __REDIRECT_NTH and __NTH instead
+	of __asm__.
+
+2011-12-17  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	[BZ #13506]
+	* time/tzfile.c (__tzfile_read): Check values from file header.
+
+2011-11-21  Will Schmidt  <will_schmidt@xxxxxxxxxxxx>
+
+	* powerpc/powerpc32/sysdep.h: Define SETUP_GOT_ACCESS() macro.
+	* powerpc/powerpc32/a2/memcpy.S: Use SETUP_GOT_ACCESS() macro.
+	* powerpc/powerpc32/dl-start.S: Likewise.
+	* powerpc/powerpc32/elf/start.S: Likewise.
+	* powerpc/powerpc32/fpu/__longjmp-common.S: Likewise.
+	* powerpc/powerpc32/fpu/s_ceil.S: Likewise.
+	* powerpc/powerpc32/fpu/s_ceilf.S: Likewise.
+	* powerpc/powerpc32/fpu/s_floor.S: Likewise.
+	* powerpc/powerpc32/fpu/s_floorf.S: Likewise.
+	* powerpc/powerpc32/fpu/s_lround.S: Likewise.
+	* powerpc/powerpc32/fpu/s_rint.S: Likewise.
+	* powerpc/powerpc32/fpu/s_rintf.S: Likewise.
+	* powerpc/powerpc32/fpu/s_round.S: Likewise.
+	* powerpc/powerpc32/fpu/s_roundf.S: Likewise.
+	* powerpc/powerpc32/fpu/s_trunc.S: Likewise.
+	* powerpc/powerpc32/fpu/s_truncf.S: Likewise.
+	* powerpc/powerpc32/fpu/setjmp-common.S: Likewise.
+	* powerpc/powerpc32/memset.S: Likewise.
+	* powerpc/powerpc32/power4/fpu/s_llround.S: Likewise.
+	* powerpc/powerpc32/power4/fpu/w_sqrt.S: Likewise.
+	* powerpc/powerpc32/power4/fpu/w_sqrtf.S: Likewise.
+	* powerpc/powerpc32/power5/fpu/w_sqrt.S: Likewise.
+	* powerpc/powerpc32/power5/fpu/w_sqrtf.S: Likewise.
+	* powerpc/powerpc32/power7/fpu/s_finite.S: Likewise.
+	* powerpc/powerpc32/power7/fpu/s_isinf.S: Likewise.
+	* powerpc/powerpc32/power7/fpu/s_isnan.S: Likewise.
+	* unix/sysv/linux/powerpc/powerpc32/____longjmp_chk.S: Likewise.
+	* unix/sysv/linux/powerpc/powerpc32/brk.S: Likewise.
+	* unix/sysv/linux/powerpc/powerpc32/getcontext-common.S: Likewise.
+	* unix/sysv/linux/powerpc/powerpc32/setcontext-common.S: Likewise.
+	* unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S: Likewise.
+
+2011-11-18  Adhemerval Zanella  <azanella@xxxxxxxxxxxxxxxxxx>
+
+	* math/libm-test.inc: Added more nearbyint tests.
+	* sysdeps/powerpc/powerpc32/fpu/s_nearbyint.S: New file.
+	* sysdeps/powerpc/powerpc32/fpu/s_nearbyintf.S: New file.
+	* sysdeps/powerpc/powerpc64/fpu/s_nearbyint.S: New file.
+	* sysdeps/powerpc/powerpc64/fpu/s_nearbyintf.S: New file.
+
+2011-11-21  Ross Lagerwall  <rosslagerwall@xxxxxxxxx>
+
+	* resolv/res_init.c (__res_vinit): Open /etc/resolv.conf with
+	FD_CLOEXEC.
+
+2011-11-14  Liubov Dmitrieva  <liubov.dmitrieva@xxxxxxxxx>
+
+	* sysdeps/x86_64/multiarch/Makefile [subdir=wcsmbs] (sysdep_routines):
+	Add wcscpy-ssse3 wcscpy-c.
+	* sysdeps/x86_64/multiarch/wcscpy-ssse3.S: New file.
+	* sysdeps/x86_64/multiarch/wcscpy-c.c: New file.
+	* sysdeps/x86_64/multiarch/wcscpy.S: New file.
+	* sysdeps/x86_64/wcschr.S: New file.
+	* sysdeps/x86_64/wcsrchr.S: New file.
+	* string/test-strcmp.c: Remove checking of wcscmp function for
+	wrong alignments.
+	* sysdeps/i386/i686/multiarch/Makefile [subdir=wcsmbs]
+	(sysdep_routines): Add wcscpy-ssse3 wcscpy-c wcschr-sse2 wcschr-c
+	wcsrchr-sse2 wcsrchr-c.
+	* sysdeps/i386/i686/multiarch/wcschr.S: New file.
+	* sysdeps/i386/i686/multiarch/wcschr-c.c: New file.
+	* sysdeps/i386/i686/multiarch/wcschr-sse2.S: New file.
+	* sysdeps/i386/i686/multiarch/wcsrchr.S: New file.
+	* sysdeps/i386/i686/multiarch/wcsrchr-c.c: New file.
+	* sysdeps/i386/i686/multiarch/wcsrchr-sse2.S: New file.
+	* sysdeps/i386/i686/multiarch/wcscpy.S: New file.
+	* sysdeps/i386/i686/multiarch/wcscpy-c.c: New file.
+	* sysdeps/i386/i686/multiarch/wcscpy-ssse3.S: New file.
+	* wcsmbc/wcschr.c (WCSCHR): New macro.
+
+2011-11-17  Liubov Dmitrieva  <liubov.dmitrieva@xxxxxxxxx>
+
+	* wcsmbs/Makefile (strop-tests): Add wcsrchr wcscpy.
+	* wcsmbs/test-wcsrchr.c: New file.
+	* string/test-strrchr.c: Add wcsrchr support.
+	(WIDE): New macro.
+	* wcsmbs/test-wcscpy.c: New file.
+	* string/test-strcpy.c: Add wcscpy support.
+	(WIDE): New macro.
+
+2011-12-10  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	* sysdeps/generic/dl-hash.h (_dl_elf_hash): Lift one operation out of
+	the inner loop.
+
+2011-12-06  Andreas Schwab  <schwab@xxxxxxxxxxxxxx>
+
+	[BZ #13472]
+	* sysdeps/powerpc/fpu/e_hypot.c (twoM600): Correct value.
+
+2011-12-04  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	* sysdeps/generic/dl-hash.h (_dl_elf_hash): Fix attribute.
+	Minor optimizations.
+
+	* sunrpc/clnt_unix.c (clntunix_control): Fix aliasing issues.
+	* sunrpc/clnt_tcp.c (clnttcp_control): Likewise.
+	* sunrpc/clnt_udp.c (clntudp_call): Likewise.
+
+2011-12-03  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	* inet/netinet/in.h: Provide versions of IN6_IS_ADDR_UNSPECIFIED,
+	IN6_IS_ADDR_LOOPBACK, IN6_IS_ADDR_LINKLOCAL, IN6_IS_ADDR_SITELOCAL,
+	IN6_IS_ADDR_V4MAPPED, IN6_IS_ADDR_V4COMPAT, and IN6_ARE_ADDR_EQUAL
+	for gcc to avoid warnings.
+	* inet/Makefile (tests): Add tst-checks.
+	* inet/tst-checks.c: New file.
+
+	* sysdeps/generic/dl-hash.h (_dl_elf_hash): Add attribute to avoid
+	warning.
+
+	* sysdeps/x86_64/multiarch/wmemcmp-c.c: Provide prototype for
+	__wmemcmp_sse2.
+
+	* sysdeps/x86_64/fpu/s_scalbln.c: Removed.
+	* sysdeps/x86_64/fpu/s_scalbn.c: Removed.
+
+	* malloc/mcheck.h: Fix use of incorrect encoding in comment.
+
+2011-12-02  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	* nis/nis_findserv.c (__nis_findfastest_with_timeout): Avoid aliasing
+	problem.
+
+	* nscd/aicache.c (addhstaiX): Avoid unused variable warning.
+
 2011-11-29  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/sh/bits/atomic.h (rNOSP): Define

Modified: trunk/libc/NEWS
==============================================================================
--- trunk/libc/NEWS (original)
+++ trunk/libc/NEWS Thu Dec 22 19:27:39 2011
@@ -1,4 +1,4 @@
-GNU C Library NEWS -- history of user-visible changes.  2011-11-14
+GNU C Library NEWS -- history of user-visible changes.  2011-12-22
 Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
 See the end for copying conditions.
 
@@ -12,7 +12,9 @@
   6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
   12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
   13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13192,
-  13268, 13276, 13291, 13335, 13337, 13344, 13358, 13367
+  13268, 13276, 13282, 13291, 13305, 13328, 13335, 13337, 13344, 13358,
+  13367, 13413, 13416, 13423, 13439, 13446, 13472, 13484, 13506, 13515,
+  13523, 13524, 13538
 
 * New program pldd to list loaded object of a process
   Implemented by Ulrich Drepper.
@@ -34,7 +36,8 @@
 * Optimized strchr and strrchr for SSE on x86-32.
   Contributed by Liubov Dmitrieva.
 
-* Optimized memchr, memrchr, rawmemchr, memcmp, wmemcmp for x86-64 and x86-32.
+* Optimized memchr, memrchr, rawmemchr, memcmp, wmemcmp, wcschr, wcscpy
+  for x86-64 and x86-32.
   Contributed by Liubov Dmitrieva.
 
 * New interfaces: scandirat, scandirat64
@@ -59,6 +62,11 @@
 
 * Optimized strcasecmp and strncasecmp for SSSE3 and SSE4.2 on x86-32.
   Implemented by Ulrich Drepper.
+
+* Optimized nearbyint and strcasecmp for PPC.
+  Implemented by Adhemerval Zanella.
+
+* New locales: bho_IN, unm_US, es_CU
 
 Version 2.14
 

Modified: trunk/libc/iconv/gconv.h
==============================================================================
--- trunk/libc/iconv/gconv.h (original)
+++ trunk/libc/iconv/gconv.h Thu Dec 22 19:27:39 2011
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-1999, 2000-2002, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1997-1999, 2000-2002, 2007, 2011 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
@@ -56,7 +56,8 @@
 enum
 {
   __GCONV_IS_LAST = 0x0001,
-  __GCONV_IGNORE_ERRORS = 0x0002
+  __GCONV_IGNORE_ERRORS = 0x0002,
+  __GCONV_SWAP = 0x0004
 };
 
 

Modified: trunk/libc/iconvdata/unicode.c
==============================================================================
--- trunk/libc/iconvdata/unicode.c (original)
+++ trunk/libc/iconvdata/unicode.c Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Conversion module for Unicode
-   Copyright (C) 1999, 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000-2002, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1999.
 
@@ -57,7 +57,7 @@
 	    *inptrp = inptr += 2;					      \
 	  else if (get16u (inptr) == BOM_OE)				      \
 	    {								      \
-	      ((struct unicode_data *) step->__data)->swap = 1;		      \
+	      data->__flags |= __GCONV_SWAP;				      \
 	      *inptrp = inptr += 2;					      \
 	    }								      \
 	}								      \
@@ -71,7 +71,7 @@
       put16u (outbuf, BOM);						      \
       outbuf += 2;							      \
     }									      \
-  swap = ((struct unicode_data *) step->__data)->swap;
+  swap = data->__flags & __GCONV_SWAP;
 #define EXTRA_LOOP_ARGS		, swap
 
 
@@ -86,7 +86,6 @@
 struct unicode_data
 {
   enum direction dir;
-  int swap;
 };
 
 
@@ -110,7 +109,6 @@
   if (new_data != NULL)
     {
       new_data->dir = dir;
-      new_data->swap = 0;
       step->__data = new_data;
 
       if (dir == from_unicode)

Modified: trunk/libc/iconvdata/utf-16.c
==============================================================================
--- trunk/libc/iconvdata/utf-16.c (original)
+++ trunk/libc/iconvdata/utf-16.c Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Conversion module for UTF-16.
-   Copyright (C) 1999, 2000-2002, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000-2002, 2003, 2005, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1999.
 
@@ -44,35 +44,42 @@
 #define PREPARE_LOOP \
   enum direction dir = ((struct utf16_data *) step->__data)->dir;	      \
   enum variant var = ((struct utf16_data *) step->__data)->var;		      \
-  if (__builtin_expect (data->__invocation_counter == 0, 0) && var == UTF_16) \
+  if (__builtin_expect (data->__invocation_counter == 0, 0))		      \
     {									      \
-      if (FROM_DIRECTION)						      \
+      if (var == UTF_16)						      \
 	{								      \
-	  /* We have to find out which byte order the file is encoded in.  */ \
-	  if (inptr + 2 > inend)					      \
-	    return (inptr == inend					      \
-		    ? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT);	      \
-									      \
-	  if (get16u (inptr) == BOM)					      \
-	    /* Simply ignore the BOM character.  */			      \
-	    *inptrp = inptr += 2;					      \
-	  else if (get16u (inptr) == BOM_OE)				      \
+	  if (FROM_DIRECTION)						      \
 	    {								      \
-	      ((struct utf16_data *) step->__data)->swap = 1;		      \
-	      *inptrp = inptr += 2;					      \
+	      /* We have to find out which byte order the file is	      \
+		 encoded in.  */					      \
+	      if (inptr + 2 > inend)					      \
+		return (inptr == inend					      \
+			? __GCONV_EMPTY_INPUT : __GCONV_INCOMPLETE_INPUT);    \
+									      \
+	      if (get16u (inptr) == BOM)				      \
+		/* Simply ignore the BOM character.  */			      \
+		*inptrp = inptr += 2;					      \
+	      else if (get16u (inptr) == BOM_OE)			      \
+		{							      \
+		  data->__flags |= __GCONV_SWAP;			      \
+		  *inptrp = inptr += 2;					      \
+		}							      \
+	    }								      \
+	  else if (!FROM_DIRECTION && !data->__internal_use)		      \
+	    {								      \
+	      /* Emit the Byte Order Mark.  */				      \
+	      if (__builtin_expect (outbuf + 2 > outend, 0))		      \
+		return __GCONV_FULL_OUTPUT;				      \
+									      \
+	      put16u (outbuf, BOM);					      \
+	      outbuf += 2;						      \
 	    }								      \
 	}								      \
-      else if (!FROM_DIRECTION && !data->__internal_use)		      \
-	{								      \
-	  /* Emit the Byte Order Mark.  */				      \
-	  if (__builtin_expect (outbuf + 2 > outend, 0))		      \
-	    return __GCONV_FULL_OUTPUT;					      \
-									      \
-	  put16u (outbuf, BOM);						      \
-	  outbuf += 2;							      \
-	}								      \
+      else if ((var == UTF_16LE && BYTE_ORDER == BIG_ENDIAN)		      \
+	       || (var == UTF_16BE && BYTE_ORDER == LITTLE_ENDIAN))	      \
+	data->__flags |= __GCONV_SWAP;					      \
     }									      \
-  int swap = ((struct utf16_data *) step->__data)->swap;
+  const int swap = data->__flags & __GCONV_SWAP;
 #define EXTRA_LOOP_ARGS		, swap
 
 
@@ -96,7 +103,6 @@
 {
   enum direction dir;
   enum variant var;
-  int swap;
 };
 
 
@@ -151,9 +157,6 @@
 	{
 	  new_data->dir = dir;
 	  new_data->var = var;
-	  new_data->swap = ((var == UTF_16LE && BYTE_ORDER == BIG_ENDIAN)
-			    || (var == UTF_16BE
-				&& BYTE_ORDER == LITTLE_ENDIAN));
 	  step->__data = new_data;
 
 	  if (dir == from_utf16)

Modified: trunk/libc/iconvdata/utf-32.c
==============================================================================
--- trunk/libc/iconvdata/utf-32.c (original)
+++ trunk/libc/iconvdata/utf-32.c Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Conversion module for UTF-32.
-   Copyright (C) 1999, 2000-2002 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2000-2002, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -45,7 +45,7 @@
   int swap;								      \
   if (FROM_DIRECTION && var == UTF_32)					      \
     {									      \
-      if (data->__invocation_counter == 0)				      \
+      if (__builtin_expect (data->__invocation_counter == 0, 0))	      \
 	{								      \
 	  /* We have to find out which byte order the file is encoded in.  */ \
 	  if (inptr + 4 > inend)					      \
@@ -57,7 +57,7 @@
 	    *inptrp = inptr += 4;					      \
 	  else if (get32u (inptr) == BOM_OE)				      \
 	    {								      \
-	      ((struct utf32_data *) step->__data)->swap = 1;		      \
+	      data->__flags |= __GCONV_SWAP;				      \
 	      *inptrp = inptr += 4;					      \
 	    }								      \
 	}								      \
@@ -72,7 +72,11 @@
       put32u (outbuf, BOM);						      \
       outbuf += 4;							      \
     }									      \
-  swap = ((struct utf32_data *) step->__data)->swap;
+  else if (__builtin_expect (data->__invocation_counter == 0, 0)	      \
+	   && ((var == UTF_32LE && BYTE_ORDER == BIG_ENDIAN)		      \
+	       || (var == UTF_32BE && BYTE_ORDER == LITTLE_ENDIAN)))	      \
+    data->__flags |= __GCONV_SWAP;					      \
+  swap = data->__flags & __GCONV_SWAP;
 #define EXTRA_LOOP_ARGS		, var, swap
 
 
@@ -96,7 +100,6 @@
 {
   enum direction dir;
   enum variant var;
-  int swap;
 };
 
 
@@ -151,9 +154,6 @@
 	{
 	  new_data->dir = dir;
 	  new_data->var = var;
-	  new_data->swap = ((var == UTF_32LE && BYTE_ORDER == BIG_ENDIAN)
-			    || (var == UTF_32BE
-				&& BYTE_ORDER == LITTLE_ENDIAN));
 	  step->__data = new_data;
 
 	  if (dir == from_utf32)
@@ -216,9 +216,8 @@
       }									      \
 									      \
     if (swap)								      \
-      put32 (outptr, bswap_32 (c));					      \
-    else								      \
-      put32 (outptr, c);						      \
+      c = bswap_32 (c);							      \
+    put32 (outptr, c);							      \
 									      \
     outptr += 4;							      \
     inptr += 4;								      \

Modified: trunk/libc/inet/Makefile
==============================================================================
--- trunk/libc/inet/Makefile (original)
+++ trunk/libc/inet/Makefile Thu Dec 22 19:27:39 2011
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-2006, 2007, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1991-2006, 2007, 2009, 2011 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -60,7 +60,7 @@
 
 tests := htontest test_ifindex tst-ntoa tst-ether_aton tst-network \
 	 tst-gethnm test-ifaddrs bug-if1 tst-ether_line \
-	 tst-getni1 tst-getni2 tst-inet6_rth
+	 tst-getni1 tst-getni2 tst-inet6_rth tst-checks
 tests-$(OPTION_EGLIBC_ADVANCED_INET6) += test-inet6_opt
 
 include ../Rules
@@ -105,5 +105,5 @@
 
 ifeq (yes,$(build-static-nss))
 otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
-             $(resolvobjdir)/libresolv.a
+	     $(resolvobjdir)/libresolv.a
 endif

Modified: trunk/libc/inet/netinet/in.h
==============================================================================
--- trunk/libc/inet/netinet/in.h (original)
+++ trunk/libc/inet/netinet/in.h Thu Dec 22 19:27:39 2011
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007, 2008
+/* Copyright (C) 1991-2001, 2003, 2004, 2006, 2007, 2008, 2011
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -396,44 +396,96 @@
 # endif
 #endif
 
-#define IN6_IS_ADDR_UNSPECIFIED(a) \
+#ifdef __GNUC__
+# define IN6_IS_ADDR_UNSPECIFIED(a) \
+  (__extension__							      \
+   ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a);	      \
+      __a->s6_addr32[0] == 0						      \
+      && __a->s6_addr32[1] == 0						      \
+      && __a->s6_addr32[2] == 0						      \
+      && __a->s6_addr32[3] == 0; }))
+
+# define IN6_IS_ADDR_LOOPBACK(a) \
+  (__extension__							      \
+   ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a);	      \
+      __a->s6_addr32[0] == 0						      \
+      && __a->s6_addr32[1] == 0						      \
+      && __a->s6_addr32[2] == 0						      \
+      && __a->s6_addr32[3] == htonl (1); }))
+
+# define IN6_IS_ADDR_LINKLOCAL(a) \
+  (__extension__							      \
+   ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a);	      \
+      (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfe800000); }))
+
+# define IN6_IS_ADDR_SITELOCAL(a) \
+  (__extension__							      \
+   ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a);	      \
+      (__a->s6_addr32[0] & htonl (0xffc00000)) == htonl (0xfec00000); }))
+
+# define IN6_IS_ADDR_V4MAPPED(a) \
+  (__extension__							      \
+   ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a);	      \
+      __a->s6_addr32[0] == 0						      \
+      && __a->s6_addr32[1] == 0						      \
+      && __a->s6_addr32[2] == htonl (0xffff); }))
+
+# define IN6_IS_ADDR_V4COMPAT(a) \
+  (__extension__							      \
+   ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a);	      \
+      __a->s6_addr32[0] == 0						      \
+      && __a->s6_addr32[1] == 0						      \
+      && __a->s6_addr32[2] == 0						      \
+      && ntohl (__a->s6_addr32[3]) > 1; }))
+
+# define IN6_ARE_ADDR_EQUAL(a,b) \
+  (__extension__							      \
+   ({ __const struct in6_addr *__a = (__const struct in6_addr *) (a);	      \
+      __const struct in6_addr *__b = (__const struct in6_addr *) (b);	      \
+      __a->s6_addr32[0] == __b->s6_addr32[0]				      \
+      && __a->s6_addr32[1] == __b->s6_addr32[1]				      \
+      && __a->s6_addr32[2] == __b->s6_addr32[2]				      \
+      && __a->s6_addr32[3] == __b->s6_addr32[3]; }))
+#else
+# define IN6_IS_ADDR_UNSPECIFIED(a) \
 	(((__const uint32_t *) (a))[0] == 0				      \
 	 && ((__const uint32_t *) (a))[1] == 0				      \
 	 && ((__const uint32_t *) (a))[2] == 0				      \
 	 && ((__const uint32_t *) (a))[3] == 0)
 
-#define IN6_IS_ADDR_LOOPBACK(a) \
+# define IN6_IS_ADDR_LOOPBACK(a) \
 	(((__const uint32_t *) (a))[0] == 0				      \
 	 && ((__const uint32_t *) (a))[1] == 0				      \
 	 && ((__const uint32_t *) (a))[2] == 0				      \
 	 && ((__const uint32_t *) (a))[3] == htonl (1))
 
-#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff)
-
-#define IN6_IS_ADDR_LINKLOCAL(a) \
+# define IN6_IS_ADDR_LINKLOCAL(a) \
 	((((__const uint32_t *) (a))[0] & htonl (0xffc00000))		      \
 	 == htonl (0xfe800000))
 
-#define IN6_IS_ADDR_SITELOCAL(a) \
+# define IN6_IS_ADDR_SITELOCAL(a) \
 	((((__const uint32_t *) (a))[0] & htonl (0xffc00000))		      \
 	 == htonl (0xfec00000))
 
-#define IN6_IS_ADDR_V4MAPPED(a) \
+# define IN6_IS_ADDR_V4MAPPED(a) \
 	((((__const uint32_t *) (a))[0] == 0)				      \
 	 && (((__const uint32_t *) (a))[1] == 0)			      \
 	 && (((__const uint32_t *) (a))[2] == htonl (0xffff)))
 
-#define IN6_IS_ADDR_V4COMPAT(a) \
+# define IN6_IS_ADDR_V4COMPAT(a) \
 	((((__const uint32_t *) (a))[0] == 0)				      \
 	 && (((__const uint32_t *) (a))[1] == 0)			      \
 	 && (((__const uint32_t *) (a))[2] == 0)			      \
 	 && (ntohl (((__const uint32_t *) (a))[3]) > 1))
 
-#define IN6_ARE_ADDR_EQUAL(a,b) \
+# define IN6_ARE_ADDR_EQUAL(a,b) \
 	((((__const uint32_t *) (a))[0] == ((__const uint32_t *) (b))[0])     \
 	 && (((__const uint32_t *) (a))[1] == ((__const uint32_t *) (b))[1])  \
 	 && (((__const uint32_t *) (a))[2] == ((__const uint32_t *) (b))[2])  \
 	 && (((__const uint32_t *) (a))[3] == ((__const uint32_t *) (b))[3]))
+#endif
+
+#define IN6_IS_ADDR_MULTICAST(a) (((__const uint8_t *) (a))[0] == 0xff)
 
 #if defined __USE_MISC || defined __USE_GNU
 /* Bind socket to a privileged IP port.  */

Modified: trunk/libc/libidn/ChangeLog
==============================================================================
--- trunk/libc/libidn/ChangeLog (original)
+++ trunk/libc/libidn/ChangeLog Thu Dec 22 19:27:39 2011
@@ -1,3 +1,7 @@
+2011-12-03  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	* idna.c (idna_to_unicode_4z4z): Remove variable rc.
+
 2008-02-10  Jim Meyering  <meyering@xxxxxxxxxx>
 
 	* stringprep.c (stringprep, stringprep_profile): Remove useless

Modified: trunk/libc/libidn/idna.c
==============================================================================
--- trunk/libc/libidn/idna.c (original)
+++ trunk/libc/libidn/idna.c Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* idna.c	Convert to or from IDN strings.
- * Copyright (C) 2002, 2003, 2004  Simon Josefsson
+ * Copyright (C) 2002, 2003, 2004, 2011  Simon Josefsson
  *
  * This file is part of GNU Libidn.
  *
@@ -614,7 +614,6 @@
   size_t buflen;
   uint32_t *out = NULL;
   size_t outlen = 0;
-  int rc;
 
   *output = NULL;
 
@@ -630,8 +629,8 @@
       if (!buf)
 	return IDNA_MALLOC_ERROR;
 
-      rc = idna_to_unicode_44i (start, end - start, buf, &buflen, flags);
-      /* don't check rc as per specification! */
+      idna_to_unicode_44i (start, end - start, buf, &buflen, flags);
+      /* don't check return value as per specification! */
 
       if (out)
 	{

Modified: trunk/libc/locale/iso-639.def
==============================================================================
--- trunk/libc/locale/iso-639.def (original)
+++ trunk/libc/locale/iso-639.def Thu Dec 22 19:27:39 2011
@@ -70,6 +70,7 @@
 DEFINE_LANGUAGE_CODE3 ("Bini", bin, bin)
 DEFINE_LANGUAGE_CODE ("Bislama", bi, bis, bis)
 DEFINE_LANGUAGE_CODE3 ("Blin; Bilin", byn, byn)
+DEFINE_LANGUAGE_CODE3 ("Bodo", brx, brx)
 DEFINE_LANGUAGE_CODE ("Bosnian", bs, bos, bos)
 DEFINE_LANGUAGE_CODE3 ("Braj", bra, bra)
 DEFINE_LANGUAGE_CODE ("Breton", br, bre, bre)

Modified: trunk/libc/localedata/ChangeLog
==============================================================================
--- trunk/libc/localedata/ChangeLog (original)
+++ trunk/libc/localedata/ChangeLog Thu Dec 22 19:27:39 2011
@@ -1,3 +1,24 @@
+2011-12-22  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	[BZ #13282]
+	* locales/brx_IN: New file.
+	* SUPPORTED (SUPPORTED-LOCALES): Add appropriate entry
+
+	[BZ #13413]
+	* locales/nl_BE: Use LC_MONETARY from nl_NL.
+
+	[BZ #13416]
+	* locales/es_CU: New file.
+	* SUPPORTED (SUPPORTED-LOCALES): Add appropriate entry
+
+	[BZ #13423]
+	* locales/unm_US: New file.
+	* SUPPORTED (SUPPORTED-LOCALES): Add appropriate entry
+
+	[BZ #13523]
+	* locales/bho_IN: New file.
+	* SUPPORTED (SUPPORTED-LOCALES): Add appropriate entry
+
 2011-11-17  Ulrich Drepper  <drepper@xxxxxxxxx>
 
 	* Makefile (charmaps): Not need to filter out any of the VC

Modified: trunk/libc/localedata/SUPPORTED
==============================================================================
--- trunk/libc/localedata/SUPPORTED (original)
+++ trunk/libc/localedata/SUPPORTED Thu Dec 22 19:27:39 2011
@@ -58,6 +58,7 @@
 ber_MA/UTF-8 \
 bg_BG.UTF-8/UTF-8 \
 bg_BG/CP1251 \
+bho_IN/UTF-8 \
 bn_BD/UTF-8 \
 bn_IN/UTF-8 \
 bo_CN/UTF-8 \
@@ -65,6 +66,7 @@
 br_FR.UTF-8/UTF-8 \
 br_FR/ISO-8859-1 \
 br_FR@euro/ISO-8859-15 \
+brx_IN/UTF-8 \
 bs_BA.UTF-8/UTF-8 \
 bs_BA/ISO-8859-2 \
 byn_ER/UTF-8 \
@@ -147,6 +149,7 @@
 es_CO/ISO-8859-1 \
 es_CR.UTF-8/UTF-8 \
 es_CR/ISO-8859-1 \
+es_CU/UTF-8 \
 es_DO.UTF-8/UTF-8 \
 es_DO/ISO-8859-1 \
 es_EC.UTF-8/UTF-8 \
@@ -399,6 +402,7 @@
 ug_CN/UTF-8 \
 uk_UA.UTF-8/UTF-8 \
 uk_UA/KOI8-U \
+unm_US/UTF-8 \
 ur_PK/UTF-8 \
 uz_UZ/ISO-8859-1 \
 uz_UZ@cyrillic/UTF-8 \

Modified: trunk/libc/localedata/locales/nl_BE
==============================================================================
--- trunk/libc/localedata/locales/nl_BE (original)
+++ trunk/libc/localedata/locales/nl_BE Thu Dec 22 19:27:39 2011
@@ -59,7 +59,7 @@
 END LC_MESSAGES
 
 LC_MONETARY
-copy "fr_BE"
+copy "nl_NL"
 END LC_MONETARY
 
 LC_NUMERIC

Modified: trunk/libc/malloc/mcheck.h
==============================================================================
--- trunk/libc/malloc/mcheck.h (original)
+++ trunk/libc/malloc/mcheck.h Thu Dec 22 19:27:39 2011
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1996,1997,1998,1999,2000,2011 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
@@ -41,7 +41,7 @@
    null, the standard function prints on stderr and then calls `abort'.  */
 extern int mcheck (void (*__abortfunc) (enum mcheck_status)) __THROW;
 
-/* Similar to `mcheck but performs checks for all block whenever one of
+/* Similar to `mcheck' but performs checks for all block whenever one of
    the memory handling functions is called.  This can be very slow.  */
 extern int mcheck_pedantic (void (*__abortfunc) (enum mcheck_status)) __THROW;
 

Modified: trunk/libc/malloc/mtrace.c
==============================================================================
--- trunk/libc/malloc/mtrace.c (original)
+++ trunk/libc/malloc/mtrace.c Thu Dec 22 19:27:39 2011
@@ -146,10 +146,12 @@
   tr_where (caller, info);
   /* Be sure to print it first.  */
   fprintf (mallstream, "- %p\n", ptr);
-  __libc_lock_unlock (lock);
   if (ptr == mallwatch)
-    tr_break ();
-  __libc_lock_lock (lock);
+    {
+      __libc_lock_unlock (lock);
+      tr_break ();
+      __libc_lock_lock (lock);
+    }
   __free_hook = tr_old_free_hook;
   if (tr_old_free_hook != NULL)
     (*tr_old_free_hook) (ptr, caller);

Modified: trunk/libc/manual/resource.texi
==============================================================================
--- trunk/libc/manual/resource.texi (original)
+++ trunk/libc/manual/resource.texi Thu Dec 22 19:27:39 2011
@@ -1607,7 +1607,7 @@
 @end smallexample
 
 @noindent
-returns the number of processors which are currently inline (i.e.,
+returns the number of processors which are currently online (i.e.,
 available).
 
 For these two pieces of information the GNU C library also provides

Modified: trunk/libc/math/bits/math-finite.h
==============================================================================
--- trunk/libc/math/bits/math-finite.h (original)
+++ trunk/libc/math/bits/math-finite.h Thu Dec 22 19:27:39 2011
@@ -22,155 +22,159 @@
 #endif
 
 /* acos.  */
-extern double acos (double) __asm__ ("__acos_finite");
-extern float acosf (float) __asm__ ("__acosf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double acosl (long double) __asm__ ("__acosl_finite");
+extern double __REDIRECT_NTH (acos, (double), __acos_finite);
+extern float __REDIRECT_NTH (acosf, (float), __acosf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (acosl, (long double), __acosl_finite);
 #endif
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 /* acosh.  */
-extern double acosh (double) __asm__ ("__acosh_finite");
-extern float acoshf (float) __asm__ ("__acoshf_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double acoshl (long double) __asm__ ("__acoshl_finite");
+extern double __REDIRECT_NTH (acosh, (double), __acosh_finite);
+extern float __REDIRECT_NTH (acoshf, (float), __acoshf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (acoshl, (long double), __acoshl_finite);
 # endif
 #endif
 
 /* asin.  */
-extern double asin (double) __asm__ ("__asin_finite");
-extern float asinf (float) __asm__ ("__asinf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double asinl (long double) __asm__ ("__asinl_finite");
+extern double __REDIRECT_NTH (asin, (double), __asin_finite);
+extern float __REDIRECT_NTH (asinf, (float), __asinf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (asinl, (long double), __asinl_finite);
 #endif
 
 /* atan2.  */
-extern double atan2 (double, double) __asm__ ("__atan2_finite");
-extern float atan2f (float, float) __asm__ ("__atan2f_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double atan2l (long double, long double) __asm__ ("__atan2l_finite");
+extern double __REDIRECT_NTH (atan2, (double, double), __atan2_finite);
+extern float __REDIRECT_NTH (atan2f, (float, float), __atan2f_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (atan2l, (long double, long double),
+				   __atan2l_finite);
 #endif
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC99
 /* atanh.  */
-extern double atanh (double) __asm__ ("__atanh_finite");
-extern float atanhf (float) __asm__ ("__atanhf_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double atanhl (long double) __asm__ ("__atanhl_finite");
+extern double __REDIRECT_NTH (atanh, (double), __atanh_finite);
+extern float __REDIRECT_NTH (atanhf, (float), __atanhf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (atanhl, (long double), __atanhl_finite);
 # endif
 #endif
 
 /* cosh.  */
-extern double cosh (double) __asm__ ("__cosh_finite");
-extern float coshf (float) __asm__ ("__coshf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double coshl (long double) __asm__ ("__coshl_finite");
+extern double __REDIRECT_NTH (cosh, (double), __cosh_finite);
+extern float __REDIRECT_NTH (coshf, (float), __coshf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (coshl, (long double), __coshl_finite);
 #endif
 
 /* exp.  */
-extern double exp (double) __asm__ ("__exp_finite");
-extern float expf (float) __asm__ ("__expf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double expl (long double) __asm__ ("__expl_finite");
+extern double __REDIRECT_NTH (exp, (double), __exp_finite);
+extern float __REDIRECT_NTH (expf, (float), __expf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (expl, (long double), __expl_finite);
 #endif
 
 #ifdef __USE_GNU
 /* exp10.  */
-extern double exp10 (double) __asm__ ("__exp10_finite");
-extern float exp10f (float) __asm__ ("__exp10f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double exp10l (long double) __asm__ ("__exp10l_finite");
+extern double __REDIRECT_NTH (exp10, (double), __exp10_finite);
+extern float __REDIRECT_NTH (exp10f, (float), __exp10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (exp10l, (long double), __exp10l_finite);
 # endif
 
 /* pow10.  */
-extern double pow10 (double) __asm__ ("__exp10_finite");
-extern float pow10f (float) __asm__ ("__exp10f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double pow10l (long double) __asm__ ("__exp10l_finite");
+extern double __REDIRECT_NTH (pow10, (double), __exp10_finite);
+extern float __REDIRECT_NTH (pow10f, (float), __exp10f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (pow10l, (long double), __exp10l_finite);
 # endif
 #endif
 
 #ifdef __USE_ISOC99
 /* exp2.  */
-extern double exp2 (double) __asm__ ("__exp2_finite");
-extern float exp2f (float) __asm__ ("__exp2f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double exp2l (long double) __asm__ ("__exp2l_finite");
+extern double __REDIRECT_NTH (exp2, (double), __exp2_finite);
+extern float __REDIRECT_NTH (exp2f, (float), __exp2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (exp2l, (long double), __exp2l_finite);
 # endif
 #endif
 
 /* fmod.  */
-extern double fmod (double, double) __asm__ ("__fmod_finite");
-extern float fmodf (float, float) __asm__ ("__fmodf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double fmodl (long double, long double) __asm__ ("__fmodl_finite");
+extern double __REDIRECT_NTH (fmod, (double, double), __fmod_finite);
+extern float __REDIRECT_NTH (fmodf, (float, float), __fmodf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (fmodl, (long double, long double),
+				   __fmodl_finite);
 #endif
 
 #ifdef __USE_ISOC99
 /* hypot.  */
-extern double hypot (double, double) __asm__ ("__hypot_finite");
-extern float hypotf (float, float) __asm__ ("__hypotf_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double hypotl (long double, long double) __asm__ ("__hypotl_finite");
+extern double __REDIRECT_NTH (hypot, (double, double), __hypot_finite);
+extern float __REDIRECT_NTH (hypotf, (float, float), __hypotf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (hypotl, (long double, long double),
+				   __hypotl_finite);
 # endif
 #endif
 
 #if defined __USE_MISC || defined __USE_XOPEN
 /* j0.  */
-extern double j0 (double) __asm__ ("__j0_finite");
-extern float j0f (float) __asm__ ("__j0f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double j0l (long double) __asm__ ("__j0l_finite");
+extern double __REDIRECT_NTH (j0, (double), __j0_finite);
+extern float __REDIRECT_NTH (j0f, (float), __j0f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (j0l, (long double), __j0l_finite);
 # endif
 
 /* y0.  */
-extern double y0 (double) __asm__ ("__y0_finite");
-extern float y0f (float) __asm__ ("__y0f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double y0l (long double) __asm__ ("__y0l_finite");
+extern double __REDIRECT_NTH (y0, (double), __y0_finite);
+extern float __REDIRECT_NTH (y0f, (float), __y0f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (y0l, (long double), __y0l_finite);
 # endif
 
 /* j1.  */
-extern double j1 (double) __asm__ ("__j1_finite");
-extern float j1f (float) __asm__ ("__j1f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double j1l (long double) __asm__ ("__j1l_finite");
+extern double __REDIRECT_NTH (j1, (double), __j1_finite);
+extern float __REDIRECT_NTH (j1f, (float), __j1f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (j1l, (long double), __j1l_finite);
 # endif
 
 /* y1.  */
-extern double y1 (double) __asm__ ("__y1_finite");
-extern float y1f (float) __asm__ ("__y1f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double y1l (long double) __asm__ ("__y1l_finite");
+extern double __REDIRECT_NTH (y1, (double), __y1_finite);
+extern float __REDIRECT_NTH (y1f, (float), __y1f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (y1l, (long double), __y1l_finite);
 # endif
 
 /* jn.  */
-extern double jn (int, double) __asm__ ("__jn_finite");
-extern float jnf (int, float) __asm__ ("__jnf_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double jnl (int, long double) __asm__ ("__jnl_finite");
+extern double __REDIRECT_NTH (jn, (int, double), __jn_finite);
+extern float __REDIRECT_NTH (jnf, (int, float), __jnf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (jnl, (int, long double), __jnl_finite);
 # endif
 
 /* yn.  */
-extern double yn (int, double) __asm__ ("__yn_finite");
-extern float ynf (int, float) __asm__ ("__ynf_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double ynl (int, long double) __asm__ ("__ynl_finite");
+extern double __REDIRECT_NTH (yn, (int, double), __yn_finite);
+extern float __REDIRECT_NTH (ynf, (int, float), __ynf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (ynl, (int, long double), __ynl_finite);
 # endif
 #endif
 
 #ifdef __USE_MISC
 /* lgamma_r.  */
-extern double lgamma_r (double, int *) __asm__ ("__lgamma_r_finite");
-extern float lgammaf_r (float, int *) __asm__ ("__lgammaf_r_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double lgammal_r (long double, int *) __asm__ ("__lgammal_r_finite");
+extern double __REDIRECT_NTH (lgamma_r, (double, int *), __lgamma_r_finite);
+extern float __REDIRECT_NTH (lgammaf_r, (float, int *), __lgammaf_r_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (lgammal_r, (long double, int *),
+				   __lgammal_r_finite);
 # endif
 #endif
 
 #if defined __USE_MISC || defined __USE_XOPEN || defined __USE_ISOC99
 /* lgamma.  */
-__extern_always_inline double lgamma (double __d)
+__extern_always_inline double __NTH (lgamma (double __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
@@ -179,7 +183,7 @@
   return lgamma_r (__d, &signgam);
 # endif
 }
-__extern_always_inline float lgammaf (float __d)
+__extern_always_inline float __NTH (lgammaf (float __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
@@ -189,7 +193,7 @@
 # endif
 }
 # ifdef __MATH_DECLARE_LDOUBLE
-__extern_always_inline long double lgammal (long double __d)
+__extern_always_inline long double __NTH (lgammal (long double __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
@@ -203,7 +207,7 @@
 
 #if defined __USE_MISC || defined __USE_XOPEN
 /* gamma.  */
-__extern_always_inline double gamma (double __d)
+__extern_always_inline double __NTH (gamma (double __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
@@ -212,7 +216,7 @@
   return lgamma_r (__d, &signgam);
 # endif
 }
-__extern_always_inline float gammaf (float __d)
+__extern_always_inline float __NTH (gammaf (float __d))
 {
 # ifdef __USE_ISOC99
   int __local_signgam = 0;
@@ -222,7 +226,7 @@
 # endif
 }
 # ifdef __MATH_DECLARE_LDOUBLE
-__extern_always_inline long double gammal (long double __d)
+__extern_always_inline long double __NTH (gammal (long double __d))
 {
 #  ifdef __USE_ISOC99
   int __local_signgam = 0;
@@ -235,76 +239,79 @@
 #endif
 
 /* log.  */
-extern double log (double) __asm__ ("__log_finite");
-extern float logf (float) __asm__ ("__logf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double logl (long double) __asm__ ("__logl_finite");
+extern double __REDIRECT_NTH (log, (double), __log_finite);
+extern float __REDIRECT_NTH (logf, (float), __logf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (logl, (long double), __logl_finite);
 #endif
 
 /* log10.  */
-extern double log10 (double) __asm__ ("__log10_finite");
-extern float log10f (float) __asm__ ("__log10f_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double log10l (long double) __asm__ ("__log10l_finite");
+extern double __REDIRECT_NTH (log10, (double), __log10_finite);
+extern float __REDIRECT_NTH (log10f, (float), __log10f_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (log10l, (long double), __log10l_finite);
 #endif
 
 #ifdef __USE_ISOC99
 /* log2.  */
-extern double log2 (double) __asm__ ("__log2_finite");
-extern float log2f (float) __asm__ ("__log2f_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double log2l (long double) __asm__ ("__log2l_finite");
+extern double __REDIRECT_NTH (log2, (double), __log2_finite);
+extern float __REDIRECT_NTH (log2f, (float), __log2f_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (log2l, (long double), __log2l_finite);
 # endif
 #endif
 
 /* pow.  */
-extern double pow (double, double) __asm__ ("__pow_finite");
-extern float powf (float, float) __asm__ ("__powf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double powl (long double, long double) __asm__ ("__powl_finite");
+extern double __REDIRECT_NTH (pow, (double, double), __pow_finite);
+extern float __REDIRECT_NTH (powf, (float, float), __powf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (powl, (long double, long double),
+				   __powl_finite);
 #endif
 
 /* remainder.  */
-extern double remainder (double, double) __asm__ ("__remainder_finite");
-extern float remainderf (float, float) __asm__ ("__remainderf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double remainderl (long double, long double) __asm__ ("__remainderl_finite");
+extern double __REDIRECT_NTH (remainder, (double, double), __remainder_finite);
+extern float __REDIRECT_NTH (remainderf, (float, float), __remainderf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (remainderl, (long double, long double),
+				   __remainderl_finite);
 #endif
 
 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 /* scalb.  */
-extern double scalb (double, double) __asm__ ("__scalb_finite");
-extern float scalbf (float, float) __asm__ ("__scalbf_finite");
-# ifdef __MATH_DECLARE_LDOUBLE
-extern long double scalbl (long double, long double) __asm__ ("__scalbl_finite");
+extern double __REDIRECT_NTH (scalb, (double, double), __scalb_finite);
+extern float __REDIRECT_NTH (scalbf, (float, float), __scalbf_finite);
+# ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (scalbl, (long double, long double),
+				   __scalbl_finite);
 # endif
 #endif
 
 /* sinh.  */
-extern double sinh (double) __asm__ ("__sinh_finite");
-extern float sinhf (float) __asm__ ("__sinhf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double sinhl (long double) __asm__ ("__sinhl_finite");
+extern double __REDIRECT_NTH (sinh, (double), __sinh_finite);
+extern float __REDIRECT_NTH (sinhf, (float), __sinhf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (sinhl, (long double), __sinhl_finite);
 #endif
 
 /* sqrt.  */
-extern double sqrt (double) __asm__ ("__sqrt_finite");
-extern float sqrtf (float) __asm__ ("__sqrtf_finite");
-#ifdef __MATH_DECLARE_LDOUBLE
-extern long double sqrtl (long double) __asm__ ("__sqrtl_finite");
+extern double __REDIRECT_NTH (sqrt, (double), __sqrt_finite);
+extern float __REDIRECT_NTH (sqrtf, (float), __sqrtf_finite);
+#ifdef __MATH_DECLARE_LDOUBLE
+extern long double __REDIRECT_NTH (sqrtl, (long double), __sqrtl_finite);
 #endif
 
 #ifdef __USE_ISOC99
 /* tgamma.  */
 extern double __gamma_r_finite (double, int *);
-__extern_always_inline double tgamma (double __d)
+__extern_always_inline double __NTH (tgamma (double __d))
 {
   int __local_signgam = 0;
   double __res = __gamma_r_finite (__d, &__local_signgam);
   return __local_signgam < 0 ? -__res : __res;
 }
 extern float __gammaf_r_finite (float, int *);
-__extern_always_inline float tgammaf (float __d)
+__extern_always_inline float __NTH (tgammaf (float __d))
 {
   int __local_signgam = 0;
   float __res = __gammaf_r_finite (__d, &__local_signgam);
@@ -312,7 +319,7 @@
 }
 # ifdef __MATH_DECLARE_LDOUBLE
 extern long double __gammal_r_finite (long double, int *);
-__extern_always_inline long double tgammal (long double __d)
+__extern_always_inline long double __NTH (tgammal (long double __d))
 {
   int __local_signgam = 0;
   long double __res = __gammal_r_finite (__d, &__local_signgam);

Modified: trunk/libc/math/libm-test.inc
==============================================================================
--- trunk/libc/math/libm-test.inc (original)
+++ trunk/libc/math/libm-test.inc Thu Dec 22 19:27:39 2011
@@ -4631,6 +4631,10 @@
   TEST_f_f (nearbyint, minus_infty, minus_infty);
   TEST_f_f (nearbyint, nan_value, nan_value);
 
+  /* Subnormal values */
+  TEST_f_f (nearbyint, -8.98847e+307, -8.98847e+307);
+  TEST_f_f (nearbyint, -4.45015e-308, minus_zero);
+
   /* Default rounding mode is round to nearest.  */
   TEST_f_f (nearbyint, 0.5, 0.0);
   TEST_f_f (nearbyint, 1.5, 2.0);

Modified: trunk/libc/math/s_cacosh.c
==============================================================================
--- trunk/libc/math/s_cacosh.c (original)
+++ trunk/libc/math/s_cacosh.c Thu Dec 22 19:27:39 2011
@@ -65,6 +65,11 @@
       __real__ res = 0.0;
       __imag__ res = __copysign (M_PI_2, __imag__ x);
     }
+  /* The factor 16 is just a guess.  */
+  else if (16.0 * fabs (__imag__ x) < fabs (__real__ x))
+    /* Kahan's formula which avoid cancellation through subtraction in
+       some cases.  */
+    res = 2.0 * __clog (__csqrt ((x + 1.0) / 2.0) + __csqrt ((x - 1.0) / 2.0));
   else
     {
       __complex__ double y;
@@ -74,17 +79,13 @@
 
       y = __csqrt (y);
 
-      if (__real__ x < 0.0)
+      if (signbit (__real__ x))
 	y = -y;
 
       __real__ y += __real__ x;
       __imag__ y += __imag__ x;
 
       res = __clog (y);
-
-      /* We have to use the positive branch.  */
-      if (__real__ res < 0.0)
-	res = -res;
     }
 
   return res;

Modified: trunk/libc/math/s_cacoshf.c
==============================================================================
--- trunk/libc/math/s_cacoshf.c (original)
+++ trunk/libc/math/s_cacoshf.c Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Return arc hyperbole cosine for float value.
-   Copyright (C) 1997, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1997, 2006, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
 
@@ -65,9 +65,14 @@
       __real__ res = 0.0;
       __imag__ res = __copysignf (M_PI_2, __imag__ x);
     }
+  /* The factor 16 is just a guess.  */
+  else if (16.0 * fabsf (__imag__ x) < fabsf (__real__ x))
+    /* Kahan's formula which avoid cancellation through subtraction in
+       some cases.  */
+    res = 2.0 * __clogf (__csqrtf ((x + 1.0) / 2.0)
+			 + __csqrtf ((x - 1.0) / 2.0));
   else
     {
-#if 1
       __complex__ float y;
 
       __real__ y = (__real__ x - __imag__ x) * (__real__ x + __imag__ x) - 1.0;
@@ -75,30 +80,13 @@
 
       y = __csqrtf (y);
 
-      if (__real__ x < 0.0)
+      if (signbit (__real__ x))
 	y = -y;
 
       __real__ y += __real__ x;
       __imag__ y += __imag__ x;
 
       res = __clogf (y);
-#else
-      float re2 = __real__ x * __real__ x;
-      float im2 = __imag__ x * __imag__ x;
-      float sq = re2 - im2 - 1.0;
-      float ro = __ieee754_sqrtf (sq * sq + 4 * re2 * im2);
-      float a = __ieee754_sqrtf ((sq + ro) / 2.0);
-      float b = __ieee754_sqrtf ((-sq + ro) / 2.0);
-
-      __real__ res = 0.5 * __ieee754_logf (re2 + __real__ x * 2 * a
-					   + im2 + __imag__ x * 2 * b
-					   + ro);
-      __imag__ res = __ieee754_atan2f (__imag__ x + b, __real__ x + a);
-#endif
-
-      /* We have to use the positive branch.  */
-      if (__real__ res < 0.0)
-	res = -res;
     }
 
   return res;

Modified: trunk/libc/math/s_cacoshl.c
==============================================================================
--- trunk/libc/math/s_cacoshl.c (original)
+++ trunk/libc/math/s_cacoshl.c Thu Dec 22 19:27:39 2011
@@ -65,6 +65,12 @@
       __real__ res = 0.0;
       __imag__ res = __copysignl (M_PI_2l, __imag__ x);
     }
+  /* The factor 16 is just a guess.  */
+  else if (16.0L * fabsl (__imag__ x) < fabsl (__real__ x))
+    /* Kahan's formula which avoid cancellation through subtraction in
+       some cases.  */
+    res = 2.0L * __clogl (__csqrtl ((x + 1.0L) / 2.0L)
+			  + __csqrtl ((x - 1.0L) / 2.0L));
   else
     {
       __complex__ long double y;
@@ -74,17 +80,13 @@
 
       y = __csqrtl (y);
 
-      if (__real__ x < 0.0)
+      if (signbit (__real__ x))
 	y = -y;
 
       __real__ y += __real__ x;
       __imag__ y += __imag__ x;
 
       res = __clogl (y);
-
-      /* We have to use the positive branch.  */
-      if (__real__ res < 0.0)
-	res = -res;
     }
 
   return res;

Modified: trunk/libc/nis/nis_findserv.c
==============================================================================
--- trunk/libc/nis/nis_findserv.c (original)
+++ trunk/libc/nis/nis_findserv.c Thu Dec 22 19:27:39 2011
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997, 1998, 2000, 2001, 2010 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998, 2000, 2001, 2010, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@xxxxxxxxxxxxxxxxxxx>, 1997.
 
@@ -175,7 +175,9 @@
 			(xdrproc_t) xdr_void, (caddr_t) 0,
 			*timeout);
     if (RPC_SUCCESS == rc) {
-      fastest = *((u_int32_t *) (cu->cu_inbuf)) - xid_seed;
+      u_int32_t val;
+      memcpy (&val, cu->cu_inbuf, sizeof (u_int32_t));
+      fastest = val - xid_seed;
       if (fastest < pings_count) {
 	bind->server_used = pings[fastest].server_nr;
 	bind->current_ep = pings[fastest].server_ep;

Modified: trunk/libc/nptl/ChangeLog
==============================================================================
--- trunk/libc/nptl/ChangeLog (original)
+++ trunk/libc/nptl/ChangeLog Thu Dec 22 19:27:39 2011
@@ -1,3 +1,18 @@
+2011-12-21  Ulrich Drepper  <drepper@xxxxxxxxx>
+
+	[BZ #13515]
+	* sysdeps/unix/sysv/linux/pthread_getname.c (pthread_getname_np):
+	Correct reading name from file.
+
+2011-12-14  Carlos O'Donell  <carlos@xxxxxxxxxxxxxxxx>
+
+	* allocatestack.c (allocate_stack): Return errno on failure.
+
+2011-12-14  Jeff Law  <law@xxxxxxxxxx>
+
+	[BZ #5245]
+	* pthread_create.c (__pthread_create_2_1): Translate ENOMEM to EAGAIN.
+
 2011-11-28  Andreas Schwab  <schwab@xxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Handle

Modified: trunk/libc/nptl/allocatestack.c
==============================================================================
--- trunk/libc/nptl/allocatestack.c (original)
+++ trunk/libc/nptl/allocatestack.c Thu Dec 22 19:27:39 2011
@@ -435,7 +435,7 @@
 	{
 	  /* Something went wrong.  */
 	  assert (errno == ENOMEM);
-	  return EAGAIN;
+	  return errno;
 	}
 
 
@@ -496,12 +496,7 @@
 		      MAP_PRIVATE | MAP_ANONYMOUS | MAP_STACK, -1, 0);
 
 	  if (__builtin_expect (mem == MAP_FAILED, 0))
-	    {
-	      if (errno == ENOMEM)
-		__set_errno (EAGAIN);
-
-	       return errno;
-	    }
+	    return errno;
 
 	  /* SIZE is guaranteed to be greater than zero.
 	     So we can never get a null pointer back from mmap.  */
@@ -581,7 +576,7 @@
 	      /* Free the stack memory we just allocated.  */
 	      (void) munmap (mem, size);
 
-	      return EAGAIN;
+	      return errno;
 	    }
 
 
@@ -636,10 +631,7 @@
 #endif
 	  if (mprotect (guard, guardsize, PROT_NONE) != 0)
 	    {
-	      int err;
 	    mprot_error:
-	      err = errno == ENOMEM ? EAGAIN : errno;
-
 	      lll_lock (stack_cache_lock, LLL_PRIVATE);
 
 	      /* Remove the thread from the list.  */
@@ -657,7 +649,7 @@
 		 is nothing we could do.  */
 	      (void) munmap (mem, size);
 
-	      return err;
+	      return errno;
 	    }
 
 	  pd->guardsize = guardsize;

Modified: trunk/libc/nptl/pthread_create.c
==============================================================================
--- trunk/libc/nptl/pthread_create.c (original)
+++ trunk/libc/nptl/pthread_create.c Thu Dec 22 19:27:39 2011
@@ -462,8 +462,9 @@
   int err = ALLOCATE_STACK (iattr, &pd);
   if (__builtin_expect (err != 0, 0))
     /* Something went wrong.  Maybe a parameter of the attributes is
-       invalid or we could not allocate memory.  */
-    return err;
+       invalid or we could not allocate memory.  Note we have to
+       translate error codes.  */
+    return err == ENOMEM ? EAGAIN : err;
 
 
   /* Initialize the TCB.  All initializations with zero should be

Modified: trunk/libc/nptl/sysdeps/unix/sysv/linux/pthread_getname.c
==============================================================================
--- trunk/libc/nptl/sysdeps/unix/sysv/linux/pthread_getname.c (original)
+++ trunk/libc/nptl/sysdeps/unix/sysv/linux/pthread_getname.c Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* pthread_getname_np -- Get  thread name.  Linux version
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 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
@@ -57,6 +57,15 @@
   ssize_t n = TEMP_FAILURE_RETRY (read_not_cancel (fd, buf, len));
   if (n < 0)
     res = errno;
+  else
+    {
+      if (buf[n - 1] == '\n')
+	buf[n - 1] = '\0';
+      else if (n == len)
+	res = ERANGE;
+      else
+	buf[n] = '\0';
+    }
 
   close_not_cancel_no_status (fd);
 

Modified: trunk/libc/nscd/aicache.c
==============================================================================
--- trunk/libc/nscd/aicache.c (original)
+++ trunk/libc/nscd/aicache.c Thu Dec 22 19:27:39 2011
@@ -461,9 +461,12 @@
 		      <= (sizeof (struct database_pers_head)
 			  + db->head->module * sizeof (ref_t)
 			  + db->head->data_size));
+# ifndef __ASSUME_SENDFILE
 	      ssize_t written;
-	      written = sendfileall (fd, db->wr_fd, (char *) &dataset->resp
-				     - (char *) db->head, dataset->head.recsize);
+	      written =
+# endif
+		sendfileall (fd, db->wr_fd, (char *) &dataset->resp
+			     - (char *) db->head, dataset->head.recsize);
 # ifndef __ASSUME_SENDFILE
 	      if (written == -1 && errno == ENOSYS)
 		goto use_write;

Modified: trunk/libc/resolv/res_init.c
==============================================================================
--- trunk/libc/resolv/res_init.c (original)
+++ trunk/libc/resolv/res_init.c Thu Dec 22 19:27:39 2011
@@ -233,7 +233,7 @@
 	(line[sizeof(name) - 1] == ' ' || \
 	 line[sizeof(name) - 1] == '\t'))
 
-	if ((fp = fopen(_PATH_RESCONF, "rc")) != NULL) {
+	if ((fp = fopen(_PATH_RESCONF, "rce")) != NULL) {
 	    /* No threads use this stream.  */
 	    __fsetlocking (fp, FSETLOCKING_BYCALLER);
 	    /* read the config file */

Modified: trunk/libc/stdio-common/vfprintf.c
==============================================================================
--- trunk/libc/stdio-common/vfprintf.c (original)
+++ trunk/libc/stdio-common/vfprintf.c Thu Dec 22 19:27:39 2011
@@ -1661,9 +1661,9 @@
     /* Array with information about the needed arguments.  This has to
        be dynamically extensible.  */
     size_t nspecs = 0;
-    size_t nspecs_max = 32;	/* A more or less arbitrary start value.  */
-    struct printf_spec *specs
-      = alloca (nspecs_max * sizeof (struct printf_spec));
+    /* A more or less arbitrary start value.  */
+    size_t nspecs_size = 32 * sizeof (struct printf_spec);
+    struct printf_spec *specs = alloca (nspecs_size);
 
     /* The number of arguments the format string requests.  This will
        determine the size of the array needed to store the argument
@@ -1702,15 +1702,14 @@
 
     for (f = lead_str_end; *f != L_('\0'); f = specs[nspecs++].next_fmt)
       {
-	if (nspecs >= nspecs_max)
+	if (nspecs * sizeof (*specs) >= nspecs_size)
 	  {
 	    /* Extend the array of format specifiers.  */
 	    struct printf_spec *old = specs;
-	    specs = extend_alloca (specs, nspecs_max,
-				   2 * nspecs_max * sizeof (*specs));
+	    specs = extend_alloca (specs, nspecs_size, 2 * nspecs_size);
 
 	    /* Copy the old array's elements to the new space.  */
-	    memmove (specs, old, nspecs * sizeof (struct printf_spec));
+	    memmove (specs, old, nspecs * sizeof (*specs));
 	  }
 
 	/* Parse the format specifier.  */

Modified: trunk/libc/stdlib/strtod_l.c
==============================================================================
--- trunk/libc/stdlib/strtod_l.c (original)
+++ trunk/libc/stdlib/strtod_l.c Thu Dec 22 19:27:39 2011
@@ -1526,6 +1526,7 @@
 	      assert (numsize == densize);
 	      for (i = numsize; i > 0; --i)
 		num[i] = num[i - 1];
+	      num[0] = 0;
 	    }
 
 	  den[densize] = 0;
@@ -1570,6 +1571,7 @@
 	      n0 = num[densize] = num[densize - 1];
 	      for (i = densize - 1; i > 0; --i)
 		num[i] = num[i - 1];
+	      num[0] = 0;
 
 	      got_limb;
 	    }

Modified: trunk/libc/string/test-strcmp.c
==============================================================================
--- trunk/libc/string/test-strcmp.c (original)
+++ trunk/libc/string/test-strcmp.c Thu Dec 22 19:27:39 2011
@@ -221,14 +221,16 @@
 static void
 do_random_tests (void)
 {
-  for (size_t a = 0; a < CHARBYTES; a += CHARALIGN)
-    for (size_t b = 0; b < CHARBYTES; b += CHARALIGN)
-      {
-	UCHAR *p1 = (UCHAR *) (buf1 + page_size - 512 * CHARBYTES - a);
-	UCHAR *p2 = (UCHAR *) (buf2 + page_size - 512 * CHARBYTES - b);
+	UCHAR *p1 = (UCHAR *) (buf1 + page_size - 512 * CHARBYTES);
+	UCHAR *p2 = (UCHAR *) (buf2 + page_size - 512 * CHARBYTES);
 
 	for (size_t n = 0; n < ITERATIONS; n++)
 	  {
+	    /* for wcscmp case align1 and align2 mean here alignment
+	       in wchar_t symbols, it equal 4*k alignment in bytes, we
+	       don't check other alignments like for example
+	       p1 = (wchar_t *)(buf1 + 1)
+	       because it's wrong using of wchar_t type.  */
 	    size_t align1 = random () & 31;
 	    size_t align2;
 	    if (random () & 1)
@@ -274,7 +276,7 @@
 	      }
 
 	    int result = 0;
-	    MEMCPY ((CHAR *) (p2 + align2), (CHAR *) (p1 + align1), pos);
+	    MEMCPY (p2 + align2, p1 + align1, pos);
 	    if (pos < len1)
 	      {
 		if (p2[align2 + pos] == p1[align1 + pos])
@@ -302,13 +304,12 @@
 		    || (r < 0 && result >= 0)
 		    || (r > 0 && result <= 0))
 		  {
-		    error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd, %zd, %zd) %d != %d, p1 %p p2 %p",
+		    error (0, 0, "Iteration %zd - wrong result in function %s (align in bytes: %zd, align in bytes: %zd, len1:  %zd, len2: %zd, pos: %zd) %d != %d, p1 %p p2 %p",
 			   n, impl->name, (size_t) (p1 + align1) & 63, (size_t) (p1 + align2) & 63, len1, len2, pos, r, result, p1, p2);
 		    ret = 1;
 		  }
 	      }
-	  }
-      }
+     }
 }
 
 static void

Modified: trunk/libc/string/test-strcpy.c
==============================================================================
--- trunk/libc/string/test-strcpy.c (original)
+++ trunk/libc/string/test-strcpy.c Thu Dec 22 19:27:39 2011
@@ -1,7 +1,8 @@
 /* Test and measure strcpy functions.
-   Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1999, 2002, 2003, 2005, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Jakub Jelinek <jakub@xxxxxxxxxx>, 1999.
+   Added wcscpy support by Liubov Dmitrieva <liubov.dmitrieva@xxxxxxxxx>, 2011
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -18,29 +19,55 @@
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+#ifdef WIDE
+# include <wchar.h>
+# define CHAR wchar_t
+# define UCHAR wchar_t
+# define BIG_CHAR WCHAR_MAX
+# define SMALL_CHAR 1273
+# define STRCMP wcscmp
+# define MEMCMP wmemcmp
+# define MEMSET wmemset
+#else
+# define CHAR char
+# define UCHAR unsigned char
+# define BIG_CHAR CHAR_MAX
+# define SMALL_CHAR 127
+# define STRCMP strcmp
+# define MEMCMP memcmp
+# define MEMSET memset
+#endif
+
 #ifndef STRCPY_RESULT
 # define STRCPY_RESULT(dst, len) dst
 # define TEST_MAIN
 # include "test-string.h"
-
-char *simple_strcpy (char *, const char *);
-
-IMPL (simple_strcpy, 0)
-IMPL (strcpy, 1)
-
-char *
-simple_strcpy (char *dst, const char *src)
-{
-  char *ret = dst;
+# ifndef WIDE
+#  define SIMPLE_STRCPY simple_strcpy
+#  define STRCPY strcpy
+# else
+#  define SIMPLE_STRCPY simple_wcscpy
+#  define STRCPY wcscpy
+# endif
+
+CHAR *SIMPLE_STRCPY (CHAR *, const CHAR *);
+
+IMPL (SIMPLE_STRCPY, 0)
+IMPL (STRCPY, 1)
+
+CHAR *
+SIMPLE_STRCPY (CHAR *dst, const CHAR *src)
+{
+  CHAR *ret = dst;
   while ((*dst++ = *src++) != '\0');
   return ret;
 }
 #endif
 
-typedef char *(*proto_t) (char *, const char *);
+typedef CHAR *(*proto_t) (CHAR *, const CHAR *);
 
 static void
-do_one_test (impl_t *impl, char *dst, const char *src,
+do_one_test (impl_t *impl, CHAR *dst, const CHAR *src,
 	     size_t len __attribute__((unused)))
 {
   if (CALL (impl, dst, src) != STRCPY_RESULT (dst, len))
@@ -51,7 +78,7 @@
       return;
     }
 
-  if (strcmp (dst, src) != 0)
+  if (STRCMP (dst, src) != 0)
     {
       error (0, 0, "Wrong result in function %s dst \"%s\" src \"%s\"",
 	     impl->name, dst, src);
@@ -82,25 +109,27 @@
 do_test (size_t align1, size_t align2, size_t len, int max_char)
 {
   size_t i;
-  char *s1, *s2;
-
+  CHAR *s1, *s2;
+/* For wcscpy: align1 and align2 here mean alignment not in bytes,
+   but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t))
+   len for wcschr here isn't in bytes but it's number of wchar_t symbols.  */
   align1 &= 7;
-  if (align1 + len >= page_size)
+  if ((align1 + len) * sizeof(CHAR) >= page_size)
     return;
 
   align2 &= 7;
-  if (align2 + len >= page_size)
+  if ((align2 + len) * sizeof(CHAR) >= page_size)
     return;
 
-  s1 = (char *) (buf1 + align1);
-  s2 = (char *) (buf2 + align2);
+  s1 = (CHAR *) (buf1) + align1;
+  s2 = (CHAR *) (buf2) + align2;
 
   for (i = 0; i < len; i++)
     s1[i] = 32 + 23 * i % (max_char - 32);
   s1[len] = 0;
 
   if (HP_TIMING_AVAIL)
-    printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+    printf ("Length %4zd, alignments in bytes %2zd/%2zd:", len, align1 * sizeof(CHAR), align2 * sizeof(CHAR));
 
   FOR_EACH_IMPL (impl, 0)
     do_one_test (impl, s2, s1, len);
@@ -113,15 +142,21 @@
 do_random_tests (void)
 {
   size_t i, j, n, align1, align2, len;
-  unsigned char *p1 = buf1 + page_size - 512;
-  unsigned char *p2 = buf2 + page_size - 512;
-  unsigned char *res;
+  UCHAR *p1 = (UCHAR *) (buf1 + page_size) - 512;
+  UCHAR *p2 = (UCHAR *) (buf2 + page_size) - 512;
+  UCHAR *res;
 
   for (n = 0; n < ITERATIONS; n++)
     {
-      align1 = random () & 31;
+      /* For wcsrchr: align1 and align2 here mean align not in bytes,
+	 but in wchar_ts, in bytes it will equal to align * (sizeof
+	 (wchar_t)).  For strrchr we need to check all alignments from
+	 0 to 63 since some assembly implementations have separate
+	 prolog for alignments more 48. */
+
+      align1 = random () & (63 / sizeof(CHAR));
       if (random () & 1)
-	align2 = random () & 31;
+	align2 = random () & (63 / sizeof(CHAR));
       else
 	align2 = align1 + (random () & 24);
       len = random () & 511;
@@ -139,17 +174,16 @@
 	    p1[i] = 0;
 	  else
 	    {
-	      p1[i] = random () & 255;
+	      p1[i] = random () & BIG_CHAR;
 	      if (i >= align1 && i < len + align1 && !p1[i])
-		p1[i] = (random () & 127) + 3;
+		p1[i] = (random () & SMALL_CHAR) + 3;
 	    }
 	}
 
       FOR_EACH_IMPL (impl, 1)
 	{
-	  memset (p2 - 64, '\1', 512 + 64);
-	  res = (unsigned char *) CALL (impl, (char *) (p2 + align2),
-					(char *) (p1 + align1));
+	  MEMSET (p2 - 64, '\1', 512 + 64);
+	  res = (UCHAR *) CALL (impl, (CHAR *) (p2 + align2), (CHAR *) (p1 + align1));
 	  if (res != STRCPY_RESULT (p2 + align2, len))
 	    {
 	      error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %zd, %zd) %p != %p",
@@ -177,7 +211,7 @@
 		  break;
 		}
 	    }
-	  if (memcmp (p1 + align1, p2 + align2, len + 1))
+	  if (MEMCMP (p1 + align1, p2 + align2, len + 1))
 	    {
 	      error (0, 0, "Iteration %zd - different strings, %s (%zd, %zd, %zd)",
 		     n, impl->name, align1, align2, len);
@@ -201,24 +235,24 @@
 
   for (i = 0; i < 16; ++i)
     {
-      do_test (0, 0, i, 127);
-      do_test (0, 0, i, 255);
-      do_test (0, i, i, 127);
-      do_test (i, 0, i, 255);
+      do_test (0, 0, i, SMALL_CHAR);
+      do_test (0, 0, i, BIG_CHAR);
+      do_test (0, i, i, SMALL_CHAR);
+      do_test (i, 0, i, BIG_CHAR);
     }
 
   for (i = 1; i < 8; ++i)
     {
-      do_test (0, 0, 8 << i, 127);
-      do_test (8 - i, 2 * i, 8 << i, 127);
+      do_test (0, 0, 8 << i, SMALL_CHAR);
+      do_test (8 - i, 2 * i, 8 << i, SMALL_CHAR);
     }
 
   for (i = 1; i < 8; ++i)
     {
-      do_test (i, 2 * i, 8 << i, 127);
-      do_test (2 * i, i, 8 << i, 255);
-      do_test (i, i, 8 << i, 127);
-      do_test (i, i, 8 << i, 255);
+      do_test (i, 2 * i, 8 << i, SMALL_CHAR);
+      do_test (2 * i, i, 8 << i, BIG_CHAR);
+      do_test (i, i, 8 << i, SMALL_CHAR);
+      do_test (i, i, 8 << i, BIG_CHAR);
     }
 
   do_random_tests ();

Modified: trunk/libc/string/test-strrchr.c
==============================================================================
--- trunk/libc/string/test-strrchr.c (original)
+++ trunk/libc/string/test-strrchr.c Thu Dec 22 19:27:39 2011
@@ -1,7 +1,9 @@
-/* Test and measure strrchr functions.
-   Copyright (C) 1999, 2002, 2003, 2005 Free Software Foundation, Inc.
+/* Test and measure STRCHR functions.
+   Copyright (C) 1999, 2002, 2003, 2005, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Jakub Jelinek <jakub@xxxxxxxxxx>, 1999.
+   Added wcsrrchr support by Liubov Dmitrieva <liubov.dmitrieva@xxxxxxxxx>,
+   2011.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -21,28 +23,45 @@
 #define TEST_MAIN
 #include "test-string.h"
 
-typedef char *(*proto_t) (const char *, int);
-char *simple_strrchr (const char *, int);
-
-IMPL (simple_strrchr, 0)
-IMPL (strrchr, 1)
-
-char *
-simple_strrchr (const char *s, int c)
-{
-  const char *ret = NULL;
+#ifdef WIDE
+# include <wchar.h>
+# define SIMPLE_STRRCHR simple_wcsrchr
+# define STRRCHR wcsrchr
+# define CHAR wchar_t
+# define UCHAR wchar_t
+# define BIG_CHAR WCHAR_MAX
+# define SMALL_CHAR 1273
+#else
+# define SIMPLE_STRRCHR simple_strrchr
+# define STRRCHR strrchr
+# define CHAR char
+# define UCHAR unsigned char
+# define BIG_CHAR CHAR_MAX
+# define SMALL_CHAR 127
+#endif
+
+typedef CHAR *(*proto_t) (const CHAR *, int);
+CHAR *SIMPLE_STRRCHR (const CHAR *, int);
+
+IMPL (SIMPLE_STRRCHR, 0)
+IMPL (STRRCHR, 1)
+
+CHAR *
+SIMPLE_STRRCHR (const CHAR *s, int c)
+{
+  const CHAR *ret = NULL;
 
   for (; *s != '\0'; ++s)
-    if (*s == (char) c)
+    if (*s == (CHAR) c)
       ret = s;
 
-  return (char *) (c == '\0' ? s : ret);
+  return (CHAR *) (c == '\0' ? s : ret);
 }
 
 static void
-do_one_test (impl_t *impl, const char *s, int c, char *exp_res)
-{
-  char *res = CALL (impl, s, c);
+do_one_test (impl_t *impl, const CHAR *s, int c, CHAR *exp_res)
+{
+  CHAR *res = CALL (impl, s, c);
   if (res != exp_res)
     {
       error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -72,41 +91,45 @@
 
 static void
 do_test (size_t align, size_t pos, size_t len, int seek_char, int max_char)
+/* For wcsrchr: align here means align not in bytes,
+   but in wchar_ts, in bytes it will equal to align * (sizeof (wchar_t))
+   len for wcschr here isn't in bytes but it's number of wchar_t symbols.  */
 {
   size_t i;
-  char *result;
+  CHAR *result;
+  CHAR *buf = (CHAR *) buf1;
 
   align &= 7;
-  if (align + len >= page_size)
+  if ( (align + len) * sizeof(CHAR) >= page_size)
     return;
 
   for (i = 0; i < len; ++i)
     {
-      buf1[align + i] = random () & max_char;
-      if (!buf1[align + i])
-	buf1[align + i] = random () & max_char;
-      if (!buf1[align + i])
-        buf1[align + i] = 1;
-      if ((i > pos || pos >= len) && buf1[align + i] == seek_char)
-	buf1[align + i] = seek_char + 10 + (random () & 15);
-    }
-  buf1[align + len] = 0;
+      buf[align + i] = (random () * random ()) & max_char;
+      if (!buf[align + i])
+	buf[align + i] = (random () * random ()) & max_char;
+      if (!buf[align + i])
+	buf[align + i] = 1;
+      if ((i > pos || pos >= len) && buf[align + i] == seek_char)
+	buf[align + i] = seek_char + 10 + (random () & 15);
+    }
+  buf[align + len] = 0;
 
   if (pos < len)
     {
-      buf1[align + pos] = seek_char;
-      result = (char *) (buf1 + align + pos);
+      buf[align + pos] = seek_char;
+      result = (CHAR *) (buf + align + pos);
     }
   else if (seek_char == 0)
-    result = (char *) (buf1 + align + len);
+    result = (CHAR *) (buf + align + len);
   else
     result = NULL;
 
   if (HP_TIMING_AVAIL)
-    printf ("Length %4zd, alignment %2zd:", pos, align);
+    printf ("Length %4zd, alignment in bytes %2zd:", pos, align * sizeof(CHAR));
 
   FOR_EACH_IMPL (impl, 0)
-    do_one_test (impl, (char *) (buf1 + align), seek_char, result);
+    do_one_test (impl, (CHAR *) (buf + align), seek_char, result);
 
   if (HP_TIMING_AVAIL)
     putchar ('\n');
@@ -117,20 +140,27 @@
 {
   size_t i, j, n, align, pos, len;
   int seek_char;
-  char *result;
-  unsigned char *p = buf1 + page_size - 512;
+  CHAR *result;
+  UCHAR *p = (UCHAR *) (buf1 + page_size) - 512;
 
   for (n = 0; n < ITERATIONS; n++)
     {
-      align = random () & 15;
+      align = random () & (63 / sizeof(CHAR));
+      /* For wcsrchr: align here means align not in bytes, but in wchar_ts,
+	 in bytes it will equal to align * (sizeof (wchar_t)).
+	 For strrchr we need to check all alignments from 0 to 63 since
+	 some assembly implementations have separate prolog for alignments
+	 more 48. */
       pos = random () & 511;
       if (pos + align >= 511)
 	pos = 510 - align - (random () & 7);
       len = random () & 511;
+      /* len for wcschr here isn't in bytes but it's number of wchar_t
+	 symbols.  */
       if (pos >= len)
 	len = pos + (random () & 7);
       if (len + align >= 512)
-        len = 511 - align - (random () & 7);
+	len = 511 - align - (random () & 7);
       seek_char = random () & 255;
       if (seek_char && pos == len)
 	{
@@ -141,7 +171,7 @@
 	}
       j = len + align + 64;
       if (j > 512)
-        j = 512;
+	j = 512;
 
       for (i = 0; i < j; i++)
 	{
@@ -165,18 +195,18 @@
 	}
 
       if (pos <= len)
-	result = (char *) (p + pos + align);
+	result = (CHAR *) (p + pos + align);
       else if (seek_char == 0)
-        result = (char *) (p + len + align);
+	result = (CHAR *) (p + len + align);
       else
 	result = NULL;
 
       FOR_EACH_IMPL (impl, 1)
-	if (CALL (impl, (char *) (p + align), seek_char) != result)
+	if (CALL (impl, (CHAR *) (p + align), seek_char) != result)
 	  {
 	    error (0, 0, "Iteration %zd - wrong result in function %s (%zd, %d, %zd, %zd) %p != %p, p %p",
 		   n, impl->name, align, seek_char, len, pos,
-		   CALL (impl, (char *) (p + align), seek_char), result, p);
+		   CALL (impl, (CHAR *) (p + align), seek_char), result, p);
 	    ret = 1;
 	  }
     }
@@ -196,38 +226,38 @@
 
   for (i = 1; i < 8; ++i)
     {
-      do_test (0, 16 << i, 2048, 23, 127);
-      do_test (i, 16 << i, 2048, 23, 127);
-    }
-
-  for (i = 1; i < 8; ++i)
-    {
-      do_test (i, 64, 256, 23, 127);
-      do_test (i, 64, 256, 23, 255);
+      do_test (0, 16 << i, 2048, 23, SMALL_CHAR);
+      do_test (i, 16 << i, 2048, 23, SMALL_CHAR);
+    }
+
+  for (i = 1; i < 8; ++i)
+    {
+      do_test (i, 64, 256, 23, SMALL_CHAR);
+      do_test (i, 64, 256, 23, BIG_CHAR);
     }
 
   for (i = 0; i < 32; ++i)
     {
-      do_test (0, i, i + 1, 23, 127);
-      do_test (0, i, i + 1, 23, 255);
-    }
-
-  for (i = 1; i < 8; ++i)
-    {
-      do_test (0, 16 << i, 2048, 0, 127);
-      do_test (i, 16 << i, 2048, 0, 127);
-    }
-
-  for (i = 1; i < 8; ++i)
-    {
-      do_test (i, 64, 256, 0, 127);
-      do_test (i, 64, 256, 0, 255);
+      do_test (0, i, i + 1, 23, SMALL_CHAR);
+      do_test (0, i, i + 1, 23, BIG_CHAR);
+    }
+
+  for (i = 1; i < 8; ++i)
+    {
+      do_test (0, 16 << i, 2048, 0, SMALL_CHAR);
+      do_test (i, 16 << i, 2048, 0, SMALL_CHAR);
+    }
+
+  for (i = 1; i < 8; ++i)
+    {
+      do_test (i, 64, 256, 0, SMALL_CHAR);
+      do_test (i, 64, 256, 0, BIG_CHAR);
     }
 
   for (i = 0; i < 32; ++i)
     {
-      do_test (0, i, i + 1, 0, 127);
-      do_test (0, i, i + 1, 0, 255);
+      do_test (0, i, i + 1, 0, SMALL_CHAR);
+      do_test (0, i, i + 1, 0, BIG_CHAR);
     }
 
   do_random_tests ();

Modified: trunk/libc/sunrpc/clnt_tcp.c
==============================================================================
--- trunk/libc/sunrpc/clnt_tcp.c (original)
+++ trunk/libc/sunrpc/clnt_tcp.c Thu Dec 22 19:27:39 2011
@@ -364,6 +364,8 @@
 clnttcp_control (CLIENT *cl, int request, char *info)
 {
   struct ct_data *ct = (struct ct_data *) cl->cl_private;
+  u_long *mcall_ptr;
+  u_long ul;
 
 
   switch (request)
@@ -393,11 +395,24 @@
        * first element in the call structure *.
        * This will get the xid of the PREVIOUS call
        */
+#if 0
+      /* This original code has aliasing issues.  */
       *(u_long *)info = ntohl (*(u_long *)ct->ct_mcall);
+#else
+      mcall_ptr = (u_long *)ct->ct_mcall;
+      ul = ntohl (*mcall_ptr);
+      memcpy (info, &ul, sizeof (ul));
+#endif
       break;
     case CLSET_XID:
       /* This will set the xid of the NEXT call */
+#if 0
+      /* This original code has aliasing issues.  */
       *(u_long *)ct->ct_mcall =  htonl (*(u_long *)info - 1);
+#else
+      ul = ntohl (*(u_long *)info - 1);
+      memcpy (ct->ct_mcall, &ul, sizeof (ul));
+#endif
       /* decrement by 1 as clnttcp_call() increments once */
       break;
     case CLGET_VERS:

Modified: trunk/libc/sunrpc/clnt_udp.c
==============================================================================
--- trunk/libc/sunrpc/clnt_udp.c (original)
+++ trunk/libc/sunrpc/clnt_udp.c Thu Dec 22 19:27:39 2011
@@ -473,8 +473,7 @@
       /* see if reply transaction id matches sent id.
 	Don't do this if we only wait for a replay */
       if (xargs != NULL
-	  && (*((u_int32_t *) (cu->cu_inbuf))
-	      != *((u_int32_t *) (cu->cu_outbuf))))
+	  && memcmp (cu->cu_inbuf, cu->cu_outbuf, sizeof (u_int32_t)) != 0)
 	continue;
       /* we now assume we have the proper reply */
       break;

Modified: trunk/libc/sunrpc/clnt_unix.c
==============================================================================
--- trunk/libc/sunrpc/clnt_unix.c (original)
+++ trunk/libc/sunrpc/clnt_unix.c Thu Dec 22 19:27:39 2011
@@ -338,7 +338,8 @@
 clntunix_control (CLIENT *cl, int request, char *info)
 {
   struct ct_data *ct = (struct ct_data *) cl->cl_private;
-
+  u_long *mcall_ptr;
+  u_long ul;
 
   switch (request)
     {
@@ -366,11 +367,24 @@
        * first element in the call structure *.
        * This will get the xid of the PREVIOUS call
        */
+#if 0
+      /* This original code has aliasing issues.  */
       *(u_long *) info = ntohl (*(u_long *)ct->ct_mcall);
+#else
+      mcall_ptr = (u_long *)ct->ct_mcall;
+      ul = ntohl (*mcall_ptr);
+      memcpy (info, &ul, sizeof (ul));
+#endif
       break;
     case CLSET_XID:
       /* This will set the xid of the NEXT call */
+#if 0
+      /* This original code has aliasing issues.  */
       *(u_long *) ct->ct_mcall =  htonl (*(u_long *)info - 1);
+#else
+      ul = ntohl (*(u_long *)info - 1);
+      memcpy (ct->ct_mcall, &ul, sizeof (ul));
+#endif
       /* decrement by 1 as clntunix_call() increments once */
       break;
     case CLGET_VERS:

Modified: trunk/libc/sysdeps/generic/dl-hash.h
==============================================================================
--- trunk/libc/sysdeps/generic/dl-hash.h (original)
+++ trunk/libc/sysdeps/generic/dl-hash.h Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Compute hash value for given string according to ELF standard.
-   Copyright (C) 1995,1996,1997,1998,2003,2005 Free Software Foundation, Inc.
+   Copyright (C) 1995-1998,2003,2005,2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -25,46 +25,47 @@
    first five operations no overflow is possible so we optimized it a
    bit.  */
 static unsigned int
+__attribute__ ((unused))
 _dl_elf_hash (const char *name_arg)
 {
   const unsigned char *name = (const unsigned char *) name_arg;
-  unsigned long int hash = 0;
-  if (*name != '\0')
+  unsigned long int hash = *name;
+  if (hash != 0 && name[1] != '\0')
     {
-      hash = *name++;
-      if (*name != '\0')
+      hash = (hash << 4) + name[1];
+      if (name[2] != '\0')
 	{
-	  hash = (hash << 4) + *name++;
-	  if (*name != '\0')
+	  hash = (hash << 4) + name[2];
+	  if (name[3] != '\0')
 	    {
-	      hash = (hash << 4) + *name++;
-	      if (*name != '\0')
+	      hash = (hash << 4) + name[3];
+	      if (name[4] != '\0')
 		{
-		  hash = (hash << 4) + *name++;
-		  if (*name != '\0')
+		  hash = (hash << 4) + name[4];
+		  name += 5;
+		  while (*name != '\0')
 		    {
+		      unsigned long int hi;
 		      hash = (hash << 4) + *name++;
-		      while (*name != '\0')
-			{
-			  unsigned long int hi;
-			  hash = (hash << 4) + *name++;
-			  hi = hash & 0xf0000000;
+		      hi = hash & 0xf0000000;
 
-			  /* The algorithm specified in the ELF ABI is as
-			     follows:
+		      /* The algorithm specified in the ELF ABI is as
+			 follows:
 
-			     if (hi != 0)
-			       hash ^= hi >> 24;
+			 if (hi != 0)
+			   hash ^= hi >> 24;
 
-			     hash &= ~hi;
+			 hash &= ~hi;
 
-			     But the following is equivalent and a lot
-			     faster, especially on modern processors.  */
+			 But the following is equivalent and a lot
+			 faster, especially on modern processors.  */
 
-			  hash ^= hi;
-			  hash ^= hi >> 24;
-			}
+		      hash ^= hi >> 24;
 		    }
+
+		  /* Second part of the modified formula.  This
+		     operation can be lifted outside the loop.  */
+		  hash &= 0x0fffffff;
 		}
 	    }
 	}

Modified: trunk/libc/sysdeps/i386/i686/multiarch/Makefile
==============================================================================
--- trunk/libc/sysdeps/i386/i686/multiarch/Makefile (original)
+++ trunk/libc/sysdeps/i386/i686/multiarch/Makefile Thu Dec 22 19:27:39 2011
@@ -37,7 +37,8 @@
 
 ifeq ($(subdir),wcsmbs)
 sysdep_routines += wcscmp-sse2 wcscmp-c wcslen-sse2 wcslen-c \
-		   wmemcmp-sse4 wmemcmp-ssse3 wmemcmp-c
+		   wmemcmp-sse4 wmemcmp-ssse3 wmemcmp-c wcschr-sse2 \
+		   wcschr-c wcsrchr-sse2 wcsrchr-c wcscpy-ssse3 wcscpy-c
 endif
 
 ifeq (mathyes,$(subdir)$(config-cflags-avx))

Modified: trunk/libc/sysdeps/powerpc/Makefile
==============================================================================
--- trunk/libc/sysdeps/powerpc/Makefile (original)
+++ trunk/libc/sysdeps/powerpc/Makefile Thu Dec 22 19:27:39 2011
@@ -23,4 +23,6 @@
 ifeq ($(subdir),csu)
 # get offset to rtld_global._dl_hwcap
 gen-as-const-headers += rtld-global-offsets.sym
+# get offset to __locale_struct.__ctype_tolower
+gen-as-const-headers += locale-defines.sym
 endif

Modified: trunk/libc/sysdeps/powerpc/fpu/e_hypot.c
==============================================================================
--- trunk/libc/sysdeps/powerpc/fpu/e_hypot.c (original)
+++ trunk/libc/sysdeps/powerpc/fpu/e_hypot.c Thu Dec 22 19:27:39 2011
@@ -26,7 +26,7 @@
 static const double two600  = 4.149515568880993e+180;
 static const double two1022 = 4.49423283715579e+307;
 static const double twoM500 = 3.054936363499605e-151;
-static const double twoM600 = 4.616489308892868e-128;
+static const double twoM600 = 2.4099198651028841e-181;
 static const double pdnum   = 2.225073858507201e-308;
 
 /* __ieee754_hypot(x,y)

Modified: trunk/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/a2/memcpy.S Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Optimized memcpy implementation for PowerPC A2.
-   Copyright (C) 2010 Free Software Foundation, Inc.
+   Copyright (C) 2010, 2011 Free Software Foundation, Inc.
    Contributed by Michael Brutman <brutman@xxxxxxxxxx>.
    This file is part of the GNU C Library.
 
@@ -113,11 +113,9 @@
 	mflr    r0
 /* Establishes GOT addressability so we can load __cache_line_size
    from static. This value was set from the aux vector during startup.  */
-	bcl     20,31,1f
-1:
-	mflr    r9
-	addis   r9,r9,__cache_line_size-1b@ha
-	lwz     r9,__cache_line_size-1b@l(r9)
+	SETUP_GOT_ACCESS(r9,got_label)
+	addis   r9,r9,__cache_line_size-got_label@ha
+	lwz     r9,__cache_line_size-got_label@l(r9)
 	mtlr    r0
 #else
 /* Load __cache_line_size from static. This value was set from the

Modified: trunk/libc/sysdeps/powerpc/powerpc32/dl-start.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/dl-start.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/dl-start.S Thu Dec 22 19:27:39 2011
@@ -1,5 +1,6 @@
 /* Machine-dependent ELF startup code.  PowerPC version.
-   Copyright (C) 1995-2000, 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
+   Copyright (C) 1995-2000, 2002, 2004, 2005, 2006, 2011
+	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,10 +48,9 @@
    passed by value!).  */
 
 /*  Put our GOT pointer in r31, */
-	bcl	20,31,1f
-1:	mflr	r31
-	addis	r31,r31,_GLOBAL_OFFSET_TABLE_-1b@ha
-	addi	r31,r31,_GLOBAL_OFFSET_TABLE_-1b@l
+	SETUP_GOT_ACCESS(r31,got_label)
+	addis	r31,r31,_GLOBAL_OFFSET_TABLE_-got_label@ha
+	addi	r31,r31,_GLOBAL_OFFSET_TABLE_-got_label@l
 /*  the address of _start in r30, */
 	mr	r30,r3
 /*  &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28.  */

Modified: trunk/libc/sysdeps/powerpc/powerpc32/elf/start.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/elf/start.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/elf/start.S Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Startup code for programs linked with GNU libc.
-   Copyright (C) 1998,1999,2000,2001,2002,2003,2009
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2009, 2011
    Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -59,10 +59,8 @@
  /* Set up an initial stack frame, and clear the LR.  */
 	clrrwi	r1,r1,4
 #ifdef PIC
-	bcl	20,31,L(branch)
-L(branch):
+	SETUP_GOT_ACCESS(r13,got_label)
 	li	r0,0
-	mflr	r13
 #else
 	li	r0,0
 #endif
@@ -73,10 +71,10 @@
     start_addresses in r8.  Also load the GOT pointer so that new PLT
     calls work, like the one to __libc_start_main.  */
 #ifdef PIC
-	addis	r30,r13,_GLOBAL_OFFSET_TABLE_-L(branch)@ha
-	addis	r8,r13,L(start_addresses)-L(branch)@ha
-	addi	r30,r30,_GLOBAL_OFFSET_TABLE_-L(branch)@l
-	lwzu	r13,L(start_addresses)-L(branch)@l(r8)
+	addis	r30,r13,_GLOBAL_OFFSET_TABLE_-got_label@ha
+	addis	r8,r13,L(start_addresses)-got_label@ha
+	addi	r30,r30,_GLOBAL_OFFSET_TABLE_-got_label@l
+	lwzu	r13, L(start_addresses)-got_label@l(r8)
 #else
 	lis	r8,L(start_addresses)@ha
 	lwzu	r13,L(start_addresses)@l(r8)

Modified: trunk/libc/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/fpu/__longjmp-common.S Thu Dec 22 19:27:39 2011
@@ -1,5 +1,6 @@
 /* longjmp for PowerPC.
-   Copyright (C) 1995-99, 2000, 2003-2006, 2009 Free Software Foundation, Inc.
+   Copyright (C) 1995-99, 2000, 2003-2006, 2009, 2011
+	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
@@ -34,10 +35,9 @@
 # ifdef PIC
 	mflr    r6
 	cfi_register (lr,r6)
-	bcl	20,31,1f
-1:	mflr	r5
-	addis	r5,r5,_GLOBAL_OFFSET_TABLE_-1b@ha
-	addi	r5,r5,_GLOBAL_OFFSET_TABLE_-1b@l
+	SETUP_GOT_ACCESS(r5,got_label)
+	addis	r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@ha
+	addi	r5,r5,_GLOBAL_OFFSET_TABLE_-got_label@l
 #  ifdef SHARED
 	lwz     r5,_rtld_global_ro@got(r5)
 	mtlr    r6

Modified: trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceil.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceil.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceil.S Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* ceil function.  PowerPC32 version.
-   Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006, 2011 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
@@ -31,10 +31,9 @@
 #ifdef SHARED
 	mflr	r11
 	cfi_register(lr,r11)
-	bcl	20,31,1f
-1:	mflr	r9
-	addis	r9,r9,.LC0-1b@ha
-	lfs	fp13,.LC0-1b@l(r9)
+	SETUP_GOT_ACCESS(r9,got_label)
+	addis	r9,r9,.LC0-got_label@ha
+	lfs	fp13,.LC0-got_label@l(r9)
 	mtlr	r11
 	cfi_same_value (lr)
 #else

Modified: trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_ceilf.S Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* float ceil function.  PowerPC32 version.
-   Copyright (C) 2004, 2006 Free Software Foundation, Inc.
+   Copyright (C) 2004, 2006, 2011 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
@@ -30,10 +30,9 @@
 #ifdef SHARED
 	mflr	r11
 	cfi_register(lr,r11)
-	bcl	20,31,1f
-1:	mflr	r9
-	addis	r9,r9,.LC0-1b@ha
-	lfs	fp13,.LC0-1b@l(r9)
+	SETUP_GOT_ACCESS(r9,got_label)
+	addis	r9,r9,.LC0-got_label@ha
+	lfs	fp13,.LC0-got_label@l(r9)
 	mtlr	r11
 	cfi_same_value (lr)
 #else

Modified: trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_floor.S
==============================================================================
--- trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_floor.S (original)
+++ trunk/libc/sysdeps/powerpc/powerpc32/fpu/s_floor.S Thu Dec 22 19:27:39 2011
@@ -1,5 +1,5 @@
 /* Floor function.  PowerPC32 version.
-   Copyright (C) 2004, 2006 Free Software Foundation, Inc.

[... 1710 lines stripped ...]
_______________________________________________
Commits mailing list
Commits@xxxxxxxxxx
http://eglibc.org/cgi-bin/mailman/listinfo/commits