Fix calculateSectionOffsets for import sections.

Fuck.
This commit is contained in:
James Benton 2018-09-30 10:46:24 +01:00
parent b03e4afc49
commit 63119deb63

View File

@ -616,7 +616,7 @@ calculateSectionOffsets(ElfFile &file)
}
// Next the "readMin / readMax" sections, which are:
// - !(flags & SHF_EXECINSTR) || type == SHT_RPL_EXPORTS || type == SHT_RPL_IMPORTS
// - !(flags & SHF_EXECINSTR) || type == SHT_RPL_EXPORTS
// - !(flags & SHF_WRITE)
// - flags & SHF_ALLOC
for (auto &section : file.sections) {
@ -629,8 +629,7 @@ calculateSectionOffsets(ElfFile &file)
}
if ((!(section->header.flags & elf::SHF_EXECINSTR) ||
section->header.type == elf::SHT_RPL_EXPORTS ||
section->header.type == elf::SHT_RPL_IMPORTS) &&
section->header.type == elf::SHT_RPL_EXPORTS) &&
!(section->header.flags & elf::SHF_WRITE) &&
(section->header.flags & elf::SHF_ALLOC)) {
section->header.offset = offset;
@ -639,6 +638,16 @@ calculateSectionOffsets(ElfFile &file)
}
}
// Import sections are part of the read sections, but have execinstr flag set
// so let's insert them here to avoid complicating the above logic.
for (auto &section : file.sections) {
if (section->header.type == elf::SHT_RPL_IMPORTS) {
section->header.offset = offset;
section->header.size = static_cast<uint32_t>(section->data.size());
offset += section->header.size;
}
}
// Next the "textMin / textMax" sections, which are:
// - flags & SHF_EXECINSTR
// - type != SHT_RPL_EXPORTS