summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichal Strehovský <MichalStrehovsky@users.noreply.github.com>2019-02-22 15:44:01 +0100
committerGitHub <noreply@github.com>2019-02-22 15:44:01 +0100
commitdbf6006da52845624577f88f3200447c4a1d8db2 (patch)
treea774b800a67284faa01bd9e7d67d5cc8aec16a8f /src
parentdf4aa3315f64f43344b4aaf6e57aad9fe0b36cbf (diff)
downloadcoreclr-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.h1
-rw-r--r--src/inc/readytorun.h2
-rw-r--r--src/tools/r2rdump/R2RHeader.cs3
-rw-r--r--src/vm/eventtrace.cpp8
-rw-r--r--src/vm/readytoruninfo.h6
-rw-r--r--src/zap/zapreadytorun.cpp3
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));