SPU loader fix
This commit is contained in:
+13
-2
@@ -86,7 +86,16 @@ namespace loader
|
|||||||
{
|
{
|
||||||
case MACHINE_MIPS: break;
|
case MACHINE_MIPS: break;
|
||||||
case MACHINE_ARM: arm7_thread(m_ehdr.is_le() ? m_ehdr.data_le.e_entry : m_ehdr.data_be.e_entry, "main_thread").args({ Emu.GetPath()/*, "-emu"*/ }).run(); break;
|
case MACHINE_ARM: arm7_thread(m_ehdr.is_le() ? m_ehdr.data_le.e_entry : m_ehdr.data_be.e_entry, "main_thread").args({ Emu.GetPath()/*, "-emu"*/ }).run(); break;
|
||||||
case MACHINE_SPU: spu_thread(m_ehdr.is_le() ? m_ehdr.data_le.e_entry : m_ehdr.data_be.e_entry, "main_thread").args({ Emu.GetPath()/*, "-emu"*/ }).run(); break;
|
case MACHINE_SPU:
|
||||||
|
{
|
||||||
|
if (!Emu.IsStopped())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
spu_thread(m_ehdr.is_le() ? m_ehdr.data_le.e_entry : m_ehdr.data_be.e_entry, "main_thread").args({ Emu.GetPath()/*, "-emu"*/ }).run();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
@@ -94,6 +103,8 @@ namespace loader
|
|||||||
|
|
||||||
handler::error_code elf32::load_data(u32 offset)
|
handler::error_code elf32::load_data(u32 offset)
|
||||||
{
|
{
|
||||||
|
Elf_Machine machine = (Elf_Machine)(u16)(m_ehdr.is_le() ? m_ehdr.data_le.e_machine : m_ehdr.data_be.e_machine);
|
||||||
|
|
||||||
for (auto &phdr : m_phdrs)
|
for (auto &phdr : m_phdrs)
|
||||||
{
|
{
|
||||||
u32 memsz = m_ehdr.is_le() ? phdr.data_le.p_memsz : phdr.data_be.p_memsz;
|
u32 memsz = m_ehdr.is_le() ? phdr.data_le.p_memsz : phdr.data_be.p_memsz;
|
||||||
@@ -106,7 +117,7 @@ namespace loader
|
|||||||
case 0x00000001: //LOAD
|
case 0x00000001: //LOAD
|
||||||
if (phdr.data_le.p_memsz)
|
if (phdr.data_le.p_memsz)
|
||||||
{
|
{
|
||||||
if (!vm::alloc(vaddr, memsz, vm::main))
|
if (machine != MACHINE_SPU && !vm::alloc(vaddr, memsz, vm::main))
|
||||||
{
|
{
|
||||||
LOG_ERROR(LOADER, "%s(): AllocFixed(0x%llx, 0x%x) failed", __FUNCTION__, vaddr, memsz);
|
LOG_ERROR(LOADER, "%s(): AllocFixed(0x%llx, 0x%x) failed", __FUNCTION__, vaddr, memsz);
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace loader
|
|||||||
u16 e_type;
|
u16 e_type;
|
||||||
u16 e_machine;
|
u16 e_machine;
|
||||||
u32 e_version;
|
u32 e_version;
|
||||||
u16 e_entry;
|
u32 e_entry;
|
||||||
u32 e_phoff;
|
u32 e_phoff;
|
||||||
u32 e_shoff;
|
u32 e_shoff;
|
||||||
u32 e_flags;
|
u32 e_flags;
|
||||||
@@ -45,7 +45,7 @@ namespace loader
|
|||||||
be_t<u16> e_type;
|
be_t<u16> e_type;
|
||||||
be_t<u16> e_machine;
|
be_t<u16> e_machine;
|
||||||
be_t<u32> e_version;
|
be_t<u32> e_version;
|
||||||
be_t<u16> e_entry;
|
be_t<u32> e_entry;
|
||||||
be_t<u32> e_phoff;
|
be_t<u32> e_phoff;
|
||||||
be_t<u32> e_shoff;
|
be_t<u32> e_shoff;
|
||||||
be_t<u32> e_flags;
|
be_t<u32> e_flags;
|
||||||
@@ -59,7 +59,7 @@ namespace loader
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool is_le() const { return e_data == 1; }
|
bool is_le() const { return e_data == 1; }
|
||||||
bool check() const { return e_magic == 0x7F454C46; }
|
bool check() const { return e_magic == 0x464C457F; }
|
||||||
};
|
};
|
||||||
|
|
||||||
struct shdr
|
struct shdr
|
||||||
|
|||||||
Reference in New Issue
Block a user