Update.
authorUlrich Drepper <drepper@redhat.com>
Fri, 27 Jun 1997 23:09:40 +0000 (23:09 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 27 Jun 1997 23:09:40 +0000 (23:09 +0000)
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.

* manual/lgpl.texinfo: Update copyright.

18 files changed:
ChangeLog
db/makedb.c
elf/dl-open.c
elf/dl-runtime.c
libc.map
math/Makefile
math/test-fenv.c [new file with mode: 0644]
posix/regex.c
sysdeps/i386/fpu/fraiseexcpt.c
sysdeps/m68k/bits/nan.h [moved from sysdeps/m68k/nan.h with 100% similarity]
sysdeps/mach/hurd/abi-tag.h
sysdeps/mach/hurd/dl-sysdep.c
sysdeps/standalone/arm/bits/errno.h
sysdeps/standalone/brk.c
sysdeps/stub/getdomain.c [deleted file]
sysdeps/stub/sys/param.h
sysdeps/unix/sysv/linux/sys/quota.h
sysdeps/unix/sysv/linux/syscalls.list

index e283057..6a751ed 100644 (file)
--- 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>
 
index 32029fb..6f8694d 100644 (file)
@@ -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];
     }
index 5915b7f..529806c 100644 (file)
@@ -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.  */
index 502c35d..7a44ea4 100644 (file)
@@ -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 +
index 3254be9..d7d22d9 100644 (file)
--- 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*;
index 5a86f92..4eeb37f 100644 (file)
@@ -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 (file)
index 0000000..55114cc
--- /dev/null
@@ -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);
+}
index a8655cd..b649b9d 100644 (file)
@@ -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.
index 90e992a..c6cd6d6 100644 (file)
@@ -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;
     }
 }
similarity index 100%
rename from sysdeps/m68k/nan.h
rename to sysdeps/m68k/bits/nan.h
index 0cf6e80..0498d6e 100644 (file)
@@ -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))
index 0f26abe..68c4cb3 100644 (file)
@@ -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;
index 8090a80..49a4998 100644 (file)
@@ -47,6 +47,7 @@
 #define EPROTOTYPE     19
 #define ESRCH          20
 #define EPERM          21
+#define ENOTDIR         22
 #endif
 
 #define __set_errno(val) errno = (val)
index 5985b30..6ee9935 100644 (file)
@@ -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 (file)
index ad7d72b..0000000
+++ /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)
index b1ea52a..1dafdda 100644 (file)
@@ -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))
index d897b79..3a1c696 100644 (file)
@@ -1,2 +1,3 @@
 /* The kernel header file contains all declarations and definitions.  */
+#include <asm/types.h>
 #include <linux/quota.h>
index c7180cc..5d91a2e 100644 (file)
@@ -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