mirror of
				https://github.com/yuzu-emu/yuzu.git
				synced 2025-11-04 06:53:43 +00:00 
			
		
		
		
	Merge pull request #938 from Subv/querymem
Kernel/SVC: Implemented svcQueryMemory.
This commit is contained in:
		
						commit
						41513cfb0c
					
				@ -87,8 +87,16 @@ template<ResultCode func(u32, s64)> void Wrap() {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<ResultCode func(void*, void*, u32)> void Wrap(){
 | 
			
		||||
    FuncReturn(func(Memory::GetPointer(PARAM(0)), Memory::GetPointer(PARAM(1)), PARAM(2)).raw);
 | 
			
		||||
template<ResultCode func(MemoryInfo*, PageInfo*, u32)> void Wrap() {
 | 
			
		||||
    MemoryInfo memory_info = {};
 | 
			
		||||
    PageInfo page_info = {};
 | 
			
		||||
    u32 retval = func(&memory_info, &page_info, PARAM(2)).raw;
 | 
			
		||||
    Core::g_app_core->SetReg(1, memory_info.base_address);
 | 
			
		||||
    Core::g_app_core->SetReg(2, memory_info.size);
 | 
			
		||||
    Core::g_app_core->SetReg(3, memory_info.permission);
 | 
			
		||||
    Core::g_app_core->SetReg(4, memory_info.state);
 | 
			
		||||
    Core::g_app_core->SetReg(5, page_info.flags);
 | 
			
		||||
    FuncReturn(retval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template<ResultCode func(s32*, u32)> void Wrap(){
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@
 | 
			
		||||
#include "core/hle/kernel/shared_memory.h"
 | 
			
		||||
#include "core/hle/kernel/thread.h"
 | 
			
		||||
#include "core/hle/kernel/timer.h"
 | 
			
		||||
#include "core/hle/kernel/vm_manager.h"
 | 
			
		||||
 | 
			
		||||
#include "core/hle/function_wrappers.h"
 | 
			
		||||
#include "core/hle/result.h"
 | 
			
		||||
@ -530,8 +531,19 @@ static ResultCode ReleaseSemaphore(s32* count, Handle handle, s32 release_count)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Query memory
 | 
			
		||||
static ResultCode QueryMemory(void* info, void* out, u32 addr) {
 | 
			
		||||
    LOG_ERROR(Kernel_SVC, "(UNIMPLEMENTED) called addr=0x%08X", addr);
 | 
			
		||||
static ResultCode QueryMemory(MemoryInfo* memory_info, PageInfo* page_info, u32 addr) {
 | 
			
		||||
    auto vma = Kernel::g_current_process->address_space->FindVMA(addr);
 | 
			
		||||
 | 
			
		||||
    if (vma == Kernel::g_current_process->address_space->vma_map.end())
 | 
			
		||||
        return ResultCode(ErrorDescription::InvalidAddress, ErrorModule::OS, ErrorSummary::InvalidArgument, ErrorLevel::Usage);
 | 
			
		||||
 | 
			
		||||
    memory_info->base_address = vma->second.base;
 | 
			
		||||
    memory_info->permission = static_cast<u32>(vma->second.permissions);
 | 
			
		||||
    memory_info->size = vma->second.size;
 | 
			
		||||
    memory_info->state = static_cast<u32>(vma->second.meminfo_state);
 | 
			
		||||
 | 
			
		||||
    page_info->flags = 0;
 | 
			
		||||
    LOG_TRACE(Kernel_SVC, "called addr=0x%08X", addr);
 | 
			
		||||
    return RESULT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user