diff options
author | hjk <qtc-committer@nokia.com> | 2011-09-08 17:38:47 +0200 |
---|---|---|
committer | hjk <qthjk@ovi.com> | 2011-09-08 17:40:19 +0200 |
commit | b51524c5c18e7790e7a436e159c1107a4b88d413 (patch) | |
tree | 944120f6bb6538e2c70d8881d24efee74bfa1f06 /src/plugins/debugger/disassemblerlines.cpp | |
parent | a12ba22ed3869006e95f8fda9f9616e95bca27ee (diff) | |
download | qt-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.cpp | 37 |
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 { |