mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 19:00:07 +00:00
Add fenv test support for targets which don't have FP traps.
This commit is contained in:
parent
bc93ab2946
commit
423a7160af
@ -1,3 +1,10 @@
|
|||||||
|
2014-04-17 Wilco <wdijkstr@arm.com>
|
||||||
|
|
||||||
|
* sysdeps/arm/math-tests.h: New file: Set ARM math-test settings.
|
||||||
|
* sysdeps/generic/math-tests.h: Add macro (EXCEPTION_ENABLE_SUPPORTED).
|
||||||
|
* math/test-fenv.c: Skip exception trap tests on targets which only
|
||||||
|
support non-stop mode.
|
||||||
|
|
||||||
2014-04-17 Ian Bolton <ian.bolton@arm.com>
|
2014-04-17 Ian Bolton <ian.bolton@arm.com>
|
||||||
Wilco Dijkstra <wilco.dijkstra@arm.com>
|
Wilco Dijkstra <wilco.dijkstra@arm.com>
|
||||||
|
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
#include <math-tests.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Since not all architectures might define all exceptions, we define
|
Since not all architectures might define all exceptions, we define
|
||||||
@ -233,14 +234,9 @@ feenv_nomask_test (const char *flag_name, int fe_exc)
|
|||||||
#if defined FE_NOMASK_ENV
|
#if defined FE_NOMASK_ENV
|
||||||
int status;
|
int status;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
fenv_t saved;
|
|
||||||
|
|
||||||
fegetenv (&saved);
|
if (!EXCEPTION_ENABLE_SUPPORTED (FE_ALL_EXCEPT)
|
||||||
errno = 0;
|
&& fesetenv (FE_NOMASK_ENV) != 0)
|
||||||
fesetenv (FE_NOMASK_ENV);
|
|
||||||
status = errno;
|
|
||||||
fesetenv (&saved);
|
|
||||||
if (status == ENOSYS)
|
|
||||||
{
|
{
|
||||||
printf ("Test: not testing FE_NOMASK_ENV, it isn't implemented.\n");
|
printf ("Test: not testing FE_NOMASK_ENV, it isn't implemented.\n");
|
||||||
return;
|
return;
|
||||||
@ -349,7 +345,13 @@ feexcp_nomask_test (const char *flag_name, int fe_exc)
|
|||||||
int status;
|
int status;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
|
|
||||||
printf ("Test: after fedisableexcept (%s) processes will abort\n",
|
if (!EXCEPTION_ENABLE_SUPPORTED (fe_exc) && feenableexcept (fe_exc) == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: not testing feenableexcept, it isn't implemented.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf ("Test: after feenableexcept (%s) processes will abort\n",
|
||||||
flag_name);
|
flag_name);
|
||||||
printf (" when feraiseexcept (%s) is called.\n", flag_name);
|
printf (" when feraiseexcept (%s) is called.\n", flag_name);
|
||||||
pid = fork ();
|
pid = fork ();
|
||||||
@ -470,7 +472,6 @@ feenable_test (const char *flag_name, int fe_exc)
|
|||||||
{
|
{
|
||||||
int excepts;
|
int excepts;
|
||||||
|
|
||||||
|
|
||||||
printf ("Tests for feenableexcepts etc. with flag %s\n", flag_name);
|
printf ("Tests for feenableexcepts etc. with flag %s\n", flag_name);
|
||||||
|
|
||||||
/* First disable all exceptions. */
|
/* First disable all exceptions. */
|
||||||
@ -488,8 +489,12 @@ feenable_test (const char *flag_name, int fe_exc)
|
|||||||
flag_name, excepts);
|
flag_name, excepts);
|
||||||
++count_errors;
|
++count_errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
excepts = feenableexcept (fe_exc);
|
excepts = feenableexcept (fe_exc);
|
||||||
|
if (!EXCEPTION_ENABLE_SUPPORTED (fe_exc) && excepts == -1)
|
||||||
|
{
|
||||||
|
printf ("Test: not testing feenableexcept, it isn't implemented.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (excepts == -1)
|
if (excepts == -1)
|
||||||
{
|
{
|
||||||
printf ("Test: feenableexcept (%s) failed\n", flag_name);
|
printf ("Test: feenableexcept (%s) failed\n", flag_name);
|
||||||
|
@ -29,4 +29,7 @@
|
|||||||
# define EXCEPTION_TESTS_long_double 0
|
# define EXCEPTION_TESTS_long_double 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Not all VFP implementations support trapping exceptions. */
|
||||||
|
#define EXCEPTION_ENABLE_SUPPORTED(EXCEPT) ((EXCEPT) == 0)
|
||||||
|
|
||||||
#include_next <math-tests.h>
|
#include_next <math-tests.h>
|
||||||
|
@ -76,3 +76,14 @@
|
|||||||
(sizeof (TYPE) == sizeof (float) ? EXCEPTION_TESTS_float \
|
(sizeof (TYPE) == sizeof (float) ? EXCEPTION_TESTS_float \
|
||||||
: sizeof (TYPE) == sizeof (double) ? EXCEPTION_TESTS_double \
|
: sizeof (TYPE) == sizeof (double) ? EXCEPTION_TESTS_double \
|
||||||
: EXCEPTION_TESTS_long_double)
|
: EXCEPTION_TESTS_long_double)
|
||||||
|
|
||||||
|
/* Indicate whether the given exception trap(s) can be enabled
|
||||||
|
in feenableexcept. If non-zero, the traps are always supported.
|
||||||
|
If zero, traps may or may not be supported depending on the
|
||||||
|
target (this can be determined by checking the return value
|
||||||
|
of feenableexcept). This enables skipping of tests which use
|
||||||
|
traps. By default traps are supported unless overridden. */
|
||||||
|
#ifndef EXCEPTION_ENABLE_SUPPORTED
|
||||||
|
# define EXCEPTION_ENABLE_SUPPORTED(EXCEPT) \
|
||||||
|
(EXCEPTION_TESTS_float || EXCEPTION_TESTS_double)
|
||||||
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user