Skip to content

Commit dbf6006

Browse files
Store information about partial ngen in R2R images (dotnet#22680)
1 parent df4aa33 commit dbf6006

File tree

6 files changed

+21
-2
lines changed

6 files changed

+21
-2
lines changed

src/inc/eventtracebase.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,7 @@ namespace ETW
531531
ManifestModule=0x8,
532532
IbcOptimized=0x10,
533533
ReadyToRunModule=0x20,
534+
PartialReadyToRunModule=0x40,
534535
}ModuleFlags;
535536

536537
typedef enum _RangeFlags

src/inc/readytorun.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ enum ReadyToRunFlag
4545
// Set if the original IL assembly was platform-neutral
4646
READYTORUN_FLAG_PLATFORM_NEUTRAL_SOURCE = 0x00000001,
4747
READYTORUN_FLAG_SKIP_TYPE_VALIDATION = 0x00000002,
48+
// Set of methods with native code was determined using profile data
49+
READYTORUN_FLAG_PARTIAL = 0x00000004,
4850
};
4951

5052
enum ReadyToRunSectionType

src/tools/r2rdump/R2RHeader.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ public enum ReadyToRunFlag
1818
{
1919
NONE = 0x00000000,
2020
READYTORUN_FLAG_PLATFORM_NEUTRAL_SOURCE = 0x00000001,
21-
READYTORUN_FLAG_SKIP_TYPE_VALIDATION = 0x00000002
21+
READYTORUN_FLAG_SKIP_TYPE_VALIDATION = 0x00000002,
22+
READYTORUN_FLAG_PARTIAL = 0x00000004,
2223
}
2324

2425
/// <summary>

src/vm/eventtrace.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6044,12 +6044,18 @@ VOID ETW::LoaderLog::SendModuleEvent(Module *pModule, DWORD dwEventOptions, BOOL
60446044
bIsIbcOptimized = pModule->IsIbcOptimized();
60456045
}
60466046
BOOL bIsReadyToRun = pModule->IsReadyToRun();
6047+
BOOL bIsPartialReadyToRun = FALSE;
6048+
if (bIsReadyToRun)
6049+
{
6050+
bIsPartialReadyToRun = pModule->GetReadyToRunInfo()->IsPartial();
6051+
}
60476052
ULONG ulReservedFlags = 0;
60486053
ULONG ulFlags = ((bHasNativeImage ? ETW::LoaderLog::LoaderStructs::NativeModule : 0) |
60496054
(bIsDynamicAssembly ? ETW::LoaderLog::LoaderStructs::DynamicModule : 0) |
60506055
(bIsManifestModule ? ETW::LoaderLog::LoaderStructs::ManifestModule : 0) |
60516056
(bIsIbcOptimized ? ETW::LoaderLog::LoaderStructs::IbcOptimized : 0) |
6052-
(bIsReadyToRun ? ETW::LoaderLog::LoaderStructs::ReadyToRunModule : 0));
6057+
(bIsReadyToRun ? ETW::LoaderLog::LoaderStructs::ReadyToRunModule : 0) |
6058+
(bIsPartialReadyToRun ? ETW::LoaderLog::LoaderStructs::PartialReadyToRunModule : 0));
60536059

60546060
// Grab PDB path, guid, and age for managed PDB and native (NGEN) PDB when
60556061
// available. Any failures are not fatal. The corresponding PDB info will remain

src/vm/readytoruninfo.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,12 @@ class ReadyToRunInfo
7070
return m_pHeader->Flags & READYTORUN_FLAG_SKIP_TYPE_VALIDATION;
7171
}
7272

73+
BOOL IsPartial()
74+
{
75+
LIMITED_METHOD_CONTRACT;
76+
return m_pHeader->Flags & READYTORUN_FLAG_PARTIAL;
77+
}
78+
7379
PTR_PEImageLayout GetImage()
7480
{
7581
LIMITED_METHOD_CONTRACT;

src/zap/zapreadytorun.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ void ZapReadyToRunHeader::Save(ZapWriter * pZapWriter)
4141
if (pImage->GetCompileInfo()->AreAllClassesFullyLoaded(pImage->GetModuleHandle()))
4242
readyToRunHeader.Flags |= READYTORUN_FLAG_SKIP_TYPE_VALIDATION;
4343

44+
if (pImage->GetZapperOptions()->m_fPartialNGen)
45+
readyToRunHeader.Flags |= READYTORUN_FLAG_PARTIAL;
46+
4447
readyToRunHeader.NumberOfSections = m_Sections.GetCount();
4548

4649
pZapWriter->Write(&readyToRunHeader, sizeof(readyToRunHeader));

0 commit comments

Comments
 (0)