summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog56
-rw-r--r--db/makedb.c1
-rw-r--r--elf/dl-open.c2
-rw-r--r--elf/dl-runtime.c2
-rw-r--r--libc.map1
-rw-r--r--math/Makefile2
-rw-r--r--math/test-fenv.c164
-rw-r--r--posix/regex.c48
-rw-r--r--sysdeps/i386/fpu/fraiseexcpt.c51
-rw-r--r--sysdeps/m68k/bits/nan.h (renamed from sysdeps/m68k/nan.h)0
-rw-r--r--sysdeps/mach/hurd/abi-tag.h15
-rw-r--r--sysdeps/mach/hurd/dl-sysdep.c1
-rw-r--r--sysdeps/standalone/arm/bits/errno.h1
-rw-r--r--sysdeps/standalone/brk.c6
-rw-r--r--sysdeps/stub/getdomain.c34
-rw-r--r--sysdeps/stub/sys/param.h4
-rw-r--r--sysdeps/unix/sysv/linux/sys/quota.h1
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list1
18 files changed, 309 insertions, 81 deletions
diff --git a/ChangeLog b/ChangeLog
index e2830571fe..6a751ed9fa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,57 @@
+1997-06-27 20:09  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/unix/sysv/linux/sys/quota.h: Add <asm/types.h>.
+	Reported by a sun <asun@zoology.washington.edu>.
+
+	* libc.map: Add _rpc_dtablesize.  Reported by Thorsten Kukuk.
+
+	* db/makedb.c: Exit with error if number of option is incorrect.
+
+	* math/Makefile (tests): Add test-fenv.
+	* math/test-fenv.c: New file.  Test for exception handling functions.
+	Written mainly by Andreas Jaeger.
+
+	* sysdeps/i386/fpu/fraiseexcpt.c: Correct implementation.
+
+	* sysdeps/mach/hurd/abi-tag.h: Set tag to 1 for Hurd and kernel
+	compatibility version to 0.  Reported by Roland McGrath.
+
+1997-06-27 18:49  Philip Blundell  <Philip.Blundell@pobox.com>
+
+	* sysdeps/standalone/brk.c (__NONE_set_memvals): Correct typo.
+	* sysdeps/standalone/arm/bits/errno.h: Add ENOTDIR.
+	* sysdeps/stub/sys/param.h: Add definition of MAX and MIN.
+
+1997-06-27 10:44  Fila Kolodny  <fila@ibi.com>
+
+	* sysdeps/mach/hurd/dl-sysdep.c: Make _dl_sysdep_read_whole_file weak.
+
+1997-06-27 00:51  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* elf/dl-open.c (_dl_open): Check versions of all newly loaded
+	objects, including dependencies.
+
+	* elf/dl-runtime.c (fixup): Always use version information if
+	available.
+
+1997-06-26 12:25  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* sysdeps/m68k/bits/nan.h: Renamed from sysdeps/m68k/nan.h.
+
+1997-06-26 11:40  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
+
+	* posix/regex.c (DEBUG_POP): Assume parameter to be pointer to
+	int, not pointer to fail_stack_elt_t.
+	(PUSH_FAILURE_POINT): Fix all formats in debugging messages.  Fix
+	type of this_reg.
+	(POP_FAILURE_POINT): Likewise.  Fix type of failure_id.
+	(re_match_2_internal): Pass NULL, not 0, to PUSH_FAILURE_POINT.
+
+1997-06-27 02:17  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/unix/sysv/linux/syscalls.list: Add quotactl.
+	Reported by a sun.
+
 1997-06-26 21:50  Ulrich Drepper  <drepper@cygnus.com>
 
 	* math/math.h: Move definition of macros for unordered comparison
@@ -9,7 +63,7 @@
 	* Makerules: Move definition of load-map-file before use.
 	(lib%.so): Depend on load-map-file, not lib%-map.
 
-	* manual/lgpl.texinfo: Likewise.
+	* manual/lgpl.texinfo: Update copyright.
 
 1997-06-24 09:40  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
 
