device_memory: Use smaller virtual reservation size for compatibility with 39-bit paging
This commit is contained in:
		| @@ -6,9 +6,15 @@ | |||||||
|  |  | ||||||
| namespace Core { | namespace Core { | ||||||
|  |  | ||||||
|  | #ifdef ANDROID | ||||||
|  | constexpr size_t VirtualReserveSize = 1ULL << 38; | ||||||
|  | #else | ||||||
|  | constexpr size_t VirtualReserveSize = 1ULL << 39; | ||||||
|  | #endif | ||||||
|  |  | ||||||
| DeviceMemory::DeviceMemory() | DeviceMemory::DeviceMemory() | ||||||
|     : buffer{Kernel::Board::Nintendo::Nx::KSystemControl::Init::GetIntendedMemorySize(), |     : buffer{Kernel::Board::Nintendo::Nx::KSystemControl::Init::GetIntendedMemorySize(), | ||||||
|              1ULL << 39} {} |              VirtualReserveSize} {} | ||||||
| DeviceMemory::~DeviceMemory() = default; | DeviceMemory::~DeviceMemory() = default; | ||||||
|  |  | ||||||
| } // namespace Core | } // namespace Core | ||||||
|   | |||||||
| @@ -25,7 +25,12 @@ constexpr std::array<KAddressSpaceInfo, 13> AddressSpaceInfos{{ | |||||||
|    { .bit_width = 36, .address = 2_GiB       , .size = 64_GiB  - 2_GiB  , .type = KAddressSpaceInfo::Type::MapLarge, }, |    { .bit_width = 36, .address = 2_GiB       , .size = 64_GiB  - 2_GiB  , .type = KAddressSpaceInfo::Type::MapLarge, }, | ||||||
|    { .bit_width = 36, .address = Size_Invalid, .size = 8_GiB            , .type = KAddressSpaceInfo::Type::Heap,     }, |    { .bit_width = 36, .address = Size_Invalid, .size = 8_GiB            , .type = KAddressSpaceInfo::Type::Heap,     }, | ||||||
|    { .bit_width = 36, .address = Size_Invalid, .size = 6_GiB            , .type = KAddressSpaceInfo::Type::Alias,    }, |    { .bit_width = 36, .address = Size_Invalid, .size = 6_GiB            , .type = KAddressSpaceInfo::Type::Alias,    }, | ||||||
|  | #ifdef ANDROID | ||||||
|  |    // With Android, we use a 38-bit address space due to memory limitations. This should (safely) truncate ASLR region. | ||||||
|  |    { .bit_width = 39, .address = 128_MiB     , .size = 256_GiB - 128_MiB, .type = KAddressSpaceInfo::Type::Map39Bit, }, | ||||||
|  | #else | ||||||
|    { .bit_width = 39, .address = 128_MiB     , .size = 512_GiB - 128_MiB, .type = KAddressSpaceInfo::Type::Map39Bit, }, |    { .bit_width = 39, .address = 128_MiB     , .size = 512_GiB - 128_MiB, .type = KAddressSpaceInfo::Type::Map39Bit, }, | ||||||
|  | #endif | ||||||
|    { .bit_width = 39, .address = Size_Invalid, .size = 64_GiB           , .type = KAddressSpaceInfo::Type::MapSmall  }, |    { .bit_width = 39, .address = Size_Invalid, .size = 64_GiB           , .type = KAddressSpaceInfo::Type::MapSmall  }, | ||||||
|    { .bit_width = 39, .address = Size_Invalid, .size = 8_GiB            , .type = KAddressSpaceInfo::Type::Heap,     }, |    { .bit_width = 39, .address = Size_Invalid, .size = 8_GiB            , .type = KAddressSpaceInfo::Type::Heap,     }, | ||||||
|    { .bit_width = 39, .address = Size_Invalid, .size = 64_GiB           , .type = KAddressSpaceInfo::Type::Alias,    }, |    { .bit_width = 39, .address = Size_Invalid, .size = 64_GiB           , .type = KAddressSpaceInfo::Type::Alias,    }, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user