[coreboot] (GSoC__SCSI boot)GSOC Midterm survey and new problem(Vendor ID mismatch)

Kevin O'Connor kevin at koconnor.net
Sun Jul 13 18:20:11 CEST 2008


On Mon, Jul 14, 2008 at 12:05:18AM +0800, Zhang Rui wrote:
> 2008/7/13, Kevin O'Connor <kevin at koconnor.net>:
> > > In LegacyBIOS(SeaBIOS), I inserted some code in post.c
> > [...]
> > >     "movl $" __stringify(BUILD_STACK_ADDR) ", %esp\n"
> > [...]
> >
> > > I think the return address in the stack is wrong. I am trying to figure it out.
> >
> > You moved the stack (by assigning a new value to %esp).  So, the
> > return address is not on the stack - it's on the previous stack.
> >
> 
> But I tried without "movl $" __stringify(BUILD_STACK_ADDR) ", %esp\n",
> post_coreboot in LegacyBIOS(SeaBIOS) can not run correctly.
> I think I should manually set the return address?

Right - seabios needs to be using its stack in order to call 16bit
functions.  You probably need to save and restore the stack.
Completely untested, but something like:

  movl %esp, %esi
  movl $BUILD_STACK_ADDR, %esp
  ljmp 0x10, $1f

1:
  calll post_coreboot

  movl %esi, %esp
  retl

However, note that the above wont save/restore the idt/gdt.  And
again, I'm not sure if coreboot puts its stack/idt/gdt somewhere where
seabios may overwrite it.

-Kevin




More information about the coreboot mailing list