diff options
author | Lioncash <mathew1800@gmail.com> | 2019-07-06 03:49:11 +0200 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2019-07-06 03:57:31 +0200 |
commit | 313cc36fecbcc0fd55ee9c81776071b62326b7e2 (patch) | |
tree | 10c17025be76e5413519a3f757bcee80fb41c737 /src/core/hle/kernel/vm_manager.cpp | |
parent | Merge pull request #2601 from FernandoS27/texture_cache (diff) | |
download | yuzu-313cc36fecbcc0fd55ee9c81776071b62326b7e2.tar yuzu-313cc36fecbcc0fd55ee9c81776071b62326b7e2.tar.gz yuzu-313cc36fecbcc0fd55ee9c81776071b62326b7e2.tar.bz2 yuzu-313cc36fecbcc0fd55ee9c81776071b62326b7e2.tar.lz yuzu-313cc36fecbcc0fd55ee9c81776071b62326b7e2.tar.xz yuzu-313cc36fecbcc0fd55ee9c81776071b62326b7e2.tar.zst yuzu-313cc36fecbcc0fd55ee9c81776071b62326b7e2.zip |
Diffstat (limited to 'src/core/hle/kernel/vm_manager.cpp')
-rw-r--r-- | src/core/hle/kernel/vm_manager.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index 3df5ccb7f..568f49c3f 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp @@ -628,6 +628,8 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty u64 new_map_region_size = 0; u64 tls_io_region_size = 0; + u64 stack_and_tls_io_end = 0; + switch (type) { case FileSys::ProgramAddressSpaceType::Is32Bit: case FileSys::ProgramAddressSpaceType::Is32BitNoMap: @@ -643,6 +645,7 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty map_region_size = 0; heap_region_size = 0x80000000; } + stack_and_tls_io_end = 0x40000000; break; case FileSys::ProgramAddressSpaceType::Is36Bit: address_space_width = 36; @@ -652,6 +655,7 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty aslr_region_end = aslr_region_base + 0xFF8000000; map_region_size = 0x180000000; heap_region_size = 0x180000000; + stack_and_tls_io_end = 0x80000000; break; case FileSys::ProgramAddressSpaceType::Is39Bit: address_space_width = 39; @@ -669,6 +673,8 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty return; } + const u64 stack_and_tls_io_begin = aslr_region_base; + address_space_base = 0; address_space_end = 1ULL << address_space_width; @@ -686,8 +692,13 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty tls_io_region_end = tls_io_region_base + tls_io_region_size; if (new_map_region_size == 0) { - new_map_region_base = address_space_base; - new_map_region_end = address_space_end; + new_map_region_base = stack_and_tls_io_begin; + new_map_region_end = stack_and_tls_io_end; + } + + if (tls_io_region_size == 0) { + tls_io_region_base = stack_and_tls_io_begin; + tls_io_region_end = stack_and_tls_io_end; } } |