From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:59574) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QggXT-0004rZ-P7 for qemu-devel@nongnu.org; Tue, 12 Jul 2011 13:14:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QggXR-000853-Jh for qemu-devel@nongnu.org; Tue, 12 Jul 2011 13:14:27 -0400 Received: from mailout-de.gmx.net ([213.165.64.22]:46617) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1QggXQ-00083r-CR for qemu-devel@nongnu.org; Tue, 12 Jul 2011 13:14:24 -0400 Content-Type: text/plain; charset="utf-8" Date: Tue, 12 Jul 2011 19:14:19 +0200 From: =?iso-8859-1?Q?=22Marc_L=F6rner=22?= Message-ID: <20110712171419.119190@gmx.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] Loading ELF binaries with very high base addresses List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu@mercurysquad.com, qemu-devel@nongnu.org Cc: agraf@suse.de Hello Prashant, first of all your "0x4<<64" is wrong it's "0x4<<60". In Volume 2 of the IASDM page 2:46 you see that these three upper bits correspond to the 8 virtual regions (here: region 2). So maybe you can just disregard these bits and use the rest as new offset to an faked guest_base that fits your needs (e.g. somewhere in your process space)? Regards, Marc >Hello, > >I am working on target-ia64, but am stuck during ia64 ELF loading. > >Referring to function "probe_guest_base()" in linux-user/elfload.c around >line 1350, called from around line 1484 -- > >When the main binary is being mmap'd, the host address and guest address >should ideally be the same. If they're not, a linear search is done by >increasing the host_address by one page and trying the mmap again. The >(positive) offset is then saved. >The problem occurs with ia64 binaries, which typically start at >0x4000000000000000 (i.e 0x4<<64). At least on my x86_64 host machine, >mmap'ing at this address fails. The real_address is of the order of >0x8<<32. Needless to say, increasing host_address and trying again will >never reach a lower address to map at. Further, I cannot make it relocate >to a lower host address because the offset (guest_base) is an unsigned >int and so the relocation can only happen by a positive offset. > >Because of this it is not possible to load any ELF binaries which start >at such high memory addresses. I can tailor an elf binary to start at a >lower base address, which might work for that specific case, but I >suspect most existing ia64 binaries start at 0x4<<64 by convention. Also, >the "hiaddr" is read from elf header which again is set to 0x4<<64 + some >value. > >The existing code works fine with x86_64, for example, because the >binaries are typically starting at 0x40000, which is easily mmap'd at >first try. > >Any ideas on a workaround? > >~Prashant -- NEU: FreePhone - kostenlos mobil telefonieren! Jetzt informieren: http://www.gmx.net/de/go/freephone