diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-10-10 09:09:19 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-10-13 14:30:22 +0200 |
commit | a38ced268314dfe3f61cbba5b982eeb77c2b8de4 (patch) | |
tree | 2fa13257e71eb2d5e391d8bc2a95f74a2d6fce74 /testsuites/sptests | |
parent | arm/nds: Warning clean up (diff) | |
download | rtems-a38ced268314dfe3f61cbba5b982eeb77c2b8de4.tar.bz2 |
score: Rework global construction
Ensure that the global construction is performed in the context of the
first initialization thread. On SMP this was not guaranteed in the
previous implementation.
Diffstat (limited to 'testsuites/sptests')
-rw-r--r-- | testsuites/sptests/Makefile.am | 1 | ||||
-rw-r--r-- | testsuites/sptests/configure.ac | 1 | ||||
-rw-r--r-- | testsuites/sptests/spglobalcon01/Makefile.am | 19 | ||||
-rw-r--r-- | testsuites/sptests/spglobalcon01/init.cc | 61 | ||||
-rw-r--r-- | testsuites/sptests/spglobalcon01/spglobalcon01.doc | 12 | ||||
-rw-r--r-- | testsuites/sptests/spglobalcon01/spglobalcon01.scn | 2 | ||||
-rw-r--r-- | testsuites/sptests/spthreadlife01/init.c | 6 |
7 files changed, 101 insertions, 1 deletions
diff --git a/testsuites/sptests/Makefile.am b/testsuites/sptests/Makefile.am index 7764a3e8f8..a71c02436f 100644 --- a/testsuites/sptests/Makefile.am +++ b/testsuites/sptests/Makefile.am @@ -50,6 +50,7 @@ _SUBDIRS += spcache01 _SUBDIRS += sptls03 _SUBDIRS += spcpucounter01 if HAS_CPLUSPLUS +_SUBDIRS += spglobalcon01 _SUBDIRS += sptls02 endif _SUBDIRS += sptls01 diff --git a/testsuites/sptests/configure.ac b/testsuites/sptests/configure.ac index 282cbcf304..5acf7c0d75 100644 --- a/testsuites/sptests/configure.ac +++ b/testsuites/sptests/configure.ac @@ -40,6 +40,7 @@ AM_CONDITIONAL(HAS_SMP,test "$rtems_cv_RTEMS_SMP" = "yes") # Explicitly list all Makefiles here AC_CONFIG_FILES([Makefile +spglobalcon01/Makefile spintrcritical22/Makefile spsem03/Makefile spresource01/Makefile diff --git a/testsuites/sptests/spglobalcon01/Makefile.am b/testsuites/sptests/spglobalcon01/Makefile.am new file mode 100644 index 0000000000..a7d94af8fb --- /dev/null +++ b/testsuites/sptests/spglobalcon01/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = spglobalcon01 +spglobalcon01_SOURCES = init.cc + +dist_rtems_tests_DATA = spglobalcon01.scn spglobalcon01.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 = $(spglobalcon01_OBJECTS) +LINK_LIBS = $(spglobalcon01_LDLIBS) + +spglobalcon01$(EXEEXT): $(spglobalcon01_OBJECTS) $(spglobalcon01_DEPENDENCIES) + @rm -f spglobalcon01$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/sptests/spglobalcon01/init.cc b/testsuites/sptests/spglobalcon01/init.cc new file mode 100644 index 0000000000..92a8a2c141 --- /dev/null +++ b/testsuites/sptests/spglobalcon01/init.cc @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2014 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" + +const char rtems_test_name[] = "SPGLOBALCON 1"; + +class A { + public: + A() + { + ++i; + } + + static int i; +}; + +int A::i; + +static A a; + +static void *idle_body(uintptr_t ignored) +{ + TEST_BEGIN(); + + rtems_test_assert(a.i == 0); + + TEST_END(); + rtems_test_exit(0); + + return NULL; +} + +#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION + +#define CONFIGURE_IDLE_TASK_BODY idle_body + +#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/sptests/spglobalcon01/spglobalcon01.doc b/testsuites/sptests/spglobalcon01/spglobalcon01.doc new file mode 100644 index 0000000000..48c64c6aa1 --- /dev/null +++ b/testsuites/sptests/spglobalcon01/spglobalcon01.doc @@ -0,0 +1,12 @@ +This file describes the directives and concepts tested by this test set. + +test set name: spglobalcon01 + +directives: + + - _Thread_Global_construction() + +concepts: + + - Ensure that the global construction is not performed in case the idle + thread initializes the application. diff --git a/testsuites/sptests/spglobalcon01/spglobalcon01.scn b/testsuites/sptests/spglobalcon01/spglobalcon01.scn new file mode 100644 index 0000000000..b15a43187b --- /dev/null +++ b/testsuites/sptests/spglobalcon01/spglobalcon01.scn @@ -0,0 +1,2 @@ +*** BEGIN OF TEST SPGLOBALCON 1 *** +*** END OF TEST SPGLOBALCON 1 *** diff --git a/testsuites/sptests/spthreadlife01/init.c b/testsuites/sptests/spthreadlife01/init.c index 4e6c98487b..f4005169de 100644 --- a/testsuites/sptests/spthreadlife01/init.c +++ b/testsuites/sptests/spthreadlife01/init.c @@ -136,17 +136,21 @@ static void restart_extension( rtems_status_code sc; rtems_test_assert(executing == restarted); - rtems_test_assert(ctx->worker_task_id == rtems_task_self()); switch (ctx->current) { case RESTART_0: + rtems_test_assert(ctx->worker_task_id == rtems_task_self()); ctx->current = RESTART_1; sc = rtems_task_restart(RTEMS_SELF, 0); rtems_test_assert(sc == RTEMS_SUCCESSFUL); break; case RESTART_1: + rtems_test_assert(ctx->worker_task_id == rtems_task_self()); ctx->current = RESTART_2; break; + case INIT: + /* Restart via _Thread_Global_construction() */ + break; default: rtems_test_assert(0); break; |