Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Disable ICorProfiler on non-desktop and WASM platforms - #126550

Merged
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile
Apr 8, 2026
Merged

Disable ICorProfiler on non-desktop and WASM platforms#126550
AaronRobinsonMSFT merged 6 commits into
dotnet:mainfrom
AaronRobinsonMSFT:disable-profiler-on-mobile

Conversation

@AaronRobinsonMSFT

@AaronRobinsonMSFTAaronRobinsonMSFT commented Apr 4, 2026

Copy link
Copy Markdown
Member

Note

This PR description was generated with the help of GitHub Copilot.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to consolidate the ICorProfiler feature flag logic:

  • Disable ICorProfiler on non-desktop targets — Android, Mac Catalyst, iOS, and tvOS — in addition to WASM, since profiling is not supported on these platforms.
  • Make the flag overridable by wrapping it in if(NOT DEFINED FEATURE_CORPROFILER), allowing it to be set from the command line.
  • Remove the redundant WASM override that previously set FEATURE_CORPROFILER 0 separately.

Refactor FEATURE_CORPROFILER in clrfeatures.cmake to disable the
ICorProfiler feature on Android, Mac Catalyst, iOS, and WASM targets.
Previously the profiler was unconditionally enabled and then only
explicitly disabled for WASM. This consolidates the logic into a
single guard that excludes all unsupported platforms and makes the
flag overridable from the command line.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors the CoreCLR CMake feature-flag logic for FEATURE_CORPROFILER so ICorProfiler support is disabled by default on unsupported targets (mobile + WASM) while allowing command-line overrides.

Changes:

  • Wrap FEATURE_CORPROFILER defaulting in if(NOT DEFINED FEATURE_CORPROFILER) to allow CLI override.
  • Enable FEATURE_CORPROFILER only for non-WASM, non-mobile targets (Android, iOS, Mac Catalyst).
  • Remove the prior WASM-specific override that forcibly set FEATURE_CORPROFILER 0.

Comment threadsrc/coreclr/clrfeatures.cmake
AaronRobinsonMSFTand others added 2 commits April 4, 2026 12:13
CopilotAI review requested due to automatic review settings April 4, 2026 19:18
@AaronRobinsonMSFTAaronRobinsonMSFT changed the title Disable ICorProfiler on mobile and WASM platformsDisable ICorProfiler on non-desktop and WASM platformsApr 4, 2026

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@jkotas@noahfalk I'm updating the logic here based on #126493 (comment).

@jkotas

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

@AaronRobinsonMSFTAaronRobinsonMSFT added the arch-wasm WebAssembly architecture label Apr 4, 2026
@thaystg

Copy link
Copy Markdown
Member

@thaystg Please let me know if any of your prototypes need this to a degree that we should defer limiting it for the related platform.

Correct, right now we totally depend on it. @noahfalk any suggestion about it?

@thaystg

Copy link
Copy Markdown
Member

We need this enabled at least until preview 3.

@noahfalk

Copy link
Copy Markdown
Member

@dotnet/dotnet-diag Do we have any scenarios for ICorProfiler on iOS and Android? Is anything going to break if we drop it?

Other than its use as the in-proc debugger loading mechanism I'm not aware of any other scenarios that require it. @thaystg - are you aware of anything else that requires it?

@noahfalk any suggestion about it?

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

@noahfalk

noahfalk commented Apr 7, 2026

Copy link
Copy Markdown
Member

