-
Notifications
You must be signed in to change notification settings - Fork 4.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[cdac] Deploy cdac with SOS in .NET 10 #108720
Comments
Tagging subscribers to this area: @tommcdon |
The entrypoint would be STDAPI CLRDataCreateInstance(REFIID iid, ICLRDataTarget* target, void** iface); Where iid will be one of the ISOSDacInterfaceNN interfaces The cdac as currently imagined needs two things to get going:
We can get the former using For the latter we could QI interface ICLRRuntimeSymbol : IUnknown
{
HRESULT TryGetSymbol([in] LPCSTR symbolName, [out] CLRDATA_ADDRESS* address);
} similar to what the brittle DAC does with |
I assume when SOS is targetting downlevel runtimes it would still load an older brittle DAC? |
I think there's two separate answers:
|
Now I'm thinking this should be more like ICLRRuntimeLocator and not inherit with only TryGetSymbol on it. It would allow a more minimal data target impl for cases that are only going to use the cDAC (like in testing, etc.). SOS will have to implement all the interfaces it does now and it would be easy to add this one more. We can call it something like ICLRRuntimeSymbol. |
What about for diagnostic experiences that currently depend on contracts not defined by Some of these APIs are relatively easily representable in cDAC contracts with a managed API but projecting them through an unmanaged interface could be expensive. Is there some way we could come up with a solution that wouldn't require going through an unmanaged API? |
I think mscorcdac and Microsoft.Diagnostics.DataContractReader are separate products (that happen to be built from substantially similar sources). We could have a separate plan for how we ship the managed library. |
This name is a bit suspect. We've removed "ms" from many places - |
I'm not hung up on the name. I suggested something similar to the existing DAC name, but not for any good reason. I guess I assumed that "ms" was supposed to be in the name. |
The original acronym DAC stands for "Data Access Component". Its a pretty generic name :) I'd avoid "access control" as that term has strong connotations of security authentication and authorization. Any of these names sounded fine to me: |
Part of #99298
We would like to ship the cdac together with SOS and to allow SOS to load and use the cdac instead of the brittle DAC in .NET 10. This issue tracks the runtime changes necessary, and summarizes the SOS changes.
cdacreader.dll
tomscorcdac.dll
(see comments new name is still up in flux)cdacreader_
entrypoints from mscorcdacICLRRuntmeSymbol
IDL interface with aTryGetSymbol
API (for finding the cDAC machine descriptor from a target image)CLRDataCreateInstance
entrypoint to cdac and use it to instantiate the ContractDescriptorTarget and the SOSDacImplmscorcdac.dll
in a transport packages.We will need one per supported SOS platform (that is, platforms where SOS can run, not platforms that it can debug)
Summary SOS changes:
mscorcdac.dll
from the transport nuget feed and consume it in the SOS build and publishmscorcdac.dll
together with SOSICLRRuntimeSymbol::TryGetSymbol
API on theICLRDataTarget
passed toCLRDataCreateInstance
A related issue #108553 is tracking the work to implement in cdac the DAC APIs needed by SOS and CLRMA
The text was updated successfully, but these errors were encountered: