summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/COFFDumper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-readobj/COFFDumper.cpp')
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp23
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)));
OpenPOWER on IntegriCloud