summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
628 u64 new_map_region_size = 0; 628 u64 new_map_region_size = 0;
629 u64 tls_io_region_size = 0; 629 u64 tls_io_region_size = 0;
630 630
631 u64 stack_and_tls_io_end = 0;
632
631 switch (type) { 633 switch (type) {
632 case FileSys::ProgramAddressSpaceType::Is32Bit: 634 case FileSys::ProgramAddressSpaceType::Is32Bit:
633 case FileSys::ProgramAddressSpaceType::Is32BitNoMap: 635 case FileSys::ProgramAddressSpaceType::Is32BitNoMap:
@@ -643,6 +645,7 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty
643 map_region_size = 0; 645 map_region_size = 0;
644 heap_region_size = 0x80000000; 646 heap_region_size = 0x80000000;
645 } 647 }
648 stack_and_tls_io_end = 0x40000000;
646 break; 649 break;
647 case FileSys::ProgramAddressSpaceType::Is36Bit: 650 case FileSys::ProgramAddressSpaceType::Is36Bit:
648 address_space_width = 36; 651 address_space_width = 36;
@@ -652,6 +655,7 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty
652 aslr_region_end = aslr_region_base + 0xFF8000000; 655 aslr_region_end = aslr_region_base + 0xFF8000000;
653 map_region_size = 0x180000000; 656 map_region_size = 0x180000000;
654 heap_region_size = 0x180000000; 657 heap_region_size = 0x180000000;
658 stack_and_tls_io_end = 0x80000000;
655 break; 659 break;
656 case FileSys::ProgramAddressSpaceType::Is39Bit: 660 case FileSys::ProgramAddressSpaceType::Is39Bit:
657 address_space_width = 39; 661 address_space_width = 39;
@@ -669,6 +673,8 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty
669 return; 673 return;
670 } 674 }
671 675
676 const u64 stack_and_tls_io_begin = aslr_region_base;
677
672 address_space_base = 0; 678 address_space_base = 0;
673 address_space_end = 1ULL << address_space_width; 679 address_space_end = 1ULL << address_space_width;
674 680
@@ -686,8 +692,13 @@ void VMManager::InitializeMemoryRegionRanges(FileSys::ProgramAddressSpaceType ty
686 tls_io_region_end = tls_io_region_base + tls_io_region_size; 692 tls_io_region_end = tls_io_region_base + tls_io_region_size;
687 693
688 if (new_map_region_size == 0) { 694 if (new_map_region_size == 0) {
689 new_map_region_base = address_space_base; 695 new_map_region_base = stack_and_tls_io_begin;
690 new_map_region_end = address_space_end; 696 new_map_region_end = stack_and_tls_io_end;
697 }
698
699 if (tls_io_region_size == 0) {
700 tls_io_region_base = stack_and_tls_io_begin;
701 tls_io_region_end = stack_and_tls_io_end;
691 } 702 }
692} 703}
693 704