') + ')', '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('^' + ".*" + ', '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" + ', '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('^' + ".*" + ', '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); } })(); })(); coff: fix incorrect default `image_base` values and re-enable shared library tests on Windows by kcbanner · Pull Request #21767 · ziglang/zig · GitHub
Skip to content

coff: fix incorrect default image_base values and re-enable shared library tests on Windows - #21767

Merged
andrewrk merged 1 commit into
ziglang:masterfrom
kcbanner:coff_image_base
Oct 22, 2024
Merged

coff: fix incorrect default image_base values and re-enable shared library tests on Windows#21767
andrewrk merged 1 commit into
ziglang:masterfrom
kcbanner:coff_image_base

Conversation

@kcbanner

Copy link
Copy Markdown
Contributor

Closes#16965
Closes#16959
Closes#16960
Closes#18427

As part of investigating a CI failure on aarch64-windows for #21758, I noticed that all the shared library tests were being skipped on either windows or aarch64-windows. I did some testing in an aarch64-windows VM, and noticed that the error happening here was a "Bad Image" error coming from the dll.

The way I figured this out was by removing each of the optional arguments from the linker line to see if I could get a different result. As it turned out, removing the -BASE:268435456 argument for the shared library caused the bug to go away. It turns out this value is incorrect for 64-bit targets, see: https://learn.microsoft.com/en-us/cpp/build/reference/base-base-address?view=msvc-170

Passing the correct value of 0x180000000 resolved the issue, which led me to the diff in this PR.

The regression that introduced this bug (as #18427 hints at) was this change in #18160:

- if (self.base.options.image_base_override) |image_base| {- try argv.append(try std.fmt.allocPrint(arena, "-BASE:{d}", .{image_base}));+ try argv.append(try std.fmt.allocPrint(arena, "-BASE:{d}", .{self.image_base}));

Instead of sending the optional override, self.image_base (which then contained the incorrect value for a 64-bit images) was now always being set on the linker line.

This didn't seem to cause an issue on x86_64, but it seems aarch64 Windows is more strict about this, and an image created with the wrong BASE would result in this "Bad Image" error there.

This PR fixes the image_base value as well as re-enables the disabled tests.

…library tests on Windows
This was the cause of aarch64-windows shared libraries causing "bad image" errors
during load-time linking. I also re-enabled the tests that were surfacing this bug.
@andrewrk

Copy link
Copy Markdown
Member

Nice sleuthing, thank you.

@andrewrk
andrewrk merged commit 85d87c9 into ziglang:masterOct 22, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants

@kcbanner@andrewrk@alexrp