aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2024-09-04 08:47:17 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2024-09-10 08:29:31 -0400
commit778519bb0d883eed7b2a4e89ae7db68c15271ee3 (patch)
treef505364c4cc25e421a1fa6f8e927c4a0f81bb478 /src
parent90075345519f165a0164c52b62b78453068c6ce6 (diff)
downloadzig-778519bb0d883eed7b2a4e89ae7db68c15271ee3.tar.gz
zig-778519bb0d883eed7b2a4e89ae7db68c15271ee3.zip
Dwarf: fix missing padding before incrementally updated entries
Diffstat (limited to 'src')
-rw-r--r--src/link/Dwarf.zig10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/link/Dwarf.zig b/src/link/Dwarf.zig
index bff33ecf14..26aafd8092 100644
--- a/src/link/Dwarf.zig
+++ b/src/link/Dwarf.zig
@@ -847,10 +847,11 @@ const Entry = struct {
unit.len -| (unit.header_len + unit.trailer_len);
if (entry_ptr.off + len > end) {
if (entry_ptr.next.unwrap()) |next_entry| {
- if (entry_ptr.prev.unwrap()) |prev_entry|
- unit.getEntry(prev_entry).next = entry_ptr.next
- else
- unit.first = entry_ptr.next;
+ if (entry_ptr.prev.unwrap()) |prev_entry| {
+ const prev_entry_ptr = unit.getEntry(prev_entry);
+ prev_entry_ptr.next = entry_ptr.next;
+ try prev_entry_ptr.pad(unit, sec, dwarf);
+ } else unit.first = entry_ptr.next;
const next_entry_ptr = unit.getEntry(next_entry);
const entry = next_entry_ptr.prev;
next_entry_ptr.prev = entry_ptr.prev;
@@ -860,6 +861,7 @@ const Entry = struct {
entry_ptr.next = .none;
entry_ptr.off = last_entry_ptr.off + sec.padToIdeal(last_entry_ptr.len);
unit.last = entry;
+ try last_entry_ptr.pad(unit, sec, dwarf);
}
try unit.resize(sec, dwarf, 0, @intCast(unit.header_len + entry_ptr.off + sec.padToIdeal(len) + unit.trailer_len));
}