aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2024-12-15 15:48:24 -0500
committerGitHub <noreply@github.com>2024-12-15 15:48:24 -0500
commitaa0377794df692ede9bc19d8e5296ab90ce6df68 (patch)
tree7ff5851ce2d2b86430623735e88ca32c54f401ab /src
parenteb5c9317aabe0e75ceec00dc1d194e574e9296e7 (diff)
parenta53a8ab25ef5138a0d72af3011c4dcc51bfa0caf (diff)
downloadzig-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.zig3
-rw-r--r--src/link/Elf/Atom.zig6
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);
}
},