diff options
Diffstat (limited to 'src/vm/excep.cpp')
-rw-r--r-- | src/vm/excep.cpp | 51 |
1 files changed, 24 insertions, 27 deletions
diff --git a/src/vm/excep.cpp b/src/vm/excep.cpp index 1d24237c02..cd154c0618 100644 --- a/src/vm/excep.cpp +++ b/src/vm/excep.cpp @@ -7264,11 +7264,13 @@ IsDebuggerFault(EXCEPTION_RECORD *pExceptionRecord, #ifdef WIN64EXCEPTIONS +#ifndef _TARGET_X86_ EXTERN_C void JIT_MemSet_End(); EXTERN_C void JIT_MemCpy_End(); EXTERN_C void JIT_WriteBarrier_End(); EXTERN_C void JIT_CheckedWriteBarrier_End(); +#endif // _TARGET_X86_ #if defined(_TARGET_AMD64_) && defined(_DEBUG) EXTERN_C void JIT_WriteBarrier_Debug(); @@ -7288,11 +7290,13 @@ bool IsIPInMarkedJitHelper(UINT_PTR uControlPc) #define CHECK_RANGE(name) \ if (GetEEFuncEntryPoint(name) <= uControlPc && uControlPc < GetEEFuncEntryPoint(name##_End)) return true; +#ifndef _TARGET_X86_ CHECK_RANGE(JIT_MemSet) CHECK_RANGE(JIT_MemCpy) CHECK_RANGE(JIT_WriteBarrier) CHECK_RANGE(JIT_CheckedWriteBarrier) +#endif // _TARGET_X86_ #if defined(_TARGET_AMD64_) && defined(_DEBUG) CHECK_RANGE(JIT_WriteBarrier_Debug) @@ -7314,8 +7318,7 @@ AdjustContextForWriteBarrier( { WRAPPER_NO_CONTRACT; -#ifdef _TARGET_X86_ - +#if defined(_TARGET_X86_) && !defined(PLATFORM_UNIX) void* f_IP = (void *)GetIP(pContext); if (((f_IP >= (void *) JIT_WriteBarrierStart) && (f_IP <= (void *) JIT_WriteBarrierLast)) || @@ -7329,11 +7332,8 @@ AdjustContextForWriteBarrier( // put ESP back to what it was before the call. SetSP(pContext, PCODE((BYTE*)GetSP(pContext) + sizeof(void*))); } - return FALSE; - -#elif defined(WIN64EXCEPTIONS) - +#elif defined(WIN64EXCEPTIONS) // _TARGET_X86_ && !PLATFORM_UNIX void* f_IP = dac_cast<PTR_VOID>(GetIP(pContext)); CONTEXT tempContext; @@ -7377,7 +7377,7 @@ AdjustContextForWriteBarrier( // Now we save the address back into the context so that it gets used // as the faulting address. SetIP(pContext, ControlPCPostAdjustment); -#endif // _TARGET_ARM_ +#endif // _TARGET_ARM_ || _TARGET_ARM64_ // Unwind the frame chain - On Win64, this is required since we may handle the managed fault and to do so, // we will replace the exception context with the managed context and "continue execution" there. Thus, we do not @@ -7399,13 +7399,10 @@ AdjustContextForWriteBarrier( } return FALSE; - -#else // ! _X86_ && !WIN64EXCEPTIONS - - PORTABILITY_WARNING("AdjustContextForWriteBarrier() not implemented on this platform"); +#else // WIN64EXCEPTIONS + PORTABILITY_ASSERT("AdjustContextForWriteBarrier"); return FALSE; - -#endif +#endif // ELSE } struct SavedExceptionInfo @@ -7556,7 +7553,8 @@ void InitSavedExceptionInfo() void FaultingExceptionFrame::Init(CONTEXT *pContext) { WRAPPER_NO_CONTRACT; -#if defined(_TARGET_X86_) +#ifndef WIN64EXCEPTIONS +#ifdef _TARGET_X86_ CalleeSavedRegisters *pRegs = GetCalleeSavedRegisters(); pRegs->ebp = pContext->Ebp; pRegs->ebx = pContext->Ebx; @@ -7564,12 +7562,13 @@ void FaultingExceptionFrame::Init(CONTEXT *pContext) pRegs->edi = pContext->Edi; m_ReturnAddress = ::GetIP(pContext); m_Esp = (DWORD)GetSP(pContext); -#elif defined(WIN64EXCEPTIONS) +#else // _TARGET_X86_ + PORTABILITY_ASSERT("FaultingExceptionFrame::Init"); +#endif // _TARGET_???_ (ELSE) +#else // !WIN64EXCEPTIONS m_ReturnAddress = ::GetIP(pContext); CopyOSContext(&m_ctx, pContext); -#else - PORTABILITY_ASSERT("FaultingExceptionFrame::InitAndLink"); -#endif +#endif // !WIN64EXCEPTIONS } // @@ -13113,9 +13112,9 @@ StackWalkAction TAResetStateCallback(CrawlFrame* pCf, void* data) // there is no more managed code on the stack. // // Note: This function should be invoked ONLY during unwind. -#if defined(_TARGET_X86_) +#ifndef WIN64EXCEPTIONS void ResetThreadAbortState(PTR_Thread pThread, void *pEstablisherFrame) -#elif defined(WIN64EXCEPTIONS) +#else void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCurrentStackFrame) #endif { @@ -13125,9 +13124,9 @@ void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCur GC_NOTRIGGER; MODE_ANY; PRECONDITION(pThread != NULL); -#if defined(_TARGET_X86_) +#ifndef WIN64EXCEPTIONS PRECONDITION(pEstablisherFrame != NULL); -#elif defined(WIN64EXCEPTIONS) +#else PRECONDITION(pCf != NULL); PRECONDITION(!sfCurrentStackFrame.IsNull()); #endif @@ -13138,14 +13137,14 @@ void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCur if (pThread->IsAbortRequested()) { -#if defined(_TARGET_X86_) +#ifndef WIN64EXCEPTIONS if (GetNextCOMPlusSEHRecord(static_cast<EXCEPTION_REGISTRATION_RECORD *>(pEstablisherFrame)) == EXCEPTION_CHAIN_END) { // Topmost handler and abort requested. fResetThreadAbortState = TRUE; LOG((LF_EH, LL_INFO100, "ResetThreadAbortState: Topmost handler resets abort as no more managed code beyond %p.\n", pEstablisherFrame)); } -#elif defined(WIN64EXCEPTIONS) +#else // !WIN64EXCEPTIONS // Get the active exception tracker PTR_ExceptionTracker pCurEHTracker = pThread->GetExceptionState()->GetCurrentExceptionTracker(); _ASSERTE(pCurEHTracker != NULL); @@ -13200,9 +13199,7 @@ void ResetThreadAbortState(PTR_Thread pThread, CrawlFrame *pCf, StackFrame sfCur LOG((LF_EH, LL_INFO100, "ResetThreadAbortState: Resetting thread abort state since there is no more managed code beyond stack frames:\n")); LOG((LF_EH, LL_INFO100, "sf.SP = %p ", dataCallback.sfSeedCrawlFrame.SP)); } -#else // WIN64EXCEPTIONS -#error Unsupported platform -#endif // WIN64EXCEPTIONS +#endif // !WIN64EXCEPTIONS } if (fResetThreadAbortState) |