Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk
, '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

Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk
, '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

Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk
, '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

Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk
, '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

Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk
, '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

Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk
, '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

Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk
, '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

Fix AV in NativeRuntimeEventSource QCalls - #48414

Merged
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407
Feb 18, 2021
Merged

Fix AV in NativeRuntimeEventSource QCalls#48414
sywhang merged 5 commits into
dotnet:masterfrom
sywhang:dev/suwhang/48407

Conversation

@sywhang

@sywhangsywhang commented Feb 17, 2021

Copy link
Copy Markdown
Contributor

Fix#48407 and #48368.

There was a error in the last commit I made as part of #47829 where I moved around some of the QCalls from XplatEventLogger to NativeRuntimeEventSource that wasn't properly reflected in ecalllist.h that causes an AV to occur.

This PR fixes ecalllist.h to properly reflect where the QCalls are getting called from, and adds a regression test that checks for the ThreadPool events.

cc @brianrob

@josalemjosalem left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Yay for new tests! This looks good to me if we get a clean CI back.

@jkotas

Copy link
Copy Markdown
Member

Is this also a problem on Mono? I do not see where these QCalls come from when running on Mono.

@sywhang

sywhang commented Feb 17, 2021

Copy link
Copy Markdown
ContributorAuthor

@jkotas I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false and that prevents the EventSource from getting enabled and the ThreadPool checks whether the events are enabled before emitting them.

@josalem do you know if Mono is planning to support emitting runtime events from .NET 6?

@josalem

Copy link
Copy Markdown
Contributor

@lateralusX & @lambdageek would know (or know who would know) whether they plan to turn it on in 6.

@jkotas

Copy link
Copy Markdown
Member

I don't think these methods can get invoked on Mono because Mono is built with EventSourceSupport feature flag set to false

Mono sets EventSourceSupport feature flag to false for wasm, but I do not see it set for other platforms.

Mono sets FeaturePerfTracing here: https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/System.Private.CoreLib.csproj#L112

It will cause NativeRuntimeEventSource.cs to be included here: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems#L1201

NativeEventSource.cs has the managed QCall declarations: https://github.com/dotnet/runtime/blob/master/src/libraries/System.Private.CoreLib/src/System/Diagnostics/Tracing/NativeRuntimeEventSource.cs#L111

@sywhang

Copy link
Copy Markdown
ContributorAuthor

@jkotas thanks for pointing that out. I checked again and it seems like the best way to move forward is to just emit these events using the WriteEventCore APIs for Mono instead of the QCalls since Mono doesn't have the same native event stubs that CoreCLR does, and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 17, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))

@jkotasjkotas 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.

Thanks

@lambdageek

Copy link
Copy Markdown
Member

and there's doesn't seem to be a concept of native runtime events from Mono. (Please correct me on this if I'm wrong @lateralusX@lambdageek)

@lateralusX is first working on managed event sources on mobile. native events are going to be added later. and I believe we discussed adding a few events at a time ad hoc by hand, rather than generating all the ones CoreCLR has defined.

jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
jkotas added a commit to jkotas/runtimelab that referenced this pull request Feb 18, 2021
We should eventually switch to the same plan as Mono once it actually works (more context in dotnet/runtime#48414 (comment))
@sywhang

Copy link
Copy Markdown
ContributorAuthor

@lambdageek Thanks for that info - the patch as of now will keep these events flowing to Mono runtime's EventPipe, as well as any EventListeners so I think we're unblocked on these. For future events, there may be a path for a cleaner solution both on CoreCLR and Mono. @brianrob talked about potentially generating these managed events in NativeRuntimeEventSource from ClrEtwAll.man but given the context, that may be a little difficult since not all events are shared across the runtimes.

@noahfalknoahfalk 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 : )

@sywhang
sywhang merged commit ae40145 into dotnet:masterFeb 18, 2021
@sywhang
sywhang deleted the dev/suwhang/48407 branch February 18, 2021 22:38
@lateralusX

Copy link
Copy Markdown
Member

We will revisit this on Mono side when we look more broadly to support native events and see if it can be unified (not currently implemented). The interop between managed and native EventSource -> EventPipe is icalls on Mono (due to a couple of reasons), but since we added support for qcalls in Mono since, we might look into switching, but if not, we can always make a small shim as done for all other EventPipe interop in https://github.com/dotnet/runtime/blob/master/src/mono/System.Private.CoreLib/src/System/Diagnostics/Tracing/EventPipe.Mono.cs if needed.

@ghostghost locked as resolved and limited conversation to collaborators Mar 24, 2021
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.

Crash When Enabling Threading Events on Windows

6 participants

@sywhang@jkotas@josalem@lambdageek@lateralusX@noahfalk