PORTABILITY_ASSERT("Implement for PAL");
}
- void NakedThrowHelper()
- {
- PORTABILITY_ASSERT("Implement for PAL");
- }
-
void PInvokeStubForHost()
{
PORTABILITY_ASSERT("Implement for PAL");
.endm
// ------------------------------------------------------------------
-//
-// Helpers for async (NullRef, AccessViolation) exceptions
-//
-
- NESTED_ENTRY NakedThrowHelper2,_TEXT,UnhandledExceptionHandlerUnix
- push {r0, lr}
-
- // On entry:
- //
- // R0 = Address of FaultingExceptionFrame
- bl C_FUNC(LinkFrameAndThrow)
-
- // Target should not return.
- EMIT_BREAKPOINT
-
- NESTED_END NakedThrowHelper2, _TEXT
-
-
- GenerateRedirectedStubWithFrame NakedThrowHelper, NakedThrowHelper2
-
-// ------------------------------------------------------------------
// This helper enables us to call into a funclet after applying the non-volatiles
NESTED_ENTRY CallEHFunclet, _TEXT, NoHandler
// ------------------------------------------------------------------
-//
-// Helpers for async (NullRef, AccessViolation) exceptions
-//
-
-NESTED_ENTRY NakedThrowHelper2, _TEXT ,UnhandledExceptionHandlerUnix
- PROLOG_SAVE_REG_PAIR_INDEXED fp,lr, -16
-
- // On entry:
- //
- // X0 = Address of FaultingExceptionFrame
- bl C_FUNC(LinkFrameAndThrow)
-
- // Target should not return.
- EMIT_BREAKPOINT
-
-NESTED_END NakedThrowHelper2, _TEXT
-
-
-GenerateRedirectedStubWithFrame NakedThrowHelper, NakedThrowHelper2
-
-// ------------------------------------------------------------------
// ResolveWorkerChainLookupAsmStub
//
// This method will perform a quick chained lookup of the entry if the
return false;
}
+#ifndef FEATURE_PAL
+
// Return true if the access violation is well formed (has two info parameters
// at the end)
static inline BOOL
return false;
}
+#endif // FEATURE_PAL
+
#ifdef WIN64EXCEPTIONS
#ifndef _TARGET_X86_
#endif // ELSE
}
+#if defined(USE_FEF) && !defined(FEATURE_PAL)
+
struct SavedExceptionInfo
{
EXCEPTION_RECORD m_ExceptionRecord;
}
};
-
-#if defined(USE_FEF)
-
SavedExceptionInfo g_SavedExceptionInfo; // Globals are guaranteed zero-init;
void InitSavedExceptionInfo()
SetIP(pContext, GetEEFuncEntryPoint(NakedThrowHelper));
}
-#else // USE_FEF
+#else // USE_FEF && !FEATURE_PAL
void InitSavedExceptionInfo()
{
}
-#endif // USE_FEF
+#endif // USE_FEF && !FEATURE_PAL
//
// Init a new frame
return true;
}
+#ifndef FEATURE_PAL
+
LONG WINAPI CLRVectoredExceptionHandlerPhase2(PEXCEPTION_POINTERS pExceptionInfo);
enum VEH_ACTION
// Remember the EIP for stress debugging purposes.
g_LastAccessViolationEIP = (void*) ::GetIP(pContext);
-#ifndef FEATURE_PAL
// Note: we have a holder, called AVInRuntimeImplOkayHolder, that tells us that its okay to have an
// AV in the Runtime's implementation in certain places. So, if its okay to have an AV at this
// time, then skip the check for whether or not the AV is in our impl.
EEPOLICY_HANDLE_FATAL_ERROR_USING_EXCEPTION_INFO(COR_E_EXECUTIONENGINE, pExceptionInfo);
}
}
-#endif // !FEATURE_PAL
}
}
else if (exceptionCode == BOOTUP_EXCEPTION_COMPLUS)
return VEH_NO_ACTION;
}
+#endif // !FEATURE_PAL
+
BOOL IsIPInEE(void *ip)
{
WRAPPER_NO_CONTRACT;
#endif // defined(_TARGET_X86_)
+#ifndef FEATURE_PAL
+
LONG WINAPI CLRVectoredExceptionHandlerShim(PEXCEPTION_POINTERS pExceptionInfo)
{
//
}
#ifdef _DEBUG
-#ifndef FEATURE_PAL
#ifndef WIN64EXCEPTIONS
{
CantAllocHolder caHolder;
}
}
}
-#endif // !FEATURE_PAL
#endif // _DEBUG
#ifndef WIN64EXCEPTIONS
return result;
}
+#endif // !FEATURE_PAL
// Contains the handle to the registered VEH
static PVOID g_hVectoredExceptionHandler = NULL;