diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-19 09:07:17 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-07-25 11:41:11 +0200 |
commit | 600d88dfd7c245a4e97d297bd208d568f8bae16b (patch) | |
tree | 1d2b6b87a7934ca0a5f6a9a702577fb6ae59569c /testsuites/sptests/spfatal30 | |
parent | sparc: Rename SPARC_USE_SAFE_FP_SUPPORT (diff) | |
download | rtems-600d88dfd7c245a4e97d297bd208d568f8bae16b.tar.bz2 |
INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT
Add new fatal error INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT.
Update #3077.
Diffstat (limited to 'testsuites/sptests/spfatal30')
-rw-r--r-- | testsuites/sptests/spfatal30/Makefile.am | 19 | ||||
-rw-r--r-- | testsuites/sptests/spfatal30/init.c | 80 | ||||
-rw-r--r-- | testsuites/sptests/spfatal30/spfatal30.doc | 12 | ||||
-rw-r--r-- | testsuites/sptests/spfatal30/spfatal30.scn | 2 |
4 files changed, 113 insertions, 0 deletions
diff --git a/testsuites/sptests/spfatal30/Makefile.am b/testsuites/sptests/spfatal30/Makefile.am new file mode 100644 index 0000000000..efd5d44f42 --- /dev/null +++ b/testsuites/sptests/spfatal30/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = spfatal30 +spfatal30_SOURCES = init.c + +dist_rtems_tests_DATA = spfatal30.scn spfatal30.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(spfatal30_OBJECTS) +LINK_LIBS = $(spfatal30_LDLIBS) + +spfatal30$(EXEEXT): $(spfatal30_OBJECTS) $(spfatal30_DEPENDENCIES) + @rm -f spfatal30$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/spfatal30/init.c b/testsuites/sptests/spfatal30/init.c new file mode 100644 index 0000000000..e1a89c49eb --- /dev/null +++ b/testsuites/sptests/spfatal30/init.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2017 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * <rtems@embedded-brains.de> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#define TESTS_USE_PRINTK +#include "tmacros.h" + +#include <rtems.h> + +const char rtems_test_name[] = "SPFATAL 30"; + +#if CPU_HARDWARE_FP == TRUE && CPU_ALL_TASKS_ARE_FP == FALSE +#define EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT +#endif + +static volatile double f = 1.0; + +static void Init(rtems_task_argument arg) +{ + TEST_BEGIN(); + + f *= 123.456; + +#ifdef EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT + rtems_test_assert(0); +#else + TEST_END(); + rtems_test_exit(0); +#endif +} + +#ifdef EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT +static void fatal_extension( + rtems_fatal_source source, + bool always_set_to_false, + rtems_fatal_code code +) +{ + if ( + source == INTERNAL_ERROR_CORE + && !always_set_to_false + && code == INTERNAL_ERROR_ILLEGAL_USE_OF_FLOATING_POINT_UNIT + ) { + TEST_END(); + } +} + +#define CONFIGURE_INITIAL_EXTENSIONS \ + { .fatal = fatal_extension }, \ + RTEMS_TEST_INITIAL_EXTENSION + +#else /* EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT */ + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#endif /* EXPECT_ILLEGAL_USE_OF_FLOATING_POINT_UNIT */ + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/sptests/spfatal30/spfatal30.doc b/testsuites/sptests/spfatal30/spfatal30.doc new file mode 100644 index 0000000000..6fff5cfc2e --- /dev/null +++ b/testsuites/sptests/spfatal30/spfatal30.doc @@ -0,0 +1,12 @@ +This file describes the directives and concepts tested by this test set. + +test set name: spfatal30 + +directives: + + - _Internal_error() + +concepts: + + - Provoke an illegal use of the floating point unit in thread context and + ensure that the right internal error occurs. diff --git a/testsuites/sptests/spfatal30/spfatal30.scn b/testsuites/sptests/spfatal30/spfatal30.scn new file mode 100644 index 0000000000..ec69033143 --- /dev/null +++ b/testsuites/sptests/spfatal30/spfatal30.scn @@ -0,0 +1,2 @@ +*** BEGIN OF TEST SPFATAL 30 *** +*** END OF TEST SPFATAL 30 *** |