diff options
author | Michal Strehovský <MichalStrehovsky@users.noreply.github.com> | 2019-02-22 15:44:01 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-22 15:44:01 +0100 |
commit | dbf6006da52845624577f88f3200447c4a1d8db2 (patch) | |
tree | a774b800a67284faa01bd9e7d67d5cc8aec16a8f /src | |
parent | df4aa3315f64f43344b4aaf6e57aad9fe0b36cbf (diff) | |
download | coreclr-dbf6006da52845624577f88f3200447c4a1d8db2.tar.gz coreclr-dbf6006da52845624577f88f3200447c4a1d8db2.tar.bz2 coreclr-dbf6006da52845624577f88f3200447c4a1d8db2.zip |
Store information about partial ngen in R2R images (#22680)
Diffstat (limited to 'src')
-rw-r--r-- | src/inc/eventtracebase.h | 1 | ||||
-rw-r--r-- | src/inc/readytorun.h | 2 | ||||
-rw-r--r-- | src/tools/r2rdump/R2RHeader.cs | 3 | ||||
-rw-r--r-- | src/vm/eventtrace.cpp | 8 | ||||
-rw-r--r-- | src/vm/readytoruninfo.h | 6 | ||||
-rw-r--r-- | src/zap/zapreadytorun.cpp | 3 |
6 files changed, 21 insertions, 2 deletions
diff --git a/src/inc/eventtracebase.h b/src/inc/eventtracebase.h index 26287ab54a..93d2db5b24 100644 --- a/src/inc/eventtracebase.h +++ b/src/inc/eventtracebase.h @@ -531,6 +531,7 @@ namespace ETW ManifestModule=0x8, IbcOptimized=0x10, ReadyToRunModule=0x20, + PartialReadyToRunModule=0x40, }ModuleFlags; typedef enum _RangeFlags diff --git a/src/inc/readytorun.h b/src/inc/readytorun.h index faccfd07a6..4ca7528ae0 100644 --- a/src/inc/readytorun.h +++ b/src/inc/readytorun.h @@ -45,6 +45,8 @@ enum ReadyToRunFlag // Set if the original IL assembly was platform-neutral READYTORUN_FLAG_PLATFORM_NEUTRAL_SOURCE = 0x00000001, READYTORUN_FLAG_SKIP_TYPE_VALIDATION = 0x00000002, + // Set of methods with native code was determined using profile data + READYTORUN_FLAG_PARTIAL = 0x00000004, }; enum ReadyToRunSectionType diff --git a/src/tools/r2rdump/R2RHeader.cs b/src/tools/r2rdump/R2RHeader.cs index 55745f664f..71ee6cab24 100644 --- a/src/tools/r2rdump/R2RHeader.cs +++ b/src/tools/r2rdump/R2RHeader.cs @@ -18,7 +18,8 @@ namespace R2RDump { NONE = 0x00000000, READYTORUN_FLAG_PLATFORM_NEUTRAL_SOURCE = 0x00000001, - READYTORUN_FLAG_SKIP_TYPE_VALIDATION = 0x00000002 + READYTORUN_FLAG_SKIP_TYPE_VALIDATION = 0x00000002, + READYTORUN_FLAG_PARTIAL = 0x00000004, } /// <summary> diff --git a/src/vm/eventtrace.cpp b/src/vm/eventtrace.cpp index 96f2ebe630..5ca0787813 100644 --- a/src/vm/eventtrace.cpp +++ b/src/vm/eventtrace.cpp @@ -6044,12 +6044,18 @@ VOID ETW::LoaderLog::SendModuleEvent(Module *pModule, DWORD dwEventOptions, BOOL bIsIbcOptimized = pModule->IsIbcOptimized(); } BOOL bIsReadyToRun = pModule->IsReadyToRun(); + BOOL bIsPartialReadyToRun = FALSE; + if (bIsReadyToRun) + { + bIsPartialReadyToRun = pModule->GetReadyToRunInfo()->IsPartial(); + } ULONG ulReservedFlags = 0; ULONG ulFlags = ((bHasNativeImage ? ETW::LoaderLog::LoaderStructs::NativeModule : 0) | (bIsDynamicAssembly ? ETW::LoaderLog::LoaderStructs::DynamicModule : 0) | (bIsManifestModule ? ETW::LoaderLog::LoaderStructs::ManifestModule : 0) | (bIsIbcOptimized ? ETW::LoaderLog::LoaderStructs::IbcOptimized : 0) | - (bIsReadyToRun ? ETW::LoaderLog::LoaderStructs::ReadyToRunModule : 0)); + (bIsReadyToRun ? ETW::LoaderLog::LoaderStructs::ReadyToRunModule : 0) | + (bIsPartialReadyToRun ? ETW::LoaderLog::LoaderStructs::PartialReadyToRunModule : 0)); // Grab PDB path, guid, and age for managed PDB and native (NGEN) PDB when // available. Any failures are not fatal. The corresponding PDB info will remain diff --git a/src/vm/readytoruninfo.h b/src/vm/readytoruninfo.h index 93bed74aec..56331377a2 100644 --- a/src/vm/readytoruninfo.h +++ b/src/vm/readytoruninfo.h @@ -70,6 +70,12 @@ public: return m_pHeader->Flags & READYTORUN_FLAG_SKIP_TYPE_VALIDATION; } + BOOL IsPartial() + { + LIMITED_METHOD_CONTRACT; + return m_pHeader->Flags & READYTORUN_FLAG_PARTIAL; + } + PTR_PEImageLayout GetImage() { LIMITED_METHOD_CONTRACT; diff --git a/src/zap/zapreadytorun.cpp b/src/zap/zapreadytorun.cpp index 7e26411cf4..f0260a59aa 100644 --- a/src/zap/zapreadytorun.cpp +++ b/src/zap/zapreadytorun.cpp @@ -41,6 +41,9 @@ void ZapReadyToRunHeader::Save(ZapWriter * pZapWriter) if (pImage->GetCompileInfo()->AreAllClassesFullyLoaded(pImage->GetModuleHandle())) readyToRunHeader.Flags |= READYTORUN_FLAG_SKIP_TYPE_VALIDATION; + if (pImage->GetZapperOptions()->m_fPartialNGen) + readyToRunHeader.Flags |= READYTORUN_FLAG_PARTIAL; + readyToRunHeader.NumberOfSections = m_Sections.GetCount(); pZapWriter->Write(&readyToRunHeader, sizeof(readyToRunHeader)); |