diff --git a/tests/arch/riscv/pmp/no-multithreading/CMakeLists.txt b/tests/arch/riscv/pmp/isr-stack-guard/CMakeLists.txt similarity index 100% rename from tests/arch/riscv/pmp/no-multithreading/CMakeLists.txt rename to tests/arch/riscv/pmp/isr-stack-guard/CMakeLists.txt diff --git a/tests/arch/riscv/pmp/isr-stack-guard/prj.conf b/tests/arch/riscv/pmp/isr-stack-guard/prj.conf new file mode 100644 index 0000000000000..9467c2926896d --- /dev/null +++ b/tests/arch/riscv/pmp/isr-stack-guard/prj.conf @@ -0,0 +1 @@ +CONFIG_ZTEST=y diff --git a/tests/arch/riscv/pmp/no-multithreading/src/main.c b/tests/arch/riscv/pmp/isr-stack-guard/src/main.c similarity index 69% rename from tests/arch/riscv/pmp/no-multithreading/src/main.c rename to tests/arch/riscv/pmp/isr-stack-guard/src/main.c index 26ded61165f7a..689f1764190c2 100644 --- a/tests/arch/riscv/pmp/no-multithreading/src/main.c +++ b/tests/arch/riscv/pmp/isr-stack-guard/src/main.c @@ -24,6 +24,30 @@ void k_sys_fatal_error_handler(unsigned int reason, const struct arch_esf *pEsf) } #ifdef CONFIG_PMP_STACK_GUARD + +#ifdef CONFIG_MULTITHREADING + +static void check_isr_stack_guard(void) +{ + char *isr_stack = (char *)z_interrupt_stacks[_current_cpu->id]; + + valid_fault = true; + *isr_stack = 42; +} + +static void check_main_stack_guard(void) +{ + struct k_thread *current_thread_ptr = k_current_get(); + uintptr_t stack_bottom = current_thread_ptr->stack_info.start - K_KERNEL_STACK_RESERVED; + + char *main_stack = (char *)stack_bottom; + + valid_fault = true; + *main_stack = 42; +} + +#else /* CONFIG_MULTITHREADING */ + static void check_isr_stack_guard(void) { char *isr_stack = (char *)z_interrupt_stacks; @@ -40,7 +64,9 @@ static void check_main_stack_guard(void) *main_stack = 42; } -#else +#endif /* CONFIG_MULTITHREADING */ + +#else /* CONFIG_PMP_STACK_GUARD */ static void check_isr_stack_guard(void) { @@ -65,7 +91,7 @@ static const pmp_test_func_t pmp_test_func[] = { * @brief Verify RISC-V specific PMP stack guard regions. * @details Manually write to the protected stack region to trigger fatal error. */ -ZTEST(riscv_pmp_no_mt, test_pmp) +ZTEST(riscv_pmp_isr_main_stack, test_pmp) { #ifndef PMP_TEST_FUNC_IDX #define PMP_TEST_FUNC_IDX 0 @@ -76,4 +102,4 @@ ZTEST(riscv_pmp_no_mt, test_pmp) TC_END_REPORT(TC_FAIL); } -ZTEST_SUITE(riscv_pmp_no_mt, NULL, NULL, NULL, NULL, NULL); +ZTEST_SUITE(riscv_pmp_isr_main_stack, NULL, NULL, NULL, NULL, NULL); diff --git a/tests/arch/riscv/pmp/isr-stack-guard/testcase.yaml b/tests/arch/riscv/pmp/isr-stack-guard/testcase.yaml new file mode 100644 index 0000000000000..de2f8b8363486 --- /dev/null +++ b/tests/arch/riscv/pmp/isr-stack-guard/testcase.yaml @@ -0,0 +1,25 @@ +common: + platform_allow: + - qemu_riscv32 + - qemu_riscv32e + - qemu_riscv64 + filter: CONFIG_RISCV_PMP + ignore_faults: true + +tests: + arch.riscv.pmp.no-mt.isr-stack-guard: + extra_args: EXTRA_CFLAGS=-DPMP_TEST_FUNC_IDX=0 + extra_configs: + - CONFIG_MULTITHREADING=n + arch.riscv.pmp.no-mt.main-stack-guard: + extra_args: EXTRA_CFLAGS=-DPMP_TEST_FUNC_IDX=1 + extra_configs: + - CONFIG_MULTITHREADING=n + arch.riscv.pmp.mt.isr-stack-guard: + extra_args: EXTRA_CFLAGS=-DPMP_TEST_FUNC_IDX=0 + extra_configs: + - CONFIG_MULTITHREADING=y + arch.riscv.pmp.mt.main-stack-guard: + extra_args: EXTRA_CFLAGS=-DPMP_TEST_FUNC_IDX=1 + extra_configs: + - CONFIG_MULTITHREADING=y diff --git a/tests/arch/riscv/pmp/no-multithreading/prj.conf b/tests/arch/riscv/pmp/no-multithreading/prj.conf deleted file mode 100644 index 7414c11237a8a..0000000000000 --- a/tests/arch/riscv/pmp/no-multithreading/prj.conf +++ /dev/null @@ -1,2 +0,0 @@ -CONFIG_ZTEST=y -CONFIG_MULTITHREADING=n diff --git a/tests/arch/riscv/pmp/no-multithreading/testcase.yaml b/tests/arch/riscv/pmp/no-multithreading/testcase.yaml deleted file mode 100644 index d8f887fa34121..0000000000000 --- a/tests/arch/riscv/pmp/no-multithreading/testcase.yaml +++ /dev/null @@ -1,13 +0,0 @@ -common: - platform_allow: - - qemu_riscv32 - - qemu_riscv32e - - qemu_riscv64 - filter: CONFIG_RISCV_PMP - ignore_faults: true - -tests: - arch.riscv.pmp.no-mt.isr-stack-guard: - extra_args: EXTRA_CFLAGS=-DPMP_TEST_FUNC_IDX=0 - arch.riscv.pmp.no-mt.main-stack-guard: - extra_args: EXTRA_CFLAGS=-DPMP_TEST_FUNC_IDX=1