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.
7 // Defines inline functions for StubLinker
11 #ifndef __STUBLINK_INL__
12 #define __STUBLINK_INL__
19 #ifdef STUBLINKER_GENERATES_UNWIND_INFO
22 SIZE_T StubUnwindInfoHeader::ComputeSize(UINT nUnwindInfoSize)
24 LIMITED_METHOD_CONTRACT;
26 return ALIGN_UP( FIELD_OFFSET(StubUnwindInfoHeader, FunctionEntry)
28 + sizeof(StubUnwindInfoHeaderSuffix)
33 #ifndef DACCESS_COMPILE
36 void StubUnwindInfoHeader::Init ()
38 LIMITED_METHOD_CONTRACT;
40 pNext = (StubUnwindInfoHeader*)(SIZE_T)1;
45 bool StubUnwindInfoHeader::IsRegistered ()
47 LIMITED_METHOD_CONTRACT;
49 return pNext != (StubUnwindInfoHeader*)(SIZE_T)1;
52 #endif // #ifndef DACCESS_COMPILE
54 #endif // STUBLINKER_GENERATES_UNWIND_INFO
58 void StubLinker::Push(UINT size)
60 LIMITED_METHOD_CONTRACT;
62 ClrSafeInt<SHORT> stackSize(m_stackSize);
63 _ASSERTE(FitsIn<SHORT>(size));
64 SHORT sSize = static_cast<SHORT>(size);
66 _ASSERTE(!stackSize.IsOverflow());
67 m_stackSize = stackSize.Value();
68 UnwindAllocStack(sSize);
73 void StubLinker::Pop(UINT size)
75 LIMITED_METHOD_CONTRACT;
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();
86 VOID StubLinker::EmitUnwindInfoCheck()
88 #if defined(_DEBUG) && defined(STUBLINKER_GENERATES_UNWIND_INFO) && !defined(CROSSGEN_COMPILE)
89 if (g_pConfig->IsStubLinkerUnwindInfoVerificationOn())
91 if (!m_pUnwindInfoCheckLabel)
92 m_pUnwindInfoCheckLabel = NewCodeLabel();
93 EmitUnwindInfoCheckWorker(m_pUnwindInfoCheckLabel);
99 #ifndef STUBLINKER_GENERATES_UNWIND_INFO
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;}
105 inline VOID StubLinker::UnwindPushedReg (UCHAR reg)
107 LIMITED_METHOD_CONTRACT;
109 m_stackSize += sizeof(void*);
112 #endif // !STUBLINKER_GENERATES_UNWIND_INFO
115 #endif // !__STUBLINK_INL__