Skip to content

cDAC: extend GCREFS stress coverage to non-Windows / ARM targets #130008

Description

@max-charlamb

Summary

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:

  1. ICallingConvention.TryComputeArgGCRefMapBlob produces a byte-identical blob to the runtime's GcInfoEncoder output (verified by the [ARGITER] sub-check in cdacstress).
  2. CdacStressTestBase.AssertAllPassed is broadened to require KnownIssues == 0 on the target.
  3. The WindowsOnly / Windows-x86-or-x64 gate is removed from the corresponding test in CdacStressTests.cs.

Related

Note

This issue was authored with assistance from GitHub Copilot.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions