blob: d8c5dc068395f0b80ddbf51523166ba20999b8f8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
//
// 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__
|