diff --git a/src/BuildIntegration/Microsoft.NETCore.Native.Windows.props b/src/BuildIntegration/Microsoft.NETCore.Native.Windows.props
index 22392cd256f..b06165b8a84 100644
--- a/src/BuildIntegration/Microsoft.NETCore.Native.Windows.props
+++ b/src/BuildIntegration/Microsoft.NETCore.Native.Windows.props
@@ -40,6 +40,7 @@ See the LICENSE file in the project root for more information.
+
diff --git a/src/BuildIntegration/Microsoft.NETCore.Native.targets b/src/BuildIntegration/Microsoft.NETCore.Native.targets
index 79f3a61b735..99e6ffea19d 100644
--- a/src/BuildIntegration/Microsoft.NETCore.Native.targets
+++ b/src/BuildIntegration/Microsoft.NETCore.Native.targets
@@ -67,6 +67,8 @@ See the LICENSE file in the project root for more information.
$(NativeOutputPath)
$(NativeIntermediateOutputPath)
+ true
+
$(FrameworkLibPath)\Framework$(LibFileExt)
$(FrameworkLibPath)\libframework$(LibFileExt)
SetupProperties
@@ -81,17 +83,19 @@ See the LICENSE file in the project root for more information.
-
+
+
-
+
+
-
-
+
+
@@ -180,7 +184,7 @@ See the LICENSE file in the project root for more information.
-
+
diff --git a/src/JitInterface/src/CorInfoImpl.cs b/src/JitInterface/src/CorInfoImpl.cs
index 13d2ccac485..b02092b30e2 100644
--- a/src/JitInterface/src/CorInfoImpl.cs
+++ b/src/JitInterface/src/CorInfoImpl.cs
@@ -42,6 +42,12 @@ private enum ImageFileMachine
ARM = 0x01c4,
}
+#if SUPPORT_JIT
+ private const string JitSupportLibrary = "*";
+#else
+ private const string JitSupportLibrary = "jitinterface";
+#endif
+
private IntPtr _jit;
private IntPtr _unmanagedCallbacks; // array of pointers to JIT-EE interface callbacks
@@ -55,7 +61,7 @@ private enum ImageFileMachine
[DllImport("clrjitilc", CallingConvention=CallingConvention.StdCall)]
private extern static IntPtr getJit();
- [DllImport("jitinterface")]
+ [DllImport(JitSupportLibrary)]
private extern static IntPtr GetJitHost(IntPtr configProvider);
//
@@ -68,15 +74,15 @@ private static CorInfoImpl GetThis(IntPtr thisHandle)
return _this;
}
- [DllImport("jitinterface")]
+ [DllImport(JitSupportLibrary)]
private extern static CorJitResult JitCompileMethod(out IntPtr exception,
IntPtr jit, IntPtr thisHandle, IntPtr callbacks,
ref CORINFO_METHOD_INFO info, uint flags, out IntPtr nativeEntry, out uint codeSize);
- [DllImport("jitinterface")]
+ [DllImport(JitSupportLibrary)]
private extern static uint GetMaxIntrinsicSIMDVectorLength(IntPtr jit, CORJIT_FLAGS* flags);
- [DllImport("jitinterface")]
+ [DllImport(JitSupportLibrary)]
private extern static IntPtr AllocException([MarshalAs(UnmanagedType.LPWStr)]string message, int messageLength);
private IntPtr AllocException(Exception ex)
@@ -93,10 +99,10 @@ private IntPtr AllocException(Exception ex)
return nativeException;
}
- [DllImport("jitinterface")]
+ [DllImport(JitSupportLibrary)]
private extern static void FreeException(IntPtr obj);
- [DllImport("jitinterface")]
+ [DllImport(JitSupportLibrary)]
private extern static char* GetExceptionMessage(IntPtr obj);
private Compilation _compilation;
diff --git a/src/Native/jitinterface/CMakeLists.txt b/src/Native/jitinterface/CMakeLists.txt
index 46c071c8ad6..5262e0d8cbc 100644
--- a/src/Native/jitinterface/CMakeLists.txt
+++ b/src/Native/jitinterface/CMakeLists.txt
@@ -7,15 +7,23 @@ set(NATIVE_SOURCES
corinfoexception.cpp
)
+set (JIT_SOURCES
+ CodeHeap.cpp
+ JITCodeManager.cpp
+ ../Runtime/coreclr/GCInfoDecoder.cpp
+)
+
if(WIN32 AND CLR_CMAKE_PLATFORM_ARCH_AMD64)
- set(NATIVE_SOURCES ${NATIVE_SOURCES}
- CodeHeap.cpp
- JITCodeManager.cpp
- ../Runtime/coreclr/GCInfoDecoder.cpp
- )
add_definitions(-DGCINFODECODER_NO_EE)
add_definitions(-DFEATURE_REDHAWK)
+ add_definitions(-DFEATURE_SINGLE_MODULE_RUNTIME)
+
+ add_library(System.Private.Jit.Native
+ STATIC
+ ${NATIVE_SOURCES}
+ ${JIT_SOURCES}
+ )
endif(WIN32 AND CLR_CMAKE_PLATFORM_ARCH_AMD64)
add_library(jitinterface
@@ -27,4 +35,5 @@ install (TARGETS jitinterface DESTINATION tools)
if(WIN32)
target_link_libraries(jitinterface ntdll.lib)
install (FILES ${CMAKE_CURRENT_BINARY_DIR}/$/jitinterface.pdb DESTINATION tools)
+ install (TARGETS System.Private.Jit.Native DESTINATION sdk)
endif(WIN32)
diff --git a/src/Native/jitinterface/CodeHeap.cpp b/src/Native/jitinterface/CodeHeap.cpp
index 1adc206ea26..468bd258852 100644
--- a/src/Native/jitinterface/CodeHeap.cpp
+++ b/src/Native/jitinterface/CodeHeap.cpp
@@ -18,13 +18,23 @@ static void *s_topAddress = nullptr;
static DWORD s_pageSize = 0;
extern HMODULE s_hRuntime;
+#if FEATURE_SINGLE_MODULE_RUNTIME
+extern "C" void RhpNewArray();
+#endif
+
void InitMemoryStatics()
{
std::call_once(s_staticInit, []()
{
HMODULE module = s_hRuntime;
if (module != NULL)
+ {
+#if FEATURE_SINGLE_MODULE_RUNTIME
+ s_mrtAddr = &RhpNewArray;
+#else
s_mrtAddr = GetProcAddress(module, "RhpNewArray");
+#endif
+ }
assert(s_mrtAddr != nullptr);
diff --git a/src/Native/jitinterface/JITCodeManager.cpp b/src/Native/jitinterface/JITCodeManager.cpp
index 198671f14ee..11a1088be06 100644
--- a/src/Native/jitinterface/JITCodeManager.cpp
+++ b/src/Native/jitinterface/JITCodeManager.cpp
@@ -46,14 +46,24 @@ HMODULE s_hRuntime = NULL;
pfnRegisterCodeManager s_pfnRegisterCodeManager;
pfnUnregisterCodeManager s_pfnUnregisterCodeManager;
+#if FEATURE_SINGLE_MODULE_RUNTIME
+extern "C" bool RegisterCodeManager(ICodeManager * pCodeManager, PTR_VOID pvStartRange, UInt32 cbRange);
+extern "C" void UnregisterCodeManager(ICodeManager * pCodeManager);
+#endif
+
bool InitializeCodeManagerRuntime()
{
std::call_once(s_RuntimeInit, []()
{
if (s_hRuntime != NULL)
{
+#if FEATURE_SINGLE_MODULE_RUNTIME
+ s_pfnRegisterCodeManager = &RegisterCodeManager;
+ s_pfnUnregisterCodeManager = &UnregisterCodeManager;
+#else
s_pfnRegisterCodeManager = (pfnRegisterCodeManager)GetProcAddress(s_hRuntime, "RegisterCodeManager");
s_pfnUnregisterCodeManager = (pfnUnregisterCodeManager)GetProcAddress(s_hRuntime, "UnregisterCodeManager");
+#endif
}
});
@@ -259,7 +269,7 @@ bool JITCodeManager::Initialize()
// Note that main method bodies will not have an entry in the map.
PTR_RUNTIME_FUNCTION JITCodeManager::AllocRuntimeFunction(PTR_RUNTIME_FUNCTION mainMethod, DWORD beginAddr, DWORD endAddr, DWORD unwindData)
{
- ReaderWriterLock::WriteHolder lh(&m_lock);
+ SlimReaderWriterLock::WriteHolder lh(&m_lock);
m_runtimeFunctions.push_back(RUNTIME_FUNCTION());
PTR_RUNTIME_FUNCTION method = &m_runtimeFunctions.back();
@@ -278,7 +288,7 @@ PTR_RUNTIME_FUNCTION JITCodeManager::AllocRuntimeFunction(PTR_RUNTIME_FUNCTION m
void JITCodeManager::UpdateRuntimeFunctionTable()
{
- ReaderWriterLock::WriteHolder lh(&m_lock);
+ SlimReaderWriterLock::WriteHolder lh(&m_lock);
PTR_RUNTIME_FUNCTION pFunctionTable = &m_runtimeFunctions[0];
DWORD nEntryCount = (DWORD)m_runtimeFunctions.size();
@@ -381,7 +391,7 @@ bool JITCodeManager::FindMethodInfo(PTR_VOID ControlPC,
if (RelativePC >= m_cbRange)
return false;
- ReaderWriterLock::ReadHolder lh(&m_lock);
+ SlimReaderWriterLock::ReadHolder lh(&m_lock);
int MethodIndex = LookupUnwindInfoForMethod((UInt32)RelativePC, m_pRuntimeFunctionTable,
0, m_nRuntimeFunctionTable - 1);
@@ -420,7 +430,7 @@ bool JITCodeManager::IsFunclet(MethodInfo * pMethInfo)
JITMethodInfo * pMethodInfo = (JITMethodInfo *)pMethInfo;
// A funclet will have an entry in funclet to main method map
- ReaderWriterLock::ReadHolder lh(&m_lock);
+ SlimReaderWriterLock::ReadHolder lh(&m_lock);
return m_FuncletToMainMethodMap.find(pMethodInfo->runtimeFunction.BeginAddress) != m_FuncletToMainMethodMap.end();
}
diff --git a/src/Native/jitinterface/JITCodeManager.h b/src/Native/jitinterface/JITCodeManager.h
index aeff8bc8991..991cb0d65d9 100644
--- a/src/Native/jitinterface/JITCodeManager.h
+++ b/src/Native/jitinterface/JITCodeManager.h
@@ -51,19 +51,19 @@ typedef DPTR(struct _UNWIND_INFO) PTR_UNWIND_INFO;
typedef DPTR(union _UNWIND_CODE) PTR_UNWIND_CODE;
#endif // target_amd64
-class ReaderWriterLock : private SRWLOCK
+class SlimReaderWriterLock : private SRWLOCK
{
public:
- ReaderWriterLock()
+ SlimReaderWriterLock()
{
::InitializeSRWLock(this);
}
class ReadHolder
{
- ReaderWriterLock * m_pLock;
+ SlimReaderWriterLock * m_pLock;
public:
- ReadHolder(ReaderWriterLock * pLock)
+ ReadHolder(SlimReaderWriterLock * pLock)
: m_pLock(pLock)
{
::AcquireSRWLockShared(m_pLock);
@@ -77,10 +77,10 @@ class ReaderWriterLock : private SRWLOCK
class WriteHolder
{
- ReaderWriterLock * m_pLock;
+ SlimReaderWriterLock * m_pLock;
public:
- WriteHolder(ReaderWriterLock * pLock)
+ WriteHolder(SlimReaderWriterLock * pLock)
: m_pLock(pLock)
{
::AcquireSRWLockExclusive(m_pLock);
@@ -167,7 +167,7 @@ class JITCodeManager : ICodeManager
UInt32 m_cbRange;
// lock to protect m_runtimeFunctions and m_FuncletToMainMethodMap
- ReaderWriterLock m_lock;
+ SlimReaderWriterLock m_lock;
std::vector m_runtimeFunctions;
PTR_RUNTIME_FUNCTION m_pRuntimeFunctionTable;
diff --git a/src/System.Private.Jit/src/Internal/Runtime/JitSupport/RyuJitExecutionStrategy.cs b/src/System.Private.Jit/src/Internal/Runtime/JitSupport/RyuJitExecutionStrategy.cs
index e67b3b8c4a0..9548f2f08c4 100644
--- a/src/System.Private.Jit/src/Internal/Runtime/JitSupport/RyuJitExecutionStrategy.cs
+++ b/src/System.Private.Jit/src/Internal/Runtime/JitSupport/RyuJitExecutionStrategy.cs
@@ -22,6 +22,8 @@ namespace Internal.Runtime.JitSupport
{
public class RyuJitExecutionStrategy : MethodExecutionStrategy
{
+ private const string NativeJitSupportLibrary = "*";
+
private CorInfoImpl _corInfoImpl;
private TypeSystemContext _context;
private NodeFactory _nodeFactory;
@@ -33,13 +35,13 @@ private void UpdateBytesUsed(ObjectNode.ObjectData nodeData, ref int bytesUsed)
return;
}
- [DllImport("jitinterface")]
+ [DllImport(NativeJitSupportLibrary)]
static extern IntPtr AllocJittedCode(UInt32 cbCode, UInt32 align, out IntPtr pCodeManager);
- [DllImport("jitinterface")]
+ [DllImport(NativeJitSupportLibrary)]
static extern void SetEHInfoPtr(IntPtr pCodeManager, IntPtr pbCode, IntPtr ehInfo);
- [DllImport("jitinterface")]
+ [DllImport(NativeJitSupportLibrary)]
static extern unsafe IntPtr PublishRuntimeFunction(
IntPtr pCodeManager,
IntPtr pbCode,
@@ -51,10 +53,10 @@ static extern unsafe IntPtr PublishRuntimeFunction(
byte[] pGCData,
UInt32 cbGCData);
- [DllImport("jitinterface")]
+ [DllImport(NativeJitSupportLibrary)]
static extern void UpdateRuntimeFunctionTable(IntPtr pCodeManager);
- [DllImport("jitinterface")]
+ [DllImport(NativeJitSupportLibrary)]
static extern void InitJitCodeManager(IntPtr mrtModule);
public override IntPtr OnEntryPoint(MethodEntrypointPtr methodEntrypoint, IntPtr callerArgs)
diff --git a/src/System.Private.StackTraceMetadata/src/System.Private.StackTraceMetadata.Experimental.csproj b/src/System.Private.StackTraceMetadata/src/System.Private.StackTraceMetadata.Experimental.csproj
new file mode 100644
index 00000000000..637480fcb78
--- /dev/null
+++ b/src/System.Private.StackTraceMetadata/src/System.Private.StackTraceMetadata.Experimental.csproj
@@ -0,0 +1,8 @@
+
+
+ System.Private.StackTraceMetadata.Experimental
+ true
+
+
+
+
diff --git a/src/System.Private.StackTraceMetadata/src/System.Private.StackTraceMetadata.csproj b/src/System.Private.StackTraceMetadata/src/System.Private.StackTraceMetadata.csproj
index 799bc65e032..22c4b488c9d 100644
--- a/src/System.Private.StackTraceMetadata/src/System.Private.StackTraceMetadata.csproj
+++ b/src/System.Private.StackTraceMetadata/src/System.Private.StackTraceMetadata.csproj
@@ -1,7 +1,7 @@
- System.Private.StackTraceMetadata
+ System.Private.StackTraceMetadata
4.0.0.0
Library
true
@@ -11,8 +11,10 @@
-
-
+
+
+
+