|
| 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 | + |
| 4 | +// NOTE: This file is included also during native runtime compilation by the C++ compiler for verification purposes. |
| 5 | +// The static asserts at the end are compiled only when this file is included in native build by c++ compiler. They |
| 6 | +// provide compile time verification that all the sizes and offsets match between the managed and native code. |
| 7 | + |
| 8 | +#if !__cplusplus |
| 9 | +internal static |
| 10 | +#endif |
| 11 | +class AsmOffsets |
| 12 | +{ |
| 13 | + |
| 14 | + // Offsets / sizes that are different in Release / Debug builds |
| 15 | +#if DEBUG |
| 16 | + // Debug build offsets |
| 17 | +#if TARGET_AMD64 |
| 18 | +#if TARGET_UNIX |
| 19 | + public const int SIZEOF__REGDISPLAY = 0x1a90; |
| 20 | + public const int OFFSETOF__REGDISPLAY__SP = 0x1a78; |
| 21 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x1a80; |
| 22 | +#else // TARGET_UNIX |
| 23 | + public const int SIZEOF__REGDISPLAY = 0xbf0; |
| 24 | + public const int OFFSETOF__REGDISPLAY__SP = 0xbd8; |
| 25 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0xbe0; |
| 26 | +#endif // TARGET_UNIX |
| 27 | +#elif TARGET_ARM64 |
| 28 | + public const int SIZEOF__REGDISPLAY = 0x940; |
| 29 | + public const int OFFSETOF__REGDISPLAY__SP = 0x898; |
| 30 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x8a0; |
| 31 | +#elif TARGET_ARM |
| 32 | + public const int SIZEOF__REGDISPLAY = 0x410; |
| 33 | + public const int OFFSETOF__REGDISPLAY__SP = 0x3ec; |
| 34 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x3f0; |
| 35 | +#elif TARGET_X86 |
| 36 | + public const int SIZEOF__REGDISPLAY = 0x5fc; |
| 37 | + public const int OFFSETOF__REGDISPLAY__SP = 0x5f0; |
| 38 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x5f4; |
| 39 | +#elif TARGET_RISCV64 |
| 40 | + public const int SIZEOF__REGDISPLAY = 0x6C0; |
| 41 | + public const int OFFSETOF__REGDISPLAY__SP = 0x628; |
| 42 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x630; |
| 43 | +#elif TARGET_LOONGARCH64 |
| 44 | + public const int SIZEOF__REGDISPLAY = 0x6C0; |
| 45 | + public const int OFFSETOF__REGDISPLAY__SP = 0x628; |
| 46 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x630; |
| 47 | +#endif |
| 48 | + |
| 49 | +#if TARGET_64BIT |
| 50 | + public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x8; |
| 51 | + public const int SIZEOF__StackFrameIterator = 0x370; |
| 52 | + public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x352; |
| 53 | + public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x368; |
| 54 | +#else // TARGET_64BIT |
| 55 | + public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x4; |
| 56 | + public const int SIZEOF__StackFrameIterator = 0x2d8; |
| 57 | + public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x2c2; |
| 58 | + public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x2d0; |
| 59 | +#endif // TARGET_64BIT |
| 60 | + |
| 61 | +#else // DEBUG |
| 62 | + // Release build offsets |
| 63 | +#if TARGET_AMD64 |
| 64 | +#if TARGET_UNIX |
| 65 | + public const int SIZEOF__REGDISPLAY = 0x1a80; |
| 66 | + public const int OFFSETOF__REGDISPLAY__SP = 0x1a70; |
| 67 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x1a78; |
| 68 | +#else // TARGET_UNIX |
| 69 | + public const int SIZEOF__REGDISPLAY = 0xbe0; |
| 70 | + public const int OFFSETOF__REGDISPLAY__SP = 0xbd0; |
| 71 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0xbd8; |
| 72 | +#endif // TARGET_UNIX |
| 73 | +#elif TARGET_ARM64 |
| 74 | + public const int SIZEOF__REGDISPLAY = 0x930; |
| 75 | + public const int OFFSETOF__REGDISPLAY__SP = 0x890; |
| 76 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x898; |
| 77 | +#elif TARGET_ARM |
| 78 | + public const int SIZEOF__REGDISPLAY = 0x408; |
| 79 | + public const int OFFSETOF__REGDISPLAY__SP = 0x3e8; |
| 80 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x3ec; |
| 81 | +#elif TARGET_X86 |
| 82 | + public const int SIZEOF__REGDISPLAY = 0x5f8; |
| 83 | + public const int OFFSETOF__REGDISPLAY__SP = 0x5ec; |
| 84 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x5f0; |
| 85 | +#elif TARGET_RISCV64 |
| 86 | + public const int SIZEOF__REGDISPLAY = 0x6B0; |
| 87 | + public const int OFFSETOF__REGDISPLAY__SP = 0x620; |
| 88 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x628; |
| 89 | +#elif TARGET_LOONGARCH64 |
| 90 | + public const int SIZEOF__REGDISPLAY = 0x6B0; |
| 91 | + public const int OFFSETOF__REGDISPLAY__SP = 0x620; |
| 92 | + public const int OFFSETOF__REGDISPLAY__ControlPC = 0x628; |
| 93 | +#endif |
| 94 | + |
| 95 | +#if TARGET_64BIT |
| 96 | + public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x8; |
| 97 | + public const int SIZEOF__StackFrameIterator = 0x370; |
| 98 | + public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x34a; |
| 99 | + public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x360; |
| 100 | +#else // TARGET_64BIT |
| 101 | + public const int OFFSETOF__REGDISPLAY__m_pCurrentContext = 0x4; |
| 102 | + public const int SIZEOF__StackFrameIterator = 0x2d0; |
| 103 | + public const int OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions = 0x2ba; |
| 104 | + public const int OFFSETOF__StackFrameIterator__m_AdjustedControlPC = 0x2c8; |
| 105 | +#endif // TARGET_64BIT |
| 106 | + |
| 107 | +#endif // DEBUG |
| 108 | + |
| 109 | +#if TARGET_AMD64 |
| 110 | +#if TARGET_UNIX |
| 111 | + public const int SIZEOF__PAL_LIMITED_CONTEXT = 0xc20; |
| 112 | +#else // TARGET_UNIX |
| 113 | + public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x4d0; |
| 114 | +#endif // TARGET_UNIx |
| 115 | +#elif TARGET_ARM64 |
| 116 | + public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x390; |
| 117 | +#elif TARGET_ARM |
| 118 | + public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x1a0; |
| 119 | +#elif TARGET_X86 |
| 120 | + public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x2cc; |
| 121 | +#elif TARGET_RISCV64 |
| 122 | + public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x220; |
| 123 | +#elif TARGET_LOONGARCH64 |
| 124 | + public const int SIZEOF__PAL_LIMITED_CONTEXT = 0x220; |
| 125 | +#endif |
| 126 | + |
| 127 | +#if TARGET_AMD64 |
| 128 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0xf8; |
| 129 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0xa0; |
| 130 | +#elif TARGET_ARM64 |
| 131 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x108; |
| 132 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0xf0; |
| 133 | +#elif TARGET_ARM |
| 134 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x40; |
| 135 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0x30; |
| 136 | +#elif TARGET_X86 |
| 137 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0xb8; |
| 138 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0xb4; |
| 139 | +#elif TARGET_RISCV64 |
| 140 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x108; |
| 141 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0x48; |
| 142 | +#elif TARGET_LOONGARCH64 |
| 143 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__IP = 0x108; |
| 144 | + public const int OFFSETOF__PAL_LIMITED_CONTEXT__FP = 0x48; |
| 145 | +#endif |
| 146 | + |
| 147 | + // Offsets / sizes that are different in 64 / 32 bit mode |
| 148 | + |
| 149 | +#if TARGET_64BIT |
| 150 | + public const int SIZEOF__EHEnum = 0x20; |
| 151 | + public const int OFFSETOF__StackFrameIterator__m_pRegDisplay = 0x228; |
| 152 | + public const int OFFSETOF__ExInfo__m_pPrevExInfo = 0; |
| 153 | + public const int OFFSETOF__ExInfo__m_pExContext = 8; |
| 154 | + public const int OFFSETOF__ExInfo__m_exception = 0x10; |
| 155 | + public const int OFFSETOF__ExInfo__m_kind = 0x18; |
| 156 | + public const int OFFSETOF__ExInfo__m_passNumber = 0x19; |
| 157 | + public const int OFFSETOF__ExInfo__m_idxCurClause = 0x1c; |
| 158 | + public const int OFFSETOF__ExInfo__m_frameIter = 0x20; |
| 159 | + public const int OFFSETOF__ExInfo__m_notifyDebuggerSP = OFFSETOF__ExInfo__m_frameIter + SIZEOF__StackFrameIterator; |
| 160 | +#else // TARGET_64BIT |
| 161 | + public const int SIZEOF__EHEnum = 0x10; |
| 162 | + public const int OFFSETOF__StackFrameIterator__m_pRegDisplay = 0x218; |
| 163 | + public const int OFFSETOF__ExInfo__m_pPrevExInfo = 0; |
| 164 | + public const int OFFSETOF__ExInfo__m_pExContext = 4; |
| 165 | + public const int OFFSETOF__ExInfo__m_exception = 8; |
| 166 | + public const int OFFSETOF__ExInfo__m_kind = 0xC; |
| 167 | + public const int OFFSETOF__ExInfo__m_passNumber = 0xD; |
| 168 | + public const int OFFSETOF__ExInfo__m_idxCurClause = 0x10; |
| 169 | + public const int OFFSETOF__ExInfo__m_frameIter = 0x18; |
| 170 | + public const int OFFSETOF__ExInfo__m_notifyDebuggerSP = OFFSETOF__ExInfo__m_frameIter + SIZEOF__StackFrameIterator; |
| 171 | +#endif // TARGET_64BIT |
| 172 | + |
| 173 | +#if __cplusplus |
| 174 | + static_assert_no_msg(sizeof(CONTEXT) == AsmOffsets::SIZEOF__PAL_LIMITED_CONTEXT); |
| 175 | +#if TARGET_AMD64 |
| 176 | + static_assert_no_msg(offsetof(CONTEXT, Rip) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP); |
| 177 | + static_assert_no_msg(offsetof(CONTEXT, Rbp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP); |
| 178 | +#elif TARGET_ARM64 |
| 179 | + static_assert_no_msg(offsetof(CONTEXT, Pc) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP); |
| 180 | + static_assert_no_msg(offsetof(CONTEXT, Fp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP); |
| 181 | +#elif TARGET_ARM |
| 182 | + static_assert_no_msg(offsetof(CONTEXT, Pc) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP); |
| 183 | + static_assert_no_msg(offsetof(CONTEXT, R11) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP); |
| 184 | +#elif TARGET_X86 |
| 185 | + static_assert_no_msg(offsetof(CONTEXT, Eip) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP); |
| 186 | + static_assert_no_msg(offsetof(CONTEXT, Ebp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP); |
| 187 | +#elif TARGET_RISCV64 |
| 188 | + static_assert_no_msg(offsetof(CONTEXT, Pc) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__IP); |
| 189 | + static_assert_no_msg(offsetof(CONTEXT, Fp) == AsmOffsets::OFFSETOF__PAL_LIMITED_CONTEXT__FP); |
| 190 | +#endif |
| 191 | + static_assert_no_msg(sizeof(REGDISPLAY) == AsmOffsets::SIZEOF__REGDISPLAY); |
| 192 | + static_assert_no_msg(offsetof(REGDISPLAY, SP) == AsmOffsets::OFFSETOF__REGDISPLAY__SP); |
| 193 | + static_assert_no_msg(offsetof(REGDISPLAY, ControlPC) == AsmOffsets::OFFSETOF__REGDISPLAY__ControlPC); |
| 194 | + static_assert_no_msg(offsetof(REGDISPLAY, pCurrentContext) == AsmOffsets::OFFSETOF__REGDISPLAY__m_pCurrentContext); |
| 195 | + static_assert_no_msg(sizeof(StackFrameIterator) == AsmOffsets::SIZEOF__StackFrameIterator); |
| 196 | + static_assert_no_msg(offsetof(StackFrameIterator, m_crawl) + offsetof(CrawlFrame, pRD) == OFFSETOF__StackFrameIterator__m_pRegDisplay); |
| 197 | + static_assert_no_msg(offsetof(StackFrameIterator, m_isRuntimeWrappedExceptions) == OFFSETOF__StackFrameIterator__m_isRuntimeWrappedExceptions); |
| 198 | + static_assert_no_msg(offsetof(StackFrameIterator, m_AdjustedControlPC) == OFFSETOF__StackFrameIterator__m_AdjustedControlPC); |
| 199 | + static_assert_no_msg(sizeof(ExtendedEHClauseEnumerator) == AsmOffsets::SIZEOF__EHEnum); |
| 200 | + static_assert_no_msg(offsetof(ExInfo, m_pPrevExInfo) == OFFSETOF__ExInfo__m_pPrevExInfo); |
| 201 | + static_assert_no_msg(offsetof(ExInfo, m_pExContext) == OFFSETOF__ExInfo__m_pExContext); |
| 202 | + static_assert_no_msg(offsetof(ExInfo, m_exception) == OFFSETOF__ExInfo__m_exception); |
| 203 | + static_assert_no_msg(offsetof(ExInfo, m_kind) == OFFSETOF__ExInfo__m_kind); |
| 204 | + static_assert_no_msg(offsetof(ExInfo, m_passNumber) == OFFSETOF__ExInfo__m_passNumber); |
| 205 | + static_assert_no_msg(offsetof(ExInfo, m_idxCurClause) == OFFSETOF__ExInfo__m_idxCurClause); |
| 206 | + static_assert_no_msg(offsetof(ExInfo, m_frameIter) == OFFSETOF__ExInfo__m_frameIter); |
| 207 | + static_assert_no_msg(offsetof(ExInfo, m_notifyDebuggerSP) == OFFSETOF__ExInfo__m_notifyDebuggerSP); |
| 208 | +#endif |
| 209 | + |
| 210 | +} |
| 211 | +#if __cplusplus |
| 212 | +; |
| 213 | +#endif |
0 commit comments