[Tizen] Add RelativeFixupPrecode for arm64, which replaces FixupPrecode in FNV images
[platform/upstream/coreclr.git] / src / debug / daccess / nidump.cpp
index c750969..7812bd7 100644 (file)
@@ -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;