This bug has been already fixed in the CVS (v1) as of 2003/09/24.
(I remember you said you were using old source)

On Thu, Nov 20, 2003 at 03:08:00PM -0800, Dave Ashley wrote:
> Aside from the = vs == bug which probably wasn't too damaging,
> the problem was caused because the newer compiler doesn't use
> as many registers in its code, specifically the EBX register.
> So at the start of the do_vgabios() function it doesn't bother
> to push EBX on the stack to preserve it. However code higher
> up that calls this function had stored something in EBX, which
> the call to the vgabios happily trashes.
> 
> The fix is to push ebx within the real_mode_switch_call_vga function:
>       /* save the stack */
>  "push %ebx\n"
>       "mov %esp, __stack\n"
> 
> ...
> 
>        "    mov  %ax, %ss          \n"
>        "    mov  __stack, %esp\n"
>  "pop %ebx\n"
>        );
> 
> It won't hurt to push other registers like %esi for example. In fact
> why not push all the registers just to be safe...
> 
> This is a pretty subtle bug, people should understand what was
> wrong and how the fix works.
> 
> -Dave
> _______________________________________________
> Linuxbios mailing list
> [EMAIL PROTECTED]
> http://www.clustermatic.org/mailman/listinfo/linuxbios

-- 
Takeshi
_______________________________________________
Linuxbios mailing list
[EMAIL PROTECTED]
http://www.clustermatic.org/mailman/listinfo/linuxbios

Reply via email to