From abec255c024938a40fa3c9730f602c0351e5877d Mon Sep 17 00:00:00 2001 From: Andrea Corallo Date: Sun, 17 May 2020 13:23:59 +0100 Subject: * Fix Garbage Collector for missing calle-saved regs content (Bug#41357) * src/alloc.c (SET_STACK_TOP_ADDRESS): Do not call __builtin_unwind_init. (flush_stack_call_func1): Rename from 'flush_stack_call_func'. (flush_stack_call_func): New function to spill all registers before calling 'flush_stack_call_func1'. This to make sure the top of the stack identified includes those registers. --- src/alloc.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/alloc.c') diff --git a/src/alloc.c b/src/alloc.c index cc9ba8dbf50..ebc55857ea0 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -4944,12 +4944,10 @@ typedef union #ifdef HAVE___BUILTIN_UNWIND_INIT # define SET_STACK_TOP_ADDRESS(p) \ stacktop_sentry sentry; \ - __builtin_unwind_init (); \ *(p) = NEAR_STACK_TOP (&sentry) #else # define SET_STACK_TOP_ADDRESS(p) \ stacktop_sentry sentry; \ - __builtin_unwind_init (); \ test_setjmp (); \ sys_setjmp (sentry.j); \ *(p) = NEAR_STACK_TOP (&sentry + (stack_bottom < &sentry.c)) @@ -5025,7 +5023,7 @@ mark_stack (char const *bottom, char const *end) from FUNC. */ NO_INLINE void -flush_stack_call_func (void (*func) (void *arg), void *arg) +flush_stack_call_func1 (void (*func) (void *arg), void *arg) { void *end; struct thread_state *self = current_thread; -- cgit v1.2.1