diff --git a/db/makedb.c b/db/makedb.c
index 32029fbbc6..6f8694d7c7 100644
--- a/db/makedb.c
+++ b/db/makedb.c
@@ -122,6 +122,7 @@ main (argc, argv)
 	  error (0, 0, gettext ("wrong number of arguments"));
 	  argp_help (&argp, stdout, ARGP_HELP_SEE,
 		     program_invocation_short_name);
+	  exit (1);
 	}
       input_name = argv[remaining];
     }
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 5915b7f2a2..529806cc36 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -55,7 +55,7 @@ _dl_open (const char *file, int mode)
   _dl_map_object_deps (new, NULL, 0, 0);
 
   /* So far, so good.  Now check the versions.  */
-  (void) _dl_check_map_versions (new, 0);
+  (void) _dl_check_all_versions (new, 0);
 
   /* Relocate the objects loaded.  We do this in reverse order so that copy
      relocs of earlier objects overwrite the data written by later objects.  */
diff --git a/elf/dl-runtime.c b/elf/dl-runtime.c
index 502c35d5d2..7a44ea4ce3 100644
--- a/elf/dl-runtime.c
+++ b/elf/dl-runtime.c
@@ -135,7 +135,7 @@ fixup (
 #include "dynamic-link.h"
 
     /* Perform the specified relocation.  */
-    if (l->l_info[VERSYMIDX (DT_VERNEEDNUM)])
+    if (l->l_info[VERSYMIDX (DT_VERSYM)])
       {
 	const ElfW(Half) * version =
 	  (const ElfW(Half) *) (l->l_addr +
diff --git a/libc.map b/libc.map
index 3254be9343..d7d22d9950 100644
--- a/libc.map
+++ b/libc.map
@@ -76,6 +76,7 @@ GLIBC_2.0 {
     _IO_seekmark; _IO_unsave_markers; _IO_str_overflow;
     _IO_str_underflow; _IO_str_init_static; _IO_str_init_readonly;
     _IO_str_seekoff; _IO_str_pbackfail; _IO_list_all;
+    _rpc_dtablesize;
 
     # all functions and variables in the normal name space
     a*; b*; c*; d*; e*; f*; g*; h*; i*; j*; k*; l*; m*;
diff --git a/math/Makefile b/math/Makefile
index 5a86f92f04..4eeb37f1e0 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -77,7 +77,7 @@ distribute += $(long-c-yes:=.c)
 
 # Rules for the test suite.
 tests = test-float test-double $(test-longdouble-$(long-double-fcts)) \
-	test-ifloat test-idouble test-matherr
+	test-ifloat test-idouble test-matherr test-fenv
 # We do the `long double' tests only if this data type is available and
 # distrinct from `double'.
 #
diff --git a/math/test-fenv.c b/math/test-fenv.c
new file mode 100644
index 0000000000..55114cc13b
--- /dev/null
+++ b/math/test-fenv.c
@@ -0,0 +1,164 @@
+/* Test for exception handling functions of libm */
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+#endif
+
+#include <complex.h>
+#include <math.h>
+#include <float.h>
+#include <fenv.h>
+
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/*
+  Since not all architectures might define all exceptions, we define
+  a private set and map accordingly.
+*/
+#define NO_EXC 0
+#define INEXACT_EXC 0x1
+#define DIVBYZERO_EXC 0x2
+#define UNDERFLOW_EXC 0x04
+#define OVERFLOW_EXC 0x08
+#define INVALID_EXC 0x10
+#define ALL_EXC \
+        (INEXACT_EXC | DIVBYZERO_EXC | UNDERFLOW_EXC | OVERFLOW_EXC | \
+         INVALID_EXC)
+
+static int count_errors;
+
+/* Test whether a given exception was raised.  */
+static void
+test_single_exception (short int exception,
+                       short int exc_flag,
+                       fexcept_t fe_flag,
+                       const char *flag_name)
+{
+  if (exception & exc_flag)
+    {
+      if (fetestexcept (fe_flag))
+        printf ("  Pass: Exception \"%s\" is set\n", flag_name);
+      else
+        {
+          printf ("  Fail: Exception \"%s\" is not set\n", flag_name);
+          ++count_errors;
+        }
+    }
+  else
+    {
+      if (fetestexcept (fe_flag))
+        {
+          printf ("  Fail: Exception \"%s\" is set\n", flag_name);
+          ++count_errors;
+        }
+      else
+        {
+          printf ("  Pass: Exception \"%s\" is not set\n", flag_name);
+        }
+    }
+}
+
+static void
+test_exceptions (const char *test_name, short int exception)
+{
+  printf ("Test: %s\n", test_name);
+#ifdef FE_DIVBYZERO
+  test_single_exception (exception, DIVBYZERO_EXC, FE_DIVBYZERO,
+                         "DIVBYZERO");
+#endif
+#ifdef FE_INVALID
+  test_single_exception (exception, INVALID_EXC, FE_INVALID,
+                         "INVALID");
+#endif
+#ifdef FE_INEXACT
+  test_single_exception (exception, INEXACT_EXC, FE_INEXACT,
+                         "INEXACT");
+#endif
+#ifdef FE_UNDERFLOW
+  test_single_exception (exception, UNDERFLOW_EXC, FE_UNDERFLOW,
+                         "UNDERFLOW");
+#endif
+#ifdef FE_OVERFLOW
+  test_single_exception (exception, OVERFLOW_EXC, FE_OVERFLOW,
+                         "OVERFLOW");
+#endif
+}
+
+
+static void
+set_single_exc (const char *test_name, int fe_exc, fexcept_t exception)
+{
+  char str[200];
+
+  strcpy (str, test_name);
+  strcat (str, ": set flag, with rest not set");
+  feclearexcept (FE_ALL_EXCEPT);
+  feraiseexcept (exception);
+  test_exceptions (str, fe_exc);
+
+  strcpy (str, test_name);
+  strcat (str, ": clear flag, rest also unset");
+  feclearexcept (exception);
+  test_exceptions (str, NO_EXC);
+
+  strcpy (str, test_name);
+  strcat (str, ": set flag, with rest set");
+  feraiseexcept (FE_ALL_EXCEPT ^ exception);
+  feraiseexcept (exception);
+  test_exceptions (str, ALL_EXC);
+
+  strcpy (str, test_name);
+  strcat (str, ": clear flag, leave rest set");
+  feclearexcept (exception);
+  test_exceptions (str, ALL_EXC ^ fe_exc);
+}
+
+static void
+fe_tests (void)
+{
+  /* clear all exceptions and test if all are cleared */
+  feclearexcept (FE_ALL_EXCEPT);
+  test_exceptions ("feclearexcept (FE_ALL_EXCEPT) clears all exceptions",
+                   NO_EXC);
+
+  /* raise all exceptions and test if all are raised */
+  feraiseexcept (FE_ALL_EXCEPT);
+  test_exceptions ("feraiseexcept (FE_ALL_EXCEPT) raises all exceptions",
+                   ALL_EXC);
+  feclearexcept (FE_ALL_EXCEPT);
+
+
+#ifdef FE_DIVBYZERO
+  set_single_exc ("Set/Clear FE_DIVBYZERO", DIVBYZERO_EXC, FE_DIVBYZERO);
+#endif
+#ifdef FE_INVALID
+  set_single_exc ("Set/Clear FE_INVALID", INVALID_EXC, FE_INVALID);
+#endif
+#ifdef FE_INEXACT
+  set_single_exc ("Set/Clear FE_INEXACT", INEXACT_EXC, FE_INEXACT);
+#endif
+#ifdef FE_UNDERFLOW
+  set_single_exc ("Set/Clear FE_UNDERFLOW", UNDERFLOW_EXC, FE_UNDERFLOW);
+#endif
+#ifdef FE_OVERFLOW
+  set_single_exc ("Set/Clear FE_OVERFLOW", OVERFLOW_EXC, FE_OVERFLOW);
+#endif
+}
+
+int
+main (void)
+{
+  fe_tests ();
+  /* _LIB_VERSION = _SVID;*/
+
+  if (count_errors)
+    {
+      printf ("\n%d errors occured.\n", count_errors);
+      exit (1);
+    }
+  printf ("\n All tests passed successfully.\n");
+  exit (0);
+}
diff --git a/posix/regex.c b/posix/regex.c
index a8655cdd70..b649b9d53d 100644
--- a/posix/regex.c
+++ b/posix/regex.c
@@ -1185,7 +1185,7 @@ typedef struct
 /* Used to omit pushing failure point id's when we're not debugging.  */
 #ifdef DEBUG
 #define DEBUG_PUSH PUSH_FAILURE_INT
-#define DEBUG_POP(item_addr) (item_addr)->integer = POP_FAILURE_INT ()
+#define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
 #else
 #define DEBUG_PUSH(item)
 #define DEBUG_POP(item_addr)
@@ -1209,7 +1209,7 @@ typedef struct
     /* Can't be int, since there is not a shred of a guarantee that int	\
        is wide enough to hold a value of something to which pointer can	\
        be assigned */							\
-    s_reg_t this_reg;							\
+    active_reg_t this_reg;						\
     									\
     DEBUG_STATEMENT (failure_id++);					\
     DEBUG_STATEMENT (nfailure_points_pushed++);				\
@@ -1217,7 +1217,7 @@ typedef struct
     DEBUG_PRINT2 ("  Before push, next avail: %d\n", (fail_stack).avail);\
     DEBUG_PRINT2 ("                     size: %d\n", (fail_stack).size);\
 									\
-    DEBUG_PRINT2 ("  slots needed: %d\n", NUM_FAILURE_ITEMS);		\
+    DEBUG_PRINT2 ("  slots needed: %ld\n", NUM_FAILURE_ITEMS);		\
     DEBUG_PRINT2 ("     available: %d\n", REMAINING_AVAIL_SLOTS);	\
 									\
     /* Ensure we have enough space allocated for what we will push.  */	\
@@ -1238,16 +1238,17 @@ typedef struct
       for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
 	   this_reg++)							\
 	{								\
-	  DEBUG_PRINT2 ("  Pushing reg: %d\n", this_reg);		\
+	  DEBUG_PRINT2 ("  Pushing reg: %lu\n", this_reg);		\
 	  DEBUG_STATEMENT (num_regs_pushed++);				\
 									\
-	  DEBUG_PRINT2 ("    start: 0x%x\n", regstart[this_reg]);	\
+	  DEBUG_PRINT2 ("    start: %p\n", regstart[this_reg]);		\
 	  PUSH_FAILURE_POINTER (regstart[this_reg]);			\
 									\
-	  DEBUG_PRINT2 ("    end: 0x%x\n", regend[this_reg]);		\
+	  DEBUG_PRINT2 ("    end: %p\n", regend[this_reg]);		\
 	  PUSH_FAILURE_POINTER (regend[this_reg]);			\
 									\
-	  DEBUG_PRINT2 ("    info: 0x%x\n      ", reg_info[this_reg]);	\
+	  DEBUG_PRINT2 ("    info: %p\n      ",				\
+			reg_info[this_reg].word.pointer);		\
 	  DEBUG_PRINT2 (" match_null=%d",				\
 			REG_MATCH_NULL_STRING_P (reg_info[this_reg]));	\
 	  DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg]));	\
@@ -1259,17 +1260,17 @@ typedef struct
 	  PUSH_FAILURE_ELT (reg_info[this_reg].word);			\
 	}								\
 									\
