diff options
author | Steve MacLean <Steve.MacLean@microsoft.com> | 2019-10-22 16:58:15 -0400 |
---|---|---|
committer | Hyungju Lee <leee.lee@samsung.com> | 2020-10-30 18:27:38 +0900 |
commit | be1aa1bf368dd47765d429ee0e557d8cb26f9bfd (patch) | |
tree | 6121d87a7d7a547b18e4bb1f8f2021af23d223aa /src/debug/ee/controller.h | |
parent | 4c3b471c380dcc01579c18ae5756480d27cd1ea1 (diff) | |
download | coreclr-6c84e69891c22fd25af042cf74bb195a2053de06.tar.gz coreclr-6c84e69891c22fd25af042cf74bb195a2053de06.tar.bz2 coreclr-6c84e69891c22fd25af042cf74bb195a2053de06.zip |
Fix step with stackalloc (#27246) (#27351)submit/tizen_5.5_mobile_hotfix/20201030.060307accepted/tizen/5.5/unified/mobile/hotfix/20201103.003335accepted/tizen_5.5_unified_mobile_hotfix
* Make ControllerStackInfo::m_returnFrame private
* Make ControllerStackInfo always capture a return frame
In case the active frame has no managed caller, capture
the unmanaged frame
* Fix step over stackalloc
Generalize handling of stack allocations and stepping
* Fix GetFunctionFromToken() argument checking
Check token type is a method before creating a CordbFunction.
Add extra assert to check for invalid tokens
Diffstat (limited to 'src/debug/ee/controller.h')
-rw-r--r-- | src/debug/ee/controller.h | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/debug/ee/controller.h b/src/debug/ee/controller.h index 7172662f48..0d4776dd45 100644 --- a/src/debug/ee/controller.h +++ b/src/debug/ee/controller.h @@ -140,15 +140,15 @@ private: * FrameInfo m_activeFrame: A FrameInfo * describing the target frame. This should always be valid after a * call to GetStackInfo. + * + * private: + * bool m_activeFound: Set to true if we found the target frame. + * bool m_returnFound: Set to true if we found the target's return frame. * * FrameInfo m_returnFrame: A FrameInfo * describing the frame above the target frame, if target's * return frame were found (call HasReturnFrame() to see if this is * valid). Otherwise, this will be the same as m_activeFrame, above - * - * private: - * bool m_activeFound: Set to true if we found the target frame. - * bool m_returnFound: Set to true if we found the target's return frame. */ class ControllerStackInfo { @@ -165,7 +165,6 @@ public: bool m_targetFrameFound; FrameInfo m_activeFrame; - FrameInfo m_returnFrame; CorDebugChainReason m_specialChainReason; @@ -199,8 +198,9 @@ public: //bool ControllerStackInfo::HasReturnFrame() Returns // true if m_returnFrame is valid. Returns false // if m_returnFrame is set to m_activeFrame - bool HasReturnFrame() {LIMITED_METHOD_CONTRACT; return m_returnFound; } + bool HasReturnFrame(bool allowUnmanaged = false) {LIMITED_METHOD_CONTRACT; return m_returnFound && (allowUnmanaged || m_returnFrame.managed); } + FrameInfo& GetReturnFrame(bool allowUnmanaged = false) {LIMITED_METHOD_CONTRACT; return HasReturnFrame(allowUnmanaged) ? m_returnFrame : m_activeFrame; } // This function "undoes" an unwind, i.e. it takes the active frame (the current frame) // and sets it to be the return frame (the caller frame). Currently it is only used by // the stepper to step out of an LCG method. See DebuggerStepper::DetectHandleLCGMethods() @@ -213,6 +213,7 @@ private: bool m_activeFound; bool m_returnFound; + FrameInfo m_returnFrame; // A ridiculous flag that is targetting a very narrow fix at issue 650903 // (4.5.1/Blue). This is set for the duration of a stackwalk designed to |