authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2024-08-19 10:03:40+02:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2024-08-21 01:43:21-04:00
logc4d820b3f160e96415c2095c828b53f4e972aa36
tree4e30ff35b3e8f348581c4ef6ae4f7bfd6c31b75c
parentd388d555d5abc06962e4e8a409a5fa28f8c4f84c

elf: emit DTPOFF32/DTPOFF64 relocation for .debug* sections


1 files changed, 8 insertions(+), 7 deletions(-)

src/link/Elf/ZigObject.zig+8-7
......@@ -246,11 +246,11 @@ pub fn flushModule(self: *ZigObject, elf_file: *Elf, tid: Zcu.PerThread.Id) !voi
246246 .@"32" => .@"32",
247247 .@"64" => .@"64",
248248 };
249 log.debug(" {s} <- r_off={x}, r_add={x}, r_type={s}", .{
249 log.debug(" {s} <- r_off={x}, r_add={x}, r_type={}", .{
250250 self.symbol(target_sym_index).name(elf_file),
251251 r_offset,
252252 r_addend,
253 @tagName(r_type),
253 relocation.fmtRelocType(@intFromEnum(r_type), elf_file.getTarget().cpu.arch),
254254 });
255255 atom_ptr.addRelocAssumeCapacity(.{
256256 .r_offset = r_offset,
......@@ -261,18 +261,19 @@ pub fn flushModule(self: *ZigObject, elf_file: *Elf, tid: Zcu.PerThread.Id) !voi
261261
262262 try relocs.ensureUnusedCapacity(gpa, unit.external_relocs.items.len);
263263 for (unit.external_relocs.items) |reloc| {
264 const target_sym = self.symbol(reloc.target_sym);
264265 const r_offset = unit.off + unit.header_len + unit.getEntry(reloc.source_entry).off + reloc.source_off;
265266 const r_addend: i64 = @intCast(reloc.target_off);
266267 const r_type: elf.R_X86_64 = switch (dwarf.address_size) {
267 .@"32" => .@"32",
268 .@"64" => .@"64",
268 .@"32" => if (target_sym.flags.is_tls) .DTPOFF32 else .@"32",
269 .@"64" => if (target_sym.flags.is_tls) .DTPOFF64 else .@"64",
269270 else => unreachable,
270271 };
271 log.debug(" {s} <- r_off={x}, r_add={x}, r_type={s}", .{
272 self.symbol(reloc.target_sym).name(elf_file),
272 log.debug(" {s} <- r_off={x}, r_add={x}, r_type={}", .{
273 target_sym.name(elf_file),
273274 r_offset,
274275 r_addend,
275 @tagName(r_type),
276 relocation.fmtRelocType(@intFromEnum(r_type), elf_file.getTarget().cpu.arch),
276277 });
277278 atom_ptr.addRelocAssumeCapacity(.{
278279 .r_offset = r_offset,