X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgc-internal.h;h=d85a7836d9f7eea71dd92568896a2a68fff35a8a;hb=e4542bc034db18cf98f005b2dac53a6d7d5c7260;hp=c49397a3e7870aa3d17d29a1340f6bdafdb42219;hpb=bd6f72eb0eb262950e554f3239eff4a1a242fd07;p=sbcl.git diff --git a/src/runtime/gc-internal.h b/src/runtime/gc-internal.h index c49397a..d85a783 100644 --- a/src/runtime/gc-internal.h +++ b/src/runtime/gc-internal.h @@ -20,13 +20,13 @@ * last I tried it - dan 2003.12.21 */ #if 1 #define gc_assert(ex) do { \ - if (!(ex)) gc_abort(); \ + if (!(ex)) gc_abort(); \ } while (0) #else #define gc_assert(ex) #endif #define gc_abort() lose("GC invariant lost, file \"%s\", line %d", \ - __FILE__, __LINE__) + __FILE__, __LINE__) #define CEILING(x,y) (((x) + ((y) - 1)) & (~((y) - 1))) @@ -52,8 +52,8 @@ NWORDS(unsigned long x, unsigned long n_bits) /* FIXME (1) this could probably be defined using something like * sizeof(lispobj)*floor(sizeof(struct simple_fun)/sizeof(lispobj)) * - FUN_POINTER_LOWTAG - * as I'm reasonably sure that simple_fun->code must always be the - * last slot in the object + * as I'm reasonably sure that simple_fun->code must always be the + * last slot in the object * FIXME (2) it also appears in purify.c, and it has a different value * for SPARC users in that bit @@ -91,44 +91,9 @@ lispobj *search_read_only_space(void *pointer); lispobj *search_static_space(void *pointer); lispobj *search_dynamic_space(void *pointer); -#include "fixnump.h" +lispobj *gc_search_space(lispobj *start, size_t words, lispobj *pointer); -/* Scan an area looking for an object which encloses the given pointer. - * Return the object start on success or NULL on failure. */ -static lispobj * -search_space(lispobj *start, size_t words, lispobj *pointer) -{ - while (words > 0) { - size_t count = 1; - lispobj thing = *start; - - /* If thing is an immediate then this is a cons. */ - if (is_lisp_pointer(thing) - || (fixnump(thing)) - || (widetag_of(thing) == CHARACTER_WIDETAG) -#if N_WORD_BITS == 64 - || (widetag_of(thing) == SINGLE_FLOAT_WIDETAG) -#endif - || (widetag_of(thing) == UNBOUND_MARKER_WIDETAG)) - count = 2; - else - count = (sizetab[widetag_of(thing)])(start); - - /* Check whether the pointer is within this object. */ - if ((pointer >= start) && (pointer < (start+count))) { - /* found it! */ - /*FSHOW((stderr,"/found %x in %x %x\n", pointer, start, thing));*/ - return(start); - } - - /* Round up the count. */ - count = CEILING(count,2); - - start += count; - words -= count; - } - return (NULL); -} +#include "fixnump.h" #ifdef LISP_FEATURE_GENCGC #include "gencgc-internal.h"