-    DEBUG_PRINT2 ("  Pushing  low active reg: %d\n", lowest_active_reg);\
+    DEBUG_PRINT2 ("  Pushing  low active reg: %ld\n", lowest_active_reg);\
     PUSH_FAILURE_INT (lowest_active_reg);				\
 									\
-    DEBUG_PRINT2 ("  Pushing high active reg: %d\n", highest_active_reg);\
+    DEBUG_PRINT2 ("  Pushing high active reg: %ld\n", highest_active_reg);\
     PUSH_FAILURE_INT (highest_active_reg);				\
 									\
-    DEBUG_PRINT2 ("  Pushing pattern 0x%x:\n", pattern_place);		\
+    DEBUG_PRINT2 ("  Pushing pattern %p:\n", pattern_place);		\
     DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend);		\
     PUSH_FAILURE_POINTER (pattern_place);				\
 									\
-    DEBUG_PRINT2 ("  Pushing string 0x%x: `", string_place);		\
+    DEBUG_PRINT2 ("  Pushing string %p: `", string_place);		\
     DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2,   \
 				 size2);				\
     DEBUG_PRINT1 ("'\n");						\
@@ -1321,8 +1322,8 @@ typedef struct
 
 #define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
 {									\
-  DEBUG_STATEMENT (fail_stack_elt_t failure_id;)			\
-  s_reg_t this_reg;							\
+  DEBUG_STATEMENT (unsigned failure_id;)				\
+  active_reg_t this_reg;						\
   const unsigned char *string_temp;					\
 									\
   assert (!FAIL_STACK_EMPTY ());					\
@@ -1344,34 +1345,35 @@ typedef struct
   if (string_temp != NULL)						\
     str = (const char *) string_temp;					\
 									\
-  DEBUG_PRINT2 ("  Popping string 0x%x: `", str);			\
+  DEBUG_PRINT2 ("  Popping string %p: `", str);				\
   DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2);	\
   DEBUG_PRINT1 ("'\n");							\
 									\
   pat = (unsigned char *) POP_FAILURE_POINTER ();			\
