Description
In order to support SOS !analyze
the cDAC must implement stack walking through the following APIs:
IXCLRDataTask::CreateStackWalk();
IXCLRDataStackWalk::Request(DACSTACKPRIV_REQUEST_FRAME_DATA, ...);
IXCLRDataStackWalk::GetContext();
IXCLRDataStackWalk::Next();
For more infomation on stackwalking, see StackWalk.md
Work Items
-
Covert Frames to use an Enum intead of vptr #111875 - Use enum for frametype not v table #112166 Required to identify Frames through datadescriptors at compile time.
-
Convert dynamically linked native libs to statically linked 113627
-
Fetching initial thread context - [cDAC] Implement core stackwalking #111759
-
cDAC native interop to call unwinders - [cDAC] Implement core stackwalking #111759
-
Automate SOS tests to run against cDAC in CI
-
[cDAC] Support building and linking cross targeted cDAC unwinders on all platforms #112272
-
[cDAC] Implement support for filtering on
IXCLRDataTask::CreateStackWalk
#112277 -
On ARM64 Linux (maybe other platforms) the contract descriptor is not included in Heap minidumps.
-
Create cDAC entrypoint same as DAC
CLRDataCreateInstance
#112583
Lower Priority Items
- Support flags in
IXCLRDataTask.CreateStackWalk
#112366 - Not used in!analyze
- [cDAC] Implement
IXCLRDataStackWalk::Request
support forCLRDATA_REQUEST_REVISION
andCLRDATA_STACK_WALK_REQUEST_SET_FIRST_FRAME
#112275 - Not used in!analyze
x64 and arm64 specific Work Items
Initial implementation will focus on x64 stack walking before expanding to all supported platforms.
- Create managed data structures for windows system
CONTEXT
on x64 and arm64. [cDAC] Implement core stackwalking #111759- Can use CLRMD context's as reference: https://github.com/microsoft/clrmd/blob/fa787489e504e36549cbebac6b4d1e0f79fa80ea/src/Microsoft.Diagnostics.Runtime/DataReaders/Registers/Amd64Context.cs
- Support Native Unwinders on x64 and arm64 - [cDAC] Implement core stackwalking #111759
- Design cDAC level API to expose stack walking #111734 - [cDAC] Implement core stackwalking #111759
- Implement Contract level APIs that will be used for managed stack walking through the
IXCLRDataStackWalk
- [cDAC] Implement core stackwalking #111759 - Support linking native libraries to cDAC on non-Windows platforms #112416
Lower Priority Items
x86 and arm32 specific Work Items
- Create managed data structures for windows system
CONTEXT
on x86 and arm32 - Support Native Unwinders on x86 and arm32
- [cDAC] Stackwalking support all Frame types #114019
- CodeInfo -> Decode GCHdrInfo
- CodeInfo -> Get SavedMethodCode
- CodeInfo -> Get RelativeOffset
- CodeInfo -> Get FuncletStartAddress
- CodeInfo -> Get IsFunclet
Paths Forwards
- Independent Work
- Complete Frame support
- Cross-platform building
- Filtering flags
- ARM32/x86 Support. Should wait for x86 to use funclets before adding support?
- SOS Work
- Flip to invoke cDAC directly, allow testing on platforms where the cross-DAC is not available.
- Automated testing
- Testing with customer dumps - Include all required datadescriptors ASAP to allow verification on customer dumps.
- Threat Model