diff --git a/arch/Kconfig b/arch/Kconfig index c93fb026331..0022620cd56 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -136,6 +136,7 @@ config XTENSA select ARCH_MEM_DOMAIN_DATA if USERSPACE select ARCH_HAS_DIRECTED_IPIS select THREAD_STACK_INFO + select ARCH_HAS_THREAD_PRIV_STACK_SPACE_GET if USERSPACE help Xtensa architecture diff --git a/arch/xtensa/core/thread.c b/arch/xtensa/core/thread.c index b000f36a779..f59c8274994 100644 --- a/arch/xtensa/core/thread.c +++ b/arch/xtensa/core/thread.c @@ -4,6 +4,7 @@ * SPDX-License-Identifier: Apache-2.0 */ +#include #include #include @@ -170,4 +171,20 @@ FUNC_NORETURN void arch_user_mode_enter(k_thread_entry_t user_entry, CODE_UNREACHABLE; } + +int arch_thread_priv_stack_space_get(const struct k_thread *thread, size_t *stack_size, + size_t *unused_ptr) +{ + struct xtensa_thread_stack_header *hdr_stack_obj; + + if ((thread->base.user_options & K_USER) != K_USER) { + return -EINVAL; + } + + hdr_stack_obj = (struct xtensa_thread_stack_header *)thread->stack_obj; + + return z_stack_space_get(&hdr_stack_obj->privilege_stack[0], + sizeof(hdr_stack_obj->privilege_stack), + unused_ptr); +} #endif /* CONFIG_USERSPACE */