[PECOFF] Improve /export compatibility.
authorRui Ueyama <ruiu@google.com>
Thu, 4 Dec 2014 06:09:39 +0000 (06:09 +0000)
committerRui Ueyama <ruiu@google.com>
Thu, 4 Dec 2014 06:09:39 +0000 (06:09 +0000)
commit0152732ef40fa1398bb57e8592e54d4e6c47352b
tree11fd48217c6a04bab0688f87d71fba545e52f569
parentc6093fea0350cdaa9f4f24f9b36d976bd93e8c15
[PECOFF] Improve /export compatibility.

Looks like the rule of /export is more complicated than
I was thinking. If /export:foo, for example, is given, and
if the actual symbol name in an object file is _foo@<number>,
we need to export that symbol as foo, not as the mangled name.

If only /export:_foo@<number> is given, the symbol is exported
as _foo@<number>.

If both /export:foo and /export:_foo@<number> are given,
they are considered as duplicates, and the linker needs to
choose the unmangled name.

The basic idea seems that the linker needs to export a symbol
with the same name as given as /export.

We exported mangled symbols. This patch fixes that issue.

llvm-svn: 223341
lld/include/lld/ReaderWriter/PECOFFLinkingContext.h
lld/lib/ReaderWriter/PECOFF/EdataPass.cpp
lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
lld/test/pecoff/export.test