diff options
author | Jan Vorlicek <janvorli@microsoft.com> | 2015-09-08 14:01:30 +0200 |
---|---|---|
committer | Jan Vorlicek <janvorli@microsoft.com> | 2015-09-08 16:04:31 +0200 |
commit | b7bcb50634745d5280386fb8b03e204896d54df3 (patch) | |
tree | 8444a90764cbdcd837b0ad0f4e5d192cd8ea4867 /src/debug/ee/arm | |
parent | 1165038551b7ca20f230d867dc5fd2357ede14fe (diff) | |
download | coreclr-b7bcb50634745d5280386fb8b03e204896d54df3.tar.gz coreclr-b7bcb50634745d5280386fb8b03e204896d54df3.tar.bz2 coreclr-b7bcb50634745d5280386fb8b03e204896d54df3.zip |
Remove FuncEvalHijackPersonalityRoutine for PAL
The personality routine on Windows is responsible for redirecting exception unwinding
to a different context when function evaluation is injected into a managed thread and
there is an exception that escapes the evaluation. However, the FuncEvalHijackRealWorker
catches all exceptions that happen during the function evaluation, so nothing should
escape.
Moreover, if anything escaped, it would go to the original hijacked code which is not
expected.
So I am replacing the personality routine for PAL with UnhandledExceptionHandlerUnix
to guard against unexpected exception escaping.
I am also setting the same personality routine to the ExceptionHijack function. Some
time ago, it was removed completely there as a temporary fix for a problem with limited
max number of personality routines in single executable. I have looked at it
again and I can see that no exception should escape the ExceptionHijackWorker either and
so the same thing as for FuncEvalHijack applies for ExceptionHijack too.
Diffstat (limited to 'src/debug/ee/arm')
-rw-r--r-- | src/debug/ee/arm/dbghelpers.S | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/debug/ee/arm/dbghelpers.S b/src/debug/ee/arm/dbghelpers.S index a71404a9c9..6094151063 100644 --- a/src/debug/ee/arm/dbghelpers.S +++ b/src/debug/ee/arm/dbghelpers.S @@ -15,10 +15,7 @@ // r0 : pointer to DebuggerEval object // -NESTED_ENTRY FuncEvalHijack, _TEXT, FuncEvalHijackPersonalityRoutine - - // NOTE: FuncEvalHijackPersonalityRoutine is dependent on the stack layout so if - // you change the prolog you will also need to update the personality routine. +NESTED_ENTRY FuncEvalHijack, _TEXT, UnhandledExceptionHandlerUnix // push arg to the stack so our personality routine can find it // push lr to get good stacktrace in debugger @@ -48,7 +45,7 @@ NESTED_END FuncEvalHijack, _TEXT // r3 : void* pdata // -NESTED_ENTRY ExceptionHijack, _TEXT, ExceptionHijackPersonalityRoutine +NESTED_ENTRY ExceptionHijack, _TEXT, UnhandledExceptionHandlerUnix CHECK_STACK_ALIGNMENT |