summaryrefslogtreecommitdiff
path: root/cts
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2016-11-10 14:21:38 -0800
committerchrome-bot <chrome-bot@chromium.org>2017-06-23 00:51:18 -0700
commit60800678ca1a7454a20ae2c270a4ea0bda34b9c0 (patch)
tree2caad6871cc5bec0decf5eb2e6e2f1dfd92272c4 /cts
parent9e32694d1051ef0eb3b091e1b03563cfd538b1d7 (diff)
downloadchrome-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>
Diffstat (limited to 'cts')
-rw-r--r--cts/task/cts.testlist9
-rw-r--r--cts/task/dut.c19
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;