diff --git a/components/freertos/FreeRTOS-Kernel-SMP/portable/xtensa/port.c b/components/freertos/FreeRTOS-Kernel-SMP/portable/xtensa/port.c index b8eefa5f08..2ed1e3f139 100644 --- a/components/freertos/FreeRTOS-Kernel-SMP/portable/xtensa/port.c +++ b/components/freertos/FreeRTOS-Kernel-SMP/portable/xtensa/port.c @@ -344,6 +344,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"); diff --git a/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c b/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c index b35b71ac12..2b5f5aadb0 100644 --- a/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c +++ b/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c @@ -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");