diff options
author | Greg Clayton <gclayton@apple.com> | 2011-02-16 00:00:43 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2011-02-16 00:00:43 +0000 |
commit | bdda58377ffce8dd7cac322d3e8115ccb3a03ee1 (patch) | |
tree | f1885d4a905df68033dac17d46a9d27a93efa7a7 /lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp | |
parent | c541ade850cef39e4e815618fd205b5feedf7260 (diff) | |
download | bcm5719-llvm-bdda58377ffce8dd7cac322d3e8115ccb3a03ee1.tar.gz bcm5719-llvm-bdda58377ffce8dd7cac322d3e8115ccb3a03ee1.zip |
Fixed an issue where detection of vCont support wasn't being done correctly.
Fixed how the LLDBDisassembler computes and uses a target triple.
llvm-svn: 125617
Diffstat (limited to 'lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp')
-rw-r--r-- | lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp | 46 |
1 files changed, 20 insertions, 26 deletions
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp index e0d41a40af8..bc6bfd16ccc 100644 --- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp +++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp @@ -342,39 +342,33 @@ DisassemblerLLVM::InstructionLLVM::Extract(const DataExtractor &data, uint32_t d 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 @@ DisassemblerLLVM::DisassemblerLLVM(const ArchSpec &arch) : 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; } } |