aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/script/debugger/vcpudebug.cpp
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/script/debugger/vcpudebug.cpp
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-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.cpp99
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);
+}