Find the symbol table on archives created on OS X.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186041 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2013-07-10 22:07:59 +00:00
parent 6911911e61
commit a739759fca
2 changed files with 21 additions and 3 deletions

View File

@ -236,9 +236,9 @@ Archive::Archive(MemoryBuffer *source, error_code &ec)
// Second member : // (may exist, if it exists, points to the string table)
// Note : The string table is used if the filename exceeds 15 characters
// BSD archive format
// First member : __.SYMDEF (points to the symbol table)
// There is no string table, if the filename exceeds 15 characters or has a
// embedded space, the filename has #1/<size>, The size represents the size
// First member : __.SYMDEF or "__.SYMDEF SORTED" (the symbol table)
// There is no string table, if the filename exceeds 15 characters or has a
// embedded space, the filename has #1/<size>, The size represents the size
// of the filename that needs to be read after the archive header
// COFF archive format
// First member : /
@ -256,6 +256,17 @@ Archive::Archive(MemoryBuffer *source, error_code &ec)
return;
}
if (Name.startswith("#1/")) {
Format = K_BSD;
// We know this is BSD, so getName will work since there is no string table.
ec = i->getName(Name);
if (ec)
return;
if (Name == StringRef("__.SYMDEF SORTED\0\0\0", 20))
SymbolTable = i;
return;
}
if (Name == "/") {
SymbolTable = i;