| .. _mpu_stack_guard_test: |
| |
| MPU Stack Guard Test |
| #################### |
| |
| Overview |
| ******** |
| |
| This is a simple application that demonstrates basic thread stack guarding on |
| the supported platforms. |
| A thread spawned by the main task recursively calls a function that fills the |
| thread stack up to where it overwrites a preposed canary. |
| If the MPU is enabled and the Stack Guard feature is present the test succeeds |
| because an MEM Faults exception prevents the canary from being overwritten. |
| If the MPU is disabled the test fails because the canary is overwritten. |
| |
| Building and Running |
| ******************** |
| |
| This project outputs to the console. |
| To build the test with the MPU disabled: |
| |
| .. code-block:: console |
| |
| $ cd samples/mpu_stack_guard_test |
| $ make |
| |
| To build the test with the MPU enabled and the stack guard feature present: |
| |
| .. code-block:: console |
| |
| $ cd samples/mpu_stack_guard_test |
| $ make CONF_FILE=prj_stack_guard.conf |
| |
| Sample Output |
| ============= |
| |
| With the MPU enabled but the stack guard feature disabled: |
| |
| .. code-block:: console |
| |
| ***** BOOTING ZEPHYR OS v1.8.99 - BUILD: Jun 15 2017 23:12:13 ***** |
| STACK_ALIGN 4 |
| MPU STACK GUARD Test |
| Canary Initial Value = 0xf0cacc1a threads 0x20000b9c |
| Canary = 0xfffffff5 Test not passed. |
| ***** MPU FAULT ***** |
| Executing thread ID (thread): 0x20000b9c |
| Faulting instruction address: 0x80025b0 |
| Data Access Violation |
| Address: 0x8000edb |
| Fatal fault in thread 0x20000b9c! Aborting. |
| ***** HARD FAULT ***** |
| Fault escalation (see below) |
| ***** MPU FAULT ***** |
| Executing thread ID (thread): 0x20000b9c |
| Faulting instruction address: 0x8001db6 |
| Data Access Violation |
| Address: 0x8000edb |
| Fatal fault in ISR! Spinning... |
| |
| With the MPU enabled and the stack guard feature enabled: |
| |
| .. code-block:: console |
| |
| ***** BOOTING ZEPHYR OS v1.8.99 - BUILD: Jun 15 2017 23:05:56 ***** |
| STACK_ALIGN 20 |
| MPU STACK GUARD Test |
| Canary Initial Value = 0xf0cacc1a threads 0x20000be0 |
| ***** MPU FAULT ***** |
| Executing thread ID (thread): 0x20000be0 |
| Faulting instruction address: 0x8001dc2 |
| Stacking error |
| Fatal fault in thread 0x20000be0! Aborting. |