From e4e95ea8ef5e0a58d5f552087ddeba7c030f0683 Mon Sep 17 00:00:00 2001 From: Max Charlamb <44248479+max-charlamb@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:48:02 -0400 Subject: [PATCH 1/6] Add linux_arm and windows_x86 to cDAC dump test platforms Add 32-bit platform coverage to the cDAC dump test Helix infrastructure: - windows_x86: runs on Windows.10.Amd64.Open via WoW64 - linux_arm: runs on containerized ARM32 Helix queue (Debian on ARM64) Also adds helix_windows_x86 variable to helix-platforms.yml for queue name centralization. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/cdac/prepare-cdac-helix-steps.yml | 2 ++ eng/pipelines/helix-platforms.yml | 4 ++++ eng/pipelines/runtime-diagnostics.yml | 2 ++ 3 files changed, 8 insertions(+) diff --git a/eng/pipelines/cdac/prepare-cdac-helix-steps.yml b/eng/pipelines/cdac/prepare-cdac-helix-steps.yml index 1661d4eb2d1198..ad221189952f0f 100644 --- a/eng/pipelines/cdac/prepare-cdac-helix-steps.yml +++ b/eng/pipelines/cdac/prepare-cdac-helix-steps.yml @@ -38,9 +38,11 @@ steps: $queue = switch ("$(osGroup)_$(archType)") { "windows_x64" { "$(helix_windows_x64)" } + "windows_x86" { "$(helix_windows_x86)" } "windows_arm64" { "$(helix_windows_arm64)" } "linux_x64" { "$(helix_linux_x64_oldest)" } "linux_arm64" { "$(helix_linux_arm64_oldest)" } + "linux_arm" { "$(helix_linux_arm32_oldest)" } "osx_x64" { "$(helix_macos_x64)" } "osx_arm64" { "$(helix_macos_arm64)" } default { Write-Error "Unsupported platform: $(osGroup)_$(archType)"; exit 1 } diff --git a/eng/pipelines/helix-platforms.yml b/eng/pipelines/helix-platforms.yml index e1ddcef6681bd8..3eacd890f6bc49 100644 --- a/eng/pipelines/helix-platforms.yml +++ b/eng/pipelines/helix-platforms.yml @@ -257,6 +257,10 @@ variables: - name: helix_windows_arm64_oldest_internal value: Windows.10.Arm64 + # Windows x86 (runs on x64 machines via WoW64) + - name: helix_windows_x86 + value: Windows.10.Amd64.Open + # =========================================== # Browser/WASM Platforms # =========================================== diff --git a/eng/pipelines/runtime-diagnostics.yml b/eng/pipelines/runtime-diagnostics.yml index ceed70726cd270..1cb58e018c0d20 100644 --- a/eng/pipelines/runtime-diagnostics.yml +++ b/eng/pipelines/runtime-diagnostics.yml @@ -10,9 +10,11 @@ parameters: type: object default: - windows_x64 + - windows_x86 - linux_x64 - windows_arm64 - linux_arm64 + - linux_arm # TODO: Re-enable osx once disk space issue is resolved. # macOS full dumps are ~5.7GB each; with 8+ full-dump debuggees the Helix # machines run out of disk space (~45GB total). See PR #124782 for details. From 54a72fb74a2aee2b73e19675cb9f45f14de8d57b Mon Sep 17 00:00:00 2001 From: Max Charlamb <44248479+max-charlamb@users.noreply.github.com> Date: Thu, 19 Mar 2026 14:59:11 -0400 Subject: [PATCH 2/6] Quote HelixTargetQueues in sendParams for bash safety The containerized ARM32 queue name contains parentheses which bash interprets as subshell syntax. Quoting the /p:HelixTargetQueues argument prevents this. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/runtime-diagnostics.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/runtime-diagnostics.yml b/eng/pipelines/runtime-diagnostics.yml index 1cb58e018c0d20..6b7abde51df171 100644 --- a/eng/pipelines/runtime-diagnostics.yml +++ b/eng/pipelines/runtime-diagnostics.yml @@ -218,7 +218,7 @@ extends: - template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml parameters: displayName: 'Send cDAC Dump Tests to Helix' - sendParams: $(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj /t:Test /p:TargetOS=$(osGroup) /p:TargetArchitecture=$(archType) /p:HelixTargetQueues=$(CdacHelixQueue) /p:TestHostPayload=$(TestHostPayloadDir) /p:DumpTestsPayload=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac /bl:$(Build.SourcesDirectory)/artifacts/log/SendToHelix.binlog + sendParams: $(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj /t:Test /p:TargetOS=$(osGroup) /p:TargetArchitecture=$(archType) "/p:HelixTargetQueues=$(CdacHelixQueue)" /p:TestHostPayload=$(TestHostPayloadDir) /p:DumpTestsPayload=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac /bl:$(Build.SourcesDirectory)/artifacts/log/SendToHelix.binlog environment: _Creator: dotnet-bot SYSTEM_ACCESSTOKEN: $(System.AccessToken) @@ -255,7 +255,7 @@ extends: - template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml parameters: displayName: 'Send cDAC Dump Gen to Helix' - sendParams: $(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj /t:Test /p:DumpOnly=true /p:TargetOS=$(osGroup) /p:TargetArchitecture=$(archType) /p:HelixTargetQueues=$(CdacHelixQueue) /p:TestHostPayload=$(TestHostPayloadDir) /p:DumpTestsPayload=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac /bl:$(Build.SourcesDirectory)/artifacts/log/SendDumpGenToHelix.binlog + sendParams: $(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj /t:Test /p:DumpOnly=true /p:TargetOS=$(osGroup) /p:TargetArchitecture=$(archType) "/p:HelixTargetQueues=$(CdacHelixQueue)" /p:TestHostPayload=$(TestHostPayloadDir) /p:DumpTestsPayload=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac /bl:$(Build.SourcesDirectory)/artifacts/log/SendDumpGenToHelix.binlog environment: _Creator: dotnet-bot SYSTEM_ACCESSTOKEN: $(System.AccessToken) @@ -331,7 +331,7 @@ extends: - template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml parameters: displayName: 'Send cDAC X-Plat Dump Tests to Helix' - sendParams: $(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj /t:Test /p:TargetOS=$(osGroup) /p:TargetArchitecture=$(archType) /p:HelixTargetQueues=$(CdacHelixQueue) /p:TestHostPayload=$(TestHostPayloadDir) /p:DumpTestsPayload=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac /bl:$(Build.SourcesDirectory)/artifacts/log/SendXPlatTestToHelix.binlog + sendParams: $(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/cdac-dump-xplat-test-helix.proj /t:Test /p:TargetOS=$(osGroup) /p:TargetArchitecture=$(archType) "/p:HelixTargetQueues=$(CdacHelixQueue)" /p:TestHostPayload=$(TestHostPayloadDir) /p:DumpTestsPayload=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac /bl:$(Build.SourcesDirectory)/artifacts/log/SendXPlatTestToHelix.binlog environment: _Creator: dotnet-bot SYSTEM_ACCESSTOKEN: $(System.AccessToken) From d05aff6f2b6531994d2b85d99dc25c72def9a2e3 Mon Sep 17 00:00:00 2001 From: Max Charlamb <44248479+max-charlamb@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:14:29 -0400 Subject: [PATCH 3/6] Publish dump artifacts on test failure in single-leg mode Tar and upload dumps from Helix back to the agent so they can be published as pipeline artifacts for local investigation. The tar runs unconditionally after tests, but the artifact is only published when the job fails. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/runtime-diagnostics.yml | 7 +++++++ .../managed/cdac/tests/DumpTests/cdac-dump-helix.proj | 9 ++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/eng/pipelines/runtime-diagnostics.yml b/eng/pipelines/runtime-diagnostics.yml index 6b7abde51df171..2713cf287caf6d 100644 --- a/eng/pipelines/runtime-diagnostics.yml +++ b/eng/pipelines/runtime-diagnostics.yml @@ -223,6 +223,13 @@ extends: _Creator: dotnet-bot SYSTEM_ACCESSTOKEN: $(System.AccessToken) NUGET_PACKAGES: $(Build.SourcesDirectory)$(dir).packages + - task: PublishPipelineArtifact@1 + inputs: + targetPath: $(Build.SourcesDirectory)/artifacts/helixresults + artifactName: CdacDumps_$(osGroup)_$(archType) + displayName: 'Publish Dump Artifacts' + condition: failed() + continueOnError: true - pwsh: | if ("$(Agent.JobStatus)" -ne "Succeeded") { Write-Error "One or more cDAC dump test failures were detected. Failing the job." diff --git a/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj b/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj index 9b89de9084d17e..c6a6e5ab1b40f8 100644 --- a/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj +++ b/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj @@ -83,7 +83,8 @@ <_TestCommand>%HELIX_CORRELATION_PAYLOAD%\dotnet.exe exec --runtimeconfig %HELIX_WORKITEM_PAYLOAD%\tests\Microsoft.Diagnostics.DataContractReader.DumpTests.runtimeconfig.json --depsfile %HELIX_WORKITEM_PAYLOAD%\tests\Microsoft.Diagnostics.DataContractReader.DumpTests.deps.json %HELIX_WORKITEM_PAYLOAD%\tests\xunit.console.dll %HELIX_WORKITEM_PAYLOAD%\tests\Microsoft.Diagnostics.DataContractReader.DumpTests.dll -xml testResults.xml -nologo - <_FullCommand>$(_DumpGenCommands) & $(_DumpInfoCommand) & $(_TestCommand) + <_TarCommand>tar -czf %HELIX_WORKITEM_UPLOAD_ROOT%\dumps.tar.gz -C %HELIX_WORKITEM_PAYLOAD%\dumps . + <_FullCommand>$(_DumpGenCommands) & $(_DumpInfoCommand) & $(_TestCommand) & $(_TarCommand) @@ -101,7 +102,8 @@ <_TestCommand>$HELIX_CORRELATION_PAYLOAD/dotnet exec --runtimeconfig $HELIX_WORKITEM_PAYLOAD/tests/Microsoft.Diagnostics.DataContractReader.DumpTests.runtimeconfig.json --depsfile $HELIX_WORKITEM_PAYLOAD/tests/Microsoft.Diagnostics.DataContractReader.DumpTests.deps.json $HELIX_WORKITEM_PAYLOAD/tests/xunit.console.dll $HELIX_WORKITEM_PAYLOAD/tests/Microsoft.Diagnostics.DataContractReader.DumpTests.dll -xml testResults.xml -nologo - <_FullCommand>$(_DumpGenCommands) && $(_DumpInfoCommand) && $(_TestCommand) + <_TarCommand>tar -czf $HELIX_WORKITEM_UPLOAD_ROOT/dumps.tar.gz -C $HELIX_WORKITEM_PAYLOAD/dumps . + <_FullCommand>$(_DumpGenCommands) && $(_DumpInfoCommand) && $(_TestCommand) ; $(_TarCommand) @@ -133,12 +135,13 @@ @(HelixPreCommand) - + $(DumpTestsPayload) $(_FullCommand) $(WorkItemTimeout) + dumps.tar.gz From 3011ff901332bbf26df2ea774c532bfaa46df0a2 Mon Sep 17 00:00:00 2001 From: Max Charlamb <44248479+max-charlamb@users.noreply.github.com> Date: Fri, 20 Mar 2026 09:25:10 -0400 Subject: [PATCH 4/6] Fix dump publish condition to trigger on SucceededWithIssues shouldContinueOnError causes Helix failures to report as SucceededWithIssues, not Failed. Use Agent.JobStatus check instead of failed() so dumps are published on any non-success. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/runtime-diagnostics.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/runtime-diagnostics.yml b/eng/pipelines/runtime-diagnostics.yml index 2713cf287caf6d..87f93adfb62a85 100644 --- a/eng/pipelines/runtime-diagnostics.yml +++ b/eng/pipelines/runtime-diagnostics.yml @@ -228,7 +228,7 @@ extends: targetPath: $(Build.SourcesDirectory)/artifacts/helixresults artifactName: CdacDumps_$(osGroup)_$(archType) displayName: 'Publish Dump Artifacts' - condition: failed() + condition: and(always(), ne(variables['Agent.JobStatus'], 'Succeeded')) continueOnError: true - pwsh: | if ("$(Agent.JobStatus)" -ne "Succeeded") { From 6d51b303821d53cfdd2624720c041296c7c57a93 Mon Sep 17 00:00:00 2001 From: Max Charlamb <44248479+max-charlamb@users.noreply.github.com> Date: Fri, 20 Mar 2026 11:05:16 -0400 Subject: [PATCH 5/6] Use same Helix queue for windows_x86 as windows_x64 The Windows.10.Amd64.Open queue may have different permissions for the DAC registry key needed for heap dumps. Use the same Windows.11.Amd64.Client.Open queue that windows_x64 uses. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- eng/pipelines/cdac/prepare-cdac-helix-steps.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/cdac/prepare-cdac-helix-steps.yml b/eng/pipelines/cdac/prepare-cdac-helix-steps.yml index ad221189952f0f..ce8e01605987ae 100644 --- a/eng/pipelines/cdac/prepare-cdac-helix-steps.yml +++ b/eng/pipelines/cdac/prepare-cdac-helix-steps.yml @@ -38,7 +38,7 @@ steps: $queue = switch ("$(osGroup)_$(archType)") { "windows_x64" { "$(helix_windows_x64)" } - "windows_x86" { "$(helix_windows_x86)" } + "windows_x86" { "$(helix_windows_x64)" } "windows_arm64" { "$(helix_windows_arm64)" } "linux_x64" { "$(helix_linux_x64_oldest)" } "linux_arm64" { "$(helix_linux_arm64_oldest)" } From 0ba94b3ecf7fda1f746bd7dec532236b97ea5fc7 Mon Sep 17 00:00:00 2001 From: Max Charlamb <44248479+max-charlamb@users.noreply.github.com> Date: Fri, 20 Mar 2026 14:28:45 -0400 Subject: [PATCH 6/6] Extract unsigned DAC registry logic into shared EnableUnsignedDac.props Move the DisableAuxProviderSignatureCheck registry key logic into a shared props file imported by both DumpTests.targets and cdac-dump-helix.proj. Add /reg:32 to also set the key in the WoW64 registry view so x86 processes find it under WOW6432Node. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../cdac/tests/DumpTests/DumpTests.targets | 19 ++--------- .../tests/DumpTests/EnableUnsignedDac.props | 33 +++++++++++++++++++ .../cdac/tests/DumpTests/cdac-dump-helix.proj | 5 ++- 3 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 src/native/managed/cdac/tests/DumpTests/EnableUnsignedDac.props diff --git a/src/native/managed/cdac/tests/DumpTests/DumpTests.targets b/src/native/managed/cdac/tests/DumpTests/DumpTests.targets index 5ee2d6b3b0db04..3962b1f38d1f69 100644 --- a/src/native/managed/cdac/tests/DumpTests/DumpTests.targets +++ b/src/native/managed/cdac/tests/DumpTests/DumpTests.targets @@ -62,23 +62,8 @@ - - - - - + + diff --git a/src/native/managed/cdac/tests/DumpTests/EnableUnsignedDac.props b/src/native/managed/cdac/tests/DumpTests/EnableUnsignedDac.props new file mode 100644 index 00000000000000..2ebdfd8a95da5c --- /dev/null +++ b/src/native/managed/cdac/tests/DumpTests/EnableUnsignedDac.props @@ -0,0 +1,33 @@ + + + + + + <_DacRegKey>HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MiniDumpSettings + <_DacRegAdd>reg add "$(_DacRegKey)" /v DisableAuxProviderSignatureCheck /t REG_DWORD /d 1 /f + <_DacRegAdd32>$(_DacRegAdd) /reg:32 + + + + + + + + + + + diff --git a/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj b/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj index c6a6e5ab1b40f8..8254b909449ae6 100644 --- a/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj +++ b/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj @@ -63,6 +63,7 @@ derived from each debuggee's DumpTypes property (Heap->heap/2, Full->full/4). --> + - + + +