7#ifndef ZEPHYR_INCLUDE_ARCH_ARM64_THREAD_STACK_H_
8#define ZEPHYR_INCLUDE_ARCH_ARM64_THREAD_STACK_H_
13#define ARCH_STACK_PTR_ALIGN 16
15#if defined(CONFIG_USERSPACE) || defined(CONFIG_ARM64_STACK_PROTECTION)
16#define Z_ARM64_STACK_BASE_ALIGN MEM_DOMAIN_ALIGN_AND_SIZE
17#define Z_ARM64_STACK_SIZE_ALIGN MEM_DOMAIN_ALIGN_AND_SIZE
19#define Z_ARM64_STACK_BASE_ALIGN ARCH_STACK_PTR_ALIGN
20#define Z_ARM64_STACK_SIZE_ALIGN ARCH_STACK_PTR_ALIGN
23#if defined(CONFIG_ARM64_STACK_PROTECTION)
24#define Z_ARM64_STACK_GUARD_SIZE MEM_DOMAIN_ALIGN_AND_SIZE
25#define Z_ARM64_K_STACK_BASE_ALIGN MEM_DOMAIN_ALIGN_AND_SIZE
27#define Z_ARM64_STACK_GUARD_SIZE 0
28#if defined(CONFIG_SMP)
30#define Z_ARM64_K_STACK_BASE_ALIGN L1_CACHE_BYTES
32#define Z_ARM64_K_STACK_BASE_ALIGN ARCH_STACK_PTR_ALIGN
61#define ARCH_THREAD_STACK_OBJ_ALIGN(size) Z_ARM64_STACK_BASE_ALIGN
62#define ARCH_THREAD_STACK_SIZE_ADJUST(size) \
63 ROUND_UP((size), Z_ARM64_STACK_SIZE_ALIGN)
64#define ARCH_THREAD_STACK_RESERVED \
65 ROUND_UP(CONFIG_PRIVILEGED_STACK_SIZE + Z_ARM64_STACK_GUARD_SIZE, \
66 Z_ARM64_STACK_SIZE_ALIGN)
69#define ARCH_KERNEL_STACK_RESERVED Z_ARM64_STACK_GUARD_SIZE
70#define ARCH_KERNEL_STACK_OBJ_ALIGN Z_ARM64_K_STACK_BASE_ALIGN
74struct z_arm64_thread_stack_header {
75 char privilege_stack[CONFIG_PRIVILEGED_STACK_SIZE];
76} __packed __aligned(Z_ARM64_STACK_BASE_ALIGN);