summaryrefslogtreecommitdiff
path: root/src/plugins/debugger/disassemblerlines.cpp
diff options
context:
space:
mode:
authorArvid Ephraim Picciani <arvid.picciani@nokia.com>2010-11-24 16:57:40 +0100
committerArvid Ephraim Picciani <arvid.picciani@nokia.com>2010-11-24 17:04:08 +0100
commit295800196e899c401b4798935c031ddda65e5627 (patch)
treef43cad22aa0e7498287f9802d5fcdd2f266dee7a /src/plugins/debugger/disassemblerlines.cpp
parentc6193608609cdfc72849255fee9f1301f34f5642 (diff)
downloadqt-creator-295800196e899c401b4798935c031ddda65e5627.tar.gz
Adapt Lldb to dissasembler changes
Diffstat (limited to 'src/plugins/debugger/disassemblerlines.cpp')
-rw-r--r--src/plugins/debugger/disassemblerlines.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/plugins/debugger/disassemblerlines.cpp b/src/plugins/debugger/disassemblerlines.cpp
new file mode 100644
index 0000000000..75f315a9ac
--- /dev/null
+++ b/src/plugins/debugger/disassemblerlines.cpp
@@ -0,0 +1,86 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://qt.nokia.com/contact.
+**
+**************************************************************************/
+
+#include "disassemblerlines.h"
+
+namespace Debugger {
+namespace Internal {
+
+DisassemblerLine::DisassemblerLine(const QString &unparsed)
+{
+ // Mac gdb has an overflow reporting 64bit addresses causing the instruction
+ // to follow the last digit "0x000000013fff4810mov 1,1". Truncate here.
+ const int pos = qMin(unparsed.indexOf(QLatin1Char(' ')), 19);
+ if (pos < 0) {
+ address = 0;
+ data = unparsed;
+ return;
+ }
+ QString addr = unparsed.left(pos);
+ // MSVC 64bit: Remove 64bit separator 00000000`00a45000'.
+ if (addr.size() >= 9 && addr.at(8) == QLatin1Char('`'))
+ addr.remove(8, 1);
+
+ if (addr.endsWith(':')) // clang
+ addr.chop(1);
+ if (addr.startsWith(QLatin1String("0x")))
+ addr.remove(0, 2);
+ bool ok;
+ address = addr.toULongLong(&ok, 16);
+ if (address)
+ data = unparsed.mid(pos + 1);
+ else
+ data = unparsed;
+}
+
+int DisassemblerLines::lineForAddress(quint64 address) const
+{
+ return m_rowCache.value(address);
+}
+
+bool DisassemblerLines::coversAddress(quint64 address) const
+{
+ return m_rowCache.value(address) != 0;
+}
+
+void DisassemblerLines::appendComment(const QString &comment)
+{
+ DisassemblerLine dl;
+ dl.data = comment;
+ m_data.append(dl);
+}
+
+void DisassemblerLines::appendLine(const DisassemblerLine &dl)
+{
+ m_data.append(dl);
+ m_rowCache[dl.address] = m_data.size();
+}
+
+} // namespace Internal
+} // namespace Debugger