Repository navigation
Legacy DAC SyncBlock data is unavailable for macOS x64 .NET 11 dumps #5985
Description
Description
When a macOS x64 .NET 11 dump is analyzed with dotnet-dump and the matching legacy DAC, SyncBlock data is unavailable. This causes two deterministic SOS failures against the same capture-family dump.
syncblk fails instead of listing an intentionally inflated, held monitor:
> syncblk
Error requesting SyncBlk data
verifyheap consequently reports apparent heap corruption for an object whose SyncBlock cannot be found:
Segment Object Failure Reason
00058acda2d0 00018c4052f8 SyncBlockMismatch Object 18c4052f8 System.Object had a SyncBlock index of 1 but the runtime has no matching SyncBlock
1,154 objects verified, 1 error.
Expected behavior:
syncblklists the held SyncBlock withMonitorHeld > 0.verifyheapreports0 errorsandNo heap corruption detected.
Minimal replay:
dotnet-dump analyze heap.dmp
> runtimes --usecdac false --DacSignatureVerification false
> syncblk
> verifyheap
The failures reproduce in both Debug and Release SOS.Tests runs. Corresponding cDAC and LLDB configurations pass against the identical capture-family dump. The exact legacy-DAC dotnet-dump configurations also pass on Ubuntu, indicating that capture/transfer corruption is not involved and that this is macOS-specific.
Configuration
- Tool:
dotnet-dump - Host: macOS 15 x64 (
osx.15.amd64.open) - Target runtime: .NET
11.0.26.42702; product layout11.0.0-rc.2.26426.102 - Target: Core framework-dependent debuggee
- GC: Workstation
- Analysis mode: Heap dump
- DAC: matching legacy
libmscordaccore.dylib - Test configurations:
SOS.Tests.SpecializedInspectionTests.SyncBlk_ReportsInflatedMonitor(config: scenarios/DotnetDump/Core/net11/Dump/Workstation/Heap)SOS.Tests.GcInspectionTests.VerifyHeap_ReportsNoCorruption(config: scenarios/DotnetDump/Core/net11/Dump/Workstation/Heap)
- Observed in dotnet/diagnostics#5981
- Helix jobs:
Regression?
This does not appear entirely new. Diagnostics tests have skipped Unix syncblk validation since 667723e0 in October 2019, with the comment:
On Linux/MacOS we sometimes get "Error requesting SyncBlk data" error from the DAC.
The new SOS.Tests harness makes the failure deterministic for this .NET 11 macOS scenario and also exposes the associated verifyheap false positive.
Other information
- stderr is empty.
- The matching runtime and legacy DAC load successfully.
- Other SOS commands work in the same
dotnet-dumpsession. - Ubuntu Debug and Release both pass these exact .NET 11 legacy-DAC configurations.
- This is distinct from dotnet/runtime#124691, which implemented the cDAC
GetSyncBlockDataAPI. - Related historical issue: dotnet/runtime#11407, which enabled
syncblkon Unix.
Activity
[-]Legacy DAC SyncBlock data is unavailable for macOS .NET 11 dumps[/-][+]Legacy DAC SyncBlock data is unavailable for macOS x64 .NET 11 dumps[/+]Migrate SOS command coverage (#6017)