V1 trouble with gcc 3.2.3 SOLUTION!!!

Takeshi Sone ts1 at tsn.or.jp
Fri Nov 21 02:58:01 CET 2003


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
> Linuxbios at clustermatic.org
> http://www.clustermatic.org/mailman/listinfo/linuxbios

-- 
Takeshi



More information about the coreboot mailing list