You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
After PR #129858, GcScanner.PromoteCallerStack synthesizes a GCRefMap blob via ICallingConvention.TryComputeArgGCRefMapBlob and walks every transition Frame's caller-stack refs end-to-end. The GCREFS cdacstress suite is enforced to have zero KnownIssues on Windows x86 / x64 (CdacStressTestBase.AssertAllPassed).
On all other targets the assertion is relaxed to "no hard failures" because TryComputeArgGCRefMapBlob either is not implemented for the platform's calling convention or has known gaps. This tracking issue covers extending coverage so the strict assertion can be enabled everywhere.
Targets that need work
Target
Gap
Linux x64 / macOS x64 (SystemV-AMD64)
Struct-in-register classification per the SystemV ABI is not implemented in CallingConvention_1.ComputeArgGCRefMapBlobCore.
Linux ARM64 / macOS ARM64 (AAPCS64)
Struct-in-register classification per the AAPCS64 / Apple ARM64 variant is not implemented.
Windows ARM64
ARM64 ArgIterator + GCRefMap encoding port not done.
Linux ARM32
ARM32 ABI port (ArgIterator + GCRefMap) not done.
Definition of done
For each target above:
ICallingConvention.TryComputeArgGCRefMapBlob produces a byte-identical blob to the runtime's GcInfoEncoder output (verified by the [ARGITER] sub-check in cdacstress).
CdacStressTestBase.AssertAllPassed is broadened to require KnownIssues == 0 on the target.
The WindowsOnly / Windows-x86-or-x64 gate is removed from the corresponding test in CdacStressTests.cs.
Summary
After PR #129858,
GcScanner.PromoteCallerStacksynthesizes a GCRefMap blob viaICallingConvention.TryComputeArgGCRefMapBloband walks every transition Frame's caller-stack refs end-to-end. The GCREFS cdacstress suite is enforced to have zeroKnownIssueson Windows x86 / x64 (CdacStressTestBase.AssertAllPassed).On all other targets the assertion is relaxed to "no hard failures" because
TryComputeArgGCRefMapBlobeither is not implemented for the platform's calling convention or has known gaps. This tracking issue covers extending coverage so the strict assertion can be enabled everywhere.Targets that need work
CallingConvention_1.ComputeArgGCRefMapBlobCore.ArgIterator+ GCRefMap) not done.Definition of done
For each target above:
ICallingConvention.TryComputeArgGCRefMapBlobproduces a byte-identical blob to the runtime'sGcInfoEncoderoutput (verified by the[ARGITER]sub-check in cdacstress).CdacStressTestBase.AssertAllPassedis broadened to requireKnownIssues == 0on the target.WindowsOnly/ Windows-x86-or-x64 gate is removed from the corresponding test inCdacStressTests.cs.Related
Note
This issue was authored with assistance from GitHub Copilot.