summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog86
-rw-r--r--MakeTAGS2
-rw-r--r--Makeconfig19
-rw-r--r--Makefile2
-rw-r--r--Makerules42
-rw-r--r--README.libm31
-rw-r--r--Rules10
-rw-r--r--bare/Makefile2
-rw-r--r--catgets/gencat.c3
-rw-r--r--db/makedb.c3
-rw-r--r--locale/programs/locale.c3
-rw-r--r--locale/programs/localedef.c3
-rw-r--r--manual/Makefile13
-rw-r--r--manual/socket.texi24
-rw-r--r--nss/Makefile5
-rw-r--r--nss/db-Makefile68
-rw-r--r--nss/nsswitch.c9
-rw-r--r--nss/nsswitch.conf16
-rw-r--r--sysdeps/generic/Makefile1
-rw-r--r--sysdeps/libm-ieee754/e_acoshl.c72
-rw-r--r--sysdeps/libm-ieee754/e_atanhl.c79
-rw-r--r--sysdeps/libm-ieee754/e_remainderl.c83
-rw-r--r--sysdeps/libm-ieee754/e_scalbl.c59
-rw-r--r--sysdeps/libm-ieee754/s_asinhl.c70
-rw-r--r--sysdeps/libm-ieee754/s_cosl.c87
-rw-r--r--sysdeps/libm-ieee754/s_sinl.c87
-rw-r--r--sysdeps/libm-ieee754/s_tanhl.c91
-rw-r--r--sysdeps/libm-ieee754/s_tanl.c81
-rw-r--r--sysdeps/mach/Makefile6
-rw-r--r--sysdeps/mach/hurd/Makefile14
-rw-r--r--sysdeps/unix/Makefile5
-rw-r--r--sysdeps/unix/make-syscalls.sh2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/Dist3
-rw-r--r--sysdeps/unix/sysv/linux/i386/Dist1
-rw-r--r--sysdeps/unix/sysv/linux/m68k/Dist1
-rw-r--r--version.c3
36 files changed, 999 insertions, 87 deletions
diff --git a/ChangeLog b/ChangeLog
index 079b737c5b..c661e2ddb2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,87 @@
+Fri Aug 30 01:26:44 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/unix/sysv/linux/i386/Dist: Add close.S.
+	* sysdeps/unix/sysv/linux/m68k/Dist: Likewise.
+	* sysdeps/unix/sysv/linux/alpha/Dist: Likewise.
+
+	* version.c: Add comment about where to report bugs to.
+	* catgets/gencat.c (usage): Likewise.
+	* db/makedb.c (usage): Likewise.
+	* locale/programs/locale.c (usage): Likewise.
+	* locale/programs/localedef.c (usage): Likewise.
+
+	* manual/socket.texi: A little bit better wording.
+
+Thu Aug 29 18:03:06 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* Makerules: Make sure directory exists before generating stamp file.
+	(BUILD_CFLAGS): Always refer to using $(..).
+	* manual/Makefile: Make sure directory exists before generating
+ 	stamp file.
+	(make-target-directory): Add macro definition.
+	* sysdeps/generic/Makefile: Make sure directory exists before
+ 	generating stamp file.
+
+	* Makefile (distribute): Add autolock.sh.  Reported by Fila Kolodny.
+
+Tue Aug 27 10:06:22 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	When compiling in separate directory put objects into
+	subdirectories matching the source layout.
+	* Makeconfig (objpfx) [ifdef objdir]: Append $(subdir).
+	When looking for configparms try in $(common-objpfx).
+	Use $(common-objpfx)SUBDIR to find objects from other subdirectory
+	builds.
+	* Makerules: Add $(objpfx) to vpath list.
+	(make-dummy-dep): Use $(common-objpfx) to avoid creating dummy.d
+	more than once.  All uses in dependency lists changed.
+	(+make-deps): Make target directory.
+	(sed-remove-objpfx): Substitute $(common-objpfx).
+	(do-ar, build-extra-lib, $(common-objpfx)stub-$(subdir)): Use
+	$(objpfx) instead of $(objdir) for cd command.
+	(O%-lib): Always find libc relative to $(..).
+	(subdir-stamps): Collect stamp files from subdirs.
+	(common-mostlyclean): Remove stub file in $(common-objpfx).
+	* MakeTAGS ($P/siglist.pot): Find siglist.c in stdio-common.
+	* Rules (dep-dummy-lib): Use $(common-objpfx) to avoid creating to
+	more than once.
+	($(objpfx)dummy.c, $(objpfx)empty.c): Change target name to use
+	$(common-objfpx).  All uses in dependency lists changed.
+	(generated): Prepend $(..) to names.
+	* bare/Makefile ($(objpfx)lib$(config-vendor).a): Remove $(objpfx)
+	from $@.
+	* nss/Makefile ($(objpfx)libnss_dns.so, $(objpfx)libnss_db.so):
+	Use $(common-objpfx) instead of $(..) in dependencies.
+	* sysdeps/mach/Makefile (mach-objpfx): Unconditionally use
+	$(common-objpfx) instead of $(..) and (objpfx).
+	* sysdeps/mach/hurd/Makefile (hurd-objpfx): Likewise.
+	(rpath-link): Likewise.
+	(rpcuserlibs): Likewise.
+	* sysdeps/unix/Makefile [$(subdir) = stdio-common]: Check for
+	errlist.c in $(objpfx), not $(common-objpfx).
+	($(common-objpfx)s-proto.d): Special rule not covered by pattern
+	rule.
+	* sysdeps/unix/make-syscalls.sh: Make syscall rules depending on
+	s-proto.d in $(common-objpfx), not $(objpfx).
+
+Thu Aug 29 17:45:49 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* nss/nsswitch.c (nss_dlerror_run): Free returned error
+	string.
+
+Thu Aug 29 15:53:33 1996  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/libm-ieee754/e_acoshl.c: New file. `long double'
+ 	implementation.
+	* sysdeps/libm-ieee754/e_atanhl.c: Likewise.
+	* sysdeps/libm-ieee754/e_remainderl.c: Likewise.
+	* sysdeps/libm-ieee754/e_scalbl.c: Likewise.
+	* sysdeps/libm-ieee754/s_asinhl.c: Likewise.
+	* sysdeps/libm-ieee754/s_cosl.c: Likewise.
+	* sysdeps/libm-ieee754/s_sinl.c: Likewise.
+	* sysdeps/libm-ieee754/s_tanhl.c: Likewise.
+	* sysdeps/libm-ieee754/s_tanl.c: Likewise.
+
 Thu Aug 29 12:00:30 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
 	
 	* sysdeps/mach/hurd/setitimer.c (setitimer_locked): Correct
@@ -16,7 +100,7 @@ Thu Aug 29 12:00:30 1996  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>
 
 Thu Aug 29 00:28:08 1996  Ulrich Drepper  <drepper@cygnus.com>
 
-	* stdio-common/printf_fp.c (__printf_fp): Use default value `.` if
+	* stdio-common/printf_fp.c (__printf_fp): Use default value '.' if
  	`decimal' char is 0.
 
 	* C-numeric.c (not_available): New constant.
diff --git a/MakeTAGS b/MakeTAGS
index bd52497ce3..0e7eecdb4f 100644
--- a/MakeTAGS
+++ b/MakeTAGS
@@ -145,7 +145,7 @@ else
 	$(extract)
 endif
 
-$P/siglist.pot: $(common-objpfx)siglist.c; $(extract)
+$P/siglist.pot: $(common-objpfx)stdio-common/siglist.c; $(extract)
 
 # Extract all strings from this file; its strings are not marked.
 # Their surroundings are also not interesting.
diff --git a/Makeconfig b/Makeconfig
index 413a2537e2..d3d7890903 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -59,8 +59,8 @@ endif
 # $(common-objdir) is the place to put objects and
 # such that are not specific to a single subdir.
 ifdef objdir
