summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2010-06-11 03:25:34 +0000
committerGreg Clayton <gclayton@apple.com>2010-06-11 03:25:34 +0000
commit41f923275eb15ac0b2fc9442f272fd6e4ed8f12a (patch)
tree51ee99af424e6a63af024889f2550151c3d5957e /lldb/source/Plugins/Disassembler/llvm/DisassemblerLLVM.cpp
parent9af2d4a6141c4bad8a9e53912469b5ff13079464 (diff)
downloadbcm5719-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.cpp54
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()
OpenPOWER on IntegriCloud