<div dir="ltr">Hi Jason,<div><br></div><div>This commit caused a regression in disassembling thumb code when the architecture is specified explicitly for the disassemble Â because we try to create an alternative thumb disassembler even when the primary disassembler is already thumb.</div><div><br></div><div>I committed in a fix as <a href="http://llvm.org/viewvc/llvm-project?rev=246649&view=rev">http://llvm.org/viewvc/llvm-project?rev=246649&view=rev</a> but please check that it don't break the original functionality you tried to implement.</div><div><br></div><div>Thanks,</div><div>Tamas</div><br><div class="gmail_quote"><div dir="ltr">On Fri, Aug 21, 2015 at 1:14 AM Jason Molenda via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: jmolenda<br>
Date: Thu Aug 20 19:13:37 2015<br>
New Revision: 245645<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=245645&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=245645&view=rev</a><br>
Log:<br>
The llvm Triple for an armv6m now comes back as llvm::Triple::thumb.<br>
This was breaking disassembly for arm machines that we force to be<br>
thumb mode all the time because we were only checking for llvm::Triple::arm.<br>
i.e.<br>
<br>
armv6m (ARM Cortex-M0)<br>
armv7m (ARM Cortex-M3)<br>
armv7em (ARM Cortex-M4)<br>
<br>
<rdar://problem/22334522><br>
<br>
<br>
Modified:<br>
  Â  lldb/trunk/source/Core/Disassembler.cpp<br>
  Â  lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp<br>
  Â  lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp<br>
  Â  lldb/trunk/source/Plugins/Process/Utility/StopInfoMachException.cpp<br>
  Â  lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp<br>
  Â  lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp<br>
