diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2016-11-10 14:21:38 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-06-23 00:51:18 -0700 |
commit | 60800678ca1a7454a20ae2c270a4ea0bda34b9c0 (patch) | |
tree | 2caad6871cc5bec0decf5eb2e6e2f1dfd92272c4 | |
parent | 9e32694d1051ef0eb3b091e1b03563cfd538b1d7 (diff) | |
download | chrome-ec-60800678ca1a7454a20ae2c270a4ea0bda34b9c0.tar.gz |
eCTS: Add stack overflow test
This patch adds a test for stack overflow detection. CTS task tries
to overflow by calling a function recursively. This function sleeps
to incur context switch, where stack overflow is checked. Reboot is
expected but not checked.
BUG=chromium:663873
BRANCH=none
TEST=cts.py -m task
Change-Id: I6ad98d209acf873d2d23b48bac6fc751fa8c2f74
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/410283
Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r-- | cts/task/cts.testlist | 9 | ||||
-rw-r--r-- | cts/task/dut.c | 19 |
2 files changed, 27 insertions, 1 deletions
diff --git a/cts/task/cts.testlist b/cts/task/cts.testlist index 7c8c5757df..25dbcc313a 100644 --- a/cts/task/cts.testlist +++ b/cts/task/cts.testlist @@ -16,4 +16,11 @@ CTS_TEST(test_task_switch) * has a higher priority, C should run first. This should result in C running * one more time than A (or B). */ -CTS_TEST(test_task_priority)
\ No newline at end of file +CTS_TEST(test_task_priority) + +/* + * Test stack overflow. CTS task overflows the stack and it should be detected + * when task switch happens. Reboot is expected. + * TODO: Verify stack overflow detection and reboot. + */ +CTS_TEST(test_stack_overflow)
\ No newline at end of file diff --git a/cts/task/dut.c b/cts/task/dut.c index ff1407a00b..e34dd0babb 100644 --- a/cts/task/dut.c +++ b/cts/task/dut.c @@ -117,8 +117,27 @@ enum cts_rc test_task_priority(void) return CTS_RC_SUCCESS; } +static void recurse(int x) +{ + CPRINTS("+%d", x); + msleep(1); + recurse(x + 1); + CPRINTS("-%d", x); +} + +enum cts_rc test_stack_overflow(void); + #include "cts_testlist.h" +enum cts_rc test_stack_overflow(void) +{ + /* recurse() is expected to overflow the stack, which leads to reboot. + * So, we print output proactively. */ + CPRINTF("\n%s %d\n", tests[CTS_TEST_ID_COUNT - 1].name, CTS_RC_SUCCESS); + recurse(0); + return CTS_RC_FAILURE; +} + void cts_task(void) { enum cts_rc rc; |