[llvm] r302397 - Revert "Hopefully one last commit to fix this patch, addresses string reference"
Eric Beckmann via llvm-commits
llvm-commits at lists.llvm.org
Sun May 7 19:25:03 PDT 2017
Author: ecbeckmann
Date: Sun May 7 21:25:03 2017
New Revision: 302397
URL: http://llvm.org/viewvc/llvm-project?rev=302397&view=rev
Log:
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
Removed:
llvm/trunk/test/tools/llvm-readobj/Inputs/resources/cursor_small.bmp
llvm/trunk/test/tools/llvm-readobj/Inputs/resources/okay_small.bmp
llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.obj.coff
llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.rc
llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.res
Modified:
llvm/trunk/include/llvm/Object/COFF.h
llvm/trunk/include/llvm/Support/COFF.h
llvm/trunk/lib/Object/COFFObjectFile.cpp
llvm/trunk/test/tools/llvm-readobj/resources.test
llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
Modified: llvm/trunk/include/llvm/Object/COFF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFF.h?rev=302397&r1=302396&r2=302397&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/COFF.h (original)
+++ llvm/trunk/include/llvm/Object/COFF.h Sun May 7 21:25:03 2017
@@ -20,9 +20,7 @@
#include "llvm/Object/Binary.h"
#include "llvm/Object/Error.h"
#include "llvm/Object/ObjectFile.h"
-#include "llvm/Support/BinaryByteStream.h"
#include "llvm/Support/COFF.h"
-#include "llvm/Support/ConvertUTF.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ErrorOr.h"
@@ -42,7 +40,6 @@ class DelayImportDirectoryEntryRef;
class ExportDirectoryEntryRef;
class ImportDirectoryEntryRef;
class ImportedSymbolRef;
-class ResourceSectionRef;
using import_directory_iterator = content_iterator<ImportDirectoryEntryRef>;
using delay_import_directory_iterator =
@@ -626,26 +623,6 @@ struct coff_base_reloc_block_entry {
int getOffset() const { return Data & ((1 << 12) - 1); }
};
-struct coff_resource_dir_entry {
- union {
- support::ulittle32_t NameOffset;
- support::ulittle32_t ID;
- uint32_t getNameOffset() const {
- return maskTrailingOnes<uint32_t>(31) & NameOffset;
- }
- } Identifier;
- union {
- support::ulittle32_t DataEntryOffset;
- support::ulittle32_t SubdirOffset;
-
- bool isSubDir() const { return SubdirOffset >> 31; }
- uint32_t value() const {
- return maskTrailingOnes<uint32_t>(31) & SubdirOffset;
- }
-
- } Offset;
-};
-
struct coff_resource_dir_table {
support::ulittle32_t Characteristics;
support::ulittle32_t TimeDateStamp;
@@ -1070,23 +1047,6 @@ private:
const COFFObjectFile *OwningObject = nullptr;
};
-class ResourceSectionRef {
-public:
- ResourceSectionRef() = default;
- explicit ResourceSectionRef(StringRef Ref) : BBS(Ref, support::little) {}
-
- ErrorOr<ArrayRef<UTF16>> getEntryNameString(const coff_resource_dir_entry &Entry);
- ErrorOr<const coff_resource_dir_table &>
- getEntrySubDir(const coff_resource_dir_entry &Entry);
- ErrorOr<const coff_resource_dir_table &> getBaseTable();
-
-private:
- BinaryByteStream BBS;
-
- ErrorOr<const coff_resource_dir_table &> getTableAtOffset(uint32_t Offset);
- ErrorOr<ArrayRef<UTF16>> getDirStringAtOffset(uint32_t Offset);
-};
-
// Corresponds to `_FPO_DATA` structure in the PE/COFF spec.
struct FpoData {
support::ulittle32_t Offset; // ulOffStart: Offset 1st byte of function code
Modified: llvm/trunk/include/llvm/Support/COFF.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/COFF.h?rev=302397&r1=302396&r2=302397&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Support/COFF.h (original)
+++ llvm/trunk/include/llvm/Support/COFF.h Sun May 7 21:25:03 2017
@@ -152,30 +152,6 @@ namespace COFF {
IMAGE_FILE_BYTES_REVERSED_HI = 0x8000
};
- enum ResourceTypeID {
- RID_Cursor = 1,
- RID_Bitmap = 2,
- RID_Icon = 3,
- RID_Menu = 4,
- RID_Dialog = 5,
- RID_String = 6,
- RID_FontDir = 7,
- RID_Font = 8,
- RID_Accelerator = 9,
- RID_RCData = 10,
- RID_MessageTable = 11,
- RID_Group_Cursor = 12,
- RID_Group_Icon = 14,
- RID_Version = 16,
- RID_DLGInclude = 17,
- RID_PlugPlay = 19,
- RID_VXD = 20,
- RID_AniCursor = 21,
- RID_AniIcon = 22,
- RID_HTML = 23,
- RID_Manifest = 24,
- };
-
struct symbol {
char Name[NameSize];
uint32_t Value;
Modified: llvm/trunk/lib/Object/COFFObjectFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFObjectFile.cpp?rev=302397&r1=302396&r2=302397&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFObjectFile.cpp (original)
+++ llvm/trunk/lib/Object/COFFObjectFile.cpp Sun May 7 21:25:03 2017
@@ -19,7 +19,6 @@
#include "llvm/Object/COFF.h"
#include "llvm/Object/Error.h"
#include "llvm/Object/ObjectFile.h"
-#include "llvm/Support/BinaryStreamReader.h"
#include "llvm/Support/COFF.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/Error.h"
@@ -160,7 +159,8 @@ void COFFObjectFile::moveSymbolNext(Data
Expected<StringRef> COFFObjectFile::getSymbolName(DataRefImpl Ref) const {
COFFSymbolRef Symb = getCOFFSymbol(Ref);
StringRef Result;
- if (std::error_code EC = getSymbolName(Symb, Result))
+ std::error_code EC = getSymbolName(Symb, Result);
+ if (EC)
return errorCodeToError(EC);
return Result;
}
@@ -1591,44 +1591,3 @@ std::error_code BaseRelocRef::getRVA(uin
Result = Header->PageRVA + Entry[Index].getOffset();
return std::error_code();
}
-
-#define RETURN_IF_ERROR(X) \
- if (auto EC = errorToErrorCode(X)) \
- return EC;
-
-ErrorOr<ArrayRef<UTF16>> ResourceSectionRef::getDirStringAtOffset(uint32_t Offset) {
- BinaryStreamReader Reader = BinaryStreamReader(BBS);
- Reader.setOffset(Offset);
- uint16_t Length;
- RETURN_IF_ERROR(Reader.readInteger(Length));
- ArrayRef<UTF16> RawDirString;
- // Strings are stored as 2-byte aligned unicode characters but readFixedString
- // assumes byte string, so we double length.
- RETURN_IF_ERROR(Reader.readArray(RawDirString, Length));
- return RawDirString;
-}
-
-ErrorOr<ArrayRef<UTF16>>
-ResourceSectionRef::getEntryNameString(const coff_resource_dir_entry &Entry) {
- return getDirStringAtOffset(Entry.Identifier.getNameOffset());
-}
-
-ErrorOr<const coff_resource_dir_table &>
-ResourceSectionRef::getTableAtOffset(uint32_t Offset) {
- const coff_resource_dir_table *Table = nullptr;
-
- BinaryStreamReader Reader(BBS);
- Reader.setOffset(Offset);
- RETURN_IF_ERROR(Reader.readObject(Table));
- assert(Table != nullptr);
- return *Table;
-}
-
-ErrorOr<const coff_resource_dir_table &>
-ResourceSectionRef::getEntrySubDir(const coff_resource_dir_entry &Entry) {
- return getTableAtOffset(Entry.Offset.value());
-}
-
-ErrorOr<const coff_resource_dir_table &> ResourceSectionRef::getBaseTable() {
- return getTableAtOffset(0);
-}
Removed: llvm/trunk/test/tools/llvm-readobj/Inputs/resources/cursor_small.bmp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/resources/cursor_small.bmp?rev=302396&view=auto
==============================================================================
Binary file - no diff available.
Removed: llvm/trunk/test/tools/llvm-readobj/Inputs/resources/okay_small.bmp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/resources/okay_small.bmp?rev=302396&view=auto
==============================================================================
Binary file - no diff available.
Removed: llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.obj.coff
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.obj.coff?rev=302396&view=auto
==============================================================================
Binary file - no diff available.
Removed: llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.rc
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.rc?rev=302396&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.rc (original)
+++ llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.rc (removed)
@@ -1,44 +0,0 @@
-#include "windows.h"
-
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-
-myaccelerators ACCELERATORS
-{
- "^C", 999, VIRTKEY, ALT
- "D", 1100, VIRTKEY, CONTROL, SHIFT
- "^R", 444, ASCII, NOINVERT
-}
-
-cursor BITMAP "cursor_small.bmp"
-okay BITMAP "okay_small.bmp"
-
-14432 MENU
-LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
-{
- MENUITEM "yu", 100
- MENUITEM "shala", 101
- MENUITEM "kaoya", 102
-}
-
-testdialog DIALOG 10, 10, 200, 300
-STYLE WS_POPUP | WS_BORDER
-CAPTION "Test"
-{
- CTEXT "Continue:", 1, 10, 10, 230, 14
- PUSHBUTTON "&OK", 2, 66, 134, 161, 13
-}
-
-12 ACCELERATORS
-{
- "X", 164, VIRTKEY, ALT
- "H", 5678, VIRTKEY, CONTROL, SHIFT
- "^R", 444, ASCII, NOINVERT
-}
-
-"eat" MENU
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_AUS
-{
- MENUITEM "fish", 100
- MENUITEM "salad", 101
- MENUITEM "duck", 102
-}
Removed: llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.res
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/Inputs/resources/test_resource.res?rev=302396&view=auto
==============================================================================
Binary file - no diff available.
Modified: llvm/trunk/test/tools/llvm-readobj/resources.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-readobj/resources.test?rev=302397&r1=302396&r2=302397&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-readobj/resources.test (original)
+++ llvm/trunk/test/tools/llvm-readobj/resources.test Sun May 7 21:25:03 2017
@@ -1,111 +1,19 @@
-// Check dumping of the .rsrc section(s)
-// The input was generated with the following commands, using the original Windows
-// rc.exe and cvtres.exe:
-// > rc /fo test_resource.res /nologo test_resource.rc
-// > cvtres /machine:X86 /readonly /nologo /out:test_resource.o test_resource.res
+RUN: llvm-readobj -coff-resources %p/Inputs/zero-string-table.obj.coff-i386 \
+RUN: | FileCheck %s -check-prefix RESOURCE
-RUN: llvm-readobj -coff-resources -section-data %p/Inputs/zero-string-table.obj.coff-i386 \
-RUN: | FileCheck %s -check-prefix ZERO
-RUN: llvm-readobj -coff-resources %p/Inputs/resources/test_resource.obj.coff \
-RUN: | FileCheck %s -check-prefix TEST_RES
-
-ZERO: Resources [
-ZERO-NEXT: String Name Entries: 0
-ZERO-NEXT: ID Entries: 1
-ZERO-NEXT: Type: kRT_STRING (ID 6) [
-ZERO-NEXT: String Name Entries: 0
-ZERO-NEXT: ID Entries: 1
-ZERO-NEXT: Name: (ID 1) [
-ZERO-NEXT: String Name Entries: 0
-ZERO-NEXT: ID Entries: 1
-ZERO-NEXT: Language: (ID 1033) [
-ZERO-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-ZERO-NEXT: Major Version: 0
-ZERO-NEXT: Minor Version: 0
-ZERO-NEXT: ]
-ZERO-NEXT: ]
-ZERO-NEXT: ]
-
-
-TEST_RES: Resources [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 4
-TEST_RES-NEXT: Type: kRT_BITMAP (ID 2) [
-TEST_RES-NEXT: String Name Entries: 2
-TEST_RES-NEXT: ID Entries: 0
-TEST_RES-NEXT: Name: CURSOR [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Language: (ID 1033) [
-TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-TEST_RES-NEXT: Major Version: 0
-TEST_RES-NEXT: Minor Version: 0
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: Name: OKAY [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Language: (ID 1033) [
-TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-TEST_RES-NEXT: Major Version: 0
-TEST_RES-NEXT: Minor Version: 0
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: Type: kRT_MENU (ID 4) [
-TEST_RES-NEXT: String Name Entries: 1
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Name: "EAT" [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Language: (ID 3081) [
-TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-TEST_RES-NEXT: Major Version: 0
-TEST_RES-NEXT: Minor Version: 0
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: Name: (ID 14432) [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Language: (ID 2052) [
-TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-TEST_RES-NEXT: Major Version: 0
-TEST_RES-NEXT: Minor Version: 0
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: Type: kRT_DIALOG (ID 5) [
-TEST_RES-NEXT: String Name Entries: 1
-TEST_RES-NEXT: ID Entries: 0
-TEST_RES-NEXT: Name: TESTDIALOG [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Language: (ID 1033) [
-TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-TEST_RES-NEXT: Major Version: 0
-TEST_RES-NEXT: Minor Version: 0
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: Type: kRT_ACCELERATOR (ID 9) [
-TEST_RES-NEXT: String Name Entries: 1
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Name: MYACCELERATORS [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Language: (ID 1033) [
-TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-TEST_RES-NEXT: Major Version: 0
-TEST_RES-NEXT: Minor Version: 0
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: Name: (ID 12) [
-TEST_RES-NEXT: String Name Entries: 0
-TEST_RES-NEXT: ID Entries: 1
-TEST_RES-NEXT: Language: (ID 1033) [
-TEST_RES-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
-TEST_RES-NEXT: Major Version: 0
-TEST_RES-NEXT: Minor Version: 0
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
-TEST_RES-NEXT: ]
+RESOURCE: Resources [
+RESOURCE-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
+RESOURCE-NEXT: .rsrc$01 Data (
+RESOURCE-NEXT: 0000: 00000000 00000000 00000000 00000100 |................|
+RESOURCE-NEXT: 0010: 06000000 18000080 00000000 00000000 |................|
+RESOURCE-NEXT: 0020: 00000000 00000100 01000000 30000080 |............0...|
+RESOURCE-NEXT: 0030: 00000000 00000000 00000000 00000100 |................|
+RESOURCE-NEXT: 0040: 09040000 48000000 00000000 2A000000 |....H.......*...|
+RESOURCE-NEXT: 0050: 00000000 00000000 |........|
+RESOURCE-NEXT: )
+RESOURCE-NEXT: .rsrc$02 Data (
+RESOURCE-NEXT: 0000: 00000500 48006500 6C006C00 6F000000 |....H.e.l.l.o...|
+RESOURCE-NEXT: 0010: 00000000 00000000 00000000 00000000 |................|
+RESOURCE-NEXT: 0020: 00000000 00000000 00000000 00000000 |................|
+RESOURCE-NEXT: )
+RESOURCE-NEXT: ]
Modified: llvm/trunk/tools/llvm-readobj/COFFDumper.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/COFFDumper.cpp?rev=302397&r1=302396&r2=302397&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-readobj/COFFDumper.cpp (original)
+++ llvm/trunk/tools/llvm-readobj/COFFDumper.cpp Sun May 7 21:25:03 2017
@@ -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> FileChec
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()) {
More information about the llvm-commits
mailing list