Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz
, '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

Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz
, '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

Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz
, '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

Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz
, '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

Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz
, '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

Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz
, '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

Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz
, '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

Flush instruction cache after thunk pool allocation - #75393

Merged
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache
Sep 10, 2022
Merged

Flush instruction cache after thunk pool allocation#75393
jkotas merged 2 commits into
dotnet:mainfrom
jkotas:flushinstructioncache

Conversation

@jkotas

Copy link
Copy Markdown
Member

Fixes#74710

Comment threadsrc/coreclr/nativeaot/Runtime/unix/PalRedhawkUnix.cpp Outdated
@filipnavara

Copy link
Copy Markdown
Member

I will rebase #75264 if this lands first.

@filipnavara

Copy link
Copy Markdown
Member

I noticed the same issue when fixing the code for macOS ARM64 so I am actually glad to have a more complete fix. Not being too familiar with the ARM64 architecture I have a follow-up question. Since the data pages are written separately (from managed code) is there any need to flush data cache for these pages too? I originally came to the conclusion that it should not be necessary but since you are way more familiar with the code I assume you'll know better.

@jkotas

Copy link
Copy Markdown
MemberAuthor

The data pages will get written to when the marshalled delegate is created. Locks taken during that process should take care of the data catches flushing.

@jkotas
jkotasforce-pushed the flushinstructioncache branch from 5291820 to 8bb5647CompareSeptember 10, 2022 19:01
@VSadov

Copy link
Copy Markdown
Member

We probably see Windows issues due to this as well, perhaps not as often for some reason.

@jkotas

Copy link
Copy Markdown
MemberAuthor

We probably see Windows issues due to this as well, perhaps not as often for some reason.

Yes.

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers. We have hit the bug in libraries test only because this one marshalled delegate was missed during the conversion. I am going to submit a separate PR to convert this marshalled delegate to a function pointer.

@VSadovVSadov left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM! It was probably hard to figure the root cause.

@VSadov

VSadov commented Sep 10, 2022

Copy link
Copy Markdown
Member

With this and the dealings with JIT memory on OSX in the other PR, I wonder - is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

@jkotas

Copy link
Copy Markdown
MemberAuthor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

@MichalPetryka

Copy link
Copy Markdown
Contributor

is there a configuration where NativeAOT does not use executable memory? (even if with some tradeoffs)

We have a configuration under ifdef (that is currently disabled) that compiles these entrypoints into the binary as static code, and then creates copies of this static code if necessary using file mapping. It is not very portable and makes the binary bigger. We can make it work if somebody asks for it.

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

@jkotas

jkotas commented Sep 10, 2022

Copy link
Copy Markdown
MemberAuthor

I'd assume that mode is used by the teams that made NativeAOT work on consoles that are AOT only.

Yep. Or they just avoid marshalled delegates to avoid the problem altogether.

@jkotas
jkotas merged commit 1f94e11 into dotnet:mainSep 10, 2022
@jkotas

Copy link
Copy Markdown
MemberAuthor

/backport to release/7.0

@jkotas
jkotas deleted the flushinstructioncache branch September 10, 2022 23:14
@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/7.0: https://github.com/dotnet/runtime/actions/runs/3029769600

@bartonjs

Copy link
Copy Markdown
Member

This path is only hit by marshalled delegates. We tried to rid of marshalled delegates from everywhere in product code and replace them with function pointers.

Does that mean there's some test coverage missing somewhere for the scenario? If it took us two weeks to figure out what was wrong I'd hate to think what it would mean for the average customer.

@jkotas

Copy link
Copy Markdown
MemberAuthor

Does that mean there's some test coverage missing somewhere for the scenario?

We do have a test coverage. The crash is caused by a race condition with processor instruction cache. It is impossible to write tests that would reliably catch these types of race conditions.

@ghostghost locked as resolved and limited conversation to collaborators Oct 12, 2022
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

System.Net.* and System.Security.* crash on NativeAOT arm64

6 participants

@jkotas@filipnavara@VSadov@MichalPetryka@bartonjs@karelz