diff --git a/os/ports/RVCT/ARMCMx/chcore_v6m.h b/os/ports/RVCT/ARMCMx/chcore_v6m.h index 970fc3b8d..9c5e35b33 100644 --- a/os/ports/RVCT/ARMCMx/chcore_v6m.h +++ b/os/ports/RVCT/ARMCMx/chcore_v6m.h @@ -208,7 +208,16 @@ struct intctx { * @param[in] ntp the thread to be switched in * @param[in] otp the thread to be switched out */ +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) #define port_switch(ntp, otp) _port_switch(ntp, otp) +#else +#define port_switch(ntp, otp) { \ + struct intctx *r13 = (struct intctx *)__current_sp(); \ + if ((void *)(r13 - 1) < (void *)(otp + 1)) \ + chDbgPanic("stack overflow"); \ + _port_switch(ntp, otp); \ +} +#endif #ifdef __cplusplus extern "C" { diff --git a/os/ports/RVCT/ARMCMx/chcore_v7m.h b/os/ports/RVCT/ARMCMx/chcore_v7m.h index 45f9843e3..3a4cbe381 100644 --- a/os/ports/RVCT/ARMCMx/chcore_v7m.h +++ b/os/ports/RVCT/ARMCMx/chcore_v7m.h @@ -234,7 +234,16 @@ struct intctx { * @param[in] ntp the thread to be switched in * @param[in] otp the thread to be switched out */ -#define port_switch(ntp, otp) _port_switch(ntp, otp) +#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXYGEN__) +#define port_switch(ntp, otp) _port_switch(ntp, otp) +#else +#define port_switch(ntp, otp) { \ + struct intctx *r13 = (struct intctx *)__current_sp(); \ + if ((void *)(r13 - 1) < (void *)(otp + 1)) \ + chDbgPanic("stack overflow"); \ + _port_switch(ntp, otp); \ +} +#endif #ifdef __cplusplus extern "C" { diff --git a/readme.txt b/readme.txt index e19d8f9d8..a2201e6ba 100644 --- a/readme.txt +++ b/readme.txt @@ -79,6 +79,8 @@ - FIX: Fixed wrong checks in I/O Queues (bug 3219197)(backported to 2.2.3). - FIX: Fixed invalid assertion in adcConvert() (bug 3205410)(backported to 2.2.3). +- NEW: Implemented stack checking in the Cortex-Mx RVCT port (backported + to 2.2.3). - NEW: Added support for PLL3 in STM32 HAL driver. Note, the format of the mcuconf.h file is changed for STM32F105/STM32F107 devices. - NEW: Added board files for the Olimex STM32-P107.