projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
0.8.0.78.vector-nil-string.1:
[sbcl.git]
/
src
/
runtime
/
backtrace.c
diff --git
a/src/runtime/backtrace.c
b/src/runtime/backtrace.c
index
18f93a0
..
fe8e540
100644
(file)
--- a/
src/runtime/backtrace.c
+++ b/
src/runtime/backtrace.c
@@
-21,6
+21,12
@@
#include "os.h"
#include "interrupt.h"
#include "lispregs.h"
#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__
#ifndef __i386__
@@
-90,7
+96,8
@@
code_pointer(lispobj object)
static boolean
cs_valid_pointer_p(struct call_frame *pointer)
{
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));
}
((char *) pointer < (char *) current_control_stack_pointer));
}
@@
-146,6
+153,7
@@
static int
previous_info(struct call_info *info)
{
struct call_frame *this_frame;
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)) {
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. */
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 =
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) {
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);
}
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;
struct vector *string;
string = (struct vector *) object;