| Title: Test suite to verify the thread-swap (context-switch) and system-calls |
| mechanisms (ARM Only) |
| |
| Description: |
| |
| Thread-swap test: |
| |
| This test verifies that the ARM thread context-switch mechanism |
| behaves as expected. In particular, the test verifies that: |
| - the callee-saved registers are saved and restored, properly, |
| at thread swap-out and swap-in, respectively |
| - the floating-point callee-saved registers are saved and |
| restored, properly, at thread swap-out and swap-in, respectively, |
| when the thread is using the floating-point registers |
| - the thread execution priority (BASEPRI) is saved and restored, |
| properly, at thread context-switch |
| - the swap return value can be set and will be return, properly, |
| at thread swap-in |
| - the mode variable (when building with support for either user |
| space or FP shared registers) is saved and restored properly. |
| - the CPU registers are scrubbed after system call |
| |
| Notes: |
| The test verifies the correct behavior of the thread context-switch, |
| when it is triggered indirectly (by setting the PendSV interrupt |
| to pending state), as well as when the thread itself triggers its |
| swap-out (by calling arch_swap(.)). |
| |
| The test is currently supported in ARM Cortex-M Baseline and Mainline |
| targets. |
| |
| Syscalls test: |
| |
| This test verifies that the ARM mechanism for user system calls |
| behaves as expected. In particular, the test verifies that: |
| - the mode variable with respect to the user mode flag always indicates |
| the mode in which a user thread is currently executing. |
| - threads in system calls are using the privileged thread stack |
| - stack pointer limit checking mechanism behaves as expected for |
| user threads in PRIV mode and supervisor threads |
| |
| The test is currently supported in ARM Cortex-M Baseline and Mainline |
| targets with support for user space. |
| |
| --------------------------------------------------------------------------- |
| |
| Building and Running Project: |
| |
| This project outputs to the console. It can be built and executed on QEMU as |
| follows: |
| |
| ninja/make run |
| |
| --------------------------------------------------------------------------- |
| |
| Troubleshooting: |
| |
| Problems caused by out-dated project information can be addressed by |
| issuing one of the following commands then rebuilding the project: |
| |
| ninja/make clean # discard results of previous builds |
| # but keep existing configuration info |
| or |
| ninja/make pristine # discard results of previous builds |
| # and restore pre-defined configuration info |
| |
| --------------------------------------------------------------------------- |
| |
| Sample Output: |
| |
| ***** Booting Zephyr OS build zephyr-v1.14.0-1726-gb95a71960622 ***** |
| Running test suite arm_thread_swap |
| =================================================================== |
| starting test - test_arm_thread_swap |
| PASS - test_arm_thread_swap |
| =================================================================== |
| Test suite arm_thread_swap succeeded |
| Running test suite arm_syscalls |
| =================================================================== |
| starting test - test_arm_syscalls |
| Available IRQ line: 68 |
| USR Thread: IRQ Line: 68 |
| PASS - test_arm_syscalls |
| =================================================================== |
| Test suite arm_syscalls succeeded |
| =================================================================== |
| PROJECT EXECUTION SUCCESSFUL |