[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 88b4516: Port to Oracle Studio 12.6 (sparc)
From: |
Paul Eggert |
Subject: |
master 88b4516: Port to Oracle Studio 12.6 (sparc) |
Date: |
Thu, 30 Jul 2020 12:23:57 -0400 (EDT) |
branch: master
commit 88b4516cf8c3ff39803430452b8adbb86a73642a
Author: Paul Eggert <eggert@cs.ucla.edu>
Commit: Paul Eggert <eggert@cs.ucla.edu>
Port to Oracle Studio 12.6 (sparc)
* src/alloc.c (__builtin_unwind_init) [!HAVE___BUILTIN_UNWIND_INIT]:
Move from here ...
* src/lisp.h: ... to here, since flush_stack_call_func uses it.
* src/pdumper.c (dump_off_from_lisp): Avoid ‘return n;;’ to pacify
Oracle Studio.
---
src/alloc.c | 31 ++++---------------------------
src/lisp.h | 19 +++++++++++++++++++
src/pdumper.c | 3 ++-
3 files changed, 25 insertions(+), 28 deletions(-)
diff --git a/src/alloc.c b/src/alloc.c
index ed30c44..76bb208 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -4966,27 +4966,6 @@ typedef union
#endif
} stacktop_sentry;
-/* Force callee-saved registers and register windows onto the stack.
- Use the platform-defined __builtin_unwind_init if available,
- obviating the need for machine dependent methods. */
-#ifndef HAVE___BUILTIN_UNWIND_INIT
-# ifdef __sparc__
- /* This trick flushes the register windows so that all the state of
- the process is contained in the stack.
- FreeBSD does not have a ta 3 handler, so handle it specially.
- FIXME: Code in the Boehm GC suggests flushing (with 'flushrs') is
- needed on ia64 too. See mach_dep.c, where it also says inline
- assembler doesn't work with relevant proprietary compilers. */
-# if defined __sparc64__ && defined __FreeBSD__
-# define __builtin_unwind_init() asm ("flushw")
-# else
-# define __builtin_unwind_init() asm ("ta 3")
-# endif
-# else
-# define __builtin_unwind_init() ((void) 0)
-# endif
-#endif
-
/* Yield an address close enough to the top of the stack that the
garbage collector need not scan above it. Callers should be
declared NO_INLINE. */
@@ -5022,16 +5001,14 @@ typedef union
We have to mark Lisp objects in CPU registers that can hold local
variables or are used to pass parameters.
- This code assumes that calling setjmp saves registers we need
+ If __builtin_unwind_init is available, it should suffice to save
+ registers.
+
+ Otherwise, assume that calling setjmp saves registers we need
to see in a jmp_buf which itself lies on the stack. This doesn't
have to be true! It must be verified for each system, possibly
by taking a look at the source code of setjmp.
- If __builtin_unwind_init is available (defined by GCC >= 2.8) we
- can use it as a machine independent method to store all registers
- to the stack. In this case the macros described in the previous
- two paragraphs are not used.
-
Stack Layout
Architectures differ in the way their processor stack is organized.
diff --git a/src/lisp.h b/src/lisp.h
index 7b4f484..fdf69ab 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -3811,6 +3811,25 @@ extern void mark_maybe_objects (Lisp_Object const *,
ptrdiff_t);
extern void mark_stack (char const *, char const *);
extern void flush_stack_call_func1 (void (*func) (void *arg), void *arg);
+/* Force callee-saved registers and register windows onto the stack,
+ so that conservative garbage collection can see their values. */
+#ifndef HAVE___BUILTIN_UNWIND_INIT
+# ifdef __sparc__
+ /* This trick flushes the register windows so that all the state of
+ the process is contained in the stack.
+ FreeBSD does not have a ta 3 handler, so handle it specially.
+ FIXME: Code in the Boehm GC suggests flushing (with 'flushrs') is
+ needed on ia64 too. See mach_dep.c, where it also says inline
+ assembler doesn't work with relevant proprietary compilers. */
+# if defined __sparc64__ && defined __FreeBSD__
+# define __builtin_unwind_init() asm ("flushw")
+# else
+# define __builtin_unwind_init() asm ("ta 3")
+# endif
+# else
+# define __builtin_unwind_init() ((void) 0)
+# endif
+#endif
INLINE void
flush_stack_call_func (void (*func) (void *arg), void *arg)
{
diff --git a/src/pdumper.c b/src/pdumper.c
index 7f68766..865ceff 100644
--- a/src/pdumper.c
+++ b/src/pdumper.c
@@ -747,8 +747,9 @@ dump_off_from_lisp (Lisp_Object value)
intmax_t n = intmax_t_from_lisp (value);
eassert (DUMP_OFF_MIN <= n && n <= DUMP_OFF_MAX);
ALLOW_IMPLICIT_CONVERSION;
- return n;
+ dump_off converted = n;
DISALLOW_IMPLICIT_CONVERSION;
+ return converted;
}
static Lisp_Object
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 88b4516: Port to Oracle Studio 12.6 (sparc),
Paul Eggert <=