mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-05 21:00:05 +00:00
Update.
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.
This commit is contained in:
parent
ae1025be40
commit
bca973bcd9
56
ChangeLog
56
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>
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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. */
|
||||
|
@ -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 +
|
||||
|
1
libc.map
1
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*;
|
||||
|
@ -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'.
|
||||
#
|
||||
|
164
math/test-fenv.c
Normal file
164
math/test-fenv.c
Normal file
@ -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);
|
||||
}
|
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
@ -47,6 +47,7 @@
|
||||
#define EPROTOTYPE 19
|
||||
#define ESRCH 20
|
||||
#define EPERM 21
|
||||
#define ENOTDIR 22
|
||||
#endif
|
||||
|
||||
#define __set_errno(val) errno = (val)
|
||||
|
@ -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 =
|
||||
|
@ -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)
|
@ -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))
|
||||
|
@ -1,2 +1,3 @@
|
||||
/* The kernel header file contains all declarations and definitions. */
|
||||
#include <asm/types.h>
|
||||
#include <linux/quota.h>
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user