diff options
author | Greg Clayton <gclayton@apple.com> | 2012-08-07 01:29:29 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2012-08-07 01:29:29 +0000 |
commit | 79101b5cb01eda3c3b617314de23b78ea6abb702 (patch) | |
tree | e57704756e0f797476063199c6db2545f1377a47 /lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp | |
parent | c11a33a2bd8e999be50ffc78b9bb747112f5b1f8 (diff) | |
download | llvm-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.cpp | 7 |
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; } } |