The gfxboot maintainer has posted a patch that does the same thing in a different way. I've tested the patch and it works as expected.
From Steffen Winterfeldt:
Anyway, ss is already saved, so no need for an extra register. Here is my version (tested and works on my machine):
--- bincode.asm (revision 650) +++ bincode.asm (working copy) @@ -15546,7 +15546,11 @@ mov ax,pm_seg.prog_d16 mov ds,ax
- mov eax,ss + ; needed for KVM: + ; ss:rpl must equal cs:rpl in PM for VT. We can't rely on ss + ; maintaining its value after the transition. + + movzx eax,word [rm_seg.ss] and esp,0ffffh shl eax,4 add esp,eax
The gfxboot maintainer has posted a patch that does the same thing in a different way. I've tested the patch and it works as expected.
From Steffen Winterfeldt:
Anyway, ss is already saved, so no need for an extra register. Here is
my version (tested and works on my machine):
--- bincode.asm (revision 650)
+++ bincode.asm (working copy)
@@ -15546,7 +15546,11 @@
mov ax,pm_seg.prog_d16
mov ds,ax
- mov eax,ss
+ ; needed for KVM:
+ ; ss:rpl must equal cs:rpl in PM for VT. We can't rely on ss
+ ; maintaining its value after the transition.
+
+ movzx eax,word [rm_seg.ss]
and esp,0ffffh
shl eax,4
add esp,eax