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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).