Skip to content

Commit a3f4251

Browse files
dcpleunghenrikbrixandersen
authored andcommitted
x86: coredump: support dumping privilege stack
Adds the bits to support dumping privilege stack during coredump. Signed-off-by: Daniel Leung <[email protected]>
1 parent 71bea33 commit a3f4251

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

arch/Kconfig

+1
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ config X86
8383
select ARCH_IS_SET
8484
select ATOMIC_OPERATIONS_BUILTIN
8585
select ARCH_SUPPORTS_COREDUMP
86+
select ARCH_SUPPORTS_COREDUMP_PRIV_STACKS
8687
select ARCH_SUPPORTS_ROM_START if !X86_64
8788
select CPU_HAS_MMU
8889
select ARCH_MEM_DOMAIN_DATA if USERSPACE && !X86_COMMON_PAGE_TABLE

arch/x86/core/ia32/coredump.c

+20
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
#include <string.h>
8+
#include <zephyr/kernel.h>
89
#include <zephyr/debug/coredump.h>
910

1011
#define ARCH_HDR_VER 1
@@ -80,3 +81,22 @@ uint16_t arch_coredump_tgt_code_get(void)
8081
{
8182
return COREDUMP_TGT_X86;
8283
}
84+
85+
#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
86+
void arch_coredump_priv_stack_dump(struct k_thread *thread)
87+
{
88+
struct z_x86_thread_stack_header *hdr_stack_obj;
89+
uintptr_t start_addr, end_addr;
90+
91+
#if defined(CONFIG_THREAD_STACK_MEM_MAPPED)
92+
hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_info.mapped.addr;
93+
#else
94+
hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_obj;
95+
#endif /* CONFIG_THREAD_STACK_MEM_MAPPED) */
96+
97+
start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
98+
end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
99+
100+
coredump_memory_dump(start_addr, end_addr);
101+
}
102+
#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */

arch/x86/core/intel64/coredump.c

+20
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
*/
66

77
#include <string.h>
8+
#include <zephyr/kernel.h>
89
#include <zephyr/debug/coredump.h>
910

1011
#define ARCH_HDR_VER 1
@@ -106,3 +107,22 @@ uint16_t arch_coredump_tgt_code_get(void)
106107
{
107108
return COREDUMP_TGT_X86_64;
108109
}
110+
111+
#if defined(CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK)
112+
void arch_coredump_priv_stack_dump(struct k_thread *thread)
113+
{
114+
struct z_x86_thread_stack_header *hdr_stack_obj;
115+
uintptr_t start_addr, end_addr;
116+
117+
#if defined(CONFIG_THREAD_STACK_MEM_MAPPED)
118+
hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_info.mapped.addr;
119+
#else
120+
hdr_stack_obj = (struct z_x86_thread_stack_header *)thread->stack_obj;
121+
#endif /* CONFIG_THREAD_STACK_MEM_MAPPED) */
122+
123+
start_addr = (uintptr_t)&hdr_stack_obj->privilege_stack[0];
124+
end_addr = start_addr + sizeof(hdr_stack_obj->privilege_stack);
125+
126+
coredump_memory_dump(start_addr, end_addr);
127+
}
128+
#endif /* CONFIG_DEBUG_COREDUMP_DUMP_THREAD_PRIV_STACK */

0 commit comments

Comments
 (0)