From 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d Mon Sep 17 00:00:00 2001 From: Jef Date: Tue, 24 Sep 2024 14:54:57 +0200 Subject: Initial community commit --- Src/Wasabi/api/script/debugger/vcpudebug.cpp | 99 ++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Src/Wasabi/api/script/debugger/vcpudebug.cpp (limited to 'Src/Wasabi/api/script/debugger/vcpudebug.cpp') diff --git a/Src/Wasabi/api/script/debugger/vcpudebug.cpp b/Src/Wasabi/api/script/debugger/vcpudebug.cpp new file mode 100644 index 00000000..94087956 --- /dev/null +++ b/Src/Wasabi/api/script/debugger/vcpudebug.cpp @@ -0,0 +1,99 @@ +#include +#include +#include "vcpudebug.h" +#include + +VCPUDebugger::VCPUDebugger() { + filter.setFilterObject(&reentryfilter); +} + +VCPUDebugger::~VCPUDebugger() { +} + +// ------------------------------------------------------------------------ + +// instruction pointer +int VCPUDebugger::getVIP() { + return WASABI_API_MAKIDEBUG->debugger_getVIP(); +} + +// script descriptor (vcpuid) +int VCPUDebugger::getVSD() { + return WASABI_API_MAKIDEBUG->debugger_getVSD(); +} + +// variables stack pointer +int VCPUDebugger::getVSP() { + return WASABI_API_MAKIDEBUG->debugger_getVSP(); +} + +// call stack pointer +int VCPUDebugger::getVCC() { + return WASABI_API_MAKIDEBUG->debugger_getVCC(); +} + +// ------------------------------------------------------------------------ +void VCPUDebugger::trace() { + int i; + for (i=0;igetVCPUId() == getVSD()) { + jitd->trace(); + } + } +} + +MakiJITD *VCPUDebugger::getJITD(int vcpuid) { + int i; + for (i=0;igetVCPUId() == vcpuid) + return jitd; + } + return NULL; +} + +// if this returns 1, you should not call eventComplete! +int VCPUDebugger::filterEvent(int vcpuid, int eventid) { + MakiJITD *jitd = getJITD(vcpuid); + if (!jitd || !jitd->isOnHold()) { + WASABI_API_WND->pushModalWnd(); + scopestack.push(0); + return 0; + } + filter.enterScope((vcpuid<<16) + eventid); // (vcpuid<<16) + eventid + if (filter.mustLeave()) { + filter.leaveScope(); + return 1; + } + WASABI_API_WND->pushModalWnd(); + scopestack.push(1); + return 0; +} + +void VCPUDebugger::eventComplete() { + int n; + scopestack.pop(&n); + WASABI_API_WND->popModalWnd(); + if (n) { + filter.leaveScope(); + } +} + +int VCPUDebugger::isActive() { + foreach(jitds) + if (jitds.getfor()->isActive()) + return 1; + endfor; + return 0; +} + +MakiJITD *VCPUDebugger::createJITD(int vcpuid) { + MakiJITD *jitd = new MakiJITD(this, vcpuid); + jitds.addItem(jitd); + return jitd; +} + +const char *VCPUDebugger::getCodeBlock(int vcpuid) { + return WASABI_API_MAKIDEBUG->debugger_getCodeBlock(vcpuid); +} -- cgit