Run ILLInk on System.Private.CoreLib.dll to remove dead code. (#16876)
authorEugene Rozenfeld <erozen@microsoft.com>
Mon, 12 Mar 2018 19:39:02 +0000 (12:39 -0700)
committerGitHub <noreply@github.com>
Mon, 12 Mar 2018 19:39:02 +0000 (12:39 -0700)
commit5ca5310d7869bee6ea59494f2f89c46952aa874d
tree86d9e3828f0600fc6516db8c224c8e202db9aa5c
parentb11d2e05e425ee520f7b8fe3faf694a7fca45727
Run ILLInk on System.Private.CoreLib.dll to remove dead code. (#16876)

We already run ILLInk on corefx assemblies to remove dead code;
this change enables that for System.Private.CoreLib.dll.

The new ILLink.targets file is similar to the one in corefx.

All runtime dependencies were already computed and rooted in an xml file that
was embedded in System.Private.CoreLib.dll. This change adds ILLinkTrim.xml
with a few manual roots. They are also included in the embedded xml.

The dead code found by ILLink that could be removed from sources was already
removed in https://github.com/dotnet/coreclr/pull/16759 The remaining code removed by ILLink
falls into 4 categories:
1. Inlined constants.
2. Private default constructors when there are no other instance constructors.
3. System.Number+DoubleHelper.Sign that needs to stay in the sources for corert mirror.
4. EventListener._EventSourceCreated event methods (the even field is retained).

ILLink also clears initlocals on all methods so I removed the workaround
we had in jitinterface.cpp.
dependencies.props
src/mscorlib/CreateRuntimeRootILLinkDescriptorFile.targets
src/mscorlib/ILLink.targets [new file with mode: 0644]
src/mscorlib/ILLinkTrim.xml [new file with mode: 0644]
src/mscorlib/System.Private.CoreLib.csproj
src/vm/jitinterface.cpp