Skip to content

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

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

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

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

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

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

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

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

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

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

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

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

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

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

Fix field accessor for RVA field - #103705

Merged
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva
Jun 24, 2024
Merged

Fix field accessor for RVA field#103705
jkotas merged 3 commits into
dotnet:mainfrom
huoyaoyuan:field-accessor-rva

Conversation

@huoyaoyuan

Copy link
Copy Markdown
Member

Fixes#103207

@dotnet-policy-servicedotnet-policy-serviceBot added the community-contribution Indicates that the PR has been added by a community member label Jun 19, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @dotnet/area-system-reflection
See info in area-owners.md if you want to be subscribed.

{
byte[] valueArray = new byte[] { 1, 2, 3, 4, 5 };

// Roslyn uses SHA256 of raw data as data field name

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.

Interesting; this is likely why the original RVA tests added with the fast field feature didn't fail.

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

Thanks!

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

There is a test failure on macOS-12.7.2. Does Mono do things differently?

[FAIL] System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField
System.NotSupportedException : This object cannot be invoked because no code was generated for it: '<PrivateImplementationDetails>.74F81FE167D99B4CB41D6D0CCDA82278CAEE9F3E2F25D5E5A3936FF3DCEC60D0'.
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.get_FieldAccessor() + 0xe8
at System.Reflection.Runtime.FieldInfos.RuntimeFieldInfo.GetValue(Object) + 0x14
at System.Reflection.Tests.FieldInfoTests.GetValueFromRvaField() + 0x120
at System.Reflection!<BaseAddress>+0xb29b40
at System.Reflection.DynamicInvokeInfo.Invoke(Object, IntPtr, Object[], BinderBundle, Boolean) + 0x10c

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

@dotnet/ilc-contrib

@jkotas

Copy link
Copy Markdown
Member

Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

I do not think that it is something we want enable. Could you please disable the test for NAOT?

@MichalStrehovsky

Copy link
Copy Markdown
Member

It's NativeAOT. Seems that NativeAOT doesn't support reflection on RVA field. Let's see if it can easily be added or just disable the test.

Agreed with Jan. This would only be useful for two things: C++/CLI support and support for (non-intrinsic) RuntimeHelpers.InitializeArray. Native AOT has both listed as unplanned in #69919.

The whole reflection with RVA static field business would ideally be just blocked everywhere, it has always been buggy - calling SetValue on RVA statics on .NET Framework crashes the runtime badly, and accessing RVA statics in the TLS range doesn't work as expected (accessing fields marked thread_local in C++/CLI will read the template default value instead of the current value of the threadstatic).

@huoyaoyuan

Copy link
Copy Markdown
MemberAuthor

The failures look unrelated now.

@jkotas
jkotas merged commit b79c57e into dotnet:mainJun 24, 2024
@huoyaoyuan
huoyaoyuan deleted the field-accessor-rva branch June 25, 2024 01:27
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 25, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Reflectioncommunity-contributionIndicates that the PR has been added by a community member

Projects

None yet

Development

Successfully merging this pull request may close these issues.

FieldAccessor can't read RVA field correctly

5 participants

@huoyaoyuan@jkotas@MichalStrehovsky@steveharter@AaronRobinsonMSFT