Skip to content

Commit ddc7867

Browse files
authored
Remove uses of DECODE_RETURN_KIND part of GCInfo (#110799)
* make hijack frames leaf frames * not using DECODE_RETURN_KIND in NativeAOT * delete DECODE_RETURN_KIND * Fix for unix (x64) * fixes for AOT * arm64 fixes * fix for RISC platforms * fix arm32 build * remove unnecessary now PTFF_RAX_IS_GCREF and similar. * fix fir arm32 * revert to the former value of DECODE_HAS_TAILCALLS - in case there are dependencies in diagnostics.
1 parent 54527ea commit ddc7867

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+224
-376
lines changed

src/coreclr/gcdump/gcdumpnonx86.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,6 @@ size_t GCDump::DumpGCTable(PTR_CBYTE gcInfoBlock,
361361
| DECODE_GENERICS_INST_CONTEXT
362362
| DECODE_GC_LIFETIMES
363363
| DECODE_PROLOG_LENGTH
364-
| DECODE_RETURN_KIND
365364
#if defined(TARGET_ARM) || defined(TARGET_ARM64) || defined(TARGET_RISCV64) || defined(TARGET_LOONGARCH64)
366365
| DECODE_HAS_TAILCALLS
367366
#endif
@@ -502,9 +501,6 @@ size_t GCDump::DumpGCTable(PTR_CBYTE gcInfoBlock,
502501
gcPrintf("Size of parameter area: %x\n", hdrdecoder.GetSizeOfStackParameterArea());
503502
#endif
504503

505-
ReturnKind returnKind = hdrdecoder.GetReturnKind();
506-
gcPrintf("Return Kind: %s\n", ReturnKindToString(returnKind));
507-
508504
UINT32 cbEncodedMethodSize = hdrdecoder.GetCodeLength();
509505
gcPrintf("Code size: %x\n", cbEncodedMethodSize);
510506

src/coreclr/inc/eetwain.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ virtual size_t GetFunctionSize(GCInfoToken gcInfoToken) = 0;
306306
* returns true.
307307
* If hijacking is not possible for some reason, it return false.
308308
*/
309-
virtual bool GetReturnAddressHijackInfo(GCInfoToken gcInfoToken, ReturnKind * returnKind) = 0;
309+
virtual bool GetReturnAddressHijackInfo(GCInfoToken gcInfoToken X86_ARG(ReturnKind * returnKind)) = 0;
310310

311311
#ifndef USE_GC_INFO_DECODER
312312
/*
@@ -575,7 +575,7 @@ size_t GetFunctionSize(GCInfoToken gcInfoToken);
575575
* returns true.
576576
* If hijacking is not possible for some reason, it return false.
577577
*/
578-
virtual bool GetReturnAddressHijackInfo(GCInfoToken gcInfoToken, ReturnKind * returnKind);
578+
virtual bool GetReturnAddressHijackInfo(GCInfoToken gcInfoToken X86_ARG(ReturnKind * returnKind));
579579

580580
#ifndef USE_GC_INFO_DECODER
581581
/*

src/coreclr/inc/gcinfodecoder.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,6 @@ enum GcInfoDecoderFlags
222222
DECODE_PROLOG_LENGTH = 0x400, // length of the prolog (used to avoid reporting generics context)
223223
DECODE_EDIT_AND_CONTINUE = 0x800,
224224
DECODE_REVERSE_PINVOKE_VAR = 0x1000,
225-
DECODE_RETURN_KIND = 0x2000,
226225
#if defined(TARGET_ARM) || defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
227226
DECODE_HAS_TAILCALLS = 0x4000,
228227
#endif // TARGET_ARM || TARGET_ARM64 || TARGET_LOONGARCH64
@@ -582,7 +581,6 @@ class GcInfoDecoder
582581
#if defined(TARGET_ARM) || defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
583582
bool HasTailCalls();
584583
#endif // TARGET_ARM || TARGET_ARM64 || TARGET_LOONGARCH64 || defined(TARGET_RISCV64)
585-
ReturnKind GetReturnKind();
586584
UINT32 GetCodeLength();
587585
UINT32 GetStackBaseRegister();
588586
UINT32 GetSizeOfEditAndContinuePreservedArea();
@@ -615,7 +613,6 @@ class GcInfoDecoder
615613
#ifdef TARGET_ARM64
616614
UINT32 m_SizeOfEditAndContinueFixedStackFrame;
617615
#endif
618-
ReturnKind m_ReturnKind;
619616
#ifdef PARTIALLY_INTERRUPTIBLE_GC_SUPPORTED
620617
UINT32 m_NumSafePoints;
621618
UINT32 m_SafePointIndex;

src/coreclr/nativeaot/Runtime/AsmOffsets.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,11 @@ ASM_OFFSET( 30, 48, Thread, m_pTransitionFrame)
5252
ASM_OFFSET( 34, 50, Thread, m_pDeferredTransitionFrame)
5353
ASM_OFFSET( 44, 70, Thread, m_ppvHijackedReturnAddressLocation)
5454
ASM_OFFSET( 48, 78, Thread, m_pvHijackedReturnAddress)
55-
ASM_OFFSET( 4c, 80, Thread, m_uHijackedReturnValueFlags)
56-
ASM_OFFSET( 50, 88, Thread, m_pExInfoStackHead)
57-
ASM_OFFSET( 54, 90, Thread, m_threadAbortException)
55+
ASM_OFFSET( 4c, 80, Thread, m_pExInfoStackHead)
56+
ASM_OFFSET( 50, 88, Thread, m_threadAbortException)
57+
#ifdef TARGET_X86
58+
ASM_OFFSET( 54, FF, Thread, m_uHijackedReturnValueFlags)
59+
#endif
5860

5961
ASM_SIZEOF( 14, 20, EHEnum)
6062

src/coreclr/nativeaot/Runtime/ICodeManager.h

Lines changed: 11 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -28,92 +28,11 @@ enum GCRefKind : unsigned char
2828
GCRK_Scalar = 0x00,
2929
GCRK_Object = 0x01,
3030
GCRK_Byref = 0x02,
31-
#ifdef TARGET_64BIT
32-
// Composite return kinds for value types returned in two registers (encoded with two bits per register)
33-
GCRK_Scalar_Obj = (GCRK_Object << 2) | GCRK_Scalar,
34-
GCRK_Obj_Obj = (GCRK_Object << 2) | GCRK_Object,
35-
GCRK_Byref_Obj = (GCRK_Object << 2) | GCRK_Byref,
36-
GCRK_Scalar_Byref = (GCRK_Byref << 2) | GCRK_Scalar,
37-
GCRK_Obj_Byref = (GCRK_Byref << 2) | GCRK_Object,
38-
GCRK_Byref_Byref = (GCRK_Byref << 2) | GCRK_Byref,
39-
40-
GCRK_LastValid = GCRK_Byref_Byref,
41-
#else // TARGET_ARM64
4231
GCRK_LastValid = GCRK_Byref,
43-
#endif // TARGET_ARM64
4432
GCRK_Unknown = 0xFF,
4533
};
4634

47-
#ifdef TARGET_ARM64
48-
// Verify that we can use bitwise shifts to convert from GCRefKind to PInvokeTransitionFrameFlags and back
49-
C_ASSERT(PTFF_X0_IS_GCREF == ((uint64_t)GCRK_Object << 32));
50-
C_ASSERT(PTFF_X0_IS_BYREF == ((uint64_t)GCRK_Byref << 32));
51-
C_ASSERT(PTFF_X1_IS_GCREF == ((uint64_t)GCRK_Scalar_Obj << 32));
52-
C_ASSERT(PTFF_X1_IS_BYREF == ((uint64_t)GCRK_Scalar_Byref << 32));
53-
54-
inline uint64_t ReturnKindToTransitionFrameFlags(GCRefKind returnKind)
55-
{
56-
// just need to report gc ref bits here.
57-
// appropriate PTFF_SAVE_ bits will be added by the frame building routine.
58-
return ((uint64_t)returnKind << 32);
59-
}
60-
61-
inline GCRefKind TransitionFrameFlagsToReturnKind(uint64_t transFrameFlags)
62-
{
63-
GCRefKind returnKind = (GCRefKind)((transFrameFlags & (PTFF_X0_IS_GCREF | PTFF_X0_IS_BYREF | PTFF_X1_IS_GCREF | PTFF_X1_IS_BYREF)) >> 32);
64-
ASSERT((returnKind == GCRK_Scalar) || ((transFrameFlags & PTFF_SAVE_X0) && (transFrameFlags & PTFF_SAVE_X1)));
65-
return returnKind;
66-
}
67-
68-
#elif defined(TARGET_LOONGARCH64)
69-
// Verify that we can use bitwise shifts to convert from GCRefKind to PInvokeTransitionFrameFlags and back
70-
C_ASSERT(PTFF_R4_IS_GCREF == ((uint64_t)GCRK_Object << 31));
71-
C_ASSERT(PTFF_R4_IS_BYREF == ((uint64_t)GCRK_Byref << 31));
72-
C_ASSERT(PTFF_R5_IS_GCREF == ((uint64_t)GCRK_Scalar_Obj << 31));
73-
C_ASSERT(PTFF_R5_IS_BYREF == ((uint64_t)GCRK_Scalar_Byref << 31));
74-
75-
inline uint64_t ReturnKindToTransitionFrameFlags(GCRefKind returnKind)
76-
{
77-
// just need to report gc ref bits here.
78-
// appropriate PTFF_SAVE_ bits will be added by the frame building routine.
79-
return ((uint64_t)returnKind << 31);
80-
}
81-
82-
inline GCRefKind TransitionFrameFlagsToReturnKind(uint64_t transFrameFlags)
83-
{
84-
GCRefKind returnKind = (GCRefKind)((transFrameFlags & (PTFF_R4_IS_GCREF | PTFF_R4_IS_BYREF | PTFF_R5_IS_GCREF | PTFF_R5_IS_BYREF)) >> 31);
85-
ASSERT((returnKind == GCRK_Scalar) || ((transFrameFlags & PTFF_SAVE_R4) && (transFrameFlags & PTFF_SAVE_R5)));
86-
return returnKind;
87-
}
88-
89-
#elif defined(TARGET_AMD64)
90-
91-
// Verify that we can use bitwise shifts to convert from GCRefKind to PInvokeTransitionFrameFlags and back
92-
C_ASSERT(PTFF_RAX_IS_GCREF == ((uint64_t)GCRK_Object << 16));
93-
C_ASSERT(PTFF_RAX_IS_BYREF == ((uint64_t)GCRK_Byref << 16));
94-
C_ASSERT(PTFF_RDX_IS_GCREF == ((uint64_t)GCRK_Scalar_Obj << 16));
95-
C_ASSERT(PTFF_RDX_IS_BYREF == ((uint64_t)GCRK_Scalar_Byref << 16));
96-
97-
inline uint64_t ReturnKindToTransitionFrameFlags(GCRefKind returnKind)
98-
{
99-
// just need to report gc ref bits here.
100-
// appropriate PTFF_SAVE_ bits will be added by the frame building routine.
101-
return ((uint64_t)returnKind << 16);
102-
}
103-
104-
inline GCRefKind TransitionFrameFlagsToReturnKind(uint64_t transFrameFlags)
105-
{
106-
GCRefKind returnKind = (GCRefKind)((transFrameFlags & (PTFF_RAX_IS_GCREF | PTFF_RAX_IS_BYREF | PTFF_RDX_IS_GCREF | PTFF_RDX_IS_BYREF)) >> 16);
107-
#if defined(TARGET_UNIX)
108-
ASSERT((returnKind == GCRK_Scalar) || ((transFrameFlags & PTFF_SAVE_RAX) && (transFrameFlags & PTFF_SAVE_RDX)));
109-
#else
110-
ASSERT((returnKind == GCRK_Scalar) || (transFrameFlags & PTFF_SAVE_RAX));
111-
#endif
112-
return returnKind;
113-
}
114-
115-
#elif defined(TARGET_X86)
116-
35+
#if defined(TARGET_X86)
11736
// Verify that we can use bitwise shifts to convert from GCRefKind to PInvokeTransitionFrameFlags and back
11837
C_ASSERT(PTFF_RAX_IS_GCREF == ((uint64_t)GCRK_Object << 16));
11938
C_ASSERT(PTFF_RAX_IS_BYREF == ((uint64_t)GCRK_Byref << 16));
@@ -132,40 +51,13 @@ inline GCRefKind TransitionFrameFlagsToReturnKind(uintptr_t transFrameFlags)
13251
return returnKind;
13352
}
13453

135-
#elif defined(TARGET_ARM)
136-
137-
// Verify that we can use bitwise shifts to convert from GCRefKind to PInvokeTransitionFrameFlags and back
138-
C_ASSERT(PTFF_R0_IS_GCREF == ((uint64_t)GCRK_Object << 14));
139-
C_ASSERT(PTFF_R0_IS_BYREF == ((uint64_t)GCRK_Byref << 14));
140-
141-
inline uint64_t ReturnKindToTransitionFrameFlags(GCRefKind returnKind)
142-
{
143-
// just need to report gc ref bits here.
144-
// appropriate PTFF_SAVE_ bits will be added by the frame building routine.
145-
return ((uint64_t)returnKind << 14);
146-
}
147-
148-
inline GCRefKind TransitionFrameFlagsToReturnKind(uint64_t transFrameFlags)
149-
{
150-
GCRefKind returnKind = (GCRefKind)((transFrameFlags & (PTFF_R0_IS_GCREF | PTFF_R0_IS_BYREF)) >> 14);
151-
ASSERT((returnKind == GCRK_Scalar) || (transFrameFlags & PTFF_SAVE_R0));
152-
return returnKind;
153-
}
154-
155-
#endif
156-
15754
// Extract individual GCRefKind components from a composite return kind
158-
inline GCRefKind ExtractReg0ReturnKind(GCRefKind returnKind)
55+
inline GCRefKind ExtractReturnKind(GCRefKind returnKind)
15956
{
16057
ASSERT(returnKind <= GCRK_LastValid);
16158
return (GCRefKind)(returnKind & (GCRK_Object | GCRK_Byref));
16259
}
163-
164-
inline GCRefKind ExtractReg1ReturnKind(GCRefKind returnKind)
165-
{
166-
ASSERT(returnKind <= GCRK_LastValid);
167-
return (GCRefKind)(returnKind >> 2);
168-
}
60+
#endif
16961

17062
//
17163
// MethodInfo is placeholder type used to allocate space for MethodInfo. Maximum size
@@ -272,9 +164,14 @@ class ICodeManager
272164
virtual bool IsUnwindable(PTR_VOID pvAddress) PURE_VIRTUAL
273165

274166
virtual bool GetReturnAddressHijackInfo(MethodInfo * pMethodInfo,
275-
REGDISPLAY * pRegisterSet, // in
276-
PTR_PTR_VOID * ppvRetAddrLocation, // out
277-
GCRefKind * pRetValueKind) PURE_VIRTUAL // out
167+
REGDISPLAY * pRegisterSet, // in
168+
PTR_PTR_VOID * ppvRetAddrLocation // out
169+
) PURE_VIRTUAL
170+
171+
#ifdef TARGET_X86
172+
virtual GCRefKind GetReturnValueKind(MethodInfo * pMethodInfo,
173+
REGDISPLAY * pRegisterSet) PURE_VIRTUAL
174+
#endif
278175

279176
virtual PTR_VOID RemapHardwareFaultToGCSafePoint(MethodInfo * pMethodInfo, PTR_VOID controlPC) PURE_VIRTUAL
280177

src/coreclr/nativeaot/Runtime/StackFrameIterator.cpp

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,18 @@ StackFrameIterator::StackFrameIterator(Thread * pThreadToWalk, PInvokeTransition
7777
{
7878
InternalInit(pThreadToWalk, pThreadToWalk->GetInterruptedContext(), GcStackWalkFlags | ActiveStackFrame);
7979
}
80-
else
80+
else if (pInitialTransitionFrame == TOP_OF_STACK_MARKER)
8181
{
8282
InternalInit(pThreadToWalk, pInitialTransitionFrame, GcStackWalkFlags);
8383
}
84+
else
85+
{
86+
uint32_t flags = (pInitialTransitionFrame->m_Flags & PTFF_THREAD_HIJACK) == 0 ?
87+
GcStackWalkFlags :
88+
GcStackWalkFlags | ActiveStackFrame;
89+
90+
InternalInit(pThreadToWalk, pInitialTransitionFrame, flags);
91+
}
8492

8593
PrepareToYieldFrame();
8694
}
@@ -110,8 +118,10 @@ void StackFrameIterator::EnterInitialInvalidState(Thread * pThreadToWalk)
110118
m_pThread = pThreadToWalk;
111119
m_pInstance = GetRuntimeInstance();
112120
m_pCodeManager = NULL;
121+
#ifdef TARGET_X86
113122
m_pHijackedReturnValue = NULL;
114123
m_HijackedReturnValueKind = GCRK_Unknown;
124+
#endif
115125
m_pConservativeStackRangeLowerBound = NULL;
116126
m_pConservativeStackRangeUpperBound = NULL;
117127
m_pendingFuncletFramePointer = NULL;
@@ -180,17 +190,6 @@ void StackFrameIterator::InternalInit(Thread * pThreadToWalk, PInvokeTransitionF
180190
if (pFrame->m_Flags & PTFF_SAVE_R3) { m_RegDisplay.pR3 = pPreservedRegsCursor++; }
181191
if (pFrame->m_Flags & PTFF_SAVE_LR) { m_RegDisplay.pLR = pPreservedRegsCursor++; }
182192

183-
if (pFrame->m_Flags & PTFF_R0_IS_GCREF)
184-
{
185-
m_pHijackedReturnValue = (PTR_OBJECTREF) m_RegDisplay.pR0;
186-
m_HijackedReturnValueKind = GCRK_Object;
187-
}
188-
if (pFrame->m_Flags & PTFF_R0_IS_BYREF)
189-
{
190-
m_pHijackedReturnValue = (PTR_OBJECTREF) m_RegDisplay.pR0;
191-
m_HijackedReturnValueKind = GCRK_Byref;
192-
}
193-
194193
#elif defined(TARGET_ARM64)
195194
m_RegDisplay.pFP = (PTR_uintptr_t)PTR_HOST_MEMBER_TADDR(PInvokeTransitionFrame, pFrame, m_FramePointer);
196195
m_RegDisplay.pLR = (PTR_uintptr_t)PTR_HOST_MEMBER_TADDR(PInvokeTransitionFrame, pFrame, m_RIP);
@@ -232,13 +231,6 @@ void StackFrameIterator::InternalInit(Thread * pThreadToWalk, PInvokeTransitionF
232231

233232
if (pFrame->m_Flags & PTFF_SAVE_LR) { m_RegDisplay.pLR = pPreservedRegsCursor++; }
234233

235-
GCRefKind retValueKind = TransitionFrameFlagsToReturnKind(pFrame->m_Flags);
236-
if (retValueKind != GCRK_Scalar)
237-
{
238-
m_pHijackedReturnValue = (PTR_OBJECTREF)m_RegDisplay.pX0;
239-
m_HijackedReturnValueKind = retValueKind;
240-
}
241-
242234
#elif defined(TARGET_LOONGARCH64)
243235
m_RegDisplay.pFP = (PTR_uintptr_t)PTR_HOST_MEMBER_TADDR(PInvokeTransitionFrame, pFrame, m_FramePointer);
244236
m_RegDisplay.pRA = (PTR_uintptr_t)PTR_HOST_MEMBER_TADDR(PInvokeTransitionFrame, pFrame, m_RIP);
@@ -280,13 +272,6 @@ void StackFrameIterator::InternalInit(Thread * pThreadToWalk, PInvokeTransitionF
280272

281273
if (pFrame->m_Flags & PTFF_SAVE_RA) { m_RegDisplay.pRA = pPreservedRegsCursor++; }
282274

283-
GCRefKind retValueKind = TransitionFrameFlagsToReturnKind(pFrame->m_Flags);
284-
if (retValueKind != GCRK_Scalar)
285-
{
286-
m_pHijackedReturnValue = (PTR_OBJECTREF)m_RegDisplay.pR4;
287-
m_HijackedReturnValueKind = retValueKind;
288-
}
289-
290275
#else // TARGET_ARM
291276
if (pFrame->m_Flags & PTFF_SAVE_RBX) { m_RegDisplay.pRbx = pPreservedRegsCursor++; }
292277
if (pFrame->m_Flags & PTFF_SAVE_RSI) { m_RegDisplay.pRsi = pPreservedRegsCursor++; }
@@ -314,12 +299,14 @@ void StackFrameIterator::InternalInit(Thread * pThreadToWalk, PInvokeTransitionF
314299
if (pFrame->m_Flags & PTFF_SAVE_R11) { m_RegDisplay.pR11 = pPreservedRegsCursor++; }
315300
#endif // TARGET_AMD64
316301

302+
#ifdef TARGET_X86
317303
GCRefKind retValueKind = TransitionFrameFlagsToReturnKind(pFrame->m_Flags);
318304
if (retValueKind != GCRK_Scalar)
319305
{
320306
m_pHijackedReturnValue = (PTR_OBJECTREF)m_RegDisplay.pRax;
321307
m_HijackedReturnValueKind = retValueKind;
322308
}
309+
#endif
323310

324311
#endif // TARGET_ARM
325312

@@ -1529,8 +1516,10 @@ void StackFrameIterator::NextInternal()
15291516
m_dwFlags &= ~(ExCollide|MethodStateCalculated|UnwoundReversePInvoke|ActiveStackFrame);
15301517
ASSERT(IsValid());
15311518

1519+
#ifdef TARGET_X86
15321520
m_pHijackedReturnValue = NULL;
15331521
m_HijackedReturnValueKind = GCRK_Unknown;
1522+
#endif
15341523

15351524
#ifdef _DEBUG
15361525
SetControlPC(dac_cast<PTR_VOID>((void*)666));
@@ -1944,6 +1933,7 @@ void StackFrameIterator::CalculateCurrentMethodState()
19441933
m_dwFlags |= MethodStateCalculated;
19451934
}
19461935

1936+
#ifdef TARGET_X86
19471937
bool StackFrameIterator::GetHijackedReturnValueLocation(PTR_OBJECTREF * pLocation, GCRefKind * pKind)
19481938
{
19491939
if (GCRK_Unknown == m_HijackedReturnValueKind)
@@ -1955,6 +1945,7 @@ bool StackFrameIterator::GetHijackedReturnValueLocation(PTR_OBJECTREF * pLocatio
19551945
*pKind = m_HijackedReturnValueKind;
19561946
return true;
19571947
}
1948+
#endif
19581949

19591950
void StackFrameIterator::SetControlPC(PTR_VOID controlPC)
19601951
{

src/coreclr/nativeaot/Runtime/StackFrameIterator.h

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ class StackFrameIterator
5151
PTR_ICodeManager GetCodeManager();
5252
MethodInfo * GetMethodInfo();
5353
bool IsActiveStackFrame();
54+
#ifdef TARGET_X86
5455
bool GetHijackedReturnValueLocation(PTR_OBJECTREF * pLocation, GCRefKind * pKind);
56+
#endif
5557
void SetControlPC(PTR_VOID controlPC);
5658

5759
static bool IsValidReturnAddress(PTR_VOID pvAddress);
@@ -221,10 +223,12 @@ class StackFrameIterator
221223
PTR_ICodeManager m_pCodeManager;
222224
MethodInfo m_methodInfo;
223225
PTR_VOID m_effectiveSafePointAddress;
226+
#ifdef TARGET_X86
224227
PTR_OBJECTREF m_pHijackedReturnValue;
225228
GCRefKind m_HijackedReturnValueKind;
226-
PTR_uintptr_t m_pConservativeStackRangeLowerBound;
227-
PTR_uintptr_t m_pConservativeStackRangeUpperBound;
229+
#endif
230+
PTR_uintptr_t m_pConservativeStackRangeLowerBound;
231+
PTR_uintptr_t m_pConservativeStackRangeUpperBound;
228232
uint32_t m_dwFlags;
229233
PTR_ExInfo m_pNextExInfo;
230234
PTR_VOID m_pendingFuncletFramePointer;

src/coreclr/nativeaot/Runtime/amd64/AsmMacros.inc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,9 +356,8 @@ PTFF_SAVE_ALL_PRESERVED equ 000000F7h ;; NOTE: RBP is not included in this set
356356
PTFF_SAVE_RSP equ 00008000h
357357
PTFF_SAVE_RAX equ 00000100h ;; RAX is saved in hijack handler - in case it contains a GC ref
358358
PTFF_SAVE_ALL_SCRATCH equ 00007F00h
359-
PTFF_RAX_IS_GCREF equ 00010000h ;; iff PTFF_SAVE_RAX: set -> eax is Object, clear -> eax is scalar
360-
PTFF_RAX_IS_BYREF equ 00020000h ;; iff PTFF_SAVE_RAX: set -> eax is ByRef, clear -> eax is Object or scalar
361359
PTFF_THREAD_ABORT equ 00100000h ;; indicates that ThreadAbortException should be thrown when returning from the transition
360+
PTFF_THREAD_HIJACK equ 00200000h ;; indicates that this is a frame for a hijacked call
362361

363362
;; These must match the TrapThreadsFlags enum
364363
TrapThreadsFlags_None equ 0

0 commit comments

Comments
 (0)