-  DEBUG_PRINT2 ("  Popping pattern 0x%x:\n", pat);			\
+  DEBUG_PRINT2 ("  Popping pattern %p:\n", pat);			\
   DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend);			\
 									\
   /* Restore register info.  */						\
   high_reg = (active_reg_t) POP_FAILURE_INT ();				\
-  DEBUG_PRINT2 ("  Popping high active reg: %d\n", high_reg);		\
+  DEBUG_PRINT2 ("  Popping high active reg: %ld\n", high_reg);		\
 									\
   low_reg = (active_reg_t) POP_FAILURE_INT ();				\
-  DEBUG_PRINT2 ("  Popping  low active reg: %d\n", low_reg);		\
+  DEBUG_PRINT2 ("  Popping  low active reg: %ld\n", low_reg);		\
 									\
   if (1)								\
     for (this_reg = high_reg; this_reg >= low_reg; this_reg--)		\
       {									\
-	DEBUG_PRINT2 ("    Popping reg: %d\n", this_reg);		\
+	DEBUG_PRINT2 ("    Popping reg: %ld\n", this_reg);		\
 									\
 	reg_info[this_reg].word = POP_FAILURE_ELT ();			\
-	DEBUG_PRINT2 ("      info: 0x%x\n", reg_info[this_reg]);	\
+	DEBUG_PRINT2 ("      info: %p\n",				\
+		      reg_info[this_reg].word.pointer);			\
 									\
 	regend[this_reg] = (const char *) POP_FAILURE_POINTER ();	\
-	DEBUG_PRINT2 ("      end: 0x%x\n", regend[this_reg]);		\
+	DEBUG_PRINT2 ("      end: %p\n", regend[this_reg]);		\
 									\
 	regstart[this_reg] = (const char *) POP_FAILURE_POINTER ();	\
-	DEBUG_PRINT2 ("      start: 0x%x\n", regstart[this_reg]);	\
+	DEBUG_PRINT2 ("      start: %p\n", regstart[this_reg]);		\
       }									\
   else									\
     {									\
@@ -4824,7 +4826,7 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
           DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
           /* It doesn't matter what we push for the string here.  What
              the code at `fail' tests is the value for the pattern.  */
-          PUSH_FAILURE_POINT (0, 0, -2);
+          PUSH_FAILURE_POINT (NULL, NULL, -2);
           goto unconditional_jump;
 
 
@@ -4837,7 +4839,7 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
           DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
           /* See comments just above at `dummy_failure_jump' about the
              two zeroes.  */
-          PUSH_FAILURE_POINT (0, 0, -2);
+          PUSH_FAILURE_POINT (NULL, NULL, -2);
           break;
 
         /* Have to succeed matching what follows at least n times.
diff --git a/sysdeps/i386/fpu/fraiseexcpt.c b/sysdeps/i386/fpu/fraiseexcpt.c
index 90e992aaec..c6cd6d6672 100644
--- a/sysdeps/i386/fpu/fraiseexcpt.c
+++ b/sysdeps/i386/fpu/fraiseexcpt.c
@@ -32,44 +32,67 @@ feraiseexcept (int excepts)
   /* First: invalid exception.  */
   if ((FE_INVALID & excepts) != 0)
     {
-      /* One example of a invalid operation is 0 * Infinity.  */
-      double d = 0.0 * HUGE_VAL;
+      /* One example of a invalid operation is 0.0 / 0.0.  */
+      double d;
+      __asm__ ("fldz; fdiv %%st, %%st(0); fwait" : "=t" (d));
       (void) &d;
-      /* Now force the exception.  */
-      __asm__ ("fwait");
     }
 
   /* Next: division by zero.  */
   if ((FE_DIVBYZERO & excepts) != 0)
     {
       double d;
-      __asm__ ("fld1; fldz; fdivp %%st, %%st(1); fwait" : "=t" (d));
+      __asm__ ("fldz; fld1; fdivp %%st, %%st(1); fwait" : "=t" (d));
       (void) &d;
     }
 
   /* Next: overflow.  */
   if ((FE_OVERFLOW & excepts) != 0)
     {
-      long double d = LDBL_MAX * LDBL_MAX;
-      (void) &d;
-      /* Now force the exception.  */
-      __asm__ ("fwait");
+      /* There is no way to raise only the overflow flag.  Do it the
+	 hard way.  */
+      fenv_t temp;
+
+      /* Bah, we have to clear selected exceptions.  Since there is no
+	 `fldsw' instruction we have to do it the hard way.  */
+      __asm__ ("fnstenv %0" : "=m" (*&temp));
+
+      /* Set the relevant bits.  */
+      temp.status_word |= FE_OVERFLOW;
+
+      /* Put the new data in effect.  */
+      __asm__ ("fldenv %0" : : "m" (*&temp));
+
+      /* And raise the exception.  */
+	__asm__ ("fwait");
     }
 
   /* Next: underflow.  */
   if ((FE_UNDERFLOW & excepts) != 0)
     {
-      long double d = LDBL_MIN / 16.0;
-      (void) &d;
-      /* Now force the exception.  */
-      __asm__ ("fwait");
+      /* There is no way to raise only the overflow flag.  Do it the
+	 hard way.  */
+      fenv_t temp;
+
+      /* Bah, we have to clear selected exceptions.  Since there is no
+	 `fldsw' instruction we have to do it the hard way.  */
+      __asm__ ("fnstenv %0" : "=m" (*&temp));
+
+      /* Set the relevant bits.  */
+      temp.status_word |= FE_UNDERFLOW;
+
+      /* Put the new data in effect.  */
+      __asm__ ("fldenv %0" : : "m" (*&temp));
+
+      /* And raise the exception.  */
+	__asm__ ("fwait");
     }
 
   /* Last: inexact.  */
   if ((FE_INEXACT & excepts) != 0)
     {
       long double d;
-      __asm__ ("fld1; fldpi; fdivp %%st, %%st(1); fwait" : "=t" (d));
+      __asm__ ("fmul %%st, %%st(0); fwait" : "=t" (d) : "0" (LDBL_MAX));
       (void) &d;
     }
 }
