mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
hw/i386/pc: run the multiboot loader before the PVH loader
Some multiboot images could be in the ELF format. In the current
implementation QEMU fails because we try to load these images
as a PVH image.
In order to fix this issue, we should try multiboot first (we
already check the multiboot magic header before to load it).
If it is not a multiboot image, we can try the PVH loader.
Fixes: ab969087da ("pvh: Boot uncompressed kernel using direct boot ABI", 2019-01-15)
Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Message-Id: <20190214180216.246707-1-sgarzare@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
944b96c610
commit
5dc8ab361a
+11
-6
@@ -1209,6 +1209,17 @@ static void load_linux(PCMachineState *pcms,
|
||||
if (ldl_p(header+0x202) == 0x53726448) {
|
||||
protocol = lduw_p(header+0x206);
|
||||
} else {
|
||||
/*
|
||||
* This could be a multiboot kernel. If it is, let's stop treating it
|
||||
* like a Linux kernel.
|
||||
* Note: some multiboot images could be in the ELF format (the same of
|
||||
* PVH), so we try multiboot first since we check the multiboot magic
|
||||
* header before to load it.
|
||||
*/
|
||||
if (load_multiboot(fw_cfg, f, kernel_filename, initrd_filename,
|
||||
kernel_cmdline, kernel_size, header)) {
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* Check if the file is an uncompressed kernel file (ELF) and load it,
|
||||
* saving the PVH entry point used by the x86/HVM direct boot ABI.
|
||||
@@ -1262,12 +1273,6 @@ static void load_linux(PCMachineState *pcms,
|
||||
|
||||
return;
|
||||
}
|
||||
/* This looks like a multiboot kernel. If it is, let's stop
|
||||
treating it like a Linux kernel. */
|
||||
if (load_multiboot(fw_cfg, f, kernel_filename, initrd_filename,
|
||||
kernel_cmdline, kernel_size, header)) {
|
||||
return;
|
||||
}
|
||||
protocol = 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user