summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Yuri Kunde Schlesner2017-05-07 14:44:43 -0700
committerGravatar Yuri Kunde Schlesner2017-05-07 15:32:47 -0700
commit4af2a1a3d74eb5e77b59e4557c50e230d453d7d9 (patch)
treeeeecf3ec67b666805db0aaa9e91af407c7b29773 /src
parentcitra-qt: Remove disassembler widget (diff)
downloadyuzu-4af2a1a3d74eb5e77b59e4557c50e230d453d7d9.tar.gz
yuzu-4af2a1a3d74eb5e77b59e4557c50e230d453d7d9.tar.xz
yuzu-4af2a1a3d74eb5e77b59e4557c50e230d453d7d9.zip
citra-qt: Remove callstack widget
Appears to be currently broken, and given the complexity of doing this for ARM code without debugging information, should probably be left to an external tool or library. Use the GDB stub instead. Closes #586
Diffstat (limited to 'src')
-rw-r--r--src/citra_qt/CMakeLists.txt3
-rw-r--r--src/citra_qt/debugger/callstack.cpp85
-rw-r--r--src/citra_qt/debugger/callstack.h28
-rw-r--r--src/citra_qt/debugger/callstack.ui39
-rw-r--r--src/citra_qt/main.cpp11
-rw-r--r--src/citra_qt/main.h2
6 files changed, 0 insertions, 168 deletions
diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt
index 0b4fe6dd2..4e837668e 100644
--- a/src/citra_qt/CMakeLists.txt
+++ b/src/citra_qt/CMakeLists.txt
@@ -11,7 +11,6 @@ set(SRCS
11 configuration/configure_graphics.cpp 11 configuration/configure_graphics.cpp
12 configuration/configure_input.cpp 12 configuration/configure_input.cpp
13 configuration/configure_system.cpp 13 configuration/configure_system.cpp
14 debugger/callstack.cpp
15 debugger/graphics/graphics.cpp 14 debugger/graphics/graphics.cpp
16 debugger/graphics/graphics_breakpoint_observer.cpp 15 debugger/graphics/graphics_breakpoint_observer.cpp
17 debugger/graphics/graphics_breakpoints.cpp 16 debugger/graphics/graphics_breakpoints.cpp
@@ -42,7 +41,6 @@ set(HEADERS
42 configuration/configure_graphics.h 41 configuration/configure_graphics.h
43 configuration/configure_input.h 42 configuration/configure_input.h
44 configuration/configure_system.h 43 configuration/configure_system.h
45 debugger/callstack.h
46 debugger/graphics/graphics.h 44 debugger/graphics/graphics.h
47 debugger/graphics/graphics_breakpoint_observer.h 45 debugger/graphics/graphics_breakpoint_observer.h
48 debugger/graphics/graphics_breakpoints.h 46 debugger/graphics/graphics_breakpoints.h
@@ -72,7 +70,6 @@ set(UIS
72 configuration/configure_graphics.ui 70 configuration/configure_graphics.ui
73 configuration/configure_input.ui 71 configuration/configure_input.ui
74 configuration/configure_system.ui 72 configuration/configure_system.ui
75 debugger/callstack.ui
76 debugger/registers.ui 73 debugger/registers.ui
77 hotkeys.ui 74 hotkeys.ui
78 main.ui 75 main.ui
diff --git a/src/citra_qt/debugger/callstack.cpp b/src/citra_qt/debugger/callstack.cpp
deleted file mode 100644
index 08d2e7a22..000000000
--- a/src/citra_qt/debugger/callstack.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <QStandardItemModel>
6#include "citra_qt/debugger/callstack.h"
7#include "common/common_types.h"
8#include "common/symbols.h"
9#include "core/arm/arm_interface.h"
10#include "core/arm/disassembler/arm_disasm.h"
11#include "core/core.h"
12#include "core/memory.h"
13
14CallstackWidget::CallstackWidget(QWidget* parent) : QDockWidget(parent) {
15 ui.setupUi(this);
16
17 callstack_model = new QStandardItemModel(this);
18 callstack_model->setColumnCount(4);
19 callstack_model->setHeaderData(0, Qt::Horizontal, "Stack Pointer");
20 callstack_model->setHeaderData(2, Qt::Horizontal, "Return Address");
21 callstack_model->setHeaderData(1, Qt::Horizontal, "Call Address");
22 callstack_model->setHeaderData(3, Qt::Horizontal, "Function");
23 ui.treeView->setModel(callstack_model);
24}
25
26void CallstackWidget::OnDebugModeEntered() {
27 // Stack pointer
28 const u32 sp = Core::CPU().GetReg(13);
29
30 Clear();
31
32 int counter = 0;
33 for (u32 addr = 0x10000000; addr >= sp; addr -= 4) {
34 if (!Memory::IsValidVirtualAddress(addr))
35 break;
36
37 const u32 ret_addr = Memory::Read32(addr);
38 const u32 call_addr = ret_addr - 4; // get call address???
39
40 if (!Memory::IsValidVirtualAddress(call_addr))
41 break;
42
43 /* TODO (mattvail) clean me, move to debugger interface */
44 u32 insn = Memory::Read32(call_addr);
45 if (ARM_Disasm::Decode(insn) == OP_BL) {
46 std::string name;
47 // ripped from disasm
48 u32 i_offset = insn & 0xffffff;
49 // Sign-extend the 24-bit offset
50 if ((i_offset >> 23) & 1)
51 i_offset |= 0xff000000;
52
53 // Pre-compute the left-shift and the prefetch offset
54 i_offset <<= 2;
55 i_offset += 8;
56 const u32 func_addr = call_addr + i_offset;
57
58 callstack_model->setItem(
59 counter, 0, new QStandardItem(QString("0x%1").arg(addr, 8, 16, QLatin1Char('0'))));
60 callstack_model->setItem(counter, 1, new QStandardItem(QString("0x%1").arg(
61 ret_addr, 8, 16, QLatin1Char('0'))));
62 callstack_model->setItem(counter, 2, new QStandardItem(QString("0x%1").arg(
63 call_addr, 8, 16, QLatin1Char('0'))));
64
65 name = Symbols::HasSymbol(func_addr) ? Symbols::GetSymbol(func_addr).name : "unknown";
66 callstack_model->setItem(
67 counter, 3, new QStandardItem(
68 QString("%1_%2")
69 .arg(QString::fromStdString(name))
70 .arg(QString("0x%1").arg(func_addr, 8, 16, QLatin1Char('0')))));
71
72 counter++;
73 }
74 }
75}
76
77void CallstackWidget::OnDebugModeLeft() {}
78
79void CallstackWidget::Clear() {
80 for (int row = 0; row < callstack_model->rowCount(); row++) {
81 for (int column = 0; column < callstack_model->columnCount(); column++) {
82 callstack_model->setItem(row, column, new QStandardItem());
83 }
84 }
85}
diff --git a/src/citra_qt/debugger/callstack.h b/src/citra_qt/debugger/callstack.h
deleted file mode 100644
index f04ab9c7e..000000000
--- a/src/citra_qt/debugger/callstack.h
+++ /dev/null
@@ -1,28 +0,0 @@
1// Copyright 2014 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <QDockWidget>
8#include "ui_callstack.h"
9
10class QStandardItemModel;
11
12class CallstackWidget : public QDockWidget {
13 Q_OBJECT
14
15public:
16 explicit CallstackWidget(QWidget* parent = nullptr);
17
18public slots:
19 void OnDebugModeEntered();
20 void OnDebugModeLeft();
21
22private:
23 Ui::CallStack ui;
24 QStandardItemModel* callstack_model;
25
26 /// Clears the callstack widget while keeping the column widths the same
27 void Clear();
28};
diff --git a/src/citra_qt/debugger/callstack.ui b/src/citra_qt/debugger/callstack.ui
deleted file mode 100644
index 248ea3dd7..000000000
--- a/src/citra_qt/debugger/callstack.ui
+++ /dev/null
@@ -1,39 +0,0 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>CallStack</class>
4 <widget class="QDockWidget" name="CallStack">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>400</width>
10 <height>300</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>Call Stack</string>
15 </property>
16 <widget class="QWidget" name="dockWidgetContents">
17 <layout class="QVBoxLayout" name="verticalLayout">
18 <item>
19 <widget class="QTreeView" name="treeView">
20 <property name="editTriggers">
21 <set>QAbstractItemView::NoEditTriggers</set>
22 </property>
23 <property name="alternatingRowColors">
24 <bool>true</bool>
25 </property>
26 <property name="rootIsDecorated">
27 <bool>false</bool>
28 </property>
29 <property name="itemsExpandable">
30 <bool>false</bool>
31 </property>
32 </widget>
33 </item>
34 </layout>
35 </widget>
36 </widget>
37 <resources/>
38 <connections/>
39</ui>
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 50149bcb0..9beec69bc 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -16,7 +16,6 @@
16#include "citra_qt/bootmanager.h" 16#include "citra_qt/bootmanager.h"
17#include "citra_qt/configuration/config.h" 17#include "citra_qt/configuration/config.h"
18#include "citra_qt/configuration/configure_dialog.h" 18#include "citra_qt/configuration/configure_dialog.h"
19#include "citra_qt/debugger/callstack.h"
20#include "citra_qt/debugger/graphics/graphics.h" 19#include "citra_qt/debugger/graphics/graphics.h"
21#include "citra_qt/debugger/graphics/graphics_breakpoints.h" 20#include "citra_qt/debugger/graphics/graphics_breakpoints.h"
22#include "citra_qt/debugger/graphics/graphics_cmdlists.h" 21#include "citra_qt/debugger/graphics/graphics_cmdlists.h"
@@ -138,11 +137,6 @@ void GMainWindow::InitializeDebugWidgets() {
138 connect(this, &GMainWindow::EmulationStopping, registersWidget, 137 connect(this, &GMainWindow::EmulationStopping, registersWidget,
139 &RegistersWidget::OnEmulationStopping); 138 &RegistersWidget::OnEmulationStopping);
140 139
141 callstackWidget = new CallstackWidget(this);
142 addDockWidget(Qt::RightDockWidgetArea, callstackWidget);
143 callstackWidget->hide();
144 debug_menu->addAction(callstackWidget->toggleViewAction());
145
146 graphicsWidget = new GPUCommandStreamWidget(this); 140 graphicsWidget = new GPUCommandStreamWidget(this);
147 addDockWidget(Qt::RightDockWidgetArea, graphicsWidget); 141 addDockWidget(Qt::RightDockWidgetArea, graphicsWidget);
148 graphicsWidget->hide(); 142 graphicsWidget->hide();
@@ -383,20 +377,15 @@ void GMainWindow::BootGame(const QString& filename) {
383 // before the CPU continues 377 // before the CPU continues
384 connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, 378 connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget,
385 SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); 379 SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection);
386 connect(emu_thread.get(), SIGNAL(DebugModeEntered()), callstackWidget,
387 SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection);
388 connect(emu_thread.get(), SIGNAL(DebugModeEntered()), waitTreeWidget, 380 connect(emu_thread.get(), SIGNAL(DebugModeEntered()), waitTreeWidget,
389 SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); 381 SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection);
390 connect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft()), 382 connect(emu_thread.get(), SIGNAL(DebugModeLeft()), registersWidget, SLOT(OnDebugModeLeft()),
391 Qt::BlockingQueuedConnection); 383 Qt::BlockingQueuedConnection);
392 connect(emu_thread.get(), SIGNAL(DebugModeLeft()), callstackWidget, SLOT(OnDebugModeLeft()),
393 Qt::BlockingQueuedConnection);
394 connect(emu_thread.get(), SIGNAL(DebugModeLeft()), waitTreeWidget, SLOT(OnDebugModeLeft()), 384 connect(emu_thread.get(), SIGNAL(DebugModeLeft()), waitTreeWidget, SLOT(OnDebugModeLeft()),
395 Qt::BlockingQueuedConnection); 385 Qt::BlockingQueuedConnection);
396 386
397 // Update the GUI 387 // Update the GUI
398 registersWidget->OnDebugModeEntered(); 388 registersWidget->OnDebugModeEntered();
399 callstackWidget->OnDebugModeEntered();
400 if (ui.action_Single_Window_Mode->isChecked()) { 389 if (ui.action_Single_Window_Mode->isChecked()) {
401 game_list->hide(); 390 game_list->hide();
402 } 391 }
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h
index 2417dc2cb..ded089580 100644
--- a/src/citra_qt/main.h
+++ b/src/citra_qt/main.h
@@ -10,7 +10,6 @@
10#include <QTimer> 10#include <QTimer>
11#include "ui_main.h" 11#include "ui_main.h"
12 12
13class CallstackWidget;
14class Config; 13class Config;
15class EmuThread; 14class EmuThread;
16class GameList; 15class GameList;
@@ -152,7 +151,6 @@ private:
152 ProfilerWidget* profilerWidget; 151 ProfilerWidget* profilerWidget;
153 MicroProfileDialog* microProfileDialog; 152 MicroProfileDialog* microProfileDialog;
154 RegistersWidget* registersWidget; 153 RegistersWidget* registersWidget;
155 CallstackWidget* callstackWidget;
156 GPUCommandStreamWidget* graphicsWidget; 154 GPUCommandStreamWidget* graphicsWidget;
157 GPUCommandListWidget* graphicsCommandsWidget; 155 GPUCommandListWidget* graphicsCommandsWidget;
158 GraphicsBreakPointsWidget* graphicsBreakpointsWidget; 156 GraphicsBreakPointsWidget* graphicsBreakpointsWidget;