[SeaBIOS] Problem with Debug lvl under XEN
kevin at koconnor.net
Tue Feb 14 01:33:43 CET 2012
On Mon, Feb 13, 2012 at 08:50:56PM +0000, Ian Campbell wrote:
> On Mon, 2012-02-13 at 23:21 +0900, Daniel Castro wrote:
> > Hello,
> > I have encountered something a little strange, if I set up the debug
> > lvl to 3 or more Y will get a Triple VCPU fault. If I set it to 1 the
> > bios runs normally but I loose a lot of information that I need to
> > debug. Sometimes if I try to print char * variables regardless of the
> > debug level I still get the fault.
> > Any ideas why?
> My guess is that there is a debug print at lvl>=3 which ends up
> dereferencing a NULL pointer in one of its arguments (probably a %s) and
> this leads to a page fault. This in turn leads to a double fault because
> SeaBIOS does not install a page fault handler and then a triple fault
> because it also does not install a double fault handler. Likewise when
> you are printing "char * variables regardless of the debug level".
SeaBIOS doesn't have paging enabled, so it should not need to install
a page fault handler. SeaBIOS needs to write the real-mode interrupt
descriptor table to address 0, so it should definitely have read/write
access to the memory there. Thus, a null pointer dereference
shouldn't cause a fault. Indeed, I can't think of much that should
cause a fault (other than read/write to IO memory incorrectly, divide
by zero, invalid opcode, etc.).
> You could test this by adding an explicit check for null in the bit of
> bvprintf which handles %s, perhaps putc()ing "(null)" instead.
If you think it is specific to the Xen handling, one could also try
running the same code on qemu to verify it.
More information about the SeaBIOS