// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // //----------------------------------------------------------------------------- // Entrypoint markers // Used to identify all external entrypoints into the CLR (via COM, exports, etc) // and perform various tasks on all of them //----------------------------------------------------------------------------- #ifndef __ENTRYPOINTS_h__ #define __ENTRYPOINTS_h__ #define BEGIN_ENTRYPOINT_THROWS \ BEGIN_SO_INTOLERANT_CODE(GetThread()) \ #define END_ENTRYPOINT_THROWS \ END_SO_INTOLERANT_CODE; #define BEGIN_ENTRYPOINT_THROWS_WITH_THREAD(____thread) \ BEGIN_SO_INTOLERANT_CODE(____thread) \ #define END_ENTRYPOINT_THROWS_WITH_THREAD \ END_SO_INTOLERANT_CODE; #define BEGIN_ENTRYPOINT_NOTHROW_WITH_THREAD(___thread) \ BEGIN_SO_INTOLERANT_CODE_NO_THROW_CHECK_THREAD(return COR_E_STACKOVERFLOW) #define END_ENTRYPOINT_NOTHROW_WITH_THREAD \ END_SO_INTOLERANT_CODE; #define BEGIN_ENTRYPOINT_NOTHROW \ BEGIN_SO_INTOLERANT_CODE_NO_THROW_CHECK_THREAD(return COR_E_STACKOVERFLOW) #define END_ENTRYPOINT_NOTHROW \ END_SO_INTOLERANT_CODE; extern void (*g_fpHandleSoftStackOverflow)(BOOL fSkipDebugger); inline void FailedVoidEntryPoint() { if (g_fpHandleSoftStackOverflow) { g_fpHandleSoftStackOverflow(FALSE); } } #define BEGIN_ENTRYPOINT_VOIDRET \ BEGIN_SO_INTOLERANT_CODE_NO_THROW_CHECK_THREAD(FailedVoidEntryPoint();) #define END_ENTRYPOINT_VOIDRET \ END_SO_INTOLERANT_CODE; #define BEGIN_CLEANUP_ENTRYPOINT \ VALIDATE_BACKOUT_STACK_CONSUMPTION; #define END_CLEANUP_ENTRYPOINT #endif // __ENTRYPOINTS_h__