summaryrefslogtreecommitdiffstats
path: root/cpukit
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
parent2001-09-27 Eric Norum <eric.norum@usask.ca> (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/ChangeLog14
-rw-r--r--cpukit/score/src/threadhandler.c13
2 files changed, 27 insertions, 0 deletions
diff --git a/cpukit/score/ChangeLog b/cpukit/score/ChangeLog
index f12205258e..287701924d 100644
--- a/cpukit/score/ChangeLog
+++ b/cpukit/score/ChangeLog
@@ -1,4 +1,18 @@
+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.
+
+2001-09-23 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
+
+ * include/rtems/score/Makefile.am: Use 'PREINSTALL_FILES ='.
+ * include/rtems/Makefile.am: Use 'PREINSTALL_FILES ='.
+ * inline/rtems/score/Makefile.am: Use 'PREINSTALL_FILES ='.
+ * macros/rtems/score/Makefile.am: Use 'PREINSTALL_FILES ='.
+
2001-08-30 Joel Sherrill <joel@OARcorp.com>
* src/coremutex.c, src/coremutexseize.c, src/coremutexsurrender.c,
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: