diff options
Diffstat (limited to 'src/gcdump')
-rw-r--r-- | src/gcdump/gcdump.cpp | 2 | ||||
-rw-r--r-- | src/gcdump/gcdumpnonx86.cpp | 4 | ||||
-rw-r--r-- | src/gcdump/i386/gcdumpx86.cpp | 26 |
3 files changed, 25 insertions, 7 deletions
diff --git a/src/gcdump/gcdump.cpp b/src/gcdump/gcdump.cpp index 1c512c88e0..c89dd6ce17 100644 --- a/src/gcdump/gcdump.cpp +++ b/src/gcdump/gcdump.cpp @@ -11,7 +11,9 @@ * to the standard code-manager spec. */ +#ifndef FEATURE_PAL #include "utilcode.h" // For _ASSERTE() +#endif //!FEATURE_PAL #include "gcdump.h" /*****************************************************************************/ diff --git a/src/gcdump/gcdumpnonx86.cpp b/src/gcdump/gcdumpnonx86.cpp index 7343ac9771..ca8cc75792 100644 --- a/src/gcdump/gcdumpnonx86.cpp +++ b/src/gcdump/gcdumpnonx86.cpp @@ -505,7 +505,7 @@ size_t GCDump::DumpGCTable(PTR_CBYTE gcInfoBlock, /*****************************************************************************/ -void GCDump::DumpPtrsInFrame(PTR_CBYTE infoBlock, +void GCDump::DumpPtrsInFrame(PTR_CBYTE gcInfoBlock, PTR_CBYTE codeBlock, unsigned offs, bool verifyGCTables) @@ -520,7 +520,7 @@ void GCDump::DumpPtrsInFrame(PTR_CBYTE infoBlock, #define LOG(x) ((void)0) #endif -#define GCINFODECODER_CONTRACT(contract) +#define GCINFODECODER_CONTRACT ((void)0) #define GET_CALLER_SP(pREGDISPLAY) ((size_t)GetSP(pREGDISPLAY->pCallerContext)) #define VALIDATE_OBJECTREF(objref, fDeep) ((void)0) #define VALIDATE_ROOT(isInterior, hCallBack, pObjRef) ((void)0) diff --git a/src/gcdump/i386/gcdumpx86.cpp b/src/gcdump/i386/gcdumpx86.cpp index 70334dee65..23e6c6834b 100644 --- a/src/gcdump/i386/gcdumpx86.cpp +++ b/src/gcdump/i386/gcdumpx86.cpp @@ -9,7 +9,9 @@ #ifdef _TARGET_X86_ /*****************************************************************************/ +#ifndef FEATURE_PAL #include "utilcode.h" // For _ASSERTE() +#endif //!FEATURE_PAL #include "gcdump.h" @@ -60,12 +62,13 @@ const char * CalleeSavedRegName(unsigned reg) /*****************************************************************************/ -unsigned GCDump::DumpInfoHdr (PTR_CBYTE table, +unsigned GCDump::DumpInfoHdr (PTR_CBYTE gcInfoBlock, InfoHdr* header, unsigned * methodSize, bool verifyGCTables) { unsigned count; + PTR_CBYTE table = gcInfoBlock; PTR_CBYTE tableStart = table; PTR_CBYTE bp = table; @@ -76,7 +79,7 @@ unsigned GCDump::DumpInfoHdr (PTR_CBYTE table, table += decodeUnsigned(table, methodSize); - table = decodeHeader(table, header); + table = decodeHeader(table, gcInfoVersion, header); BOOL hasArgTabOffset = FALSE; if (header->untrackedCnt == HAS_UNTRACKED) @@ -107,6 +110,12 @@ unsigned GCDump::DumpInfoHdr (PTR_CBYTE table, header->syncEndOffset = count; } + if (header->revPInvokeOffset == HAS_REV_PINVOKE_FRAME_OFFSET) + { + table += decodeUnsigned(table, &count); + header->revPInvokeOffset = count; + } + // // First print out all the basic information // @@ -931,12 +940,12 @@ DONE_REGTAB: /*****************************************************************************/ -void GCDump::DumpPtrsInFrame(PTR_CBYTE infoBlock, +void GCDump::DumpPtrsInFrame(PTR_CBYTE gcInfoBlock, PTR_CBYTE codeBlock, unsigned offs, bool verifyGCTables) { - PTR_CBYTE table = infoBlock; + PTR_CBYTE table = gcInfoBlock; size_t methodSize; size_t stackSize; @@ -963,7 +972,7 @@ void GCDump::DumpPtrsInFrame(PTR_CBYTE infoBlock, // Typically only uses one-byte to store everything. // InfoHdr header; - table = decodeHeader(table, &header); + table = decodeHeader(table, gcInfoVersion, &header); if (header.untrackedCnt == HAS_UNTRACKED) { @@ -994,6 +1003,13 @@ void GCDump::DumpPtrsInFrame(PTR_CBYTE infoBlock, header.syncEndOffset = offset; _ASSERTE(offset != INVALID_SYNC_OFFSET); } + if (header.revPInvokeOffset == HAS_REV_PINVOKE_FRAME_OFFSET) + { + unsigned offset; + table += decodeUnsigned(table, &offset); + header.revPInvokeOffset = offset; + _ASSERTE(offset != INVALID_REV_PINVOKE_OFFSET); + } prologSize = header.prologSize; epilogSize = header.epilogSize; |