From 25e8988b86deb78bf254bc531defeaacf0ea9a3a Mon Sep 17 00:00:00 2001 From: slava Date: Thu, 28 Sep 2006 00:53:54 +0000 Subject: [PATCH] Code heap debugging in FEP --- vm/code_gc.c | 31 ++++++++++++++++++++++++++++++- vm/code_gc.h | 1 + vm/debug.c | 4 +++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/vm/code_gc.c b/vm/code_gc.c index d217775137..bec190a19d 100644 --- a/vm/code_gc.c +++ b/vm/code_gc.c @@ -126,7 +126,7 @@ void free_unmarked(HEAP *heap) if(scan->status == B_ALLOCATED) { /* merge blocks? */ - if(next_block(heap,prev) == scan) + if(prev && next_block(heap,prev) == scan) prev->size += scan->size; else { @@ -241,3 +241,32 @@ void primitive_code_gc(void) { garbage_collection(TENURED,true); } + +void dump_heap(HEAP *heap) +{ + F_BLOCK *scan = (F_BLOCK *)heap->base; + + while(scan) + { + char *status; + switch(scan->status) + { + case B_FREE: + status = "free"; + break; + case B_ALLOCATED: + status = "allocated"; + break; + case B_MARKED: + status = "marked"; + break; + default: + status = "invalid"; + break; + } + + fprintf(stderr,"%lx %s\n",(CELL)scan,status); + + scan = next_block(heap,scan); + } +} diff --git a/vm/code_gc.h b/vm/code_gc.h index 00b703cfaf..4e1ee3b192 100644 --- a/vm/code_gc.h +++ b/vm/code_gc.h @@ -77,3 +77,4 @@ void collect_literals(void); void recursive_mark(CELL xt); void primitive_code_room(void); void primitive_code_gc(void); +void dump_heap(HEAP *heap); diff --git a/vm/debug.c b/vm/debug.c index 01532b68c6..3695952608 100644 --- a/vm/debug.c +++ b/vm/debug.c @@ -165,7 +165,7 @@ void factorbug(void) fprintf(stderr,"g -- dump generations\n"); fprintf(stderr,"card -- print card containing address\n"); fprintf(stderr,"addr -- print address containing card\n"); - fprintf(stderr,"c -- force garbage collection\n"); + fprintf(stderr,"code -- code heap dump\n"); for(;;) { @@ -243,6 +243,8 @@ void factorbug(void) exit(1); else if(strcmp(cmd,"im") == 0) save_image("fep.image"); + else if(strcmp(cmd,"code") == 0) + dump_heap(&compiling); else fprintf(stderr,"unknown command\n"); }