summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-readobj/COFFDumper.cpp
diff options
context:
space:
mode:
authorEric Beckmann <ecbeckmann@google.com>2017-05-08 02:25:03 +0000
committerEric Beckmann <ecbeckmann@google.com>2017-05-08 02:25:03 +0000
commit03de7c1501a8ae382778eb1ec69a2b954a033c75 (patch)
tree282b9e0b36219fb1ef5b949701a1655731d85243 /llvm/tools/llvm-readobj/COFFDumper.cpp
parentc2d3f4c60428a41c2e3ab5f510b2c503c846d301 (diff)
downloadbcm5719-llvm-03de7c1501a8ae382778eb1ec69a2b954a033c75.tar.gz
bcm5719-llvm-03de7c1501a8ae382778eb1ec69a2b954a033c75.zip
Revert "Hopefully one last commit to fix this patch, addresses string reference"
Summary: This reverts commit 56beec1b1cfc6d263e5eddb7efff06117c0724d2. Revert "Quick fix to D32609, it seems .o files are not transferred in all cases." This reverts commit 7652eecd29cfdeeab7f76f687586607a99ff4e36. Revert "Update llvm-readobj -coff-resources to display tree structure." This reverts commit 422b62c4d302cfc92401418c2acd165056081ed7. Reviewers: zturner Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D32958 llvm-svn: 302397
Diffstat (limited to 'llvm/tools/llvm-readobj/COFFDumper.cpp')
-rw-r--r--llvm/tools/llvm-readobj/COFFDumper.cpp105
1 files changed, 8 insertions, 97 deletions
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp
index 9ffa8292738..3f4b6c79178 100644
--- a/llvm/tools/llvm-readobj/COFFDumper.cpp
+++ b/llvm/tools/llvm-readobj/COFFDumper.cpp
@@ -44,7 +44,6 @@
#include "llvm/Support/BinaryByteStream.h"
#include "llvm/Support/BinaryStreamReader.h"
#include "llvm/Support/COFF.h"
-#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/DataExtractor.h"
@@ -122,10 +121,6 @@ private:
uint32_t RelocOffset, uint32_t Offset,
StringRef *RelocSym = nullptr);
- void printResourceDirectoryTable(ResourceSectionRef RSF,
- const coff_resource_dir_table &Table,
- StringRef Level);
-
void printBinaryBlockWithRelocs(StringRef Label, const SectionRef &Sec,
StringRef SectionContents, StringRef Block);
@@ -145,9 +140,6 @@ private:
void printDelayImportedSymbols(
const DelayImportDirectoryEntryRef &I,
iterator_range<imported_symbol_iterator> Range);
- ErrorOr<const coff_resource_dir_entry &>
- getResourceDirectoryTableEntry(const coff_resource_dir_table &Table,
- uint32_t Index);
typedef DenseMap<const coff_section*, std::vector<RelocationRef> > RelocMapTy;
@@ -542,29 +534,6 @@ static const EnumEntry<uint8_t> FileChecksumKindNames[] = {
LLVM_READOBJ_ENUM_CLASS_ENT(FileChecksumKind, SHA256),
};
-static const EnumEntry<COFF::ResourceTypeID> ResourceTypeNames[]{
- {"kRT_CURSOR (ID 1)", COFF::RID_Cursor},
- {"kRT_BITMAP (ID 2)", COFF::RID_Bitmap},
- {"kRT_ICON (ID 3)", COFF::RID_Icon},
- {"kRT_MENU (ID 4)", COFF::RID_Menu},
- {"kRT_DIALOG (ID 5)", COFF::RID_Dialog},
- {"kRT_STRING (ID 6)", COFF::RID_String},
- {"kRT_FONTDIR (ID 7)", COFF::RID_FontDir},
- {"kRT_FONT (ID 8)", COFF::RID_Font},
- {"kRT_ACCELERATOR (ID 9)", COFF::RID_Accelerator},
- {"kRT_RCDATA (ID 10)", COFF::RID_RCData},
- {"kRT_MESSAGETABLE (ID 11)", COFF::RID_MessageTable},
- {"kRT_GROUP_CURSOR (ID 12)", COFF::RID_Group_Cursor},
- {"kRT_GROUP_ICON (ID 14)", COFF::RID_Group_Icon},
- {"kRT_VERSION (ID 16)", COFF::RID_Version},
- {"kRT_DLGINCLUDE (ID 17)", COFF::RID_DLGInclude},
- {"kRT_PLUGPLAY (ID 19)", COFF::RID_PlugPlay},
- {"kRT_VXD (ID 20)", COFF::RID_VXD},
- {"kRT_ANICURSOR (ID 21)", COFF::RID_AniCursor},
- {"kRT_ANIICON (ID 22)", COFF::RID_AniIcon},
- {"kRT_HTML (ID 23)", COFF::RID_HTML},
- {"kRT_MANIFEST (ID 24)", COFF::RID_Manifest}};
-
template <typename T>
static std::error_code getSymbolAuxData(const COFFObjectFile *Obj,
COFFSymbolRef Symbol,
@@ -1534,76 +1503,18 @@ void COFFDumper::printCOFFResources() {
error(S.getContents(Ref));
if ((Name == ".rsrc") || (Name == ".rsrc$01")) {
- ResourceSectionRef RSF(Ref);
- auto &BaseTable = unwrapOrError(RSF.getBaseTable());
- printResourceDirectoryTable(RSF, BaseTable, "Type");
+ auto Table =
+ reinterpret_cast<const coff_resource_dir_table *>(Ref.data());
+ char FormattedTime[20];
+ time_t TDS = time_t(Table->TimeDateStamp);
+ strftime(FormattedTime, sizeof(FormattedTime), "%Y-%m-%d %H:%M:%S",
+ gmtime(&TDS));
+ W.printHex("Time/Date Stamp", FormattedTime, Table->TimeDateStamp);
}
- if (opts::SectionData)
- W.printBinaryBlock(Name.str() + " Data", Ref);
+ W.printBinaryBlock(Name.str() + " Data", Ref);
}
}
-void COFFDumper::printResourceDirectoryTable(
- ResourceSectionRef RSF, const coff_resource_dir_table &Table,
- StringRef Level) {
- W.printNumber("String Name Entries", Table.NumberOfNameEntries);
- W.printNumber("ID Entries", Table.NumberOfIDEntries);
-
- char FormattedTime[20] = {};
- time_t TDS = time_t(Table.TimeDateStamp);
- strftime(FormattedTime, 20, "%Y-%m-%d %H:%M:%S", gmtime(&TDS));
-
- // Iterate through level in resource directory tree.
- for (int i = 0; i < Table.NumberOfNameEntries + Table.NumberOfIDEntries;
- i++) {
- auto Entry = unwrapOrError(getResourceDirectoryTableEntry(Table, i));
- StringRef Name;
- SmallString<20> IDStr;
- raw_svector_ostream OS(IDStr);
- if (i < Table.NumberOfNameEntries) {
- ArrayRef<UTF16> RawEntryNameString = unwrapOrError(RSF.getEntryNameString(Entry));
- std::string EntryNameString;
- if (!llvm::convertUTF16ToUTF8String(RawEntryNameString, EntryNameString))
- error(object_error::parse_failed);
- OS << ": ";
- OS << EntryNameString;
- } else {
- if (Level == "Type") {
- ScopedPrinter Printer(OS);
- Printer.printEnum("", Entry.Identifier.ID,
- makeArrayRef(ResourceTypeNames));
- IDStr = IDStr.slice(0, IDStr.find_first_of(")", 0) + 1);
- } else {
- OS << ": (ID " << Entry.Identifier.ID << ")";
- }
- }
- Name = StringRef(IDStr);
- ListScope ResourceType(W, Level.str() + Name.str());
- if (Entry.Offset.isSubDir()) {
- StringRef NextLevel;
- if (Level == "Name")
- NextLevel = "Language";
- else
- NextLevel = "Name";
- auto &NextTable = unwrapOrError(RSF.getEntrySubDir(Entry));
- printResourceDirectoryTable(RSF, NextTable, NextLevel);
- } else {
- W.printHex("Time/Date Stamp", FormattedTime, Table.TimeDateStamp);
- W.printNumber("Major Version", Table.MajorVersion);
- W.printNumber("Minor Version", Table.MinorVersion);
- }
- }
-}
-
-ErrorOr<const coff_resource_dir_entry &>
-COFFDumper::getResourceDirectoryTableEntry(const coff_resource_dir_table &Table,
- uint32_t Index) {
- if (Index >= Table.NumberOfNameEntries + Table.NumberOfIDEntries)
- return object_error::parse_failed;
- auto TablePtr = reinterpret_cast<const coff_resource_dir_entry *>(&Table + 1);
- return TablePtr[Index];
-}
-
void COFFDumper::printStackMap() const {
object::SectionRef StackMapSection;
for (auto Sec : Obj->sections()) {
OpenPOWER on IntegriCloud