diff options
author | Lioncash <mathew1800@gmail.com> | 2019-03-04 22:40:17 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-03-04 23:08:55 +0100 |
commit | 6c42a23550de8d6181562e969a142004f91c7daf (patch) | |
tree | 54bb08184bd0645dc30dc1a11a51785bf86a2af5 | |
parent | svc: Migrate address range checking functions to VMManager (diff) | |
download | yuzu-6c42a23550de8d6181562e969a142004f91c7daf.tar yuzu-6c42a23550de8d6181562e969a142004f91c7daf.tar.gz yuzu-6c42a23550de8d6181562e969a142004f91c7daf.tar.bz2 yuzu-6c42a23550de8d6181562e969a142004f91c7daf.tar.lz yuzu-6c42a23550de8d6181562e969a142004f91c7daf.tar.xz yuzu-6c42a23550de8d6181562e969a142004f91c7daf.tar.zst yuzu-6c42a23550de8d6181562e969a142004f91c7daf.zip |
-rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 19 | ||||
-rw-r--r-- | src/core/hle/kernel/vm_manager.h | 20 |
2 files changed, 35 insertions, 4 deletions
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index 56f3d1f79..e81856bdc 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp @@ -763,6 +763,11 @@ u64 VMManager::GetCodeRegionSize() const { return code_region_end - code_region_base; } +bool VMManager::IsWithinCodeRegion(VAddr address, u64 size) const { + return IsInsideAddressRange(address, size, GetCodeRegionBaseAddress(), + GetCodeRegionEndAddress()); +} + VAddr VMManager::GetHeapRegionBaseAddress() const { return heap_region_base; } @@ -775,6 +780,11 @@ u64 VMManager::GetHeapRegionSize() const { return heap_region_end - heap_region_base; } +bool VMManager::IsWithinHeapRegion(VAddr address, u64 size) const { + return IsInsideAddressRange(address, size, GetHeapRegionBaseAddress(), + GetHeapRegionEndAddress()); +} + VAddr VMManager::GetMapRegionBaseAddress() const { return map_region_base; } @@ -787,6 +797,10 @@ u64 VMManager::GetMapRegionSize() const { return map_region_end - map_region_base; } +bool VMManager::IsWithinMapRegion(VAddr address, u64 size) const { + return IsInsideAddressRange(address, size, GetMapRegionBaseAddress(), GetMapRegionEndAddress()); +} + VAddr VMManager::GetNewMapRegionBaseAddress() const { return new_map_region_base; } @@ -816,4 +830,9 @@ u64 VMManager::GetTLSIORegionSize() const { return tls_io_region_end - tls_io_region_base; } +bool VMManager::IsWithinTLSIORegion(VAddr address, u64 size) const { + return IsInsideAddressRange(address, size, GetTLSIORegionBaseAddress(), + GetTLSIORegionEndAddress()); +} + } // namespace Kernel diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 60f36a5b9..88e0b3c02 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h @@ -441,12 +441,12 @@ public: /// Gets the end address of the ASLR region. VAddr GetASLRRegionEndAddress() const; - /// Determines whether or not the specified address range is within the ASLR region. - bool IsWithinASLRRegion(VAddr address, u64 size) const; - /// Gets the size of the ASLR region u64 GetASLRRegionSize() const; + /// Determines whether or not the specified address range is within the ASLR region. + bool IsWithinASLRRegion(VAddr address, u64 size) const; + /// Gets the base address of the code region. VAddr GetCodeRegionBaseAddress() const; @@ -456,6 +456,9 @@ public: /// Gets the total size of the code region in bytes. u64 GetCodeRegionSize() const; + /// Determines whether or not the specified range is within the code region. + bool IsWithinCodeRegion(VAddr address, u64 size) const; + /// Gets the base address of the heap region. VAddr GetHeapRegionBaseAddress() const; @@ -465,6 +468,9 @@ public: /// Gets the total size of the heap region in bytes. u64 GetHeapRegionSize() const; + /// Determines whether or not the specified range is within the heap region. + bool IsWithinHeapRegion(VAddr address, u64 size) const; + /// Gets the base address of the map region. VAddr GetMapRegionBaseAddress() const; @@ -474,6 +480,9 @@ public: /// Gets the total size of the map region in bytes. u64 GetMapRegionSize() const; + /// Determines whether or not the specified range is within the map region. + bool IsWithinMapRegion(VAddr address, u64 size) const; + /// Gets the base address of the new map region. VAddr GetNewMapRegionBaseAddress() const; @@ -483,7 +492,7 @@ public: /// Gets the total size of the new map region in bytes. u64 GetNewMapRegionSize() const; - /// Determines whether or not the given address range lies within the new map region + /// Determines whether or not the given address range is within the new map region bool IsWithinNewMapRegion(VAddr address, u64 size) const; /// Gets the base address of the TLS IO region. @@ -495,6 +504,9 @@ public: /// Gets the total size of the TLS IO region in bytes. u64 GetTLSIORegionSize() const; + /// Determines if the given address range is within the TLS IO region. + bool IsWithinTLSIORegion(VAddr address, u64 size) const; + /// Each VMManager has its own page table, which is set as the main one when the owning process /// is scheduled. Memory::PageTable page_table; |