diff options
author | Greg Clayton <gclayton@apple.com> | 2010-06-11 03:25:34 +0000 |
---|---|---|
committer | Greg Clayton <gclayton@apple.com> | 2010-06-11 03:25:34 +0000 |
commit | 41f923275eb15ac0b2fc9442f272fd6e4ed8f12a (patch) | |
tree | 51ee99af424e6a63af024889f2550151c3d5957e /lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp | |
parent | 9af2d4a6141c4bad8a9e53912469b5ff13079464 (diff) | |
download | bcm5719-llvm-41f923275eb15ac0b2fc9442f272fd6e4ed8f12a.tar.gz bcm5719-llvm-41f923275eb15ac0b2fc9442f272fd6e4ed8f12a.zip |
Made lldb_private::ArchSpec more generic so that it can take a mach-o cpu
type and sub-type, or an ELF e_machine value. Also added a generic CPU type
to the arch spec class so we can have a single arch definition that the LLDB
core code can use. Previously a lot of places in the code were using the
mach-o definitions from a macosx header file.
Switches over to using "llvm/Support/MachO.h" for the llvm::MachO::XXX for the
CPU types and sub types for mach-o ArchSpecs. Added "llvm/Support/ELF.h" so
we can use the "llvm::ELF::XXX" defines for the ELF ArchSpecs.
Got rid of all CPU_TYPE_ and CPU_SUBTYPE_ defines that were previously being
used in LLDB.
llvm-svn: 105806
Diffstat (limited to 'lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp')
-rw-r--r-- | lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp | 54 |
1 files changed, 25 insertions, 29 deletions
diff --git a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp index db2d561b24a..510f55baca6 100644 --- a/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp +++ b/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp @@ -313,54 +313,50 @@ DisassemblerLLVM::Instruction::Extract(const DataExtractor &data, uint32_t data_ } static inline const char * -TripleForCPU(cpu_type_t cpuType) +TripleForArchSpec (const ArchSpec &arch, char *triple, size_t triple_len) { - switch (cpuType) + const char *arch_name = arch.AsCString(); + + if (arch_name) { - default: - return NULL; - case CPU_TYPE_X86: - return "i386-unknown-unknown"; - case CPU_TYPE_X86_64: - return "x86_64-unknown-unknown"; + snprintf(triple, triple_len, "%s-unknown-unknown", arch_name); + return triple; } + return NULL; } static inline EDAssemblySyntax_t -SyntaxForCPU(cpu_type_t cpuType) +SyntaxForArchSpec (const ArchSpec &arch) { - switch (cpuType) - { - default: - return (EDAssemblySyntax_t)0; // default - case CPU_TYPE_X86: - case CPU_TYPE_X86_64: + const char *arch_name = arch.AsCString(); + + if (arch_name != NULL && + ((strcasestr (arch_name, "i386") == arch_name) || + (strcasestr (arch_name, "x86_64") == arch_name))) return kEDAssemblySyntaxX86ATT; - } + + return (EDAssemblySyntax_t)0; // default } Disassembler * DisassemblerLLVM::CreateInstance(const ArchSpec &arch) { - cpu_type_t cpuType = arch.GetCPUType(); + char triple[256]; - if (TripleForCPU(cpuType)) - return new DisassemblerLLVM(arch); - else - return NULL; + if (TripleForArchSpec (arch, triple, sizeof(triple))) + return new DisassemblerLLVM(triple); + return NULL; } DisassemblerLLVM::DisassemblerLLVM(const ArchSpec &arch) : Disassembler(arch) { - cpu_type_t cpuType = arch.GetCPUType(); - - const char *triple = TripleForCPU(cpuType); - assert(triple && "Unhandled CPU type!"); - - EDAssemblySyntax_t syntax = SyntaxForCPU(cpuType); - - assert(!EDGetDisassembler(&m_disassembler, triple, syntax) && "No disassembler created!"); + char triple[256]; + if (TripleForArchSpec (arch, triple, sizeof(triple))) + { + EDAssemblySyntax_t syntax = SyntaxForArchSpec (arch); + assert(!EDGetDisassembler(&m_disassembler, triple, syntax) && "No disassembler created!"); + } } DisassemblerLLVM::~DisassemblerLLVM() |