summaryrefslogtreecommitdiff
path: root/src/tests/common/host_memory.cpp
diff options
context:
space:
mode:
authorGravatar GPUCode2023-11-17 21:43:15 +0200
committerGravatar t8952023-11-25 00:46:15 -0500
commit5938a9582a238d7679eb15f9812f8a85bfdb1cc3 (patch)
tree935356a1cc03fea528e349d5027f2d885537272a /src/tests/common/host_memory.cpp
parenthost_memory: Switch to FreeRegionManager (diff)
downloadyuzu-5938a9582a238d7679eb15f9812f8a85bfdb1cc3.tar.gz
yuzu-5938a9582a238d7679eb15f9812f8a85bfdb1cc3.tar.xz
yuzu-5938a9582a238d7679eb15f9812f8a85bfdb1cc3.zip
core: Respect memory permissions in Map
Diffstat (limited to 'src/tests/common/host_memory.cpp')
-rw-r--r--src/tests/common/host_memory.cpp71
1 files changed, 36 insertions, 35 deletions
diff --git a/src/tests/common/host_memory.cpp b/src/tests/common/host_memory.cpp
index 1b014b632..1a28e862b 100644
--- a/src/tests/common/host_memory.cpp
+++ b/src/tests/common/host_memory.cpp
@@ -11,6 +11,7 @@ using namespace Common::Literals;
11 11
12static constexpr size_t VIRTUAL_SIZE = 1ULL << 39; 12static constexpr size_t VIRTUAL_SIZE = 1ULL << 39;
13static constexpr size_t BACKING_SIZE = 4_GiB; 13static constexpr size_t BACKING_SIZE = 4_GiB;
14static constexpr auto PERMS = Common::MemoryPermission::ReadWrite;
14 15
15TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") { 16TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") {
16 { HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); } 17 { HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); }
@@ -19,7 +20,7 @@ TEST_CASE("HostMemory: Initialize and deinitialize", "[common]") {
19 20
20TEST_CASE("HostMemory: Simple map", "[common]") { 21TEST_CASE("HostMemory: Simple map", "[common]") {
21 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 22 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
22 mem.Map(0x5000, 0x8000, 0x1000); 23 mem.Map(0x5000, 0x8000, 0x1000, PERMS);
23 24
24 volatile u8* const data = mem.VirtualBasePointer() + 0x5000; 25 volatile u8* const data = mem.VirtualBasePointer() + 0x5000;
25 data[0] = 50; 26 data[0] = 50;
@@ -28,8 +29,8 @@ TEST_CASE("HostMemory: Simple map", "[common]") {
28 29
29TEST_CASE("HostMemory: Simple mirror map", "[common]") { 30TEST_CASE("HostMemory: Simple mirror map", "[common]") {
30 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 31 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
31 mem.Map(0x5000, 0x3000, 0x2000); 32 mem.Map(0x5000, 0x3000, 0x2000, PERMS);
32 mem.Map(0x8000, 0x4000, 0x1000); 33 mem.Map(0x8000, 0x4000, 0x1000, PERMS);
33 34
34 volatile u8* const mirror_a = mem.VirtualBasePointer() + 0x5000; 35 volatile u8* const mirror_a = mem.VirtualBasePointer() + 0x5000;
35 volatile u8* const mirror_b = mem.VirtualBasePointer() + 0x8000; 36 volatile u8* const mirror_b = mem.VirtualBasePointer() + 0x8000;
@@ -39,7 +40,7 @@ TEST_CASE("HostMemory: Simple mirror map", "[common]") {
39 40
40TEST_CASE("HostMemory: Simple unmap", "[common]") { 41TEST_CASE("HostMemory: Simple unmap", "[common]") {
41 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 42 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
42 mem.Map(0x5000, 0x3000, 0x2000); 43 mem.Map(0x5000, 0x3000, 0x2000, PERMS);
43 44
44 volatile u8* const data = mem.VirtualBasePointer() + 0x5000; 45 volatile u8* const data = mem.VirtualBasePointer() + 0x5000;
45 data[75] = 50; 46 data[75] = 50;
@@ -50,7 +51,7 @@ TEST_CASE("HostMemory: Simple unmap", "[common]") {
50 51
51TEST_CASE("HostMemory: Simple unmap and remap", "[common]") { 52TEST_CASE("HostMemory: Simple unmap and remap", "[common]") {
52 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 53 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
53 mem.Map(0x5000, 0x3000, 0x2000); 54 mem.Map(0x5000, 0x3000, 0x2000, PERMS);
54 55
55 volatile u8* const data = mem.VirtualBasePointer() + 0x5000; 56 volatile u8* const data = mem.VirtualBasePointer() + 0x5000;
56 data[0] = 50; 57 data[0] = 50;
@@ -58,79 +59,79 @@ TEST_CASE("HostMemory: Simple unmap and remap", "[common]") {
58 59
59 mem.Unmap(0x5000, 0x2000); 60 mem.Unmap(0x5000, 0x2000);
60 61
61 mem.Map(0x5000, 0x3000, 0x2000); 62 mem.Map(0x5000, 0x3000, 0x2000, PERMS);
62 REQUIRE(data[0] == 50); 63 REQUIRE(data[0] == 50);
63 64
64 mem.Map(0x7000, 0x2000, 0x5000); 65 mem.Map(0x7000, 0x2000, 0x5000, PERMS);
65 REQUIRE(data[0x3000] == 50); 66 REQUIRE(data[0x3000] == 50);
66} 67}
67 68
68TEST_CASE("HostMemory: Nieche allocation", "[common]") { 69TEST_CASE("HostMemory: Nieche allocation", "[common]") {
69 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 70 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
70 mem.Map(0x0000, 0, 0x20000); 71 mem.Map(0x0000, 0, 0x20000, PERMS);
71 mem.Unmap(0x0000, 0x4000); 72 mem.Unmap(0x0000, 0x4000);
72 mem.Map(0x1000, 0, 0x2000); 73 mem.Map(0x1000, 0, 0x2000, PERMS);
73 mem.Map(0x3000, 0, 0x1000); 74 mem.Map(0x3000, 0, 0x1000, PERMS);
74 mem.Map(0, 0, 0x1000); 75 mem.Map(0, 0, 0x1000, PERMS);
75} 76}
76 77
77TEST_CASE("HostMemory: Full unmap", "[common]") { 78TEST_CASE("HostMemory: Full unmap", "[common]") {
78 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 79 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
79 mem.Map(0x8000, 0, 0x4000); 80 mem.Map(0x8000, 0, 0x4000, PERMS);
80 mem.Unmap(0x8000, 0x4000); 81 mem.Unmap(0x8000, 0x4000);
81 mem.Map(0x6000, 0, 0x16000); 82 mem.Map(0x6000, 0, 0x16000, PERMS);
82} 83}
83 84
84TEST_CASE("HostMemory: Right out of bounds unmap", "[common]") { 85TEST_CASE("HostMemory: Right out of bounds unmap", "[common]") {
85 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 86 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
86 mem.Map(0x0000, 0, 0x4000); 87 mem.Map(0x0000, 0, 0x4000, PERMS);
87 mem.Unmap(0x2000, 0x4000); 88 mem.Unmap(0x2000, 0x4000);
88 mem.Map(0x2000, 0x80000, 0x4000); 89 mem.Map(0x2000, 0x80000, 0x4000, PERMS);
89} 90}
90 91
91TEST_CASE("HostMemory: Left out of bounds unmap", "[common]") { 92TEST_CASE("HostMemory: Left out of bounds unmap", "[common]") {
92 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 93 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
93 mem.Map(0x8000, 0, 0x4000); 94 mem.Map(0x8000, 0, 0x4000, PERMS);
94 mem.Unmap(0x6000, 0x4000); 95 mem.Unmap(0x6000, 0x4000);
95 mem.Map(0x8000, 0, 0x2000); 96 mem.Map(0x8000, 0, 0x2000, PERMS);
96} 97}
97 98
98TEST_CASE("HostMemory: Multiple placeholder unmap", "[common]") { 99TEST_CASE("HostMemory: Multiple placeholder unmap", "[common]") {
99 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 100 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
100 mem.Map(0x0000, 0, 0x4000); 101 mem.Map(0x0000, 0, 0x4000, PERMS);
101 mem.Map(0x4000, 0, 0x1b000); 102 mem.Map(0x4000, 0, 0x1b000, PERMS);
102 mem.Unmap(0x3000, 0x1c000); 103 mem.Unmap(0x3000, 0x1c000);
103 mem.Map(0x3000, 0, 0x20000); 104 mem.Map(0x3000, 0, 0x20000, PERMS);
104} 105}
105 106
106TEST_CASE("HostMemory: Unmap between placeholders", "[common]") { 107TEST_CASE("HostMemory: Unmap between placeholders", "[common]") {
107 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 108 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
108 mem.Map(0x0000, 0, 0x4000); 109 mem.Map(0x0000, 0, 0x4000, PERMS);
109 mem.Map(0x4000, 0, 0x4000); 110 mem.Map(0x4000, 0, 0x4000, PERMS);
110 mem.Unmap(0x2000, 0x4000); 111 mem.Unmap(0x2000, 0x4000);
111 mem.Map(0x2000, 0, 0x4000); 112 mem.Map(0x2000, 0, 0x4000, PERMS);
112} 113}
113 114
114TEST_CASE("HostMemory: Unmap to origin", "[common]") { 115TEST_CASE("HostMemory: Unmap to origin", "[common]") {
115 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 116 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
116 mem.Map(0x4000, 0, 0x4000); 117 mem.Map(0x4000, 0, 0x4000, PERMS);
117 mem.Map(0x8000, 0, 0x4000); 118 mem.Map(0x8000, 0, 0x4000, PERMS);
118 mem.Unmap(0x4000, 0x4000); 119 mem.Unmap(0x4000, 0x4000);
119 mem.Map(0, 0, 0x4000); 120 mem.Map(0, 0, 0x4000, PERMS);
120 mem.Map(0x4000, 0, 0x4000); 121 mem.Map(0x4000, 0, 0x4000, PERMS);
121} 122}
122 123
123TEST_CASE("HostMemory: Unmap to right", "[common]") { 124TEST_CASE("HostMemory: Unmap to right", "[common]") {
124 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 125 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
125 mem.Map(0x4000, 0, 0x4000); 126 mem.Map(0x4000, 0, 0x4000, PERMS);
126 mem.Map(0x8000, 0, 0x4000); 127 mem.Map(0x8000, 0, 0x4000, PERMS);
127 mem.Unmap(0x8000, 0x4000); 128 mem.Unmap(0x8000, 0x4000);
128 mem.Map(0x8000, 0, 0x4000); 129 mem.Map(0x8000, 0, 0x4000, PERMS);
129} 130}
130 131
131TEST_CASE("HostMemory: Partial right unmap check bindings", "[common]") { 132TEST_CASE("HostMemory: Partial right unmap check bindings", "[common]") {
132 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 133 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
133 mem.Map(0x4000, 0x10000, 0x4000); 134 mem.Map(0x4000, 0x10000, 0x4000, PERMS);
134 135
135 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; 136 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;
136 ptr[0x1000] = 17; 137 ptr[0x1000] = 17;
@@ -142,7 +143,7 @@ TEST_CASE("HostMemory: Partial right unmap check bindings", "[common]") {
142 143
143TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") { 144TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") {
144 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 145 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
145 mem.Map(0x4000, 0x10000, 0x4000); 146 mem.Map(0x4000, 0x10000, 0x4000, PERMS);
146 147
147 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; 148 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;
148 ptr[0x3000] = 19; 149 ptr[0x3000] = 19;
@@ -156,7 +157,7 @@ TEST_CASE("HostMemory: Partial left unmap check bindings", "[common]") {
156 157
157TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") { 158TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") {
158 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 159 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
159 mem.Map(0x4000, 0x10000, 0x4000); 160 mem.Map(0x4000, 0x10000, 0x4000, PERMS);
160 161
161 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; 162 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;
162 ptr[0x0000] = 19; 163 ptr[0x0000] = 19;
@@ -170,8 +171,8 @@ TEST_CASE("HostMemory: Partial middle unmap check bindings", "[common]") {
170 171
171TEST_CASE("HostMemory: Partial sparse middle unmap and check bindings", "[common]") { 172TEST_CASE("HostMemory: Partial sparse middle unmap and check bindings", "[common]") {
172 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE); 173 HostMemory mem(BACKING_SIZE, VIRTUAL_SIZE);
173 mem.Map(0x4000, 0x10000, 0x2000); 174 mem.Map(0x4000, 0x10000, 0x2000, PERMS);
174 mem.Map(0x6000, 0x20000, 0x2000); 175 mem.Map(0x6000, 0x20000, 0x2000, PERMS);
175 176
176 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000; 177 volatile u8* const ptr = mem.VirtualBasePointer() + 0x4000;
177 ptr[0x0000] = 19; 178 ptr[0x0000] = 19;