Skip to content

Commit 6f563b3

Browse files
authored
Add support for storing method handle histograms in profiles (#67919)
Allow method handle histograms in .mibc files and in the PGO text format. Contributes to #44610.
1 parent 719737e commit 6f563b3

File tree

26 files changed

+543
-183
lines changed

26 files changed

+543
-183
lines changed

src/coreclr/inc/corjit.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ class ICorJitInfo : public ICorDynamicInfo
368368
FourByte = 1,
369369
EightByte = 2,
370370
TypeHandle = 3,
371+
MethodHandle = 4,
371372

372373
// Mask of all schema data types
373374
MarshalMask = 0xF,
@@ -385,9 +386,10 @@ class ICorJitInfo : public ICorDynamicInfo
385386
Done = None, // All instrumentation schemas must end with a record which is "Done"
386387
BasicBlockIntCount = (DescriptorMin * 1) | FourByte, // basic block counter using unsigned 4 byte int
387388
BasicBlockLongCount = (DescriptorMin * 1) | EightByte, // basic block counter using unsigned 8 byte int
388-
TypeHandleHistogramIntCount = (DescriptorMin * 2) | FourByte | AlignPointer, // 4 byte counter that is part of a type histogram. Aligned to match ClassProfile32's alignment.
389-
TypeHandleHistogramLongCount = (DescriptorMin * 2) | EightByte, // 8 byte counter that is part of a type histogram
390-
TypeHandleHistogramTypeHandle = (DescriptorMin * 3) | TypeHandle, // TypeHandle that is part of a type histogram
389+
HandleHistogramIntCount = (DescriptorMin * 2) | FourByte | AlignPointer, // 4 byte counter that is part of a type histogram. Aligned to match ClassProfile32's alignment.
390+
HandleHistogramLongCount = (DescriptorMin * 2) | EightByte, // 8 byte counter that is part of a type histogram
391+
HandleHistogramTypes = (DescriptorMin * 3) | TypeHandle, // Histogram of type handles
392+
HandleHistogramMethods = (DescriptorMin * 3) | MethodHandle, // Histogram of method handles
391393
Version = (DescriptorMin * 4) | None, // Version is encoded in the Other field of the schema
392394
NumRuns = (DescriptorMin * 5) | None, // Number of runs is encoded in the Other field of the schema
393395
EdgeIntCount = (DescriptorMin * 6) | FourByte, // edge counter using unsigned 4 byte int
@@ -416,12 +418,12 @@ class ICorJitInfo : public ICorDynamicInfo
416418
};
417419

418420
#define DEFAULT_UNKNOWN_TYPEHANDLE 1
419-
#define UNKNOWN_TYPEHANDLE_MIN 1
420-
#define UNKNOWN_TYPEHANDLE_MAX 33
421+
#define UNKNOWN_HANDLE_MIN 1
422+
#define UNKNOWN_HANDLE_MAX 33
421423

422-
static inline bool IsUnknownTypeHandle(intptr_t typeHandle)
424+
static inline bool IsUnknownHandle(intptr_t handle)
423425
{
424-
return ((typeHandle >= UNKNOWN_TYPEHANDLE_MIN) && (typeHandle <= UNKNOWN_TYPEHANDLE_MAX));
426+
return ((handle >= UNKNOWN_HANDLE_MIN) && (handle <= UNKNOWN_HANDLE_MAX));
425427
}
426428

427429
// get profile information to be used for optimizing a current method. The format

