From 85c64dfc226d9622dd03f86c1f0864c107f034bb Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 16 Jan 2022 19:37:50 -0600 Subject: [PATCH] better printing when trap occurs --- core/builtin.onyx | 8 ++++- include/onyx_library.h | 3 +- include/wasm_emit.h | 1 + modules/glfw3/onyx_glfw3.so | Bin 80976 -> 81240 bytes modules/onyx_runtime/onyx_runtime.c | 17 ++-------- src/builtins.c | 1 + src/wasm_emit.c | 1 + src/wasm_output.h | 47 ++++++++++++++++++++++++++++ src/wasm_runtime.c | 47 +++++++++++++++++++++++----- 9 files changed, 101 insertions(+), 24 deletions(-) diff --git a/core/builtin.onyx b/core/builtin.onyx index 1993aa78..496ac64d 100644 --- a/core/builtin.onyx +++ b/core/builtin.onyx @@ -138,15 +138,21 @@ cfree :: (ptr: rawptr) do raw_free(context.allocator, ptr); #if runtime.runtime != .Custom { new :: ($T: type_expr, allocator := context.allocator) -> ^T { use package core.intrinsics.onyx { __initialize } + memory :: package core.memory res := cast(^T) raw_alloc(allocator, sizeof T); + memory.set(res, 0, sizeof T); __initialize(res); return res; } make :: ($T: type_expr, allocator := context.allocator) -> ^T { - return cast(^T) raw_alloc(allocator, sizeof T); + memory :: package core.memory + + res := cast(^T) raw_alloc(allocator, sizeof T); + memory.set(res, 0, sizeof T); + return res; } } diff --git a/include/onyx_library.h b/include/onyx_library.h index dad767d9..c0c0335a 100644 --- a/include/onyx_library.h +++ b/include/onyx_library.h @@ -31,6 +31,7 @@ typedef struct OnyxRuntime { wasm_func_t* (*wasm_extern_as_func)(wasm_extern_t* ext); wasm_trap_t* (*wasm_func_call)(const wasm_func_t* wasm_func, const wasm_val_vec_t* args, wasm_val_vec_t* results); wasm_instance_t* (*wasm_instance_new)(wasm_store_t* store, const wasm_module_t* module, const wasm_extern_vec_t* imports, wasm_trap_t** traps); + void (*onyx_print_trap)(wasm_trap_t* trap); } OnyxRuntime; OnyxRuntime* runtime; @@ -96,4 +97,4 @@ typedef struct WasmFuncDefinition { #define PTR WASM_I32 #endif -#define ONYX_PTR(p) (p != 0 ? (runtime->wasm_memory_data(runtime->wasm_memory) + p) : NULL) \ No newline at end of file +#define ONYX_PTR(p) (p != 0 ? (runtime->wasm_memory_data(runtime->wasm_memory) + p) : NULL) diff --git a/include/wasm_emit.h b/include/wasm_emit.h index 74569f47..a369bb2f 100644 --- a/include/wasm_emit.h +++ b/include/wasm_emit.h @@ -543,6 +543,7 @@ typedef struct WasmFunc { i32 type_idx; LocalAllocator locals; bh_arr(WasmInstruction) code; + OnyxToken *location; } WasmFunc; typedef struct WasmGlobal { diff --git a/modules/glfw3/onyx_glfw3.so b/modules/glfw3/onyx_glfw3.so index f6e354bb1fdade5d43e982e4434db86929f2eaab..7649fd898b7d96b340f8f876407580f57c37a386 100755 GIT binary patch literal 81240 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 HqVazK_Y64! diff --git a/modules/onyx_runtime/onyx_runtime.c b/modules/onyx_runtime/onyx_runtime.c index 66be4314..4ea91594 100644 --- a/modules/onyx_runtime/onyx_runtime.c +++ b/modules/onyx_runtime/onyx_runtime.c @@ -357,19 +357,8 @@ static i32 onyx_run_thread(void *data) { trap = runtime->wasm_func_call(start_func, &args_array, &results); if (trap != NULL) { - /* - When proper linking is available for Wasmer, re-enable this code. At the moment - I don't see too much value in passing all of these functions on the Runtime object - especially since it is a hack to pass functions there anyway. - - wasm_message_t msg; - wasm_trap_message(trap, &msg); - bh_printf("TRAP: %b\n", msg.data, msg.size); - - wasm_frame_t *origin = wasm_trap_origin(trap); - bh_printf("HERE: func[%d] at %p.\n", wasm_frame_func_index(origin), wasm_frame_module_offset(origin)); - */ - bh_printf("ERROR: WebAssembly trap in thread: %d\n", thread_id); + bh_printf("THREAD: %d\n", thread_id); + runtime->onyx_print_trap(trap); } } @@ -819,4 +808,4 @@ ONYX_LIBRARY { ONYX_FUNC(__exit) NULL -}; \ No newline at end of file +}; diff --git a/src/builtins.c b/src/builtins.c index f18712b2..98dacf4d 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -512,3 +512,4 @@ void introduce_build_options(bh_allocator a) { add_entities_for_node(NULL, (AstNode *) os_type, NULL, NULL); symbol_builtin_introduce(p->scope, "compiler_os", (AstNode *) os_type); } + diff --git a/src/wasm_emit.c b/src/wasm_emit.c index de253c6e..3b2672e2 100644 --- a/src/wasm_emit.c +++ b/src/wasm_emit.c @@ -3251,6 +3251,7 @@ static void emit_function(OnyxWasmModule* mod, AstFunction* fd) { WasmFunc wasm_func = { 0 }; wasm_func.type_idx = type_idx; + wasm_func.location = fd->token; bh_arr_new(mod->allocator, wasm_func.code, 4); diff --git a/src/wasm_output.h b/src/wasm_output.h index ae1a7748..231a57ac 100644 --- a/src/wasm_output.h +++ b/src/wasm_output.h @@ -713,6 +713,52 @@ static i32 output_onyx_libraries_section(OnyxWasmModule* module, bh_buffer* buff return buff->length - prev_len; } +static i32 output_onyx_func_offset_section(OnyxWasmModule* module, bh_buffer* buff) { + i32 prev_len = buff->length; + + bh_buffer_write_byte(buff, WASM_SECTION_ID_CUSTOM); + + bh_buffer section_buff; + bh_buffer_init(§ion_buff, buff->allocator, 128); + + const char *custom_name = "_onyx_func_offsets"; + i32 leb_len; + u8* leb = uint_to_uleb128(strlen(custom_name), &leb_len); + bh_buffer_append(§ion_buff, leb, leb_len); + bh_buffer_append(§ion_buff, custom_name, strlen(custom_name)); + + i32 func_count = bh_arr_length(module->funcs) + module->foreign_function_count; + + bh_buffer name_buff; + bh_buffer_init(&name_buff, buff->allocator, 1024); + u32 str_cursor = func_count * 4; + fori (i, 0, func_count) { + bh_buffer_write_u32(§ion_buff, str_cursor); + + if (i < module->foreign_function_count) { + bh_buffer_append(&name_buff, "", 20); + str_cursor += 20; + } else { + WasmFunc *func = &module->funcs[i - module->foreign_function_count]; + assert(func->location); + char *str = bh_bprintf("%s:%d,%d\0", func->location->pos.filename, func->location->pos.line, func->location->pos.column); + i32 len = strlen(str); + bh_buffer_append(&name_buff, str, len + 1); + str_cursor += len + 1; + } + } + + bh_buffer_concat(§ion_buff, name_buff); + + leb = uint_to_uleb128((u64) (section_buff.length), &leb_len); + bh_buffer_append(buff, leb, leb_len); + + bh_buffer_concat(buff, section_buff); + bh_buffer_free(§ion_buff); + + return buff->length - prev_len; +} + void onyx_wasm_module_write_to_buffer(OnyxWasmModule* module, bh_buffer* buffer) { bh_buffer_init(buffer, global_heap_allocator, 128); bh_buffer_append(buffer, WASM_MAGIC_STRING, 4); @@ -731,6 +777,7 @@ void onyx_wasm_module_write_to_buffer(OnyxWasmModule* module, bh_buffer* buffer) output_codesection(module, buffer); output_datasection(module, buffer); output_onyx_libraries_section(module, buffer); + output_onyx_func_offset_section(module, buffer); } void onyx_wasm_module_write_to_file(OnyxWasmModule* module, bh_file file) { diff --git a/src/wasm_runtime.c b/src/wasm_runtime.c index e88dc936..7cfba39a 100644 --- a/src/wasm_runtime.c +++ b/src/wasm_runtime.c @@ -20,6 +20,7 @@ static wasm_config_t* wasm_config; static wasm_engine_t* wasm_engine; static wasm_store_t* wasm_store; static wasm_extern_vec_t wasm_imports; +static bh_buffer wasm_raw_bytes; wasm_instance_t* wasm_instance; wasm_module_t* wasm_module; wasm_memory_t* wasm_memory; @@ -165,10 +166,46 @@ static void onyx_lookup_and_load_custom_libraries(bh_buffer wasm_bytes) { } } +static void onyx_print_trap(wasm_trap_t* trap) { + wasm_message_t msg; + wasm_trap_message(trap, &msg); + bh_printf("TRAP: %b\n", msg.data, msg.size); + + wasm_frame_t *origin = wasm_trap_origin(trap); + i32 index = wasm_frame_func_index(origin); + + i32 cursor = 8; // skip the magic number and version + while (cursor < wasm_raw_bytes.length) { + u64 section_number = uleb128_to_uint(wasm_raw_bytes.data, &cursor); + u64 section_size = uleb128_to_uint(wasm_raw_bytes.data, &cursor); + + i32 section_start = cursor; + if (section_number == 0) { + u64 name_len = uleb128_to_uint(wasm_raw_bytes.data, &cursor); + if (!strncmp(wasm_raw_bytes.data + cursor, "_onyx_func_offsets", name_len)) { + cursor += name_len; + i32 section_start = cursor; + + cursor += 4 * index; + i32 func_offset = *(i32 *) (wasm_raw_bytes.data + cursor); + char* func_name = wasm_raw_bytes.data + section_start + func_offset; + + bh_printf("HERE: %s\n", func_name); + bh_printf("OFFSET: %p\n", wasm_frame_module_offset(origin)); + break; + } + } + + cursor = section_start + section_size; + } +} + // Returns 1 if successful b32 onyx_run_wasm(bh_buffer wasm_bytes, int argc, char *argv[]) { runtime = &wasm_runtime; + wasm_raw_bytes = wasm_bytes; + bh_arr_new(bh_heap_allocator(), linkable_functions, 4); onyx_lookup_and_load_custom_libraries(wasm_bytes); @@ -283,6 +320,7 @@ b32 onyx_run_wasm(bh_buffer wasm_bytes, int argc, char *argv[]) { wasm_runtime.wasm_extern_as_func = &wasm_extern_as_func; wasm_runtime.wasm_func_call = &wasm_func_call; wasm_runtime.wasm_instance_new = &wasm_instance_new; + wasm_runtime.onyx_print_trap = &onyx_print_trap; wasm_extern_t* start_extern = wasm_extern_lookup_by_name(wasm_module, wasm_instance, "_start"); wasm_func_t* start_func = wasm_extern_as_func(start_extern); @@ -294,14 +332,7 @@ b32 onyx_run_wasm(bh_buffer wasm_bytes, int argc, char *argv[]) { run_trap = wasm_func_call(start_func, &args, &results); #if 1 - if (run_trap != NULL) { - wasm_message_t msg; - wasm_trap_message(run_trap, &msg); - bh_printf("TRAP: %b\n", msg.data, msg.size); - - wasm_frame_t *origin = wasm_trap_origin(run_trap); - bh_printf("HERE: func[%d] at %p.\n", wasm_frame_func_index(origin), wasm_frame_module_offset(origin)); - } + if (run_trap != NULL) onyx_print_trap(run_trap); #endif goto cleanup; -- 2.25.1