summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar bunnei2018-03-10 17:46:23 -0500
committerGravatar bunnei2018-03-16 18:32:21 -0400
commit8be7131033653a68deae12208b8bec79fb1a004e (patch)
treedcbf2cf9490ab167097fc282b39c95b5249505b1
parentMerge pull request #237 from mailwl/nifm-module (diff)
downloadyuzu-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.cpp6
-rw-r--r--src/core/hle/kernel/svc.cpp2
-rw-r--r--src/core/hle/kernel/thread.cpp2
-rw-r--r--src/core/hle/kernel/vm_manager.cpp24
-rw-r--r--src/core/hle/kernel/vm_manager.h29
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
161VAddr Process::GetLinearHeapAreaAddress() const { 161VAddr 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
19static const char* GetMemoryStateName(MemoryState state) { 19static 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.
43enum class MemoryState : u32 { 43enum 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.