]> granicus.if.org Git - llvm/commitdiff
[llvm-readobj] Replace arch-specific ObjDumper methods by the single `printArchSpecif...
authorSimon Atanasyan <simon@atanasyan.com>
Fri, 4 Oct 2019 11:59:06 +0000 (11:59 +0000)
committerSimon Atanasyan <simon@atanasyan.com>
Fri, 4 Oct 2019 11:59:06 +0000 (11:59 +0000)
Initially llvm-readobj supports multiple command line options like
`--arm-attributes` and `--mips-plt-got` for display ELF arch-specific
information. Now all these options are superseded by the
`--arch-specific` one. It makes sense to have a single `printArchSpecificInfo`
method in the base `ObjDumper`, and hide all ELF/target specific details
in the `ELFDumper::printArchSpecificInfo` override.

Differential Revision: https://reviews.llvm.org/D68385

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@373731 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-readobj/ELFDumper.cpp
tools/llvm-readobj/ObjDumper.h
tools/llvm-readobj/llvm-readobj.cpp

index 2a59184868534964ac3755a6b16d204829076e3e..bf50fa5935aa24da49e9b61bb44604fd71950eb8 100644 (file)
@@ -173,11 +173,7 @@ public:
   void printVersionInfo() override;
   void printGroupSections() override;
 
-  void printAttributes() override;
-  void printMipsPLTGOT() override;
-  void printMipsABIFlags() override;
-  void printMipsReginfo() override;
-  void printMipsOptions() override;
+  void printArchSpecificInfo() override;
 
   void printStackMap() const override;
 
@@ -218,6 +214,12 @@ private:
                      S->sh_entsize, ObjF->getFileName()});
   }
 
+  void printAttributes();
+  void printMipsPLTGOT();
+  void printMipsABIFlags();
+  void printMipsReginfo();
+  void printMipsOptions();
+
   std::pair<const Elf_Phdr *, const Elf_Shdr *>
   findDynamic(const ELFFile<ELFT> *Obj);
   void loadDynamicTable(const ELFFile<ELFT> *Obj);
@@ -2210,6 +2212,23 @@ template <typename ELFT> void ELFDumper<ELFT>::printLoadName() {
   W.printString("LoadName", SOName);
 }
 
+template <class ELFT> void ELFDumper<ELFT>::printArchSpecificInfo() {
+  const ELFFile<ELFT> *Obj = ObjF->getELFFile();
+  switch (Obj->getHeader()->e_machine) {
+  case EM_ARM:
+    printAttributes();
+    break;
+  case EM_MIPS:
+    printMipsABIFlags();
+    printMipsOptions();
+    printMipsReginfo();
+    printMipsPLTGOT();
+    break;
+  default:
+    break;
+  }
+}
+
 template <class ELFT> void ELFDumper<ELFT>::printAttributes() {
   W.startLine() << "Attributes not implemented.\n";
 }
index e2c7e833320d23a16bbf606395a439565978b1cc..2ba441342499c06b2aa2a7c02b84eac45eccfc04 100644 (file)
@@ -69,15 +69,7 @@ public:
   virtual void printNotes() {}
   virtual void printELFLinkerOptions() {}
   virtual void printStackSizes() {}
-
-  // Only implemented for ARM ELF at this time.
-  virtual void printAttributes() { }
-
-  // Only implemented for MIPS ELF at this time.
-  virtual void printMipsPLTGOT() { }
-  virtual void printMipsABIFlags() { }
-  virtual void printMipsReginfo() { }
-  virtual void printMipsOptions() { }
+  virtual void printArchSpecificInfo() { }
 
   // Only implemented for PE/COFF.
   virtual void printCOFFImports() { }
index dfcda9996310413d552f9d59e38389e6005608c4..b85df6bae05d72e9708ad0e867e0c6f6cbfba267 100644 (file)
@@ -397,17 +397,6 @@ void reportWarning(Error Err, StringRef Input) {
 
 } // namespace llvm
 
-static bool isMipsArch(unsigned Arch) {
-  switch (Arch) {
-  case llvm::Triple::mips:
-  case llvm::Triple::mipsel:
-  case llvm::Triple::mips64:
-  case llvm::Triple::mips64el:
-    return true;
-  default:
-    return false;
-  }
-}
 namespace {
 struct ReadObjTypeTableBuilder {
   ReadObjTypeTableBuilder()
@@ -502,16 +491,8 @@ static void dumpObject(const ObjectFile *Obj, ScopedPrinter &Writer,
   if (Obj->isELF()) {
     if (opts::ELFLinkerOptions)
       Dumper->printELFLinkerOptions();
-    if (opts::ArchSpecificInfo) {
-      if (Obj->getArch() == llvm::Triple::arm)
-        Dumper->printAttributes();
-      else if (isMipsArch(Obj->getArch())) {
-        Dumper->printMipsABIFlags();
-        Dumper->printMipsOptions();
-        Dumper->printMipsReginfo();
-        Dumper->printMipsPLTGOT();
-      }
-    }
+    if (opts::ArchSpecificInfo)
+      Dumper->printArchSpecificInfo();
     if (opts::SectionGroups)
       Dumper->printGroupSections();
     if (opts::HashHistogram)