Merge pull request #736 from StevenMiller123/MoreVirtualQuery

Additional VirtualQuery improvements
This commit is contained in:
georgemoralis 2024-09-03 23:05:01 +03:00 committed by GitHub
commit e340583a7f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 5 deletions

View file

@ -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;
}; };

View file

@ -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;

View file

@ -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);