diff options
author | Lioncash <mathew1800@gmail.com> | 2019-04-12 05:21:13 +0200 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-04-13 03:55:50 +0200 |
commit | 76a2465655be493492446b4ef686f4b59b2e3969 (patch) | |
tree | dc28b70dfd697390427ea013b0925999a9f19578 /src/core/hle/kernel/vm_manager.h | |
parent | Merge pull request #2235 from ReinUsesLisp/spirv-decompiler (diff) | |
download | yuzu-76a2465655be493492446b4ef686f4b59b2e3969.tar yuzu-76a2465655be493492446b4ef686f4b59b2e3969.tar.gz yuzu-76a2465655be493492446b4ef686f4b59b2e3969.tar.bz2 yuzu-76a2465655be493492446b4ef686f4b59b2e3969.tar.lz yuzu-76a2465655be493492446b4ef686f4b59b2e3969.tar.xz yuzu-76a2465655be493492446b4ef686f4b59b2e3969.tar.zst yuzu-76a2465655be493492446b4ef686f4b59b2e3969.zip |
Diffstat (limited to 'src/core/hle/kernel/vm_manager.h')
-rw-r--r-- | src/core/hle/kernel/vm_manager.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 6f484b7bf..27120d3b1 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h @@ -43,6 +43,9 @@ enum class VMAPermission : u8 { ReadExecute = Read | Execute, WriteExecute = Write | Execute, ReadWriteExecute = Read | Write | Execute, + + // Used as a wildcard when checking permissions across memory ranges + All = 0xFF, }; constexpr VMAPermission operator|(VMAPermission lhs, VMAPermission rhs) { @@ -152,6 +155,9 @@ enum class MemoryState : u32 { FlagUncached = 1U << 24, FlagCodeMemory = 1U << 25, + // Wildcard used in range checking to indicate all states. + All = 0xFFFFFFFF, + // Convenience flag sets to reduce repetition IPCFlags = FlagIPC0 | FlagIPC3 | FlagIPC1, @@ -415,6 +421,26 @@ public: /// ResultVal<VAddr> SetHeapSize(u64 size); + /// Maps a region of memory as code memory. + /// + /// @param dst_address The base address of the region to create the aliasing memory region. + /// @param src_address The base address of the region to be aliased. + /// @param size The total amount of memory to map in bytes. + /// + /// @pre Both memory regions lie within the actual addressable address space. + /// + /// @post After this function finishes execution, assuming success, then the address range + /// [dst_address, dst_address+size) will alias the memory region, + /// [src_address, src_address+size). + /// <p> + /// What this also entails is as follows: + /// 1. The aliased region gains the Locked memory attribute. + /// 2. The aliased region becomes read-only. + /// 3. The aliasing region becomes read-only. + /// 4. The aliasing region is created with a memory state of MemoryState::CodeModule. + /// + ResultCode MapCodeMemory(VAddr dst_address, VAddr src_address, u64 size); + /// Queries the memory manager for information about the given address. /// /// @param address The address to query the memory manager about for information. |