diff options
author | Simon Nattress <simonn@microsoft.com> | 2016-02-01 22:36:24 +0300 |
---|---|---|
committer | Simon Nattress <simonn@microsoft.com> | 2016-02-27 00:49:36 +0300 |
commit | 40af7ccaa12b94c08fc70be3d2f811b5e737f2e9 (patch) | |
tree | 37ae2c274c7156a6ffc721e1b3517b0b971b81f1 /src/Native/Runtime/module.h | |
parent | 4227e09cf002aca4757d1eaac8d96313333e960c (diff) |
Multi-module compilation preparation
Add a new command-line switch to ILC: /multifile. When specified, only
the assemblies passed as input will have methods compiled. Referenced
types / methods from other assemblies are not compiled into the output
object file. This switch is most likely temporary as we hone our
compilation story and implementation.
Each managed module adds pointers to the start and end of a module
global data header to a custom section of the object file, .modules$I.
These entries are merged (on Windows, OSX / Linux needs a tweak to CLI
first) at link time producing a list of module headers.
In StartupCodeHelpers.cs, initialize global tables from each module
using the list of pointers that was written to .modules$I. This data is
discovered through two exports (__modules_a and __modules_z) which
through linker section merging, are placed either side of the module
header pointers in the final binary.
Alter interface dispatch to store its dispatch map table as an
ArrayOfEmbeddedDataNode and place it in the module header list. This
allows each module's EETypes to continue using index-based lookup of
dispatch maps.
Add a new field to EETypes which points at a ModuleManager* through an
indirection cell. This indirection cell is filled in at runtime
initialization and allows a type to find its dispatch map table.
ModuleHeaderSection.cs|h files define the section headers currently
supported. ModuleHeaderSection's enumerands are in line with the plan for
ReadyToRun.
Moved the module info lookup out of the bootstrapping code and into the
runtime
Place compilation module group logic to a dedicated set of classes,
CompilationModuleGroup, MultiFileCompilationModuleGroup, and
SingleFileCompilationModuleGroup which together abstract the logic for
decisions about which types / methods should be included in compilation
in single vs multi file.
Extract an interface from Compilation for the methods that root methods
/ types / Main so CompilationModuleGroup can root things without having
to know about the Compilation class.
Diffstat (limited to 'src/Native/Runtime/module.h')
-rw-r--r-- | src/Native/Runtime/module.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/Native/Runtime/module.h b/src/Native/Runtime/module.h index 5eebff5cd..61dbe6503 100644 --- a/src/Native/Runtime/module.h +++ b/src/Native/Runtime/module.h @@ -4,6 +4,7 @@ #include "ICodeManager.h" #include "SectionMethodList.h" +#include "ModuleManager.h" struct StaticGcDesc; typedef SPTR(StaticGcDesc) PTR_StaticGcDesc; @@ -178,4 +179,3 @@ private: ReaderWriterLock m_loopHijackMapLock; MapSHash<UInt32, void*> m_loopHijackIndexToTargetMap; }; - |