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).
-->
+
-
+
+
+