* archive.cc (Archive::include_all_members) Correct to step

over symbol table and extended name table in thin archives.
This commit is contained in:
Cary Coutant
2008-05-30 21:24:43 +00:00
parent a5dabbb023
commit 3e90f13524
2 changed files with 9 additions and 1 deletions

View 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> 2008-05-29 Kris Van Hees <kris.van.hees@oracle.com>
PR 6407 PR 6407

View File

@ -386,20 +386,23 @@ Archive::include_all_members(Symbol_table* symtab, Layout* layout,
reinterpret_cast<const Archive_header*>(hdr_buf); reinterpret_cast<const Archive_header*>(hdr_buf);
std::string name; std::string name;
off_t size = this->interpret_header(hdr, off, &name, NULL); off_t size = this->interpret_header(hdr, off, &name, NULL);
bool special_member = false;
if (name.empty()) if (name.empty())
{ {
// Symbol table. // Symbol table.
special_member = true;
} }
else if (name == "/") else if (name == "/")
{ {
// Extended name table. // Extended name table.
special_member = true;
} }
else else
this->include_member(symtab, layout, input_objects, off, this->include_member(symtab, layout, input_objects, off,
mapfile, NULL, "--whole-archive"); mapfile, NULL, "--whole-archive");
off += sizeof(Archive_header); off += sizeof(Archive_header);
if (!this->is_thin_archive_) if (special_member || !this->is_thin_archive_)
off += size; off += size;
if ((off & 1) != 0) if ((off & 1) != 0)
++off; ++off;