mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-19 19:15:26 +00:00
sys_spu: Fix sys_spu_image_open
This commit is contained in:
parent
b8d1d7cdf1
commit
c2bfcb0bde
2 changed files with 19 additions and 3 deletions
|
@ -1371,7 +1371,10 @@ fs::file decrypt_self(const fs::file& elf_or_self, const u8* klic_key, SelfAddit
|
|||
elf_or_self.seek(0);
|
||||
|
||||
// Check SELF header first. Check for a debug SELF.
|
||||
if (elf_or_self.size() >= 4 && elf_or_self.read<u32>() == "SCE\0"_u32)
|
||||
u32 file_type = umax;
|
||||
elf_or_self.read_at(0, &file_type, sizeof(file_type));
|
||||
|
||||
if (file_type == "SCE\0"_u32)
|
||||
{
|
||||
if (fs::file res = CheckDebugSelf(elf_or_self))
|
||||
{
|
||||
|
|
|
@ -94,7 +94,7 @@ void sys_spu_image::load(const fs::file& stream)
|
|||
const s32 nsegs = sys_spu_image::get_nsegs(obj.progs);
|
||||
|
||||
const u32 mem_size = nsegs * sizeof(sys_spu_segment) + ::size32(stream);
|
||||
const vm::ptr<sys_spu_segment> segs = vm::cast(vm::alloc(mem_size, vm::main));
|
||||
const vm::ptr<sys_spu_segment> segs = vm::cast(vm::reserve_map(vm::user64km 0, 0x10000000)->alloc(mem_size));
|
||||
|
||||
//const u32 entry = obj.header.e_entry;
|
||||
|
||||
|
@ -517,7 +517,20 @@ error_code sys_spu_image_open(ppu_thread& ppu, vm::ptr<sys_spu_image> img, vm::c
|
|||
|
||||
u128 klic = g_fxo->get<loaded_npdrm_keys>().last_key();
|
||||
|
||||
const fs::file elf_file = decrypt_self(std::move(file), reinterpret_cast<u8*>(&klic));
|
||||
fs::file elf_file;
|
||||
|
||||
// Check for SELF header
|
||||
u32 file_type = umax;
|
||||
file.read_at(0, &file_type, sizeof(file_type));
|
||||
|
||||
if (file_type == "SCE\0"_u32)
|
||||
{
|
||||
elf_file = decrypt_self(file, reinterpret_cast<u8*>(&klic));
|
||||
}
|
||||
else
|
||||
{
|
||||
elf_file = std::move(file);
|
||||
}
|
||||
|
||||
if (!elf_file)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue