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