-objpfx = $(objdir)/
-common-objpfx = $(objpfx)
+objpfx := $(patsubst %//,%/,$(objdir)/$(subdir)/)
+common-objpfx = $(objdir)/
 common-objdir = $(objdir)
 else
 objpfx :=
@@ -110,8 +110,8 @@ ifneq ($(wildcard $(..)configparms),)
 include $(..)configparms
 endif
 ifneq ($(objpfx),)
-ifneq ($(wildcard $(objpfx)configparms),)
-include $(objpfx)configparms
+ifneq ($(wildcard $(common-objpfx)configparms),)
+include $(common-objpfx)configparms
 endif
 endif
 
@@ -325,7 +325,7 @@ default-rpath = $(libdir)
 endif
 # This is how to find at build-time things that will be installed there.
 rpath-link = $(common-objdir):$(elfobjdir):$(nssobjdir)
-nssobjdir := $(firstword $(objdir) $(patsubst ../$(subdir),.,$(..)nss))
+nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
 else
 link-libc = $(common-objpfx)libc.a $(gnulib) $(common-objpfx)libc.a
 endif
@@ -337,13 +337,8 @@ ifeq ($(elf),yes)
 +preinit = $(addprefix $(csu-objpfx),crti.o)
 +postinit = $(addprefix $(csu-objpfx),crtn.o)
 endif
-ifdef objpfx
-csu-objpfx = $(objpfx)
-elf-objpfx = $(objpfx)
-else
-csu-objpfx = $(..)csu/
-elf-objpfx = $(..)elf/
-endif
+csu-objpfx = $(common-objpfx)csu/
+elf-objpfx = $(common-objpfx)elf/
 
 ifeq (yes,$(build-shared))
 # The name under which the run-time dynamic linker is installed.
diff --git a/Makefile b/Makefile
index 6f4511a8e6..d269a9f494 100644
--- a/Makefile
+++ b/Makefile
@@ -231,7 +231,7 @@ distribute  := README INSTALL FAQ NOTES NEWS PROJECTS			\
 	       ansidecl.h mkinstalldirs move-if-change install-sh	\
 	       configure configure.in aclocal.m4 config.sub config.guess\
 	       config.h.in config.make.in config-name.in Makefile.in	\
-	       munch-tmpl.c munch.awk \
+	       autolock.sh munch-tmpl.c munch.awk \
 	       sysdep.h set-hooks.h libc-symbols.h version.h shlib-versions \
 	       rpm/Makefile rpm/template rpm/rpmrc
 
diff --git a/Makerules b/Makerules
index ede97c8f31..c0afa63034 100644
--- a/Makerules
+++ b/Makerules
@@ -85,7 +85,7 @@ endif
 # This is here so things in sysdep Makefiles can easily depend on foo.h as
 # appropriate and not worry about where foo.h comes from, which may be
 # system dependent and not known by that Makefile.
-vpath %.h $(subst $(empty) ,:,$(strip $(common-objpfx) \
+vpath %.h $(subst $(empty) ,:,$(strip $(common-objpfx) $(objpfx) \
 				      $(addprefix $(sysdep_dir)/,$(sysdirs)) \
 				      $(..)))
 
@@ -150,9 +150,9 @@ endif
 # have source in .s files, and thus do not in fact need a .d file.
 # So we must define rules to make .d files for .s files.
 define make-dummy-dep
-$(addprefix ln $(objpfx)dummy.d ,$(filter-out $(wildcard $@),$@))
+$(addprefix ln $(common-objpfx)dummy.d ,$(filter-out $(wildcard $@),$@))
 endef
-$(objpfx)dummy.d:
+$(common-objpfx)dummy.d:
 	echo '# .s files cannot contain includes, so they need no deps.' > $@
 
 # It matters that this set of rules, for compiling from sources in
@@ -169,7 +169,7 @@ $(objpfx)%.o: %.s $(before-compile); $(compile-command.s)
 $(objpfx)%.so: %.s $(before-compile); $(compile-command.s)
 $(objpfx)%.po: %.s $(before-compile); $(compile-command.s)
 $(objpfx)%.go: %.s $(before-compile); $(compile-command.s)
-$(objpfx)%.d: %.s $(objpfx)dummy.d; $(make-dummy-dep)
+$(objpfx)%.d: %.s $(common-objpfx)dummy.d; $(make-dummy-dep)
 $(objpfx)%.o: %.c $(before-compile); $(compile-command.c)
 $(objpfx)%.so: %.c $(before-compile); $(compile-command.c)
 $(objpfx)%.po: %.c $(before-compile); $(compile-command.c)
@@ -190,7 +190,7 @@ $(objpfx)%.o: $(objpfx)%.s $(before-compile); $(compile-command.s)
 $(objpfx)%.so: $(objpfx)%.s $(before-compile); $(compile-command.s)
 $(objpfx)%.po: $(objpfx)%.s $(before-compile); $(compile-command.s)
 $(objpfx)%.go: $(objpfx)%.s $(before-compile); $(compile-command.s)
-$(objpfx)%.d: $(objpfx)%.s $(objpfx)dummy.d; $(make-dummy-dep)
+$(objpfx)%.d: $(objpfx)%.s $(common-objpfx)dummy.d; $(make-dummy-dep)
 $(objpfx)%.o: $(objpfx)%.c $(before-compile); $(compile-command.c)
 $(objpfx)%.so: $(objpfx)%.c $(before-compile); $(compile-command.c)
 $(objpfx)%.po: $(objpfx)%.c $(before-compile); $(compile-command.c)
@@ -239,7 +239,7 @@ $(+sysdir_pfx)sysd-rules: $(+sysdir_pfx)config.make $(..)Makerules \
 		  \$$(compile-command.c)";				      \
 	   done; \
 	   $(open-check-inhibit-asm) \
-	   echo "\$$(objpfx)%.d: $$dir/%.s \$$(objpfx)dummy.d; \
+	   echo "\$$(objpfx)%.d: $$dir/%.s \$$(common-objpfx)dummy.d; \
 		\$$(make-dummy-dep)";			       \
 	   echo "\$$(objpfx)%.d: $$dir/%.S \$$(before-compile); \
 		\$$(+make-deps)";					      \
@@ -279,6 +279,7 @@ OUTPUT_OPTION = -o $@
 
 S-CPPFLAGS = $(asm-CPPFLAGS)
 define +make-deps
+$(make-target-directory)
 -@rm -f $@
 $(+mkdep) $< $(CPPFLAGS) $($(<:$*.%=%)-CPPFLAGS) | \
 sed -e 's,$(subst .,\.,$*)\.o,$(foreach o,$(object-suffixes),$(@:.d=$o)) $@,' \
@@ -289,7 +290,9 @@ ifneq (,$(objpfx))
 # Continuation lines here are dangerous because they introduce spaces!
 define sed-remove-objpfx
 -e 's@ $(subst .,\.,$(subst @,\@,$(objpfx)))@ $$(objpfx)@g' \
--e 's@^$(subst .,\.,$(subst @,\@,$(objpfx)))@$$(objpfx)@g'
+-e 's@^$(subst .,\.,$(subst @,\@,$(objpfx)))@$$(objpfx)@g' \
+-e 's@ $(subst .,\.,$(subst @,\@,$(common-objpfx)))@ $$(common-objpfx)@g' \
+-e 's@^$(subst .,\.,$(subst @,\@,$(common-objpfx)))@$$(common-objpfx)@g'
 endef
 endif
 
@@ -327,7 +330,7 @@ LDFLAGS-c.so = -nostdlib -nostartfiles
 # Give libc.so an entry point and make it directly runnable itself.
 LDFLAGS-c.so += -e __libc_main
 # Use our own special initializer and finalizer files for libc.so.
-elfobjdir := $(firstword $(objdir) $(patsubst ../$(subdir),.,$(..)elf))
+elfobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)elf)
 $(common-objpfx)libc.so: $(elfobjdir)/soinit.so \
 			 $(common-objpfx)libc_pic.a \
 			 $(elfobjdir)/sofini.so $(elfobjdir)/ld.so
@@ -443,6 +446,7 @@ ifndef objects
 # Create the stamp$o files to keep the parent makefile happy.
 subdir_lib: $(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir))
 $(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir)):
+	$(make-target-directory)
 	rm -f $@; > $@
 else
 
