diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-11-25 17:48:11 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-11-27 17:03:40 +0100 |
commit | 815994fd17c2f732aacaf273a1e476a62de5f4a6 (patch) | |
tree | 17fffb992fcf3e025462215ee3c7515919d2ced4 /testsuites | |
parent | powerpc: Add CPU_Exception_frame (diff) | |
download | rtems-815994fd17c2f732aacaf273a1e476a62de5f4a6.tar.bz2 |
score: Add CPU_Exception_frame
Add CPU port type CPU_Exception_frame and function
_CPU_Exception_frame_print().
The CPU ports of avr, bfin, h8300, lm32, m32c, m32r, m68k, nios2, sh,
sparc64, and v850 use an empty default implementation of
_CPU_Exception_frame_print().
Add rtems_exception_frame and rtems_exception_frame_print().
Add RTEMS_FATAL_SOURCE_EXCEPTION for CPU exceptions. Use rtems_fatal()
with source RTEMS_FATAL_SOURCE_EXCEPTION in CPU ports of i386, powerpc,
and sparc for unexpected exceptions.
Add third parameter to RTEMS_BSP_CLEANUP_OPTIONS() which controls the
BSP_PRINT_EXCEPTION_CONTEXT define used in the default
bsp_fatal_extension().
Add test sptests/spfatal26.
Diffstat (limited to 'testsuites')
-rw-r--r-- | testsuites/sptests/Makefile.am | 1 | ||||
-rw-r--r-- | testsuites/sptests/configure.ac | 1 | ||||
-rw-r--r-- | testsuites/sptests/spfatal26/Makefile.am | 19 | ||||
-rw-r--r-- | testsuites/sptests/spfatal26/init.c | 85 | ||||
-rw-r--r-- | testsuites/sptests/spfatal26/spfatal26.doc | 11 | ||||
-rw-r--r-- | testsuites/sptests/spfatal26/spfatal26.scn | 2 |
6 files changed, 119 insertions, 0 deletions
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am index 1e183eb846..c00d73c3e7 100644 --- a/testsuites/sptests/Makefile.am +++ b/testsuites/sptests/Makefile.am @@ -28,6 +28,7 @@ SUBDIRS = \ spsimplesched01 spsimplesched02 spsimplesched03 spnsext01 \ spedfsched01 spedfsched02 spedfsched03 \ spcbssched01 spcbssched02 spcbssched03 spqreslib sptimespec01 +SUBDIRS += spfatal26 SUBDIRS += speventtransient01 SUBDIRS += speventsystem01 SUBDIRS += spinternalerror01 diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac index a71746fc74..6d899a3a09 100644 --- a/testsuites/sptests/configure.ac +++ b/testsuites/sptests/configure.ac @@ -27,6 +27,7 @@ AC_CHECK_SIZEOF([time_t]) # Explicitly list all Makefiles here AC_CONFIG_FILES([Makefile +spfatal26/Makefile spinternalerror02/Makefile spinternalerror01/Makefile speventsystem01/Makefile diff --git a/testsuites/sptests/spfatal26/Makefile.am b/testsuites/sptests/spfatal26/Makefile.am new file mode 100644 index 0000000000..9cc5dbac1c --- /dev/null +++ b/testsuites/sptests/spfatal26/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = spfatal26 +spfatal26_SOURCES = init.c + +dist_rtems_tests_DATA = spfatal26.scn spfatal26.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 = $(spfatal26_OBJECTS) +LINK_LIBS = $(spfatal26_LDLIBS) + +spfatal26$(EXEEXT): $(spfatal26_OBJECTS) $(spfatal26_DEPENDENCIES) + @rm -f spfatal26$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/spfatal26/init.c b/testsuites/sptests/spfatal26/init.c new file mode 100644 index 0000000000..556410fd5d --- /dev/null +++ b/testsuites/sptests/spfatal26/init.c @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2012 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Obere Lagerstr. 30 + * 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.com/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include "tmacros.h" + +#include <limits.h> + +#include <rtems.h> + +static void provoke_aligment_or_data_access_exception( void ) +{ + uintptr_t one = 1; + int i = sizeof(void *) * CHAR_BIT; + uintptr_t n = 1; + uintptr_t base = 0; + uintptr_t inc; + + *(volatile uint64_t *) base; + + do { + int j; + + --i; + base = one << i; + inc = base << 1; + + for (j = 0; j < n; ++j, base += inc) { + *(volatile uint64_t *) base; + } + + n <<= 1; + } while (i > 0); +} + +static void Init( rtems_task_argument arg ) +{ + printk( "\n\n*** TEST SPFATAL 26 ***\n" ); + + provoke_aligment_or_data_access_exception(); + + rtems_test_assert( 0 ); +} + +static void fatal_extension( + rtems_fatal_source source, + bool is_internal, + rtems_fatal_code code +) +{ + rtems_test_assert( source == RTEMS_FATAL_SOURCE_EXCEPTION ); + rtems_test_assert( !is_internal ); + + rtems_exception_frame_print( (const rtems_exception_frame *) code ); + + printk( "*** END OF TEST SPFATAL 26 ***\n" ); +} + +#define CONFIGURE_INITIAL_EXTENSIONS { .fatal = fatal_extension } + +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_APPLICATION_DISABLE_FILESYSTEM + +#define CONFIGURE_MAXIMUM_TASKS 1 + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/sptests/spfatal26/spfatal26.doc b/testsuites/sptests/spfatal26/spfatal26.doc new file mode 100644 index 0000000000..fb9097c9f1 --- /dev/null +++ b/testsuites/sptests/spfatal26/spfatal26.doc @@ -0,0 +1,11 @@ +This file describes the directives and concepts tested by this test set. + +test set name: spfatal26 + +directives: + + - rtems_exception_frame_print + +concepts: + + - Ensure that we get an fatal condition with RTEMS_FATAL_SOURCE_EXCEPTION. diff --git a/testsuites/sptests/spfatal26/spfatal26.scn b/testsuites/sptests/spfatal26/spfatal26.scn new file mode 100644 index 0000000000..0dfa62a4e8 --- /dev/null +++ b/testsuites/sptests/spfatal26/spfatal26.scn @@ -0,0 +1,2 @@ +*** TEST SPFATAL 26 *** +*** END OF TEST SPFATAL 26 *** |