summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/svc.cpp
diff options
context:
space:
mode:
authorGravatar Lioncash2018-10-14 14:44:38 -0400
committerGravatar Lioncash2018-10-14 20:11:16 -0400
commit90f8474fc183387f6d2daa437dcba4f88ced9b33 (patch)
treed8cc0787a00bbbd2ce2d40a18971a29fc610cc4d /src/core/hle/kernel/svc.cpp
parentMerge pull request #1492 from lioncash/proc (diff)
downloadyuzu-90f8474fc183387f6d2daa437dcba4f88ced9b33.tar.gz
yuzu-90f8474fc183387f6d2daa437dcba4f88ced9b33.tar.xz
yuzu-90f8474fc183387f6d2daa437dcba4f88ced9b33.zip
svc: Clarify enum values for AddressSpaceBaseAddr and AddressSpaceSize in svcGetInfo()
So, one thing that's puzzled me is why the kernel seemed to *not* use the direct code address ranges in some cases for some service functions. For example, in svcMapMemory, the full address space width is compared against for validity, but for svcMapSharedMemory, it compares against 0xFFE00000, 0xFF8000000, and 0x7FF8000000 as upper bounds, and uses either 0x200000 or 0x8000000 as the lower-bounds as the beginning of the compared range. Coincidentally, these exact same values are also used in svcGetInfo, and also when initializing the user address space, so this is actually retrieving the ASLR extents, not the extents of the address space in general.
Diffstat (limited to 'src/core/hle/kernel/svc.cpp')
-rw-r--r--src/core/hle/kernel/svc.cpp21
1 files changed, 4 insertions, 17 deletions
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 7a053da1e..3fd082550 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -448,25 +448,12 @@ static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id)
448 case GetInfoType::RandomEntropy: 448 case GetInfoType::RandomEntropy:
449 *result = 0; 449 *result = 0;
450 break; 450 break;
451 case GetInfoType::AddressSpaceBaseAddr: 451 case GetInfoType::ASLRRegionBaseAddr:
452 *result = vm_manager.GetCodeRegionBaseAddress(); 452 *result = vm_manager.GetASLRRegionBaseAddress();
453 break; 453 break;
454 case GetInfoType::AddressSpaceSize: { 454 case GetInfoType::ASLRRegionSize:
455 const u64 width = vm_manager.GetAddressSpaceWidth(); 455 *result = vm_manager.GetASLRRegionSize();
456
457 switch (width) {
458 case 32:
459 *result = 0xFFE00000;
460 break;
461 case 36:
462 *result = 0xFF8000000;
463 break;
464 case 39:
465 *result = 0x7FF8000000;
466 break;
467 }
468 break; 456 break;
469 }
470 case GetInfoType::NewMapRegionBaseAddr: 457 case GetInfoType::NewMapRegionBaseAddr:
471 *result = vm_manager.GetNewMapRegionBaseAddress(); 458 *result = vm_manager.GetNewMapRegionBaseAddress();
472 break; 459 break;