From 72f671fd7a72d75d6fd697673bee1be18a6dda8b Mon Sep 17 00:00:00 2001 From: bunnei Date: Mon, 1 Jan 2018 16:01:06 -0500 Subject: svc: Improve svcGetInfo. --- src/core/hle/svc.cpp | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'src/core/hle/svc.cpp') diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index fa6fd9ab1..6ec151d94 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -194,16 +194,38 @@ static void OutputDebugString(VAddr address, s32 len) { LOG_DEBUG(Debug_Emulated, "%.*s", len, string.data()); } +/// Gets system/memory information for the current process static ResultCode GetInfo(u64* result, u64 info_id, u64 handle, u64 info_sub_id) { - LOG_TRACE(Kernel_SVC, "called, info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, info_sub_id, handle); + LOG_TRACE(Kernel_SVC, "called info_id=0x%X, info_sub_id=0x%X, handle=0x%08X", info_id, + info_sub_id, handle); - if (!handle) { - switch (info_id) { - case 0xB: - *result = 0; // Used for PRNG seed - return RESULT_SUCCESS; - } + auto& vm_manager = Kernel::g_current_process->vm_manager; + switch (static_cast(info_id)) { + case GetInfoType::TotalMemoryUsage: + *result = vm_manager.GetTotalMemoryUsage(); + break; + case GetInfoType::TotalHeapUsage: + *result = vm_manager.GetTotalHeapUsage(); + break; + case GetInfoType::RandomEntropy: + *result = 0; + break; + case GetInfoType::AddressSpaceBaseAddr: + *result = vm_manager.GetAddressSpaceBaseAddr(); + break; + case GetInfoType::AddressSpaceSize: + *result = vm_manager.GetAddressSpaceSize(); + break; + case GetInfoType::NewMapRegionBaseAddr: + *result = vm_manager.GetNewMapRegionBaseAddr(); + break; + case GetInfoType::NewMapRegionSize: + *result = vm_manager.GetNewMapRegionSize(); + break; + default: + UNIMPLEMENTED(); } + return RESULT_SUCCESS; } -- cgit v1.2.3