diff options
| -rw-r--r-- | llvm/tools/llvm-readobj/MachODumper.cpp | 28 | ||||
| -rw-r--r-- | llvm/tools/llvm-readobj/ObjDumper.h | 1 | ||||
| -rw-r--r-- | llvm/tools/llvm-readobj/llvm-readobj.cpp | 8 | 
3 files changed, 37 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp index 57db9ed7b2d..e7cda4d84d4 100644 --- a/llvm/tools/llvm-readobj/MachODumper.cpp +++ b/llvm/tools/llvm-readobj/MachODumper.cpp @@ -43,6 +43,7 @@ public:    // MachO-specific.    void printMachODataInCode() override;    void printMachOVersionMin() override; +  void printMachODysymtab() override;  private:    template<class MachHeader> @@ -663,3 +664,30 @@ void MachODumper::printMachOVersionMin() {      }    }  } + +void MachODumper::printMachODysymtab() { +  for (const auto &Load : Obj->load_commands()) { +    if (Load.C.cmd == MachO::LC_DYSYMTAB) { +      MachO::dysymtab_command DLC = Obj->getDysymtabLoadCommand(); +      DictScope Group(W, "Dysymtab"); +      W.printNumber("ilocalsym", DLC.ilocalsym); +      W.printNumber("nlocalsym", DLC.nlocalsym); +      W.printNumber("iextdefsym", DLC.iextdefsym); +      W.printNumber("nextdefsym", DLC.nextdefsym); +      W.printNumber("iundefsym", DLC.iundefsym); +      W.printNumber("nundefsym", DLC.nundefsym); +      W.printNumber("tocoff", DLC.tocoff); +      W.printNumber("ntoc", DLC.ntoc); +      W.printNumber("modtaboff", DLC.modtaboff); +      W.printNumber("nmodtab", DLC.nmodtab); +      W.printNumber("extrefsymoff", DLC.extrefsymoff); +      W.printNumber("nextrefsyms", DLC.nextrefsyms); +      W.printNumber("indirectsymoff", DLC.indirectsymoff); +      W.printNumber("nindirectsyms", DLC.nindirectsyms); +      W.printNumber("extreloff", DLC.extreloff); +      W.printNumber("nextrel", DLC.nextrel); +      W.printNumber("locreloff", DLC.locreloff); +      W.printNumber("nlocrel", DLC.nlocrel); +    } +  } +} diff --git a/llvm/tools/llvm-readobj/ObjDumper.h b/llvm/tools/llvm-readobj/ObjDumper.h index 03a71b82ba6..22051708efa 100644 --- a/llvm/tools/llvm-readobj/ObjDumper.h +++ b/llvm/tools/llvm-readobj/ObjDumper.h @@ -58,6 +58,7 @@ public:    // Only implemented for MachO.    virtual void printMachODataInCode() { }    virtual void printMachOVersionMin() { } +  virtual void printMachODysymtab() { }    virtual void printStackMap() const = 0; diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/llvm-readobj.cpp index d21303192a3..c0e6add4f2c 100644 --- a/llvm/tools/llvm-readobj/llvm-readobj.cpp +++ b/llvm/tools/llvm-readobj/llvm-readobj.cpp @@ -191,6 +191,12 @@ namespace opts {    cl::opt<bool>    MachOVersionMin("macho-version-min",                    cl::desc("Display MachO version min command")); + +  // -macho-dysymtab +  cl::opt<bool> +  MachODysymtab("macho-dysymtab", +                  cl::desc("Display MachO Dysymtab command")); +    // -stackmap    cl::opt<bool>    PrintStackMap("stackmap", @@ -327,6 +333,8 @@ static void dumpObject(const ObjectFile *Obj) {        Dumper->printMachODataInCode();      if (opts::MachOVersionMin)        Dumper->printMachOVersionMin(); +    if (opts::MachODysymtab) +      Dumper->printMachODysymtab();    }    if (opts::PrintStackMap)      Dumper->printStackMap();  | 

