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

[Commits] r18549 - in /fsf/trunk/libc: ./ elf/ manual/ nptl/ nptl/sysdeps/pthread/ nptl/sysdeps/unix/sysv/linux/x86_64/bits/ nptl/sysd...



Author: eglibc
Date: Tue May 15 00:01:54 2012
New Revision: 18549

Log:
Import glibc-mainline for 2012-05-15

Added:
    fsf/trunk/libc/nptl/sysdeps/x86_64/64/
    fsf/trunk/libc/nptl/sysdeps/x86_64/64/shlib-versions
    fsf/trunk/libc/nptl/sysdeps/x86_64/x32/shlib-versions
    fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/
    fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/Makefile
    fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S
    fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S
    fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf.c
    fsf/trunk/libc/sysdeps/x86_64/64/
    fsf/trunk/libc/sysdeps/x86_64/64/shlib-versions
    fsf/trunk/libc/sysdeps/x86_64/x32/
    fsf/trunk/libc/sysdeps/x86_64/x32/dl-machine.h
    fsf/trunk/libc/sysdeps/x86_64/x32/shlib-versions
Removed:
    fsf/trunk/libc/manual/.gitignore
Modified:
    fsf/trunk/libc/ChangeLog
    fsf/trunk/libc/NEWS
    fsf/trunk/libc/elf/rtld.c
    fsf/trunk/libc/manual/Makefile
    fsf/trunk/libc/manual/install.texi
    fsf/trunk/libc/manual/libc-texinfo.sh
    fsf/trunk/libc/manual/string.texi
    fsf/trunk/libc/nptl/ChangeLog
    fsf/trunk/libc/nptl/shlib-versions
    fsf/trunk/libc/nptl/sysdeps/pthread/pthread.h
    fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
    fsf/trunk/libc/shlib-versions
    fsf/trunk/libc/sysdeps/i386/fpu/bits/mathinline.h
    fsf/trunk/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/check_pf.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/configure
    fsf/trunk/libc/sysdeps/unix/sysv/linux/configure.in
    fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/getcwd.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/chown.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/fchownat.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sigaction.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/if_index.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/ifreq.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/kernel-features.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/fchownat.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/pread.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/pread64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/ptsname.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/pwrite.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/pwrite64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/pread.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/pread64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/pwrite.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sh/pwrite64.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sigaction.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sigpending.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sigprocmask.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sigsuspend.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/syslog.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/testrtsig.h
    fsf/trunk/libc/sysdeps/unix/sysv/linux/ttyname.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/ttyname_r.c
    fsf/trunk/libc/sysdeps/unix/sysv/linux/x86_64/sysdep.h
    fsf/trunk/libc/sysdeps/x86_64/dl-machine.h
    fsf/trunk/libc/sysdeps/x86_64/sysdep.h

Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Tue May 15 00:01:54 2012
@@ -1,3 +1,276 @@
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* shlib-versions: Move x86_64-.*-linux.* entries to ...
+	* sysdeps/x86_64/64/shlib-versions: Here.  New file.
+	* sysdeps/x86_64/x32/shlib-versions: New file.
+
+2012-05-14  Roland McGrath  <roland@xxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/dl-osinfo.h (dl_fatal): Function removed.
+	* elf/rtld.c (dl_main) [DL_SYSDEP_OSCHECK]:
+	Use _dl_fatal_printf instead.
+
+2012-05-14  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/configure.in (minimum_kernel): Always
+	set if not set by the user.  Do not allow for being unset.
+	* sysdeps/unix/sysv/linux/configure: Regenerated.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/x86_64/dl-machine.h (elf_machine_load_address): Remove
+	the `q' suffix from lea and replace .quad with ASM_ADDR.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/x86_64/sysdep.h (PTR_MANGLE): Remove
+	the `q' suffix from xor/rol instructions.  Use $2*LP_SIZE+1
+	instead of $17.
+	(PTR_DEMANGLE): Likewise.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/x86_64/sysdep.h (LP_SIZE): New macro.
+	(LP_OP): Likewise.
+	(ASM_ADDR): Likewise.
+	(RAX_LP): Likewise.
+	(RBP_LP): Likewise.
+	(RBX_LP): Likewise.
+	(RCX_LP): Likewise.
+	(RDI_LP): Likewise.
+	(RSI_LP): Likewise.
+	(RSP_LP): Likewise.
+	(R8_LP): Likewise.
+	(R9_LP): Likewise.
+	(R10_LP): Likewise.
+	(R10_LP): Likewise.
+	(R11_LP): Likewise.
+	(R12_LP): Likewise.
+	(R13_LP): Likewise.
+	(R14_LP): Likewise.
+	(R15_LP): Likewise.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/x86_64/x32/dl-machine.h: New file.
+
+2012-05-14  Andreas Jaeger  <aj@xxxxxxx>
+
+	* manual/Makefile (subdir): Remove export of subdir.
+	(all): Remove target.
+	(.PHONY): Remove all from list.
+	(mkinstalldirs): Remove.
+	(.PHONY): Remove installdirs from list.
+	($(inst_infodir)/libc.info): Use make-target-directory.
+	(installdirs): Remove.
+	(subdir_%): Remove.
+	(glibc-targets): Remove.
+	(lib): Remove.
+	(stubs): Remove.
+	($(objpfx)stubs ../po/manual.pot): Remove.
+	($(objpfx)stamp%): Remove.
+	(make-target-directory): Remove.
+	(subdir_install): Remove.
+	(routines): Remove.
+	(aux): Remove.
+	(sources): Remove.
+	(objects): Remove.
+	(headers): Remove.
+
+	[BZ #13750]
+	* manual/.gitignore: Remove, it's not needed anymore.
+	* manual/libc-texinfo.sh: Pass OUTDIR as extra argument, create
+	all files in it.
+	* manual/Makefile (dvi, pdf, info, html): Depend on files in build
+	directory.
+	(texis): Renamed to $(objpfx)texis.
+	(texis-path): New, contains path to generated files.
+	(chapters.%): Use texis-path for complete path, add extra argument
+	libc-texinfo.sh.
+	(libc.dvi, libc.pdf, libc.info, libc.pdf): Add $(objfpx) as prefix.
+	(libc/index.html, summary.texi): Add $(objpfx) as prefix.
+	(summary,texi, stamp-summary): Use complete path of
+	files. Generate files in build dir.
+	(dir-add.texi): Build in build dir.
+	(libm-err.texi,stamp-libm-err): Likewise.
+	(version.texi, stamp-version): Likewise.
+	(.%c.texi): Likewise.
+	(%.info,%.dvi,%.pdf): Add $(objpfx) as prefix, build in build dir.
+	(mostlyclean): Remove target.
+	(realclean): Remove target.
+	(generated): Add new variable with contents from mostlyclean and
+	realclean, remove entries duplicated in	common-mostlyclean, add
+	stamp-libm-err and stamp-version.
+	(generated-dirs): Add libc directory.
+	($(inst_infodir)/libc.info): Install files from build dir.
+
+	* manual/install.texi (Configuring and compiling): Adjust since
+	the info files are not part of the tar ball anymore.
+
+2012-05-14  Andreas Jaeger  <aj@xxxxxxx>
+
+	* sysdeps/unix/sysv/linux/getcwd.c (__getcwd): Remove unused
+	variable.
+
+2012-05-14  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	[BZ #13717]
+	* sysdeps/unix/sysv/linux/configure.in (arch_minimum_kernel): Set
+	to 2.2.0 where earlier.
+	* sysdeps/unix/sysv/linux/configure: Regenerated.
+	* sysdeps/unix/sysv/linux/getcwd.c [!__ASSUME_GETCWD_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_GETCWD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/i386/chown.c [!__ASSUME_LCHOWN_SYSCALL]:
+	Remove conditional code.
+	[!__NR_lchown]: Likewise.
+	[__ASSUME_LCHOWN_SYSCALL]: Make code unconditional.
+	[__NR_lchown]: Likewise.
+	* sysdeps/unix/sysv/linux/i386/fchownat.c (fchownat): Remove
+	comment referencing __ASSUME_LCHOWN_SYSCALL.
+	* sysdeps/unix/sysv/linux/i386/sigaction.c
+	[!__ASSUME_REALTIME_SIGNALS]: Remove conditional code.
+	[__ASSUME_REALTIME_SIGNALS]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/if_index.c [!__ASSUME_SIOCGIFNAME]:
+	Remove conditional code.
+	[__ASSUME_SIOCGIFNAME ]: Make code unconditional.
+	(__protocol_available): Remove #if 0 code.
+	* sysdeps/unix/sysv/linux/ifreq.c [!__ASSUME_SIOCGIFNAME]: Remove
+	conditional code.
+	[__ASSUME_SIOCGIFNAME]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/kernel-features.h
+	(__ASSUME_GETCWD_SYSCALL): Don't define.
+	(__ASSUME_REALTIME_SIGNALS): Likewise.
+	(__ASSUME_PREAD_SYSCALL): Likewise.
+	(__ASSUME_PWRITE_SYSCALL): Likewise.
+	(__ASSUME_POLL_SYSCALL): Likewise.
+	(__ASSUME_LCHOWN_SYSCALL): Likewise.
+	(__ASSUME_SETRESUID_SYSCALL): Define for all kernel versions for
+	non-SPARC.
+	(__ASSUME_SIOCGIFNAME): Don't define.
+	(__ASSUME_MSG_NOSIGNAL): Likewise.
+	(__ASSUME_SENDFILE): Define unconditionally.
+	(__ASSUME_PROC_SELF_FD_SYMLINK): Don't define.
+	* sysdeps/unix/sysv/linux/poll.c [!__ASSUME_POLL_SYSCALL]: Remove
+	conditional code.
+	[__ASSUME_POLL_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/chown.c (__chown)
+	[!__ASSUME_LCHOWN_SYSCALL]: Remove conditional code.
+	(__chown) [__ASSUME_LCHOWN_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/fchownat.c (fchownat)
+	[!__ASSUME_LCHOWN_SYSCALL]: Remove conditional code.
+	(fchownat) [__ASSUME_LCHOWN_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c
+	[!__ASSUME_PREAD_SYSCALL]: Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c
+	[!__ASSUME_PREAD_SYSCALL]: Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c
+	[!__ASSUME_PWRITE_SYSCALL]: Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c
+	[!__ASSUME_PWRITE_SYSCALL]: Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/pread.c
+	[!__ASSUME_PREAD_SYSCALL]: Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/pread64.c
+	[!__ASSUME_PREAD_SYSCALL]: Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite.c
+	[!__ASSUME_PWRITE_SYSCALL]: Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/powerpc/powerpc64/pwrite64.c
+	[!__ASSUME_PWRITE_SYSCALL]: Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/pread.c [!__ASSUME_PREAD_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/pread64.c [!__ASSUME_PREAD_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/ptsname.c (__ptsname_internal)
+	[__LINUX_KERNEL_VERSION < 131443]: Remove conditional code.
+	* sysdeps/unix/sysv/linux/pwrite.c [!__ASSUME_PWRITE_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/pwrite64.c [!__ASSUME_PWRITE_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sh/pread.c [!__ASSUME_PREAD_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sh/pread64.c [!__ASSUME_PREAD_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_PREAD_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sh/pwrite.c [!__ASSUME_PWRITE_SYSCALL]:
+	Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sh/pwrite64.c
+	[!__ASSUME_PWRITE_SYSCALL]: Remove conditional code.
+	[__ASSUME_PWRITE_SYSCALL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sigaction.c
+	[!__ASSUME_REALTIME_SIGNALS]: Remove conditional code.
+	[__ASSUME_REALTIME_SIGNALS]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sigpending.c
+	[!__ASSUME_REALTIME_SIGNALS]: Remove conditional code.
+	[__ASSUME_REALTIME_SIGNALS]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sigprocmask.c
+	[!__ASSUME_REALTIME_SIGNALS]: Remove conditional code.
+	[__ASSUME_REALTIME_SIGNALS]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sigsuspend.c
+	[!__ASSUME_REALTIME_SIGNALS]: Remove conditional code.
+	[__ASSUME_REALTIME_SIGNALS]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/sparc/sparc32/sigaction.c
+	(__libc_missing_rt_sigs): Remove.
+	(__libc_sigaction) [__NR_rt_sigaction]: Make code unconditional.
+	(__libc_sigaction): Do not handle ENOSYS from rt_sigaction.
+	* sysdeps/unix/sysv/linux/syslog.c [!__ASSUME_MSG_NOSIGNAL]:
+	Remove conditional code.
+	[__ASSUME_MSG_NOSIGNAL]: Make code unconditional.
+	* sysdeps/unix/sysv/linux/testrtsig.h (kernel_has_rtsig): Always
+	return 1.
+	* sysdeps/unix/sysv/linux/ttyname.c (ttyname)
+	[!__ASSUME_PROC_SELF_FD_SYMLINK]: Remove conditional code.
+	* sysdeps/unix/sysv/linux/ttyname_r.c (__ttyname_r)
+	[!__ASSUME_PROC_SELF_FD_SYMLINK]: Likewise.
+
+2012-05-14  Andreas Jaeger  <aj@xxxxxxx>
+
+	* sysdeps/i386/fpu/bits/mathinline.h (__pow2): Remove,
+	it's not used in glibc.
+	(__coshm1): Likewise.
+	(__acosh1p): Likewise.
+	(__sgn): Likewise.
+
+	* manual/string.texi (Copying and Concatenation): Add missing
+	variable in concat example.
+	Reported by David C. Rankin <drankinatty@xxxxxxxxxxxxxxxxxx>.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	[BZ #14103]
+	* sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c (__logb): Replace
+	__builtin_clzl with __builtin_clzll.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	[BZ #14104]
+	* sysdeps/unix/sysv/linux/check_pf.c (cache): Use
+	libc_freeres_ptr.
+
+2012-05-14  Liubov Dmitrieva  <liubov.dmitrieva@xxxxxxxxx>
+
+	* sysdeps/i386/i686/fpu/multiarch/Makefile: New file.
+	* sysdeps/i386/i686fpu/multiarch/e_expf.c: New file.
+	* sysdeps/i386/i686fpu/multiarch/e_expf-ia32.S: New file.
+	* sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S: New file.
+
+2012-05-14  Mike Frysinger  <vapier@xxxxxxxxxx>
+
+	* NEWS: Update ia64 info.
+
 2012-05-12  Andreas Schwab  <schwab@xxxxxxxxxxxxxx>
 
 	* sysdeps/powerpc/memmove.c (MEMMOVE): Don't return a value if

Modified: fsf/trunk/libc/NEWS
==============================================================================
--- fsf/trunk/libc/NEWS (original)
+++ fsf/trunk/libc/NEWS Tue May 15 00:01:54 2012
@@ -18,14 +18,14 @@
   11494, 11521, 11837, 11959, 12047, 12340, 13058, 13525, 13526, 13527,
   13528, 13529, 13530, 13531, 13532, 13533, 13547, 13551, 13552, 13553,
   13555, 13559, 13563, 13566, 13583, 13592, 13618, 13637, 13656, 13658,
-  13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738, 13739, 13758,
-  13760, 13761, 13775, 13786, 13787, 13792, 13806, 13824, 13840, 13841,
-  13844, 13846, 13851, 13852, 13854, 13871, 13872, 13873, 13879, 13883,
-  13884, 13885, 13886, 13892, 13895, 13908, 13910, 13911, 13912, 13913,
-  13914, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13922, 13923,
-  13924, 13926, 13927, 13928, 13938, 13941, 13942, 13954, 13955, 13956,
-  13963, 13967, 13970, 13973, 13979, 13983, 14012, 14027, 14033, 14034,
-  14040, 14049, 14053, 14055, 14064, 14080, 14083
+  13673, 13691, 13695, 13704, 13705, 13706, 13726, 13738, 13739, 13750,
+  13758, 13760, 13761, 13775, 13786, 13787, 13792, 13806, 13824, 13840,
+  13841, 13844, 13846, 13851, 13852, 13854, 13871, 13872, 13873, 13879,
+  13883, 13884, 13885, 13886, 13892, 13895, 13908, 13910, 13911, 13912,
+  13913, 13914, 13915, 13916, 13917, 13918, 13919, 13920, 13921, 13922,
+  13923, 13924, 13926, 13927, 13928, 13938, 13941, 13942, 13954, 13955,
+  13956, 13963, 13967, 13970, 13973, 13979, 13983, 14012, 14027, 14033,
+  14034, 14040, 14049, 14053, 14055, 14064, 14080, 14083, 14103, 14104
 
 * ISO C11 support:
 
@@ -48,7 +48,7 @@
 
   Implemented by Ulrich Drepper.
 
-* Support for the IA-64 is removed and could live in ports.
+* Support for the IA-64 has been moved to ports.
 
 * Remove support for anything but ELF binary format
 
@@ -63,6 +63,10 @@
   version 2.14.  This option will be removed at some time in the future
   after the TI-RPC library becomes fully sufficient for the needs of
   existing applications.
+
+* Compatibility code for Linux kernel versions before 2.2 has been removed.
+  Note that glibc is not expected to work with any Linux kernel version
+  before 2.6.
 
 Version 2.15
 
@@ -989,68 +993,6 @@
   Masahide Washizawa.
 
 * IA-64 port by Jes Sorensen and HJ Lu.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Compiling the GNU C Library for Linux/ia64
-******************************************
-
-   Please refer to the file INSTALL in the same directory as you found
-this file for general information about configuring and compiling
-glibc.
-
-   For general inquiries about glibc under Linux/ia64 please use the
-following mailing list linux-ia64@xxxxxxxxxxxxx or one of the relevant
-glibc mailing lists.
-
-Recommended Tools for Compilation
-=================================
-
-   In order for glibc-2.2 to build correctly on the ia64 you need at
-least the following versions of the GNU tools (the :
-
-   * The Cygnus toolchain snapshot for the ia64 as of August 4
-     including the provided set of patches.  It is however recommend
-     you use the October 24 toolchain snapshot or a more recent version.
-
-   OR alternatively you can try the following (the Cygnus toolchain is
-   the recommended solution):
-
-   * GCC and binutils, GAS and GNU LD out of CVS from
-     sources.redhat.com as of August 28, 2000 or later.  The CVS tree
-     may require special patches to work properly on the ia64.
-
-Configuring and compiling GNU Libc for Linux/ia64
-=================================================
-
-   The library requires Linux kernel version 2.4.0-test4-000728 or
-later to funtion properly. Besides that it support for debug libraries
-is currently untested. Hence the following options
-are required for configuring the library:
-
-   --disable-debug --enable-kernel=2.4.0
-
-   It is also important that you make sure the library picks up the
-appropriate kernel header files, if you do not have recent enough
-kernel headers in /usr/src/linux/include, you should use the
---with-headers=<path> option to specify the location.
-
-   As an example I personally use the following options to configure
-the library:
-
-   --disable-debug
-   --disable-cvs
-   --enable-kernel=2.4.0
-   --host=ia64-linux
-   --enable-add-ons=yes
-   --prefix=/usr
-   --with-headers=/home/jes/linux/include
-
-
-Good luck
-
-Jes Sorensen <jes@xxxxxxxxxxxxx>,
-November 14th, 2000
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 Version 2.1.3
 

Modified: fsf/trunk/libc/elf/rtld.c
==============================================================================
--- fsf/trunk/libc/elf/rtld.c (original)
+++ fsf/trunk/libc/elf/rtld.c Tue May 15 00:01:54 2012
@@ -1432,7 +1432,7 @@
 #endif
 
 #ifdef DL_SYSDEP_OSCHECK
-  DL_SYSDEP_OSCHECK (dl_fatal);
+  DL_SYSDEP_OSCHECK (_dl_fatal_printf);
 #endif
 
   /* Initialize the data structures for the search paths for shared

Removed: fsf/trunk/libc/manual/.gitignore
==============================================================================
--- fsf/trunk/libc/manual/.gitignore (original)
+++ fsf/trunk/libc/manual/.gitignore (removed)
@@ -1,30 +1,0 @@
-*.aux
-*.c.texi
-*.cp
-*.cps
-*.dvi*
-*.fn
-*.fns
-*.info*
-*.ky
-*.kys
-*.log
-*.pdf
-*.pg
-*.pgs
-*.ps
-*.tmp
-*.toc
-*.tp
-*.tps
-*.vr
-*.vrs
-chapters.texi
-dir-add.texi
-dir-add.texinfo
-libm-err.texi
-stamp-*
-summary.texi
-texis
-top-menu.texi
-version.texi

Modified: fsf/trunk/libc/manual/Makefile
==============================================================================
--- fsf/trunk/libc/manual/Makefile (original)
+++ fsf/trunk/libc/manual/Makefile Tue May 15 00:01:54 2012
@@ -19,28 +19,24 @@
 # Makefile for the GNU C Library manual.
 
 subdir := manual
-export subdir := $(subdir)
 
 # Allow override
 INSTALL_INFO = install-info
 
-.PHONY: all dvi pdf info html
-all: dvi
-dvi: libc.dvi
-pdf: libc.pdf
+.PHONY: dvi pdf info html
 
 # Get glibc's configuration info.
 include ../Makeconfig
+
+dvi: $(objpfx)libc.dvi
+pdf: $(objpfx)libc.pdf
 
 TEXI2DVI = texi2dvi
 TEXI2PDF = texi2dvi --pdf
 
 ifneq ($(strip $(MAKEINFO)),:)
-all: info
-info: libc.info
+info: $(objpfx)libc.info
 endif
-
-mkinstalldirs = $(..)scripts/mkinstalldirs
 
 chapters = $(addsuffix .texi, \
 		       intro errno memory ctype string charset locale	\
@@ -52,8 +48,8 @@
 appendices = lang.texi header.texi install.texi maint.texi contrib.texi
 licenses = freemanuals.texi lgpl-2.1.texi fdl-1.3.texi
 
--include texis
-texis: texis.awk $(chapters) $(add-chapters) $(appendices) $(licenses)
+-include $(objpfx)texis
+$(objpfx)texis: texis.awk $(chapters) $(add-chapters) $(appendices) $(licenses)
 	$(AWK) -f $^ > $@.T
 	mv -f $@.T $@
 
@@ -61,34 +57,45 @@
 examples = $(filter-out $(foreach d, $(add-ons), ../$d/%.c.texi), \
 			$(filter %.c.texi, $(texis)))
 
-# Kludge: implicit rule so Make knows the one command does it all.
-chapters.% top-menu.%: libc-texinfo.sh $(texis) Makefile
-	AWK=$(AWK) $(SHELL) $< '$(chapters)' \
-			       '$(add-chapters)' \
-			       '$(appendices) $(licenses)'
-
 # Generated files directly included from libc.texinfo.
 libc-texi-generated = chapters.texi top-menu.texi dir-add.texi \
 		      libm-err.texi version.texi
 
-libc.dvi libc.pdf libc.info: $(libc-texi-generated)
-libc.dvi libc.pdf: texinfo.tex
+# Add path to build dir for generated files
+texis-path := $(filter-out $(libc-texi-generated) summary.texi $(examples), \
+				$(texis)) 				    \
+	 $(addprefix $(objpfx),$(filter $(libc-texi-generated) summary.texi \
+					$(examples), $(texis)))
 
-html: libc/index.html
-libc/index.html: $(libc-texi-generated)
-	$(MAKEINFO) --html libc.texinfo
+# Kludge: implicit rule so Make knows the one command does it all.
+chapters.% top-menu.%: libc-texinfo.sh $(texis-path) Makefile
+	AWK=$(AWK) $(SHELL) $< $(objpfx) \
+				'$(chapters)' \
+			       '$(add-chapters)' \
+			       '$(appendices) $(licenses)'
+
+
+$(objpfx)libc.dvi $(objpfx)libc.pdf $(objpfx)libc.info: \
+	$(addprefix $(objpfx),$(libc-texi-generated))
+$(objpfx)libc.dvi $(objpfx)libc.pdf: texinfo.tex
+
+html: $(objpfx)libc/index.html
+$(objpfx)libc/index.html: $(addprefix $(objpfx),$(libc-texi-generated))
+	$(MAKEINFO) -P $(objpfx) -o $(objpfx)libc --html libc.texinfo
 
 # Generate the summary from the Texinfo source files for each chapter.
-summary.texi: stamp-summary ;
-stamp-summary: summary.awk $(filter-out summary.texi, $(texis))
-	$(AWK) -f $^ | sort -t'' -df -k 1,1 | tr '\014' '\012' > summary-tmp
-	$(move-if-change) summary-tmp summary.texi
+$(objpfx)summary.texi: $(objpfx)stamp-summary ;
+$(objpfx)stamp-summary: summary.awk $(filter-out $(objpfx)summary.texi, \
+					$(texis-path))
+	$(AWK) -f $^ | sort -t'' -df -k 1,1 | tr '\014' '\012' \
+		> $(objpfx)summary-tmp
+	$(move-if-change) $(objpfx)summary-tmp $(objpfx)summary.texi
 	touch $@
 
 # Generate a file which can be added to the `dir' content to provide direct
 # access to the documentation of the function, variables, and other
 # definitions.
-dir-add.texi: xtract-typefun.awk $(texis)
+$(objpfx)dir-add.texi: xtract-typefun.awk $(texis-path)
 	(echo "@dircategory GNU C library functions and macros";	\
 	 echo "@direntry";						\
 	 $(AWK) -f $^ | sort;						\
@@ -96,23 +103,23 @@
 	mv -f $@.new $@
 
 # The table with the math errors is generated.
-libm-err.texi: stamp-libm-err
-stamp-libm-err: libm-err-tab.pl $(wildcard $(foreach dir,$(sysdirs),\
+$(objpfx)libm-err.texi: $(objpfx)stamp-libm-err
+$(objpfx)stamp-libm-err: libm-err-tab.pl $(wildcard $(foreach dir,$(sysdirs),\
 						     $(dir)/libm-test-ulps))
 	pwd=`pwd`; \
-	$(PERL) $< $$pwd/.. > libm-err-tmp
-	$(move-if-change) libm-err-tmp libm-err.texi
+	$(PERL) $< $$pwd/.. > $(objpfx)libm-err-tmp
+	$(move-if-change) $(objpfx)libm-err-tmp $(objpfx)libm-err.texi
 	touch $@
 
 # Generate a file with the version number.
-version.texi: stamp-version ;
-stamp-version: $(common-objpfx)config.make
-	echo "@set VERSION $(version)" > version-tmp
-	$(move-if-change) version-tmp version.texi
+$(objpfx)version.texi: $(objpfx)stamp-version ;
+$(objpfx)stamp-version: $(common-objpfx)config.make
+	echo "@set VERSION $(version)" > $(objpfx)version-tmp
+	$(move-if-change) $(objpfx)version-tmp $(objpfx)version.texi
 	touch $@
 
 # Generate Texinfo files from the C source for the example programs.
-%.c.texi: examples/%.c
+$(objpfx)%.c.texi: examples/%.c
 	sed -e '1,/^\*\/$$/d'				\
 	    -e 's,[{}],@&,g'				\
 	    -e 's,/\*\(@.*\)\*/,\1,g'			\
@@ -121,14 +128,17 @@
 	    $< | expand > $@.new
 	mv -f $@.new $@
 
-%.info: %.texinfo
-	LANGUAGE=C LC_ALL=C $(MAKEINFO) $<
+$(objpfx)%.info: %.texinfo
+	LANGUAGE=C LC_ALL=C $(MAKEINFO) -P $(objpfx) --output=$@ $<
 
-%.dvi: %.texinfo
-	$(TEXI2DVI) $<
+$(objpfx)%.dvi: %.texinfo
+	cd $(objpfx);$(TEXI2DVI) -I $(shell cd $(<D) && pwd) --output=$@ \
+				$(shell cd $(<D) && pwd)/$<
 
-%.pdf: %.texinfo
-	$(TEXI2PDF) $<
+$(objpfx)%.pdf: %.texinfo
+	cd $(objpfx);$(TEXI2PDF) -I $(shell cd $(<D) && pwd) --output=$@ \
+				$(shell cd $(<D) && pwd)/$<
+
 
 # Distribution.
 minimal-dist = summary.awk texis.awk tsort.awk libc-texinfo.sh libc.texinfo \
@@ -136,21 +146,19 @@
 	       $(filter-out summary.texi, $(nonexamples))		    \
 	       $(patsubst %.c.texi,examples/%.c, $(examples))
 
-.PHONY: mostlyclean distclean realclean clean
-mostlyclean:
-	-rm -f libc.dvi libc.pdf libc.tmp libc.info*
-	-rm -f $(objpfx)stubs
-	-rm -f $(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$o)
-clean: mostlyclean
-distclean: clean
 indices = cp fn pg tp vr ky
-realclean: distclean
-	-rm -f texis summary.texi stamp-summary *.c.texi
-	-rm -f $(foreach index,$(indices),libc.$(index) libc.$(index)s)
-	-rm -f libc.log libc.aux libc.toc
-	-rm -f $(libc-texi-generated)
+generated-dirs := libc
+generated = libc.dvi libc.pdf libc.tmp libc.info*			    \
+	stubs								    \
+	texis summary.texi stamp-summary *.c.texi			    \
+	$(foreach index,$(indices),libc.$(index) libc.$(index)s)	    \
+	libc.log libc.aux libc.toc					    \
+	$(libc-texi-generated)						    \
+	stamp-libm-err stamp-version
 
-.PHONY: install subdir_install installdirs install-data
+include ../Rules
+
+.PHONY: install subdir_install install-data
 install-data subdir_install: install
 ifneq ($(strip $(MAKEINFO)),:)
 install: $(inst_infodir)/libc.info
@@ -162,58 +170,11 @@
 # Catchall implicit rule for other installation targets from the parent.
 install-%: ;
 
-$(inst_infodir)/libc.info: libc.info installdirs
+$(inst_infodir)/libc.info: $(objpfx)libc.info
+	$(make-target-directory)
 	for file in $<*; do \
-	  $(INSTALL_DATA) $$file $(@D)/$$file; \
+	  $(INSTALL_DATA) $$file $(@D)/; \
 	done
-
-installdirs:
-	$(mkinstalldirs) $(inst_infodir)
 
 TAGS: $(minimal-dist)
 	$(ETAGS) -o $@ $^
-
-# The parent makefile sometimes invokes us with targets `subdir_REAL-TARGET'.
-subdir_%: % ;
-# For targets we don't define, do nothing.
-subdir_%: ;
-
-# These are targets that each glibc subdirectory is expected to understand.
-# ../Rules defines them for code subdirectories; for us, they are no-ops.
-# None of these should be `subdir_TARGET'; those targets are transformed
-# by the implicit rule above into `TARGET' deps.
-glibc-targets	:= lib objects objs others tests xtests lint.out echo-headers
-.PHONY: $(glibc-targets)
-$(glibc-targets):
-
-# Create stamp files if they don't exist, so the parent makefile's rules for
-# updating the library archives are happy with us, and never think we have
-# changed the library.
-lib: $(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$o)
-ifdef objpfx
-.PHONY: stubs
-stubs: $(objpfx)stubs
-endif
-$(objpfx)stubs ../po/manual.pot:
-	$(make-target-directory)
-	touch $@
-$(objpfx)stamp%:
-	$(make-target-directory)
-	touch $@
-
-# Make the target directory if it doesn't exist, using the `mkinstalldirs'
-# script that does `mkdir -p' even if `mkdir' doesn't support that flag.
-define make-target-directory
-$(addprefix $(mkinstalldirs) ,\
-	    $(filter-out $(wildcard $(@D:%/=%)),$(@D:%/=%)))
-endef
-
-# The top-level glibc Makefile expects subdir_install to update the stubs file.
-subdir_install: stubs
-
-# Get rid of these variables if they came from the parent.
-routines =
-aux =
-sources =
-objects =
-headers =

Modified: fsf/trunk/libc/manual/install.texi
==============================================================================
--- fsf/trunk/libc/manual/install.texi (original)
+++ fsf/trunk/libc/manual/install.texi Tue May 15 00:01:54 2012
@@ -203,10 +203,10 @@
 These files must all contain correct and sensible content.
 
 To format the @cite{GNU C Library Reference Manual} for printing, type
-@w{@code{make dvi}}.  You need a working @TeX{} installation to do this.
-The distribution already includes the on-line formatted version of the
-manual, as Info files.  You can regenerate those with @w{@code{make
-info}}, but it shouldn't be necessary.
+@w{@code{make dvi}}.  You need a working @TeX{} installation to do
+this.  The distribution builds the on-line formatted version of the
+manual, as Info files, as part of the build process.  You can build
+them manually with @w{@code{make info}}.
 
 The library has a number of special-purpose configuration parameters
 which you can find in @file{Makeconfig}.  These can be overwritten with

Modified: fsf/trunk/libc/manual/libc-texinfo.sh
==============================================================================
--- fsf/trunk/libc/manual/libc-texinfo.sh (original)
+++ fsf/trunk/libc/manual/libc-texinfo.sh Tue May 15 00:01:54 2012
@@ -1,10 +1,13 @@
 #! /bin/sh
+
+OUTDIR=$1
+shift
 
 # Create libc.texinfo from the chapter files.
 
-trap "rm -f *.$$; exit 1" 1 2 15
+trap "rm -f ${OUTDIR}*.$$; exit 1" 1 2 15
 
-exec 3>incl.$$ 4>smenu.$$ 5>lmenu.$$
+exec 3>${OUTDIR}incl.$$ 4>${OUTDIR}smenu.$$ 5>${OUTDIR}lmenu.$$
 
 build_menu () {
   while IFS=: read file node; do
@@ -51,7 +54,7 @@
 
 exec 3>&- 4>&- 5>&-
 
-mv -f incl.$$ chapters.texi
+mv -f ${OUTDIR}incl.$$ ${OUTDIR}chapters.texi
 
 {
  echo '@menu'
@@ -72,7 +75,7 @@
   }
 
   !/^\*/ { print; }
- ' smenu.$$
+ ' ${OUTDIR}smenu.$$
  cat <<EOF
 * Free Manuals::		 Free Software Needs Free Documentation.
 * Copying::                      The GNU Lesser General Public License says
@@ -90,8 +93,8 @@
 
  --- The Detailed Node Listing ---
 EOF
- cat lmenu.$$
- echo '@end menu'; } >top-menu.texi.$$
-mv -f top-menu.texi.$$ top-menu.texi
+ cat ${OUTDIR}lmenu.$$
+ echo '@end menu'; } >${OUTDIR}top-menu.texi.$$
+mv -f ${OUTDIR}top-menu.texi.$$ ${OUTDIR}top-menu.texi
 
-rm -f *.$$
+rm -f ${OUTDIR}*.$$

Modified: fsf/trunk/libc/manual/string.texi
==============================================================================
--- fsf/trunk/libc/manual/string.texi (original)
+++ fsf/trunk/libc/manual/string.texi Tue May 15 00:01:54 2012
@@ -886,6 +886,7 @@
     @{
       char *newp;
       char *wp;
+      const char *s;
 
       va_start (ap, str);
 

Modified: fsf/trunk/libc/nptl/ChangeLog
==============================================================================
--- fsf/trunk/libc/nptl/ChangeLog (original)
+++ fsf/trunk/libc/nptl/ChangeLog Tue May 15 00:01:54 2012
@@ -1,3 +1,26 @@
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/pthread/pthread.h (__PTHREAD_RWLOCK_INT_FLAGS_SHARED):
+	New.
+	(PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP): Check
+	__PTHREAD_RWLOCK_INT_FLAGS_SHARED instead of __WORDSIZE.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* shlib-versions: Move x86_64-.*-linux.* entry to ...
+	* sysdeps/x86_64/64/shlib-versions: Here.  New file.
+	* sysdeps/x86_64/x32/shlib-versions: New file.
+
+2012-05-14  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
+
+	* sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h: Define x32
+	__SIZEOF_PTHREAD_XXX_T.
+	(__pthread_internal_list): Check __x86_64__ instead of __WORDSIZE.
+	(pthread_mutex_t): Likewise.
+	(pthread_rwlock_t): Likewise.
+	(__PTHREAD_RWLOCK_INT_FLAGS_SHARED): New.  Defined if __x86_64__
+	is defined.
+
 2012-05-11  H.J. Lu  <hongjiu.lu@xxxxxxxxx>
 
 	* sysdeps/x86_64/x32/tls.h: New file.

Modified: fsf/trunk/libc/nptl/shlib-versions
==============================================================================
--- fsf/trunk/libc/nptl/shlib-versions (original)
+++ fsf/trunk/libc/nptl/shlib-versions Tue May 15 00:01:54 2012
@@ -1,6 +1,5 @@
 sparc64.*-.*-linux.*	libpthread=0		GLIBC_2.2
 sh.*-.*-linux.*		libpthread=0		GLIBC_2.2
 s390x-.*-linux.*	libpthread=0		GLIBC_2.2
-x86_64-.*-linux.*	libpthread=0		GLIBC_2.2.5
 powerpc64-.*-linux.*	libpthread=0		GLIBC_2.3
 .*-.*-linux.*		libpthread=0

Modified: fsf/trunk/libc/nptl/sysdeps/pthread/pthread.h
==============================================================================
--- fsf/trunk/libc/nptl/sysdeps/pthread/pthread.h (original)
+++ fsf/trunk/libc/nptl/sysdeps/pthread/pthread.h Tue May 15 00:01:54 2012
@@ -118,11 +118,20 @@
   PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP
 };
 
+/* Define __PTHREAD_RWLOCK_INT_FLAGS_SHARED to 1 if pthread_rwlock_t
+   has the shared field.  All 64-bit architectures have the shared field
+   in pthread_rwlock_t.  */
+#ifndef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
+# if __WORDSIZE == 64
+#  define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1
+# endif
+#endif
+
 /* Read-write lock initializers.  */
 # define PTHREAD_RWLOCK_INITIALIZER \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
 # ifdef __USE_GNU
-#  if __WORDSIZE == 64
+#  ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED
 #   define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
   { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,					      \
 	PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }

Modified: fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h
==============================================================================
--- fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h (original)
+++ fsf/trunk/libc/nptl/sysdeps/unix/sysv/linux/x86_64/bits/pthreadtypes.h Tue May 15 00:01:54 2012
@@ -20,16 +20,28 @@
 
 #include <bits/wordsize.h>
 
-#if __WORDSIZE == 64
-# define __SIZEOF_PTHREAD_ATTR_T 56
-# define __SIZEOF_PTHREAD_MUTEX_T 40
-# define __SIZEOF_PTHREAD_MUTEXATTR_T 4
-# define __SIZEOF_PTHREAD_COND_T 48
-# define __SIZEOF_PTHREAD_CONDATTR_T 4
-# define __SIZEOF_PTHREAD_RWLOCK_T 56
-# define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
-# define __SIZEOF_PTHREAD_BARRIER_T 32
-# define __SIZEOF_PTHREAD_BARRIERATTR_T 4
+#ifdef __x86_64__
+# if __WORDSIZE == 64
+#  define __SIZEOF_PTHREAD_ATTR_T 56
+#  define __SIZEOF_PTHREAD_MUTEX_T 40
+#  define __SIZEOF_PTHREAD_MUTEXATTR_T 4
+#  define __SIZEOF_PTHREAD_COND_T 48
+#  define __SIZEOF_PTHREAD_CONDATTR_T 4
+#  define __SIZEOF_PTHREAD_RWLOCK_T 56
+#  define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
+#  define __SIZEOF_PTHREAD_BARRIER_T 32
+#  define __SIZEOF_PTHREAD_BARRIERATTR_T 4
+# else
+#  define __SIZEOF_PTHREAD_ATTR_T 32
+#  define __SIZEOF_PTHREAD_MUTEX_T 32
+#  define __SIZEOF_PTHREAD_MUTEXATTR_T 4
+#  define __SIZEOF_PTHREAD_COND_T 48
+#  define __SIZEOF_PTHREAD_CONDATTR_T 4
+#  define __SIZEOF_PTHREAD_RWLOCK_T 44
+#  define __SIZEOF_PTHREAD_RWLOCKATTR_T 8
+#  define __SIZEOF_PTHREAD_BARRIER_T 20
+#  define __SIZEOF_PTHREAD_BARRIERATTR_T 4
+# endif
 #else
 # define __SIZEOF_PTHREAD_ATTR_T 36
 # define __SIZEOF_PTHREAD_MUTEX_T 24
@@ -59,7 +71,7 @@
 #endif
 
 
-#if __WORDSIZE == 64
+#ifdef __x86_64__
 typedef struct __pthread_internal_list
 {
   struct __pthread_internal_list *__prev;
@@ -82,13 +94,13 @@
     int __lock;
     unsigned int __count;
     int __owner;
-#if __WORDSIZE == 64
+#ifdef __x86_64__
     unsigned int __nusers;
 #endif
     /* KIND must stay at this position in the structure to maintain
        binary compatibility.  */
     int __kind;
-#if __WORDSIZE == 64
+#ifdef __x86_64__
     int __spins;
     __pthread_list_t __list;
 # define __PTHREAD_MUTEX_HAVE_PREV	1
@@ -151,7 +163,7 @@
    structure of the attribute type is not exposed on purpose.  */
 typedef union
 {
-# if __WORDSIZE == 64
+# ifdef __x86_64__
   struct
   {
     int __lock;
@@ -167,6 +179,7 @@
     /* FLAGS must stay at this position in the structure to maintain
        binary compatibility.  */
     unsigned int __flags;
+# define __PTHREAD_RWLOCK_INT_FLAGS_SHARED	1
   } __data;
 # else
   struct

Added: fsf/trunk/libc/nptl/sysdeps/x86_64/64/shlib-versions
==============================================================================
--- fsf/trunk/libc/nptl/sysdeps/x86_64/64/shlib-versions (added)
+++ fsf/trunk/libc/nptl/sysdeps/x86_64/64/shlib-versions Tue May 15 00:01:54 2012
@@ -1,0 +1,3 @@
+# Configuration		DEFAULT			Earliest symbol set
+# -------------		---------------		------------------------------
+x86_64-.*-linux.*	libpthread=0		GLIBC_2.2.5

Added: fsf/trunk/libc/nptl/sysdeps/x86_64/x32/shlib-versions
==============================================================================
--- fsf/trunk/libc/nptl/sysdeps/x86_64/x32/shlib-versions (added)
+++ fsf/trunk/libc/nptl/sysdeps/x86_64/x32/shlib-versions Tue May 15 00:01:54 2012
@@ -1,0 +1,3 @@
+# Configuration		DEFAULT			Earliest symbol set
+# -------------		---------------		------------------------------
+x86_64-.*-linux.*	libpthread=0		GLIBC_2.16

Modified: fsf/trunk/libc/shlib-versions
==============================================================================
--- fsf/trunk/libc/shlib-versions (original)
+++ fsf/trunk/libc/shlib-versions Tue May 15 00:01:54 2012
@@ -27,7 +27,6 @@
 # -------------		---------------		------------------------------
 
 s390x-.*-linux.*        DEFAULT			GLIBC_2.2
-x86_64-.*-linux.*       DEFAULT			GLIBC_2.2.5
 powerpc64-.*-linux.*	DEFAULT			GLIBC_2.3
 .*-.*-gnu-gnu.*		DEFAULT			GLIBC_2.2.6
 
@@ -77,7 +76,6 @@
 sh.*-.*-linux.*		ld=ld-linux.so.2	GLIBC_2.2
 s390x-.*-linux.*	ld=ld64.so.1		GLIBC_2.2
 powerpc64.*-.*-linux.*	ld=ld64.so.1		GLIBC_2.3
-x86_64-.*-linux.*	ld=ld-linux-x86-64.so.2	GLIBC_2.2.5
 # We use the ELF ABI standard name for the default.
 .*-.*-.*		ld=ld.so.1
 

Modified: fsf/trunk/libc/sysdeps/i386/fpu/bits/mathinline.h
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/fpu/bits/mathinline.h (original)
+++ fsf/trunk/libc/sysdeps/i386/fpu/bits/mathinline.h Tue May 15 00:01:54 2012
@@ -290,35 +290,8 @@
 #if !defined __NO_MATH_INLINES && defined __OPTIMIZE__
 /* Miscellaneous functions */
 
-__inline_mathcode (__sgn, __x, \
-  return __x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0))
-
 /* __FAST_MATH__ is defined by gcc -ffast-math.  */
 #ifdef __FAST_MATH__
-__inline_mathcode (__pow2, __x, \
-  register long double __value;						      \
-  register long double __exponent;					      \
-  __extension__ long long int __p = (long long int) __x;		      \
-  if (__x == (long double) __p)						      \
-    {									      \
-      __asm __volatile__						      \
-	("fscale"							      \
-	 : "=t" (__value) : "0" (1.0), "u" (__x));			      \
-      return __value;							      \
-    }									      \
-  __asm __volatile__							      \
-    ("fld	%%st(0)\n\t"						      \
-     "frndint			# int(x)\n\t"				      \
-     "fxch\n\t"								      \
-     "fsub	%%st(1)		# fract(x)\n\t"				      \
-     "f2xm1			# 2^(fract(x)) - 1\n\t"			      \
-     : "=t" (__value), "=u" (__exponent) : "0" (__x));			      \
-  __value += 1.0;							      \
-  __asm __volatile__							      \
-    ("fscale"								      \
-     : "=t" (__value) : "0" (__value), "u" (__exponent));		      \
-  return __value)
-
 # ifdef __USE_GNU
 #  define __sincos_code \
   register long double __cosr;						      \
@@ -733,16 +706,6 @@
 	     | 0x800fffffu) + 1) >> 31));
 }
 
-/* Miscellaneous functions */
-# ifdef __FAST_MATH__
-__inline_mathcode (__coshm1, __x, \
-  register long double __exm1 = __expm1l (__fabsl (__x));		      \
-  return 0.5 * (__exm1 / (__exm1 + 1.0)) * __exm1)
-
-__inline_mathcode (__acosh1p, __x, \
-  return log1pl (__x + __libc_sqrtl (__x) * __libc_sqrtl (__x + 2.0)))
-
-# endif /* __FAST_MATH__ */
 #endif /* __USE_MISC  */
 
 /* Undefine some of the large macros which are not used anymore.  */

Added: fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/Makefile
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/Makefile (added)
+++ fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/Makefile Tue May 15 00:01:54 2012
@@ -1,0 +1,3 @@
+ifeq ($(subdir),math)
+libm-sysdep_routines += e_expf-sse2 e_expf-ia32
+endif

Added: fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S (added)
+++ fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-ia32.S Tue May 15 00:01:54 2012
@@ -1,0 +1,22 @@
+/*
+   Copyright (C) 2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#define __ieee754_expf __ieee754_expf_ia32
+#define __expf_finite __expf_finite_ia32
+
+#include <sysdeps/i386/fpu/e_expf.S>

Added: fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S (added)
+++ fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf-sse2.S Tue May 15 00:01:54 2012
@@ -1,0 +1,324 @@
+/* SSE2 version of __ieee754_expf and __expf_finite
+   Copyright (C) 2012 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+
+#include <sysdep.h>
+
+/* Short algorithm description:
+ *
+ *  Let K = 64 (table size).
+ *       e^x  = 2^(x/log(2)) = 2^n * T[j] * (1 + P(y))
+ *  where
+ *       x = m*log(2)/K + y,    y in [0.0..log(2)/K]
+ *       m = n*K + j,           m,n,j - signed integer, j in [0..K-1]
+ *       values of 2^(j/K) are tabulated as T[j].
+ *
+ *       P(y) is a minimax polynomial approximation of expf(x)-1
+ *       on small interval [0.0..log(2)/K].
+ *
+ *       P(y) = P3*y*y*y*y + P2*y*y*y + P1*y*y + P0*y, calculated as
+ *       z = y*y;    P(y) = (P3*z + P1)*z + (P2*z + P0)*y
+ *
+ * Special cases:
+ *  __ieee754_expf_sse2(NaN) = NaN
+ *  __ieee754_expf_sse2(+INF) = +INF
+ *  __ieee754_expf_sse2(-INF) = 0
+ *  __ieee754_expf_sse2(x) = 1 for subnormals
+ *  for finite argument, only __ieee754_expf_sse2(0)=1 is exact
+ *  __ieee754_expf_sse2(x) overflows if x>700
+ *  __ieee754_expf_sse2(x) underflows if x<-700
+ *
+ * Note:
+ *  For |x|<700, __ieee754_expf_sse2 computes result in double precision,
+ *  with accuracy a bit more than needed for expf, and does not round it
+ *  to single precision.
+ */
+
+
+#ifdef	PIC
+# define MO1(symbol)			L(symbol)##@GOTOFF(%edx)
+# define MO2(symbol,reg2,_scale)	L(symbol)##@GOTOFF(%edx,reg2,_scale)
+#else
+# define MO1(symbol)			L(symbol)
+# define MO2(symbol,reg2,_scale)	L(symbol)(,reg2,_scale)
+#endif
+
+	.text
+ENTRY(__ieee754_expf_sse2)
+	/* Input: single precision x on stack at address 4(%esp) */
+
+#ifdef	PIC
+	LOAD_PIC_REG(dx)
+#endif
+
+	cvtss2sd	4(%esp), %xmm1	/* Convert x to double precision */
+	mov	4(%esp), %ecx		/* Copy x */
+	movsd	MO1(DP_KLN2), %xmm2	/* DP K/log(2) */
+	movsd	MO1(DP_P2), %xmm3	/* DP P2 */
+	movl	%ecx, %eax		/* x */
+	mulsd	%xmm1, %xmm2		/* DP x*K/log(2) */
+	andl	$0x7fffffff, %ecx	/* |x| */
+	cmpl	$0x442f0000, %ecx	/* |x|<700 ? */
+	movsd	MO1(DP_P3), %xmm4	/* DP P3 */
+	addsd	MO1(DP_RS), %xmm2	/* DP x*K/log(2)+RS */
+	jae	L(special_paths)
+
+	/* Here if |x|<700 */
+	cmpl	$0x31800000, %ecx	/* |x|<2^(-28) ? */
+	jb	L(small_arg)
+
+	/* Main path: here if 2^(-28)<=|x|<700 */
+	cvtsd2ss	%xmm2, %xmm2	/* SP x*K/log(2)+RS */
+	movd	%xmm2, %eax		/* bits of n*K+j with trash */
+	subss	MO1(SP_RS), %xmm2	/* SP t=round(x*K/log(2)) */
+	movl	%eax, %ecx		/* n*K+j with trash */
+	cvtss2sd	%xmm2, %xmm2	/* DP t */
+	andl	$0x3f, %eax		/* bits of j */
+	mulsd	MO1(DP_NLN2K), %xmm2	/* DP -t*log(2)/K */
+	andl	$0xffffffc0, %ecx	/* bits of n */
+#ifdef __AVX__
+	vaddsd	%xmm1, %xmm2, %xmm0	/* DP y=x-t*log(2)/K */
+	vmulsd	%xmm0, %xmm0, %xmm2	/* DP z=y*y */
+#else
+	addsd	%xmm1, %xmm2		/* DP y=x-t*log(2)/K */
+	movaps	%xmm2, %xmm0		/* DP y */
+	mulsd	%xmm2, %xmm2		/* DP z=y*y */
+#endif
+	mulsd	%xmm2, %xmm4		/* DP P3*z */
+	addl	$0xffc0, %ecx		/* bits of n + DP exponent bias */
+	mulsd	%xmm2, %xmm3		/* DP P2*z */
+	shrl	$2, %ecx		/* High 2 bytes of DP 2^n */
+	pxor	%xmm1, %xmm1		/* clear %xmm1 */
+	addsd	MO1(DP_P1), %xmm4	/* DP P3*z+P1 */
+	addsd	MO1(DP_P0), %xmm3	/* DP P2*z+P0 */
+	pinsrw	$3, %ecx, %xmm1		/* DP 2^n */
+	mulsd	%xmm2, %xmm4		/* DP (P3*z+P1)*z */
+	mulsd	%xmm3, %xmm0		/* DP (P2*z+P0)*y */
+	addsd	%xmm4, %xmm0		/* DP P(y) */
+	mulsd	MO2(DP_T,%eax,8), %xmm0	/* DP P(y)*T[j] */
+	addsd	MO2(DP_T,%eax,8), %xmm0	/* DP T[j]*(P(y)+1) */
+	mulsd	%xmm1, %xmm0		/* DP result=2^n*(T[j]*(P(y)+1)) */
+
+	lea	-8(%esp), %esp		/* Borrow 8 bytes of stack frame */
+	movsd	%xmm0, 0(%esp)		/* Move result from sse... */
+	fldl	0(%esp)			/* ...to FPU. */
+	lea	8(%esp), %esp		/* Return back 8 bytes of stack frame */
+	ret
+
+	.p2align	4
+L(small_arg):
+	/* Here if 0<=|x|<2^(-28) */
+	movss	4(%esp), %xmm0		/* load x */
+	addss	MO1(SP_ONE), %xmm0	/* 1.0 + x */
+	/* Return 1.0 with inexact raised, except for x==0 */
+	jmp	L(epilogue)
+
+	.p2align	4
+L(special_paths):
+	/* Here if x is NaN, or Inf, or finite |x|>=700 */
+	movss	4(%esp), %xmm0		/* load x */
+
+	cmpl	$0x7f800000, %ecx	/* |x| is finite ? */
+	jae	L(arg_inf_or_nan)
+
+	/* Here if finite |x|>=700 */
+	testl	$0x80000000, %eax	/* sign of x nonzero ? */
+	je	L(res_overflow)
+
+	/* Here if finite x<=-700 */
+	movss	MO1(SP_SMALL), %xmm0	/* load small value 2^(-100) */
+	mulss	%xmm0, %xmm0		/* Return underflowed result (zero or subnormal) */
+	jmp	L(epilogue)
+
+	.p2align	4
+L(res_overflow):
+	/* Here if finite x>=700 */
+	movss	MO1(SP_LARGE), %xmm0	/* load large value 2^100 */
+	mulss	%xmm0, %xmm0		/* Return overflowed result (Inf or max normal) */
+	jmp	L(epilogue)
+
+	.p2align	4
+L(arg_inf_or_nan):
+	/* Here if |x| is Inf or NAN */
+	jne	L(arg_nan)	/* |x| is Inf ? */
+
+	/* Here if |x| is Inf */
+	shrl	$31, %eax		/* Get sign bit of x */
+	movss	MO2(SP_INF_0,%eax,4), %xmm0/* return zero or Inf, depending on sign of x */
+	jmp	L(epilogue)
+
+	.p2align	4
+L(arg_nan):
+	/* Here if |x| is NaN */
+	addss	%xmm0, %xmm0		/* Return x+x (raise invalid) */
+
+	.p2align	4
+L(epilogue):
+	lea	-4(%esp), %esp		/* Borrow 4 bytes of stack frame */
+	movss	%xmm0, 0(%esp)		/* Move result from sse... */
+	flds	0(%esp)			/* ...to FPU. */
+	lea	4(%esp), %esp		/* Return back 4 bytes of stack frame */
+	ret
+END(__ieee754_expf_sse2)
+
+	.section .rodata, "a"
+	.p2align 3
+L(DP_T): /* table of double precision values 2^(j/K) for j=[0..K-1] */
+	.long	0x00000000, 0x3ff00000
+	.long	0x3e778061, 0x3ff02c9a
+	.long	0xd3158574, 0x3ff059b0
+	.long	0x18759bc8, 0x3ff08745
+	.long	0x6cf9890f, 0x3ff0b558
+	.long	0x32d3d1a2, 0x3ff0e3ec
+	.long	0xd0125b51, 0x3ff11301
+	.long	0xaea92de0, 0x3ff1429a
+	.long	0x3c7d517b, 0x3ff172b8
+	.long	0xeb6fcb75, 0x3ff1a35b
+	.long	0x3168b9aa, 0x3ff1d487
+	.long	0x88628cd6, 0x3ff2063b
+	.long	0x6e756238, 0x3ff2387a
+	.long	0x65e27cdd, 0x3ff26b45
+	.long	0xf51fdee1, 0x3ff29e9d
+	.long	0xa6e4030b, 0x3ff2d285
+	.long	0x0a31b715, 0x3ff306fe
+	.long	0xb26416ff, 0x3ff33c08
+	.long	0x373aa9cb, 0x3ff371a7
+	.long	0x34e59ff7, 0x3ff3a7db
+	.long	0x4c123422, 0x3ff3dea6
+	.long	0x21f72e2a, 0x3ff4160a
+	.long	0x6061892d, 0x3ff44e08
+	.long	0xb5c13cd0, 0x3ff486a2
+	.long	0xd5362a27, 0x3ff4bfda
+	.long	0x769d2ca7, 0x3ff4f9b2
+	.long	0x569d4f82, 0x3ff5342b
+	.long	0x36b527da, 0x3ff56f47
+	.long	0xdd485429, 0x3ff5ab07
+	.long	0x15ad2148, 0x3ff5e76f
+	.long	0xb03a5585, 0x3ff6247e
+	.long	0x82552225, 0x3ff66238
+	.long	0x667f3bcd, 0x3ff6a09e
+	.long	0x3c651a2f, 0x3ff6dfb2
+	.long	0xe8ec5f74, 0x3ff71f75
+	.long	0x564267c9, 0x3ff75feb
+	.long	0x73eb0187, 0x3ff7a114
+	.long	0x36cf4e62, 0x3ff7e2f3
+	.long	0x994cce13, 0x3ff82589
+	.long	0x9b4492ed, 0x3ff868d9
+	.long	0x422aa0db, 0x3ff8ace5
+	.long	0x99157736, 0x3ff8f1ae
+	.long	0xb0cdc5e5, 0x3ff93737
+	.long	0x9fde4e50, 0x3ff97d82
+	.long	0x82a3f090, 0x3ff9c491
+	.long	0x7b5de565, 0x3ffa0c66
+	.long	0xb23e255d, 0x3ffa5503
+	.long	0x5579fdbf, 0x3ffa9e6b
+	.long	0x995ad3ad, 0x3ffae89f
+	.long	0xb84f15fb, 0x3ffb33a2
+	.long	0xf2fb5e47, 0x3ffb7f76
+	.long	0x904bc1d2, 0x3ffbcc1e
+	.long	0xdd85529c, 0x3ffc199b
+	.long	0x2e57d14b, 0x3ffc67f1
+	.long	0xdcef9069, 0x3ffcb720
+	.long	0x4a07897c, 0x3ffd072d
+	.long	0xdcfba487, 0x3ffd5818
+	.long	0x03db3285, 0x3ffda9e6
+	.long	0x337b9b5f, 0x3ffdfc97
+	.long	0xe78b3ff6, 0x3ffe502e
+	.long	0xa2a490da, 0x3ffea4af
+	.long	0xee615a27, 0x3ffefa1b
+	.long	0x5b6e4540, 0x3fff5076
+	.long	0x819e90d8, 0x3fffa7c1
+	ASM_TYPE_DIRECTIVE(L(DP_T), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_T))
+
+	.section .rodata.cst8,"aM",@progbits,8
+	.p2align 3
+L(DP_KLN2): /* double precision K/log(2) */
+	.long	0x652b82fe, 0x40571547
+	ASM_TYPE_DIRECTIVE(L(DP_KLN2), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_KLN2))
+
+	.p2align 3
+L(DP_NLN2K): /* double precision -log(2)/K */
+	.long	0xfefa39ef, 0xbf862e42
+	ASM_TYPE_DIRECTIVE(L(DP_NLN2K), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_NLN2K))
+
+	.p2align 3
+L(DP_RS): /* double precision 2^23+2^22 */
+	.long	0x00000000, 0x41680000
+	ASM_TYPE_DIRECTIVE(L(DP_RS), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_RS))
+
+	.p2align 3
+L(DP_P3): /* double precision polynomial coefficient P3 */
+	.long	0xeb78fa85, 0x3fa56420
+	ASM_TYPE_DIRECTIVE(L(DP_P3), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_P3))
+
+	.p2align 3
+L(DP_P1): /* double precision polynomial coefficient P1 */
+	.long	0x008d6118, 0x3fe00000
+	ASM_TYPE_DIRECTIVE(L(DP_P1), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_P1))
+
+	.p2align 3
+L(DP_P2): /* double precision polynomial coefficient P2 */
+	.long	0xda752d4f, 0x3fc55550
+	ASM_TYPE_DIRECTIVE(L(DP_P2), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_P2))
+
+	.p2align 3
+L(DP_P0): /* double precision polynomial coefficient P0 */
+	.long	0xffffe7c6, 0x3fefffff
+	ASM_TYPE_DIRECTIVE(L(DP_P0), @object)
+	ASM_SIZE_DIRECTIVE(L(DP_P0))
+
+	.p2align 2
+L(SP_INF_0):
+	.long	0x7f800000	/* single precision Inf */
+	.long	0		/* single precision zero */
+	ASM_TYPE_DIRECTIVE(L(SP_INF_0), @object)
+	ASM_SIZE_DIRECTIVE(L(SP_INF_0))
+
+	.section .rodata.cst4,"aM",@progbits,4
+	.p2align 2
+L(SP_RS): /* single precision 2^23+2^22 */
+	.long	0x4b400000
+	ASM_TYPE_DIRECTIVE(L(SP_RS), @object)
+	ASM_SIZE_DIRECTIVE(L(SP_RS))
+
+	.p2align 2
+L(SP_SMALL): /* single precision small value 2^(-100) */
+	.long	0x0d800000
+	ASM_TYPE_DIRECTIVE(L(SP_SMALL), @object)
+	ASM_SIZE_DIRECTIVE(L(SP_SMALL))
+
+	.p2align 2
+L(SP_LARGE): /* single precision large value 2^100 */
+	.long	0x71800000
+	ASM_TYPE_DIRECTIVE(L(SP_LARGE), @object)
+	ASM_SIZE_DIRECTIVE(L(SP_LARGE))
+
+	.p2align 2
+L(SP_ONE): /* single precision 1.0 */
+	.long	0x3f800000
+	ASM_TYPE_DIRECTIVE(L(SP_ONE), @object)
+	ASM_SIZE_DIRECTIVE(L(SP_ONE))
+
+strong_alias (__ieee754_expf_sse2, __expf_finite_sse2)

Added: fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf.c
==============================================================================
--- fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf.c (added)
+++ fsf/trunk/libc/sysdeps/i386/i686/fpu/multiarch/e_expf.c Tue May 15 00:01:54 2012
@@ -1,0 +1,15 @@
+#include <init-arch.h>
+
+extern double __ieee754_expf_sse2 (double);
+extern double __ieee754_expf_ia32 (double);
+
+double __ieee754_expf (double);
+libm_ifunc (__ieee754_expf,
+	    HAS_SSE2 ? __ieee754_expf_sse2 : __ieee754_expf_ia32);
+
+extern double __expf_finite_sse2 (double);
+extern double __expf_finite_ia32 (double);
+
+double __expf_finite (double);
+libm_ifunc (__expf_finite,
+	    HAS_SSE2 ? __expf_finite_sse2 : __expf_finite_ia32);

Modified: fsf/trunk/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c
==============================================================================
--- fsf/trunk/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c (original)
+++ fsf/trunk/libc/sysdeps/ieee754/dbl-64/wordsize-64/s_logb.c Tue May 15 00:01:54 2012
@@ -36,7 +36,7 @@
     return x * x;
   if (__builtin_expect (ex == 0, 0))
     {
-      int m = (ix == 0) ? 0 : __builtin_clzl (ix);
+      int m = (ix == 0) ? 0 : __builtin_clzll (ix);
       return -1022.0 + (double)(11 -m);
     }
   return (double) (ex - 1023);

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/check_pf.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/check_pf.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/check_pf.c Tue May 15 00:01:54 2012
@@ -61,7 +61,7 @@
     .in6ailen = 0
   };
 
-static struct cached_data *cache;
+libc_freeres_ptr (static struct cached_data *cache);
 __libc_lock_define_initialized (static, lock);
 
 

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/configure
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/configure (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/configure Tue May 15 00:01:54 2012
@@ -284,11 +284,11 @@
 case "$machine" in
   i386*)
     libc_cv_gcc_unwind_find_fde=yes
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
   powerpc/powerpc32)
     libc_cv_gcc_unwind_find_fde=yes
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
   powerpc/powerpc64)
     arch_minimum_kernel=2.4.21
@@ -311,13 +311,13 @@
     ;;
   sparc*)
     libc_cv_gcc_unwind_find_fde=yes
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
   x86_64*)
     arch_minimum_kernel=2.4.0
     ;;
   *)
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
 esac
 if test -n "$minimum_kernel"; then
