Commit | Line | Data |
---|---|---|
0718b3f2 JPM |
1 | // |
2 | // callstackbrowser.cpp - Call Stack | |
3 | // | |
4 | // by Jean-Paul Mari | |
5 | // | |
6 | // JPM = Jean-Paul Mari <djipi.mari@gmail.com> | |
7 | // | |
8 | // Who When What | |
9 | // --- ---------- ----------------------------------------------------------- | |
10 | // JPM 08/31/2018 Created this file | |
11 | // | |
12 | ||
13 | // STILL TO DO: | |
14 | // Better display presentation | |
15 | // To display call function | |
16 | // To use DWARF frame information | |
17 | // | |
18 | ||
19 | #include "debugger/callstackbrowser.h" | |
20 | #include "memory.h" | |
21 | #include "debugger/DBGManager.h" | |
22 | #include "m68000/m68kinterface.h" | |
23 | ||
24 | ||
25 | // | |
26 | CallStackBrowserWindow::CallStackBrowserWindow(QWidget * parent/*= 0*/) : QWidget(parent, Qt::Dialog), | |
27 | layout(new QVBoxLayout), text(new QTextBrowser) | |
28 | { | |
29 | setWindowTitle(tr("Call Stack")); | |
30 | ||
31 | QFont fixedFont("Lucida Console", 8, QFont::Normal); | |
32 | fixedFont.setStyleHint(QFont::TypeWriter); | |
33 | text->setFont(fixedFont); | |
34 | setLayout(layout); | |
35 | ||
36 | layout->addWidget(text); | |
37 | } | |
38 | ||
39 | ||
40 | // | |
41 | CallStackBrowserWindow::~CallStackBrowserWindow(void) | |
42 | { | |
43 | } | |
44 | ||
45 | ||
46 | // | |
47 | void CallStackBrowserWindow::RefreshContents(void) | |
48 | { | |
49 | unsigned int a6, Sa6, ret; | |
50 | char *FuncName; | |
51 | QString CallStack; | |
52 | char string[1024]; | |
53 | ||
54 | if (isVisible()) | |
55 | { | |
56 | if ((a6 = m68k_get_reg(NULL, M68K_REG_A6)) && DBGManager_GetType()) | |
57 | { | |
58 | while ((Sa6 = a6)) | |
59 | { | |
60 | a6 = GET32(jaguarMainRAM, Sa6); | |
61 | ret = GET32(jaguarMainRAM, Sa6 + 4); | |
62 | ||
63 | sprintf(string, "0x%06X | Ret: 0x%06X | From: %s - 0x%06X", Sa6, ret, (FuncName = DBGManager_GetFunctionName(ret)), (unsigned int)DBGManager_GetAdrFromSymbolName(FuncName)); | |
64 | CallStack += QString(string); | |
65 | if (a6) | |
66 | { | |
67 | sprintf(string, "<br>"); | |
68 | CallStack += QString(string); | |
69 | } | |
70 | } | |
71 | ||
72 | text->clear(); | |
73 | text->setText(CallStack); | |
74 | } | |
75 | else | |
76 | { | |
77 | text->clear(); | |
78 | } | |
79 | } | |
80 | } | |
81 | ||
82 | ||
83 | // | |
84 | void CallStackBrowserWindow::keyPressEvent(QKeyEvent * e) | |
85 | { | |
86 | if (e->key() == Qt::Key_Escape) | |
87 | { | |
88 | hide(); | |
89 | } | |
90 | } | |
91 | ||
92 |