aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2012-08-07 01:29:29 +0000
committerGreg Clayton <gclayton@apple.com>2012-08-07 01:29:29 +0000
commit79101b5cb01eda3c3b617314de23b78ea6abb702 (patch)
treee57704756e0f797476063199c6db2545f1377a47 /lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
parentc11a33a2bd8e999be50ffc78b9bb747112f5b1f8 (diff)
downloadllvm-79101b5cb01eda3c3b617314de23b78ea6abb702.zip
llvm-79101b5cb01eda3c3b617314de23b78ea6abb702.tar.gz
llvm-79101b5cb01eda3c3b617314de23b78ea6abb702.tar.bz2
Fixed an error in the thumb opcode encoding. We need the 32 bit thumb instructions to be encoded as a 32 bit value for the EmulateARM code.
llvm-svn: 161381
Diffstat (limited to 'lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp')
-rw-r--r--lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
index b03b2af..349c16e 100644
--- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
+++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp
@@ -130,7 +130,7 @@ public:
{
if (machine == llvm::Triple::thumb || is_altnernate_isa)
{
- uint16_t thumb_opcode = data.GetU16(&data_offset);
+ uint32_t thumb_opcode = data.GetU16(&data_offset);
if ((thumb_opcode & 0xe000) != 0xe000 || ((thumb_opcode & 0x1800u) == 0))
{
m_opcode.SetOpcode16 (thumb_opcode);
@@ -138,8 +138,9 @@ public:
}
else
{
- data_offset -= 2;
- m_opcode.SetOpcode16_2 (data.GetU32(&data_offset));
+ thumb_opcode <<= 16;
+ thumb_opcode |= data.GetU16(&data_offset);
+ m_opcode.SetOpcode16_2 (thumb_opcode);
m_is_valid = true;
}
}