static bool load_bzimage(struct kvm *self, int fd, const char *kernel_cmdline)
{
+ struct boot_params *kern_boot;
struct real_intr_desc intr;
- struct boot_params boot;
unsigned long setup_sects;
+ struct boot_params boot;
unsigned int intr_addr;
size_t cmdline_size;
ssize_t setup_size;
memcpy(p, kernel_cmdline, cmdline_size - 1);
}
-#define hdr_offset(member) \
- offsetof(struct boot_params, hdr) + \
- offsetof(struct setup_header, member)
-#define guest_hdr(kvm, member) \
- guest_real_to_host(kvm, \
- BOOT_LOADER_SELECTOR, \
- hdr_offset(member))
-
- /* some fields in guest header have to be updated */
- p = guest_hdr(self, cmd_line_ptr);
- *(uint32_t *)p = BOOT_CMDLINE_OFFSET;
-
- p = guest_hdr(self, type_of_loader);
- *(uint8_t *)p = 0xff;
-
- p = guest_hdr(self, heap_end_ptr);
- *(uint16_t *)p = 0xfe00;
+ kern_boot = guest_real_to_host(self, BOOT_LOADER_SELECTOR, 0x00);
- p = guest_hdr(self, loadflags);
- *(uint8_t *)p |= CAN_USE_HEAP;
+ kern_boot->hdr.cmd_line_ptr = BOOT_CMDLINE_OFFSET;
+ kern_boot->hdr.type_of_loader = 0xff;
+ kern_boot->hdr.heap_end_ptr = 0xfe00;
+ kern_boot->hdr.loadflags |= CAN_USE_HEAP;
self->boot_selector = BOOT_LOADER_SELECTOR;
/*