1
0
Fork 0

arm_dynarmic: Pass breakpoints to gdbstub

Allow gdbstub to handle execution breakpoints
This commit is contained in:
MerryMage 2018-09-28 20:10:51 +01:00
parent 7c97e8df62
commit b4d9d9661a
2 changed files with 18 additions and 1 deletions

2
externals/dynarmic vendored

@ -1 +1 @@
Subproject commit 68ca03e8d4822c78e15315e67ddbb1d6bf4d3827 Subproject commit 4e6848d1c9e8dadc70595c15b5589f8b14aad478

View File

@ -12,6 +12,7 @@
#include "core/arm/dyncom/arm_dyncom_interpreter.h" #include "core/arm/dyncom/arm_dyncom_interpreter.h"
#include "core/core.h" #include "core/core.h"
#include "core/core_timing.h" #include "core/core_timing.h"
#include "core/gdbstub/gdbstub.h"
#include "core/hle/kernel/svc.h" #include "core/hle/kernel/svc.h"
#include "core/memory.h" #include "core/memory.h"
@ -125,6 +126,22 @@ public:
} }
void ExceptionRaised(VAddr pc, Dynarmic::A32::Exception exception) override { void ExceptionRaised(VAddr pc, Dynarmic::A32::Exception exception) override {
switch (exception) {
case Dynarmic::A32::Exception::UndefinedInstruction:
case Dynarmic::A32::Exception::UnpredictableInstruction:
break;
case Dynarmic::A32::Exception::Breakpoint:
if (GDBStub::IsConnected()) {
parent.jit->HaltExecution();
parent.SetPC(pc);
Kernel::Thread* thread = Kernel::GetCurrentThread();
parent.SaveContext(thread->context);
GDBStub::Break();
GDBStub::SendTrap(thread, 5);
return;
}
break;
}
ASSERT_MSG(false, "ExceptionRaised(exception = {}, pc = {:08X}, code = {:08X})", ASSERT_MSG(false, "ExceptionRaised(exception = {}, pc = {:08X}, code = {:08X})",
static_cast<std::size_t>(exception), pc, MemoryReadCode(pc)); static_cast<std::size_t>(exception), pc, MemoryReadCode(pc));
} }