diff options
author | diggerlin <digger.llvm@gmail.com> | 2019-11-18 15:24:55 -0500 |
---|---|---|
committer | diggerlin <digger.llvm@gmail.com> | 2019-11-18 15:24:55 -0500 |
commit | 8f8a9f3437d4517f674395da30edb59d5514f7bc (patch) | |
tree | 2c7a1d493fae7b1d356fabd804a31911bfdb2750 /llvm/lib/Object/XCOFFObjectFile.cpp | |
parent | 19fd9039ca242f408493b5c662f9d908eab8555e (diff) | |
download | bcm5719-llvm-8f8a9f3437d4517f674395da30edb59d5514f7bc.tar.gz bcm5719-llvm-8f8a9f3437d4517f674395da30edb59d5514f7bc.zip |
implement printing out raw section data of xcoff objectfile for llvm-objdump
SUMMARY:
implement printing out raw section data of xcoff objectfile for llvm-objdump
and option -D --disassemble-all option for llvm-objdump
Reviewers: Sean Fertile
Subscribers: rupprecht, seiyai,hiraditya
Differential Revision: https://reviews.llvm.org/D70255
Diffstat (limited to 'llvm/lib/Object/XCOFFObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/XCOFFObjectFile.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/llvm/lib/Object/XCOFFObjectFile.cpp b/llvm/lib/Object/XCOFFObjectFile.cpp index 5ca2a6a03f0..6cc8deca73b 100644 --- a/llvm/lib/Object/XCOFFObjectFile.cpp +++ b/llvm/lib/Object/XCOFFObjectFile.cpp @@ -191,9 +191,8 @@ Expected<StringRef> XCOFFObjectFile::getSymbolName(DataRefImpl Symb) const { } Expected<uint64_t> XCOFFObjectFile::getSymbolAddress(DataRefImpl Symb) const { - uint64_t Result = 0; - llvm_unreachable("Not yet implemented!"); - return Result; + assert(!is64Bit() && "Symbol table support not implemented for 64-bit."); + return toSymbolEntry(Symb)->Value; } uint64_t XCOFFObjectFile::getSymbolValueImpl(DataRefImpl Symb) const { @@ -266,7 +265,19 @@ uint64_t XCOFFObjectFile::getSectionSize(DataRefImpl Sec) const { Expected<ArrayRef<uint8_t>> XCOFFObjectFile::getSectionContents(DataRefImpl Sec) const { - llvm_unreachable("Not yet implemented!"); + if (isSectionVirtual(Sec)) + return ArrayRef<uint8_t>(); + + const uint64_t OffsetToRaw = is64Bit() + ? toSection64(Sec)->FileOffsetToRawData + : toSection32(Sec)->FileOffsetToRawData; + + const uint8_t * ContentStart = base() + OffsetToRaw; + uint64_t SectionSize = getSectionSize(Sec); + if (checkOffset(Data, uintptr_t(ContentStart), SectionSize)) + return make_error<BinaryError>(); + + return makeArrayRef(ContentStart,SectionSize); } uint64_t XCOFFObjectFile::getSectionAlignment(DataRefImpl Sec) const { @@ -296,9 +307,8 @@ bool XCOFFObjectFile::isSectionBSS(DataRefImpl Sec) const { } bool XCOFFObjectFile::isSectionVirtual(DataRefImpl Sec) const { - bool Result = false; - llvm_unreachable("Not yet implemented!"); - return Result; + return is64Bit() ? toSection64(Sec)->FileOffsetToRawData == 0 + : toSection32(Sec)->FileOffsetToRawData == 0; } relocation_iterator XCOFFObjectFile::section_rel_begin(DataRefImpl Sec) const { @@ -384,7 +394,6 @@ Triple::ArchType XCOFFObjectFile::getArch() const { } SubtargetFeatures XCOFFObjectFile::getFeatures() const { - llvm_unreachable("Not yet implemented!"); return SubtargetFeatures(); } |