diff options
| -rw-r--r-- | src/core/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_page_bitmap.h | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_system_control.cpp (renamed from src/core/hle/kernel/memory/system_control.cpp) | 13 | ||||
| -rw-r--r-- | src/core/hle/kernel/k_system_control.h | 19 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/page_table.cpp | 11 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/system_control.h | 14 | ||||
| -rw-r--r-- | src/core/hle/service/ldr/ldr.cpp | 4 |
7 files changed, 38 insertions, 31 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 6604bc2c5..8aad9cb41 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -182,6 +182,8 @@ add_library(core STATIC | |||
| 182 | hle/kernel/k_spin_lock.h | 182 | hle/kernel/k_spin_lock.h |
| 183 | hle/kernel/k_synchronization_object.cpp | 183 | hle/kernel/k_synchronization_object.cpp |
| 184 | hle/kernel/k_synchronization_object.h | 184 | hle/kernel/k_synchronization_object.h |
| 185 | hle/kernel/k_system_control.cpp | ||
| 186 | hle/kernel/k_system_control.h | ||
| 185 | hle/kernel/k_thread.cpp | 187 | hle/kernel/k_thread.cpp |
| 186 | hle/kernel/k_thread.h | 188 | hle/kernel/k_thread.h |
| 187 | hle/kernel/k_thread_queue.h | 189 | hle/kernel/k_thread_queue.h |
| @@ -204,8 +206,6 @@ add_library(core STATIC | |||
| 204 | hle/kernel/memory/page_table.cpp | 206 | hle/kernel/memory/page_table.cpp |
| 205 | hle/kernel/memory/page_table.h | 207 | hle/kernel/memory/page_table.h |
| 206 | hle/kernel/memory/slab_heap.h | 208 | hle/kernel/memory/slab_heap.h |
| 207 | hle/kernel/memory/system_control.cpp | ||
| 208 | hle/kernel/memory/system_control.h | ||
| 209 | hle/kernel/object.cpp | 209 | hle/kernel/object.cpp |
| 210 | hle/kernel/object.h | 210 | hle/kernel/object.h |
| 211 | hle/kernel/physical_core.cpp | 211 | hle/kernel/physical_core.cpp |
diff --git a/src/core/hle/kernel/k_page_bitmap.h b/src/core/hle/kernel/k_page_bitmap.h index da2d20032..c75d667c9 100644 --- a/src/core/hle/kernel/k_page_bitmap.h +++ b/src/core/hle/kernel/k_page_bitmap.h | |||
| @@ -12,7 +12,7 @@ | |||
| 12 | #include "common/bit_util.h" | 12 | #include "common/bit_util.h" |
| 13 | #include "common/common_types.h" | 13 | #include "common/common_types.h" |
| 14 | #include "common/tiny_mt.h" | 14 | #include "common/tiny_mt.h" |
| 15 | #include "core/hle/kernel/memory/system_control.h" | 15 | #include "core/hle/kernel/k_system_control.h" |
| 16 | 16 | ||
| 17 | namespace Kernel { | 17 | namespace Kernel { |
| 18 | 18 | ||
| @@ -43,7 +43,7 @@ private: | |||
| 43 | 43 | ||
| 44 | public: | 44 | public: |
| 45 | RandomBitGenerator() { | 45 | RandomBitGenerator() { |
| 46 | rng.Initialize(static_cast<u32>(Memory::SystemControl::GenerateRandomU64())); | 46 | rng.Initialize(static_cast<u32>(KSystemControl::GenerateRandomU64())); |
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | std::size_t SelectRandomBit(u64 bitmap) { | 49 | std::size_t SelectRandomBit(u64 bitmap) { |
diff --git a/src/core/hle/kernel/memory/system_control.cpp b/src/core/hle/kernel/k_system_control.cpp index e855696ad..aa1682f69 100644 --- a/src/core/hle/kernel/memory/system_control.cpp +++ b/src/core/hle/kernel/k_system_control.cpp | |||
| @@ -1,12 +1,13 @@ | |||
| 1 | // Copyright 2020 yuzu Emulator Project | 1 | // Copyright 2021 yuzu Emulator Project |
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <random> | 5 | #include <random> |
| 6 | 6 | ||
| 7 | #include "core/hle/kernel/memory/system_control.h" | 7 | #include "core/hle/kernel/k_system_control.h" |
| 8 | |||
| 9 | namespace Kernel { | ||
| 8 | 10 | ||
| 9 | namespace Kernel::Memory::SystemControl { | ||
| 10 | namespace { | 11 | namespace { |
| 11 | template <typename F> | 12 | template <typename F> |
| 12 | u64 GenerateUniformRange(u64 min, u64 max, F f) { | 13 | u64 GenerateUniformRange(u64 min, u64 max, F f) { |
| @@ -27,15 +28,15 @@ u64 GenerateUniformRange(u64 min, u64 max, F f) { | |||
| 27 | 28 | ||
| 28 | } // Anonymous namespace | 29 | } // Anonymous namespace |
| 29 | 30 | ||
| 30 | u64 GenerateRandomU64() { | 31 | u64 KSystemControl::GenerateRandomU64() { |
| 31 | static std::random_device device; | 32 | static std::random_device device; |
| 32 | static std::mt19937 gen(device()); | 33 | static std::mt19937 gen(device()); |
| 33 | static std::uniform_int_distribution<u64> distribution(1, std::numeric_limits<u64>::max()); | 34 | static std::uniform_int_distribution<u64> distribution(1, std::numeric_limits<u64>::max()); |
| 34 | return distribution(gen); | 35 | return distribution(gen); |
| 35 | } | 36 | } |
| 36 | 37 | ||
| 37 | u64 GenerateRandomRange(u64 min, u64 max) { | 38 | u64 KSystemControl::GenerateRandomRange(u64 min, u64 max) { |
| 38 | return GenerateUniformRange(min, max, GenerateRandomU64); | 39 | return GenerateUniformRange(min, max, GenerateRandomU64); |
| 39 | } | 40 | } |
| 40 | 41 | ||
| 41 | } // namespace Kernel::Memory::SystemControl | 42 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/k_system_control.h b/src/core/hle/kernel/k_system_control.h new file mode 100644 index 000000000..1d5b64ffa --- /dev/null +++ b/src/core/hle/kernel/k_system_control.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | // Copyright 2021 yuzu Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "common/common_types.h" | ||
| 8 | |||
| 9 | namespace Kernel { | ||
| 10 | |||
| 11 | class KSystemControl { | ||
| 12 | public: | ||
| 13 | KSystemControl() = default; | ||
| 14 | |||
| 15 | static u64 GenerateRandomRange(u64 min, u64 max); | ||
| 16 | static u64 GenerateRandomU64(); | ||
| 17 | }; | ||
| 18 | |||
| 19 | } // namespace Kernel | ||
diff --git a/src/core/hle/kernel/memory/page_table.cpp b/src/core/hle/kernel/memory/page_table.cpp index 00ed9b881..034d43ecd 100644 --- a/src/core/hle/kernel/memory/page_table.cpp +++ b/src/core/hle/kernel/memory/page_table.cpp | |||
| @@ -6,14 +6,15 @@ | |||
| 6 | #include "common/assert.h" | 6 | #include "common/assert.h" |
| 7 | #include "common/scope_exit.h" | 7 | #include "common/scope_exit.h" |
| 8 | #include "core/core.h" | 8 | #include "core/core.h" |
| 9 | #include "core/hle/kernel/k_resource_limit.h" | ||
| 9 | #include "core/hle/kernel/k_scoped_resource_reservation.h" | 10 | #include "core/hle/kernel/k_scoped_resource_reservation.h" |
| 11 | #include "core/hle/kernel/k_system_control.h" | ||
| 10 | #include "core/hle/kernel/kernel.h" | 12 | #include "core/hle/kernel/kernel.h" |
| 11 | #include "core/hle/kernel/memory/address_space_info.h" | 13 | #include "core/hle/kernel/memory/address_space_info.h" |
| 12 | #include "core/hle/kernel/memory/memory_block.h" | 14 | #include "core/hle/kernel/memory/memory_block.h" |
| 13 | #include "core/hle/kernel/memory/memory_block_manager.h" | 15 | #include "core/hle/kernel/memory/memory_block_manager.h" |
| 14 | #include "core/hle/kernel/memory/page_linked_list.h" | 16 | #include "core/hle/kernel/memory/page_linked_list.h" |
| 15 | #include "core/hle/kernel/memory/page_table.h" | 17 | #include "core/hle/kernel/memory/page_table.h" |
| 16 | #include "core/hle/kernel/memory/system_control.h" | ||
| 17 | #include "core/hle/kernel/process.h" | 18 | #include "core/hle/kernel/process.h" |
| 18 | #include "core/hle/kernel/svc_results.h" | 19 | #include "core/hle/kernel/svc_results.h" |
| 19 | #include "core/memory.h" | 20 | #include "core/memory.h" |
| @@ -149,13 +150,13 @@ ResultCode PageTable::InitializeForProcess(FileSys::ProgramAddressSpaceType as_t | |||
| 149 | // Determine random placements for each region | 150 | // Determine random placements for each region |
| 150 | std::size_t alias_rnd{}, heap_rnd{}, stack_rnd{}, kmap_rnd{}; | 151 | std::size_t alias_rnd{}, heap_rnd{}, stack_rnd{}, kmap_rnd{}; |
| 151 | if (enable_aslr) { | 152 | if (enable_aslr) { |
| 152 | alias_rnd = SystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * | 153 | alias_rnd = KSystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * |
| 153 | RegionAlignment; | 154 | RegionAlignment; |
| 154 | heap_rnd = SystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * | 155 | heap_rnd = KSystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * |
| 155 | RegionAlignment; | 156 | RegionAlignment; |
| 156 | stack_rnd = SystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * | 157 | stack_rnd = KSystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * |
| 157 | RegionAlignment; | 158 | RegionAlignment; |
| 158 | kmap_rnd = SystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * | 159 | kmap_rnd = KSystemControl::GenerateRandomRange(0, remaining_size / RegionAlignment) * |
| 159 | RegionAlignment; | 160 | RegionAlignment; |
| 160 | } | 161 | } |
| 161 | 162 | ||
diff --git a/src/core/hle/kernel/memory/system_control.h b/src/core/hle/kernel/memory/system_control.h deleted file mode 100644 index a01b6b014..000000000 --- a/src/core/hle/kernel/memory/system_control.h +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | // Copyright 2020 yuzu Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "common/common_types.h" | ||
| 8 | |||
| 9 | namespace Kernel::Memory::SystemControl { | ||
| 10 | |||
| 11 | u64 GenerateRandomRange(u64 min, u64 max); | ||
| 12 | u64 GenerateRandomU64(); | ||
| 13 | |||
| 14 | } // namespace Kernel::Memory::SystemControl | ||
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index c724d2554..d3cd25ff8 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp | |||
| @@ -11,8 +11,8 @@ | |||
| 11 | #include "common/scope_exit.h" | 11 | #include "common/scope_exit.h" |
| 12 | #include "core/core.h" | 12 | #include "core/core.h" |
| 13 | #include "core/hle/ipc_helpers.h" | 13 | #include "core/hle/ipc_helpers.h" |
| 14 | #include "core/hle/kernel/k_system_control.h" | ||
| 14 | #include "core/hle/kernel/memory/page_table.h" | 15 | #include "core/hle/kernel/memory/page_table.h" |
| 15 | #include "core/hle/kernel/memory/system_control.h" | ||
| 16 | #include "core/hle/kernel/process.h" | 16 | #include "core/hle/kernel/process.h" |
| 17 | #include "core/hle/kernel/svc_results.h" | 17 | #include "core/hle/kernel/svc_results.h" |
| 18 | #include "core/hle/service/ldr/ldr.h" | 18 | #include "core/hle/service/ldr/ldr.h" |
| @@ -315,7 +315,7 @@ public: | |||
| 315 | Kernel::Memory::PageBits}; | 315 | Kernel::Memory::PageBits}; |
| 316 | do { | 316 | do { |
| 317 | addr = page_table.GetAliasCodeRegionStart() + | 317 | addr = page_table.GetAliasCodeRegionStart() + |
| 318 | (Kernel::Memory::SystemControl::GenerateRandomRange(0, end_pages) | 318 | (Kernel::KSystemControl::GenerateRandomRange(0, end_pages) |
| 319 | << Kernel::Memory::PageBits); | 319 | << Kernel::Memory::PageBits); |
| 320 | } while (!page_table.IsInsideAddressSpace(addr, size) || | 320 | } while (!page_table.IsInsideAddressSpace(addr, size) || |
| 321 | page_table.IsInsideHeapRegion(addr, size) || | 321 | page_table.IsInsideHeapRegion(addr, size) || |