summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2011-02-16 00:00:43 +0000
committerGreg Clayton <gclayton@apple.com>2011-02-16 00:00:43 +0000
commitbdda58377ffce8dd7cac322d3e8115ccb3a03ee1 (patch)
treef1885d4a905df68033dac17d46a9d27a93efa7a7 /lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
parentc541ade850cef39e4e815618fd205b5feedf7260 (diff)
downloadbcm5719-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.cpp46
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;
}
}
OpenPOWER on IntegriCloud