[@jkotas] (#126493 (comment)) The question to ask is whether we want FEATURE_CORPROFILER for mobile platforms

I'm not aware of any 3rd parties specifically asking/planning to use it and it hasn't been there historically on Mono. I'd be happy to have it off for now and wait to see some clear evidence that profiler vendors want it on these platforms.

Comment threadsrc/coreclr/clrfeatures.cmake Outdated
CopilotAI review requested due to automatic review settings April 7, 2026 15:04
@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

What if we turned it off for WASM now, and turn it off for Android/iOS in a future preview once we've resolved the in-proc debugging loading?

Done.

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated 1 comment.

Comment threadsrc/coreclr/clrfeatures.cmake
CopilotAI review requested due to automatic review settings April 8, 2026 04:27

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

@AaronRobinsonMSFT

Copy link
Copy Markdown
MemberAuthor

/ba-g Unrelated failures

@AaronRobinsonMSFT
AaronRobinsonMSFT merged commit 0fc6976 into dotnet:mainApr 8, 2026
111 of 115 checks passed
@AaronRobinsonMSFT
AaronRobinsonMSFT deleted the disable-profiler-on-mobile branch April 8, 2026 18:08
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left Android,
MacCatalyst, and iOS commented out as placeholders. This removed profiler
fields from the Thread struct (m_pProfilerFilterContext,
m_profilerCallbackState, m_dwProfilerEvacuationCounters — 144 bytes total),
shifting m_pInterpThreadContext to a lower offset without updating
asmconstants.h.
This PR makes two changes:
1. **asmconstants.h**: Add PROFILING_SUPPORTED conditionals to select the
correct m_pInterpThreadContext offset when profiling is disabled
(0x228 Release, 0xa90 Debug on Unix).
2. **clrfeatures.cmake**: Uncomment the Android, MacCatalyst, and iOS
exclusions so all non-desktop platforms consistently disable
FEATURE_CORPROFILER. Since asmconstants.h now handles both the
profiler and no-profiler cases, these platforms can safely disable
profiling without hitting the same offset mismatch.
Fixes internal unified-build failures on tvOS legs (tvOS_Shortstack_arm64,
tvOSSimulator_Shortstack_x64, tvOSSimulator_Shortstack_arm64) on main.
Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2946990
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 9, 2026
PR dotnet#126550 disabled FEATURE_CORPROFILER for tvOS but left iOS,
MacCatalyst, and Android commented out (profiler still enabled).
There is no reason to single out tvOS from its sibling Apple mobile
platforms. They should be treated as a package deal.
The uncommented 'AND NOT CLR_CMAKE_TARGET_TVOS' line removed profiler
fields from the Thread struct on tvOS, making the hardcoded
OFFSETOF__Thread__m_pInterpThreadContext in asmconstants.h wrong
(0x2b8 vs actual 0x228), breaking all 3 tvOS legs in unified-build.
Comment out the tvOS line to match iOS/MacCatalyst/Android, keeping
the profiler enabled until all mobile platforms disable it together.
Fixes internal unified-build tvOS failures on main (build 2946990).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
jkotas pushed a commit that referenced this pull request Apr 10, 2026
)
PR #126550 disabled `FEATURE_CORPROFILER` for tvOS (`AND NOT
CLR_CMAKE_TARGET_TVOS` uncommented) but left iOS, MacCatalyst, and
Android commented out (profiler still enabled). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit to steveisok/runtime that referenced this pull request Apr 13, 2026
These three platforms share the same runtime constraints: static linking,
no fork(), no build tools, hybrid globalization, no console signals, etc.
Having each one listed individually in cmake conditions is verbose and
error-prone — PR dotnet#126550 accidentally disabled FEATURE_CORPROFILER for
tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered
by APPLE_MOBILE), and the triplicated configure.cmake feature overrides
for iOS/MacCatalyst/tvOS are consolidated into one block.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
steveisok added a commit that referenced this pull request Apr 15, 2026
…6833)
These three platforms share the same runtime constraints: static
linking, no fork(), no build tools, hybrid globalization, no console
signals, etc. Having each one listed individually in cmake conditions is
verbose and error-prone — PR #126550 accidentally disabled
FEATURE_CORPROFILER for tvOS alone, breaking unified-build tvOS legs.
Introduce CLR_CMAKE_TARGET_APPLE_MOBILE as an umbrella variable in
configureplatform.cmake, set when any of iOS, tvOS, or MacCatalyst is
the target. Replace ~30 'all three grouped' patterns across 11 cmake
files with the umbrella, reducing line noise and preventing future
divergence.
Per-platform variables are preserved where they genuinely differ:
- configurecompiler.cmake: TARGET_* C++ defines and compiler targets
- System.Security.Cryptography.Native.Apple: Swift platform names
- System.Net.Security.Native / corehost: tvOS gssapi exclusion
- System.Native: MacCatalyst pal_iossupportversion.m
Also fixes: sendfile exclusion was missing MacCatalyst (now covered by
APPLE_MOBILE), and the triplicated configure.cmake feature overrides for
iOS/MacCatalyst/tvOS are consolidated into one block.
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators May 9, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-Diagnostics-coreclr

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants

@AaronRobinsonMSFT@jkotas@thaystg@noahfalk@faraz-talebpour_AlfaITG