mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-28 22:49:02 -05:00 
			
		
		
		
	core: arm_unicorn: Fix interpret fallback by temporarily mapping instruction page.
This commit is contained in:
		| @@ -11,6 +11,7 @@ | ||||
| #include "core/core_timing.h" | ||||
| #include "core/hle/kernel/scheduler.h" | ||||
| #include "core/hle/kernel/svc.h" | ||||
| #include "core/memory.h" | ||||
|  | ||||
| namespace Core { | ||||
|  | ||||
| @@ -171,7 +172,17 @@ MICROPROFILE_DEFINE(ARM_Jit_Unicorn, "ARM JIT", "Unicorn", MP_RGB(255, 64, 64)); | ||||
|  | ||||
| void ARM_Unicorn::ExecuteInstructions(std::size_t num_instructions) { | ||||
|     MICROPROFILE_SCOPE(ARM_Jit_Unicorn); | ||||
|  | ||||
|     // Temporarily map the code page for Unicorn | ||||
|     u64 map_addr{GetPC() & ~Memory::PAGE_MASK}; | ||||
|     std::vector<u8> page_buffer(Memory::PAGE_SIZE); | ||||
|     system.Memory().ReadBlock(map_addr, page_buffer.data(), page_buffer.size()); | ||||
|  | ||||
|     CHECKED(uc_mem_map_ptr(uc, map_addr, page_buffer.size(), | ||||
|                            UC_PROT_READ | UC_PROT_WRITE | UC_PROT_EXEC, page_buffer.data())); | ||||
|     CHECKED(uc_emu_start(uc, GetPC(), 1ULL << 63, 0, num_instructions)); | ||||
|     CHECKED(uc_mem_unmap(uc, map_addr, page_buffer.size())); | ||||
|  | ||||
|     system.CoreTiming().AddTicks(num_instructions); | ||||
|     if (GDBStub::IsServerEnabled()) { | ||||
|         if (last_bkpt_hit && last_bkpt.type == GDBStub::BreakpointType::Execute) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei