[PECOFF] Improve subsystem inference
authorRui Ueyama <ruiu@google.com>
Thu, 6 Nov 2014 23:50:48 +0000 (23:50 +0000)
committerRui Ueyama <ruiu@google.com>
Thu, 6 Nov 2014 23:50:48 +0000 (23:50 +0000)
commit2d220ab9b4fa1ed1157fc809d0c1fc1e7ae24f8c
tree426a0a26269781ae17008b45e897e0b752c083a9
parentc1eca5ad7c6a37c6b696bf129d5185e73c7a2e94
[PECOFF] Improve subsystem inference

If /subsystem option is not given, the linker needs to infer the
subsystem based on the entry point symbol. If it fails to infer
that, the linker should error out on it.

LLD was almost correct, but it would fail to infer the subsystem
if the entry point is specified with /entry. This is because the
subsystem inference was coupled with the entry point function
searching (if no entry point name is specified, the linker needs
to find the right entry name).

This patch makes the subsystem inference an independent pass to
fix the issue. Now, as long as an entry point function is defined,
LLD can infer the subsystem no matter how it resolved the entry
point.

I don't think scanning all the defined symbols is fast, although
it shouldn't be that slow. The file class there does not provide
any easy way to find an atom by name, so this is what we can do
at this moment. I'd like to revisit this later to make it more
efficient.

llvm-svn: 221499
lld/lib/ReaderWriter/PECOFF/InferSubsystemPass.h [new file with mode: 0644]
lld/lib/ReaderWriter/PECOFF/LinkerGeneratedSymbolFile.h
lld/lib/ReaderWriter/PECOFF/PECOFFLinkingContext.cpp
lld/test/pecoff/alternatename.test