diff options
| -rw-r--r-- | src/core/hle/kernel/k_page_table.cpp | 28 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_process.cpp | 6 | ||||
| -rw-r--r-- | src/core/hle/service/ldr/ldr.cpp | 2 |
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 | ||
| 556 | bool KProcess::IsSignaled() const { | 556 | bool 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) { |