[Lldb-commits] [lldb] r124925 - /lldb/trunk/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
Johnny Chen
johnny.chen at apple.com
Fri Feb 4 17:39:52 PST 2011
Author: johnny
Date: Fri Feb 4 19:39:52 2011
New Revision: 124925
URL: http://llvm.org/viewvc/llvm-project?rev=124925&view=rev
Log:
Handle the thumb branch instructions which have their cond bits embedded in the instruction stream.
Modified:
lldb/trunk/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
Modified: lldb/trunk/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp?rev=124925&r1=124924&r2=124925&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp (original)
+++ lldb/trunk/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp Fri Feb 4 19:39:52 2011
@@ -1606,6 +1606,23 @@
return UnsignedBits(m_inst.opcode.inst32, 31, 28);
case eModeThumb:
+ // For T1 and T3 encodings of the Branch instruction, it returns the 4-bit
+ // 'cond' field of the encoding.
+ if (m_inst.opcode_type == eOpcode16 &&
+ Bits32(m_inst.opcode.inst16, 15, 12) == 0x0d &&
+ Bits32(m_inst.opcode.inst16, 11, 7) != 0x0f)
+ {
+ return Bits32(m_inst.opcode.inst16, 11, 7);
+ }
+ else if (m_inst.opcode_type == eOpcode32 &&
+ Bits32(m_inst.opcode.inst32, 31, 27) == 0x1e &&
+ Bits32(m_inst.opcode.inst32, 15, 14) == 0x02 &&
+ Bits32(m_inst.opcode.inst32, 12, 12) == 0x00 &&
+ Bits32(m_inst.opcode.inst32, 25, 22) <= 0x0d)
+ {
+ return Bits32(m_inst.opcode.inst32, 25, 22);
+ }
+
return m_it_session.GetCond();
}
return UINT32_MAX; // Return invalid value
More information about the lldb-commits
mailing list