| author | |
| committer | |
| log | ef3a746da1a85a8b4a653cb78e0464c71d35b64e |
| tree | 1399f8c2a1d523788b85c28e4230729b7d1380e3 |
| parent | 4f742c4cfc3c3134a0d6ebfdfc354286ae97b2c1 |
| parent | 542423915466c0e20b0947f745a1de276fbd8b03 |
| signature |
dev: fix llvm backend checks12 files changed, 30 insertions(+), 12 deletions(-)
src/Compilation.zig+1-2| ... | @@ -1729,7 +1729,6 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil | ... | @@ -1729,7 +1729,6 @@ pub fn create(gpa: Allocator, arena: Allocator, options: CreateOptions) !*Compil |
| 1729 | comp.emit_llvm_ir != null or | 1729 | comp.emit_llvm_ir != null or |
| 1730 | comp.emit_llvm_bc != null)) | 1730 | comp.emit_llvm_bc != null)) |
| 1731 | { | 1731 | { |
| 1732 | dev.check(.llvm_backend); | ||
| 1733 | if (opt_zcu) |zcu| zcu.llvm_object = try LlvmObject.create(arena, comp); | 1732 | if (opt_zcu) |zcu| zcu.llvm_object = try LlvmObject.create(arena, comp); |
| 1734 | } | 1733 | } |
| 1735 | 1734 | ||
| ... | @@ -2704,7 +2703,7 @@ pub fn emitLlvmObject( | ... | @@ -2704,7 +2703,7 @@ pub fn emitLlvmObject( |
| 2704 | arena: Allocator, | 2703 | arena: Allocator, |
| 2705 | default_emit: Emit, | 2704 | default_emit: Emit, |
| 2706 | bin_emit_loc: ?EmitLoc, | 2705 | bin_emit_loc: ?EmitLoc, |
| 2707 | llvm_object: *LlvmObject, | 2706 | llvm_object: LlvmObject.Ptr, |
| 2708 | prog_node: std.Progress.Node, | 2707 | prog_node: std.Progress.Node, |
| 2709 | ) !void { | 2708 | ) !void { |
| 2710 | const sub_prog_node = prog_node.start("LLVM Emit Object", 0); | 2709 | const sub_prog_node = prog_node.start("LLVM Emit Object", 0); |
src/Zcu.zig+1-1| ... | @@ -58,7 +58,7 @@ comp: *Compilation, | ... | @@ -58,7 +58,7 @@ comp: *Compilation, |
| 58 | /// Usually, the LlvmObject is managed by linker code, however, in the case | 58 | /// Usually, the LlvmObject is managed by linker code, however, in the case |
| 59 | /// that -fno-emit-bin is specified, the linker code never executes, so we | 59 | /// that -fno-emit-bin is specified, the linker code never executes, so we |
| 60 | /// store the LlvmObject here. | 60 | /// store the LlvmObject here. |
| 61 | llvm_object: if (dev.env.supports(.llvm_backend)) ?*LlvmObject else ?noreturn, | 61 | llvm_object: ?LlvmObject.Ptr, |
| 62 | 62 | ||
| 63 | /// Pointer to externally managed resource. | 63 | /// Pointer to externally managed resource. |
| 64 | root_mod: *Package.Module, | 64 | root_mod: *Package.Module, |
src/codegen/llvm.zig+5-1| ... | @@ -26,6 +26,7 @@ const wasm_c_abi = @import("../arch/wasm/abi.zig"); | ... | @@ -26,6 +26,7 @@ const wasm_c_abi = @import("../arch/wasm/abi.zig"); |
| 26 | const aarch64_c_abi = @import("../arch/aarch64/abi.zig"); | 26 | const aarch64_c_abi = @import("../arch/aarch64/abi.zig"); |
| 27 | const arm_c_abi = @import("../arch/arm/abi.zig"); | 27 | const arm_c_abi = @import("../arch/arm/abi.zig"); |
| 28 | const riscv_c_abi = @import("../arch/riscv64/abi.zig"); | 28 | const riscv_c_abi = @import("../arch/riscv64/abi.zig"); |
| 29 | const dev = @import("../dev.zig"); | ||
| 29 | 30 | ||
| 30 | const target_util = @import("../target.zig"); | 31 | const target_util = @import("../target.zig"); |
| 31 | const libcFloatPrefix = target_util.libcFloatPrefix; | 32 | const libcFloatPrefix = target_util.libcFloatPrefix; |
| ... | @@ -865,9 +866,12 @@ pub const Object = struct { | ... | @@ -865,9 +866,12 @@ pub const Object = struct { |
| 865 | field_index: u32, | 866 | field_index: u32, |
| 866 | }; | 867 | }; |
| 867 | 868 | ||
| 869 | pub const Ptr = if (dev.env.supports(.llvm_backend)) *Object else noreturn; | ||
| 870 | |||
| 868 | pub const TypeMap = std.AutoHashMapUnmanaged(InternPool.Index, Builder.Type); | 871 | pub const TypeMap = std.AutoHashMapUnmanaged(InternPool.Index, Builder.Type); |
| 869 | 872 | ||
| 870 | pub fn create(arena: Allocator, comp: *Compilation) !*Object { | 873 | pub fn create(arena: Allocator, comp: *Compilation) !Ptr { |
| 874 | dev.check(.llvm_backend); | ||
| 871 | const gpa = comp.gpa; | 875 | const gpa = comp.gpa; |
| 872 | const target = comp.root_mod.resolved_target.result; | 876 | const target = comp.root_mod.resolved_target.result; |
| 873 | const llvm_target_triple = try targetTriple(arena, target); | 877 | const llvm_target_triple = try targetTriple(arena, target); |
src/dev.zig-1| ... | @@ -23,7 +23,6 @@ pub const Env = enum { | ... | @@ -23,7 +23,6 @@ pub const Env = enum { |
| 23 | sema, | 23 | sema, |
| 24 | 24 | ||
| 25 | /// - sema | 25 | /// - sema |
| 26 | /// - jit command on x86_64-linux host | ||
| 27 | /// - `zig build-* -fno-llvm -fno-lld -target x86_64-linux` | 26 | /// - `zig build-* -fno-llvm -fno-lld -target x86_64-linux` |
| 28 | @"x86_64-linux", | 27 | @"x86_64-linux", |
| 29 | 28 |
src/link.zig+1-1| ... | @@ -968,7 +968,7 @@ pub const File = struct { | ... | @@ -968,7 +968,7 @@ pub const File = struct { |
| 968 | pub fn emitLlvmObject( | 968 | pub fn emitLlvmObject( |
| 969 | base: File, | 969 | base: File, |
| 970 | arena: Allocator, | 970 | arena: Allocator, |
| 971 | llvm_object: *LlvmObject, | 971 | llvm_object: LlvmObject.Ptr, |
| 972 | prog_node: std.Progress.Node, | 972 | prog_node: std.Progress.Node, |
| 973 | ) !void { | 973 | ) !void { |
| 974 | return base.comp.emitLlvmObject(arena, base.emit, .{ | 974 | return base.comp.emitLlvmObject(arena, base.emit, .{ |
src/link/Coff.zig+2-1| ... | @@ -4,7 +4,7 @@ | ... | @@ -4,7 +4,7 @@ |
| 4 | //! LLD is also the default linker for LLVM. | 4 | //! LLD is also the default linker for LLVM. |
| 5 | 5 | ||
| 6 | /// If this is not null, an object file is created by LLVM and emitted to zcu_object_sub_path. | 6 | /// If this is not null, an object file is created by LLVM and emitted to zcu_object_sub_path. |
| 7 | llvm_object: ?*LlvmObject = null, | 7 | llvm_object: ?LlvmObject.Ptr = null, |
| 8 | 8 | ||
| 9 | base: link.File, | 9 | base: link.File, |
| 10 | image_base: u64, | 10 | image_base: u64, |
| ... | @@ -2765,6 +2765,7 @@ const StringTable = @import("StringTable.zig"); | ... | @@ -2765,6 +2765,7 @@ const StringTable = @import("StringTable.zig"); |
| 2765 | const Type = @import("../Type.zig"); | 2765 | const Type = @import("../Type.zig"); |
| 2766 | const Value = @import("../Value.zig"); | 2766 | const Value = @import("../Value.zig"); |
| 2767 | const AnalUnit = InternPool.AnalUnit; | 2767 | const AnalUnit = InternPool.AnalUnit; |
| 2768 | const dev = @import("../dev.zig"); | ||
| 2768 | 2769 | ||
| 2769 | pub const base_tag: link.File.Tag = .coff; | 2770 | pub const base_tag: link.File.Tag = .coff; |
| 2770 | 2771 |
src/link/Elf.zig+1-1| ... | @@ -30,7 +30,7 @@ entry_name: ?[]const u8, | ... | @@ -30,7 +30,7 @@ entry_name: ?[]const u8, |
| 30 | ptr_width: PtrWidth, | 30 | ptr_width: PtrWidth, |
| 31 | 31 | ||
| 32 | /// If this is not null, an object file is created by LLVM and emitted to zcu_object_sub_path. | 32 | /// If this is not null, an object file is created by LLVM and emitted to zcu_object_sub_path. |
| 33 | llvm_object: ?*LlvmObject = null, | 33 | llvm_object: ?LlvmObject.Ptr = null, |
| 34 | 34 | ||
| 35 | /// A list of all input files. | 35 | /// A list of all input files. |
| 36 | /// Index of each input file also encodes the priority or precedence of one input file | 36 | /// Index of each input file also encodes the priority or precedence of one input file |
src/link/Elf/Atom.zig+12| ... | @@ -1113,6 +1113,7 @@ const x86_64 = struct { | ... | @@ -1113,6 +1113,7 @@ const x86_64 = struct { |
| 1113 | code: ?[]const u8, | 1113 | code: ?[]const u8, |
| 1114 | it: *RelocsIterator, | 1114 | it: *RelocsIterator, |
| 1115 | ) !void { | 1115 | ) !void { |
| 1116 | dev.check(.x86_64_backend); | ||
| 1116 | const is_static = elf_file.base.isStatic(); | 1117 | const is_static = elf_file.base.isStatic(); |
| 1117 | const is_dyn_lib = elf_file.isEffectivelyDynLib(); | 1118 | const is_dyn_lib = elf_file.isEffectivelyDynLib(); |
| 1118 | 1119 | ||
| ... | @@ -1235,6 +1236,7 @@ const x86_64 = struct { | ... | @@ -1235,6 +1236,7 @@ const x86_64 = struct { |
| 1235 | code: []u8, | 1236 | code: []u8, |
| 1236 | stream: anytype, | 1237 | stream: anytype, |
| 1237 | ) (error{ InvalidInstruction, CannotEncode } || RelocError)!void { | 1238 | ) (error{ InvalidInstruction, CannotEncode } || RelocError)!void { |
| 1239 | dev.check(.x86_64_backend); | ||
| 1238 | const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type()); | 1240 | const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type()); |
| 1239 | const r_offset = std.math.cast(usize, rel.r_offset) orelse return error.Overflow; | 1241 | const r_offset = std.math.cast(usize, rel.r_offset) orelse return error.Overflow; |
| 1240 | 1242 | ||
| ... | @@ -1380,6 +1382,7 @@ const x86_64 = struct { | ... | @@ -1380,6 +1382,7 @@ const x86_64 = struct { |
| 1380 | code: []u8, | 1382 | code: []u8, |
| 1381 | stream: anytype, | 1383 | stream: anytype, |
| 1382 | ) !void { | 1384 | ) !void { |
| 1385 | dev.check(.x86_64_backend); | ||
| 1383 | _ = code; | 1386 | _ = code; |
| 1384 | _ = it; | 1387 | _ = it; |
| 1385 | const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type()); | 1388 | const r_type: elf.R_X86_64 = @enumFromInt(rel.r_type()); |
| ... | @@ -1420,6 +1423,7 @@ const x86_64 = struct { | ... | @@ -1420,6 +1423,7 @@ const x86_64 = struct { |
| 1420 | } | 1423 | } |
| 1421 | 1424 | ||
| 1422 | fn relaxGotpcrelx(code: []u8) !void { | 1425 | fn relaxGotpcrelx(code: []u8) !void { |
| 1426 | dev.check(.x86_64_backend); | ||
| 1423 | const old_inst = disassemble(code) orelse return error.RelaxFailure; | 1427 | const old_inst = disassemble(code) orelse return error.RelaxFailure; |
| 1424 | const inst = switch (old_inst.encoding.mnemonic) { | 1428 | const inst = switch (old_inst.encoding.mnemonic) { |
| 1425 | .call => try Instruction.new(old_inst.prefix, .call, &.{ | 1429 | .call => try Instruction.new(old_inst.prefix, .call, &.{ |
| ... | @@ -1438,6 +1442,7 @@ const x86_64 = struct { | ... | @@ -1438,6 +1442,7 @@ const x86_64 = struct { |
| 1438 | } | 1442 | } |
| 1439 | 1443 | ||
| 1440 | fn relaxRexGotpcrelx(code: []u8) !void { | 1444 | fn relaxRexGotpcrelx(code: []u8) !void { |
| 1445 | dev.check(.x86_64_backend); | ||
| 1441 | const old_inst = disassemble(code) orelse return error.RelaxFailure; | 1446 | const old_inst = disassemble(code) orelse return error.RelaxFailure; |
| 1442 | switch (old_inst.encoding.mnemonic) { | 1447 | switch (old_inst.encoding.mnemonic) { |
| 1443 | .mov => { | 1448 | .mov => { |
| ... | @@ -1456,6 +1461,7 @@ const x86_64 = struct { | ... | @@ -1456,6 +1461,7 @@ const x86_64 = struct { |
| 1456 | elf_file: *Elf, | 1461 | elf_file: *Elf, |
| 1457 | stream: anytype, | 1462 | stream: anytype, |
| 1458 | ) !void { | 1463 | ) !void { |
| 1464 | dev.check(.x86_64_backend); | ||
| 1459 | assert(rels.len == 2); | 1465 | assert(rels.len == 2); |
| 1460 | const writer = stream.writer(); | 1466 | const writer = stream.writer(); |
| 1461 | const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type()); | 1467 | const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type()); |
| ... | @@ -1495,6 +1501,7 @@ const x86_64 = struct { | ... | @@ -1495,6 +1501,7 @@ const x86_64 = struct { |
| 1495 | elf_file: *Elf, | 1501 | elf_file: *Elf, |
| 1496 | stream: anytype, | 1502 | stream: anytype, |
| 1497 | ) !void { | 1503 | ) !void { |
| 1504 | dev.check(.x86_64_backend); | ||
| 1498 | assert(rels.len == 2); | 1505 | assert(rels.len == 2); |
| 1499 | const writer = stream.writer(); | 1506 | const writer = stream.writer(); |
| 1500 | const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type()); | 1507 | const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type()); |
| ... | @@ -1543,6 +1550,7 @@ const x86_64 = struct { | ... | @@ -1543,6 +1550,7 @@ const x86_64 = struct { |
| 1543 | } | 1550 | } |
| 1544 | 1551 | ||
| 1545 | fn canRelaxGotTpOff(code: []const u8) bool { | 1552 | fn canRelaxGotTpOff(code: []const u8) bool { |
| 1553 | dev.check(.x86_64_backend); | ||
| 1546 | const old_inst = disassemble(code) orelse return false; | 1554 | const old_inst = disassemble(code) orelse return false; |
| 1547 | switch (old_inst.encoding.mnemonic) { | 1555 | switch (old_inst.encoding.mnemonic) { |
| 1548 | .mov => if (Instruction.new(old_inst.prefix, .mov, &.{ | 1556 | .mov => if (Instruction.new(old_inst.prefix, .mov, &.{ |
| ... | @@ -1558,6 +1566,7 @@ const x86_64 = struct { | ... | @@ -1558,6 +1566,7 @@ const x86_64 = struct { |
| 1558 | } | 1566 | } |
| 1559 | 1567 | ||
| 1560 | fn relaxGotTpOff(code: []u8) void { | 1568 | fn relaxGotTpOff(code: []u8) void { |
| 1569 | dev.check(.x86_64_backend); | ||
| 1561 | const old_inst = disassemble(code) orelse unreachable; | 1570 | const old_inst = disassemble(code) orelse unreachable; |
| 1562 | switch (old_inst.encoding.mnemonic) { | 1571 | switch (old_inst.encoding.mnemonic) { |
| 1563 | .mov => { | 1572 | .mov => { |
| ... | @@ -1574,6 +1583,7 @@ const x86_64 = struct { | ... | @@ -1574,6 +1583,7 @@ const x86_64 = struct { |
| 1574 | } | 1583 | } |
| 1575 | 1584 | ||
| 1576 | fn relaxGotPcTlsDesc(code: []u8) !void { | 1585 | fn relaxGotPcTlsDesc(code: []u8) !void { |
| 1586 | dev.check(.x86_64_backend); | ||
| 1577 | const old_inst = disassemble(code) orelse return error.RelaxFailure; | 1587 | const old_inst = disassemble(code) orelse return error.RelaxFailure; |
| 1578 | switch (old_inst.encoding.mnemonic) { | 1588 | switch (old_inst.encoding.mnemonic) { |
| 1579 | .lea => { | 1589 | .lea => { |
| ... | @@ -1596,6 +1606,7 @@ const x86_64 = struct { | ... | @@ -1596,6 +1606,7 @@ const x86_64 = struct { |
| 1596 | elf_file: *Elf, | 1606 | elf_file: *Elf, |
| 1597 | stream: anytype, | 1607 | stream: anytype, |
| 1598 | ) !void { | 1608 | ) !void { |
| 1609 | dev.check(.x86_64_backend); | ||
| 1599 | assert(rels.len == 2); | 1610 | assert(rels.len == 2); |
| 1600 | const writer = stream.writer(); | 1611 | const writer = stream.writer(); |
| 1601 | const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type()); | 1612 | const rel: elf.R_X86_64 = @enumFromInt(rels[1].r_type()); |
| ... | @@ -2312,3 +2323,4 @@ const File = @import("file.zig").File; | ... | @@ -2312,3 +2323,4 @@ const File = @import("file.zig").File; |
| 2312 | const Object = @import("Object.zig"); | 2323 | const Object = @import("Object.zig"); |
| 2313 | const Symbol = @import("Symbol.zig"); | 2324 | const Symbol = @import("Symbol.zig"); |
| 2314 | const Thunk = @import("thunks.zig").Thunk; | 2325 | const Thunk = @import("thunks.zig").Thunk; |
| 2326 | const dev = @import("../../dev.zig"); |
src/link/MachO.zig+2-2| ... | @@ -1,7 +1,7 @@ | ... | @@ -1,7 +1,7 @@ |
| 1 | base: link.File, | 1 | base: link.File, |
| 2 | 2 | ||
| 3 | /// If this is not null, an object file is created by LLVM and emitted to zcu_object_sub_path. | 3 | /// If this is not null, an object file is created by LLVM and emitted to zcu_object_sub_path. |
| 4 | llvm_object: ?*LlvmObject = null, | 4 | llvm_object: ?LlvmObject.Ptr = null, |
| 5 | 5 | ||
| 6 | /// Debug symbols bundle (or dSym). | 6 | /// Debug symbols bundle (or dSym). |
| 7 | d_sym: ?DebugSymbols = null, | 7 | d_sym: ?DebugSymbols = null, |
| ... | @@ -4510,7 +4510,6 @@ const dead_strip = @import("MachO/dead_strip.zig"); | ... | @@ -4510,7 +4510,6 @@ const dead_strip = @import("MachO/dead_strip.zig"); |
| 4510 | const eh_frame = @import("MachO/eh_frame.zig"); | 4510 | const eh_frame = @import("MachO/eh_frame.zig"); |
| 4511 | const fat = @import("MachO/fat.zig"); | 4511 | const fat = @import("MachO/fat.zig"); |
| 4512 | const link = @import("../link.zig"); | 4512 | const link = @import("../link.zig"); |
| 4513 | const llvm_backend = @import("../codegen/llvm.zig"); | ||
| 4514 | const load_commands = @import("MachO/load_commands.zig"); | 4513 | const load_commands = @import("MachO/load_commands.zig"); |
| 4515 | const relocatable = @import("MachO/relocatable.zig"); | 4514 | const relocatable = @import("MachO/relocatable.zig"); |
| 4516 | const tapi = @import("tapi.zig"); | 4515 | const tapi = @import("tapi.zig"); |
| ... | @@ -4562,6 +4561,7 @@ const UnwindInfo = @import("MachO/UnwindInfo.zig"); | ... | @@ -4562,6 +4561,7 @@ const UnwindInfo = @import("MachO/UnwindInfo.zig"); |
| 4562 | const WeakBind = bind.WeakBind; | 4561 | const WeakBind = bind.WeakBind; |
| 4563 | const ZigGotSection = synthetic.ZigGotSection; | 4562 | const ZigGotSection = synthetic.ZigGotSection; |
| 4564 | const ZigObject = @import("MachO/ZigObject.zig"); | 4563 | const ZigObject = @import("MachO/ZigObject.zig"); |
| 4564 | const dev = @import("../dev.zig"); | ||
| 4565 | 4565 | ||
| 4566 | pub const MachError = error{ | 4566 | pub const MachError = error{ |
| 4567 | /// Not enough permissions held to perform the requested kernel | 4567 | /// Not enough permissions held to perform the requested kernel |
src/link/MachO/Atom.zig+3| ... | @@ -897,6 +897,7 @@ fn resolveRelocInner( | ... | @@ -897,6 +897,7 @@ fn resolveRelocInner( |
| 897 | 897 | ||
| 898 | const x86_64 = struct { | 898 | const x86_64 = struct { |
| 899 | fn relaxGotLoad(self: Atom, code: []u8, rel: Relocation, macho_file: *MachO) ResolveError!void { | 899 | fn relaxGotLoad(self: Atom, code: []u8, rel: Relocation, macho_file: *MachO) ResolveError!void { |
| 900 | dev.check(.x86_64_backend); | ||
| 900 | const old_inst = disassemble(code) orelse return error.RelaxFail; | 901 | const old_inst = disassemble(code) orelse return error.RelaxFail; |
| 901 | switch (old_inst.encoding.mnemonic) { | 902 | switch (old_inst.encoding.mnemonic) { |
| 902 | .mov => { | 903 | .mov => { |
| ... | @@ -920,6 +921,7 @@ const x86_64 = struct { | ... | @@ -920,6 +921,7 @@ const x86_64 = struct { |
| 920 | } | 921 | } |
| 921 | 922 | ||
| 922 | fn relaxTlv(code: []u8) error{RelaxFail}!void { | 923 | fn relaxTlv(code: []u8) error{RelaxFail}!void { |
| 924 | dev.check(.x86_64_backend); | ||
| 923 | const old_inst = disassemble(code) orelse return error.RelaxFail; | 925 | const old_inst = disassemble(code) orelse return error.RelaxFail; |
| 924 | switch (old_inst.encoding.mnemonic) { | 926 | switch (old_inst.encoding.mnemonic) { |
| 925 | .mov => { | 927 | .mov => { |
| ... | @@ -1214,3 +1216,4 @@ const Relocation = @import("Relocation.zig"); | ... | @@ -1214,3 +1216,4 @@ const Relocation = @import("Relocation.zig"); |
| 1214 | const Symbol = @import("Symbol.zig"); | 1216 | const Symbol = @import("Symbol.zig"); |
| 1215 | const Thunk = @import("thunks.zig").Thunk; | 1217 | const Thunk = @import("thunks.zig").Thunk; |
| 1216 | const UnwindInfo = @import("UnwindInfo.zig"); | 1218 | const UnwindInfo = @import("UnwindInfo.zig"); |
| 1219 | const dev = @import("../../dev.zig"); |
src/link/NvPtx.zig+1-1| ... | @@ -23,7 +23,7 @@ const Liveness = @import("../Liveness.zig"); | ... | @@ -23,7 +23,7 @@ const Liveness = @import("../Liveness.zig"); |
| 23 | const LlvmObject = @import("../codegen/llvm.zig").Object; | 23 | const LlvmObject = @import("../codegen/llvm.zig").Object; |
| 24 | 24 | ||
| 25 | base: link.File, | 25 | base: link.File, |
| 26 | llvm_object: *LlvmObject, | 26 | llvm_object: LlvmObject.Ptr, |
| 27 | 27 | ||
| 28 | pub fn createEmpty( | 28 | pub fn createEmpty( |
| 29 | arena: Allocator, | 29 | arena: Allocator, |
src/link/Wasm.zig+1-1| ... | @@ -61,7 +61,7 @@ export_table: bool, | ... | @@ -61,7 +61,7 @@ export_table: bool, |
| 61 | /// Output name of the file | 61 | /// Output name of the file |
| 62 | name: []const u8, | 62 | name: []const u8, |
| 63 | /// If this is not null, an object file is created by LLVM and linked with LLD afterwards. | 63 | /// If this is not null, an object file is created by LLVM and linked with LLD afterwards. |
| 64 | llvm_object: ?*LlvmObject = null, | 64 | llvm_object: ?LlvmObject.Ptr = null, |
| 65 | /// The file index of a `ZigObject`. This will only contain a valid index when a zcu exists, | 65 | /// The file index of a `ZigObject`. This will only contain a valid index when a zcu exists, |
| 66 | /// and the chosen backend is the Wasm backend. | 66 | /// and the chosen backend is the Wasm backend. |
| 67 | zig_object_index: File.Index = .null, | 67 | zig_object_index: File.Index = .null, |