// 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 : /
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;
And don't crash when asked to print a non existing symtab.
RUN: llvm-nm -s %p/Inputs/archive-test.a-gnu-minimal
+
+
+Test that we at least find the symbol table on an OS X archive. Please update
+this when we are actually able to parse it.
+RUN: not llvm-nm -s %p/Inputs/MacOSX.a 2>&1 | FileCheck %s -check-prefix OSX
+
+OSX: BSD archive format is not supported