From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LRVGs-0003kx-NF for qemu-devel@nongnu.org; Mon, 26 Jan 2009 12:29:14 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LRVGq-0003jG-Cu for qemu-devel@nongnu.org; Mon, 26 Jan 2009 12:29:13 -0500 Received: from [199.232.76.173] (port=34417 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LRVGp-0003iE-M2 for qemu-devel@nongnu.org; Mon, 26 Jan 2009 12:29:12 -0500 Received: from mx20.gnu.org ([199.232.41.8]:52310) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LRVGk-0005rG-QE for qemu-devel@nongnu.org; Mon, 26 Jan 2009 12:29:07 -0500 Received: from savannah.gnu.org ([199.232.41.3] helo=sv.gnu.org) by mx20.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LROce-0003CC-Sq for qemu-devel@nongnu.org; Mon, 26 Jan 2009 05:23:17 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1LRObg-0003hq-E2 for qemu-devel@nongnu.org; Mon, 26 Jan 2009 10:22:16 +0000 Received: from aurel32 by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1LRObg-0003hm-2s for qemu-devel@nongnu.org; Mon, 26 Jan 2009 10:22:16 +0000 MIME-Version: 1.0 Errors-To: aurel32 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Aurelien Jarno Message-Id: Date: Mon, 26 Jan 2009 10:22:16 +0000 Subject: [Qemu-devel] [6437] target-ppc: always load kernel to KERNEL_LOAD_ADDR Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 6437 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=6437 Author: aurel32 Date: 2009-01-26 10:22:15 +0000 (Mon, 26 Jan 2009) Log Message: ----------- target-ppc: always load kernel to KERNEL_LOAD_ADDR Linux changed its physical address location in the elf header from 0xc0000000 to 0 on 2.6.25, causing later kernels to fail booting with the -kernel option. This patch assures that the lowest segment in the elf binary is loaded to KERNEL_LOAD_ADDR, which is where the firmware expects it. Signed-off-by: Alexander Graf Signed-off-by: Aurelien Jarno Modified Paths: -------------- trunk/hw/ppc_oldworld.c Modified: trunk/hw/ppc_oldworld.c =================================================================== --- trunk/hw/ppc_oldworld.c 2009-01-25 10:56:51 UTC (rev 6436) +++ trunk/hw/ppc_oldworld.c 2009-01-26 10:22:15 UTC (rev 6437) @@ -207,10 +207,16 @@ } if (linux_boot) { + uint64_t lowaddr = 0; kernel_base = KERNEL_LOAD_ADDR; - /* now we can load the kernel */ - kernel_size = load_elf(kernel_filename, kernel_base - 0xc0000000ULL, - NULL, NULL, NULL); + /* Now we can load the kernel. The first step tries to load the kernel + supposing PhysAddr = 0x00000000. If that was wrong the kernel is + loaded again, the new PhysAddr being computed from lowaddr. */ + kernel_size = load_elf(kernel_filename, kernel_base, NULL, &lowaddr, NULL); + if (kernel_size > 0 && lowaddr != KERNEL_LOAD_ADDR) { + kernel_size = load_elf(kernel_filename, (2 * kernel_base) - lowaddr, + NULL, 0, NULL); + } if (kernel_size < 0) kernel_size = load_aout(kernel_filename, kernel_base, ram_size - kernel_base);