Repository navigation
Conversation
|
Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
|
Windows run of 14ffbf9 merged onto VLC (PPSA85300, 01.000.007), converted by
ccleste (PPSA59322) and DriftCheck (PPSA98766) on the new default: 2 of 2 rendering each (116.5 and 117.1 fps; 54.3 and 58.5 fps).
Not run: Ruffle (PPSA68091) and XPSemu (PPSA97358), which I don't have. |
|
Thanks, that's the title run this PR was missing. Good to see the default and |
|
Windows and Linux run of 14ffbf9 merged onto
Not run: the converted titles themselves (my build is relinker-only); ycbuzi's VLC runs above cover that. AI-assisted: yes (Claude Code); results above were run on this machine. |
14ffbf9 to
92fbd0a
Compare
|
Rebased onto current |
What
On Windows, Ruffle (PPSA68091), VLC (PPSA85300) and XPSemu (PPSA97358) only start when they're converted with
--windows-fixed-base 0x400000. They read their GOT slots at0x400000plus the offsets inapp0/imports.txt(#4013), but the default executable puts its lowest ELF load page at0x140010000, so the first read faults. babyhuey on #5732, about VLC onmain64a9caa62: with the option it "runs the full 60 s at about 119 fps with no fault. Without--windows-fixed-baseit still faults at start-up as before (#4013)". dantdmdarealguy measured the same for Ruffle on #4013. The web converter has no way to pass the option.This makes
0x400000the preferred address of the executable's lowest ELF load page, which is a PE image base of0x3f0000, since the headers take the 64 KiB before it. Otherwise nothing changes:DYNAMIC_BASE, as since fix(relinker): load Windows executables at a fixed low base #4237. Windows maps the executable before anything else, so the range is normally free and it loads there. If the range is taken, Windows relocates it, as it did when0x140000000was taken.--windows-fixed-baseis unchanged: an exact address, no relocations, and an occupied address fails to load.0x200000000. An image big enough to reach the shared user data page at0x7ffe0000can't load there, so Windows relocates it; the debt entry says so.DYNAMIC_BASEand their preferred base0x140000000. macOS output is unchanged.WindowsPeWriter::Writenow takes the image base and whether it's fixed, instead of an optional fixed base, so the patcher can pass a preferred base.#8973 does the same on Linux. The two don't depend on each other.
Tested
No title run on my side. ycbuzi ran VLC (PPSA85300) on this head merged onto
maina849f2516e(comment), Windows 11, RTX 4070 SUPER: onmainthe default conversion crashed at start-up with0xc0000005and 0 presents (2 runs); with this PR the default conversion rendered at 72.6 to 118.9 fps (4 of 5 runs; the fifth stopped presenting after about 20 s, which also happened once with--windows-fixed-base 0x400000). ccleste (PPSA59322) and DriftCheck (PPSA98766) render on the new default too. Ruffle and XPSemu weren't run.windows_fixed_basenow converts itsimports.txt-style fixture without any option and runs it. The fixture reads the slot at0x400300and returns 42 when the slot is filled. With only that check added tomain950388bfd, the converted executable exits with0xC0000005on a GitHub-hosted Windows runner (verifyrun on my fork), which is the fault in Ruffle, VLC and XPSemu read their GOT at a fixed 0x400000 base from app0/imports.txt and fault once all imports load #4013. With this change it passes. The header check there and inwindows_tls_protected_entriesnow expects0x3f0000.950388bfd. That includeswindows_address_space, which runs the default executable 8 times and checks that its main thread stack stays below the arena.check_conventions.pypasses.pr_overlap.pyreports one conflict: fix(relinker): trap inline SDK mount syscall #8729 changes the next line ofdocs/dev/debt/relinker.md, so whichever lands second needs a one-line rebase.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)