diff options
Diffstat (limited to 'src/wiiu/wiiu.cpp')
| -rw-r--r-- | src/wiiu/wiiu.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/wiiu/wiiu.cpp b/src/wiiu/wiiu.cpp index 41ac110..fbf0802 100644 --- a/src/wiiu/wiiu.cpp +++ b/src/wiiu/wiiu.cpp @@ -9,7 +9,11 @@ accept_file(qstring *fileformatname, qstring *processor, linput_t *li, const cha elf_reader<elf32> elf(li); if (elf.verifyHeader()) { - if (elf.type() == ELF_FILETYPE_CAFE_RPL) + if (elf.type() == ELF_FILETYPE_CAFE_RPL + && elf.machine() == EM_PPC + && elf.osabi() == ELF_IDENT_OS_CAFE + && elf.bitsize() == ELFCLASS32 + && elf.endian() == ELFDATA2MSB) { *processor = "ppc"; *fileformatname = "WII U RPX/RPL"; @@ -25,11 +29,22 @@ static void idaapi load_file(linput_t *li, ushort /*neflags*/, const char * /*fileformatname*/) { set_processor_type("ppc", SETPROC_LOADER); + inf_set_app_bitness(32); + inf_set_be(true); + inf_set_wide_high_byte_first(true); elf_reader<elf32> elf(li); elf.read(); - cafe_loader ldr(&elf); ldr.apply(); + cafe_loader ldr(&elf); + ldr.apply(); + + if (elf.entry() != 0) + { + inf_set_start_ea(elf.entry()); + add_entry(elf.entry(), elf.entry(), "start", true); + auto_make_proc(elf.entry()); + } } #ifdef _WIN32 |
