On Thu, Mar 26, 2015 at 01:31:11AM +0300, Andrey Korolyov wrote: > On Wed, Mar 25, 2015 at 11:54 PM, Kevin O'Connor <kevin@xxxxxxxxxxxx> wrote: > > > > Can you add something like: > > > > -chardev file,path=seabioslog.`date +%s`,id=seabios -device isa-debugcon,iobase=0x402,chardev=seabios > > > > to the qemu command line and forward the resulting log from both a > > succesful boot and a failed one? > > > > -Kevin > > Of course, logs are attached. Thanks. From a diff of the two logs: 4: 000000003ffe0000 - 0000000040000000 = 2 RESERVED 5: 00000000feffc000 - 00000000ff000000 = 2 RESERVED 6: 00000000fffc0000 - 0000000100000000 = 2 RESERVED -enter handle_19: - NULL -Booting from Hard Disk... -Booting from 0000:7c00 So, it got most of the way through the reboot - there's only a few function calls between the e820 map being dumped and the handle_19 call. The fault also seems to show it stopped in the BIOS in 16bit mode: > EIP=0000d331 EFL=00010202 [-------] CPL=0 II=0 A20=1 SMM=0 HLT=0 > ES =0000 00000000 0000ffff 00009300 > CS =f000 000f0000 0000ffff 00009b00 Can you add the patch below, force the fault, and forward the log. Also, if you recreate the failure can you take the EIP from the fault (eg, d331) and search for the corresponding function in the output of: objdump -m i386 -M i8086 -M suffix -ldr out/rom16.o | less (That is, search for "d331:".) If that's too much of a pain, just send me a direct email with the seabios out/rom16.o file and the new EIP of the fault. (I need the out/rom16.o that was used to build the version of SeaBIOS that faulted.) -Kevin diff --git a/src/post.c b/src/post.c index 9ea5620..bbd19c0 100644 --- a/src/post.c +++ b/src/post.c @@ -185,21 +185,24 @@ prepareboot(void) pmm_prepboot(); malloc_prepboot(); memmap_prepboot(); + dprintf(1, "a\n"); HaveRunPost = 2; // Setup bios checksum. BiosChecksum -= checksum((u8*)BUILD_BIOS_ADDR, BUILD_BIOS_SIZE); + dprintf(1, "b\n"); } // Begin the boot process by invoking an int0x19 in 16bit mode. void VISIBLE32FLAT startBoot(void) { + dprintf(1, "e\n"); // Clear low-memory allocations (required by PMM spec). memset((void*)BUILD_STACK_ADDR, 0, BUILD_EBDA_MINIMUM - BUILD_STACK_ADDR); - dprintf(3, "Jump to int19\n"); + dprintf(1, "Jump to int19 (vector=%x)\n", GET_IVT(0x19).segoff); struct bregs br; memset(&br, 0, sizeof(br)); br.flags = F_IF; @@ -239,9 +242,11 @@ maininit(void) // Prepare for boot. prepareboot(); + dprintf(1, "c\n"); // Write protect bios memory. make_bios_readonly(); + dprintf(1, "d\n"); // Invoke int 19 to start boot process. startBoot(); } -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html