[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[cDAC] Implement delegate inspection DacDbi APIs - #128784

Merged
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis
Jun 1, 2026
Merged

[cDAC] Implement delegate inspection DacDbi APIs#128784
rcj1 merged 9 commits into
mainfrom
copilot/delegate-inspection-apis

Conversation

CopilotAI commented May 29, 2026

Copy link
Copy Markdown
Contributor

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of cherry-picked native commit 86d4004 which removes GetDelegateType and simplifies the two delegate APIs' signatures.

cDAC contract

  • New IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount) implemented in Object_1 via a new Data.Delegate type. No version bump; no compat shims for older dumps.

Data descriptors

  • cdac_data<DelegateObject> template + friend in src/coreclr/vm/object.h.
  • New Delegate type in datadescriptor.inc with Target, MethodPtr, MethodPtrAux, InvocationList, InvocationCount.
  • DataType.Delegate enum value.

DacDbi cDAC implementations

  • DacDbiImpl.GetDelegateFunctionData / GetDelegateTargetObject implemented using the new contract + ExecutionManager, RuntimeTypeSystem, and Loader contracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.
  • Both follow the standard cDAC pattern: try/catch translating exceptions to HRs, plus #if DEBUG validation against the legacy implementation (Debug.ValidateHResult + Debug.Assert on outputs).
  • Added CORDBG_E_UNSUPPORTED_DELEGATE HR constant.
  • Vtable slot for the removed GetDelegateType is dropped in IDacDbiInterface.cs to match the native interface.

Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).

Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 30, 2026 16:46
@rcj1rcj1 added area-Diagnostics-cdac and removed NO-REVIEW Experimental/testing PR, do NOT review it area-Diagnostics-coreclr labels May 30, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag
See info in area-owners.md if you want to be subscribed.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Implements GetDelegateFunctionData and GetDelegateTargetObject in the managed cDAC DacDbi layer, on top of a cherry-picked native simplification that removes GetDelegateType and drops the delegateType/ppTargetAppDomain parameters from the two surviving delegate APIs. Adds the supporting Delegate data descriptor, an IObject.GetDelegateInfo contract member, and unit tests for the new managed code path.

Changes:

  • Native: removes GetDelegateType and slims GetDelegateFunctionData/GetDelegateTargetObject signatures across dacdbi.idl, dacdbiinterface.h, dacdbiimpl.{h,cpp}, and the divalue.cpp consumer.
  • cDAC contract: new Delegate data type, cdac_data<DelegateObject> in object.h, IObject.GetDelegateInfo/DelegateInfo, Object_1 implementation, and CORDBG_E_UNSUPPORTED_DELEGATE.
  • Managed DacDbi: implements both delegate APIs in DacDbiImpl with try/catch + #if DEBUG legacy validation, plus a shared IsDelegateHelper; adds mock delegate object layout and four xUnit theories in ObjectTests.
Show a summary per file
FileDescription
src/coreclr/inc/dacdbi.idlDrop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs.
src/coreclr/debug/inc/dacdbiinterface.hMirror IDL: remove DelegateType enum and GetDelegateType vtable slot.
src/coreclr/debug/daccess/dacdbiimpl.{h,cpp}Remove GetDelegateType; rewrite the two APIs to check IsDelegate/InvocationCount and dispatch on _methodPtrAux.
src/coreclr/debug/di/divalue.cppUpdate consumers to call simplified DAC APIs directly.
src/coreclr/vm/object.hAdd cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets.
src/coreclr/vm/datadescriptor/datadescriptor.incEmit new Delegate cDAC type descriptor.
src/coreclr/vm/comdelegate.cppComment-only fix-up to reflect the removed GetDelegateType API.
src/native/managed/cdac/.../Data/Delegate.cs, DataType.csNew managed data type + enum entry.
src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.csAdd DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE.
src/native/managed/cdac/.../Contracts/Object_1.csImplement GetDelegateInfo over the new descriptor.
src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.csUpdate vtable to match native (drop GetDelegateType, slim signatures).
src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.csImplement both delegate APIs with debug validation; extract IsDelegateHelper.
src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.csAdd MockDelegateObjectData + AddDelegateObject helper.
src/native/managed/cdac/tests/ObjectTests.csNew closed/open/multicast GetDelegateInfo theories.
docs/design/datacontracts/Object.mdDocument the new DelegateInfo API and Delegate data descriptor fields.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 3

Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
Comment threadsrc/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs Outdated
@rcj1rcj1 changed the title [WIP] Implement delegate inspection DacDbi APIs on cDAC[cDAC] Implement delegate inspection DacDbi APIsMay 30, 2026
CopilotAI review requested due to automatic review settings May 30, 2026 17:31

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 18/18 changed files
  • Comments generated: 0 new

@rcj1
rcj1 marked this pull request as ready for review May 30, 2026 18:14
@rcj1
rcj1 requested a review from hoyosjsMay 31, 2026 16:28
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp Outdated
Comment threadsrc/coreclr/debug/daccess/dacdbiimpl.cpp
Comment threadsrc/coreclr/inc/dacdbi.idl
Comment threaddocs/design/datacontracts/Object.md Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 17:45
@rcj1
rcj1force-pushed the copilot/delegate-inspection-apis branch from a5aa44e to b5fdf81CompareJune 1, 2026 17:45

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 0 new

Comment threadsrc/coreclr/vm/comdelegate.cpp Outdated
CopilotAI review requested due to automatic review settings June 1, 2026 23:47
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot's findings

  • Files reviewed: 29/29 changed files
  • Comments generated: 1

Comment threadsrc/native/managed/cdac/tests/ObjectTests.cs
@rcj1

rcj1 commented Jun 1, 2026

Copy link
Copy Markdown
Contributor

/ba-g comment only changes

@rcj1
rcj1 merged commit e9e3c8d into mainJun 1, 2026
25 of 41 checks passed
@rcj1
rcj1 deleted the copilot/delegate-inspection-apis branch June 1, 2026 23:50
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 2, 2026
max-charlamb pushed a commit to max-charlamb/runtime that referenced this pull request Jun 10, 2026
…peline
Three pieces:
1. eng/Subsets.props: wire the DataGeneratorTests project
(cdac/tests/DataGenerator/) under the existing tools.cdactests subset
alongside the existing UnitTests project. No new subset -- one subset
builds both managed-side cDAC test projects.
2. eng/pipelines/runtime-diagnostics.yml: new CdacUnitTests stage that
runs tools.cdactests on linux_x64 Checked with -test. Independent of
the dump/stress legs (no native runtime needed). Publishes xunit
results. Now the cDAC unit tests + DataGenerator tests live in the
cDAC-focused pipeline next to the dump/stress tests.
3. src/native/managed/cdac/tests/DataGenerator/TestTarget.cs: override
the new Target.ReadNInt abstract method (added in e9e3c8d,
dotnet#128784) so the DataGeneratorTests project compiles. Mirrors the
existing ReadNUInt override.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
max-charlamb added a commit that referenced this pull request Jun 14, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 2, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@rcj1@noahfalk@lateralusX