Robustify the ELF loader a little - it didn't like unaligned addresses..

This commit is contained in:
Henrik Rydgard
2013-11-14 11:44:14 +01:00
parent 8a69543ec4
commit 9d4ece0f58
3 changed files with 71 additions and 29 deletions
+16 -1
View File
@@ -1139,7 +1139,22 @@ Module *__KernelLoadModule(u8 *fileptr, SceKernelLMOption *options, std::string
for (int i = 1; i < numfiles; i++)
memcpy(&offsets[i], fileptr + 12 + 4*i, 4);
u32 magic = 0;
module = __KernelLoadELFFromPtr(fileptr + offsets[5], PSP_GetDefaultLoadAddress(), error_string, &magic);
u8 *temp = 0;
if (offsets[5] & 3) {
// Our loader does NOT like to load from an unaligned address on ARM!
size_t size = offsets[6] - offsets[5];
temp = new u8[size];
memcpy(temp, fileptr + offsets[5], size);
INFO_LOG(LOADER, "Elf unaligned, aligning!")
}
module = __KernelLoadELFFromPtr(temp ? temp : fileptr + offsets[5], PSP_GetDefaultLoadAddress(), error_string, &magic);
if (temp) {
delete [] temp;
}
}
else
{