@@ -331,17 +331,14 @@
     minimum_kernel=$arch_minimum_kernel
   fi
 else
-  if test $arch_minimum_kernel != '2.0.10'; then
-    minimum_kernel=$arch_minimum_kernel
-  fi
-fi
-
-if test -n "$minimum_kernel"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel header at least $minimum_kernel" >&5
+  minimum_kernel=$arch_minimum_kernel
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel header at least $minimum_kernel" >&5
 $as_echo_n "checking for kernel header at least $minimum_kernel... " >&6; }
-  decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
-  abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <linux/version.h>
 #if LINUX_VERSION_CODE < $decnum
@@ -356,21 +353,20 @@
 fi
 rm -f conftest*
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_minimum_kernel" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_minimum_kernel" >&5
 $as_echo "$libc_minimum_kernel" >&6; }
-  if test "$libc_minimum_kernel" = ok; then
-    cat >>confdefs.h <<_ACEOF
+if test "$libc_minimum_kernel" = ok; then
+  cat >>confdefs.h <<_ACEOF
 #define __LINUX_KERNEL_VERSION $decnum
 _ACEOF
 
-    cat >>confdefs.h <<_ACEOF
+  cat >>confdefs.h <<_ACEOF
 #define __ABI_TAG_VERSION $abinum
 _ACEOF
 
