diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/script/debugger/vcpudebug.cpp | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/script/debugger/vcpudebug.cpp')
-rw-r--r-- | Src/Wasabi/api/script/debugger/vcpudebug.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
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 <precomp.h> +#include <wasabicfg.h> +#include "vcpudebug.h" +#include <api/script/debugger/jitd.h> + +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;i<jitds.getNumItems();i++) { + MakiJITD *jitd = jitds.enumItem(i); + if (jitd->getVCPUId() == getVSD()) { + jitd->trace(); + } + } +} + +MakiJITD *VCPUDebugger::getJITD(int vcpuid) { + int i; + for (i=0;i<jitds.getNumItems();i++) { + MakiJITD *jitd = jitds.enumItem(i); + if (jitd->getVCPUId() == 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); +} |