mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update.
* malloc/mtrace.pl (usage): Inform about --help. 2000-08-19 Wolfram Gloger <wg@malloc.de> * malloc/malloc.c (new_heap): try harder to get an aligned chunk of size HEAP_MAX_SIZE. 2000-08-19 Andreas Jaeger <aj@suse.de> * shlib-versions: Remove libnss_db, libdb and libdb1. 2000-08-19 Jakub Jelinek <jakub@redhat.com> * sysdeps/unix/sysv/linux/alpha/readdir.c: Move... * sysdeps/unix/sysv/linux/ia64/readdir.c: ...here and * sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c: ...here. * sysdeps/unix/sysv/linux/alpha/readdir_r.c: Move... * sysdeps/unix/sysv/linux/ia64/readdir_r.c: ...here and * sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c: ...here. * sysdeps/unix/sysv/linux/alpha/readdir64.c: Remove. * sysdeps/unix/sysv/linux/alpha/readdir64_r.c: Remove. * sysdeps/unix/sysv/linux/alpha/getdents64.c: Remove. * sysdeps/unix/sysv/linux/alpha/getdents.c: Only use for non-LFS getdents. * sysdeps/unix/sysv/linux/readdir64.c: Remove versioning. * sysdeps/unix/sysv/linux/readdir64_r.c: Likewise. 2000-08-18 Jakub Jelinek <jakub@redhat.com> * include/glob.h (__glob64): Add prototype. * sysdeps/generic/glob.c: If GLOB_ONLY_P is defined, only define glob and glob_in_dir. * sysdeps/unix/sysv/linux/i386/Versions: Add glob64@@GLIBC_2.2. * sysdeps/unix/sysv/linux/arm/Versions: Likewise. * sysdeps/unix/sysv/linux/powerpc/Versions: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/Versions: Likewise. * sysdeps/unix/sysv/linux/i386/glob64.c: New file. * sysdeps/unix/sysv/linux/arm/glob64.c: New file. * sysdeps/unix/sysv/linux/powerpc/glob64.c: New file. * sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c: New file. 2000-08-18 Jakub Jelinek <jakub@redhat.com> * malloc/Makefile (memusage): libmemusage.so is installed in slibdir. 2000-08-17 Andreas Jaeger <aj@suse.de> * math/test-fenv.c (fe_single_test): New function. (fe_env_tests): Use fe_single_test. (feenable_test): New tests for feenable/fedisable and fegetexcpetions. (feexcp_mask_test): New function. (feexcp_nomask_test): New function. 2000-08-19 Richard Henderson <rth@cygnus.com> * sysdeps/alpha/fpu/fenv_libc.h: New file. * sysdeps/alpha/fpu/fclrexcpt.c: Use it. * sysdeps/alpha/fpu/fegetenv.c: Likewise. * sysdeps/alpha/fpu/fesetround.c: Likewise. * sysdeps/alpha/fpu/fegetround.c: Likewise. * sysdeps/alpha/fpu/fgetexcptflg.c: Likewise. * sysdeps/alpha/fpu/fraiseexcpt.c: Likewise. * sysdeps/alpha/fpu/ftestexcept.c: Likewise. * sysdeps/alpha/fpu/fedisblxcpt.c: Likewise. Use the smaller mask. * sysdeps/alpha/fpu/feenablxcpt.c: Likewise. * sysdeps/alpha/fpu/fegetexcept.c: Likewise. * sysdeps/alpha/fpu/feholdexcpt.c: Retain the SWCR_MAP bits. * sysdeps/alpha/fpu/fesetenv.c: Likewise. * sysdeps/alpha/fpu/feupdateenv.c: Likewise. * sysdeps/alpha/fpu/fsetexcptflg.c: Likewise. * sysdeps/alpha/fpu/bits/fenv.h (FE_DENORMAL): New. (FE_MAP_DMZ, FE_MAP_UMZ, FE_NONIEEE_ENV): New. 2000-08-19 Andreas Jaeger <aj@suse.de>
This commit is contained in:
76
ChangeLog
76
ChangeLog
@ -1,3 +1,79 @@
|
|||||||
|
2000-08-19 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
|
* malloc/mtrace.pl (usage): Inform about --help.
|
||||||
|
|
||||||
|
2000-08-19 Wolfram Gloger <wg@malloc.de>
|
||||||
|
|
||||||
|
* malloc/malloc.c (new_heap): try harder to get an aligned chunk of
|
||||||
|
size HEAP_MAX_SIZE.
|
||||||
|
|
||||||
|
2000-08-19 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
|
* shlib-versions: Remove libnss_db, libdb and libdb1.
|
||||||
|
|
||||||
|
2000-08-19 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/readdir.c: Move...
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/readdir.c: ...here and
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c: ...here.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/readdir_r.c: Move...
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/readdir_r.c: ...here and
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c: ...here.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/readdir64.c: Remove.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/readdir64_r.c: Remove.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/getdents64.c: Remove.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/getdents.c: Only use for non-LFS
|
||||||
|
getdents.
|
||||||
|
* sysdeps/unix/sysv/linux/readdir64.c: Remove versioning.
|
||||||
|
* sysdeps/unix/sysv/linux/readdir64_r.c: Likewise.
|
||||||
|
|
||||||
|
2000-08-18 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* include/glob.h (__glob64): Add prototype.
|
||||||
|
* sysdeps/generic/glob.c: If GLOB_ONLY_P is defined, only
|
||||||
|
define glob and glob_in_dir.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/Versions: Add glob64@@GLIBC_2.2.
|
||||||
|
* sysdeps/unix/sysv/linux/arm/Versions: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/Versions: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/Versions: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/glob64.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/arm/glob64.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/glob64.c: New file.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c: New file.
|
||||||
|
|
||||||
|
2000-08-18 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* malloc/Makefile (memusage): libmemusage.so is installed in slibdir.
|
||||||
|
|
||||||
|
2000-08-17 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
|
* math/test-fenv.c (fe_single_test): New function.
|
||||||
|
(fe_env_tests): Use fe_single_test.
|
||||||
|
(feenable_test): New tests for feenable/fedisable and
|
||||||
|
fegetexcpetions.
|
||||||
|
(feexcp_mask_test): New function.
|
||||||
|
(feexcp_nomask_test): New function.
|
||||||
|
|
||||||
|
2000-08-19 Richard Henderson <rth@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/alpha/fpu/fenv_libc.h: New file.
|
||||||
|
* sysdeps/alpha/fpu/fclrexcpt.c: Use it.
|
||||||
|
* sysdeps/alpha/fpu/fegetenv.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/fesetround.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/fegetround.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/fgetexcptflg.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/fraiseexcpt.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/ftestexcept.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/fedisblxcpt.c: Likewise. Use the smaller mask.
|
||||||
|
* sysdeps/alpha/fpu/feenablxcpt.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/fegetexcept.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/feholdexcpt.c: Retain the SWCR_MAP bits.
|
||||||
|
* sysdeps/alpha/fpu/fesetenv.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/feupdateenv.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/fsetexcptflg.c: Likewise.
|
||||||
|
* sysdeps/alpha/fpu/bits/fenv.h (FE_DENORMAL): New.
|
||||||
|
(FE_MAP_DMZ, FE_MAP_UMZ, FE_NONIEEE_ENV): New.
|
||||||
|
|
||||||
2000-08-19 Andreas Jaeger <aj@suse.de>
|
2000-08-19 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
* elf/constload1.c: Include <stdio.h> for puts prototype.
|
* elf/constload1.c: Include <stdio.h> for puts prototype.
|
||||||
|
@ -3,5 +3,8 @@
|
|||||||
|
|
||||||
/* Now define the internal interfaces. */
|
/* Now define the internal interfaces. */
|
||||||
extern int __glob_pattern_p (__const char *__pattern, int __quote);
|
extern int __glob_pattern_p (__const char *__pattern, int __quote);
|
||||||
|
extern int __glob64 (__const char *__pattern, int __flags,
|
||||||
|
int (*__errfunc) (__const char *, int),
|
||||||
|
glob64_t *__pglob);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -109,7 +109,7 @@ $(objpfx)mtrace: mtrace.pl
|
|||||||
$(objpfx)memusage: memusage.sh
|
$(objpfx)memusage: memusage.sh
|
||||||
rm -f $@.new
|
rm -f $@.new
|
||||||
sed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \
|
sed -e 's|@BASH@|$(BASH)|' -e 's|@VERSION@|$(version)|' \
|
||||||
-e 's|@LIBDIR@|$(libdir)|' -e 's|@BINDIR@|$(bindir)|' $^ > $@.new \
|
-e 's|@LIBDIR@|$(slibdir)|' -e 's|@BINDIR@|$(bindir)|' $^ > $@.new \
|
||||||
&& rm -f $@ && mv $@.new $@ && chmod +x $@
|
&& rm -f $@ && mv $@.new $@ && chmod +x $@
|
||||||
|
|
||||||
|
|
||||||
|
@ -2013,12 +2013,22 @@ new_heap(size) size_t size;
|
|||||||
mapping (on Linux, this is the case for all non-writable mappings
|
mapping (on Linux, this is the case for all non-writable mappings
|
||||||
anyway). */
|
anyway). */
|
||||||
p1 = (char *)MMAP(0, HEAP_MAX_SIZE<<1, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE);
|
p1 = (char *)MMAP(0, HEAP_MAX_SIZE<<1, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE);
|
||||||
if(p1 == MAP_FAILED)
|
if(p1 != MAP_FAILED) {
|
||||||
return 0;
|
|
||||||
p2 = (char *)(((unsigned long)p1 + HEAP_MAX_SIZE) & ~(HEAP_MAX_SIZE-1));
|
p2 = (char *)(((unsigned long)p1 + HEAP_MAX_SIZE) & ~(HEAP_MAX_SIZE-1));
|
||||||
ul = p2 - p1;
|
ul = p2 - p1;
|
||||||
munmap(p1, ul);
|
munmap(p1, ul);
|
||||||
munmap(p2 + HEAP_MAX_SIZE, HEAP_MAX_SIZE - ul);
|
munmap(p2 + HEAP_MAX_SIZE, HEAP_MAX_SIZE - ul);
|
||||||
|
} else {
|
||||||
|
/* Try to take the chance that an allocation of only HEAP_MAX_SIZE
|
||||||
|
is already aligned. */
|
||||||
|
p2 = (char *)MMAP(0, HEAP_MAX_SIZE, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE);
|
||||||
|
if(p2 == MAP_FAILED)
|
||||||
|
return 0;
|
||||||
|
if((unsigned long)p2 & (HEAP_MAX_SIZE-1)) {
|
||||||
|
munmap(p2, HEAP_MAX_SIZE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
if(mprotect(p2, size, PROT_READ|PROT_WRITE) != 0) {
|
if(mprotect(p2, size, PROT_READ|PROT_WRITE) != 0) {
|
||||||
munmap(p2, HEAP_MAX_SIZE);
|
munmap(p2, HEAP_MAX_SIZE);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -69,7 +69,7 @@ if ($#ARGV == 0) {
|
|||||||
$binary=$ARGV[0];
|
$binary=$ARGV[0];
|
||||||
$data=$ARGV[1];
|
$data=$ARGV[1];
|
||||||
} else {
|
} else {
|
||||||
die "Wrong number of arguments.";
|
die "Wrong number of arguments, run $progname --help for help.";
|
||||||
}
|
}
|
||||||
|
|
||||||
sub location {
|
sub location {
|
||||||
|
268
math/test-fenv.c
268
math/test-fenv.c
@ -1,6 +1,6 @@
|
|||||||
/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
/* Copyright (C) 1997, 1998, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Andreas Jaeger <aj@arthur.rhein-neckar.de> and
|
Contributed by Andreas Jaeger <aj@suse.de> and
|
||||||
Ulrich Drepper <drepper@cygnus.com>, 1997.
|
Ulrich Drepper <drepper@cygnus.com>, 1997.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -343,31 +343,273 @@ feenv_mask_test (const char *flag_name, int fe_exc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Test that program aborts with no masked interrupts */
|
||||||
|
static void
|
||||||
|
feexcp_nomask_test (const char *flag_name, int fe_exc)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
pid_t pid;
|
||||||
|
|
||||||
|
printf ("Test: after fedisable (%s) processes will abort\n");
|
||||||
|
printf (" when feraiseexcept (%s) is called.\n", flag_name, flag_name);
|
||||||
|
pid = fork ();
|
||||||
|
if (pid == 0)
|
||||||
|
{
|
||||||
|
#ifdef RLIMIT_CORE
|
||||||
|
/* Try to avoid dumping core. */
|
||||||
|
struct rlimit core_limit;
|
||||||
|
core_limit.rlim_cur = 0;
|
||||||
|
core_limit.rlim_max = 0;
|
||||||
|
setrlimit (RLIMIT_CORE, &core_limit);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fedisableexcept (FE_ALL_EXCEPT);
|
||||||
|
feenableexcept (fe_exc);
|
||||||
|
feraiseexcept (fe_exc);
|
||||||
|
exit (2);
|
||||||
|
}
|
||||||
|
else if (pid < 0)
|
||||||
|
{
|
||||||
|
if (errno != ENOSYS)
|
||||||
|
{
|
||||||
|
printf (" Fail: Could not fork.\n");
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf (" `fork' not implemented, test ignored.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (waitpid (pid, &status, 0) != pid)
|
||||||
|
{
|
||||||
|
printf (" Fail: waitpid call failed.\n");
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
else if (WIFSIGNALED (status) && WTERMSIG (status) == SIGFPE)
|
||||||
|
printf (" Pass: Process received SIGFPE.\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf (" Fail: Process didn't receive signal and exited with status %d.\n",
|
||||||
|
status);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test that program doesn't abort with exception. */
|
||||||
|
static void
|
||||||
|
feexcp_mask_test (const char *flag_name, int fe_exc)
|
||||||
|
{
|
||||||
|
int status;
|
||||||
|
pid_t pid;
|
||||||
|
|
||||||
|
printf ("Test: after fedisable (%s) processes will not abort\n");
|
||||||
|
printf (" when feraiseexcept (%s) is called.\n", flag_name, flag_name);
|
||||||
|
pid = fork ();
|
||||||
|
if (pid == 0)
|
||||||
|
{
|
||||||
|
#ifdef RLIMIT_CORE
|
||||||
|
/* Try to avoid dumping core. */
|
||||||
|
struct rlimit core_limit;
|
||||||
|
core_limit.rlim_cur = 0;
|
||||||
|
core_limit.rlim_max = 0;
|
||||||
|
setrlimit (RLIMIT_CORE, &core_limit);
|
||||||
|
#endif
|
||||||
|
feenableexcept (FE_ALL_EXCEPT);
|
||||||
|
fedisableexcept (fe_exc);
|
||||||
|
feraiseexcept (fe_exc);
|
||||||
|
exit (2);
|
||||||
|
}
|
||||||
|
else if (pid < 0)
|
||||||
|
{
|
||||||
|
if (errno != ENOSYS)
|
||||||
|
{
|
||||||
|
printf (" Fail: Could not fork.\n");
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
printf (" `fork' not implemented, test ignored.\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (waitpid (pid, &status, 0) != pid)
|
||||||
|
{
|
||||||
|
printf (" Fail: waitpid call failed.\n");
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
else if (WIFEXITED (status) && WEXITSTATUS (status) == 2)
|
||||||
|
printf (" Pass: Process exited normally.\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf (" Fail: Process exited abnormally with status %d.\n",
|
||||||
|
status);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Tests for feenableexcept/fedisableexcept/fegetexcept. */
|
||||||
|
static void
|
||||||
|
feenable_test (const char *flag_name, int fe_exc)
|
||||||
|
{
|
||||||
|
int excepts;
|
||||||
|
|
||||||
|
|
||||||
|
printf ("Tests for feenableexcepts etc. with flag %s\n", flag_name);
|
||||||
|
|
||||||
|
/* First disable all exceptions. */
|
||||||
|
if (fedisableexcept (FE_ALL_EXCEPT) == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: fedisableexcept (FE_ALL_EXCEPT) failed\n");
|
||||||
|
++count_errors;
|
||||||
|
/* If this fails, the other tests don't make sense. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
excepts = fegetexcept ();
|
||||||
|
if (excepts != 0)
|
||||||
|
{
|
||||||
|
printf ("Test: fegetexcept (%s) failed, return should be 0, is %d\n",
|
||||||
|
flag_name, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
excepts = feenableexcept (fe_exc);
|
||||||
|
if (excepts == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: feenableexcept (%s) failed\n", flag_name);
|
||||||
|
++count_errors;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (excepts != 0)
|
||||||
|
{
|
||||||
|
printf ("Test: feenableexcept (%s) failed, return should be 0, is %x\n",
|
||||||
|
flag_name, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
excepts = fegetexcept ();
|
||||||
|
if (excepts != fe_exc)
|
||||||
|
{
|
||||||
|
printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n",
|
||||||
|
flag_name, fe_exc, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And now disable the exception again. */
|
||||||
|
excepts = fedisableexcept (fe_exc);
|
||||||
|
if (excepts == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: fedisableexcept (%s) failed\n", flag_name);
|
||||||
|
++count_errors;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (excepts != fe_exc)
|
||||||
|
{
|
||||||
|
printf ("Test: fedisableexcept (%s) failed, return should be 0x%x, is 0x%x\n",
|
||||||
|
flag_name, fe_exc, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
excepts = fegetexcept ();
|
||||||
|
if (excepts != 0)
|
||||||
|
{
|
||||||
|
printf ("Test: fegetexcept (%s) failed, return should be 0, is 0x%x\n",
|
||||||
|
flag_name, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now the other way round: Enable all exceptions and disable just this one. */
|
||||||
|
if (feenableexcept (FE_ALL_EXCEPT) == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: feenableexcept (FE_ALL_EXCEPT) failed\n");
|
||||||
|
++count_errors;
|
||||||
|
/* If this fails, the other tests don't make sense. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
excepts = fegetexcept ();
|
||||||
|
if (excepts != FE_ALL_EXCEPT)
|
||||||
|
{
|
||||||
|
printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n",
|
||||||
|
flag_name, FE_ALL_EXCEPT, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
excepts = fedisableexcept (fe_exc);
|
||||||
|
if (excepts == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: fedisableexcept (%s) failed\n", flag_name);
|
||||||
|
++count_errors;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (excepts != FE_ALL_EXCEPT)
|
||||||
|
{
|
||||||
|
printf ("Test: fedisableexcept (%s) failed, return should be 0, is 0x%x\n",
|
||||||
|
flag_name, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
excepts = fegetexcept ();
|
||||||
|
if (excepts != (FE_ALL_EXCEPT & ~fe_exc))
|
||||||
|
{
|
||||||
|
printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n",
|
||||||
|
flag_name, (FE_ALL_EXCEPT & ~fe_exc), excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* And now enable the exception again. */
|
||||||
|
excepts = feenableexcept (fe_exc);
|
||||||
|
if (excepts == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: feenableexcept (%s) failed\n", flag_name);
|
||||||
|
++count_errors;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (excepts != (FE_ALL_EXCEPT & ~fe_exc))
|
||||||
|
{
|
||||||
|
printf ("Test: feenableexcept (%s) failed, return should be 0, is 0x%x\n",
|
||||||
|
flag_name, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
|
||||||
|
excepts = fegetexcept ();
|
||||||
|
if (excepts != FE_ALL_EXCEPT)
|
||||||
|
{
|
||||||
|
printf ("Test: fegetexcept (%s) failed, return should be 0x%x, is 0x%x\n",
|
||||||
|
flag_name, FE_ALL_EXCEPT, excepts);
|
||||||
|
++count_errors;
|
||||||
|
}
|
||||||
|
feexcp_nomask_test (flag_name, fe_exc);
|
||||||
|
feexcp_mask_test (flag_name, fe_exc);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
fe_single_test (const char *flag_name, int fe_exc)
|
||||||
|
{
|
||||||
|
feenv_nomask_test (flag_name, fe_exc);
|
||||||
|
feenv_mask_test (flag_name, fe_exc);
|
||||||
|
feenable_test (flag_name, fe_exc);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
feenv_tests (void)
|
feenv_tests (void)
|
||||||
{
|
{
|
||||||
|
|
||||||
#ifdef FE_DIVBYZERO
|
#ifdef FE_DIVBYZERO
|
||||||
feenv_nomask_test ("FE_DIVBYZERO", FE_DIVBYZERO);
|
fe_single_test ("FE_DIVBYZERO", FE_DIVBYZERO);
|
||||||
feenv_mask_test ("FE_DIVBYZERO", FE_DIVBYZERO);
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef FE_INVALID
|
#ifdef FE_INVALID
|
||||||
feenv_nomask_test ("FE_INVALID", FE_INVALID);
|
fe_single_test ("FE_INVALID", FE_INVALID);
|
||||||
feenv_mask_test ("FE_INVALID", FE_INVALID);
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef FE_INEXACT
|
#ifdef FE_INEXACT
|
||||||
feenv_nomask_test ("FE_INEXACT", FE_INEXACT);
|
fe_single_test ("FE_INEXACT", FE_INEXACT);
|
||||||
feenv_mask_test ("FE_INEXACT", FE_INEXACT);
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef FE_UNDERFLOW
|
#ifdef FE_UNDERFLOW
|
||||||
feenv_nomask_test ("FE_UNDERFLOW", FE_UNDERFLOW);
|
fe_single_test ("FE_UNDERFLOW", FE_UNDERFLOW);
|
||||||
feenv_mask_test ("FE_UNDERFLOW", FE_UNDERFLOW);
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef FE_OVERFLOW
|
#ifdef FE_OVERFLOW
|
||||||
feenv_nomask_test ("FE_OVERFLOW", FE_OVERFLOW);
|
fe_single_test ("FE_OVERFLOW", FE_OVERFLOW);
|
||||||
feenv_mask_test ("FE_OVERFLOW", FE_OVERFLOW);
|
|
||||||
#endif
|
#endif
|
||||||
fesetenv (FE_DFL_ENV);
|
fesetenv (FE_DFL_ENV);
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,6 @@ mips.*-.*-linux.* libresolv=2 GLIBC_2.0 GLIBC_2.2
|
|||||||
# names given in /etc/nsswitch.conf.
|
# names given in /etc/nsswitch.conf.
|
||||||
mips.*-.*-linux.* libnss_files=2 GLIBC_2.0 GLIBC_2.2
|
mips.*-.*-linux.* libnss_files=2 GLIBC_2.0 GLIBC_2.2
|
||||||
mips.*-.*-linux.* libnss_dns=2 GLIBC_2.0 GLIBC_2.2
|
mips.*-.*-linux.* libnss_dns=2 GLIBC_2.0 GLIBC_2.2
|
||||||
mips.*-.*-linux.* libnss_db=2 GLIBC_2.0 GLIBC_2.2
|
|
||||||
mips.*-.*-linux.* libnss_compat=2 GLIBC_2.0 GLIBC_2.2
|
mips.*-.*-linux.* libnss_compat=2 GLIBC_2.0 GLIBC_2.2
|
||||||
mips.*-.*-linux.* libnss_nis=2 GLIBC_2.0 GLIBC_2.2
|
mips.*-.*-linux.* libnss_nis=2 GLIBC_2.0 GLIBC_2.2
|
||||||
mips.*-.*-linux.* libnss_nisplus=2 GLIBC_2.0 GLIBC_2.2
|
mips.*-.*-linux.* libnss_nisplus=2 GLIBC_2.0 GLIBC_2.2
|
||||||
@ -93,7 +92,6 @@ mips.*-.*-linux.* libnss_ldap=2 GLIBC_2.0 GLIBC_2.2
|
|||||||
mips.*-.*-linux.* libnss_hesiod=2 GLIBC_2.0 GLIBC_2.2
|
mips.*-.*-linux.* libnss_hesiod=2 GLIBC_2.0 GLIBC_2.2
|
||||||
.*-.*-.* libnss_files=2
|
.*-.*-.* libnss_files=2
|
||||||
.*-.*-.* libnss_dns=2
|
.*-.*-.* libnss_dns=2
|
||||||
.*-.*-.* libnss_db=2
|
|
||||||
.*-.*-.* libnss_compat=2
|
.*-.*-.* libnss_compat=2
|
||||||
.*-.*-.* libnss_nis=2
|
.*-.*-.* libnss_nis=2
|
||||||
.*-.*-.* libnss_nisplus=2
|
.*-.*-.* libnss_nisplus=2
|
||||||
@ -105,13 +103,6 @@ alpha.*-.*-linux.* libnsl=1.1
|
|||||||
mips.*-.*-linux.* libnsl=1 GLIBC_2.0 GLIBC_2.2
|
mips.*-.*-linux.* libnsl=1 GLIBC_2.0 GLIBC_2.2
|
||||||
.*-.*-.* libnsl=1
|
.*-.*-.* libnsl=1
|
||||||
|
|
||||||
# We use libdb.so.3 for the interface in version 2.x of the Berkeley DB code.
|
|
||||||
.*-.*-.* libdb=3
|
|
||||||
# This is the Berkeley DB 1.85. We use the version numbers from glibc 2.0.*
|
|
||||||
# for all times.
|
|
||||||
alpha-.*-linux.* libdb1=2.1
|
|
||||||
.*-.*-.* libdb1=2
|
|
||||||
|
|
||||||
# This defines the shared library version numbers we will install.
|
# This defines the shared library version numbers we will install.
|
||||||
alpha.*-.*-linux.* libcrypt=1.1
|
alpha.*-.*-linux.* libcrypt=1.1
|
||||||
.*-.*-.* libcrypt=1
|
.*-.*-.* libcrypt=1
|
||||||
|
@ -36,6 +36,11 @@
|
|||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
FE_DENORMAL = 1UL << 22,
|
||||||
|
#define FE_DENORMAL FE_DENORMAL
|
||||||
|
#endif
|
||||||
|
|
||||||
FE_INEXACT = 1UL << 21,
|
FE_INEXACT = 1UL << 21,
|
||||||
#define FE_INEXACT FE_INEXACT
|
#define FE_INEXACT FE_INEXACT
|
||||||
|
|
||||||
@ -51,12 +56,10 @@ enum
|
|||||||
FE_INVALID = 1UL << 17,
|
FE_INVALID = 1UL << 17,
|
||||||
#define FE_INVALID FE_INVALID
|
#define FE_INVALID FE_INVALID
|
||||||
|
|
||||||
FE_ALL_EXCEPT =
|
FE_ALL_EXCEPT = 0x3f << 17
|
||||||
(FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID)
|
|
||||||
#define FE_ALL_EXCEPT FE_ALL_EXCEPT
|
#define FE_ALL_EXCEPT FE_ALL_EXCEPT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/* Alpha chips support all four defined rouding modes.
|
/* Alpha chips support all four defined rouding modes.
|
||||||
|
|
||||||
Note that code must be compiled to use dynamic rounding (/d) instructions
|
Note that code must be compiled to use dynamic rounding (/d) instructions
|
||||||
@ -81,6 +84,19 @@ enum
|
|||||||
#define FE_UPWARD FE_UPWARD
|
#define FE_UPWARD FE_UPWARD
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef __USE_GNU
|
||||||
|
/* On later hardware, and later kernels for earlier hardware, we can forcibly
|
||||||
|
underflow denormal inputs and outputs. This can speed up certain programs
|
||||||
|
significantly, usually without affecting accuracy. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
FE_MAP_DMZ = 1UL << 12, /* Map denorm inputs to zero */
|
||||||
|
#define FE_MAP_DMZ FE_MAP_DMZ
|
||||||
|
|
||||||
|
FE_MAP_UMZ = 1UL << 13, /* Map underflowed outputs to zero */
|
||||||
|
#define FE_MAP_UMZ FE_MAP_UMZ
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Type representing exception flags. */
|
/* Type representing exception flags. */
|
||||||
typedef unsigned long int fexcept_t;
|
typedef unsigned long int fexcept_t;
|
||||||
@ -96,6 +112,10 @@ typedef unsigned long int fenv_t;
|
|||||||
#ifdef __USE_GNU
|
#ifdef __USE_GNU
|
||||||
/* Floating-point environment where none of the exceptions are masked. */
|
/* Floating-point environment where none of the exceptions are masked. */
|
||||||
# define FE_NOMASK_ENV ((fenv_t *) 0x880000000000003eUL)
|
# define FE_NOMASK_ENV ((fenv_t *) 0x880000000000003eUL)
|
||||||
|
|
||||||
|
/* Floating-point environment with (processor-dependent) non-IEEE floating
|
||||||
|
point. In this case, mapping denormals to zero. */
|
||||||
|
# define FE_NONIEEE_ENV ((fenv_t *) 0x8800000000003000UL)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The system calls to talk to the kernel's FP code. */
|
/* The system calls to talk to the kernel's FP code. */
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
__feclearexcept (int excepts)
|
__feclearexcept (int excepts)
|
||||||
@ -29,7 +29,7 @@ __feclearexcept (int excepts)
|
|||||||
swcr = __ieee_get_fp_control ();
|
swcr = __ieee_get_fp_control ();
|
||||||
|
|
||||||
/* Clear the relevant bits. */
|
/* Clear the relevant bits. */
|
||||||
swcr &= ~((unsigned long int) excepts & FE_ALL_EXCEPT);
|
swcr &= ~((unsigned long int) excepts & SWCR_STATUS_MASK);
|
||||||
|
|
||||||
/* Put the new state in effect. */
|
/* Put the new state in effect. */
|
||||||
__ieee_set_fp_control (swcr);
|
__ieee_set_fp_control (swcr);
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
fedisableexcept (int excepts)
|
fedisableexcept (int excepts)
|
||||||
@ -27,8 +27,8 @@ fedisableexcept (int excepts)
|
|||||||
|
|
||||||
new_exc = __ieee_get_fp_control ();
|
new_exc = __ieee_get_fp_control ();
|
||||||
|
|
||||||
old_exc = (new_exc << 16) & FE_ALL_EXCEPT;
|
old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
|
||||||
new_exc &= ~((excepts & FE_ALL_EXCEPT) >> 16);
|
new_exc &= ~((excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK);
|
||||||
|
|
||||||
__ieee_set_fp_control (new_exc);
|
__ieee_set_fp_control (new_exc);
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
feenableexcept (int excepts)
|
feenableexcept (int excepts)
|
||||||
@ -27,8 +27,8 @@ feenableexcept (int excepts)
|
|||||||
|
|
||||||
new_exc = __ieee_get_fp_control ();
|
new_exc = __ieee_get_fp_control ();
|
||||||
|
|
||||||
old_exc = (new_exc << 16) & FE_ALL_EXCEPT;
|
old_exc = (new_exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
|
||||||
new_exc |= (excepts & FE_ALL_EXCEPT) >> 16;
|
new_exc |= (excepts >> SWCR_ENABLE_SHIFT) & SWCR_ENABLE_MASK;
|
||||||
|
|
||||||
__ieee_set_fp_control (new_exc);
|
__ieee_set_fp_control (new_exc);
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
__fegetenv (fenv_t *envp)
|
__fegetenv (fenv_t *envp)
|
||||||
@ -31,10 +31,8 @@ __fegetenv (fenv_t *envp)
|
|||||||
swcr = __ieee_get_fp_control ();
|
swcr = __ieee_get_fp_control ();
|
||||||
__asm__ __volatile__ ("mf_fpcr %0" : "=f" (fpcr));
|
__asm__ __volatile__ ("mf_fpcr %0" : "=f" (fpcr));
|
||||||
|
|
||||||
/* Merge the two bits of information. The magic number at the end is
|
/* Merge the two bits of information. */
|
||||||
the exception enable mask. */
|
*envp = ((fpcr & FPCR_ROUND_MASK) | (swcr & SWCR_ALL_MASK));
|
||||||
|
|
||||||
*envp = (fpcr & (3UL << 58)) | (swcr & (FE_ALL_EXCEPT | 0x3e));
|
|
||||||
|
|
||||||
/* Success. */
|
/* Success. */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
fegetexcept (void)
|
fegetexcept (void)
|
||||||
@ -27,5 +27,5 @@ fegetexcept (void)
|
|||||||
|
|
||||||
exc = __ieee_get_fp_control ();
|
exc = __ieee_get_fp_control ();
|
||||||
|
|
||||||
return (exc << 16) & FE_ALL_EXCEPT;
|
return (exc & SWCR_ENABLE_MASK) << SWCR_ENABLE_SHIFT;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Return current rounding direction.
|
/* Return current rounding direction.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Richard Henderson <rth@tamu.edu>, 1997
|
Contributed by Richard Henderson <rth@tamu.edu>, 1997
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
fegetround (void)
|
fegetround (void)
|
||||||
@ -27,5 +27,5 @@ fegetround (void)
|
|||||||
|
|
||||||
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
|
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
|
||||||
|
|
||||||
return (fpcr >> 58) & 3;
|
return (fpcr >> FPCR_ROUND_SHIFT) & 3;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Store current floating-point environment and clear exceptions.
|
/* Store current floating-point environment and clear exceptions.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Richard Henderson <rth@tamu.edu>, 1997
|
Contributed by Richard Henderson <rth@tamu.edu>, 1997
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
feholdexcept (fenv_t *envp)
|
feholdexcept (fenv_t *envp)
|
||||||
@ -27,7 +27,7 @@ feholdexcept (fenv_t *envp)
|
|||||||
fegetenv(envp);
|
fegetenv(envp);
|
||||||
|
|
||||||
/* Clear all exception status bits and exception enable bits. */
|
/* Clear all exception status bits and exception enable bits. */
|
||||||
__ieee_set_fp_control(0);
|
__ieee_set_fp_control(*envp & SWCR_MAP_MASK);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
__fesetenv (const fenv_t *envp)
|
__fesetenv (const fenv_t *envp)
|
||||||
@ -37,11 +37,11 @@ __fesetenv (const fenv_t *envp)
|
|||||||
/* Reset the rounding mode with the hardware fpcr. Note that the following
|
/* Reset the rounding mode with the hardware fpcr. Note that the following
|
||||||
system call is an implied trap barrier for our modification. */
|
system call is an implied trap barrier for our modification. */
|
||||||
__asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr));
|
__asm__ __volatile__ ("excb; mf_fpcr %0" : "=f" (fpcr));
|
||||||
fpcr = (fpcr & ~(3UL << 58)) | (env & (3UL << 58));
|
fpcr = (fpcr & ~FPCR_ROUND_MASK) | (env & FPCR_ROUND_MASK);
|
||||||
__asm__ __volatile__ ("mt_fpcr %0" : : "f" (fpcr));
|
__asm__ __volatile__ ("mt_fpcr %0" : : "f" (fpcr));
|
||||||
|
|
||||||
/* Reset the exception status and mask with the kernel's FP code. */
|
/* Reset the exception status and mask with the kernel's FP code. */
|
||||||
__ieee_set_fp_control (env & (FE_ALL_EXCEPT | 0x3e));
|
__ieee_set_fp_control (env & SWCR_ALL_MASK);
|
||||||
|
|
||||||
/* Success. */
|
/* Success. */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Set current rounding direction.
|
/* Set current rounding direction.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Richard Henderson <rth@tamu.edu>, 1997
|
Contributed by Richard Henderson <rth@tamu.edu>, 1997
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
fesetround (int round)
|
fesetround (int round)
|
||||||
@ -32,7 +32,8 @@ fesetround (int round)
|
|||||||
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
|
__asm__ __volatile__("excb; mf_fpcr %0" : "=f"(fpcr));
|
||||||
|
|
||||||
/* Set the relevant bits. */
|
/* Set the relevant bits. */
|
||||||
fpcr = (fpcr & ~(3UL << 58)) | ((unsigned long)round << 58);
|
fpcr = ((fpcr & ~FPCR_ROUND_MASK)
|
||||||
|
| ((unsigned long)round << FPCR_ROUND_SHIFT));
|
||||||
|
|
||||||
/* Put the new state in effect. */
|
/* Put the new state in effect. */
|
||||||
__asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr));
|
__asm__ __volatile__("mt_fpcr %0; excb" : : "f"(fpcr));
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
__feupdateenv (const fenv_t *envp)
|
__feupdateenv (const fenv_t *envp)
|
||||||
@ -34,7 +34,7 @@ __feupdateenv (const fenv_t *envp)
|
|||||||
/* Raise the saved exception. Incidently for us the implementation
|
/* Raise the saved exception. Incidently for us the implementation
|
||||||
defined format of the values in objects of type fexcept_t is the
|
defined format of the values in objects of type fexcept_t is the
|
||||||
same as the ones specified using the FE_* constants. */
|
same as the ones specified using the FE_* constants. */
|
||||||
feraiseexcept ((int) tmp & FE_ALL_EXCEPT);
|
feraiseexcept (tmp & SWCR_STATUS_MASK);
|
||||||
|
|
||||||
/* Success. */
|
/* Success. */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
__fegetexceptflag (fexcept_t *flagp, int excepts)
|
__fegetexceptflag (fexcept_t *flagp, int excepts)
|
||||||
@ -29,7 +29,7 @@ __fegetexceptflag (fexcept_t *flagp, int excepts)
|
|||||||
tmp = __ieee_get_fp_control();
|
tmp = __ieee_get_fp_control();
|
||||||
|
|
||||||
/* Return that portion that corresponds to the requested exceptions. */
|
/* Return that portion that corresponds to the requested exceptions. */
|
||||||
*flagp = tmp & excepts & FE_ALL_EXCEPT;
|
*flagp = tmp & excepts & SWCR_STATUS_MASK;
|
||||||
|
|
||||||
/* Success. */
|
/* Success. */
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -18,8 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
#include <math.h>
|
|
||||||
|
|
||||||
int
|
int
|
||||||
__feraiseexcept (int excepts)
|
__feraiseexcept (int excepts)
|
||||||
@ -30,7 +29,7 @@ __feraiseexcept (int excepts)
|
|||||||
tmp = __ieee_get_fp_control ();
|
tmp = __ieee_get_fp_control ();
|
||||||
|
|
||||||
/* Set all the bits that were called for. */
|
/* Set all the bits that were called for. */
|
||||||
tmp |= (excepts & FE_ALL_EXCEPT);
|
tmp |= (excepts & SWCR_STATUS_MASK);
|
||||||
|
|
||||||
/* And store it back. */
|
/* And store it back. */
|
||||||
__ieee_set_fp_control (tmp);
|
__ieee_set_fp_control (tmp);
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
__fesetexceptflag (const fexcept_t *flagp, int excepts)
|
__fesetexceptflag (const fexcept_t *flagp, int excepts)
|
||||||
@ -29,7 +29,7 @@ __fesetexceptflag (const fexcept_t *flagp, int excepts)
|
|||||||
tmp = __ieee_get_fp_control ();
|
tmp = __ieee_get_fp_control ();
|
||||||
|
|
||||||
/* Set all the bits that were called for. */
|
/* Set all the bits that were called for. */
|
||||||
tmp = (tmp & ~FE_ALL_EXCEPT) | (*flagp & excepts & FE_ALL_EXCEPT);
|
tmp = (tmp & ~SWCR_STATUS_MASK) | (*flagp & excepts & SWCR_STATUS_MASK);
|
||||||
|
|
||||||
/* And store it back. */
|
/* And store it back. */
|
||||||
__ieee_set_fp_control (tmp);
|
__ieee_set_fp_control (tmp);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Test exception in current environment.
|
/* Test exception in current environment.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Richard Henderson <rth@tamu.edu>, 1997.
|
Contributed by Richard Henderson <rth@tamu.edu>, 1997.
|
||||||
|
|
||||||
@ -18,7 +18,7 @@
|
|||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
#include <fenv.h>
|
#include <fenv_libc.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
fetestexcept (int excepts)
|
fetestexcept (int excepts)
|
||||||
@ -28,5 +28,5 @@ fetestexcept (int excepts)
|
|||||||
/* Get current exceptions. */
|
/* Get current exceptions. */
|
||||||
tmp = __ieee_get_fp_control();
|
tmp = __ieee_get_fp_control();
|
||||||
|
|
||||||
return tmp & excepts & FE_ALL_EXCEPT;
|
return tmp & excepts & SWCR_STATUS_MASK;
|
||||||
}
|
}
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ELIDE_CODE
|
#ifndef ELIDE_CODE
|
||||||
|
#if !defined _LIBC || !defined GLOB_ONLY_P
|
||||||
|
|
||||||
#if defined STDC_HEADERS || defined __GNU_LIBRARY__
|
#if defined STDC_HEADERS || defined __GNU_LIBRARY__
|
||||||
# include <stddef.h>
|
# include <stddef.h>
|
||||||
@ -299,10 +300,15 @@ static
|
|||||||
inline
|
inline
|
||||||
#endif
|
#endif
|
||||||
const char *next_brace_sub __P ((const char *begin));
|
const char *next_brace_sub __P ((const char *begin));
|
||||||
|
|
||||||
|
#endif /* GLOB_ONLY_P */
|
||||||
|
|
||||||
static int glob_in_dir __P ((const char *pattern, const char *directory,
|
static int glob_in_dir __P ((const char *pattern, const char *directory,
|
||||||
int flags,
|
int flags,
|
||||||
int (*errfunc) (const char *, int),
|
int (*errfunc) (const char *, int),
|
||||||
glob_t *pglob));
|
glob_t *pglob));
|
||||||
|
|
||||||
|
#if !defined _LIBC || !defined GLOB_ONLY_P
|
||||||
static int prefix_array __P ((const char *prefix, char **array, size_t n));
|
static int prefix_array __P ((const char *prefix, char **array, size_t n));
|
||||||
static int collated_compare __P ((const __ptr_t, const __ptr_t));
|
static int collated_compare __P ((const __ptr_t, const __ptr_t));
|
||||||
|
|
||||||
@ -352,6 +358,8 @@ next_brace_sub (begin)
|
|||||||
return cp;
|
return cp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* !GLOB_ONLY_P */
|
||||||
|
|
||||||
/* Do glob searching for PATTERN, placing results in PGLOB.
|
/* Do glob searching for PATTERN, placing results in PGLOB.
|
||||||
The bits defined above may be set in FLAGS.
|
The bits defined above may be set in FLAGS.
|
||||||
If a directory cannot be opened or read and ERRFUNC is not nil,
|
If a directory cannot be opened or read and ERRFUNC is not nil,
|
||||||
@ -1075,6 +1083,8 @@ glob (pattern, flags, errfunc, pglob)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if !defined _LIBC || !defined GLOB_ONLY_P
|
||||||
|
|
||||||
/* Free storage allocated in PGLOB by a previous `glob' call. */
|
/* Free storage allocated in PGLOB by a previous `glob' call. */
|
||||||
void
|
void
|
||||||
globfree (pglob)
|
globfree (pglob)
|
||||||
@ -1219,6 +1229,8 @@ weak_alias (__glob_pattern_p, glob_pattern_p)
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* !GLOB_ONLY_P */
|
||||||
|
|
||||||
|
|
||||||
/* Like `glob', but PATTERN is a final pathname component,
|
/* Like `glob', but PATTERN is a final pathname component,
|
||||||
and matches are searched for in DIRECTORY.
|
and matches are searched for in DIRECTORY.
|
||||||
@ -1327,8 +1339,9 @@ glob_in_dir (pattern, directory, flags, errfunc, pglob)
|
|||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
size_t len;
|
size_t len;
|
||||||
struct dirent *d = ((flags & GLOB_ALTDIRFUNC)
|
struct dirent *d =
|
||||||
? (*pglob->gl_readdir) (stream)
|
((flags & GLOB_ALTDIRFUNC)
|
||||||
|
? (struct dirent *)((*pglob->gl_readdir) (stream))
|
||||||
: readdir ((DIR *) stream));
|
: readdir ((DIR *) stream));
|
||||||
if (d == NULL)
|
if (d == NULL)
|
||||||
break;
|
break;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
#define DIRENT_TYPE struct dirent64
|
#define DIRENT_SET_DP_INO(dp, value) \
|
||||||
#define __getdents64 __no___getdents64_decl
|
do { (dp)->d_ino = (value); (dp)->__pad = 0; } while (0)
|
||||||
#include <sysdeps/unix/sysv/linux/getdents.c>
|
#include <sysdeps/unix/sysv/linux/getdents.c>
|
||||||
#undef __getdents64
|
|
||||||
weak_alias(__getdents, __getdents64);
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
/* getdents64 is in getdents.c */
|
|
@ -1,7 +0,0 @@
|
|||||||
#define readdir64 __no_readdir64_decl
|
|
||||||
#define __readdir64 __no___readdir64_decl
|
|
||||||
#include <sysdeps/unix/readdir.c>
|
|
||||||
#undef __readdir64
|
|
||||||
strong_alias (__readdir, __readdir64)
|
|
||||||
#undef readdir64
|
|
||||||
weak_alias (__readdir, readdir64)
|
|
@ -1 +0,0 @@
|
|||||||
/* readdir64 is in readdir.c */
|
|
@ -1 +0,0 @@
|
|||||||
/* readdir64_r is in readdir_r.c */
|
|
@ -1,4 +0,0 @@
|
|||||||
#define readdir64_r __no_readdir64_r_decl
|
|
||||||
#include <sysdeps/unix/readdir_r.c>
|
|
||||||
#undef readdir64_r
|
|
||||||
weak_alias (__readdir_r, readdir64_r)
|
|
@ -17,6 +17,9 @@ libc {
|
|||||||
# a*
|
# a*
|
||||||
alphasort64;
|
alphasort64;
|
||||||
|
|
||||||
|
# g*
|
||||||
|
glob64;
|
||||||
|
|
||||||
# New rlimit interface
|
# New rlimit interface
|
||||||
getrlimit; setrlimit; getrlimit64;
|
getrlimit; setrlimit; getrlimit64;
|
||||||
|
|
||||||
|
1
sysdeps/unix/sysv/linux/arm/glob64.c
Normal file
1
sysdeps/unix/sysv/linux/arm/glob64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/glob64.c>
|
@ -19,6 +19,9 @@ libc {
|
|||||||
# a*
|
# a*
|
||||||
alphasort64;
|
alphasort64;
|
||||||
|
|
||||||
|
# g*
|
||||||
|
glob64;
|
||||||
|
|
||||||
# New rlimit interface
|
# New rlimit interface
|
||||||
getrlimit; setrlimit; getrlimit64;
|
getrlimit; setrlimit; getrlimit64;
|
||||||
|
|
||||||
|
48
sysdeps/unix/sysv/linux/i386/glob64.c
Normal file
48
sysdeps/unix/sysv/linux/i386/glob64.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#include <dirent.h>
|
||||||
|
#include <glob.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#define dirent dirent64
|
||||||
|
#define __readdir(dirp) __readdir64 (dirp)
|
||||||
|
|
||||||
|
#define glob_t glob64_t
|
||||||
|
#define glob(pattern, flags, errfunc, pglob) \
|
||||||
|
__glob64 (pattern, flags, errfunc, pglob)
|
||||||
|
#define globfree(pglob) globfree64 (pglob)
|
||||||
|
|
||||||
|
#undef stat
|
||||||
|
#define stat stat64
|
||||||
|
#undef __stat
|
||||||
|
#define __stat(file, buf) __xstat64 (_STAT_VER, file, buf)
|
||||||
|
|
||||||
|
#define NO_GLOB_PATTERN_P 1
|
||||||
|
|
||||||
|
#include <sysdeps/generic/glob.c>
|
||||||
|
|
||||||
|
#include "shlib-compat.h"
|
||||||
|
|
||||||
|
versioned_symbol (libc, __glob64, glob64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
|
||||||
|
|
||||||
|
int __old_glob64 (__const char *__pattern, int __flags,
|
||||||
|
int (*__errfunc) (__const char *, int),
|
||||||
|
glob64_t *__pglob);
|
||||||
|
|
||||||
|
#undef dirent
|
||||||
|
#define dirent __old_dirent64
|
||||||
|
#undef __readdir
|
||||||
|
#define __readdir(dirp) __old_readdir64 (dirp)
|
||||||
|
#undef glob
|
||||||
|
#define glob(pattern, flags, errfunc, pglob) \
|
||||||
|
__old_glob64 (pattern, flags, errfunc, pglob)
|
||||||
|
#define glob_in_dir __old_glob_in_dir
|
||||||
|
|
||||||
|
#define GLOB_ONLY_P 1
|
||||||
|
|
||||||
|
#include <sysdeps/generic/glob.c>
|
||||||
|
|
||||||
|
compat_symbol (libc, __old_glob64, glob64, GLIBC_2_1);
|
||||||
|
#endif
|
@ -1 +1,7 @@
|
|||||||
#include <sysdeps/unix/sysv/linux/alpha/readdir.c>
|
#define readdir64 __no_readdir64_decl
|
||||||
|
#define __readdir64 __no___readdir64_decl
|
||||||
|
#include <sysdeps/unix/readdir.c>
|
||||||
|
#undef __readdir64
|
||||||
|
strong_alias (__readdir, __readdir64)
|
||||||
|
#undef readdir64
|
||||||
|
weak_alias (__readdir, readdir64)
|
||||||
|
@ -1 +1,4 @@
|
|||||||
#include <sysdeps/unix/sysv/linux/alpha/readdir_r.c>
|
#define readdir64_r __no_readdir64_r_decl
|
||||||
|
#include <sysdeps/unix/readdir_r.c>
|
||||||
|
#undef readdir64_r
|
||||||
|
weak_alias (__readdir_r, readdir64_r)
|
||||||
|
@ -9,6 +9,9 @@ libc {
|
|||||||
# functions used in other libraries
|
# functions used in other libraries
|
||||||
__xstat64; __fxstat64; __lxstat64;
|
__xstat64; __fxstat64; __lxstat64;
|
||||||
|
|
||||||
|
# g*
|
||||||
|
glob64;
|
||||||
|
|
||||||
# New rlimit interface
|
# New rlimit interface
|
||||||
getrlimit; setrlimit; getrlimit64; setrlimit64;
|
getrlimit; setrlimit; getrlimit64; setrlimit64;
|
||||||
|
|
||||||
|
1
sysdeps/unix/sysv/linux/powerpc/glob64.c
Normal file
1
sysdeps/unix/sysv/linux/powerpc/glob64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/glob64.c>
|
@ -4,11 +4,4 @@
|
|||||||
|
|
||||||
#include <sysdeps/unix/readdir.c>
|
#include <sysdeps/unix/readdir.c>
|
||||||
|
|
||||||
#include <shlib-compat.h>
|
weak_alias(__readdir64, readdir64)
|
||||||
|
|
||||||
versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2);
|
|
||||||
|
|
||||||
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
|
||||||
strong_alias (__readdir64, __old_readdir64)
|
|
||||||
compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1);
|
|
||||||
#endif
|
|
||||||
|
@ -4,11 +4,4 @@
|
|||||||
|
|
||||||
#include <sysdeps/unix/readdir_r.c>
|
#include <sysdeps/unix/readdir_r.c>
|
||||||
|
|
||||||
#include <shlib-compat.h>
|
weak_alias(__readdir64_r, readdir64_r)
|
||||||
|
|
||||||
versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2);
|
|
||||||
|
|
||||||
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
|
||||||
strong_alias (__readdir64_r, __old_readdir64_r)
|
|
||||||
compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1);
|
|
||||||
#endif
|
|
||||||
|
@ -9,6 +9,9 @@ libc {
|
|||||||
# functions used in other libraries
|
# functions used in other libraries
|
||||||
__xstat64; __fxstat64; __lxstat64;
|
__xstat64; __fxstat64; __lxstat64;
|
||||||
|
|
||||||
|
# g*
|
||||||
|
glob64;
|
||||||
|
|
||||||
# r*
|
# r*
|
||||||
readdir64; readdir64_r;
|
readdir64; readdir64_r;
|
||||||
|
|
||||||
|
1
sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c
Normal file
1
sysdeps/unix/sysv/linux/sparc/sparc32/glob64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/glob64.c>
|
@ -1 +1,7 @@
|
|||||||
#include <sysdeps/unix/sysv/linux/alpha/readdir.c>
|
#define readdir64 __no_readdir64_decl
|
||||||
|
#define __readdir64 __no___readdir64_decl
|
||||||
|
#include <sysdeps/unix/readdir.c>
|
||||||
|
#undef __readdir64
|
||||||
|
strong_alias (__readdir, __readdir64)
|
||||||
|
#undef readdir64
|
||||||
|
weak_alias (__readdir, readdir64)
|
||||||
|
@ -1 +1,4 @@
|
|||||||
#include <sysdeps/unix/sysv/linux/alpha/readdir_r.c>
|
#define readdir64_r __no_readdir64_r_decl
|
||||||
|
#include <sysdeps/unix/readdir_r.c>
|
||||||
|
#undef readdir64_r
|
||||||
|
weak_alias (__readdir_r, readdir64_r)
|
||||||
|
Reference in New Issue
Block a user