summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object
diff options
context:
space:
mode:
authorSean Fertile <sfertile@ca.ibm.com>2019-05-03 12:57:07 +0000
committerSean Fertile <sfertile@ca.ibm.com>2019-05-03 12:57:07 +0000
commitfd75ee9154d25a7ac4b806a193ef7ad846703c0c (patch)
treee590df34872294b32fb57e1b588f990eb66a42a7 /llvm/lib/Object
parente798e3a34600de0698d5bae131e5d153294e8155 (diff)
downloadbcm5719-llvm-fd75ee9154d25a7ac4b806a193ef7ad846703c0c.tar.gz
bcm5719-llvm-fd75ee9154d25a7ac4b806a193ef7ad846703c0c.zip
[Object][XCOFF] Add an XCOFF dumper for llvm-readobj.
Patch adds support for dumping of file headers with llvm-readobj. XCOFF object files are added to test dumping a well formed file, and dumping both negative timestamps and negative symbol counts, both of which are allowed in the XCOFF definition. Differential Revision: https://reviews.llvm.org/D60878 llvm-svn: 359878
Diffstat (limited to 'llvm/lib/Object')
-rw-r--r--llvm/lib/Object/XCOFFObjectFile.cpp41
1 files changed, 34 insertions, 7 deletions
diff --git a/llvm/lib/Object/XCOFFObjectFile.cpp b/llvm/lib/Object/XCOFFObjectFile.cpp
index bc982593f0b..2a456538966 100644
--- a/llvm/lib/Object/XCOFFObjectFile.cpp
+++ b/llvm/lib/Object/XCOFFObjectFile.cpp
@@ -69,10 +69,6 @@ size_t XCOFFObjectFile::getSectionHeaderSize() const {
return sizeof(XCOFFSectionHeader);
}
-uint16_t XCOFFObjectFile::getNumberOfSections() const {
- return FileHdrPtr->NumberOfSections;
-}
-
void XCOFFObjectFile::moveSymbolNext(DataRefImpl &Symb) const {
llvm_unreachable("Not yet implemented!");
return;
@@ -247,9 +243,9 @@ section_iterator XCOFFObjectFile::section_end() const {
}
uint8_t XCOFFObjectFile::getBytesInAddress() const {
- uint8_t Result = 0;
- llvm_unreachable("Not yet implemented!");
- return Result;
+ // Only support 32-bit object files for now ...
+ assert(getFileHeaderSize() == XCOFF32FileHeaderSize);
+ return 4;
}
StringRef XCOFFObjectFile::getFileFormatName() const {
@@ -300,6 +296,37 @@ XCOFFObjectFile::XCOFFObjectFile(MemoryBufferRef Object, std::error_code &EC)
}
}
+uint16_t XCOFFObjectFile::getMagic() const {
+ return FileHdrPtr->Magic;
+}
+
+uint16_t XCOFFObjectFile::getNumberOfSections() const {
+ return FileHdrPtr->NumberOfSections;
+}
+
+int32_t XCOFFObjectFile::getTimeStamp() const {
+ return FileHdrPtr->TimeStamp;
+}
+
+uint32_t XCOFFObjectFile::getSymbolTableOffset() const {
+ return FileHdrPtr->SymbolTableOffset;
+}
+
+int32_t XCOFFObjectFile::getNumberOfSymbolTableEntries() const {
+ // As far as symbol table size is concerned, if this field is negative it is
+ // to be treated as a 0. However since this field is also used for printing we
+ // don't want to truncate any negative values.
+ return FileHdrPtr->NumberOfSymTableEntries;
+}
+
+uint16_t XCOFFObjectFile::getOptionalHeaderSize() const {
+ return FileHdrPtr->AuxHeaderSize;
+}
+
+uint16_t XCOFFObjectFile::getFlags() const {
+ return FileHdrPtr->Flags;
+}
+
Expected<std::unique_ptr<ObjectFile>>
ObjectFile::createXCOFFObjectFile(MemoryBufferRef Object) {
StringRef Data = Object.getBuffer();
OpenPOWER on IntegriCloud