diff options
Diffstat (limited to 'src/link')
| -rw-r--r-- | src/link/Coff.zig | 7 | ||||
| -rw-r--r-- | src/link/Elf.zig | 24 | ||||
| -rw-r--r-- | src/link/Wasm.zig | 16 |
3 files changed, 27 insertions, 20 deletions
diff --git a/src/link/Coff.zig b/src/link/Coff.zig index 4b20ba99dd..9640f38915 100644 --- a/src/link/Coff.zig +++ b/src/link/Coff.zig @@ -1763,6 +1763,7 @@ fn linkWithLLD(coff: *Coff, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: man.hash.addOptionalBytes(entry_name); man.hash.add(coff.base.stack_size); man.hash.add(coff.image_base); + man.hash.add(coff.base.build_id); { // TODO remove this, libraries must instead be resolved by the frontend. 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: } try argv.append(try allocPrint(arena, "-BASE:{d}", .{coff.image_base})); + switch (coff.base.build_id) { + .none => try argv.append("-BUILD-ID:NO"), + .fast => try argv.append("-BUILD-ID"), + .uuid, .sha1, .md5, .hexstring => {}, + } + if (target.cpu.arch == .x86) { try argv.append("-MACHINE:X86"); } else if (target.cpu.arch == .x86_64) { diff --git a/src/link/Elf.zig b/src/link/Elf.zig index 00bd940500..a338ec722d 100644 --- a/src/link/Elf.zig +++ b/src/link/Elf.zig @@ -1596,8 +1596,8 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s man.hash.addListOfBytes(self.rpath_table.keys()); if (output_mode == .Exe) { man.hash.add(self.base.stack_size); - man.hash.add(self.base.build_id); } + man.hash.add(self.base.build_id); man.hash.addListOfBytes(self.symbol_wrap_set.keys()); man.hash.add(comp.skip_linker_dependencies); man.hash.add(self.z_nodelete); @@ -1753,20 +1753,14 @@ fn linkWithLLD(self: *Elf, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: s }); } - if (is_exe_or_dyn_lib) { - switch (self.base.build_id) { - .none => {}, - .fast, .uuid, .sha1, .md5 => { - try argv.append(try std.fmt.allocPrint(arena, "--build-id={s}", .{ - @tagName(self.base.build_id), - })); - }, - .hexstring => |hs| { - try argv.append(try std.fmt.allocPrint(arena, "--build-id=0x{s}", .{ - std.fmt.fmtSliceHexLower(hs.toSlice()), - })); - }, - } + switch (self.base.build_id) { + .none => try argv.append("--build-id=none"), + .fast, .uuid, .sha1, .md5 => try argv.append(try std.fmt.allocPrint(arena, "--build-id={s}", .{ + @tagName(self.base.build_id), + })), + .hexstring => |hs| try argv.append(try std.fmt.allocPrint(arena, "--build-id=0x{s}", .{ + std.fmt.fmtSliceHexLower(hs.toSlice()), + })), } try argv.append(try std.fmt.allocPrint(arena, "--image-base={d}", .{self.image_base})); diff --git a/src/link/Wasm.zig b/src/link/Wasm.zig index 466d4aa6bb..603be663ff 100644 --- a/src/link/Wasm.zig +++ b/src/link/Wasm.zig @@ -4078,6 +4078,17 @@ fn linkWithLLD(wasm: *Wasm, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: try std.fmt.allocPrint(arena, "stack-size={d}", .{wasm.base.stack_size}), }); + switch (wasm.base.build_id) { + .none => try argv.append("--build-id=none"), + .fast, .uuid, .sha1 => try argv.append(try std.fmt.allocPrint(arena, "--build-id={s}", .{ + @tagName(wasm.base.build_id), + })), + .hexstring => |hs| try argv.append(try std.fmt.allocPrint(arena, "--build-id=0x{s}", .{ + std.fmt.fmtSliceHexLower(hs.toSlice()), + })), + .md5 => {}, + } + if (wasm.import_symbols) { try argv.append("--allow-undefined"); } @@ -4089,11 +4100,6 @@ fn linkWithLLD(wasm: *Wasm, arena: Allocator, tid: Zcu.PerThread.Id, prog_node: try argv.append("--pie"); } - // XXX - TODO: add when wasm-ld supports --build-id. - // if (wasm.base.build_id) { - // try argv.append("--build-id=tree"); - // } - try argv.appendSlice(&.{ "-o", full_out_path }); if (target.cpu.arch == .wasm64) { |
