diff options
author | Scott Mosier <smosier@microsoft.com> | 2016-06-15 01:58:38 +0300 |
---|---|---|
committer | Scott Mosier <smosier@microsoft.com> | 2016-06-15 01:58:38 +0300 |
commit | a0124b03284c2f790a36d1e671c72a6a186b7a7a (patch) | |
tree | d0cd5e970391825ee453ccf553df5b204772f919 /src/Native/Runtime/module.h | |
parent | 1c852985291c3828c169264408f81bbe1fd9c4c7 (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/module.h')
-rw-r--r-- | src/Native/Runtime/module.h | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/src/Native/Runtime/module.h b/src/Native/Runtime/module.h index 041bd9b77..28923da3a 100644 --- a/src/Native/Runtime/module.h +++ b/src/Native/Runtime/module.h @@ -64,8 +64,7 @@ public: PTR_UInt8 FindMethodStartAddress(PTR_VOID ControlPC); bool FindMethodInfo(PTR_VOID ControlPC, - MethodInfo * pMethodInfoOut, - UInt32 * pCodeOffset); + MethodInfo * pMethodInfoOut); bool IsFunclet(MethodInfo * pMethodInfo); @@ -73,12 +72,11 @@ public: REGDISPLAY * pRegisterSet); void EnumGcRefs(MethodInfo * pMethodInfo, - UInt32 codeOffset, + PTR_VOID safePointAddress, REGDISPLAY * pRegisterSet, GCEnumContext * hCallback); bool UnwindStackFrame(MethodInfo * pMethodInfo, - UInt32 codeOffset, REGDISPLAY * pRegisterSet, PTR_VOID * ppPreviousTransitionFrame); @@ -86,7 +84,6 @@ public: REGDISPLAY * pRegisterSet); bool GetReturnAddressHijackInfo(MethodInfo * pMethodInfo, - UInt32 codeOffset, REGDISPLAY * pRegisterSet, PTR_PTR_VOID * ppvRetAddrLocation, GCRefKind * pRetValueKind); @@ -101,7 +98,7 @@ public: bool EHEnumInit(MethodInfo * pMethodInfo, PTR_VOID * pMethodStartAddressOut, EHEnumState * pEHEnumStateOut); bool EHEnumNext(EHEnumState * pEHEnumState, EHClause * pEHClauseOut); - void RemapHardwareFaultToGCSafePoint(MethodInfo * pMethodInfo, UInt32 * pCodeOffset); + PTR_VOID RemapHardwareFaultToGCSafePoint(MethodInfo * pMethodInfo, PTR_VOID controlPC); DispatchMap ** GetDispatchMapLookupTable(); |