diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pal/src/exception/seh-unwind.cpp | 4 | ||||
-rw-r--r-- | src/pal/src/exception/signal.cpp | 6 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/pal/src/exception/seh-unwind.cpp b/src/pal/src/exception/seh-unwind.cpp index 360ea3e987..f1f25b01e8 100644 --- a/src/pal/src/exception/seh-unwind.cpp +++ b/src/pal/src/exception/seh-unwind.cpp @@ -266,8 +266,8 @@ BOOL PAL_VirtualUnwind(CONTEXT *context, KNONVOLATILE_CONTEXT_POINTERS *contextP // cannot cross on some systems. if ((void*)curPc == g_SEHProcessExceptionReturnAddress) { - CONTEXT* nativeContext = *(CONTEXT**)(CONTEXTGetFP(context) + g_common_signal_handler_context_locvar_offset); - memcpy_s(context, sizeof(CONTEXT), nativeContext, sizeof(CONTEXT)); + CONTEXT* signalContext = (CONTEXT*)(CONTEXTGetFP(context) + g_common_signal_handler_context_locvar_offset); + memcpy_s(context, sizeof(CONTEXT), signalContext, sizeof(CONTEXT)); return TRUE; } diff --git a/src/pal/src/exception/signal.cpp b/src/pal/src/exception/signal.cpp index 6a046bd00b..b580ba4f51 100644 --- a/src/pal/src/exception/signal.cpp +++ b/src/pal/src/exception/signal.cpp @@ -761,12 +761,13 @@ __attribute__((noinline)) static bool common_signal_handler(int code, siginfo_t *siginfo, void *sigcontext, int numParams, ...) { sigset_t signal_set; + CONTEXT signalContextRecord; CONTEXT *contextRecord; EXCEPTION_RECORD *exceptionRecord; native_context_t *ucontext; ucontext = (native_context_t *)sigcontext; - g_common_signal_handler_context_locvar_offset = (int)((char*)&contextRecord - (char*)__builtin_frame_address(0)); + g_common_signal_handler_context_locvar_offset = (int)((char*)&signalContextRecord - (char*)__builtin_frame_address(0)); AllocateExceptionRecords(&exceptionRecord, &contextRecord); @@ -809,6 +810,9 @@ static bool common_signal_handler(int code, siginfo_t *siginfo, void *sigcontext } contextRecord->ContextFlags |= CONTEXT_EXCEPTION_ACTIVE; + + memcpy_s(&signalContextRecord, sizeof(CONTEXT), contextRecord, sizeof(CONTEXT)); + // The exception object takes ownership of the exceptionRecord and contextRecord PAL_SEHException exception(exceptionRecord, contextRecord); |