summaryrefslogtreecommitdiffstats
path: root/testsuites
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2014-10-10 09:09:19 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2014-10-13 14:30:22 +0200
commita38ced268314dfe3f61cbba5b982eeb77c2b8de4 (patch)
tree2fa13257e71eb2d5e391d8bc2a95f74a2d6fce74 /testsuites
parentarm/nds: Warning clean up (diff)
downloadrtems-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')
-rw-r--r--testsuites/psxtests/Makefile.am4
-rw-r--r--testsuites/psxtests/configure.ac9
-rw-r--r--testsuites/psxtests/psxglobalcon01/Makefile.am19
-rw-r--r--testsuites/psxtests/psxglobalcon01/init.cc58
-rw-r--r--testsuites/psxtests/psxglobalcon01/psxglobalcon01.doc12
-rw-r--r--testsuites/psxtests/psxglobalcon01/psxglobalcon01.scn2
-rw-r--r--testsuites/psxtests/psxglobalcon02/Makefile.am19
-rw-r--r--testsuites/psxtests/psxglobalcon02/init.cc73
-rw-r--r--testsuites/psxtests/psxglobalcon02/psxglobalcon02.doc12
-rw-r--r--testsuites/psxtests/psxglobalcon02/psxglobalcon02.scn2
-rw-r--r--testsuites/sptests/Makefile.am1
-rw-r--r--testsuites/sptests/configure.ac1
-rw-r--r--testsuites/sptests/spglobalcon01/Makefile.am19
-rw-r--r--testsuites/sptests/spglobalcon01/init.cc61
-rw-r--r--testsuites/sptests/spglobalcon01/spglobalcon01.doc12
-rw-r--r--testsuites/sptests/spglobalcon01/spglobalcon01.scn2
-rw-r--r--testsuites/sptests/spthreadlife01/init.c6
17 files changed, 310 insertions, 2 deletions
diff --git a/testsuites/psxtests/Makefile.am b/testsuites/psxtests/Makefile.am
index d8eee14a7e..e15d72f105 100644
--- a/testsuites/psxtests/Makefile.am
+++ b/testsuites/psxtests/Makefile.am
@@ -15,6 +15,10 @@ _SUBDIRS += psxhdrs psx01 psx02 psx03 psx04 psx05 psx06 psx07 psx08 psx09 \
psxtime psxtimer01 psxtimer02 psxualarm psxusleep psxfatal01 psxfatal02 \
psxintrcritical01 psxstack01 psxstack02 \
psxeintr_join psxgetattrnp01
+if HAS_CPLUSPLUS
+_SUBDIRS += psxglobalcon01
+_SUBDIRS += psxglobalcon02
+endif
endif
## File IO tests
diff --git a/testsuites/psxtests/configure.ac b/testsuites/psxtests/configure.ac
index 26e4b60ed3..23c7211647 100644
--- a/testsuites/psxtests/configure.ac
+++ b/testsuites/psxtests/configure.ac
@@ -11,17 +11,22 @@ RTEMS_CANONICAL_TARGET_CPU
AM_INIT_AUTOMAKE([no-define foreign 1.12.2])
AM_MAINTAINER_MODE
+RTEMS_ENABLE_CXX
+
RTEMS_ENV_RTEMSBSP
RTEMS_PROJECT_ROOT
RTEMS_PROG_CC_FOR_TARGET
+RTEMS_PROG_CXX_FOR_TARGET
RTEMS_CANONICALIZE_TOOLS
RTEMS_CHECK_CUSTOM_BSP(RTEMS_BSP)
+RTEMS_CHECK_CXX(RTEMS_BSP)
-AM_CONDITIONAL([HAS_NETWORKING],[test "$HAS_NETWORKING" = "yes"])
+AM_CONDITIONAL([HAS_NETWORKING],[test x"$HAS_NETWORKING" = x"yes"])
+AM_CONDITIONAL([HAS_CPLUSPLUS],[test x"$HAS_CPLUSPLUS" = x"yes"])
RTEMS_CHECK_CPUOPTS([RTEMS_POSIX_API])
AM_CONDITIONAL(HAS_POSIX,test x"${rtems_cv_RTEMS_POSIX_API}" = x"yes")
@@ -145,6 +150,8 @@ psxfile02/Makefile
psxfilelock01/Makefile
psxgetattrnp01/Makefile
psxgetrusage01/Makefile
+psxglobalcon01/Makefile
+psxglobalcon02/Makefile
psxhdrs/Makefile
psxid01/Makefile
psximfs01/Makefile
diff --git a/testsuites/psxtests/psxglobalcon01/Makefile.am b/testsuites/psxtests/psxglobalcon01/Makefile.am
new file mode 100644
index 0000000000..3b87ebe013
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon01/Makefile.am
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = psxglobalcon01
+psxglobalcon01_SOURCES = init.cc
+
+dist_rtems_tests_DATA = psxglobalcon01.scn psxglobalcon01.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 = $(psxglobalcon01_OBJECTS)
+LINK_LIBS = $(psxglobalcon01_LDLIBS)
+
+psxglobalcon01$(EXEEXT): $(psxglobalcon01_OBJECTS) $(psxglobalcon01_DEPENDENCIES)
+ @rm -f psxglobalcon01$(EXEEXT)
+ $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/psxtests/psxglobalcon01/init.cc b/testsuites/psxtests/psxglobalcon01/init.cc
new file mode 100644
index 0000000000..f33efc3838
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon01/init.cc
@@ -0,0 +1,58 @@
+/*
+ * 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
+
+#include "tmacros.h"
+
+const char rtems_test_name[] = "PSXGLOBALCON 1";
+
+class A {
+ public:
+ A()
+ {
+ ++i;
+ }
+
+ static int i;
+};
+
+int A::i;
+
+static A a;
+
+static void *POSIX_Init(void *argument)
+{
+ TEST_BEGIN();
+
+ rtems_test_assert(a.i == 1);
+
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/psxtests/psxglobalcon01/psxglobalcon01.doc b/testsuites/psxtests/psxglobalcon01/psxglobalcon01.doc
new file mode 100644
index 0000000000..7ed81dadaf
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon01/psxglobalcon01.doc
@@ -0,0 +1,12 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: psxglobalcon01
+
+directives:
+
+ - _Thread_Global_construction()
+
+concepts:
+
+ - Ensure that the global construction is performed exactly once in case only
+ a POSIX initialization thread is present.
diff --git a/testsuites/psxtests/psxglobalcon01/psxglobalcon01.scn b/testsuites/psxtests/psxglobalcon01/psxglobalcon01.scn
new file mode 100644
index 0000000000..13d7b65eb9
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon01/psxglobalcon01.scn
@@ -0,0 +1,2 @@
+*** BEGIN OF TEST PSXGLOBALCON 1 ***
+*** END OF TEST PSXGLOBALCON 1 ***
diff --git a/testsuites/psxtests/psxglobalcon02/Makefile.am b/testsuites/psxtests/psxglobalcon02/Makefile.am
new file mode 100644
index 0000000000..0d29894baa
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon02/Makefile.am
@@ -0,0 +1,19 @@
+rtems_tests_PROGRAMS = psxglobalcon02
+psxglobalcon02_SOURCES = init.cc
+
+dist_rtems_tests_DATA = psxglobalcon02.scn psxglobalcon02.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 = $(psxglobalcon02_OBJECTS)
+LINK_LIBS = $(psxglobalcon02_LDLIBS)
+
+psxglobalcon02$(EXEEXT): $(psxglobalcon02_OBJECTS) $(psxglobalcon02_DEPENDENCIES)
+ @rm -f psxglobalcon02$(EXEEXT)
+ $(make-exe)
+
+include $(top_srcdir)/../automake/local.am
diff --git a/testsuites/psxtests/psxglobalcon02/init.cc b/testsuites/psxtests/psxglobalcon02/init.cc
new file mode 100644
index 0000000000..6de4fbd7c7
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon02/init.cc
@@ -0,0 +1,73 @@
+/*
+ * 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
+
+#include "tmacros.h"
+
+const char rtems_test_name[] = "PSXGLOBALCON 2";
+
+class A {
+ public:
+ A()
+ {
+ ++i;
+ }
+
+ static int i;
+};
+
+int A::i;
+
+static A a;
+
+static bool rtems_init_done;
+
+extern "C" void Init(rtems_task_argument argument)
+{
+ TEST_BEGIN();
+
+ rtems_test_assert(a.i == 1);
+
+ rtems_init_done = true;
+
+ rtems_task_delete(RTEMS_SELF);
+ rtems_test_assert(0);
+}
+
+static void *POSIX_Init(void *argument)
+{
+ rtems_test_assert(rtems_init_done);
+ rtems_test_assert(a.i == 1);
+
+ TEST_END();
+ rtems_test_exit(0);
+}
+
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS 1
+#define CONFIGURE_MAXIMUM_POSIX_THREADS 1
+
+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
+
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+#define CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+#define CONFIGURE_INIT
+
+#include <rtems/confdefs.h>
diff --git a/testsuites/psxtests/psxglobalcon02/psxglobalcon02.doc b/testsuites/psxtests/psxglobalcon02/psxglobalcon02.doc
new file mode 100644
index 0000000000..4dc5bde09d
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon02/psxglobalcon02.doc
@@ -0,0 +1,12 @@
+This file describes the directives and concepts tested by this test set.
+
+test set name: psxglobalcon02
+
+directives:
+
+ - _Thread_Global_construction()
+
+concepts:
+
+ - Ensure that the global construction is performed exactly once in case a
+ RTEMS initialization task and a POSIX initialization thread are present.
diff --git a/testsuites/psxtests/psxglobalcon02/psxglobalcon02.scn b/testsuites/psxtests/psxglobalcon02/psxglobalcon02.scn
new file mode 100644
index 0000000000..54ae33b5f6
--- /dev/null
+++ b/testsuites/psxtests/psxglobalcon02/psxglobalcon02.scn
@@ -0,0 +1,2 @@
+*** BEGIN OF TEST PSXGLOBALCON 2 ***
+*** END OF TEST PSXGLOBALCON 2 ***
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;