From 6d97185bc6aac388ee17df26674caf1a702c36f9 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Sat, 14 Dec 2024 19:58:53 -0500 Subject: [PATCH 1/2] Elf.Atom: fix truncated dyn abs relocs --- src/link/Elf/Atom.zig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/link/Elf/Atom.zig b/src/link/Elf/Atom.zig index 6775c8c7ff..d34dd6bb63 100644 --- a/src/link/Elf/Atom.zig +++ b/src/link/Elf/Atom.zig @@ -726,7 +726,7 @@ fn resolveDynAbsReloc( .copyrel, .cplt, .none, - => try writer.writeInt(i32, @as(i32, @truncate(S + A)), .little), + => try writer.writeInt(i64, S + A, .little), .dyn_copyrel => { if (is_writeable or elf_file.z_nocopyreloc) { @@ -739,7 +739,7 @@ fn resolveDynAbsReloc( }); try applyDynamicReloc(A, elf_file, writer); } else { - try writer.writeInt(i32, @as(i32, @truncate(S + A)), .little); + try writer.writeInt(i64, S + A, .little); } }, @@ -754,7 +754,7 @@ fn resolveDynAbsReloc( }); try applyDynamicReloc(A, elf_file, writer); } else { - try writer.writeInt(i32, @as(i32, @truncate(S + A)), .little); + try writer.writeInt(i64, S + A, .little); } }, From a53a8ab25ef5138a0d72af3011c4dcc51bfa0caf Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Sat, 14 Dec 2024 23:19:29 -0500 Subject: [PATCH 2/2] Elf: fix shdr size getting out of sync with the actual size --- src/link/Dwarf.zig | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig index afdc5d1d48..fc6f6cda00 100644 --- a/src/link/Dwarf.zig +++ b/src/link/Dwarf.zig @@ -419,6 +419,7 @@ pub const Section = struct { } else { const shdr = &elf_file.sections.items(.shdr)[atom.output_section_index]; shdr.sh_offset += len; + shdr.sh_size -= len; atom.value = 0; } atom.size -= len; @@ -428,7 +429,7 @@ pub const Section = struct { else &macho_file.sections.items(.header)[sec.index]; header.offset += @intCast(len); - header.size = sec.len; + header.size -= len; } }