diff options
Diffstat (limited to 'src/dlls')
-rw-r--r-- | src/dlls/mscoree/mscorwks_ntdef.src | 1 | ||||
-rw-r--r-- | src/dlls/mscoree/mscorwks_unixexports.src | 1 | ||||
-rw-r--r-- | src/dlls/mscoree/unixinterface.cpp | 42 |
3 files changed, 42 insertions, 2 deletions
diff --git a/src/dlls/mscoree/mscorwks_ntdef.src b/src/dlls/mscoree/mscorwks_ntdef.src index bdbce4f4c6..3611e0c140 100644 --- a/src/dlls/mscoree/mscorwks_ntdef.src +++ b/src/dlls/mscoree/mscorwks_ntdef.src @@ -20,6 +20,7 @@ EXPORTS CLRJitAttachState @3 data ; Unix hosting API + coreclr_preload_assembly coreclr_create_delegate coreclr_execute_assembly coreclr_initialize diff --git a/src/dlls/mscoree/mscorwks_unixexports.src b/src/dlls/mscoree/mscorwks_unixexports.src index 6ba08c9af8..ddbe76b3e9 100644 --- a/src/dlls/mscoree/mscorwks_unixexports.src +++ b/src/dlls/mscoree/mscorwks_unixexports.src @@ -1,4 +1,5 @@ ; Unix hosting API +coreclr_preload_assembly coreclr_create_delegate coreclr_execute_assembly coreclr_initialize diff --git a/src/dlls/mscoree/unixinterface.cpp b/src/dlls/mscoree/unixinterface.cpp index 67bd444ba8..7cbfad048a 100644 --- a/src/dlls/mscoree/unixinterface.cpp +++ b/src/dlls/mscoree/unixinterface.cpp @@ -146,6 +146,34 @@ extern "C" int coreclr_create_delegate(void*, unsigned int, const char*, const c #endif //FEATURE_GDBJIT // +// Preload native assembly. +// +// This method allows to preload assembly to memory and apply relocations before initialization of CoreCLR. +// Assemblies are stored in the list, which is scanned during general loading after CoreCLR initialization. +// If path is found in the list, preloaded memory is used. +// If CoreCLR is already initialized, it returns E_FAIL. +// +// Parameters: +// assemblyPath - Absolute path of the assembly to preload +// +// Returns: +// HRESULT indicating status of the operation. S_OK if the assembly was successfully preloaded +// +extern "C" +DLLEXPORT +int coreclr_preload_assembly( + const char *assemblyPath +) +{ + if (assemblyPath == NULL) + { + return E_FAIL; + } + + return CorHost2::PreloadAssembly(assemblyPath); +} + +// // Initialize the CoreCLR. Creates and starts CoreCLR host and creates an app domain // // Parameters: @@ -288,7 +316,12 @@ int coreclr_shutdown( { ReleaseHolder<ICLRRuntimeHost4> host(reinterpret_cast<ICLRRuntimeHost4*>(hostHandle)); - HRESULT hr = host->UnloadAppDomain(domainId, true); // Wait until done + HRESULT hr; + + hr = CorHost2::UnloadPreloadedAssemblies(); + IfFailRet(hr); + + hr = host->UnloadAppDomain(domainId, true); // Wait until done IfFailRet(hr); hr = host->Stop(); @@ -320,7 +353,12 @@ int coreclr_shutdown_2( { ReleaseHolder<ICLRRuntimeHost4> host(reinterpret_cast<ICLRRuntimeHost4*>(hostHandle)); - HRESULT hr = host->UnloadAppDomain2(domainId, true, latchedExitCode); // Wait until done + HRESULT hr; + + hr = CorHost2::UnloadPreloadedAssemblies(); + IfFailRet(hr); + + hr = host->UnloadAppDomain2(domainId, true, latchedExitCode); // Wait until done IfFailRet(hr); hr = host->Stop(); |