mirror of
https://github.com/espressif/esp-idf
synced 2025-03-09 17:19:09 -04:00
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:
parent
7e87254d3c
commit
4bf8d49159
@ -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");
|
||||
|
||||
|
@ -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");
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user