diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-09-27 13:33:52 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-09-27 13:33:52 +0000 |
commit | 5b87515dbe86bda9d6fbc7ddfdbee0ea7b1eee42 (patch) | |
tree | ba8389bb5a0ef94130034c07b089d30c75ddc285 /c/src/exec/score/src | |
parent | 2001-09-27 Eric Norum <eric.norum@usask.ca> (diff) | |
download | rtems-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 'c/src/exec/score/src')
-rw-r--r-- | c/src/exec/score/src/threadhandler.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/c/src/exec/score/src/threadhandler.c b/c/src/exec/score/src/threadhandler.c index cfdb9292d1..d3755f4466 100644 --- a/c/src/exec/score/src/threadhandler.c +++ b/c/src/exec/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: |