Skip to content

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@am11@janvorli@JulieLeeMSFT@BrzVlad@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Switch InterpreterFrame to deterministic unwinding by am11 · Pull Request #125182 · dotnet/runtime · GitHub
Skip to content

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@am11@janvorli@JulieLeeMSFT@BrzVlad@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Switch InterpreterFrame to deterministic unwinding by am11 · Pull Request #125182 · dotnet/runtime · GitHub
Skip to content

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

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

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

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

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@am11@janvorli@JulieLeeMSFT@BrzVlad@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Switch InterpreterFrame to deterministic unwinding by am11 · Pull Request #125182 · dotnet/runtime · GitHub
Skip to content

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@am11@janvorli@JulieLeeMSFT@BrzVlad@jkotas
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Switch InterpreterFrame to deterministic unwinding by am11 · Pull Request #125182 · dotnet/runtime · GitHub
Skip to content

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

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

Switch InterpreterFrame to deterministic unwinding - #125182

Closed
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4
Closed

Switch InterpreterFrame to deterministic unwinding#125182
am11 wants to merge 6 commits into
dotnet:mainfrom
am11:feature/deterministic-unwinding4

Conversation

@am11

@am11am11 commented Mar 4, 2026

Copy link
Copy Markdown
Member

No description provided.

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Mar 4, 2026
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @BrzVlad, @janvorli, @kg
See info in area-owners.md if you want to be subscribed.

@janvorli

Copy link
Copy Markdown
Member

I don't think this is going to work. We need to know the callee saved registers value in the InterpExecMethod function. The ones we capture in the IntepreterFrame are not necessarily related. Both the ExecuteInterpretedMethod and InterpExecMethod can modify these registers.

@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 7903973 to 508674cCompareMarch 4, 2026 18:48
@am11

am11 commented Mar 4, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, good point. The TransitionBlock values are from InterpreterStub and can be stale by the time we're in InterpExecMethod. I've reworked this to call ClrCaptureContext from within InterpExecMethod's try block instead, so we get the correct callee-saved register values and an IP that falls within the try range.

Comment threadsrc/coreclr/vm/interpexec.cpp Outdated
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from fde94ba to 9f2788fCompareMarch 5, 2026 06:27
Comment threadsrc/coreclr/vm/eetwain.cpp
@am11
am11force-pushed the feature/deterministic-unwinding4 branch from 8b0852b to 64305cdCompareMarch 5, 2026 19:05
@am11
am11 marked this pull request as ready for review March 7, 2026 09:56
@am11
am11 requested a review from kg as a code ownerMarch 7, 2026 09:56
@am11
am11 requested a review from janvorliMarch 7, 2026 09:56
@janvorli

Copy link
Copy Markdown
Member

@am11, I still feel like capturing the non-volatile registers on the non-exceptional path is a perf hit that we would not like to take. Especially since it is done on every instruction interpreted where every added instruction counts.
When I've measured the impact of adding capturing just the nonvolatile floating point registers in the InterpreterStub / CallInterpreterFunclet, it was about 5% for the case of calling an interpreted method that contained just "ret". But for that change, this gets amortized the more the longer the callee is. With this change, we would add larger hit due to capturing also general purpose non-volatile registers and it would not get amortized.

As an alternative, I've been recently experimenting with the WASM-like resume after catch, it is much more tricky than I've thought it would be due to the need of adding personality routine to more helpers than just the InterpreterStub, having to manually unwind the frame in that personality routine (as it gets the context in the function the personality routine is attached to and we need the context of the caller so that we can rethrow the exception from there) and there might be more. I didn't have a chance to progress on that experiment recently, but I'd like to finish that.

I still feel like keeping using OS libunwind for Apple OSes wouldn't hurt, as it is always present and it doesn't add any burden over there. And iOS is actually the scenario that needs interpreter and that we care about the most (besides WASM).

@am11

am11 commented Apr 2, 2026

Copy link
Copy Markdown
MemberAuthor

@janvorli, your alternative approach sounds like a worthwhile direction. I haven’t done performance testing myself yet to understand the impact.

Although we will ship only for iOS at first, we already build this code on all desktop platforms. i.e. we can’t discount it from “last six usages of in-tree libunwind” equation due to linux, FreeBSD and others.

@JulieLeeMSFT

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@janvorli

Copy link
Copy Markdown
Member

@janvorli, this is awaiting your review.

@JulieLeeMSFT in the comments above, we have agreed to do it differently.

@jkotas
jkotas marked this pull request as draft April 20, 2026 15:08
@JulieLeeMSFTJulieLeeMSFT added the needs-author-action An issue or pull request that requires more info or actions from the author. label Apr 20, 2026
@am11

am11 commented May 28, 2026

Copy link
Copy Markdown
MemberAuthor

Superseded by #128728.

@am11am11 closed this May 28, 2026
@am11
am11 deleted the feature/deterministic-unwinding4 branch May 28, 2026 21:57
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 28, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-CodeGen-Interpreter-coreclrcommunity-contributionIndicates that the PR has been added by a community memberneeds-author-actionAn issue or pull request that requires more info or actions from the author.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@am11@janvorli@JulieLeeMSFT@BrzVlad@jkotas