On Thu, Apr 16, 2015 at 01:46:41PM +0200, Roger Pau Monné wrote:
El 16/04/15 a les 3.43, Kevin O'Connor ha escrit:
If you know which "int 15h" is returning bogus values, you can also use gdb with qemu and set a break point. See http://seabios.org/Debugging .
I've tried this, the function is handle_15c0. This happens quite late in the boot process, the FreeBSD code that triggers this issue is at:
http://fxr.watson.org/fxr/source/dev/atkbdc/atkbd.c#L1163
I've tried to run gdb against SeaBIOS, but it seems like breakpoints are not correctly working. I've launched Qemu with:
# qemu-system-x86_64 -bios out/bios.bin -nographic /dev/zvol/tank/freebsd -s -S
And then:
# gdb782 out/rom16.o
Looks like this broke in gdb at some point. It definitely used to work. You can use this sequence instead:
$ objcopy --adjust-vma 0xf0000 out/rom16.o rom16offset.o $ gdb out/rom16.o (gdb) target remote localhost:1234 (gdb) set architecture i8086 (gdb) symbol-file rom16offset.o (gdb) break handle_15 (gdb) continue
-Kevin