Fixed an issue where detection of vCont support wasn't being done correctly.
Fixed how the LLDBDisassembler computes and uses a target triple.
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@125617 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp b/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
index e0d41a4..bc6bfd1 100644
--- a/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
+++ b/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
@@ -342,39 +342,33 @@
return 0;
}
-static inline const char *
-TripleForArchSpec (const ArchSpec &arch, char *triple, size_t triple_len)
-{
- const char *arch_name = arch.AsCString();
-
- if (arch_name)
- {
- snprintf(triple, triple_len, "%s-unknown-unknown", arch_name);
- return triple;
- }
- return NULL;
-}
-
static inline EDAssemblySyntax_t
SyntaxForArchSpec (const ArchSpec &arch)
{
- const char *arch_name = arch.AsCString();
-
- if (arch_name != NULL
- && ( (0 == ::strncasecmp (arch_name, "i386", 4))
- || (0 == ::strncasecmp (arch_name, "x86_64", 6))))
+ switch (arch.GetGenericCPUType())
+ {
+ case ArchSpec::eCPU_i386:
+ case ArchSpec::eCPU_x86_64:
return kEDAssemblySyntaxX86ATT;
-
+
+ case ArchSpec::eCPU_arm:
+ case ArchSpec::eCPU_ppc:
+ case ArchSpec::eCPU_ppc64:
+ case ArchSpec::eCPU_sparc:
+ default:
+ break;
+ }
return (EDAssemblySyntax_t)0; // default
}
Disassembler *
DisassemblerLLVM::CreateInstance(const ArchSpec &arch)
{
- char triple[256];
+ std::auto_ptr<DisassemblerLLVM> disasm_ap (new DisassemblerLLVM(arch));
+
+ if (disasm_ap->IsValid())
+ return disasm_ap.release();
- if (TripleForArchSpec (arch, triple, sizeof(triple)))
- return new DisassemblerLLVM(arch);
return NULL;
}
@@ -382,11 +376,11 @@
Disassembler (arch),
m_disassembler (NULL)
{
- char triple[256];
- if (TripleForArchSpec (arch, triple, sizeof(triple)))
+ const std::string &arch_triple = arch.GetTriple().str();
+ if (!arch_triple.empty())
{
- int err = EDGetDisassembler(&m_disassembler, triple, SyntaxForArchSpec (arch));
- assert (err == 0);
+ if (EDGetDisassembler(&m_disassembler, arch_triple.c_str(), SyntaxForArchSpec (arch)))
+ m_disassembler = NULL;
}
}
diff --git a/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h b/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
index 3d76670..515814d 100644
--- a/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
+++ b/source/Plugins/Disassembler/llvm/DisassemblerLLVM.h
@@ -102,6 +102,12 @@
EnablePluginLogging (lldb_private::Stream *strm, lldb_private::Args &command);
protected:
+ bool
+ IsValid() const
+ {
+ return m_disassembler != NULL;
+ }
+
EDDisassemblerRef m_disassembler;
};