Hello John, Thank you very much indeed for your reply. The pmbr.s passes the ARGS set to 0x900 to main() in zfsboot.c and *(uint8_t *)PTOV(ARGS)) is 0x80. In zfsboot.c main(), before the line bootinfo.bi_version = BOOTINFO_VERSION; gets executed we still keep the right value of the dsk->drive and just after the execution, the dsk->drive is equal to zero. Adding printf("hello\n"); before dsk = malloc(sizeof(struct dsk)); keeps the dsk->drive value assigned to 0x80 and the box will boot. Any comments will be appreciated. Best Regards, Christoph -- Christoph Hoffmann On Aug 15, 2011, at 6:12 PM, John Baldwin wrote: > On Friday, August 05, 2011 10:08:27 am Christoph Hoffmann wrote: >> Hello Everyone, >> >> Despite the BIOS information about the nonexistent floppy, the zfsboot.c > code >> will prevent to boot from the first HDD if a floppy is given as a first > available device. >> >> The drive 0x0 (floppy) will be probed before the code below and an error > occurs: >> […] >> gptzfsboot: error 1 lba 32 >> gptzfsboot: error 1 lba 1 >> […] >> >> The continue statement will skip the rest of the iteration because >> if ((i | DRV_HARD) == *(uint8_t *)PTOV(ARGS)) >> is true if the drive equals 0x80. As a result we do not call probe_drive() >> for this drive. > > But that shouldn't happen if ARGS has a drive number of 0. (In that case 0x80 > != 0x0, so it shouldn't match.) > > This shows that PTOV(ARGS) actually has a %dl value of 0x80 which is correct. > The question is how your initial 'dsk' ended up using 0x0 instead of 0x80. > Note that your 'type' is 0, so that means that it was ok initially (TYPE_AD is > 0): > > dsk->drive = *(uint8_t *)PTOV(ARGS); > dsk->type = dsk->drive & DRV_HARD ? TYPE_AD : TYPE_FD; > > Somewhere between where 'dsk' is initalized in main() and before probe_drive() > is called in main() for 'dsk', 'dsk->drive' is getting clobbered. Can you add > some additional printfs to nail down where that is happening? > > -- > John Baldwin > _______________________________________________ > freebsd-current_at_freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"Received on Tue Aug 16 2011 - 11:15:04 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:16 UTC