#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__
headerp = (lispobj *) native_pointer(object);
header = *headerp;
- type = TypeOf(header);
+ type = widetag_of(header);
switch (type) {
- case type_CodeHeader:
+ case CODE_HEADER_WIDETAG:
break;
- case type_ReturnPcHeader:
- case type_SimpleFunHeader:
- case type_ClosureFunHeader:
+ case RETURN_PC_HEADER_WIDETAG:
+ case SIMPLE_FUN_HEADER_WIDETAG:
+ case CLOSURE_FUN_HEADER_WIDETAG:
len = HEADER_LENGTH(header);
if (len == 0)
headerp = NULL;
static boolean
cs_valid_pointer_p(struct call_frame *pointer)
{
- /* lose("stub: hasn't been updated for X86"); */
- 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));
}
unsigned long pc;
info->interrupted = 1;
- if (lowtagof(*os_context_register_addr(context, reg_CODE))
+ if (lowtag_of(*os_context_register_addr(context, reg_CODE))
== FUN_POINTER_LOWTAG) {
/* We tried to call a function, but crapped out before $CODE could
* be fixed up. Probably an undefined function. */
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)) {
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) {
header = (struct simple_fun *) native_pointer(function);
name = header->name;
- if (lowtagof(name) == OTHER_POINTER_LOWTAG) {
+ if (lowtag_of(name) == OTHER_POINTER_LOWTAG) {
lispobj *object;
object = (lispobj *) native_pointer(name);
- if (TypeOf(*object) == type_SymbolHeader) {
+ if (widetag_of(*object) == SYMBOL_HEADER_WIDETAG) {
struct symbol *symbol;
symbol = (struct symbol *) object;
object = (lispobj *) native_pointer(symbol->name);
}
- if (TypeOf(*object) == type_SimpleString) {
+ if (widetag_of(*object) == SIMPLE_BASE_STRING_WIDETAG) {
struct vector *string;
string = (struct vector *) object;