@@ -149,13 +149,21 @@ static inline int openmode_to_posix(int openmode) {
149149 return posix;
150150}
151151
152+ extern " C" WEAK void mbed_sdk_init (void );
153+ extern " C" WEAK void mbed_sdk_init (void ) {
154+ }
155+
152156extern " C" FILEHANDLE PREFIX (_open)(const char * name, int openmode) {
153157 #if defined(__MICROLIB) && (__ARMCC_VERSION>5030000)
154158 // Before version 5.03, we were using a patched version of microlib with proper names
155159 // This is the workaround that the microlib author suggested us
156160 static int n = 0 ;
161+ static int mbed_sdk_inited = 0 ;
162+ if (!mbed_sdk_inited) {
163+ mbed_sdk_inited = 1 ;
164+ mbed_sdk_init ();
165+ }
157166 if (!std::strcmp (name, " :tt" )) return n++;
158-
159167 #else
160168 /* Use the posix convention that stdin,out,err are filehandles 0,1,2.
161169 */
@@ -501,7 +509,7 @@ extern "C" void software_init_hook(void)
501509 mbed_die ();
502510 }
503511#endif /* FEATURE_UVISOR */
504-
512+ mbed_sdk_init ();
505513 software_init_hook_rtos ();
506514}
507515#endif
@@ -516,23 +524,22 @@ extern "C" WEAK void mbed_main(void);
516524extern " C" WEAK void mbed_main (void ) {
517525}
518526
519- extern " C" WEAK void mbed_sdk_init (void );
520- extern " C" WEAK void mbed_sdk_init (void ) {
521- }
522-
523527#if defined(TOOLCHAIN_ARM)
524528extern " C" int $Super$$main (void );
525529
526530extern " C" int $Sub$$main (void ) {
527- mbed_sdk_init ();
528531 mbed_main ();
529532 return $Super$$main ();
530533}
534+
535+ extern " C" void _platform_post_stackheap_init (void ) {
536+ mbed_sdk_init ();
537+ }
538+
531539#elif defined(TOOLCHAIN_GCC)
532540extern " C" int __real_main (void );
533541
534542extern " C" int __wrap_main (void ) {
535- mbed_sdk_init ();
536543 mbed_main ();
537544 return __real_main ();
538545}
0 commit comments