1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

[Object/COFF] Fix Windows .lib name handling.

llvm-svn: 183091
This commit is contained in:
Rui Ueyama 2013-06-03 00:27:03 +00:00
parent b47bd839e0
commit ab6877d693
4 changed files with 36 additions and 4 deletions

View File

@ -132,8 +132,11 @@ Archive::Archive(MemoryBuffer *source, error_code &ec)
// COFF archive format
// First member : /
// Second member : / (provides a directory of symbols)
// Third member : // contains the string table, this is present even if the
// string table is empty
// Third member : // (may exist, if it exists, contains the string table)
// Note: Microsoft PE/COFF Spec 8.3 says that the third member is present
// even if the string table is empty. However, lib.exe does not in fact
// seem to create the third member if there's no member whose filename
// exceeds 15 characters. So the third member is optional.
if (name == "/") {
SymbolTable = i;
StringTable = e;
@ -150,14 +153,17 @@ Archive::Archive(MemoryBuffer *source, error_code &ec)
Format = K_GNU;
StringTable = i;
++i;
} else {
} else {
Format = K_COFF;
if (i != e) {
SymbolTable = i;
++i;
}
if (i != e) {
StringTable = i;
if ((ec = i->getName(name)))
return;
if (name == "//")
StringTable = i;
}
}
} else if (name == "__.SYMDEF") {

0
test/Object/Inputs/coff_archive.lib Executable file → Normal file
View File

Binary file not shown.

View File

@ -0,0 +1,26 @@
#
# Check if the index is appearing properly in the output file
#
# coff_archive_short.lib does not have member whose name is longer
# than 15 characters, thus, unlike coff_archive.lib, it has no string
# table as the third member.
#
RUN: llvm-nm --numeric-sort -s %p/Inputs/coff_archive_short.lib | FileCheck -check-prefix=CHECKIDX %s
CHECKIDX: Archive map
CHECKIDX: _shortfn1 in short1.obj
CHECKIDX: _shortfn2 in short2.obj
CHECKIDX: short1.obj:
CHECKIDX: 00000000 N .debug$S
CHECKIDX: 00000000 i .drectve
CHECKIDX: 00000000 t .text
CHECKIDX: 00000000 T _shortfn1
CHECKIDX: 00000001 a @feat.00
CHECKIDX: 00aa9d1b a @comp.id
CHECKIDX: short2.obj:
CHECKIDX: 00000000 N .debug$S
CHECKIDX: 00000000 i .drectve
CHECKIDX: 00000000 t .text
CHECKIDX: 00000000 T _shortfn2
CHECKIDX: 00000001 a @feat.00
CHECKIDX: 00aa9d1b a @comp.id