File tree Expand file tree Collapse file tree 1 file changed +17
-8
lines changed
core/mbed-rtos/rtx/TARGET_CORTEX_M Expand file tree Collapse file tree 1 file changed +17
-8
lines changed Original file line number Diff line number Diff line change @@ -523,19 +523,27 @@ __asm void __rt_entry (void) {
523
523
524
524
#elif defined (__GNUC__ )
525
525
526
- __attribute__((naked )) void software_init_hook (void ) {
526
+ __attribute__((naked )) void pre_main (void ) {
527
527
__asm (
528
528
".syntax unified \n "
529
529
".thumb \n "
530
- "movs r0,#0\n"
531
- "movs r1,#0\n"
532
- "mov r4,r0\n"
533
- "mov r5,r1\n"
530
+ /* Save link register (keep 8 byte alignment with dummy r4) */
531
+ "push {r4, lr}\n"
534
532
"ldr r0,= __libc_fini_array\n"
535
533
"bl atexit\n"
536
534
"bl __libc_init_array\n"
537
- "mov r0,r4\n"
538
- "mov r1,r5\n"
535
+ /* Restore link register and branch so when main returns it
536
+ * goes to the thread destroy function.
537
+ */
538
+ "pop {r4, lr}\n"
539
+ "b main\n"
540
+ );
541
+ }
542
+
543
+ __attribute__((naked )) void software_init_hook (void ) {
544
+ __asm (
545
+ ".syntax unified\n"
546
+ ".thumb\n"
539
547
"bl osKernelInitialize\n"
540
548
#ifdef __MBED_CMSIS_RTOS_CM
541
549
"bl set_main_stack\n"
@@ -544,7 +552,8 @@ __attribute__((naked)) void software_init_hook (void) {
544
552
"movs r1,#0\n"
545
553
"bl osThreadCreate\n"
546
554
"bl osKernelStart\n"
547
- "bl exit\n"
555
+ /* osKernelStart should not return */
556
+ "B .\n"
548
557
);
549
558
}
550
559
You can’t perform that action at this time.
0 commit comments