Skip to content

Commit 7ba81d9

Browse files
committed
[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
1 parent edb6ab9 commit 7ba81d9

File tree

6 files changed

+197
-0
lines changed

6 files changed

+197
-0
lines changed

llvm/include/llvm/Object/COFF.h

+4
Original file line numberDiff line numberDiff line change
@@ -1208,6 +1208,8 @@ class ResourceSectionRef {
12081208
getEntryNameString(const coff_resource_dir_entry &Entry);
12091209
Expected<const coff_resource_dir_table &>
12101210
getEntrySubDir(const coff_resource_dir_entry &Entry);
1211+
Expected<const coff_resource_data_entry &>
1212+
getEntryData(const coff_resource_dir_entry &Entry);
12111213
Expected<const coff_resource_dir_table &> getBaseTable();
12121214
Expected<const coff_resource_dir_entry &>
12131215
getTableEntry(const coff_resource_dir_table &Table, uint32_t Index);
@@ -1218,6 +1220,8 @@ class ResourceSectionRef {
12181220
Expected<const coff_resource_dir_table &> getTableAtOffset(uint32_t Offset);
12191221
Expected<const coff_resource_dir_entry &>
12201222
getTableEntryAtOffset(uint32_t Offset);
1223+
Expected<const coff_resource_data_entry &>
1224+
getDataEntryAtOffset(uint32_t Offset);
12211225
Expected<ArrayRef<UTF16>> getDirStringAtOffset(uint32_t Offset);
12221226
};
12231227

llvm/lib/Object/COFFObjectFile.cpp

+18
Original file line numberDiff line numberDiff line change
@@ -1707,11 +1707,29 @@ ResourceSectionRef::getTableEntryAtOffset(uint32_t Offset) {
17071707
return *Entry;
17081708
}
17091709

1710+
Expected<const coff_resource_data_entry &>
1711+
ResourceSectionRef::getDataEntryAtOffset(uint32_t Offset) {
1712+
const coff_resource_data_entry *Entry = nullptr;
1713+
1714+
BinaryStreamReader Reader(BBS);
1715+
Reader.setOffset(Offset);
1716+
RETURN_IF_ERROR(Reader.readObject(Entry));
1717+
assert(Entry != nullptr);
1718+
return *Entry;
1719+
}
1720+
17101721
Expected<const coff_resource_dir_table &>
17111722
ResourceSectionRef::getEntrySubDir(const coff_resource_dir_entry &Entry) {
1723+
assert(Entry.Offset.isSubDir());
17121724
return getTableAtOffset(Entry.Offset.value());
17131725
}
17141726

1727+
Expected<const coff_resource_data_entry &>
1728+
ResourceSectionRef::getEntryData(const coff_resource_dir_entry &Entry) {
1729+
assert(!Entry.Offset.isSubDir());
1730+
return getDataEntryAtOffset(Entry.Offset.value());
1731+
}
1732+
17151733
Expected<const coff_resource_dir_table &> ResourceSectionRef::getBaseTable() {
17161734
return getTableAtOffset(0);
17171735
}

llvm/test/tools/llvm-cvtres/combined.test

+72
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
2929
CHECK-NEXT: Major Version: 0
3030
CHECK-NEXT: Minor Version: 0
3131
CHECK-NEXT: Characteristics: 0
32+
CHECK-NEXT: Data [
33+
CHECK-NEXT: DataRVA: 0x0
34+
CHECK-NEXT: DataSize: 57
35+
CHECK-NEXT: Codepage: 0
36+
CHECK-NEXT: Reserved: 0
37+
CHECK-NEXT: ]
3238
CHECK-NEXT: ]
3339
CHECK-NEXT: ]
3440
CHECK-NEXT: ]
@@ -46,6 +52,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
4652
CHECK-NEXT: Major Version: 0
4753
CHECK-NEXT: Minor Version: 0
4854
CHECK-NEXT: Characteristics: 0
55+
CHECK-NEXT: Data [
56+
CHECK-NEXT: DataRVA: 0x0
57+
CHECK-NEXT: DataSize: 808
58+
CHECK-NEXT: Codepage: 0
59+
CHECK-NEXT: Reserved: 0
60+
CHECK-NEXT: ]
4961
CHECK-NEXT: ]
5062
CHECK-NEXT: ]
5163
CHECK-NEXT: Name: OKAY [
@@ -58,6 +70,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
5870
CHECK-NEXT: Major Version: 0
5971
CHECK-NEXT: Minor Version: 0
6072
CHECK-NEXT: Characteristics: 0
73+
CHECK-NEXT: Data [
74+
CHECK-NEXT: DataRVA: 0x0
75+
CHECK-NEXT: DataSize: 808
76+
CHECK-NEXT: Codepage: 0
77+
CHECK-NEXT: Reserved: 0
78+
CHECK-NEXT: ]
6179
CHECK-NEXT: ]
6280
CHECK-NEXT: ]
6381
CHECK-NEXT: ]
@@ -75,6 +93,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
7593
CHECK-NEXT: Major Version: 0
7694
CHECK-NEXT: Minor Version: 0
7795
CHECK-NEXT: Characteristics: 0
96+
CHECK-NEXT: Data [
97+
CHECK-NEXT: DataRVA: 0x0
98+
CHECK-NEXT: DataSize: 48
99+
CHECK-NEXT: Codepage: 0
100+
CHECK-NEXT: Reserved: 0
101+
CHECK-NEXT: ]
78102
CHECK-NEXT: ]
79103
CHECK-NEXT: ]
80104
CHECK-NEXT: Name: (ID 14432) [
@@ -87,6 +111,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
87111
CHECK-NEXT: Major Version: 0
88112
CHECK-NEXT: Minor Version: 0
89113
CHECK-NEXT: Characteristics: 0
114+
CHECK-NEXT: Data [
115+
CHECK-NEXT: DataRVA: 0x0
116+
CHECK-NEXT: DataSize: 46
117+
CHECK-NEXT: Codepage: 0
118+
CHECK-NEXT: Reserved: 0
119+
CHECK-NEXT: ]
90120
CHECK-NEXT: ]
91121
CHECK-NEXT: ]
92122
CHECK-NEXT: ]
@@ -104,6 +134,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
104134
CHECK-NEXT: Major Version: 0
105135
CHECK-NEXT: Minor Version: 0
106136
CHECK-NEXT: Characteristics: 0
137+
CHECK-NEXT: Data [
138+
CHECK-NEXT: DataRVA: 0x0
139+
CHECK-NEXT: DataSize: 108
140+
CHECK-NEXT: Codepage: 0
141+
CHECK-NEXT: Reserved: 0
142+
CHECK-NEXT: ]
107143
CHECK-NEXT: ]
108144
CHECK-NEXT: ]
109145
CHECK-NEXT: ]
@@ -121,13 +157,25 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
121157
CHECK-NEXT: Major Version: 0
122158
CHECK-NEXT: Minor Version: 0
123159
CHECK-NEXT: Characteristics: 0
160+
CHECK-NEXT: Data [
161+
CHECK-NEXT: DataRVA: 0x0
162+
CHECK-NEXT: DataSize: 24
163+
CHECK-NEXT: Codepage: 0
164+
CHECK-NEXT: Reserved: 0
165+
CHECK-NEXT: ]
124166
CHECK-NEXT: ]
125167
CHECK-NEXT: Language: (ID 2052) [
126168
CHECK-NEXT: Entry Offset: 0x248
127169
CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
128170
CHECK-NEXT: Major Version: 0
129171
CHECK-NEXT: Minor Version: 0
130172
CHECK-NEXT: Characteristics: 0
173+
CHECK-NEXT: Data [
174+
CHECK-NEXT: DataRVA: 0x0
175+
CHECK-NEXT: DataSize: 24
176+
CHECK-NEXT: Codepage: 0
177+
CHECK-NEXT: Reserved: 0
178+
CHECK-NEXT: ]
131179
CHECK-NEXT: ]
132180
CHECK-NEXT: ]
133181
CHECK-NEXT: Name: (ID 12) [
@@ -140,6 +188,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
140188
CHECK-NEXT: Major Version: 0
141189
CHECK-NEXT: Minor Version: 0
142190
CHECK-NEXT: Characteristics: 0
191+
CHECK-NEXT: Data [
192+
CHECK-NEXT: DataRVA: 0x0
193+
CHECK-NEXT: DataSize: 24
194+
CHECK-NEXT: Codepage: 0
195+
CHECK-NEXT: Reserved: 0
196+
CHECK-NEXT: ]
143197
CHECK-NEXT: ]
144198
CHECK-NEXT: ]
145199
CHECK-NEXT: ]
@@ -157,20 +211,38 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
157211
CHECK-NEXT: Major Version: 0
158212
CHECK-NEXT: Minor Version: 0
159213
CHECK-NEXT: Characteristics: 0
214+
CHECK-NEXT: Data [
215+
CHECK-NEXT: DataRVA: 0x0
216+
CHECK-NEXT: DataSize: 54
217+
CHECK-NEXT: Codepage: 0
218+
CHECK-NEXT: Reserved: 0
219+
CHECK-NEXT: ]
160220
CHECK-NEXT: ]
161221
CHECK-NEXT: Language: (ID 2052) [
162222
CHECK-NEXT: Entry Offset: 0x278
163223
CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
164224
CHECK-NEXT: Major Version: 0
165225
CHECK-NEXT: Minor Version: 0
166226
CHECK-NEXT: Characteristics: 0
227+
CHECK-NEXT: Data [
228+
CHECK-NEXT: DataRVA: 0x0
229+
CHECK-NEXT: DataSize: 67
230+
CHECK-NEXT: Codepage: 0
231+
CHECK-NEXT: Reserved: 0
232+
CHECK-NEXT: ]
167233
CHECK-NEXT: ]
168234
CHECK-NEXT: Language: (ID 4103) [
169235
CHECK-NEXT: Entry Offset: 0x288
170236
CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
171237
CHECK-NEXT: Major Version: 0
172238
CHECK-NEXT: Minor Version: 0
173239
CHECK-NEXT: Characteristics: 0
240+
CHECK-NEXT: Data [
241+
CHECK-NEXT: DataRVA: 0x0
242+
CHECK-NEXT: DataSize: 66
243+
CHECK-NEXT: Codepage: 0
244+
CHECK-NEXT: Reserved: 0
245+
CHECK-NEXT: ]
174246
CHECK-NEXT: ]
175247
CHECK-NEXT: ]
176248
CHECK-NEXT: ]

