summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/kernel/k_page_table.cpp4
-rw-r--r--src/core/hle/kernel/k_page_table.h4
-rw-r--r--src/core/hle/kernel/svc.cpp4
-rw-r--r--src/core/hle/service/ldr/ldr.cpp27
4 files changed, 19 insertions, 20 deletions
diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp
index 6077985b5..9be9f5e2b 100644
--- a/src/core/hle/kernel/k_page_table.cpp
+++ b/src/core/hle/kernel/k_page_table.cpp
@@ -298,7 +298,7 @@ ResultCode KPageTable::MapProcessCode(VAddr addr, std::size_t num_pages, KMemory
298 return ResultSuccess; 298 return ResultSuccess;
299} 299}
300 300
301ResultCode KPageTable::MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) { 301ResultCode KPageTable::MapCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) {
302 std::lock_guard lock{page_table_lock}; 302 std::lock_guard lock{page_table_lock};
303 303
304 const std::size_t num_pages{size / PageSize}; 304 const std::size_t num_pages{size / PageSize};
@@ -335,7 +335,7 @@ ResultCode KPageTable::MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std:
335 return ResultSuccess; 335 return ResultSuccess;
336} 336}
337 337
338ResultCode KPageTable::UnmapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) { 338ResultCode KPageTable::UnmapCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size) {
339 std::lock_guard lock{page_table_lock}; 339 std::lock_guard lock{page_table_lock};
340 340
341 if (!size) { 341 if (!size) {
diff --git a/src/core/hle/kernel/k_page_table.h b/src/core/hle/kernel/k_page_table.h
index 9235b822a..a596bf381 100644
--- a/src/core/hle/kernel/k_page_table.h
+++ b/src/core/hle/kernel/k_page_table.h
@@ -31,8 +31,8 @@ public:
31 KMemoryManager::Pool pool); 31 KMemoryManager::Pool pool);
32 ResultCode MapProcessCode(VAddr addr, std::size_t pages_count, KMemoryState state, 32 ResultCode MapProcessCode(VAddr addr, std::size_t pages_count, KMemoryState state,
33 KMemoryPermission perm); 33 KMemoryPermission perm);
34 ResultCode MapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size); 34 ResultCode MapCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size);
35 ResultCode UnmapProcessCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size); 35 ResultCode UnmapCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t size);
36 ResultCode UnmapProcessMemory(VAddr dst_addr, std::size_t size, KPageTable& src_page_table, 36 ResultCode UnmapProcessMemory(VAddr dst_addr, std::size_t size, KPageTable& src_page_table,
37 VAddr src_addr); 37 VAddr src_addr);
38 ResultCode MapPhysicalMemory(VAddr addr, std::size_t size); 38 ResultCode MapPhysicalMemory(VAddr addr, std::size_t size);
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 4362508a3..55ce0236f 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -1626,7 +1626,7 @@ static ResultCode MapProcessCodeMemory(Core::System& system, Handle process_hand
1626 return ResultInvalidMemoryRegion; 1626 return ResultInvalidMemoryRegion;
1627 } 1627 }
1628 1628
1629 return page_table.MapProcessCodeMemory(dst_address, src_address, size); 1629 return page_table.MapCodeMemory(dst_address, src_address, size);
1630} 1630}
1631 1631
1632static ResultCode UnmapProcessCodeMemory(Core::System& system, Handle process_handle, 1632static ResultCode UnmapProcessCodeMemory(Core::System& system, Handle process_handle,
@@ -1694,7 +1694,7 @@ static ResultCode UnmapProcessCodeMemory(Core::System& system, Handle process_ha
1694 return ResultInvalidMemoryRegion; 1694 return ResultInvalidMemoryRegion;
1695 } 1695 }
1696 1696
1697 return page_table.UnmapProcessCodeMemory(dst_address, src_address, size); 1697 return page_table.UnmapCodeMemory(dst_address, src_address, size);
1698} 1698}
1699 1699
1700/// Exits the current process 1700/// Exits the current process
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp
index 3782703d2..f16dbc595 100644
--- a/src/core/hle/service/ldr/ldr.cpp
+++ b/src/core/hle/service/ldr/ldr.cpp
@@ -325,7 +325,7 @@ public:
325 for (std::size_t retry = 0; retry < MAXIMUM_MAP_RETRIES; retry++) { 325 for (std::size_t retry = 0; retry < MAXIMUM_MAP_RETRIES; retry++) {
326 auto& page_table{process->PageTable()}; 326 auto& page_table{process->PageTable()};
327 const VAddr addr{GetRandomMapRegion(page_table, size)}; 327 const VAddr addr{GetRandomMapRegion(page_table, size)};
328 const ResultCode result{page_table.MapProcessCodeMemory(addr, baseAddress, size)}; 328 const ResultCode result{page_table.MapCodeMemory(addr, baseAddress, size)};
329 329
330 if (result == Kernel::ResultInvalidCurrentMemory) { 330 if (result == Kernel::ResultInvalidCurrentMemory) {
331 continue; 331 continue;
@@ -351,12 +351,12 @@ public:
351 351
352 if (bss_size) { 352 if (bss_size) {
353 auto block_guard = detail::ScopeExit([&] { 353 auto block_guard = detail::ScopeExit([&] {
354 page_table.UnmapProcessCodeMemory(addr + nro_size, bss_addr, bss_size); 354 page_table.UnmapCodeMemory(addr + nro_size, bss_addr, bss_size);
355 page_table.UnmapProcessCodeMemory(addr, nro_addr, nro_size); 355 page_table.UnmapCodeMemory(addr, nro_addr, nro_size);
356 }); 356 });
357 357
358 const ResultCode result{ 358 const ResultCode result{
359 page_table.MapProcessCodeMemory(addr + nro_size, bss_addr, bss_size)}; 359 page_table.MapCodeMemory(addr + nro_size, bss_addr, bss_size)};
360 360
361 if (result == Kernel::ResultInvalidCurrentMemory) { 361 if (result == Kernel::ResultInvalidCurrentMemory) {
362 continue; 362 continue;
@@ -530,16 +530,15 @@ public:
530 ResultCode UnmapNro(const NROInfo& info) { 530 ResultCode UnmapNro(const NROInfo& info) {
531 // Each region must be unmapped separately to validate memory state 531 // Each region must be unmapped separately to validate memory state
532 auto& page_table{system.CurrentProcess()->PageTable()}; 532 auto& page_table{system.CurrentProcess()->PageTable()};
533 CASCADE_CODE(page_table.UnmapProcessCodeMemory(info.nro_address + info.text_size + 533 CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address + info.text_size + info.ro_size +
534 info.ro_size + info.data_size, 534 info.data_size,
535 info.bss_address, info.bss_size)); 535 info.bss_address, info.bss_size));
536 CASCADE_CODE(page_table.UnmapProcessCodeMemory( 536 CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address + info.text_size + info.ro_size,
537 info.nro_address + info.text_size + info.ro_size, 537 info.src_addr + info.text_size + info.ro_size,
538 info.src_addr + info.text_size + info.ro_size, info.data_size)); 538 info.data_size));
539 CASCADE_CODE(page_table.UnmapProcessCodeMemory( 539 CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address + info.text_size,
540 info.nro_address + info.text_size, info.src_addr + info.text_size, info.ro_size)); 540 info.src_addr + info.text_size, info.ro_size));
541 CASCADE_CODE( 541 CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address, info.src_addr, info.text_size));
542 page_table.UnmapProcessCodeMemory(info.nro_address, info.src_addr, info.text_size));
543 return ResultSuccess; 542 return ResultSuccess;
544 } 543 }
545 544