diff options
| -rw-r--r-- | llvm/test/tools/llvm-objdump/macho-mattr-arm.test | 5 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-objdump/macho-mcpu-arm.test | 10 | ||||
| -rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 11 | ||||
| -rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.cpp | 12 | ||||
| -rw-r--r-- | llvm/tools/llvm-objdump/llvm-objdump.h | 2 | 
5 files changed, 36 insertions, 4 deletions
diff --git a/llvm/test/tools/llvm-objdump/macho-mattr-arm.test b/llvm/test/tools/llvm-objdump/macho-mattr-arm.test new file mode 100644 index 00000000000..1b1714640c8 --- /dev/null +++ b/llvm/test/tools/llvm-objdump/macho-mattr-arm.test @@ -0,0 +1,5 @@ +@ RUN: llvm-mc < %s -triple armv8-apple-darwin10 -mattr=+fp-armv8 -filetype=obj -o - | llvm-objdump -d -m -mattr=+fp-armv8 - | FileCheck %s + +vcvtt.f64.f16 d3, s1 + +@ CHECK: e0 3b b2 ee vcvtt.f64.f16 d3, s1 diff --git a/llvm/test/tools/llvm-objdump/macho-mcpu-arm.test b/llvm/test/tools/llvm-objdump/macho-mcpu-arm.test new file mode 100644 index 00000000000..7a3432d9e1a --- /dev/null +++ b/llvm/test/tools/llvm-objdump/macho-mcpu-arm.test @@ -0,0 +1,10 @@ +@ RUN: llvm-mc < %s -triple thumbv7-apple-darwin -mcpu=cortex-a7 -filetype=obj | llvm-objdump -triple thumbv7-apple-darwin10 -m -d -mcpu=cortex-a7 - | FileCheck %s + +.thumb +.thumb_func _t +_t: +sdiv r1, r2, r3 +udiv r1, r2, r3 + +@ CHECK: 92 fb f3 f1 sdiv r1, r2, r3 +@ CHECK: b2 fb f3 f1 udiv r1, r2, r3 diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 808bc9296d8..3ba8b87d400 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/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/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 9e9526aa3cc..ebcee3b7f63 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/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/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h index 6d17f0f09fb..00c1b2c00b8 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.h +++ b/llvm/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);  | 

