[Lldb-commits] [lldb] r137991 - /lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
Johnny Chen
johnny.chen at apple.com
Thu Aug 18 15:05:58 PDT 2011
Author: johnny
Date: Thu Aug 18 17:05:58 2011
New Revision: 137991
URL: http://llvm.org/viewvc/llvm-project?rev=137991&view=rev
Log:
Apply some workaround for known crashers.
Modified:
lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
Modified: lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp?rev=137991&r1=137990&r2=137991&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp (original)
+++ lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp Thu Aug 18 17:05:58 2011
@@ -132,6 +132,13 @@
if (!Str.empty() && Str.back() == c)
Str = Str.substr(0, Str.size()-1);
}
+static inline void RStripNumber(llvm::StringRef &Str)
+{
+ while (!Str.empty() && isnumber(Str.back()))
+ Str = Str.substr(0, Str.size()-1);
+ if (!Str.empty() && Str.back() == '-')
+ Str = Str.substr(0, Str.size()-1);
+}
// Aligns the raw disassembly (passed as 'str') with the rest of edis'ed disassembly output.
// This is called from non-raw mode when edis of the current m_inst fails for some reason.
static void
@@ -146,6 +153,19 @@
PadString(s, p.second, operandColWidth);
}
+static bool
+apply_workaround(const char *str)
+{
+ llvm::StringRef Str(str);
+ StripSpaces(Str);
+ if (Str.startswith("mov.w")) {
+ RStripNumber(Str);
+ if (Str.endswith("#"))
+ return true;
+ }
+ return false;
+}
+
#define AlignPC(pc_val) (pc_val & 0xFFFFFFFC)
void
InstructionLLVM::Dump
@@ -212,7 +232,16 @@
*/
/* .... when we fix the edis for arm/thumb. */
- if (!raw)
+ const char *lookahead;
+ bool workaround = false;
+ if (EDGetInstString(&lookahead, m_inst)) // 0 on success
+ return;
+ else if (m_arch_type == llvm::Triple::thumb) {
+ if (apply_workaround(lookahead))
+ workaround = true;
+ }
+
+ if (!raw && !workaround)
numTokens = EDNumTokens(m_inst);
int currentOpIndex = -1;
More information about the lldb-commits
mailing list