[Tizen] Unify dnetmemoryenumlib terms to match the codebase (#291)
[platform/upstream/coreclr.git] / src / vm / stublink.inl
1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 //
5 // StubLink.inl
6 //
7 // Defines inline functions for StubLinker
8 //
9
10
11 #ifndef __STUBLINK_INL__
12 #define __STUBLINK_INL__
13
14 #include "stublink.h"
15 #include "eeconfig.h"
16 #include "safemath.h"
17
18
19 #ifdef STUBLINKER_GENERATES_UNWIND_INFO
20
21 inline //static
22 SIZE_T StubUnwindInfoHeader::ComputeSize(UINT nUnwindInfoSize)
23 {
24     LIMITED_METHOD_CONTRACT;
25
26     return ALIGN_UP(  FIELD_OFFSET(StubUnwindInfoHeader, FunctionEntry)
27                     + nUnwindInfoSize
28                     + sizeof(StubUnwindInfoHeaderSuffix)
29                     , sizeof(void*));
30 }
31
32
33 #ifndef DACCESS_COMPILE
34
35 inline
36 void StubUnwindInfoHeader::Init ()
37 {
38     LIMITED_METHOD_CONTRACT;
39     
40     pNext = (StubUnwindInfoHeader*)(SIZE_T)1;
41 }
42
43
44 inline
45 bool StubUnwindInfoHeader::IsRegistered ()
46 {
47     LIMITED_METHOD_CONTRACT;
48
49     return pNext != (StubUnwindInfoHeader*)(SIZE_T)1;
50 }
51
52 #endif // #ifndef DACCESS_COMPILE
53
54 #endif // STUBLINKER_GENERATES_UNWIND_INFO
55
56
57 inline
58 void StubLinker::Push(UINT size)
59 {
60     LIMITED_METHOD_CONTRACT;
61
62     ClrSafeInt<SHORT> stackSize(m_stackSize); 
63     _ASSERTE(FitsIn<SHORT>(size));
64     SHORT sSize = static_cast<SHORT>(size);
65     stackSize += sSize;
66     _ASSERTE(!stackSize.IsOverflow());
67     m_stackSize = stackSize.Value();
68     UnwindAllocStack(sSize);
69 }
70
71
72 inline
73 void StubLinker::Pop(UINT size)
74 {
75     LIMITED_METHOD_CONTRACT;
76
77     ClrSafeInt<SHORT> stackSize(m_stackSize);
78     _ASSERTE(FitsIn<SHORT>(size));
79     stackSize = stackSize - ClrSafeInt<SHORT>(size);
80     _ASSERTE(!stackSize.IsOverflow());
81     m_stackSize = stackSize.Value();
82 }
83
84
85 inline
86 VOID StubLinker::EmitUnwindInfoCheck()
87 {
88 #if defined(_DEBUG) && defined(STUBLINKER_GENERATES_UNWIND_INFO) && !defined(CROSSGEN_COMPILE)
89     if (g_pConfig->IsStubLinkerUnwindInfoVerificationOn())
90     {
91         if (!m_pUnwindInfoCheckLabel)
92             m_pUnwindInfoCheckLabel = NewCodeLabel();
93         EmitUnwindInfoCheckWorker(m_pUnwindInfoCheckLabel);
94     }
95 #endif
96 }
97
98
99 #ifndef STUBLINKER_GENERATES_UNWIND_INFO
100
101 inline VOID StubLinker::UnwindSavedReg (UCHAR reg, ULONG SPRelativeOffset) {LIMITED_METHOD_CONTRACT;}
102 inline VOID StubLinker::UnwindAllocStack (SHORT FrameSizeIncrement) {LIMITED_METHOD_CONTRACT;}
103 inline VOID StubLinker::UnwindSetFramePointer (UCHAR reg) {LIMITED_METHOD_CONTRACT;}
104
105 inline VOID StubLinker::UnwindPushedReg (UCHAR reg)
106 {
107     LIMITED_METHOD_CONTRACT;
108
109     m_stackSize += sizeof(void*);
110 }
111
112 #endif // !STUBLINKER_GENERATES_UNWIND_INFO
113
114
115 #endif // !__STUBLINK_INL__
116