llvm/test/tools/llvm-cvtres/object.test

+48
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
2828
CHECK-NEXT: Major Version: 0
2929
CHECK-NEXT: Minor Version: 0
3030
CHECK-NEXT: Characteristics: 0
31+
CHECK-NEXT: Data [
32+
CHECK-NEXT: DataRVA: 0x0
33+
CHECK-NEXT: DataSize: 57
34+
CHECK-NEXT: Codepage: 0
35+
CHECK-NEXT: Reserved: 0
36+
CHECK-NEXT: ]
3137
CHECK-NEXT: ]
3238
CHECK-NEXT: ]
3339
CHECK-NEXT: ]
@@ -45,6 +51,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
4551
CHECK-NEXT: Major Version: 0
4652
CHECK-NEXT: Minor Version: 0
4753
CHECK-NEXT: Characteristics: 0
54+
CHECK-NEXT: Data [
55+
CHECK-NEXT: DataRVA: 0x0
56+
CHECK-NEXT: DataSize: 808
57+
CHECK-NEXT: Codepage: 0
58+
CHECK-NEXT: Reserved: 0
59+
CHECK-NEXT: ]
4860
CHECK-NEXT: ]
4961
CHECK-NEXT: ]
5062
CHECK-NEXT: Name: OKAY [
@@ -57,6 +69,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
5769
CHECK-NEXT: Major Version: 0
5870
CHECK-NEXT: Minor Version: 0
5971
CHECK-NEXT: Characteristics: 0
72+
CHECK-NEXT: Data [
73+
CHECK-NEXT: DataRVA: 0x0
74+
CHECK-NEXT: DataSize: 808
75+
CHECK-NEXT: Codepage: 0
76+
CHECK-NEXT: Reserved: 0
77+
CHECK-NEXT: ]
6078
CHECK-NEXT: ]
6179
CHECK-NEXT: ]
6280
CHECK-NEXT: ]
@@ -74,6 +92,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
7492
CHECK-NEXT: Major Version: 0
7593
CHECK-NEXT: Minor Version: 0
7694
CHECK-NEXT: Characteristics: 0
95+
CHECK-NEXT: Data [
96+
CHECK-NEXT: DataRVA: 0x0
97+
CHECK-NEXT: DataSize: 48
98+
CHECK-NEXT: Codepage: 0
99+
CHECK-NEXT: Reserved: 0
100+
CHECK-NEXT: ]
77101
CHECK-NEXT: ]
78102
CHECK-NEXT: ]
79103
CHECK-NEXT: Name: (ID 14432) [
@@ -86,6 +110,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
86110
CHECK-NEXT: Major Version: 0
87111
CHECK-NEXT: Minor Version: 0
88112
CHECK-NEXT: Characteristics: 0
113+
CHECK-NEXT: Data [
114+
CHECK-NEXT: DataRVA: 0x0
115+
CHECK-NEXT: DataSize: 46
116+
CHECK-NEXT: Codepage: 0
117+
CHECK-NEXT: Reserved: 0
118+
CHECK-NEXT: ]
89119
CHECK-NEXT: ]
90120
CHECK-NEXT: ]
91121
CHECK-NEXT: ]
@@ -103,6 +133,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
103133
CHECK-NEXT: Major Version: 0
104134
CHECK-NEXT: Minor Version: 0
105135
CHECK-NEXT: Characteristics: 0
136+
CHECK-NEXT: Data [
137+
CHECK-NEXT: DataRVA: 0x0
138+
CHECK-NEXT: DataSize: 108
139+
CHECK-NEXT: Codepage: 0
140+
CHECK-NEXT: Reserved: 0
141+
CHECK-NEXT: ]
106142
CHECK-NEXT: ]
107143
CHECK-NEXT: ]
108144
CHECK-NEXT: ]
@@ -120,6 +156,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
120156
CHECK-NEXT: Major Version: 0
121157
CHECK-NEXT: Minor Version: 0
122158
CHECK-NEXT: Characteristics: 0
159+
CHECK-NEXT: Data [
160+
CHECK-NEXT: DataRVA: 0x0
161+
CHECK-NEXT: DataSize: 24
162+
CHECK-NEXT: Codepage: 0
163+
CHECK-NEXT: Reserved: 0
164+
CHECK-NEXT: ]
123165
CHECK-NEXT: ]
124166
CHECK-NEXT: ]
125167
CHECK-NEXT: Name: (ID 12) [
@@ -132,6 +174,12 @@ CHECK-NEXT: Time/Date Stamp: 1970-01-01 00:00:00 (0x0)
132174
CHECK-NEXT: Major Version: 0
133175
CHECK-NEXT: Minor Version: 0
134176
CHECK-NEXT: Characteristics: 0
177+
CHECK-NEXT: Data [
178+
CHECK-NEXT: DataRVA: 0x0
179+
CHECK-NEXT: DataSize: 24
180+
CHECK-NEXT: Codepage: 0
181+
CHECK-NEXT: Reserved: 0
182+
CHECK-NEXT: ]
135183
CHECK-NEXT: ]
136184
CHECK-NEXT: ]
137185
CHECK-NEXT: ]

0 commit comments

Comments
 (0)