| author | |
| committer | |
| log | 247b638ccf8bfd5e0c4729935d230022726f97aa |
| tree | 8be0dcff1863b5252b9c305992c36f5299f3334f |
| parent | 6d951aff7e32b1b0252d341e66517a9a9ee98a2d |
| signature |
Also skip exporting non-function symbols when we're building a WASI command using the stage2 llvm backend.7 files changed, 17 insertions(+), 12 deletions(-)
lib/std/build.zig+2| ... | ... | @@ -2659,6 +2659,8 @@ pub const LibExeObjStep = struct { |
| 2659 | 2659 | try zig_args.append(bin_name); |
| 2660 | 2660 | try zig_args.append("--test-cmd"); |
| 2661 | 2661 | try zig_args.append("--dir=."); |
| 2662 | try zig_args.append("--test-cmd"); | |
| 2663 | try zig_args.append("--allow-unknown-exports"); // TODO: Remove when stage2 is default compiler | |
| 2662 | 2664 | try zig_args.append("--test-cmd-bin"); |
| 2663 | 2665 | } else { |
| 2664 | 2666 | try zig_args.append("--test-no-exec"); |
src/Compilation.zig+2-2| ... | ... | @@ -1882,9 +1882,9 @@ pub fn destroy(self: *Compilation) void { |
| 1882 | 1882 | self.astgen_wait_group.deinit(); |
| 1883 | 1883 | |
| 1884 | 1884 | for (self.export_symbol_names.items) |symbol_name| { |
| 1885 | self.gpa.free(symbol_name); | |
| 1885 | gpa.free(symbol_name); | |
| 1886 | 1886 | } |
| 1887 | self.export_symbol_names.deinit(self.gpa); | |
| 1887 | self.export_symbol_names.deinit(gpa); | |
| 1888 | 1888 | |
| 1889 | 1889 | // This destroys `self`. |
| 1890 | 1890 | self.arena_state.promote(gpa).deinit(); |
src/link/Wasm.zig+7| ... | ... | @@ -1256,8 +1256,15 @@ fn linkWithLLD(self: *Wasm, comp: *Compilation) !void { |
| 1256 | 1256 | try argv.append(try std.fmt.allocPrint(arena, "--export={s}", .{symbol_name})); |
| 1257 | 1257 | } |
| 1258 | 1258 | } else { |
| 1259 | const skip_export_non_fn = target.os.tag == .wasi and | |
| 1260 | self.base.options.wasi_exec_model == .command; | |
| 1259 | 1261 | for (module.decl_exports.values()) |exports| { |
| 1260 | 1262 | for (exports) |exprt| { |
| 1263 | if (skip_export_non_fn and exprt.exported_decl.ty.zigTypeTag() != .Fn) { | |
| 1264 | // skip exporting symbols when we're building a WASI command | |
| 1265 | // and the symbol is not a function | |
| 1266 | continue; | |
| 1267 | } | |
| 1261 | 1268 | const symbol_name = exprt.exported_decl.name; |
| 1262 | 1269 | const arg = try std.fmt.allocPrint(arena, "--export={s}", .{symbol_name}); |
| 1263 | 1270 | try argv.append(arg); |
src/stage1.zig+3-7| ... | ... | @@ -468,13 +468,9 @@ export fn stage2_fetch_file( |
| 468 | 468 | return contents.ptr; |
| 469 | 469 | } |
| 470 | 470 | |
| 471 | export fn stage2_append_symbol(stage1: *Module, name_ptr: ?[*:0]const u8) Error { | |
| 471 | export fn stage2_append_symbol(stage1: *Module, name_ptr: [*c]const u8, name_len: usize) Error { | |
| 472 | if (name_len == 0) return Error.None; | |
| 472 | 473 | const comp = @intToPtr(*Compilation, stage1.userdata); |
| 473 | ||
| 474 | if (name_ptr) |unwrapped_name| { | |
| 475 | const symbol_name = std.mem.sliceTo(unwrapped_name, 0); | |
| 476 | if (symbol_name.len == 0) return Error.None; | |
| 477 | comp.export_symbol_names.append(comp.gpa, symbol_name) catch return Error.OutOfMemory; | |
| 478 | } | |
| 474 | comp.export_symbol_names.append(comp.gpa, name_ptr[0..name_len]) catch return Error.OutOfMemory; | |
| 479 | 475 | return Error.None; |
| 480 | 476 | } |
src/stage1/codegen.cpp+1-1| ... | ... | @@ -9912,7 +9912,7 @@ void codegen_build_object(CodeGen *g) { |
| 9912 | 9912 | auto export_it = g->exported_symbol_names.entry_iterator(); |
| 9913 | 9913 | decltype(g->exported_symbol_names)::Entry *curr_entry = nullptr; |
| 9914 | 9914 | while ((curr_entry = export_it.next()) != nullptr) { |
| 9915 | if ((err = stage2_append_symbol(&g->stage1, buf_ptr(curr_entry->key)))) { | |
| 9915 | if ((err = stage2_append_symbol(&g->stage1, buf_ptr(curr_entry->key), buf_len(curr_entry->key)))) { | |
| 9916 | 9916 | fprintf(stderr, "Unable to export symbol '%s': %s\n", buf_ptr(curr_entry->key), err_str(err)); |
| 9917 | 9917 | } |
| 9918 | 9918 | } |
src/stage1/stage2.h+1-1| ... | ... | @@ -183,6 +183,6 @@ ZIG_EXTERN_C const char *stage2_add_link_lib(struct ZigStage1 *stage1, |
| 183 | 183 | const char *symbol_name_ptr, size_t symbol_name_len); |
| 184 | 184 | |
| 185 | 185 | // ABI warning |
| 186 | ZIG_EXTERN_C enum Error stage2_append_symbol(struct ZigStage1 *stage1, const char *name_ptr); | |
| 186 | ZIG_EXTERN_C enum Error stage2_append_symbol(struct ZigStage1 *stage1, const char *name_ptr, size_t name_len); | |
| 187 | 187 | |
| 188 | 188 | #endif |
src/stage1/zig0.cpp+1-1| ... | ... | @@ -555,7 +555,7 @@ struct Stage2SemVer stage2_version(void) { |
| 555 | 555 | return {ZIG_VERSION_MAJOR, ZIG_VERSION_MINOR, ZIG_VERSION_PATCH}; |
| 556 | 556 | } |
| 557 | 557 | |
| 558 | Error stage2_append_symbol(struct ZigStage1 *stage1, const char *name_ptr) | |
| 558 | Error stage2_append_symbol(struct ZigStage1 *stage1, const char *name_ptr, size_t name_len) | |
| 559 | 559 | { |
| 560 | 560 | return ErrorNone; |
| 561 | 561 | } |