Implement ISOSDacInterface::GetJitManagerList in cDAC SOSDacImpl#124815
Implement ISOSDacInterface::GetJitManagerList in cDAC SOSDacImpl#124815max-charlamb merged 18 commits intomainfrom
Conversation
|
Tagging subscribers to this area: @steveisok, @tommcdon, @dotnet/dotnet-diag |
- Add AllCodeHeaps field to cdac_data<EEJitManager> and EEJitManagerAddress global pointer - Update datadescriptor.inc with new type field and global pointer - Add JitManagerInfo struct and GetJitManagerInfo() to IExecutionManager contract - Implement GetJitManagerInfo in ExecutionManagerCore, ExecutionManager_1, ExecutionManager_2 - Define DacpJitManagerInfo struct in ISOSDacInterface.cs - Implement GetJitManagerList in SOSDacImpl.cs with DEBUG comparison - Add unit tests for GetJitManagerInfo (16 new tests, all pass) - Update MockDescriptors.ExecutionManager with EEJitManager type and global Co-authored-by: max-charlamb <44248479+max-charlamb@users.noreply.github.com>
… descriptors Co-authored-by: max-charlamb <44248479+max-charlamb@users.noreply.github.com>
max-charlamb
left a comment
There was a problem hiding this comment.
Pretty close, @copilot address comments.
...ed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/Contracts/IExecutionManager.cs
Outdated
Show resolved
Hide resolved
Co-authored-by: max-charlamb <44248479+max-charlamb@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Implements the cDAC-side ISOSDacInterface::GetJitManagerList by plumbing the EEJitManager address and heap list through CoreCLR data descriptors into the managed ExecutionManager contract, then consuming it from SOSDacImpl with DEBUG legacy-DAC comparison.
Changes:
- Add CoreCLR data descriptor support for
EEJitManager::m_pAllCodeHeapsand expose a global pointer toExecutionManager::m_pEEJitManager. - Add
JitManagerInfo+GetEEJitManagerInfo()to the managedIExecutionManagercontract and implement it inExecutionManagerCore. - Update SOS COM interface/implementation to use a typed
DacpJitManagerInfoand add contract-level unit tests + documentation updates.
Reviewed changes
Copilot reviewed 13 out of 13 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/native/managed/cdac/tests/MockDescriptors/MockDescriptors.ExecutionManager.cs | Extends mock target descriptors/globals to model EEJitManager and its heap list pointer. |
| src/native/managed/cdac/tests/ExecutionManager/ExecutionManagerTests.cs | Adds unit tests validating GetEEJitManagerInfo() across arch/version permutations. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/SOSDacImpl.cs | Replaces GetJitManagerList stub with a contract-backed implementation + DEBUG legacy comparison. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Legacy/ISOSDacInterface.cs | Introduces DacpJitManagerInfo and updates COM signature to use a typed pointer. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/EEJitManager.cs | Adds AllCodeHeaps data-model field read from the target. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/ExecutionManager/ExecutionManager_1.cs | Forwards GetEEJitManagerInfo() to the core implementation. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/ExecutionManager/ExecutionManager_2.cs | Forwards GetEEJitManagerInfo() to the core implementation. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Contracts/ExecutionManager/ExecutionManagerCore.cs | Implements GetEEJitManagerInfo() by reading the new global + EEJitManager data. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Constants.cs | Adds Globals.EEJitManagerAddress constant name. |
| src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/Contracts/IExecutionManager.cs | Adds JitManagerInfo struct and the new contract method. |
| src/coreclr/vm/datadescriptor/datadescriptor.inc | Exposes EEJitManager.AllCodeHeaps and the EEJitManagerAddress global pointer. |
| src/coreclr/vm/codeman.h | Adds cdac_data access for m_pAllCodeHeaps and exposes m_pEEJitManager pointer location. |
| docs/design/datacontracts/ExecutionManager.md | Documents the new descriptor/global and contract API. |
....Diagnostics.DataContractReader.Contracts/Contracts/ExecutionManager/ExecutionManagerCore.cs
Show resolved
Hide resolved
src/native/managed/cdac/Microsoft.Diagnostics.DataContractReader.Contracts/Data/EEJitManager.cs
Show resolved
Hide resolved
|
@copilot , use the CI-Analysis tool to look at the runtime-diagnostics pipeline failures. There is a problem that one of the datadescriptors added does not evaluate to a constant. |
…data<ExecutionManager> Co-authored-by: max-charlamb <44248479+max-charlamb@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
Should we keep this as a draft until copilot is done with its checklist? |
|
@copilot, try again (and please resolve the merge conflicts) |
…L_POINTER instead of constexpr intermediary The cdac_data<ExecutionManager>::EEJitManagerPtr constexpr member was failing to evaluate as a constant on MSVC because taking the address of a static member variable (SPTR_DECL expands to static PTR_EEJitManager) is not a constant expression. Use the direct &ExecutionManager::m_pEEJitManager pattern (matching how AppDomain::m_pTheAppDomain is exposed). Co-authored-by: max-charlamb <44248479+max-charlamb@users.noreply.github.com>
Fixed the CI failure in d65ad16 — the Note: there's a merge conflict in |
…nFragment.cs Co-authored-by: max-charlamb <44248479+max-charlamb@users.noreply.github.com>
|
@copilot, there are still merge conflicts. Please resolve them |
...ed/cdac/Microsoft.Diagnostics.DataContractReader.Abstractions/Contracts/IExecutionManager.cs
Show resolved
Hide resolved
…ectibleFragmentNext and GetEEJitManagerInfo tests) Co-authored-by: max-charlamb <44248479+max-charlamb@users.noreply.github.com>
Resolved in 9cb5452. Merged latest main — the conflict was in |
…-jit-manager-list # Conflicts: # src/native/managed/cdac/tests/ExecutionManager/ExecutionManagerTests.cs
…arameters Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
Resolved in 4ff5c48. Merged latest main — the conflict was in |
|
@copilot code review[agent] ignore my last comment |
Co-authored-by: rcj1 <77995559+rcj1@users.noreply.github.com>
|
@copilot , can you please fix the merge conflicts? |
…nagerInfo and DacpSyncBlockData structs)
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.