Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Mosier <smosier@microsoft.com>2016-06-15 01:58:38 +0300
committerScott Mosier <smosier@microsoft.com>2016-06-15 01:58:38 +0300
commita0124b03284c2f790a36d1e671c72a6a186b7a7a (patch)
treed0cd5e970391825ee453ccf553df5b204772f919 /src/Native/Runtime/ICodeManager.h
parent1c852985291c3828c169264408f81bbe1fd9c4c7 (diff)
ICodeManager refactoring to support separated funclets
Today, we assume that funclets are separate methods, in the sense that they get unique unwind information, but that's where the separation ends. They are still tightly coupled to their "parent method" in other ways. One of those couplings is the fact that they must be laid out contiguously with the parent method. These changes update the EH dispatcher and the ICodeManager abstraction to allow for funclets to be disconnected from their parent method. This mostly falls into the category of using addresses instead of offsets when referring to handlers and when handling the special case of "remapping" a hardware fault location to a safe point in an associated handler. [tfs-changeset: 1612757]
Diffstat (limited to 'src/Native/Runtime/ICodeManager.h')
-rw-r--r--src/Native/Runtime/ICodeManager.h13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/Native/Runtime/ICodeManager.h b/src/Native/Runtime/ICodeManager.h
index c3be1bcd9..e9c5cc9aa 100644
--- a/src/Native/Runtime/ICodeManager.h
+++ b/src/Native/Runtime/ICodeManager.h
@@ -61,8 +61,8 @@ struct EHClause
EHClauseKind m_clauseKind;
UInt32 m_tryStartOffset;
UInt32 m_tryEndOffset;
- UInt32 m_filterOffset;
- UInt32 m_handlerOffset;
+ UInt8* m_filterAddress;
+ UInt8* m_handlerAddress;
void* m_pTargetType;
};
@@ -81,8 +81,7 @@ class ICodeManager
{
public:
virtual bool FindMethodInfo(PTR_VOID ControlPC,
- MethodInfo * pMethodInfoOut,
- UInt32 * pCodeOffset) = 0;
+ MethodInfo * pMethodInfoOut) = 0;
virtual bool IsFunclet(MethodInfo * pMethodInfo) = 0;
@@ -90,12 +89,11 @@ public:
REGDISPLAY * pRegisterSet) = 0;
virtual void EnumGcRefs(MethodInfo * pMethodInfo,
- UInt32 codeOffset,
+ PTR_VOID safePointAddress,
REGDISPLAY * pRegisterSet,
GCEnumContext * hCallback) = 0;
virtual bool UnwindStackFrame(MethodInfo * pMethodInfo,
- UInt32 codeOffset,
REGDISPLAY * pRegisterSet, // in/out
PTR_VOID * ppPreviousTransitionFrame) = 0; // out
@@ -103,14 +101,13 @@ public:
REGDISPLAY * pRegisterSet) = 0;
virtual bool GetReturnAddressHijackInfo(MethodInfo * pMethodInfo,
- UInt32 codeOffset,
REGDISPLAY * pRegisterSet, // in
PTR_PTR_VOID * ppvRetAddrLocation, // out
GCRefKind * pRetValueKind) = 0; // out
virtual void UnsynchronizedHijackMethodLoops(MethodInfo * pMethodInfo) = 0;
- virtual void RemapHardwareFaultToGCSafePoint(MethodInfo * pMethodInfo, UInt32 * pCodeOffset) = 0;
+ virtual PTR_VOID RemapHardwareFaultToGCSafePoint(MethodInfo * pMethodInfo, PTR_VOID controlPC) = 0;
virtual bool EHEnumInit(MethodInfo * pMethodInfo, PTR_VOID * pMethodStartAddress, EHEnumState * pEHEnumState) = 0;