diff options
author | Jonghyun Park <parjong@gmail.com> | 2016-05-02 11:09:50 +0900 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2016-05-01 19:09:50 -0700 |
commit | 0a889368329270f766686f45f69a47082d18e252 (patch) | |
tree | 2d8c8683d2697e545335130cf3158efd06e04017 /src | |
parent | 84e2177f7844f7cf1ee2c7ae689396170d6a522a (diff) | |
download | coreclr-0a889368329270f766686f45f69a47082d18e252.tar.gz coreclr-0a889368329270f766686f45f69a47082d18e252.tar.bz2 coreclr-0a889368329270f766686f45f69a47082d18e252.zip |
Fix #4496 (#4503)
* Fix #4496
This commit revises legecy codegen to inserts a bkpt instruction if the current BB
and next BB is not in the same exception handling region.
This code is backported from ARM64 codegen.
* Update ControlPcIsUnwound in UnwindManagedExceptionPassX
* Enable only for ARM32
Enable the patch only for ARM32 in order to fix build break in other
architecture.
Diffstat (limited to 'src')
-rw-r--r-- | src/vm/exceptionhandling.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/vm/exceptionhandling.cpp b/src/vm/exceptionhandling.cpp index b5f92905e0..8d010e0354 100644 --- a/src/vm/exceptionhandling.cpp +++ b/src/vm/exceptionhandling.cpp @@ -4382,7 +4382,9 @@ VOID UnwindManagedExceptionPass2(PAL_SEHException& ex, CONTEXT* unwindStartConte dispatcherContext.FunctionEntry = codeInfo.GetFunctionEntry(); dispatcherContext.ControlPc = controlPc; dispatcherContext.ImageBase = codeInfo.GetModuleBase(); - +#if defined(_TARGET_ARM_) + dispatcherContext.ControlPcIsUnwound = !(currentFrameContext->ContextFlags & CONTEXT_EXCEPTION_ACTIVE); +#endif // Check whether we have a function table entry for the current controlPC. // If yes, then call RtlVirtualUnwind to get the establisher frame pointer. if (dispatcherContext.FunctionEntry != NULL) @@ -4524,6 +4526,9 @@ VOID DECLSPEC_NORETURN UnwindManagedExceptionPass1(PAL_SEHException& ex, CONTEXT dispatcherContext.FunctionEntry = codeInfo.GetFunctionEntry(); dispatcherContext.ControlPc = controlPc; dispatcherContext.ImageBase = codeInfo.GetModuleBase(); +#if defined(_TARGET_ARM_) + dispatcherContext.ControlPcIsUnwound = !(frameContext->ContextFlags & CONTEXT_EXCEPTION_ACTIVE); +#endif // Check whether we have a function table entry for the current controlPC. // If yes, then call RtlVirtualUnwind to get the establisher frame pointer |