authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-12-15 15:48:24-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2024-12-15 15:48:24-05:00
logaa0377794df692ede9bc19d8e5296ab90ce6df68
tree7ff5851ce2d2b86430623735e88ca32c54f401ab
parenteb5c9317aabe0e75ceec00dc1d194e574e9296e7
parenta53a8ab25ef5138a0d72af3011c4dcc51bfa0caf
signaturebadge-check Signed by PGP key B5690EEEBB952194

Merge pull request #22233 from jacobly0/fix-relocs

Elf.Atom: fix truncated dyn abs relocs

2 files changed, 5 insertions(+), 4 deletions(-)

src/link/Dwarf.zig+2-1
...@@ -419,6 +419,7 @@ pub const Section = struct {...@@ -419,6 +419,7 @@ pub const Section = struct {
419 } else {419 } else {
420 const shdr = &elf_file.sections.items(.shdr)[atom.output_section_index];420 const shdr = &elf_file.sections.items(.shdr)[atom.output_section_index];
421 shdr.sh_offset += len;421 shdr.sh_offset += len;
422 shdr.sh_size -= len;
422 atom.value = 0;423 atom.value = 0;
423 }424 }
424 atom.size -= len;425 atom.size -= len;
...@@ -428,7 +429,7 @@ pub const Section = struct {...@@ -428,7 +429,7 @@ pub const Section = struct {
428 else429 else
429 &macho_file.sections.items(.header)[sec.index];430 &macho_file.sections.items(.header)[sec.index];
430 header.offset += @intCast(len);431 header.offset += @intCast(len);
431 header.size = sec.len;432 header.size -= len;
432 }433 }
433 }434 }
434435
src/link/Elf/Atom.zig+3-3
...@@ -726,7 +726,7 @@ fn resolveDynAbsReloc(...@@ -726,7 +726,7 @@ fn resolveDynAbsReloc(
726 .copyrel,726 .copyrel,
727 .cplt,727 .cplt,
728 .none,728 .none,
729 => try writer.writeInt(i32, @as(i32, @truncate(S + A)), .little),729 => try writer.writeInt(i64, S + A, .little),
730730
731 .dyn_copyrel => {731 .dyn_copyrel => {
732 if (is_writeable or elf_file.z_nocopyreloc) {732 if (is_writeable or elf_file.z_nocopyreloc) {
...@@ -739,7 +739,7 @@ fn resolveDynAbsReloc(...@@ -739,7 +739,7 @@ fn resolveDynAbsReloc(
739 });739 });
740 try applyDynamicReloc(A, elf_file, writer);740 try applyDynamicReloc(A, elf_file, writer);
741 } else {741 } else {
742 try writer.writeInt(i32, @as(i32, @truncate(S + A)), .little);742 try writer.writeInt(i64, S + A, .little);
743 }743 }
744 },744 },
745745
...@@ -754,7 +754,7 @@ fn resolveDynAbsReloc(...@@ -754,7 +754,7 @@ fn resolveDynAbsReloc(
754 });754 });
755 try applyDynamicReloc(A, elf_file, writer);755 try applyDynamicReloc(A, elf_file, writer);
756 } else {756 } else {
757 try writer.writeInt(i32, @as(i32, @truncate(S + A)), .little);757 try writer.writeInt(i64, S + A, .little);
758 }758 }
759 },759 },
760760