From e01bcdc95a23beca0cb543b0d99abe917965c096 Mon Sep 17 00:00:00 2001 From: Martin Kojtal Date: Thu, 28 Apr 2016 13:48:22 -0500 Subject: [PATCH] ARMCC ulib - initalize RTOS before the standard library C++ init Initialize the RTOS before initializing the standard library. This allows C++ constructors to be called in a well defined thread context. --- core/mbed-rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/core/mbed-rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h b/core/mbed-rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h index 0fd71d141f..7dd6bfa698 100755 --- a/core/mbed-rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h +++ b/core/mbed-rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h @@ -433,7 +433,11 @@ void set_main_stack(void) { #if defined (__CC_ARM) #ifdef __MICROLIB + +int main(void); void _main_init (void) __attribute__((section(".ARM.Collect$$$$000000FF"))); +void $Super$$__cpp_initialize__aeabi_(void); + void _main_init (void) { osKernelInitialize(); #ifdef __MBED_CMSIS_RTOS_CM @@ -443,6 +447,19 @@ void _main_init (void) { osKernelStart(); for (;;); } + +void $Sub$$__cpp_initialize__aeabi_(void) +{ + // this should invoke C++ initializers prior _main_init, we keep this empty and + // invoke them after _main_init (=starts RTX kernel) +} + +void pre_main() +{ + $Super$$__cpp_initialize__aeabi_(); + main(); +} + #else void * armcc_heap_base;