src/coreclr/inc/eventtracebase.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -939,7 +939,7 @@ namespace ETW
939939
static VOID MethodRestored(MethodDesc * pMethodDesc);
940940
static VOID MethodTableRestored(MethodTable * pMethodTable);
941941
static VOID DynamicMethodDestroyed(MethodDesc *pMethodDesc);
942-
static VOID LogMethodInstrumentationData(MethodDesc* method, uint32_t cbData, BYTE *data, TypeHandle* pTypeHandles, uint32_t typeHandles);
942+
static VOID LogMethodInstrumentationData(MethodDesc* method, uint32_t cbData, BYTE *data, TypeHandle* pTypeHandles, uint32_t numTypeHandles, MethodDesc** pMethods, uint32_t numMethods);
943943
#else // FEATURE_EVENT_TRACE
944944
public:
945945
static VOID GetR2RGetEntryPointStart(MethodDesc *pMethodDesc) {};
@@ -951,7 +951,7 @@ namespace ETW
951951
static VOID MethodRestored(MethodDesc * pMethodDesc) {};
952952
static VOID MethodTableRestored(MethodTable * pMethodTable) {};
953953
static VOID DynamicMethodDestroyed(MethodDesc *pMethodDesc) {};
954-
static VOID LogMethodInstrumentationData(MethodDesc* method, uint32_t cbData, BYTE *data, TypeHandle* pTypeHandles, uint32_t typeHandles) {};
954+
static VOID LogMethodInstrumentationData(MethodDesc* method, uint32_t cbData, BYTE *data, TypeHandle* pTypeHandles, uint32_t numTypeHandles, MethodDesc** pMethods, uint32_t numMethods) {};
955955
#endif // FEATURE_EVENT_TRACE
956956
};
957957

src/coreclr/inc/jiteeversionguid.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ typedef const GUID *LPCGUID;
4343
#define GUID_DEFINED
4444
#endif // !GUID_DEFINED
4545

