blob: cd55c65361869257c5ab3f4fed2e91bce2f5bbb6 [file] [log] [blame]
/*
* Copyright (c) 2019 Nordic Semiconductor ASA.
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/ztest.h>
#include <zephyr/linker/linker-defs.h>
#include <zephyr/internal/syscall_handler.h>
static volatile int test_flag;
__ramfunc static void ram_function(void)
{
test_flag = 1;
}
ZTEST(ramfunc, test_ramfunc)
{
int init_flag, post_flag;
init_flag = test_flag;
zassert_true(init_flag == 0, "Test flag not initialized to zero");
/* Verify that the .ramfunc section is not empty, it is located
* inside SRAM, and that ram_function(.) is located inside
* the .ramfunc section.
*/
zassert_true((uint32_t)&__ramfunc_size != 0,
".ramfunc linker section is empty");
zassert_true(((uint32_t)&__ramfunc_start >= (uint32_t)&_image_ram_start)
&& ((uint32_t)&__ramfunc_end < (uint32_t)&_image_ram_end),
".ramfunc linker section not in RAM");
zassert_true(
(((uint32_t)&__ramfunc_start) <= (uint32_t)ram_function) &&
(((uint32_t)&__ramfunc_end) > (uint32_t)ram_function),
"ram_function not loaded into .ramfunc");
/* If we build with User Mode support, verify that the
* ram_function(.) is user (read) accessible.
*/
#if defined(CONFIG_USERSPACE)
zassert_true(arch_buffer_validate((void *)&__ramfunc_start,
(size_t)&__ramfunc_size, 0) == 0 /* Success */,
".ramfunc section not user accessible");
#endif /* CONFIG_USERSPACE */
/* Execute the function from SRAM. */
ram_function();
/* Verify that the function is executed successfully. */
post_flag = test_flag;
zassert_true(post_flag == 1,
"ram_function() execution failed.");
}
/**
* @}
*/