authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-04-12 20:03:10+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-04-15 01:30:34+02:00
logc0378e85b62486ed95c3051c732501f6a8fbebb8
tree6b7c81fd89cfca567a88808a8270b4b4bd06939f
parentebb37e719d1c99a1bb14ee84bbabdeab0c61ba63
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

link: Improve handling of --build-id when using LLD.


3 files changed, 27 insertions(+), 20 deletions(-)

src/link/Coff.zig+7
......@@ -1763,6 +1763,7 @@ fn linkWithLLD(coff: *Coff, arena: Allocator, tid: Zcu.PerThread.Id, prog_node:
17631763 man.hash.addOptionalBytes(entry_name);
17641764 man.hash.add(coff.base.stack_size);
17651765 man.hash.add(coff.image_base);
1766 man.hash.add(coff.base.build_id);
17661767 {
17671768 // TODO remove this, libraries must instead be resolved by the frontend.
17681769 for (coff.lib_directories) |lib_directory| man.hash.addOptionalBytes(lib_directory.path);
......@@ -1895,6 +1896,12 @@ fn linkWithLLD(coff: *Coff, arena: Allocator, tid: Zcu.PerThread.Id, prog_node:
18951896 }
18961897 try argv.append(try allocPrint(arena, "-BASE:{d}", .{coff.image_base}));
18971898
1899 switch (coff.base.build_id) {
1900 .none => try argv.append("-BUILD-ID:NO"),
1901 .fast => try argv.append("-BUILD-ID"),
1902 .uuid, .sha1, .md5, .hexstring => {},
1903 }
1904
18981905 if (target.cpu.arch == .x86) {
18991906 try argv.append("-MACHINE:X86");
19001907 } else if (target.cpu.arch == .x86_64) {
src/link/Elf.zig+9-15
......@@ -1596,8 +1596,8 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s
15961596 man.hash.addListOfBytes(self.rpath_table.keys());
15971597 if (output_mode == .Exe) {
15981598 man.hash.add(self.base.stack_size);
1599 man.hash.add(self.base.build_id);
16001599 }
1600 man.hash.add(self.base.build_id);
16011601 man.hash.addListOfBytes(self.symbol_wrap_set.keys());
16021602 man.hash.add(comp.skip_linker_dependencies);
16031603 man.hash.add(self.z_nodelete);
......@@ -1753,20 +1753,14 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s
17531753 });
17541754 }
17551755
1756 if (is_exe_or_dyn_lib) {
1757 switch (self.base.build_id) {
1758 .none => {},
1759 .fast, .uuid, .sha1, .md5 => {
1760 try argv.append(try std.fmt.allocPrint(arena, "--build-id={s}", .{
1761 @tagName(self.base.build_id),
1762 }));
1763 },
1764 .hexstring => |hs| {
1765 try argv.append(try std.fmt.allocPrint(arena, "--build-id=0x{s}", .{
1766 std.fmt.fmtSliceHexLower(hs.toSlice()),
1767 }));
1768 },
1769 }
1756 switch (self.base.build_id) {
1757 .none => try argv.append("--build-id=none"),
1758 .fast, .uuid, .sha1, .md5 => try argv.append(try std.fmt.allocPrint(arena, "--build-id={s}", .{
1759 @tagName(self.base.build_id),
1760 })),
1761 .hexstring => |hs| try argv.append(try std.fmt.allocPrint(arena, "--build-id=0x{s}", .{
1762 std.fmt.fmtSliceHexLower(hs.toSlice()),
1763 })),
17701764 }
17711765
17721766 try argv.append(try std.fmt.allocPrint(arena, "--image-base={d}", .{self.image_base}));
src/link/Wasm.zig+11-5
......@@ -4067,6 +4067,17 @@ fn linkWithLLD(wasm: *Wasm, arena: Allocator, tid: Zcu.PerThread.Id, prog_node:
40674067 try std.fmt.allocPrint(arena, "stack-size={d}", .{wasm.base.stack_size}),
40684068 });
40694069
4070 switch (wasm.base.build_id) {
4071 .none => try argv.append("--build-id=none"),
4072 .fast, .uuid, .sha1 => try argv.append(try std.fmt.allocPrint(arena, "--build-id={s}", .{
4073 @tagName(wasm.base.build_id),
4074 })),
4075 .hexstring => |hs| try argv.append(try std.fmt.allocPrint(arena, "--build-id=0x{s}", .{
4076 std.fmt.fmtSliceHexLower(hs.toSlice()),
4077 })),
4078 .md5 => {},
4079 }
4080
40704081 if (wasm.import_symbols) {
40714082 try argv.append("--allow-undefined");
40724083 }
......@@ -4078,11 +4089,6 @@ fn linkWithLLD(wasm: *Wasm, arena: Allocator, tid: Zcu.PerThread.Id, prog_node:
40784089 try argv.append("--pie");
40794090 }
40804091
4081 // XXX - TODO: add when wasm-ld supports --build-id.
4082 // if (wasm.base.build_id) {
4083 // try argv.append("--build-id=tree");
4084 // }
4085
40864092 try argv.appendSlice(&.{ "-o", full_out_path });
40874093
40884094 if (target.cpu.arch == .wasm64) {