emacs-diffs
[Top][All Lists]
Advanced

[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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]