diff options
| author | 2018-03-10 17:46:23 -0500 | |
|---|---|---|
| committer | 2018-03-16 18:32:21 -0400 | |
| commit | 8be7131033653a68deae12208b8bec79fb1a004e (patch) | |
| tree | dcbf2cf9490ab167097fc282b39c95b5249505b1 | |
| parent | Merge pull request #237 from mailwl/nifm-module (diff) | |
| download | yuzu-8be7131033653a68deae12208b8bec79fb1a004e.tar.gz yuzu-8be7131033653a68deae12208b8bec79fb1a004e.tar.xz yuzu-8be7131033653a68deae12208b8bec79fb1a004e.zip | |
MemoryState: Add additional memory states and improve naming.
| -rw-r--r-- | src/core/hle/kernel/process.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/kernel/svc.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 2 | ||||
| -rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 24 | ||||
| -rw-r--r-- | src/core/hle/kernel/vm_manager.h | 29 |
5 files changed, 45 insertions, 18 deletions
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 9ca2374ea..9c0a44351 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -153,9 +153,9 @@ void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) { | |||
| 153 | }; | 153 | }; |
| 154 | 154 | ||
| 155 | // Map CodeSet segments | 155 | // Map CodeSet segments |
| 156 | MapSegment(module_->code, VMAPermission::ReadExecute, MemoryState::Code); | 156 | MapSegment(module_->code, VMAPermission::ReadExecute, MemoryState::CodeStatic); |
| 157 | MapSegment(module_->rodata, VMAPermission::Read, MemoryState::Static); | 157 | MapSegment(module_->rodata, VMAPermission::Read, MemoryState::CodeMutable); |
| 158 | MapSegment(module_->data, VMAPermission::ReadWrite, MemoryState::Static); | 158 | MapSegment(module_->data, VMAPermission::ReadWrite, MemoryState::CodeMutable); |
| 159 | } | 159 | } |
| 160 | 160 | ||
| 161 | VAddr Process::GetLinearHeapAreaAddress() const { | 161 | VAddr Process::GetLinearHeapAreaAddress() const { |
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp index 207583320..ad00a0c8b 100644 --- a/src/core/hle/kernel/svc.cpp +++ b/src/core/hle/kernel/svc.cpp | |||
| @@ -468,7 +468,7 @@ static ResultCode QueryProcessMemory(MemoryInfo* memory_info, PageInfo* /*page_i | |||
| 468 | memory_info->base_address = 0; | 468 | memory_info->base_address = 0; |
| 469 | memory_info->permission = static_cast<u32>(VMAPermission::None); | 469 | memory_info->permission = static_cast<u32>(VMAPermission::None); |
| 470 | memory_info->size = 0; | 470 | memory_info->size = 0; |
| 471 | memory_info->type = static_cast<u32>(MemoryState::Free); | 471 | memory_info->type = static_cast<u32>(MemoryState::Unmapped); |
| 472 | } else { | 472 | } else { |
| 473 | memory_info->base_address = vma->second.base; | 473 | memory_info->base_address = vma->second.base; |
| 474 | memory_info->permission = static_cast<u32>(vma->second.permissions); | 474 | memory_info->permission = static_cast<u32>(vma->second.permissions); |
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 2394620eb..419ad1e63 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -314,7 +314,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, | |||
| 314 | // TODO(Subv): Find the correct MemoryState for this region. | 314 | // TODO(Subv): Find the correct MemoryState for this region. |
| 315 | vm_manager.MapMemoryBlock(Memory::TLS_AREA_VADDR + available_page * Memory::PAGE_SIZE, | 315 | vm_manager.MapMemoryBlock(Memory::TLS_AREA_VADDR + available_page * Memory::PAGE_SIZE, |
| 316 | linheap_memory, offset, Memory::PAGE_SIZE, | 316 | linheap_memory, offset, Memory::PAGE_SIZE, |
| 317 | MemoryState::ThreadLocalStorage); | 317 | MemoryState::ThreadLocal); |
| 318 | } | 318 | } |
| 319 | 319 | ||
| 320 | // Mark the slot as used | 320 | // Mark the slot as used |
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index d5b36d71a..9ea7e0406 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp | |||
| @@ -18,8 +18,26 @@ namespace Kernel { | |||
| 18 | 18 | ||
| 19 | static const char* GetMemoryStateName(MemoryState state) { | 19 | static const char* GetMemoryStateName(MemoryState state) { |
| 20 | static const char* names[] = { | 20 | static const char* names[] = { |
| 21 | "Free", "Reserved", "IO", "Static", "Code", "Private", | 21 | "Unmapped", |
| 22 | "Shared", "Continuous", "Aliased", "Alias", "AliasCode", "Locked", | 22 | "Io", |
| 23 | "Normal", | ||
| 24 | "CodeStatic", | ||
| 25 | "CodeMutable", | ||
| 26 | "Heap", | ||
| 27 | "Shared", | ||
| 28 | "Unknown1" | ||
| 29 | "ModuleCodeStatic", | ||
| 30 | "ModuleCodeMutable", | ||
| 31 | "IpcBuffer0", | ||
| 32 | "Mapped", | ||
| 33 | "ThreadLocal", | ||
| 34 | "TransferMemoryIsolated", | ||
| 35 | "TransferMemory", | ||
| 36 | "ProcessMemory", | ||
| 37 | "Unknown2" | ||
| 38 | "IpcBuffer1", | ||
| 39 | "IpcBuffer3", | ||
| 40 | "KernelStack", | ||
| 23 | }; | 41 | }; |
| 24 | 42 | ||
| 25 | return names[(int)state]; | 43 | return names[(int)state]; |
| @@ -142,7 +160,7 @@ VMManager::VMAIter VMManager::Unmap(VMAIter vma_handle) { | |||
| 142 | VirtualMemoryArea& vma = vma_handle->second; | 160 | VirtualMemoryArea& vma = vma_handle->second; |
| 143 | vma.type = VMAType::Free; | 161 | vma.type = VMAType::Free; |
| 144 | vma.permissions = VMAPermission::None; | 162 | vma.permissions = VMAPermission::None; |
| 145 | vma.meminfo_state = MemoryState::Free; | 163 | vma.meminfo_state = MemoryState::Unmapped; |
| 146 | 164 | ||
| 147 | vma.backing_block = nullptr; | 165 | vma.backing_block = nullptr; |
| 148 | vma.offset = 0; | 166 | vma.offset = 0; |
diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 8de704a60..f5493649b 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h | |||
| @@ -41,15 +41,24 @@ enum class VMAPermission : u8 { | |||
| 41 | 41 | ||
| 42 | /// Set of values returned in MemoryInfo.state by svcQueryMemory. | 42 | /// Set of values returned in MemoryInfo.state by svcQueryMemory. |
| 43 | enum class MemoryState : u32 { | 43 | enum class MemoryState : u32 { |
| 44 | Free = 0, | 44 | Unmapped = 0x0, |
| 45 | IO = 1, | 45 | Io = 0x1, |
| 46 | Normal = 2, | 46 | Normal = 0x2, |
| 47 | Code = 3, | 47 | CodeStatic = 0x3, |
| 48 | Static = 4, | 48 | CodeMutable = 0x4, |
| 49 | Heap = 5, | 49 | Heap = 0x5, |
| 50 | Shared = 6, | 50 | Shared = 0x6, |
| 51 | Mapped = 6, | 51 | ModuleCodeStatic = 0x8, |
| 52 | ThreadLocalStorage = 12, | 52 | ModuleCodeMutable = 0x9, |
| 53 | IpcBuffer0 = 0xA, | ||
| 54 | Mapped = 0xB, | ||
| 55 | ThreadLocal = 0xC, | ||
| 56 | TransferMemoryIsolated = 0xD, | ||
| 57 | TransferMemory = 0xE, | ||
| 58 | ProcessMemory = 0xF, | ||
| 59 | IpcBuffer1 = 0x11, | ||
| 60 | IpcBuffer3 = 0x12, | ||
| 61 | KernelStack = 0x13, | ||
| 53 | }; | 62 | }; |
| 54 | 63 | ||
| 55 | /** | 64 | /** |
| @@ -66,7 +75,7 @@ struct VirtualMemoryArea { | |||
| 66 | VMAType type = VMAType::Free; | 75 | VMAType type = VMAType::Free; |
| 67 | VMAPermission permissions = VMAPermission::None; | 76 | VMAPermission permissions = VMAPermission::None; |
| 68 | /// Tag returned by svcQueryMemory. Not otherwise used. | 77 | /// Tag returned by svcQueryMemory. Not otherwise used. |
| 69 | MemoryState meminfo_state = MemoryState::Free; | 78 | MemoryState meminfo_state = MemoryState::Unmapped; |
| 70 | 79 | ||
| 71 | // Settings for type = AllocatedMemoryBlock | 80 | // Settings for type = AllocatedMemoryBlock |
| 72 | /// Memory block backing this VMA. | 81 | /// Memory block backing this VMA. |