From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:38800) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XmSyV-00006l-K8 for qemu-devel@nongnu.org; Thu, 06 Nov 2014 14:44:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XmSyM-0001T2-8n for qemu-devel@nongnu.org; Thu, 06 Nov 2014 14:44:07 -0500 From: Tom Musta Date: Thu, 6 Nov 2014 13:43:13 -0600 Message-Id: <1415302993-26599-1-git-send-email-tommusta@gmail.com> Subject: [Qemu-devel] [PATCH] linux-user: Do not subtract offset from end address List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, qemu-ppc@nongnu.org Cc: Tom Musta , riku.voipio@iki.fi When computing the upper address of a program segment, do not subtract the offset from the virtual address; instead compute the sum of the virtual address and the memory size. Signed-off-by: Tom Musta --- Please include this patch in QEMU 2.2. Commit a93934fecd4dffc9d4b452b670c9506be5dea30d injected a regression of Linux User Mode that I was able to detect on PowerPC 64 (but not x86). I suspect that large page size on the host has something to do with it. In any case, that commit adjusted the lower address of a program segment by the program header's offset field. However, it also inadvertantly adjusted the upper address by the offset also. linux-user/elfload.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 84123ba..e2596a4 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1824,7 +1824,7 @@ static void load_elf_image(const char *image_name, int image_fd, if (a < loaddr) { loaddr = a; } - a += phdr[i].p_memsz; + a = phdr[i].p_vaddr + phdr[i].p_memsz; if (a > hiaddr) { hiaddr = a; } -- 1.7.1