Merge pull request #4276 from MerryMage/jit_breakpoints
arm_dynarmic: Pass breakpoints to gdbstub
This commit is contained in:
commit
9f972b9f5c
2 changed files with 18 additions and 1 deletions
2
externals/dynarmic
vendored
2
externals/dynarmic
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 68ca03e8d4822c78e15315e67ddbb1d6bf4d3827
|
Subproject commit 4e6848d1c9e8dadc70595c15b5589f8b14aad478
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue