My reading of the source-code path for gub-setup.c indicates that
dest_dev->disk->id is not set by the time the drive number test is done.

utils/i386/pc/grub-setup.c::setup()
   dest_dev = grub_device_open (dest);
   kern/device.c::grub_device_open(const char *dest name)
    disk = grub_disk_open(name);
    kern/disk.c::grub_disk_open(const char *name)
      disk = (grub_disk_t) grub_zalloc(sizeof(*disk));
      disk->name = grub_strdup (name);
      ...
      disk->dev = dev;
      ...
      return disk;
   dev->disk = disk;
   return dev;
 ...
 /* If DEST_DRIVE is a hard disk, enable the workaround, which is
    for buggy BIOSes which don't pass boot drive correctly. Instead,
    they pass 0x00 or 0x01 even when booted from 0x80.  */
 if (dest_dev->disk->id & 0x80)
 /* Replace the jmp (2 bytes) with double nop's.  */
 *boot_drive_check = 0x9090;

To test this I added a small patch to report the value of disk->id
(attached) and built the binary. When run on the target system it
reveals:

./grub-setup: info: the size of hd0 is 78140160
./grub-setup: info: setting the root device to 'hd0,1'.
./grub-setup: info: disk->id = 0.

and the resulting boot sector contained the jmp instruction.

** Attachment added: "grub-setup: report disk id"
   
http://launchpadlibrarian.net/43385640/999_setup_report_disk_id.diff.level-1.log

** Attachment removed: "grub-setup: report disk id"
   
http://launchpadlibrarian.net/43385640/999_setup_report_disk_id.diff.level-1.log

-- 
Acer Travelmate C100 fails to boot: "Geom Error"
https://bugs.launchpad.net/bugs/555500
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.

-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to