From 230be00443c330de9a8fbd0c957807399046aa41 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. --- rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h b/rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h index 9c332f0e59..90b458f33d 100755 --- a/rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h +++ b/rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h @@ -448,7 +448,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 @@ -458,6 +462,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;