From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [patch] linux-user: problem with mmap_find_vma
Date: Sun, 13 Dec 2009 20:14:48 -0800 [thread overview]
Message-ID: <4B25BBB8.5070807@twiddle.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 746 bytes --]
With host x86_64 target alpha, a trivial recompile started producing
"MMU faults". Eventually, I determined that adding "-B 0x100000000" was
enough to produce the fault with the original working executable. I
expect, but have not verified, that a similar failure can be elicited
with any 64-bit host and any target using such a large explicit base.
The cause is that the default address used by mmap_find_vma may not be
inside the area defined for use by the guest by GUEST_BASE. Certainly
this patch fixes the failure I was seeing.
I cannot see though all the macro ugliness to understand what happens
when GUEST_BASE is not in use to know what needs happening there.
Please feel free to edit the ??? comment to match reality.
r~
[-- Attachment #2: commit-find-vma --]
[-- Type: text/plain, Size: 1727 bytes --]
commit a85b499eabe5a71bb02305c2856c136590276edf
Author: Richard Henderson <rth@twiddle.net>
Date: Sun Dec 13 20:00:39 2009 -0800
linux-user: Adjust mmap_find_vma for guest_base.
The definition of mmap_find_vma requires guest addresses as input
to the START parameter. However, when START==0 i.e. no preferred
address, we use a value pre-defined value which may not be within
the area defined by GUEST_BASE. Make sure and adjust that value
via g2h before using it.
diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index 144fb7c..7e04c23 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -266,11 +266,13 @@ static int mmap_frag(abi_ulong real_start,
#if defined(__CYGWIN__)
/* Cygwin doesn't have a whole lot of address space. */
-static abi_ulong mmap_next_start = 0x18000000;
+#define MMAP_FIRST_START 0x18000000
#else
-static abi_ulong mmap_next_start = 0x40000000;
+#define MMAP_FIRST_START 0x40000000
#endif
+static abi_ulong mmap_next_start;
+
unsigned long last_brk;
/*
@@ -288,8 +290,19 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
start &= qemu_host_page_mask;
/* If 'start' == 0, then a default start address is used. */
- if (start == 0)
+ if (start == 0) {
start = mmap_next_start;
+ if (start == 0) {
+#ifdef CONFIG_USE_GUEST_BASE
+ mmap_next_start = start = (abi_ulong) g2h(MMAP_FIRST_START);
+#else
+ /* ??? What sort of host-guest remapping do we use for
+ when GUEST_BASE is not in use? Presumably we can
+ simply map at any address we choose. */
+ mmap_next_start = start = MMAP_FIRST_START;
+#endif
+ }
+ }
addr = start;
next reply other threads:[~2009-12-14 4:14 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-14 4:14 Richard Henderson [this message]
2009-12-14 4:43 ` [Qemu-devel] [patch] linux-user: problem with mmap_find_vma Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B25BBB8.5070807@twiddle.net \
--to=rth@twiddle.net \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.