void DumpTieredNativeCodeAddressInfo(struct DacpTieredVersionData * pTieredVersionData, const UINT cTieredVersionData)
{
- ExtOut("Code Version History:\n");
+ ExtOut(" Code Version History:\n");
for(int i = cTieredVersionData - 1; i >= 0; --i)
{
break;
}
- DMLOut(" CodeAddr: %s (%s)\n", DMLIP(pTieredVersionData[i].NativeCodeAddr), descriptor);
- ExtOut(" NativeCodeVersion: %p\n", SOS_PTR(pTieredVersionData[i].NativeCodeVersionNodePtr));
+ DMLOut(" CodeAddr: %s (%s)\n", DMLIP(pTieredVersionData[i].NativeCodeAddr), descriptor);
+ ExtOut(" NativeCodeVersion: %p\n", SOS_PTR(pTieredVersionData[i].NativeCodeVersionNodePtr));
}
}
void DumpRejitData(CLRDATA_ADDRESS pMethodDesc, DacpReJitData * pReJitData)
{
- ExtOut(" ReJITID %p: ", SOS_PTR(pReJitData->rejitID));
+ ExtOut(" ReJITID %p: ", SOS_PTR(pReJitData->rejitID));
struct DacpTieredVersionData codeAddrs[kcMaxTieredVersions];
int cCodeAddrs;
- ReleaseHolder<ISOSDacInterface5> sos5;
- if (SUCCEEDED(g_sos->QueryInterface(__uuidof(ISOSDacInterface5), &sos5)) &&
- SUCCEEDED(sos5->GetTieredVersions(pMethodDesc,
- (int)pReJitData->rejitID,
- codeAddrs,
- kcMaxTieredVersions,
- &cCodeAddrs)))
- {
- DumpTieredNativeCodeAddressInfo(codeAddrs, cCodeAddrs);
- }
-
LPCSTR szFlags;
switch (pReJitData->flags)
{
break;
}
+ ExtOut("%s\n", szFlags);
+
+ ReleaseHolder<ISOSDacInterface5> sos5;
+ if (SUCCEEDED(g_sos->QueryInterface(__uuidof(ISOSDacInterface5), &sos5)) &&
+ SUCCEEDED(sos5->GetTieredVersions(pMethodDesc,
+ (int)pReJitData->rejitID,
+ codeAddrs,
+ kcMaxTieredVersions,
+ &cCodeAddrs)))
+ {
+ DumpTieredNativeCodeAddressInfo(codeAddrs, cCodeAddrs);
+ }
+
struct DacpReJitData2 rejitData;
ReleaseHolder<ISOSDacInterface7> sos7;
if (SUCCEEDED(g_sos->QueryInterface(__uuidof(ISOSDacInterface7), &sos7)) &&
(int)pReJitData->rejitID,
&rejitData)))
{
- DMLOut(" IL Addr: %s\n", DMLIP(rejitData.il));
- ExtOut(" NativeCodeVersion: %p\n", SOS_PTR(rejitData.ilCodeVersionNodePtr));
+ ExtOut(" ReJIT Information:\n");
+ DMLOut(" IL Addr: %s\n", DMLIL(rejitData.il));
+ ExtOut(" ILCodeVersion: %p\n", SOS_PTR(rejitData.ilCodeVersionNodePtr));
}
-
- ExtOut("%s\n", szFlags);
}
// For !ip2md requests, this function helps us ensure that rejitted version corresponding
"<exec cmd=\"!DumpCCW /d %s\">%s</exec>", // DML_CCWrapper
"<exec cmd=\"!ClrStack -i %S %d\">%S</exec>", // DML_ManagedVar
"<exec cmd=\"!DumpAsync -addr %s -tasks -completed -fields -stacks -roots\">%s</exec>", // DML_Async
+ "<exec cmd=\"!DumpIL /i %s\">%s</exec>", // DML_IL
};
void ConvertToLower(__out_ecount(len) char *buffer, size_t len)
DML_CCWrapper,
DML_ManagedVar,
DML_Async,
+ DML_IL,
};
/**********************************************************************\
#define DMLCCWrapper(addr) Output::BuildHexValue(addr, Output::DML_CCWrapper).GetPtr()
#define DMLManagedVar(expansionName,frame,simpleName) Output::BuildManagedVarValue(expansionName, frame, simpleName, Output::DML_ManagedVar).GetPtr()
#define DMLAsync(addr) Output::BuildHexValue(addr, Output::DML_Async).GetPtr()
+#define DMLIL(addr) Output::BuildHexValue(addr, Output::DML_IL).GetPtr()
bool IsDMLEnabled();
DefineFormatClass(RCWrapper, Formats::Pointer, Output::DML_RCWrapper);
DefineFormatClass(CCWrapper, Formats::Pointer, Output::DML_CCWrapper);
DefineFormatClass(InstructionPtr, Formats::Pointer, Output::DML_IP);
+DefineFormatClass(ILPtr, Formats::Pointer, Output::DML_IL);
DefineFormatClass(NativePtr, Formats::Pointer, Output::DML_None);
DefineFormatClass(Decimal, Formats::Decimal, Output::DML_None);