From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KsiJr-0004ov-Rd for qemu-devel@nongnu.org; Wed, 22 Oct 2008 14:20:32 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KsiJq-0004ns-D3 for qemu-devel@nongnu.org; Wed, 22 Oct 2008 14:20:31 -0400 Received: from [199.232.76.173] (port=58901 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KsiJq-0004nk-83 for qemu-devel@nongnu.org; Wed, 22 Oct 2008 14:20:30 -0400 Received: from savannah.gnu.org ([199.232.41.3]:57774 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KsiJp-00011K-Nj for qemu-devel@nongnu.org; Wed, 22 Oct 2008 14:20:30 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1KsiJl-0006oR-SQ for qemu-devel@nongnu.org; Wed, 22 Oct 2008 18:20:26 +0000 Received: from pbrook by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1KsiJk-0006oC-09 for qemu-devel@nongnu.org; Wed, 22 Oct 2008 18:20:24 +0000 MIME-Version: 1.0 Errors-To: pbrook Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Paul Brook Message-Id: Date: Wed, 22 Oct 2008 18:20:24 +0000 Subject: [Qemu-devel] [5513] Use load address when loading ELF images. 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: 5513 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5513 Author: pbrook Date: 2008-10-22 18:20:20 +0000 (Wed, 22 Oct 2008) Log Message: ----------- Use load address when loading ELF images. Signed-off-by: Paul Brook Modified Paths: -------------- trunk/elf_ops.h trunk/loader.c trunk/sysemu.h Modified: trunk/elf_ops.h =================================================================== --- trunk/elf_ops.h 2008-10-22 16:14:08 UTC (rev 5512) +++ trunk/elf_ops.h 2008-10-22 18:20:20 UTC (rev 5513) @@ -177,7 +177,7 @@ return -1; } -static int glue(load_elf, SZ)(int fd, int64_t virt_to_phys_addend, +static int glue(load_elf, SZ)(int fd, int64_t address_offset, int must_swab, uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr) { @@ -229,7 +229,9 @@ if (read(fd, data, ph->p_filesz) != ph->p_filesz) goto fail; } - addr = ph->p_vaddr + virt_to_phys_addend; + /* address_offset is hack for kernel images that are + linked at the wrong physical address. */ + addr = ph->p_paddr + address_offset; cpu_physical_memory_write_rom(addr, data, mem_size); Modified: trunk/loader.c =================================================================== --- trunk/loader.c 2008-10-22 16:14:08 UTC (rev 5512) +++ trunk/loader.c 2008-10-22 18:20:20 UTC (rev 5513) @@ -282,7 +282,7 @@ #include "elf_ops.h" /* return < 0 if error, otherwise the number of bytes loaded in memory */ -int load_elf(const char *filename, int64_t virt_to_phys_addend, +int load_elf(const char *filename, int64_t address_offset, uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr) { int fd, data_order, host_data_order, must_swab, ret; @@ -317,10 +317,10 @@ lseek(fd, 0, SEEK_SET); if (e_ident[EI_CLASS] == ELFCLASS64) { - ret = load_elf64(fd, virt_to_phys_addend, must_swab, pentry, + ret = load_elf64(fd, address_offset, must_swab, pentry, lowaddr, highaddr); } else { - ret = load_elf32(fd, virt_to_phys_addend, must_swab, pentry, + ret = load_elf32(fd, address_offset, must_swab, pentry, lowaddr, highaddr); } Modified: trunk/sysemu.h =================================================================== --- trunk/sysemu.h 2008-10-22 16:14:08 UTC (rev 5512) +++ trunk/sysemu.h 2008-10-22 18:20:20 UTC (rev 5513) @@ -160,7 +160,7 @@ int get_image_size(const char *filename); int load_image(const char *filename, uint8_t *addr); /* deprecated */ int load_image_targphys(const char *filename, target_phys_addr_t, int max_sz); -int load_elf(const char *filename, int64_t virt_to_phys_addend, +int load_elf(const char *filename, int64_t address_offset, uint64_t *pentry, uint64_t *lowaddr, uint64_t *highaddr); int load_aout(const char *filename, target_phys_addr_t addr, int max_sz); int load_uboot(const char *filename, target_ulong *ep, int *is_linux);