[coreboot] SeaBIOS question and cross compilation fix.
Kevin O'Connor
kevin at koconnor.net
Sun Nov 9 00:01:10 CET 2008
On Sat, Nov 08, 2008 at 09:50:34PM +0100, Stefan Reinauer wrote:
> (gdb) disas 0xfffc0 0xfffd4
> Dump of assembler code from 0xfffc0 to 0xfffd4:
> 0x000fffc0: mov $0x3f8,%dx
> 0x000fffc4: mov $0x44,%al
> 0x000fffc6: out %al,(%dx)
> 0x000fffc7: call 0x1e2617
Okay - you're running into linker madness resulting from mixing 32bit
and 16bit code. The romlayout.S code thinks it is running at offset
0x0000 (which is correct for 16bit code because CS adds in 0xf0000).
You've asked it to do a relative call to 0xf2617, but when you're
actually running in 32bit mode the code is running at offset 0xf0000,
and the relative call to 0xf2617 looks like a jump to
0xf0000+0xf2617=0x1e2617.
A simple fix is to write the call as:
calll (_code32__init - BUILD_BIOS_ADDR)
BTW, I think you're going to need to setup SeaBIOS' gdt/idt - see the
code at "post32" in romlayout.S.
I keep these commands handy for diagnosing these things:
objdump -m i386 -M suffix -ld out/rom.o | less # 32bit disassemble
objdump -m i386 -M i8086 -M suffix -ld out/rom.o | less # 16bit
-Kevin
More information about the coreboot
mailing list