summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/vm_manager.cpp
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2019-07-06 03:49:11 +0200
committerLioncash <mathew1800@gmail.com>2019-07-06 03:57:31 +0200
commit313cc36fecbcc0fd55ee9c81776071b62326b7e2 (patch)
tree10c17025be76e5413519a3f757bcee80fb41c737 /src/core/hle/kernel/vm_manager.cpp
parentMerge pull request #2601 from FernandoS27/texture_cache (diff)
downloadyuzu-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.cpp15
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;
}
}