summaryrefslogtreecommitdiff
path: root/src/inc/eetwain.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/inc/eetwain.h')
-rw-r--r--src/inc/eetwain.h54
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 };