diff options
Diffstat (limited to 'src/zap')
-rw-r--r-- | src/zap/zapinfo.cpp | 25 | ||||
-rw-r--r-- | src/zap/zapreadytorun.cpp | 2 |
2 files changed, 20 insertions, 7 deletions
diff --git a/src/zap/zapinfo.cpp b/src/zap/zapinfo.cpp index 560400bd44..1e498463c6 100644 --- a/src/zap/zapinfo.cpp +++ b/src/zap/zapinfo.cpp @@ -205,8 +205,14 @@ CORJIT_FLAGS ZapInfo::ComputeJitFlags(CORINFO_METHOD_HANDLE handle) #ifdef FEATURE_READYTORUN_COMPILER if (IsReadyToRunCompilation()) + { jitFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_READYTORUN); +#ifndef PLATFORM_UNIX + // PInvoke Helpers are not yet implemented on non-Windows platforms + jitFlags.Set(CORJIT_FLAGS::CORJIT_FLAG_USE_PINVOKE_HELPERS); #endif + } +#endif // FEATURE_READYTORUN_COMPILER return jitFlags; } @@ -1988,12 +1994,15 @@ void * ZapInfo::getAddressOfPInvokeFixup(CORINFO_METHOD_HANDLE method,void **ppI m_pImage->m_pPreloader->AddMethodToTransitiveClosureOfInstantiations(method); - CORINFO_MODULE_HANDLE moduleHandle = m_pEECompileInfo->GetLoaderModuleForEmbeddableMethod(method); - if (moduleHandle == m_pImage->m_hModule - && m_pImage->m_pPreloader->CanEmbedMethodHandle(method, m_currentMethodHandle)) + if (!IsReadyToRunCompilation()) { - *ppIndirection = NULL; - return PVOID(m_pImage->GetWrappers()->GetAddrOfPInvokeFixup(method)); + CORINFO_MODULE_HANDLE moduleHandle = m_pEECompileInfo->GetLoaderModuleForEmbeddableMethod(method); + if (moduleHandle == m_pImage->m_hModule + && m_pImage->m_pPreloader->CanEmbedMethodHandle(method, m_currentMethodHandle)) + { + *ppIndirection = NULL; + return PVOID(m_pImage->GetWrappers()->GetAddrOfPInvokeFixup(method)); + } } // @@ -3849,9 +3858,11 @@ CorInfoUnmanagedCallConv ZapInfo::getUnmanagedCallConv(CORINFO_METHOD_HANDLE met BOOL ZapInfo::pInvokeMarshalingRequired(CORINFO_METHOD_HANDLE method, CORINFO_SIG_INFO* sig) { - // READYTORUN: FUTURE: P/Invoke +#ifdef PLATFORM_UNIX + // TODO: Support for pinvoke helpers on non-Windows platforms if (IsReadyToRunCompilation()) - return TRUE; + return TRUE; +#endif return m_pEEJitInfo->pInvokeMarshalingRequired(method, sig); } diff --git a/src/zap/zapreadytorun.cpp b/src/zap/zapreadytorun.cpp index f0260a59aa..8d83ff7400 100644 --- a/src/zap/zapreadytorun.cpp +++ b/src/zap/zapreadytorun.cpp @@ -549,6 +549,8 @@ static_assert_no_msg((int)READYTORUN_FIXUP_DelegateCtor == (int)ENC static_assert_no_msg((int)READYTORUN_FIXUP_DeclaringTypeHandle == (int)ENCODE_DECLARINGTYPE_HANDLE); +static_assert_no_msg((int)READYTORUN_FIXUP_IndirectPInvokeTarget == (int)ENCODE_INDIRECT_PINVOKE_TARGET); + // // READYTORUN_EXCEPTION // |