diff options
author | Sean Fertile <sfertile@ca.ibm.com> | 2019-05-03 12:57:07 +0000 |
---|---|---|
committer | Sean Fertile <sfertile@ca.ibm.com> | 2019-05-03 12:57:07 +0000 |
commit | fd75ee9154d25a7ac4b806a193ef7ad846703c0c (patch) | |
tree | e590df34872294b32fb57e1b588f990eb66a42a7 /llvm/lib/Object | |
parent | e798e3a34600de0698d5bae131e5d153294e8155 (diff) | |
download | bcm5719-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.cpp | 41 |
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(); |