mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	Use BreakpointAddress struct instead of passing address directly
This commit is contained in:
		
							parent
							
								
									6ea428addf
								
							
						
					
					
						commit
						42928659e8
					
				
					 3 changed files with 18 additions and 8 deletions
				
			
		|  | @ -3583,7 +3583,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | ||||||
|     Common::Profiling::ScopeTimer timer_execute(profile_execute); |     Common::Profiling::ScopeTimer timer_execute(profile_execute); | ||||||
|     MICROPROFILE_SCOPE(DynCom_Execute); |     MICROPROFILE_SCOPE(DynCom_Execute); | ||||||
| 
 | 
 | ||||||
|     int breakpoint_offset = -1; |     GDBStub::BreakpointAddress breakpoint_data; | ||||||
| 
 | 
 | ||||||
|     #undef RM |     #undef RM | ||||||
|     #undef RS |     #undef RS | ||||||
|  | @ -3613,7 +3613,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | ||||||
|     cpu->Cpsr &= ~(1 << 5); \ |     cpu->Cpsr &= ~(1 << 5); \ | ||||||
|     cpu->Cpsr |= cpu->TFlag << 5; \ |     cpu->Cpsr |= cpu->TFlag << 5; \ | ||||||
|     if (GDBStub::g_server_enabled) { \ |     if (GDBStub::g_server_enabled) { \ | ||||||
|         if (GDBStub::IsMemoryBreak() || PC == breakpoint_offset) { \ |         if (GDBStub::IsMemoryBreak() || (breakpoint_data.type != GDBStub::BreakpointType::None && PC == breakpoint_data.address)) { \ | ||||||
|             GDBStub::Break(); \ |             GDBStub::Break(); \ | ||||||
|             goto END; \ |             goto END; \ | ||||||
|         } \ |         } \ | ||||||
|  | @ -3923,7 +3923,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | ||||||
| 
 | 
 | ||||||
|         // Find breakpoint if one exists within the block
 |         // Find breakpoint if one exists within the block
 | ||||||
|         if (GDBStub::g_server_enabled && GDBStub::IsConnected()) { |         if (GDBStub::g_server_enabled && GDBStub::IsConnected()) { | ||||||
|             breakpoint_offset = GDBStub::GetNextBreakpointFromAddress(cpu->Reg[15], GDBStub::BreakpointType::Execute); |             breakpoint_data = GDBStub::GetNextBreakpointFromAddress(cpu->Reg[15], GDBStub::BreakpointType::Execute); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         inst_base = (arm_inst *)&inst_buf[ptr]; |         inst_base = (arm_inst *)&inst_buf[ptr]; | ||||||
|  |  | ||||||
|  | @ -231,13 +231,18 @@ static void RemoveBreakpoint(BreakpointType type, PAddr addr) { | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| PAddr GetNextBreakpointFromAddress(PAddr addr, BreakpointType type) { | BreakpointAddress GetNextBreakpointFromAddress(PAddr addr, BreakpointType type) { | ||||||
|     std::map<u32, Breakpoint>& p = GetBreakpointList(type); |     std::map<u32, Breakpoint>& p = GetBreakpointList(type); | ||||||
|     auto next_breakpoint = p.lower_bound(addr); |     auto next_breakpoint = p.lower_bound(addr); | ||||||
|     u32 breakpoint = -1; |     BreakpointAddress breakpoint; | ||||||
| 
 | 
 | ||||||
|     if (next_breakpoint != p.end()) |     if (next_breakpoint != p.end()) { | ||||||
|         breakpoint = next_breakpoint->first; |         breakpoint.address = next_breakpoint->first; | ||||||
|  |         breakpoint.type = type; | ||||||
|  |     } else { | ||||||
|  |         breakpoint.address = 0; | ||||||
|  |         breakpoint.type = BreakpointType::None; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     return breakpoint; |     return breakpoint; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -18,6 +18,11 @@ enum class BreakpointType { | ||||||
|     Access    ///< Access (R/W) Breakpoint
 |     Access    ///< Access (R/W) Breakpoint
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | struct BreakpointAddress { | ||||||
|  |     PAddr address; | ||||||
|  |     BreakpointType type; | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| /// If set to false, the server will never be started and no gdbstub-related functions will be executed.
 | /// If set to false, the server will never be started and no gdbstub-related functions will be executed.
 | ||||||
| extern std::atomic<bool> g_server_enabled; | extern std::atomic<bool> g_server_enabled; | ||||||
| 
 | 
 | ||||||
|  | @ -63,7 +68,7 @@ void HandlePacket(); | ||||||
|  * @param addr Address to search from. |  * @param addr Address to search from. | ||||||
|  * @param type Type of breakpoint. |  * @param type Type of breakpoint. | ||||||
|  */ |  */ | ||||||
| PAddr GetNextBreakpointFromAddress(u32 addr, GDBStub::BreakpointType type); | BreakpointAddress GetNextBreakpointFromAddress(u32 addr, GDBStub::BreakpointType type); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Check if a breakpoint of the specified type exists at the given address. |  * Check if a breakpoint of the specified type exists at the given address. | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue