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 <tommu...@gmail.com> --- 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