diff options
author | Kevin Enderby <enderby@apple.com> | 2014-08-06 23:24:41 +0000 |
---|---|---|
committer | Kevin Enderby <enderby@apple.com> | 2014-08-06 23:24:41 +0000 |
commit | 75d423feed899baff90adab26b77195fb19128cc (patch) | |
tree | 6531a9eafebbae95d5446fbb75c6e35171e75e73 /tools | |
parent | 41d6599bb17cab630584e472f9578b237763ace4 (diff) |
Add the -mcpu= option to llvm-objdump for use with the disassemblers.
Also make the disassembler created with the Mach-O parser (the -m option)
pick up the Target specific attributes specified with -mattr option.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215032 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r-- | tools/llvm-objdump/MachODump.cpp | 11 | ||||
-rw-r--r-- | tools/llvm-objdump/llvm-objdump.cpp | 12 | ||||
-rw-r--r-- | tools/llvm-objdump/llvm-objdump.h | 2 |
3 files changed, 21 insertions, 4 deletions
diff --git a/tools/llvm-objdump/MachODump.cpp b/tools/llvm-objdump/MachODump.cpp index 808bc9296d8..3ba8b87d400 100644 --- a/tools/llvm-objdump/MachODump.cpp +++ b/tools/llvm-objdump/MachODump.cpp @@ -220,13 +220,22 @@ static void DisassembleInputMachO2(StringRef Filename, std::unique_ptr<MCInstrAnalysis> InstrAnalysis( TheTarget->createMCInstrAnalysis(InstrInfo.get())); + // Package up features to be passed to target/subtarget + std::string FeaturesStr; + if (MAttrs.size()) { + SubtargetFeatures Features; + for (unsigned i = 0; i != MAttrs.size(); ++i) + Features.AddFeature(MAttrs[i]); + FeaturesStr = Features.getString(); + } + // Set up disassembler. std::unique_ptr<const MCRegisterInfo> MRI( TheTarget->createMCRegInfo(TripleName)); std::unique_ptr<const MCAsmInfo> AsmInfo( TheTarget->createMCAsmInfo(*MRI, TripleName)); std::unique_ptr<const MCSubtargetInfo> STI( - TheTarget->createMCSubtargetInfo(TripleName, "", "")); + TheTarget->createMCSubtargetInfo(TripleName, MCPU, FeaturesStr)); MCContext Ctx(AsmInfo.get(), MRI.get(), nullptr); std::unique_ptr<const MCDisassembler> DisAsm( TheTarget->createMCDisassembler(*STI, Ctx)); diff --git a/tools/llvm-objdump/llvm-objdump.cpp b/tools/llvm-objdump/llvm-objdump.cpp index 9e9526aa3cc..ebcee3b7f63 100644 --- a/tools/llvm-objdump/llvm-objdump.cpp +++ b/tools/llvm-objdump/llvm-objdump.cpp @@ -94,6 +94,12 @@ llvm::TripleName("triple", cl::desc("Target triple to disassemble for, " "see -version for available targets")); cl::opt<std::string> +llvm::MCPU("mcpu", + cl::desc("Target a specific cpu type (-mcpu=help for details)"), + cl::value_desc("cpu-name"), + cl::init("")); + +cl::opt<std::string> llvm::ArchName("arch", cl::desc("Target arch to disassemble for, " "see -version for available targets")); @@ -107,8 +113,8 @@ static cl::alias SectionHeadersShorter("h", cl::desc("Alias for --section-headers"), cl::aliasopt(SectionHeaders)); -static cl::list<std::string> -MAttrs("mattr", +cl::list<std::string> +llvm::MAttrs("mattr", cl::CommaSeparated, cl::desc("Target specific attributes"), cl::value_desc("a1,+a2,-a3,...")); @@ -303,7 +309,7 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) { } std::unique_ptr<const MCSubtargetInfo> STI( - TheTarget->createMCSubtargetInfo(TripleName, "", FeaturesStr)); + TheTarget->createMCSubtargetInfo(TripleName, MCPU, FeaturesStr)); if (!STI) { errs() << "error: no subtarget info for target " << TripleName << "\n"; return; diff --git a/tools/llvm-objdump/llvm-objdump.h b/tools/llvm-objdump/llvm-objdump.h index 6d17f0f09fb..00c1b2c00b8 100644 --- a/tools/llvm-objdump/llvm-objdump.h +++ b/tools/llvm-objdump/llvm-objdump.h @@ -25,6 +25,8 @@ namespace object { extern cl::opt<std::string> TripleName; extern cl::opt<std::string> ArchName; +extern cl::opt<std::string> MCPU; +extern cl::list<std::string> MAttrs; // Various helper functions. bool error(std::error_code ec); |