[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master abec255: * Fix Garbage Collector for missing calle-saved regs con
From: |
Andrea Corallo |
Subject: |
master abec255: * Fix Garbage Collector for missing calle-saved regs content (Bug#41357) |
Date: |
Sun, 17 May 2020 17:43:13 -0400 (EDT) |
branch: master
commit abec255c024938a40fa3c9730f602c0351e5877d
Author: Andrea Corallo <address@hidden>
Commit: Andrea Corallo <address@hidden>
* 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 +---
src/lisp.h | 10 +++++++++-
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/src/alloc.c b/src/alloc.c
index cc9ba8d..ebc5585 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;
diff --git a/src/lisp.h b/src/lisp.h
index a55fa32..ad7d67a 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3811,7 +3811,15 @@ extern void alloc_unexec_pre (void);
extern void alloc_unexec_post (void);
extern void mark_maybe_objects (Lisp_Object const *, ptrdiff_t);
extern void mark_stack (char const *, char const *);
-extern void flush_stack_call_func (void (*func) (void *arg), void *arg);
+extern void flush_stack_call_func1 (void (*func) (void *arg), void *arg);
+
+INLINE void
+flush_stack_call_func (void (*func) (void *arg), void *arg)
+{
+ __builtin_unwind_init ();
+ flush_stack_call_func1 (func, arg);
+}
+
extern void garbage_collect (void);
extern void maybe_garbage_collect (void);
extern const char *pending_malloc_warning;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master abec255: * Fix Garbage Collector for missing calle-saved regs content (Bug#41357),
Andrea Corallo <=