-  else
-    as_fn_error $? "*** The available kernel headers are older than the requested
+else
+  as_fn_error $? "*** The available kernel headers are older than the requested
 *** compatible kernel version" "$LINENO" 5
-  fi
 fi
 
 # The result of the above test for the use of the FDE code is invalid if

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/configure.in
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/configure.in (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/configure.in Tue May 15 00:01:54 2012
@@ -41,11 +41,11 @@
 case "$machine" in
   i386*)
     libc_cv_gcc_unwind_find_fde=yes
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
   powerpc/powerpc32)
     libc_cv_gcc_unwind_find_fde=yes
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
   powerpc/powerpc64)
     arch_minimum_kernel=2.4.21
@@ -68,13 +68,13 @@
     ;;
   sparc*)
     libc_cv_gcc_unwind_find_fde=yes
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
   x86_64*)
     arch_minimum_kernel=2.4.0
     ;;
   *)
-    arch_minimum_kernel=2.0.10
+    arch_minimum_kernel=2.2.0
     ;;
 esac
 if test -n "$minimum_kernel"; then
@@ -87,29 +87,25 @@
     minimum_kernel=$arch_minimum_kernel
   fi
 else
-  if test $arch_minimum_kernel != '2.0.10'; then
-    minimum_kernel=$arch_minimum_kernel
-  fi
-fi
-
-if test -n "$minimum_kernel"; then
-  AC_MSG_CHECKING(for kernel header at least $minimum_kernel)
+  minimum_kernel=$arch_minimum_kernel
+fi
+
+AC_MSG_CHECKING(for kernel header at least $minimum_kernel)
 changequote(,)dnl
-  decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
-  abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
+decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
+abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
 changequote([,])dnl
-  AC_EGREP_CPP([eat flaming death], [#include <linux/version.h>
+AC_EGREP_CPP([eat flaming death], [#include <linux/version.h>
 #if LINUX_VERSION_CODE < $decnum
 eat flaming death
 #endif], libc_minimum_kernel='too old!', libc_minimum_kernel=ok)
-  AC_MSG_RESULT($libc_minimum_kernel)
-  if test "$libc_minimum_kernel" = ok; then
-    AC_DEFINE_UNQUOTED(__LINUX_KERNEL_VERSION, $decnum)
-    AC_DEFINE_UNQUOTED(__ABI_TAG_VERSION, $abinum)
-  else
-    AC_MSG_ERROR([*** The available kernel headers are older than the requested
+AC_MSG_RESULT($libc_minimum_kernel)
+if test "$libc_minimum_kernel" = ok; then
+  AC_DEFINE_UNQUOTED(__LINUX_KERNEL_VERSION, $decnum)
+  AC_DEFINE_UNQUOTED(__ABI_TAG_VERSION, $abinum)
+else
+  AC_MSG_ERROR([*** The available kernel headers are older than the requested
 *** compatible kernel version])
-  fi
 fi
 
 # The result of the above test for the use of the FDE code is invalid if

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/dl-osinfo.h Tue May 15 00:01:54 2012
@@ -1,5 +1,5 @@
 /* Operating system specific code for generic dynamic loader functions.  Linux.
-   Copyright (C) 2000-2002,2004-2009,2011 Free Software Foundation, Inc.
+   Copyright (C) 2000-2012 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,18 +25,6 @@
 
 #ifndef MIN
 # define MIN(a,b) (((a)<(b))?(a):(b))
-#endif
-
-#ifdef SHARED
-/* This is the function used in the dynamic linker to print the fatal error
-   message.  */
-static void
-__attribute__ ((__noreturn__))
-dl_fatal (const char *str)
-{
-  _dl_dprintf (2, str);
-  _exit (1);
-}
 #endif
 
 #define DL_SYSDEP_OSCHECK(FATAL)					      \

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/getcwd.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/getcwd.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/getcwd.c Tue May 15 00:01:54 2012
@@ -38,27 +38,6 @@
 #endif
 
 
-#if __ASSUME_GETCWD_SYSCALL > 0
-/* Kernel 2.1.92 introduced a third way to get the current working
-   directory: a syscall.  We've got to be careful that even when
-   compiling under 2.1.92+ the libc still runs under older kernels. */
-# define no_syscall_getcwd 0
-# define have_new_dcache 1
-#else
-# if __NR_getcwd
-/* Kernel 2.1.92 introduced a third way to get the current working
-   directory: a syscall.  We've got to be careful that even when
-   compiling under 2.1.92+ the libc still runs under older kernels.
-   An additional problem is that the system call does not return
-   the path of directories longer than one page.  */
-static int no_syscall_getcwd;
-static int have_new_dcache;
-# else
-#  define no_syscall_getcwd 1
-static int have_new_dcache = 1;
-# endif
-#endif
-
 /* The "proc" filesystem provides an easy method to retrieve the value.
    For each process, the corresponding directory contains a symbolic link
    named `cwd'.  Reading the content of this link immediate gives us the
@@ -70,11 +49,7 @@
 __getcwd (char *buf, size_t size)
 {
   char *path;
-  int n;
   char *result;
-
-  if (no_syscall_getcwd && !have_new_dcache)
-    return generic_getcwd (buf, size);
 
 #ifndef NO_ALLOCATION
   size_t alloc_size = size;
@@ -101,138 +76,59 @@
 #endif
     path = buf;
 
-#if defined __NR_getcwd || __LINUX_GETCWD_SYSCALL > 0
-  if (!no_syscall_getcwd)
+  int retval;
+
+  retval = INLINE_SYSCALL (getcwd, 2, CHECK_STRING (path), alloc_size);
+  if (retval >= 0)
     {
-      int retval;
+#ifndef NO_ALLOCATION
+      if (buf == NULL && size == 0)
+	/* Ensure that the buffer is only as large as necessary.  */
+	buf = realloc (path, (size_t) retval);
 
-      retval = INLINE_SYSCALL (getcwd, 2, CHECK_STRING (path), alloc_size);
-      if (retval >= 0)
-	{
-# ifndef NO_ALLOCATION
-	  if (buf == NULL && size == 0)
-	    /* Ensure that the buffer is only as large as necessary.  */
-	    buf = realloc (path, (size_t) retval);
-
-	  if (buf == NULL)
-	    /* Either buf was NULL all along, or `realloc' failed but
-	       we still have the original string.  */
-	    buf = path;
-# endif
-
-	  return buf;
-	}
-
-      /* The system call cannot handle paths longer than a page.
-	 Neither can the magic symlink in /proc/self.  Just use the
-	 generic implementation right away.  */
-      if (errno == ENAMETOOLONG)
-	{
-# ifndef NO_ALLOCATION
-	  if (buf == NULL && size == 0)
-	    {
-	      free (path);
-	      path = NULL;
-	    }
-# endif
-
-	  result = generic_getcwd (path, size);
-
-# ifndef NO_ALLOCATION
-	  if (result == NULL && buf == NULL && size != 0)
-	    free (path);
-# endif
-
-	  return result;
-	}
-
-# if __ASSUME_GETCWD_SYSCALL
-      /* It should never happen that the `getcwd' syscall failed because
-	 the buffer is too small if we allocated the buffer ourselves
-	 large enough.  */
-      assert (errno != ERANGE || buf != NULL || size != 0);
-
-#  ifndef NO_ALLOCATION
       if (buf == NULL)
-	free (path);
-#  endif
-
-      return NULL;
-# else
-      if (errno == ENOSYS)
-	{
-	   no_syscall_getcwd = 1;
-	   have_new_dcache = 1;	/* Now we will try the /proc method.  */
-	}
-      else if (errno != ERANGE || buf != NULL)
-	{
-#  ifndef NO_ALLOCATION
-	  if (buf == NULL)
-	    free (path);
-#  endif
-	  return NULL;
-	}
-# endif
-    }
+	/* Either buf was NULL all along, or `realloc' failed but
+	   we still have the original string.  */
+	buf = path;
 #endif
 
-  n = __readlink ("/proc/self/cwd", path, alloc_size - 1);
-  if (n != -1)
+      return buf;
+    }
+
+  /* The system call cannot handle paths longer than a page.
+     Neither can the magic symlink in /proc/self.  Just use the
+     generic implementation right away.  */
+  if (errno == ENAMETOOLONG)
     {
-      if (path[0] == '/')
+#ifndef NO_ALLOCATION
+      if (buf == NULL && size == 0)
 	{
-	  if ((size_t) n >= alloc_size - 1)
-	    {
-#ifndef NO_ALLOCATION
-	      if (buf == NULL)
-		free (path);
-#endif
-	      return NULL;
-	    }
-
-	  path[n] = '\0';
-#ifndef NO_ALLOCATION
-	  if (buf == NULL && size == 0)
-	    /* Ensure that the buffer is only as large as necessary.  */
-	    buf = realloc (path, (size_t) n + 1);
-	  if (buf == NULL)
-	    /* Either buf was NULL all along, or `realloc' failed but
-	       we still have the original string.  */
-	    buf = path;
+	  free (path);
+	  path = NULL;
+	}
 #endif
 
-	  return buf;
-	}
-#ifndef have_new_dcache
-      else
-	have_new_dcache = 0;
+      result = generic_getcwd (path, size);
+
+#ifndef NO_ALLOCATION
+      if (result == NULL && buf == NULL && size != 0)
+	free (path);
 #endif
+
+      return result;
     }
 
-#if __ASSUME_GETCWD_SYSCALL == 0
-  /* Set to have_new_dcache only if error indicates that proc doesn't
-     exist.  */
-  if (errno != EACCES && errno != ENAMETOOLONG)
-    have_new_dcache = 0;
-#endif
+  /* It should never happen that the `getcwd' syscall failed because
+     the buffer is too small if we allocated the buffer ourselves
+     large enough.  */
+  assert (errno != ERANGE || buf != NULL || size != 0);
 
 #ifndef NO_ALLOCATION
-  /* Don't put restrictions on the length of the path unless the user does.  */
-  if (buf == NULL && size == 0)
-    {
-      free (path);
-      path = NULL;
-    }
-#endif
-
-  result = generic_getcwd (path, size);
-
-#ifndef NO_ALLOCATION
-  if (result == NULL && buf == NULL && size != 0)
+  if (buf == NULL)
     free (path);
 #endif
 
-  return result;
+  return NULL;
 }
 weak_alias (__getcwd, getcwd)
 

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/chown.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/chown.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/chown.c Tue May 15 00:01:54 2012
@@ -1,5 +1,4 @@
-/* Copyright (C) 1998,1999,2000,2002,2003,2004,2006
-	Free Software Foundation, Inc.
+/* Copyright (C) 1998-2012 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
@@ -42,64 +41,22 @@
 extern int __real_chown (const char *__file, uid_t __owner, gid_t __group);
 
 
-#if defined __NR_lchown || __ASSUME_LCHOWN_SYSCALL > 0
-/* Running under Linux > 2.1.80.  */
-
-# ifdef __NR_chown32
+#ifdef __NR_chown32
 #  if __ASSUME_32BITUIDS == 0
 /* This variable is shared with all files that need to check for 32bit
    uids.  */
 extern int __libc_missing_32bit_uids;
-#  endif
-# endif /* __NR_chown32 */
+# endif
+#endif /* __NR_chown32 */
 
 int
 __real_chown (const char *file, uid_t owner, gid_t group)
 {
-# if __ASSUME_LCHOWN_SYSCALL == 0
-  static int __libc_old_chown;
-  int result;
-
-  if (!__libc_old_chown)
-    {
-      int saved_errno = errno;
-#  ifdef __NR_chown32
-      if (__libc_missing_32bit_uids <= 0)
-	{
-	  int result;
-	  int saved_errno = errno;
-
-	  result = INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
-	  if (result == 0 || errno != ENOSYS)
-	    return result;
-
-	  __set_errno (saved_errno);
-	  __libc_missing_32bit_uids = 1;
-	}
-#  endif /* __NR_chown32 */
-      if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
-	  || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
-	{
-	  __set_errno (EINVAL);
-	  return -1;
-	}
-
-      result = INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
-
-      if (result >= 0 || errno != ENOSYS)
-	return result;
-
-      __set_errno (saved_errno);
-      __libc_old_chown = 1;
-    }
-
-  return __lchown (file, owner, group);
-# elif __ASSUME_32BITUIDS
-  /* This implies __ASSUME_LCHOWN_SYSCALL.  */
+#if __ASSUME_32BITUIDS
   return INLINE_SYSCALL (chown32, 3, CHECK_STRING (file), owner, group);
-# else
-  /* !__ASSUME_32BITUIDS && ASSUME_LCHOWN_SYSCALL  */
-#  ifdef __NR_chown32
+#else
+  /* !__ASSUME_32BITUIDS */
+# ifdef __NR_chown32
   if (__libc_missing_32bit_uids <= 0)
     {
       int result;
@@ -112,7 +69,7 @@
       __set_errno (saved_errno);
       __libc_missing_32bit_uids = 1;
     }
-#  endif /* __NR_chown32 */
+# endif /* __NR_chown32 */
   if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
       || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
     {
@@ -121,19 +78,11 @@
     }
 
   return INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
-# endif
+#endif
 }
-#endif
 
 
-#if !defined __NR_lchown && __ASSUME_LCHOWN_SYSCALL == 0
-/* Compiling under older kernels.  */
-int
-__chown_is_lchown (const char *file, uid_t owner, gid_t group)
-{
-  return INLINE_SYSCALL (chown, 3, CHECK_STRING (file), owner, group);
-}
-#elif SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
+#if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
 /* Compiling for compatibiity.  */
 int
 attribute_compat_text_section
@@ -147,12 +96,6 @@
 compat_symbol (libc, __chown_is_lchown, chown, GLIBC_2_0);
 #endif
 
-#ifdef __NR_lchown
 versioned_symbol (libc, __real_chown, chown, GLIBC_2_1);
 strong_alias (__real_chown, __chown)
-#else
-strong_alias (__chown_is_lchown, __chown_is_lchown21)
-versioned_symbol (libc, __chown_is_lchown21, chown, GLIBC_2_1);
-strong_alias (__chown_is_lchown, __chown)
-#endif
 libc_hidden_def (__chown)

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/fchownat.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/fchownat.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/fchownat.c Tue May 15 00:01:54 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2012 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
@@ -84,7 +84,6 @@
     }
 
 # if __ASSUME_32BITUIDS > 0
-  /* This implies __ASSUME_LCHOWN_SYSCALL.  */
   INTERNAL_SYSCALL_DECL (err);
 
   if (flag & AT_SYMLINK_NOFOLLOW)

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sigaction.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sigaction.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/i386/sigaction.c Tue May 15 00:01:54 2012
@@ -1,5 +1,5 @@
 /* POSIX.1 `sigaction' call for Linux/i386.
-   Copyright (C) 1991,1995-2000,2002-2005,2006 Free Software Foundation, Inc.
+   Copyright (C) 1991-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -37,12 +37,6 @@
 #define SA_RESTORER 0x04000000
 
 
-#if __ASSUME_REALTIME_SIGNALS == 0
-/* The variable is shared between all wrappers around signal handling
-   functions which have RT equivalents.  */
-int __libc_missing_rt_sigs;
-#endif
-
 /* Using the hidden attribute here does not change the code but it
    helps to avoid warnings.  */
 #ifdef __NR_rt_sigaction
@@ -56,92 +50,39 @@
 int
 __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
 {
-#if __ASSUME_REALTIME_SIGNALS == 0
-  struct old_kernel_sigaction k_newact, k_oldact;
-#endif
   int result;
 
-#ifdef __NR_rt_sigaction
+  struct kernel_sigaction kact, koact;
 
-  /* First try the RT signals.  */
-# if __ASSUME_REALTIME_SIGNALS == 0
-  if (!__libc_missing_rt_sigs)
-# endif
-    {
-      struct kernel_sigaction kact, koact;
-# if __ASSUME_REALTIME_SIGNALS == 0
-      int saved_errno = errno;
-# endif
-
-      if (act)
-	{
-	  kact.k_sa_handler = act->sa_handler;
-	  kact.sa_flags = act->sa_flags;
-	  memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
-
-	  if (GLRO(dl_sysinfo_dso) == NULL)
-	    {
-	      kact.sa_flags |= SA_RESTORER;
-
-	      kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
-				  ? &restore_rt : &restore);
-	    }
-	}
-
-      /* XXX The size argument hopefully will have to be changed to the
-	 real size of the user-level sigset_t.  */
-      result = INLINE_SYSCALL (rt_sigaction, 4,
-			       sig, act ? __ptrvalue (&kact) : NULL,
-			       oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
-
-# if __ASSUME_REALTIME_SIGNALS == 0
-      if (result >= 0 || errno != ENOSYS)
-# endif
-	{
-	  if (oact && result >= 0)
-	    {
-	      oact->sa_handler = koact.k_sa_handler;
-	      memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
-	      oact->sa_flags = koact.sa_flags;
-	      oact->sa_restorer = koact.sa_restorer;
-	    }
-	  return result;
-	}
-
-# if __ASSUME_REALTIME_SIGNALS == 0
-      __set_errno (saved_errno);
-      __libc_missing_rt_sigs = 1;
-# endif
-    }
-#endif
-
-#if __ASSUME_REALTIME_SIGNALS == 0
   if (act)
     {
-      k_newact.k_sa_handler = act->sa_handler;
-      k_newact.sa_mask = act->sa_mask.__val[0];
-      k_newact.sa_flags = act->sa_flags | SA_RESTORER;
+      kact.k_sa_handler = act->sa_handler;
+      kact.sa_flags = act->sa_flags;
+      memcpy (&kact.sa_mask, &act->sa_mask, sizeof (sigset_t));
 
-      k_newact.sa_restorer = &restore;
+      if (GLRO(dl_sysinfo_dso) == NULL)
+	{
+	  kact.sa_flags |= SA_RESTORER;
+
+	  kact.sa_restorer = ((act->sa_flags & SA_SIGINFO)
+			      ? &restore_rt : &restore);
+	}
     }
 
-  result = INLINE_SYSCALL (sigaction, 3, sig,
-			   act ? __ptrvalue (&k_newact) : 0,
-			   oact ? __ptrvalue (&k_oldact) : 0);
+  /* XXX The size argument hopefully will have to be changed to the
+     real size of the user-level sigset_t.  */
+  result = INLINE_SYSCALL (rt_sigaction, 4,
+			   sig, act ? __ptrvalue (&kact) : NULL,
+			   oact ? __ptrvalue (&koact) : NULL, _NSIG / 8);
 
-  if (result < 0)
-    return -1;
-
-  if (oact)
+  if (oact && result >= 0)
     {
-      oact->sa_handler = k_oldact.k_sa_handler;
-      oact->sa_mask.__val[0] = k_oldact.sa_mask;
-      oact->sa_flags = k_oldact.sa_flags;
-      oact->sa_restorer = k_oldact.sa_restorer;
+      oact->sa_handler = koact.k_sa_handler;
+      memcpy (&oact->sa_mask, &koact.sa_mask, sizeof (sigset_t));
+      oact->sa_flags = koact.sa_flags;
+      oact->sa_restorer = koact.sa_restorer;
     }
-
-  return 0;
-#endif
+  return result;
 }
 libc_hidden_def (__libc_sigaction)
 

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/if_index.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/if_index.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/if_index.c Tue May 15 00:01:54 2012
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2007
-   Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 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
@@ -32,14 +31,6 @@
 #include "netlinkaccess.h"
 
 
-/* Variable to signal whether SIOCGIFCONF is not available.  */
-# if __ASSUME_SIOCGIFNAME == 0
-static int old_siocgifconf;
-#else
-# define old_siocgifconf 0
-#endif
-
-
 unsigned int
 if_nametoindex (const char *ifname)
 {
@@ -101,38 +92,20 @@
 
   /* We may be able to get the needed buffer size directly, rather than
      guessing.  */
-  if (! old_siocgifconf)
-    {
-      ifc.ifc_buf = NULL;
-      ifc.ifc_len = 0;
-      if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
-	{
-# if __ASSUME_SIOCGIFNAME == 0
-	  old_siocgifconf = 1;
-# endif
-	  rq_len = RQ_IFS * sizeof (struct ifreq);
-	}
-      else
-	rq_len = ifc.ifc_len;
-    }
+  ifc.ifc_buf = NULL;
+  ifc.ifc_len = 0;
+  if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
+    rq_len = RQ_IFS * sizeof (struct ifreq);
   else
-    rq_len = RQ_IFS * sizeof (struct ifreq);
+    rq_len = ifc.ifc_len;
 
   /* Read all the interfaces out of the kernel.  */
   ifc.ifc_buf = alloca (rq_len);
   ifc.ifc_len = rq_len;
-  while (1)
-    {
-        if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
-	{
-	  close_not_cancel_no_status (fd);
-	  return NULL;
-	}
-      if (ifc.ifc_len < rq_len || ! old_siocgifconf)
-	break;
-
-      ifc.ifc_buf = extend_alloca (ifc.ifc_buf, rq_len, 2 * rq_len);
-      ifc.ifc_len = rq_len;
+  if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
+    {
+      close_not_cancel_no_status (fd);
+      return NULL;
     }
 
   nifs = ifc.ifc_len / sizeof (struct ifreq);
@@ -314,161 +287,31 @@
 char *
 if_indextoname (unsigned int ifindex, char *ifname)
 {
-#if !defined SIOCGIFINDEX && __ASSUME_SIOCGIFNAME == 0
-  __set_errno (ENOSYS);
-  return NULL;
-#else
-# if __ASSUME_SIOCGIFNAME == 0
-  struct if_nameindex *idx;
-  struct if_nameindex *p;
-  char *result = NULL;
-# endif
-
-# if defined SIOCGIFNAME || __ASSUME_SIOCGIFNAME > 0
   /* We may be able to do the conversion directly, rather than searching a
      list.  This ioctl is not present in kernels before version 2.1.50.  */
   struct ifreq ifr;
   int fd;
-#  if __ASSUME_SIOCGIFNAME == 0
-  static int siocgifname_works_not;
-
-  if (!siocgifname_works_not)
-#  endif
-    {
-#  if __ASSUME_SIOCGIFNAME == 0
-      int serrno = errno;
-#  endif
-      int status;
-
-      fd = __opensock ();
-
-      if (fd < 0)
-	return NULL;
-
-      ifr.ifr_ifindex = ifindex;
-      status = __ioctl (fd, SIOCGIFNAME, &ifr);
-
-      close_not_cancel_no_status (fd);
-
-      if (status  < 0)
-	{
-#  if __ASSUME_SIOCGIFNAME == 0
-	  if (errno == EINVAL)
-	    siocgifname_works_not = 1; /* Don't make the same mistake twice. */
-	  else
-#  endif
-	    {
-	      if (errno == ENODEV)
-		/* POSIX requires ENXIO.  */
-		__set_errno (ENXIO);
-
-	      return NULL;
-	    }
-	}
-      else
-	return strncpy (ifname, ifr.ifr_name, IFNAMSIZ);
-
-#  if __ASSUME_SIOCGIFNAME == 0
-      __set_errno (serrno);
-#  endif
-    }
-# endif
-
-# if __ASSUME_SIOCGIFNAME == 0
-  idx = if_nameindex ();
-
-  if (idx != NULL)
-    {
-      for (p = idx; p->if_index || p->if_name; ++p)
-	if (p->if_index == ifindex)
-	  {
-	    result = strncpy (ifname, p->if_name, IFNAMSIZ);
-	    break;
-	  }
-
-      if_freenameindex (idx);
-
-      if (result == NULL)
+  int status;
+
+  fd = __opensock ();
+
+  if (fd < 0)
+    return NULL;
+
+  ifr.ifr_ifindex = ifindex;
+  status = __ioctl (fd, SIOCGIFNAME, &ifr);
+
+  close_not_cancel_no_status (fd);
+
+  if (status  < 0)
+    {
+      if (errno == ENODEV)
+	/* POSIX requires ENXIO.  */
 	__set_errno (ENXIO);
-    }
-  return result;
-# endif
-#endif
+
+      return NULL;
+    }
+  else
+    return strncpy (ifname, ifr.ifr_name, IFNAMSIZ);
 }
 libc_hidden_def (if_indextoname)
-
-
-#if 0
-void
-internal_function
-__protocol_available (int *have_inet, int *have_inet6)
-{
-  int fd = __opensock ();
-  unsigned int nifs;
-  int rq_len;
-  struct ifconf ifc;
-# define RQ_IFS	4
-
-  /* Wirst case assumption.  */
-  *have_inet = 0;
-  *have_inet6 = 0;
-
-  if (fd < 0)
-    /* We cannot open the socket.  No networking at all?  */
-    return;
-
-  /* We may be able to get the needed buffer size directly, rather than
-     guessing.  */
-  if (! old_siocgifconf)
-    {
-      ifc.ifc_buf = NULL;
-      ifc.ifc_len = 0;
-      if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
-	{
-# if __ASSUME_SIOCGIFNAME == 0
-	  old_siocgifconf = 1;
-# endif
-	  rq_len = RQ_IFS * sizeof (struct ifreq);
-	}
-      else
-	rq_len = ifc.ifc_len;
-    }
-  else
-    rq_len = RQ_IFS * sizeof (struct ifreq);
-
-  /* Read all the interfaces out of the kernel.  */
-  do
-    {
-      ifc.ifc_buf = alloca (ifc.ifc_len = rq_len);
-      if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
-	{
-	  close_not_cancel_no_status (fd);
-	  return;
-	}
-      rq_len *= 2;
-    }
-  while (ifc.ifc_len == rq_len && old_siocgifconf);
-
-  nifs = ifc.ifc_len / sizeof (struct ifreq);
-
-  /* Go through all the interfaces and get the address.  */
-  while (nifs-- > 0)
-    if (__ioctl (fd, SIOCGIFADDR, &ifc.ifc_req[nifs]) >= 0)
-      {
-	/* We successfully got information about this interface.  Now
-	   test whether it is an IPv4 or IPv6 address.  */
-	if (ifc.ifc_req[nifs].ifr_addr.sa_family == AF_INET)
-	  *have_inet = 1;
-	else if (ifc.ifc_req[nifs].ifr_addr.sa_family == AF_INET6)
-	  *have_inet6 = 1;
-
-	/* Note, this is & not &&.  It works since the values are always
-	   0 or 1.  */
-	if (*have_inet & *have_inet6)
-	  /* We can stop early.  */
-	  break;
-      }
-
-  close_not_cancel_no_status (fd);
-}
-#endif

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/ifreq.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/ifreq.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/ifreq.c Tue May 15 00:01:54 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999,2002,2003,2004,2005,2006 Free Software Foundation, Inc.
+/* Copyright (C) 1999-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@xxxxxxx>.
 
@@ -18,13 +18,6 @@
 
 #include "ifreq.h"
 #include <kernel-features.h>
-
-/* Variable to signal whether SIOCGIFCONF is not available.  */
-#if __ASSUME_SIOCGIFNAME == 0 || 1
-static int old_siocgifconf;
-#else
-# define old_siocgifconf 0
-#endif
 
 
 void
@@ -49,45 +42,27 @@
 
   /* We may be able to get the needed buffer size directly, rather than
      guessing.  */
-  if (! old_siocgifconf)
-    {
-      ifc.ifc_buf = NULL;
-      ifc.ifc_len = 0;
-      if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
-	{
-# if __ASSUME_SIOCGIFNAME == 0
-	  old_siocgifconf = 1;
-# endif
-	  rq_len = RQ_IFS * sizeof (struct ifreq);
-	}
-      else
-	rq_len = ifc.ifc_len;
-    }
+  ifc.ifc_buf = NULL;
+  ifc.ifc_len = 0;
+  if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
+    rq_len = RQ_IFS * sizeof (struct ifreq);
   else
-    rq_len = RQ_IFS * sizeof (struct ifreq);
+    rq_len = ifc.ifc_len;
 
   /* Read all the interfaces out of the kernel.  */
-  while (1)
+  ifc.ifc_len = rq_len;
+  void *newp = realloc (ifc.ifc_buf, ifc.ifc_len);
+  if (newp == NULL
+      || (ifc.ifc_buf = newp, __ioctl (fd, SIOCGIFCONF, &ifc)) < 0)
     {
-      ifc.ifc_len = rq_len;
-      void *newp = realloc (ifc.ifc_buf, ifc.ifc_len);
-      if (newp == NULL
-	  || (ifc.ifc_buf = newp, __ioctl (fd, SIOCGIFCONF, &ifc)) < 0)
-	{
-	  free (ifc.ifc_buf);
+      free (ifc.ifc_buf);
 
-	  if (fd != sockfd)
-	    __close (fd);
+      if (fd != sockfd)
+	__close (fd);
 
-	  *num_ifs = 0;
-	  *ifreqs = NULL;
-	  return;
-	}
-
-      if (!old_siocgifconf || ifc.ifc_len < rq_len)
-	break;
-
-      rq_len *= 2;
+      *num_ifs = 0;
+      *ifreqs = NULL;
+      return;
     }
 
   nifs = ifc.ifc_len / sizeof (struct ifreq);

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/kernel-features.h
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/kernel-features.h (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/kernel-features.h Tue May 15 00:01:54 2012
@@ -35,60 +35,16 @@
    version given by __LINUX_KERNEL_VERSION.  We are not always exactly
    recording the correct versions in which the features were
    introduced.  If somebody cares these values can afterwards be
-   corrected.  Most of the numbers here are set corresponding to
-   2.2.0.  */
-
-/* `getcwd' system call.  */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_GETCWD_SYSCALL	1
-#endif
-
-/* Real-time signal became usable in 2.1.70.  */
-#if __LINUX_KERNEL_VERSION >= 131398
-# define __ASSUME_REALTIME_SIGNALS	1
-#endif
-
-/* When were the `pread'/`pwrite' syscalls introduced?  */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_PREAD_SYSCALL		1
-# define __ASSUME_PWRITE_SYSCALL	1
-#endif
-
-/* When was `poll' introduced?  */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_POLL_SYSCALL		1
-#endif
-
-/* The `lchown' syscall was introduced in 2.1.80.  */
-#if __LINUX_KERNEL_VERSION >= 131408
-# define __ASSUME_LCHOWN_SYSCALL	1
-#endif
-
-/* When did the `setresuid' syscall became available?  */
-#if __LINUX_KERNEL_VERSION >= 131584 && !defined __sparc__
+   corrected.  */
+
+/* When did the `setresuid' syscall became available?  By 2.2.0 except
+   on SPARC.  */
+#if !defined __sparc__
 # define __ASSUME_SETRESUID_SYSCALL	1
 #endif
 
-/* The SIOCGIFNAME ioctl is available starting with 2.1.50.  */
-#if __LINUX_KERNEL_VERSION >= 131408
-# define __ASSUME_SIOCGIFNAME		1
-#endif
-
-/* MSG_NOSIGNAL was at least available with Linux 2.2.0.  */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_MSG_NOSIGNAL		1
-#endif
-
 /* The sendfile syscall was introduced in 2.2.0.  */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_SENDFILE		1
-#endif
-
-/* Only very old kernels had no real symlinks for terminal descriptors
-   in /proc/self/fd.  */
-#if __LINUX_KERNEL_VERSION >= 131584
-# define __ASSUME_PROC_SELF_FD_SYMLINK	1
-#endif
+#define __ASSUME_SENDFILE		1
 
 /* On x86 another `getrlimit' syscall was added in 2.3.25.  */
 #if __LINUX_KERNEL_VERSION >= 131865 && defined __i386__

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/poll.c Tue May 15 00:01:54 2012
@@ -1,6 +1,5 @@
-/* Poll system call, with emulation if it is not available.
-   Copyright (C) 1997,1998,1999,2000,2001,2002,2006
-	Free Software Foundation, Inc.
+/* Poll system call.
+   Copyright (C) 1997-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -26,58 +25,12 @@
 
 #include <kernel-features.h>
 
-#if defined __NR_poll || __ASSUME_POLL_SYSCALL > 0
-
-# if __ASSUME_POLL_SYSCALL == 0
-static int __emulate_poll (struct pollfd *fds, nfds_t nfds,
-			   int timeout) internal_function;
-# endif
-
-
-# if __ASSUME_POLL_SYSCALL == 0
-/* For loser kernels.  */
-static int
-loser_poll (struct pollfd *fds, nfds_t nfds, int timeout)
-{
-  static int must_emulate;
-
-  if (!must_emulate)
-    {
-      int errno_saved = errno;
-      int retval = INLINE_SYSCALL (poll, 3, CHECK_N (fds, nfds), nfds,
-				   timeout);
-
-      if (retval >= 0 || errno != ENOSYS)
-	return retval;
-
-      __set_errno (errno_saved);
-      must_emulate = 1;
-    }
-
-  return __emulate_poll (fds, nfds, timeout);
-}
-# endif
-
-
-/* The real implementation.  */
 int
 __poll (fds, nfds, timeout)
      struct pollfd *fds;
      nfds_t nfds;
      int timeout;
 {
-# if __ASSUME_POLL_SYSCALL == 0
-  if (SINGLE_THREAD_P)
-    return loser_poll (CHECK_N (fds, nfds), nfds, timeout);
-
-  int oldtype = LIBC_CANCEL_ASYNC ();
-
-  int result = loser_poll (CHECK_N (fds, nfds), nfds, timeout);
-
-   LIBC_CANCEL_RESET (oldtype);
-
-  return result;
-# else
   if (SINGLE_THREAD_P)
     return INLINE_SYSCALL (poll, 3, CHECK_N (fds, nfds), nfds, timeout);
 
@@ -88,17 +41,7 @@
    LIBC_CANCEL_RESET (oldtype);
 
   return result;
-# endif
 }
 libc_hidden_def (__poll)
 weak_alias (__poll, poll)
 strong_alias (__poll, __libc_poll)
-
-/* Get the emulation code.  */
-# define __poll(fds, nfds, timeout) \
-  static internal_function __emulate_poll (fds, nfds, timeout)
-#endif
-
-#if __ASSUME_POLL_SYSCALL == 0
-# include <sysdeps/unix/bsd/poll.c>
-#endif

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/chown.c Tue May 15 00:01:54 2012
@@ -1,5 +1,5 @@
 /* chown() compatibility.
-   Copyright (C) 1998, 2000, 2002, 2003, 2005 Free Software Foundation, Inc.
+   Copyright (C) 1998-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -35,95 +35,7 @@
 int
 __chown (const char *file, uid_t owner, gid_t group)
 {
-#if __ASSUME_LCHOWN_SYSCALL
   return INLINE_SYSCALL (chown, 3, file, owner, group);
-#else
-  int err;
-  int old_errno;
-  char link[PATH_MAX + 2];
-  char path[2 * PATH_MAX + 4];
-  int loopct;
-  size_t filelen;
-  static int libc_old_chown = 0 /* -1=old linux, 1=new linux, 0=unknown */;
-
-  if (libc_old_chown == 1)
-    return INLINE_SYSCALL (chown, 3, __ptrvalue (file), owner, group);
-
-  old_errno = errno;
-
-# ifdef __NR_lchown
-  if (libc_old_chown == 0)
-    {
-      err = INLINE_SYSCALL (chown, 3, __ptrvalue (file), owner, group);
-      if (err != -1 || errno != ENOSYS)
-	{
-	  libc_old_chown = 1;
-	  return err;
-	}
-      libc_old_chown = -1;
-    }
-# endif
-
-  err = __readlink (file, link, PATH_MAX + 1);
-  if (err == -1)
-    {
-      __set_errno (old_errno);
-      return __lchown (file, owner, group);
-    }
-
-  filelen = strlen (file) + 1;
-  if (filelen > sizeof (path))
-    {
-      __set_errno (ENAMETOOLONG);
-      return -1;
-    }
-  memcpy (path, file, filelen);
-
-  /* 'The system has an arbitrary limit...'  In practise, we'll hit
-     ENAMETOOLONG before this, usually.  */
-  for (loopct = 0; loopct < 128; ++loopct)
-    {
-      size_t linklen;
-
-      if (err >= PATH_MAX + 1)
-	{
-	  __set_errno (ENAMETOOLONG);
-	  return -1;
-	}
-
-      link[err] = 0;  /* Null-terminate string, just-in-case.  */
-
-      linklen = strlen (link) + 1;
-
-      if (link[0] == '/')
-	memcpy (path, link, linklen);
-      else
-	{
-	  filelen = strlen (path);
-
-	  while (filelen > 1 && path[filelen - 1] == '/')
-	    --filelen;
-	  while (filelen > 0 && path[filelen - 1] != '/')
-	    --filelen;
-	  if (filelen + linklen > sizeof (path))
-	    {
-	      errno = ENAMETOOLONG;
-	      return -1;
-	    }
-	  memcpy (path + filelen, link, linklen);
-	}
-
-      err = __readlink (path, link, PATH_MAX + 1);
-
-      if (err == -1)
-	{
-	  __set_errno (old_errno);
-	  return __lchown (path, owner, group);
-	}
-    }
-  __set_errno (ELOOP);
-  return -1;
-#endif
 }
 libc_hidden_def (__chown)
 

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/fchownat.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/fchownat.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/fchownat.c Tue May 15 00:01:54 2012
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2012 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
@@ -86,7 +86,6 @@
       file = buf;
     }
 
-# if __ASSUME_LCHOWN_SYSCALL
   INTERNAL_SYSCALL_DECL (err);
 
   if (flag & AT_SYMLINK_NOFOLLOW)
@@ -99,15 +98,6 @@
       __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf);
       return -1;
     }