46-
constexpr GUID JITEEVersionIdentifier = { /* b0719856-6fe6-407c-bf40-7a57e22b2382 */
47-
0xb0719856,
48-
0x6fe6,
49-
0x407c,
50-
{0xbf, 0x40, 0x7a, 0x57, 0xe2, 0x2b, 0x23, 0x82}
46+
constexpr GUID JITEEVersionIdentifier = { /* 7503fe09-4852-40f6-829a-ff91402c9604 */
47+
0x7503fe09,
48+
0x4852,
49+
0x40f6,
50+
{0x82, 0x9a, 0xff, 0x91, 0x40, 0x2c, 0x96, 0x04}
5151
};
5252

5353
//////////////////////////////////////////////////////////////////////////////////////////////////////////

src/coreclr/inc/pgo_formatprocessing.h

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,7 @@
88

99
#ifdef FEATURE_PGO
1010

11-
inline bool AddTypeHandleToUnknownTypeHandleMask(INT_PTR typeHandle, uint32_t *unknownTypeHandleMask)
12-
{
13-
uint32_t bitMask = (uint32_t)(1 << (typeHandle - UNKNOWN_TYPEHANDLE_MIN));
14-
bool result = (bitMask & *unknownTypeHandleMask) == 0;
15-
*unknownTypeHandleMask |= bitMask;
16-
return result;
17-
}
18-
19-
inline INT_PTR HashToPgoUnknownTypeHandle(uint32_t hash)
11+
inline INT_PTR HashToPgoUnknownHandle(uint32_t hash)
2012
{
2113
// Map from a 32bit hash to the 32 different unknown type handle values
2214
return (hash & 0x1F) + 1;
@@ -53,6 +45,7 @@ inline uint32_t InstrumentationKindToSize(ICorJitInfo::PgoInstrumentationKind ki
5345
case ICorJitInfo::PgoInstrumentationKind::EightByte:
5446
return 8;
5547
case ICorJitInfo::PgoInstrumentationKind::TypeHandle:
48+
case ICorJitInfo::PgoInstrumentationKind::MethodHandle:
5649
return TARGET_POINTER_SIZE;
5750
default:
5851
_ASSERTE(FALSE);
@@ -242,6 +235,7 @@ bool ReadInstrumentationData(const uint8_t *pByte, size_t cbDataMax, SchemaAndDa
242235
bool done = false;
243236
int64_t lastDataValue = 0;
244237
int64_t lastTypeDataValue = 0;
238+
int64_t lastMethodDataValue = 0;
245239
int32_t dataCountToRead = 0;
246240

247241
ReadCompressedInts(pByte, cbDataMax, [&](int64_t curValue)
@@ -267,8 +261,16 @@ bool ReadInstrumentationData(const uint8_t *pByte, size_t cbDataMax, SchemaAndDa
267261
return false;
268262
}
269263
break;
264+
case ICorJitInfo::PgoInstrumentationKind::MethodHandle:
265+
lastMethodDataValue += curValue;
266+
267+
if (!handler(schemaHandler.GetSchema(), lastMethodDataValue, schemaHandler.GetSchema().Count - dataCountToRead))
268+
{
269+
return false;
270+
}
271+
break;
270272
default:
271-
assert(false);
273+
assert(!"Unexpected PGO instrumentation data type");
272274
break;
273275
}
274276
dataCountToRead--;
@@ -516,6 +518,7 @@ class SchemaAndDataWriter
516518
ICorJitInfo::PgoInstrumentationSchema prevSchema = {};
517519
int64_t lastIntDataWritten = 0;
518520
int64_t lastTypeDataWritten = 0;
521+
int64_t lastMethodDataWritten = 0;
519522

520523
public:
521524
SchemaAndDataWriter(const ByteWriter& byteWriter, uint8_t* pInstrumentationData) :
@@ -532,8 +535,8 @@ class SchemaAndDataWriter
532535
return true;
533536
}
534537

535-
template<class TypeHandleProcessor>
536-
bool AppendDataFromLastSchema(TypeHandleProcessor& thProcessor)
538+
template<class TypeHandleProcessor, class MethodHandleProcessor>
539+
bool AppendDataFromLastSchema(TypeHandleProcessor& thProcessor, MethodHandleProcessor& mhProcessor)
537540
{
538541
uint8_t *pData = (pInstrumentationData + prevSchema.Offset);
539542
for (int32_t iDataElem = 0; iDataElem < prevSchema.Count; iDataElem++)
@@ -577,6 +580,20 @@ class SchemaAndDataWriter
577580
pData += sizeof(intptr_t);
578581
break;
579582
}
583+
case ICorJitInfo::PgoInstrumentationKind::MethodHandle:
584+
{
585+
logicalDataToWrite = *(volatile intptr_t*)pData;
586+
587+
// As there could be tearing otherwise, inform the caller of exactly what value was written.
588+
mhProcessor(logicalDataToWrite);
589+
590+
bool returnValue = WriteCompressedIntToBytes(logicalDataToWrite - lastMethodDataWritten, byteWriter);
591+
lastMethodDataWritten = logicalDataToWrite;
592+
if (!returnValue)
593+
return false;
594+
pData += sizeof(intptr_t);
595+
break;
596+
}
580597
default:
581598
_ASSERTE(!"Unexpected type");
582599
return false;

src/coreclr/inc/readytorun.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
// Keep these in sync with src/coreclr/tools/Common/Internal/Runtime/ModuleHeaders.cs
1818
#define READYTORUN_MAJOR_VERSION 0x0006
19-
#define READYTORUN_MINOR_VERSION 0x0000
19+
#define READYTORUN_MINOR_VERSION 0x0001
2020

2121
#define MINIMUM_READYTORUN_MAJOR_VERSION 0x006
2222

src/coreclr/jit/compiler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5451,6 +5451,7 @@ class Compiler
54515451
UINT32 fgPgoBlockCounts;
54525452
UINT32 fgPgoEdgeCounts;
54535453
UINT32 fgPgoClassProfiles;
5454+
UINT32 fgPgoMethodProfiles;
54545455
unsigned fgPgoInlineePgo;
54555456
unsigned fgPgoInlineeNoPgo;
54565457
unsigned fgPgoInlineeNoPgoSingleBlock;

src/coreclr/jit/fgbasic.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ void Compiler::fgInit()
180180
fgPgoBlockCounts = 0;
181181
fgPgoEdgeCounts = 0;
182182
fgPgoClassProfiles = 0;
183+
fgPgoMethodProfiles = 0;
183184
fgPgoInlineePgo = 0;
184185
fgPgoInlineeNoPgo = 0;
185186
fgPgoInlineeNoPgoSingleBlock = 0;

src/coreclr/jit/fgprofile.cpp

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,15 +1495,15 @@ class BuildClassProbeSchemaGen
14951495
}
14961496

14971497
schemaElem.InstrumentationKind = JitConfig.JitCollect64BitCounts()
1498-
? ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramLongCount
1499-
: ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramIntCount;
1498+
? ICorJitInfo::PgoInstrumentationKind::HandleHistogramLongCount
1499+
: ICorJitInfo::PgoInstrumentationKind::HandleHistogramIntCount;
15001500
schemaElem.ILOffset = (int32_t)call->gtClassProfileCandidateInfo->ilOffset;
15011501
schemaElem.Offset = 0;
15021502

15031503
m_schema.push_back(schemaElem);
15041504

15051505
// Re-using ILOffset and Other fields from schema item for TypeHandleHistogramCount
1506-
schemaElem.InstrumentationKind = ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramTypeHandle;
1506+
schemaElem.InstrumentationKind = ICorJitInfo::PgoInstrumentationKind::HandleHistogramTypes;
15071507
schemaElem.Count = ICorJitInfo::ClassProfile32::SIZE;
15081508
m_schema.push_back(schemaElem);
15091509

@@ -1550,9 +1550,9 @@ class ClassProbeInserter
15501550
//
15511551
assert(m_schema[*m_currentSchemaIndex].ILOffset == (int32_t)call->gtClassProfileCandidateInfo->ilOffset);
15521552
bool is32 = m_schema[*m_currentSchemaIndex].InstrumentationKind ==
1553-
ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramIntCount;
1553+
ICorJitInfo::PgoInstrumentationKind::HandleHistogramIntCount;
15541554
bool is64 = m_schema[*m_currentSchemaIndex].InstrumentationKind ==
1555-
ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramLongCount;
1555+
ICorJitInfo::PgoInstrumentationKind::HandleHistogramLongCount;
15561556
assert(is32 || is64);
15571557

15581558
// Figure out where the table is located.
@@ -2048,12 +2048,32 @@ PhaseStatus Compiler::fgIncorporateProfileData()
20482048
fgPgoEdgeCounts++;
20492049
break;
20502050

2051-
case ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramIntCount:
2052-
case ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramLongCount:
20532051
case ICorJitInfo::PgoInstrumentationKind::GetLikelyClass:
20542052
fgPgoClassProfiles++;
20552053
break;
20562054

2055+
case ICorJitInfo::PgoInstrumentationKind::HandleHistogramIntCount:
2056+
case ICorJitInfo::PgoInstrumentationKind::HandleHistogramLongCount:
2057+
if (iSchema + 1 < fgPgoSchemaCount)
2058+
{
2059+
if (fgPgoSchema[iSchema + 1].InstrumentationKind ==
2060+
ICorJitInfo::PgoInstrumentationKind::HandleHistogramTypes)
2061+
{
2062+
fgPgoClassProfiles++;
2063+
iSchema++;
2064+
break;
2065+
}
2066+
if (fgPgoSchema[iSchema + 1].InstrumentationKind ==
2067+
ICorJitInfo::PgoInstrumentationKind::HandleHistogramMethods)
2068+
{
2069+
fgPgoMethodProfiles++;
2070+
iSchema++;
2071+
break;
2072+
}
2073+
}
2074+
2075+
__fallthrough;
2076+
20572077
default:
20582078
JITDUMP("Unknown PGO record type 0x%x in schema entry %u (offset 0x%x count 0x%x other 0x%x)\n",
20592079
fgPgoSchema[iSchema].InstrumentationKind, iSchema, fgPgoSchema[iSchema].ILOffset,
@@ -2068,8 +2088,9 @@ PhaseStatus Compiler::fgIncorporateProfileData()
20682088
fgNumProfileRuns = 1;
20692089
}
20702090

2071-
JITDUMP("Profile summary: %d runs, %d block probes, %d edge probes, %d class profiles, %d other records\n",
2072-
fgNumProfileRuns, fgPgoBlockCounts, fgPgoEdgeCounts, fgPgoClassProfiles, otherRecords);
2091+
JITDUMP("Profile summary: %d runs, %d block probes, %d edge probes, %d class profiles, %d method profiles, %d "
2092+
"other records\n",
2093+
fgNumProfileRuns, fgPgoBlockCounts, fgPgoEdgeCounts, fgPgoClassProfiles, fgPgoMethodProfiles, otherRecords);
20732094

20742095
const bool haveBlockCounts = fgPgoBlockCounts > 0;
20752096
const bool haveEdgeCounts = fgPgoEdgeCounts > 0;

src/coreclr/jit/likelyclass.cpp

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ extern "C" DLLEXPORT UINT32 WINAPI getLikelyClasses(LikelyClassRecord*
157157
(schema[i].Count == 1))
158158
{
159159
INT_PTR result = *(INT_PTR*)(pInstrumentationData + schema[i].Offset);
160-
if (ICorJitInfo::IsUnknownTypeHandle(result))
160+
if (ICorJitInfo::IsUnknownHandle(result))
161161
{
162162
return 0;
163163
}
@@ -168,11 +168,11 @@ extern "C" DLLEXPORT UINT32 WINAPI getLikelyClasses(LikelyClassRecord*
168168
}
169169

170170
const bool isHistogramCount =
171-
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramIntCount) ||
172-
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramLongCount);
171+
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::HandleHistogramIntCount) ||
172+
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::HandleHistogramLongCount);
173173

