mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Merge pull request #3524 from FearlessTobi/port-5106
Port citra-emu/citra#5106: "gdbstub: Ensure gdbstub doesn't drop packets crucial to initialization"
This commit is contained in:
		
						commit
						f8382c9d9d
					
				@ -166,7 +166,7 @@ struct System::Impl {
 | 
				
			|||||||
        service_manager = std::make_shared<Service::SM::ServiceManager>();
 | 
					        service_manager = std::make_shared<Service::SM::ServiceManager>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Service::Init(service_manager, system);
 | 
					        Service::Init(service_manager, system);
 | 
				
			||||||
        GDBStub::Init();
 | 
					        GDBStub::DeferStart();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        renderer = VideoCore::CreateRenderer(emu_window, system);
 | 
					        renderer = VideoCore::CreateRenderer(emu_window, system);
 | 
				
			||||||
        if (!renderer->Init()) {
 | 
					        if (!renderer->Init()) {
 | 
				
			||||||
 | 
				
			|||||||
@ -141,6 +141,7 @@ constexpr char target_xml[] =
 | 
				
			|||||||
)";
 | 
					)";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int gdbserver_socket = -1;
 | 
					int gdbserver_socket = -1;
 | 
				
			||||||
 | 
					bool defer_start = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
u8 command_buffer[GDB_BUFFER_SIZE];
 | 
					u8 command_buffer[GDB_BUFFER_SIZE];
 | 
				
			||||||
u32 command_length;
 | 
					u32 command_length;
 | 
				
			||||||
@ -1166,6 +1167,9 @@ static void RemoveBreakpoint() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void HandlePacket() {
 | 
					void HandlePacket() {
 | 
				
			||||||
    if (!IsConnected()) {
 | 
					    if (!IsConnected()) {
 | 
				
			||||||
 | 
					        if (defer_start) {
 | 
				
			||||||
 | 
					            ToggleServer(true);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1256,6 +1260,10 @@ void ToggleServer(bool status) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DeferStart() {
 | 
				
			||||||
 | 
					    defer_start = true;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void Init(u16 port) {
 | 
					static void Init(u16 port) {
 | 
				
			||||||
    if (!server_enabled) {
 | 
					    if (!server_enabled) {
 | 
				
			||||||
        // Set the halt loop to false in case the user enabled the gdbstub mid-execution.
 | 
					        // Set the halt loop to false in case the user enabled the gdbstub mid-execution.
 | 
				
			||||||
@ -1341,6 +1349,7 @@ void Shutdown() {
 | 
				
			|||||||
    if (!server_enabled) {
 | 
					    if (!server_enabled) {
 | 
				
			||||||
        return;
 | 
					        return;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    defer_start = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    LOG_INFO(Debug_GDBStub, "Stopping GDB ...");
 | 
					    LOG_INFO(Debug_GDBStub, "Stopping GDB ...");
 | 
				
			||||||
    if (gdbserver_socket != -1) {
 | 
					    if (gdbserver_socket != -1) {
 | 
				
			||||||
 | 
				
			|||||||
@ -43,6 +43,13 @@ void ToggleServer(bool status);
 | 
				
			|||||||
/// Start the gdbstub server.
 | 
					/// Start the gdbstub server.
 | 
				
			||||||
void Init();
 | 
					void Init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Defer initialization of the gdbstub to the first packet processing functions.
 | 
				
			||||||
 | 
					 * This avoids a case where the gdbstub thread is frozen after initialization
 | 
				
			||||||
 | 
					 * and fails to respond in time to packets.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					void DeferStart();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Stop gdbstub server.
 | 
					/// Stop gdbstub server.
 | 
				
			||||||
void Shutdown();
 | 
					void Shutdown();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user