-# else
-  /* Don't inline the rest to avoid unnecessary code duplication.  */
-  if (flag & AT_SYMLINK_NOFOLLOW)
-    result = __lchown (file, owner, group);
-  else
-    result = __chown (file, owner, group);
-  if (result < 0)
-    __atfct_seterrno (errno, fd, buf);
-# endif
 
   return result;
 

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread.c Tue May 15 00:01:54 2012
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
-	Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
 
@@ -27,14 +26,6 @@
 
 #include <kernel-features.h>
 
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread (int fd, void *buf, size_t count,
-				off_t offset) internal_function;
-# endif
-
-
 ssize_t
 __libc_pread (fd, buf, count, offset)
      int fd;
@@ -49,11 +40,6 @@
       /* On PPC32 64bit values are aligned in odd/even register pairs.  */
       result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
 			       0, offset >> 31, offset);
-# if __ASSUME_PREAD_SYSCALL == 0
-      if (result == -1 && errno == ENOSYS)
-	/* No system call available.  Use the emulation.  */
-	result = __emulate_pread (fd, buf, count, offset);
-# endif
 
       return result;
     }
@@ -63,11 +49,6 @@
   /* On PPC32 64bit values are aligned in odd/even register pairs.  */
   result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
 			       0, offset >> 31, offset);
