On Sat, Feb 10, 2024 at 11:17:54PM +0300, Michael Tokarev wrote:
So.. the difference is vgabios only, not seabios (vgabios-stdvga in this case).
And I can't get it to work with debugging vgabios, it always fails even with DEBUG_LEVEL=2 (and level-1 logging isn't useful).
I was able to capture logs just for the non-working version, so there's nothing to compare it against. So I tried a different machine type in qemu, the one which works, which uses SMBIOS 3.0 (q35-8.2).
Thanks for testing. So, if I understand the issue correctly: 1. If smbios v3 is used then the problem does not occur. 2. If gcc v13 is used to compile vgabios then the problem does not occur. 3. If smbios v2 is used and gcc v12 is used then win10 can not boot. Is that correct?
A strange issue. Issues like this tend to be very difficult to track down.
As a random guess, one possibility is that it could be related to vgabios stack size usage. You could try always enabling the "extra vga stack" with a change like:
--- a/vgasrc/vgabios.c +++ b/vgasrc/vgabios.c @@ -285,8 +285,7 @@ vga_set_mode(int mode, int flags) // Disable extra stack if it appears a modern OS is in use. // This works around bugs in some versions of Windows (Vista // and possibly later) when the stack is in the e-segment. - MASK_BDA_EXT(flags, BF_EXTRA_STACK - , (flags & MF_LEGACY) ? BF_EXTRA_STACK : 0); + MASK_BDA_EXT(flags, BF_EXTRA_STACK, BF_EXTRA_STACK); if (memmodel == MM_TEXT) { SET_BDA(video_cols, width); SET_BDA(video_rows, height-1);
Separately, if you can provide the failing and succeeding builds, I can try to take a look at it locally. To do this, make sure you're on commit 82faf1d5, run make, run "tar cfz fullbuild.tgz out/", and provide the resulting tgz file.
-Kevin