<br>
Modified: lldb/trunk/source/Core/Disassembler.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Disassembler.cpp?rev=245645&r1=245644&r2=245645&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/Disassembler.cpp?rev=245645&r1=245644&r2=245645&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Core/Disassembler.cpp (original)<br>
+++ lldb/trunk/source/Core/Disassembler.cpp Thu Aug 20 19:13:37 2015<br>
@@ -1264,7 +1264,7 @@ Disassembler::Disassembler(const ArchSpe<br>
  Â  Â // If this is an arm variant that can only include thumb (T16, T32)<br>
  Â  Â // instructions, force the arch triple to be "thumbv.." instead of<br>
  Â  Â // "armv..."<br>
-  Â  if (arch.GetTriple().getArch() == llvm::Triple::arm<br>
+  Â  if ((arch.GetTriple().getArch() == llvm::Triple::arm || arch.GetTriple().getArch() == llvm::Triple::thumb)<br>
  Â  Â  Â  Â && (arch.GetCore() == ArchSpec::Core::eCore_arm_armv7m<br>
  Â  Â  Â  Â  Â  Â || arch.GetCore() == ArchSpec::Core::eCore_arm_armv7em<br>
  Â  Â  Â  Â  Â  Â || arch.GetCore() == ArchSpec::Core::eCore_arm_armv6m))<br>
<br>
Modified: lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp?rev=245645&r1=245644&r2=245645&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp?rev=245645&r1=245644&r2=245645&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp (original)<br>
+++ lldb/trunk/source/Plugins/Disassembler/llvm/DisassemblerLLVMC.cpp Thu Aug 20 19:13:37 2015<br>
@@ -604,7 +604,7 @@ DisassemblerLLVMC::DisassemblerLLVMC (co<br>
  Â  Â }<br>
<br>
  Â  Â ArchSpec thumb_arch(arch);<br>
-  Â  if (arch.GetTriple().getArch() == llvm::Triple::arm)<br>
+  Â  if (arch.GetTriple().getArch() == llvm::Triple::arm || arch.GetTriple().getArch() == llvm::Triple::thumb)<br>
  Â  Â {<br>
  Â  Â  Â  Â std::string thumb_arch_name (thumb_arch.GetTriple().getArchName().str());<br>
  Â  Â  Â  Â // Replace "arm" with "thumb" so we get all thumb variants correct<br>
@@ -626,7 +626,7 @@ DisassemblerLLVMC::DisassemblerLLVMC (co<br>
  Â  Â // Handle the Cortex-M0 (armv6m) the same; the ISA is a subset of the T and T32<br>
  Â  Â // instructions defined in ARMv7-A.<br>
<br>
-  Â  if (arch.GetTriple().getArch() == llvm::Triple::arm<br>
+  Â  if ((arch.GetTriple().getArch() == llvm::Triple::arm || arch.GetTriple().getArch() == llvm::Triple::thumb)<br>
  Â  Â  Â  Â && (arch.GetCore() == ArchSpec::Core::eCore_arm_armv7m<br>
  Â  Â  Â  Â  Â  Â || arch.GetCore() == ArchSpec::Core::eCore_arm_armv7em<br>
  Â  Â  Â  Â  Â  Â || arch.GetCore() == ArchSpec::Core::eCore_arm_armv6m))<br>
@@ -698,7 +698,7 @@ DisassemblerLLVMC::DisassemblerLLVMC (co<br>
  Â  Â }<br>
<br>
  Â  Â // For arm CPUs that can execute arm or thumb instructions, also create a thumb instruction disassembler.<br>
-  Â  if (arch.GetTriple().getArch() == llvm::Triple::arm)<br>
+  Â  if (arch.GetTriple().getArch() == llvm::Triple::arm || arch.GetTriple().getArch() == llvm::Triple::thumb)<br>
  Â  Â {<br>
  Â  Â  Â  Â std::string thumb_triple(thumb_arch.GetTriple().getTriple());<br>
  Â  Â  Â  Â m_alternate_disasm_ap.reset(new LLVMCDisassembler(thumb_triple.c_str(), "", "", flavor, *this));<br>
<br>
Modified: lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=245645&r1=245644&r2=245645&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp?rev=245645&r1=245644&r2=245645&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp (original)<br>
+++ lldb/trunk/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp Thu Aug 20 19:13:37 2015<br>
@@ -5721,6 +5721,7 @@ ObjectFileMachO::SaveCore (const lldb::P<br>
  Â  Â  Â  Â  Â  Â {<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::aarch64:<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::arm:<br>
+  Â  Â  Â  Â  Â  Â  Â  case llvm::Triple::thumb:<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::x86:<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::x86_64:<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â make_core = true;<br>
<br>
Modified: lldb/trunk/source/Plugins/Process/Utility/StopInfoMachException.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/StopInfoMachException.cpp?rev=245645&r1=245644&r2=245645&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/Utility/StopInfoMachException.cpp?rev=245645&r1=245644&r2=245645&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Process/Utility/StopInfoMachException.cpp (original)<br>
+++ lldb/trunk/source/Plugins/Process/Utility/StopInfoMachException.cpp Thu Aug 20 19:13:37 2015<br>
@@ -58,6 +58,7 @@ StopInfoMachException::GetDescription ()<br>
  Â  Â  Â  Â  Â  Â  Â  Â }<br>
  Â  Â  Â  Â  Â  Â  Â  Â break;<br>
  Â  Â  Â  Â  Â  Â case llvm::Triple::arm:<br>
+  Â  Â  Â  Â  Â  case llvm::Triple::thumb:<br>
  Â  Â  Â  Â  Â  Â  Â  Â switch (m_exc_code)<br>
  Â  Â  Â  Â  Â  Â  Â  Â {<br>
  Â  Â  Â  Â  Â  Â  Â  Â case 0x101: code_desc = "EXC_ARM_DA_ALIGN"; break;<br>
@@ -104,6 +105,7 @@ StopInfoMachException::GetDescription ()<br>
  Â  Â  Â  Â  Â  Â  Â  Â break;<br>
<br>
  Â  Â  Â  Â  Â  Â case llvm::Triple::arm:<br>
+  Â  Â  Â  Â  Â  case llvm::Triple::thumb:<br>
  Â  Â  Â  Â  Â  Â  Â  Â if (m_exc_code == 1)<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â code_desc = "EXC_ARM_UNDEFINED";<br>
  Â  Â  Â  Â  Â  Â  Â  Â break;<br>
@@ -188,6 +190,7 @@ StopInfoMachException::GetDescription ()<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â break;<br>
<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::arm:<br>
+  Â  Â  Â  Â  Â  Â  Â  case llvm::Triple::thumb:<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â switch (m_exc_code)<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â {<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â case 0x101: code_desc = "EXC_ARM_DA_ALIGN"; break;<br>
@@ -408,6 +411,7 @@ StopInfoMachException::CreateStopReasonW<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â break;<br>
<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::arm:<br>
+  Â  Â  Â  Â  Â  Â  Â  case llvm::Triple::thumb:<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â if (exc_code == 0x102) // EXC_ARM_DA_DEBUG<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â {<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â // It's a watchpoint, then, if the exc_sub_code indicates a known/enabled<br>
<br>
Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp?rev=245645&r1=245644&r2=245645&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp?rev=245645&r1=245644&r2=245645&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp (original)<br>
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp Thu Aug 20 19:13:37 2015<br>
@@ -1209,6 +1209,7 @@ GDBRemoteCommunicationServerCommon::Crea<br>
  Â  Â  Â  Â  Â  Â switch (proc_triple.getArch ())<br>
  Â  Â  Â  Â  Â  Â {<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::arm:<br>
+  Â  Â  Â  Â  Â  Â  Â  case llvm::Triple::thumb:<br>
  Â  Â  Â  Â  Â  Â  Â  Â case llvm::Triple::aarch64:<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â ostype = "ios";<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â break;<br>
<br>
Modified: lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=245645&r1=245644&r2=245645&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp?rev=245645&r1=245644&r2=245645&view=diff</a><br>
==============================================================================<br>
--- lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp (original)<br>
+++ lldb/trunk/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp Thu Aug 20 19:13:37 2015<br>
@@ -735,11 +735,12 @@ ProcessGDBRemote::BuildDynamicRegisterIn<br>
  Â  Â if (!target_arch.IsValid())<br>
  Â  Â {<br>
  Â  Â  Â  Â if (remote_arch.IsValid()<br>
-  Â  Â  Â  Â  Â  Â  && remote_arch.GetMachine() == llvm::Triple::arm<br>
+  Â  Â  Â  Â  Â  Â  && (remote_arch.GetMachine() == llvm::Triple::arm || remote_arch.GetMachine() == llvm::Triple::thumb)<br>
  Â  Â  Â  Â  Â  Â  Â && remote_arch.GetTriple().getVendor() == llvm::Triple::Apple)<br>
  Â  Â  Â  Â  Â  Â m_register_info.HardcodeARMRegisters(from_scratch);<br>
  Â  Â }<br>
-  Â  else if (target_arch.GetMachine() == llvm::Triple::arm)<br>
+  Â  else if (target_arch.GetMachine() == llvm::Triple::arm<br>
+  Â  Â  Â  Â  Â  || target_arch.GetMachine() == llvm::Triple::thumb)<br>
  Â  Â {<br>
  Â  Â  Â  Â m_register_info.HardcodeARMRegisters(from_scratch);<br>
  Â  Â }<br>
@@ -1250,8 +1251,8 @@ ProcessGDBRemote::DidLaunchOrAttach (Arc<br>
  Â  Â  Â  Â  Â  Â  Â  Â // it has, so we really need to take the remote host architecture as our<br>
  Â  Â  Â  Â  Â  Â  Â  Â // defacto architecture in this case.<br>
<br>
-  Â  Â  Â  Â  Â  Â  Â  if (process_arch.GetMachine() == llvm::Triple::arm &&<br>
-  Â  Â  Â  Â  Â  Â  Â  Â  Â  process_arch.GetTriple().getVendor() == llvm::Triple::Apple)<br>
+  Â  Â  Â  Â  Â  Â  Â  if ((process_arch.GetMachine() == llvm::Triple::arm || process_arch.GetMachine() == llvm::Triple::thumb)<br>
+  Â  Â  Â  Â  Â  Â  Â  Â  Â  && process_arch.GetTriple().getVendor() == llvm::Triple::Apple)<br>
  Â  Â  Â  Â  Â  Â  Â  Â {<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â GetTarget().SetArchitecture (process_arch);<br>
  Â  Â  Â  Â  Â  Â  Â  Â  Â  Â if (log)<br>
<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br>
</blockquote></div></div>