diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2011-03-19 18:19:39 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2011-03-19 18:19:39 +0000 |
commit | 9d812b5db3c21ff09e30a115c7643f7fec5492a3 (patch) | |
tree | b669498cee843fc6130b3530a145a73c1e2c70a0 | |
parent | 84cc66dce9b5c8d0cfee1dcb5126f66a60c3f226 (diff) | |
download | ChibiOS-9d812b5db3c21ff09e30a115c7643f7fec5492a3.tar.gz ChibiOS-9d812b5db3c21ff09e30a115c7643f7fec5492a3.tar.bz2 ChibiOS-9d812b5db3c21ff09e30a115c7643f7fec5492a3.zip |
Added stack checking to the RVCT Cortex-Mx port.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2835 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r-- | os/ports/RVCT/ARMCMx/chcore_v6m.h | 9 | ||||
-rw-r--r-- | os/ports/RVCT/ARMCMx/chcore_v7m.h | 11 | ||||
-rw-r--r-- | readme.txt | 2 |
3 files changed, 21 insertions, 1 deletions
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.
|