Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Nattress <simonn@microsoft.com>2016-02-01 22:36:24 +0300
committerSimon Nattress <simonn@microsoft.com>2016-02-27 00:49:36 +0300
commit40af7ccaa12b94c08fc70be3d2f811b5e737f2e9 (patch)
tree37ae2c274c7156a6ffc721e1b3517b0b971b81f1 /src/Native/Runtime/module.h
parent4227e09cf002aca4757d1eaac8d96313333e960c (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.h2
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;
};
-