diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2017-02-10 20:35:12 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2017-02-10 20:35:12 +0900 |
commit | 4b11dc566a5bbfa1378d6266525c281b028abcc8 (patch) | |
tree | b48831a898906734f8884d08b6e18f1144ee2b82 /src/vm/i386/excepx86.cpp | |
parent | db20f3f1bb8595633a7e16c8900fd401a453a6b5 (diff) | |
download | coreclr-4b11dc566a5bbfa1378d6266525c281b028abcc8.tar.gz coreclr-4b11dc566a5bbfa1378d6266525c281b028abcc8.tar.bz2 coreclr-4b11dc566a5bbfa1378d6266525c281b028abcc8.zip |
Imported Upstream version 1.0.0.9910upstream/1.0.0.9910
Diffstat (limited to 'src/vm/i386/excepx86.cpp')
-rw-r--r-- | src/vm/i386/excepx86.cpp | 125 |
1 files changed, 33 insertions, 92 deletions
diff --git a/src/vm/i386/excepx86.cpp b/src/vm/i386/excepx86.cpp index 71200f671f..b860800943 100644 --- a/src/vm/i386/excepx86.cpp +++ b/src/vm/i386/excepx86.cpp @@ -33,11 +33,11 @@ #include "eeconfig.h" #include "vars.hpp" #include "generics.h" -#include "securityprincipal.h" #include "asmconstants.h" #include "virtualcallstub.h" +#ifndef WIN64EXCEPTIONS MethodDesc * GetUserMethodForILStub(Thread * pThread, UINT_PTR uStubSP, MethodDesc * pILStubMD, Frame ** ppFrameOut); #if !defined(DACCESS_COMPILE) @@ -2018,20 +2018,6 @@ PEXCEPTION_REGISTRATION_RECORD GetCurrentSEHRecord() return (EXCEPTION_REGISTRATION_RECORD*) fs0; } -#ifdef FEATURE_PAL -VOID SetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record) -{ - WRAPPER_NO_CONTRACT; - record->Next = CurrentSEHRecord; - CurrentSEHRecord = record; -} - -VOID ResetSEHRecord(PEXCEPTION_REGISTRATION_RECORD record) -{ - CurrentSEHRecord = record->Next; -} -#endif // FEATURE_PAL - PEXCEPTION_REGISTRATION_RECORD GetFirstCOMPlusSEHRecord(Thread *pThread) { WRAPPER_NO_CONTRACT; #ifndef FEATURE_PAL @@ -2274,19 +2260,11 @@ int COMPlusThrowCallbackHelper(IJitManager *pJitManager, CONTRACTL_END; int iFilt = 0; - BOOL impersonating = FALSE; #ifndef FEATURE_PAL EX_TRY { GCPROTECT_BEGIN (throwable); - if (pData->hCallerToken != NULL) - { - STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallbackHelper hCallerToken = %d\n",pData->hCallerToken); - // CLR_ImpersonateLoggedOnUser fails fast on error - COMPrincipal::CLR_ImpersonateLoggedOnUser(pData->hCallerToken); - impersonating = TRUE; - } // We want to call filters even if the thread is aborting, so suppress abort // checks while the filter runs. @@ -2295,25 +2273,10 @@ int COMPlusThrowCallbackHelper(IJitManager *pJitManager, BYTE* startAddress = (BYTE*)pCf->GetCodeInfo()->GetStartAddress(); iFilt = ::CallJitEHFilter(pCf, startAddress, EHClausePtr, nestingLevel, throwable); - if (impersonating) - { - STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallbackHelper hImpersonationToken = %d\n",pData->hImpersonationToken); - // CLR_ImpersonateLoggedOnUser fails fast on error - COMPrincipal::CLR_ImpersonateLoggedOnUser(pData->hImpersonationToken); - impersonating = FALSE; - } GCPROTECT_END(); } EX_CATCH { - if (impersonating) - { - STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallbackHelper EX_CATCH hImpersonationToken = %d\n",pData->hImpersonationToken); - // CLR_ImpersonateLoggedOnUser fails fast on error - COMPrincipal::CLR_ImpersonateLoggedOnUser(pData->hImpersonationToken); - impersonating = FALSE; - } - // We had an exception in filter invocation that remained unhandled. // Sync managed exception state, for the managed thread, based upon the active exception tracker. pThread->SyncManagedExceptionState(false); @@ -2445,27 +2408,6 @@ StackWalkAction COMPlusThrowCallback( // SWA value pData->bSkipLastElement = FALSE; } -#ifndef FEATURE_PAL - // Check for any impersonation on the frame and save that for use during EH filter callbacks - OBJECTREF* pRefSecDesc = pCf->GetAddrOfSecurityObject(); - if (pRefSecDesc != NULL && *pRefSecDesc != NULL) - { - FRAMESECDESCREF fsdRef = (FRAMESECDESCREF)*pRefSecDesc; - if (fsdRef->GetCallerToken() != NULL) - { - // Impersonation info present on the Frame - pData->hCallerToken = fsdRef->GetCallerToken(); - STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallback. Found non-NULL callertoken on FSD:%d\n",pData->hCallerToken); - if (!pData->bImpersonationTokenSet) - { - pData->hImpersonationToken = fsdRef->GetImpersonationToken(); - STRESS_LOG1(LF_EH, LL_INFO100, "In COMPlusThrowCallback. Found non-NULL impersonationtoken on FSD:%d\n",pData->hImpersonationToken); - pData->bImpersonationTokenSet = TRUE; - } - } - } -#endif // !FEATURE_PAL - // now we've got the stack trace, if we aren't allowed to catch this and we're first pass, return if (pData->bDontCatch) return SWA_CONTINUE; @@ -3666,33 +3608,11 @@ EXCEPTION_HANDLER_IMPL(UMThunkPrestubHandler) return retval; } -LONG CLRNoCatchHandler(EXCEPTION_POINTERS* pExceptionInfo, PVOID pv) -{ - WRAPPER_NO_CONTRACT; - STATIC_CONTRACT_ENTRY_POINT; - - LONG result = EXCEPTION_CONTINUE_SEARCH; - - // This function can be called during the handling of a SO - //BEGIN_ENTRYPOINT_VOIDRET; - - result = CLRVectoredExceptionHandler(pExceptionInfo); - - if (EXCEPTION_EXECUTE_HANDLER == result) - { - result = EXCEPTION_CONTINUE_SEARCH; - } - - //END_ENTRYPOINT_VOIDRET; - - return result; -} - #ifdef FEATURE_COMINTEROP // The reverse COM interop path needs to be sure to pop the ComMethodFrame that is pushed, but we do not want -// to have an additional FS:0 handler between the COM callsite and the call into managed. So we push this -// FS:0 handler, which will defer to the usual COMPlusFrameHandler and then perform the cleanup of the -// ComMethodFrame, if needed. +// to have an additional FS:0 handler between the COM callsite and the call into managed. So we push this +// FS:0 handler, which will defer to the usual COMPlusFrameHandler and then perform the cleanup of the +// ComMethodFrame, if needed. EXCEPTION_HANDLER_IMPL(COMPlusFrameHandlerRevCom) { STATIC_CONTRACT_THROWS; @@ -3711,7 +3631,36 @@ EXCEPTION_HANDLER_IMPL(COMPlusFrameHandlerRevCom) return result; } #endif // FEATURE_COMINTEROP +#endif // !DACCESS_COMPILE +#endif // !WIN64EXCEPTIONS + +#ifndef DACCESS_COMPILE +LONG CLRNoCatchHandler(EXCEPTION_POINTERS* pExceptionInfo, PVOID pv) +{ +#ifndef WIN64EXCEPTIONS + WRAPPER_NO_CONTRACT; + STATIC_CONTRACT_ENTRY_POINT; + + LONG result = EXCEPTION_CONTINUE_SEARCH; + + // This function can be called during the handling of a SO + //BEGIN_ENTRYPOINT_VOIDRET; + result = CLRVectoredExceptionHandler(pExceptionInfo); + + if (EXCEPTION_EXECUTE_HANDLER == result) + { + result = EXCEPTION_CONTINUE_SEARCH; + } + + //END_ENTRYPOINT_VOIDRET; + + return result; +#else // !WIN64EXCEPTIONS + return EXCEPTION_CONTINUE_SEARCH; +#endif // !WIN64EXCEPTIONS +} +#endif // !DACCESS_COMPILE // Returns TRUE if caller should resume execution. BOOL @@ -3768,11 +3717,3 @@ AdjustContextForVirtualStub( return TRUE; } - -#ifdef FEATURE_PAL -VOID DECLSPEC_NORETURN DispatchManagedException(PAL_SEHException& ex, bool isHardwareException) -{ - UNREACHABLE(); -} -#endif -#endif // !DACCESS_COMPILE |