summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJonghyun Park <parjong@gmail.com>2016-05-02 11:09:50 +0900
committerJan Kotas <jkotas@microsoft.com>2016-05-01 19:09:50 -0700
commit0a889368329270f766686f45f69a47082d18e252 (patch)
tree2d8c8683d2697e545335130cf3158efd06e04017 /src
parent84e2177f7844f7cf1ee2c7ae689396170d6a522a (diff)
downloadcoreclr-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.cpp7
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