From cdb961eac6c019750d97a588c4501bfce3774222 Mon Sep 17 00:00:00 2001 From: Yuval Peress Date: Tue, 9 Aug 2022 21:59:53 -0600 Subject: [PATCH] ztest: remove init_testing When KERNEL was not defined (unittest), the call to init_testing was used to set a longjump target using 'stack_fail'. When triggered, this was actually causing a segfault, because longjmp is only valid if going directly up the stack. Since init_testing returned, it was no longer on the stack. Instead, that logic MUST be inlined. Signed-off-by: Yuval Peress --- subsys/testsuite/ztest/src/ztest_new.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/subsys/testsuite/ztest/src/ztest_new.c b/subsys/testsuite/ztest/src/ztest_new.c index f36328cff40..2a59e5fa2e8 100644 --- a/subsys/testsuite/ztest/src/ztest_new.c +++ b/subsys/testsuite/ztest/src/ztest_new.c @@ -316,14 +316,6 @@ void ztest_test_pass(void) { longjmp(test_pass, 1); } void ztest_test_skip(void) { longjmp(test_skip, 1); } -static void init_testing(void) -{ - if (setjmp(stack_fail)) { - PRINT("TESTSUITE crashed."); - exit(1); - } -} - static int run_test(struct ztest_suite_node *suite, struct ztest_unit_test *test, void *data) { int ret = TC_PASS; @@ -425,11 +417,6 @@ void ztest_simple_1cpu_after(void *data) z_test_1cpu_stop(); } -static void init_testing(void) -{ - k_object_access_all_grant(&ztest_thread); -} - static void test_cb(void *a, void *b, void *c) { struct ztest_suite_node *suite = a; @@ -580,7 +567,16 @@ static int z_ztest_run_test_suite_ptr(struct ztest_suite_node *suite) return -1; } - init_testing(); +#ifndef KERNEL + if (setjmp(stack_fail)) { + PRINT("TESTSUITE crashed.\n"); + test_status = ZTEST_STATUS_CRITICAL_ERROR; + end_report(); + exit(1); + } +#else + k_object_access_all_grant(&ztest_thread); +#endif TC_SUITE_START(suite->name); test_result = ZTEST_RESULT_PENDING;