interpreter warnings
authorJudah Caruso <judah@tuta.io>
Fri, 8 Dec 2023 20:58:40 +0000 (13:58 -0700)
committerJudah Caruso <judah@tuta.io>
Wed, 13 Dec 2023 16:11:32 +0000 (09:11 -0700)
12 files changed:
interpreter/src/debug/debug_host.c
interpreter/src/debug/debug_info.c
interpreter/src/debug/debug_info_builder.c
interpreter/src/debug/debug_runtime_values.c
interpreter/src/debug/debug_thread.c
interpreter/src/vm/code_builder.c
interpreter/src/vm/disasm.c
interpreter/src/vm/vm.c
interpreter/src/wasm/global.c
interpreter/src/wasm/instance.c
interpreter/src/wasm/module_parsing.h
shared/lib/darwin_arm64/lib/libovmwasm.a [new file with mode: 0644]

index 82b0c877a08104c98e1043a23b7b72203ac25be1..83312106f9be20fbda24b7c3f145d2a4e33903cb 100644 (file)
@@ -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;
index 6b332c1c7011c9e196560c7dcbbdb4f151783820..1417d93bcff670bca113110d7eecd81d769c6b6c 100644 (file)
@@ -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);
index 13c33dfa235218c8a6f536f471787231d75a6e6e..8aa04da89796c23dd27358f280fcfbf08d2c773c 100644 (file)
@@ -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);
index 88f05765cfc25c023a7444fbfda231bcd89a7a8d..ea2fe2a65c9de5fe8dd6a630b9e648d2ebf12dd6 100644 (file)
@@ -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);
 
index 89a60d66fe77650ec1171d026bac7172168eeee6..7e6fb2b3b390d8010d7f7d929c41157c0f85381a 100644 (file)
@@ -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);
 
index 20c99658eaa5e2095297cbb6a2e50891de8472bf..e770c486da7bd09b81d065a9e7ee3e2917d44452 100644 (file)
@@ -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);
index 70f29c66fc12f0d9d75d5a245a3d39ca7308783e..531d4bd8b02860c87d074854b1930f08cda353bc 100644 (file)
@@ -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) {
index 2de011a504101f239eb64b04de7c9f55a30cc70a..cde89285c2b678b8a84bbbb40bf12455601dce3e 100644 (file)
 
 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;
     }
 }
 
index 81370eb75d428c47f33786b68352db999c43ff03..f0f66c16590d3b94978fa2a56e1c1352c1c51758 100644 (file)
@@ -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");
 }
 
index 733acf5e195cfed09e17cca6658a67eff1c5addb..cfd6074546aa411c3c0ae628fc7d632927f20882 100644 (file)
@@ -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);
index 84965a57eca4b7dcc52bf74d62dca4aa7f56c78d..d80a13d61092c150eed3166fca13814c9334535d 100644 (file)
@@ -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(&param_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 (file)
index 0000000..2d08d29
Binary files /dev/null and b/shared/lib/darwin_arm64/lib/libovmwasm.a differ