diff --git a/arch/xtensa/core/coredump.c b/arch/xtensa/core/coredump.c index 0ee1f8992a6b702..8e4b08ee2fa0472 100644 --- a/arch/xtensa/core/coredump.c +++ b/arch/xtensa/core/coredump.c @@ -5,6 +5,7 @@ */ #include +#include #include #include #include @@ -189,3 +190,18 @@ uint16_t arch_coredump_tgt_code_get(void) { return COREDUMP_TGT_XTENSA; } + +#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK) +void arch_coredump_priv_stack_dump(struct k_thread *thread) +{ + struct xtensa_thread_stack_header *hdr_stack_obj; + uintptr_t start_addr, end_addr; + + hdr_stack_obj = (struct xtensa_thread_stack_header *)thread->stack_obj; + + start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0]; + end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack); + + coredump_memory_dump(start_addr, end_addr); +} +#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */ diff --git a/boards/qemu/xtensa/Kconfig b/boards/qemu/xtensa/Kconfig index 8cdc6ec28ff21e0..509b061a97c867b 100644 --- a/boards/qemu/xtensa/Kconfig +++ b/boards/qemu/xtensa/Kconfig @@ -6,4 +6,5 @@ config BOARD_QEMU_XTENSA select QEMU_TARGET select ARCH_SUPPORTS_COREDUMP + select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS select XTENSA_MMU if BOARD_QEMU_XTENSA_DC233C_MMU