From 7e225505d4c898372d0d60b11bc1cc354761d5a7 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Thu, 9 Jan 2025 19:28:27 -0600 Subject: [PATCH] backtrace: allocate as objectref --- c/backtrace.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/c/backtrace.c b/c/backtrace.c index 57011e0..46f0686 100644 --- a/c/backtrace.c +++ b/c/backtrace.c @@ -6,8 +6,16 @@ struct backtrace * backtrace_allocate(struct vm * vm) { - assert(false); // backtrace must become an objectref - struct backtrace * backtrace = memory_allocate((sizeof (struct backtrace))); + struct class_entry * object_class_entry = class_resolver_lookup_class(vm->class_hash_table.length, + vm->class_hash_table.entry, + (const uint8_t *)"java/lang/Object", + 16); + debugf("object class entry: %p\n", object_class_entry); + + int num_fields = (sizeof (struct backtrace)) / (sizeof (void *)); + struct objectref * objectref = obj_allocate(num_fields); + objectref->class_entry = object_class_entry; + struct backtrace * backtrace = (struct backtrace *)&objectref->aref[0]; backtrace->num_entries = vm->frame_stack.ix; int backtrace_entries_size = (sizeof (struct backtrace_entry)) * backtrace->num_entries; backtrace->entry = memory_allocate(backtrace_entries_size);