diff --git a/sysdeps/m68k/nan.h b/sysdeps/m68k/bits/nan.h
index b4efddfe91..b4efddfe91 100644
--- a/sysdeps/m68k/nan.h
+++ b/sysdeps/m68k/bits/nan.h
diff --git a/sysdeps/mach/hurd/abi-tag.h b/sysdeps/mach/hurd/abi-tag.h
index 0cf6e80c66..0498d6ebf5 100644
--- a/sysdeps/mach/hurd/abi-tag.h
+++ b/sysdeps/mach/hurd/abi-tag.h
@@ -1,5 +1,12 @@
-#define HURD_MAJOR_VERSION 0
-#define HURD_MINOR_VERSION 2
+#define ABI_HURD_TAG	1
 
-#define ABI_TAG ((HURD_MAJOR_VERSION << 24) + \
-		 (HURD_MINOR_VERSION << 16))
+#define ABI_HURD_MAJOR	0
+#define ABI_HURD_MINOR	0
+#define ABI_HURD_PATCH	0
+
+/* Don't use `|' in this expression, it is a comment character in the
+   assembler.  */
+#define ABI_TAG ((ABI_HURD_TAG << 24) +					      \
+		 (ABI_HURD_MAJOR << 16) +				      \
+		 (ABI_HURD_MINOR << 8) +				      \
+		 (ABI_HURD_PATCH << 0))
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c
index 0f26abeb81..68c4cb3103 100644
--- a/sysdeps/mach/hurd/dl-sysdep.c
+++ b/sysdeps/mach/hurd/dl-sysdep.c
@@ -665,6 +665,7 @@ _exit (int status)
 /* Read the whole contents of FILE into new mmap'd space with given
    protections.  The size of the file is returned in SIZE.  */
 void *
