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:
parent
b47bd839e0
commit
ab6877d693
@ -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
0
test/Object/Inputs/coff_archive.lib
Executable file → Normal file
BIN
test/Object/Inputs/coff_archive_short.lib
Normal file
BIN
test/Object/Inputs/coff_archive_short.lib
Normal file
Binary file not shown.
26
test/Object/coff-archive-short.test
Normal file
26
test/Object/coff-archive-short.test
Normal 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
|
Loading…
Reference in New Issue
Block a user