fix(system): fixed potential double exception when booting on xtensa

Due to old windows from the startup flow being present after
switching to running freertos tasks  windowoverflow exceptions
could potentially try to save windows to the startup stack.

During this overflow they also values previously saved on the
startup stack to find earlier frames' stacks.
Since the start up stack was already recycled these values were
invalid and would cause a crash.

Closes https://github.com/espressif/esp-idf/issues/14406Y
This commit is contained in:
Marius Vikhammer 2024-08-29 15:32:37 +08:00
parent 7e87254d3c
commit 4bf8d49159
2 changed files with 10 additions and 0 deletions

View File

@ -348,6 +348,11 @@ BaseType_t xPortStartScheduler( void )
}
#endif // configNUM_CORES > 1
// Windows contain references to the startup stack which will be reclaimed by the main task
// Spill the windows to create a clean environment to ensure we do not carry over any such references
// to invalid SPs which will cause problems if main_task does a windowoverflow to them
xthal_window_spill();
// Cannot be directly called from C; never returns
__asm__ volatile ("call0 _frxt_dispatch\n");

View File

@ -108,6 +108,11 @@ BaseType_t xPortStartScheduler( void )
port_xSchedulerRunning[xPortGetCoreID()] = 1;
// Windows contain references to the startup stack which will be reclaimed by the main task
// Spill the windows to create a clean environment to ensure we do not carry over any such references
// to invalid SPs which will cause problems if main_task does a windowoverflow to them
xthal_window_spill();
// Cannot be directly called from C; never returns
__asm__ volatile ("call0 _frxt_dispatch\n");