| ... | @@ -410,7 +410,7 @@ pub fn openPath(allocator: Allocator, sub_path: []const u8, options: link.Option | ... | @@ -410,7 +410,7 @@ pub fn openPath(allocator: Allocator, sub_path: []const u8, options: link.Option |
| 410 | }, | 410 | }, |
| 411 | ); | 411 | ); |
| 412 | } else { | 412 | } else { |
| 413 | symbol.index = @as(u32, @intCast(wasm_bin.imported_globals_count + wasm_bin.wasm_globals.items.len)); | 413 | symbol.index = @intCast(wasm_bin.imported_globals_count + wasm_bin.wasm_globals.items.len); |
| 414 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); | 414 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); |
| 415 | const global = try wasm_bin.wasm_globals.addOne(allocator); | 415 | const global = try wasm_bin.wasm_globals.addOne(allocator); |
| 416 | global.* = .{ | 416 | global.* = .{ |
| ... | @@ -433,7 +433,7 @@ pub fn openPath(allocator: Allocator, sub_path: []const u8, options: link.Option | ... | @@ -433,7 +433,7 @@ pub fn openPath(allocator: Allocator, sub_path: []const u8, options: link.Option |
| 433 | }; | 433 | }; |
| 434 | if (options.output_mode == .Obj or options.import_table) { | 434 | if (options.output_mode == .Obj or options.import_table) { |
| 435 | symbol.setUndefined(true); | 435 | symbol.setUndefined(true); |
| 436 | symbol.index = @as(u32, @intCast(wasm_bin.imported_tables_count)); | 436 | symbol.index = @intCast(wasm_bin.imported_tables_count); |
| 437 | wasm_bin.imported_tables_count += 1; | 437 | wasm_bin.imported_tables_count += 1; |
| 438 | try wasm_bin.imports.put(allocator, loc, .{ | 438 | try wasm_bin.imports.put(allocator, loc, .{ |
| 439 | .module_name = try wasm_bin.string_table.put(allocator, wasm_bin.host_name), | 439 | .module_name = try wasm_bin.string_table.put(allocator, wasm_bin.host_name), |
| ... | @@ -467,16 +467,31 @@ pub fn openPath(allocator: Allocator, sub_path: []const u8, options: link.Option | ... | @@ -467,16 +467,31 @@ pub fn openPath(allocator: Allocator, sub_path: []const u8, options: link.Option |
| 467 | const loc = try wasm_bin.createSyntheticSymbol("__tls_base", .global); | 467 | const loc = try wasm_bin.createSyntheticSymbol("__tls_base", .global); |
| 468 | const symbol = loc.getSymbol(wasm_bin); | 468 | const symbol = loc.getSymbol(wasm_bin); |
| 469 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); | 469 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); |
| | 470 | symbol.index = @intCast(wasm_bin.imported_globals_count + wasm_bin.wasm_globals.items.len); |
| | 471 | try wasm_bin.wasm_globals.append(wasm_bin.base.allocator, .{ |
| | 472 | .global_type = .{ .valtype = .i32, .mutable = true }, |
| | 473 | .init = .{ .i32_const = undefined }, |
| | 474 | }); |
| 470 | } | 475 | } |
| 471 | { | 476 | { |
| 472 | const loc = try wasm_bin.createSyntheticSymbol("__tls_size", .global); | 477 | const loc = try wasm_bin.createSyntheticSymbol("__tls_size", .global); |
| 473 | const symbol = loc.getSymbol(wasm_bin); | 478 | const symbol = loc.getSymbol(wasm_bin); |
| 474 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); | 479 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); |
| | 480 | symbol.index = @intCast(wasm_bin.imported_globals_count + wasm_bin.wasm_globals.items.len); |
| | 481 | try wasm_bin.wasm_globals.append(wasm_bin.base.allocator, .{ |
| | 482 | .global_type = .{ .valtype = .i32, .mutable = false }, |
| | 483 | .init = .{ .i32_const = undefined }, |
| | 484 | }); |
| 475 | } | 485 | } |
| 476 | { | 486 | { |
| 477 | const loc = try wasm_bin.createSyntheticSymbol("__tls_align", .global); | 487 | const loc = try wasm_bin.createSyntheticSymbol("__tls_align", .global); |
| 478 | const symbol = loc.getSymbol(wasm_bin); | 488 | const symbol = loc.getSymbol(wasm_bin); |
| 479 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); | 489 | symbol.setFlag(.WASM_SYM_VISIBILITY_HIDDEN); |
| | 490 | symbol.index = @intCast(wasm_bin.imported_globals_count + wasm_bin.wasm_globals.items.len); |
| | 491 | try wasm_bin.wasm_globals.append(wasm_bin.base.allocator, .{ |
| | 492 | .global_type = .{ .valtype = .i32, .mutable = false }, |
| | 493 | .init = .{ .i32_const = undefined }, |
| | 494 | }); |
| 480 | } | 495 | } |
| 481 | { | 496 | { |
| 482 | const loc = try wasm_bin.createSyntheticSymbol("__wasm_init_tls", .function); | 497 | const loc = try wasm_bin.createSyntheticSymbol("__wasm_init_tls", .function); |
| ... | @@ -2757,27 +2772,18 @@ fn setupMemory(wasm: *Wasm) !void { | ... | @@ -2757,27 +2772,18 @@ fn setupMemory(wasm: *Wasm) !void { |
| 2757 | if (mem.eql(u8, entry.key_ptr.*, ".tdata")) { | 2772 | if (mem.eql(u8, entry.key_ptr.*, ".tdata")) { |
| 2758 | if (wasm.findGlobalSymbol("__tls_size")) |loc| { | 2773 | if (wasm.findGlobalSymbol("__tls_size")) |loc| { |
| 2759 | const sym = loc.getSymbol(wasm); | 2774 | const sym = loc.getSymbol(wasm); |
| 2760 | sym.index = @as(u32, @intCast(wasm.wasm_globals.items.len)) + wasm.imported_globals_count; | 2775 | wasm.wasm_globals.items[sym.index - wasm.imported_globals_count].init.i32_const = @intCast(segment.size); |
| 2761 | try wasm.wasm_globals.append(wasm.base.allocator, .{ | | |
| 2762 | .global_type = .{ .valtype = .i32, .mutable = false }, | | |
| 2763 | .init = .{ .i32_const = @as(i32, @intCast(segment.size)) }, | | |
| 2764 | }); | | |
| 2765 | } | 2776 | } |
| 2766 | if (wasm.findGlobalSymbol("__tls_align")) |loc| { | 2777 | if (wasm.findGlobalSymbol("__tls_align")) |loc| { |
| 2767 | const sym = loc.getSymbol(wasm); | 2778 | const sym = loc.getSymbol(wasm); |
| 2768 | sym.index = @as(u32, @intCast(wasm.wasm_globals.items.len)) + wasm.imported_globals_count; | 2779 | wasm.wasm_globals.items[sym.index - wasm.imported_globals_count].init.i32_const = @intCast(segment.alignment); |
| 2769 | try wasm.wasm_globals.append(wasm.base.allocator, .{ | | |
| 2770 | .global_type = .{ .valtype = .i32, .mutable = false }, | | |
| 2771 | .init = .{ .i32_const = @as(i32, @intCast(segment.alignment)) }, | | |
| 2772 | }); | | |
| 2773 | } | 2780 | } |
| 2774 | if (wasm.findGlobalSymbol("__tls_base")) |loc| { | 2781 | if (wasm.findGlobalSymbol("__tls_base")) |loc| { |
| 2775 | const sym = loc.getSymbol(wasm); | 2782 | const sym = loc.getSymbol(wasm); |
| 2776 | sym.index = @as(u32, @intCast(wasm.wasm_globals.items.len)) + wasm.imported_globals_count; | 2783 | wasm.wasm_globals.items[sym.index - wasm.imported_globals_count].init.i32_const = if (wasm.base.options.shared_memory) |
| 2777 | try wasm.wasm_globals.append(wasm.base.allocator, .{ | 2784 | @as(i32, 0) |
| 2778 | .global_type = .{ .valtype = .i32, .mutable = wasm.base.options.shared_memory }, | 2785 | else |
| 2779 | .init = .{ .i32_const = if (wasm.base.options.shared_memory) @as(u32, 0) else @as(i32, @intCast(memory_ptr)) }, | 2786 | @as(i32, @intCast(memory_ptr)); |
| 2780 | }); | | |
| 2781 | } | 2787 | } |
| 2782 | } | 2788 | } |
| 2783 | | 2789 | |