diff --git a/src/Compilation.zig b/src/Compilation.zig index 8fb16e52c566de5e85771da874c3c723b3c1d411..b062f41ae84d02fe38bb66c454c7eb2f883ba49f 100644 --- a/src/Compilation.zig +++ b/src/Compilation.zig @@ -2912,12 +2912,18 @@ pub fn update(comp: *Compilation, main_progress_node: std.Progress.Node) UpdateE // we also want it around during `flush`. if (comp.bin_file) |lf| { // mirrors logic in `Compilation.flush`: + // Always: linker flush + var initial_estimated_total: usize = 1; + const llvm = if (comp.zcu) |zcu| zcu.llvm_object != null else false; // For llvm: "LLVM Emit Object" and "Parse Object" with the zcu object - // Always: flush of the linker - const initial_estimated_total: usize = if (comp.zcu) |zcu| - if (zcu.llvm_object) |_| 3 else 1 - else - 1; + if (llvm) { + initial_estimated_total += 2; + } + // Prelink + if (!lf.post_prelink or llvm) { + initial_estimated_total += 1; + } + comp.link_prog_node = main_progress_node.start("Linking", initial_estimated_total); lf.startProgress(comp.link_prog_node); } diff --git a/src/link.zig b/src/link.zig index f5489c19d4454110a6fbdcc3c132dd34d2dcf996..ccba1ea2df3ed1c561022de0b170001ab9bcb7ed 100644 --- a/src/link.zig +++ b/src/link.zig @@ -1243,7 +1243,7 @@ pub const File = struct { dev.check(tag.devFeature()); try @as(*tag.Type(), @fieldParentPtr("base", base)).prelink(base.comp.link_prog_node); }, - else => {}, + else => base.comp.link_prog_node.completeOne(), } base.post_prelink = true; diff --git a/src/link/Coff.zig b/src/link/Coff.zig index aff6d72fb3d956490ce1c0dc766fce9f1b192cb5..4ba00de0ee41b2f559cd44402fe851aa7cebe7bb 100644 --- a/src/link/Coff.zig +++ b/src/link/Coff.zig @@ -5370,7 +5370,9 @@ fn loadDll(coff: *Coff, path: std.Build.Cache.Path, fr: *Io.File.Reader) LoadInp } pub fn prelink(coff: *Coff, prog_node: std.Progress.Node) link.Error!void { - _ = prog_node; + const sub_prog_node = prog_node.start("COFF Prelink", 0); + defer sub_prog_node.end(); + const base = coff.base; const comp = base.comp; diff --git a/src/link/Elf2.zig b/src/link/Elf2.zig index 62d152f057822e27cf1cce1eaa5cf0aa176a706d..706b1387b31d5533ceb9a670984f1fbaf4337276 100644 --- a/src/link/Elf2.zig +++ b/src/link/Elf2.zig @@ -5749,7 +5749,9 @@ fn updateInitFiniArraySectionSize( } pub fn prelink(elf: *Elf, prog_node: std.Progress.Node) link.Error!void { - _ = prog_node; + const sub_prog_node = prog_node.start("ELF Prelink", 0); + defer sub_prog_node.end(); + const diags = &elf.base.comp.link_diags; elf.prelinkInner() catch |err| switch (err) { error.MappedFileIo => return diags.fail("failed to write output file: {t}", .{elf.mf.io_err.?}), diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 1894440ee1378807867cee8e4150c09161994f0e..40c3e412b4ac88c019cf6885e2d9e4bb1e2b329e 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -3398,7 +3398,6 @@ pub fn prelink(wasm: *Wasm, prog_node: std.Progress.Node) link.Error!void { const tracy = trace(@src()); defer tracy.end(); - prog_node.increaseEstimatedTotalItems(1); const sub_prog_node = prog_node.start("Wasm Prelink", 0); defer sub_prog_node.end();