blob: b400419ad44b70cd3a2f77a85bc6927e7ebecfdf [file] [log] [blame]
/*
* Copyright (c) 2017, 2020 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/zephyr.h>
#include <zephyr/ztest.h>
#include <zephyr/kernel_structs.h>
#include <string.h>
#include <stdlib.h>
extern void test_permission_inheritance(void);
extern void test_inherit_resource_pool(void);
extern void test_mem_domain_setup(void);
extern void test_mem_domain_valid_access(void);
extern void test_mem_domain_invalid_access(void);
extern void test_mem_domain_no_writes_to_ro(void);
extern void test_mem_domain_remove_add_partition(void);
extern void test_mem_domain_api_supervisor_only(void);
extern void test_mem_domain_boot_threads(void);
extern void test_mem_domain_migration(void);
extern void test_mem_domain_init_fail(void);
extern void test_mem_domain_remove_part_fail(void);
extern void test_mem_part_add_error_null(void);
extern void test_mem_part_add_error_zerosize(void);
extern void test_mem_part_error_wraparound(void);
extern void test_mem_part_remove_error_zerosize(void);
extern void test_macros_obtain_names_data_bss(void);
extern void test_mem_part_assign_bss_vars_zero(void);
extern void test_mem_part_auto_determ_size(void);
extern void test_kobject_access_grant(void);
extern void test_syscall_invalid_kobject(void);
extern void test_thread_without_kobject_permission(void);
extern void test_kobject_revoke_access(void);
extern void test_kobject_grant_access_kobj(void);
extern void test_kobject_grant_access_kobj_invalid(void);
extern void test_kobject_release_from_user(void);
extern void test_kobject_access_all_grant(void);
extern void test_thread_has_residual_permissions(void);
extern void test_kobject_access_grant_to_invalid_thread(void);
extern void test_kobject_access_invalid_kobject(void);
extern void test_access_kobject_without_init_access(void);
extern void test_access_kobject_without_init_with_access(void);
extern void test_kobject_reinitialize_thread_kobj(void);
extern void test_create_new_thread_from_user(void);
extern void test_new_user_thread_with_in_use_stack_obj(void);
extern void test_create_new_thread_from_user_no_access_stack(void);
extern void test_create_new_thread_from_user_invalid_stacksize(void);
extern void test_create_new_thread_from_user_huge_stacksize(void);
extern void test_create_new_supervisor_thread_from_user(void);
extern void test_create_new_essential_thread_from_user(void);
extern void test_create_new_higher_prio_thread_from_user(void);
extern void test_create_new_invalid_prio_thread_from_user(void);
extern void test_mark_thread_exit_uninitialized(void);
extern void test_krnl_obj_static_alloc_build_time(void);
extern void test_mem_part_overlap(void);
extern void test_mem_part_assert_add_overmax(void);
extern void test_kobject_access_grant_error(void);
extern void test_kobject_access_grant_error_user(void);
extern void test_kobject_access_grant_error_user_null(void);
extern void test_kobject_access_all_grant_error(void);
extern void test_kobject_invalid(void);
extern void test_kobject_free_error(void);
extern void test_kobject_init_error(void);
extern void test_kobj_create_out_of_memory(void);
extern void test_thread_alloc_out_of_idx(void);
extern void test_alloc_kobjects(void);
extern void test_kobject_perm_error(void);
extern void test_all_kobjects_str(void);
/* Flag needed to figure out if the fault was expected or not. */
extern volatile bool valid_fault;
static inline void set_fault_valid(bool valid)
{
valid_fault = valid;
/* Put a barrier here, such that no instructions get ordered by the
* compiler before we set valid_fault. This can happen with expansion
* of inline syscall invocation functions.
*/
compiler_barrier();
}
/* For inherit.c */
#define INHERIT_STACK_SIZE CONFIG_MAIN_STACK_SIZE
#define SEMAPHORE_MAX_COUNT (10)
#define SEMAPHORE_INIT_COUNT (0)
#define SYNC_SEM_MAX_COUNT (1)
#define SYNC_SEM_INIT_COUNT (0)
#define MSG_Q_SIZE (10)
#define MSG_Q_MAX_NUM_MSGS (10)
#define MSG_Q_ALIGN (2)
#define PRIORITY 5
#define STACK_SIZE (512 + CONFIG_TEST_EXTRA_STACK_SIZE)
#define BLK_SIZE_MIN 16
#define BLK_SIZE_MAX 64
#define BLK_NUM_MIN 8
#define BLK_NUM_MAX 2
#define BLK_ALIGN BLK_SIZE_MIN
#define SEM_INIT_VAL (0U)
#define SEM_MAX_VAL (1U)
/* For mem_domain.c */
#define MEM_DOMAIN_STACK_SIZE CONFIG_MAIN_STACK_SIZE
#define MEM_PARTITION_INIT_NUM (1)
#define BLK_SIZE_MIN_MD 8
#define BLK_SIZE_MAX_MD 16
#define BLK_NUM_MAX_MD 4
#define BLK_ALIGN_MD BLK_SIZE_MIN_MD
#define DESC_SIZE sizeof(struct sys_mem_pool_block)
#define STACK_SIZE_MD (512 + CONFIG_TEST_EXTRA_STACK_SIZE)
#define PRIORITY_MD 5
#if defined(CONFIG_X86)
#define MEM_REGION_ALLOC (4096)
#elif defined(CONFIG_ARC)
#define MEM_REGION_ALLOC (Z_ARC_MPU_ALIGN)
#elif defined(CONFIG_ARM64)
#define MEM_REGION_ALLOC (4096)
#elif defined(CONFIG_ARM)
#define MEM_REGION_ALLOC (Z_THREAD_MIN_STACK_ALIGN)
#elif defined(CONFIG_RISCV)
#define MEM_REGION_ALLOC (4)
#else
#error "Test suite not compatible for the given architecture"
#endif
#define MEM_DOMAIN_ALIGNMENT __aligned(MEM_REGION_ALLOC)
/* for kobject.c */
#define KOBJECT_STACK_SIZE (512 + CONFIG_TEST_EXTRA_STACK_SIZE)
#if (defined(CONFIG_X86_64) || defined(CONFIG_ARM64) || \
(defined(CONFIG_RISCV) && defined(CONFIG_64BIT)))
#define TEST_HEAP_SIZE (2 << CONFIG_MAX_THREAD_BYTES) * 1024
#define MAX_OBJ 512
#else
#define TEST_HEAP_SIZE (2 << CONFIG_MAX_THREAD_BYTES) * 256
#define MAX_OBJ 256
#endif
#ifndef _TEST_SYSCALLS_H_
#define _TEST_SYSCALLS_H_
__syscall struct k_heap *ret_resource_pool_ptr(void);
#include <syscalls/mem_protect.h>
#endif /* _TEST_SYSCALLS_H_ */