diff options
author | Martin Storsjo <martin@martin.st> | 2019-08-29 09:00:14 +0000 |
---|---|---|
committer | Martin Storsjo <martin@martin.st> | 2019-08-29 09:00:14 +0000 |
commit | 7ba81d95d5c07542f13ec21ded8056042aa7df3a (patch) | |
tree | 6113bf9838b0581737f2214ec5702e142d24c600 /llvm/lib/Object/COFFObjectFile.cpp | |
parent | edb6ab9ba66c8fa751e47a4fc87f323f614070de (diff) | |
download | bcm5719-llvm-7ba81d95d5c07542f13ec21ded8056042aa7df3a.tar.gz bcm5719-llvm-7ba81d95d5c07542f13ec21ded8056042aa7df3a.zip |
[COFF] Add a ResourceSectionRef method for getting the data entry, print it in llvm-readobj
Differential Revision: https://reviews.llvm.org/D66819
llvm-svn: 370311
Diffstat (limited to 'llvm/lib/Object/COFFObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index 368a6d10344..16d418a19fd 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -1707,11 +1707,29 @@ ResourceSectionRef::getTableEntryAtOffset(uint32_t Offset) { return *Entry; } +Expected<const coff_resource_data_entry &> +ResourceSectionRef::getDataEntryAtOffset(uint32_t Offset) { + const coff_resource_data_entry *Entry = nullptr; + + BinaryStreamReader Reader(BBS); + Reader.setOffset(Offset); + RETURN_IF_ERROR(Reader.readObject(Entry)); + assert(Entry != nullptr); + return *Entry; +} + Expected<const coff_resource_dir_table &> ResourceSectionRef::getEntrySubDir(const coff_resource_dir_entry &Entry) { + assert(Entry.Offset.isSubDir()); return getTableAtOffset(Entry.Offset.value()); } +Expected<const coff_resource_data_entry &> +ResourceSectionRef::getEntryData(const coff_resource_dir_entry &Entry) { + assert(!Entry.Offset.isSubDir()); + return getDataEntryAtOffset(Entry.Offset.value()); +} + Expected<const coff_resource_dir_table &> ResourceSectionRef::getBaseTable() { return getTableAtOffset(0); } |