From 73edd5603df1b45740648ed881dbeb270137bbde Mon Sep 17 00:00:00 2001 From: Egor Sheremetov Date: Tue, 20 Feb 2024 02:32:42 +0100 Subject: [PATCH] Debug prints added --- runtime/gc.c | 17 +++++++++++++---- runtime/gc.h | 4 +++- runtime/runtime.c | 12 ++++++------ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/runtime/gc.c b/runtime/gc.c index 602415306..0fd3b6443 100644 --- a/runtime/gc.c +++ b/runtime/gc.c @@ -52,18 +52,21 @@ void *alloc (size_t size) { #ifdef DEBUG_VERSION ++cur_id; #endif - size_t bytes_sz = size; + size_t obj_size = size; size = BYTES_TO_WORDS(size); + size_t padding = size * sizeof(size_t) - obj_size; #if defined(DEBUG_VERSION) && defined(DEBUG_PRINT) fprintf(stderr, "allocation of size %zu words (%zu bytes): ", size, bytes_sz); #endif void *p = gc_alloc_on_existing_heap(size); if (!p) { - fprintf(stderr, "Garbage collection is not implemented yet.\n"); - exit(149); +// fprintf(stderr, "Garbage collection is not implemented yet.\n"); +// exit(149); // not enough place in the heap, need to perform GC cycle - // p = gc_alloc(size); + p = gc_alloc(size); } + printf("Object allocated: content [%p, %p) padding [%p, %p)\n", p, p + obj_size, p + obj_size, p + size * sizeof(size_t)); + fflush(stdout); return p; } @@ -185,6 +188,8 @@ void *gc_alloc_on_existing_heap (size_t size) { } void *gc_alloc (size_t size) { + printf("Reallocation!\n"); + fflush(stdout); #if defined(DEBUG_VERSION) && defined(DEBUG_PRINT) fprintf(stderr, "===============================GC cycle has started\n"); #endif @@ -880,6 +885,7 @@ void *alloc_string (auint len) { obj->id = cur_id; #endif obj->forward_address = 0; + printf("Allocated string\n"); return obj; } @@ -893,6 +899,7 @@ void *alloc_array (auint len) { obj->id = cur_id; #endif obj->forward_address = 0; + printf("Allocated array\n"); return obj; } @@ -907,6 +914,7 @@ void *alloc_sexp (auint members) { #endif obj->forward_address = 0; obj->tag = 0; + printf("Allocated sexp\n"); return obj; } @@ -921,5 +929,6 @@ void *alloc_closure (auint captured) { obj->id = cur_id; #endif obj->forward_address = 0; + printf("Allocated closure\n"); return obj; } diff --git a/runtime/gc.h b/runtime/gc.h index e1b17c697..9e562976e 100644 --- a/runtime/gc.h +++ b/runtime/gc.h @@ -41,7 +41,9 @@ // # define MINIMUM_HEAP_CAPACITY (8) // #else // # define MINIMUM_HEAP_CAPACITY (1 << 2) -#define MINIMUM_HEAP_CAPACITY (1 << 30) +//#define MINIMUM_HEAP_CAPACITY (1 << 30) +//#define MINIMUM_HEAP_CAPACITY (30) +#define MINIMUM_HEAP_CAPACITY (30) // #endif #include diff --git a/runtime/runtime.c b/runtime/runtime.c index a0b1132d3..b839c06aa 100644 --- a/runtime/runtime.c +++ b/runtime/runtime.c @@ -786,9 +786,9 @@ extern void *Bclosure (aint bn, void *entry, ...) { va_list args; aint i, ai; #ifdef X86_64 - register size_t *stack_frame asm("ebp"); -#else register size_t *stack_frame asm("rbp"); +#else + register size_t *stack_frame asm("ebp"); #endif size_t *argss; data *r; @@ -877,13 +877,13 @@ extern void *Bsexp (aint bn, ...) { return (void *)((data *)r)->contents; } -extern long Btag (void *d, aint t, aint n) { +extern aint Btag (void *d, aint t, aint n) { data *r; if (UNBOXED(d)) return BOX(0); else { r = TO_DATA(d); - return (long)BOX(TAG(r->data_header) == SEXP_TAG && TO_SEXP(d)->tag == UNBOX(t) + return (aint)BOX(TAG(r->data_header) == SEXP_TAG && TO_SEXP(d)->tag == UNBOX(t) && LEN(r->data_header) == UNBOX(n)); } } @@ -1255,9 +1255,9 @@ extern void *Lhd (void *v) { return Belem(v, BOX(0)); } extern void *Ltl (void *v) { return Belem(v, BOX(1)); } /* Lread is an implementation of the "read" construct */ -extern long Lread () { +extern aint Lread () { // int result = BOX(0); - int64_t result = BOX(0); + aint result = BOX(0); printf("> "); fflush(stdout);