summaryrefslogtreecommitdiffstats
path: root/cpukit/score/src/threadhandler.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2001-09-27 13:33:52 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2001-09-27 13:33:52 +0000
commit5b87515dbe86bda9d6fbc7ddfdbee0ea7b1eee42 (patch)
treeba8389bb5a0ef94130034c07b089d30c75ddc285 /cpukit/score/src/threadhandler.c
parent1ef8e3d448505999cad80d25ed2d2191308c99a1 (diff)
downloadrtems-5b87515dbe86bda9d6fbc7ddfdbee0ea7b1eee42.tar.bz2
2001-09-27 Eric Norum <eric.norum@usask.ca>
* src/threadhandler.c: Now process C++ global constructors (_init) as part of the first task execution not in BSP space. This depends on the toolset defining USE_INIT_FINI so you have to have the right toolset version.
Diffstat (limited to '')
-rw-r--r--cpukit/score/src/threadhandler.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/cpukit/score/src/threadhandler.c b/cpukit/score/src/threadhandler.c
index cfdb9292d1..d3755f4466 100644
--- a/cpukit/score/src/threadhandler.c
+++ b/cpukit/score/src/threadhandler.c
@@ -58,6 +58,10 @@ void _Thread_Handler( void )
{
ISR_Level level;
Thread_Control *executing;
+#ifdef USE_INIT_FINI
+ static char doneConstructors;
+ char doneCons;
+#endif
executing = _Thread_Executing;
@@ -69,6 +73,11 @@ void _Thread_Handler( void )
level = executing->Start.isr_level;
_ISR_Set_level(level);
+#ifdef USE_INIT_FINI
+ doneCons = doneConstructors;
+ doneConstructors = 1;
+#endif
+
/*
* Take care that 'begin' extensions get to complete before
* 'switch' extensions can run. This means must keep dispatch
@@ -82,6 +91,10 @@ void _Thread_Handler( void )
*/
_Thread_Enable_dispatch();
+#ifdef USE_INIT_FINI
+ if (!doneCons)
+ _init ();
+#endif
switch ( executing->Start.prototype ) {
case THREAD_START_NUMERIC: