diff options
Diffstat (limited to 'llvm/tools/llvm-readobj/MachODumper.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/MachODumper.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/MachODumper.cpp index 69ef1556f78..c97f598bdd7 100644 --- a/llvm/tools/llvm-readobj/MachODumper.cpp +++ b/llvm/tools/llvm-readobj/MachODumper.cpp @@ -38,6 +38,7 @@ public: void printDynamicSymbols() override; void printUnwindInfo() override; void printStackMap() const override; + void printSectionAsHex(StringRef SectionName) override; void printNeededLibraries() override; @@ -676,6 +677,26 @@ void MachODumper::printStackMap() const { StackMapV2Parser<support::big>(StackMapContentsArray)); } +void MachODumper::printSectionAsHex(StringRef SectionName) { + char *StrPtr; + long SectionIndex = strtol(SectionName.data(), &StrPtr, 10); + SectionRef SecTmp; + const SectionRef *Sec = &SecTmp; + if (*StrPtr) + SecTmp = unwrapOrError(Obj->getSection(SectionName)); + else + SecTmp = unwrapOrError(Obj->getSection((unsigned int)SectionIndex)); + + StringRef SecName; + error(Sec->getName(SecName)); + + StringRef Data; + error(Sec->getContents(Data)); + const uint8_t *SecContent = reinterpret_cast<const uint8_t *>(Data.data()); + + SectionHexDump(SecName, SecContent, Data.size()); +} + void MachODumper::printNeededLibraries() { ListScope D(W, "NeededLibraries"); |