mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-07 23:41:26 +12:00
ppu_analyse: use entry point
This commit is contained in:
parent
adefd1fd63
commit
d7c66fc949
3 changed files with 10 additions and 4 deletions
|
@ -326,7 +326,7 @@ namespace ppu_patterns
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<ppu_function> ppu_analyse(const std::vector<std::pair<u32, u32>>& segs, const std::vector<std::pair<u32, u32>>& secs, u32 lib_toc)
|
std::vector<ppu_function> ppu_analyse(const std::vector<std::pair<u32, u32>>& segs, const std::vector<std::pair<u32, u32>>& secs, u32 lib_toc, u32 entry)
|
||||||
{
|
{
|
||||||
// Assume first segment is executable
|
// Assume first segment is executable
|
||||||
const u32 start = segs[0].first;
|
const u32 start = segs[0].first;
|
||||||
|
@ -467,6 +467,12 @@ std::vector<ppu_function> ppu_analyse(const std::vector<std::pair<u32, u32>>& se
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Register TOC from entry point
|
||||||
|
if (entry && !lib_toc)
|
||||||
|
{
|
||||||
|
lib_toc = vm::read32(entry) ? vm::read32(entry + 4) : vm::read32(entry + 20);
|
||||||
|
}
|
||||||
|
|
||||||
// Secondary attempt
|
// Secondary attempt
|
||||||
if (TOCs.empty() && lib_toc)
|
if (TOCs.empty() && lib_toc)
|
||||||
{
|
{
|
||||||
|
|
|
@ -111,7 +111,7 @@ struct ppu_pattern_matrix
|
||||||
|
|
||||||
extern void ppu_validate(const std::string& fname, const std::vector<ppu_function>& funcs, u32 reloc);
|
extern void ppu_validate(const std::string& fname, const std::vector<ppu_function>& funcs, u32 reloc);
|
||||||
|
|
||||||
extern std::vector<ppu_function> ppu_analyse(const std::vector<std::pair<u32, u32>>& segs, const std::vector<std::pair<u32, u32>>& secs, u32 lib_toc);
|
extern std::vector<ppu_function> ppu_analyse(const std::vector<std::pair<u32, u32>>& segs, const std::vector<std::pair<u32, u32>>& secs, u32 lib_toc, u32 entry);
|
||||||
|
|
||||||
// PPU Instruction Type
|
// PPU Instruction Type
|
||||||
struct ppu_itype
|
struct ppu_itype
|
||||||
|
|
|
@ -802,7 +802,7 @@ std::shared_ptr<lv2_prx> ppu_load_prx(const ppu_prx_object& elf, const std::stri
|
||||||
|
|
||||||
ppu_load_imports(link, lib_info->imports_start, lib_info->imports_end);
|
ppu_load_imports(link, lib_info->imports_start, lib_info->imports_end);
|
||||||
|
|
||||||
prx->funcs = ppu_analyse(segments, sections, lib_info->toc);
|
prx->funcs = ppu_analyse(segments, sections, lib_info->toc, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1269,7 +1269,7 @@ void ppu_load_exec(const ppu_exec_object& elf)
|
||||||
|
|
||||||
{
|
{
|
||||||
// Analyse executable
|
// Analyse executable
|
||||||
std::vector<ppu_function> main_funcs = ppu_analyse(segments, sections, vm::read32(elf.header.e_entry + 4));
|
std::vector<ppu_function> main_funcs = ppu_analyse(segments, sections, 0, elf.header.e_entry);
|
||||||
|
|
||||||
ppu_validate(vfs::get(Emu.GetPath()), main_funcs, 0);
|
ppu_validate(vfs::get(Emu.GetPath()), main_funcs, 0);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue