about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-04-30 15:51:34 +0000
committerUlrich Drepper <drepper@redhat.com>1997-04-30 15:51:34 +0000
commit779ae82ecdf88b7ed7c1f00d3ed3a639671c3c8d (patch)
tree287afe5ef732d76109129a142c5840cc42a2b34a
parenta12ea214dbc999b98ab5ed4e53fb0089cf5e183a (diff)
downloadglibc-cvs/libc-970525.tar.gz
glibc-cvs/libc-970525.tar.xz
glibc-cvs/libc-970525.zip
1997-04-30 17:35  Ulrich Drepper  <drepper@cygnus.com>

	* math/libm-test.c: Implement test for exceptions.
	Partly due to Andreas Jaeger.
	(csin_test): New function.
	* sysdeps/libm-i387/s_cexp.S: Raise correct exceptions.
	* sysdeps/libm-i387/s_cexpf.S: Likewise.
	* sysdeps/libm-i387/s_cexpl.S: Likewise.
	* sysdeps/libm-ieee754/s_ccos.c: Likewise.
	* sysdeps/libm-ieee754/s_ccosf.c: Likewise.
	* sysdeps/libm-ieee754/s_ccosl.c: Likewise.
	* sysdeps/libm-ieee754/s_ccosh.c: Likewise.
	* sysdeps/libm-ieee754/s_ccoshf.c: Likewise.
	* sysdeps/libm-ieee754/s_ccoshl.c: Likewise.
	* sysdeps/libm-ieee754/s_cexp.c: Likewise.
	* sysdeps/libm-ieee754/s_cexpf.c: Likewise.
	* sysdeps/libm-ieee754/s_cexpl.c: Likewise.
	* sysdeps/libm-ieee754/s_csinh.c: Likewise.
	* sysdeps/libm-ieee754/s_csinhf.c: Likewise.
	* sysdeps/libm-ieee754/s_csinhl.c: Likewise.
	* sysdeps/libm-ieee754/s_ctanh.c: Likewise.
	* sysdeps/libm-ieee754/s_ctanhf.c: Likewise.
	* sysdeps/libm-ieee754/s_ctanhl.c: Likewise.

	* sysdeps/libm-ieee754/s_ccosh.c: Correct computation.
	* sysdeps/libm-ieee754/s_ccoshf.c: Likewise.
	* sysdeps/libm-ieee754/s_ccoshl.c: Likewise.
	* sysdeps/libm-ieee754/s_csinh.c: Likewise.
	* sysdeps/libm-ieee754/s_csinhf.c: Likewise.
	* sysdeps/libm-ieee754/s_csinhl.c: Likewise.

	* sysdeps/libm-ieee754/s_csin.c: Rewrite.
	* sysdeps/libm-ieee754/s_csinf.c: Likewise.
	* sysdeps/libm-ieee754/s_csinl.c: Likewise.

	* stdlib/random_r.c (__srandom_r): Don't use seed 0.  Use 1 in this
	case.

	* sysdeps/i386/dl-machine.h (elf_machine_load_address): Use notation
	for local label.

	* time/strftime.c (add): Respect `0' padding flag.
	Reported by Richard Stallman <rms@gnu.ai.mit.edu>.

1997-04-30 15:46  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig (start-installed-name): Define here, not in csu/Makefile.
	Use in +link macro.
	* csu/Makefile (distribute): Add abi-note.S and abi-tag.h.
	(start-installed-name): Don't define here.
	When ELF generate file named by start-installed-name from start.o
	and abi-note.o.
	* csu/abi-note.S: New file.
	* sysdeps/stub/abi-tag.h: New file.
	* sysdpes/unix/sysv/linux/abi-tag.h: New file.
	Patches by Roland McGrath <roland@gnu.ai.mit.edu>.

1997-04-30 01:32  Ulrich Drepper  <drepper@cygnus.com>

	* manual/stdio.texi: Use @vtable where possible.
	Add TeX version of @multitable since texi2dvi cannot handle them
	correct in the moment.

	* po/de.po: Update.

1997-04-29 21:06  Ulrich Drepper  <drepper@cygnus.com>

	* Makeconfig: Don't set cross-compiling based on $(BUILD_CC) != $(CC).
	* config.make.in: Set cross-compiling from configure result.
	* configure.in: Emit definition of `cross_compiling'.
	Patches by Marcus G. Daniels <marcus@cathcart.sysc.pdx.edu>.

1997-04-27 21:50  Philip Blundell  <pjb27@cam.ac.uk>

	* sysdeps/unix/sysv/linux/net/route.h (struct in6_rtmsg): Use
	correct `int' sizes for struct members.

1997-04-29 19:14  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/libm-i387/e_powf.S Generate invalid exception correctly.
	* sysdeps/libm-i387/e_pow.S: Likewise.
	* sysdeps/libm-i387/e_powl.S: Likewise.

1997-04-23 10:08  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* math/fenv.h: Correct typos.

1997-04-28 10:04  Richard Henderson  <rth@tamu.edu>

	* sysdeps/unix/sysv/linux/alpha/clone.S: Save the function argument
	in t0 rather than a4 to avoid it being clobbered.

1997-04-27 23:52  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* manual/summary.awk: Recognize @defmumblex.

	* manual/signal.texi (Miscellaneous Signals): Use @deftypevrx for
	second description header.

1997-04-27 23:29  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* manual/arith.texi (Floating-Point Classes): Don't indent text,
	makeinfo doesn't like that.

1997-04-27 20:52  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* malloc/obstack.h (obstack_specify_allocation_with_arg,
	obstack_chunkfun, obstack_freefun): Fix casts.

1997-04-27 18:21  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* manual/xtract-typefun.awk: Allow names with only one character.

1997-04-26 14:16  Ulrich Drepper  <drepper@cygnus.com>

	* sysdeps/unix/sysv/linux/netinet/ip_fw.h: Use <netinet/ip_icmp.h>
	not <netinet/icmp.h>.
	Reported by Michael Deutschmann <ldeutsch@mail.netshop.net>.

1997-04-25 12:31  Ulrich Drepper  <drepper@cygnus.com>

	* csu/Makefile ($(objpfx)initfini.s): Add CPPFLAGS, CFLAGS and -g0
	to command line of compiler.
	Patch by Marcus G. Daniels <marcus@sysc.pdx.edu>.

	* sysdeps/generic/sigset.h (__sigandset, __sigorset): Fix typos.
	Patch by Marcus G. Daniels <marcus@sysc.pdx.edu>.

	* signal/signal.h (_sys_siglist, sys_siglist): Use _NSIG, not NSIG
	in declaration.
	Patch by Michael Widenius <monty@tcx.se>.

	* time/strptime.c (strptime_internal): Fix %I format specifier
	being off by one.
	Patch by Mark Kettenis <kettenis@phys.uva.nl>.

1997-04-24 12:18  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* stdlib/lcong48_r.c: Include <limits.h>.
	* stdlib/seed48_r.c: Likewise.

	* stdio-common/printf_size.c (printf_size): Correct type of
	`units' and make robust against future changes.

1997-04-23 18:58  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* sysdeps/libm-ieee754/s_cproj.c: Use isfinite instead of finite.
	* sysdeps/libm-ieee754/s_cprojl.c: Likewise.
	* sysdeps/libm-ieee754/s_cprojf.c: Likewise.

1997-04-23 18:53  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* manual/arith.texi, manual/math.texi: Use @defmumblex for
	additional description headers.
	* manual/xtract-typefun.awk: Recognize them.

1997-04-22 15:58  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* stdio-common/printf_size.c (printf_size): Correct size of array
	units.
-rw-r--r--ChangeLog161
-rw-r--r--Make-dist6
-rw-r--r--Makeconfig27
-rw-r--r--config.make.in1
-rwxr-xr-xconfigure80
-rw-r--r--configure.in1
-rw-r--r--csu/Makefile36
-rw-r--r--csu/abi-note.S69
-rw-r--r--malloc/obstack.h7
-rw-r--r--manual/arith.texi154
-rw-r--r--manual/libc.texinfo7
-rw-r--r--manual/math.texi328
-rw-r--r--manual/signal.texi3
-rw-r--r--manual/stdio.texi46
-rw-r--r--manual/summary.awk24
-rw-r--r--manual/texinfo.tex134
-rw-r--r--manual/xtract-typefun.awk6
-rw-r--r--math/fenv.h6
-rw-r--r--math/libm-test.c1167
-rw-r--r--po/de.po1211
-rw-r--r--signal/signal.h4
-rw-r--r--stdio-common/printf_size.c8
-rw-r--r--stdlib/lcong48_r.c1
-rw-r--r--stdlib/random_r.c3
-rw-r--r--stdlib/seed48_r.c1
-rw-r--r--sysdeps/generic/sigset.h4
-rw-r--r--sysdeps/i386/dl-machine.h8
-rw-r--r--sysdeps/libm-i387/e_pow.S7
-rw-r--r--sysdeps/libm-i387/e_powf.S7
-rw-r--r--sysdeps/libm-i387/e_powl.S7
-rw-r--r--sysdeps/libm-i387/s_cexp.S22
-rw-r--r--sysdeps/libm-i387/s_cexpf.S22
-rw-r--r--sysdeps/libm-i387/s_cexpl.S22
-rw-r--r--sysdeps/libm-ieee754/s_ccos.c16
-rw-r--r--sysdeps/libm-ieee754/s_ccosf.c16
-rw-r--r--sysdeps/libm-ieee754/s_ccosh.c14
-rw-r--r--sysdeps/libm-ieee754/s_ccoshf.c16
-rw-r--r--sysdeps/libm-ieee754/s_ccoshl.c14
-rw-r--r--sysdeps/libm-ieee754/s_ccosl.c16
-rw-r--r--sysdeps/libm-ieee754/s_cexpf.c15
-rw-r--r--sysdeps/libm-ieee754/s_cexpl.c15
-rw-r--r--sysdeps/libm-ieee754/s_cproj.c2
-rw-r--r--sysdeps/libm-ieee754/s_cprojf.c2
-rw-r--r--sysdeps/libm-ieee754/s_cprojl.c2
-rw-r--r--sysdeps/libm-ieee754/s_csin.c104
-rw-r--r--sysdeps/libm-ieee754/s_csinf.c104
-rw-r--r--sysdeps/libm-ieee754/s_csinh.c18
-rw-r--r--sysdeps/libm-ieee754/s_csinhf.c18
-rw-r--r--sysdeps/libm-ieee754/s_csinhl.c17
-rw-r--r--sysdeps/libm-ieee754/s_csinl.c104
-rw-r--r--sysdeps/libm-ieee754/s_ctanh.c6
-rw-r--r--sysdeps/libm-ieee754/s_ctanhf.c6
-rw-r--r--sysdeps/libm-ieee754/s_ctanhl.c6
-rw-r--r--sysdeps/stub/abi-tag.h3
-rw-r--r--sysdeps/unix/sysv/linux/abi-tag.h16
-rw-r--r--sysdeps/unix/sysv/linux/alpha/clone.S4
-rw-r--r--sysdeps/unix/sysv/linux/net/route.h10
-rw-r--r--sysdeps/unix/sysv/linux/netinet/ip_fw.h10
-rw-r--r--time/strftime.c25
-rw-r--r--time/strptime.c2
60 files changed, 2731 insertions, 1440 deletions
diff --git a/ChangeLog b/ChangeLog
index c756d42ad6..e94044fe3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,164 @@
+1997-04-30 17:35  Ulrich Drepper  <drepper@cygnus.com>
+
+	* math/libm-test.c: Implement test for exceptions.
+	Partly due to Andreas Jaeger.
+	(csin_test): New function.
+	* sysdeps/libm-i387/s_cexp.S: Raise correct exceptions.
+	* sysdeps/libm-i387/s_cexpf.S: Likewise.
+	* sysdeps/libm-i387/s_cexpl.S: Likewise.
+	* sysdeps/libm-ieee754/s_ccos.c: Likewise.
+	* sysdeps/libm-ieee754/s_ccosf.c: Likewise.
+	* sysdeps/libm-ieee754/s_ccosl.c: Likewise.
+	* sysdeps/libm-ieee754/s_ccosh.c: Likewise.
+	* sysdeps/libm-ieee754/s_ccoshf.c: Likewise.
+	* sysdeps/libm-ieee754/s_ccoshl.c: Likewise.
+	* sysdeps/libm-ieee754/s_cexp.c: Likewise.
+	* sysdeps/libm-ieee754/s_cexpf.c: Likewise.
+	* sysdeps/libm-ieee754/s_cexpl.c: Likewise.
+	* sysdeps/libm-ieee754/s_csinh.c: Likewise.
+	* sysdeps/libm-ieee754/s_csinhf.c: Likewise.
+	* sysdeps/libm-ieee754/s_csinhl.c: Likewise.
+	* sysdeps/libm-ieee754/s_ctanh.c: Likewise.
+	* sysdeps/libm-ieee754/s_ctanhf.c: Likewise.
+	* sysdeps/libm-ieee754/s_ctanhl.c: Likewise.
+
+	* sysdeps/libm-ieee754/s_ccosh.c: Correct computation.
+	* sysdeps/libm-ieee754/s_ccoshf.c: Likewise.
+	* sysdeps/libm-ieee754/s_ccoshl.c: Likewise.
+	* sysdeps/libm-ieee754/s_csinh.c: Likewise.
+	* sysdeps/libm-ieee754/s_csinhf.c: Likewise.
+	* sysdeps/libm-ieee754/s_csinhl.c: Likewise.
+
+	* sysdeps/libm-ieee754/s_csin.c: Rewrite.
+	* sysdeps/libm-ieee754/s_csinf.c: Likewise.
+	* sysdeps/libm-ieee754/s_csinl.c: Likewise.
+
+	* stdlib/random_r.c (__srandom_r): Don't use seed 0.  Use 1 in this
+	case.
+
+	* sysdeps/i386/dl-machine.h (elf_machine_load_address): Use notation
+	for local label.
+
+	* time/strftime.c (add): Respect `0' padding flag.
+	Reported by Richard Stallman <rms@gnu.ai.mit.edu>.
+
+1997-04-30 15:46  Ulrich Drepper  <drepper@cygnus.com>
+
+	* Makeconfig (start-installed-name): Define here, not in csu/Makefile.
+	Use in +link macro.
+	* csu/Makefile (distribute): Add abi-note.S and abi-tag.h.
+	(start-installed-name): Don't define here.
+	When ELF generate file named by start-installed-name from start.o
+	and abi-note.o.
+	* csu/abi-note.S: New file.
+	* sysdeps/stub/abi-tag.h: New file.
+	* sysdpes/unix/sysv/linux/abi-tag.h: New file.
+	Patches by Roland McGrath <roland@gnu.ai.mit.edu>.
+
+1997-04-30 01:32  Ulrich Drepper  <drepper@cygnus.com>
+
+	* manual/stdio.texi: Use @vtable where possible.
+	Add TeX version of @multitable since texi2dvi cannot handle them
+	correct in the moment.
+
+	* po/de.po: Update.
+
+1997-04-29 21:06  Ulrich Drepper  <drepper@cygnus.com>
+
+	* Makeconfig: Don't set cross-compiling based on $(BUILD_CC) != $(CC).
+	* config.make.in: Set cross-compiling from configure result.
+	* configure.in: Emit definition of `cross_compiling'.
+	Patches by Marcus G. Daniels <marcus@cathcart.sysc.pdx.edu>.
+
+1997-04-27 21:50  Philip Blundell  <pjb27@cam.ac.uk>
+
+	* sysdeps/unix/sysv/linux/net/route.h (struct in6_rtmsg): Use
+	correct `int' sizes for struct members.
+
+1997-04-29 19:14  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/libm-i387/e_powf.S Generate invalid exception correctly.
+	* sysdeps/libm-i387/e_pow.S: Likewise.
+	* sysdeps/libm-i387/e_powl.S: Likewise.
+
+1997-04-23 10:08  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* math/fenv.h: Correct typos.
+
+1997-04-28 10:04  Richard Henderson  <rth@tamu.edu>
+
+	* sysdeps/unix/sysv/linux/alpha/clone.S: Save the function argument
+	in t0 rather than a4 to avoid it being clobbered.
+
+1997-04-27 23:52  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* manual/summary.awk: Recognize @defmumblex.
+
+	* manual/signal.texi (Miscellaneous Signals): Use @deftypevrx for
+	second description header.
+
+1997-04-27 23:29  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* manual/arith.texi (Floating-Point Classes): Don't indent text,
+	makeinfo doesn't like that.
+
+1997-04-27 20:52  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* malloc/obstack.h (obstack_specify_allocation_with_arg,
+	obstack_chunkfun, obstack_freefun): Fix casts.
+
+1997-04-27 18:21  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* manual/xtract-typefun.awk: Allow names with only one character.
+
+1997-04-26 14:16  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/unix/sysv/linux/netinet/ip_fw.h: Use <netinet/ip_icmp.h>
+	not <netinet/icmp.h>.
+	Reported by Michael Deutschmann <ldeutsch@mail.netshop.net>.
+
+1997-04-25 12:31  Ulrich Drepper  <drepper@cygnus.com>
+
+	* csu/Makefile ($(objpfx)initfini.s): Add CPPFLAGS, CFLAGS and -g0
+	to command line of compiler.
+	Patch by Marcus G. Daniels <marcus@sysc.pdx.edu>.
+
+	* sysdeps/generic/sigset.h (__sigandset, __sigorset): Fix typos.
+	Patch by Marcus G. Daniels <marcus@sysc.pdx.edu>.
+
+	* signal/signal.h (_sys_siglist, sys_siglist): Use _NSIG, not NSIG
+	in declaration.
+	Patch by Michael Widenius <monty@tcx.se>.
+
+	* time/strptime.c (strptime_internal): Fix %I format specifier
+	being off by one.
+	Patch by Mark Kettenis <kettenis@phys.uva.nl>.
+
+1997-04-24 12:18  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* stdlib/lcong48_r.c: Include <limits.h>.
+	* stdlib/seed48_r.c: Likewise.
+
+	* stdio-common/printf_size.c (printf_size): Correct type of
+	`units' and make robust against future changes.
+
+1997-04-23 18:58  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/libm-ieee754/s_cproj.c: Use isfinite instead of finite.
+	* sysdeps/libm-ieee754/s_cprojl.c: Likewise.
+	* sysdeps/libm-ieee754/s_cprojf.c: Likewise.
+
+1997-04-23 18:53  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* manual/arith.texi, manual/math.texi: Use @defmumblex for
+	additional description headers.
+	* manual/xtract-typefun.awk: Recognize them.
+
+1997-04-22 15:58  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* stdio-common/printf_size.c (printf_size): Correct size of array
+	units.
+
 1997-04-21 07:50  H.J. Lu  <hjl@gnu.ai.mit.edu>
 
 	* libgen.h: New file.
diff --git a/Make-dist b/Make-dist
index bacc8655a9..ab11c3d453 100644
--- a/Make-dist
+++ b/Make-dist
@@ -195,9 +195,9 @@ dist.tar: README $(tardir) $(+tsrcs)
 
 $(tardir).tar: dist.tar subdir_dist
 	@echo Files listed here have names exceeding 14 chars.
-	tar xfv $< -C /tmp | sed -n '/[^/]\{15,\}/p'
-	tar covf $@ -C /tmp $(tardir)
-	-rm -fr /tmp/$(tardir) dist.tar &
+	tar xfv $< -C $${TMPDIR-/tmp} | sed -n '/[^/]\{15,\}/p'
+	tar covf $@ -C $${TMPDIR-/tmp} $(tardir)
+	-rm -fr $${TMPDIR-/tmp}/$(tardir) dist.tar &
 
 %.Z: %
 	compress -c $< > $@
diff --git a/Makeconfig b/Makeconfig
index d026b46743..3d666ffbbc 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -318,13 +318,28 @@ ifndef asm-CPPFLAGS
 asm-CPPFLAGS =
 endif
 
+# Installed name of the startup code.
+ifneq ($(elf),yes)
+# When not using ELF, there is just one startfile, called crt0.o.
+start-installed-name = crt0.o
+else
+# In the ELF universe, crt0.o is called crt1.o, and there are
+# some additional bizarre files.
+start-installed-name = crt1.o
+have-initfini = yes
+endif
+
+
 # Command for linking programs with the C library.
 ifndef +link
 +link = $(CC) -nostdlib -nostartfiles -o $@ \
 	      $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS)  \
-	      $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+prector) \
-	      $(filter-out $(addprefix $(csu-objpfx),start.o) $(+preinit) \
-		$(link-extra-libs) $(common-objpfx)libc% $(+postinit),$^) \
+	      $(addprefix $(csu-objpfx),$(start-installed-name)) \
+	      $(+preinit) $(+prector) \
+	      $(filter-out $(addprefix $(csu-objpfx),start.o \
+						     $(start-installed-name))\
+			   $(+preinit) $(link-extra-libs) \
+			   $(common-objpfx)libc% $(+postinit),$^) \
 	      $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
 endif
 ifndef config-LDFLAGS
@@ -536,12 +551,6 @@ endif
 ifndef BUILD_CC
 BUILD_CC = $(CC)
 endif
-
-ifneq ($(BUILD_CC),$(CC))
-cross-compiling := yes
-else
-cross-compiling := no
-endif
 
 # Figure out the version numbers from version.h.
 
diff --git a/config.make.in b/config.make.in
index 0a7d0379fd..e807a4cba2 100644
--- a/config.make.in
+++ b/config.make.in
@@ -42,6 +42,7 @@ build-omitfp = @omitfp@
 build-bounded = @bounded@
 stdio = @stdio@
 add-ons = @subdirs@
+cross-compiling = @cross_compiling@
 
 # Build tools.
 CC = @CC@
diff --git a/configure b/configure
index 0866deca11..a7bdcfb1cc 100755
--- a/configure
+++ b/configure
@@ -1345,8 +1345,9 @@ test -n "$BUILD_CC" && break
 done
 
 fi
+
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1350: checking how to run the C preprocessor" >&5
+echo "configure:1351: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1361,13 +1362,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1365 "configure"
+#line 1366 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1371: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1372: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1378,13 +1379,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1382 "configure"
+#line 1383 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1388: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1389: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out`
 if test -z "$ac_err"; then
   :
@@ -1415,7 +1416,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1419: checking for $ac_word" >&5
+echo "configure:1420: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1446,7 +1447,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1450: checking for $ac_word" >&5
+echo "configure:1451: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1477,7 +1478,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1481: checking for $ac_word" >&5
+echo "configure:1482: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1512,7 +1513,7 @@ fi
 # Extract the first word of "bash", so it can be a program name with args.
 set dummy bash; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1516: checking for $ac_word" >&5
+echo "configure:1517: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_BASH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1553,7 +1554,7 @@ if test "$BASH" = no; then
   # Extract the first word of "ksh", so it can be a program name with args.
 set dummy ksh; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1557: checking for $ac_word" >&5
+echo "configure:1558: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_KSH'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1595,7 +1596,7 @@ fi
 
 
 echo $ac_n "checking for signed size_t type""... $ac_c" 1>&6
-echo "configure:1599: checking for signed size_t type" >&5
+echo "configure:1600: checking for signed size_t type" >&5
 if eval "test \"`echo '$''{'libc_cv_signed_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1619,12 +1620,12 @@ EOF
 fi
 
 echo $ac_n "checking for libc-friendly stddef.h""... $ac_c" 1>&6
-echo "configure:1623: checking for libc-friendly stddef.h" >&5
+echo "configure:1624: checking for libc-friendly stddef.h" >&5
 if eval "test \"`echo '$''{'libc_cv_friendly_stddef'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1628 "configure"
+#line 1629 "configure"
 #include "confdefs.h"
 #define __need_size_t
 #define __need_wchar_t
@@ -1639,7 +1640,7 @@ size_t size; wchar_t wchar;
 if (&size == NULL || &wchar == NULL) abort ();
 ; return 0; }
 EOF
-if { (eval echo configure:1643: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1644: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_friendly_stddef=yes
 else
@@ -1658,7 +1659,7 @@ override stddef.h = # The installed <stddef.h> seems to be libc-friendly."
 fi
 
 echo $ac_n "checking whether we need to use -P to assemble .S files""... $ac_c" 1>&6
-echo "configure:1662: checking whether we need to use -P to assemble .S files" >&5
+echo "configure:1663: checking whether we need to use -P to assemble .S files" >&5
 if eval "test \"`echo '$''{'libc_cv_need_minus_P'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1681,7 +1682,7 @@ asm-CPPFLAGS = -P # The assembler can't grok cpp's # line directives."
 fi
 
 echo $ac_n "checking for assembler global-symbol directive""... $ac_c" 1>&6
-echo "configure:1685: checking for assembler global-symbol directive" >&5
+echo "configure:1686: checking for assembler global-symbol directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_global_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1711,7 +1712,7 @@ EOF
 fi
 
 echo $ac_n "checking for .set assembler directive""... $ac_c" 1>&6
-echo "configure:1715: checking for .set assembler directive" >&5
+echo "configure:1716: checking for .set assembler directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_set_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1745,7 +1746,7 @@ EOF
 fi
 
 echo $ac_n "checking for .symver assembler directive""... $ac_c" 1>&6
-echo "configure:1749: checking for .symver assembler directive" >&5
+echo "configure:1750: checking for .symver assembler directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_symver_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1764,7 +1765,7 @@ fi
 
 echo "$ac_t""$libc_cv_asm_symver_directive" 1>&6
 echo $ac_n "checking for ld --version-script""... $ac_c" 1>&6
-echo "configure:1768: checking for ld --version-script" >&5
+echo "configure:1769: checking for ld --version-script" >&5
 if eval "test \"`echo '$''{'libc_cv_ld_version_script_option'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1781,7 +1782,7 @@ VERS {
 EOF
   if ${CC-cc} -c $CFLAGS $CPPFLAGS conftest.s 1>&5 2>&5; then
     if { ac_try='${CC-cc} $CFLAGS --shared -o conftest.so conftest.o
-					-Wl,--version-script,conftest.map'; { (eval echo configure:1785: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
+					-Wl,--version-script,conftest.map'; { (eval echo configure:1786: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; };
     then
       libc_cv_ld_version_script_option=yes
     else
@@ -1811,7 +1812,7 @@ fi
 
 if test $elf = yes; then
   echo $ac_n "checking for .previous assembler directive""... $ac_c" 1>&6
-echo "configure:1815: checking for .previous assembler directive" >&5
+echo "configure:1816: checking for .previous assembler directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_previous_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1819,7 +1820,7 @@ else
 .section foo_section
 .previous
 EOF
-  if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1823: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+  if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
     libc_cv_asm_previous_directive=yes
   else
     libc_cv_asm_previous_directive=no
@@ -1835,7 +1836,7 @@ EOF
 
   else
     echo $ac_n "checking for .popsection assembler directive""... $ac_c" 1>&6
-echo "configure:1839: checking for .popsection assembler directive" >&5
+echo "configure:1840: checking for .popsection assembler directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_popsection_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1843,7 +1844,7 @@ else
 .pushsection foo_section
 .popsection
 EOF
-    if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1847: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+    if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5'; { (eval echo configure:1848: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
       libc_cv_asm_popsection_directive=yes
     else
       libc_cv_asm_popsection_directive=no
@@ -1863,12 +1864,12 @@ fi
 
 if test $elf != yes; then
   echo $ac_n "checking for .init and .fini sections""... $ac_c" 1>&6
-echo "configure:1867: checking for .init and .fini sections" >&5
+echo "configure:1868: checking for .init and .fini sections" >&5
 if eval "test \"`echo '$''{'libc_cv_have_initfini'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1872 "configure"
+#line 1873 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1877,7 +1878,7 @@ asm (".section .init");
 				    asm (".text");
 ; return 0; }
 EOF
-if { (eval echo configure:1881: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   libc_cv_have_initfini=yes
 else
@@ -1902,19 +1903,19 @@ if test $elf = yes; then
   libc_cv_asm_underscores=no
 else
   echo $ac_n "checking for _ prefix on C symbol names""... $ac_c" 1>&6
-echo "configure:1906: checking for _ prefix on C symbol names" >&5
+echo "configure:1907: checking for _ prefix on C symbol names" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_underscores'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1911 "configure"
+#line 1912 "configure"
 #include "confdefs.h"
 asm ("_glibc_foobar:");
 int main() {
 glibc_foobar ();
 ; return 0; }
 EOF
-if { (eval echo configure:1918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1919: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
   rm -rf conftest*
   libc_cv_asm_underscores=yes
 else
@@ -1941,7 +1942,7 @@ if test $elf = yes; then
   libc_cv_asm_weakext_directive=no
 else
   echo $ac_n "checking for assembler .weak directive""... $ac_c" 1>&6
-echo "configure:1945: checking for assembler .weak directive" >&5
+echo "configure:1946: checking for assembler .weak directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_weak_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1964,7 +1965,7 @@ echo "$ac_t""$libc_cv_asm_weak_directive" 1>&6
 
 if test $libc_cv_asm_weak_directive = no; then
   echo $ac_n "checking for assembler .weakext directive""... $ac_c" 1>&6
-echo "configure:1968: checking for assembler .weakext directive" >&5
+echo "configure:1969: checking for assembler .weakext directive" >&5
 if eval "test \"`echo '$''{'libc_cv_asm_weakext_directive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2001,7 +2002,7 @@ EOF
 fi
 
 echo $ac_n "checking for ld --no-whole-archive""... $ac_c" 1>&6
-echo "configure:2005: checking for ld --no-whole-archive" >&5
+echo "configure:2006: checking for ld --no-whole-archive" >&5
 if eval "test \"`echo '$''{'libc_cv_ld_no_whole_archive'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2012,7 +2013,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -Wl,--no-whole-archive
-			    -o conftest conftest.c'; { (eval echo configure:2016: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:2017: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_ld_no_whole_archive=yes
 else
   libc_cv_ld_no_whole_archive=no
@@ -2023,7 +2024,7 @@ fi
 echo "$ac_t""$libc_cv_ld_no_whole_archive" 1>&6
 
 echo $ac_n "checking for gcc -fno-exceptions""... $ac_c" 1>&6
-echo "configure:2027: checking for gcc -fno-exceptions" >&5
+echo "configure:2028: checking for gcc -fno-exceptions" >&5
 if eval "test \"`echo '$''{'libc_cv_gcc_no_exceptions'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2034,7 +2035,7 @@ __throw () {}
 EOF
 if { ac_try='${CC-cc} $CFLAGS
 			    -nostdlib -nostartfiles -fno-exceptions
-			    -o conftest conftest.c'; { (eval echo configure:2038: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
+			    -o conftest conftest.c'; { (eval echo configure:2039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then
   libc_cv_gcc_no_exceptions=yes
 else
   libc_cv_gcc_no_exceptions=no
@@ -2086,7 +2087,7 @@ if test "$uname" = generic; then
   fi
 
   echo $ac_n "checking OS release for uname""... $ac_c" 1>&6
-echo "configure:2090: checking OS release for uname" >&5
+echo "configure:2091: checking OS release for uname" >&5
 if eval "test \"`echo '$''{'libc_cv_uname_release'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2108,7 +2109,7 @@ echo "$ac_t""$libc_cv_uname_release" 1>&6
   uname_release="$libc_cv_uname_release"
 
   echo $ac_n "checking OS version for uname""... $ac_c" 1>&6
-echo "configure:2112: checking OS version for uname" >&5
+echo "configure:2113: checking OS version for uname" >&5
 if eval "test \"`echo '$''{'libc_cv_uname_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2130,7 +2131,7 @@ else
 fi
 
 echo $ac_n "checking stdio selection""... $ac_c" 1>&6
-echo "configure:2134: checking stdio selection" >&5
+echo "configure:2135: checking stdio selection" >&5
 
 case $stdio in
 libio) cat >> confdefs.h <<\EOF
@@ -2342,6 +2343,7 @@ s%@build_cpu@%$build_cpu%g
 s%@build_vendor@%$build_vendor%g
 s%@build_os@%$build_os%g
 s%@BUILD_CC@%$BUILD_CC%g
+s%@cross_compiling@%$cross_compiling%g
 s%@CPP@%$CPP%g
 s%@AR@%$AR%g
 s%@RANLIB@%$RANLIB%g
diff --git a/configure.in b/configure.in
index 2d3265eb5b..81beeeaa6b 100644
--- a/configure.in
+++ b/configure.in
@@ -366,6 +366,7 @@ AC_CANONICAL_BUILD
 if test $host != $build; then
   AC_CHECK_PROGS(BUILD_CC, gcc cc)
 fi
+AC_SUBST(cross_compiling)
 AC_PROG_CPP
 AC_CHECK_TOOL(AR, ar)
 AC_CHECK_TOOL(RANLIB, ranlib, :)
diff --git a/csu/Makefile b/csu/Makefile
index cba8a4a5f5..9664821ec4 100644
--- a/csu/Makefile
+++ b/csu/Makefile
@@ -36,25 +36,12 @@ omit-deps = $(patsubst %.o,%,$(start-installed-name) g$(start-installed-name) \
 		             $(csu-dummies))
 install-lib = $(start-installed-name) g$(start-installed-name) \
 	      $(csu-dummies)
-distribute = initfini.c gmon-start.c start.c defs.awk
+distribute = initfini.c gmon-start.c start.c defs.awk abi-note.S abi-tag.h
 
 all: # Make this the default target; it will be defined in Rules.
 
 include ../Makeconfig
 
-ifneq ($(elf),yes)
-
-# When not using ELF, there is just one startfile, called crt0.o.
-start-installed-name = crt0.o
-
-else
-
-# In the ELF universe, crt0.o is called crt1.o, and there are
-# some additional bizarre files.
-start-installed-name = crt1.o
-have-initfini = yes
-
-endif
 
 ifeq ($(have-initfini),yes)
 
@@ -75,7 +62,8 @@ $(objpfx)crt%.o: $(objpfx)crt%.S $(objpfx)defs.h
 	$(CC) -c -fPIC -g0 -I$(..) -I$(common-objpfx) -DASSEMBLER $< -o $@
 
 $(objpfx)initfini.s: initfini.c
-	$(CC) -S -fPIC -finhibit-size-directive $(no-exceptions) $< -o $@
+	$(CC) $(CPPFLAGS) $(CFLAGS) -g0 -S -fPIC -finhibit-size-directive \
+              $(no-exceptions) $< -o $@
 
 $(objpfx)crti.S: $(objpfx)initfini.s
 	sed -n -e '1,/@HEADER_ENDS/p' \
@@ -95,19 +83,31 @@ endif
 
 include ../Rules
 
+define link-relocatable
+$(CC) -nostdlib -nostartfiles -r -o $@ $^
+endef
+
 ifndef start-installed-name-rule
+ifeq (yes,$(elf))
+# We link the ELF startfile along with a SHT_NOTE section indicating
+# the the kernel ABI the binaries linked with this library will require.
+$(objpfx)$(start-installed-name): $(objpfx)start.o $(objpfx)abi-note.o
+	$(link-relocatable)
+else
 # The startfile is installed under different names, so we just call our
 # source file `start.c' and copy to the installed name after compiling.
 $(objpfx)$(start-installed-name): $(objpfx)start.o
-	-rm -f $@
+	rm -f $@
 	ln $< $@
 endif
+endif
 
 # The profiling startfile is made by linking together the normal
 # startfile with gmon-start.o, which defines a constructor function
 # to turn on profiling code at startup.
-$(objpfx)g$(start-installed-name): $(objpfx)start.o $(objpfx)gmon-start.o
-	$(CC) -nostdlib -nostartfiles -r -o $@ $^
+$(objpfx)g$(start-installed-name): $(objpfx)$(start-installed-name) \
+				   $(objpfx)gmon-start.o
+	$(link-relocatable)
 
 # These extra files are sometimes expected by system standard linking
 # procedures, but we have nothing for them to do.  So compile empty files.
diff --git a/csu/abi-note.S b/csu/abi-note.S
new file mode 100644
index 0000000000..baa409de4d
--- /dev/null
+++ b/csu/abi-note.S
@@ -0,0 +1,69 @@
+/* Special .init and .fini section support.
+   Copyright (C) 1997 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 Library General Public
+   License as published by the Free Software Foundation; either
+   version 2 of the License, or (at your option) any later version.
+
+   In addition to the permissions in the GNU Library General Public
+   License, the Free Software Foundation gives you unlimited
+   permission to link the compiled version of this file with other
+   programs, and to distribute those programs without any restriction
+   coming from the use of this file.  (The Library General Public
+   License restrictions do apply in other respects; for example, they
+   cover modification of the file, and distribution when not linked
+   into another program.)
+
+   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 Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
+
+#include <sysdep.h>
+
+/* The basic layout of note sections is specified by the ELF format.  */
+
+#define ELF_NOTE_BEGIN(sectname, sectflags, type, name)			      \
+	.section sectname, sectflags;					      \
+	.align ALIGNARG(2);	/* Notes are 4-byte aligned.  */	      \
+	.long 1f - 0f;		/* 32-bit word: length of name field */	      \
+	.long 3f - 2f;		/* 32-bit word: length of desc field */	      \
+	.long (type);		/* 32-bit word: vendor-defined type field */  \
+0:	.asciz name;		/* null-terminated string, any length: name */\
+1:	.align ALIGNARG(2);	/* Name data padded to 4-byte alignment.  */  \
+2:	/* Here follows the "note descriptor" data, whose format	      \
+	   is not specified by ELF.  The vendor name and type field	      \
+	   indicate what sort of data is found here.  */
+
+#define ELF_NOTE_END							      \
+3:	.align ALIGNARG(2)	/* Pad to 4-byte align the next note.  */
+
+
+/* The linker (GNU ld 2.8 and later) recognize an allocated section whose
+   name begins with `.note' and creates a PT_NOTE program header entry
+   pointing at it.
+
+   Such a program header is the canonical way (at least in the free OS
+   community) to identify the OS environment ABI that the executable was
+   created for.  The ELF note information identifies a particular OS or
+   coordinated development effort within which the ELF header's e_machine
+   value plus (for dynamically linked programs) the PT_INTERP dynamic
+   linker name and DT_NEEDED shared library names fully identify the
+   runtime environment required by an executable.
+
+   The GNU project and cooperating development efforts (including the Linux
+   community) use a vendor name string of "GNU", and a note type field with
+   value 1 for a note descriptor that indicates ABI requirements.  */
+
+#include <abi-tag.h>		/* OS-specific ABI tag value */
+
+ELF_NOTE_BEGIN(".note.ABI-tag", "a", 1, "GNU")
+	.long ABI_TAG
+ELF_NOTE_END
diff --git a/malloc/obstack.h b/malloc/obstack.h
index ea45664c02..b60828b6ae 100644
--- a/malloc/obstack.h
+++ b/malloc/obstack.h
@@ -307,13 +307,14 @@ extern int obstack_exit_failure;
 
 #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
   _obstack_begin_1 ((h), (size), (alignment), \
-		    (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun), (arg))
+		    (void *(*) (void *, long)) (chunkfun), \
+		    (void (*) (void *, void *)) (freefun), (arg))
 
 #define obstack_chunkfun(h, newchunkfun) \
-  ((h) -> chunkfun = (struct _obstack_chunk *(*)(long)) (newchunkfun))
+  ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
 
 #define obstack_freefun(h, newfreefun) \
-  ((h) -> freefun = (void (*)(void *)) (newfreefun))
+  ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
 
 #else
 
diff --git a/manual/arith.texi b/manual/arith.texi
index 86fb2667a0..efe0489e40 100644
--- a/manual/arith.texi
+++ b/manual/arith.texi
@@ -149,10 +149,8 @@ functions, and thus are available if you define @code{_BSD_SOURCE} or
 @comment math.h
 @comment BSD
 @deftypefun int isinf (double @var{x})
-@end deftypefun
-@deftypefun int isinff (float @var{x})
-@end deftypefun
-@deftypefun int isinfl (long double @var{x})
+@deftypefunx int isinff (float @var{x})
+@deftypefunx int isinfl (long double @var{x})
 This function returns @code{-1} if @var{x} represents negative infinity,
 @code{1} if @var{x} represents positive infinity, and @code{0} otherwise.
 @end deftypefun
@@ -160,10 +158,8 @@ This function returns @code{-1} if @var{x} represents negative infinity,
 @comment math.h
 @comment BSD
 @deftypefun int isnan (double @var{x})
-@end deftypefun
-@deftypefun int isnanf (float @var{x})
-@end deftypefun
-@deftypefun int isnanl (long double @var{x})
+@deftypefunx int isnanf (float @var{x})
+@deftypefunx int isnanl (long double @var{x})
 This function returns a nonzero value if @var{x} is a ``not a number''
 value, and zero otherwise.  (You can just as well use @code{@var{x} !=
 @var{x}} to get the same result).
@@ -172,10 +168,8 @@ value, and zero otherwise.  (You can just as well use @code{@var{x} !=
 @comment math.h
 @comment BSD
 @deftypefun int finite (double @var{x})
-@end deftypefun
-@deftypefun int finitef (float @var{x})
-@end deftypefun
-@deftypefun int finitel (long double @var{x})
+@deftypefunx int finitef (float @var{x})
+@deftypefunx int finitel (long double @var{x})
 This function returns a nonzero value if @var{x} is finite or a ``not a
 number'' value, and zero otherwise.
 @end deftypefun
@@ -213,21 +207,21 @@ which returns a value of type @code{int}.  The possible values are:
 
 @vtable @code
 @item FP_NAN
-  The floating-point number @var{x} is ``Not a Number'' (@pxref{Not a Number})
+The floating-point number @var{x} is ``Not a Number'' (@pxref{Not a Number})
 @item FP_INFINITE
-  The value of @var{x} is either plus or minus infinity (@pxref{Infinity})
+The value of @var{x} is either plus or minus infinity (@pxref{Infinity})
 @item FP_ZERO
-  The value of @var{x} is zero.  In floating-point formats like @w{IEEE
-  754} where the zero value can be signed this value is also returned if
-  @var{x} is minus zero.
+The value of @var{x} is zero.  In floating-point formats like @w{IEEE
+754} where the zero value can be signed this value is also returned if
+@var{x} is minus zero.
 @item FP_SUBNORMAL
-  Some floating-point formats (such as @w{IEEE 754}) allow floating-point
-  numbers to be represented in a denormalized format.  This happens if the
-  absolute value of the number is too small to be represented in the
-  normal format.  @code{FP_SUBNORMAL} is returned for such values of @var{x}.
+Some floating-point formats (such as @w{IEEE 754}) allow floating-point
+numbers to be represented in a denormalized format.  This happens if the
+absolute value of the number is too small to be represented in the
+normal format.  @code{FP_SUBNORMAL} is returned for such values of @var{x}.
 @item FP_NORMAL
-  This value is returned for all other cases which means the number is a
-  plain floating-point number without special meaning.
+This value is returned for all other cases which means the number is a
+plain floating-point number without special meaning.
 @end vtable
 
 This macro is useful if more than property of a number must be
@@ -319,20 +313,16 @@ functions.
 @comment complex.h
 @comment ISO
 @deftypefun double creal (complex double @var{z})
-@end deftypefun
-@deftypefun float crealf (complex float @var{z})
-@end deftypefun
-@deftypefun {long double} creall (complex long double @var{z})
+@deftypefunx float crealf (complex float @var{z})
+@deftypefunx {long double} creall (complex long double @var{z})
 These functions return the real part of the complex number @var{z}.
 @end deftypefun
 
 @comment complex.h
 @comment ISO
 @deftypefun double cimag (complex double @var{z})
-@end deftypefun
-@deftypefun float cimagf (complex float @var{z})
-@end deftypefun
-@deftypefun {long double} cimagl (complex long double @var{z})
+@deftypefunx float cimagf (complex float @var{z})
+@deftypefunx {long double} cimagl (complex long double @var{z})
 These functions return the imaginary part of the complex number @var{z}.
 @end deftypefun
 
@@ -343,10 +333,8 @@ for the real part but the complex part is negated.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} conj (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} conjf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} conjl (complex long double @var{z})
+@deftypefunx {complex float} conjf (complex float @var{z})
+@deftypefunx {complex long double} conjl (complex long double @var{z})
 These functions return the conjugate complex value of the complex number
 @var{z}.
 @end deftypefun
@@ -354,10 +342,8 @@ These functions return the conjugate complex value of the complex number
 @comment complex.h
 @comment ISO
 @deftypefun double carg (complex double @var{z})
-@end deftypefun
-@deftypefun float cargf (complex float @var{z})
-@end deftypefun
-@deftypefun {long double} cargl (complex long double @var{z})
+@deftypefunx float cargf (complex float @var{z})
+@deftypefunx {long double} cargl (complex long double @var{z})
 These functions return argument of the complex number @var{z}.
 
 Mathematically, the argument is the phase angle of @var{z} with a branch
@@ -367,10 +353,8 @@ cut along the negative real axis.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} cproj (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} cprojf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} cprojl (complex long double @var{z})
+@deftypefunx {complex float} cprojf (complex float @var{z})
+@deftypefunx {complex long double} cprojl (complex long double @var{z})
 Return the projection of the complex value @var{z} on the Riemann
 sphere.  Values with a infinite complex part (even if the real part
 is NaN) are projected to positive infinte on the real axis.  If the real part is infinite, the result is equivalent to
@@ -418,10 +402,8 @@ are of type @code{long int} rather than @code{int}.
 @comment math.h
 @comment ISO
 @deftypefun double fabs (double @var{number})
-@end deftypefun
-@deftypefun float fabsf (float @var{number})
-@end deftypefun
-@deftypefun {long double} fabsl (long double @var{number})
+@deftypefunx float fabsf (float @var{number})
+@deftypefunx {long double} fabsl (long double @var{number})
 This function returns the absolute value of the floating-point number
 @var{number}.
 @end deftypefun
@@ -429,10 +411,8 @@ This function returns the absolute value of the floating-point number
 @comment complex.h
 @comment ISO
 @deftypefun double cabs (complex double @var{z})
-@end deftypefun
-@deftypefun float cabsf (complex float @var{z})
-@end deftypefun
-@deftypefun {long double} cabsl (complex long double @var{z})
+@deftypefunx float cabsf (complex float @var{z})
+@deftypefunx {long double} cabsl (complex long double @var{z})
 These functions return the absolute value of the complex number @var{z}.
 The compiler must support complex numbers to use these functions.  (See
 also the function @code{hypot} in @ref{Exponents and Logarithms}.)  The
@@ -461,10 +441,8 @@ All these functions are declared in @file{math.h}.
 @comment math.h
 @comment ISO
 @deftypefun double frexp (double @var{value}, int *@var{exponent})
-@end deftypefun
-@deftypefun float frexpf (float @var{value}, int *@var{exponent})
-@end deftypefun
-@deftypefun {long double} frexpl (long double @var{value}, int *@var{exponent})
+@deftypefunx float frexpf (float @var{value}, int *@var{exponent})
+@deftypefunx {long double} frexpl (long double @var{value}, int *@var{exponent})
 These functions are used to split the number @var{value}
 into a normalized fraction and an exponent.
 
@@ -484,10 +462,8 @@ zero is stored in @code{*@var{exponent}}.
 @comment math.h
 @comment ISO
 @deftypefun double ldexp (double @var{value}, int @var{exponent})
-@end deftypefun
-@deftypefun float ldexpf (float @var{value}, int @var{exponent})
-@end deftypefun
-@deftypefun {long double} ldexpl (long double @var{value}, int @var{exponent})
+@deftypefunx float ldexpf (float @var{value}, int @var{exponent})
+@deftypefunx {long double} ldexpl (long double @var{value}, int @var{exponent})
 These functions return the result of multiplying the floating-point
 number @var{value} by 2 raised to the power @var{exponent}.  (It can
 be used to reassemble floating-point numbers that were taken apart
@@ -502,20 +478,16 @@ equivalent to those of @code{ldexp} and @code{frexp}:
 @comment math.h
 @comment BSD
 @deftypefun double scalb (double @var{value}, int @var{exponent})
-@end deftypefun
-@deftypefun float scalbf (float @var{value}, int @var{exponent})
-@end deftypefun
-@deftypefun {long double} scalbl (long double @var{value}, int @var{exponent})
+@deftypefunx float scalbf (float @var{value}, int @var{exponent})
+@deftypefunx {long double} scalbl (long double @var{value}, int @var{exponent})
 The @code{scalb} function is the BSD name for @code{ldexp}.
 @end deftypefun
 
 @comment math.h
 @comment BSD
 @deftypefun double logb (double @var{x})
-@end deftypefun
-@deftypefun float logbf (float @var{x})
-@end deftypefun
-@deftypefun {long double} logbl (long double @var{x})
+@deftypefunx float logbf (float @var{x})
+@deftypefunx {long double} logbl (long double @var{x})
 These BSD functions return the integer part of the base-2 logarithm of
 @var{x}, an integer value represented in type @code{double}.  This is
 the highest integer power of @code{2} contained in @var{x}.  The sign of
@@ -536,10 +508,8 @@ The value returned by @code{logb} is one less than the value that
 @comment math.h
 @comment ISO
 @deftypefun double copysign (double @var{value}, double @var{sign})
-@end deftypefun
-@deftypefun float copysignf (float @var{value}, float @var{sign})
-@end deftypefun
-@deftypefun {long double} copysignl (long double @var{value}, long double @var{sign})
+@deftypefunx float copysignf (float @var{value}, float @var{sign})
+@deftypefunx {long double} copysignl (long double @var{value}, long double @var{sign})
 These functions return a value whose absolute value is the
 same as that of @var{value}, and whose sign matches that of @var{sign}.
 This function appears in BSD and was standardized in @w{ISO C 9X}.
@@ -580,10 +550,8 @@ result as a @code{double} instead to get around this problem.
 @comment math.h
 @comment ISO
 @deftypefun double ceil (double @var{x})
-@end deftypefun
-@deftypefun float ceilf (float @var{x})
-@end deftypefun
-@deftypefun {long double} ceill (long double @var{x})
+@deftypefunx float ceilf (float @var{x})
+@deftypefunx {long double} ceill (long double @var{x})
 These functions round @var{x} upwards to the nearest integer,
 returning that value as a @code{double}.  Thus, @code{ceil (1.5)}
 is @code{2.0}.
@@ -592,10 +560,8 @@ is @code{2.0}.
 @comment math.h
 @comment ISO
 @deftypefun double floor (double @var{x})
-@end deftypefun
-@deftypefun float floorf (float @var{x})
-@end deftypefun
-@deftypefun {long double} floorl (long double @var{x})
+@deftypefunx float floorf (float @var{x})
+@deftypefunx {long double} floorl (long double @var{x})
 These functions round @var{x} downwards to the nearest
 integer, returning that value as a @code{double}.  Thus, @code{floor
 (1.5)} is @code{1.0} and @code{floor (-1.5)} is @code{-2.0}.
@@ -604,10 +570,8 @@ integer, returning that value as a @code{double}.  Thus, @code{floor
 @comment math.h
 @comment ISO
 @deftypefun double rint (double @var{x})
-@end deftypefun
-@deftypefun float rintf (float @var{x})
-@end deftypefun
-@deftypefun {long double} rintl (long double @var{x})
+@deftypefunx float rintf (float @var{x})
+@deftypefunx {long double} rintl (long double @var{x})
 These functions round @var{x} to an integer value according to the
 current rounding mode.  @xref{Floating Point Parameters}, for
 information about the various rounding modes.  The default
@@ -619,10 +583,8 @@ you explicit select another.
 @comment math.h
 @comment ISO
 @deftypefun double nearbyint (double @var{x})
-@end deftypefun
-@deftypefun float nearbyintf (float @var{x})
-@end deftypefun
-@deftypefun {long double} nearbyintl (long double @var{x})
+@deftypefunx float nearbyintf (float @var{x})
+@deftypefunx {long double} nearbyintl (long double @var{x})
 These functions return the same value as the @code{rint} functions but
 even some rounding actually takes place @code{nearbyint} does @emph{not}
 raise the inexact exception.
@@ -631,10 +593,8 @@ raise the inexact exception.
 @comment math.h
 @comment ISO
 @deftypefun double modf (double @var{value}, double *@var{integer-part})
-@end deftypefun
-@deftypefun float modff (flaot @var{value}, float *@var{integer-part})
-@end deftypefun
-@deftypefun {long double} modfl (long double @var{value}, long double *@var{integer-part})
+@deftypefunx float modff (flaot @var{value}, float *@var{integer-part})
+@deftypefunx {long double} modfl (long double @var{value}, long double *@var{integer-part})
 These functions break the argument @var{value} into an integer part and a
 fractional part (between @code{-1} and @code{1}, exclusive).  Their sum
 equals @var{value}.  Each of the parts has the same sign as @var{value},
@@ -648,10 +608,8 @@ returns @code{0.5} and stores @code{2.0} into @code{intpart}.
 @comment math.h
 @comment ISO
 @deftypefun double fmod (double @var{numerator}, double @var{denominator})
-@end deftypefun
-@deftypefun float fmodf (float @var{numerator}, float @var{denominator})
-@end deftypefun
-@deftypefun {long double} fmodl (long double @var{numerator}, long double @var{denominator})
+@deftypefunx float fmodf (float @var{numerator}, float @var{denominator})
+@deftypefunx {long double} fmodl (long double @var{numerator}, long double @var{denominator})
 These functions compute the remainder from the division of
 @var{numerator} by @var{denominator}.  Specifically, the return value is
 @code{@var{numerator} - @w{@var{n} * @var{denominator}}}, where @var{n}
@@ -669,10 +627,8 @@ If @var{denominator} is zero, @code{fmod} fails and sets @code{errno} to
 @comment math.h
 @comment BSD
 @deftypefun double drem (double @var{numerator}, double @var{denominator})
-@end deftypefun
-@deftypefun float dremf (float @var{numerator}, float @var{denominator})
-@end deftypefun
-@deftypefun {long double} dreml (long double @var{numerator}, long double @var{denominator})
+@deftypefunx float dremf (float @var{numerator}, float @var{denominator})
+@deftypefunx {long double} dreml (long double @var{numerator}, long double @var{denominator})
 These functions are like @code{fmod} etc except that it rounds the
 internal quotient @var{n} to the nearest integer instead of towards zero
 to an integer.  For example, @code{drem (6.5, 2.3)} returns @code{-0.4},
diff --git a/manual/libc.texinfo b/manual/libc.texinfo
index 50d42b53d6..aa72be16e3 100644
--- a/manual/libc.texinfo
+++ b/manual/libc.texinfo
@@ -3,12 +3,15 @@
 @setfilename libc.info
 @settitle The GNU C Library
 @setchapternewpage odd
-@comment %**end of header (This is for running Texinfo on a region.)
 
 @c This tells texinfo.tex to use the real section titles in xrefs in
 @c place of the node name, when no section title is explicitly given.
 @set xref-automatic-section-title
-@smallbook
+@c @smallbook
+@iftex
+@afourpaper
+@end iftex
+@comment %**end of header (This is for running Texinfo on a region.)
 
 @c sold 0.06/1.09, print run out 21may96
 @set EDITION 0.07 DRAFT
diff --git a/manual/math.texi b/manual/math.texi
index 78d567b367..e2adccddb3 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -146,10 +146,8 @@ You can also compute the value of pi with the expression @code{acos
 @comment math.h
 @comment ISO
 @deftypefun double sin (double @var{x})
-@end deftypefun
-@deftypefun float sinf (float @var{x})
-@end deftypefun
-@deftypefun {long double} sinl (long double @var{x})
+@deftypefunx float sinf (float @var{x})
+@deftypefunx {long double} sinl (long double @var{x})
 These functions return the sine of @var{x}, where @var{x} is given in
 radians.  The return value is in the range @code{-1} to @code{1}.
 @end deftypefun
@@ -157,10 +155,8 @@ radians.  The return value is in the range @code{-1} to @code{1}.
 @comment math.h
 @comment ISO
 @deftypefun double cos (double @var{x})
-@end deftypefun
-@deftypefun float cosf (float @var{x})
-@end deftypefun
-@deftypefun {long double} cosl (long double @var{x})
+@deftypefunx float cosf (float @var{x})
+@deftypefunx {long double} cosl (long double @var{x})
 These functions return the cosine of @var{x}, where @var{x} is given in
 radians.  The return value is in the range @code{-1} to @code{1}.
 @end deftypefun
@@ -168,10 +164,8 @@ radians.  The return value is in the range @code{-1} to @code{1}.
 @comment math.h
 @comment ISO
 @deftypefun double tan (double @var{x})
-@end deftypefun
-@deftypefun float tanf (float @var{x})
-@end deftypefun
-@deftypefun {long double} tanl (long double @var{x})
+@deftypefunx float tanf (float @var{x})
+@deftypefunx {long double} tanl (long double @var{x})
 These functions return the tangent of @var{x}, where @var{x} is given in
 radians.
 
@@ -189,16 +183,14 @@ either positive or negative @code{HUGE_VAL}.
 In many applications where @code{sin} and @code{cos} are used, the value
 for the same argument of both of these functions is used at the same
 time.  Since the algorithm to compute these values is very similar for
-both functions there is an additional function with computes both values
+both functions there is an additional function which computes both values
 at the same time.
 
 @comment math.h
 @comment GNU
 @deftypefun void sincos (double @var{x}, double *@var{sinx}, double *@var{cosx})
-@end deftypefun
-@deftypefun void sincosf (float @var{x}, float *@var{sinx}, float *@var{cosx})
-@end deftypefun
-@deftypefun void sincosl (long double @var{x}, long double *@var{sinx}, long double *@var{cosx})
+@deftypefunx void sincosf (float @var{x}, float *@var{sinx}, float *@var{cosx})
+@deftypefunx void sincosl (long double @var{x}, long double *@var{sinx}, long double *@var{cosx})
 These functions return the sine of @var{x} in @code{*@var{sinx}} and the
 cosine of @var{x} in @code{*@var{cos}}, where @var{x} is given in
 radians.  Both values, @code{*@var{sinx}} and @code{*@var{cosx}}, are in
@@ -207,53 +199,62 @@ the range of @code{-1} to @code{1}.
 
 @cindex complex trigonometric functions
 
-The trigonometric functions are in mathematics not only on real numbers.
-They can be extended to complex numbers and the @w{ISO C 9X} standard
-introduces these variants in the standard math library.
+The trigonometric functions are in mathematics not only defined on real
+numbers.  They can be extended to complex numbers and the @w{ISO C 9X}
+standard introduces these variants in the standard math library.
 
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} csin (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} csinf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} csinl (complex long double @var{z})
+@deftypefunx {complex float} csinf (complex float @var{z})
+@deftypefunx {complex long double} csinl (complex long double @var{z})
 These functions return the complex sine of the complex value in @var{z}.
 The mathematical definition of the complex sine is
 
-@smallexample
-sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i))
-@end smallexample
+@ifinfo
+@math{sin (z) = 1/(2*i) * (exp (z*i) - exp (-z*i))}.
+@end ifinfo
+@iftex
+@tex
+$$\sin(z) = {1\over 2i} (e^{zi} - e^{-zi})$$
+@end tex
+@end iftex
 @end deftypefun
 
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} ccos (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} ccosf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} ccosl (complex long double @var{z})
+@deftypefunx {complex float} ccosf (complex float @var{z})
+@deftypefunx {complex long double} ccosl (complex long double @var{z})
 These functions return the complex cosine of the complex value in @var{z}.
 The mathematical definition of the complex cosine is
 
-@smallexample
-cos (z) = 1/2 * (exp (z*i) + exp (-z*i))
-@end smallexample
+@ifinfo
+@math{cos (z) = 1/2 * (exp (z*i) + exp (-z*i))}
+@end ifinfo
+@iftex
+@tex
+$$\cos(z) = {1\over 2} (e^{zi} + e^{-zi})$$
+@end tex
+@end iftex
 @end deftypefun
 
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} ctan (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} ctanf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} ctanl (complex long double @var{z})
+@deftypefunx {complex float} ctanf (complex float @var{z})
+@deftypefunx {complex long double} ctanl (complex long double @var{z})
 These functions return the complex tangent of the complex value in @var{z}.
 The mathematical definition of the complex tangent is
 
-@smallexample
-tan (z) = 1/i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))
-@end smallexample
+@ifinfo
+@math{tan (z) = 1/i * (exp (z*i) - exp (-z*i)) / (exp (z*i) + exp (-z*i))}
+@end ifinfo
+@iftex
+@tex
+$$\tan(z) = {1\over i} {e^{zi} - e^{-zi}\over e^{zi} + e^{-zi}}$$
+@end tex
+@end iftex
 @end deftypefun
 
 
@@ -268,10 +269,8 @@ respectively.
 @comment math.h
 @comment ISO
 @deftypefun double asin (double @var{x})
-@end deftypefun
-@deftypefun float asinf (float @var{x})
-@end deftypefun
-@deftypefun {long double} asinl (long double @var{x})
+@deftypefunx float asinf (float @var{x})
+@deftypefunx {long double} asinl (long double @var{x})
 These functions compute the arc sine of @var{x}---that is, the value whose
 sine is @var{x}.  The value is in units of radians.  Mathematically,
 there are infinitely many such values; the one actually returned is the
@@ -285,10 +284,8 @@ over the domain @code{-1} to @code{1}.
 @comment math.h
 @comment ISO
 @deftypefun double acos (double @var{x})
-@end deftypefun
-@deftypefun float acosf (float @var{x})
-@end deftypefun
-@deftypefun {long double} acosl (long double @var{x})
+@deftypefunx float acosf (float @var{x})
+@deftypefunx {long double} acosl (long double @var{x})
 These functions compute the arc cosine of @var{x}---that is, the value
 whose cosine is @var{x}.  The value is in units of radians.
 Mathematically, there are infinitely many such values; the one actually
@@ -303,10 +300,8 @@ over the domain @code{-1} to @code{1}.
 @comment math.h
 @comment ISO
 @deftypefun double atan (double @var{x})
-@end deftypefun
-@deftypefun float atanf (float @var{x})
-@end deftypefun
-@deftypefun {long double} atanl (long double @var{x})
+@deftypefunx float atanf (float @var{x})
+@deftypefunx {long double} atanl (long double @var{x})
 These functions compute the arc tangent of @var{x}---that is, the value
 whose tangent is @var{x}.  The value is in units of radians.
 Mathematically, there are infinitely many such values; the one actually
@@ -317,10 +312,8 @@ returned is the one between @code{-pi/2} and @code{pi/2}
 @comment math.h
 @comment ISO
 @deftypefun double atan2 (double @var{y}, double @var{x})
-@end deftypefun
-@deftypefun float atan2f (float @var{y}, float @var{x})
-@end deftypefun
-@deftypefun {long double} atan2l (long double @var{y}, long double @var{x})
+@deftypefunx float atan2f (float @var{y}, float @var{x})
+@deftypefunx {long double} atan2l (long double @var{y}, long double @var{x})
 This is the two argument arc tangent function.  It is similar to computing
 the arc tangent of @var{y}/@var{x}, except that the signs of both arguments
 are used to determine the quadrant of the result, and @var{x} is
@@ -347,10 +340,8 @@ which are usable with complex numbers.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} casin (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} casinf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} casinl (complex long double @var{z})
+@deftypefunx {complex float} casinf (complex float @var{z})
+@deftypefunx {complex long double} casinl (complex long double @var{z})
 These functions compute the complex arc sine of @var{z}---that is, the
 value whose sine is @var{z}.  The value is in units of radians.
 
@@ -361,10 +352,8 @@ limitation on the argument @var{z}.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} cacos (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} cacosf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} cacosl (complex long double @var{z})
+@deftypefunx {complex float} cacosf (complex float @var{z})
+@deftypefunx {complex long double} cacosl (complex long double @var{z})
 These functions compute the complex arc cosine of @var{z}---that is, the
 value whose cosine is @var{z}.  The value is in units of radians.
 
@@ -376,10 +365,8 @@ limitation on the argument @var{z}.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} catan (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} catanf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} catanl (complex long double @var{z})
+@deftypefunx {complex float} catanf (complex float @var{z})
+@deftypefunx {complex long double} catanl (complex long double @var{z})
 These functions compute the complex arc tangent of @var{z}---that is,
 the value whose tangent is @var{z}.  The value is in units of radians.
 @end deftypefun
@@ -394,10 +381,8 @@ the value whose tangent is @var{z}.  The value is in units of radians.
 @comment math.h
 @comment ISO
 @deftypefun double exp (double @var{x})
-@end deftypefun
-@deftypefun float expf (float @var{x})
-@end deftypefun
-@deftypefun {long double} expl (long double @var{x})
+@deftypefunx float expf (float @var{x})
+@deftypefunx {long double} expl (long double @var{x})
 These functions return the value of @code{e} (the base of natural
 logarithms) raised to power @var{x}.
 
@@ -408,10 +393,8 @@ magnitude of the result is too large to be representable.
 @comment math.h
 @comment ISO
 @deftypefun double exp10 (double @var{x})
-@end deftypefun
-@deftypefun float exp10f (float @var{x})
-@end deftypefun
-@deftypefun {long double} exp10l (long double @var{x})
+@deftypefunx float exp10f (float @var{x})
+@deftypefunx {long double} exp10l (long double @var{x})
 These functions return the value of @code{10} raised to the power @var{x}.
 Mathematically, @code{exp10 (x)} is the same as @code{exp (x * log (10))}.
 
@@ -422,10 +405,8 @@ magnitude of the result is too large to be representable.
 @comment math.h
 @comment ISO
 @deftypefun double exp2 (double @var{x})
-@end deftypefun
-@deftypefun float exp2f (float @var{x})
-@end deftypefun
-@deftypefun {long double} exp2l (long double @var{x})
+@deftypefunx float exp2f (float @var{x})
+@deftypefunx {long double} exp2l (long double @var{x})
 These functions return the value of @code{2} raised to the power @var{x}.
 Mathematically, @code{exp2 (x)} is the same as @code{exp (x * log (2))}.
 
@@ -437,10 +418,8 @@ magnitude of the result is too large to be representable.
 @comment math.h
 @comment ISO
 @deftypefun double log (double @var{x})
-@end deftypefun
-@deftypefun float logf (floatdouble @var{x})
-@end deftypefun
-@deftypefun {long double} logl (long double @var{x})
+@deftypefunx float logf (floatdouble @var{x})
+@deftypefunx {long double} logl (long double @var{x})
 These functions return the natural logarithm of @var{x}.  @code{exp (log
 (@var{x}))} equals @var{x}, exactly in mathematics and approximately in
 C.
@@ -460,10 +439,8 @@ The argument is zero.  The log of zero is not defined.
 @comment math.h
 @comment ISO
 @deftypefun double log10 (double @var{x})
-@end deftypefun
-@deftypefun float log10f (float @var{x})
-@end deftypefun
-@deftypefun {long double} log10l (long double @var{x})
+@deftypefunx float log10f (float @var{x})
+@deftypefunx {long double} log10l (long double @var{x})
 These functions return the base-10 logarithm of @var{x}.  Except for the
 different base, it is similar to the @code{log} function.  In fact,
 @code{log10 (@var{x})} equals @code{log (@var{x}) / log (10)}.
@@ -472,10 +449,8 @@ different base, it is similar to the @code{log} function.  In fact,
 @comment math.h
 @comment ISO
 @deftypefun double log2 (double @var{x})
-@end deftypefun
-@deftypefun float log2f (float @var{x})
-@end deftypefun
-@deftypefun {long double} log2l (long double @var{x})
+@deftypefunx float log2f (float @var{x})
+@deftypefunx {long double} log2l (long double @var{x})
 These functions return the base-2 logarithm of @var{x}.  Except for the
 different base, it is similar to the @code{log} function.  In fact,
 @code{log2 (@var{x})} equals @code{log (@var{x}) / log (2)}.
@@ -484,10 +459,8 @@ different base, it is similar to the @code{log} function.  In fact,
 @comment math.h
 @comment ISO
 @deftypefun double pow (double @var{base}, double @var{power})
-@end deftypefun
-@deftypefun float powf (float @var{base}, float @var{power})
-@end deftypefun
-@deftypefun {long double} powl (long double @var{base}, long double @var{power})
+@deftypefunx float powf (float @var{base}, float @var{power})
+@deftypefunx {long double} powl (long double @var{base}, long double @var{power})
 These are general exponentiation functions, returning @var{base} raised
 to @var{power}.
 
@@ -508,10 +481,8 @@ An underflow or overflow condition was detected in the result.
 @comment math.h
 @comment ISO
 @deftypefun double sqrt (double @var{x})
-@end deftypefun
-@deftypefun float sqrtf (float @var{x})
-@end deftypefun
-@deftypefun {long double} sqrtl (long double @var{x})
+@deftypefunx float sqrtf (float @var{x})
+@deftypefunx {long double} sqrtl (long double @var{x})
 These functions return the nonnegative square root of @var{x}.
 
 The @code{sqrt} function fails, and sets @code{errno} to @code{EDOM}, if
@@ -524,10 +495,8 @@ number.
 @comment math.h
 @comment BSD
 @deftypefun double cbrt (double @var{x})
-@end deftypefun
-@deftypefun float cbrtf (float @var{x})
-@end deftypefun
-@deftypefun {long double} cbrtl (long double @var{x})
+@deftypefunx float cbrtf (float @var{x})
+@deftypefunx {long double} cbrtl (long double @var{x})
 These functions return the cube root of @var{x}.  They cannot
 fail; every representable real value has a representable real cube root.
 @end deftypefun
@@ -535,10 +504,8 @@ fail; every representable real value has a representable real cube root.
 @comment math.h
 @comment ISO
 @deftypefun double hypot (double @var{x}, double @var{y})
-@end deftypefun
-@deftypefun float hypotf (float @var{x}, float @var{y})
-@end deftypefun
-@deftypefun {long double} hypotl (long double @var{x}, long double @var{y})
+@deftypefunx float hypotf (float @var{x}, float @var{y})
+@deftypefunx {long double} hypotl (long double @var{x}, long double @var{y})
 These functions return @code{sqrt (@var{x}*@var{x} +
 @var{y}*@var{y})}.  (This is the length of the hypotenuse of a right
 triangle with sides of length @var{x} and @var{y}, or the distance
@@ -550,10 +517,8 @@ much smaller.  See also the function @code{cabs} in @ref{Absolute Value}.
 @comment math.h
 @comment ISO
 @deftypefun double expm1 (double @var{x})
-@end deftypefun
-@deftypefun float expm1f (float @var{x})
-@end deftypefun
-@deftypefun {long double} expm1l (long double @var{x})
+@deftypefunx float expm1f (float @var{x})
+@deftypefunx {long double} expm1l (long double @var{x})
 These functions return a value equivalent to @code{exp (@var{x}) - 1}.
 It is computed in a way that is accurate even if the value of @var{x} is
 near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate due
@@ -563,10 +528,8 @@ to subtraction of two numbers that are nearly equal.
 @comment math.h
 @comment ISO
 @deftypefun double log1p (double @var{x})
-@end deftypefun
-@deftypefun float log1pf (float @var{x})
-@end deftypefun
-@deftypefun {long double} log1pl (long double @var{x})
+@deftypefunx float log1pf (float @var{x})
+@deftypefunx {long double} log1pl (long double @var{x})
 This function returns a value equivalent to @w{@code{log (1 + @var{x})}}.
 It is computed in a way that is accurate even if the value of @var{x} is
 near zero.
@@ -584,45 +547,51 @@ definition.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} cexp (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} cexpf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} cexpl (complex long double @var{z})
+@deftypefunx {complex float} cexpf (complex float @var{z})
+@deftypefunx {complex long double} cexpl (complex long double @var{z})
 These functions return the value of @code{e} (the base of natural
 logarithms) raised to power of the complex value @var{z}.
 
+@noindent
 Mathematically this corresponds to the value
 
-@smallexample
-exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))
-@end smallexample
+@ifinfo
+@math{exp (z) = exp (creal (z)) * (cos (cimag (z)) + I * sin (cimag (z)))}
+@end ifinfo
+@iftex
+@tex
+$$\exp(z) = e^z = e^{{\rm Re} z} (\cos ({\rm Im} z) + i \sin ({\rm Im} z))$$
+@end tex
+@end iftex
 @end deftypefun
 
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} clog (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} clogf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} clogl (complex long double @var{z})
+@deftypefunx {complex float} clogf (complex float @var{z})
+@deftypefunx {complex long double} clogl (complex long double @var{z})
 These functions return the natural logarithm of the complex value
 @var{z}.  Unlike the real value version @code{log} and its variants,
 @code{clog} has no limit for the range of its argument @var{z}.
 
+@noindent
 Mathematically this corresponds to the value
 
-@smallexample
-log (z) = log (cabs (z)) + I * carg (z)
-@end smallexample
+@ifinfo
+@math{log (z) = log (cabs (z)) + I * carg (z)}
+@end ifinfo
+@iftex
+@tex
+$$\log(z) = \log(|z|) + i \arg(z)$$
+@end tex
+@end iftex
 @end deftypefun
 
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} csqrt (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} csqrtf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} csqrtl (complex long double @var{z})
+@deftypefunx {complex float} csqrtf (complex float @var{z})
+@deftypefunx {complex long double} csqrtl (complex long double @var{z})
 These functions return the complex root of the argument @var{z}.  Unlike
 the @code{sqrt} function these functions do not have any restriction on
 the value of the argument.
@@ -631,16 +600,19 @@ the value of the argument.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} cpow (complex double @var{base}, complex double @var{power})
-@end deftypefun
-@deftypefun {complex float} cpowf (complex float @var{base}, complex float @var{power})
-@end deftypefun
-@deftypefun {complex long double} cpowl (complex long double @var{base}, complex long double @var{power})
+@deftypefunx {complex float} cpowf (complex float @var{base}, complex float @var{power})
+@deftypefunx {complex long double} cpowl (complex long double @var{base}, complex long double @var{power})
 These functions return the complex value @var{BASE} raised to the power of
 @var{power}.  This is computed as
 
-@smallexample
-cpow (x, y) = cexp (y * clog (x))
-@end smallexample
+@ifinfo
+@math{cpow (x, y) = cexp (y * clog (x))}
+@end ifinfo
+@iftex
+@tex
+$${\rm cpow}(x, y) = e^{y \log(x)}$$
+@end tex
+@end iftex
 @end deftypefun
 
 
@@ -654,10 +626,8 @@ see @ref{Exponents and Logarithms}.
 @comment math.h
 @comment ISO
 @deftypefun double sinh (double @var{x})
-@end deftypefun
-@deftypefun float sinhf (float @var{x})
-@end deftypefun
-@deftypefun {long double} sinhl (long double @var{x})
+@deftypefunx float sinhf (float @var{x})
+@deftypefunx {long double} sinhl (long double @var{x})
 These functions return the hyperbolic sine of @var{x}, defined
 mathematically as @w{@code{(exp (@var{x}) - exp (-@var{x})) / 2}}.  The
 function fails, and sets @code{errno} to @code{ERANGE}, if the value of
@@ -667,10 +637,8 @@ function fails, and sets @code{errno} to @code{ERANGE}, if the value of
 @comment math.h
 @comment ISO
 @deftypefun double cosh (double @var{x})
-@end deftypefun
-@deftypefun float coshf (float @var{x})
-@end deftypefun
-@deftypefun {long double} coshl (long double @var{x})
+@deftypefunx float coshf (float @var{x})
+@deftypefunx {long double} coshl (long double @var{x})
 These function return the hyperbolic cosine of @var{x},
 defined mathematically as @w{@code{(exp (@var{x}) + exp (-@var{x})) / 2}}.
 The function fails, and sets @code{errno} to @code{ERANGE}, if the value
@@ -680,10 +648,8 @@ of @var{x} is too large; that is, if overflow occurs.
 @comment math.h
 @comment ISO
 @deftypefun double tanh (double @var{x})
-@end deftypefun
-@deftypefun float tanhf (float @var{x})
-@end deftypefun
-@deftypefun {long double} tanhl (long double @var{x})
+@deftypefunx float tanhf (float @var{x})
+@deftypefunx {long double} tanhl (long double @var{x})
 These functions return the hyperbolic tangent of @var{x}, whose
 mathematical definition is @w{@code{sinh (@var{x}) / cosh (@var{x})}}.
 @end deftypefun
@@ -698,10 +664,8 @@ library are optimized for accuracy and speed.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} csinh (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} csinhf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} csinhl (complex long double @var{z})
+@deftypefunx {complex float} csinhf (complex float @var{z})
+@deftypefunx {complex long double} csinhl (complex long double @var{z})
 These functions return the complex hyperbolic sine of @var{z}, defined
 mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}.  The
 function fails, and sets @code{errno} to @code{ERANGE}, if the value of
@@ -711,10 +675,8 @@ result is too large.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} ccosh (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} ccoshf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} ccoshl (complex long double @var{z})
+@deftypefunx {complex float} ccoshf (complex float @var{z})
+@deftypefunx {complex long double} ccoshl (complex long double @var{z})
 These functions return the complex hyperbolic cosine of @var{z}, defined
 mathematically as @w{@code{(exp (@var{z}) + exp (-@var{z})) / 2}}.  The
 function fails, and sets @code{errno} to @code{ERANGE}, if the value of
@@ -724,10 +686,8 @@ result is too large.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} ctanh (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} ctanhf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} ctanhl (complex long double @var{z})
+@deftypefunx {complex float} ctanhf (complex float @var{z})
+@deftypefunx {complex long double} ctanhl (complex long double @var{z})
 These functions return the complex hyperbolic tangent of @var{z}, whose
 mathematical definition is @w{@code{csinh (@var{z}) / ccosh (@var{z})}}.
 @end deftypefun
@@ -738,10 +698,8 @@ mathematical definition is @w{@code{csinh (@var{z}) / ccosh (@var{z})}}.
 @comment math.h
 @comment ISO
 @deftypefun double asinh (double @var{x})
-@end deftypefun
-@deftypefun float asinhf (float @var{x})
-@end deftypefun
-@deftypefun {long double} asinhl (long double @var{x})
+@deftypefunx float asinhf (float @var{x})
+@deftypefunx {long double} asinhl (long double @var{x})
 These functions return the inverse hyperbolic sine of @var{x}---the
 value whose hyperbolic sine is @var{x}.
 @end deftypefun
@@ -749,10 +707,8 @@ value whose hyperbolic sine is @var{x}.
 @comment math.h
 @comment ISO
 @deftypefun double acosh (double @var{x})
-@end deftypefun
-@deftypefun float acoshf (float @var{x})
-@end deftypefun
-@deftypefun {long double} acoshl (long double @var{x})
+@deftypefunx float acoshf (float @var{x})
+@deftypefunx {long double} acoshl (long double @var{x})
 These functions return the inverse hyperbolic cosine of @var{x}---the
 value whose hyperbolic cosine is @var{x}.  If @var{x} is less than
 @code{1}, @code{acosh} returns @code{HUGE_VAL}.
@@ -761,10 +717,8 @@ value whose hyperbolic cosine is @var{x}.  If @var{x} is less than
 @comment math.h
 @comment ISO
 @deftypefun double atanh (double @var{x})
-@end deftypefun
-@deftypefun float atanhf (float @var{x})
-@end deftypefun
-@deftypefun {long double} atanhl (long double @var{x})
+@deftypefunx float atanhf (float @var{x})
+@deftypefunx {long double} atanhl (long double @var{x})
 These functions return the inverse hyperbolic tangent of @var{x}---the
 value whose hyperbolic tangent is @var{x}.  If the absolute value of
 @var{x} is greater than or equal to @code{1}, @code{atanh} returns
@@ -776,10 +730,8 @@ value whose hyperbolic tangent is @var{x}.  If the absolute value of
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} casinh (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} casinhf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} casinhl (complex long double @var{z})
+@deftypefunx {complex float} casinhf (complex float @var{z})
+@deftypefunx {complex long double} casinhl (complex long double @var{z})
 These functions return the inverse complex hyperbolic sine of
 @var{z}---the value whose complex hyperbolic sine is @var{z}.
 @end deftypefun
@@ -787,10 +739,8 @@ These functions return the inverse complex hyperbolic sine of
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} cacosh (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} cacoshf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} cacoshl (complex long double @var{z})
+@deftypefunx {complex float} cacoshf (complex float @var{z})
+@deftypefunx {complex long double} cacoshl (complex long double @var{z})
 These functions return the inverse complex hyperbolic cosine of
 @var{z}---the value whose complex hyperbolic cosine is @var{z}.  Unlike
 the real valued function @code{acosh} there is not limit for the range
@@ -800,10 +750,8 @@ of the argument.
 @comment complex.h
 @comment ISO
 @deftypefun {complex double} catanh (complex double @var{z})
-@end deftypefun
-@deftypefun {complex float} catanhf (complex float @var{z})
-@end deftypefun
-@deftypefun {complex long double} catanhl (complex long double @var{z})
+@deftypefunx {complex float} catanhf (complex float @var{z})
+@deftypefunx {complex long double} catanhl (complex long double @var{z})
 These functions return the inverse complex hyperbolic tangent of
 @var{z}---the value whose complex hyperbolic tangent is @var{z}.  Unlike
 the real valued function @code{atanh} there is not limit for the range
diff --git a/manual/signal.texi b/manual/signal.texi
index 767ddabb41..bc69019e63 100644
--- a/manual/signal.texi
+++ b/manual/signal.texi
@@ -833,10 +833,9 @@ will not affect your program unless it explicitly uses them for something.
 @comment signal.h
 @comment POSIX.1
 @deftypevr Macro int SIGUSR1
-@end deftypevr
 @comment signal.h
 @comment POSIX.1
-@deftypevr Macro int SIGUSR2
+@deftypevrx Macro int SIGUSR2
 @cindex user signals
 The @code{SIGUSR1} and @code{SIGUSR2} signals are set aside for you to
 use any way you want.  They're useful for simple interprocess
diff --git a/manual/stdio.texi b/manual/stdio.texi
index 97c3f581d1..3e73155f4a 100644
--- a/manual/stdio.texi
+++ b/manual/stdio.texi
@@ -1765,47 +1765,40 @@ extract just the basic type code.
 Here are symbolic constants that represent the basic types; they stand
 for integer values.
 
-@table @code
+@vtable @code
 @comment printf.h
 @comment GNU
 @item PA_INT
-@vindex PA_INT
 This specifies that the base type is @code{int}.
 
 @comment printf.h
 @comment GNU
 @item PA_CHAR
-@vindex PA_CHAR
 This specifies that the base type is @code{int}, cast to @code{char}.
 
 @comment printf.h
 @comment GNU
 @item PA_STRING
-@vindex PA_STRING
 This specifies that the base type is @code{char *}, a null-terminated string.
 
 @comment printf.h
 @comment GNU
 @item PA_POINTER
-@vindex PA_POINTER
 This specifies that the base type is @code{void *}, an arbitrary pointer.
 
 @comment printf.h
 @comment GNU
 @item PA_FLOAT
-@vindex PA_FLOAT
 This specifies that the base type is @code{float}.
 
 @comment printf.h
 @comment GNU
 @item PA_DOUBLE
-@vindex PA_DOUBLE
 This specifies that the base type is @code{double}.
 
 @comment printf.h
 @comment GNU
 @item PA_LAST
-@vindex PA_LAST
 You can define additional base types for your own programs as offsets
 from @code{PA_LAST}.  For example, if you have data types @samp{foo}
 and @samp{bar} with their own specialized @code{printf} conversions,
@@ -1815,16 +1808,15 @@ you could define encodings for these types as:
 #define PA_FOO  PA_LAST
 #define PA_BAR  (PA_LAST + 1)
 @end smallexample
-@end table
+@end vtable
 
 Here are the flag bits that modify a basic type.  They are combined with
 the code for the basic type using inclusive-or.
 
-@table @code
+@vtable @code
 @comment printf.h
 @comment GNU
 @item PA_FLAG_PTR
-@vindex PA_FLAG_PTR
 If this bit is set, it indicates that the encoded type is a pointer to
 the base type, rather than an immediate value.
 For example, @samp{PA_INT|PA_FLAG_PTR} represents the type @samp{int *}.
@@ -1832,31 +1824,27 @@ For example, @samp{PA_INT|PA_FLAG_PTR} represents the type @samp{int *}.
 @comment printf.h
 @comment GNU
 @item PA_FLAG_SHORT
-@vindex PA_FLAG_SHORT
 If this bit is set, it indicates that the base type is modified with
 @code{short}.  (This corresponds to the @samp{h} type modifier.)
 
 @comment printf.h
 @comment GNU
 @item PA_FLAG_LONG
-@vindex PA_FLAG_LONG
 If this bit is set, it indicates that the base type is modified with
 @code{long}.  (This corresponds to the @samp{l} type modifier.)
 
 @comment printf.h
 @comment GNU
 @item PA_FLAG_LONG_LONG
-@vindex PA_FLAG_LONG_LONG
 If this bit is set, it indicates that the base type is modified with
 @code{long long}.  (This corresponds to the @samp{L} type modifier.)
 
 @comment printf.h
 @comment GNU
 @item PA_FLAG_LONG_DOUBLE
-@vindex PA_FLAG_LONG_DOUBLE
 This is a synonym for @code{PA_FLAG_LONG_LONG}, used by convention with
 a base type of @code{PA_DOUBLE} to indicate a type of @code{long double}.
-@end table
+@end vtable
 
 @ifinfo
 For an example of using these facilities, see @ref{Example of Parsing}.
@@ -2234,7 +2222,8 @@ character is of lower case, 1024 is used.  For upper case characters,
 The postfix tag corresponds to bytes, kilobytes, megabytes, gigabytes,
 etc.  The full table is:
 
-@multitable {' '} {2^10 (1024)} {zetta} {Upper} {10^24 (1000)}
+@ifinfo
+@multitable @hsep @vsep {' '} {2^10 (1024)} {zetta} {Upper} {10^24 (1000)}
 @item low @tab Multiplier  @tab From  @tab Upper @tab Multiplier
 @item ' ' @tab 1           @tab       @tab ' '   @tab 1
 @item k   @tab 2^10 (1024) @tab kilo  @tab K     @tab 10^3 (1000)
@@ -2246,6 +2235,29 @@ etc.  The full table is:
 @item z   @tab 2^70        @tab zetta @tab Z     @tab 10^21
 @item y   @tab 2^80        @tab yotta @tab Y     @tab 10^24
 @end multitable
+@end ifinfo
+@iftex
+@tex
+\hbox to\hsize{\hfil\vbox{\offinterlineskip
+\hrule
+\halign{\strut#& \vrule#\tabskip=1em plus2em& {\tt#}\hfil& \vrule#& #\hfil& \vrule#& #\hfil& \vrule#& {\tt#}\hfil& \vrule#& #\hfil& \vrule#\tabskip=0pt\cr
+\noalign{\hrule}
+\omit&height2pt&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+&& \omit low && Multiplier && From && \omit Upper && Multiplier &\cr
+\omit&height2pt&\omit&&\omit&&\omit&&\omit&&\omit&\cr
+\noalign{\hrule}
+&& {\tt\char32} &&  1 && && {\tt\char32} && 1 &\cr
+&& k && $2^{10} = 1024$ && kilo && K && $10^3 = 1000$ &\cr
+&& m && $2^{20}$ && mega && M && $10^6$ &\cr
+&& g && $2^{30}$ && giga && G && $10^9$ &\cr
+&& t && $2^{40}$ && tera && T && $10^{12}$ &\cr
+&& p && $2^{50}$ && peta && P && $10^{15}$ &\cr
+&& e && $2^{60}$ && exa && E && $10^{18}$ &\cr
+&& z && $2^{70}$ && zetta && Z && $10^{21}$ &\cr
+&& y && $2^{80}$ && yotta && Y && $10^{24}$ &\cr
+\noalign{\hrule}}}\hfil}
+@end tex
+@end iftex
 
 The default precision is 3, i.e., 1024 is printed with a lower-case
 format character as if it were @code{%.3fk} and will yield @code{1.000k}.
diff --git a/manual/summary.awk b/manual/summary.awk
index 2eade0c20d..d997a2080f 100644
--- a/manual/summary.awk
+++ b/manual/summary.awk
@@ -25,29 +25,53 @@
 
 BEGIN { header = 0;
 nameword["@defun"]=1
+nameword["@defunx"]=1
 nameword["@defmac"]=1
+nameword["@defmacx"]=1
 nameword["@defspec"]=1
+nameword["@defspecx"]=1
 nameword["@defvar"]=1
+nameword["@defvarx"]=1
 nameword["@defopt"]=1
+nameword["@defoptx"]=1
 nameword["@deffn"]=2
+nameword["@deffnx"]=2
 nameword["@defvr"]=2
+nameword["@defvrx"]=2
 nameword["@deftp"]=2
+nameword["@deftpx"]=2
 nameword["@deftypefun"]=2
+nameword["@deftypefunx"]=2
 nameword["@deftypevar"]=2
+nameword["@deftypevarx"]=2
 nameword["@deftypefn"]=3
+nameword["@deftypefnx"]=3
 nameword["@deftypevr"]=3
+nameword["@deftypevrx"]=3
 firstword["@defun"]=1
+firstword["@defunx"]=1
 firstword["@defmac"]=1
+firstword["@defmacx"]=1
 firstword["@defspec"]=1
+firstword["@defspecx"]=1
 firstword["@defvar"]=1
+firstword["@defvarx"]=1
 firstword["@defopt"]=1
+firstword["@defoptx"]=1
 firstword["@deffn"]=2
+firstword["@deffnx"]=2
 firstword["@defvr"]=2
+firstword["@defvrx"]=2
 firstword["@deftp"]=2
+firstword["@deftpx"]=2
 firstword["@deftypefun"]=1
+firstword["@deftypefunx"]=1
 firstword["@deftypevar"]=1
+firstword["@deftypevarx"]=1
 firstword["@deftypefn"]=2
+firstword["@deftypefnx"]=2
 firstword["@deftypevr"]=2
+firstword["@deftypevrx"]=2
 nameword["@item"]=1
 firstword["@item"]=1
 nameword["@itemx"]=1
diff --git a/manual/texinfo.tex b/manual/texinfo.tex
index 37af9b68a6..4059d0a811 100644
--- a/manual/texinfo.tex
+++ b/manual/texinfo.tex
@@ -1,5 +1,5 @@
 %% TeX macros to handle Texinfo files.
-%% $Id: texinfo.tex,v 2.196 1997/01/04 19:24:13 karl Exp $
+%% $Id: texinfo.tex,v 2.197 1997/04/30 15:34:30 drepper Exp $
 
 %  Copyright (C) 1985, 86, 88, 90, 91, 92, 93,
 %                94, 95, 96, 97 Free Software Foundation, Inc.
@@ -36,7 +36,7 @@
 
 % This automatically updates the version number based on RCS.
 \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}}
-\deftexinfoversion$Revision: 2.196 $
+\deftexinfoversion$Revision: 2.197 $
 \message{Loading texinfo package [Version \texinfoversion]:}
 
 % If in a .fmt file, print the version number
@@ -118,33 +118,41 @@
    \showboxbreadth\maxdimen\showboxdepth\maxdimen
 }%
 
-%---------------------Begin change-----------------------
+% For @cropmarks command.
+% Do @cropmarks to get crop marks.
+% 
+\newif\ifcropmarks
+\let\cropmarks = \cropmarkstrue
 %
-%%%% For @cropmarks command.
-% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986
+% Dimensions to add cropmarks at corners.
+% Added by P. A. MacKay, 12 Nov. 1986
 %
 \newdimen\cornerlong \newdimen\cornerthick
-\newdimen \topandbottommargin
-\newdimen \outerhsize \newdimen \outervsize
+\newdimen\topandbottommargin
+\newdimen\outerhsize \newdimen\outervsize
 \cornerlong=1pc\cornerthick=.3pt        % These set size of cropmarks
 \outerhsize=7in
 %\outervsize=9.5in
 % Alternative @smallbook page size is 9.25in
 \outervsize=9.25in
 \topandbottommargin=.75in
-%
-%---------------------End change-----------------------
 
 % Main output routine.
 \chardef\PAGE = 255
 \output = {\onepageout{\pagecontents\PAGE}}
 
-\newbox\headlinebox  \newbox\footlinebox
+\newbox\headlinebox
+\newbox\footlinebox
 
 % \onepageout takes a vbox as an argument.  Note that \pagecontents
 % does insertions, but you have to call it yourself.
 \def\onepageout#1{%
-  \hoffset=\normaloffset
+  \ifcropmarks
+    \hoffset = 0pt
+  \else
+    \hoffset = \normaloffset
+  \fi
+  %
   \ifodd\pageno  \advance\hoffset by \bindingoffset
   \else \advance\hoffset by -\bindingoffset\fi
   %
@@ -163,53 +171,41 @@
     \normalturnoffactive  % \ in index entries must not stay \, e.g., if
                    % the page break happens to be in the middle of an example.
     \shipout\vbox{%
+      \ifcropmarks
+        \vbox to \outervsize\bgroup
+          \hsize = \outerhsize
+          \vbox{\line{\ewtop\hfill\ewtop}}%
+          \nointerlineskip
+          \line{%
+            \vbox{\moveleft\cornerthick\nstop}%
+            \hfill
+            \vbox{\moveright\cornerthick\nstop}%
+          }%
+          \vskip\topandbottommargin
+      \fi
+      %
       \unvbox\headlinebox
       \pagebody{#1}%
       \unvbox\footlinebox
+      %
+      \ifcropmarks
+          \vskip\topandbottommargin plus1fill minus1fill
+          \boxmaxdepth = \cornerthick
+          \line{%
+            \vbox{\moveleft\cornerthick\nsbot}%
+            \hfill
+            \vbox{\moveright\cornerthick\nsbot}%
+          }%
+          \nointerlineskip
+          \vbox{\line{\ewbot\hfill\ewbot}}%
+        \egroup % \vbox from first cropmarks clause
+      \fi
     }%
     }%
   \advancepageno
   \ifnum\outputpenalty>-20000 \else\dosupereject\fi
 }
 
-%%%% For @cropmarks command %%%%
-
-% Here is a modification of the main output routine for Near East Publications
-% This provides right-angle cropmarks at all four corners.
-% The contents of the page are centerlined into the cropmarks,
-% and any desired binding offset is added as an \hskip on either
-% site of the centerlined box.  (P. A. MacKay, 12 November, 1986)
-%
-\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up
-{\escapechar=`\\\relax % makes sure backslash is used in output files.
-                 \shipout
-                 \vbox to \outervsize{\hsize=\outerhsize
-                 \vbox{\line{\ewtop\hfill\ewtop}}
-                 \nointerlineskip
-                 \line{\vbox{\moveleft\cornerthick\nstop}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nstop}}
-                 \vskip \topandbottommargin
-                 \centerline{\ifodd\pageno\hskip\bindingoffset\fi
-                        \vbox{
-                        {\let\hsize=\pagewidth \makeheadline}
-                        \pagebody{#1}
-                        {\let\hsize=\pagewidth \makefootline}}
-                        \ifodd\pageno\else\hskip\bindingoffset\fi}
-                 \vskip \topandbottommargin plus1fill minus1fill
-                 \boxmaxdepth\cornerthick
-                 \line{\vbox{\moveleft\cornerthick\nsbot}
-                       \hfill
-                       \vbox{\moveright\cornerthick\nsbot}}
-                 \nointerlineskip
-                 \vbox{\line{\ewbot\hfill\ewbot}}
-        }}
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi}
-%
-% Do @cropmarks to get crop marks
-\def\cropmarks{\let\onepageout=\croppageout }
-
 \newinsert\margin \dimen\margin=\maxdimen
 
 \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
@@ -2240,6 +2236,7 @@ width0pt\relax} \fi
 \def\r##1{\realbackslash r {##1}}%
 \def\i##1{\realbackslash i {##1}}%
 \def\b##1{\realbackslash b {##1}}%
+\def\sc##1{\realbackslash sc {##1}}%
 \def\cite##1{\realbackslash cite {##1}}%
 \def\key##1{\realbackslash key {##1}}%
 \def\file##1{\realbackslash file {##1}}%
@@ -2774,7 +2771,8 @@ width0pt\relax} \fi
 % because we don't want its macros evaluated now.
 \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}%
 {\chapternofonts%
-\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}%
+\toks0 = {#1}%
+\edef\temp{{\realbackslash chapentry{\the\toks0}{\the\chapno}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp  %
 \donoderef %
@@ -2793,8 +2791,9 @@ width0pt\relax} \fi
 \gdef\thischaptername{#1}%
 \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}%
 {\chapternofonts%
-\edef\temp{{\realbackslash chapentry
-  {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
+\toks0 = {#1}%
+\edef\temp{{\realbackslash chapentry{\the\toks0}%
+  {\putwordAppendix{} \appendixletter}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp  %
 \appendixnoderef %
@@ -2828,7 +2827,8 @@ width0pt\relax} \fi
 \unnumbchapmacro {#1}%
 \gdef\thischapter{#1}\gdef\thissection{#1}%
 {\chapternofonts%
-\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}%
+\toks0 = {#1}%
+\edef\temp{{\realbackslash unnumbchapentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp  %
 \unnumbnoderef %
@@ -2843,8 +2843,9 @@ width0pt\relax} \fi
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}%
 {\chapternofonts%
+\toks0 = {#1}%
 \edef\temp{{\realbackslash secentry %
-{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
+{\the\toks0}{\the\chapno}{\the\secno}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp %
 \donoderef %
@@ -2858,8 +2859,9 @@ width0pt\relax} \fi
 \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 %
 \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}%
 {\chapternofonts%
+\toks0 = {#1}%
 \edef\temp{{\realbackslash secentry %
-{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
+{\the\toks0}{\appendixletter}{\the\secno}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp %
 \appendixnoderef %
@@ -2871,7 +2873,8 @@ width0pt\relax} \fi
 \def\unnumberedseczzz #1{\seccheck{unnumberedsec}%
 \plainsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%
-\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}%
+\toks0 = {#1}%
+\edef\temp{{\realbackslash unnumbsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp %
 \unnumbnoderef %
@@ -2884,8 +2887,9 @@ width0pt\relax} \fi
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}%
 {\chapternofonts%
+\toks0 = {#1}%
 \edef\temp{{\realbackslash subsecentry %
-{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+{\the\toks0}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp %
 \donoderef %
@@ -2898,8 +2902,9 @@ width0pt\relax} \fi
 \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 %
 \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}%
 {\chapternofonts%
+\toks0 = {#1}%
 \edef\temp{{\realbackslash subsecentry %
-{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
+{\the\toks0}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp %
 \appendixnoderef %
@@ -2911,7 +2916,8 @@ width0pt\relax} \fi
 \def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}%
 \plainsubsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}%
+\toks0 = {#1}%
+\edef\temp{{\realbackslash unnumbsubsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp %
 \unnumbnoderef %
@@ -2925,8 +2931,8 @@ width0pt\relax} \fi
 \subsubsecheading {#1}
   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
 {\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry %
-  {#1}
+\toks0 = {#1}%
+\edef\temp{{\realbackslash subsubsecentry{\the\toks0}
   {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}
   {\noexpand\folio}}}%
 \escapechar=`\\%
@@ -2942,7 +2948,8 @@ width0pt\relax} \fi
 \subsubsecheading {#1}
   {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}%
 {\chapternofonts%
-\edef\temp{{\realbackslash subsubsecentry{#1}%
+\toks0 = {#1}%
+\edef\temp{{\realbackslash subsubsecentry{\the\toks0}%
   {\appendixletter}
   {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}%
 \escapechar=`\\%
@@ -2956,7 +2963,8 @@ width0pt\relax} \fi
 \def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}%
 \plainsubsubsecheading {#1}\gdef\thissection{#1}%
 {\chapternofonts%
-\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}%
+\toks0 = {#1}%
+\edef\temp{{\realbackslash unnumbsubsubsecentry{\the\toks0}{\noexpand\folio}}}%
 \escapechar=`\\%
 \write \contentsfile \temp %
 \unnumbnoderef %
diff --git a/manual/xtract-typefun.awk b/manual/xtract-typefun.awk
index 6450ac10eb..2f0bbc748e 100644
--- a/manual/xtract-typefun.awk
+++ b/manual/xtract-typefun.awk
@@ -9,18 +9,18 @@ BEGIN {
 
 /^@deftypefun/ {
   printf ("* %s: (libc)%s.\n",
-	  gensub (/@deftypefun +([^{ ]+|\{[^}]+\}) +([[:alpha:]_][[:alnum:]_]+).*/, "\\2", 1),
+	  gensub (/@deftypefunx? +([^{ ]+|\{[^}]+\}) +([[:alpha:]_][[:alnum:]_]*).*/, "\\2", 1),
     last_node);
 }
 
 /^@deftypevr/ {
   printf ("* %s: (libc)%s.\n",
-	  gensub (/@deftypevr +([^{ ]+|\{[^}]+\}) +([^{ ]+|\{[^}]+\}) +([[:alpha:]_][[:alnum:]_]+).*/, "\\3", 1),
+	  gensub (/@deftypevrx? +([^{ ]+|\{[^}]+\}) +([^{ ]+|\{[^}]+\}) +([[:alpha:]_][[:alnum:]_]*).*/, "\\3", 1),
     last_node);
 }
 
 /^@deftypefn/ {
   printf ("* %s: (libc)%s.\n",
-	  gensub (/@deftypefn +([^{ ]+|\{[^}]+\}) +[^{ ]*(\{[^}]+\})? +([[:alpha:]_][[:alnum:]_]+).*/, "\\3", 1),
+	  gensub (/@deftypefnx? +([^{ ]+|\{[^}]+\}) +[^{ ]*(\{[^}]+\})? +([[:alpha:]_][[:alnum:]_]*).*/, "\\3", 1),
     last_node);
 }
diff --git a/math/fenv.h b/math/fenv.h
index c9a8a5c94b..c065d662e0 100644
--- a/math/fenv.h
+++ b/math/fenv.h
@@ -22,7 +22,7 @@
 
 #ifndef _FENV_H
 
-#define __FENV_H	1
+#define _FENV_H	1
 #include <features.h>
 
 /* Get the architecture dependend definitions.  The following definitions
@@ -40,7 +40,7 @@
 
    The following macros are defined iff the implementation supports this
    kind of exception.
-   FE_INEXACT		inxeact result
+   FE_INEXACT		inexact result
    FE_DIVBYZERO		devision by zero
    FE_UNDERFLOW		result not representable due to underflow
    FE_OVERFLOW		result not representable due to overflow
@@ -86,7 +86,7 @@ extern int fetestexcept __P ((int __excepts));
 extern int fegetround __P ((void));
 
 /* Establish the rounding direction represented by ROUND.  */
-extern int fesetround __P ((int __round));
+extern int fesetround __P ((int __rounding_direction));
 
 
 /* Floating-point environment.  */
diff --git a/math/libm-test.c b/math/libm-test.c
index 72c27b16ca..ccb8aa80d5 100644
--- a/math/libm-test.c
+++ b/math/libm-test.c
@@ -70,6 +70,7 @@
 #include <complex.h>
 #include <math.h>
 #include <float.h>
+#include <fenv.h>
 
 #include <errno.h>
 #include <stdlib.h>
@@ -87,9 +88,6 @@
 #define PRINT 1
 #define NO_PRINT 0
 
-#define TEST_EXCEPTION(test) do {} while (0);
-/* As long as no exception code is available prevent warnings.  */
-#define UNUSED __attribute__ ((unused))
 
 static int noErrors;
 
@@ -155,6 +153,9 @@ random_value (MATHTYPE min_value, MATHTYPE max_value)
   if ((x <= min_value) || (x >= max_value) || !isfinite (x))
     x = (max_value - min_value) / 2 + min_value;
 
+  /* Make sure the RNG has no influence on the exceptions.  */
+  feclearexcept (FE_ALL_EXCEPT);
+
   return x;
 }
 
@@ -173,6 +174,84 @@ random_less (MATHTYPE max_value)
 }
 
 
+/* Test whether a given exception was raised.  */
+static void
+test_single_exception (const char *test_name,
+                       short int exception,
+                       short int exc_flag,
+                       fexcept_t fe_flag,
+                       const char *flag_name)
+{
+  if (exception & exc_flag)
+    {
+      if (fetestexcept (fe_flag))
+        {
+          if (verbose > 2)
+            printf ("Pass: %s:\nException \"%s\" set\n", test_name, flag_name);
+        }
+      else
+        {
+          if (verbose)
+            printf ("Fail: %s:\nException \"%s\" not set\n",
+		    test_name, flag_name);
+          ++noErrors;
+        }
+    }
+  else
+    {
+      if (fetestexcept (fe_flag))
+        {
+          if (verbose)
+            printf ("Fail: %s:\nException \"%s\" set\n",
+		    test_name, flag_name);
+          ++noErrors;
+        }
+      else
+        {
+          if (verbose > 2)
+            printf ("Pass: %s:\nException \"%s\" not set\n",
+		    test_name, flag_name);
+        }
+    }
+}
+
+
+/* Test whether exception given by EXCEPTION are raised.  */
+static void
+test_not_exception (const char *test_name, short int exception)
+{
+#ifdef FE_DIVBYZERO
+  if ((exception & FE_DIVBYZERO) == 0)
+    test_single_exception (test_name, exception,
+			   DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
+			   "Divide by zero");
+#endif
+#ifdef FE_INVALID
+  if ((exception & FE_INVALID) == 0)
+    test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
+			   "Invalid operation");
+#endif
+  feclearexcept (FE_ALL_EXCEPT);
+}
+
+
+/* Test whether exceptions given by EXCEPTION are raised.  */
+static void
+test_exceptions (const char *test_name, short int exception)
+{
+#ifdef FE_DIVBYZERO
+  test_single_exception (test_name, exception,
+                         DIVIDE_BY_ZERO_EXCEPTION, FE_DIVBYZERO,
+                         "Divide by zero");
+#endif
+#ifdef FE_INVALID
+  test_single_exception (test_name, exception, INVALID_EXCEPTION, FE_INVALID,
+                         "Invalid operation");
+#endif
+  feclearexcept (FE_ALL_EXCEPT);
+}
+
+
 /* Test if two floating point numbers are equal.  */
 static int
 check_equal (MATHTYPE computed, MATHTYPE supplied, MATHTYPE eps, MATHTYPE * diff)
@@ -327,6 +406,7 @@ check (const char *test_name, MATHTYPE computed, MATHTYPE expected)
   MATHTYPE diff;
   int result;
 
+  test_exceptions (test_name, NO_EXCEPTION);
   result = check_equal (computed, expected, 0, &diff);
   output_result (test_name, result,
 		 computed, expected, diff, PRINT, PRINT);
@@ -340,6 +420,7 @@ check_ext (const char *test_name, MATHTYPE computed, MATHTYPE expected,
   MATHTYPE diff;
   int result;
 
+  test_exceptions (test_name, NO_EXCEPTION);
   result = check_equal (computed, expected, 0, &diff);
   output_result_ext (test_name, result,
 		     computed, expected, diff, parameter, PRINT, PRINT);
@@ -347,12 +428,27 @@ check_ext (const char *test_name, MATHTYPE computed, MATHTYPE expected,
 
 
 static void
+check_exc (const char *test_name, MATHTYPE computed, MATHTYPE expected,
+	   short exception)
+{
+  MATHTYPE diff;
+  int result;
+
+  test_exceptions (test_name, exception);
+  result = check_equal (computed, expected, 0, &diff);
+  output_result (test_name, result,
+		 computed, expected, diff, PRINT, PRINT);
+}
+
+
+static void
 check_eps (const char *test_name, MATHTYPE computed, MATHTYPE expected,
 	   MATHTYPE epsilon)
 {
   MATHTYPE diff;
   int result;
 
+  test_exceptions (test_name, NO_EXCEPTION);
   result = check_equal (computed, expected, epsilon, &diff);
   output_result (test_name, result,
 		 computed, expected, diff, PRINT, PRINT);
@@ -362,6 +458,7 @@ check_eps (const char *test_name, MATHTYPE computed, MATHTYPE expected,
 static void
 check_bool (const char *test_name, int computed)
 {
+  test_exceptions (test_name, NO_EXCEPTION);
   output_result_bool (test_name, computed);
 }
 
@@ -372,6 +469,8 @@ check_long (const char *test_name, long int computed, long int expected)
   long int diff = computed - expected;
   int result = diff == 0;
 
+  test_exceptions (test_name, NO_EXCEPTION);
+
   if (result)
     {
       if (verbose > 2)
@@ -401,6 +500,8 @@ check_longlong (const char *test_name, long long int computed,
   long long int diff = computed - expected;
   int result = diff == 0;
 
+  test_exceptions (test_name, NO_EXCEPTION);
+
   if (result)
     {
       if (verbose > 2)
@@ -426,14 +527,25 @@ check_longlong (const char *test_name, long long int computed,
 static void
 check_isnan (const char *test_name, MATHTYPE computed)
 {
+  test_exceptions (test_name, NO_EXCEPTION);
   output_isvalue (test_name, isnan (computed), computed);
 }
 
 
 static void
 check_isnan_exc (const char *test_name, MATHTYPE computed,
-		 short exception UNUSED)
+		 short exception)
 {
+  test_exceptions (test_name, exception);
+  output_isvalue (test_name, isnan (computed), computed);
+}
+
+
+static void
+check_isnan_maybe_exc (const char *test_name, MATHTYPE computed,
+		       short exception)
+{
+  test_not_exception (test_name, exception);
   output_isvalue (test_name, isnan (computed), computed);
 }
 
@@ -442,6 +554,7 @@ static void
 check_isnan_ext (const char *test_name, MATHTYPE computed,
 		 MATHTYPE parameter)
 {
+  test_exceptions (test_name, NO_EXCEPTION);
   output_isvalue_ext (test_name, isnan (computed), computed, parameter);
 }
 
@@ -450,6 +563,7 @@ check_isnan_ext (const char *test_name, MATHTYPE computed,
 static void
 check_isinfp (const char *test_name, MATHTYPE computed)
 {
+  test_exceptions (test_name, NO_EXCEPTION);
   output_isvalue (test_name, (ISINF (computed) == +1), computed);
 }
 
@@ -458,6 +572,7 @@ static void
 check_isinfp_ext (const char *test_name, MATHTYPE computed,
 		  MATHTYPE parameter)
 {
+  test_exceptions (test_name, NO_EXCEPTION);
   output_isvalue_ext (test_name, (ISINF (computed) == +1), computed, parameter);
 }
 
@@ -465,8 +580,9 @@ check_isinfp_ext (const char *test_name, MATHTYPE computed,
 /* Tests if computed is +Inf */
 static void
 check_isinfp_exc (const char *test_name, MATHTYPE computed,
-		  int exception UNUSED)
+		  int exception)
 {
+  test_exceptions (test_name, exception);
   output_isvalue (test_name, (ISINF (computed) == +1), computed);
 }
 
@@ -474,6 +590,7 @@ check_isinfp_exc (const char *test_name, MATHTYPE computed,
 static void
 check_isinfn (const char *test_name, MATHTYPE computed)
 {
+  test_exceptions (test_name, NO_EXCEPTION);
   output_isvalue (test_name, (ISINF (computed) == -1), computed);
 }
 
@@ -482,6 +599,7 @@ static void
 check_isinfn_ext (const char *test_name, MATHTYPE computed,
 		  MATHTYPE parameter)
 {
+  test_exceptions (test_name, NO_EXCEPTION);
   output_isvalue_ext (test_name, (ISINF (computed) == -1), computed, parameter);
 }
 
@@ -489,8 +607,9 @@ check_isinfn_ext (const char *test_name, MATHTYPE computed,
 /* Tests if computed is -Inf */
 static void
 check_isinfn_exc (const char *test_name, MATHTYPE computed,
-		  int exception UNUSED)
+		  int exception)
 {
+  test_exceptions (test_name, exception);
   output_isvalue (test_name, (ISINF (computed) == -1), computed);
 }
 
@@ -507,7 +626,7 @@ acos_test (void)
   check ("acos (1) == 0", FUNC(acos) (1), 0);
 
   x = random_greater (1);
-  check_isnan_exc ("acos (x) == NaN + invalid exception for |x| > 1",
+  check_isnan_exc ("acos (x) == NaN plus invalid exception for |x| > 1",
 		   FUNC(acos) (x),
 		   INVALID_EXCEPTION);
 }
@@ -533,7 +652,7 @@ asin_test (void)
   check ("asin (0) == 0", FUNC(asin) (0), 0);
 
   x = random_greater (1);
-  check_isnan_exc ("asin x == NaN + invalid exception for |x| > 1",
+  check_isnan_exc ("asin x == NaN plus invalid exception for |x| > 1",
 		   FUNC(asin) (x),
 		   INVALID_EXCEPTION);
 }
@@ -882,14 +1001,14 @@ ldexp_test (void)
 static void
 log_test (void)
 {
-  check_isinfn_exc ("log (+0) == -inf", FUNC(log) (0),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfn_exc ("log (-0) == -inf", FUNC(log) (minus_zero),
-		    DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("log (+0) == -inf plus divide-by-zero exception",
+		    FUNC(log) (0), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("log (-0) == -inf plus divide-by-zero exception",
+		    FUNC(log) (minus_zero), DIVIDE_BY_ZERO_EXCEPTION);
 
   check ("log (1) == 0", FUNC(log) (1), 0);
 
-  check_isnan_exc ("log (x) == NaN plus divide-by-zero exception if x < 0",
+  check_isnan_exc ("log (x) == NaN plus invalid exception if x < 0",
 		   FUNC(log) (-1), INVALID_EXCEPTION);
   check_isinfp ("log (+inf) == +inf", FUNC(log) (plus_infty));
 
@@ -905,14 +1024,14 @@ log_test (void)
 static void
 log10_test (void)
 {
-  check_isinfn_exc ("log10 (+0) == -inf", FUNC(log10) (0),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfn_exc ("log10 (-0) == -inf", FUNC(log10) (minus_zero),
-		    DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("log10 (+0) == -inf plus divide-by-zero exception",
+		    FUNC(log10) (0), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("log10 (-0) == -inf plus divide-by-zero exception",
+		    FUNC(log10) (minus_zero), DIVIDE_BY_ZERO_EXCEPTION);
 
   check ("log10 (1) == +0", FUNC(log10) (1), 0);
 
-  check_isnan_exc ("log10 (x) == NaN plus divide-by-zero exception if x < 0",
+  check_isnan_exc ("log10 (x) == NaN plus invalid exception if x < 0",
 		   FUNC(log10) (-1), INVALID_EXCEPTION);
 
   check_isinfp ("log10 (+inf) == +inf", FUNC(log10) (plus_infty));
@@ -935,9 +1054,9 @@ log1p_test (void)
   check ("log1p (+0) == +0", FUNC(log1p) (0), 0);
   check ("log1p (-0) == -0", FUNC(log1p) (minus_zero), minus_zero);
 
-  check_isinfn_exc ("log1p (-1) == -inf", FUNC(log1p) (-1),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isnan_exc ("log1p (x) == NaN plus divide-by-zero exception if x < -1",
+  check_isinfn_exc ("log1p (-1) == -inf plus divide-by-zero exception",
+		    FUNC(log1p) (-1), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isnan_exc ("log1p (x) == NaN plus invalid exception if x < -1",
 		   FUNC(log1p) (-2), INVALID_EXCEPTION);
 
   check_isinfp ("log1p (+inf) == +inf", FUNC(log1p) (plus_infty));
@@ -951,14 +1070,14 @@ log1p_test (void)
 static void
 log2_test (void)
 {
-  check_isinfn_exc ("log2 (+0) == -inf", FUNC(log2) (0),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfn_exc ("log2 (-0) == -inf", FUNC(log2) (minus_zero),
-		    DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("log2 (+0) == -inf plus divide-by-zero exception",
+		    FUNC(log2) (0), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("log2 (-0) == -inf plus divide-by-zero exception",
+		    FUNC(log2) (minus_zero), DIVIDE_BY_ZERO_EXCEPTION);
 
   check ("log2 (1) == +0", FUNC(log2) (1), 0);
 
-  check_isnan_exc ("log2 (x) == NaN plus divide-by-zero exception if x < 0",
+  check_isnan_exc ("log2 (x) == NaN plus invalid exception if x < 0",
 		   FUNC(log2) (-1), INVALID_EXCEPTION);
 
   check_isinfp ("log2 (+inf) == +inf", FUNC(log2) (plus_infty));
@@ -1254,41 +1373,41 @@ pow_test (void)
   x = random_greater (0.0);
   check_isnan_ext ("pow (x, NaN) == NaN", FUNC(pow) (x, nan_value), x);
 
-  check_isnan_exc ("pow (+1, +inf) == NaN", FUNC(pow) (1, plus_infty),
-		   INVALID_EXCEPTION);
-  check_isnan_exc ("pow (-1, +inf) == NaN", FUNC(pow) (-1, plus_infty),
-		   INVALID_EXCEPTION);
-  check_isnan_exc ("pow (+1, -inf) == NaN", FUNC(pow) (1, minus_infty),
-		   INVALID_EXCEPTION);
-  check_isnan_exc ("pow (-1, -inf) == NaN", FUNC(pow) (-1, minus_infty),
-		   INVALID_EXCEPTION);
-
-  check_isnan_exc ("pow (-0.1, 1.1) == NaN", FUNC(pow) (-0.1, 1.1),
-		   INVALID_EXCEPTION);
-  check_isnan_exc ("pow (-0.1, -1.1) == NaN", FUNC(pow) (-0.1, -1.1),
-		   INVALID_EXCEPTION);
-  check_isnan_exc ("pow (-10.1, 1.1) == NaN", FUNC(pow) (-10.1, 1.1),
-		   INVALID_EXCEPTION);
-  check_isnan_exc ("pow (-10.1, -1.1) == NaN", FUNC(pow) (-10.1, -1.1),
-		   INVALID_EXCEPTION);
-
-  check_isinfp_exc ("pow (+0, -1) == +inf", FUNC(pow) (0, -1),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfp_exc ("pow (+0, -11) == +inf", FUNC(pow) (0, -11),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfn_exc ("pow (-0, -1) == -inf", FUNC(pow) (minus_zero, -1),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfn_exc ("pow (-0, -11) == -inf", FUNC(pow) (minus_zero, -11),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-
-  check_isinfp_exc ("pow (+0, -2) == +inf", FUNC(pow) (0, -2),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfp_exc ("pow (+0, -11.1) == +inf", FUNC(pow) (0, -11.1),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfp_exc ("pow (-0, -2) == +inf", FUNC(pow) (minus_zero, -2),
-		    DIVIDE_BY_ZERO_EXCEPTION);
-  check_isinfp_exc ("pow (-0, -11.1) == +inf", FUNC(pow) (minus_zero, -11.1),
-		    DIVIDE_BY_ZERO_EXCEPTION);
+  check_isnan_exc ("pow (+1, +inf) == NaN plus invalid exception",
+		   FUNC(pow) (1, plus_infty), INVALID_EXCEPTION);
+  check_isnan_exc ("pow (-1, +inf) == NaN plus invalid exception",
+		   FUNC(pow) (-1, plus_infty), INVALID_EXCEPTION);
+  check_isnan_exc ("pow (+1, -inf) == NaN plus invalid exception",
+		   FUNC(pow) (1, minus_infty), INVALID_EXCEPTION);
+  check_isnan_exc ("pow (-1, -inf) == NaN plus invalid exception",
+		   FUNC(pow) (-1, minus_infty), INVALID_EXCEPTION);
+
+  check_isnan_exc ("pow (-0.1, 1.1) == NaN plus invalid exception",
+		   FUNC(pow) (-0.1, 1.1), INVALID_EXCEPTION);
+  check_isnan_exc ("pow (-0.1, -1.1) == NaN plus invalid exception",
+		   FUNC(pow) (-0.1, -1.1), INVALID_EXCEPTION);
+  check_isnan_exc ("pow (-10.1, 1.1) == NaN plus invalid exception",
+		   FUNC(pow) (-10.1, 1.1), INVALID_EXCEPTION);
+  check_isnan_exc ("pow (-10.1, -1.1) == NaN plus invalid exception",
+		   FUNC(pow) (-10.1, -1.1), INVALID_EXCEPTION);
+
+  check_isinfp_exc ("pow (+0, -1) == +inf plus divide-by-zero exception",
+		    FUNC(pow) (0, -1), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfp_exc ("pow (+0, -11) == +inf plus divide-by-zero exception",
+		    FUNC(pow) (0, -11), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("pow (-0, -1) == -inf plus divide-by-zero exception",
+		    FUNC(pow) (minus_zero, -1), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfn_exc ("pow (-0, -11) == -inf plus divide-by-zero exception",
+		    FUNC(pow) (minus_zero, -11), DIVIDE_BY_ZERO_EXCEPTION);
+
+  check_isinfp_exc ("pow (+0, -2) == +inf plus divide-by-zero exception",
+		    FUNC(pow) (0, -2), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfp_exc ("pow (+0, -11.1) == +inf plus divide-by-zero exception",
+		    FUNC(pow) (0, -11.1), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfp_exc ("pow (-0, -2) == +inf plus divide-by-zero exception",
+		    FUNC(pow) (minus_zero, -2), DIVIDE_BY_ZERO_EXCEPTION);
+  check_isinfp_exc ("pow (-0, -11.1) == +inf plus divide-by-zero exception",
+		    FUNC(pow) (minus_zero, -11.1), DIVIDE_BY_ZERO_EXCEPTION);
 
   check ("pow (+0, 1) == +0", FUNC(pow) (0, 1), 0);
   check ("pow (+0, 11) == +0", FUNC(pow) (0, 11), 0);
@@ -1622,12 +1741,46 @@ cexp_test (void)
   check ("real(cexp(-inf - 0i)) = 0", __real__ result, 0);
   check ("imag(cexp(-inf - 0i)) = -0", __imag__ result, minus_zero);
 
+  result = FUNC(cexp) (BUILD_COMPLEX (0.0, plus_infty));
+  check_isnan_exc ("real(cexp(0 + i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(0 + i inf)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(cexp) (BUILD_COMPLEX (minus_zero, plus_infty));
+  check_isnan_exc ("real(cexp(-0 + i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(-0 + i inf)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(cexp) (BUILD_COMPLEX (0.0, minus_infty));
+  check_isnan_exc ("real(cexp(0 - i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(0 - i inf)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(cexp) (BUILD_COMPLEX (minus_zero, minus_infty));
+  check_isnan_exc ("real(cexp(-0 - i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(-0 - i inf)) = NaN plus invalid exception",
+	       __imag__ result);
+
   result = FUNC(cexp) (BUILD_COMPLEX (100.0, plus_infty));
-  check_isnan ("real(cexp(x + i inf)) = NaN", __real__ result);
-  check_isnan ("imag(cexp(x + i inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(cexp(100.0 + i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(100.0 + i inf)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(cexp) (BUILD_COMPLEX (-100.0, plus_infty));
+  check_isnan_exc ("real(cexp(-100.0 + i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(-100.0 + i inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(cexp) (BUILD_COMPLEX (100.0, minus_infty));
-  check_isnan ("real(cexp(x - i inf)) = NaN", __real__ result);
-  check_isnan ("imag(cexp(x - i inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(cexp(100.0 - i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(100.0 - i inf)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(cexp) (BUILD_COMPLEX (-100.0, minus_infty));
+  check_isnan_exc ("real(cexp(-100.0 - i inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(-100.0 - i inf)) = NaN", __imag__ result);
 
   result = FUNC(cexp) (BUILD_COMPLEX (minus_infty, 2.0));
   check ("real(cexp(-inf + 2.0i)) = -0", __real__ result, minus_zero);
@@ -1644,11 +1797,15 @@ cexp_test (void)
   check_isinfn ("imag(cexp(+inf + 4.0i)) = -inf", __imag__ result);
 
   result = FUNC(cexp) (BUILD_COMPLEX (plus_infty, plus_infty));
-  check_isinfp ("real(cexp(+inf + i inf)) = +inf", __real__ result);
-  check_isnan ("imag(cexp(+inf + i inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(cexp(+inf + i inf)) = +inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(+inf + i inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(cexp) (BUILD_COMPLEX (plus_infty, minus_infty));
-  check_isinfp ("real(cexp(+inf - i inf)) = +inf", __real__ result);
-  check_isnan ("imag(cexp(+inf - i inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(cexp(+inf - i inf)) = +inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(+inf - i inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(cexp) (BUILD_COMPLEX (minus_infty, plus_infty));
   check ("real(cexp(-inf + i inf)) = 0", __real__ result, 0);
@@ -1665,22 +1822,201 @@ cexp_test (void)
   check_isinfp ("real(cexp(+inf + i NaN)) = +inf", __real__ result);
   check_isnan ("imag(cexp(+inf + i NaN)) = NaN", __imag__ result);
 
+  result = FUNC(cexp) (BUILD_COMPLEX (nan_value, 0.0));
+  check_isnan_maybe_exc ("real(cexp(NaN + i0)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(NaN + i0)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(cexp) (BUILD_COMPLEX (nan_value, 1.0));
-  check_isnan ("real(cexp(NaN + 1i)) = NaN", __real__ result);
-  check_isnan ("imag(cexp(NaN + 1i)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cexp(NaN + 1i)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(NaN + 1i)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(cexp) (BUILD_COMPLEX (nan_value, plus_infty));
-  check_isnan ("real(cexp(NaN + i inf)) = NaN", __real__ result);
-  check_isnan ("imag(cexp(NaN + i inf)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cexp(NaN + i inf)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(NaN + i inf)) = NaN plus maybe invalid exception",
+	       __imag__ result);
+
+  result = FUNC(cexp) (BUILD_COMPLEX (0, nan_value));
+  check_isnan_maybe_exc ("real(cexp(0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
+  result = FUNC(cexp) (BUILD_COMPLEX (1, nan_value));
+  check_isnan_maybe_exc ("real(cexp(1 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cexp(1 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
+
   result = FUNC(cexp) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(cexp(NaN + i NaN)) = NaN", __real__ result);
   check_isnan ("imag(cexp(NaN + i NaN)) = NaN", __imag__ result);
+}
 
-  result = FUNC(cexp) (BUILD_COMPLEX (0, nan_value));
-  check_isnan ("real(cexp(0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(cexp(0 + i NaN)) = NaN", __imag__ result);
-  result = FUNC(cexp) (BUILD_COMPLEX (1, nan_value));
-  check_isnan ("real(cexp(1 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(cexp(1 + i NaN)) = NaN", __imag__ result);
+
+static void
+csin_test (void)
+{
+  __complex__ MATHTYPE result;
+
+  result = FUNC(csin) (BUILD_COMPLEX (0.0, 0.0));
+  check ("real(csin(0 + 0i)) = 0", __real__ result, 0);
+  check ("imag(csin(0 + 0i)) = 0", __imag__ result, 0);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_zero, 0.0));
+  check ("real(csin(-0 + 0i)) = -0", __real__ result, minus_zero);
+  check ("imag(csin(-0 + 0i)) = 0", __imag__ result, 0);
+  result = FUNC(csin) (BUILD_COMPLEX (0.0, minus_zero));
+  check ("real(csin(0 - 0i)) = 0", __real__ result, 0);
+  check ("imag(csin(0 - 0i)) = -0", __imag__ result, minus_zero);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_zero, minus_zero));
+  check ("real(csin(-0 - 0i)) = -0", __real__ result, minus_zero);
+  check ("imag(csin(-0 - 0i)) = -0", __imag__ result, minus_zero);
+
+  result = FUNC(csin) (BUILD_COMPLEX (0.0, plus_infty));
+  check ("real(csin(0 + i Inf)) = 0", __real__ result, 0);
+  check_isinfp ("imag(csin(0 + i Inf)) = +Inf", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_zero, plus_infty));
+  check ("real(csin(-0 + i Inf)) = -0", __real__ result, minus_zero);
+  check_isinfp ("imag(csin(-0 + i Inf)) = +Inf", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (0.0, minus_infty));
+  check ("real(csin(0 - i Inf)) = 0", __real__ result, 0);
+  check_isinfn ("imag(csin(0 - i Inf)) = -Inf", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_zero, minus_infty));
+  check ("real(csin(-0 - i Inf)) = -0", __real__ result, minus_zero);
+  check_isinfn("imag(csin(-0 - i Inf)) = -Inf", __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (plus_infty, 0.0));
+  check_isnan_exc ("real(csin(+Inf + 0i)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(csin(+Inf + 0i)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_infty, 0.0));
+  check_isnan_exc ("real(csin(-Inf + 0i)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(csin(-Inf + 0i)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
+  result = FUNC(csin) (BUILD_COMPLEX (plus_infty, minus_zero));
+  check_isnan_exc ("real(csin(+Inf - 0i)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(csin(+Inf - 0i)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0.0);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_infty, minus_zero));
+  check_isnan_exc ("real(csin(-Inf - 0i)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(csin(-Inf - 0i)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0.0);
+
+  result = FUNC(csin) (BUILD_COMPLEX (plus_infty, plus_infty));
+  check_isnan_exc ("real(csin(+Inf + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isinfp ("imag(csin(+Inf + i Inf)) = +-Inf plus invalid exception",
+		FUNC(fabs) (__imag__ result));
+  result = FUNC(csin) (BUILD_COMPLEX (minus_infty, plus_infty));
+  check_isnan_exc ("real(csin(-Inf + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isinfp ("imag(csin(-Inf + i Inf)) = +-Inf plus invalid exception",
+		FUNC(fabs) (__imag__ result));
+  result = FUNC(csin) (BUILD_COMPLEX (plus_infty, minus_infty));
+  check_isnan_exc ("real(csin(Inf - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isinfp ("imag(csin(Inf - i Inf)) = +-Inf plus invalid exception",
+		FUNC(fabs) (__imag__ result));
+  result = FUNC(csin) (BUILD_COMPLEX (minus_infty, minus_infty));
+  check_isnan_exc ("real(csin(-Inf - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isinfp ("imag(csin(-Inf - i Inf)) = +-Inf plus invalid exception",
+		FUNC(fabs) (__imag__ result));
+
+  result = FUNC(csin) (BUILD_COMPLEX (plus_infty, 6.75));
+  check_isnan_exc ("real(csin(+Inf + i 6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(+Inf + i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (plus_infty, -6.75));
+  check_isnan_exc ("real(csin(+Inf - i 6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(+Inf - i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_infty, 6.75));
+  check_isnan_exc ("real(csin(-Inf + i6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(-Inf + i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_infty, -6.75));
+  check_isnan_exc ("real(csin(-Inf - i6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(-Inf - i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (4.625, plus_infty));
+  check_isinfn ("real(csin(4.625 + i Inf)) = -Inf", __real__ result);
+  check_isinfn ("imag(csin(4.625 + i Inf)) = -Inf", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (4.625, minus_infty));
+  check_isinfn ("real(csin(4.625 - i Inf)) = -Inf", __real__ result);
+  check_isinfp ("imag(csin(4.625 - i Inf)) = +Inf", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (-4.625, plus_infty));
+  check_isinfp ("real(csin(-4.625 + i Inf)) = +Inf", __real__ result);
+  check_isinfn ("imag(csin(-4.625 + i Inf)) = -Inf", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (-4.625, minus_infty));
+  check_isinfp ("real(csin(-4.625 - i Inf)) = +Inf", __real__ result);
+  check_isinfp ("imag(csin(-4.625 - i Inf)) = +Inf", __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, 0.0));
+  check_isnan ("real(csin(NaN + i0)) = NaN", __real__ result);
+  check ("imag(csin(NaN + i0)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, minus_zero));
+  check_isnan ("real(csin(NaN - i0)) = NaN", __real__ result);
+  check ("imag(csin(NaN - i0)) = +-0", FUNC(fabs) (__imag__ result), 0);
+
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, plus_infty));
+  check_isnan ("real(csin(NaN + i Inf)) = NaN", __real__ result);
+  check_isinfp ("imag(csin(NaN + i Inf)) = +-Inf",
+		FUNC(fabs) (__imag__ result));
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, minus_infty));
+  check_isnan ("real(csin(NaN - i Inf)) = NaN", __real__ result);
+  check_isinfp ("real(csin(NaN - i Inf)) = +-Inf",
+		FUNC(fabs) (__imag__ result));
+
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, 9.0));
+  check_isnan_maybe_exc ("real(csin(NaN + i9.0)) = NaN plus maybeinvalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(NaN + i9.0)) = NaN plus maybeinvalid exception",
+	       __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, -9.0));
+  check_isnan_maybe_exc ("real(csin(NaN - i9.0)) = NaN plus maybeinvalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(NaN - i9.0)) = NaN plus maybeinvalid exception",
+	       __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (0.0, nan_value));
+  check ("real(csin(0 + i NaN))", __real__ result, 0.0);
+  check_isnan ("imag(csin(0 + i NaN)) = NaN", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_zero, nan_value));
+  check ("real(csin(-0 + i NaN)) = -0", __real__ result, minus_zero);
+  check_isnan ("imag(csin(-0 + NaN)) = NaN", __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (10.0, nan_value));
+  check_isnan_maybe_exc ("real(csin(10 + i NaN)) = NaN plus maybeinvalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(10 + i NaN)) = NaN plus maybeinvalid exception",
+	       __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, -10.0));
+  check_isnan_maybe_exc ("real(csin(-10 + i NaN)) = NaN plus maybeinvalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csin(-10 + i NaN)) = NaN plus maybeinvalid exception",
+	       __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (plus_infty, nan_value));
+  check_isnan ("real(csin(+Inf + i NaN)) = NaN", __real__ result);
+  check_isnan ("imag(csin(+Inf + i NaN)) = NaN", __imag__ result);
+  result = FUNC(csin) (BUILD_COMPLEX (minus_infty, nan_value));
+  check_isnan ("real(csin(-Inf + i NaN)) = NaN", __real__ result);
+  check_isnan ("imag(csin(-Inf + i NaN)) = NaN", __imag__ result);
+
+  result = FUNC(csin) (BUILD_COMPLEX (nan_value, nan_value));
+  check_isnan ("real(csin(NaN + i NaN)) = NaN", __real__ result);
+  check_isnan ("imag(csin(NaN + i NaN)) = NaN", __imag__ result);
 }
 
 
@@ -1703,17 +2039,25 @@ csinh_test (void)
   check ("imag(csinh(-0 - 0i)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(csinh) (BUILD_COMPLEX (0.0, plus_infty));
-  check ("real(csinh(0 + i Inf)) = +-0", FUNC(fabs) (__real__ result), 0);
-  check_isnan ("imag(csinh(0 + i Inf)) = NaN", __imag__ result);
+  check_exc ("real(csinh(0 + i Inf)) = +-0 plus invalid exception",
+	     FUNC(fabs) (__real__ result), 0, FE_INVALID);
+  check_isnan ("imag(csinh(0 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (minus_zero, plus_infty));
-  check ("real(csinh(-0 + i Inf)) = +-0", FUNC(fabs) (__real__ result), 0);
-  check_isnan ("imag(csinh(-0 + i Inf)) = NaN", __imag__ result);
+  check_exc ("real(csinh(-0 + i Inf)) = +-0 plus invalid exception",
+	     FUNC(fabs) (__real__ result), 0, FE_INVALID);
+  check_isnan ("imag(csinh(-0 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (0.0, minus_infty));
-  check ("real(csinh(0 - i Inf)) = +-0", FUNC(fabs) (__real__ result), 0);
-  check_isnan ("imag(csinh(0 - i Inf)) = NaN", __imag__ result);
+  check_exc ("real(csinh(0 - i Inf)) = +-0 plus invalid exception",
+	     FUNC(fabs) (__real__ result), 0, FE_INVALID);
+  check_isnan ("imag(csinh(0 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (minus_zero, minus_infty));
-  check ("real(csinh(-0 - i Inf)) = +-0", FUNC(fabs) (__real__ result), 0);
-  check_isnan ("imag(csinh(-0 - i Inf)) = NaN", __imag__ result);
+  check_exc ("real(csinh(-0 - i Inf)) = +-0 plus invalid exception",
+	     FUNC(fabs) (__real__ result), 0, FE_INVALID);
+  check_isnan ("imag(csinh(-0 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(csinh) (BUILD_COMPLEX (plus_infty, 0.0));
   check_isinfp ("real(csinh(+Inf + 0i)) = +Inf", __real__ result);
@@ -1729,21 +2073,25 @@ csinh_test (void)
   check ("imag(csinh(-Inf - 0i)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(csinh) (BUILD_COMPLEX (plus_infty, plus_infty));
-  check_isinfp ("real(csinh(+Inf + i Inf)) = +-Inf",
-		FUNC(fabs) (__real__ result));
-  check_isnan ("imag(csinh(+Inf + i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(csinh(+Inf + i Inf)) = +-Inf plus invalid exception",
+		    FUNC(fabs) (__real__ result), FE_INVALID);
+  check_isnan ("imag(csinh(+Inf + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (minus_infty, plus_infty));
-  check_isinfp ("real(csinh(-Inf + i Inf)) = +-Inf",
-		FUNC(fabs) (__real__ result));
-  check_isnan ("imag(csinh(-Inf + i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(csinh(-Inf + i Inf)) = +-Inf plus invalid exception",
+		    FUNC(fabs) (__real__ result), FE_INVALID);
+  check_isnan ("imag(csinh(-Inf + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (plus_infty, minus_infty));
-  check_isinfp ("real(csinh(Inf - i Inf)) = +-Inf",
-		FUNC(fabs) (__real__ result));
-  check_isnan ("imag(csinh(Inf - i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(csinh(Inf - i Inf)) = +-Inf plus invalid exception",
+		    FUNC(fabs) (__real__ result), FE_INVALID);
+  check_isnan ("imag(csinh(Inf - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (minus_infty, minus_infty));
-  check_isinfp ("real(csinh(-Inf - i Inf)) = +-Inf",
-		FUNC(fabs) (__real__ result));
-  check_isnan ("imag(csinh(-Inf - i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(csinh(-Inf - i Inf)) = +-Inf plus invalid exception",
+		    FUNC(fabs) (__real__ result), FE_INVALID);
+  check_isnan ("imag(csinh(-Inf - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(csinh) (BUILD_COMPLEX (plus_infty, 4.625));
   check_isinfn ("real(csinh(+Inf + i4.625)) = -Inf", __real__ result);
@@ -1759,17 +2107,25 @@ csinh_test (void)
   check_isinfp ("imag(csinh(-Inf - i4.625)) = +Inf", __imag__ result);
 
   result = FUNC(csinh) (BUILD_COMPLEX (6.75, plus_infty));
-  check_isnan ("real(csinh(6.75 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(6.75 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(csinh(6.75 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(6.75 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (-6.75, plus_infty));
-  check_isnan ("real(csinh(-6.75 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(-6.75 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(csinh(-6.75 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(-6.75 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (6.75, minus_infty));
-  check_isnan ("real(csinh(6.75 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(6.75 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(csinh(6.75 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(6.75 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (-6.75, minus_infty));
-  check_isnan ("real(csinh(-6.75 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(-6.75 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(csinh(-6.75 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(-6.75 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(csinh) (BUILD_COMPLEX (0.0, nan_value));
   check ("real(csinh(0 + i NaN)) = +-0", FUNC(fabs) (__real__ result), 0);
@@ -1788,11 +2144,15 @@ csinh_test (void)
   check_isnan ("imag(csinh(-Inf + i NaN)) = NaN", __imag__ result);
 
   result = FUNC(csinh) (BUILD_COMPLEX (9.0, nan_value));
-  check_isnan ("real(csinh(9.0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(9.0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csinh(9.0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(9.0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (-9.0, nan_value));
-  check_isnan ("real(csinh(-9.0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(-9.0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csinh(-9.0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(-9.0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(csinh) (BUILD_COMPLEX (nan_value, 0.0));
   check_isnan ("real(csinh(NaN + i0)) = NaN", __real__ result);
@@ -1802,11 +2162,15 @@ csinh_test (void)
   check ("imag(csinh(NaN - i0)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(csinh) (BUILD_COMPLEX (nan_value, 10.0));
-  check_isnan ("real(csinh(NaN + i10)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(NaN + i10)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csinh(NaN + i10)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(NaN + i10)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csinh) (BUILD_COMPLEX (nan_value, -10.0));
-  check_isnan ("real(csinh(NaN - i10)) = NaN", __real__ result);
-  check_isnan ("imag(csinh(NaN - i10)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csinh(NaN - i10)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csinh(NaN - i10)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(csinh) (BUILD_COMPLEX (nan_value, plus_infty));
   check_isnan ("real(csinh(NaN + i Inf)) = NaN", __real__ result);
@@ -1840,17 +2204,25 @@ ccos_test (void)
   check ("imag(ccos(-0 - 0i)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(ccos) (BUILD_COMPLEX (plus_infty, 0.0));
-  check_isnan ("real(ccos(+Inf + i0)) = NaN", __real__ result);
-  check ("imag(ccos(Inf + i0)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccos(+Inf + i0)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccos(Inf + i0)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
   result = FUNC(ccos) (BUILD_COMPLEX (plus_infty, minus_zero));
-  check_isnan ("real(ccos(Inf - i0)) = NaN", __real__ result);
-  check ("imag(ccos(Inf - i0)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccos(Inf - i0)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccos(Inf - i0)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
   result = FUNC(ccos) (BUILD_COMPLEX (minus_infty, 0.0));
-  check_isnan ("real(ccos(-Inf + i0)) = NaN", __real__ result);
-  check ("imag(ccos(-Inf + i0)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccos(-Inf + i0)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccos(-Inf + i0)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
   result = FUNC(ccos) (BUILD_COMPLEX (minus_infty, minus_zero));
-  check_isnan ("real(ccos(-Inf - i0)) = NaN", __real__ result);
-  check ("imag(ccos(-Inf - i0)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccos(-Inf - i0)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccos(-Inf - i0)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
 
   result = FUNC(ccos) (BUILD_COMPLEX (0.0, plus_infty));
   check_isinfp ("real(ccos(0 + i Inf)) = +Inf", __real__ result);
@@ -1866,17 +2238,25 @@ ccos_test (void)
   check ("imag(ccos(-0 - i Inf)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(ccos) (BUILD_COMPLEX (plus_infty, plus_infty));
-  check_isinfp ("real(ccos(+Inf + i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccos(+Inf + i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccos(+Inf + i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(+Inf + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (minus_infty, plus_infty));
-  check_isinfp ("real(ccos(-Inf + i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccos(-Inf + i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccos(-Inf + i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(-Inf + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (plus_infty, minus_infty));
-  check_isinfp ("real(ccos(Inf - i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccos(Inf - i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccos(Inf - i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(Inf - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (minus_infty, minus_infty));
-  check_isinfp ("real(ccos(-Inf - i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccos(-Inf - i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccos(-Inf - i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(-Inf - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccos) (BUILD_COMPLEX (4.625, plus_infty));
   check_isinfn ("real(ccos(4.625 + i Inf)) = -Inf", __real__ result);
@@ -1892,17 +2272,25 @@ ccos_test (void)
   check_isinfp ("imag(ccos(-4.625 - i Inf)) = +Inf", __imag__ result);
 
   result = FUNC(ccos) (BUILD_COMPLEX (plus_infty, 6.75));
-  check_isnan ("real(ccos(+Inf + i6.75)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(+Inf + i6.75)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccos(+Inf + i6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(+Inf + i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (plus_infty, -6.75));
-  check_isnan ("real(ccos(+Inf - i6.75)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(+Inf - i6.75)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccos(+Inf - i6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(+Inf - i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (minus_infty, 6.75));
-  check_isnan ("real(ccos(-Inf + i6.75)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(-Inf + i6.75)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccos(-Inf + i6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(-Inf + i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (minus_infty, -6.75));
-  check_isnan ("real(ccos(-Inf - i6.75)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(-Inf - i6.75)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccos(-Inf - i6.75)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(-Inf - i6.75)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccos) (BUILD_COMPLEX (nan_value, 0.0));
   check_isnan ("real(ccos(NaN + i0)) = NaN", __real__ result);
@@ -1919,11 +2307,15 @@ ccos_test (void)
   check_isnan ("imag(ccos(NaN - i Inf)) = NaN", __imag__ result);
 
   result = FUNC(ccos) (BUILD_COMPLEX (nan_value, 9.0));
-  check_isnan ("real(ccos(NaN + i9.0)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(NaN + i9.0)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccos(NaN + i9.0)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(NaN + i9.0)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (nan_value, -9.0));
-  check_isnan ("real(ccos(NaN - i9.0)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(NaN - i9.0)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccos(NaN - i9.0)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(NaN - i9.0)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccos) (BUILD_COMPLEX (0.0, nan_value));
   check_isnan ("real(ccos(0 + i NaN)) = NaN", __real__ result);
@@ -1933,18 +2325,26 @@ ccos_test (void)
   check ("imag(ccos(-0 + i NaN)) = +-0", FUNC(fabs) (__imag__ result), 0.0);
 
   result = FUNC(ccos) (BUILD_COMPLEX (10.0, nan_value));
-  check_isnan ("real(ccos(10 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(10 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccos(10 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(10 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (-10.0, nan_value));
-  check_isnan ("real(ccos(-10 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(-10 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccos(-10 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(-10 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccos) (BUILD_COMPLEX (plus_infty, nan_value));
-  check_isnan ("real(ccos(+Inf + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(+Inf + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccos(+Inf + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(+Inf + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ccos) (BUILD_COMPLEX (minus_infty, nan_value));
-  check_isnan ("real(ccos(-Inf + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ccos(-Inf + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccos(-Inf + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccos(-Inf + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccos) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(ccos(NaN + i NaN)) = NaN", __real__ result);
@@ -1971,17 +2371,25 @@ ccosh_test (void)
   check ("imag(ccosh(-0 - 0i)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (0.0, plus_infty));
-  check_isnan ("real(ccosh(0 + i Inf)) = NaN", __real__ result);
-  check ("imag(ccosh(0 + i Inf)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccosh(0 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccosh(0 + i Inf)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
   result = FUNC(ccosh) (BUILD_COMPLEX (minus_zero, plus_infty));
-  check_isnan ("real(ccosh(-0 + i Inf)) = NaN", __real__ result);
-  check ("imag(ccosh(-0 + i Inf)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccosh(-0 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccosh(-0 + i Inf)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
   result = FUNC(ccosh) (BUILD_COMPLEX (0.0, minus_infty));
-  check_isnan ("real(ccosh(0 - i Inf)) = NaN", __real__ result);
-  check ("imag(ccosh(0 - i Inf)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccosh(0 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccosh(0 - i Inf)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
   result = FUNC(ccosh) (BUILD_COMPLEX (minus_zero, minus_infty));
-  check_isnan ("real(ccosh(-0 - i Inf)) = NaN", __real__ result);
-  check ("imag(ccosh(-0 - i Inf)) = +-0", FUNC(fabs) (__imag__ result), 0);
+  check_isnan_exc ("real(ccosh(-0 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check ("imag(ccosh(-0 - i Inf)) = +-0 plus invalid exception",
+	 FUNC(fabs) (__imag__ result), 0);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (plus_infty, 0.0));
   check_isinfp ("real(ccosh(+Inf + 0i)) = +Inf", __real__ result);
@@ -1997,17 +2405,25 @@ ccosh_test (void)
   check ("imag(ccosh(-Inf - 0i)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (plus_infty, plus_infty));
-  check_isinfp ("real(ccosh(+Inf + i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccosh(+Inf + i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccosh(+Inf + i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(+Inf + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (minus_infty, plus_infty));
-  check_isinfp ("real(ccosh(-Inf + i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccosh(-Inf + i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccosh(-Inf + i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(-Inf + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (plus_infty, minus_infty));
-  check_isinfp ("real(ccosh(Inf - i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccosh(Inf - i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccosh(Inf - i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(Inf - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (minus_infty, minus_infty));
-  check_isinfp ("real(ccosh(-Inf - i Inf)) = +Inf", __real__ result);
-  check_isnan ("imag(ccosh(-Inf - i Inf)) = NaN", __imag__ result);
+  check_isinfp_exc ("real(ccosh(-Inf - i Inf)) = +Inf plus invalid exception",
+		    __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(-Inf - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (plus_infty, 4.625));
   check_isinfn ("real(ccosh(+Inf + i4.625)) = -Inf", __real__ result);
@@ -2023,17 +2439,25 @@ ccosh_test (void)
   check_isinfp ("imag(ccosh(-Inf - i4.625)) = +Inf", __imag__ result);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (6.75, plus_infty));
-  check_isnan ("real(ccosh(6.75 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(6.75 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccosh(6.75 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(6.75 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (-6.75, plus_infty));
-  check_isnan ("real(ccosh(-6.75 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(-6.75 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccosh(-6.75 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(-6.75 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (6.75, minus_infty));
-  check_isnan ("real(ccosh(6.75 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(6.75 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccosh(6.75 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(6.75 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (-6.75, minus_infty));
-  check_isnan ("real(ccosh(-6.75 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(-6.75 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ccosh(-6.75 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(-6.75 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (0.0, nan_value));
   check_isnan ("real(ccosh(0 + i NaN)) = NaN", __real__ result);
@@ -2050,11 +2474,15 @@ ccosh_test (void)
   check_isnan ("imag(ccosh(-Inf + i NaN)) = NaN", __imag__ result);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (9.0, nan_value));
-  check_isnan ("real(ccosh(9.0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(9.0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccosh(9.0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(9.0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (-9.0, nan_value));
-  check_isnan ("real(ccosh(-9.0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(-9.0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccosh(-9.0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(-9.0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (nan_value, 0.0));
   check_isnan ("real(ccosh(NaN + i0)) = NaN", __real__ result);
@@ -2064,18 +2492,26 @@ ccosh_test (void)
   check ("imag(ccosh(NaN - i0)) = +-0", FUNC(fabs) (__imag__ result), 0.0);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (nan_value, 10.0));
-  check_isnan ("real(ccosh(NaN + i10)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(NaN + i10)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccosh(NaN + i10)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(NaN + i10)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (nan_value, -10.0));
-  check_isnan ("real(ccosh(NaN - i10)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(NaN - i10)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccosh(NaN - i10)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(NaN - i10)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (nan_value, plus_infty));
-  check_isnan ("real(ccosh(NaN + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(NaN + i Inf)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccosh(NaN + i Inf)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(NaN + i Inf)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ccosh) (BUILD_COMPLEX (nan_value, minus_infty));
-  check_isnan ("real(ccosh(NaN - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ccosh(NaN - i Inf)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ccosh(NaN - i Inf)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ccosh(NaN - i Inf)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ccosh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(ccosh(NaN + i NaN)) = NaN", __real__ result);
@@ -2184,18 +2620,26 @@ cacos_test (void)
   check_isinfp ("imag(cacos(NaN - i Inf)) = +Inf", __imag__ result);
 
   result = FUNC(cacos) (BUILD_COMPLEX (10.5, nan_value));
-  check_isnan ("real(cacos(10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(cacos(10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacos(10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacos(10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(cacos) (BUILD_COMPLEX (-10.5, nan_value));
-  check_isnan ("real(cacos(-10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(cacos(-10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacos(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacos(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(cacos) (BUILD_COMPLEX (nan_value, 0.75));
-  check_isnan ("real(cacos(NaN + i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(cacos(NaN + i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacos(NaN + i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacos(NaN + i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(cacos) (BUILD_COMPLEX (-10.5, nan_value));
-  check_isnan ("real(cacos(NaN - i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(cacos(NaN - i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacos(NaN - i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacos(NaN - i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(cacos) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(cacos(NaN + i NaN)) = NaN", __real__ result);
@@ -2304,18 +2748,26 @@ cacosh_test (void)
   check_isnan ("imag(cacosh(NaN - i Inf)) = NaN", __imag__ result);
 
   result = FUNC(cacosh) (BUILD_COMPLEX (10.5, nan_value));
-  check_isnan ("real(cacosh(10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(cacosh(10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacosh(10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacosh(10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(cacosh) (BUILD_COMPLEX (-10.5, nan_value));
-  check_isnan ("real(cacosh(-10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(cacosh(-10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacosh(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacosh(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(cacosh) (BUILD_COMPLEX (nan_value, 0.75));
-  check_isnan ("real(cacosh(NaN + i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(cacosh(NaN + i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacosh(NaN + i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacosh(NaN + i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(cacosh) (BUILD_COMPLEX (-10.5, nan_value));
-  check_isnan ("real(cacosh(NaN - i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(cacosh(NaN - i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(cacosh(NaN - i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(cacosh(NaN - i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(cacosh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(cacosh(NaN + i NaN)) = NaN", __real__ result);
@@ -2429,18 +2881,26 @@ casin_test (void)
 		FUNC(fabs) (__imag__ result));
 
   result = FUNC(casin) (BUILD_COMPLEX (nan_value, 10.5));
-  check_isnan ("real(casin(NaN + i10.5)) = NaN", __real__ result);
-  check_isnan ("imag(casin(NaN + i10.5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casin(NaN + i10.5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casin(NaN + i10.5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(casin) (BUILD_COMPLEX (nan_value, -10.5));
-  check_isnan ("real(casin(NaN - i10.5)) = NaN", __real__ result);
-  check_isnan ("imag(casin(NaN - i10.5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casin(NaN - i10.5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casin(NaN - i10.5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(casin) (BUILD_COMPLEX (0.75, nan_value));
-  check_isnan ("real(casin(0.75 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(casin(0.75 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casin(0.75 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casin(0.75 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(casin) (BUILD_COMPLEX (-0.75, nan_value));
-  check_isnan ("real(casin(-0.75 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(casin(-0.75 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casin(-0.75 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casin(-0.75 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(casin) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(casin(NaN + i NaN)) = NaN", __real__ result);
@@ -2554,18 +3014,26 @@ casinh_test (void)
   check_isnan ("imag(casinh(NaN - i Inf)) = NaN", __imag__ result);
 
   result = FUNC(casinh) (BUILD_COMPLEX (10.5, nan_value));
-  check_isnan ("real(casinh(10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(casinh(10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casinh(10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casinh(10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(casinh) (BUILD_COMPLEX (-10.5, nan_value));
-  check_isnan ("real(casinh(-10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(casinh(-10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casinh(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casinh(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(casinh) (BUILD_COMPLEX (nan_value, 0.75));
-  check_isnan ("real(casinh(NaN + i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(casinh(NaN + i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casinh(NaN + i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casinh(NaN + i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(casinh) (BUILD_COMPLEX (-0.75, nan_value));
-  check_isnan ("real(casinh(NaN - i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(casinh(NaN - i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(casinh(NaN - i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(casinh(NaN - i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(casinh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(casinh(NaN + i NaN)) = NaN", __real__ result);
@@ -2684,18 +3152,26 @@ catan_test (void)
   check ("imag(catan(-Inf + i NaN)) = +-0", FUNC(fabs) (__imag__ result), 0);
 
   result = FUNC(catan) (BUILD_COMPLEX (nan_value, 10.5));
-  check_isnan ("real(catan(NaN + i10.5)) = NaN", __real__ result);
-  check_isnan ("imag(catan(NaN + i10.5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catan(NaN + i10.5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catan(NaN + i10.5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(catan) (BUILD_COMPLEX (nan_value, -10.5));
-  check_isnan ("real(catan(NaN - i10.5)) = NaN", __real__ result);
-  check_isnan ("imag(catan(NaN - i10.5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catan(NaN - i10.5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catan(NaN - i10.5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(catan) (BUILD_COMPLEX (0.75, nan_value));
-  check_isnan ("real(catan(0.75 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(catan(0.75 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catan(0.75 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catan(0.75 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(catan) (BUILD_COMPLEX (-0.75, nan_value));
-  check_isnan ("real(catan(-0.75 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(catan(-0.75 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catan(-0.75 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catan(-0.75 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(catan) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(catan(NaN + i NaN)) = NaN", __real__ result);
@@ -2814,18 +3290,26 @@ catanh_test (void)
   check ("imag(catanh(NaN - i Inf)) = -pi/2", __imag__ result, -M_PI_2);
 
   result = FUNC(catanh) (BUILD_COMPLEX (10.5, nan_value));
-  check_isnan ("real(catanh(10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(catanh(10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catanh(10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catanh(10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(catanh) (BUILD_COMPLEX (-10.5, nan_value));
-  check_isnan ("real(catanh(-10.5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(catanh(-10.5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catanh(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catanh(-10.5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(catanh) (BUILD_COMPLEX (nan_value, 0.75));
-  check_isnan ("real(catanh(NaN + i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(catanh(NaN + i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catanh(NaN + i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catanh(NaN + i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(catanh) (BUILD_COMPLEX (nan_value, -0.75));
-  check_isnan ("real(catanh(NaN - i0.75)) = NaN", __real__ result);
-  check_isnan ("imag(catanh(NaN - i0.75)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(catanh(NaN - i0.75)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(catanh(NaN - i0.75)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(catanh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(catanh(NaN + i NaN)) = NaN", __real__ result);
@@ -2877,29 +3361,45 @@ ctanh_test (void)
   check ("imag(ctanh(-Inf - i1)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(ctanh) (BUILD_COMPLEX (0, plus_infty));
-  check_isnan ("real(ctanh(0 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(0 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(0 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(0 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (2, plus_infty));
-  check_isnan ("real(ctanh(2 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(2 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(2 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(2 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (0, minus_infty));
-  check_isnan ("real(ctanh(0 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(0 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(0 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(0 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (2, minus_infty));
-  check_isnan ("real(ctanh(2 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(2 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(2 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(2 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (minus_zero, plus_infty));
-  check_isnan ("real(ctanh(-0 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(-0 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(-0 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(-0 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (-2, plus_infty));
-  check_isnan ("real(ctanh(-2 + i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(-2 + i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(-2 + i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(-2 + i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (minus_zero, minus_infty));
-  check_isnan ("real(ctanh(-0 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(-0 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(-0 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(-0 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (-2, minus_infty));
-  check_isnan ("real(ctanh(-2 - i Inf)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(-2 - i Inf)) = NaN", __imag__ result);
+  check_isnan_exc ("real(ctanh(-2 - i Inf)) = NaN plus invalid exception",
+		   __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(-2 - i Inf)) = NaN plus invalid exception",
+	       __imag__ result);
 
   result = FUNC(ctanh) (BUILD_COMPLEX (plus_infty, nan_value));
   check ("real(ctanh(+Inf + i NaN)) = 1", __real__ result, 1);
@@ -2916,24 +3416,36 @@ ctanh_test (void)
   check ("imag(ctanh(NaN - i0)) = -0", __imag__ result, minus_zero);
 
   result = FUNC(ctanh) (BUILD_COMPLEX (nan_value, 0.5));
-  check_isnan ("real(ctanh(NaN + i0.5)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(NaN + i0.5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ctanh(NaN + i0.5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(NaN + i0.5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (nan_value, -4.5));
-  check_isnan ("real(ctanh(NaN - i4.5)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(NaN - i4.5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ctanh(NaN - i4.5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(NaN - i4.5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ctanh) (BUILD_COMPLEX (0, nan_value));
-  check_isnan ("real(ctanh(0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ctanh(0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (5, nan_value));
-  check_isnan ("real(ctanh(5 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(5 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ctanh(5 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(5 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (minus_zero, nan_value));
-  check_isnan ("real(ctanh(-0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(-0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ctanh(-0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(-0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(ctanh) (BUILD_COMPLEX (-0.25, nan_value));
-  check_isnan ("real(ctanh(-0.25 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(ctanh(-0.25 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(ctanh(-0.25 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(ctanh(-0.25 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(ctanh) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(ctanh(NaN + i NaN)) = NaN", __real__ result);
@@ -2947,18 +3459,26 @@ clog_test (void)
   __complex__ MATHTYPE result;
 
   result = FUNC(clog) (BUILD_COMPLEX (minus_zero, 0));
-  check_isinfn ("real(clog(-0 + i0)) = -Inf", __real__ result);
-  check ("imag(clog(-0 + i0)) = pi", __imag__ result, M_PI);
+  check_isinfn_exc ("real(clog(-0 + i0)) = -Inf plus divide-by-zero exception",
+		    __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog(-0 + i0)) = pi plus divide-by-zero exception",
+	 __imag__ result, M_PI);
   result = FUNC(clog) (BUILD_COMPLEX (minus_zero, minus_zero));
-  check_isinfn ("real(clog(-0 - i0)) = -Inf", __real__ result);
-  check ("imag(clog(-0 - i0)) = -pi", __imag__ result, -M_PI);
+  check_isinfn_exc ("real(clog(-0 - i0)) = -Inf plus divide-by-zero exception",
+		    __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog(-0 - i0)) = -pi plus divide-by-zero exception",
+	 __imag__ result, -M_PI);
 
   result = FUNC(clog) (BUILD_COMPLEX (0, 0));
-  check_isinfn ("real(clog(0 + i0)) = -Inf", __real__ result);
-  check ("imag(clog(0 + i0)) = 0", __imag__ result, 0);
+  check_isinfn_exc ("real(clog(0 + i0)) = -Inf plus divide-by-zero exception",
+		    __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog(0 + i0)) = 0 plus divide-by-zero exception",
+	 __imag__ result, 0);
   result = FUNC(clog) (BUILD_COMPLEX (0, minus_zero));
-  check_isinfn ("real(clog(0 - i0)) = -Inf", __real__ result);
-  check ("imag(clog(0 - i0)) = -0", __imag__ result, minus_zero);
+  check_isinfn_exc ("real(clog(0 - i0)) = -Inf plus divide-by-zero exception",
+		    __real__ result, DIVIDE_BY_ZERO_EXCEPTION);
+  check ("imag(clog(0 - i0)) = -0 plus divide-by-zero exception",
+	 __imag__ result, minus_zero);
 
   result = FUNC(clog) (BUILD_COMPLEX (minus_infty, plus_infty));
   check_isinfp ("real(clog(-Inf + i Inf)) = +Inf", __real__ result);
@@ -3040,30 +3560,46 @@ clog_test (void)
   check_isnan ("imag(clog(NaN - i Inf)) = NaN", __imag__ result);
 
   result = FUNC(clog) (BUILD_COMPLEX (0, nan_value));
-  check_isnan ("real(clog(0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(clog(0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(clog) (BUILD_COMPLEX (3, nan_value));
-  check_isnan ("real(clog(3 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(clog(3 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(3 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(3 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(clog) (BUILD_COMPLEX (minus_zero, nan_value));
-  check_isnan ("real(clog(-0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(clog(-0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(-0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(-0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(clog) (BUILD_COMPLEX (-3, nan_value));
-  check_isnan ("real(clog(-3 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(clog(-3 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(-3 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(-3 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(clog) (BUILD_COMPLEX (nan_value, 0));
-  check_isnan ("real(clog(NaN + i0)) = NaN", __real__ result);
-  check_isnan ("imag(clog(NaN + i0)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(NaN + i0)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(NaN + i0)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(clog) (BUILD_COMPLEX (nan_value, 5));
-  check_isnan ("real(clog(NaN + i5)) = NaN", __real__ result);
-  check_isnan ("imag(clog(NaN + i5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(NaN + i5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(NaN + i5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(clog) (BUILD_COMPLEX (nan_value, minus_zero));
-  check_isnan ("real(clog(NaN - i0)) = NaN", __real__ result);
-  check_isnan ("imag(clog(NaN - i0)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(NaN - i0)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(NaN - i0)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(clog) (BUILD_COMPLEX (nan_value, -5));
-  check_isnan ("real(clog(NaN - i5)) = NaN", __real__ result);
-  check_isnan ("imag(clog(NaN - i5)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(clog(NaN - i5)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(clog(NaN - i5)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(clog) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(clog(NaN + i NaN)) = NaN", __real__ result);
@@ -3162,30 +3698,46 @@ csqrt_test (void)
   check_isnan ("imag(csqrt(+Inf + i NaN)) = NaN", __imag__ result);
 
   result = FUNC(csqrt) (BUILD_COMPLEX (0, nan_value));
-  check_isnan ("real(csqrt(0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csqrt) (BUILD_COMPLEX (1, nan_value));
-  check_isnan ("real(csqrt(1 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(1 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(1 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(1 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csqrt) (BUILD_COMPLEX (minus_zero, nan_value));
-  check_isnan ("real(csqrt(-0 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(-0 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(-0 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(-0 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csqrt) (BUILD_COMPLEX (-1, nan_value));
-  check_isnan ("real(csqrt(-1 + i NaN)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(-1 + i NaN)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(-1 + i NaN)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(-1 + i NaN)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(csqrt) (BUILD_COMPLEX (nan_value, 0));
-  check_isnan ("real(csqrt(NaN + i0)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(NaN + i0)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(NaN + i0)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(NaN + i0)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csqrt) (BUILD_COMPLEX (nan_value, 8));
-  check_isnan ("real(csqrt(NaN + i8)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(NaN + i8)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(NaN + i8)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(NaN + i8)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csqrt) (BUILD_COMPLEX (nan_value, minus_zero));
-  check_isnan ("real(csqrt(NaN - i0)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(NaN - i0)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(NaN - i0)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(NaN - i0)) = NaN plus maybe invalid exception",
+	       __imag__ result);
   result = FUNC(csqrt) (BUILD_COMPLEX (nan_value, -8));
-  check_isnan ("real(csqrt(NaN - i8)) = NaN", __real__ result);
-  check_isnan ("imag(csqrt(NaN - i8)) = NaN", __imag__ result);
+  check_isnan_maybe_exc ("real(csqrt(NaN - i8)) = NaN plus maybe invalid exception",
+			 __real__ result, FE_INVALID);
+  check_isnan ("imag(csqrt(NaN - i8)) = NaN plus maybe invalid exception",
+	       __imag__ result);
 
   result = FUNC(csqrt) (BUILD_COMPLEX (nan_value, nan_value));
   check_isnan ("real(csqrt(NaN + i NaN)) = NaN", __real__ result);
@@ -3471,6 +4023,9 @@ basic_tests (void)
   (void) &NaN_var;
   (void) &Inf_var;
 
+  /* Clear all exceptions.  The previous computations raised exceptions.  */
+  feclearexcept (FE_ALL_EXCEPT);
+
   check_isinfp ("isinf (inf) == +1", Inf_var);
   check_isinfn ("isinf (-inf) == -1", -Inf_var);
   check_bool ("!isinf (1)", !(FUNC(isinf) (one_var)));
@@ -3540,6 +4095,9 @@ initialize (void)
   (void) &plus_infty;
   (void) &minus_infty;
 
+  /* Clear all exceptions.  From now on we must not get random exceptions.  */
+  feclearexcept (FE_ALL_EXCEPT);
+
   /* Test to make sure we start correctly.  */
   fpstack_test ("end *init*");
 }
@@ -3642,6 +4200,7 @@ main (int argc, char *argv[])
   remquo_test ();
 #endif
   cexp_test ();
+  csin_test ();
   csinh_test ();
   ccos_test ();
   ccosh_test ();
@@ -3671,6 +4230,6 @@ main (int argc, char *argv[])
       printf ("\n%d errors occured.\n", noErrors);
       exit (1);
     }
-  printf ("\n All tests passed sucessfully.\n");
+  printf ("\n All tests passed successfully.\n");
   exit (0);
 }
diff --git a/po/de.po b/po/de.po
index 8df1fa9ed3..86bc35335a 100644
--- a/po/de.po
+++ b/po/de.po
@@ -4,9 +4,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: GNU libc 1.98\n"
-"POT-Creation-Date: 1996-12-03 13:50+0100\n"
-"PO-Revision-Date: 1997-01-01 17:42 MET\n"
+"Project-Id-Version: GNU libc 2.0.3\n"
+"POT-Creation-Date: 1997-03-30 19:08+0200\n"
+"PO-Revision-Date: 1997-04-27 21:16 MET DST\n"
 "Last-Translator: Jochen Hein <jochen.hein@delphi.central.de>\n"
 "Language-Team: German <de@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -27,37 +27,39 @@ msgstr "       rpcinfo -p [ Rechner ]\n"
 
 #: sunrpc/rpcinfo.c:610
 msgid "       rpcinfo [ -n portnum ] -t host prognum [ versnum ]\n"
-msgstr "       rpcinfo [ -n Port-Nummer ] -t Rechner Programm-Nummer [Versions-Nummer]\n"
+msgstr ""
+"       rpcinfo [ -n Port-Nummer ] -t Rechner Programm-Nummer "
+"[Versions-Nummer]\n"
 
 #: sunrpc/rpcinfo.c:517
 msgid "   program vers proto   port\n"
-msgstr "   program vers proto   port\n"
+msgstr "   Program Vers Proto   Port\n"
 
-#: time/zic.c:424
+#: time/zic.c:419
 #, c-format
 msgid " (rule from \"%s\", line %d)"
 msgstr " (Regel aus Datei »%s«, Zeile %d)"
 
-#: locale/programs/ld-collate.c:360 locale/programs/ld-ctype.c:1234
+#: locale/programs/ld-collate.c:363 locale/programs/ld-ctype.c:1242
 msgid " done\n"
-msgstr " Fertig\n"
+msgstr " fertig\n"
 
-#: time/zic.c:421
+#: time/zic.c:416
 #, c-format
 msgid "\"%s\", line %d: %s"
 msgstr "»%s«, Zeile %d: %s"
 
-#: time/zic.c:945
+#: time/zic.c:943
 #, c-format
 msgid "\"Zone %s\" line and -l option are mutually exclusive"
-msgstr "»Zone %s«-Zeile und die Option -l schliessen sich aus"
+msgstr "»Zone %s«-Zeile und die Option »-l« schliessen sich aus"
 
-#: time/zic.c:953
+#: time/zic.c:951
 #, c-format
 msgid "\"Zone %s\" line and -p option are mutually exclusive"
-msgstr "»Zone %s«-Zeile und die Option -p schliessen sich aus"
+msgstr "»Zone %s«-Zeile und die Option »-p« schliessen sich aus"
 
-#: time/zic.c:758
+#: time/zic.c:754
 #, c-format
 msgid "%s in ruleless zone"
 msgstr "%s in einer regellosen Zone"
@@ -77,7 +79,8 @@ msgstr "%s%s%s:%u: %s%sNicht erwarteter Fehler: %s.\n"
 msgid "%s%sUnknown signal %d\n"
 msgstr "%s%sUnbekanntes Signal %d\n"
 
-#: time/zic.c:2139
+# Ob diese Übersetzung so korrekt ist? - jh
+#: time/zic.c:2172
 #, c-format
 msgid "%s: %d did not sign extend correctly\n"
 msgstr "%s: %d Das Vorzeichen der extended-Zahl ist nicht korrekt\n"
@@ -87,169 +90,176 @@ msgstr "%s: %d Das Vorzeichen der extended-Zahl ist nicht korrekt\n"
 msgid "%s: <mb_cur_max> must be greater than <mb_cur_min>\n"
 msgstr "%s: »<mb_cur_max>« muß größer als »<mb_cur_min>« sein\n"
 
-#: time/zic.c:1430
+#: time/zic.c:1443
 #, c-format
 msgid "%s: Can't create %s: %s\n"
 msgstr "%s: Kann »%s« nicht erzeugen: %s\n"
 
-#: time/zic.c:2118
+#: time/zic.c:2150
 #, c-format
 msgid "%s: Can't create directory %s: %s\n"
 msgstr "%s: Kann das Verzeichnis »%s« nicht erzeugen: %s\n"
 
-#: time/zic.c:612
+#: time/zic.c:608
 #, c-format
 msgid "%s: Can't link from %s to %s: %s\n"
 msgstr "%s: Kann nicht von »%s« nach »%s« linken: %s\n"
 
-#: time/zic.c:783
+#: time/zic.c:780
 #, c-format
 msgid "%s: Can't open %s: %s\n"
 msgstr "%s: Kann die Datei »%s« nicht öffnen: %s\n"
 
-#: time/zic.c:851
+#: time/zic.c:1433
+#, c-format
+msgid "%s: Can't remove %s: %s\n"
+msgstr "%s: Kann »%s« nicht löschen: %s\n"
+
+#: time/zic.c:849
 #, c-format
 msgid "%s: Error closing %s: %s\n"
 msgstr "%s: Fehler beim Schliessen der Datei »%s«: %s\n"
 
-#: time/zic.c:845
+#: time/zic.c:842
 #, c-format
 msgid "%s: Error reading %s\n"
 msgstr "%s: Fehler beim Lesen der Datei »%s«\n"
 
-#: time/zic.c:1494
+#: time/zic.c:1507
 #, c-format
 msgid "%s: Error writing %s\n"
 msgstr "%s: Fehler beim Schreiben der Datei »%s«\n"
 
-#: time/zdump.c:258
+#: time/zdump.c:266
 #, c-format
 msgid "%s: Error writing standard output "
 msgstr "%s: Fehler beim Schreiben auf die Standardausgabe "
 
-#: time/zic.c:830
+#: time/zic.c:827
 #, c-format
 msgid "%s: Leap line in non leap seconds file %s\n"
 msgstr "%s: Schalt-Zeile in einer nicht-Schalt-Sekunden-Datei »%s«\n"
 
-#: time/zic.c:362
+#: time/zic.c:357
 #, c-format
 msgid "%s: Memory exhausted: %s\n"
 msgstr "%s: Kein Hauptspeicher mehr verfügbar: %s\n"
 
-#: time/zic.c:527
+#: time/zic.c:522
 #, c-format
 msgid "%s: More than one -L option specified\n"
-msgstr "%s: Mehr als eine -L Option angegeben\n"
+msgstr "%s: Mehr als eine »-L« Option angegeben\n"
 
-#: time/zic.c:487
+#: time/zic.c:482
 #, c-format
 msgid "%s: More than one -d option specified\n"
-msgstr "%s: Mehr als eine -d Option angegeben\n"
+msgstr "%s: Mehr als eine »-d« Option angegeben\n"
 
-#: time/zic.c:497
+#: time/zic.c:492
 #, c-format
 msgid "%s: More than one -l option specified\n"
-msgstr "%s: Mehr als eine -l Option angegeben\n"
+msgstr "%s: Mehr als eine »-l« Option angegeben\n"
 
-#: time/zic.c:507
+#: time/zic.c:502
 #, c-format
 msgid "%s: More than one -p option specified\n"
-msgstr "%s: Mehr als eine -p Option angegeben\n"
+msgstr "%s: Mehr als eine »-p« Option angegeben\n"
 
-#: time/zic.c:517
+#: time/zic.c:512
 #, c-format
 msgid "%s: More than one -y option specified\n"
-msgstr "%s: Mehr als eine -y Option angegeben\n"
+msgstr "%s: Mehr als eine »-y« Option angegeben\n"
 
-#: time/zic.c:1845
+#: time/zic.c:1872
 #, c-format
 msgid "%s: command was '%s', result was %d\n"
 msgstr "%s: Das Kommando war »%s«, das Ergebnis war %d\n"
 
-#: locale/programs/charmap.c:593 locale/programs/locfile.c:878
+#: locale/programs/charmap.c:593 locale/programs/locfile.c:900
 #, c-format
 msgid "%s: error in state machine"
 msgstr "%s: Fehler im (intern verwendeten) endlichen Automaten"
 
-#: posix/getopt.c:687
+#: posix/getopt.c:783
 #, c-format
 msgid "%s: illegal option -- %c\n"
 msgstr "%s: Die Option ist nicht erlaubt -- »%c«\n"
 
-#: posix/getopt.c:690
+#: posix/getopt.c:786
 #, c-format
 msgid "%s: invalid option -- %c\n"
 msgstr "%s: Ungültige option -- »%c«\n"
 
-#: posix/getopt.c:611
+#: posix/getopt.c:707
 #, c-format
 msgid "%s: option `%c%s' doesn't allow an argument\n"
-msgstr "%s: Die Option »%c%s« erlaubt keine Argumente\n"
+msgstr "%s: Die Option »%c%s« erlaubt kein Argument\n"
 
-#: posix/getopt.c:582
+#: posix/getopt.c:678
 #, c-format
 msgid "%s: option `%s' is ambiguous\n"
 msgstr "%s: Die Option »%s« ist nicht eindeutig\n"
 
-#: posix/getopt.c:628 posix/getopt.c:801
+#: posix/getopt.c:724 posix/getopt.c:897
 #, c-format
 msgid "%s: option `%s' requires an argument\n"
 msgstr "%s: Die Option »%s« erfordert ein Argument\n"
 
-#: posix/getopt.c:606
+#: posix/getopt.c:702
 #, c-format
 msgid "%s: option `--%s' doesn't allow an argument\n"
 msgstr "%s: Die Option »--%s« erlaubt kein Argument\n"
 
-#: posix/getopt.c:786
+#: posix/getopt.c:881
 #, c-format
 msgid "%s: option `-W %s' doesn't allow an argument\n"
-msgstr "%s: Die Option »-W %s« erlaubt keine Argumente\n"
+msgstr "%s: Die Option »-W %s« erlaubt kein Argument\n"
 
-#: posix/getopt.c:767
+#: posix/getopt.c:863
 #, c-format
 msgid "%s: option `-W %s' is ambiguous\n"
 msgstr "%s: Die Option »-W %s« ist nicht eindeutig\n"
 
-#: posix/getopt.c:721 posix/getopt.c:850
+#: posix/getopt.c:816 posix/getopt.c:946
 #, c-format
 msgid "%s: option requires an argument -- %c\n"
 msgstr "%s: Diese Option benötigt ein Argument -- »%c«\n"
 
-#: time/zic.c:837 time/zic.c:1248 time/zic.c:1268
+#: time/zic.c:834 time/zic.c:1246 time/zic.c:1266
 #, c-format
 msgid "%s: panic: Invalid l_value %d\n"
-msgstr "%s: Panik: ungültiger l_value %d\n"
+msgstr "%s: Panik: ungültiger »l_value« %d\n"
 
 #: locale/programs/charmap.c:600
 #, c-format
 msgid "%s: premature end of file"
 msgstr "%s: Unerwartetes Ende der Datei"
 
-#: posix/getopt.c:661
+#: posix/getopt.c:757
 #, c-format
 msgid "%s: unrecognized option `%c%s'\n"
 msgstr "%s: Unbekannte Option »%c%s«\n"
 
-#: posix/getopt.c:657
+#: posix/getopt.c:753
 #, c-format
 msgid "%s: unrecognized option `--%s'\n"
 msgstr "%s: Unbekannte Option »--%s«\n"
 
-#: time/zic.c:446
+#: time/zic.c:441
 #, c-format
 msgid ""
-"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d directory ]\n"
+"%s: usage is %s [ -s ] [ -v ] [ -l localtime ] [ -p posixrules ] [ -d "
+"directory ]\n"
 "\t[ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"
 msgstr ""
-"%s: Syntax ist %s [ -s ] [ -v ] [ -l Lokale-Zeit ] [ -p Posix-Regeln ] [ -d Verzeichnis ]\n"
+"%s: Syntax ist %s [ -s ] [ -v ] [ -l Lokale-Zeit ] [ -p Posix-Regeln ] [ -d "
+"Verzeichnis ]\n"
 "\t[ -L Schaltsekunden ] [ -y Jahrestyp ] [ Dateiname ... ]\n"
 
-#: time/zdump.c:165
+#: time/zdump.c:174
 #, c-format
 msgid "%s: usage is %s [ -v ] [ -c cutoff ] zonename ...\n"
-msgstr "%s: Syntax %s [ -v ] [ -c cutoff ] Zonen-Name ...\n"
+msgstr "%s: Syntax: %s [ -v ] [ -c cutoff ] Zonen-Name ...\n"
 
 #: sunrpc/clnt_perr.c:125
 #, c-format
@@ -260,29 +270,30 @@ msgstr "(unbekannter Fehler bei der Authentifizierung - %d)"
 msgid "(unknown)"
 msgstr "Unbekanntes Signal"
 
-#: catgets/gencat.c:253
+#: catgets/gencat.c:254
 msgid "*standard input*"
 msgstr "*Standard-Eingabe*"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:766
 msgid ".lib section in a.out corrupted"
-msgstr "».lib«-Sektion in der a.out-Datei ist beschädigt"
+msgstr "».lib«-Sektion in der »a.out«-Datei ist beschädigt"
 
-#: inet/rcmd.c:358
+#: inet/rcmd.c:363
 msgid ".rhosts fstat failed"
 msgstr "Fehler beim Holen des Status der Datei ».rhosts«"
 
-#: inet/rcmd.c:354
+#: inet/rcmd.c:359
 msgid ".rhosts lstat failed"
 msgstr "Fehler beim Holen des Link-Status von ».rhosts«"
 
-#: inet/rcmd.c:356
+#: inet/rcmd.c:361
 msgid ".rhosts not regular file"
 msgstr "».rhosts« ist keine reguläre Datei"
 
-#: inet/rcmd.c:362
+#: inet/rcmd.c:367
 msgid ".rhosts writeable by other than owner"
-msgstr "».rhosts« ist auch für andere Benutzer als den Dateieigentümer beschreibbar"
+msgstr ""
+"».rhosts« ist auch für andere Benutzer als den Dateieigentümer beschreibbar"
 
 #: sunrpc/clnt_perr.c:112 sunrpc/clnt_perr.c:133
 #, c-format
@@ -293,12 +304,12 @@ msgstr "; untere Version = %lu, obere Version = %lu"
 msgid "; why = "
 msgstr "; Ursache = "
 
-#: locale/programs/ld-ctype.c:326
+#: locale/programs/ld-ctype.c:331
 #, c-format
 msgid "<SP> character must not be in class `%s'"
 msgstr "Das Zeichen »<SP>« darf nicht in der Klasse »%s« enthalten sein"
 
-#: locale/programs/ld-ctype.c:317
+#: locale/programs/ld-ctype.c:321
 #, c-format
 msgid "<SP> character not in class `%s'"
 msgstr "Das Zeichen »<SP>« ist nicht in der Klasse »%s« enthalten"
@@ -310,6 +321,10 @@ msgstr "Das Zeichen »<SP>« ist nicht in der Klasse »%s« enthalten"
 msgid "?"
 msgstr "?"
 
+#: sysdeps/unix/sysv/linux/siglist.h:27
+msgid "Aborted"
+msgstr "Abgebrochen"
+
 #: stdio-common/../sysdeps/gnu/errlist.c:762
 msgid "Accessing a corrupted shared library"
 msgstr "Zugriff auf eine fehlerhafte oder defekte Shared-Library"
@@ -325,10 +340,13 @@ msgstr "Die Adresse wird bereits verwendet"
 msgid "Address family not supported by protocol"
 msgstr "Die Adress-Familie wird von der Protokoll-Familie nicht unterstützt"
 
+# Diese Übersetzung macht eigentlich keinen Sinn - jh
 #: stdio-common/../sysdeps/gnu/errlist.c:730
 msgid "Advertise error"
 msgstr "Fehler bei der Werbung"
 
+#: stdio-common/../sysdeps/unix/siglist.c:43
+#: sysdeps/unix/sysv/linux/siglist.h:33
 msgid "Alarm clock"
 msgstr "Der Wecker klingelt"
 
@@ -374,6 +392,11 @@ msgstr "Ungültiges Font-Datei-Format"
 msgid "Bad message"
 msgstr "Ungültige Nachricht"
 
+#: stdio-common/../sysdeps/unix/siglist.c:41
+#: sysdeps/unix/sysv/linux/siglist.h:56
+msgid "Bad system call"
+msgstr "Ungültiger Betriebssystemaufruf"
+
 #. TRANS A file that isn't a block special file was given in a situation that
 #. TRANS requires one.  For example, trying to mount an ordinary file as a file
 #. TRANS system in Unix gives this error.
@@ -381,7 +404,7 @@ msgstr "Ungültige Nachricht"
 msgid "Block device required"
 msgstr "Es ist ein Block-Device notwendig"
 
-#: sunrpc/pmap_rmt.c:337
+#: sunrpc/pmap_rmt.c:338
 msgid "Broadcast select problem"
 msgstr "Select-Problem beim Broadcast"
 
@@ -391,12 +414,18 @@ msgstr "Select-Problem beim Broadcast"
 #. TRANS or blocked.  Thus, your program will never actually see @code{EPIPE}
 #. TRANS unless it has handled or blocked @code{SIGPIPE}.
 #: stdio-common/../sysdeps/gnu/errlist.c:222
+#: stdio-common/../sysdeps/unix/siglist.c:42
+#: sysdeps/unix/sysv/linux/siglist.h:32
 msgid "Broken pipe"
 msgstr "Datenübergabe unterbrochen (broken pipe)"
 
+# Ungültige Adressierung? - jh
+#: stdio-common/../sysdeps/unix/siglist.c:39
+#: sysdeps/unix/sysv/linux/siglist.h:30
 msgid "Bus error"
 msgstr "Bus-Zugriffsfehler"
 
+#: sysdeps/unix/sysv/linux/siglist.h:43
 msgid "CPU time limit exceeded"
 msgstr "Rechenzeitbegrenzung überschritten"
 
@@ -404,19 +433,19 @@ msgstr "Rechenzeitbegrenzung überschritten"
 msgid "Can not access a needed shared library"
 msgstr "Auf eine benötigte Shared-Library kann nicht zugegriffen werden"
 
-#: nis/ypclnt.c:637
+#: nis/ypclnt.c:695
 msgid "Can't bind to server which serves this domain"
 msgstr "Kein Server für diese NIS-Domain gefunden"
 
-#: nis/ypclnt.c:649
+#: nis/ypclnt.c:707
 msgid "Can't communicate with portmapper"
 msgstr "Keine Kommunikation mit dem Portmapper möglich"
 
-#: nis/ypclnt.c:651
+#: nis/ypclnt.c:709
 msgid "Can't communicate with ypbind"
 msgstr "Keine Kommunikation mit »ypbind« möglich"
 
-#: nis/ypclnt.c:653
+#: nis/ypclnt.c:711
 msgid "Can't communicate with ypserv"
 msgstr "Keine Kommunikation mit »ypserv« möglich"
 
@@ -441,7 +470,7 @@ msgstr "Kann den Socket für den Broadcast-RPC nicht erstellen"
 msgid "Cannot exec a shared library directly"
 msgstr "Eine Shared-Library kann nicht direkt ausgeführt werden"
 
-#: sunrpc/pmap_rmt.c:349
+#: sunrpc/pmap_rmt.c:350
 msgid "Cannot receive reply to broadcast"
 msgstr "Kann die Antwort auf den Broadcast nicht empfangen"
 
@@ -466,6 +495,8 @@ msgstr "Kann die Option »SO_BROADCAST« nicht beim Socket setzen"
 msgid "Channel number out of range"
 msgstr "Das numerische Ergebnis ist außerhalb des gültigen Bereiches"
 
+#: stdio-common/../sysdeps/unix/siglist.c:49
+#: sysdeps/unix/sysv/linux/siglist.h:39
 msgid "Child exited"
 msgstr "Der Kind-Prozeß ist beendet"
 
@@ -475,20 +506,24 @@ msgstr "Die Bestätigung des Clients ist zu unsicher"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:738
 msgid "Communication error on send"
-msgstr "Fehler bei der Authentifizierung"
+msgstr "Kommunikationsfehler beim Senden"
 
 #. TRANS Go home and have a glass of warm, dairy-fresh milk.
 #: stdio-common/../sysdeps/gnu/errlist.c:601
 msgid "Computer bought the farm"
 msgstr "Der Computer hat den Bauernhof erworben"
 
-#: locale/programs/ld-ctype.c:1197
+#: locale/programs/ld-ctype.c:1204
 msgid "Computing table size for character classes might take a while..."
-msgstr "Berechnung der Größe der Zeichentabelle: Dies kann einige Zeit dauern"
+msgstr ""
+"Berechnung der Größe der Tabelle der Zeichenklassen: Dies kann einige Zeit "
+"dauern..."
 
-#: locale/programs/ld-collate.c:327
+#: locale/programs/ld-collate.c:329
 msgid "Computing table size for collation information might take a while..."
-msgstr "Berechnung der Größe der Zeichentabelle: Dies kann einige Zeit dauern"
+msgstr ""
+"Berechnung der Größe der Tabelle der Sortierinformationen: Dies kann einige "
+"Zeit dauern..."
 
 #. TRANS A remote host refused to allow the network connection (typically because
 #. TRANS it is not running the requested service).
@@ -507,13 +542,15 @@ msgstr "Die Verbindung wurde vom Kommunikationspartner zurückgesetzt"
 #. TRANS the timeout period.
 #: stdio-common/../sysdeps/gnu/errlist.c:433
 msgid "Connection timed out"
-msgstr "Die Wartezeit beim Verbindungsaufbau ist abgelaufen"
+msgstr "Die Wartezeit für die Verbindung ist abgelaufen"
 
+#: stdio-common/../sysdeps/unix/siglist.c:48
+#: sysdeps/unix/sysv/linux/siglist.h:38
 msgid "Continued"
 msgstr "Fortgesetzt"
 
 #: catgets/gencat.c:169 db/makedb.c:120 locale/programs/locale.c:187
-#: locale/programs/localedef.c:177
+#: locale/programs/localedef.c:180
 #, c-format
 msgid ""
 "Copyright (C) %s Free Software Foundation, Inc.\n"
@@ -521,11 +558,16 @@ msgid ""
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
 msgstr ""
 "Copyright © %s Free Software Foundation, Inc.\n"
-"Dies ist freie Software; in den Quellen befinden sich die Lizenzbedingungen.\n"
+"Dies ist freie Software; in den Quellen befinden sich die "
+"Lizenzbedingungen.\n"
 "Es gibt KEINERLEI Garantie; nicht einmal für die TAUGLICHKEIT oder\n"
 "VERWENDBARKEIT FÜR EINEN ANGEGEBENEN ZWECK.\n"
 
-#: nis/ypclnt.c:663
+#: stdio-common/../sysdeps/unix/siglist.c:53
+msgid "Cputime limit exceeded"
+msgstr "Rechenzeitbegrenzung überschritten"
+
+#: nis/ypclnt.c:721
 msgid "Database is busy"
 msgstr "Die Databank ist belegt"
 
@@ -538,7 +580,7 @@ msgstr "Es ist eine Zieladresse notwendig"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:638
 msgid "Device not a stream"
-msgstr "Das Gerät ist nicht konfiguriert"
+msgstr "Das Gerät ist kein Stream"
 
 #. TRANS No such device or address.  The system tried to use the device
 #. TRANS represented by a file you specified, and it couldn't find the device.
@@ -554,7 +596,7 @@ msgstr "Das Gerät ist nicht konfiguriert"
 #. TRANS mounted filesystem, you get this error.
 #: stdio-common/../sysdeps/gnu/errlist.c:116
 msgid "Device or resource busy"
-msgstr "Das Gerät ist bereits belegt"
+msgstr "Das Gerät oder die Resource ist belegt"
 
 #. TRANS Directory not empty, where an empty directory was expected.  Typically,
 #. TRANS this error occurs when you are trying to delete a directory.
@@ -567,9 +609,14 @@ msgstr "Das Verzeichnis ist nicht leer"
 msgid "Disc quota exceeded"
 msgstr "Der zugewiesene Plattenplatz (Quota) ist überschritten"
 
-#: nis/ypclnt.c:709
+#: nis/ypclnt.c:767
 msgid "Domain not bound"
-msgstr "Die Domain wurde nicht gefunden"
+msgstr "Die Domain wurde nicht zugewiesen"
+
+#: stdio-common/../sysdeps/unix/siglist.c:36
+#: sysdeps/unix/sysv/linux/siglist.h:53
+msgid "EMT trap"
+msgstr "EMT-Trap"
 
 #: sunrpc/clnt_perr.c:254
 #, c-format
@@ -594,9 +641,10 @@ msgstr "Umsteigebahnhof ist überfüllt"
 msgid "Exec format error"
 msgstr "Fehler im Format der Programmdatei"
 
-#: locale/programs/localedef.c:213
+#: locale/programs/localedef.c:216
 msgid "FATAL: system does not define `_POSIX2_LOCALEDEF'"
-msgstr "Fataler Fehler: Das System definiert das Symbol »_POSIX2_LOCALEDEF« nicht"
+msgstr ""
+"Fataler Fehler: Das System definiert das Symbol »_POSIX2_LOCALEDEF« nicht"
 
 #: sunrpc/clnt_perr.c:290
 msgid "Failed (unspecified error)"
@@ -623,14 +671,21 @@ msgstr "Verklemmung beim Datei-Locking"
 msgid "File name too long"
 msgstr "Der Dateiname ist zu lang"
 
+#: sysdeps/unix/sysv/linux/siglist.h:44
 msgid "File size limit exceeded"
-msgstr "Die maximale Länge eines Dateinamens ist überschritten"
+msgstr "Die maximale Dateigröße ist überschritten"
 
 #. TRANS File too big; the size of a file would be larger than allowed by the system.
 #: stdio-common/../sysdeps/gnu/errlist.c:190
 msgid "File too large"
 msgstr "Die Datei ist zu groß"
 
+#: stdio-common/../sysdeps/unix/siglist.c:54
+msgid "Filesize limit exceeded"
+msgstr "Die maximale Dateigröße ist überschritten"
+
+#: stdio-common/../sysdeps/unix/siglist.c:37
+#: sysdeps/unix/sysv/linux/siglist.h:28
 msgid "Floating point exception"
 msgstr "Gleitkomma-Ausnahme"
 
@@ -646,6 +701,8 @@ msgstr "Die angeforderte Funktion ist nicht implementiert"
 msgid "Gratuitous error"
 msgstr "Irgendein Fehler"
 
+#: stdio-common/../sysdeps/unix/siglist.c:30
+#: sysdeps/unix/sysv/linux/siglist.h:22
 msgid "Hangup"
 msgstr "Aufgelegt"
 
@@ -658,9 +715,12 @@ msgstr "Der Rechner ist nicht aktiv"
 msgid "Host name lookup failure"
 msgstr "Fehler beim Auflösen des Hostnamens"
 
+#: stdio-common/../sysdeps/unix/siglist.c:52
+#: sysdeps/unix/sysv/linux/siglist.h:42
 msgid "I/O possible"
 msgstr "Ein-/Ausgabe ist möglich"
 
+#: stdio-common/../sysdeps/unix/siglist.c:35
 msgid "IOT trap"
 msgstr "Ein-/Ausgabe-Trap (IOT)"
 
@@ -668,9 +728,14 @@ msgstr "Ein-/Ausgabe-Trap (IOT)"
 msgid "Identifier removed"
 msgstr "Bezeichner wurde entfernt"
 
+#: sysdeps/unix/sysv/linux/siglist.h:25
 msgid "Illegal Instruction"
 msgstr "Ungültiger Maschinenbefehl"
 
+#: stdio-common/../sysdeps/unix/siglist.c:33
+msgid "Illegal instruction"
+msgstr "Ungültiger Maschinenbefehl"
+
 #. TRANS Invalid seek operation (such as on a pipe).
 #: stdio-common/../sysdeps/gnu/errlist.c:201
 msgid "Illegal seek"
@@ -701,23 +766,29 @@ msgstr "Unpassender IOCTL (I/O-Control) für das Gerät"
 msgid "Inappropriate operation for background process"
 msgstr "Unpassende Operation für den Hintergrundprozeß"
 
+#: sysdeps/unix/sysv/linux/siglist.h:62
+msgid "Information request"
+msgstr "Informationsanfrage"
+
 #. TRANS Input/output error; usually used for physical read or write errors.
 #: stdio-common/../sysdeps/gnu/errlist.c:40
 msgid "Input/output error"
 msgstr "Eingabe-/Ausgabe-Fehler"
 
-#: nis/ypclnt.c:643
+#: nis/ypclnt.c:701
 msgid "Internal NIS error"
 msgstr "Interner NIS-Fehler"
 
-#: nis/ypclnt.c:707
+#: nis/ypclnt.c:765
 msgid "Internal ypbind error"
 msgstr "Interner Fehler in »ypbind«"
 
+#: stdio-common/../sysdeps/unix/siglist.c:31
+#: sysdeps/unix/sysv/linux/siglist.h:23
 msgid "Interrupt"
 msgstr "Unterbrechung"
 
-#. TRANS Interrupted function call; an asynchronous signal occured and prevented
+#. TRANS Interrupted function call; an asynchronous signal occurred and prevented
 #. TRANS completion of the call.  When this happens, you should try the call
 #. TRANS again.
 #. TRANS
@@ -726,11 +797,11 @@ msgstr "Unterbrechung"
 #. TRANS Primitives}.
 #: stdio-common/../sysdeps/gnu/errlist.c:35
 msgid "Interrupted system call"
-msgstr "Unterbrechung während Betriebssystemaufruf"
+msgstr "Unterbrechung während des Betriebssystemaufrufs"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:654
 msgid "Interrupted system call should be restarted"
-msgstr "Unterbrechung während Betriebssystemaufruf"
+msgstr "Der unterbrochene Betriebssystemaufruf sollte neu gestartet werden"
 
 #. TRANS Invalid argument.  This is used to indicate various kinds of problems
 #. TRANS with passing the wrong argument to a library function.
@@ -738,11 +809,11 @@ msgstr "Unterbrechung während Betriebssystemaufruf"
 msgid "Invalid argument"
 msgstr "Das Argument ist ungültig"
 
-#: posix/regex.c:946
+#: posix/regex.c:960
 msgid "Invalid back reference"
 msgstr "Ungültiger Verweis zurück"
 
-#: posix/regex.c:944
+#: posix/regex.c:958
 msgid "Invalid character class name"
 msgstr "Ungültiger Name für eine Zeichenklasse"
 
@@ -754,11 +825,11 @@ msgstr "Die Bestätigung des Clients ist ungültig"
 msgid "Invalid client verifier"
 msgstr "Ungültige Überprüfung des Clients"
 
-#: posix/regex.c:943
+#: posix/regex.c:957
 msgid "Invalid collation character"
 msgstr "Ungültiges Sortierzeichen"
 
-#: posix/regex.c:950
+#: posix/regex.c:964
 msgid "Invalid content of \\{\\}"
 msgstr "Ungültiger Inhalt von »\\{\\}«"
 
@@ -771,33 +842,33 @@ msgstr "Ungültiger Link über Gerätegrenzen hinweg"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:690
 msgid "Invalid exchange"
-msgstr "Das Ende des angegebenen Intervalls ist nicht gültig"
+msgstr "Ungültiger Austausch"
 
 #. TRANS While decoding a multibyte character the function came along an invalid
 #. TRANS or an incomplete sequence of bytes or the given wide character is invalid.
 #: stdio-common/../sysdeps/gnu/errlist.c:567
 msgid "Invalid or incomplete multibyte or wide character"
-msgstr "Ungültiges Sortierzeichen"
+msgstr "Ungültiges oder unvollständiges Multi-Byte oder Wide-Zeichen"
 
-#: posix/regex.c:953
+#: posix/regex.c:967
 msgid "Invalid preceding regular expression"
 msgstr "Der vorherige reguläre Ausdruck ist nicht korrekt."
 
-#: posix/regex.c:951
+#: posix/regex.c:965
 msgid "Invalid range end"
 msgstr "Das Ende des angegebenen Intervalls ist nicht gültig"
 
-#: posix/regex.c:942
+#: posix/regex.c:956
 msgid "Invalid regular expression"
 msgstr "Ungültiger regulärer Ausdruck"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:706
 msgid "Invalid request code"
-msgstr "Das Argument ist ungültig"
+msgstr "Ungültiger Aufruf-Code"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:694
 msgid "Invalid request descriptor"
-msgstr "Ungültiger Datei-Deskriptor"
+msgstr "Ungültiger Aufruf-Deskriptor"
 
 #: sunrpc/clnt_perr.c:288
 msgid "Invalid server verifier"
@@ -805,7 +876,7 @@ msgstr "Ungültige Überprüfung des Servers"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:710
 msgid "Invalid slot"
-msgstr "Das Argument ist ungültig"
+msgstr "Ungültiger Slot"
 
 #. TRANS File is a directory; you cannot open a directory for writing,
 #. TRANS or create or remove hard links to it.
@@ -815,8 +886,10 @@ msgstr "Ist ein Verzeichnis"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:794
 msgid "Is a named type file"
-msgstr "Ist eine 'named type file'"
+msgstr "Ist eine »named type file«"
 
+#: stdio-common/../sysdeps/unix/siglist.c:38
+#: sysdeps/unix/sysv/linux/siglist.h:29
 msgid "Killed"
 msgstr "Getötet"
 
@@ -826,7 +899,7 @@ msgstr "Level 2 angehalten"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:662
 msgid "Level 2 not synchronized"
-msgstr "Das Gerät ist nicht konfiguriert"
+msgstr "Level 2 ist nicht synchronisiert"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:666
 msgid "Level 3 halted"
@@ -842,13 +915,13 @@ msgstr "Der Link wurde beschädigt"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:674
 msgid "Link number out of range"
-msgstr "Das numerische Ergebnis ist außerhalb des gültigen Bereiches"
+msgstr "Die Link-Nummer ist außerhalb des gültigen Bereiches"
 
-#: nis/ypclnt.c:655
+#: nis/ypclnt.c:713
 msgid "Local domain name not set"
 msgstr "Der lokale Domain-Name ist nicht eingetragen"
 
-#: nis/ypclnt.c:645
+#: nis/ypclnt.c:703
 msgid "Local resource allocation failure"
 msgstr "Lokaler Fehler bei der Resourcen-Beschaffung"
 
@@ -856,7 +929,7 @@ msgstr "Lokaler Fehler bei der Resourcen-Beschaffung"
 msgid "Machine is not on the network"
 msgstr "Die Maschine ist nicht an das Netzwerk angeschlossen"
 
-#: posix/regex.c:952
+#: posix/regex.c:966
 msgid "Memory exhausted"
 msgstr "Kein Hauptspeicher mehr verfügbar"
 
@@ -868,13 +941,14 @@ msgstr "Die Nachricht ist zu lang"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:618
 msgid "Multihop attempted"
-msgstr "Ein 'Multihop' wurde versucht"
+msgstr "Ein »Multihop« wurde versucht"
 
-#: nis/ypclnt.c:659
+#: nis/ypclnt.c:717
 msgid "NIS client/server version mismatch - can't supply service"
-msgstr "NIS Client/Server Versionen passen nicht zusammen - kein Service möglich"
+msgstr ""
+"NIS Client/Server Versionen passen nicht zusammen - kein Service möglich"
 
-#: nis/ypclnt.c:657
+#: nis/ypclnt.c:715
 msgid "NIS map data base is bad"
 msgstr "Die Datenbank mit der NIS-Map ist ungültig"
 
@@ -931,11 +1005,11 @@ msgstr "Kein Hauptspeicher für den Puffer verfügbar"
 #. TRANS to manipulate.
 #: stdio-common/../sysdeps/gnu/errlist.c:77
 msgid "No child processes"
-msgstr "Kein Kind-Prozeß"
+msgstr "Keine Kind-Prozesse"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:622
 msgid "No data available"
-msgstr "Keine Sperren verfügbar"
+msgstr "Keine Daten verfügbar"
 
 #. TRANS No locks available.  This is used by the file locking facilities; see
 #. TRANS @ref{File Locks}.  This error is never generated by the GNU system, but
@@ -945,7 +1019,7 @@ msgstr "Keine Sperren verfügbar"
 msgid "No locks available"
 msgstr "Keine Sperren verfügbar"
 
-#: posix/regex.c:941
+#: posix/regex.c:955
 msgid "No match"
 msgstr "Keine Übereinstimmung gefunden"
 
@@ -953,11 +1027,11 @@ msgstr "Keine Übereinstimmung gefunden"
 msgid "No message of desired type"
 msgstr "Keine Nachricht des gewünschten Typs"
 
-#: nis/ypclnt.c:647
+#: nis/ypclnt.c:705
 msgid "No more records in map database"
 msgstr "Keine weiteren Sätze in der Map-Datenbank"
 
-#: posix/regex.c:5204
+#: posix/regex.c:5324
 msgid "No previous regular expression"
 msgstr "Es wurde bisher noch kein regulärer Ausdruck definiert"
 
@@ -983,11 +1057,11 @@ msgstr "Auf dem Gerät ist kein Speicherplatz mehr verfügbar"
 msgid "No such file or directory"
 msgstr "Datei oder Verzeichnis nicht gefunden"
 
-#: nis/ypclnt.c:641
+#: nis/ypclnt.c:699
 msgid "No such key in map"
 msgstr "Kein passender Schlüssel in der Map"
 
-#: nis/ypclnt.c:639
+#: nis/ypclnt.c:697
 msgid "No such map in server's domain"
 msgstr "Keine passende Map in der Domain des Servers"
 
@@ -998,7 +1072,7 @@ msgstr "Kein passender Prozeß gefunden"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:786
 msgid "Not a XENIX named type file"
-msgstr "Keine XENIX 'named type' Datei"
+msgstr "Keine XENIX »named type« Datei"
 
 #. TRANS A file that isn't a directory was specified when a directory is required.
 #: stdio-common/../sysdeps/gnu/errlist.c:140
@@ -1025,7 +1099,7 @@ msgstr "Das numerische Ergebnis ist außerhalb des gültigen Bereiches"
 msgid "Object is remote"
 msgstr "Das Objekt ist remote"
 
-#: time/zic.c:1939
+#: time/zic.c:1966
 msgid "Odd number of quotation marks"
 msgstr "Ungerade Anzahl von Anführungszeichen"
 
@@ -1055,7 +1129,7 @@ msgstr "Die Operation wird nicht unterstützt"
 #. TRANS particular sort of device.
 #: stdio-common/../sysdeps/gnu/errlist.c:135
 msgid "Operation not supported by device"
-msgstr "Die Operation wird von dem Gerät nicht unterstützt"
+msgstr "Die Operation wird von diesem Gerät nicht unterstützt"
 
 #. TRANS An operation that cannot complete immediately was initiated on an object
 #. TRANS that has non-blocking mode selected.  Some functions that must always
@@ -1087,17 +1161,20 @@ msgid "Package not installed"
 msgstr "Das Zusatzpacket ist nicht installiert"
 
 #. TRANS Permission denied; the file permissions do not allow the attempted operation.
-#: nis/ypclnt.c:661 stdio-common/../sysdeps/gnu/errlist.c:96
+#: nis/ypclnt.c:719 stdio-common/../sysdeps/gnu/errlist.c:96
 msgid "Permission denied"
 msgstr "Keine Berechtigung"
 
+#: sysdeps/unix/sysv/linux/siglist.h:64
 msgid "Power failure"
 msgstr "Fehler in der Stromversorgung"
 
-#: posix/regex.c:954
+#: posix/regex.c:968
 msgid "Premature end of regular expression"
 msgstr "Unerwartetes Ende des regulären Ausdruckes"
 
+#: stdio-common/../sysdeps/unix/siglist.c:56
+#: sysdeps/unix/sysv/linux/siglist.h:46
 msgid "Profiling timer expired"
 msgstr "Zeitnehmer zur Laufzeitbestimmung ist abgelaufen"
 
@@ -1107,7 +1184,7 @@ msgstr "Das Protokoll ist nicht verfügbar"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:646
 msgid "Protocol error"
-msgstr "Fehler des Präprozessors"
+msgstr "Protokoll-Fehler"
 
 #. TRANS The socket communications protocol family you requested is not supported.
 #: stdio-common/../sysdeps/gnu/errlist.c:343
@@ -1132,6 +1209,8 @@ msgstr "Das Protokoll wird nicht unterstützt"
 msgid "Protocol wrong type for socket"
 msgstr "Das Protokoll paßt nicht zu dem Socket"
 
+#: stdio-common/../sysdeps/unix/siglist.c:32
+#: sysdeps/unix/sysv/linux/siglist.h:24
 msgid "Quit"
 msgstr "Verlassen"
 
@@ -1144,9 +1223,9 @@ msgstr "RFS-spezifischer Fehler"
 msgid "RPC bad procedure for program"
 msgstr "RPC: ungültige Prozedur für das Programm"
 
-#: nis/ypclnt.c:635
+#: nis/ypclnt.c:693
 msgid "RPC failure on NIS operation"
-msgstr "RPC Fehler bei einer NIS-Operation"
+msgstr "RPC: Fehler bei einer NIS-Operation"
 
 #. TRANS ???
 #: stdio-common/../sysdeps/gnu/errlist.c:517
@@ -1156,7 +1235,7 @@ msgstr "RPC: Programm nicht verfügbar"
 #. TRANS ???
 #: stdio-common/../sysdeps/gnu/errlist.c:522
 msgid "RPC program version wrong"
-msgstr "RPC: Programm-Version nicht passend"
+msgstr "RPC: Die Programm-Version ist falsch"
 
 #. TRANS ???
 #: stdio-common/../sysdeps/gnu/errlist.c:507
@@ -1253,13 +1332,13 @@ msgstr "»RTLD_NEXT« wird in Code verwendet, der nicht dynamisch geladen ist"
 msgid "Read-only file system"
 msgstr "Das Dateisystem ist nur lesbar"
 
-#: posix/regex.c:955
+#: posix/regex.c:969
 msgid "Regular expression too big"
 msgstr "Der reguläre Ausdruck ist zu groß"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:798
 msgid "Remote I/O error"
-msgstr "RPC: Ein-/Ausgabe-Fehler des entfernten Systems"
+msgstr "Ein-/Ausgabe-Fehler des entfernten Systems"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:754
 msgid "Remote address changed"
@@ -1270,17 +1349,17 @@ msgid "Remove password or make file unreadable by others."
 msgstr "Das Paßwort löschen oder die Datei für andere nicht lesbar anlegen."
 
 #: catgets/gencat.c:224 db/makedb.c:227 locale/programs/locale.c:257
-#: locale/programs/localedef.c:408
-msgid "Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"
-msgstr "Fehler bitte an <bug-glibc@prep.ai.mit.edu> melden.\n"
+#: locale/programs/localedef.c:412
+msgid "Report bugs using the `glibcbug' script to <bugs@gnu.ai.mit.edu>.\n"
+msgstr "Fehler bitte mit dem »glibcbug«-Skript an <bug-glibc@prep.ai.mit.edu> melden.\n"
 
-#: nis/ypclnt.c:633
+#: nis/ypclnt.c:691
 msgid "Request arguments bad"
 msgstr "Die Request-Argumente sind ungültig"
 
 #: resolv/herror.c:73
 msgid "Resolver Error 0 (no error)"
-msgstr "Fehler des Resolvers 0 (Kein Fehler)"
+msgstr "Fehler 0 des Resolvers (Kein Fehler)"
 
 #: resolv/herror.c:117
 msgid "Resolver internal error"
@@ -1294,6 +1373,10 @@ msgstr "Interner Fehler des Resolvers"
 msgid "Resource deadlock avoided"
 msgstr "Verklemmung beim Zugriff auf eine Resource vermieden"
 
+#: stdio-common/../sysdeps/unix/siglist.c:58
+msgid "Resource lost"
+msgstr "Die Resource ist verlorengegangen"
+
 #. TRANS Resource temporarily unavailable; the call might work if you try again
 #. TRANS later.  The macro @code{EWOULDBLOCK} is another name for @code{EAGAIN};
 #. TRANS they are always the same in the GNU C library.
@@ -1325,8 +1408,10 @@ msgstr "Verklemmung beim Zugriff auf eine Resource vermieden"
 #. TRANS @end itemize
 #: stdio-common/../sysdeps/gnu/errlist.c:267
 msgid "Resource temporarily unavailable"
-msgstr "Das Programm ist zur Zeit nicht verfügbar"
+msgstr "Die Resource ist zur Zeit nicht verfügbar"
 
+#: stdio-common/../sysdeps/unix/siglist.c:40
+#: sysdeps/unix/sysv/linux/siglist.h:31
 msgid "Segmentation fault"
 msgstr "Speicherzugriffsfehler"
 
@@ -1338,6 +1423,10 @@ msgstr "Der Server hat die Bestätigung zurückgewiesen"
 msgid "Server rejected verifier"
 msgstr "Der Server hat die Überprüfung zurückgewiesen"
 
+#: stdio-common/../sysdeps/unix/siglist.c:29
+msgid "Signal 0"
+msgstr "Signal 0"
+
 #. TRANS A file that isn't a socket was specified when a socket is required.
 #: stdio-common/../sysdeps/gnu/errlist.c:299
 msgid "Socket operation on non-socket"
@@ -1357,43 +1446,57 @@ msgstr "Das Programm verursachte den Abbruch der Verbindung"
 msgid "Srmount error"
 msgstr "»Srmount«-Fehler"
 
+#: sysdeps/unix/sysv/linux/siglist.h:59
+msgid "Stack fault"
+msgstr "Stack-Fehler"
+
 #. TRANS Stale NFS file handle.  This indicates an internal confusion in the NFS
 #. TRANS system which is due to file system rearrangements on the server host.
 #. TRANS Repairing this condition usually requires unmounting and remounting
 #. TRANS the NFS file system on the local host.
 #: stdio-common/../sysdeps/gnu/errlist.c:494
 msgid "Stale NFS file handle"
-msgstr "Ungültige NFS-Dateizugriffsnummer"
+msgstr "Veraltete NFS-Dateizugriffsnummer"
 
+#: stdio-common/../sysdeps/unix/siglist.c:47
+#: sysdeps/unix/sysv/linux/siglist.h:37
 msgid "Stopped"
 msgstr "Angehalten"
 
+#: stdio-common/../sysdeps/unix/siglist.c:46
+#: sysdeps/unix/sysv/linux/siglist.h:36
 msgid "Stopped (signal)"
 msgstr "Angehalten (Signal)"
 
+#: stdio-common/../sysdeps/unix/siglist.c:50
+#: sysdeps/unix/sysv/linux/siglist.h:40
 msgid "Stopped (tty input)"
 msgstr "Angehalten (tty-Eingabe)"
 
+#: stdio-common/../sysdeps/unix/siglist.c:51
+#: sysdeps/unix/sysv/linux/siglist.h:41
 msgid "Stopped (tty output)"
 msgstr "Angehalten (tty-Ausgabe)"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:778
 msgid "Streams pipe error"
-msgstr "Fehler in Stream-Pipes"
+msgstr "Fehler in Stream-Pipe"
 
 #: stdio-common/../sysdeps/gnu/errlist.c:782
 msgid "Structure needs cleaning"
 msgstr "Die Struktur muß bereinigt werden"
 
-#: nis/ypclnt.c:631 nis/ypclnt.c:705 posix/regex.c:940
+#: nis/ypclnt.c:689 nis/ypclnt.c:763 posix/regex.c:954
 #: stdio-common/../sysdeps/gnu/errlist.c:7
 msgid "Success"
 msgstr "Erfolg"
 
-#: nis/ypclnt.c:711
+#: nis/ypclnt.c:769
 msgid "System resource allocation failure"
 msgstr "Fehler bei der Beschaffung einer System-Resource"
 
+#: stdio-common/../sysdeps/unix/siglist.c:44
+#: sysdeps/unix/sysv/linux/siglist.h:34
 msgid "Terminated"
 msgstr "Beendet"
 
@@ -1459,10 +1562,15 @@ msgstr "Zu viele Referenzen: can't splice"
 msgid "Too many users"
 msgstr "Zu viele Benutzer"
 
+#: stdio-common/../sysdeps/unix/siglist.c:34
+msgid "Trace/BPT trap"
+msgstr "Trace/BPT ausgelöst"
+
+#: sysdeps/unix/sysv/linux/siglist.h:26
 msgid "Trace/breakpoint trap"
 msgstr "Trace/Breakpoint ausgelöst"
 
-#: posix/regex.c:945
+#: posix/regex.c:959
 msgid "Trailing backslash"
 msgstr "Angehängter Backslash (»\\«)"
 
@@ -1488,12 +1596,12 @@ msgid "Transport endpoint is not connected"
 msgstr "Der Socket ist nicht verbunden"
 
 #: catgets/gencat.c:208 db/makedb.c:209 locale/programs/locale.c:241
-#: locale/programs/localedef.c:389
+#: locale/programs/localedef.c:393
 #, c-format
 msgid "Try `%s --help' for more information.\n"
 msgstr "»%s --help« gibt weitere Informationen.\n"
 
-#: inet/rcmd.c:136
+#: inet/rcmd.c:137
 #, c-format
 msgid "Trying %s...\n"
 msgstr "Versuche »%s«...\n"
@@ -1503,7 +1611,7 @@ msgstr "Versuche »%s«...\n"
 msgid "Unknown .netrc keyword %s"
 msgstr "Unbekanntes Schlüsselwort »%s« in der Datei ».netrc«"
 
-#: nis/ypclnt.c:665
+#: nis/ypclnt.c:723
 msgid "Unknown NIS error code"
 msgstr "Unbekannter NIS-Fehlercode"
 
@@ -1529,27 +1637,27 @@ msgstr "Unbekannter Fehler des Servers"
 msgid "Unknown signal %d"
 msgstr "Unbekanntes Signal %d"
 
-#: misc/error.c:95
+#: misc/error.c:100
 msgid "Unknown system error"
 msgstr "Unbekannter Systemfehler"
 
-#: nis/ypclnt.c:713
+#: nis/ypclnt.c:771
 msgid "Unknown ypbind error"
 msgstr "Unbekannter Fehler im »ypbind«"
 
-#: posix/regex.c:948
+#: posix/regex.c:962
 msgid "Unmatched ( or \\("
 msgstr "»(« oder »\\(« ohne schließende Klammer"
 
-#: posix/regex.c:956
+#: posix/regex.c:970
 msgid "Unmatched ) or \\)"
 msgstr "»)« oder »\\)« ohne öffnende Klammer"
 
-#: posix/regex.c:947
+#: posix/regex.c:961
 msgid "Unmatched [ or [^"
 msgstr "»[« oder »[^« ohne schließende Klammer"
 
-#: posix/regex.c:949
+#: posix/regex.c:963
 msgid "Unmatched \\{"
 msgstr "»\\{« ohne schließende Klammer"
 
@@ -1558,6 +1666,8 @@ msgstr "»\\{« ohne schließende Klammer"
 msgid "Unrecognized variable `%s'"
 msgstr "Unbekannte Variable »%s«"
 
+#: stdio-common/../sysdeps/unix/siglist.c:45
+#: sysdeps/unix/sysv/linux/siglist.h:35
 msgid "Urgent I/O condition"
 msgstr "Dringende Ein-/Ausgabe-Bedingung"
 
@@ -1623,12 +1733,13 @@ msgstr ""
 "Wenn als Name der Eingabe-Datei ein '-' angegeben ist, dann wird\n"
 "von der Standard-Eingabe gelesen.\n"
 
-#: locale/programs/localedef.c:393
+#: locale/programs/localedef.c:397
 #, c-format
 msgid ""
 "Usage: %s [OPTION]... name\n"
 "Mandatory arguments to long options are mandatory for short options too.\n"
-"  -c, --force               create output even if warning messages were issued\n"
+"  -c, --force               create output even if warning messages were "
+"issued\n"
 "  -h, --help                display this help and exit\n"
 "  -f, --charmap=FILE        symbolic character names defined in FILE\n"
 "  -i, --inputfile=FILE      source definitions are found in FILE\n"
@@ -1686,7 +1797,7 @@ msgstr ""
 "                        beschreibungen aus\n"
 "\n"
 "  -c, --category-name   Gibt die Namen der gewünschten Kategorien aus\n"
-"  -k, --keyword-name    Gibt die Namen der geswünschten Schlüsselworte aus\n"
+"  -k, --keyword-name    Gibt die Namen der gewünschten Schlüsselworte aus\n"
 
 #: posix/getconf.c:200
 #, c-format
@@ -1695,11 +1806,17 @@ msgstr "Syntax: %s Variablen-Name [Pfadname]\n"
 
 #: sunrpc/rpcinfo.c:609
 msgid "Usage: rpcinfo [ -n portnum ] -u host prognum [ versnum ]\n"
-msgstr "Syntax: rpcinfo [ -n Portnummer ] -u Rechner Programm-Nummer [Versions-Nummer]\n"
+msgstr ""
+"Syntax: rpcinfo [ -n Portnummer ] -u Rechner Programm-Nummer "
+"[Versions-Nummer]\n"
 
+#: stdio-common/../sysdeps/unix/siglist.c:59
+#: sysdeps/unix/sysv/linux/siglist.h:48
 msgid "User defined signal 1"
 msgstr "Benutzerdefiniertes Signal 1"
 
+#: stdio-common/../sysdeps/unix/siglist.c:60
+#: sysdeps/unix/sysv/linux/siglist.h:49
 msgid "User defined signal 2"
 msgstr "Benutzerdefiniertes Signal 2"
 
@@ -1707,36 +1824,40 @@ msgstr "Benutzerdefiniertes Signal 2"
 msgid "Value too large for defined data type"
 msgstr "Der Wert ist zu groß für den definierten Datentyp"
 
+#: stdio-common/../sysdeps/unix/siglist.c:55
+#: sysdeps/unix/sysv/linux/siglist.h:45
 msgid "Virtual timer expired"
 msgstr "Der virtuelle Zeitnehmer ist abgelaufen"
 
-#: time/zic.c:1844
+#: time/zic.c:1871
 msgid "Wild result from command execution"
 msgstr "Wildes Ergebnis aus der Kommando-Ausführung"
 
+#: stdio-common/../sysdeps/unix/siglist.c:57
+#: sysdeps/unix/sysv/linux/siglist.h:47
 msgid "Window changed"
 msgstr "Die Fenstergröße wurde verändert"
 
 #: catgets/gencat.c:174 db/makedb.c:125 locale/programs/locale.c:192
-#: locale/programs/localedef.c:182
+#: locale/programs/localedef.c:185
 #, c-format
 msgid "Written by %s.\n"
 msgstr "Implementiert von %s.\n"
 
-#: nis/ypclnt.c:146
+#: nis/ypclnt.c:142
 msgid "YPBINDPROC_DOMAIN: Internal error\n"
 msgstr "YPBINDPROC_DOMAIN: Interner Fehler\n"
 
-#: nis/ypclnt.c:150
+#: nis/ypclnt.c:146
 #, c-format
 msgid "YPBINDPROC_DOMAIN: No server for domain %s\n"
 msgstr "YPBINDPROC_DOMAIN: Kein Server für die NIS-Domain »%s«\n"
 
-#: nis/ypclnt.c:154
+#: nis/ypclnt.c:150
 msgid "YPBINDPROC_DOMAIN: Resource allocation failure\n"
 msgstr "YPBINDPROC_DOMAIN: Fehler bei der Resourcen-Beschaffung\n"
 
-#: nis/ypclnt.c:158
+#: nis/ypclnt.c:154
 msgid "YPBINDPROC_DOMAIN: Unknown error\n"
 msgstr "YPBINDPROC_DOMAIN: Unbekannter Fehler\n"
 
@@ -1745,67 +1866,72 @@ msgstr "YPBINDPROC_DOMAIN: Unbekannter Fehler\n"
 msgid "You really blew it this time"
 msgstr "Diesmal hast Du es wirklich kaputtgemacht"
 
-#: time/zic.c:1050
+#: time/zic.c:1048
 msgid "Zone continuation line end time is not after end time of previous line"
-msgstr "Die Ende-Zeit der Fortsetzungszeile ist nicht später als die Ende-Zeit der vorangegangenen Zeile"
+msgstr ""
+"Die Ende-Zeit der Fortsetzungszeile ist nicht später als die Ende-Zeit der "
+"vorangegangenen Zeile"
 
-#: locale/programs/charmap.c:397 locale/programs/locfile.c:341
+#: locale/programs/charmap.c:397 locale/programs/locfile.c:363
 #, c-format
 msgid "`%1$s' definition does not end with `END %1$s'"
 msgstr "Die Definition von »%1$s« ist nicht durch »END %1$s« abgeschlossen"
 
-#: locale/programs/ld-monetary.c:358 locale/programs/ld-numeric.c:190
+#: locale/programs/ld-monetary.c:359 locale/programs/ld-numeric.c:190
 #, c-format
 msgid "`-1' must be last entry in `%s' field in `%s' category"
 msgstr "»-1« muß der letzte Eintrag im »%s«-Feld in der »%s«-Kategorie sein"
 
-#: locale/programs/ld-collate.c:1652
+#: locale/programs/ld-collate.c:1655
 msgid "`...' must only be used in `...' and `UNDEFINED' entries"
 msgstr "»...« darf nur in »...« und »UNDEFINED« Einträgen verwendet werden"
 
-#: locale/programs/locfile.c:538
+#: locale/programs/locfile.c:560
 msgid "`from' expected after first argument to `collating-element'"
 msgstr "»from« erwartet nach dem ersten Argument von »collating-element«"
 
-#: locale/programs/ld-collate.c:1109
-msgid "`from' string in collation element declaration contains unknown character"
-msgstr "Der »from«-String in der Deklaration des »collation element« enthält unbekannte Zeichen"
+#: locale/programs/ld-collate.c:1112
+msgid ""
+"`from' string in collation element declaration contains unknown character"
+msgstr ""
+"Der »from«-String in der Deklaration des »collation element« enthält "
+"unbekannte Zeichen"
 
 #: locale/programs/charmap.c:267
 #, c-format
 msgid "argument to <%s> must be a single character"
 msgstr "Das Argument für »<%s>« muß ein einzelnes Zeichen sein"
 
-#: locale/programs/locfile.c:215
+#: locale/programs/locfile.c:237
 #, c-format
 msgid "argument to `%s' must be a single character"
-msgstr "Das Argument zu »%s« muß ein eizelnes Zeichen sein"
+msgstr "Das Argument zu »%s« muß ein einzelnes Zeichen sein"
 
-#: sunrpc/auth_unix.c:322
+#: sunrpc/auth_unix.c:323
 msgid "auth_none.c - Fatal marshalling problem"
 msgstr "auth_none.c - Fatales »marshalling«-Problem"
 
-#: inet/rcmd.c:360
+#: inet/rcmd.c:365
 msgid "bad .rhosts owner"
 msgstr "Ungültiger Eigentümer der Datei ».rhosts«"
 
-#: locale/programs/charmap.c:212 locale/programs/locfile.c:209
+#: locale/programs/charmap.c:212 locale/programs/locfile.c:231
 msgid "bad argument"
 msgstr "Das Argument ist ungültig"
 
-#: time/zic.c:1172
+#: time/zic.c:1170
 msgid "blank FROM field on Link line"
 msgstr "Leeres FROM-Feld in der Link-Zeile"
 
-#: time/zic.c:1176
+#: time/zic.c:1174
 msgid "blank TO field on Link line"
 msgstr "Leeres TO-Feld in der Link-Zeile"
 
-#: malloc/mcheck.c:189
+#: malloc/mcheck.c:191
 msgid "block freed twice"
 msgstr "Speicherblock zum zweiten Mal freigegeben"
 
-#: malloc/mcheck.c:192
+#: malloc/mcheck.c:194
 msgid "bogus mcheck_status, library is buggy"
 msgstr "Eigenartiger »mcheck_status«, die Bibliothek enthält Fehler"
 
@@ -1821,117 +1947,125 @@ msgstr "Broadcast: ioctl (Holen der Parameter der Schnittstelle)"
 msgid "cache_set: victim not found"
 msgstr "cache_set: Das Opfer wurde nicht gefunden"
 
-#: time/zic.c:1685
-msgid "can't determine time zone abbrevation to use just after until time"
-msgstr "Kann die Abkürzung der Zeitzone zur Verwendung direkt nach der Zeit nicht bestimmen"
+#: time/zic.c:1698
+msgid "can't determine time zone abbreviation to use just after until time"
+msgstr "Kann die Abkürzung der Zeitzone zur Verwendung direkt nach der Ende-Zeit nicht bestimmen"
 
 #: sunrpc/svc_simple.c:64
 #, c-format
 msgid "can't reassign procedure number %d\n"
 msgstr "Kann die Prozedurnummer %d nicht erneut zuweisen\n"
 
-#: locale/programs/localedef.c:287
+#: locale/programs/localedef.c:291
 #, c-format
 msgid "cannot `stat' locale file `%s'"
 msgstr "Kann den Status der Lokale-Datei »%s« nicht bestimmen"
 
-#: locale/programs/ld-collate.c:1314
+#: locale/programs/ld-collate.c:1317
 #, c-format
 msgid "cannot insert collation element `%.*s'"
-msgstr "Kann das »Collation«-Element »%.*s« nicht einfügen"
+msgstr "Kann das Sortierelement »%.*s« nicht einfügen"
 
-#: locale/programs/ld-collate.c:1493 locale/programs/ld-collate.c:1498
+#: locale/programs/ld-collate.c:1496 locale/programs/ld-collate.c:1501
 msgid "cannot insert into result table"
 msgstr "Kann nicht in die Ergebnis-Tabelle einfügen"
 
-#: locale/programs/ld-collate.c:1166 locale/programs/ld-collate.c:1208
+#: locale/programs/ld-collate.c:1169 locale/programs/ld-collate.c:1211
 #, c-format
 msgid "cannot insert new collating symbol definition: %s"
-msgstr "Kann die neue »Collating-Symbol«-Definition nicht einfügen: %s"
+msgstr "Kann die neue Sortiersymbol-Definition nicht einfügen: %s"
 
 #: db/makedb.c:161
 #, c-format
 msgid "cannot open database file `%s': %s"
 msgstr "Kann die Ausgabedatei »%s« nicht öffnen: %s"
 
-#: catgets/gencat.c:259 db/makedb.c:180
+#: catgets/gencat.c:260 db/makedb.c:180
 #, c-format
 msgid "cannot open input file `%s'"
 msgstr "Kann die Eingabedatei »%s« nicht öffnen"
 
-#: locale/programs/localedef.c:221
+#: locale/programs/localedef.c:224
 #, c-format
 msgid "cannot open locale definition file `%s'"
 msgstr "Kann die Lokale-Definitionsdatei »%s« nicht öffnen"
 
-#: catgets/gencat.c:764 catgets/gencat.c:805 db/makedb.c:189
+#: catgets/gencat.c:765 catgets/gencat.c:806 db/makedb.c:189
 #, c-format
 msgid "cannot open output file `%s'"
 msgstr "Kann die Ausgabedatei »%s« nicht öffnen"
 
-#: locale/programs/locfile.c:986
+#: locale/programs/locfile.c:1008
 #, c-format
 msgid "cannot open output file `%s' for category `%s'"
 msgstr "Kann die Ausgabedatei »%s« für die Kategorie »%s« nicht öffnen"
 
-#: locale/programs/ld-collate.c:1360
+#: locale/programs/ld-collate.c:1363
 msgid "cannot process order specification"
 msgstr "Kann die Spezifikation der Sortierreihenfolge nicht verarbeiten"
 
-#: locale/programs/locale.c:303
+#: locale/programs/locale.c:304
 #, c-format
 msgid "cannot read character map directory `%s'"
-msgstr "Das Verzeichnis »%s« der Zeichensatz-Definitionen kann nicht gelesen werden"
+msgstr ""
+"Das Verzeichnis »%s« der Zeichensatz-Definitionen kann nicht gelesen werden"
 
-#: locale/programs/locale.c:278
+#: locale/programs/locale.c:279
 #, c-format
 msgid "cannot read locale directory `%s'"
 msgstr "Kann das Lokale-Verzeichnis »%s« nicht lesen"
 
-#: locale/programs/localedef.c:309
+#: locale/programs/localedef.c:313
 #, c-format
 msgid "cannot read locale file `%s'"
 msgstr "Kann die Lokale-Datei »%s« nicht lesen"
 
-#: locale/programs/localedef.c:334
+#: locale/programs/localedef.c:338
 #, c-format
 msgid "cannot write output files to `%s'"
 msgstr "Kann die Ausgabedatei »%s« nicht schreiben"
 
-#: locale/programs/localedef.c:377
+#: locale/programs/localedef.c:381
 msgid "category data requested more than once: should not happen"
-msgstr "Die Daten einer Kategorie sind mehrfach angefordert worden, das sollte nicht passieren"
+msgstr ""
+"Die Daten einer Kategorie sind mehrfach angefordert worden, das sollte nicht "
+"passieren"
 
-#: locale/programs/ld-ctype.c:265
+#: locale/programs/ld-ctype.c:266
 #, c-format
 msgid "character %s'%s' in class `%s' must be in class `%s'"
-msgstr "Das Zeichen %s»%s«, das in der Zeichenklasse »%s« enthalten ist, muß auch in der Zeichenklasse »%s« enthalten sein"
+msgstr ""
+"Das Zeichen %s»%s«, das in der Zeichenklasse »%s« enthalten ist, muß auch in "
+"der Zeichenklasse »%s« enthalten sein"
 
-#: locale/programs/ld-ctype.c:289
+#: locale/programs/ld-ctype.c:291
 #, c-format
 msgid "character %s'%s' in class `%s' must not be in class `%s'"
-msgstr "Das Zeichen %s»%s« in der Zeichenklasse »%s« darf nicht in der Zeichenklasse »%s« enthalten sein"
+msgstr ""
+"Das Zeichen %s»%s« in der Zeichenklasse »%s« darf nicht in der Zeichenklasse "
+"»%s« enthalten sein"
 
-#: locale/programs/ld-ctype.c:310
+#: locale/programs/ld-ctype.c:313
 msgid "character <SP> not defined in character map"
 msgstr "Das Zeichen »<SP>« ist in der Zeichen-Definition nicht enthalten"
 
-#: locale/programs/ld-ctype.c:939 locale/programs/ld-ctype.c:1002
-#: locale/programs/ld-ctype.c:1010 locale/programs/ld-ctype.c:1018
-#: locale/programs/ld-ctype.c:1026 locale/programs/ld-ctype.c:1034
-#: locale/programs/ld-ctype.c:1042 locale/programs/ld-ctype.c:1068
-#: locale/programs/ld-ctype.c:1076 locale/programs/ld-ctype.c:1114
-#: locale/programs/ld-ctype.c:1141 locale/programs/ld-ctype.c:1152
+#: locale/programs/ld-ctype.c:944 locale/programs/ld-ctype.c:1007
+#: locale/programs/ld-ctype.c:1015 locale/programs/ld-ctype.c:1023
+#: locale/programs/ld-ctype.c:1031 locale/programs/ld-ctype.c:1039
+#: locale/programs/ld-ctype.c:1047 locale/programs/ld-ctype.c:1073
+#: locale/programs/ld-ctype.c:1081 locale/programs/ld-ctype.c:1119
+#: locale/programs/ld-ctype.c:1146 locale/programs/ld-ctype.c:1157
 #, c-format
 msgid "character `%s' not defined while needed as default value"
-msgstr "Das Zeichen »%s« ist nicht definiert, wird aber als Vorgabewert benötigt"
+msgstr ""
+"Das Zeichen »%s« ist nicht definiert, wird aber als Vorgabewert benötigt"
 
-#: locale/programs/ld-ctype.c:801
+#: locale/programs/ld-ctype.c:806
 #, c-format
 msgid "character class `%s' already defined"
 msgstr "Die Zeichenklasse »%s« ist bereits definiert"
 
-#: locale/programs/ld-ctype.c:833
+#: locale/programs/ld-ctype.c:838
 #, c-format
 msgid "character map `%s' already defined"
 msgstr "Die Zeichensatzbeschreibung »%s« ist bereits definiert"
@@ -1945,22 +2079,26 @@ msgstr "Die Zeichensatzbeschreibungs-Datei »%s« wurde nicht gefunden"
 msgid "clnt_raw.c - Fatal header serialization error."
 msgstr "clnt_raw.c - Fataler Fehler bei der Header-Serialisierung."
 
-#: locale/programs/ld-collate.c:1329
+#: locale/programs/ld-collate.c:1332
 #, c-format
 msgid "collation element `%.*s' appears more than once: ignore line"
-msgstr "Das 'collation'-Element »%.*s« ist mehr als einmal angegeben: Die Zeile wird ignoriert"
+msgstr ""
+"Das Sortierungselement »%.*s« ist mehr als einmal angegeben: Die Zeile wird "
+"ignoriert"
 
-#: locale/programs/ld-collate.c:1347
+#: locale/programs/ld-collate.c:1350
 #, c-format
 msgid "collation symbol `%.*s' appears more than once: ignore line"
-msgstr "Das 'Collation'-Symbol »%.*s« ist mehr als einmal angegeben; die Zeile wird ignoriert"
+msgstr ""
+"Das Sortierungssymbol »%.*s« ist mehr als einmal angegeben; die Zeile wird "
+"ignoriert"
 
-#: locale/programs/locfile.c:522
+#: locale/programs/locfile.c:544
 #, c-format
 msgid "collation symbol expected after `%s'"
-msgstr "Nach »%s« wird ein 'collation'-Symbol erwartet"
+msgstr "Nach »%s« wird ein Sortierungssymbol erwartet"
 
-#: inet/rcmd.c:129
+#: inet/rcmd.c:130
 #, c-format
 msgid "connect to address %s: "
 msgstr "Verbindungsaufbau zur Adresse %s: "
@@ -1972,61 +2110,70 @@ msgstr "Kann keinen RPC-Server erzeugen\n"
 #: sunrpc/svc_simple.c:77
 #, c-format
 msgid "couldn't register prog %d vers %d\n"
-msgstr "Kann das Programm %d Version %d nicht registrieren\n"
+msgstr "Kann das Programm »%d« Version »%d« nicht registrieren\n"
 
 #: locale/programs/charmap.c:86
 #, c-format
 msgid "default character map file `%s' not found"
-msgstr "Die Default-Zeichensatzbeschreibung in der Datei »%s« wurde nicht gefunden"
+msgstr ""
+"Die Default-Zeichensatzbeschreibung in der Datei »%s« wurde nicht gefunden"
 
 #: locale/programs/ld-time.c:154
 #, c-format
-msgid "direction flag in string %d in `era' field in category `%s' is not '+' nor '-'"
-msgstr "Der Richtungsanzeiger in der Zeichenkette %d im »era«-Feld in der Kategorie »%s« ist weder »+« noch »-«"
+msgid ""
+"direction flag in string %d in `era' field in category `%s' is not '+' nor "
+"'-'"
+msgstr ""
+"Der Richtungsanzeiger in der Zeichenkette %d im »era«-Feld in der Kategorie "
+"»%s« ist weder »+« noch »-«"
 
 #: locale/programs/ld-time.c:164
 #, c-format
-msgid "direction flag in string %d in `era' field in category `%s' is not a single character"
-msgstr "Der Richtungsanzeiger in der Zeichenkette %d im »era«-Feld in der Kategorie »%s« ist kein einzelnes Zeichen"
+msgid ""
+"direction flag in string %d in `era' field in category `%s' is not a single "
+"character"
+msgstr ""
+"Der Richtungsanzeiger in der Zeichenkette %d im »era«-Feld in der Kategorie "
+"»%s« ist kein einzelnes Zeichen"
 
 #: locale/programs/charset.c:87 locale/programs/charset.c:132
 #, c-format
 msgid "duplicate character name `%s'"
 msgstr "Der Name des Zeichens »%s« ist mehrfach angegeben"
 
-#: locale/programs/ld-collate.c:1141
+#: locale/programs/ld-collate.c:1144
 msgid "duplicate collating element definition"
-msgstr "Mehrfache Definition des 'collating'-Elementes"
+msgstr "Mehrfache Definition des Sortierungselementes"
 
-#: locale/programs/ld-collate.c:1287
+#: locale/programs/ld-collate.c:1290
 #, c-format
 msgid "duplicate definition for character `%.*s'"
 msgstr "Mehrfache Definition des Eintrages »%.*s«"
 
-#: db/makedb.c:310
+#: db/makedb.c:311
 msgid "duplicate key"
-msgstr "Doppelter Eintrag"
+msgstr "Doppelter Schlüssel"
 
-#: catgets/gencat.c:378
+#: catgets/gencat.c:379
 msgid "duplicate set definition"
 msgstr "Doppelte »set«-Definition"
 
-#: time/zic.c:965
+#: time/zic.c:963
 #, c-format
 msgid "duplicate zone name %s (file \"%s\", line %d)"
 msgstr "Doppelter Zonen-Name »%s« (Datei »%s«, Zeile %d)"
 
-#: catgets/gencat.c:541
+#: catgets/gencat.c:542
 msgid "duplicated message identifier"
 msgstr "Der Nachrichten-Bezeichner ist mehrfach vorhanden"
 
-#: catgets/gencat.c:514
+#: catgets/gencat.c:515
 msgid "duplicated message number"
 msgstr "Die Nachrichten-Nummer ist mehrfach vorhanden"
 
-#: locale/programs/ld-collate.c:1696
+#: locale/programs/ld-collate.c:1699
 msgid "empty weight name: line ignored"
-msgstr "Leerer »weight«-Name: Die Zeile wird ignoriert"
+msgstr "Leerer Name des Sortiergewichtes: Die Zeile wird ignoriert"
 
 #: sunrpc/svc_udp.c:348
 msgid "enablecache: cache already enabled"
@@ -2044,91 +2191,104 @@ msgstr "enablecache: Kann die Cache-Daten nicht anlegen"
 msgid "enablecache: could not allocate cache fifo"
 msgstr "enablecache: Kann keinen FIFO-Cache anlegen"
 
-#: locale/programs/ld-collate.c:1419
+#: locale/programs/ld-collate.c:1422
 msgid "end point of ellipsis range is bigger then start"
 msgstr "Das Ende eines Auslassungs-Intervalls ist gößer als der Start"
 
-#: locale/programs/ld-collate.c:1149
+#: locale/programs/ld-collate.c:1152
 msgid "error while inserting collation element into hash table"
 msgstr "Fehler beim Einfügen des Collation-Elementes in die Hash-Tabelle"
 
-#: locale/programs/ld-collate.c:1161
+#: locale/programs/ld-collate.c:1164
 msgid "error while inserting to hash table"
 msgstr "Fehler beim Einfügen in die Hash-Tabelle"
 
-#: locale/programs/locfile.c:465
+#: locale/programs/locfile.c:487
 msgid "expect string argument for `copy'"
 msgstr "Für »copy« wird ein String-Argument erwartet"
 
-#: time/zic.c:856
+#: time/zic.c:854
 msgid "expected continuation line not found"
 msgstr "Die erwartete Fortsetzungszeile ist nicht vorhanden"
 
-#: locale/programs/locfile.c:1010
+#: locale/programs/locfile.c:1032
 #, c-format
 msgid "failure while writing data for category `%s'"
 msgstr "Fehler beim Schreiben der Daten für die Kategorie »%s«"
 
-#: locale/programs/ld-monetary.c:154 locale/programs/ld-numeric.c:95
+#: nis/ypclnt.c:187
+msgid "fcntl: F_SETFD"
+msgstr "fcntl: F_SETFD"
+
+#: locale/programs/ld-monetary.c:155 locale/programs/ld-numeric.c:95
 #, c-format
 msgid "field `%s' in category `%s' not defined"
-msgstr "Der Eintrag »%s« in der Kategorie »%s« ist undefiniert"
+msgstr "Der Eintrag »%s« in der Kategorie »%s« ist nicht definiert"
 
 #: locale/programs/ld-messages.c:81 locale/programs/ld-messages.c:102
 #, c-format
 msgid "field `%s' in category `%s' undefined"
-msgstr "Der Eintrag »%s« in der Kategorie »%s« ist undefiniert"
+msgstr "Der Eintrag »%s« in der Kategorie »%s« ist nicht definiert"
 
-#: locale/programs/locfile.c:547
+#: locale/programs/locfile.c:569
 msgid "from-value of `collating-element' must be a string"
-msgstr "Der From-Wert eines `collating-Eelements' muß ein String sein"
+msgstr "Der »From«-Wert eines Sortierelementes muß ein String sein"
 
 #: locale/programs/linereader.c:328
 msgid "garbage at end of character code specification"
 msgstr "Murks am Ende einer Zeichensatz-Spezifikation"
 
 #: locale/programs/linereader.c:214
-msgid "garbage at end of digit"
-msgstr "Am Ende der Ziffer sind unsinnige Einträge"
+msgid "garbage at end of number"
+msgstr "Am Ende der Zahl sind unsinnige Einträge"
 
 #: locale/programs/ld-time.c:183
 #, c-format
-msgid "garbage at end of offset value in string %d in `era' field in category `%s'"
-msgstr "Unsinnige Einträge am Ende des Offset-Wertes in der Zeichenkette %d im »era«-Feld der Kategorie »%s«"
+msgid ""
+"garbage at end of offset value in string %d in `era' field in category `%s'"
+msgstr ""
+"Unsinnige Einträge am Ende des Offset-Wertes in der Zeichenkette %d im "
+"»era«-Feld der Kategorie »%s«"
 
 #: locale/programs/ld-time.c:238
 #, c-format
-msgid "garbage at end of starting date in string %d in `era' field in category `%s'"
-msgstr "Unsinnige Einträge am Ende des Start-Datums in der Zeichenkette %d im »era«-Feld der Kategorie »%s«"
+msgid ""
+"garbage at end of starting date in string %d in `era' field in category `%s'"
+msgstr ""
+"Unsinnige Einträge am Ende des Start-Datums in der Zeichenkette %d im "
+"»era«-Feld der Kategorie »%s«"
 
-#: locale/programs/ld-time.c:310
+#: locale/programs/ld-time.c:311
 #, c-format
-msgid "garbage at end of stopping date in string %d in `era' field in category `%s'"
-msgstr "Unsinnige Eintrage am Ende des Stop-Datums in der Zeichenkette %d im »era«-Feld der Kategorie »%s«"
+msgid ""
+"garbage at end of stopping date in string %d in `era' field in category `%s'"
+msgstr ""
+"Unsinnige Eintrage am Ende des Stop-Datums in der Zeichenkette %d im "
+"»era«-Feld der Kategorie »%s«"
 
 #: sunrpc/get_myaddr.c:73
 msgid "get_myaddress: ioctl (get interface configuration)"
-msgstr "get_myaddress: ioctl (Holen der Konfiguration der Schnittstelle)"
+msgstr "get_myaddress: ioctl (Holen der Schnittstellen-Konfiguration)"
 
-#: time/zic.c:1149
+#: time/zic.c:1147
 msgid "illegal CORRECTION field on Leap line"
-msgstr "ungültiges »CORRECTION«-Feld in der 'Leap'-Zeile"
+msgstr "ungültiges »CORRECTION«-Feld in der »Leap«-Zeile"
 
-#: time/zic.c:1153
+#: time/zic.c:1151
 msgid "illegal Rolling/Stationary field on Leap line"
-msgstr "ungültiges »Rolling/Stationary«-Feld in der 'Leap'-Zeile"
+msgstr "ungültiges »Rolling/Stationary«-Feld in der »Leap«-Zeile"
 
-#: locale/programs/ld-collate.c:1767
+#: locale/programs/ld-collate.c:1770
 msgid "illegal character constant in string"
-msgstr "Nicht erlaubtes Zeichen in der Datei: "
+msgstr "Ungültige Zeichen-Konstante in der Zeichenkette"
 
-#: locale/programs/ld-collate.c:1116
+#: locale/programs/ld-collate.c:1119
 msgid "illegal collation element"
-msgstr "Nicht erlaubtes Zeichen in der Datei: "
+msgstr "Ungültiges »collation«-Element"
 
 #: locale/programs/charmap.c:196
 msgid "illegal definition"
-msgstr "Ungültiger Maschinenbefehl"
+msgstr "Ungültige Definition"
 
 #: locale/programs/charmap.c:349
 msgid "illegal encoding given"
@@ -2136,99 +2296,111 @@ msgstr "Ungültige Kodierung angegeben"
 
 #: locale/programs/linereader.c:546
 msgid "illegal escape sequence at end of string"
-msgstr "ungültige Escape-Sequenc am Ende des Strings"
+msgstr "ungültige Escape-Sequenz am Ende der Zeichenkette"
 
 #: locale/programs/charset.c:101
 msgid "illegal names for character range"
-msgstr "Ungültige Namen für den Zeichen-Bereich"
+msgstr "ungültige Namen für den Zeichen-Bereich"
 
 #: locale/programs/ld-time.c:176
 #, c-format
 msgid "illegal number for offset in string %d in `era' field in category `%s'"
-msgstr "ungültige Nummer für den Offset in der Zeichenkette %d im »era«-Feld in der Kategorie »%s«"
+msgstr ""
+"ungültige Nummer für den Offset in der Zeichenkette %d im »era«-Feld in der "
+"Kategorie »%s«"
 
-#: catgets/gencat.c:351 catgets/gencat.c:428
+#: catgets/gencat.c:352 catgets/gencat.c:429
 msgid "illegal set number"
-msgstr "Nicht erlaubter Seek"
+msgstr "ungültige »set«-Nummer"
 
 #: locale/programs/ld-time.c:230
 #, c-format
 msgid "illegal starting date in string %d in `era' field in category `%s'"
-msgstr "ungültiges Start-Datum in der Zeichenkette %d im »era«-Feld in der Kategorie »%s«"
+msgstr ""
+"ungültiges Start-Datum in der Zeichenkette %d im »era«-Feld in der Kategorie "
+"»%s«"
 
-#: locale/programs/ld-time.c:302
+#: locale/programs/ld-time.c:303
 #, c-format
 msgid "illegal stopping date in string %d in `era' field in category `%s'"
-msgstr "ungültiges Ende-Datum in der Zeichenkette %d im »era«-Feld in der Kategorie »%s«"
+msgstr ""
+"ungültiges Ende-Datum in der Zeichenkette %d im »era«-Feld in der Kategorie "
+"»%s«"
 
-#: locale/programs/ld-ctype.c:807
+#: locale/programs/ld-ctype.c:812
 #, c-format
 msgid "implementation limit: no more than %d character classes allowed"
-msgstr "Limit der Implementation: Es sind nicht mehr als %d Zeichensatz-Klassen erlaubt"
+msgstr ""
+"Limit der Implementation: Es sind nicht mehr als %d Zeichen-Klassen erlaubt"
 
-#: locale/programs/ld-ctype.c:839
+#: locale/programs/ld-ctype.c:844
 #, c-format
 msgid "implementation limit: no more than %d character maps allowed"
-msgstr "Limit der Implementation: Es sind nicht mehr als %d Zeichen-Maps erlaubt"
+msgstr ""
+"Limit der Implementation: Es sind nicht mehr als %d Zeichen-Maps erlaubt"
 
 #: db/makedb.c:163
 msgid "incorrectly formatted file"
-msgstr "ungültig formatierten Zeile"
+msgstr "ungültig formatierte Datei"
 
-#: time/zic.c:814
+#: time/zic.c:811
 msgid "input line of unknown type"
 msgstr "Die Eingabezeile ist von einem unbekannten Typ"
 
-#: time/zic.c:1733
+#: time/zic.c:1760
 msgid "internal error - addtype called with bad isdst"
-msgstr "Interner Fehler - »addtype« wurde mit einer ungültigen »isdst« aufgerufen"
+msgstr ""
+"Interner Fehler - »addtype« wurde mit einer ungültigen »isdst« aufgerufen"
 
-#: time/zic.c:1741
+#: time/zic.c:1768
 msgid "internal error - addtype called with bad ttisgmt"
-msgstr "Interner Fehler - »addtype« wurde mit einem ungültigen »ttisgmt« aufgerufen"
+msgstr ""
+"Interner Fehler - »addtype« wurde mit einem ungültigen »ttisgmt« aufgerufen"
 
-#: time/zic.c:1737
+#: time/zic.c:1764
 msgid "internal error - addtype called with bad ttisstd"
-msgstr "Interner Fehler - »addtype« wurde mit einem ungültigen »ttisstd« aufgerufen"
+msgstr ""
+"Interner Fehler - »addtype« wurde mit einem ungültigen »ttisstd« aufgerufen"
 
-#: locale/programs/ld-ctype.c:301
+#: locale/programs/ld-ctype.c:304
 #, c-format
 msgid "internal error in %s, line %u"
 msgstr "Interner Fehler in der Datei »%s«, Zeile %u"
 
-#: time/zic.c:1021
+# Sollte das nicht UTC sein? -- jh
+#: time/zic.c:1019
 msgid "invalid GMT offset"
 msgstr "ungültiger GMT-Offset"
 
-#: time/zic.c:1024
+#: time/zic.c:1022
 msgid "invalid abbreviation format"
 msgstr "ungültiges Abkürzungsformat"
 
-#: time/zic.c:1114 time/zic.c:1313 time/zic.c:1327
+#: time/zic.c:1112 time/zic.c:1313 time/zic.c:1327
 msgid "invalid day of month"
 msgstr "Ungültiger Tag des Monats"
 
-#: time/zic.c:1272
+#: time/zic.c:1270
 msgid "invalid ending year"
 msgstr "Ungültiges Ende-Jahr"
 
-#: time/zic.c:1086
+#: time/zic.c:1084
 msgid "invalid leaping year"
 msgstr "Ungültiges Schaltjahr"
 
-#: time/zic.c:1101 time/zic.c:1204
+#: time/zic.c:1099 time/zic.c:1202
 msgid "invalid month name"
 msgstr "ungültiger Monatsname"
 
-#: time/zic.c:920
+#: time/zic.c:918
 msgid "invalid saved time"
 msgstr "Ungültige gespeicherte Zeit"
 
-#: time/zic.c:1252
+#: time/zic.c:1250
 msgid "invalid starting year"
 msgstr "Ungültiges Anfangsjahr"
 
-#: time/zic.c:1130 time/zic.c:1232
+#: time/zic.c:1128 time/zic.c:1230
 msgid "invalid time of day"
 msgstr "Ungültige Tageszeit"
 
@@ -2236,61 +2408,70 @@ msgstr "Ungültige Tageszeit"
 msgid "invalid weekday name"
 msgstr "ungültiger Name für einen Wochentag"
 
-#: locale/programs/ld-collate.c:1412
+#: locale/programs/ld-collate.c:1415
 msgid "line after ellipsis must contain character definition"
-msgstr "Die Zeile nach einem Auslassungintervall muß eine Zeichen-Definition enthalten"
+msgstr ""
+"Die Zeile nach einem Auslassungintervall muß eine Zeichen-Definition "
+"enthalten"
 
-#: locale/programs/ld-collate.c:1391
+#: locale/programs/ld-collate.c:1394
 msgid "line before ellipsis does not contain definition for character constant"
-msgstr "Die Zeile vor einem Auslassungsintervall muß eine Zeichen-Definition enthalten"
+msgstr ""
+"Die Zeile vor einem Auslassungsintervall muß eine Zeichen-Konstante enthalten"
 
-#: time/zic.c:794
+#: time/zic.c:791
 msgid "line too long"
 msgstr "Die Zeile ist zu lang"
 
-#: locale/programs/localedef.c:281
+#: locale/programs/localedef.c:285
 #, c-format
 msgid "locale file `%s', used in `copy' statement, not found"
-msgstr "Die Lokale-Datei »%s«, die im »copy«-Befehl verwendet wird, ist nicht vorhanden"
+msgstr ""
+"Die Lokale-Datei »%s«, die im »copy«-Befehl verwendet wird, ist nicht "
+"vorhanden"
 
-#: catgets/gencat.c:609
+#: catgets/gencat.c:610
 msgid "malformed line ignored"
 msgstr "ungültige Eingabezeile ignoriert"
 
-#: malloc/mcheck.c:183
+#: malloc/mcheck.c:185
 msgid "memory clobbered before allocated block"
 msgstr "Der Speicher vor dem allozierten Block wurde überschrieben"
 
-#: malloc/mcheck.c:186
+#: malloc/mcheck.c:188
 msgid "memory clobbered past end of allocated block"
 msgstr "Der Speicher nach dem Ende des allozierten Blockes wurde überschrieben"
 
 #: locale/programs/ld-collate.c:167 locale/programs/ld-collate.c:173
-#: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1439
-#: locale/programs/ld-collate.c:1468 locale/programs/locfile.c:940
+#: locale/programs/ld-collate.c:177 locale/programs/ld-collate.c:1442
+#: locale/programs/ld-collate.c:1471 locale/programs/locfile.c:962
 #: locale/programs/xmalloc.c:68 posix/getconf.c:250
 msgid "memory exhausted"
 msgstr "Kein Hauptspeicher mehr verfügbar"
 
-#: malloc/obstack.c:425
+#: malloc/obstack.c:462
 msgid "memory exhausted\n"
 msgstr "Kein Hauptspeicher mehr verfügbar\n"
 
-#: malloc/mcheck.c:180
+#: malloc/mcheck.c:182
 msgid "memory is consistent, library is buggy"
 msgstr "Die Speicherverwaltung ist konsistent, die Bibliothek enthält Fehler"
 
-#: locale/programs/ld-time.c:348
+#: locale/programs/ld-time.c:350
 #, c-format
 msgid "missing era format in string %d in `era' field in category `%s'"
-msgstr "fehlendes »era«-Format in der Zeichenkette %d im »era«-Feld in der Kategorie »%s«"
+msgstr ""
+"fehlendes »era«-Format in der Zeichenkette %d im »era«-Feld in der Kategorie "
+"»%s«"
 
-#: locale/programs/ld-time.c:337
+#: locale/programs/ld-time.c:339
 #, c-format
-msgid "missing era name in string %d in `era' fieldin category `%s'"
-msgstr "fehlender »era«-Name in der Zeichenkette %d im »era« Feld in der Kategorie »%s«"
+msgid "missing era name in string %d in `era' field in category `%s'"
+msgstr ""
+"fehlender »era«-Name in der Zeichenkette %d im »era« Feld in der Kategorie "
+"»%s«"
 
-#: time/zic.c:915
+#: time/zic.c:913
 msgid "nameless rule"
 msgstr "Regel ohne Name"
 
@@ -2302,21 +2483,25 @@ msgstr "Das Programm %d wurde nie registriert\n"
 #: locale/programs/ld-messages.c:95 locale/programs/ld-messages.c:116
 #, c-format
 msgid "no correct regular expression for field `%s' in category `%s': %s"
-msgstr "Kein gültiger regulärer Ausdruck für den Eintrag »%s« in der Kategorie »%s«: %s"
+msgstr ""
+"Kein gültiger regulärer Ausdruck für den Eintrag »%s« in der Kategorie »%s«: "
+"%s"
 
-#: time/zic.c:2059
+#: time/zic.c:2086
 msgid "no day in month matches rule"
 msgstr "Kein Tag des Monats paßt zur angegebenen Regel"
 
-#: locale/programs/ld-collate.c:259
+#: locale/programs/ld-collate.c:260
 msgid "no definition of `UNDEFINED'"
 msgstr "Keine Definition für »UNDEFINED«"
 
-#: locale/programs/locfile.c:479
+#: locale/programs/locfile.c:501
 msgid "no other keyword shall be specified when `copy' is used"
-msgstr "Es dürfen keine anderen Schlüsselworte angegeben werden, wenn »copy« verwendet wird"
+msgstr ""
+"Es dürfen keine anderen Schlüsselworte angegeben werden, wenn »copy« "
+"verwendet wird"
 
-#: locale/programs/localedef.c:340
+#: locale/programs/localedef.c:344
 msgid "no output file produced because warning were issued"
 msgstr "Es wurde keine Ausgabe-Datei erzeugt, weil Warnungen ausgegeben wurden"
 
@@ -2328,18 +2513,18 @@ msgstr "Kein symbolischer Name angegeben"
 #: locale/programs/charmap.c:380 locale/programs/charmap.c:512
 #: locale/programs/charmap.c:578
 msgid "no symbolic name given for end of range"
-msgstr "Kein symbolische Name für das Ende eines Intervalles angegeben"
+msgstr "Kein symbolischer Name für das Ende des Intervalles angegeben"
 
 #: locale/programs/ld-collate.c:244
 #, c-format
 msgid "no weight defined for symbol `%s'"
-msgstr "Kein »Weight« für das Symbol »%s« definiert"
+msgstr "Kein Sortiergewicht (»Weight«) für das Symbol »%s« definiert"
 
 #: locale/programs/charmap.c:430
 msgid "only WIDTH definitions are allowed to follow the CHARMAP definition"
 msgstr "Nur »WIDTH«-Definitionen dürfen nach einer »CHARMAP«-Definition folgen"
 
-#: db/makedb.c:326
+#: db/makedb.c:327
 #, c-format
 msgid "problems while reading `%s'"
 msgstr "Probleme beim Lesen von »%s«"
@@ -2360,16 +2545,16 @@ msgstr "Das Programm %lu ist in der Version %lu nicht verfügbar\n"
 msgid "program %lu version %lu ready and waiting\n"
 msgstr "Program %lu Version %lu ist bereit und wartet\n"
 
-#: inet/rcmd.c:171
+#: inet/rcmd.c:172
 #, c-format
 msgid "rcmd: select (setting up stderr): %m\n"
 msgstr "rcmd: select (Vorbereiten der Standard-Fehlerausgabe): %m\n"
 
-#: inet/rcmd.c:103
+#: inet/rcmd.c:104
 msgid "rcmd: socket: All ports in use\n"
 msgstr "rcmd: Socket: Alle Ports sind zur Zeit belegt\n"
 
-#: inet/rcmd.c:159
+#: inet/rcmd.c:160
 #, c-format
 msgid "rcmd: write (setting up stderr): %m\n"
 msgstr "rcmd: write (Vorbereiten der Standard-Fehlerausgabe): %m\n"
@@ -2378,9 +2563,9 @@ msgstr "rcmd: write (Vorbereiten der Standard-Fehlerausgabe): %m\n"
 msgid "registerrpc: out of memory\n"
 msgstr "registerrpc: Hauptspeicher erschöpft\n"
 
-#: time/zic.c:1794
+#: time/zic.c:1821
 msgid "repeated leap second moment"
-msgstr "Wiederholung der Leap-Sekunde"
+msgstr "Wiederholung der »Leap«-Sekunde"
 
 #: sunrpc/rpcinfo.c:659
 #, c-format
@@ -2395,7 +2580,9 @@ msgstr "rpcinfo: »%s« ist ein unbekannter Service\n"
 #: sunrpc/rpcinfo.c:600
 #, c-format
 msgid "rpcinfo: Could not delete registration for prog %s version %s\n"
-msgstr "Kann das Programm »%s« Version »%s« nicht registrieren\n"
+msgstr ""
+"rpcinfo; Kann die Registrierung des Programms »%s« Version »%s« nicht "
+"löschen\n"
 
 #: sunrpc/rpcinfo.c:576
 #, c-format
@@ -2410,47 +2597,54 @@ msgstr "rpcinfo: Kann den Portmapper nicht erreichen"
 msgid "rpcinfo: can't contact portmapper: "
 msgstr "rpcinfo: Kann den Portmapper nicht erreichen: "
 
-#: time/zic.c:708 time/zic.c:710
+#: time/zic.c:704 time/zic.c:706
 msgid "same rule name in multiple files"
 msgstr "Dieselbe Regel ist in mehreren Dateien enthalten"
 
-#: inet/rcmd.c:174
+#: inet/rcmd.c:175
 msgid "select: protocol failure in circuit setup\n"
-msgstr "Select: Protokollfehler im Kreislauf-Setup\n"
+msgstr "Select: Protokoll-Fehler im Kreislauf-Setup\n"
 
-#: inet/rcmd.c:192
+#: inet/rcmd.c:193
 msgid "socket: protocol failure in circuit setup\n"
 msgstr "socket: Protokoll-Fehler im Kreislauf-Setup\n"
 
-#: locale/programs/locfile.c:600
+#: locale/programs/locfile.c:622
 msgid "sorting order `forward' and `backward' are mutually exclusive"
 msgstr "Die Anweisungen »forward« und »backward« schließen sich aus"
 
-#: locale/programs/ld-collate.c:1568 locale/programs/ld-collate.c:1614
-msgid "specification of sorting weight for collation symbol does not make sense"
-msgstr "Die Angabe eines Sortier-Gewichtes für ein »Collation«-Symbol ist nicht sinnvoll"
+#: locale/programs/ld-collate.c:1571 locale/programs/ld-collate.c:1617
+msgid ""
+"specification of sorting weight for collation symbol does not make sense"
+msgstr ""
+"Die Angabe eines Sortiergewichtes für ein »Collation«-Symbol ist nicht "
+"sinnvoll"
 
-#: time/zic.c:779
+#: time/zic.c:775
 msgid "standard input"
 msgstr "Standard-Eingabe"
 
-#: time/zdump.c:260
+#: time/zdump.c:268
 msgid "standard output"
 msgstr "Standard-Ausgabe"
 
-#: locale/programs/ld-time.c:256
+#: locale/programs/ld-time.c:257
 #, c-format
 msgid "starting date is illegal in string %d in `era' field in category `%s'"
-msgstr "Das Start-Datum in der Zeichenkette %d im »era«-Feld der Kategorie »%s« ist ungültig"
+msgstr ""
+"Das Start-Datum in der Zeichenkette %d im »era«-Feld der Kategorie »%s« ist "
+"ungültig"
 
-#: time/zic.c:1276
+#: time/zic.c:1274
 msgid "starting year greater than ending year"
 msgstr "Das Start-Jahr ist größer als das Ende-Jahr"
 
-#: locale/programs/ld-time.c:328
+#: locale/programs/ld-time.c:330
 #, c-format
 msgid "stopping date is illegal in string %d in `era' field in category `%s'"
-msgstr "Das Ende-Datum in der Zeichenkette %d im »era«-Feld in der Kategorie »%s« ist ungültig"
+msgstr ""
+"Das Ende-Datum in der Zeichenkette %d im »era«-Feld in der Kategorie »%s« "
+"ist ungültig"
 
 #: sunrpc/svc_tcp.c:201 sunrpc/svc_tcp.c:206
 msgid "svc_tcp: makefd_xprt: out of memory\n"
@@ -2476,30 +2670,48 @@ msgstr "svcudp_create - »getsockname« fehlgeschlagen"
 msgid "svcudp_create: socket creation problem"
 msgstr "svcudp_create: Problem bei der Erstellung des Sockets"
 
-#: locale/programs/ld-collate.c:1191
+# Hat hier jemand eine bessere Übersetzung? -- jh
+# Leider nein.  Ich würde es nur groß schreiben und auch im folgenden üs. ke
+#: locale/programs/ld-collate.c:1194
 #, c-format
-msgid "symbol for multicharacter collating element `%.*s' duplicates element definition"
-msgstr "Das Symbol für das mehr-zeichen Collating-Element »%.*s« wiederholt die Element-Definition"
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates element "
+"definition"
+msgstr "Das Symbol für das Mehr-Zeichen Collating-Element »%.*s« wiederholt die Element-Definition"
 
-#: locale/programs/ld-collate.c:1064
+#: locale/programs/ld-collate.c:1067
 #, c-format
-msgid "symbol for multicharacter collating element `%.*s' duplicates other element definition"
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates other element "
+"definition"
 msgstr "Das Symbol für das 'multicharacter collating'-Element »%.*s« wiederholt eine andere Element-Definition"
 
-#: locale/programs/ld-collate.c:1200
+#: locale/programs/ld-collate.c:1203
 #, c-format
-msgid "symbol for multicharacter collating element `%.*s' duplicates other symbol definition"
-msgstr "Das Symbol für das 'multicharacter collating'-Element »%.*s« wiederholt eine andere Symbol-Definition"
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates other symbol "
+"definition"
+msgstr ""
+"Das Symbol für das 'multicharacter collating'-Element »%.*s« wiederholt eine "
+"andere Symbol-Definition"
 
-#: locale/programs/ld-collate.c:1073
+#: locale/programs/ld-collate.c:1076
 #, c-format
-msgid "symbol for multicharacter collating element `%.*s' duplicates symbol definition"
-msgstr "Das Symbol für das 'multicharacter collating'-Element »%.*s« wiederholt eine Symbol-Definition"
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates symbol "
+"definition"
+msgstr ""
+"Das Symbol für das 'multicharacter collating'-Element »%.*s« wiederholt eine "
+"Symbol-Definition"
 
-#: locale/programs/ld-collate.c:1055 locale/programs/ld-collate.c:1182
+#: locale/programs/ld-collate.c:1058 locale/programs/ld-collate.c:1185
 #, c-format
-msgid "symbol for multicharacter collating element `%.*s' duplicates symbolic name in charset"
-msgstr "Das Symbol für das 'multicharacter collating'-Element »%.*s« kollidiert mit einem symbolischen Namen in der Zeichensatzbeschreibung"
+msgid ""
+"symbol for multicharacter collating element `%.*s' duplicates symbolic name "
+"in charset"
+msgstr ""
+"Das Symbol für das 'multicharacter collating'-Element »%.*s« kollidiert mit "
+"einem symbolischen Namen in der Zeichensatzbeschreibung"
 
 #: locale/programs/charmap.c:314 locale/programs/charmap.c:348
 #: locale/programs/charmap.c:378 locale/programs/charmap.c:465
@@ -2509,76 +2721,76 @@ msgstr "Das Symbol für das 'multicharacter collating'-Element »%.*s« kollidiert
 msgid "syntax error in %s definition: %s"
 msgstr "Syntaxfehler in der »%s«-Definition: %s"
 
-#: locale/programs/locfile.c:620
+#: locale/programs/locfile.c:642
 msgid "syntax error in `order_start' directive"
 msgstr "Syntaxfehler in der »order_start«-Anweisung"
 
-#: locale/programs/locfile.c:362
+#: locale/programs/locfile.c:384
 msgid "syntax error in character class definition"
-msgstr "Syntaxfehler in der Zeichensatz-Definitionsdatei"
+msgstr "Syntaxfehler in der Zeichenklassen-Definitionsdatei"
 
-#: locale/programs/locfile.c:420
+#: locale/programs/locfile.c:442
 msgid "syntax error in character conversion definition"
-msgstr "Syntaxfehler in der Zeichensatz-Umwandlungs-Defintion"
+msgstr "Syntaxfehler in der Zeichensatz-Umwandlungs-Definition"
 
-#: locale/programs/locfile.c:662
+#: locale/programs/locfile.c:684
 msgid "syntax error in collating order definition"
 msgstr "Syntaxfehler in der Definition der Sortierreihenfolge"
 
-#: locale/programs/locfile.c:512
+#: locale/programs/locfile.c:534
 msgid "syntax error in collation definition"
 msgstr "Syntaxfehler in der Definition der Sortierung"
 
-#: locale/programs/locfile.c:335
+#: locale/programs/locfile.c:357
 msgid "syntax error in definition of LC_CTYPE category"
 msgstr "Syntaxfehler in der Definition der »LC_CTYPE«-Kategorie"
 
-#: locale/programs/locfile.c:278
+#: locale/programs/locfile.c:300
 msgid "syntax error in definition of new character class"
 msgstr "Syntaxfehler in der Definition einer neuen Zeichenklasse"
 
-#: locale/programs/locfile.c:288
+#: locale/programs/locfile.c:310
 msgid "syntax error in definition of new character map"
 msgstr "Syntaxfehler in der Definition eines neuen Zeichensatzes"
 
-#: locale/programs/locfile.c:873
+#: locale/programs/locfile.c:895
 msgid "syntax error in message locale definition"
-msgstr "Syntaxfehler in der Lokale-Definitionsdatei"
+msgstr "Syntaxfehler in der Lokale-Definitionsdatei, Abschnitt »message«"
 
-#: locale/programs/locfile.c:784
+#: locale/programs/locfile.c:806
 msgid "syntax error in monetary locale definition"
-msgstr "Syntaxfehler in der Lokale-Definitionsdatei"
+msgstr "Syntaxfehler in der Lokale-Definitionsdatei, Abschnitt »monetary«"
 
-#: locale/programs/locfile.c:811
+#: locale/programs/locfile.c:833
 msgid "syntax error in numeric locale definition"
-msgstr "Syntaxfehler in der Lokale-Definitionsdatei"
+msgstr "Syntaxfehler in der Lokale-Definitionsdatei, Abschnitt »numeric«"
 
-#: locale/programs/locfile.c:722
+#: locale/programs/locfile.c:744
 msgid "syntax error in order specification"
-msgstr "Syntaxfehler in der Lokale-Definitionsdatei"
+msgstr "Syntaxfehler in der Lokale-Definitionsdatei, Abschnitt »order«"
 
 #: locale/programs/charmap.c:195 locale/programs/charmap.c:211
 #, c-format
 msgid "syntax error in prolog: %s"
 msgstr "Syntax-Fehler im Prolog: %s"
 
-#: locale/programs/locfile.c:849
+#: locale/programs/locfile.c:871
 msgid "syntax error in time locale definition"
-msgstr "Syntaxfehler in der Lokale-Definition zur Zeit"
+msgstr "Syntaxfehler in der Lokale-Definition zur Zeit (Abschnitt »time«)"
 
-#: locale/programs/locfile.c:255
+#: locale/programs/locfile.c:277
 msgid "syntax error: not inside a locale definition section"
-msgstr "Syntaxfehler: nicht in der in der Lokale-Definition"
+msgstr "Syntaxfehler: nicht in einem Abschnitt der Lokale-Definition"
 
-#: catgets/gencat.c:380 catgets/gencat.c:516 catgets/gencat.c:543
+#: catgets/gencat.c:381 catgets/gencat.c:517 catgets/gencat.c:544
 msgid "this is the first definition"
 msgstr "Dies ist die erste Definition"
 
-#: time/zic.c:1119
+#: time/zic.c:1117
 msgid "time before zero"
 msgstr "Zeit vor Null"
 
-#: time/zic.c:1127 time/zic.c:1959 time/zic.c:1978
+#: time/zic.c:1125 time/zic.c:1986 time/zic.c:2005
 msgid "time overflow"
 msgstr "Überlauf der Zeit"
 
@@ -2592,25 +2804,25 @@ msgstr "Zu viele Bytes in der Zeichen-Kodierung"
 
 #: locale/programs/locales.h:72
 msgid "too many character classes defined"
-msgstr "Zu viele Zeichenklasse definiert"
+msgstr "Zu viele Zeichenklassen definiert"
 
-#: time/zic.c:1788
+#: time/zic.c:1815
 msgid "too many leap seconds"
 msgstr "Zu viele Schaltsekunden"
 
-#: time/zic.c:1760
+#: time/zic.c:1787
 msgid "too many local time types"
 msgstr "Zu viele lokale Zeit-Typen"
 
-#: time/zic.c:1714
+#: time/zic.c:1741
 msgid "too many transitions?!"
 msgstr "Zu viele Übergänge?!"
 
-#: locale/programs/ld-collate.c:1623
+#: locale/programs/ld-collate.c:1626
 msgid "too many weights"
-msgstr "Zu viele Sortier-Gewichte"
+msgstr "Zu viele Sortiergewichte"
 
-#: time/zic.c:2082
+#: time/zic.c:2109
 msgid "too many, or too long, time zone abbreviations"
 msgstr "Zu viele oder zu lange Abkürzungen für Zeitzonen"
 
@@ -2623,11 +2835,11 @@ msgstr "Am Zeilenende sind unsinnige Einträge"
 msgid "trouble replying to prog %d\n"
 msgstr "Schwierigkeiten bei der Antwort an das Programm %d\n"
 
-#: locale/programs/ld-collate.c:1383
+#: locale/programs/ld-collate.c:1386
 msgid "two lines in a row containing `...' are not allowed"
-msgstr "Zwei aufeinanderfolgende Zeilen mit '...' sind nicht erlaubt"
+msgstr "Zwei aufeinanderfolgende Zeilen mit »...« sind nicht erlaubt"
 
-#: time/zic.c:1283
+#: time/zic.c:1281
 msgid "typed single year"
 msgstr "Ein einzelnes Jahr angegeben"
 
@@ -2642,41 +2854,38 @@ msgstr "unbekanntes Zeichen »%s«"
 
 #: locale/programs/ld-messages.c:193 locale/programs/ld-messages.c:204
 #: locale/programs/ld-messages.c:215 locale/programs/ld-messages.c:226
-#: locale/programs/ld-time.c:696
+#: locale/programs/ld-time.c:698
 #, c-format
 msgid "unknown character in field `%s' of category `%s'"
 msgstr "Ungültiges Zeichen im Feld »%s« in der Kategorie »%s«"
 
-#: locale/programs/locfile.c:585
+#: locale/programs/locfile.c:607
 msgid "unknown collation directive"
 msgstr "unbekannte »collation«-Anweisung"
 
-#: catgets/gencat.c:477
+#: catgets/gencat.c:478
 #, c-format
 msgid "unknown directive `%s': line ignored"
 msgstr "unbekannte Anweisung »%s«: Die Zeile wurde ignoriert"
 
-#: catgets/gencat.c:456
+#: catgets/gencat.c:457
 #, c-format
 msgid "unknown set `%s'"
 msgstr "Unbekanntes Set »%s«"
 
-msgid "unknown signal"
-msgstr "Unbekanntes Signal"
-
-#: locale/programs/ld-collate.c:1367 locale/programs/ld-collate.c:1558
-#: locale/programs/ld-collate.c:1732
+#: locale/programs/ld-collate.c:1370 locale/programs/ld-collate.c:1561
+#: locale/programs/ld-collate.c:1735
 #, c-format
 msgid "unknown symbol `%.*s': line ignored"
 msgstr "Unbekanntes Symbol »%.*s«: Die Zeile wurde ignoriert"
 
-#: time/zic.c:751
+#: time/zic.c:747
 msgid "unruly zone"
 msgstr "Zeitzone ohne Regeln"
 
-#: catgets/gencat.c:961
+#: catgets/gencat.c:962
 msgid "unterminated message"
-msgstr "Zeichenkette wird nicht beendet"
+msgstr "Die Nachricht ist nicht abgeschlossen"
 
 #: locale/programs/linereader.c:515 locale/programs/linereader.c:550
 msgid "unterminated string"
@@ -2686,7 +2895,7 @@ msgstr "Zeichenkette wird nicht beendet"
 msgid "unterminated symbolic name"
 msgstr "Der symbolische Name wird nicht beendet"
 
-#: locale/programs/ld-collate.c:1685
+#: locale/programs/ld-collate.c:1688
 msgid "unterminated weight name"
 msgstr "Der Name des Sortier-Gewichtes wird nicht beendet"
 
@@ -2694,7 +2903,7 @@ msgstr "Der Name des Sortier-Gewichtes wird nicht beendet"
 msgid "upper limit in range is not smaller then lower limit"
 msgstr "Das obere Ende des Intervalls ist nicht kleiner als das untere Ende"
 
-#: time/zic.c:2025
+#: time/zic.c:2052
 msgid "use of 2/29 in non leap-year"
 msgstr "Der 29. Februar wurde in einem nicht-Schaltjahr verwendet"
 
@@ -2706,31 +2915,41 @@ msgstr "Der Wert für »%s« muß eine Ganzzahl sein"
 #: locale/programs/charmap.c:233
 #, c-format
 msgid "value for <%s> must lie between 1 and 4"
-msgstr "Der Wert für <%s> muß zwischen eins und vier liegen"
+msgstr "Der Wert für »<%s>« muß zwischen eins und vier liegen"
 
-#: locale/programs/ld-monetary.c:148 locale/programs/ld-numeric.c:89
+#: locale/programs/ld-monetary.c:149 locale/programs/ld-numeric.c:89
 #, c-format
 msgid "value for field `%s' in category `%s' must not be the empty string"
-msgstr "Der Eintrag für das Feld »%s« in der Kategorie »%s« darf nicht leer sein"
+msgstr ""
+"Der Eintrag für das Feld »%s« in der Kategorie »%s« darf nicht leer sein"
 
 #: locale/programs/charmap.c:245
 msgid "value of <mb_cur_max> must be greater than the value of <mb_cur_min>"
-msgstr "Der Wert von »<mb_cur_max>« muß größer als der Wert von »<mb_cur_min>« sein"
+msgstr ""
+"Der Wert von »<mb_cur_max>« muß größer als der Wert von »<mb_cur_min>« sein"
 
-#: locale/programs/ld-monetary.c:138
-msgid "value of field `int_curr_symbol' in category `LC_MONETARY' does not correspond to a valid name in ISO 4217"
-msgstr "Der Wert im Feld »int_surr_symbol« in der Kategorie »LC_MONETARY«gehört nicht zu einem gültigen Namen in ISO-4217"
+#: locale/programs/ld-monetary.c:139
+msgid ""
+"value of field `int_curr_symbol' in category `LC_MONETARY' does not "
+"correspond to a valid name in ISO 4217"
+msgstr ""
+"Der Wert im Feld »int_curr_symbol« in der Kategorie »LC_MONETARY« gehört "
+"nicht zu einem gültigen Namen in ISO-4217"
 
 #: locale/programs/ld-monetary.c:133
-msgid "value of field `int_curr_symbol' in category `LC_MONETARY' has wrong length"
-msgstr "Der Wert im Feld »int_curr_symbol« in der Kategorie »LC_MONETARY« hat die falsche Länge"
+msgid ""
+"value of field `int_curr_symbol' in category `LC_MONETARY' has wrong length"
+msgstr ""
+"Der Wert im Feld »int_curr_symbol« in der Kategorie »LC_MONETARY« hat die "
+"falsche Länge"
 
-#: locale/programs/ld-monetary.c:370 locale/programs/ld-numeric.c:199
+#: locale/programs/ld-monetary.c:371 locale/programs/ld-numeric.c:199
 #, c-format
 msgid "values for field `%s' in category `%s' must be smaller than 127"
-msgstr "Der Wert für den Eintrag »%s« in der Kategorie »%s« muß kleiner als 127 sein."
+msgstr ""
+"Der Wert für den Eintrag »%s« in der Kategorie »%s« muß kleiner als 127 sein."
 
-#: locale/programs/ld-monetary.c:366
+#: locale/programs/ld-monetary.c:367
 #, c-format
 msgid "values for field `%s' in category `%s' must not be zero"
 msgstr "Der Eintrag im Feld »%s« in der Kategorie »%s« darf nicht Null sein"
@@ -2739,165 +2958,47 @@ msgstr "Der Eintrag im Feld »%s« in der Kategorie »%s« darf nicht Null sein"
 msgid "while opening UTMP file"
 msgstr "beim Öffnen der UTMP-Datei"
 
-#: catgets/gencat.c:988
+#: catgets/gencat.c:989
 msgid "while opening old catalog file"
 msgstr "beim Öffnen der alten Katalog-Datei"
 
-#: db/makedb.c:353
+#: db/makedb.c:354
 msgid "while reading database"
 msgstr "beim Lesen der Datenbank"
 
-#: db/makedb.c:315
+#: db/makedb.c:316
 msgid "while writing data base file"
-msgstr "beim Schreiben der Datenbak-Datei"
+msgstr "beim Schreiben der Datenbank-Datei"
 
 #: db/makedb.c:142
 msgid "wrong number of arguments"
 msgstr "Falsche Anzahl an Argumenten"
 
-#: time/zic.c:1077
+#: time/zic.c:1075
 msgid "wrong number of fields on Leap line"
 msgstr "Falsche Anzahl an Feldern in der Leap-Zeile"
 
-#: time/zic.c:1168
+#: time/zic.c:1166
 msgid "wrong number of fields on Link line"
 msgstr "Falsche Anzahl der Felder in der Link-Zeile"
 
-#: time/zic.c:911
+#: time/zic.c:909
 msgid "wrong number of fields on Rule line"
 msgstr "Falsche Anzahl der Felder in der Rule-Zeile"
 
-#: time/zic.c:981
+#: time/zic.c:979
 msgid "wrong number of fields on Zone continuation line"
 msgstr "Falsche Anzahl der Felder in der Zeitzonen-Fortsetzungszeile"
 
-#: time/zic.c:939
+#: time/zic.c:937
 msgid "wrong number of fields on Zone line"
 msgstr "Falsche Anzahl an Feldern in der Zone-Zeile"
 
-#: nis/ypclnt.c:570
-msgid "yp_all: clnttcp_create failed"
-msgstr "yp_all: »clnttcp_create« fehlgeschlagen"
-
-#: nis/ypclnt.c:772
+#: nis/ypclnt.c:811
 msgid "yp_update: cannot convert host to netname\n"
 msgstr "yp_update: Kann den Rechnername nicht in einen Netzname umwandeln\n"
 
-#: nis/ypclnt.c:784
+#: nis/ypclnt.c:823
 msgid "yp_update: cannot get server address\n"
-msgstr "yp_update: Kann die Adresse des Servss nicht finden\n"
-
-#~ msgid "variable-length array declaration expected"
-#~ msgstr "Deklaration einer variabel langen Tabelle erwartet"
-
-#~ msgid "couldn't do tcp_create\n"
-#~ msgstr "Kann keinen RPC-Server erzeugen\n"
-
-#~ msgid "       %s [-s udp|tcp]* [-o outfile] [infile]\n"
-#~ msgstr "       %s [-s udp|tcp]* [-o Ausgabedatei] [Eingabedatei]\n"
-
-#~ msgid "%s: output would overwrite %s\n"
-#~ msgstr "%s: Die Ausgabe würde %s überschreiben\n"
-
-#~ msgid "illegal character in file: "
-#~ msgstr "Nicht erlaubtes Zeichen in der Datei: "
-
-#~ msgid "too many files!\n"
-#~ msgstr "Zu viele Dateien!\n"
-
-#~ msgid "voids allowed only inside union and program definitions"
-#~ msgstr "`void' ist nur innerhalb von `union'- oder `program'-Definitionen erlaubt"
-
-#~ msgid "rcmd: select (setting up stderr): %s\n"
-#~ msgstr "rcmd: Select (Einrichten der Standardfehlerausgabe): %s\n"
-
-#~ msgid "%s: unable to open "
-#~ msgstr "%s: kann nicht geöffnet werden "
-
-#~ msgid "character `%c' not defined while needed as default value"
-#~ msgstr "Das Zeichen `%s' ist nicht definiert, wird aber als Vorgabewert benötigt"
-
-#~ msgid "expected type specifier"
-#~ msgstr "Type-Bezeichner erwartet"
-
-#~ msgid "rcmd: write (setting up stderr): %s\n"
-#~ msgstr "rcmd: Write (Einrichten der Standardfehlerausgabe): %s\n"
-
-#~ msgid "expected '%s', '%s' or '%s'"
-#~ msgstr "'%s', '%s' oder '%s' erwartet"
-
-#~ msgid "usage: %s infile\n"
-#~ msgstr "Aufruf: %s Eingabedatei\n"
-
-#~ msgid "preprocessor error"
-#~ msgstr "Fehler des Präprozessors"
-
-#~ msgid "array declaration expected"
-#~ msgstr "Tabellendeklaration erwartet"
-
-#~ msgid "socket: protocol failure in circuit setup.\n"
-#~ msgstr "Socket: Protokollfehler im Kreislauf-Setup.\n"
-
-#~ msgid "couldn't do udp_create\n"
-#~ msgstr "Kann keinen RPC-Server erzeugen\n"
-
-#~ msgid "collation symbol `.*s' appears more than once: ignore line"
-#~ msgstr "Das 'collation'-Symbol `.*s' ist mehr als einmal angegeben: Die Zeile wird ignorier"
-
-#~ msgid "unterminated string constant"
-#~ msgstr "Zeichenkette wird nicht beendet"
-
-#~ msgid "expected '%s'"
-#~ msgstr "'%s' erwartet"
-
-#~ msgid "illegal result type"
-#~ msgstr "Nicht erlaubter Ergebnistyp"
-
-#~ msgid "no array-of-pointer declarations -- use typedef"
-#~ msgstr "Kein Definition einer Tabelle von \"Zeigern\" -- Verwenden Sie \"typedef\""
-
-#~ msgid "definition keyword expected"
-#~ msgstr "Keyword-Definition erwartet"
-
-#~ msgid "constant or identifier expected"
-#~ msgstr "Konstante oder Bezeichner erwartet"
-
-#~ msgid "       %s [-c | -h | -l | -m] [-o outfile] [infile]\n"
-#~ msgstr "       %s [-c | -h | -l | -m] [-o Ausgabedatei] [Eingabedatei]\n"
-
-#~ msgid "%s, line %d: "
-#~ msgstr "%s, Zeile %d: "
-
-#~ msgid ""
-#~ "Usage: %s [OPTION]... -o OUTPUT-FILE [INPUT-FILE]...\n"
-#~ "       %s [OPTION]... [OUTPUT-FILE [INPUT-FILE]...]\n"
-#~ "Mandatory arguments to long options are mandatory for short options too.\n"
-#~ "  -H, --header        create C header file containing symbol definitions\n"
-#~ "  -h, --help          display this help and exit\n"
-#~ "      --new           do not use existing catalog, force new output file\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"
-#~ "Report bugs to <bug-glibc@prep.ai.mit.edu>.\n"
-#~ msgstr ""
-#~ "Syntax: %s [Option]... -o Ausgabe-Datei [Eingabe-Datei]...\n"
-#~ "        %s [Option]... [Ausgabe-Datei [Eingabe-Datei]...]\n"
-#~ "\n"
-#~ "Notwendige Argumente zu langen Optionen sind auch bei kurzen erforderlich.\n"
-#~ "\n"
-#~ "  -H, --header        erzeuge C-Header-Datein mit Symbol-Definitionen\n"
-#~ "  -h, --help          zeige diese Hilfe an\n"
-#~ "      --new           verwende keinen bestehendn Katalog, sondern erzeuge \n"
-#~ "                      einen neuen\n"
-#~ "  -o, --output=Name   Die Ausgabe-Datei heißt 'Name'\n"
-#~ "  -V, --version       gebe die Versionsnummer aus\n"
-#~ "\n"
-#~ "Wenn '-' als Eingabe-Datei angegeben wird, dann wird von der Standard-Eingabe\n"
-#~ "gelesen.  Wenn '-' als Ausgabe-Datei angegeben wird, dann wird auf die\n"
-#~ "Standard-Ausgabe geschrieben.\n"
-#~ "\n"
-#~ "Fehler bitte an <bug-glibc@prep.ai.mit.edu> melden.\n"
+msgstr "yp_update: Kann die Adresse des Servers nicht finden\n"
 
-#~ msgid "Not a data message"
-#~ msgstr "Keine Nachricht mit Daten"
diff --git a/signal/signal.h b/signal/signal.h
index df54e7940d..995567eed8 100644
--- a/signal/signal.h
+++ b/signal/signal.h
@@ -233,8 +233,8 @@ extern int sigwait __P ((__const sigset_t *__set, int *__sig));
 
 /* Names of the signals.  This variable exists only for compatibility.
    Use `strsignal' instead (see <string.h>).  */
-extern __const char *__const _sys_siglist[NSIG];
-extern __const char *__const sys_siglist[NSIG];
+extern __const char *__const _sys_siglist[_NSIG];
+extern __const char *__const sys_siglist[_NSIG];
 
 /* Structure passed to `sigvec'.  */
 struct sigvec
diff --git a/stdio-common/printf_size.c b/stdio-common/printf_size.c
index 6a870127af..794b411ef5 100644
--- a/stdio-common/printf_size.c
+++ b/stdio-common/printf_size.c
@@ -94,10 +94,12 @@ int
 printf_size (FILE *fp, const struct printf_info *info, const void *const *args)
 {
   /* Units for the both formats.  */
-  static const char units[2][8] =
+#define BINARY_UNITS	" kmgtpezy"
+#define DECIMAL_UNITS	" KMGTPEZY"
+  static const char units[2][sizeof (BINARY_UNITS)] =
   {
-    " kmgtpezy",	/* For binary format.  */
-    " KMGTPEZY"		/* For decimal format.  */
+    BINARY_UNITS,	/* For binary format.  */
+    DECIMAL_UNITS	/* For decimal format.  */
   };
   const char *tag = units[isupper (info->spec) != 0];
   int divisor = isupper (info->spec) ? 1000 : 1024;
diff --git a/stdlib/lcong48_r.c b/stdlib/lcong48_r.c
index c7baa3815f..ac30d7941a 100644
--- a/stdlib/lcong48_r.c
+++ b/stdlib/lcong48_r.c
@@ -19,6 +19,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 
 int
 __lcong48_r (param, buffer)
diff --git a/stdlib/random_r.c b/stdlib/random_r.c
index d19fd1755b..677aa21ba5 100644
--- a/stdlib/random_r.c
+++ b/stdlib/random_r.c
@@ -127,7 +127,8 @@ __srandom_r (x, buf)
   if (buf == NULL || buf->rand_type < TYPE_0 || buf->rand_type > TYPE_4)
     return -1;
 
-  buf->state[0] = x;
+  /* We must make sure the seed is not 0.  Take arbitrarily 1 in this case.  */
+  buf->state[0] = x ? x : 1;
   if (buf->rand_type != TYPE_0)
     {
       long int i;
diff --git a/stdlib/seed48_r.c b/stdlib/seed48_r.c
index 31a5856a94..ec3a3ec561 100644
--- a/stdlib/seed48_r.c
+++ b/stdlib/seed48_r.c
@@ -19,6 +19,7 @@
 
 #include <stdlib.h>
 #include <string.h>
+#include <limits.h>
 
 int
 __seed48_r (seed16v, buffer)
diff --git a/sysdeps/generic/sigset.h b/sysdeps/generic/sigset.h
index 6f4ea0e5a8..9fad4538d7 100644
--- a/sysdeps/generic/sigset.h
+++ b/sysdeps/generic/sigset.h
@@ -51,9 +51,9 @@ typedef unsigned long int __sigset_t;
 #ifdef _GNU_SOURCE
 # define __sigisemptyset(set)	(*(set) == (__sigset_t) 0)
 # define __sigandset(dest, left, right) \
-				((*(set) = (*(left) & *(right))), 0)
+				((*(dest) = (*(left) & *(right))), 0)
 # define __sigorset(dest, left, right) \
-				((*(set) = (*(left) | *(right))), 0)
+				((*(dest) = (*(left) | *(right))), 0)
 #endif
 
 /* These functions needn't check for a bogus signal number -- error
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index f6b28444a3..7b3336588d 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -55,14 +55,14 @@ static inline Elf32_Addr __attribute__ ((unused))
 elf_machine_load_address (void)
 {
   Elf32_Addr addr;
-  asm ("	call here\n"
-       "here:	popl %0\n"
-       "	subl $here, %0"
+  asm ("	call .Lhere\n"
+       ".Lhere:	popl %0\n"
+       "	subl $.Lhere, %0"
        : "=r" (addr));
   return addr;
 }
 /* The `subl' insn above will contain an R_386_32 relocation entry
-   intended to insert the run-time address of the label `here'.
+   intended to insert the run-time address of the label `.Lhere'.
    This will be the first relocation in the text of the dynamic linker;
    we skip it to avoid trying to modify read-only text in this early stage.  */
 #define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \
diff --git a/sysdeps/libm-i387/e_pow.S b/sysdeps/libm-i387/e_pow.S
index e665326438..45c41b48ab 100644
--- a/sysdeps/libm-i387/e_pow.S
+++ b/sysdeps/libm-i387/e_pow.S
@@ -48,9 +48,6 @@ one:	.double 1.0
 	ASM_TYPE_DIRECTIVE(limit,@object)
 limit:	.double 0.29
 	ASM_SIZE_DIRECTIVE(limit)
-	ASM_TYPE_DIRECTIVE(nan,@object)
-nan:	.byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
-	ASM_SIZE_DIRECTIVE(nan)
 
 #ifdef PIC
 #define MO(op) op##@GOTOFF(%ecx)
@@ -191,8 +188,8 @@ ENTRY(__ieee754_pow)
 	ret
 
 	.align ALIGNARG(4)
-14:	fldl	MO(nan)
-	faddl	MO(zero)	// raise invalid exception
+14:	fldl	MO(infinity)
+	fmull	MO(zero)	// raise invalid exception
 	ret
 
 	.align ALIGNARG(4)
diff --git a/sysdeps/libm-i387/e_powf.S b/sysdeps/libm-i387/e_powf.S
index 102cd4e3af..d7342bf56f 100644
--- a/sysdeps/libm-i387/e_powf.S
+++ b/sysdeps/libm-i387/e_powf.S
@@ -48,9 +48,6 @@ one:	.double 1.0
 	ASM_TYPE_DIRECTIVE(limit,@object)
 limit:	.double 0.29
 	ASM_SIZE_DIRECTIVE(limit)
-	ASM_TYPE_DIRECTIVE(nan,@object)
-nan:	.byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
-	ASM_SIZE_DIRECTIVE(nan)
 
 #ifdef PIC
 #define MO(op) op##@GOTOFF(%ecx)
@@ -187,8 +184,8 @@ ENTRY(__ieee754_powf)
 	ret
 
 	.align ALIGNARG(4)
-14:	fldl	MO(nan)
-	faddl	MO(zero)	// raise invalid exception
+14:	fldl	MO(infinity)
+	fmull	MO(zero)	// raise invalid exception
 	ret
 
 	.align ALIGNARG(4)
diff --git a/sysdeps/libm-i387/e_powl.S b/sysdeps/libm-i387/e_powl.S
index dba725aa77..0ea4829822 100644
--- a/sysdeps/libm-i387/e_powl.S
+++ b/sysdeps/libm-i387/e_powl.S
@@ -48,9 +48,6 @@ one:	.double 1.0
 	ASM_TYPE_DIRECTIVE(limit,@object)
 limit:	.double 0.29
 	ASM_SIZE_DIRECTIVE(limit)
-	ASM_TYPE_DIRECTIVE(nan,@object)
-nan:	.byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
-	ASM_SIZE_DIRECTIVE(nan)
 
 #ifdef PIC
 #define MO(op) op##@GOTOFF(%ecx)
@@ -191,8 +188,8 @@ ENTRY(__ieee754_powl)
 	ret
 
 	.align ALIGNARG(4)
-14:	fldl	MO(nan)
-	faddl	MO(zero)	// raise invalid exception
+14:	fldl	MO(infinity)
+	fmull	MO(zero)	// raise invalid exception
 	ret
 
 	.align ALIGNARG(4)
diff --git a/sysdeps/libm-i387/s_cexp.S b/sysdeps/libm-i387/s_cexp.S
index 48e002b2f6..5630d3cb65 100644
--- a/sysdeps/libm-i387/s_cexp.S
+++ b/sysdeps/libm-i387/s_cexp.S
@@ -31,7 +31,8 @@ huge_nan_null_null:
 	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
 	.byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
 	.double	0.0
-	.double	0.0
+zero:	.double	0.0
+infinity:
 	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
 	.byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
 	.double 0.0
@@ -90,7 +91,7 @@ ENTRY(__cexp)
 	   Check your FPU manual for more information.  */
 	andb	$0x01, %ah
 	cmpb	$0x01, %ah
-	je	2f
+	je	20f
 
 	/* We have finite numbers in the real and imaginary part.  Do
 	   the real work now.  */
@@ -139,9 +140,8 @@ ENTRY(__cexp)
 1:	fxam			/* y : x */
 	fnstsw
 	movb	%ah, %dl
-	andb	$0x01, %ah	/* See above why 0x01 is usable here.  */
-	cmpb	$0x01, %ah
-	je	3f
+	testb	$0x01, %ah	/* See above why 0x01 is usable here.  */
+	jne	3f
 
 
 	/* The real part is +-Inf and the imaginary part is finite.  */
@@ -220,7 +220,14 @@ ENTRY(__cexp)
 	.align ALIGNARG(4)
 3:	fstp	%st(0)
 	fstp	%st(0)		/* <empty> */
-	movl	%edx, %eax
+	andb	$0x45, %ah
+	andb	$0x47, %dh
+	xorb	%dh, %ah
+	jnz	30f
+	fldl	MO(infinity)	/* Raise invalid exception.  */
+	fmull	MO(zero)
+	fstp	%st(0)
+30:	movl	%edx, %eax
 	shrl	$5, %edx
 	shll	$4, %eax
 	andl	$16, %edx
@@ -236,6 +243,9 @@ ENTRY(__cexp)
 
 	/* The real part is NaN.  */
 	.align ALIGNARG(4)
+20:	fldl	MO(infinity)		/* Raise invalid exception.  */
+	fmull	MO(zero)
+	fstp	%st(0)
 2:	fstp	%st(0)
 	fstp	%st(0)
 	movl	4(%esp), %eax		/* Pointer to memory for result.  */
diff --git a/sysdeps/libm-i387/s_cexpf.S b/sysdeps/libm-i387/s_cexpf.S
index 6fd414b045..d6dcebcb23 100644
--- a/sysdeps/libm-i387/s_cexpf.S
+++ b/sysdeps/libm-i387/s_cexpf.S
@@ -31,7 +31,8 @@ huge_nan_null_null:
 	.byte 0, 0, 0x80, 0x7f
 	.byte 0, 0, 0xc0, 0x7f
 	.float	0.0
-	.float	0.0
+zero:	.float	0.0
+infinity:
 	.byte 0, 0, 0x80, 0x7f
 	.byte 0, 0, 0xc0, 0x7f
 	.float 0.0
@@ -90,7 +91,7 @@ ENTRY(__cexpf)
 	   Check your FPU manual for more information.  */
 	andb	$0x01, %ah
 	cmpb	$0x01, %ah
-	je	2f
+	je	20f
 
 	/* We have finite numbers in the real and imaginary part.  Do
 	   the real work now.  */
@@ -143,9 +144,8 @@ ENTRY(__cexpf)
 1:	fxam			/* y : x */
 	fnstsw
 	movb	%ah, %dl
-	andb	$0x01, %ah	/* See above why 0x01 is usable here.  */
-	cmpb	$0x01, %ah
-	je	3f
+	testb	$0x01, %ah	/* See above why 0x01 is usable here.  */
+	jne	3f
 
 
 	/* The real part is +-Inf and the imaginary part is finite.  */
@@ -222,7 +222,14 @@ ENTRY(__cexpf)
 	.align ALIGNARG(4)
 3:	fstp	%st(0)
 	fstp	%st(0)		/* <empty> */
-	movl	%edx, %eax
+	andb	$0x45, %ah
+	andb	$0x47, %dh
+	xorb	%dh, %ah
+	jnz	30f
+	flds	MO(infinity)	/* Raise invalid exception.  */
+	fmuls	MO(zero)
+	fstp	%st(0)
+30:	movl	%edx, %eax
 	shrl	$6, %edx
 	shll	$3, %eax
 	andl	$8, %edx
@@ -235,6 +242,9 @@ ENTRY(__cexpf)
 
 	/* The real part is NaN.  */
 	.align ALIGNARG(4)
+20:	flds	MO(infinity)		/* Raise invalid exception.  */
+	fmuls	MO(zero)
+	fstp	%st(0)
 2:	fstp	%st(0)
 	fstp	%st(0)
 	movl	MO(huge_nan_null_null+4), %eax
diff --git a/sysdeps/libm-i387/s_cexpl.S b/sysdeps/libm-i387/s_cexpl.S
index fa31e74162..11c05c52e6 100644
--- a/sysdeps/libm-i387/s_cexpl.S
+++ b/sysdeps/libm-i387/s_cexpl.S
@@ -31,7 +31,8 @@ huge_nan_null_null:
 	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
 	.byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
 	.double	0.0
-	.double	0.0
+zero:	.double	0.0
+infinity:
 	.byte 0, 0, 0, 0, 0, 0, 0xf0, 0x7f
 	.byte 0, 0, 0, 0, 0, 0, 0xff, 0x7f
 	.double 0.0
@@ -90,7 +91,7 @@ ENTRY(__cexpl)
 	   Check your FPU manual for more information.  */
 	andb	$0x01, %ah
 	cmpb	$0x01, %ah
-	je	2f
+	je	20f
 
 	/* We have finite numbers in the real and imaginary part.  Do
 	   the real work now.  */
@@ -139,9 +140,8 @@ ENTRY(__cexpl)
 1:	fxam			/* y : x */
 	fnstsw
 	movb	%ah, %dl
-	andb	$0x01, %ah	/* See above why 0x01 is usable here.  */
-	cmpb	$0x01, %ah
-	je	3f
+	testb	$0x01, %ah	/* See above why 0x01 is usable here.  */
+	jne	3f
 
 
 	/* The real part is +-Inf and the imaginary part is finite.  */
@@ -220,7 +220,14 @@ ENTRY(__cexpl)
 	.align ALIGNARG(4)
 3:	fstp	%st(0)
 	fstp	%st(0)		/* <empty> */
-	movl	%edx, %eax
+	andb	$0x45, %ah
+	andb	$0x47, %dh
+	xorb	%dh, %ah
+	jnz	30f
+	fldl	MO(infinity)	/* Raise invalid exception.  */
+	fmull	MO(zero)
+	fstp	%st(0)
+30:	movl	%edx, %eax
 	shrl	$5, %edx
 	shll	$4, %eax
 	andl	$16, %edx
@@ -236,6 +243,9 @@ ENTRY(__cexpl)
 
 	/* The real part is NaN.  */
 	.align ALIGNARG(4)
+20:	fldl	MO(infinity)		/* Raise invalid exception.  */
+	fmull	MO(zero)
+	fstp	%st(0)
 2:	fstp	%st(0)
 	fstp	%st(0)
 	movl	4(%esp), %eax		/* Pointer to memory for result.  */
diff --git a/sysdeps/libm-ieee754/s_ccos.c b/sysdeps/libm-ieee754/s_ccos.c
index 8a4b55dd99..f8dfcc8af6 100644
--- a/sysdeps/libm-ieee754/s_ccos.c
+++ b/sysdeps/libm-ieee754/s_ccos.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 
@@ -33,16 +34,31 @@ __ccos (__complex__ double x)
 	{
 	  __real__ res = __nan ("");
 	  __imag__ res = 0.0;
+
+#ifdef FE_INVALID
+	  if (__isinf (__real__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else if (__isinf (__imag__ x))
 	{
 	  __real__ res = HUGE_VAL;
 	  __imag__ res = __nan ("");
+
+#ifdef FE_INVALID
+	  if (__isinf (__real__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else
 	{
 	  __real__ res = __nan ("");
 	  __imag__ res = __nan ("");
+
+#ifdef FE_INVALID
+	  if (isfinite (__imag__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_ccosf.c b/sysdeps/libm-ieee754/s_ccosf.c
index 9d1a97239c..b090ae5747 100644
--- a/sysdeps/libm-ieee754/s_ccosf.c
+++ b/sysdeps/libm-ieee754/s_ccosf.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 
@@ -33,16 +34,31 @@ __ccosf (__complex__ float x)
 	{
 	  __real__ res = __nanf ("");
 	  __imag__ res = 0.0;
+
+#ifdef FE_INVALID
+	  if (__isinff (__real__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else if (__isinff (__imag__ x))
 	{
 	  __real__ res = HUGE_VALF;
 	  __imag__ res = __nanf ("");
+
+#ifdef FE_INVALID
+	  if (__isinff (__real__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else
 	{
 	  __real__ res = __nanf ("");
 	  __imag__ res = __nanf ("");
+
+#ifdef FE_INVALID
+	  if (isfinite (__imag__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_ccosh.c b/sysdeps/libm-ieee754/s_ccosh.c
index fa958f491b..1e92f03771 100644
--- a/sysdeps/libm-ieee754/s_ccosh.c
+++ b/sysdeps/libm-ieee754/s_ccosh.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -39,18 +40,24 @@ __ccosh (__complex__ double x)
       if (icls >= FP_ZERO)
 	{
 	  /* Imaginary part is finite.  */
+	  double sinh_val = __ieee754_sinh (__real__ x);
 	  double cosh_val = __ieee754_cosh (__real__ x);
 	  double sinix, cosix;
 
 	  __sincos (__imag__ x, &sinix, &cosix);
 
 	  __real__ retval = cosh_val * cosix;
-	  __imag__ retval = cosh_val * sinix;
+	  __imag__ retval = sinh_val * sinix;
 	}
       else
 	{
 	  __imag__ retval = __real__ x == 0.0 ? 0.0 : __nan ("");
 	  __real__ retval = __nan ("") + __nan ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else if (rcls == FP_INFINITE)
@@ -77,6 +84,11 @@ __ccosh (__complex__ double x)
 	  /* The addition raises the invalid exception.  */
 	  __real__ retval = HUGE_VAL;
 	  __imag__ retval = __nan ("") + __nan ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_ccoshf.c b/sysdeps/libm-ieee754/s_ccoshf.c
index aeeacbaed0..573a63367b 100644
--- a/sysdeps/libm-ieee754/s_ccoshf.c
+++ b/sysdeps/libm-ieee754/s_ccoshf.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -39,18 +40,24 @@ __ccoshf (__complex__ float x)
       if (icls >= FP_ZERO)
 	{
 	  /* Imaginary part is finite.  */
+	  float sinh_val = __ieee754_sinhf (__real__ x);
 	  float cosh_val = __ieee754_coshf (__real__ x);
 	  float sinix, cosix;
 
 	  __sincosf (__imag__ x, &sinix, &cosix);
 
 	  __real__ retval = cosh_val * cosix;
-	  __imag__ retval = cosh_val * sinix;
+	  __imag__ retval = sinh_val * sinix;
 	}
       else
 	{
 	  __imag__ retval = __real__ x == 0.0 ? 0.0 : __nanf ("");
-	  __real__ retval = __nanf ("") + __nanf ("");
+	  __real__ retval = __nanf ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else if (rcls == FP_INFINITE)
@@ -77,6 +84,11 @@ __ccoshf (__complex__ float x)
 	  /* The addition raises the invalid exception.  */
 	  __real__ retval = HUGE_VALF;
 	  __imag__ retval = __nanf ("") + __nanf ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_ccoshl.c b/sysdeps/libm-ieee754/s_ccoshl.c
index 9937ba1904..feb1351917 100644
--- a/sysdeps/libm-ieee754/s_ccoshl.c
+++ b/sysdeps/libm-ieee754/s_ccoshl.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -39,18 +40,24 @@ __ccoshl (__complex__ long double x)
       if (icls >= FP_ZERO)
 	{
 	  /* Imaginary part is finite.  */
+	  long double sinh_val = __ieee754_sinhl (__real__ x);
 	  long double cosh_val = __ieee754_coshl (__real__ x);
 	  long double sinix, cosix;
 
 	  __sincosl (__imag__ x, &sinix, &cosix);
 
 	  __real__ retval = cosh_val * cosix;
-	  __imag__ retval = cosh_val * sinix;
+	  __imag__ retval = sinh_val * sinix;
 	}
       else
 	{
 	  __imag__ retval = __real__ x == 0.0 ? 0.0 : __nanl ("");
 	  __real__ retval = __nanl ("") + __nanl ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else if (rcls == FP_INFINITE)
@@ -77,6 +84,11 @@ __ccoshl (__complex__ long double x)
 	  /* The addition raises the invalid exception.  */
 	  __real__ retval = HUGE_VALL;
 	  __imag__ retval = __nanl ("") + __nanl ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_ccosl.c b/sysdeps/libm-ieee754/s_ccosl.c
index a41d48b970..fdcc7a63dd 100644
--- a/sysdeps/libm-ieee754/s_ccosl.c
+++ b/sysdeps/libm-ieee754/s_ccosl.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 
@@ -33,16 +34,31 @@ __ccosl (__complex__ long double x)
 	{
 	  __real__ res = __nanl ("");
 	  __imag__ res = 0.0;
+
+#ifdef FE_INVALID
+	  if (__isinfl (__real__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else if (__isinfl (__imag__ x))
 	{
 	  __real__ res = HUGE_VALL;
 	  __imag__ res = __nanl ("");
+
+#ifdef FE_INVALID
+	  if (__isinfl (__real__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else
 	{
 	  __real__ res = __nanl ("");
 	  __imag__ res = __nanl ("");
+
+#ifdef FE_INVALID
+	  if (isfinite (__imag__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_cexpf.c b/sysdeps/libm-ieee754/s_cexpf.c
index 99f33dc873..603e78d716 100644
--- a/sysdeps/libm-ieee754/s_cexpf.c
+++ b/sysdeps/libm-ieee754/s_cexpf.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -59,6 +60,10 @@ __cexpf (__complex__ float x)
 	     is not +-inf the result is NaN + iNaN.  */
 	  __real__ retval = __nanf ("");
 	  __imag__ retval = __nanf ("");
+
+#ifdef FE_INVALID
+	  feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else if (rcls == FP_INFINITE)
@@ -89,6 +94,11 @@ __cexpf (__complex__ float x)
 	{
 	  __real__ retval = HUGE_VALF;
 	  __imag__ retval = __nanf ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else
 	{
@@ -101,6 +111,11 @@ __cexpf (__complex__ float x)
       /* If the real part is NaN the result is NaN + iNaN.  */
       __real__ retval = __nanf ("");
       __imag__ retval = __nanf ("");
+
+#ifdef FE_INVALID
+      if (rcls != FP_NAN || icls != FP_NAN)
+	feraiseexcept (FE_INVALID);
+#endif
     }
 
   return retval;
diff --git a/sysdeps/libm-ieee754/s_cexpl.c b/sysdeps/libm-ieee754/s_cexpl.c
index 1b97dba74d..67fa7a08b9 100644
--- a/sysdeps/libm-ieee754/s_cexpl.c
+++ b/sysdeps/libm-ieee754/s_cexpl.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -59,6 +60,10 @@ __cexpl (__complex__ long double x)
 	     is not +-inf the result is NaN + iNaN.  */
 	  __real__ retval = __nanl ("");
 	  __imag__ retval = __nanl ("");
+
+#ifdef FE_INVALID
+	  feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else if (rcls == FP_INFINITE)
@@ -89,6 +94,11 @@ __cexpl (__complex__ long double x)
 	{
 	  __real__ retval = HUGE_VALL;
 	  __imag__ retval = __nanl ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
       else
 	{
@@ -101,6 +111,11 @@ __cexpl (__complex__ long double x)
       /* If the real part is NaN the result is NaN + iNaN.  */
       __real__ retval = __nanl ("");
       __imag__ retval = __nanl ("");
+
+#ifdef FE_INVALID
+      if (rcls != FP_NAN || icls != FP_NAN)
+	feraiseexcept (FE_INVALID);
+#endif
     }
 
   return retval;
diff --git a/sysdeps/libm-ieee754/s_cproj.c b/sysdeps/libm-ieee754/s_cproj.c
index 8ad27c0e5b..fb50bb5a88 100644
--- a/sysdeps/libm-ieee754/s_cproj.c
+++ b/sysdeps/libm-ieee754/s_cproj.c
@@ -27,7 +27,7 @@ __cproj (__complex__ double x)
 {
   __complex__ double res;
 
-  if (!finite (__real__ x) || !finite (__imag__ x))
+  if (!isfinite (__real__ x) || !isfinite (__imag__ x))
     {
       __real__ res = INFINITY;
       __imag__ res = __copysign (0.0, __imag__ x);
diff --git a/sysdeps/libm-ieee754/s_cprojf.c b/sysdeps/libm-ieee754/s_cprojf.c
index 8ee61c727c..b90590835c 100644
--- a/sysdeps/libm-ieee754/s_cprojf.c
+++ b/sysdeps/libm-ieee754/s_cprojf.c
@@ -27,7 +27,7 @@ __cprojf (__complex__ float x)
 {
   __complex__ float res;
 
-  if (!finite (__real__ x) || !finite (__imag__ x))
+  if (!isfinite (__real__ x) || !isfinite (__imag__ x))
     {
       __real__ res = INFINITY;
       __imag__ res = __copysignf (0.0, __imag__ x);
diff --git a/sysdeps/libm-ieee754/s_cprojl.c b/sysdeps/libm-ieee754/s_cprojl.c
index 34298e1f25..13da4b417d 100644
--- a/sysdeps/libm-ieee754/s_cprojl.c
+++ b/sysdeps/libm-ieee754/s_cprojl.c
@@ -27,7 +27,7 @@ __cprojl (__complex__ long double x)
 {
   __complex__ long double res;
 
-  if (!finite (__real__ x) || !finite (__imag__ x))
+  if (!isfinite (__real__ x) || !isfinite (__imag__ x))
     {
       __real__ res = INFINITY;
       __imag__ res = __copysignl (0.0, __imag__ x);
diff --git a/sysdeps/libm-ieee754/s_csin.c b/sysdeps/libm-ieee754/s_csin.c
index 4639bcaaa6..6627387d42 100644
--- a/sysdeps/libm-ieee754/s_csin.c
+++ b/sysdeps/libm-ieee754/s_csin.c
@@ -19,46 +19,110 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
+#include "math_private.h"
+
 
 __complex__ double
 __csin (__complex__ double x)
 {
-  __complex__ double res;
+  __complex__ double retval;
+  int negate = signbit (__real__ x);
+  int rcls = fpclassify (__real__ x);
+  int icls = fpclassify (__imag__ x);
+
+  __real__ x = fabs (__real__ x);
 
-  if (!isfinite (__real__ x) || isnan (__imag__ x))
+  if (icls >= FP_ZERO)
     {
-      if (__real__ x == 0.0 || __imag__ x == 0.0)
-	{
-	  __real__ res = __nan ("");
-	  __imag__ res = 0.0;
-	}
-      else if (__isinf (__imag__ x))
+      /* Imaginary part is finite.  */
+      if (rcls >= FP_ZERO)
 	{
-	  __real__ res = __nan ("");
-	  __imag__ res = __imag__ x;
+	  /* Real part is finite.  */
+	  double sinh_val = __ieee754_sinh (__imag__ x);
+	  double cosh_val = __ieee754_cosh (__imag__ x);
+	  double sinix, cosix;
+
+	  __sincos (__real__ x, &sinix, &cosix);
+
+	  __real__ retval = cosh_val * sinix;
+	  __imag__ retval = sinh_val * cosix;
+
+	  if (negate)
+	    __real__ retval = -__real__ retval;
 	}
       else
 	{
-	  __real__ res = __nan ("");
-	  __imag__ res = __nan ("");
+	  if (icls == FP_ZERO)
+	    {
+	      /* Imaginary part is 0.0.  */
+	      __real__ retval = __nan ("");
+	      __imag__ retval = __imag__ x;
+
+#ifdef FE_INVALID
+	      if (rcls == FP_INFINITE)
+		feraiseexcept (FE_INVALID);
+#endif
+	    }
+	  else
+	    {
+	      __real__ retval = __nan ("");
+	      __imag__ retval = __nan ("");
+
+#ifdef FE_INVALID
+	      feraiseexcept (FE_INVALID);
+#endif
+	    }
 	}
     }
-  else
+  else if (icls == FP_INFINITE)
     {
-      __complex__ double y;
+      /* Imaginary part is infinite.  */
+      if (rcls == FP_ZERO)
+	{
+	  /* Real part is 0.0.  */
+	  __real__ retval = __copysign (0.0, negate ? -1.0 : 1.0);
+	  __imag__ retval = __imag__ x;
+	}
+      else if (rcls > FP_ZERO)
+	{
+	  /* Real part is finite.  */
+	  double sinix, cosix;
+
+	  __sincos (__real__ x, &sinix, &cosix);
 
-      __real__ y = -__imag__ x;
-      __imag__ y = __real__ x;
+	  __real__ retval = __copysign (HUGE_VAL, sinix);
+	  __imag__ retval = __copysign (HUGE_VAL, cosix);
 
-      y = __csinh (y);
+	  if (negate)
+	    __real__ retval = -__real__ retval;
+	  if (signbit (__imag__ x))
+	    __imag__ retval = -__imag__ retval;
+	}
+      else
+	{
+	  /* The addition raises the invalid exception.  */
+	  __real__ retval = __nan ("");
+	  __imag__ retval = HUGE_VAL;
 
-      __real__ res = __imag__ y;
-      __imag__ res = -__real__ y;
+#ifdef FE_INVALID
+	  if (rcls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
+	}
+    }
+  else
+    {
+      if (rcls == FP_ZERO)
+	__real__ retval = __copysign (0.0, negate ? -1.0 : 1.0);
+      else
+	__real__ retval = __nan ("");
+      __imag__ retval = __nan ("");
     }
 
-  return res;
+  return retval;
 }
 weak_alias (__csin, csin)
 #ifdef NO_LONG_DOUBLE
diff --git a/sysdeps/libm-ieee754/s_csinf.c b/sysdeps/libm-ieee754/s_csinf.c
index f7f10e6b6f..31d2f1fd54 100644
--- a/sysdeps/libm-ieee754/s_csinf.c
+++ b/sysdeps/libm-ieee754/s_csinf.c
@@ -19,45 +19,109 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
+#include "math_private.h"
+
 
 __complex__ float
 __csinf (__complex__ float x)
 {
-  __complex__ float res;
+  __complex__ float retval;
+  int negate = signbit (__real__ x);
+  int rcls = fpclassify (__real__ x);
+  int icls = fpclassify (__imag__ x);
+
+  __real__ x = fabsf (__real__ x);
 
-  if (!isfinite (__real__ x) || isnan (__imag__ x))
+  if (icls >= FP_ZERO)
     {
-      if (__real__ x == 0.0 || __imag__ x == 0.0)
-	{
-	  __real__ res = __nanf ("");
-	  __imag__ res = 0.0;
-	}
-      else if (__isinff (__imag__ x))
+      /* Imaginary part is finite.  */
+      if (rcls >= FP_ZERO)
 	{
-	  __real__ res = __nanf ("");
-	  __imag__ res = __imag__ x;
+	  /* Real part is finite.  */
+	  float sinh_val = __ieee754_sinhf (__imag__ x);
+	  float cosh_val = __ieee754_coshf (__imag__ x);
+	  float sinix, cosix;
+
+	  __sincosf (__real__ x, &sinix, &cosix);
+
+	  __real__ retval = cosh_val * sinix;
+	  __imag__ retval = sinh_val * cosix;
+
+	  if (negate)
+	    __real__ retval = -__real__ retval;
 	}
       else
 	{
-	  __real__ res = __nanf ("");
-	  __imag__ res = __nanf ("");
+	  if (icls == FP_ZERO)
+	    {
+	      /* Imaginary part is 0.0.  */
+	      __real__ retval = __nanf ("");
+	      __imag__ retval = __imag__ x;
+
+#ifdef FE_INVALID
+	      if (rcls == FP_INFINITE)
+		feraiseexcept (FE_INVALID);
+#endif
+	    }
+	  else
+	    {
+	      __real__ retval = __nanf ("");
+	      __imag__ retval = __nanf ("");
+
+#ifdef FE_INVALID
+	      feraiseexcept (FE_INVALID);
+#endif
+	    }
 	}
     }
-  else
+  else if (icls == FP_INFINITE)
     {
-      __complex__ float y;
+      /* Imaginary part is infinite.  */
+      if (rcls == FP_ZERO)
+	{
+	  /* Real part is 0.0.  */
+	  __real__ retval = __copysignf (0.0, negate ? -1.0 : 1.0);
+	  __imag__ retval = __imag__ x;
+	}
+      else if (rcls > FP_ZERO)
+	{
+	  /* Real part is finite.  */
+	  float sinix, cosix;
+
+	  __sincosf (__real__ x, &sinix, &cosix);
 
-      __real__ y = -__imag__ x;
-      __imag__ y = __real__ x;
+	  __real__ retval = __copysignf (HUGE_VALF, sinix);
+	  __imag__ retval = __copysignf (HUGE_VALF, cosix);
 
-      y = __csinhf (y);
+	  if (negate)
+	    __real__ retval = -__real__ retval;
+	  if (signbit (__imag__ x))
+	    __imag__ retval = -__imag__ retval;
+	}
+      else
+	{
+	  /* The addition raises the invalid exception.  */
+	  __real__ retval = __nanf ("");
+	  __imag__ retval = HUGE_VALF;
 
-      __real__ res = __imag__ y;
-      __imag__ res = -__real__ y;
+#ifdef FE_INVALID
+	  if (rcls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
+	}
+    }
+  else
+    {
+      if (rcls == FP_ZERO)
+	__real__ retval = __copysignf (0.0, negate ? -1.0 : 1.0);
+      else
+	__real__ retval = __nanf ("");
+      __imag__ retval = __nanf ("");
     }
 
-  return res;
+  return retval;
 }
 weak_alias (__csinf, csinf)
diff --git a/sysdeps/libm-ieee754/s_csinh.c b/sysdeps/libm-ieee754/s_csinh.c
index 98f06a558f..29a271fec6 100644
--- a/sysdeps/libm-ieee754/s_csinh.c
+++ b/sysdeps/libm-ieee754/s_csinh.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -41,12 +42,13 @@ __csinh (__complex__ double x)
 	{
 	  /* Imaginary part is finite.  */
 	  double sinh_val = __ieee754_sinh (__real__ x);
+	  double cosh_val = __ieee754_cosh (__real__ x);
 	  double sinix, cosix;
 
 	  __sincos (__imag__ x, &sinix, &cosix);
 
 	  __real__ retval = sinh_val * cosix;
-	  __imag__ retval = sinh_val * sinix;
+	  __imag__ retval = cosh_val * sinix;
 
 	  if (negate)
 	    __real__ retval = -__real__ retval;
@@ -58,11 +60,20 @@ __csinh (__complex__ double x)
 	      /* Real part is 0.0.  */
 	      __real__ retval = __copysign (0.0, negate ? -1.0 : 1.0);
 	      __imag__ retval = __nan ("") + __nan ("");
+
+#ifdef FE_INVALID
+	      if (icls == FP_INFINITE)
+		feraiseexcept (FE_INVALID);
+#endif
 	    }
 	  else
 	    {
 	      __real__ retval = __nan ("");
 	      __imag__ retval = __nan ("");
+
+#ifdef FE_INVALID
+	      feraiseexcept (FE_INVALID);
+#endif
 	    }
 	}
     }
@@ -93,6 +104,11 @@ __csinh (__complex__ double x)
 	  /* The addition raises the invalid exception.  */
 	  __real__ retval = HUGE_VAL;
 	  __imag__ retval = __nan ("") + __nan ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_csinhf.c b/sysdeps/libm-ieee754/s_csinhf.c
index c644d3a5e8..9c479bba95 100644
--- a/sysdeps/libm-ieee754/s_csinhf.c
+++ b/sysdeps/libm-ieee754/s_csinhf.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -41,12 +42,13 @@ __csinhf (__complex__ float x)
 	{
 	  /* Imaginary part is finite.  */
 	  float sinh_val = __ieee754_sinhf (__real__ x);
+	  float cosh_val = __ieee754_coshf (__real__ x);
 	  float sinix, cosix;
 
 	  __sincosf (__imag__ x, &sinix, &cosix);
 
 	  __real__ retval = sinh_val * cosix;
-	  __imag__ retval = sinh_val * sinix;
+	  __imag__ retval = cosh_val * sinix;
 
 	  if (negate)
 	    __real__ retval = -__real__ retval;
@@ -58,11 +60,20 @@ __csinhf (__complex__ float x)
 	      /* Real part is 0.0.  */
 	      __real__ retval = __copysignf (0.0, negate ? -1.0 : 1.0);
 	      __imag__ retval = __nanf ("") + __nanf ("");
+
+#ifdef FE_INVALID
+	      if (icls == FP_INFINITE)
+		feraiseexcept (FE_INVALID);
+#endif
 	    }
 	  else
 	    {
 	      __real__ retval = __nanf ("");
 	      __imag__ retval = __nanf ("");
+
+#ifdef FE_INVALID
+	      feraiseexcept (FE_INVALID);
+#endif
 	    }
 	}
     }
@@ -93,6 +104,11 @@ __csinhf (__complex__ float x)
 	  /* The addition raises the invalid exception.  */
 	  __real__ retval = HUGE_VALF;
 	  __imag__ retval = __nanf ("") + __nanf ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_csinhl.c b/sysdeps/libm-ieee754/s_csinhl.c
index 4bb9e63680..694b39d670 100644
--- a/sysdeps/libm-ieee754/s_csinhl.c
+++ b/sysdeps/libm-ieee754/s_csinhl.c
@@ -41,12 +41,13 @@ __csinhl (__complex__ long double x)
 	{
 	  /* Imaginary part is finite.  */
 	  long double sinh_val = __ieee754_sinhl (__real__ x);
+	  long double cosh_val = __ieee754_coshl (__real__ x);
 	  long double sinix, cosix;
 
 	  __sincosl (__imag__ x, &sinix, &cosix);
 
 	  __real__ retval = sinh_val * cosix;
-	  __imag__ retval = sinh_val * sinix;
+	  __imag__ retval = cosh_val * sinix;
 
 	  if (negate)
 	    __real__ retval = -__real__ retval;
@@ -58,11 +59,20 @@ __csinhl (__complex__ long double x)
 	      /* Real part is 0.0.  */
 	      __real__ retval = __copysignl (0.0, negate ? -1.0 : 1.0);
 	      __imag__ retval = __nanl ("") + __nanl ("");
+
+#ifdef FE_INVALID
+	      if (icls == FP_INFINITE)
+		feraiseexcept (FE_INVALID);
+#endif
 	    }
 	  else
 	    {
 	      __real__ retval = __nanl ("");
 	      __imag__ retval = __nanl ("");
+
+#ifdef FE_INVALID
+	      feraiseexcept (FE_INVALID);
+#endif
 	    }
 	}
     }
@@ -93,6 +103,11 @@ __csinhl (__complex__ long double x)
 	  /* The addition raises the invalid exception.  */
 	  __real__ retval = HUGE_VALL;
 	  __imag__ retval = __nanl ("") + __nanl ("");
+
+#ifdef FE_INVALID
+	  if (icls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_csinl.c b/sysdeps/libm-ieee754/s_csinl.c
index 513c144198..bae8648c32 100644
--- a/sysdeps/libm-ieee754/s_csinl.c
+++ b/sysdeps/libm-ieee754/s_csinl.c
@@ -19,45 +19,109 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
+#include "math_private.h"
+
 
 __complex__ long double
 __csinl (__complex__ long double x)
 {
-  __complex__ long double res;
+  __complex__ long double retval;
+  int negate = signbit (__real__ x);
+  int rcls = fpclassify (__real__ x);
+  int icls = fpclassify (__imag__ x);
+
+  __real__ x = fabsl (__real__ x);
 
-  if (!isfinite (__real__ x) || isnan (__imag__ x))
+  if (icls >= FP_ZERO)
     {
-      if (__real__ x == 0.0 || __imag__ x == 0.0)
-	{
-	  __real__ res = __nanl ("");
-	  __imag__ res = 0.0;
-	}
-      else if (__isinfl (__imag__ x))
+      /* Imaginary part is finite.  */
+      if (rcls >= FP_ZERO)
 	{
-	  __real__ res = __nanl ("");
-	  __imag__ res = __imag__ x;
+	  /* Real part is finite.  */
+	  long double sinh_val = __ieee754_sinhl (__imag__ x);
+	  long double cosh_val = __ieee754_coshl (__imag__ x);
+	  long double sinix, cosix;
+
+	  __sincosl (__real__ x, &sinix, &cosix);
+
+	  __real__ retval = cosh_val * sinix;
+	  __imag__ retval = sinh_val * cosix;
+
+	  if (negate)
+	    __real__ retval = -__real__ retval;
 	}
       else
 	{
-	  __real__ res = __nanl ("");
-	  __imag__ res = __nanl ("");
+	  if (icls == FP_ZERO)
+	    {
+	      /* Imaginary part is 0.0.  */
+	      __real__ retval = __nanl ("");
+	      __imag__ retval = __imag__ x;
+
+#ifdef FE_INVALID
+	      if (rcls == FP_INFINITE)
+		feraiseexcept (FE_INVALID);
+#endif
+	    }
+	  else
+	    {
+	      __real__ retval = __nanl ("");
+	      __imag__ retval = __nanl ("");
+
+#ifdef FE_INVALID
+	      feraiseexcept (FE_INVALID);
+#endif
+	    }
 	}
     }
-  else
+  else if (icls == FP_INFINITE)
     {
-      __complex__ long double y;
+      /* Imaginary part is infinite.  */
+      if (rcls == FP_ZERO)
+	{
+	  /* Real part is 0.0.  */
+	  __real__ retval = __copysignl (0.0, negate ? -1.0 : 1.0);
+	  __imag__ retval = __imag__ x;
+	}
+      else if (rcls > FP_ZERO)
+	{
+	  /* Real part is finite.  */
+	  long double sinix, cosix;
+
+	  __sincosl (__real__ x, &sinix, &cosix);
 
-      __real__ y = -__imag__ x;
-      __imag__ y = __real__ x;
+	  __real__ retval = __copysignl (HUGE_VALL, sinix);
+	  __imag__ retval = __copysignl (HUGE_VALL, cosix);
 
-      y = __csinhl (y);
+	  if (negate)
+	    __real__ retval = -__real__ retval;
+	  if (signbit (__imag__ x))
+	    __imag__ retval = -__imag__ retval;
+	}
+      else
+	{
+	  /* The addition raises the invalid exception.  */
+	  __real__ retval = __nanl ("");
+	  __imag__ retval = HUGE_VALL;
 
-      __real__ res = __imag__ y;
-      __imag__ res = -__real__ y;
+#ifdef FE_INVALID
+	  if (rcls == FP_INFINITE)
+	    feraiseexcept (FE_INVALID);
+#endif
+	}
+    }
+  else
+    {
+      if (rcls == FP_ZERO)
+	__real__ retval = __copysignl (0.0, negate ? -1.0 : 1.0);
+      else
+	__real__ retval = __nanl ("");
+      __imag__ retval = __nanl ("");
     }
 
-  return res;
+  return retval;
 }
 weak_alias (__csinl, csinl)
diff --git a/sysdeps/libm-ieee754/s_ctanh.c b/sysdeps/libm-ieee754/s_ctanh.c
index eb6ff84817..d8825f35f9 100644
--- a/sysdeps/libm-ieee754/s_ctanh.c
+++ b/sysdeps/libm-ieee754/s_ctanh.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -44,6 +45,11 @@ __ctanh (__complex__ double x)
 	{
 	  __real__ res = __nan ("");
 	  __imag__ res = __nan ("");
+
+#ifdef FE_INVALID
+	  if (__isinf (__imag__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_ctanhf.c b/sysdeps/libm-ieee754/s_ctanhf.c
index aec02fe7c4..fd66648d79 100644
--- a/sysdeps/libm-ieee754/s_ctanhf.c
+++ b/sysdeps/libm-ieee754/s_ctanhf.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -44,6 +45,11 @@ __ctanhf (__complex__ float x)
 	{
 	  __real__ res = __nanf ("");
 	  __imag__ res = __nanf ("");
+
+#ifdef FE_INVALID
+	  if (__isinff (__imag__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/libm-ieee754/s_ctanhl.c b/sysdeps/libm-ieee754/s_ctanhl.c
index 8ed131e9a6..5ec06a6fa4 100644
--- a/sysdeps/libm-ieee754/s_ctanhl.c
+++ b/sysdeps/libm-ieee754/s_ctanhl.c
@@ -19,6 +19,7 @@
    Boston, MA 02111-1307, USA.  */
 
 #include <complex.h>
+#include <fenv.h>
 #include <math.h>
 
 #include "math_private.h"
@@ -44,6 +45,11 @@ __ctanhl (__complex__ long double x)
 	{
 	  __real__ res = __nanl ("");
 	  __imag__ res = __nanl ("");
+
+#ifdef FE_INVALID
+	  if (__isinfl (__imag__ x))
+	    feraiseexcept (FE_INVALID);
+#endif
 	}
     }
   else
diff --git a/sysdeps/stub/abi-tag.h b/sysdeps/stub/abi-tag.h
new file mode 100644
index 0000000000..2810552694
--- /dev/null
+++ b/sysdeps/stub/abi-tag.h
@@ -0,0 +1,3 @@
+#error must define an ABI tag for this port
+
+#define ABI_TAG 0xff123abc
diff --git a/sysdeps/unix/sysv/linux/abi-tag.h b/sysdeps/unix/sysv/linux/abi-tag.h
new file mode 100644
index 0000000000..166e6a12f6
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/abi-tag.h
@@ -0,0 +1,16 @@
+/* Define the GNU ABI tag for the Linux kernel we need.
+   The is a 4-byte quantity in native byte order:
+   the high byte is 0 to indicate Linux;
+   the low three bytes are the LINUX_VERSION_CODE for the earliest
+   compatible Linux kernel.  */
+
+#define ABI_LINUX_TAG	0
+
+#define ABI_LINUX_MAJOR	2
+#define ABI_LINUX_MINOR	0
+#define ABI_LINUX_PATCH	0
+
+#define ABI_TAG ((ABI_LINUX_TAG << 24) |				      \
+		 (ABI_LINUX_MAJOR << 16) |				      \
+		 (ABI_LINUX_MINOR << 8) |				      \
+		 (ABI_LINUX_PATCH << 0))
diff --git a/sysdeps/unix/sysv/linux/alpha/clone.S b/sysdeps/unix/sysv/linux/alpha/clone.S
index 261bd81e57..5d36e2588d 100644
--- a/sysdeps/unix/sysv/linux/alpha/clone.S
+++ b/sysdeps/unix/sysv/linux/alpha/clone.S
@@ -44,7 +44,7 @@ ENTRY(__clone)
 
 	/* Do the system call */
 	mov	a0,pv			/* get fn ptr out of the way */
-	mov	a3,a4			/* get fn arg out of the way */
+	mov	a3,t0			/* get fn arg out of the way */
 	mov	a2,a0
 	ldiq	v0,__NR_clone
 	call_pal PAL_callsys
@@ -74,7 +74,7 @@ thread_start:
 	.prologue 0
 
 	/* Call the user's function */
-	mov	a4,a0
+	mov	t0,a0
 	jsr	ra,(pv)
 	ldgp	gp,0(ra)
 
diff --git a/sysdeps/unix/sysv/linux/net/route.h b/sysdeps/unix/sysv/linux/net/route.h
index 3518dc5fc9..2450d5154a 100644
--- a/sysdeps/unix/sysv/linux/net/route.h
+++ b/sysdeps/unix/sysv/linux/net/route.h
@@ -56,12 +56,12 @@ struct in6_rtmsg
     struct in6_addr rtmsg_dst;
     struct in6_addr rtmsg_src;
     struct in6_addr rtmsg_gateway;
-    unsigned long int rtmsg_type;
-    unsigned short int rtmsg_dst_len;
-    unsigned short int rtmsg_src_len;
-    unsigned long int rtmsg_metric;
+    u_int32_t rtmsg_type;
+    u_int16_t rtmsg_dst_len;
+    u_int16_t rtmsg_src_len;
+    u_int32_t rtmsg_metric;
     unsigned long int rtmsg_info;
-    unsigned long int rtmsg_flags;
+    u_int32_t rtmsg_flags;
     int rtmsg_ifindex;
   };
 
diff --git a/sysdeps/unix/sysv/linux/netinet/ip_fw.h b/sysdeps/unix/sysv/linux/netinet/ip_fw.h
index 3887ca8992..8ba10ae196 100644
--- a/sysdeps/unix/sysv/linux/netinet/ip_fw.h
+++ b/sysdeps/unix/sysv/linux/netinet/ip_fw.h
@@ -41,14 +41,14 @@
  * 	flags and num_*_ports are stored in host byte order (of course).
  * 	Port numbers are stored in HOST byte order.
  */
- 
+
 #ifndef _NETINET_FW_H
 #define _NETINET_FW_H
 
 #include <sys/cdefs.h>
 #include <sys/types.h>
 
-#include <netinet/icmp.h>
+#include <netinet/ip_icmp.h>
 #include <netinet/in.h>
 #include <netinet/ip.h>
 #include <netinet/tcp.h>
@@ -107,11 +107,11 @@ struct ip_fw {
 
 #define IP_FW_F_MASK	0x3FFF	/* All possible flag bits mask        */
 
-/*    
+/*
  *	New IP firewall options for [gs]etsockopt at the RAW IP level.
  *	Unlike BSD Linux inherits IP options so you don't have to use
  *	a raw socket for this. Instead we check rights in the calls.
- */     
+ */
 
 #define IP_FW_BASE_CTL  	64	/* base for firewall socket options */
 
@@ -181,7 +181,7 @@ struct ip_fwpkt
  */
 
 struct ip_fw_masq;
-  
+
 __END_DECLS
 
 #endif /* _NETINET_IP_FW_H */
diff --git a/time/strftime.c b/time/strftime.c
index 898bd6c98c..4cb6c9e260 100644
--- a/time/strftime.c
+++ b/time/strftime.c
@@ -175,6 +175,7 @@ localtime_r (t, tp)
 /* Some systems lack the `memset' function and we don't want to
    introduce additional dependencies.  */
 static const char spaces[16] = "                ";
+static const char zeroes[16] = "0000000000000000";
 
 # define memset_space(P, Len) \
   do {									      \
@@ -189,11 +190,26 @@ static const char spaces[16] = "                ";
       }									      \
     while (_len > 0);							      \
   } while (0)
+
+# define memset_zero(P, Len) \
+  do {									      \
+    int _len = (Len);							      \
+									      \
+    do									      \
+      {									      \
+	int _this = _len > 16 ? 16 : _len;				      \
+	memcpy ((P), zeroes, _this);					      \
+	(P) += _this;							      \
+	_len -= _this;							      \
+      }									      \
+    while (_len > 0);							      \
+  } while (0)
 #else
 # define memset_space(P, Len) (memset ((P), ' ', (Len)), (P) += (Len))
+# define memset_zero(P, Len) (memset ((P), '0', (Len)), (P) += (Len))
 #endif
 
-#define	add(n, f) \
+#define	add(n, f)							      \
   do									      \
     {									      \
       int _n = (n);							      \
@@ -204,7 +220,12 @@ static const char spaces[16] = "                ";
       if (p)								      \
 	{								      \
 	  if (_delta > 0)						      \
-	    memset_space (p, _delta);					      \
+	    {								      \
+	      if (pad == '0')						      \
+		memset_zero (p, _delta);				      \
+	      else							      \
+		memset_space (p, _delta);				      \
+	    }								      \
 	  f;								      \
 	  p += _n;							      \
 	}								      \
diff --git a/time/strptime.c b/time/strptime.c
index fd457af6c0..90b88a1ba3 100644
--- a/time/strptime.c
+++ b/time/strptime.c
@@ -377,7 +377,7 @@ strptime_internal (buf, format, tm, decided)
 	case 'I':
 	  /* Match hour in 12-hour clock.  */
 	  get_number (1, 12);
-	  tm->tm_hour = val - 1;
+	  tm->tm_hour = val % 12;
 	  have_I = 1;
 	  break;
 	case 'j':