aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/script/debugger/jitd.h
blob: 6cb41f72a5622f85da0c5887121dcd238bd210e4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef __MAKIJITD_H
#define __MAKIJITD_H

#include <bfc/ptrlist.h>

class JITDBreakpoint;
class VCPUDebugger;
class svc_debuggerUI;
class SimpleDebuggerUI;
class DebuggerUI;
class DebugSymbols;
class SourceCodeLine;

enum {
  JITD_RETURN_STEPINTO  = 0,
  JITD_RETURN_STEPOVER  = 1,
  JITD_RETURN_STEPOUT   = 2,
  JITD_RETURN_TERMINATE = 3,
  JITD_RETURN_CONTINUE  = 4,
};

class MakiJITD { // dispatch me!
  public:
    MakiJITD(VCPUDebugger *debugger, int vcpuid);
    virtual ~MakiJITD();

    int getNumBreakpoints();
    JITDBreakpoint *enumBreakpoint(int n);
    JITDBreakpoint *findBreakpoint(int pointer);
    void addBreakpoint(int pointer);
    void removeBreakpoint(JITDBreakpoint *breakpoint);
    void clearAllBreakpoints();
    int isGlobalBreakpointSet();
    void setGlobalBreakpoint(int s);
    void setSysBreakpoint(int pointer); // deactivates automatically next time the debugger is activated
    int getVCPUId();
    void trace();
    int isActive();
    int isOnHold(); // 1 if running in the jitd's message loop

    int getVIP();
    int getVSD();
    int getVCC();
    int getVSP();

    const char *getCodeBlock();

    virtual int findLine(int pointer);
    virtual int getNumLines();
    virtual SourceCodeLine *enumLine(int n);

  private:
    void createUi();
    void enterUi();

    int vcpuid;
    int vip, vsd, vcc, vsp;
    int globalbreakpoint;

    PtrList<JITDBreakpoint> breakpoints;
    VCPUDebugger *debugger;
    svc_debuggerUI *uisvc;
    DebuggerUI *ui;
    SimpleDebuggerUI *simpleui;
    int onhold;
    const char *codeblock;
    JITDBreakpoint *sysbp;
    DebugSymbols *symbols;
};

#endif