summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Object/COFFObjectFile.cpp
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2019-08-29 09:00:14 +0000
committerMartin Storsjo <martin@martin.st>2019-08-29 09:00:14 +0000
commit7ba81d95d5c07542f13ec21ded8056042aa7df3a (patch)
tree6113bf9838b0581737f2214ec5702e142d24c600 /llvm/lib/Object/COFFObjectFile.cpp
parentedb6ab9ba66c8fa751e47a4fc87f323f614070de (diff)
downloadbcm5719-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.cpp18
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);
}
OpenPOWER on IntegriCloud