@@ -233,19 +233,20 @@ static void readImportFile(StringRef filename) {
233
233
234
234
// Returns slices of MB by parsing MB as an archive file.
235
235
// Each slice consists of a member file in the archive.
236
- std::vector<MemoryBufferRef> static getArchiveMembers (MemoryBufferRef mb) {
236
+ std::vector<std::pair<MemoryBufferRef, uint64_t >> static getArchiveMembers (
237
+ MemoryBufferRef mb) {
237
238
std::unique_ptr<Archive> file =
238
239
CHECK (Archive::create (mb),
239
240
mb.getBufferIdentifier () + " : failed to parse archive" );
240
241
241
- std::vector<MemoryBufferRef> v;
242
+ std::vector<std::pair< MemoryBufferRef, uint64_t > > v;
242
243
Error err = Error::success ();
243
244
for (const Archive::Child &c : file->children (err)) {
244
245
MemoryBufferRef mbref =
245
246
CHECK (c.getMemoryBufferRef (),
246
247
mb.getBufferIdentifier () +
247
248
" : could not get the buffer for a child of the archive" );
248
- v.push_back (mbref);
249
+ v.push_back (std::make_pair ( mbref, c. getChildOffset ()) );
249
250
}
250
251
if (err)
251
252
fatal (mb.getBufferIdentifier () +
@@ -273,8 +274,8 @@ void LinkerDriver::addFile(StringRef path) {
273
274
274
275
// Handle -whole-archive.
275
276
if (inWholeArchive) {
276
- for (MemoryBufferRef &m : getArchiveMembers (mbref)) {
277
- auto *object = createObjectFile (m, path);
277
+ for (const auto &[m, offset] : getArchiveMembers (mbref)) {
278
+ auto *object = createObjectFile (m, path, offset );
278
279
// Mark object as live; object members are normally not
279
280
// live by default but -whole-archive is designed to treat
280
281
// them as such.
0 commit comments