mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Merge pull request #4603 from DimitriPilot3/gdbstub-watchpoint-fix1
gdbstub: only let Execute breakpoints write/restore BKPT opcodes into memory
This commit is contained in:
		
						commit
						ae57d72b33
					
				
					 1 changed files with 14 additions and 8 deletions
				
			
		|  | @ -409,10 +409,13 @@ static void RemoveBreakpoint(BreakpointType type, VAddr addr) { | |||
| 
 | ||||
|     LOG_DEBUG(Debug_GDBStub, "gdb: removed a breakpoint: {:08x} bytes at {:08x} of type {}", | ||||
|               bp->second.len, bp->second.addr, static_cast<int>(type)); | ||||
|     Core::System::GetInstance().Memory().WriteBlock( | ||||
|         *Core::System::GetInstance().Kernel().GetCurrentProcess(), bp->second.addr, | ||||
|         bp->second.inst.data(), bp->second.inst.size()); | ||||
|     Core::CPU().ClearInstructionCache(); | ||||
| 
 | ||||
|     if (type == BreakpointType::Execute) { | ||||
|         Core::System::GetInstance().Memory().WriteBlock( | ||||
|             *Core::System::GetInstance().Kernel().GetCurrentProcess(), bp->second.addr, | ||||
|             bp->second.inst.data(), bp->second.inst.size()); | ||||
|         Core::CPU().ClearInstructionCache(); | ||||
|     } | ||||
|     p.erase(addr); | ||||
| } | ||||
| 
 | ||||
|  | @ -921,11 +924,14 @@ static bool CommitBreakpoint(BreakpointType type, VAddr addr, u32 len) { | |||
|     Core::System::GetInstance().Memory().ReadBlock( | ||||
|         *Core::System::GetInstance().Kernel().GetCurrentProcess(), addr, breakpoint.inst.data(), | ||||
|         breakpoint.inst.size()); | ||||
| 
 | ||||
|     static constexpr std::array<u8, 4> btrap{0x70, 0x00, 0x20, 0xe1}; | ||||
|     Core::System::GetInstance().Memory().WriteBlock( | ||||
|         *Core::System::GetInstance().Kernel().GetCurrentProcess(), addr, btrap.data(), | ||||
|         btrap.size()); | ||||
|     Core::CPU().ClearInstructionCache(); | ||||
|     if (type == BreakpointType::Execute) { | ||||
|         Core::System::GetInstance().Memory().WriteBlock( | ||||
|             *Core::System::GetInstance().Kernel().GetCurrentProcess(), addr, btrap.data(), | ||||
|             btrap.size()); | ||||
|         Core::CPU().ClearInstructionCache(); | ||||
|     } | ||||
|     p.insert({addr, breakpoint}); | ||||
| 
 | ||||
|     LOG_DEBUG(Debug_GDBStub, "gdb: added {} breakpoint: {:08x} bytes at {:08x}\n", | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue