|
@@ -12,6 +12,7 @@
|
|
|
#include "core/core.h"
|
|
#include "core/core.h"
|
|
|
#include "core/core_cpu.h"
|
|
#include "core/core_cpu.h"
|
|
|
#include "core/core_timing.h"
|
|
#include "core/core_timing.h"
|
|
|
|
|
+#include "core/gdbstub/gdbstub.h"
|
|
|
#include "core/hle/kernel/process.h"
|
|
#include "core/hle/kernel/process.h"
|
|
|
#include "core/hle/kernel/svc.h"
|
|
#include "core/hle/kernel/svc.h"
|
|
|
#include "core/memory.h"
|
|
#include "core/memory.h"
|
|
@@ -79,6 +80,16 @@ public:
|
|
|
case Dynarmic::A64::Exception::SendEventLocal:
|
|
case Dynarmic::A64::Exception::SendEventLocal:
|
|
|
case Dynarmic::A64::Exception::Yield:
|
|
case Dynarmic::A64::Exception::Yield:
|
|
|
return;
|
|
return;
|
|
|
|
|
+ case Dynarmic::A64::Exception::Breakpoint:
|
|
|
|
|
+ if (GDBStub::IsServerEnabled()) {
|
|
|
|
|
+ parent.SetPC(pc);
|
|
|
|
|
+ Kernel::Thread* thread = Kernel::GetCurrentThread();
|
|
|
|
|
+ parent.SaveContext(thread->context);
|
|
|
|
|
+ GDBStub::Break();
|
|
|
|
|
+ GDBStub::SendTrap(thread, 5);
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ [[fallthrough]];
|
|
|
default:
|
|
default:
|
|
|
ASSERT_MSG(false, "ExceptionRaised(exception = {}, pc = {:X})",
|
|
ASSERT_MSG(false, "ExceptionRaised(exception = {}, pc = {:X})",
|
|
|
static_cast<std::size_t>(exception), pc);
|
|
static_cast<std::size_t>(exception), pc);
|