From c4e38581d3b4d6b19921f0db81f319d19ae4fb9e Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 23 Dec 2016 10:24:30 +0200 Subject: [PATCH] Avoid aborts due to unaligned byte stack of threads * src/thread.c (run_thread): Make sure the pointers to thread byte stack are properly aligned. (Bug#25247) --- src/thread.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/thread.c b/src/thread.c index 9613d1435f7..3f9595274e9 100644 --- a/src/thread.c +++ b/src/thread.c @@ -643,12 +643,19 @@ do_nothing (Lisp_Object whatever) static void * run_thread (void *state) { - char stack_pos; + /* Make sure stack_top and m_stack_bottom are properly aligned as GC + expects. */ + union + { + void *p; + char c; + } stack_pos; + struct thread_state *self = state; struct thread_state **iter; - self->m_stack_bottom = &stack_pos; - self->stack_top = &stack_pos; + self->m_stack_bottom = &stack_pos.c; + self->stack_top = &stack_pos.c; self->thread_id = sys_thread_self (); acquire_global_lock (self); -- 2.39.2