[cDAC] Implement delegate inspection DacDbi APIs#128784
Open
Copilot wants to merge 5 commits into
Open
Conversation
Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
This was referenced May 30, 2026
Open
Contributor
|
Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag |
Contributor
There was a problem hiding this comment.
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
GetDelegateTypeand slimsGetDelegateFunctionData/GetDelegateTargetObjectsignatures acrossdacdbi.idl,dacdbiinterface.h,dacdbiimpl.{h,cpp}, and thedivalue.cppconsumer. - cDAC contract: new
Delegatedata type,cdac_data<DelegateObject>inobject.h,IObject.GetDelegateInfo/DelegateInfo,Object_1implementation, andCORDBG_E_UNSUPPORTED_DELEGATE. - Managed DacDbi: implements both delegate APIs in
DacDbiImplwith try/catch +#if DEBUGlegacy validation, plus a sharedIsDelegateHelper; adds mock delegate object layout and four xUnit theories inObjectTests.
Show a summary per file
| File | Description |
|---|---|
| src/coreclr/inc/dacdbi.idl | Drop DelegateType typedef + GetDelegateType; trim parameters on the two delegate APIs. |
| src/coreclr/debug/inc/dacdbiinterface.h | Mirror 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.cpp | Update consumers to call simplified DAC APIs directly. |
| src/coreclr/vm/object.h | Add cdac_data<DelegateObject> with Target/MethodPtr/MethodPtrAux/InvocationCount offsets. |
| src/coreclr/vm/datadescriptor/datadescriptor.inc | Emit new Delegate cDAC type descriptor. |
| src/coreclr/vm/comdelegate.cpp | Comment-only fix-up to reflect the removed GetDelegateType API. |
| src/native/managed/cdac/.../Data/Delegate.cs, DataType.cs | New managed data type + enum entry. |
| src/native/managed/cdac/.../Abstractions/Contracts/IObject.cs, CorDbHResults.cs | Add DelegateInfo record + GetDelegateInfo default; add CORDBG_E_UNSUPPORTED_DELEGATE. |
| src/native/managed/cdac/.../Contracts/Object_1.cs | Implement GetDelegateInfo over the new descriptor. |
| src/native/managed/cdac/.../Legacy/Dbi/IDacDbiInterface.cs | Update vtable to match native (drop GetDelegateType, slim signatures). |
| src/native/managed/cdac/.../Legacy/Dbi/DacDbiImpl.cs | Implement both delegate APIs with debug validation; extract IsDelegateHelper. |
| src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.Object.cs | Add MockDelegateObjectData + AddDelegateObject helper. |
| src/native/managed/cdac/tests/ObjectTests.cs | New closed/open/multicast GetDelegateInfo theories. |
| docs/design/datacontracts/Object.md | Document the new DelegateInfo API and Delegate data descriptor fields. |
Copilot's findings
- Files reviewed: 18/18 changed files
- Comments generated: 3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implements
GetDelegateFunctionDataandGetDelegateTargetObjectin the managed cDAC DacDbi layer, on top of cherry-picked native commit86d4004which removesGetDelegateTypeand simplifies the two delegate APIs' signatures.cDAC contract
IObject.GetDelegateInfo(addr, out methodPtr, out methodPtrAux, out invocationCount)implemented inObject_1via a newData.Delegatetype. No version bump; no compat shims for older dumps.Data descriptors
cdac_data<DelegateObject>template + friend insrc/coreclr/vm/object.h.Delegatetype indatadescriptor.incwithTarget,MethodPtr,MethodPtrAux,InvocationList,InvocationCount.DataType.Delegateenum value.DacDbi cDAC implementations
DacDbiImpl.GetDelegateFunctionData/GetDelegateTargetObjectimplemented using the new contract +ExecutionManager,RuntimeTypeSystem, andLoadercontracts. Delegate-kind branching (closed / open / multicast / wrapper) mirrors the native logic.#if DEBUGvalidation against the legacy implementation (Debug.ValidateHResult+Debug.Asserton outputs).CORDBG_E_UNSUPPORTED_DELEGATEHR constant.GetDelegateTypeis dropped inIDacDbiInterface.csto match the native interface.Unit tests
MockDelegateObjectData+AddDelegateObjecthelpers inMockDescriptors.Object.cs.ObjectTestscases forGetDelegateInfo: closed delegate, open delegate, multicast delegate, and null-address argument validation.Passes internal delegate inspection tests, matching the current limitations of support (these limitations do surface at the ICD boundary).