On Thu, Mar 26, 2015 at 2:02 AM, Kevin O'Connor <kevin@xxxxxxxxxxxx> wrote: > 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(); > } Thanks, strangely the reboot is always failing now and always reaching seabios greeting. May be prints straightened up a race (e.g. it is not int19 problem really). object file part: 0000d331 <irq_trampoline_0x19>: irq_trampoline_0x19(): /root/seabios-1.8.1/src/romlayout.S:195 d331: cd 19 int $0x19 d333: cb lretw
Attachment:
reboot.failed
Description: Binary data