diff options
Diffstat (limited to 'src/debug/daccess/nidump.cpp')
-rw-r--r-- | src/debug/daccess/nidump.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/src/debug/daccess/nidump.cpp b/src/debug/daccess/nidump.cpp index c750969172..7812bd72f0 100644 --- a/src/debug/daccess/nidump.cpp +++ b/src/debug/daccess/nidump.cpp @@ -3486,8 +3486,16 @@ size_t NativeImageDumper::TranslateSymbol(IXCLRDisassemblySupport *dis, #endif // HAS_NDIRECT_IMPORT_PRECODE #ifdef HAS_FIXUP_PRECODE case PRECODE_FIXUP: +#ifdef HAS_RELATIVE_FIXUP_PRECODE + _ASSERTE(!"unreachable"); break; +#else // HAS_RELATIVE_FIXUP_PRECODE precodeName = "FixupPrecode"; break; +#endif // HAS_RELATIVE_FIXUP_PRECODE #endif // HAS_FIXUP_PRECODE +#ifdef HAS_RELATIVE_FIXUP_PRECODE + case PRECODE_RELATIVE_FIXUP: + precodeName = "RelativeFixupPrecode"; break; +#endif // HAS_RELATIVE_FIXUP_PRECODE #ifdef HAS_THISPTR_RETBUF_PRECODE case PRECODE_THISPTR_RETBUF: precodeName = "ThisPtrRetBufPrecode"; break; @@ -7507,6 +7515,9 @@ void NativeImageDumper::DumpPrecode( PTR_Precode precode, PTR_Module module ) #endif #ifdef HAS_FIXUP_PRECODE case PRECODE_FIXUP: +#ifdef HAS_RELATIVE_FIXUP_PRECODE + _ASSERTE(!"unreachable"); break; +#else // HAS_RELATIVE_FIXUP_PRECODE IF_OPT_AND(PRECODES, METHODDESCS) { PTR_FixupPrecode p( precode->AsFixupPrecode() ); @@ -7558,7 +7569,56 @@ void NativeImageDumper::DumpPrecode( PTR_Precode precode, PTR_Module module ) DisplayEndStructure( ALWAYS ); //FixupPrecode } break; -#endif +#endif // HAS_RELATIVE_FIXUP_PRECODE +#endif // HAS_FIXUP_PRECODE +#ifdef HAS_RELATIVE_FIXUP_PRECODE + case PRECODE_RELATIVE_FIXUP: + IF_OPT_AND(PRECODES, METHODDESCS) + { + PTR_RelativeFixupPrecode p( precode->AsRelativeFixupPrecode() ); + DisplayStartStructure( "RelativeFixupPrecode", + DPtrToPreferredAddr(p), + sizeof(*p), + ALWAYS ); + PTR_MethodDesc precodeMD(p->GetMethodDesc()); + { + DisplayWriteFieldInt( m_MethodDescChunkIndex, + p->m_MethodDescChunkIndex, RelativeFixupPrecode, + ALWAYS ); + DisplayWriteFieldInt( m_PrecodeChunkIndex, + p->m_PrecodeChunkIndex, RelativeFixupPrecode, + ALWAYS ); + if( p->m_PrecodeChunkIndex == 0 ) + { + //dump the location of the Base + DisplayWriteElementAddress( "PrecodeChunkBase", + DataPtrToDisplay(p->GetBase()), + sizeof(void*), ALWAYS ); + } + //Make sure I align up if there is no code slot to make + //sure that I get the padding + TADDR mdPtrStart = p->GetBase() + + (p->m_MethodDescChunkIndex * MethodDesc::ALIGNMENT); + TADDR mdPtrEnd = ALIGN_UP( mdPtrStart + sizeof(MethodDesc*), + 8 ); + CoverageRead( mdPtrStart, (ULONG32)(mdPtrEnd - mdPtrStart) ); + TADDR precodeMDSlot = p->GetBase() + + p->m_MethodDescChunkIndex * MethodDesc::ALIGNMENT; + DoWriteFieldMethodDesc( "MethodDesc", + (DWORD)(precodeMDSlot - PTR_TO_TADDR(p)), + sizeof(TADDR), precodeMD ); + } + TADDR target = p->GetTarget(); + DisplayWriteElementPointer("Target", + DataPtrToDisplay(target), + ALWAYS ); + /* REVISIT_TODO Thu 01/05/2006 + * dump slot with offset if it is here + */ + DisplayEndStructure( ALWAYS ); //RelativeFixupPrecode + } + break; +#endif // HAS_RELATIVE_FIXUP_PRECODE #ifdef HAS_THISPTR_RETBUF_PRECODE case PRECODE_THISPTR_RETBUF: DISPLAY_PRECODE(ThisPtrRetBufPrecode); break; |