Message ID | 1401961383-28601-1-git-send-email-agraf@suse.de |
---|---|
State | New |
Headers | show |
On 06/05/2014 02:43 AM, Alexander Graf wrote: > 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> > --- > linux-user/elfload.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Woot. Obviously this won't fix all guests, only those that expect a variable page size to begin. But it's certainly a step forward. Reviewed-by: Richard Henderson <rth@twiddle.net> r~
diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 0af6292..127c565 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1545,7 +1545,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);
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> --- linux-user/elfload.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)