memory.cpp 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // Copyright 2017 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <catch.hpp>
  5. #include "core/hle/kernel/memory.h"
  6. #include "core/hle/kernel/process.h"
  7. #include "core/memory.h"
  8. TEST_CASE("Memory::IsValidVirtualAddress", "[core][memory][!hide]") {
  9. SECTION("these regions should not be mapped on an empty process") {
  10. auto process = Kernel::Process::Create("");
  11. CHECK(Memory::IsValidVirtualAddress(*process, Memory::PROCESS_IMAGE_VADDR) == false);
  12. CHECK(Memory::IsValidVirtualAddress(*process, Memory::HEAP_VADDR) == false);
  13. CHECK(Memory::IsValidVirtualAddress(*process, Memory::LINEAR_HEAP_VADDR) == false);
  14. CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == false);
  15. CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false);
  16. CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == false);
  17. CHECK(Memory::IsValidVirtualAddress(*process, Memory::TLS_AREA_VADDR) == false);
  18. }
  19. SECTION("CONFIG_MEMORY_VADDR and SHARED_PAGE_VADDR should be valid after mapping them") {
  20. auto process = Kernel::Process::Create("");
  21. Kernel::MapSharedPages(process->vm_manager);
  22. CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == true);
  23. CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == true);
  24. }
  25. SECTION("special regions should be valid after mapping them") {
  26. auto process = Kernel::Process::Create("");
  27. SECTION("VRAM") {
  28. Kernel::HandleSpecialMapping(process->vm_manager,
  29. {Memory::VRAM_VADDR, Memory::VRAM_SIZE, false, false});
  30. CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == true);
  31. }
  32. SECTION("IO (Not yet implemented)") {
  33. Kernel::HandleSpecialMapping(
  34. process->vm_manager, {Memory::IO_AREA_VADDR, Memory::IO_AREA_SIZE, false, false});
  35. CHECK_FALSE(Memory::IsValidVirtualAddress(*process, Memory::IO_AREA_VADDR) == true);
  36. }
  37. SECTION("DSP") {
  38. Kernel::HandleSpecialMapping(
  39. process->vm_manager, {Memory::DSP_RAM_VADDR, Memory::DSP_RAM_SIZE, false, false});
  40. CHECK(Memory::IsValidVirtualAddress(*process, Memory::DSP_RAM_VADDR) == true);
  41. }
  42. }
  43. SECTION("Unmapping a VAddr should make it invalid") {
  44. auto process = Kernel::Process::Create("");
  45. Kernel::MapSharedPages(process->vm_manager);
  46. process->vm_manager.UnmapRange(Memory::CONFIG_MEMORY_VADDR, Memory::CONFIG_MEMORY_SIZE);
  47. CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false);
  48. }
  49. }