diff options
Diffstat (limited to 'llvm/tools/llvm-readobj/COFFDumper.cpp')
-rw-r--r-- | llvm/tools/llvm-readobj/COFFDumper.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp index 0ed4ccd09f6..c840d7efb84 100644 --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/tools/llvm-readobj/COFFDumper.cpp @@ -83,6 +83,7 @@ public: void printSymbols() override; void printDynamicSymbols() override; void printUnwindInfo() override; + void printSectionAsHex(StringRef StringName) override; void printNeededLibraries() override; @@ -654,6 +655,28 @@ void COFFDumper::printFileHeaders() { printDOSHeader(DH); } +void COFFDumper::printSectionAsHex(StringRef SectionName) { + char *StrPtr; + long SectionIndex = strtol(SectionName.data(), &StrPtr, 10); + const coff_section *Sec; + if (*StrPtr) + error(Obj->getSection(SectionName, Sec)); + else { + error(Obj->getSection((int)SectionIndex, Sec)); + if (!Sec) + return error(object_error::parse_failed); + } + + StringRef SecName; + error(Obj->getSectionName(Sec, SecName)); + + ArrayRef<uint8_t> Content; + error(Obj->getSectionContents(Sec, Content)); + const uint8_t *SecContent = Content.data(); + + SectionHexDump(SecName, SecContent, Content.size()); +} + void COFFDumper::printDOSHeader(const dos_header *DH) { DictScope D(W, "DOSHeader"); W.printString("Magic", StringRef(DH->Magic, sizeof(DH->Magic))); |