diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2017-02-09 17:20:51 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2017-02-09 17:20:51 +0000 |
commit | 36f2bd63d4ae9757e6ece2e1c3a25aa844926539 (patch) | |
tree | 178f80ff17adc0253aabd3b604c2d2831516ccd4 /test3.c | |
parent | 1f50c3f3294c6b67cf69cd71d919e58ed886ac41 (diff) |
test3: Update to use tapit output format and add to runtests
Update the test3 code to use tapit output format so we can add it
to the tests run by the runtests script.
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'test3.c')
-rw-r--r-- | test3.c | 89 |
1 files changed, 51 insertions, 38 deletions
@@ -1,25 +1,28 @@ /* Test exception escalation in armv7-m */ #include "armv7m.h" +#include "testme.h" static -volatile int test; +unsigned testseq; + +#define SEQ() __atomic_add_fetch(&testseq, 1, __ATOMIC_RELAXED) + +#define CHECK_SEQ(N) testEqI(N, SEQ(), "SEQ " #N) static void hard(void) { + int test = SEQ(); + switch(test) { - case 2: - puts("8. in HardFault\n"); - break; - case 3: - puts("11. in HardFault\n"); - break; - case 5: - puts("17. in HardFault\n"); + case 8: + case 11: + case 17: + testPass("in HardFault"); break; default: - puts("Fail HardFault\n"); + testFail("Fail HardFault"); abort(); } } @@ -27,15 +30,15 @@ void hard(void) static void svc(void) { + int test = SEQ(); + switch(test) { - case 0: - puts("2. in SVC\n"); - break; - case 4: - puts("14. in SVC\n"); + case 2: + case 14: + testPass("in SVC"); break; default: - puts("Fail SVC\n"); + testFail("Fail SVC"); abort(); } } @@ -43,12 +46,14 @@ void svc(void) static __attribute__((unused)) void pendsv(void) { + int test = SEQ(); + switch(test) { - case 1: - puts("5. in PendSV\n"); + case 5: + testPass("in PendSV"); break; default: - puts("Fail PendSV\n"); + testFail("Fail PendSV"); abort(); } } @@ -59,48 +64,56 @@ void main(void) run_table.pendsv = pendsv; run_table.svc = svc; + testInit(12); + out32(SCB(0xd0c), 0x05fa0000 | (PRIGROUP<<8)); - test = 0; CPSIE(if); - puts("1. trigger SVC\n"); + SEQ(); + testDiag("trigger SVC"); SVC(42); - puts("3. Back in main\n"); + testDiag("Back in main"); + CHECK_SEQ(3); - test = 1; - puts("4. trigger PendSV\n"); + testDiag("trigger PendSV"); + SEQ(); out32((void*)0xe000ed04, 1<<28); - puts("6. Back in main\n"); + testDiag("Back in main"); + CHECK_SEQ(6); - test = 2; - puts("7. trigger HardFault\n"); + testDiag("trigger HardFault via SVC escalating to HF due to PRIMASK"); + SEQ(); CPSID(i); /* mask prio lower than -1 [0,255] */ SVC(42); - puts("9. Back in main\n"); + testDiag("Back in main"); + CHECK_SEQ(9); - test = 3; CPSIE(i); basepri(1); out32(SCB(0xd1c), PRIO(7,0)<<24); /* PRIO SVC */ //out32(SCB(0xd1c), 1<<21); /* PRIO PendSV */ - puts("10. trigger HardFault\n"); + testDiag("trigger HardFault via SVC escalating to HF due to priority"); + SEQ(); SVC(42); - puts("12. Back in main\n"); + testDiag("Back in main"); + CHECK_SEQ(12); - test = 4; out32(SCB(0xd1c), PRIO(0,0)<<24); /* PRIO SVC */ - puts("13. trigger SVC\n"); + testDiag("trigger SVC"); + SEQ(); SVC(42); - puts("15. Back in main\n"); + testDiag("Back in main"); + CHECK_SEQ(15); - test = 5; out32(SCB(0xd1c), PRIO(2,0)<<24); /* PRIO SVC */ basepri(2); - puts("16. trigger HardFault\n"); + testDiag("trigger HardFault via SVC escalating to HF due to BASEPRI"); + SEQ(); SVC(42); - puts("18. Back in main\n"); + testDiag("Back in main"); + CHECK_SEQ(18); - puts("Done\n"); + testDiag("Done"); } |