X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgc-internal.h;h=6645871088929927054042773fa671b97b31990c;hb=03363f0145ab5e88a17a4b881068dc921f7d122f;hp=b2ad82aff8b89f95f54c29dadd25535e31444c2c;hpb=e01e7a01b67b98a47730a08dfa5d0d58518486ea;p=sbcl.git diff --git a/src/runtime/gc-internal.h b/src/runtime/gc-internal.h index b2ad82a..6645871 100644 --- a/src/runtime/gc-internal.h +++ b/src/runtime/gc-internal.h @@ -19,14 +19,24 @@ /* disabling gc assertions made no discernable difference to GC speed, * last I tried it - dan 2003.12.21 */ #if 1 -#define gc_assert(ex) do { \ - if (!(ex)) gc_abort(); \ +# define gc_assert(ex) \ +do { \ + if (!(ex)) gc_abort(); \ +} while (0) +# define gc_assert_verbose(ex, fmt, ...) \ +do { \ + if (!(ex)) { \ + fprintf(stderr, fmt, ## __VA_ARGS__); \ + gc_abort(); \ + } \ } while (0) #else -#define gc_assert(ex) +# define gc_assert(ex) +# define gc_assert_verbose(ex, fmt, ...) #endif -#define gc_abort() lose("GC invariant lost, file \"%s\", line %d", \ - __FILE__, __LINE__) + +#define gc_abort() \ + lose("GC invariant lost, file \"%s\", line %d\n", __FILE__, __LINE__) #define CEILING(x,y) (((x) + ((y) - 1)) & (~((y) - 1))) @@ -52,14 +62,18 @@ 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 */ +#if defined(LISP_FEATURE_SPARC) +#define FUN_RAW_ADDR_OFFSET 0 +#else #define FUN_RAW_ADDR_OFFSET (6*sizeof(lispobj) - FUN_POINTER_LOWTAG) +#endif /* values for the *_alloc_* parameters */ #define FREE_PAGE_FLAG 0 @@ -80,6 +94,7 @@ extern long (*sizetab[256])(lispobj *where); extern struct weak_pointer *weak_pointers; /* in gc-common.c */ extern void scavenge(lispobj *start, long n_words); +extern void scavenge_interrupt_contexts(void); extern void scan_weak_pointers(void); lispobj copy_large_unboxed_object(lispobj object, long nwords);