123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- #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);
- }
|