0.8.0.78.vector-nil-string.1:
[sbcl.git] / src / runtime / backtrace.c
index 18f93a0..fe8e540 100644 (file)
 #include "os.h"
 #include "interrupt.h"
 #include "lispregs.h"
+#ifdef LISP_FEATURE_GENCGC
+#include "gencgc-alloc-region.h"
+#endif
+#include "genesis/static-symbols.h"
+#include "genesis/primitive-objects.h"
+#include "thread.h"
 
 #ifndef __i386__
 
@@ -90,7 +96,8 @@ code_pointer(lispobj object)
 static boolean
 cs_valid_pointer_p(struct call_frame *pointer)
 {
-    return (((char *) CONTROL_STACK_START <= (char *) pointer) &&
+    struct thread *thread=arch_os_get_current_thread();
+    return (((char *) thread->control_stack_start <= (char *) pointer) &&
            ((char *) pointer < (char *) current_control_stack_pointer));
 }
 
@@ -146,6 +153,7 @@ static int
 previous_info(struct call_info *info)
 {
     struct call_frame *this_frame;
+    struct thread *thread=arch_os_get_current_thread();
     int free;
 
     if (!cs_valid_pointer_p(info->frame)) {
@@ -163,10 +171,10 @@ previous_info(struct call_info *info)
 
     if (info->lra == NIL) {
         /* We were interrupted. Find the correct signal context. */
-        free = SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX)>>2;
+        free = SymbolValue(FREE_INTERRUPT_CONTEXT_INDEX,thread)>>2;
         while (free-- > 0) {
            os_context_t *context = 
-               lisp_interrupt_contexts[free];
+               thread->interrupt_contexts[free];
             if ((struct call_frame *)(*os_context_register_addr(context,
                                                                reg_CFP))
                == info->frame) {
@@ -231,7 +239,7 @@ backtrace(int nframes)
                         symbol = (struct symbol *) object;
                         object = (lispobj *) native_pointer(symbol->name);
                     }
-                    if (widetag_of(*object) == SIMPLE_STRING_WIDETAG) {
+                    if (widetag_of(*object) == SIMPLE_BASE_STRING_WIDETAG) {
                         struct vector *string;
 
                         string = (struct vector *) object;