diff options
Diffstat (limited to 'src/inc/eetwain.h')
-rw-r--r-- | src/inc/eetwain.h | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/src/inc/eetwain.h b/src/inc/eetwain.h index 6e183c5546..502d181962 100644 --- a/src/inc/eetwain.h +++ b/src/inc/eetwain.h @@ -278,16 +278,16 @@ virtual void * GetGSCookieAddr(PREGDISPLAY pContext, Returns true if the given IP is in the given method's prolog or an epilog. */ virtual bool IsInPrologOrEpilog(DWORD relPCOffset, - PTR_VOID methodInfoPtr, + GCInfoToken gcInfoToken, size_t* prologSize) = 0; /* Returns true if the given IP is in the synchronized region of the method (valid for synchronized methods only) */ virtual bool IsInSynchronizedRegion( - DWORD relOffset, - PTR_VOID methodInfoPtr, - unsigned flags) = 0; + DWORD relOffset, + GCInfoToken gcInfoToken, + unsigned flags) = 0; /* Returns the size of a given function as reported in the GC info (does @@ -297,9 +297,15 @@ virtual bool IsInSynchronizedRegion( virtual size_t GetFunctionSize(GCInfoToken gcInfoToken) = 0; /* +Returns the ReturnKind of a given function as reported in the GC info. +*/ + +virtual ReturnKind GetReturnKind(GCInfoToken gcInfotoken) = 0; + +/* Returns the size of the frame (barring localloc) */ -virtual unsigned int GetFrameSize(PTR_VOID methodInfoPtr) = 0; +virtual unsigned int GetFrameSize(GCInfoToken gcInfoToken) = 0; #ifndef DACCESS_COMPILE @@ -307,16 +313,16 @@ virtual unsigned int GetFrameSize(PTR_VOID methodInfoPtr) = 0; virtual const BYTE* GetFinallyReturnAddr(PREGDISPLAY pReg)=0; -virtual BOOL IsInFilter(void *methodInfoPtr, +virtual BOOL IsInFilter(GCInfoToken gcInfoToken, unsigned offset, PCONTEXT pCtx, DWORD curNestLevel) = 0; -virtual BOOL LeaveFinally(void *methodInfoPtr, +virtual BOOL LeaveFinally(GCInfoToken gcInfoToken, unsigned offset, PCONTEXT pCtx) = 0; -virtual void LeaveCatch(void *methodInfoPtr, +virtual void LeaveCatch(GCInfoToken gcInfoToken, unsigned offset, PCONTEXT pCtx)=0; @@ -535,18 +541,18 @@ void * GetGSCookieAddr(PREGDISPLAY pContext, */ virtual bool IsInPrologOrEpilog( - DWORD relOffset, - PTR_VOID methodInfoPtr, - size_t* prologSize); + DWORD relOffset, + GCInfoToken gcInfoToken, + size_t* prologSize); /* Returns true if the given IP is in the synchronized region of the method (valid for synchronized functions only) */ virtual bool IsInSynchronizedRegion( - DWORD relOffset, - PTR_VOID methodInfoPtr, - unsigned flags); + DWORD relOffset, + GCInfoToken gcInfoToken, + unsigned flags); /* Returns the size of a given function. @@ -555,23 +561,27 @@ virtual size_t GetFunctionSize(GCInfoToken gcInfoToken); /* +Returns the ReturnKind of a given function. +*/ +virtual ReturnKind GetReturnKind(GCInfoToken gcInfotoken); + +/* Returns the size of the frame (barring localloc) */ virtual -unsigned int GetFrameSize( - PTR_VOID methodInfoPtr); +unsigned int GetFrameSize(GCInfoToken gcInfoToken); #ifndef DACCESS_COMPILE virtual const BYTE* GetFinallyReturnAddr(PREGDISPLAY pReg); -virtual BOOL LeaveFinally(void *methodInfoPtr, +virtual BOOL LeaveFinally(GCInfoToken gcInfoToken, unsigned offset, PCONTEXT pCtx); -virtual BOOL IsInFilter(void *methodInfoPtr, +virtual BOOL IsInFilter(GCInfoToken gcInfoToken, unsigned offset, PCONTEXT pCtx, DWORD curNestLevel); -virtual void LeaveCatch(void *methodInfoPtr, +virtual void LeaveCatch(GCInfoToken gcInfoToken, unsigned offset, PCONTEXT pCtx); @@ -646,8 +656,9 @@ struct hdrInfo { unsigned int methodSize; // native code bytes unsigned int argSize; // in bytes - unsigned int stackSize; /* including callee saved registers */ - unsigned int rawStkSize; /* excluding callee saved registers */ + unsigned int stackSize; // including callee saved registers + unsigned int rawStkSize; // excluding callee saved registers + ReturnKind returnKind; // The ReturnKind for this method. unsigned int prologSize; @@ -689,6 +700,7 @@ struct hdrInfo unsigned int syncStartOffset; // start/end code offset of the protected region in synchronized methods. unsigned int syncEndOffset; // INVALID_SYNC_OFFSET if there not synchronized method unsigned int syncEpilogStart; // The start of the epilog. Synchronized methods are guaranteed to have no more than one epilog. + unsigned int revPInvokeOffset; // INVALID_REV_PINVOKE_OFFSET if there is no Reverse PInvoke frame enum { NOT_IN_PROLOG = -1, NOT_IN_EPILOG = -1 }; |