mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-05-14 08:12:16 +00:00
Merge pull request #736 from StevenMiller123/MoreVirtualQuery
Additional VirtualQuery improvements
This commit is contained in:
commit
e340583a7f
3 changed files with 10 additions and 5 deletions
|
@ -56,7 +56,7 @@ struct OrbisVirtualQueryInfo {
|
||||||
BitField<1, 1, u32> is_direct;
|
BitField<1, 1, u32> is_direct;
|
||||||
BitField<2, 1, u32> is_stack;
|
BitField<2, 1, u32> is_stack;
|
||||||
BitField<3, 1, u32> is_pooled;
|
BitField<3, 1, u32> is_pooled;
|
||||||
BitField<4, 1, u32> is_commited;
|
BitField<4, 1, u32> is_committed;
|
||||||
};
|
};
|
||||||
std::array<char, 32> name;
|
std::array<char, 32> name;
|
||||||
};
|
};
|
||||||
|
|
|
@ -308,16 +308,20 @@ int MemoryManager::VirtualQuery(VAddr addr, int flags,
|
||||||
const auto& vma = it->second;
|
const auto& vma = it->second;
|
||||||
info->start = vma.base;
|
info->start = vma.base;
|
||||||
info->end = vma.base + vma.size;
|
info->end = vma.base + vma.size;
|
||||||
|
info->offset = vma.phys_base;
|
||||||
info->protection = static_cast<s32>(vma.prot);
|
info->protection = static_cast<s32>(vma.prot);
|
||||||
info->is_flexible.Assign(vma.type == VMAType::Flexible);
|
info->is_flexible.Assign(vma.type == VMAType::Flexible);
|
||||||
info->is_direct.Assign(vma.type == VMAType::Direct);
|
info->is_direct.Assign(vma.type == VMAType::Direct);
|
||||||
info->is_commited.Assign(vma.type != VMAType::Free && vma.type != VMAType::Reserved);
|
info->is_stack.Assign(vma.type == VMAType::Stack);
|
||||||
|
info->is_pooled.Assign(vma.type == VMAType::Pooled);
|
||||||
|
info->is_committed.Assign(vma.type != VMAType::Free && vma.type != VMAType::Reserved);
|
||||||
vma.name.copy(info->name.data(), std::min(info->name.size(), vma.name.size()));
|
vma.name.copy(info->name.data(), std::min(info->name.size(), vma.name.size()));
|
||||||
if (vma.type == VMAType::Direct) {
|
if (vma.type == VMAType::Direct) {
|
||||||
const auto dmem_it = FindDmemArea(vma.phys_base);
|
const auto dmem_it = FindDmemArea(vma.phys_base);
|
||||||
ASSERT(dmem_it != dmem_map.end());
|
ASSERT(dmem_it != dmem_map.end());
|
||||||
info->offset = vma.phys_base;
|
|
||||||
info->memory_type = dmem_it->second.memory_type;
|
info->memory_type = dmem_it->second.memory_type;
|
||||||
|
} else {
|
||||||
|
info->memory_type = ::Libraries::Kernel::SCE_KERNEL_WB_ONION;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
|
|
|
@ -163,9 +163,10 @@ public:
|
||||||
|
|
||||||
int QueryProtection(VAddr addr, void** start, void** end, u32* prot);
|
int QueryProtection(VAddr addr, void** start, void** end, u32* prot);
|
||||||
|
|
||||||
int VirtualQuery(VAddr addr, int flags, Libraries::Kernel::OrbisVirtualQueryInfo* info);
|
int VirtualQuery(VAddr addr, int flags, ::Libraries::Kernel::OrbisVirtualQueryInfo* info);
|
||||||
|
|
||||||
int DirectMemoryQuery(PAddr addr, bool find_next, Libraries::Kernel::OrbisQueryInfo* out_info);
|
int DirectMemoryQuery(PAddr addr, bool find_next,
|
||||||
|
::Libraries::Kernel::OrbisQueryInfo* out_info);
|
||||||
|
|
||||||
int DirectQueryAvailable(PAddr search_start, PAddr search_end, size_t alignment,
|
int DirectQueryAvailable(PAddr search_start, PAddr search_end, size_t alignment,
|
||||||
PAddr* phys_addr_out, size_t* size_out);
|
PAddr* phys_addr_out, size_t* size_out);
|
||||||
|
|
Loading…
Add table
Reference in a new issue