diff options
author | Andon Andonov <anandono@microsoft.com> | 2019-01-14 19:59:12 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-14 19:59:12 -0800 |
commit | 9fe3286e3810298934315e999580edd78c3322c2 (patch) | |
tree | 79258a0ed5b043cc7a0ecac0131a77e58753e436 /src/zap | |
parent | dbdae9cc324a97ebc9199b973abe9a21b1177f01 (diff) | |
download | coreclr-9fe3286e3810298934315e999580edd78c3322c2.tar.gz coreclr-9fe3286e3810298934315e999580edd78c3322c2.tar.bz2 coreclr-9fe3286e3810298934315e999580edd78c3322c2.zip |
Large version bubble Support (#21727)
* Preliminary Changes
* Module Index Resolution
* Change infoModule encoding
* Change referencing module in R2R
* Pre-condition Check
* Virtual Method Module Resolution
* Remove Workarounds and add conditional import loading
* Add signature kind module override
* Add ELEMENT_TYPE_MODULE_ZAPSIG
* Add switch to enable large version bubble
* Cleanup
* Change Native header check
* Add large version bubble test
* Add Large Version Bubble Checks
* Cleanup
* Revert unnecessary check
* Change EncodeMethod Version Bubble Condition
* Add Large Version Bubble asserts
* Cleanup
* Add default argument to runtests.py
* Change test PreCommands
* Revert whitespace changes
* Change breaking conditional check
* Streamline Version Bubble test
* Address PR Feedback
* Address PR Feedback #2
* Remove dead code
* Add crossgen-time ifdef
Diffstat (limited to 'src/zap')
-rw-r--r-- | src/zap/zapimage.cpp | 6 | ||||
-rw-r--r-- | src/zap/zapimage.h | 2 | ||||
-rw-r--r-- | src/zap/zapimport.cpp | 13 | ||||
-rw-r--r-- | src/zap/zapper.cpp | 2 | ||||
-rw-r--r-- | src/zap/zapreadytorun.cpp | 20 | ||||
-rw-r--r-- | src/zap/zapreadytorun.h | 2 |
6 files changed, 37 insertions, 8 deletions
diff --git a/src/zap/zapimage.cpp b/src/zap/zapimage.cpp index 7dce3af285..3fa607333d 100644 --- a/src/zap/zapimage.cpp +++ b/src/zap/zapimage.cpp @@ -1082,7 +1082,7 @@ HANDLE ZapImage::GenerateFile(LPCWSTR wszOutputFileName, CORCOMPILE_NGEN_SIGNATU HANDLE ZapImage::SaveImage(LPCWSTR wszOutputFileName, LPCWSTR wszDllPath, CORCOMPILE_NGEN_SIGNATURE * pNativeImageSig) { - if (!IsReadyToRunCompilation()) + if(!IsReadyToRunCompilation() || IsLargeVersionBubbleEnabled()) { OutputManifestMetadata(); } @@ -1835,6 +1835,10 @@ void ZapImage::Compile() OutputTypesTableForReadyToRun(m_pMDImport); OutputInliningTableForReadyToRun(); OutputProfileDataForReadyToRun(); + if (IsLargeVersionBubbleEnabled()) + { + OutputManifestMetadataForReadyToRun(); + } } else #endif diff --git a/src/zap/zapimage.h b/src/zap/zapimage.h index 36266d3370..832f2b198e 100644 --- a/src/zap/zapimage.h +++ b/src/zap/zapimage.h @@ -596,6 +596,7 @@ private: void OutputTypesTableForReadyToRun(IMDInternalImport * pMDImport); void OutputInliningTableForReadyToRun(); void OutputProfileDataForReadyToRun(); + void OutputManifestMetadataForReadyToRun(); void CopyDebugDirEntry(); void CopyWin32VersionResource(); @@ -691,6 +692,7 @@ public: } static void __stdcall TryCompileMethodStub(LPVOID pContext, CORINFO_METHOD_HANDLE hStub, CORJIT_FLAGS jitFlags); + static DWORD EncodeModuleHelper(LPVOID compileContext, CORINFO_MODULE_HANDLE referencedModule); BOOL IsVTableGapMethod(mdMethodDef md); diff --git a/src/zap/zapimport.cpp b/src/zap/zapimport.cpp index d3010af30f..9d8eec16e2 100644 --- a/src/zap/zapimport.cpp +++ b/src/zap/zapimport.cpp @@ -329,6 +329,7 @@ ZapGenericSignature * ZapImportTable::GetGenericSignature(PVOID signature, BOOL /*static*/ DWORD ZapImportTable::EncodeModuleHelper( LPVOID compileContext, CORINFO_MODULE_HANDLE referencedModule) { + _ASSERTE(!IsReadyToRunCompilation() || IsLargeVersionBubbleEnabled()); ZapImportTable * pTable = (ZapImportTable *)compileContext; return pTable->GetIndexOfModule(referencedModule); } @@ -952,6 +953,7 @@ void ZapImportTable::EncodeModule(CORCOMPILE_FIXUP_BLOB_KIND kind, CORINFO_MODUL { if (module != GetImage()->GetModuleHandle()) { + _ASSERTE(!IsReadyToRunCompilation() || IsLargeVersionBubbleEnabled()); pSigBuilder->AppendByte(kind | ENCODE_MODULE_OVERRIDE); pSigBuilder->AppendData(GetIndexOfModule(module)); } @@ -1635,7 +1637,7 @@ ZapImport * ZapImportTable::GetExternalMethodCell(CORINFO_METHOD_HANDLE handle, } else { - EncodeMethod(ENCODE_METHOD_ENTRY, handle, &sigBuilder, pResolvedToken, pConstrainedResolvedToken); + EncodeMethod(ENCODE_METHOD_ENTRY, handle, &sigBuilder, pResolvedToken, pConstrainedResolvedToken, false); } return GetImportForSignature<ZapExternalMethodCell, ZapNodeType_ExternalMethodCell>((PVOID)handle, &sigBuilder); @@ -1777,7 +1779,7 @@ ZapImport * ZapImportTable::GetDictionaryLookupCell(CORCOMPILE_FIXUP_BLOB_KIND k if ((kind & ~CORINFO_HELP_READYTORUN_ATYPICAL_CALLSITE) == ENCODE_DICTIONARY_LOOKUP_THISOBJ) { CORINFO_CLASS_HANDLE hClassContext = GetJitInfo()->getMethodClass(pResolvedToken->tokenContext); - GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), hClassContext, &sigBuilder, NULL, NULL); + GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), hClassContext, &sigBuilder, this, EncodeModuleHelper); } switch (pLookup->runtimeLookupFlags) @@ -1795,7 +1797,7 @@ ZapImport * ZapImportTable::GetDictionaryLookupCell(CORCOMPILE_FIXUP_BLOB_KIND k { _ASSERTE(pLookup->runtimeLookupArgs != NULL); sigBuilder.AppendData(ENCODE_DECLARINGTYPE_HANDLE); - GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), (CORINFO_CLASS_HANDLE)pLookup->runtimeLookupArgs, &sigBuilder, NULL, NULL); + GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), (CORINFO_CLASS_HANDLE)pLookup->runtimeLookupArgs, &sigBuilder, this, EncodeModuleHelper); } else { @@ -1844,8 +1846,7 @@ ZapImport * ZapImportTable::GetDynamicHelperCell(CORCOMPILE_FIXUP_BLOB_KIND kind sigBuilder.AppendData(kind & ~CORINFO_HELP_READYTORUN_ATYPICAL_CALLSITE); - GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), handle, &sigBuilder, NULL, NULL); - + GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), handle, &sigBuilder, this, EncodeModuleHelper); pImport->SetBlob(GetBlob(&sigBuilder)); } @@ -1863,7 +1864,7 @@ ZapImport * ZapImportTable::GetDynamicHelperCell(CORCOMPILE_FIXUP_BLOB_KIND kind if (delegateType != NULL) { _ASSERTE((CORCOMPILE_FIXUP_BLOB_KIND)(kind & ~CORINFO_HELP_READYTORUN_ATYPICAL_CALLSITE) == ENCODE_DELEGATE_CTOR); - GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), delegateType, &sigBuilder, NULL, NULL); + GetCompileInfo()->EncodeClass(m_pImage->GetModuleHandle(), delegateType, &sigBuilder, this, EncodeModuleHelper); } return GetImportForSignature<ZapDynamicHelperCell, ZapNodeType_DynamicHelperCell>((void *)(uintptr_t)((kind << 1) | 1), &sigBuilder); diff --git a/src/zap/zapper.cpp b/src/zap/zapper.cpp index 6d1cbd99d1..f4ddb92011 100644 --- a/src/zap/zapper.cpp +++ b/src/zap/zapper.cpp @@ -21,6 +21,7 @@ bool g_fNGenWinMDResilient; #ifdef FEATURE_READYTORUN_COMPILER bool g_fReadyToRunCompilation; +bool g_fLargeVersionBubble; #endif static bool s_fNGenNoMetaData; @@ -110,6 +111,7 @@ STDAPI NGenWorker(LPCWSTR pwzFilename, DWORD dwFlags, LPCWSTR pwzPlatformAssembl #ifdef FEATURE_READYTORUN_COMPILER g_fReadyToRunCompilation = !!(dwFlags & NGENWORKER_FLAGS_READYTORUN); + g_fLargeVersionBubble = !!(dwFlags & NGENWORKER_FLAGS_LARGEVERSIONBUBBLE); #endif if (pLogger != NULL) diff --git a/src/zap/zapreadytorun.cpp b/src/zap/zapreadytorun.cpp index 099ef41c2c..7e26411cf4 100644 --- a/src/zap/zapreadytorun.cpp +++ b/src/zap/zapreadytorun.cpp @@ -254,7 +254,7 @@ void ZapImage::OutputEntrypointsTableForReadyToRun() resolvedToken.token = token; resolvedToken.hClass = pMethod->GetClassHandle(); resolvedToken.hMethod = pMethod->GetHandle(); - GetCompileInfo()->EncodeMethod(module, pMethod->GetHandle(), &sigBuilder, NULL, NULL, &resolvedToken); + GetCompileInfo()->EncodeMethod(module, pMethod->GetHandle(), &sigBuilder, m_pImportTable, EncodeModuleHelper, &resolvedToken); DWORD cbBlob; PVOID pBlob = sigBuilder.GetSignature(&cbBlob); @@ -326,6 +326,16 @@ public: } } }; +// At ngen time Zapper::CompileModule PlaceFixups called from +// code:ZapSig.GetSignatureForTypeHandle +// +/*static*/ DWORD ZapImage::EncodeModuleHelper(LPVOID compileContext, + CORINFO_MODULE_HANDLE referencedModule) +{ + _ASSERTE(!IsReadyToRunCompilation() || IsLargeVersionBubbleEnabled()); + ZapImportTable * pTable = (ZapImportTable *)compileContext; + return pTable->GetIndexOfModule(referencedModule); +} void ZapImage::OutputDebugInfoForReadyToRun() { @@ -397,6 +407,14 @@ void ZapImage::OutputProfileDataForReadyToRun() } } +void ZapImage::OutputManifestMetadataForReadyToRun() +{ + if (m_pMetaDataSection != nullptr) + { + GetReadyToRunHeader()->RegisterSection(READYTORUN_SECTION_MANIFEST_METADATA, m_pMetaDataSection); + } +} + void ZapImage::OutputTypesTableForReadyToRun(IMDInternalImport * pMDImport) { NativeWriter writer; diff --git a/src/zap/zapreadytorun.h b/src/zap/zapreadytorun.h index cf7ad0677b..d9409e9b62 100644 --- a/src/zap/zapreadytorun.h +++ b/src/zap/zapreadytorun.h @@ -59,6 +59,8 @@ public: } virtual void Save(ZapWriter * pZapWriter); + + DWORD EncodeModuleHelper(LPVOID compileContext, CORINFO_MODULE_HANDLE referencedModule); }; #endif // __ZAPREADYTORUN_H__ |