Hi,

> > How is x86emu broken?  I'm assuming it ignores the prefix for call,
> > so
> > it'll push a 16bit return address instead of a 32bit return address
> > to
> > the stack?
> 
> I think so.  Might be safer to save/restore %esp though.  This
> sequence might be simpler:
> 
>         pushl %eax
>         movl %esp, %eax
>         pushl $1f
>         retl
> 1:      cmpl %esp, %eax
>         jne broken_x86emu
>         popl %eax
> 
> ...
> 
> broken_x86emu:
>         movl %eax, %esp
>         popl %eax
>         iretw

Ah, fixup the stack without assuming specific behavior.  Neat trick.

> Note, though, in addition to checking for broken x86emu, the
> assembler
> entry code would also have to check that the last mode was not set
> via
> a vesa call (to avoid the "skifree" bug).

Ok,  Is there some easy way to access the BDA from assembler code
(specifically the video_mode field)?  Guess I must set a segment
register for that.  Maybe it's easier to just place an additional flag
in the fseg which we can easily reach via cs override ...

cheers,
  Gerd


_______________________________________________
SeaBIOS mailing list
SeaBIOS@seabios.org
https://mail.coreboot.org/mailman/listinfo/seabios

Reply via email to