@@ -471,17 +475,13 @@ object-suffixes-left := $(object-suffixes)
 include $(o-iterator)
 define do-ar
 topdir=`cd $(..).; pwd`; \
-$(patsubst %,cd %;,$(objdir)) \
+$(patsubst %/,cd %;,$(objpfx)) \
 $$topdir/autolock.sh ${O%-lib}.lck $(AR) cru$(verbose) ${O%-lib} \
 					 $(patsubst $(objpfx)%,%,$^)
 rm -f $@
 touch $@
 endef
-ifdef subdir
-O%-lib = $(filter ../,$(firstword $(objdir) ../))$(patsubst %,$(libtype$*),c)
-else
-O%-lib = $(patsubst %,$(libtype$*),c)
-endif
+O%-lib = $(..)$(patsubst %,$(libtype$*),c)
 
 endif
 
@@ -496,8 +496,7 @@ $(common-objpfx)$(patsubst %,$(libtype$o),c)($(ar-symtab-name)): \
 	  $$(RANLIB) $$(common-objpfx)$$(patsubst %,$$(libtype$o),c)
 endef
 ifndef subdir
-subdirs-stamps := $(foreach d,$(subdirs),\
-			    $(firstword $(objdir) $(subdir))/stamp%-$d)
+subdirs-stamps := $(foreach d,$(subdirs),$(common-objpfx)$d/stamp%-$d)
 subdirs-stamp-o = $(subst %,$o,$(subdirs-stamps))
 $(subdirs-stamps): subdir_lib;
 endif
@@ -512,7 +511,7 @@ objects objs: $(foreach o,$(object-suffixes),$(o-objects)) \
 
 # Canned sequence for building an extra library archive.
 define build-extra-lib
-$(patsubst %,cd %;,$(objdir)) \
+$(patsubst %/,cd %;,$(objpfx)) \
 $(AR) cru$(verbose) $(@:$(objpfx)%=%) \
       $(patsubst $(objpfx)%,%,$^)
 $(RANLIB) $@
@@ -736,12 +735,7 @@ cd $(@D); $(BUILD_CC) $(BUILD_CFLAGS) $(<:$(common-objpfx)%=%) -o $(@F)
 endef
 
 # We always want to use configuration definitions.
-ifdef objdir
-# This is always used in $(common-objdir), so we use no directory name.
-BUILD_CFLAGS = -include config.h
-else
 BUILD_CFLAGS = -include $(..)config.h
-endif
 
 # Support the GNU standard name for this target.
 .PHONY: check
@@ -773,7 +767,7 @@ common-mostlyclean:
 				     $(addsuffix .o,$(tests) $(others)) \
 				     $(addsuffix .out,$(tests)))
 	-rm -f $(addprefix $(objpfx),$(extra-objs) $(install-lib))
