diff options
| author | 2018-01-27 15:16:39 +0000 | |
|---|---|---|
| committer | 2018-01-27 15:16:39 +0000 | |
| commit | 738f91a57da7c129d1ee85b7abbf6858f8669ee3 (patch) | |
| tree | 3ef164d8e79c0aea6ab72dc9b8fa78877a82338a /src/tests | |
| parent | externals: Update dynarmic (diff) | |
| download | yuzu-738f91a57da7c129d1ee85b7abbf6858f8669ee3.tar.gz yuzu-738f91a57da7c129d1ee85b7abbf6858f8669ee3.tar.xz yuzu-738f91a57da7c129d1ee85b7abbf6858f8669ee3.zip | |
memory: Replace all memory hooking with Special regions
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/core/arm/arm_test_common.cpp | 32 | ||||
| -rw-r--r-- | src/tests/core/arm/arm_test_common.h | 22 |
2 files changed, 29 insertions, 25 deletions
diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp index 2339bdfb8..88bbbc95c 100644 --- a/src/tests/core/arm/arm_test_common.cpp +++ b/src/tests/core/arm/arm_test_common.cpp | |||
| @@ -19,8 +19,8 @@ TestEnvironment::TestEnvironment(bool mutable_memory_) | |||
| 19 | page_table = &Kernel::g_current_process->vm_manager.page_table; | 19 | page_table = &Kernel::g_current_process->vm_manager.page_table; |
| 20 | 20 | ||
| 21 | page_table->pointers.fill(nullptr); | 21 | page_table->pointers.fill(nullptr); |
| 22 | page_table->special_regions.clear(); | ||
| 22 | page_table->attributes.fill(Memory::PageType::Unmapped); | 23 | page_table->attributes.fill(Memory::PageType::Unmapped); |
| 23 | page_table->cached_res_count.fill(0); | ||
| 24 | 24 | ||
| 25 | Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory); | 25 | Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory); |
| 26 | Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory); | 26 | Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory); |
| @@ -62,11 +62,11 @@ void TestEnvironment::ClearWriteRecords() { | |||
| 62 | 62 | ||
| 63 | TestEnvironment::TestMemory::~TestMemory() {} | 63 | TestEnvironment::TestMemory::~TestMemory() {} |
| 64 | 64 | ||
| 65 | bool TestEnvironment::TestMemory::IsValidAddress(VAddr addr) { | 65 | boost::optional<bool> TestEnvironment::TestMemory::IsValidAddress(VAddr addr) { |
| 66 | return true; | 66 | return true; |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | u8 TestEnvironment::TestMemory::Read8(VAddr addr) { | 69 | boost::optional<u8> TestEnvironment::TestMemory::Read8(VAddr addr) { |
| 70 | auto iter = data.find(addr); | 70 | auto iter = data.find(addr); |
| 71 | if (iter == data.end()) { | 71 | if (iter == data.end()) { |
| 72 | return addr; // Some arbitrary data | 72 | return addr; // Some arbitrary data |
| @@ -74,16 +74,16 @@ u8 TestEnvironment::TestMemory::Read8(VAddr addr) { | |||
| 74 | return iter->second; | 74 | return iter->second; |
| 75 | } | 75 | } |
| 76 | 76 | ||
| 77 | u16 TestEnvironment::TestMemory::Read16(VAddr addr) { | 77 | boost::optional<u16> TestEnvironment::TestMemory::Read16(VAddr addr) { |
| 78 | return Read8(addr) | static_cast<u16>(Read8(addr + 1)) << 8; | 78 | return *Read8(addr) | static_cast<u16>(*Read8(addr + 1)) << 8; |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | u32 TestEnvironment::TestMemory::Read32(VAddr addr) { | 81 | boost::optional<u32> TestEnvironment::TestMemory::Read32(VAddr addr) { |
| 82 | return Read16(addr) | static_cast<u32>(Read16(addr + 2)) << 16; | 82 | return *Read16(addr) | static_cast<u32>(*Read16(addr + 2)) << 16; |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | u64 TestEnvironment::TestMemory::Read64(VAddr addr) { | 85 | boost::optional<u64> TestEnvironment::TestMemory::Read64(VAddr addr) { |
| 86 | return Read32(addr) | static_cast<u64>(Read32(addr + 4)) << 32; | 86 | return *Read32(addr) | static_cast<u64>(*Read32(addr + 4)) << 32; |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) { | 89 | bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) { |
| @@ -91,34 +91,38 @@ bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, s | |||
| 91 | u8* data = static_cast<u8*>(dest_buffer); | 91 | u8* data = static_cast<u8*>(dest_buffer); |
| 92 | 92 | ||
| 93 | for (size_t i = 0; i < size; i++, addr++, data++) { | 93 | for (size_t i = 0; i < size; i++, addr++, data++) { |
| 94 | *data = Read8(addr); | 94 | *data = *Read8(addr); |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | return true; | 97 | return true; |
| 98 | } | 98 | } |
| 99 | 99 | ||
| 100 | void TestEnvironment::TestMemory::Write8(VAddr addr, u8 data) { | 100 | bool TestEnvironment::TestMemory::Write8(VAddr addr, u8 data) { |
| 101 | env->write_records.emplace_back(8, addr, data); | 101 | env->write_records.emplace_back(8, addr, data); |
| 102 | if (env->mutable_memory) | 102 | if (env->mutable_memory) |
| 103 | env->SetMemory8(addr, data); | 103 | env->SetMemory8(addr, data); |
| 104 | return true; | ||
| 104 | } | 105 | } |
| 105 | 106 | ||
| 106 | void TestEnvironment::TestMemory::Write16(VAddr addr, u16 data) { | 107 | bool TestEnvironment::TestMemory::Write16(VAddr addr, u16 data) { |
| 107 | env->write_records.emplace_back(16, addr, data); | 108 | env->write_records.emplace_back(16, addr, data); |
| 108 | if (env->mutable_memory) | 109 | if (env->mutable_memory) |
| 109 | env->SetMemory16(addr, data); | 110 | env->SetMemory16(addr, data); |
| 111 | return true; | ||
| 110 | } | 112 | } |
| 111 | 113 | ||
| 112 | void TestEnvironment::TestMemory::Write32(VAddr addr, u32 data) { | 114 | bool TestEnvironment::TestMemory::Write32(VAddr addr, u32 data) { |
| 113 | env->write_records.emplace_back(32, addr, data); | 115 | env->write_records.emplace_back(32, addr, data); |
| 114 | if (env->mutable_memory) | 116 | if (env->mutable_memory) |
| 115 | env->SetMemory32(addr, data); | 117 | env->SetMemory32(addr, data); |
| 118 | return true; | ||
| 116 | } | 119 | } |
| 117 | 120 | ||
| 118 | void TestEnvironment::TestMemory::Write64(VAddr addr, u64 data) { | 121 | bool TestEnvironment::TestMemory::Write64(VAddr addr, u64 data) { |
| 119 | env->write_records.emplace_back(64, addr, data); | 122 | env->write_records.emplace_back(64, addr, data); |
| 120 | if (env->mutable_memory) | 123 | if (env->mutable_memory) |
| 121 | env->SetMemory64(addr, data); | 124 | env->SetMemory64(addr, data); |
| 125 | return true; | ||
| 122 | } | 126 | } |
| 123 | 127 | ||
| 124 | bool TestEnvironment::TestMemory::WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) { | 128 | bool TestEnvironment::TestMemory::WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) { |
diff --git a/src/tests/core/arm/arm_test_common.h b/src/tests/core/arm/arm_test_common.h index 592c28594..b66922d61 100644 --- a/src/tests/core/arm/arm_test_common.h +++ b/src/tests/core/arm/arm_test_common.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | #include <vector> | 7 | #include <vector> |
| 8 | 8 | ||
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "core/mmio.h" | 10 | #include "core/memory_hook.h" |
| 11 | 11 | ||
| 12 | namespace ArmTests { | 12 | namespace ArmTests { |
| 13 | 13 | ||
| @@ -51,25 +51,25 @@ public: | |||
| 51 | 51 | ||
| 52 | private: | 52 | private: |
| 53 | friend struct TestMemory; | 53 | friend struct TestMemory; |
| 54 | struct TestMemory final : Memory::MMIORegion { | 54 | struct TestMemory final : Memory::MemoryHook { |
| 55 | explicit TestMemory(TestEnvironment* env_) : env(env_) {} | 55 | explicit TestMemory(TestEnvironment* env_) : env(env_) {} |
| 56 | TestEnvironment* env; | 56 | TestEnvironment* env; |
| 57 | 57 | ||
| 58 | ~TestMemory() override; | 58 | ~TestMemory() override; |
| 59 | 59 | ||
| 60 | bool IsValidAddress(VAddr addr) override; | 60 | boost::optional<bool> IsValidAddress(VAddr addr) override; |
| 61 | 61 | ||
| 62 | u8 Read8(VAddr addr) override; | 62 | boost::optional<u8> Read8(VAddr addr) override; |
| 63 | u16 Read16(VAddr addr) override; | 63 | boost::optional<u16> Read16(VAddr addr) override; |
| 64 | u32 Read32(VAddr addr) override; | 64 | boost::optional<u32> Read32(VAddr addr) override; |
| 65 | u64 Read64(VAddr addr) override; | 65 | boost::optional<u64> Read64(VAddr addr) override; |
| 66 | 66 | ||
| 67 | bool ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) override; | 67 | bool ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) override; |
| 68 | 68 | ||
| 69 | void Write8(VAddr addr, u8 data) override; | 69 | bool Write8(VAddr addr, u8 data) override; |
| 70 | void Write16(VAddr addr, u16 data) override; | 70 | bool Write16(VAddr addr, u16 data) override; |
| 71 | void Write32(VAddr addr, u32 data) override; | 71 | bool Write32(VAddr addr, u32 data) override; |
| 72 | void Write64(VAddr addr, u64 data) override; | 72 | bool Write64(VAddr addr, u64 data) override; |
| 73 | 73 | ||
| 74 | bool WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) override; | 74 | bool WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) override; |
| 75 | 75 | ||