-# if __ASSUME_PREAD_SYSCALL == 0
-  if (result == -1 && errno == ENOSYS)
-    /* No system call available.  Use the emulation.  */
-    result = __emulate_pread (fd, buf, count, offset);
-# endif
 
   LIBC_CANCEL_RESET (oldtype);
 
@@ -76,11 +57,3 @@
 
 strong_alias (__libc_pread, __pread)
 weak_alias (__libc_pread, pread)
-
-# define __libc_pread(fd, buf, count, offset) \
-     static internal_function __emulate_pread (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread.c>
-#endif

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pread64.c Tue May 15 00:01:54 2012
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
-	Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
 
@@ -26,13 +25,6 @@
 
 #include <kernel-features.h>
 
-#if defined __NR_pread || __ASSUME_PREAD_SYSCALL > 0
-
-# if __ASSUME_PREAD_SYSCALL == 0
-static ssize_t __emulate_pread64 (int fd, void *buf, size_t count,
-				  off64_t offset) internal_function;
-# endif
-
 
 ssize_t
 __libc_pread64 (fd, buf, count, offset)
@@ -49,11 +41,6 @@
       result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
 			       0, (long) (offset >> 32),
 			       (long) offset);
-# if __ASSUME_PREAD_SYSCALL == 0
-      if (result == -1 && errno == ENOSYS)
-	/* No system call available.  Use the emulation.  */
-	result = __emulate_pread64 (fd, buf, count, offset);
-# endif
 
       return result;
     }
