X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fruntime%2Fgc-common.c;h=81ffae4bd8de7777d23dead0c48ffb679eec72ad;hb=f7faed97898dd0e94a18b0d1fca03aaa0fe24ab0;hp=97e227c18a5dcbda0e43ae14336eda644bd12b34;hpb=68508f10fb9c235d1f29a55b05f5158e90b8e0b6;p=sbcl.git diff --git a/src/runtime/gc-common.c b/src/runtime/gc-common.c index 97e227c..81ffae4 100644 --- a/src/runtime/gc-common.c +++ b/src/runtime/gc-common.c @@ -52,8 +52,8 @@ #endif #endif -size_t dynamic_space_size = DEFAULT_DYNAMIC_SPACE_SIZE; -size_t thread_control_stack_size = DEFAULT_CONTROL_STACK_SIZE; +os_vm_size_t dynamic_space_size = DEFAULT_DYNAMIC_SPACE_SIZE; +os_vm_size_t thread_control_stack_size = DEFAULT_CONTROL_STACK_SIZE; inline static boolean forwarding_pointer_p(lispobj *pointer) { @@ -90,8 +90,7 @@ lispobj (*transother[256])(lispobj object); long (*sizetab[256])(lispobj *where); struct weak_pointer *weak_pointers; -unsigned long bytes_consed_between_gcs = 12*1024*1024; - +os_vm_size_t bytes_consed_between_gcs = 12*1024*1024; /* * copying objects @@ -1885,7 +1884,7 @@ scav_lose(lispobj *where, lispobj object) { lose("no scavenge function for object 0x%08x (widetag 0x%x)\n", (unsigned long)object, - widetag_of(object)); + widetag_of(*where)); return 0; /* bogus return value to satisfy static type checking */ } @@ -1904,7 +1903,7 @@ size_lose(lispobj *where) { lose("no size function for object at 0x%08x (widetag 0x%x)\n", (unsigned long)where, - widetag_of(LOW_WORD(where))); + widetag_of(*where)); return 1; /* bogus return value to satisfy static type checking */ } @@ -1916,7 +1915,7 @@ size_lose(lispobj *where) void gc_init_tables(void) { - unsigned long i; + unsigned long i, j; /* Set default value in all slots of scavenge table. FIXME * replace this gnarly sizeof with something based on @@ -1931,11 +1930,14 @@ gc_init_tables(void) */ for (i = 0; i < (1<<(N_WIDETAG_BITS-N_LOWTAG_BITS)); i++) { - scavtab[EVEN_FIXNUM_LOWTAG|(i<= hard_guard_page_address)) || @@ -2544,6 +2775,7 @@ scrub_control_stack(void) goto scrub; } while (((unsigned long)++sp) & (BYTES_ZERO_BEFORE_END - 1)); #endif +#endif /* LISP_FEATURE_C_STACK_IS_CONTROL_STACK */ } #if !defined(LISP_FEATURE_X86) && !defined(LISP_FEATURE_X86_64) @@ -2576,6 +2808,8 @@ static int boxed_registers[] = BOXED_REGISTERS; *os_context_lr_addr(context) #define ACCESS_INTERIOR_POINTER_npc \ *os_context_npc_addr(context) +#define ACCESS_INTERIOR_POINTER_ctr \ + *os_context_ctr_addr(context) #define INTERIOR_POINTER_VARS(name) \ unsigned long name##_offset; \ @@ -2673,6 +2907,9 @@ scavenge_interrupt_context(os_context_t * context) #ifdef ARCH_HAS_NPC_REGISTER INTERIOR_POINTER_VARS(npc); #endif +#ifdef LISP_FEATURE_PPC + INTERIOR_POINTER_VARS(ctr); +#endif PAIR_INTERIOR_POINTER(pc); #ifdef reg_LIP @@ -2684,6 +2921,9 @@ scavenge_interrupt_context(os_context_t * context) #ifdef ARCH_HAS_NPC_REGISTER PAIR_INTERIOR_POINTER(npc); #endif +#ifdef LISP_FEATURE_PPC + PAIR_INTERIOR_POINTER(ctr); +#endif /* Scavenge all boxed registers in the context. */ for (i = 0; i < (sizeof(boxed_registers) / sizeof(int)); i++) { @@ -2713,6 +2953,9 @@ scavenge_interrupt_context(os_context_t * context) #ifdef ARCH_HAS_NPC_REGISTER FIXUP_INTERIOR_POINTER(npc); #endif +#ifdef LISP_FEATURE_PPC + FIXUP_INTERIOR_POINTER(ctr); +#endif } void