-	-rm -f core $(objpfx)stub-$(subdir)
+	-rm -f core $(common-objpfx)stub-$(subdir)
 	$(rmobjs)
 define rmobjs
 $(foreach o,$(object-suffixes),
@@ -796,7 +790,7 @@ s = $(sysdep_dir)/stub
 $(common-objpfx)stub-$(subdir): $(+depfiles)
 # Use /dev/null since `...` might expand to empty.
 	(s=`cd $s; /bin/pwd`; \
-	 $(patsubst %,cd %;,$(objdir)) \
+	 $(patsubst %/,cd %;,$(objpfx)) \
 	 sed -n 's/^stub_warning *(\([^)]*\).*$$/#define __stub_\1/p' \
 	     `sed -n 's@^.*$s/\([a-z0-9_-]*\.c\).*$$@'"$$s"/'\1@p' \
 		  $(patsubst $(objpfx)%,%,$^) /dev/null` \
diff --git a/README.libm b/README.libm
new file mode 100644
index 0000000000..fd5dcc3e98
--- /dev/null
+++ b/README.libm
@@ -0,0 +1,31 @@
+The following functions for the `long double' versions of the libm
+function have to be written:
+
+e_acosl.c
+e_asinl.c
+e_atan2l.c
+e_acoshl.c
+e_expl.c
+e_fmodl.c
+e_hypotl.c
+e_j0l.c
+e_j1l.c
+e_jnl.c
+e_lgammal_r.c
+e_logl.c
+e_log10l.c
+e_powl.c
+e_rem_pio2l.c
+e_sinhl.c
+e_sqrtl.c
+
+k_cosl.c
+k_rem_pio2l.c
+k_sinl.c
+k_tanl.c
+
+s_atanl.c
+s_cbrtl.c
+s_erfl.c
+s_expm1l.c
+s_log1pl.c
diff --git a/Rules b/Rules
index 665ac0f685..a2010d657b 100644
--- a/Rules
+++ b/Rules
@@ -62,16 +62,16 @@ subdir_lib: lib-noranlib
 
 # Some subdirs need to install a dummy library.
 # They can use "$(objpfx)libfnord.a: $(dep-dummy-lib); $(make-dummy-lib)".
-dep-dummy-lib = $(objpfx)dummy.o
+dep-dummy-lib = $(common-objpfx)dummy.o
 define make-dummy-lib
 $(AR) cr$(verbose) $@ $<
 endef
-$(objpfx)dummy.c:
+$(common-objpfx)dummy.c:
 	rm -f $@
 	echo 'void __dummy__ () { }' > $@
-$(objpfx)empty.c:
+$(common-objpfx)empty.c:
 	cp -f /dev/null $@
-generated := $(generated) dummy.o dummy.c empty.c empty.o
+generated := $(generated) $(..)dummy.o $(..)dummy.c $(..)empty.c $(..)empty.o
 
 # This makes all the auxilliary and test programs.
 
@@ -141,7 +141,7 @@ endif
 ifdef static-only-routines
 # These routines are to be omitted from the shared library object,
 # so we replace the PIC objects for them with the empty object file.
-$(static-only-routines:%=$(objpfx)%.so): %.so: $(objpfx)empty.o
+$(static-only-routines:%=$(objpfx)%.so): %.so: $(common-objpfx)empty.o
 	rm -f $@
 	ln $< $@
 endif
diff --git a/bare/Makefile b/bare/Makefile
index 588a713c83..573515347c 100644
--- a/bare/Makefile
+++ b/bare/Makefile
@@ -48,7 +48,7 @@ $(objpfx)lib$(config-vendor).a: $(bare-routines:%=$(objpfx)%.o)
 # from scratch each time.
 	rm -f $@
 ifdef objdir
-	cd $(objdir); $(AR) cq$(verbose) $@ $(^:$(objpfx)%=%)
+	cd $(objpfx); $(AR) cq$(verbose) $(@:$(objpfx)%=%) $(^:$(objpfx)%=%)
 else
 	$(AR) cq$(verbose) $@ $^
 endif
diff --git a/catgets/gencat.c b/catgets/gencat.c
index e78fb0ace0..2e275fcef2 100644
--- a/catgets/gencat.c
+++ b/catgets/gencat.c
@@ -212,7 +212,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\
   -o, --output=NAME   write output to file NAME\n\
   -V, --version       output version information and exit\n\
 If INPUT-FILE is -, input is read from standard input.  If OUTPUT-FILE\n\
-is -, output is written to standard output.\n"),
+is -, output is written to standard output.\n\
+Report bugs to <bug-glibc@gnu.ai.mit.edu>.\n"),
 	   program_invocation_name, program_invocation_name);
 
   exit (status);
diff --git a/db/makedb.c b/db/makedb.c
index a215f25e59..d72159579d 100644
--- a/db/makedb.c
+++ b/db/makedb.c
@@ -207,7 +207,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\
       --quiet         don't print messages while building database\n\
   -u, --undo          print content of database file, one entry a line\n\
   -V, --version       output version information and exit\n\
-If INPUT-FILE is -, input is read from standard input.\n"),
+If INPUT-FILE is -, input is read from standard input.\n\
+Report bugs to <bug-glibc@gnu.ai.mit.edu>.\n"),
 	    program_invocation_name, program_invocation_name,
 	    program_invocation_name);
 
diff --git a/locale/programs/locale.c b/locale/programs/locale.c
index a9e415d6b7..a4254e3000 100644
--- a/locale/programs/locale.c
+++ b/locale/programs/locale.c
@@ -244,7 +244,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\
   -m, --charmaps        write names of available charmaps\n\
 \n\
   -c, --category-name   write names of selected categories\n\
-  -k, --keyword-name    write names of selected keywords\n"),
+  -k, --keyword-name    write names of selected keywords\n\
+Report bugs to <bug-glibc@gnu.ai.mit.edu>."),
 	    __progname);
 
   exit (status);
diff --git a/locale/programs/localedef.c b/locale/programs/localedef.c
index 7a12ac87a5..d47983b277 100644
--- a/locale/programs/localedef.c
+++ b/locale/programs/localedef.c
@@ -396,7 +396,8 @@ Mandatory arguments to long options are mandatory for short options too.\n\
       --posix               be strictly POSIX conform\n\
 \n\
 System's directory for character maps: %s\n\
-                       locale files  : %s\n"),
+                       locale files  : %s\n\
+Report bugs to <bug-glibc@gnu.ai.mit.edu>."),
 	    program_invocation_name, CHARMAP_PATH, LOCALE_PATH);
 
   exit (status);
diff --git a/manual/Makefile b/manual/Makefile
index a6cd048d6e..c0a5782ea7 100644
--- a/manual/Makefile
+++ b/manual/Makefile
@@ -165,8 +165,17 @@ $(glibc-targets):
 # changed the library.
 lib: $(foreach o,$(object-suffixes),$(objpfx)stamp$o-$(subdir))
 stubs: $(common-objpfx)stub-manual
-$(common-objpfx)stub-manual ../po/manual.pot:; cp /dev/null $@
-$(objpfx)stamp%-$(subdir):; cp /dev/null $@
+$(common-objpfx)stub-manual ../po/manual.pot $(objpfx)stamp%-$(subdir):
+	$(make-target-directory)
+	cp /dev/null $@
+
+
+# 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
diff --git a/manual/socket.texi b/manual/socket.texi
index 0b338fca82..91084be16d 100644
--- a/manual/socket.texi
+++ b/manual/socket.texi
@@ -151,7 +151,7 @@ Use of this style is covered in detail in @ref{Connections}.
 @comment BSD
 @deftypevr Macro int SOCK_DGRAM
 The @code{SOCK_DGRAM} style is used for sending
-individually-addressed packets, unreliably.  
+individually-addressed packets, unreliably.
 It is the diametrical opposite of @code{SOCK_STREAM}.
 
 Each time you write data to a socket of this kind, that data becomes
@@ -585,7 +585,7 @@ for information about this.
 * Services Database::           Ports may have symbolic names.
 * Byte Order::		        Different hosts may use different byte
                                  ordering conventions; you need to
-                                 canonicalize host address and port number. 
+                                 canonicalize host address and port number.
 * Inet Example::	        Putting it all together.
 @end menu
 
@@ -650,7 +650,7 @@ numeric address it stands for.
 * Names: Host Names.		Translating host names to host numbers.
 @end menu
 
-@node Abstract Host Addresses 
+@node Abstract Host Addresses
 @subsubsection Internet Host Addresses
 @cindex host address, Internet
 @cindex Internet host address
@@ -683,7 +683,7 @@ of an Internet address specifies a network.  The remaining bytes of the
 Internet address specify the address within that network.
 
 The Class A network 0 is reserved for broadcast to all networks.  In
-addition, the host number 0 within each network is reserved for broadcast 
+addition, the host number 0 within each network is reserved for broadcast
 to all hosts in that network.
 
 The Class A network 127 is reserved for loopback; you can always use
@@ -966,9 +966,9 @@ This condition happens when the name server could not be contacted.  If
 you try again later, you may succeed then.
 
 @comment netdb.h
-@comment BSD 
-@item NO_RECOVERY 
-@vindex NO_RECOVERY 
+@comment BSD
+@item NO_RECOVERY
+@vindex NO_RECOVERY
 A non-recoverable error occurred.
 
 @comment netdb.h
@@ -1421,7 +1421,7 @@ read and write operations.  But, like pipes, sockets do not support file
 positioning operations.
 @end deftypefun
 
-For examples of how to call the @code{socket} function, 
+For examples of how to call the @code{socket} function,
 see @ref{File Namespace}, or @ref{Inet Example}.
 
 
@@ -1615,7 +1615,7 @@ error conditions are defined for this function:
 The socket @var{socket} is not a valid file descriptor.
 
 @item ENOTSOCK
-The socket @var{socket} is not a socket.
+File descriptor @var{socket} is not a socket.
 
 @item EADDRNOTAVAIL
 The specified address is not available on the remote machine.
@@ -2635,7 +2635,7 @@ This option gets or sets the size of the input buffer.  The value is a
 @comment GNU
 @item SO_STYLE
 @comment sys/socket.h
-@comment BSD 
+@comment BSD
 @itemx SO_TYPE
 This option can be used with @code{getsockopt} only.  It is used to
 get the socket's communication style.  @code{SO_TYPE} is the
@@ -2644,7 +2644,7 @@ The value has type @code{int} and its value designates a communication
 style; see @ref{Communication Styles}.
 
 @comment sys/socket.h
-@comment BSD 
+@comment BSD
 @item SO_ERROR
 @c Extra blank line here makes the table look better.
 
@@ -2712,7 +2712,7 @@ network.
 @deftypefun {struct netent *} getnetbyaddr (long @var{net}, int @var{type})
 The @code{getnetbyaddr} function returns information about the network
 of type @var{type} with number @var{net}.  You should specify a value of
-@code{AF_INET} for the @var{type} argument for Internet networks.  
+@code{AF_INET} for the @var{type} argument for Internet networks.
 
 @code{getnetbyaddr} returns a null pointer if there is no such
 network.
diff --git a/nss/Makefile b/nss/Makefile
index 4a36dcf580..b900e96cc3 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -66,10 +66,9 @@ libnss_db-inhibit-o	= $(filter-out .so,$(object-suffixes))
 include ../Rules
 
 
-$(objpfx)libnss_dns.so: $(firstword $(objdir) $(..)resolv)/libresolv.so
+$(objpfx)libnss_dns.so: $(common-objpfx)resolv/libresolv.so
 
-$(objpfx)libnss_db.so: $(firstword $(objdir) $(..)db)/libdb.so \
-		       $(objpfx)libnss_files.so
+$(objpfx)libnss_db.so: $(common-objpfx)db/libdb.so $(objpfx)libnss_files.so
 
 $(libnss_db-routines:%=$(objpfx)%.c): $(objpfx)db-%.c: nss_files/files-%.c
 	@rm -f $@.new
diff --git a/nss/db-Makefile b/nss/db-Makefile
new file mode 100644
index 0000000000..881cabfa4b
--- /dev/null
+++ b/nss/db-Makefile
@@ -0,0 +1,68 @@
+DATABASES = $(wildcard /etc/passwd /etc/group /etc/ethers /etc/protocols \
+		       /etc/rpc /etc/services /etc/shadow)
+
+VAR_DB = /var/db
+
+AWK = awk
+MAKEDB = makedb --quiet
+
+all: $(patsubst %,$(VAR_DB)/%.db,$(notdir $(DATABASES)))
+
+
+$(VAR_DB)/passwd.db: /etc/passwd
+	@echo -n "$(patsubst %.db,%,$(@F))... "
+	@$(AWK) 'BEGIN { FS=":"; OFS=":" } \
+		 /^[^#]/ { printf ".%s ", $$1; print; \
+			   printf "=%s ", $$3; print }' $^ | \
+	$(MAKEDB) -o $@ -
+	@echo "done."
+
+$(VAR_DB)/group.db: /etc/group
+	@echo -n "$(patsubst %.db,%,$(@F))... "
+	@$(AWK) 'BEGIN { FS=":"; OFS=":" } \
+		 /^[^#]/ { printf ".%s ", $$1; print; \
+			   printf "=%s ", $$3; print }' $^ | \
+	$(MAKEDB) -o $@ -
+	@echo "done."
+
+$(VAR_DB)/ethers.db: /etc/ethers
+	@echo -n "$(patsubst %.db,%,$(@F))... "
+	@$(AWK) '/^[^#]/ { printf ".%s ", $$1; print; \
+			   printf "=%s ", $$2; print }' $^ | \
+	$(MAKEDB) -o $@ -
+	@echo "done."
+
+$(VAR_DB)/protocols.db: /etc/protocols
+	@echo -n "$(patsubst %.db,%,$(@F))... "
+	@$(AWK) '/^[^#]/ { printf ".%s ", $$1; print; \
+			   printf "=%s ", $$2; print; \
+			   for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
+			     { printf ".%s ", $$i; print } }' $^ | \
+	$(MAKEDB) -o $@ -
+	@echo "done."
+
+$(VAR_DB)/rpc.db: /etc/rpc
+	@echo -n "$(patsubst %.db,%,$(@F))... "
+	@$(AWK) '/^[^#]/ { printf ".%s ", $$1; print; \
+			   printf "=%s ", $$2; print; \
+			   for (i = 3; i <= NF && !($$i ~ /^#/); ++i) \
+			     { printf ".%s ", $$i; print } }' $^ | \
+	$(MAKEDB) -o $@ -
+	@echo "done."
+
+$(VAR_DB)/services.db: /etc/services
+	@echo -n "$(patsubst %.db,%,$(@F))... "
+	@$(AWK) 'BEGIN { FS="[ \t/]+" } \
+		 /^[^#]/ { printf ".%s/%s ", $$1, $$3; print; \
+			   printf "=%s/%s ", $$2, $$3; print; \
+			   for (i = 4; i <= NF && !($$i ~ /^#/); ++i) \
+			     { printf ".%s/%s ", $$i, $$3; print } }' $^ | \
+	$(MAKEDB) -o $@ -
+	@echo "done."
+
+$(VAR_DB)/shadow.db: /etc/shadow
+	@echo -n "$(patsubst %.db,%,$(@F))... "
+	@$(AWK) 'BEGIN { FS=":"; OFS=":" } \
+		 /^[^#]/ { printf ".%s ", $$1; print }' $^ | \
+	$(MAKEDB) -o $@ -
+	@echo "done."
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
index 16e1caf50d..79c9d2706d 100644
--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -235,12 +235,17 @@ __nss_configure_lookup (const char *dbname, const char *service_line)
 static int
 nss_dlerror_run (void (*operate) (void))
 {
-  const char *last_errstring = NULL;
+  char *last_errstring = NULL;
   const char *last_object_name = NULL;
+  int result;
 
   (void) _dl_catch_error (&last_errstring, &last_object_name, operate);
 
-  return last_errstring != NULL;
+  result = last_errstring != NULL;
+  if (result)
+    free (last_errstring);
+
+  return result;
 }
 
 
diff --git a/nss/nsswitch.conf b/nss/nsswitch.conf
new file mode 100644
index 0000000000..08bd96ea10
--- /dev/null
+++ b/nss/nsswitch.conf
@@ -0,0 +1,16 @@
+# /etc/nsswitch.conf
+#
+# Example configuration of GNU Name Service Switch functionality.
+#
+
+passwd:		db files
+group:		db files
+shadow:		db files
+
+hosts:		files dns
+networks:	files dns
+
+protocols:	db files
+services:	db files
+ethers:		db files
+rpc:		db files
diff --git a/sysdeps/generic/Makefile b/sysdeps/generic/Makefile
index f363f1c89d..f160dc8892 100644
--- a/sysdeps/generic/Makefile
+++ b/sysdeps/generic/Makefile
@@ -41,6 +41,7 @@ $(objpfx)siglist.c: $(objpfx)make_siglist
 	mv $@-tmp $@
 
 $(objpfx)make_siglist: $(sysdep_dir)/generic/make_siglist.c
+	$(make-target-directory)
 	signum_h=`cd $(dir $(firstword $(wildcard \
 			   $(+sysdep_dirs:%=%/signum.h)))); pwd`/signum.h; \
 	$(native-compile) \
diff --git a/sysdeps/libm-ieee754/e_acoshl.c b/sysdeps/libm-ieee754/e_acoshl.c
new file mode 100644
index 0000000000..8af7c27aa7
--- /dev/null
+++ b/sysdeps/libm-ieee754/e_acoshl.c
@@ -0,0 +1,72 @@
+/* e_acoshl.c -- long double version of e_acosh.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* __ieee754_acoshl(x)
+ * Method :
+ *	Based on
+ *		acoshl(x) = logl [ x + sqrtl(x*x-1) ]
+ *	we have
+ *		acoshl(x) := logl(x)+ln2,	if x is large; else
+ *		acoshl(x) := logl(2x-1/(sqrtl(x*x-1)+x)) if x>2; else
+ *		acoshl(x) := log1pl(t+sqrtl(2.0*t+t*t)); where t=x-1.
+ *
+ * Special cases:
+ *	acoshl(x) is NaN with signal if x<1.
+ *	acoshl(NaN) is NaN without signal.
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const long double
+#else
+static long double
+#endif
+one	= 1.0,
+ln2	= 6.931471805599453094287e-01L; /* 0x3FFE, 0xB17217F7, 0xD1CF79AC */
+
+#ifdef __STDC__
+	long double __ieee754_acoshl(long double x)
+#else
+	long double __ieee754_acoshl(x)
+	long double x;
+#endif
+{
+	long double t;
+	u_int32_t se,i0,i1;
+	EXTRACT_LDOUBLE_WORDS(se,i0,i1,x);
+	if(se<0x3fff) {			/* x < 1 */
+	    return (x-x)/(x-x);
+	} else if(hx >=0x401b) {	/* x > 2**28 */
+	    if(hx >=0x7fff) {		/* x is inf of NaN */
+	        return x+x;
+	    } else
+		return __ieee754_logl(x)+ln2;	/* acoshl(huge)=logl(2x) */
+	} else if(((se-0x3fff)|i0|i1)==0) {
+	    return 0.0;			/* acosh(1) = 0 */
+	} else if (hx > 0x4000) {	/* 2**28 > x > 2 */
+	    t=x*x;
+	    return __ieee754_logl(2.0*x-one/(x+__ieee754_sqrtl(t-one)));
+	} else {			/* 1<x<2 */
+	    t = x-one;
+	    return __log1pl(t+__sqrtl(2.0*t+t*t));
+	}
+}
diff --git a/sysdeps/libm-ieee754/e_atanhl.c b/sysdeps/libm-ieee754/e_atanhl.c
new file mode 100644
index 0000000000..d74db481d0
--- /dev/null
+++ b/sysdeps/libm-ieee754/e_atanhl.c
@@ -0,0 +1,79 @@
+/* s_atanhl.c -- long double version of s_atan.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* __ieee754_atanhl(x)
+ * Method :
+ *    1.Reduced x to positive by atanh(-x) = -atanh(x)
+ *    2.For x>=0.5
+ *                   1              2x                          x
+ *	atanhl(x) = --- * log(1 + -------) = 0.5 * log1p(2 * --------)
+ *                   2             1 - x                      1 - x
+ *
+ * 	For x<0.5
+ *	atanhl(x) = 0.5*log1pl(2x+2x*x/(1-x))
+ *
+ * Special cases:
+ *	atanhl(x) is NaN if |x| > 1 with signal;
+ *	atanhl(NaN) is that NaN with no signal;
+ *	atanhl(+-1) is +-INF with signal.
+ *
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const long double one = 1.0, huge = 1e16380;
+#else
+static long double one = 1.0, huge = 1e16380;
+#endif
+
+#ifdef __STDC__
+static const long double zero = 0.0;
+#else
+static double long zero = 0.0;
+#endif
+
+#ifdef __STDC__
+	long double __ieee754_atanhl(long double x)
+#else
+	long double __ieee754_atanhl(x)
+	long double x;
+#endif
+{
+	long double t;
+	int32_t ix;
+	u_int32_t se,i0,i1;
+	EXTRACT_LDOUBLE_WORDS(se,i0,i1,x);
+	ix = se&0x7fff;
+	if ((ix+((((i0&0x7fffffff)|i1)|(-((i0&0x7fffffff)|i1)))>>31))>0x3fff)
+	  /* |x|>1 */
+	    return (x-x)/(x-x);
+	if(ix==0x3fff)
+	    return x/zero;
+	if(ix<0x3fe3&&(huge+x)>zero) return x;	/* x<2**-28 */
+	SET_LDOUBLE_EXP(x,ix);
+	if(ix<0x3ffe) {		/* x < 0.5 */
+	    t = x+x;
+	    t = 0.5*__log1pl(t+t*x/(one-x));
+	} else
+	    t = 0.5*__log1pl((x+x)/(one-x));
+	if(se>0x7fff) return t; else return -t;
+}
diff --git a/sysdeps/libm-ieee754/e_remainderl.c b/sysdeps/libm-ieee754/e_remainderl.c
new file mode 100644
index 0000000000..3b2cd7c5e5
--- /dev/null
+++ b/sysdeps/libm-ieee754/e_remainderl.c
@@ -0,0 +1,83 @@
+/* e_remainderl.c -- long double version of e_remainder.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* __ieee754_remainderl(x,p)
+ * Return :
+ * 	returns  x REM p  =  x - [x/p]*p as if in infinite
+ * 	precise arithmetic, where [x/p] is the (infinite bit)
+ *	integer nearest x/p (in half way case choose the even one).
+ * Method :
+ *	Based on fmod() return x-[x/p]chopped*p exactlp.
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const long double zero = 0.0;
+#else
+static long double zero = 0.0;
+#endif
+
+
+#ifdef __STDC__
+	long double __ieee754_remainderl(long double x, long double p)
+#else
+	long double __ieee754_remainderl(x,p)
+	long double x,p;
+#endif
+{
+	u_int32_t sx,sex,sep,x0,x1,p0,p1;
+	long double p_half;
+
+	EXTRACT_LDOUBLE_WORDS(sex,x0,x1,x);
+	EXTRACT_LDOUBLE_WORDS(sep,p0,p1,p);
+	sx = sex&0x8000;
+	sep &= 0x7fff;
+	sex &= 0x7fff;
+
+    /* purge off exception values */
+	if((sep|p0|p1)==0) return (x*p)/(x*p); 	/* p = 0 */
+	if((sex==0x7fff)||			/* x not finite */
+	  ((sep==0x7fff)&&			/* p is NaN */
+	   ((p0|p1)!=0)))
+	    return (x*p)/(x*p);
+
+
+	if (sep<0x7ffe) x = __ieee754_fmodl(x,p+p);	/* now x < 2p */
+	if (((sex-sep)|(x0-p0)|(x1-p1))==0) return zero*x;
+	x  = fabsl(x);
+	p  = fabsl(p);
+	if (sep<0x0002) {
+	    if(x+x>p) {
+		x-=p;
+		if(x+x>=p) x -= p;
+	    }
+	} else {
+	    p_half = 0.5*p;
+	    if(x>p_half) {
+		x-=p;
+		if(x>=p_half) x -= p;
+	    }
+	}
+	GET_LDOUBLE_EXP(sex,x);
+	SET_LDOUBLE_EXP(x,sex^sx);
+	return x;
+}
diff --git a/sysdeps/libm-ieee754/e_scalbl.c b/sysdeps/libm-ieee754/e_scalbl.c
new file mode 100644
index 0000000000..0dd36d422d
--- /dev/null
+++ b/sysdeps/libm-ieee754/e_scalbl.c
@@ -0,0 +1,59 @@
+/* e_scalbl.c -- long double version of s_scalb.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/*
+ * __ieee754_scalbl(x, fn) is provide for
+ * passing various standard test suite. One
+ * should use scalbnl() instead.
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef _SCALB_INT
+#ifdef __STDC__
+	long double __ieee754_scalbl(long double x, int fn)
+#else
+	long double __ieee754_scalbl(x,fn)
+	long double x; int fn;
+#endif
+#else
+#ifdef __STDC__
+	long double __ieee754_scalbl(long double x, long double fn)
+#else
+	long double __ieee754_scalbl(x,fn)
+	long double x, fn;
+#endif
+#endif
+{
+#ifdef _SCALB_INT
+	return scalbnl(x,fn);
+#else
+	if (isnanl(x)||isnanl(fn)) return x*fn;
+	if (!finitel(fn)) {
+	    if(fn>0.0) return x*fn;
+	    else       return x/(-fn);
+	}
+	if (rintl(fn)!=fn) return (fn-fn)/(fn-fn);
+	if ( fn > 65000.0) return scalbnl(x, 65000);
+	if (-fn > 65000.0) return scalbnl(x,-65000);
+	return scalbnl(x,(int)fn);
+#endif
+}
diff --git a/sysdeps/libm-ieee754/s_asinhl.c b/sysdeps/libm-ieee754/s_asinhl.c
new file mode 100644
index 0000000000..823288a1a0
--- /dev/null
+++ b/sysdeps/libm-ieee754/s_asinhl.c
@@ -0,0 +1,70 @@
+/* s_asinhl.c -- long double version of s_asinh.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* asinhl(x)
+ * Method :
+ *	Based on
+ *		asinhl(x) = signl(x) * logl [ |x| + sqrtl(x*x+1) ]
+ *	we have
+ *	asinhl(x) := x  if  1+x*x=1,
+ *		  := signl(x)*(logl(x)+ln2)) for large |x|, else
+ *		  := signl(x)*logl(2|x|+1/(|x|+sqrtl(x*x+1))) if|x|>2, else
+ *		  := signl(x)*log1pl(|x| + x^2/(1 + sqrtl(1+x^2)))
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const long double
+#else
+static long double
+#endif
+one =  1.000000000000000000000e+00L, /* 0x3FFF, 0x00000000, 0x00000000 */
+ln2 =  6.931471805599453094287e-01L, /* 0x3FFE, 0xB17217F7, 0xD1CF79AC */
+huge=  1.000000000000000000e+16380L;
+
+#ifdef __STDC__
+	long double __asinhl(long double x)
+#else
+	long double __asinhl(x)
+	long double x;
+#endif
+{
+	long double t,w;
+	int32_t hx,ix;
+	GET_LDOUBLE_EXP(hx,x);
+	ix = hx&0x7fff;
+	if(ix==0x7fff) return x+x;	/* x is inf or NaN */
+	if(ix< 0x3fde) {	/* |x|<2**-34 */
+	    if(huge+x>one) return x;	/* return x inexact except 0 */
+	}
+	if(ix>0x4020) {		/* |x| > 2**34 */
+	    w = __ieee754_logl(fabsl(x))+ln2;
+	} else if (ix>0x4000) {	/* 2**34 > |x| > 2.0 */
+	    t = fabsl(x);
+	    w = __ieee754_logl(2.0*t+one/(__ieee754_sqrtl(x*x+one)+t));
+	} else {		/* 2.0 > |x| > 2**-28 */
+	    t = x*x;
+	    w =__log1pl(fabsl(x)+t/(one+__ieee754_sqrtl(one+t)));
+	}
+	if(hx>0x7fff) return w; else return -w;
+}
+weak_alias (__asinhl, asinhl)
diff --git a/sysdeps/libm-ieee754/s_cosl.c b/sysdeps/libm-ieee754/s_cosl.c
new file mode 100644
index 0000000000..0e7a06d8ba
--- /dev/null
+++ b/sysdeps/libm-ieee754/s_cosl.c
@@ -0,0 +1,87 @@
+/* s_cosl.c -- long double version of s_cos.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* cosl(x)
+ * Return cosine function of x.
+ *
+ * kernel function:
+ *	__kernel_sinl		... sine function on [-pi/4,pi/4]
+ *	__kernel_cosl		... cosine function on [-pi/4,pi/4]
+ *	__ieee754_rem_pio2l	... argument reduction routine
+ *
+ * Method.
+ *      Let S,C and T denote the sin, cos and tan respectively on
+ *	[-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
+ *	in [-pi/4 , +pi/4], and let n = k mod 4.
+ *	We have
+ *
+ *          n        sin(x)      cos(x)        tan(x)
+ *     ----------------------------------------------------------
+ *	    0	       S	   C		 T
+ *	    1	       C	  -S		-1/T
+ *	    2	      -S	  -C		 T
+ *	    3	      -C	   S		-1/T
+ *     ----------------------------------------------------------
+ *
+ * Special cases:
+ *      Let trig be any of sin, cos, or tan.
+ *      trig(+-INF)  is NaN, with signals;
+ *      trig(NaN)    is that NaN;
+ *
+ * Accuracy:
+ *	TRIG(x) returns trig(x) nearly rounded
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+	long double __cosl(long double x)
+#else
+	long double __cosl(x)
+	long double x;
+#endif
+{
+	long double y[2],z=0.0;
+	int32_t n, se;
+
+    /* High word of x. */
+	GET_LDOUBLE_EXP(se,x);
+
+    /* |x| ~< pi/4 */
+	se &= 0x7fff;
+	if(ix <= 0x3ffe) return __kernel_cosl(x,z);
+
+    /* cos(Inf or NaN) is NaN */
+	else if (se==0x7fff) return x-x;
+
+    /* argument reduction needed */
+	else {
+	    n = __ieee754_rem_pio2l(x,y);
+	    switch(n&3) {
+		case 0: return  __kernel_cosl(y[0],y[1]);
+		case 1: return -__kernel_sinl(y[0],y[1],1);
+		case 2: return -__kernel_cosl(y[0],y[1]);
+		default:
+		        return  __kernel_sinl(y[0],y[1],1);
+	    }
+	}
+}
+weak_alias (__cosl, cosl)
diff --git a/sysdeps/libm-ieee754/s_sinl.c b/sysdeps/libm-ieee754/s_sinl.c
new file mode 100644
index 0000000000..ade86dfa66
--- /dev/null
+++ b/sysdeps/libm-ieee754/s_sinl.c
@@ -0,0 +1,87 @@
+/* s_sinl.c -- long double version of s_sin.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* sinl(x)
+ * Return sine function of x.
+ *
+ * kernel function:
+ *	__kernel_sinl		... sine function on [-pi/4,pi/4]
+ *	__kernel_cosl		... cose function on [-pi/4,pi/4]
+ *	__ieee754_rem_pio2l	... argument reduction routine
+ *
+ * Method.
+ *      Let S,C and T denote the sin, cos and tan respectively on
+ *	[-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
+ *	in [-pi/4 , +pi/4], and let n = k mod 4.
+ *	We have
+ *
+ *          n        sin(x)      cos(x)        tan(x)
+ *     ----------------------------------------------------------
+ *	    0	       S	   C		 T
+ *	    1	       C	  -S		-1/T
+ *	    2	      -S	  -C		 T
+ *	    3	      -C	   S		-1/T
+ *     ----------------------------------------------------------
+ *
+ * Special cases:
+ *      Let trig be any of sin, cos, or tan.
+ *      trig(+-INF)  is NaN, with signals;
+ *      trig(NaN)    is that NaN;
+ *
+ * Accuracy:
+ *	TRIG(x) returns trig(x) nearly rounded
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+	long double __sinl(long double x)
+#else
+	long double __sinl(x)
+	long double x;
+#endif
+{
+	long double y[2],z=0.0;
+	int32_t n, se;
+
+    /* High word of x. */
+	GET_LDOUBLE_EXP(se,x);
+
+    /* |x| ~< pi/4 */
+	se &= 0x7fff;
+	if(se <= 0x3ffe) return __kernel_sinl(x,z,0);
+
+    /* sin(Inf or NaN) is NaN */
+	else if (se==0x7fff) return x-x;
+
+    /* argument reduction needed */
+	else {
+	    n = __ieee754_rem_pio2l(x,y);
+	    switch(n&3) {
+		case 0: return  __kernel_sinl(y[0],y[1],1);
+		case 1: return  __kernel_cosl(y[0],y[1]);
+		case 2: return -__kernel_sinl(y[0],y[1],1);
+		default:
+			return -__kernel_cosl(y[0],y[1]);
+	    }
+	}
+}
+weak_alias (__sinl, sinl)
diff --git a/sysdeps/libm-ieee754/s_tanhl.c b/sysdeps/libm-ieee754/s_tanhl.c
new file mode 100644
index 0000000000..984f67108b
--- /dev/null
+++ b/sysdeps/libm-ieee754/s_tanhl.c
@@ -0,0 +1,91 @@
+/* s_tanhl.c -- long double version of s_tanh.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* tanhl(x)
+ * Return the Hyperbolic Tangent of x
+ *
+ * Method :
+ *				        x    -x
+ *				       e  - e
+ *	0. tanhl(x) is defined to be -----------
+ *				        x    -x
+ *				       e  + e
+ *	1. reduce x to non-negative by tanhl(-x) = -tanhl(x).
+ *	2.  0      <= x <= 2**-55 : tanhl(x) := x*(one+x)
+ *					         -t
+ *	    2**-55 <  x <=  1     : tanhl(x) := -----; t = expm1l(-2x)
+ *					        t + 2
+ *						      2
+ *	    1      <= x <=  23.0  : tanhl(x) := 1-  ----- ; t=expm1l(2x)
+ *						    t + 2
+ *	    23.0   <  x <= INF    : tanhl(x) := 1.
+ *
+ * Special cases:
+ *	tanhl(NaN) is NaN;
+ *	only tanhl(0)=0 is exact for finite argument.
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+static const long double one=1.0, two=2.0, tiny = 1.0e-16380L;
+#else
+static long double one=1.0, two=2.0, tiny = 1.0e-16380L;
+#endif
+
+#ifdef __STDC__
+	long double __tanhl(long double x)
+#else
+	long double __tanhl(x)
+	long double x;
+#endif
+{
+	long double t,z;
+	int32_t se,j0,j1,ix;
+
+    /* High word of |x|. */
+	GET_LDOUBLE_WORDS(se,j0,j1,x);
+	ix = se&0x7fff;
+
+    /* x is INF or NaN */
+	if(ix==0x7fff) {
+	    if (se>=0x7fff) return one/x+one;    /* tanhl(+-inf)=+-1 */
+	    else            return one/x-one;    /* tanhl(NaN) = NaN */
+	}
+
+    /* |x| < 23 */
+	if (ix < 0x4003 || (ix == 0x4003 && j0 < 0xb8000000)) {	/* |x|<23 */
+	    if (ix<0x3fc8) 		/* |x|<2**-55 */
+		return x*(one+x);    	/* tanh(small) = small */
+	    if (ix>=0x3fff) {	/* |x|>=1  */
+		t = __expm1l(two*fabsl(x));
+		z = one - two/(t+two);
+	    } else {
+	        t = __expm1l(-two*fabsl(x));
+	        z= -t/(t+two);
+	    }
+    /* |x| > 23, return +-1 */
+	} else {
+	    z = one - tiny;		/* raised inexact flag */
+	}
+	return (se>0x7fff)? z: -z;
+}
+weak_alias (__tanhl, tanhl)
diff --git a/sysdeps/libm-ieee754/s_tanl.c b/sysdeps/libm-ieee754/s_tanl.c
new file mode 100644
index 0000000000..bce6d07f3d
--- /dev/null
+++ b/sysdeps/libm-ieee754/s_tanl.c
@@ -0,0 +1,81 @@
+/* s_tanl.c -- long double version of s_tan.c.
+ * Conversion to long double by Ulrich Drepper,
+ * Cygnus Support, drepper@cygnus.com.
+ */
+
+/*
+ * ====================================================
+ * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
+ *
+ * Developed at SunPro, a Sun Microsystems, Inc. business.
+ * Permission to use, copy, modify, and distribute this
+ * software is freely granted, provided that this notice
+ * is preserved.
+ * ====================================================
+ */
+
+#if defined(LIBM_SCCS) && !defined(lint)
+static char rcsid[] = "$NetBSD: $";
+#endif
+
+/* tanl(x)
+ * Return tangent function of x.
+ *
+ * kernel function:
+ *	__kernel_tanl		... tangent function on [-pi/4,pi/4]
+ *	__ieee754_rem_pio2l	... argument reduction routine
+ *
+ * Method.
+ *      Let S,C and T denote the sin, cos and tan respectively on
+ *	[-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2
+ *	in [-pi/4 , +pi/4], and let n = k mod 4.
+ *	We have
+ *
+ *          n        sin(x)      cos(x)        tan(x)
+ *     ----------------------------------------------------------
+ *	    0	       S	   C		 T
+ *	    1	       C	  -S		-1/T
+ *	    2	      -S	  -C		 T
+ *	    3	      -C	   S		-1/T
+ *     ----------------------------------------------------------
+ *
+ * Special cases:
+ *      Let trig be any of sin, cos, or tan.
+ *      trig(+-INF)  is NaN, with signals;
+ *      trig(NaN)    is that NaN;
+ *
+ * Accuracy:
+ *	TRIG(x) returns trig(x) nearly rounded
+ */
+
+#include "math.h"
+#include "math_private.h"
+
+#ifdef __STDC__
+	long double __tanl(long double x)
+#else
+	long double __tanl(x)
+	long double x;
+#endif
+{
+	long double y[2],z=0.0;
+	int32_t n, se;
+
+    /* High word of x. */
+	GET_LDOUBLE_EXP(se,x);
+
+    /* |x| ~< pi/4 */
+	se &= 0x7fff;
+	if(ix <= 0x3ffe) return __kernel_tanl(x,z,1);
+
+    /* tan(Inf or NaN) is NaN */
+	else if (se==0x7fff) return x-x;		/* NaN */
+
+    /* argument reduction needed */
+	else {
+	    n = __ieee754_rem_pio2l(x,y);
+	    return __kernel_tanl(y[0],y[1],1-((n&1)<<1)); /*   1 -- n even
+							-1 -- n odd */
+	}
+}
+weak_alias (__tanl, tanl)
diff --git a/sysdeps/mach/Makefile b/sysdeps/mach/Makefile
index a179b1f83e..2f2a12cb3b 100644
--- a/sysdeps/mach/Makefile
+++ b/sysdeps/mach/Makefile
@@ -25,11 +25,7 @@ ifneq (mach,$(subdir))
 # Subdirectories other than mach/ might use the generated Mach headers.
 # So make sure we get a chance to run in mach/ to make them before all else.
 
-ifdef objpfx
-mach-objpfx = $(objpfx)
-else
-mach-objpfx = $(..)mach/
-endif
+mach-objpfx = $(common-objpfx)mach/
 
 # These are all the generated files that <mach.h> includes.
 mach-before-compile := $(mach-objpfx)mach-shortcuts.h \
diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile
index 974edfc07c..c9ac18b426 100644
--- a/sysdeps/mach/hurd/Makefile
+++ b/sysdeps/mach/hurd/Makefile
@@ -41,11 +41,7 @@ ifeq (,$(filter mach hurd,$(subdir)))
 # (But we don't want to do this in mach/, because hurd/ needs some things
 # there, and we know mach/ doesn't need anything from hurd/.)
 
-ifdef objpfx
-hurd-objpfx = $(objpfx)
-else
-hurd-objpfx = $(..)hurd/
-endif
+hurd-objpfx = $(common-objpfx)hurd/
 
 # These are all the generated headers that <hurd.h> includes.
 before-compile += $(patsubst %,$(hurd-objpfx)hurd/%.h,io fs process)
@@ -104,12 +100,10 @@ endif
 
 # For the shared library, we don't need to do the linker script machination.
 # Instead, we specify the required libraries when building the shared object.
-rpcuserlibs := $(firstword $(objdir) $(..)mach)/libmachuser.so \
-	       $(firstword $(objdir) $(..)hurd)/libhurduser.so
+rpcuserlibs := $(common-objpfx)mach/libmachuser.so \
+	       $(common-objpfx)hurd/libhurduser.so
 $(common-objpfx)libc.so: $(rpcuserlibs)
-ifndef objpfx
-rpath-link += $(..)mach:$(..)hurd
-endif
+rpath-link += $(common-objpfx)mach:$(common-objpfx)hurd
 
 # The RPC stubs from these libraries are needed in building the dynamic
 # linker, too.  It must be self-contained, so we link the needed PIC
diff --git a/sysdeps/unix/Makefile b/sysdeps/unix/Makefile
index 9c718c0906..627b78c70c 100644
--- a/sysdeps/unix/Makefile
+++ b/sysdeps/unix/Makefile
@@ -209,7 +209,7 @@ common-generated := $(common-generated) \
 endif
 
 ifeq ($(subdir),stdio-common)
-ifeq (,$(filter-out $(sysdep_dir)/stub/ $(common-objpfx),\
+ifeq (,$(filter-out $(sysdep_dir)/stub/ $(objpfx),\
 	$(dir $(firstword $(wildcard $(+sysdep_dirs:%=%/errlist.c))))))
 
 before-compile: $(objpfx)errlist.c
@@ -302,4 +302,7 @@ ifndef no_deps
 endif
 endif
 
+$(common-objpfx)s-proto.d: $(..)sysdeps/unix/s-proto.S $(before-compile)
+	$(+make-deps)
+
 endif
diff --git a/sysdeps/unix/make-syscalls.sh b/sysdeps/unix/make-syscalls.sh
index 260769ed7b..e2c09905d0 100644
--- a/sysdeps/unix/make-syscalls.sh
+++ b/sysdeps/unix/make-syscalls.sh
@@ -58,7 +58,7 @@ EOF
 
   # Emit a compilation rule for this syscall.
   echo "\
-\$(foreach o,\$(object-suffixes),\$(objpfx)$file\$o): \$(objpfx)s-proto.d
+\$(foreach o,\$(object-suffixes),\$(objpfx)$file\$o): \$(common-objpfx)s-proto.d
 	(echo '#include <sysdep.h>'; \\
 	 echo 'PSEUDO ($strong, $syscall, $nargs)'; \\
 	 echo '	ret'; \\
diff --git a/sysdeps/unix/sysv/linux/alpha/Dist b/sysdeps/unix/sysv/linux/alpha/Dist
index 5c0e8d1c7e..79ac03ff90 100644
--- a/sysdeps/unix/sysv/linux/alpha/Dist
+++ b/sysdeps/unix/sysv/linux/alpha/Dist
@@ -1,4 +1,5 @@
-alpha/ptrace.h alpha/regdef.h
+alpha/ptrace.halpha/regdef.h
 ieee_get_fp_control.S ieee_set_fp_control.S
 ioperm.c
 init-first.h
+clone.S
diff --git a/sysdeps/unix/sysv/linux/i386/Dist b/sysdeps/unix/sysv/linux/i386/Dist
index f81ff6a146..4e4f467392 100644
--- a/sysdeps/unix/sysv/linux/i386/Dist
+++ b/sysdeps/unix/sysv/linux/i386/Dist
@@ -1,2 +1,3 @@
 sys/perm.h sys/vm86.h
 init-first.h
+close.S
diff --git a/sysdeps/unix/sysv/linux/m68k/Dist b/sysdeps/unix/sysv/linux/m68k/Dist
index 2c6d09e88f..a281cba3f9 100644
--- a/sysdeps/unix/sysv/linux/m68k/Dist
+++ b/sysdeps/unix/sysv/linux/m68k/Dist
@@ -1 +1,2 @@
 init-first.h
+clone.S
diff --git a/version.c b/version.c
index 37468ad432..8fc5cfe0f1 100644
--- a/version.c
+++ b/version.c
@@ -26,7 +26,8 @@ Compiled by GNU CC version "__VERSION__".\n\
 Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.\n\
 This is free software; see the source for copying conditions.\n\
 There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A\n\
-PARTICULAR PURPOSE.\n";
+PARTICULAR PURPOSE.\n\
+Report bugs to <bug-glibc@gnu.ai.mit.edu>.";
 
 #include <unistd.h>