@@ -64,11 +51,6 @@
   result = INLINE_SYSCALL (pread, 6, fd, CHECK_N (buf, count), count,
 			   0, (long) (offset >> 32),
 			   (long) offset);
-# if __ASSUME_PREAD_SYSCALL == 0
-  if (result == -1 && errno == ENOSYS)
-    /* No system call available.  Use the emulation.  */
-    result = __emulate_pread64 (fd, buf, count, offset);
-# endif
 
   LIBC_CANCEL_RESET (oldtype);
 
@@ -77,11 +59,3 @@
 
 weak_alias (__libc_pread64, __pread64)
 weak_alias (__libc_pread64, pread64)
-
-# define __libc_pread64(fd, buf, count, offset) \
-     static internal_function __emulate_pread64 (fd, buf, count, offset)
-#endif
-
-# if __ASSUME_PREAD_SYSCALL == 0
-# include <sysdeps/posix/pread64.c>
-#endif

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite.c Tue May 15 00:01:54 2012
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
-	Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
 
@@ -27,13 +26,6 @@
 
 #include <kernel-features.h>
 
-#if defined __NR_pwrite || __ASSUME_PWRITE_SYSCALL > 0
-
-# if __ASSUME_PWRITE_SYSCALL == 0
-static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
-				 off_t offset) internal_function;
-# endif
-
 
 ssize_t
 __libc_pwrite (fd, buf, count, offset)
