Merge pull request #22233 from jacobly0/fix-relocs

Elf.Atom: fix truncated dyn abs relocs
This commit is contained in:
Andrew Kelley 2024-12-15 15:48:24 -05:00 committed by GitHub
commit aa0377794d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 5 additions and 4 deletions

View File

@ -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;
}
}

View File

@ -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);
}
},