X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fpurify.c;h=91b4232244375de74aa5f29c6d44f2660fdada37;hb=64db34d6fce16b93652fe8185ec6eeffac908fc8;hp=56ec2078707f0d00885bc101ae48df726a3ecd3e;hpb=b9e94e326f79ab01e56cb437e424ce5ea489471f;p=sbcl.git diff --git a/src/runtime/purify.c b/src/runtime/purify.c index 56ec207..91b4232 100644 --- a/src/runtime/purify.c +++ b/src/runtime/purify.c @@ -37,8 +37,6 @@ #define PRINTNOISE -extern unsigned long bytes_consed_between_gcs; - static lispobj *dynamic_space_purify_pointer; @@ -70,14 +68,6 @@ static long later_count = 0; #define SIMPLE_ARRAY_WORD_WIDETAG SIMPLE_ARRAY_UNSIGNED_BYTE_64_WIDETAG #endif -/* FIXME: Shouldn't this be defined in sbcl.h? See also notes in - * cheneygc.c */ - -#ifdef LISP_FEATURE_SPARC -#define FUN_RAW_ADDR_OFFSET 0 -#else -#define FUN_RAW_ADDR_OFFSET (6*sizeof(lispobj) - FUN_POINTER_LOWTAG) -#endif static boolean forwarding_pointer_p(lispobj obj) @@ -665,7 +655,7 @@ apply_code_fixups_during_purify(struct code *old_code, struct code *new_code) void *constants_start_addr, *constants_end_addr; void *code_start_addr, *code_end_addr; lispobj fixups = NIL; - unsigned displacement = (unsigned)new_code - (unsigned)old_code; + unsigned long displacement = (unsigned long)new_code - (unsigned long)old_code; struct vector *fixups_vector; ncode_words = fixnum_value(new_code->code_size); @@ -711,21 +701,21 @@ apply_code_fixups_during_purify(struct code *old_code, struct code *new_code) for (i=0; idata[i]; /* Now check the current value of offset. */ - unsigned old_value = - *(unsigned *)((unsigned)code_start_addr + offset); + unsigned long old_value = + *(unsigned long *)((unsigned long)code_start_addr + offset); /* If it's within the old_code object then it must be an * absolute fixup (relative ones are not saved) */ - if ((old_value>=(unsigned)old_code) - && (old_value<((unsigned)old_code + nwords * N_WORD_BYTES))) + if ((old_value>=(unsigned long)old_code) + && (old_value<((unsigned long)old_code + nwords * N_WORD_BYTES))) /* So add the dispacement. */ - *(unsigned *)((unsigned)code_start_addr + offset) = old_value + *(unsigned long *)((unsigned long)code_start_addr + offset) = old_value + displacement; else /* It is outside the old code object so it must be a relative * fixup (absolute fixups are not saved). So subtract the * displacement. */ - *(unsigned *)((unsigned)code_start_addr + offset) = old_value + *(unsigned long *)((unsigned long)code_start_addr + offset) = old_value - displacement; } } @@ -810,7 +800,7 @@ ptrans_code(lispobj thing) ((struct simple_fun *)native_pointer(func))->self += FUN_RAW_ADDR_OFFSET; #endif - pscav_later(&((struct simple_fun *)native_pointer(func))->name, 3); + pscav_later(&((struct simple_fun *)native_pointer(func))->name, 4); } return result; @@ -1142,7 +1132,7 @@ pscav_code(struct code*code) ((struct simple_fun *)native_pointer(func))->self += FUN_RAW_ADDR_OFFSET; #endif - pscav_later(&((struct simple_fun *)native_pointer(func))->name, 3); + pscav_later(&((struct simple_fun *)native_pointer(func))->name, 4); } return CEILING(nwords,2); @@ -1588,7 +1578,7 @@ purify(lispobj static_roots, lispobj read_only_roots) #endif os_zero((os_vm_address_t) current_dynamic_space, - (os_vm_size_t) DYNAMIC_SPACE_SIZE); + (os_vm_size_t) dynamic_space_size); /* Zero the stack. Note that the stack is also zeroed by SUB-GC * calling SCRUB-CONTROL-STACK - this zeros the stack on the x86. */