From 90fd566e9272c9ba5b38f63ab3ed1acac18e74d1 Mon Sep 17 00:00:00 2001 From: CocoSimone Date: Sat, 11 Feb 2023 15:02:47 +0100 Subject: [PATCH] hopefully fixes Windows CI --- external/gdbstub/gdbstub.h | 24 ++++++++++++------------ src/CMakeLists.txt | 1 + src/backend/Core.cpp | 2 +- src/backend/Core.hpp | 3 ++- src/backend/Debugger.cpp | 36 ++++++++++++++++++------------------ 5 files changed, 34 insertions(+), 32 deletions(-) diff --git a/external/gdbstub/gdbstub.h b/external/gdbstub/gdbstub.h index 011ee824..c256eb1b 100644 --- a/external/gdbstub/gdbstub.h +++ b/external/gdbstub/gdbstub.h @@ -27,7 +27,7 @@ #ifndef GDBSTUB_H #define GDBSTUB_H -#include +#include #include typedef void (*gdbstub_connected_t)(void * user_data); @@ -37,9 +37,9 @@ typedef void (*gdbstub_stop_t)(void * user_data); typedef void (*gdbstub_step_t)(void * user_data); typedef void (*gdbstub_set_breakpoint_t)(void * user_data, uint32_t address); typedef void (*gdbstub_clear_breakpoint_t)(void * user_data, uint32_t address); -typedef ssize_t (*gdbstub_get_memory_t)(void * user_data, char * buffer, size_t buffer_length, uint32_t address, size_t length); -typedef ssize_t (*gdbstub_get_register_value_t)(void * user_data, char * buffer, size_t buffer_length, int reg); -typedef ssize_t (*gdbstub_get_general_registers_t)(void * user_data, char * buffer, size_t buffer_length); +typedef size_t (*gdbstub_get_memory_t)(void * user_data, char * buffer, size_t buffer_length, uint32_t address, size_t length); +typedef size_t (*gdbstub_get_register_value_t)(void * user_data, char * buffer, size_t buffer_length, int reg); +typedef size_t (*gdbstub_get_general_registers_t)(void * user_data, char * buffer, size_t buffer_length); typedef struct gdbstub_config gdbstub_config_t; @@ -90,12 +90,12 @@ void gdbstub_breakpoint_hit(gdbstub_t * gdb); #ifdef GDBSTUB_IMPLEMENTATION -#include +#include #include #include -#include -#include -#include +#include +#include +#include #if defined(WIN32) #define WIN32_LEAN_AND_MEAN @@ -127,15 +127,15 @@ struct gdbstub int client; char buffer[GDBSTUB_BUFFER_LENGTH]; - ssize_t buffer_length; + size_t buffer_length; gdbstate_t state; char packet[GDBSTUB_BUFFER_LENGTH]; - ssize_t packet_length; + size_t packet_length; uint8_t packet_checksum; char checksum[2]; - ssize_t checksum_length; + size_t checksum_length; }; @@ -325,7 +325,7 @@ void _gdbstub_recv(gdbstub_t * gdb) return; } - for (ssize_t i = 0; i < gdb->buffer_length; ++i) { + for (size_t i = 0; i < gdb->buffer_length; ++i) { char c = gdb->buffer[i]; switch (gdb->state) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 595d6995..62563454 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,6 +64,7 @@ file(REMOVE if(WIN32) target_compile_definitions(gadolinium PUBLIC NOMINMAX _CRT_SECURE_NO_WARNINGS) target_compile_options(gadolinium PUBLIC /EHa) + target_link_libraries(gadolinium PUBLIC ws2_32) endif() if(${CMAKE_BUILD_TYPE} MATCHES Release) diff --git a/src/backend/Core.cpp b/src/backend/Core.cpp index 68e07f01..4aa4230c 100644 --- a/src/backend/Core.cpp +++ b/src/backend/Core.cpp @@ -88,7 +88,7 @@ void Core::Run(Window& window, float volumeL, float volumeR) { } } - if(debugger.enabled && romLoaded && !pause) + if(debugger.enabled) debugger.tick(); } diff --git a/src/backend/Core.hpp b/src/backend/Core.hpp index 456a931c..d7bd651c 100644 --- a/src/backend/Core.hpp +++ b/src/backend/Core.hpp @@ -6,6 +6,7 @@ #include #include #include +#include struct Window; @@ -46,7 +47,7 @@ struct Core { core.debugger.breakpointHit(); } while (core.debugger.broken) { - usleep(1000); + SDL_Delay(1); core.debugger.tick(); } switch(core.cpuType) { diff --git a/src/backend/Debugger.cpp b/src/backend/Debugger.cpp index 3f1bad77..ef32eed6 100644 --- a/src/backend/Debugger.cpp +++ b/src/backend/Debugger.cpp @@ -110,17 +110,17 @@ const char* memory_map = "" // PIF ROM ""; -void n64_debug_start(void* user_data) { +void debugStart(void* user_data) { auto* debugger = (Debugger*)user_data; debugger->broken = false; } -void n64_debug_stop(void* user_data) { +void debugStop(void* user_data) { auto* debugger = (Debugger*)user_data; debugger->broken = true; } -void n64_debug_step(void* user_data) { +void debugStep(void* user_data) { auto* debugger = (Debugger*)user_data; bool old_broken = debugger->broken; debugger->broken = false; @@ -129,7 +129,7 @@ void n64_debug_step(void* user_data) { debugger->steps += 2; } -void n64_debug_set_breakpoint(void* user_data, u32 address) { +void debugSetBreakpoint(void* user_data, u32 address) { auto* debugger = (Debugger*)user_data; auto* breakpoint = (Breakpoint*)malloc(sizeof(Breakpoint)); breakpoint->address = address; @@ -149,7 +149,7 @@ void n64_debug_set_breakpoint(void* user_data, u32 address) { } } -void n64_debug_clear_breakpoint(void* user_data, u32 address) { +void debugClearBreakpoint(void* user_data, u32 address) { auto* debugger = (Debugger*)user_data; if (debugger->breakpoints == nullptr) { return; // No breakpoints set at all @@ -171,7 +171,7 @@ void n64_debug_clear_breakpoint(void* user_data, u32 address) { } } -ssize_t n64_debug_get_memory(void* user_data, char* buffer, size_t length, u32 address, size_t bytes) { +size_t debugGetMemory(void* user_data, char* buffer, size_t length, u32 address, size_t bytes) { auto* debugger = (Debugger*)user_data; printf("Checking memory at address 0x%08X\n", address); int printed = 0; @@ -188,7 +188,7 @@ ssize_t n64_debug_get_memory(void* user_data, char* buffer, size_t length, u32 a return printed + 1; } -ssize_t n64_debug_get_register_value(void* user_data, char * buffer, size_t buffer_length, int reg) { +size_t debugGetRegisterValue(void* user_data, char * buffer, size_t buffer_length, int reg) { auto* debugger = (Debugger*)user_data; switch (reg) { case 0 ... 31: @@ -204,7 +204,7 @@ ssize_t n64_debug_get_register_value(void* user_data, char * buffer, size_t buff case 36: return snprintf(buffer, buffer_length, "%08x", debugger->core.CpuGetRegs().cop0.cause.raw); case 37: - printf("Sending PC: 0x%016lX\n", debugger->core.CpuGetRegs().pc); + //printf("Sending PC: 0x%016lX\n", debugger->core.CpuGetRegs().pc); return snprintf(buffer, buffer_length, "%016lx", debugger->core.CpuGetRegs().pc); case 38 ... 71: // TODO FPU stuff return snprintf(buffer, buffer_length, "%08x", 0); @@ -213,10 +213,10 @@ ssize_t n64_debug_get_register_value(void* user_data, char * buffer, size_t buff } } -ssize_t n64_debug_get_general_registers(void* user_data, char * buffer, size_t buffer_length) { +size_t debugGetGeneralRegisters(void* user_data, char * buffer, size_t buffer_length) { auto* debugger = (Debugger*)user_data; printf("The buffer length is %ld!\n", buffer_length); - ssize_t printed = 0; + size_t printed = 0; for (int i = 0; i < 32; i++) { int ofs = i * 16; // 64 bit regs take up 16 ascii chars to print in hex if (ofs + 16 > buffer_length) { @@ -233,14 +233,14 @@ Debugger::Debugger(n64::Core& core) : core(core) { memset(&config, 0, sizeof(gdbstub_config_t)); config.port = 1337; config.user_data = this; - config.start = (gdbstub_start_t) n64_debug_start; - config.stop = (gdbstub_stop_t) n64_debug_stop; - config.step = (gdbstub_step_t) n64_debug_step; - config.set_breakpoint = (gdbstub_set_breakpoint_t) n64_debug_set_breakpoint; - config.clear_breakpoint = (gdbstub_clear_breakpoint_t) n64_debug_clear_breakpoint; - config.get_memory = (gdbstub_get_memory_t) n64_debug_get_memory; - config.get_register_value = (gdbstub_get_register_value_t) n64_debug_get_register_value; - config.get_general_registers = (gdbstub_get_general_registers_t) n64_debug_get_general_registers; + config.start = (gdbstub_start_t) debugStart; + config.stop = (gdbstub_stop_t) debugStop; + config.step = (gdbstub_step_t) debugStep; + config.set_breakpoint = (gdbstub_set_breakpoint_t) debugSetBreakpoint; + config.clear_breakpoint = (gdbstub_clear_breakpoint_t) debugClearBreakpoint; + config.get_memory = (gdbstub_get_memory_t) debugGetMemory; + config.get_register_value = (gdbstub_get_register_value_t) debugGetRegisterValue; + config.get_general_registers = (gdbstub_get_general_registers_t) debugGetGeneralRegisters; config.target_config = target_xml; config.target_config_length = strlen(target_xml);