aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1997-06-27 23:09:40 +0000
committerUlrich Drepper <drepper@redhat.com>1997-06-27 23:09:40 +0000
commitbca973bcd954bb43e0d55b6fe3dd0648df52466a (patch)
treee1a60757fe61908da054c878b2722265cd66570f
parentae1025be4026d5d4beb605541854d800ce05ee4e (diff)
downloadglibc-bca973bcd954bb43e0d55b6fe3dd0648df52466a.tar
glibc-bca973bcd954bb43e0d55b6fe3dd0648df52466a.tar.gz
glibc-bca973bcd954bb43e0d55b6fe3dd0648df52466a.tar.bz2
glibc-bca973bcd954bb43e0d55b6fe3dd0648df52466a.zip
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.
-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