diff --git a/src/coreclr/jit/CMakeLists.txt b/src/coreclr/jit/CMakeLists.txt index b33141771fd912..1d8e8645f50462 100644 --- a/src/coreclr/jit/CMakeLists.txt +++ b/src/coreclr/jit/CMakeLists.txt @@ -251,6 +251,10 @@ if (CLR_CMAKE_TARGET_WIN32) vartype.h ) + # Append clrjit.natvis file + list (APPEND JIT_SOURCES + clrjit.natvis) + if (CLR_CMAKE_TARGET_ARCH_ARM64 OR CLR_CMAKE_TARGET_ARCH_ARM) list (APPEND JIT_HEADERS emitarm.h @@ -362,6 +366,15 @@ convert_to_absolute_path(JIT_ARM_SOURCES ${JIT_ARM_SOURCES}) convert_to_absolute_path(JIT_I386_SOURCES ${JIT_I386_SOURCES}) convert_to_absolute_path(JIT_ARM64_SOURCES ${JIT_ARM64_SOURCES}) +# Include natvis file for Windows +if (CLR_CMAKE_HOST_WIN32) + set(JIT_NATVIS_SOURCE + clrjit.natvis + ) + convert_to_absolute_path(JIT_NATVIS_SOURCE ${JIT_NATVIS_SOURCE}) + add_linker_flag("/NATVIS:${JIT_NATVIS_SOURCE}") +endif(CLR_CMAKE_HOST_WIN32) + set(JIT_DLL_MAIN_FILE ${CMAKE_CURRENT_LIST_DIR}/dllmain.cpp) if(CLR_CMAKE_TARGET_WIN32) diff --git a/src/coreclr/jit/clrjit.natvis b/src/coreclr/jit/clrjit.natvis new file mode 100644 index 00000000000000..c242727719bc8f --- /dev/null +++ b/src/coreclr/jit/clrjit.natvis @@ -0,0 +1,134 @@ + + + + + + + + + [{info.compFullName,sb} ({info.compMethodHashPrivate,x})] + info.compFullName,sb + + + + BB{bbNum,d}->BB{bbJumpDest->bbNum,d}; {bbJumpKind,en} + BB{bbNum,d}; {bbJumpKind,en} + + + + type={ebdHandlerType} + + + + + [{gtOper,en}, {gtType,en}}] + + + [IntCon={((GenTreeIntCon*)this)->gtIconVal, d}] + + + [DblCon={((GenTreeDblCon*)this)->gtDconVal, g}] + + + CNS_STR + + + [LngCon={((GenTreeLngCon*)this)->gtLconVal, l}] + + + [{this->gtOp1,na}={this->gtOp2,na}] + [{((GenTreeCast*)this)->gtCastType,en} <- {((GenTreeUnOp*)this)->gtOp1->gtType,en}] + [{gtOper,en}, {gtType,en}] + + + + [{lvType,en}] + [{lvType,en}-{lvReason,s}] + + + + [{gtOper,en}, {gtType,en} V{((GenTreeLclVar*)this)->_gtLclNum,u}] + + + + + LinearScan + + this->m_AvailableRegs + + + + + ((regNumber)regIndex),en + regIndex++ + reg = reg >> 1 + + + this->m_RegistersWithConstants + + + + + ((regNumber)regIndex),en + regIndex++ + reg = reg >> 1 + + + + + + + [#{rpNum,d} - {refType,en}] + + (RegRecord*)this->referent + (Interval*)this->referent + + + + + ((regNumber)regIndex),en + regIndex++ + reg = reg >> 1 + + + + + + + [V{this->varNum,d}, #{this->intervalIndex, d}, reg={(regNumber)physReg, en}] + [C{this->intervalIndex, d}, reg={(regNumber)physReg, en}] + [I{this->intervalIndex, d}, reg={(regNumber)physReg, en}] + + + + [reg={((regNumber)regNum),en}, type={registerType, en}] + + assignedInterval + previousInterval + + + + + + IG{igNum,d} [extend] + IG{igNum,d} + + + + + Size={m_nSize} + Empty + + + m_nSize + this->m_pHead + this->m_pNext + this->m_value + + + + +