]> git.eshelyaron.com Git - emacs.git/commitdiff
Port to Oracle Studio 12.6 (sparc)
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 30 Jul 2020 16:22:01 +0000 (09:22 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Thu, 30 Jul 2020 16:23:51 +0000 (09:23 -0700)
* 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
src/lisp.h
src/pdumper.c

index ed30c449785e6b93ee9a125533b5c0f5eef6cdbb..76bb20876b040e2db2a5000f5aec4f9859f4d1fd 100644 (file)
@@ -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.
index 7b4f484b9b7cfeaac692341de9a2c0147447c563..fdf69ab73683d24a59d42374b3b56dceed5930d7 100644 (file)
@@ -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)
 {
index 7f6876666be063268e09d8d03a63be6655dad0da..865ceff6fff3f0ef1dafe005fa7df8f59c249adb 100644 (file)
@@ -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