Conversation
every kernel32 import under src/system/os/windows/ and the windows runtime entrypoint was unattributed, reaching the PE writer as DYNLIB_ANY and relying on the COFF fallback binding it to dependency 0 (kernel32.dll only when kernel32 sorts first). the first mixed-DLL consumer breaks that implicit ordering contract, mis-binding a whole DLL set and yielding STATUS_ENTRYPOINT_NOT_FOUND at load. pin each ext import with an explicit #[library] decorator naming its providing DLL, removing the ordering dependency. purely additive: correctly-ordered links are unchanged. Closes #334
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #334.
What
Every
ext funundersrc/system/os/windows/and the windows runtime entrypoint (src/runtime/windows/x86_64.mach) now carries an explicit#[library]decorator naming its providing DLL. Previously the ~61 kernel32 imports were unattributed: they reached the PE writer asDYNLIB_ANYand relied on the COFF fallback binding them to dependency 0, which is correct only whilekernel32.dllhappens to sort first. The first mixed-DLL consumer (e.g. one also linkingglfw3.dll) breaks that implicit ordering contract, mis-binding a whole DLL set and producingSTATUS_ENTRYPOINT_NOT_FOUNDat load.The change is purely additive — links that were already ordered correctly are unchanged — and removes the implicit ordering dependency entirely.
Sweep
Exhaustive grep across the windows + runtime trees: 78
ext funtotal. 17 were already pinned (14 ws2_32, 2 synch-apiset, 1 advapi32). The remaining 61 kernel32 imports are now pinned. A grep for anyext funnot immediately preceded by a#[librarydecorator comes back empty.Obsolete comments documenting the old first-dependency reliance (header,
CreateSymbolicLinkA, runtime entrypoint) were updated to match.Verification
mach build .+mach test .: 620 passed, 0 failed (native linux/x86_64).windows-x86_64: succeeds; every windows os/runtime module compiles.kernel32.dlldeliberately placed last inlibs(dependency index 3, not 0) and dumped the import directory: all 53 referenced kernel32 imports resolve underkernel32.dll, 14 underws2_32.dll, 1 underadvapi32.dll, 2 under the synch apiset — each attributed to the correct DLL despite the adverse ordering.ws2_32.dll(dependency 0) — the exact mis-bind the issue describes. Restoring the pin returns it tokernel32.dll.