summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/disassemblerlines.cpp
diff options
context:
space:
mode:
authorhjk <qtc-committer@nokia.com>2011-09-08 17:38:47 +0200
committerhjk <qthjk@ovi.com>2011-09-08 17:40:19 +0200
commitb51524c5c18e7790e7a436e159c1107a4b88d413 (patch)
tree944120f6bb6538e2c70d8881d24efee74bfa1f06 /src/plugins/debugger/disassemblerlines.cpp
parenta12ba22ed3869006e95f8fda9f9616e95bca27ee (diff)
downloadqt-creator-b51524c5c18e7790e7a436e159c1107a4b88d413.tar.gz
debugger: take care of unknown instructions in arm disassembler output
Change-Id: Ibeb8992856e8c5031e21925316c3fb0f9d7764e1 Reviewed-on: http://codereview.qt-project.org/4479 Reviewed-by: hjk <qthjk@ovi.com>
Diffstat (limited to 'src/plugins/debugger/disassemblerlines.cpp')
-rw-r--r--src/plugins/debugger/disassemblerlines.cpp37
1 files changed, 23 insertions, 14 deletions
diff --git a/src/plugins/debugger/disassemblerlines.cpp b/src/plugins/debugger/disassemblerlines.cpp
index b3f98bea53..1126758db2 100644
--- a/src/plugins/debugger/disassemblerlines.cpp
+++ b/src/plugins/debugger/disassemblerlines.cpp
@@ -168,22 +168,31 @@ void DisassemblerLines::appendUnparsed(const QString &unparsed)
if (line.startsWith("0x")) {
// Address line.
int pos1 = line.indexOf('<') + 1;
- int pos2 = line.indexOf('+', pos1);
- int pos3 = line.indexOf('>', pos1);
- if (pos1 < pos2 && pos2 < pos3) {
- QString function = line.mid(pos1, pos2 - pos1);
- if (function != m_lastFunction) {
- DisassemblerLine dl;
- dl.data = _("Function: ") + function;
- m_data.append(dl);
- m_lastFunction = function;
+ int posc = line.indexOf(':');
+ DisassemblerLine dl;
+ if (pos1 && line.indexOf("<UNDEFINED> instruction:") == -1) {
+ int pos2 = line.indexOf('+', pos1);
+ int pos3 = line.indexOf('>', pos1);
+ if (pos1 < pos2 && pos2 < pos3) {
+ QString function = line.mid(pos1, pos2 - pos1);
+ if (function != m_lastFunction) {
+ DisassemblerLine dl;
+ dl.data = _("Function: ") + function;
+ m_data.append(dl);
+ m_lastFunction = function;
+ }
}
+ dl.address = line.left(pos1 - 1).toULongLong(0, 0);
+ dl.function = m_lastFunction;
+ dl.offset = line.mid(pos2, pos3 - pos2).toUInt();
+ dl.data = line.mid(pos3 + 3).trimmed();
+ } else {
+ // Plain data like "0x0000cd64:\tadd\tlr, pc, lr\n"
+ dl.address = line.left(posc).toULongLong(0, 0);
+ dl.function = m_lastFunction;
+ dl.offset = 0;
+ dl.data = line.mid(posc + 1).trimmed();
}
- DisassemblerLine dl;
- dl.address = line.left(pos1 - 1).toULongLong(0, 0);
- dl.function = m_lastFunction;
- dl.offset = line.mid(pos2, pos3 - pos2).toUInt();
- dl.data = line.mid(pos3 + 3).trimmed();
m_rowCache[dl.address] = m_data.size() + 1;
m_data.append(dl);
} else {