summaryrefslogtreecommitdiffstats
path: root/linux-user
diff options
context:
space:
mode:
authorAlexander Graf2014-06-05 11:39:43 +0200
committerAlexander Graf2014-06-16 13:24:45 +0200
commita70daba3771e96cc6b8fd3d11ed297ab13717018 (patch)
tree73256d2f361414e1e6e1706365068f8008b752ff /linux-user
parentspapr_hcall: Add address-translation-mode-on-interrupt resource in H_SET_MODE (diff)
downloadqemu-a70daba3771e96cc6b8fd3d11ed297ab13717018.tar.gz
qemu-a70daba3771e96cc6b8fd3d11ed297ab13717018.tar.xz
qemu-a70daba3771e96cc6b8fd3d11ed297ab13717018.zip
linux-user: Tell guest about big host page sizes
We tell the guest its page size via AUX vectors. The guest process then uses this page size as information on which boundaries it can mmap() things. However, if the host has a bigger page size granularity than the guest, it can not fulfill these mmap() requests - which falls apart when MAP_FIXED is passed to mmap. So in that case, let the guest know that we're running on a bigger page size granularity than the target would require. This fixes running qemu-ppc (TARGET_PAGE_SIZE=4k) on a 64k page size ppc64 host for me. Signed-off-by: Alexander Graf <agraf@suse.de> Reviewed-by: Richard Henderson <rth@twiddle.net>
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/elfload.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index eb8d3adce3..c123244ecd 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -1552,7 +1552,7 @@ static abi_ulong create_elf_tables(abi_ulong p, int argc, int envc,
NEW_AUX_ENT(AT_PHDR, (abi_ulong)(info->load_addr + exec->e_phoff));
NEW_AUX_ENT(AT_PHENT, (abi_ulong)(sizeof (struct elf_phdr)));
NEW_AUX_ENT(AT_PHNUM, (abi_ulong)(exec->e_phnum));
- NEW_AUX_ENT(AT_PAGESZ, (abi_ulong)(TARGET_PAGE_SIZE));
+ NEW_AUX_ENT(AT_PAGESZ, (abi_ulong)(MAX(TARGET_PAGE_SIZE, getpagesize())));
NEW_AUX_ENT(AT_BASE, (abi_ulong)(interp_info ? interp_info->load_addr : 0));
NEW_AUX_ENT(AT_FLAGS, (abi_ulong)0);
NEW_AUX_ENT(AT_ENTRY, info->entry);