* archive.cc (Archive::include_all_members) Correct to step
authorCary Coutant <ccoutant@google.com>
Fri, 30 May 2008 21:24:43 +0000 (21:24 +0000)
committerCary Coutant <ccoutant@google.com>
Fri, 30 May 2008 21:24:43 +0000 (21:24 +0000)
over symbol table and extended name table in thin archives.

gold/ChangeLog
gold/archive.cc

index 0fb667d..74eb045 100644 (file)
@@ -1,3 +1,8 @@
+2008-05-30  Cary Coutant  <ccoutant@google.com>
+
+       * archive.cc (Archive::include_all_members) Correct to step
+       over symbol table and extended name table in thin archives.
+
 2008-05-29  Kris Van Hees  <kris.van.hees@oracle.com>
 
        PR 6407
index 0ff8aee..737f3e2 100644 (file)
@@ -386,20 +386,23 @@ Archive::include_all_members(Symbol_table* symtab, Layout* layout,
        reinterpret_cast<const Archive_header*>(hdr_buf);
       std::string name;
       off_t size = this->interpret_header(hdr, off, &name, NULL);
+      bool special_member = false;
       if (name.empty())
         {
           // Symbol table.
+          special_member = true;
         }
       else if (name == "/")
         {
           // Extended name table.
+          special_member = true;
         }
       else
         this->include_member(symtab, layout, input_objects, off,
                             mapfile, NULL, "--whole-archive");
 
       off += sizeof(Archive_header);
-      if (!this->is_thin_archive_)
+      if (special_member || !this->is_thin_archive_)
         off += size;
       if ((off & 1) != 0)
         ++off;