+weak_function
 _dl_sysdep_read_whole_file (const char *file, size_t *size, int prot)
 {
   struct stat stat;
diff --git a/sysdeps/standalone/arm/bits/errno.h b/sysdeps/standalone/arm/bits/errno.h
index 8090a8074d..49a4998cf8 100644
--- a/sysdeps/standalone/arm/bits/errno.h
+++ b/sysdeps/standalone/arm/bits/errno.h
@@ -47,6 +47,7 @@
 #define EPROTOTYPE	19
 #define ESRCH		20
 #define EPERM		21
+#define ENOTDIR         22
 #endif
 
 #define __set_errno(val) errno = (val)
diff --git a/sysdeps/standalone/brk.c b/sysdeps/standalone/brk.c
index 5985b3099e..6ee9935092 100644
--- a/sysdeps/standalone/brk.c
+++ b/sysdeps/standalone/brk.c
@@ -46,8 +46,10 @@ int __C_heap_size;
 static
 #endif
 void
-__NONE_set_memvals (argc, argv, envp),
-      int argc; char **argv; char **envp;
+__NONE_set_memvals (argc, argv, envp)
+     int argc;
+     char **argv;
+     char **envp;
 {
 
   __rorig  =
diff --git a/sysdeps/stub/getdomain.c b/sysdeps/stub/getdomain.c
deleted file mode 100644
index ad7d72bc16..0000000000
--- a/sysdeps/stub/getdomain.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* Copyright (C) 1994, 1995, 1996, 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.
-
-   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, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
-
-#include <errno.h>
-#include <unistd.h>
-
-/* Put the name of the current YP domain in no more than LEN bytes of NAME.
-   The result is null-terminated if LEN is large enough for the full
-   name and the terminator.  */
-int
-getdomainname (name, len)
-     char *name;
-     size_t len;
-{
-  __set_errno (ENOSYS);
-  return -1;
-}
-
-stub_warning (getdomainname)
diff --git a/sysdeps/stub/sys/param.h b/sysdeps/stub/sys/param.h
index b1ea52add9..1dafdda403 100644
--- a/sysdeps/stub/sys/param.h
+++ b/sysdeps/stub/sys/param.h
@@ -8,3 +8,7 @@
 #include <limits.h>
 
 #define MAXSYMLINKS  1
+
+/* Macros for min/max.  */
+#define MIN(a,b) (((a)<(b))?(a):(b))
+#define MAX(a,b) (((a)>(b))?(a):(b))
diff --git a/sysdeps/unix/sysv/linux/sys/quota.h b/sysdeps/unix/sysv/linux/sys/quota.h
index d897b791cd..3a1c696790 100644
--- a/sysdeps/unix/sysv/linux/sys/quota.h
+++ b/sysdeps/unix/sysv/linux/sys/quota.h
@@ -1,2 +1,3 @@
 /* The kernel header file contains all declarations and definitions.  */
+#include <asm/types.h>
 #include <linux/quota.h>
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index c7180ccb42..5d91a2edfe 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -32,6 +32,7 @@ pause		-	pause		0	__libc_pause	pause
 personality	init-first personality	1	__personality	personality
 pipe		-	pipe		1	__pipe		pipe
 query_module	EXTRA	query_module	5	query_module
+quotactl	EXTRA	quotactl	4	quotactl
 s_getdents	EXTRA	getdents	3	__getdents
 s_getpriority	getpriority getpriority	2	__syscall_getpriority
 s_poll		poll	poll		3	__syscall_poll