@@ -233,19 +233,20 @@ static void readImportFile(StringRef filename) {
233233
234234// Returns slices of MB by parsing MB as an archive file.
235235// 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) {
237238 std::unique_ptr<Archive> file =
238239 CHECK (Archive::create (mb),
239240 mb.getBufferIdentifier () + " : failed to parse archive" );
240241
241- std::vector<MemoryBufferRef> v;
242+ std::vector<std::pair< MemoryBufferRef, uint64_t > > v;
242243 Error err = Error::success ();
243244 for (const Archive::Child &c : file->children (err)) {
244245 MemoryBufferRef mbref =
245246 CHECK (c.getMemoryBufferRef (),
246247 mb.getBufferIdentifier () +
247248 " : 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 ()) );
249250 }
250251 if (err)
251252 fatal (mb.getBufferIdentifier () +
@@ -273,8 +274,8 @@ void LinkerDriver::addFile(StringRef path) {
273274
274275 // Handle -whole-archive.
275276 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 );
278279 // Mark object as live; object members are normally not
279280 // live by default but -whole-archive is designed to treat
280281 // them as such.
0 commit comments