forked from Imagelibrary/rtems
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.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
19
testsuites/psxtests/psxglobalcon01/Makefile.am
Normal file
19
testsuites/psxtests/psxglobalcon01/Makefile.am
Normal file
@@ -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
|
||||
58
testsuites/psxtests/psxglobalcon01/init.cc
Normal file
58
testsuites/psxtests/psxglobalcon01/init.cc
Normal file
@@ -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>
|
||||
12
testsuites/psxtests/psxglobalcon01/psxglobalcon01.doc
Normal file
12
testsuites/psxtests/psxglobalcon01/psxglobalcon01.doc
Normal file
@@ -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.
|
||||
2
testsuites/psxtests/psxglobalcon01/psxglobalcon01.scn
Normal file
2
testsuites/psxtests/psxglobalcon01/psxglobalcon01.scn
Normal file
@@ -0,0 +1,2 @@
|
||||
*** BEGIN OF TEST PSXGLOBALCON 1 ***
|
||||
*** END OF TEST PSXGLOBALCON 1 ***
|
||||
19
testsuites/psxtests/psxglobalcon02/Makefile.am
Normal file
19
testsuites/psxtests/psxglobalcon02/Makefile.am
Normal file
@@ -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
|
||||
73
testsuites/psxtests/psxglobalcon02/init.cc
Normal file
73
testsuites/psxtests/psxglobalcon02/init.cc
Normal file
@@ -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>
|
||||
12
testsuites/psxtests/psxglobalcon02/psxglobalcon02.doc
Normal file
12
testsuites/psxtests/psxglobalcon02/psxglobalcon02.doc
Normal file
@@ -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.
|
||||
2
testsuites/psxtests/psxglobalcon02/psxglobalcon02.scn
Normal file
2
testsuites/psxtests/psxglobalcon02/psxglobalcon02.scn
Normal file
@@ -0,0 +1,2 @@
|
||||
*** BEGIN OF TEST PSXGLOBALCON 2 ***
|
||||
*** END OF TEST PSXGLOBALCON 2 ***
|
||||
Reference in New Issue
Block a user