174174
if (isHistogramCount && (schema[i].Count == 1) && ((i + 1) < countSchemaItems) &&
175-
(schema[i + 1].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramTypeHandle))
175+
(schema[i + 1].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::HandleHistogramTypes))
176176
{
177177
// Form a histogram
178178
//
@@ -191,7 +191,7 @@ extern "C" DLLEXPORT UINT32 WINAPI getLikelyClasses(LikelyClassRecord*
191191
{
192192
LikelyClassHistogramEntry const hist0 = h.HistogramEntryAt(0);
193193
// Fast path for monomorphic cases
194-
if (ICorJitInfo::IsUnknownTypeHandle(hist0.m_mt))
194+
if (ICorJitInfo::IsUnknownHandle(hist0.m_mt))
195195
{
196196
return 0;
197197
}
@@ -205,12 +205,12 @@ extern "C" DLLEXPORT UINT32 WINAPI getLikelyClasses(LikelyClassRecord*
205205
LikelyClassHistogramEntry const hist0 = h.HistogramEntryAt(0);
206206
LikelyClassHistogramEntry const hist1 = h.HistogramEntryAt(1);
207207
// Fast path for two classes
208-
if ((hist0.m_count >= hist1.m_count) && !ICorJitInfo::IsUnknownTypeHandle(hist0.m_mt))
208+
if ((hist0.m_count >= hist1.m_count) && !ICorJitInfo::IsUnknownHandle(hist0.m_mt))
209209
{
210210
pLikelyClasses[0].likelihood = (100 * hist0.m_count) / h.m_totalCount;
211211
pLikelyClasses[0].clsHandle = (CORINFO_CLASS_HANDLE)hist0.m_mt;
212212

213-
if ((maxLikelyClasses > 1) && !ICorJitInfo::IsUnknownTypeHandle(hist1.m_mt))
213+
if ((maxLikelyClasses > 1) && !ICorJitInfo::IsUnknownHandle(hist1.m_mt))
214214
{
215215
pLikelyClasses[1].likelihood = (100 * hist1.m_count) / h.m_totalCount;
216216
pLikelyClasses[1].clsHandle = (CORINFO_CLASS_HANDLE)hist1.m_mt;
@@ -219,12 +219,12 @@ extern "C" DLLEXPORT UINT32 WINAPI getLikelyClasses(LikelyClassRecord*
219219
return 1;
220220
}
221221

222-
if (!ICorJitInfo::IsUnknownTypeHandle(hist1.m_mt))
222+
if (!ICorJitInfo::IsUnknownHandle(hist1.m_mt))
223223
{
224224
pLikelyClasses[0].likelihood = (100 * hist1.m_count) / h.m_totalCount;
225225
pLikelyClasses[0].clsHandle = (CORINFO_CLASS_HANDLE)hist1.m_mt;
226226

227-
if ((maxLikelyClasses > 1) && !ICorJitInfo::IsUnknownTypeHandle(hist0.m_mt))
227+
if ((maxLikelyClasses > 1) && !ICorJitInfo::IsUnknownHandle(hist0.m_mt))
228228
{
229229
pLikelyClasses[1].likelihood = (100 * hist0.m_count) / h.m_totalCount;
230230
pLikelyClasses[1].clsHandle = (CORINFO_CLASS_HANDLE)hist0.m_mt;
@@ -244,7 +244,7 @@ extern "C" DLLEXPORT UINT32 WINAPI getLikelyClasses(LikelyClassRecord*
244244
for (unsigned m = 0; m < h.countHistogramElements; m++)
245245
{
246246
LikelyClassHistogramEntry const hist = h.HistogramEntryAt(m);
247-
if (!ICorJitInfo::IsUnknownTypeHandle(hist.m_mt))
247+
if (!ICorJitInfo::IsUnknownHandle(hist.m_mt))
248248
{
249249
sortedEntries[knownHandles++] = hist;
250250
}
@@ -311,7 +311,7 @@ CORINFO_CLASS_HANDLE Compiler::getRandomClass(ICorJitInfo::PgoInstrumentationSch
311311
(schema[i].Count == 1))
312312
{
313313
INT_PTR result = *(INT_PTR*)(pInstrumentationData + schema[i].Offset);
314-
if (ICorJitInfo::IsUnknownTypeHandle(result))
314+
if (ICorJitInfo::IsUnknownHandle(result))
315315
{
316316
return NO_CLASS_HANDLE;
317317
}
@@ -322,11 +322,11 @@ CORINFO_CLASS_HANDLE Compiler::getRandomClass(ICorJitInfo::PgoInstrumentationSch
322322
}
323323

324324
bool isHistogramCount =
325-
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramIntCount) ||
326-
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramLongCount);
325+
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::HandleHistogramIntCount) ||
326+
(schema[i].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::HandleHistogramLongCount);
327327

328328
if (isHistogramCount && (schema[i].Count == 1) && ((i + 1) < countSchemaItems) &&
329-
(schema[i + 1].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::TypeHandleHistogramTypeHandle))
329+
(schema[i + 1].InstrumentationKind == ICorJitInfo::PgoInstrumentationKind::HandleHistogramTypes))
330330
{
331331
// Form a histogram
332332
//
@@ -342,7 +342,7 @@ CORINFO_CLASS_HANDLE Compiler::getRandomClass(ICorJitInfo::PgoInstrumentationSch
342342
unsigned randomEntryIndex = random->Next(0, h.countHistogramElements);
343343
LikelyClassHistogramEntry randomEntry = h.HistogramEntryAt(randomEntryIndex);
344344

345-
if (ICorJitInfo::IsUnknownTypeHandle(randomEntry.m_mt))
345+
if (ICorJitInfo::IsUnknownHandle(randomEntry.m_mt))
346346
{
347347
return NO_CLASS_HANDLE;
348348
}

src/coreclr/tools/Common/Internal/Runtime/ModuleHeaders.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ internal struct ReadyToRunHeaderConstants
1515
public const uint Signature = 0x00525452; // 'RTR'
1616

1717
public const ushort CurrentMajorVersion = 6;
18-
public const ushort CurrentMinorVersion = 0;
18+
public const ushort CurrentMinorVersion = 1;
1919
}
2020

2121
#pragma warning disable 0169

0 commit comments

Comments
 (0)