diff options
author | Ulrich Drepper <drepper@redhat.com> | 1997-06-27 23:09:40 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1997-06-27 23:09:40 +0000 |
commit | bca973bcd954bb43e0d55b6fe3dd0648df52466a (patch) | |
tree | e1a60757fe61908da054c878b2722265cd66570f | |
parent | ae1025be4026d5d4beb605541854d800ce05ee4e (diff) | |
download | glibc-bca973bcd954bb43e0d55b6fe3dd0648df52466a.tar.gz |
Update.cvs/libc-ud-970627
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-- | ChangeLog | 56 | ||||
-rw-r--r-- | db/makedb.c | 1 | ||||
-rw-r--r-- | elf/dl-open.c | 2 | ||||
-rw-r--r-- | elf/dl-runtime.c | 2 | ||||
-rw-r--r-- | libc.map | 1 | ||||
-rw-r--r-- | math/Makefile | 2 | ||||
-rw-r--r-- | math/test-fenv.c | 164 | ||||
-rw-r--r-- | posix/regex.c | 48 | ||||
-rw-r--r-- | sysdeps/i386/fpu/fraiseexcpt.c | 51 | ||||
-rw-r--r-- | sysdeps/m68k/bits/nan.h (renamed from sysdeps/m68k/nan.h) | 0 | ||||
-rw-r--r-- | sysdeps/mach/hurd/abi-tag.h | 15 | ||||
-rw-r--r-- | sysdeps/mach/hurd/dl-sysdep.c | 1 | ||||
-rw-r--r-- | sysdeps/standalone/arm/bits/errno.h | 1 | ||||
-rw-r--r-- | sysdeps/standalone/brk.c | 6 | ||||
-rw-r--r-- | sysdeps/stub/getdomain.c | 34 | ||||
-rw-r--r-- | sysdeps/stub/sys/param.h | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/sys/quota.h | 1 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/syscalls.list | 1 |
18 files changed, 309 insertions, 81 deletions
@@ -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 + @@ -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 |