diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2024-12-15 15:48:24 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-12-15 15:48:24 -0500 |
| commit | aa0377794df692ede9bc19d8e5296ab90ce6df68 (patch) | |
| tree | 7ff5851ce2d2b86430623735e88ca32c54f401ab /src | |
| parent | eb5c9317aabe0e75ceec00dc1d194e574e9296e7 (diff) | |
| parent | a53a8ab25ef5138a0d72af3011c4dcc51bfa0caf (diff) | |
| download | zig-aa0377794df692ede9bc19d8e5296ab90ce6df68.tar.gz zig-aa0377794df692ede9bc19d8e5296ab90ce6df68.zip | |
Merge pull request #22233 from jacobly0/fix-relocs
Elf.Atom: fix truncated dyn abs relocs
Diffstat (limited to 'src')
| -rw-r--r-- | src/link/Dwarf.zig | 3 | ||||
| -rw-r--r-- | src/link/Elf/Atom.zig | 6 |
2 files changed, 5 insertions, 4 deletions
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; } } 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); } }, |
