diff options
| author | Lioncash <mathew1800@gmail.com> | 2018-12-12 13:26:33 -0500 | 
|---|---|---|
| committer | Lioncash <mathew1800@gmail.com> | 2018-12-12 15:08:06 -0500 | 
| commit | eb5f3f67f62534126e9598e9ea3e165238590b93 (patch) | |
| tree | db2132c09e41aa886851138f4887a4bfc2d1c958 /src/core/hle/kernel | |
| parent | a8cc03502b41b44150af71535d2b662a7ee3390c (diff) | |
vm_manager: Amend the returned values for invalid memory queries in QueryMemory()
The kernel returns a memory info instance with the base address set to
the end of the address space, and the size of said block as
0 - address_space_end, it doesn't set both of said members to zero.
Diffstat (limited to 'src/core/hle/kernel')
| -rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 8 | ||||
| -rw-r--r-- | src/core/hle/kernel/vm_manager.h | 3 | 
2 files changed, 7 insertions, 4 deletions
| diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index 21bcee192..d3b55a51e 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp @@ -28,7 +28,7 @@ static const char* GetMemoryStateName(MemoryState state) {          "IpcBuffer0",       "Stack",          "ThreadLocal",      "TransferMemoryIsolated",          "TransferMemory",   "ProcessMemory", -        "Unknown2",         "IpcBuffer1", +        "Inaccessible",     "IpcBuffer1",          "IpcBuffer3",       "KernelStack",      }; @@ -312,10 +312,10 @@ MemoryInfo VMManager::QueryMemory(VAddr address) const {          memory_info.size = vma->second.size;          memory_info.state = ToSvcMemoryState(vma->second.meminfo_state);      } else { -        memory_info.base_address = 0; +        memory_info.base_address = address_space_end;          memory_info.permission = static_cast<u32>(VMAPermission::None); -        memory_info.size = 0; -        memory_info.state = static_cast<u32>(MemoryState::Unmapped); +        memory_info.size = 0 - address_space_end; +        memory_info.state = static_cast<u32>(MemoryState::Inaccessible);      }      return memory_info; diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 91e8e8c8c..7befa3526 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h @@ -105,6 +105,9 @@ enum class MemoryState : u32 {      ProcessMemory          = 0x0F | FlagIPC3   | FlagIPC1   | FlagMapped | FlagMemoryPoolAllocated, +    // Used to signify an inaccessible or invalid memory region with memory queries +    Inaccessible           = 0x10, +      IpcBuffer1             = 0x11 | FlagIPC3   | FlagIPC1   | FlagMapped | FlagQueryPhysicalAddressAllowed |                                      FlagSharedDevice | FlagSharedDeviceAligned | FlagMemoryPoolAllocated, | 
