#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;
#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() );
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;