forked from OSchip/llvm-project
When creating a disassembler for one of the arm variants that can
only execute thumb instructions, force the arch triple string to be "thumbv..." instead of "armv..." so we do the right thing by default when disassembling arbitrary chunks of code. <rdar://problem/15126397> llvm-svn: 228486
This commit is contained in:
parent
2b56057517
commit
75452e8c5c
|
@ -457,7 +457,7 @@ protected:
|
|||
//------------------------------------------------------------------
|
||||
// Classes that inherit from Disassembler can see and modify these
|
||||
//------------------------------------------------------------------
|
||||
const ArchSpec m_arch;
|
||||
ArchSpec m_arch;
|
||||
InstructionList m_instruction_list;
|
||||
lldb::addr_t m_base_addr;
|
||||
std::string m_flavor;
|
||||
|
|
|
@ -1172,6 +1172,24 @@ Disassembler::Disassembler(const ArchSpec& arch, const char *flavor) :
|
|||
m_flavor.assign("default");
|
||||
else
|
||||
m_flavor.assign(flavor);
|
||||
|
||||
// If this is an arm variant that can only include thumb (T16, T32)
|
||||
// instructions, force the arch triple to be "thumbv.." instead of
|
||||
// "armv..."
|
||||
if (arch.GetTriple().getArch() == llvm::Triple::arm
|
||||
&& (arch.GetCore() == ArchSpec::Core::eCore_arm_armv7m
|
||||
|| arch.GetCore() == ArchSpec::Core::eCore_arm_armv7em
|
||||
|| arch.GetCore() == ArchSpec::Core::eCore_arm_armv6m))
|
||||
{
|
||||
std::string thumb_arch_name (arch.GetTriple().getArchName().str());
|
||||
// Replace "arm" with "thumb" so we get all thumb variants correct
|
||||
if (thumb_arch_name.size() > 3)
|
||||
{
|
||||
thumb_arch_name.erase(0, 3);
|
||||
thumb_arch_name.insert(0, "thumb");
|
||||
}
|
||||
m_arch.SetTriple (thumb_arch_name.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
|
Loading…
Reference in New Issue