summaryrefslogtreecommitdiff
path: root/src/alloc.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2020-07-30 09:22:01 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2020-07-30 09:23:51 -0700
commit88b4516cf8c3ff39803430452b8adbb86a73642a (patch)
treefe36151bfdc747db2937c013f2720788686e7e2b /src/alloc.c
parent35564bea4d73bc266743216599d01d644aed6fd8 (diff)
downloademacs-88b4516cf8c3ff39803430452b8adbb86a73642a.tar.gz
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.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c31
1 files changed, 4 insertions, 27 deletions
diff --git a/src/alloc.c b/src/alloc.c
index ed30c449785..76bb20876b0 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.