summaryrefslogtreecommitdiff
path: root/src/inc/entrypoints.h
blob: 064f4ede2940e15dc2bf20261f9ae467e010be47 (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
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more 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__