From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:33692) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UNQjv-0007Qp-Bt for qemu-devel@nongnu.org; Wed, 03 Apr 2013 12:40:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UNQjq-0005AU-6d for qemu-devel@nongnu.org; Wed, 03 Apr 2013 12:40:47 -0400 From: Fabien Chouteau Date: Wed, 3 Apr 2013 18:40:11 +0200 Message-Id: <1365007213-27603-2-git-send-email-chouteau@adacore.com> In-Reply-To: <1365007213-27603-1-git-send-email-chouteau@adacore.com> References: <1365007213-27603-1-git-send-email-chouteau@adacore.com> Subject: [Qemu-devel] [PATCH 1/3] PPC PReP: Load ELF kernel List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org, agraf@suse.de It is useful to be able to boot non-binary (i.e. ELF) kernels directly, as it is simpler to use and it makes symbols available in -d in_asm. Also remove, unnecessary exit() after hw_error(). Signed-off-by: Fabien Chouteau --- hw/ppc/prep.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index 2920911..a2730c8 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -41,6 +41,7 @@ #include "sysemu/blockdev.h" #include "sysemu/arch_init.h" #include "exec/address-spaces.h" +#include "elf.h" //#define HARD_DEBUG_PPC_IO //#define DEBUG_PPC_IO @@ -521,12 +522,17 @@ static void ppc_prep_init(QEMUMachineInitArgs *args) if (linux_boot) { kernel_base = KERNEL_LOAD_ADDR; - /* now we can load the kernel */ - kernel_size = load_image_targphys(kernel_filename, kernel_base, - ram_size - kernel_base); + + /* Try to load the kernel as an ELF file */ + kernel_size = load_elf(kernel_filename, NULL, NULL, NULL, NULL, NULL, + 1, ELF_MACHINE, 0); + if (kernel_size < 0) { + /* Try to load the kernel as an binary file */ + kernel_size = load_image_targphys(kernel_filename, kernel_base, + ram_size - kernel_base); + } if (kernel_size < 0) { hw_error("qemu: could not load kernel '%s'\n", kernel_filename); - exit(1); } /* load initrd */ if (initrd_filename) { -- 1.7.9.5