diff options
-rw-r--r-- | stage3/heap.c | 8 | ||||
-rw-r--r-- | stage3/heap.h | 15 | ||||
-rw-r--r-- | stage3/main.c | 4 |
3 files changed, 20 insertions, 7 deletions
diff --git a/stage3/heap.c b/stage3/heap.c index 2c54d8c..0e9a8d6 100644 --- a/stage3/heap.c +++ b/stage3/heap.c @@ -9,6 +9,7 @@ static heap_header init_free_ptr; static heap_header *free_ptr = nil; +static usize total_size = 0; #ifdef DEBUG void heap_check() @@ -127,9 +128,16 @@ void heap_add(void *ptr, usize size) h->size = size - sizeof(heap_header); kfree(h + 1); + + total_size += size; } heap_header *heap_get_free_ptr() { return free_ptr; } + +usize heap_total_size() +{ + return total_size; +} diff --git a/stage3/heap.h b/stage3/heap.h index 0b7057b..15bf071 100644 --- a/stage3/heap.h +++ b/stage3/heap.h @@ -3,21 +3,22 @@ #include "def.h" +typedef struct __attribute__((packed)) heap_header { + struct heap_header *next; + usize size; +} heap_header; + void heap_init(); + void heap_add(void *ptr, usize size); +heap_header *heap_get_free_ptr(); +usize heap_total_size(); void *try_kmalloc(usize size); void *kmalloc(usize siz); void kfree(void *ptr); void *krealloc(void *ptr, usize size); -typedef struct __attribute__((packed)) heap_header { - struct heap_header *next; - usize size; -} heap_header; - -heap_header *heap_get_free_ptr(); - #ifdef DEBUG void heap_check(); #else diff --git a/stage3/main.c b/stage3/main.c index b4ce692..3d7d7aa 100644 --- a/stage3/main.c +++ b/stage3/main.c @@ -125,6 +125,10 @@ void kmain(struct bootinfo *info) print(S("\n")); } + print(S("total heap size: ")); + print_bytes(heap_total_size()); + print(S("\n")); + print(S("gfx framebuffer at ")); print_hex((u64) bootinfo->gfx_framebuffer); print(S("-")); |