summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hle/kernel/k_page_table.cpp28
-rw-r--r--src/core/hle/kernel/k_process.cpp6
-rw-r--r--src/core/hle/service/ldr/ldr.cpp2
3 files changed, 18 insertions, 18 deletions
diff --git a/src/core/hle/kernel/k_page_table.cpp b/src/core/hle/kernel/k_page_table.cpp
index 9be9f5e2b..23734b501 100644
--- a/src/core/hle/kernel/k_page_table.cpp
+++ b/src/core/hle/kernel/k_page_table.cpp
@@ -307,7 +307,7 @@ ResultCode KPageTable::MapCodeMemory(VAddr dst_addr, VAddr src_addr, std::size_t
307 KMemoryPermission perm{}; 307 KMemoryPermission perm{};
308 CASCADE_CODE(CheckMemoryState(&state, &perm, nullptr, nullptr, src_addr, size, 308 CASCADE_CODE(CheckMemoryState(&state, &perm, nullptr, nullptr, src_addr, size,
309 KMemoryState::All, KMemoryState::Normal, KMemoryPermission::All, 309 KMemoryState::All, KMemoryState::Normal, KMemoryPermission::All,
310 KMemoryPermission::ReadAndWrite, KMemoryAttribute::Mask, 310 KMemoryPermission::UserReadWrite, KMemoryAttribute::Mask,
311 KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped)); 311 KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped));
312 312
313 if (IsRegionMapped(dst_addr, size)) { 313 if (IsRegionMapped(dst_addr, size)) {
@@ -361,7 +361,7 @@ ResultCode KPageTable::UnmapCodeMemory(VAddr dst_addr, VAddr src_addr, std::size
361 361
362 block_manager->Update(dst_addr, num_pages, KMemoryState::Free); 362 block_manager->Update(dst_addr, num_pages, KMemoryState::Free);
363 block_manager->Update(src_addr, num_pages, KMemoryState::Normal, 363 block_manager->Update(src_addr, num_pages, KMemoryState::Normal,
364 KMemoryPermission::ReadAndWrite); 364 KMemoryPermission::UserReadWrite);
365 365
366 system.InvalidateCpuInstructionCacheRange(dst_addr, size); 366 system.InvalidateCpuInstructionCacheRange(dst_addr, size);
367 367
@@ -416,7 +416,7 @@ void KPageTable::MapPhysicalMemory(KPageLinkedList& page_linked_list, VAddr star
416 } 416 }
417 417
418 const std::size_t num_pages{std::min(src_num_pages, dst_num_pages)}; 418 const std::size_t num_pages{std::min(src_num_pages, dst_num_pages)};
419 Operate(dst_addr, num_pages, KMemoryPermission::ReadAndWrite, OperationType::Map, 419 Operate(dst_addr, num_pages, KMemoryPermission::UserReadWrite, OperationType::Map,
420 map_addr); 420 map_addr);
421 421
422 dst_addr += num_pages * PageSize; 422 dst_addr += num_pages * PageSize;
@@ -470,7 +470,7 @@ ResultCode KPageTable::MapPhysicalMemory(VAddr addr, std::size_t size) {
470 const std::size_t num_pages{size / PageSize}; 470 const std::size_t num_pages{size / PageSize};
471 block_manager->Update(addr, num_pages, KMemoryState::Free, KMemoryPermission::None, 471 block_manager->Update(addr, num_pages, KMemoryState::Free, KMemoryPermission::None,
472 KMemoryAttribute::None, KMemoryState::Normal, 472 KMemoryAttribute::None, KMemoryState::Normal,
473 KMemoryPermission::ReadAndWrite, KMemoryAttribute::None); 473 KMemoryPermission::UserReadWrite, KMemoryAttribute::None);
474 474
475 return ResultSuccess; 475 return ResultSuccess;
476} 476}
@@ -554,7 +554,7 @@ ResultCode KPageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) {
554 KMemoryState src_state{}; 554 KMemoryState src_state{};
555 CASCADE_CODE(CheckMemoryState( 555 CASCADE_CODE(CheckMemoryState(
556 &src_state, nullptr, nullptr, nullptr, src_addr, size, KMemoryState::FlagCanAlias, 556 &src_state, nullptr, nullptr, nullptr, src_addr, size, KMemoryState::FlagCanAlias,
557 KMemoryState::FlagCanAlias, KMemoryPermission::All, KMemoryPermission::ReadAndWrite, 557 KMemoryState::FlagCanAlias, KMemoryPermission::All, KMemoryPermission::UserReadWrite,
558 KMemoryAttribute::Mask, KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped)); 558 KMemoryAttribute::Mask, KMemoryAttribute::None, KMemoryAttribute::IpcAndDeviceMapped));
559 559
560 if (IsRegionMapped(dst_addr, size)) { 560 if (IsRegionMapped(dst_addr, size)) {
@@ -568,13 +568,13 @@ ResultCode KPageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) {
568 568
569 { 569 {
570 auto block_guard = detail::ScopeExit([&] { 570 auto block_guard = detail::ScopeExit([&] {
571 Operate(src_addr, num_pages, KMemoryPermission::ReadAndWrite, 571 Operate(src_addr, num_pages, KMemoryPermission::UserReadWrite,
572 OperationType::ChangePermissions); 572 OperationType::ChangePermissions);
573 }); 573 });
574 574
575 CASCADE_CODE(Operate(src_addr, num_pages, KMemoryPermission::None, 575 CASCADE_CODE(Operate(src_addr, num_pages, KMemoryPermission::None,
576 OperationType::ChangePermissions)); 576 OperationType::ChangePermissions));
577 CASCADE_CODE(MapPages(dst_addr, page_linked_list, KMemoryPermission::ReadAndWrite)); 577 CASCADE_CODE(MapPages(dst_addr, page_linked_list, KMemoryPermission::UserReadWrite));
578 578
579 block_guard.Cancel(); 579 block_guard.Cancel();
580 } 580 }
@@ -582,7 +582,7 @@ ResultCode KPageTable::Map(VAddr dst_addr, VAddr src_addr, std::size_t size) {
582 block_manager->Update(src_addr, num_pages, src_state, KMemoryPermission::None, 582 block_manager->Update(src_addr, num_pages, src_state, KMemoryPermission::None,
583 KMemoryAttribute::Locked); 583 KMemoryAttribute::Locked);
584 block_manager->Update(dst_addr, num_pages, KMemoryState::Stack, 584 block_manager->Update(dst_addr, num_pages, KMemoryState::Stack,
585 KMemoryPermission::ReadAndWrite); 585 KMemoryPermission::UserReadWrite);
586 586
587 return ResultSuccess; 587 return ResultSuccess;
588} 588}
@@ -617,13 +617,13 @@ ResultCode KPageTable::Unmap(VAddr dst_addr, VAddr src_addr, std::size_t size) {
617 auto block_guard = detail::ScopeExit([&] { MapPages(dst_addr, dst_pages, dst_perm); }); 617 auto block_guard = detail::ScopeExit([&] { MapPages(dst_addr, dst_pages, dst_perm); });
618 618
619 CASCADE_CODE(Operate(dst_addr, num_pages, KMemoryPermission::None, OperationType::Unmap)); 619 CASCADE_CODE(Operate(dst_addr, num_pages, KMemoryPermission::None, OperationType::Unmap));
620 CASCADE_CODE(Operate(src_addr, num_pages, KMemoryPermission::ReadAndWrite, 620 CASCADE_CODE(Operate(src_addr, num_pages, KMemoryPermission::UserReadWrite,
621 OperationType::ChangePermissions)); 621 OperationType::ChangePermissions));
622 622
623 block_guard.Cancel(); 623 block_guard.Cancel();
624 } 624 }
625 625
626 block_manager->Update(src_addr, num_pages, src_state, KMemoryPermission::ReadAndWrite); 626 block_manager->Update(src_addr, num_pages, src_state, KMemoryPermission::UserReadWrite);
627 block_manager->Update(dst_addr, num_pages, KMemoryState::Free); 627 block_manager->Update(dst_addr, num_pages, KMemoryState::Free);
628 628
629 return ResultSuccess; 629 return ResultSuccess;
@@ -785,7 +785,7 @@ ResultCode KPageTable::ReserveTransferMemory(VAddr addr, std::size_t size, KMemo
785 &state, nullptr, &attribute, nullptr, addr, size, 785 &state, nullptr, &attribute, nullptr, addr, size,
786 KMemoryState::FlagCanTransfer | KMemoryState::FlagReferenceCounted, 786 KMemoryState::FlagCanTransfer | KMemoryState::FlagReferenceCounted,
787 KMemoryState::FlagCanTransfer | KMemoryState::FlagReferenceCounted, KMemoryPermission::All, 787 KMemoryState::FlagCanTransfer | KMemoryState::FlagReferenceCounted, KMemoryPermission::All,
788 KMemoryPermission::ReadAndWrite, KMemoryAttribute::Mask, KMemoryAttribute::None, 788 KMemoryPermission::UserReadWrite, KMemoryAttribute::Mask, KMemoryAttribute::None,
789 KMemoryAttribute::IpcAndDeviceMapped)); 789 KMemoryAttribute::IpcAndDeviceMapped));
790 790
791 block_manager->Update(addr, size / PageSize, state, perm, attribute | KMemoryAttribute::Locked); 791 block_manager->Update(addr, size / PageSize, state, perm, attribute | KMemoryAttribute::Locked);
@@ -805,7 +805,7 @@ ResultCode KPageTable::ResetTransferMemory(VAddr addr, std::size_t size) {
805 KMemoryPermission::None, KMemoryPermission::None, KMemoryAttribute::Mask, 805 KMemoryPermission::None, KMemoryPermission::None, KMemoryAttribute::Mask,
806 KMemoryAttribute::Locked, KMemoryAttribute::IpcAndDeviceMapped)); 806 KMemoryAttribute::Locked, KMemoryAttribute::IpcAndDeviceMapped));
807 807
808 block_manager->Update(addr, size / PageSize, state, KMemoryPermission::ReadAndWrite); 808 block_manager->Update(addr, size / PageSize, state, KMemoryPermission::UserReadWrite);
809 return ResultSuccess; 809 return ResultSuccess;
810} 810}
811 811
@@ -906,7 +906,7 @@ ResultCode KPageTable::SetHeapSize(VAddr* out, std::size_t size) {
906 R_TRY(this->CheckMemoryState(std::addressof(num_allocator_blocks), 906 R_TRY(this->CheckMemoryState(std::addressof(num_allocator_blocks),
907 heap_region_start + size, GetHeapSize() - size, 907 heap_region_start + size, GetHeapSize() - size,
908 KMemoryState::All, KMemoryState::Normal, 908 KMemoryState::All, KMemoryState::Normal,
909 KMemoryPermission::All, KMemoryPermission::ReadAndWrite, 909 KMemoryPermission::All, KMemoryPermission::UserReadWrite,
910 KMemoryAttribute::All, KMemoryAttribute::None)); 910 KMemoryAttribute::All, KMemoryAttribute::None));
911 911
912 // Unmap the end of the heap. 912 // Unmap the end of the heap.
@@ -981,7 +981,7 @@ ResultCode KPageTable::SetHeapSize(VAddr* out, std::size_t size) {
981 981
982 // Apply the memory block update. 982 // Apply the memory block update.
983 block_manager->Update(current_heap_end, num_pages, KMemoryState::Normal, 983 block_manager->Update(current_heap_end, num_pages, KMemoryState::Normal,
984 KMemoryPermission::ReadAndWrite, KMemoryAttribute::None); 984 KMemoryPermission::UserReadWrite, KMemoryAttribute::None);
985 985
986 // Update the current heap end. 986 // Update the current heap end.
987 current_heap_end = heap_region_start + size; 987 current_heap_end = heap_region_start + size;
diff --git a/src/core/hle/kernel/k_process.cpp b/src/core/hle/kernel/k_process.cpp
index bf98a51e2..856c200d3 100644
--- a/src/core/hle/kernel/k_process.cpp
+++ b/src/core/hle/kernel/k_process.cpp
@@ -509,7 +509,7 @@ VAddr KProcess::CreateTLSRegion() {
509 const VAddr tls_page_addr{page_table 509 const VAddr tls_page_addr{page_table
510 ->AllocateAndMapMemory(1, PageSize, true, start, size / PageSize, 510 ->AllocateAndMapMemory(1, PageSize, true, start, size / PageSize,
511 KMemoryState::ThreadLocal, 511 KMemoryState::ThreadLocal,
512 KMemoryPermission::ReadAndWrite, 512 KMemoryPermission::UserReadWrite,
513 tls_map_addr) 513 tls_map_addr)
514 .ValueOr(0)}; 514 .ValueOr(0)};
515 515
@@ -550,7 +550,7 @@ void KProcess::LoadModule(CodeSet code_set, VAddr base_addr) {
550 550
551 ReprotectSegment(code_set.CodeSegment(), KMemoryPermission::ReadAndExecute); 551 ReprotectSegment(code_set.CodeSegment(), KMemoryPermission::ReadAndExecute);
552 ReprotectSegment(code_set.RODataSegment(), KMemoryPermission::Read); 552 ReprotectSegment(code_set.RODataSegment(), KMemoryPermission::Read);
553 ReprotectSegment(code_set.DataSegment(), KMemoryPermission::ReadAndWrite); 553 ReprotectSegment(code_set.DataSegment(), KMemoryPermission::UserReadWrite);
554} 554}
555 555
556bool KProcess::IsSignaled() const { 556bool KProcess::IsSignaled() const {
@@ -587,7 +587,7 @@ ResultCode KProcess::AllocateMainThreadStack(std::size_t stack_size) {
587 CASCADE_RESULT(main_thread_stack_top, 587 CASCADE_RESULT(main_thread_stack_top,
588 page_table->AllocateAndMapMemory( 588 page_table->AllocateAndMapMemory(
589 main_thread_stack_size / PageSize, PageSize, false, start, size / PageSize, 589 main_thread_stack_size / PageSize, PageSize, false, start, size / PageSize,
590 KMemoryState::Stack, KMemoryPermission::ReadAndWrite)); 590 KMemoryState::Stack, KMemoryPermission::UserReadWrite));
591 591
592 main_thread_stack_top += main_thread_stack_size; 592 main_thread_stack_top += main_thread_stack_size;
593 593
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp
index f16dbc595..061358863 100644
--- a/src/core/hle/service/ldr/ldr.cpp
+++ b/src/core/hle/service/ldr/ldr.cpp
@@ -402,7 +402,7 @@ public:
402 ro_start, data_start - ro_start, Kernel::KMemoryPermission::Read)); 402 ro_start, data_start - ro_start, Kernel::KMemoryPermission::Read));
403 403
404 return process->PageTable().SetProcessMemoryPermission( 404 return process->PageTable().SetProcessMemoryPermission(
405 data_start, bss_end_addr - data_start, Kernel::KMemoryPermission::ReadAndWrite); 405 data_start, bss_end_addr - data_start, Kernel::KMemoryPermission::UserReadWrite);
406 } 406 }
407 407
408 void LoadModule(Kernel::HLERequestContext& ctx) { 408 void LoadModule(Kernel::HLERequestContext& ctx) {