On 19 June 2016 at 01:11, Timothy Pearson <tpear...@raptorengineering.com> wrote: > Attempting to use host pages larger than the guest leads to > alignment errors during ELF load in the best case, and an > initialization failure inside NPTL in the worst case, causing > all fork() requests inside the guest to fail. > > Warn when thread space cannot be set up, and suggest reducing > host page size if applicable.
This is supposed to work -- for instance the linux-user/mmap.c code has support for host pages and target pages not being the same. In particular for ARM guests TARGET_PAGE_SIZE is 1K but the host page size is 4K, so the config of "host page larger than guest" isn't untested. > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -5482,8 +5482,13 @@ static int do_fork(CPUArchState *env, unsigned > int flags, abi_ulong newsp, > /* Wait for the child to initialize. */ > pthread_cond_wait(&info.cond, &info.mutex); > ret = info.tid; > - if (flags & CLONE_PARENT_SETTID) > - put_user_u32(ret, parent_tidptr); > + if (flags & CLONE_PARENT_SETTID) { > + if (put_user_u32(ret, parent_tidptr)) { > + fprintf(stderr, "do_fork: put_user_u32() failed, > child process state invalid\n"); > + if (qemu_real_host_page_size > TARGET_PAGE_SIZE) > + fprintf(stderr, "do_fork: host page size > > target page size; reduce host page size and try again\n"); > + } > + } I think we should figure out why these put_user_u32() calls are failing and fix them. thanks -- PMM