From: Judah Caruso Date: Fri, 8 Dec 2023 20:58:40 +0000 (-0700) Subject: interpreter warnings X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=614cc6f96019db92e28ac686819dba9d887e1588;p=onyx.git interpreter warnings --- diff --git a/interpreter/src/debug/debug_host.c b/interpreter/src/debug/debug_host.c index 82b0c877..83312106 100644 --- a/interpreter/src/debug/debug_host.c +++ b/interpreter/src/debug/debug_host.c @@ -9,7 +9,7 @@ void debug_host_init(debug_state_t *debug, struct ovm_engine_t *ovm_engine) { bh_arena_init(&debug->tmp_arena, bh_heap_allocator(), 16 * 1024); debug->tmp_alloc = bh_arena_allocator(&debug->tmp_arena); - + debug->info = NULL; debug->threads = NULL; diff --git a/interpreter/src/debug/debug_info.c b/interpreter/src/debug/debug_info.c index 6b332c1c..1417d93b 100644 --- a/interpreter/src/debug/debug_info.c +++ b/interpreter/src/debug/debug_info.c @@ -30,16 +30,16 @@ void debug_info_import_file_info(debug_info_t *info, u8 *data, u32 len) { u32 offset = 0; info->has_debug_info = true; - i32 count = uleb128_to_uint(data, &offset); + i32 count = uleb128_to_uint(data, (i32 *)&offset); fori (i, 0, (i32) count) { debug_file_info_t file_info; file_info.line_buffer_offset = -1; - u32 file_id = uleb128_to_uint(data, &offset); + u32 file_id = uleb128_to_uint(data, (i32 *)&offset); file_info.file_id = file_id; - file_info.line_count = uleb128_to_uint(data, &offset); + file_info.line_count = uleb128_to_uint(data, (i32 *)&offset); - u32 name_length = uleb128_to_uint(data, &offset); + u32 name_length = uleb128_to_uint(data, (i32 *)&offset); file_info.name = bh_alloc_array(info->alloc, char, name_length + 1); memcpy(file_info.name, data + offset, name_length); file_info.name[name_length] = 0; @@ -55,14 +55,14 @@ void debug_info_import_func_info(debug_info_t *info, u8 *data, u32 len) { u32 offset = 0; info->has_debug_info = true; - i32 count = uleb128_to_uint(data, &offset); + i32 count = uleb128_to_uint(data, (i32 *)&offset); fori (i, 0, (i32) count) { debug_func_info_t func_info; - func_info.func_id = uleb128_to_uint(data, &offset); - func_info.file_id = uleb128_to_uint(data, &offset); - func_info.line = uleb128_to_uint(data, &offset); + func_info.func_id = uleb128_to_uint(data, (i32 *)&offset); + func_info.file_id = uleb128_to_uint(data, (i32 *)&offset); + func_info.line = uleb128_to_uint(data, (i32 *)&offset); - u32 name_length = uleb128_to_uint(data, &offset); + u32 name_length = uleb128_to_uint(data, (i32 *)&offset); if (name_length == 0) { func_info.name = NULL; } else { @@ -73,10 +73,10 @@ void debug_info_import_func_info(debug_info_t *info, u8 *data, u32 len) { } func_info.internal = data[offset++] != 0; - func_info.debug_op_offset = uleb128_to_uint(data, &offset); - func_info.stack_ptr_idx = uleb128_to_uint(data, &offset); + func_info.debug_op_offset = uleb128_to_uint(data, (i32 *)&offset); + func_info.stack_ptr_idx = uleb128_to_uint(data, (i32 *)&offset); - uleb128_to_uint(data, &offset); + uleb128_to_uint(data, (i32 *)&offset); bh_arr_set_at(info->funcs, func_info.func_id, func_info); } @@ -88,12 +88,12 @@ void debug_info_import_sym_info(debug_info_t *info, u8 *data, u32 len) { u32 offset = 0; info->has_debug_info = true; - i32 count = uleb128_to_uint(data, &offset); + i32 count = uleb128_to_uint(data, (i32 *)&offset); fori (i, 0, count) { debug_sym_info_t sym_info; - sym_info.sym_id = uleb128_to_uint(data, &offset); + sym_info.sym_id = uleb128_to_uint(data, (i32 *)&offset); - u32 name_length = uleb128_to_uint(data, &offset); + u32 name_length = uleb128_to_uint(data, (i32 *)&offset); if (name_length == 0) { sym_info.name = NULL; } else { @@ -102,10 +102,10 @@ void debug_info_import_sym_info(debug_info_t *info, u8 *data, u32 len) { sym_info.name[name_length] = 0; offset += name_length; } - - sym_info.loc_kind = uleb128_to_uint(data, &offset); - sym_info.loc = uleb128_to_uint(data, &offset); - sym_info.type = uleb128_to_uint(data, &offset); + + sym_info.loc_kind = uleb128_to_uint(data, (i32 *)&offset); + sym_info.loc = uleb128_to_uint(data, (i32 *)&offset); + sym_info.type = uleb128_to_uint(data, (i32 *)&offset); bh_arr_set_at(info->symbols, sym_info.sym_id, sym_info); } @@ -117,12 +117,12 @@ void debug_info_import_type_info(debug_info_t *info, u8 *data, u32 len) { u32 offset = 0; info->has_debug_info = true; - i32 count = uleb128_to_uint(data, &offset); + i32 count = uleb128_to_uint(data, (i32 *)&offset); fori (i, 0, count) { debug_type_info_t type; - type.id = uleb128_to_uint(data, &offset); + type.id = uleb128_to_uint(data, (i32 *)&offset); - u32 name_length = uleb128_to_uint(data, &offset); + u32 name_length = uleb128_to_uint(data, (i32 *)&offset); if (name_length == 0) { type.name = NULL; } else { @@ -132,30 +132,30 @@ void debug_info_import_type_info(debug_info_t *info, u8 *data, u32 len) { offset += name_length; } - type.size = uleb128_to_uint(data, &offset); - type.kind = uleb128_to_uint(data, &offset); + type.size = uleb128_to_uint(data, (i32 *)&offset); + type.kind = uleb128_to_uint(data, (i32 *)&offset); switch (type.kind) { case debug_type_kind_primitive: - type.primitive.primitive_kind = uleb128_to_uint(data, &offset); + type.primitive.primitive_kind = uleb128_to_uint(data, (i32 *)&offset); break; case debug_type_kind_modifier: - type.modifier.modifier_kind = uleb128_to_uint(data, &offset); - type.modifier.modified_type = uleb128_to_uint(data, &offset); + type.modifier.modifier_kind = uleb128_to_uint(data, (i32 *)&offset); + type.modifier.modified_type = uleb128_to_uint(data, (i32 *)&offset); break; case debug_type_kind_structure: - type.structure.simple = uleb128_to_uint(data, &offset); + type.structure.simple = uleb128_to_uint(data, (i32 *)&offset); - type.structure.member_count = uleb128_to_uint(data, &offset); + type.structure.member_count = uleb128_to_uint(data, (i32 *)&offset); type.structure.members = bh_alloc_array(info->alloc, debug_type_structure_member_t, type.structure.member_count); fori (i, 0, type.structure.member_count) { - type.structure.members[i].offset = uleb128_to_uint(data, &offset); - type.structure.members[i].type = uleb128_to_uint(data, &offset); + type.structure.members[i].offset = uleb128_to_uint(data, (i32 *)&offset); + type.structure.members[i].type = uleb128_to_uint(data, (i32 *)&offset); - u32 name_length = uleb128_to_uint(data, &offset); + u32 name_length = uleb128_to_uint(data, (i32 *)&offset); type.structure.members[i].name = bh_alloc_array(info->alloc, char, name_length + 1); memcpy(type.structure.members[i].name, data + offset, name_length); type.structure.members[i].name[name_length] = 0; @@ -164,39 +164,39 @@ void debug_info_import_type_info(debug_info_t *info, u8 *data, u32 len) { break; case debug_type_kind_array: - type.array.count = uleb128_to_uint(data, &offset); - type.array.type = uleb128_to_uint(data, &offset); + type.array.count = uleb128_to_uint(data, (i32 *)&offset); + type.array.type = uleb128_to_uint(data, (i32 *)&offset); break; case debug_type_kind_alias: - type.alias.alias_kind = uleb128_to_uint(data, &offset); - type.alias.aliased_type = uleb128_to_uint(data, &offset); + type.alias.alias_kind = uleb128_to_uint(data, (i32 *)&offset); + type.alias.aliased_type = uleb128_to_uint(data, (i32 *)&offset); break; case debug_type_kind_function: - type.function.param_count = uleb128_to_uint(data, &offset); + type.function.param_count = uleb128_to_uint(data, (i32 *)&offset); type.function.param_types = bh_alloc_array(info->alloc, u32, type.function.param_count); fori (i, 0, type.function.param_count) { - type.function.param_types[i] = uleb128_to_uint(data, &offset); + type.function.param_types[i] = uleb128_to_uint(data, (i32 *)&offset); } - type.function.return_type = uleb128_to_uint(data, &offset); + type.function.return_type = uleb128_to_uint(data, (i32 *)&offset); break; case debug_type_kind_slice: - type.slice.type = uleb128_to_uint(data, &offset); + type.slice.type = uleb128_to_uint(data, (i32 *)&offset); break; case debug_type_kind_enum: - type.enumeration.backing_type = uleb128_to_uint(data, &offset); - type.enumeration.value_count = uleb128_to_uint(data, &offset); + type.enumeration.backing_type = uleb128_to_uint(data, (i32 *)&offset); + type.enumeration.value_count = uleb128_to_uint(data, (i32 *)&offset); type.enumeration.values = bh_alloc_array(info->alloc, debug_type_enum_value_t, type.enumeration.value_count); fori (i, 0, type.enumeration.value_count) { - type.enumeration.values[i].value = uleb128_to_uint(data, &offset); + type.enumeration.values[i].value = uleb128_to_uint(data, (i32 *)&offset); - u32 name_length = uleb128_to_uint(data, &offset); + u32 name_length = uleb128_to_uint(data, (i32 *)&offset); type.enumeration.values[i].name = bh_alloc_array(info->alloc, char, name_length + 1); memcpy(type.enumeration.values[i].name, data + offset, name_length); type.enumeration.values[i].name[name_length] = 0; @@ -205,23 +205,23 @@ void debug_info_import_type_info(debug_info_t *info, u8 *data, u32 len) { break; case debug_type_kind_union: - type.onion.tag_size = uleb128_to_uint(data, &offset); - type.onion.variant_count = uleb128_to_uint(data, &offset); + type.onion.tag_size = uleb128_to_uint(data, (i32 *)&offset); + type.onion.variant_count = uleb128_to_uint(data, (i32 *)&offset); type.onion.variants = bh_alloc_array(info->alloc, debug_type_union_variant_t, type.onion.variant_count); - + fori (i, 0, type.onion.variant_count) { - u32 name_length = uleb128_to_uint(data, &offset); + u32 name_length = uleb128_to_uint(data, (i32 *)&offset); type.onion.variants[i].name = bh_alloc_array(info->alloc, char, name_length + 1); memcpy(type.onion.variants[i].name, data + offset, name_length); type.onion.variants[i].name[name_length] = 0; offset += name_length; - - type.onion.variants[i].type = uleb128_to_uint(data, &offset); + + type.onion.variants[i].type = uleb128_to_uint(data, (i32 *)&offset); } break; // Error handling - default: assert(("Unrecognized type kind", 0)); + default: assert(0 && "Unrecognized type kind"); } bh_arr_set_at(info->types, type.id, type); diff --git a/interpreter/src/debug/debug_info_builder.c b/interpreter/src/debug/debug_info_builder.c index 13c33dfa..8aa04da8 100644 --- a/interpreter/src/debug/debug_info_builder.c +++ b/interpreter/src/debug/debug_info_builder.c @@ -22,7 +22,7 @@ void debug_info_builder_prepare(debug_info_builder_t *builder, u8 *data) { static i32 debug_info_builder_push_scope(debug_info_builder_t *builder) { debug_sym_scope_t scope; scope.symbols = NULL; - bh_arr_new(builder->info->alloc, scope.symbols, 4); + bh_arr_new(builder->info->alloc, scope.symbols, 4); scope.parent = builder->current_scope; i32 scope_id = bh_arr_length(builder->info->symbol_scopes); @@ -58,14 +58,14 @@ static void debug_info_builder_parse(debug_info_builder_t *builder) { switch (instr) { case 0: builder->locked = 1; break; // Early return! case 1: - builder->current_file_id = uleb128_to_uint(builder->data, &builder->reader_offset); - builder->current_line = uleb128_to_uint(builder->data, &builder->reader_offset); + builder->current_file_id = uleb128_to_uint(builder->data, (i32 *)&builder->reader_offset); + builder->current_line = uleb128_to_uint(builder->data, (i32 *)&builder->reader_offset); break; case 2: debug_info_builder_push_scope(builder); break; - + case 3: debug_info_builder_pop_scope(builder); break; @@ -73,7 +73,7 @@ static void debug_info_builder_parse(debug_info_builder_t *builder) { case 4: debug_info_builder_add_symbol( builder, - uleb128_to_uint(builder->data, &builder->reader_offset)); + uleb128_to_uint(builder->data, (i32 *)&builder->reader_offset)); break; } break; @@ -104,7 +104,7 @@ void debug_info_builder_step(debug_info_builder_t *builder) { while (builder->remaining_reps == 0 && !builder->locked) { debug_info_builder_parse(builder); - debug_loc_info_t info; + debug_loc_info_t info; info.file_id = builder->current_file_id; info.line = builder->current_line; info.symbol_scope = builder->current_scope; @@ -151,7 +151,7 @@ void debug_info_builder_begin_func(debug_info_builder_t *builder, i32 func_idx) void debug_info_builder_end_func(debug_info_builder_t *builder) { if (!builder->data) return; - + assert(!builder->locked); debug_info_builder_step(builder); assert(builder->locked); diff --git a/interpreter/src/debug/debug_runtime_values.c b/interpreter/src/debug/debug_runtime_values.c index 88f05765..ea2fe2a6 100644 --- a/interpreter/src/debug/debug_runtime_values.c +++ b/interpreter/src/debug/debug_runtime_values.c @@ -36,7 +36,7 @@ static bool lookup_stack_pointer(debug_runtime_value_builder_t *builder, u32 *ou return false; } - *out = stack_ptr.u32; + *out = stack_ptr.u32; return true; } @@ -51,20 +51,20 @@ static void append_value_from_memory_with_type(debug_runtime_value_builder_t *bu case debug_type_primitive_kind_void: WRITE("void"); break; case debug_type_primitive_kind_signed_integer: switch (type->size) { - case 1: WRITE_FORMAT("%hhd", *(i8 *) base); break; - case 2: WRITE_FORMAT("%hd", *(i16 *) base); break; - case 4: WRITE_FORMAT("%d", *(i32 *) base); break; - case 8: WRITE_FORMAT("%ld", *(i64 *) base); break; + case 1: WRITE_FORMAT("%hhd", *(i8 *) base); break; + case 2: WRITE_FORMAT("%hd", *(i16 *) base); break; + case 4: WRITE_FORMAT("%d", *(i32 *) base); break; + case 8: WRITE_FORMAT("%lld", *(i64 *) base); break; default: WRITE("(err)"); break; } break; case debug_type_primitive_kind_unsigned_integer: switch (type->size) { - case 1: WRITE_FORMAT("%hhu", *(u8 *) base); break; - case 2: WRITE_FORMAT("%hu", *(u16 *) base); break; - case 4: WRITE_FORMAT("%u", *(u32 *) base); break; - case 8: WRITE_FORMAT("%lu", *(u64 *) base); break; + case 1: WRITE_FORMAT("%hhu", *(u8 *) base); break; + case 2: WRITE_FORMAT("%hu", *(u16 *) base); break; + case 4: WRITE_FORMAT("%u", *(u32 *) base); break; + case 8: WRITE_FORMAT("%llu", *(u64 *) base); break; default: WRITE("(err)"); break; } break; @@ -101,8 +101,8 @@ static void append_value_from_memory_with_type(debug_runtime_value_builder_t *bu switch (type->modifier.modifier_kind) { case debug_type_modifier_kind_pointer: switch (type->size) { - case 4: WRITE_FORMAT("0x%x", *(u32 *) base); break; - case 8: WRITE_FORMAT("0x%lx", *(u64 *) base); break; + case 4: WRITE_FORMAT("0x%x", *(u32 *) base); break; + case 8: WRITE_FORMAT("0x%llx", *(u64 *) base); break; default: WRITE("(err)"); break; } break; @@ -176,7 +176,7 @@ static void append_value_from_memory_with_type(debug_runtime_value_builder_t *bu if (name) { WRITE(name); } else { - WRITE_FORMAT("%lu", value); + WRITE_FORMAT("%llu", value); } break; @@ -190,7 +190,7 @@ static void append_value_from_memory_with_type(debug_runtime_value_builder_t *bu } else { debug_type_union_variant_t *uv = &type->onion.variants[variant]; - WRITE_FORMAT("%s(", uv->name); + WRITE_FORMAT("%s(", uv->name); append_value_from_memory_with_type(builder, bh_pointer_add(base, type->onion.tag_size), uv->type); WRITE(")"); } @@ -244,20 +244,20 @@ static void append_ovm_value_with_type(debug_runtime_value_builder_t *builder, o case debug_type_primitive_kind_void: WRITE("void"); break; case debug_type_primitive_kind_signed_integer: switch (type->size) { - case 1: WRITE_FORMAT("%hhd", value.i8); break; - case 2: WRITE_FORMAT("%hd", value.i16); break; - case 4: WRITE_FORMAT("%d", value.i32); break; - case 8: WRITE_FORMAT("%ld", value.i64); break; + case 1: WRITE_FORMAT("%hhd", value.i8); break; + case 2: WRITE_FORMAT("%hd", value.i16); break; + case 4: WRITE_FORMAT("%d", value.i32); break; + case 8: WRITE_FORMAT("%lld", value.i64); break; default: WRITE("(err)"); break; } break; case debug_type_primitive_kind_unsigned_integer: switch (type->size) { - case 1: WRITE_FORMAT("%hhu", value.u8); break; - case 2: WRITE_FORMAT("%hu", value.u16); break; - case 4: WRITE_FORMAT("%u", value.u32); break; - case 8: WRITE_FORMAT("%lu", value.u64); break; + case 1: WRITE_FORMAT("%hhu", value.u8); break; + case 2: WRITE_FORMAT("%hu", value.u16); break; + case 4: WRITE_FORMAT("%u", value.u32); break; + case 8: WRITE_FORMAT("%llu", value.u64); break; default: WRITE("(err)"); break; } break; @@ -285,7 +285,7 @@ static void append_ovm_value_with_type(debug_runtime_value_builder_t *builder, o case debug_type_modifier_kind_pointer: switch (type->size) { case 4: WRITE_FORMAT("0x%x", value.u32); break; - case 8: WRITE_FORMAT("0x%lx", value.u64); break; + case 8: WRITE_FORMAT("0x%llx", value.u64); break; default: WRITE("(err)"); break; } break; @@ -320,7 +320,7 @@ static void append_ovm_value_with_type(debug_runtime_value_builder_t *builder, o case debug_type_kind_enum: { char *name = debug_info_type_enum_find_name(builder->info, type_id, value.u64); if (name == NULL) { - WRITE_FORMAT("%lu", value.u64); + WRITE_FORMAT("%llu", value.u64); } else { WRITE(name); } @@ -409,13 +409,13 @@ static u32 get_subvalues_for_type(debug_runtime_value_builder_t *builder, u32 ty case debug_type_kind_modifier: if (t->modifier.modifier_kind == debug_type_modifier_kind_pointer) return 1; return 0; - + case debug_type_kind_alias: return get_subvalues_for_type(builder, t->alias.aliased_type); case debug_type_kind_structure: return t->structure.member_count; - + case debug_type_kind_array: return t->array.count; case debug_type_kind_slice: { @@ -434,7 +434,7 @@ static u32 get_subvalues_for_type(debug_runtime_value_builder_t *builder, u32 ty u32 stack_ptr; if (!lookup_stack_pointer(builder, &stack_ptr)) { return 0; - } + } u32 *ptr_loc = bh_pointer_add(builder->state->ovm_engine->memory, stack_ptr + builder->base_loc + 4); count = *ptr_loc; @@ -451,6 +451,8 @@ static u32 get_subvalues_for_type(debug_runtime_value_builder_t *builder, u32 ty return count; } + + default: return 0; } } @@ -500,7 +502,7 @@ void debug_runtime_value_build_descend(debug_runtime_value_builder_t *builder, u u32 stack_ptr; if (!lookup_stack_pointer(builder, &stack_ptr)) { goto bad_case; - } + } u32 *ptr_loc = bh_pointer_add(builder->state->ovm_engine->memory, stack_ptr + builder->base_loc); builder->base_loc = *ptr_loc; @@ -580,7 +582,7 @@ void debug_runtime_value_build_descend(debug_runtime_value_builder_t *builder, u u32 stack_ptr; if (!lookup_stack_pointer(builder, &stack_ptr)) { goto bad_case; - } + } u32 *data_loc = bh_pointer_add(builder->state->ovm_engine->memory, stack_ptr + builder->base_loc); @@ -600,7 +602,7 @@ void debug_runtime_value_build_descend(debug_runtime_value_builder_t *builder, u bad_case: builder->base_loc_kind = debug_sym_loc_unknown; - return; + return; } bool debug_runtime_value_build_step(debug_runtime_value_builder_t *builder) { @@ -632,7 +634,7 @@ bool debug_runtime_value_build_step(debug_runtime_value_builder_t *builder) { u32 stack_ptr; if (!lookup_stack_pointer(builder, &stack_ptr)) { return false; - } + } u32 *data_loc = bh_pointer_add(builder->state->ovm_engine->memory, stack_ptr + builder->base_loc); @@ -730,7 +732,7 @@ bool debug_runtime_value_build_step(debug_runtime_value_builder_t *builder) { u32 stack_ptr; if (!lookup_stack_pointer(builder, &stack_ptr)) { return false; - } + } u32 *data_loc = bh_pointer_add(builder->state->ovm_engine->memory, stack_ptr + builder->base_loc); diff --git a/interpreter/src/debug/debug_thread.c b/interpreter/src/debug/debug_thread.c index 89a60d66..7e6fb2b3 100644 --- a/interpreter/src/debug/debug_thread.c +++ b/interpreter/src/debug/debug_thread.c @@ -49,7 +49,7 @@ static void send_string(debug_state_t *debug, const char *str) { } } -static void send_bytes(debug_state_t *debug, const char *bytes, unsigned int len) { +static void send_bytes(debug_state_t *debug, const unsigned char *bytes, unsigned int len) { bh_buffer_write_u32(&debug->send_buffer, len); bh_buffer_append(&debug->send_buffer, bytes, len); } @@ -186,7 +186,7 @@ static DEBUG_COMMAND_HANDLER(debug_command_brk) { debug_file_info_t file_info; debug_info_lookup_file_by_name(debug->info, filename, &file_info); - + debug_breakpoint_t bp; bp.id = debug->next_breakpoint_id++; bp.instr = instr; @@ -239,7 +239,7 @@ static DEBUG_COMMAND_HANDLER(debug_command_clr_brk) { static DEBUG_COMMAND_HANDLER(debug_command_step) { u32 granularity = parse_int(debug, ctx); u32 thread_id = parse_int(debug, ctx); - + if (granularity == 1) { ON_THREAD(thread_id) { (*thread)->pause_at_next_line = true; @@ -420,7 +420,7 @@ static DEBUG_COMMAND_HANDLER(debug_command_vars) { debug_runtime_value_build_clear(&builder); } - + // This is important, as when doing a layered query, only one symbol // should be considered, and once found, should immediate stop. goto syms_done; @@ -445,7 +445,7 @@ static DEBUG_COMMAND_HANDLER(debug_command_vars) { symbol_scope = sym_scope.parent; } - + syms_done: send_int(debug, 1); debug_runtime_value_build_free(&builder); @@ -470,7 +470,7 @@ static DEBUG_COMMAND_HANDLER(debug_command_memory_write) { u32 addr = parse_int(debug, ctx); u32 count; - u8 *data = parse_bytes(debug, ctx, &count); + u8 *data = (u8 *)parse_bytes(debug, ctx, &count); memcpy(bh_pointer_add(debug->ovm_engine->memory, addr), data, count); send_response_header(debug, msg_id); @@ -570,7 +570,7 @@ void *__debug_thread_entry(void * data) { // Set up socket listener // Wait for initial connection/handshake before entering loop. - + debug->listen_socket_fd = socket(AF_UNIX, SOCK_STREAM, 0); struct sockaddr_un local_addr, remote_addr; @@ -585,7 +585,7 @@ void *__debug_thread_entry(void * data) { listen(debug->listen_socket_fd, 1); len = sizeof(struct sockaddr_un); - debug->client_fd = accept(debug->listen_socket_fd, (void * restrict)&remote_addr, &len); + debug->client_fd = accept(debug->listen_socket_fd, (void * restrict)&remote_addr, (socklen_t * restrict)&len); close(debug->listen_socket_fd); diff --git a/interpreter/src/vm/code_builder.c b/interpreter/src/vm/code_builder.c index 20c99658..e770c486 100644 --- a/interpreter/src/vm/code_builder.c +++ b/interpreter/src/vm/code_builder.c @@ -5,7 +5,7 @@ // #define BUILDER_DEBUG #if defined(BUILDER_DEBUG) - #define POP_VALUE(b) (bh_arr_length((b)->execution_stack) == 0 ? (assert(("invalid value pop", 0)), 0) : bh_arr_pop((b)->execution_stack)) + #define POP_VALUE(b) (bh_arr_length((b)->execution_stack) == 0 ? (assert(0 && "invalid value pop"), 0) : bh_arr_pop((b)->execution_stack)) #else #define POP_VALUE(b) bh_arr_pop((b)->execution_stack) #endif @@ -109,7 +109,7 @@ void ovm_code_builder_pop_label_target(ovm_code_builder_t *builder) { ovm_program_modify_static_int(builder->program, patch.static_arr, patch.static_idx, br_delta); break; } - + bh_arr_fastdelete(builder->branch_patches, i); i--; } @@ -193,7 +193,7 @@ void ovm_code_builder_add_imm(ovm_code_builder_t *builder, u32 ovm_type, void *i case OVM_TYPE_I64: imm_instr.l = *(u64 *) imm; break; case OVM_TYPE_F32: imm_instr.f = *(f32 *) imm; break; case OVM_TYPE_F64: imm_instr.d = *(f64 *) imm; break; - default: assert(("bad ovm type for add_imm", 0)); + default: assert(0 && "bad ovm type for add_imm"); } debug_info_builder_emit_location(builder->debug_builder); @@ -283,12 +283,12 @@ void ovm_code_builder_add_branch_table(ovm_code_builder_t *builder, i32 count, i instrs[3].r = tmp_register; instrs[3].a = table_idx; instrs[3].b = index_register; - + instrs[4].full_instr = OVM_TYPED_INSTR(OVMI_BRI, OVM_TYPE_NONE); instrs[4].a = tmp_register; - + POP_VALUE(builder); - + fori (i, 0, count) { branch_patch_t patch; patch.kind = branch_patch_static_idx; @@ -476,7 +476,7 @@ void ovm_code_builder_add_register_set(ovm_code_builder_t *builder, i32 reg_idx) ovm_instr_t *last_instr = &bh_arr_last(builder->program->code); if (OVM_INSTR_INSTR(*last_instr) == OVMI_MOV) { if (IS_TEMPORARY_VALUE(builder, last_instr->r) && last_instr->r == LAST_VALUE(builder)) { - + last_instr->full_instr = OVM_TYPED_INSTR(OVMI_REG_SET, OVM_TYPE_NONE); last_instr->r = reg_idx; @@ -538,7 +538,7 @@ void ovm_code_builder_add_cmpxchg(ovm_code_builder_t *builder, u32 ovm_type, i32 // PUSH_VALUE(builder, cmpxchg_instr.r); // return; // } - + ovm_instr_t instrs[3] = {0}; // imm.i32 %n, offset instrs[0].full_instr = OVM_TYPED_INSTR(OVMI_IMM, OVM_TYPE_I32); diff --git a/interpreter/src/vm/disasm.c b/interpreter/src/vm/disasm.c index 70f29c66..531d4bd8 100644 --- a/interpreter/src/vm/disasm.c +++ b/interpreter/src/vm/disasm.c @@ -157,11 +157,11 @@ void ovm_disassemble(ovm_program_t *program, u32 instr_addr, bh_buffer *instr_te case instr_format_imm: switch (OVM_INSTR_TYPE(*instr)) { case OVM_TYPE_I8: formatted = snprintf(buf, 255, "%%%d, %hhd", instr->r, instr->i); break; - case OVM_TYPE_I16: formatted = snprintf(buf, 255, "%%%d, %hd", instr->r, instr->i); break; - case OVM_TYPE_I32: formatted = snprintf(buf, 255, "%%%d, %d", instr->r, instr->i); break; - case OVM_TYPE_I64: formatted = snprintf(buf, 255, "%%%d, %ld", instr->r, instr->l); break; - case OVM_TYPE_F32: formatted = snprintf(buf, 255, "%%%d, %f", instr->r, instr->f); break; - case OVM_TYPE_F64: formatted = snprintf(buf, 255, "%%%d, %lf", instr->r, instr->d); break; + case OVM_TYPE_I16: formatted = snprintf(buf, 255, "%%%d, %hd", instr->r, instr->i); break; + case OVM_TYPE_I32: formatted = snprintf(buf, 255, "%%%d, %d", instr->r, instr->i); break; + case OVM_TYPE_I64: formatted = snprintf(buf, 255, "%%%d, %lld", instr->r, instr->l); break; + case OVM_TYPE_F32: formatted = snprintf(buf, 255, "%%%d, %f", instr->r, instr->f); break; + case OVM_TYPE_F64: formatted = snprintf(buf, 255, "%%%d, %lf", instr->r, instr->d); break; } break; @@ -190,6 +190,8 @@ void ovm_disassemble(ovm_program_t *program, u32 instr_addr, bh_buffer *instr_te formatted = snprintf(buf, 255, "%%%d", instr->a); } break; + + default: break; } if (formatted > 0) { diff --git a/interpreter/src/vm/vm.c b/interpreter/src/vm/vm.c index 2de011a5..cde89285 100644 --- a/interpreter/src/vm/vm.c +++ b/interpreter/src/vm/vm.c @@ -32,10 +32,10 @@ static inline void ovm_print_val(ovm_value_t val) { switch (val.type) { - case OVM_TYPE_I32: printf("i32[%d]", val.i32); break; - case OVM_TYPE_I64: printf("i64[%ld]", val.i64); break; - case OVM_TYPE_F32: printf("f32[%f]", val.f32); break; - case OVM_TYPE_F64: printf("f64[%lf]", val.f64); break; + case OVM_TYPE_I32: printf("i32[%d]", val.i32); break; + case OVM_TYPE_I64: printf("i64[%lld]", val.i64); break; + case OVM_TYPE_F32: printf("f32[%f]", val.f32); break; + case OVM_TYPE_F64: printf("f64[%lf]", val.f64); break; } } diff --git a/interpreter/src/wasm/global.c b/interpreter/src/wasm/global.c index 81370eb7..f0f66c16 100644 --- a/interpreter/src/wasm/global.c +++ b/interpreter/src/wasm/global.c @@ -20,10 +20,10 @@ wasm_globaltype_t *wasm_global_type(const wasm_global_t *global) { } void wasm_global_get(const wasm_global_t *global, wasm_val_t *value) { - assert(("unimplemented", 0)); + assert(0 && "unimplemented"); } void wasm_global_set(wasm_global_t *global, const wasm_val_t *value) { - assert(("unimplemented", 0)); + assert(0 && "unimplemented"); } diff --git a/interpreter/src/wasm/instance.c b/interpreter/src/wasm/instance.c index 733acf5e..cfd60745 100644 --- a/interpreter/src/wasm/instance.c +++ b/interpreter/src/wasm/instance.c @@ -47,7 +47,7 @@ struct ovm_wasm_binding { (o).f64 = (w).of.f64; \ break; \ \ - default: assert(("invalid wasm value type for conversion", 0)); \ + default: assert(0 && "invalid wasm value type for conversion"); \ } } #define OVM_TO_WASM(o, w) { \ @@ -95,7 +95,7 @@ struct ovm_wasm_binding { \ default: \ printf("INVALID: %d\n", (o).type); \ - assert(("invalid ovm value type for conversion", 0)); \ + assert(0 && "invalid ovm value type for conversion"); \ } } static wasm_trap_t *wasm_to_ovm_func_call_binding(void *vbinding, const wasm_val_vec_t *args, wasm_val_vec_t *res) { @@ -174,7 +174,7 @@ static void prepare_instance(wasm_instance_t *instance, const wasm_extern_vec_t if (!wasm_functype_equals( wasm_externtype_as_functype(importtype->type), wasm_externtype_as_functype((wasm_externtype_t *) imports->data[i]->type))) { - assert(("MISMATCHED FUNCTION TYPE", 0)); + assert(0 && "MISMATCHED FUNCTION TYPE"); } wasm_func_t *func = wasm_extern_as_func(imports->data[i]); @@ -185,7 +185,7 @@ static void prepare_instance(wasm_instance_t *instance, const wasm_extern_vec_t binding->result_count = functype->results.size; binding->func = func; binding->param_buffer.data = bh_alloc(ovm_store->arena_allocator, sizeof(wasm_val_t) * binding->param_count); - binding->param_buffer.size = binding->param_count; + binding->param_buffer.size = binding->param_count; ovm_state_register_external_func(ovm_state, importtype->external_func_idx, ovm_to_wasm_func_call_binding, binding); break; @@ -237,8 +237,8 @@ static void prepare_instance(wasm_instance_t *instance, const wasm_extern_vec_t binding->program = ovm_program; binding->state = ovm_state; binding->instance = instance; - - wasm_func_t *func = wasm_func_new_with_env(instance->store, instance->module->functypes.data[i], + + wasm_func_t *func = wasm_func_new_with_env(instance->store, instance->module->functypes.data[i], wasm_to_ovm_func_call_binding, binding, NULL); bh_arr_push(instance->funcs, func); diff --git a/interpreter/src/wasm/module_parsing.h b/interpreter/src/wasm/module_parsing.h index 84965a57..d80a13d6 100644 --- a/interpreter/src/wasm/module_parsing.h +++ b/interpreter/src/wasm/module_parsing.h @@ -3,7 +3,7 @@ // // This file is not to be compile like normal. // It is instead included in wasm/module.c -// +// // Currently, this file has a lot of code that directly manipulates // the code builder object. I would like to move this into the API // for the code builder itself, to make it more portable and easy @@ -20,7 +20,7 @@ struct build_context { int func_table_arr_idx; int next_external_func_idx; - + debug_info_builder_t debug_builder; // This will be set/reset for every code (function) entry. @@ -52,21 +52,21 @@ static inline wasm_valkind_t parse_valtype(build_context *ctx) { case 0x7e: return WASM_I64; case 0x7d: return WASM_F32; case 0x7c: return WASM_F64; - case 0x7b: assert(("SIMD values are not currently supported", 0)); + case 0x7b: assert(0 && "SIMD values are not currently supported"); case 0x70: return WASM_FUNCREF; case 0x6F: return WASM_ANYREF; - default: assert(("Invalid valtype.", 0)); + default: assert(0 && "Invalid valtype."); } } static void parse_custom_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); unsigned int end_of_section = ctx->offset + section_size; struct wasm_custom_section_t cs; char name[256]; - unsigned int name_len = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int name_len = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); if (name_len < sizeof(name) - 1) { strncpy(name, &((char *) ctx->binary.data)[ctx->offset], name_len); name[name_len] = '\0'; @@ -81,23 +81,23 @@ static void parse_custom_section(build_context *ctx) { shput(ctx->module->custom_sections, name, cs); if (!strcmp(name, "ovm_debug_files")) { - debug_info_import_file_info(ctx->debug_builder.info, cs.data, cs.size); + debug_info_import_file_info(ctx->debug_builder.info, (u8 *)cs.data, cs.size); } if (!strcmp(name, "ovm_debug_funcs")) { - debug_info_import_func_info(ctx->debug_builder.info, cs.data, cs.size); + debug_info_import_func_info(ctx->debug_builder.info, (u8 *)cs.data, cs.size); } if (!strcmp(name, "ovm_debug_ops")) { - debug_info_builder_prepare(&ctx->debug_builder, cs.data); + debug_info_builder_prepare(&ctx->debug_builder, (u8 *)cs.data); } if (!strcmp(name, "ovm_debug_syms")) { - debug_info_import_sym_info(ctx->debug_builder.info, cs.data, cs.size); + debug_info_import_sym_info(ctx->debug_builder.info, (u8 *)cs.data, cs.size); } if (!strcmp(name, "ovm_debug_types")) { - debug_info_import_type_info(ctx->debug_builder.info, cs.data, cs.size); + debug_info_import_type_info(ctx->debug_builder.info, (u8 *)cs.data, cs.size); } } @@ -105,22 +105,22 @@ static void parse_custom_section(build_context *ctx) { } static void parse_type_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int type_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int type_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_functype_vec_new_uninitialized(&ctx->module->type_section, type_count); fori (i, 0, (int) type_count) { assert(CONSUME_BYTE(ctx) == 0x60); // @ReportError - unsigned int param_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int param_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_valtype_vec_t param_types; wasm_valtype_vec_new_uninitialized(¶m_types, param_count); fori (p, 0, (int) param_count) { param_types.data[p] = wasm_valtype_new(parse_valtype(ctx)); } - unsigned int result_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int result_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_valtype_vec_t result_types; wasm_valtype_vec_new_uninitialized(&result_types, result_count); fori (p, 0, (int) result_count) { @@ -136,9 +136,9 @@ static wasm_limits_t parse_limits(build_context *ctx) { bool maximum_present = CONSUME_BYTE(ctx) & 0x01; wasm_limits_t limits; - limits.min = uleb128_to_uint(ctx->binary.data, &ctx->offset); + limits.min = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); if (maximum_present) { - limits.max = uleb128_to_uint(ctx->binary.data, &ctx->offset); + limits.max = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); } else { limits.max = wasm_limits_max_default; } @@ -169,18 +169,18 @@ static wasm_globaltype_t *parse_globaltype(build_context *ctx) { } static void parse_import_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int import_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int import_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_importtype_vec_new_uninitialized(&ctx->module->imports, import_count); fori (i, 0, (int) import_count) { - unsigned int mod_name_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int mod_name_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_byte_vec_t module_name; wasm_byte_vec_new_uninitialized(&module_name, mod_name_size); fori (n, 0, mod_name_size) module_name.data[n] = CONSUME_BYTE(ctx); - unsigned int import_name_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int import_name_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_byte_vec_t import_name; wasm_byte_vec_new_uninitialized(&import_name, import_name_size); fori (n, 0, import_name_size) import_name.data[n] = CONSUME_BYTE(ctx); @@ -188,7 +188,7 @@ static void parse_import_section(build_context *ctx) { wasm_externtype_t *import_type = NULL; switch (CONSUME_BYTE(ctx)) { case 0x00: { - unsigned int type_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int type_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); import_type = wasm_functype_as_externtype(ctx->module->type_section.data[type_idx]); break; } @@ -215,20 +215,20 @@ static void parse_import_section(build_context *ctx) { } static void parse_func_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int func_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int func_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_functype_vec_new_uninitialized(&ctx->module->functypes, func_count); fori (i, 0, (int) func_count) { - unsigned int index = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int index = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ctx->module->functypes.data[i] = ctx->module->type_section.data[index]; } } static void parse_table_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int table_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int table_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_tabletype_vec_new_uninitialized(&ctx->module->tabletypes, table_count); @@ -238,8 +238,8 @@ static void parse_table_section(build_context *ctx) { } static void parse_memory_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int memory_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int memory_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_memorytype_vec_new_uninitialized(&ctx->module->memorytypes, memory_count); @@ -249,8 +249,8 @@ static void parse_memory_section(build_context *ctx) { } static void parse_global_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int global_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int global_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_globaltype_vec_new_uninitialized(&ctx->module->globaltypes, global_count); @@ -260,13 +260,13 @@ static void parse_global_section(build_context *ctx) { switch (CONSUME_BYTE(ctx)) { case 0x41: { gt->type.global.initial_value.kind = WASM_I32; - gt->type.global.initial_value.of.i32 = (i32) uleb128_to_uint(ctx->binary.data, &ctx->offset); + gt->type.global.initial_value.of.i32 = (i32) uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); break; } case 0x42: { gt->type.global.initial_value.kind = WASM_I64; - gt->type.global.initial_value.of.i64 = (i64) uleb128_to_uint(ctx->binary.data, &ctx->offset); + gt->type.global.initial_value.of.i64 = (i64) uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); break; } @@ -292,19 +292,19 @@ static void parse_global_section(build_context *ctx) { } static void parse_export_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int export_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int export_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_exporttype_vec_new_uninitialized(&ctx->module->exports, export_count); fori (i, 0, (int) export_count) { - unsigned int export_name_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int export_name_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_byte_vec_t export_name; wasm_byte_vec_new_uninitialized(&export_name, export_name_size); fori (n, 0, export_name_size) export_name.data[n] = CONSUME_BYTE(ctx); unsigned int type = CONSUME_BYTE(ctx); - unsigned int idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_externtype_t *export_type = NULL; @@ -325,13 +325,13 @@ static void parse_export_section(build_context *ctx) { } static void parse_start_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - ctx->module->start_func_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + ctx->module->start_func_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); } static void parse_elem_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int elem_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int elem_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); // This is going to be a mess... // I am only going to handle the case of a single, active, offset-0, @@ -343,23 +343,23 @@ static void parse_elem_section(build_context *ctx) { assert(CONSUME_BYTE(ctx) == 0x00); assert(CONSUME_BYTE(ctx) == 0x0B); - unsigned int entry_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int entry_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ctx->module->elem_count = entry_count; ctx->module->elem_entries = malloc(sizeof(unsigned int) * entry_count); fori (i, 0, (int) entry_count) { - ctx->module->elem_entries[i] = uleb128_to_uint(ctx->binary.data, &ctx->offset); + ctx->module->elem_entries[i] = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); } - ctx->func_table_arr_idx = ovm_program_register_static_ints(ctx->program, entry_count, ctx->module->elem_entries); + ctx->func_table_arr_idx = ovm_program_register_static_ints(ctx->program, entry_count, (int *)ctx->module->elem_entries); assert(ctx->module->tabletypes.size == 1); ctx->module->tabletypes.data[0]->type.table.static_arr = ctx->func_table_arr_idx; } static void parse_data_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int data_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int data_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); if (ctx->module->data_count_present) { assert(ctx->module->data_count == data_count); @@ -379,12 +379,12 @@ static void parse_data_section(build_context *ctx) { char data_type = CONSUME_BYTE(ctx); if (data_type == 0x00) { assert(CONSUME_BYTE(ctx) == 0x41); - data_entry.offset = uleb128_to_uint(ctx->binary.data, &ctx->offset); + data_entry.offset = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); data_entry.passive = false; assert(CONSUME_BYTE(ctx) == 0x0B); } - data_entry.length = uleb128_to_uint(ctx->binary.data, &ctx->offset); + data_entry.length = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); data_entry.data = bh_pointer_add(ctx->binary.data, ctx->offset); ctx->offset += data_entry.length; @@ -393,8 +393,8 @@ static void parse_data_section(build_context *ctx) { } static void parse_data_count_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int data_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int data_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ctx->module->data_count_present = true; ctx->module->data_count = data_count; @@ -409,7 +409,7 @@ static void parse_data_count_section(build_context *ctx) { static void parse_expression(build_context *ctx); static void parse_fc_instruction(build_context *ctx) { - int instr_num = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int instr_num = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); switch (instr_num) { case 0: ovm_code_builder_add_unop (&ctx->builder, OVM_TYPED_INSTR(OVMI_CVT_F32, OVM_TYPE_I32)); break; @@ -422,7 +422,7 @@ static void parse_fc_instruction(build_context *ctx) { case 7: ovm_code_builder_add_unop (&ctx->builder, OVM_TYPED_INSTR(OVMI_CVT_F64, OVM_TYPE_I64)); break; case 8: { - int dataidx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int dataidx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); assert(CONSUME_BYTE(ctx) == 0x00); ovm_code_builder_add_imm(&ctx->builder, OVM_TYPE_I32, &dataidx); @@ -445,19 +445,19 @@ static void parse_fc_instruction(build_context *ctx) { break; } - default: assert(("UNHANDLED FC INSTRUCTION", 0)); + default: assert(0 && "UNHANDLED FC INSTRUCTION"); } } static void parse_fe_instruction(build_context *ctx) { - int instr_num = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int instr_num = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); switch (instr_num) { #define LOAD_CASE(num, type) \ case num : { \ - int alignment = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ - int offset = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ + int alignment = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ + int offset = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ ovm_code_builder_add_atomic_load(&ctx->builder, type, offset); \ break; \ } @@ -474,8 +474,8 @@ static void parse_fe_instruction(build_context *ctx) { #define STORE_CASE(num, type) \ case num : { \ - int alignment = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ - int offset = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ + int alignment = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ + int offset = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ ovm_code_builder_add_atomic_store(&ctx->builder, type, offset); \ break; \ } @@ -492,8 +492,8 @@ static void parse_fe_instruction(build_context *ctx) { #define CMPXCHG_CASE(num, type) \ case num : { \ - int alignment = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ - int offset = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ + int alignment = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ + int offset = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ ovm_code_builder_add_cmpxchg(&ctx->builder, type, offset); \ break; \ } @@ -508,7 +508,7 @@ static void parse_fe_instruction(build_context *ctx) { #undef CMPXCHG_CASE - default: assert(("UNHANDLED ATOMIC INSTRUCTION... SORRY :/", 0)); + default: assert(0 && "UNHANDLED ATOMIC INSTRUCTION... SORRY :/"); } } @@ -564,7 +564,7 @@ static void parse_instruction(build_context *ctx) { } case 0x0C: { - int label_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int label_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); label_target_t target = ovm_code_builder_wasm_target_idx(&ctx->builder, label_idx); ovm_code_builder_add_branch(&ctx->builder, target.idx); @@ -572,7 +572,7 @@ static void parse_instruction(build_context *ctx) { } case 0x0D: { - int label_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int label_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); label_target_t target = ovm_code_builder_wasm_target_idx(&ctx->builder, label_idx); ovm_code_builder_add_cond_branch(&ctx->builder, target.idx, true, false); @@ -582,16 +582,16 @@ static void parse_instruction(build_context *ctx) { case 0x0E: { // Branch tables are the most complicated thing ever :/ - int entry_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int entry_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); int *entries = bh_alloc_array(bh_heap_allocator(), int, entry_count); fori (i, 0, entry_count) { - int label_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int label_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); label_target_t target = ovm_code_builder_wasm_target_idx(&ctx->builder, label_idx); entries[i] = target.idx; } - int default_entry_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int default_entry_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); label_target_t target = ovm_code_builder_wasm_target_idx(&ctx->builder, default_entry_idx); int default_entry = target.idx; @@ -605,7 +605,7 @@ static void parse_instruction(build_context *ctx) { } case 0x10: { - int func_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int func_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_functype_t *functype = wasm_module_index_functype(ctx->module, func_idx); int param_count = functype->type.func.params.size; @@ -615,8 +615,8 @@ static void parse_instruction(build_context *ctx) { } case 0x11: { - int type_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); - int table_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int type_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + int table_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); assert(table_idx == 0); wasm_functype_t *functype = ctx->module->type_section.data[type_idx]; @@ -633,39 +633,39 @@ static void parse_instruction(build_context *ctx) { case 0x1B: assert(0); case 0x20: { - int local_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int local_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ovm_code_builder_add_local_get(&ctx->builder, local_idx); break; } case 0x21: { - int local_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int local_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ovm_code_builder_add_local_set(&ctx->builder, local_idx); break; } case 0x22: { - int local_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int local_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ovm_code_builder_add_local_tee(&ctx->builder, local_idx); break; } case 0x23: { - int global_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int global_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ovm_code_builder_add_register_get(&ctx->builder, global_idx); break; } case 0x24: { - int global_idx = uleb128_to_uint(ctx->binary.data, &ctx->offset); + int global_idx = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ovm_code_builder_add_register_set(&ctx->builder, global_idx); break; } #define LOAD_CASE(num, type, convert, convert_op, convert_type) \ case num : { \ - int alignment = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ - int offset = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ + int alignment = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ + int offset = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ ovm_code_builder_add_load(&ctx->builder, type, offset); \ if (convert) ovm_code_builder_add_unop(&ctx->builder, OVM_TYPED_INSTR(convert_op, convert_type)); \ break; \ @@ -691,8 +691,8 @@ static void parse_instruction(build_context *ctx) { #define STORE_CASE(num, type) \ case num : { \ - int alignment = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ - int offset = uleb128_to_uint(ctx->binary.data, &ctx->offset); \ + int alignment = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ + int offset = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); \ ovm_code_builder_add_store(&ctx->builder, type, offset); \ break; \ } @@ -723,7 +723,7 @@ static void parse_instruction(build_context *ctx) { } case 0x41: { - i64 value = leb128_to_int(ctx->binary.data, &ctx->offset); + i64 value = leb128_to_int((u8 *)ctx->binary.data, (i32 *)&ctx->offset); // NOTE: This assumes a little-endian CPU as the address is assumes // to be the least significant byte. @@ -732,7 +732,7 @@ static void parse_instruction(build_context *ctx) { } case 0x42: { - i64 value = leb128_to_int(ctx->binary.data, &ctx->offset); + i64 value = leb128_to_int((u8 *)ctx->binary.data, (i32 *)&ctx->offset); ovm_code_builder_add_imm(&ctx->builder, OVM_TYPE_I64, &value); break; } @@ -901,7 +901,7 @@ static void parse_instruction(build_context *ctx) { case 0xFC: parse_fc_instruction(ctx); break; case 0xFE: parse_fe_instruction(ctx); break; - default: assert(("UNHANDLED INSTRUCTION", 0)); + default: assert(0 && "UNHANDLED INSTRUCTION"); } } @@ -912,22 +912,22 @@ static void parse_expression(build_context *ctx) { } static void parse_code_section(build_context *ctx) { - unsigned int section_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int code_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int section_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int code_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); assert(ctx->module->functypes.size == code_count); ctx->module->memory_init_external_idx = ctx->next_external_func_idx++; - + // HACK HACK HACK THIS IS SUCH A BAD WAY OF DOING THIS ctx->module->memory_init_idx = bh_arr_length(ctx->program->funcs) + code_count; fori (i, 0, (int) code_count) { - unsigned int code_size = uleb128_to_uint(ctx->binary.data, &ctx->offset); - unsigned int local_sections_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int code_size = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); + unsigned int local_sections_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); unsigned int total_locals = 0; fori (j, 0, (int) local_sections_count) { - unsigned int local_count = uleb128_to_uint(ctx->binary.data, &ctx->offset); + unsigned int local_count = uleb128_to_uint((u8 *)ctx->binary.data, (i32 *)&ctx->offset); wasm_valkind_t valtype = parse_valtype(ctx); total_locals += local_count; @@ -976,6 +976,6 @@ static void parse_section(build_context *ctx) { case WASM_CODE_SECTION: parse_code_section(ctx); break; case WASM_DATA_SECTION: parse_data_section(ctx); break; case WASM_DATAC_SECTION: parse_data_count_section(ctx); break; - default: assert(("bad section number", 0)); break; + default: assert(0 && "bad section number"); break; } } diff --git a/shared/lib/darwin_arm64/lib/libovmwasm.a b/shared/lib/darwin_arm64/lib/libovmwasm.a new file mode 100644 index 00000000..2d08d29d Binary files /dev/null and b/shared/lib/darwin_arm64/lib/libovmwasm.a differ