@@ -149,13 +149,21 @@ static inline int openmode_to_posix(int openmode) {
149
149
return posix;
150
150
}
151
151
152
+ extern " C" WEAK void mbed_sdk_init (void );
153
+ extern " C" WEAK void mbed_sdk_init (void ) {
154
+ }
155
+
152
156
extern " C" FILEHANDLE PREFIX (_open)(const char * name, int openmode) {
153
157
#if defined(__MICROLIB) && (__ARMCC_VERSION>5030000)
154
158
// Before version 5.03, we were using a patched version of microlib with proper names
155
159
// This is the workaround that the microlib author suggested us
156
160
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
+ }
157
166
if (!std::strcmp (name, " :tt" )) return n++;
158
-
159
167
#else
160
168
/* Use the posix convention that stdin,out,err are filehandles 0,1,2.
161
169
*/
@@ -501,7 +509,7 @@ extern "C" void software_init_hook(void)
501
509
mbed_die ();
502
510
}
503
511
#endif /* FEATURE_UVISOR */
504
-
512
+ mbed_sdk_init ();
505
513
software_init_hook_rtos ();
506
514
}
507
515
#endif
@@ -516,23 +524,22 @@ extern "C" WEAK void mbed_main(void);
516
524
extern " C" WEAK void mbed_main (void ) {
517
525
}
518
526
519
- extern " C" WEAK void mbed_sdk_init (void );
520
- extern " C" WEAK void mbed_sdk_init (void ) {
521
- }
522
-
523
527
#if defined(TOOLCHAIN_ARM)
524
528
extern " C" int $Super$$main (void );
525
529
526
530
extern " C" int $Sub$$main (void ) {
527
- mbed_sdk_init ();
528
531
mbed_main ();
529
532
return $Super$$main ();
530
533
}
534
+
535
+ extern " C" void _platform_post_stackheap_init (void ) {
536
+ mbed_sdk_init ();
537
+ }
538
+
531
539
#elif defined(TOOLCHAIN_GCC)
532
540
extern " C" int __real_main (void );
533
541
534
542
extern " C" int __wrap_main (void ) {
535
- mbed_sdk_init ();
536
543
mbed_main ();
537
544
return __real_main ();
538
545
}
0 commit comments