Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov
, '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

Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov
, '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

Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov
, '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

Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov
, '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

Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov
, '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

Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov
, '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

Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov
, '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

Improve logging of GC ref map mismatches - #80219

Merged
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting
Jan 6, 2023
Merged

Improve logging of GC ref map mismatches#80219
trylek merged 4 commits into
dotnet:mainfrom
trylek:GCRefMapMismatchReporting

Conversation

@trylek

@trylektrylek commented Jan 5, 2023

Copy link
Copy Markdown
Member

As part of investigation of the GC refmap mismatch I'm fixing with

#80218

I have improved CoreCLR runtime behavior in the presence of GC refmap mismatches by adding debug-only logic to dump both the GC ref map emitted by Crossgen2 and the one calculated by the native runtime. The dump format matches the way R2RDump outputs GC ref maps next to method import cells in the R2R file.

Thanks

Tomas

/cc @dotnet/crossgen-contrib

C:\git\runtime>C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe
GC ref map mismatch detected for method: System.Windows.Media.PathGeometry::GetPathBoundsAsRB
Runtime GC ref map: I(70) R(78) I(80)
Crossgen2 GC ref map: I(68 70) R(78) I(80)

Assert failure(PID 12596 [0x00003134], Thread: 9568 [0x2560]): false

CORECLR! CheckGCRefMapEqual + 0x1DC (0x00007fffe66fa72c) CORECLR! ExternalMethodFixupWorker + 0xA98 (0x00007fffe681b3c8)
CORECLR! DelayLoad_MethodCall + 0x58 (0x00007fffe6581a18) PRESENTATIONCORE! <no symbol> + 0x0 (0x00007fffe401ecac)
PRESENTATIONCORE! + 0x0 (0x00007fffe401eaa4) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbd34db4)
PRESENTATIONFRAMEWORK! + 0x0 (0x00007fffdbd33d6c) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdbc9a85c)
PRESENTATIONCORE! + 0x0 (0x00007fffe3ecde14) PRESENTATIONFRAMEWORK! <no symbol> + 0x0 (0x00007fffdc13ce5c)
File: C:\git\runtime\src\coreclr\vm\frames.cpp Line: 2177
Image: C:\triage\wpf\bin\Debug\net7.0-windows\win-arm64\publish\wpf.exe

@trylek
trylek requested a review from janvorliJanuary 5, 2023 01:53
@ghostghost assigned trylekJan 5, 2023
@ghostghost added the area-VM-coreclr label Jan 5, 2023
@trylek

trylek commented Jan 5, 2023

Copy link
Copy Markdown
MemberAuthor

(apologies for updating the bug description, I originally copied an earlier version of the CoreCLR runtime dump where I had reversed the tags for Crossgen2 vs. Runtime)

@janvorli

Copy link
Copy Markdown
Member

The Unix builds are failing because of the wprintf usage. We have recently removed support for wprintf from PAL, see #77852.

@trylek

Copy link
Copy Markdown
MemberAuthor

@janvorli - thanks for the heads-up, so does that mean that I should be using printf instead?

@janvorli

Copy link
Copy Markdown
Member

so does that mean that I should be using printf instead?

Yes

@janvorli

Copy link
Copy Markdown
Member

And also not to use %S in printf, as on Unix it would expect 32 bit char.

Comment threadsrc/coreclr/vm/frames.cpp Outdated

@janvorlijanvorli 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, thank you!

Comment threadsrc/coreclr/vm/frames.cpp
@trylek
trylek merged commit afc963e into dotnet:mainJan 6, 2023
@trylek
trylek deleted the GCRefMapMismatchReporting branch January 6, 2023 22:48
@AntonLapounov

Copy link
Copy Markdown
Contributor

Great improvement. I have a question regarding dumping: we skip GCREFMAP_SKIP tokens when we dump; however, in theory it is possible that the two GCRefMaps differ exactly in one of GCREFMAP_SKIP tokens, in which case the difference may not be easily seen from the output.

Nit: this may need a trailing space.

printf("POP(0x%x)", stackPop);

@trylek

Copy link
Copy Markdown
MemberAuthor

Thanks Anton for your feedback. I think that GCREFMAP_SKIP can only become an issue at the end of the GC refmap dump, otherwise it would distort the offset and trigger a mismatch for the subsequent non-skip tokens. From this viewpoint I guess we might want to log trailing GCREFMAP_SKIP entries loosely akin to how Roslyn now reports stray whitespace at line ends. I think you're also right about the POP, I "copied" that bug from R2RDump which behaves the same I believe. I'll put up a PR to fix these two issues, thanks for pointing them out!

@ghostghost locked as resolved and limited conversation to collaborators Feb 17, 2023
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.

3 participants

@trylek@janvorli@AntonLapounov