@@ -49,11 +41,6 @@
       /* On PPC32 64bit values are aligned in odd/even register pairs.  */
       result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count,
 			       0, offset >> 31, offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
-      if (result == -1 && errno == ENOSYS)
-	/* No system call available.  Use the emulation.  */
-	result = __emulate_pwrite (fd, buf, count, offset);
-# endif
 
       return result;
     }
@@ -63,11 +50,6 @@
   /* On PPC32 64bit values are aligned in odd/even register pairs.  */
   result = INLINE_SYSCALL (pwrite, 6, fd, CHECK_N (buf, count), count,
 			   0, offset >> 31, offset);
-# if __ASSUME_PWRITE_SYSCALL == 0
-  if (result == -1 && errno == ENOSYS)
-    /* No system call available.  Use the emulation.  */
-    result = __emulate_pwrite (fd, buf, count, offset);
-# endif
 
   LIBC_CANCEL_RESET (oldtype);
 
@@ -76,11 +58,3 @@
 
 strong_alias (__libc_pwrite, __pwrite)
 weak_alias (__libc_pwrite, pwrite)
-
-# define __libc_pwrite(fd, buf, count, offset) \
-     static internal_function __emulate_pwrite (fd, buf, count, offset)
-#endif
-
-#if __ASSUME_PWRITE_SYSCALL == 0
-# include <sysdeps/posix/pwrite.c>
-#endif

Modified: fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c
==============================================================================
--- fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c (original)
+++ fsf/trunk/libc/sysdeps/unix/sysv/linux/powerpc/powerpc32/pwrite64.c Tue May 15 00:01:54 2012
@@ -1,5 +1,4 @@
-/* Copyright (C) 1997,1998,1999,2000,2002,2003,2006
-	Free Software Foundation, Inc.
+/* Copyright (C) 1997-2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@xxxxxxxxxx>, 1997.
 
@@ -26,13 +25,6 @@
 
 #include <kernel-features.h>
 

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