mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	core: arm_unicorn: Fix interpret fallback by temporarily mapping instruction page.
This commit is contained in:
		
							parent
							
								
									4d7d3651f3
								
							
						
					
					
						commit
						74c27fd1b5
					
				| @ -11,6 +11,7 @@ | |||||||
| #include "core/core_timing.h" | #include "core/core_timing.h" | ||||||
| #include "core/hle/kernel/scheduler.h" | #include "core/hle/kernel/scheduler.h" | ||||||
| #include "core/hle/kernel/svc.h" | #include "core/hle/kernel/svc.h" | ||||||
|  | #include "core/memory.h" | ||||||
| 
 | 
 | ||||||
| namespace Core { | 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) { | void ARM_Unicorn::ExecuteInstructions(std::size_t num_instructions) { | ||||||
|     MICROPROFILE_SCOPE(ARM_Jit_Unicorn); |     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_emu_start(uc, GetPC(), 1ULL << 63, 0, num_instructions)); | ||||||
|  |     CHECKED(uc_mem_unmap(uc, map_addr, page_buffer.size())); | ||||||
|  | 
 | ||||||
|     system.CoreTiming().AddTicks(num_instructions); |     system.CoreTiming().AddTicks(num_instructions); | ||||||
|     if (GDBStub::IsServerEnabled()) { |     if (GDBStub::IsServerEnabled()) { | ||||||
|         if (last_bkpt_hit && last_bkpt.type == GDBStub::BreakpointType::Execute) { |         if (last_bkpt_hit && last_bkpt.type == GDBStub::BreakpointType::Execute) { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei