X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fbacktrace.c;h=c4840cc7051e9d6a137e2668a1c473480c29c5de;hb=c3699db2053ff3b5ac6a98d4431c3789496002d8;hp=a4cbc116ffda78ee0ffc8a3df2ca3212988f9290;hpb=e365f2f7a9c66d307b48fee70778f4eaa84bdcc0;p=sbcl.git diff --git a/src/runtime/backtrace.c b/src/runtime/backtrace.c index a4cbc11..c4840cc 100644 --- a/src/runtime/backtrace.c +++ b/src/runtime/backtrace.c @@ -26,8 +26,9 @@ #endif #include "genesis/static-symbols.h" #include "genesis/primitive-objects.h" +#include "thread.h" -#ifndef __i386__ +#ifndef LISP_FEATURE_X86 /* KLUDGE: Sigh ... I know what the call frame looks like and it had * better not change. */ @@ -78,7 +79,6 @@ code_pointer(lispobj object) break; case RETURN_PC_HEADER_WIDETAG: case SIMPLE_FUN_HEADER_WIDETAG: - case CLOSURE_FUN_HEADER_WIDETAG: len = HEADER_LENGTH(header); if (len == 0) headerp = NULL; @@ -95,7 +95,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)); } @@ -237,7 +238,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; @@ -269,6 +270,8 @@ backtrace(int nframes) #else + + void backtrace(int nframes) {