0.9.1.59:
[sbcl.git] / src / runtime / interr.c
index 7f60dde..8d3b3b0 100644 (file)
 
 #include <stdio.h>
 #include <stdarg.h>
+#include <stdlib.h>
 
+#include "sbcl.h"
 #include "arch.h"
 #include "signal.h"
 
 #include "runtime.h"
-#include "sbcl.h"
 #include "interr.h"
 #include "print.h"
 #include "lispregs.h"
+#include "genesis/static-symbols.h"
+#include "genesis/vector.h"
+#include "thread.h"
 \f
 /* the way that we shut down the system on a fatal error */
 
@@ -43,7 +47,10 @@ never_returns
 lose(char *fmt, ...)
 {
     va_list ap;
-    fprintf(stderr, "fatal error encountered in SBCL runtime system");
+    fprintf(stderr, "fatal error encountered in SBCL pid %d",getpid());
+#if defined(LISP_FEATURE_SB_THREAD)
+    fprintf(stderr, "(tid %ld)",thread_self());
+#endif
     if (fmt) {
        fprintf(stderr, ":\n");
        va_start(ap, fmt);
@@ -99,9 +106,9 @@ describe_internal_error(os_context_t *context)
            brief_print(*os_context_register_addr(context, offset));
            break;
 
-       case sc_BaseCharReg:
+       case sc_CharacterReg:
            ch = *os_context_register_addr(context, offset);
-#ifdef __i386__
+#ifdef LISP_FEATURE_X86
            if (offset&1)
                ch = ch>>8;
            ch = ch & 0xff;
@@ -123,13 +130,13 @@ describe_internal_error(os_context_t *context)
 #ifdef sc_WordPointerReg
        case sc_WordPointerReg:
 #endif
-           printf("\t0x%08x\n", *os_context_register_addr(context, offset));
+           printf("\t0x%08lx\n", (unsigned long) *os_context_register_addr(context, offset));
            break;
        case sc_SignedReg:
-           printf("\t%d\n", *os_context_register_addr(context, offset));
+           printf("\t%ld\n", (long) *os_context_register_addr(context, offset));
            break;
        case sc_UnsignedReg:
-           printf("\t%u\n", *os_context_register_addr(context, offset));
+           printf("\t%lu\n", (unsigned long) *os_context_register_addr(context, offset));
            break;
 #ifdef sc_SingleFloatReg
        case sc_SingleFloatReg:
@@ -160,8 +167,8 @@ lispobj debug_print(lispobj string)
        that %primitive print is used (it's only a debugging aid anyway)
        we just put guarantee our safety by putting an unused buffer on
        the stack before doing anything else here */
-    char untouched[32];
+    char untouched[32]; /* GCC warns about not using this, but that's the point.. */
     fprintf(stderr, "%s\n", 
-           (char *)(((struct vector *)PTR(string))->data),untouched);
+           (char *)(((struct vector *)native_pointer(string))->data),untouched);
     return NIL;
 }