@@ -2122,34 +2122,43 @@ TADDR EECodeManager::GetAmbientSP(PREGDISPLAY pContext,
2122
2122
2123
2123
/* Extract the necessary information from the info block header */
2124
2124
2125
+ PTR_CBYTE table = nullptr ;
2125
2126
hdrInfo hdrInfoBody = { 0 };
2126
- PTR_CBYTE table = pCodeInfo->DecodeGCHdrInfo (&hdrInfoBody, dwRelOffset);
2127
+ hdrInfo *pCodeInfoBody = &hdrInfoBody;
2128
+ if (pCodeInfo->GetRelOffset () == dwRelOffset)
2129
+ {
2130
+ table = pCodeInfo->DecodeGCHdrInfo (&pCodeInfoBody);
2131
+ }
2132
+ else
2133
+ {
2134
+ table = pCodeInfo->DecodeGCHdrInfo (&hdrInfoBody, dwRelOffset);
2135
+ }
2127
2136
2128
2137
#if defined(_DEBUG) && !defined(DACCESS_COMPILE)
2129
2138
if (trFixContext)
2130
2139
{
2131
2140
minipal_log_print_info (" GetAmbientSP [%s][%s] for %s.%s: " ,
2132
- hdrInfoBody. ebpFrame ?" ebp" :" " ,
2133
- hdrInfoBody. interruptible ?" int" :" " ,
2141
+ pCodeInfoBody-> ebpFrame ?" ebp" :" " ,
2142
+ pCodeInfoBody-> interruptible ?" int" :" " ,
2134
2143
" UnknownClass" ," UnknownMethod" );
2135
2144
minipal_log_flush_info ();
2136
2145
}
2137
2146
#endif // _DEBUG && !DACCESS_COMPILE
2138
2147
2139
- if ((hdrInfoBody. prologOffs != hdrInfo::NOT_IN_PROLOG) ||
2140
- (hdrInfoBody. epilogOffs != hdrInfo::NOT_IN_EPILOG))
2148
+ if ((pCodeInfoBody-> prologOffs != hdrInfo::NOT_IN_PROLOG) ||
2149
+ (pCodeInfoBody-> epilogOffs != hdrInfo::NOT_IN_EPILOG))
2141
2150
{
2142
2151
return NULL ;
2143
2152
}
2144
2153
2145
2154
/* make sure that we have an ebp stack frame */
2146
2155
2147
- if (hdrInfoBody. handlers )
2156
+ if (pCodeInfoBody-> handlers )
2148
2157
{
2149
- _ASSERTE (hdrInfoBody. ebpFrame );
2158
+ _ASSERTE (pCodeInfoBody-> ebpFrame );
2150
2159
2151
2160
TADDR baseSP;
2152
- GetHandlerFrameInfo (&hdrInfoBody ,
2161
+ GetHandlerFrameInfo (pCodeInfoBody ,
2153
2162
GetRegdisplayFP (pContext),
2154
2163
(DWORD) IGNORE_VAL,
2155
2164
nestingLevel,
@@ -2162,24 +2171,24 @@ TADDR EECodeManager::GetAmbientSP(PREGDISPLAY pContext,
2162
2171
2163
2172
_ASSERTE (nestingLevel == 0 );
2164
2173
2165
- if (hdrInfoBody. ebpFrame )
2174
+ if (pCodeInfoBody-> ebpFrame )
2166
2175
{
2167
- return GetOutermostBaseFP (GetRegdisplayFP (pContext), &hdrInfoBody );
2176
+ return GetOutermostBaseFP (GetRegdisplayFP (pContext), pCodeInfoBody );
2168
2177
}
2169
2178
2170
2179
TADDR baseSP = GetRegdisplaySP (pContext);
2171
- if (hdrInfoBody. interruptible )
2180
+ if (pCodeInfoBody-> interruptible )
2172
2181
{
2173
- baseSP += scanArgRegTableI (skipToArgReg (hdrInfoBody , table),
2182
+ baseSP += scanArgRegTableI (skipToArgReg (*pCodeInfoBody , table),
2174
2183
dwRelOffset,
2175
2184
dwRelOffset,
2176
- &hdrInfoBody );
2185
+ pCodeInfoBody );
2177
2186
}
2178
2187
else
2179
2188
{
2180
- baseSP += scanArgRegTable (skipToArgReg (hdrInfoBody , table),
2189
+ baseSP += scanArgRegTable (skipToArgReg (*pCodeInfoBody , table),
2181
2190
dwRelOffset,
2182
- &hdrInfoBody );
2191
+ pCodeInfoBody );
2183
2192
}
2184
2193
2185
2194
return baseSP;
0 commit comments