On Tue, 12 May 2020 at 19:16, Michael Goffioul <michael.goffi...@gmail.com> wrote: > I'm running into a problem using QEMU in usermode and jemalloc (this is in > the context of an ARM-to-x86 translation layer for Android). The issue is > discussed here: > > https://github.com/jemalloc/jemalloc/issues/1844 > > In a nutshell, the lack of madvise implementation is making jemalloc return > non-zeroed memory on calloc. This then creates various crashes in the > emulated code. > > What would be the QEMU devs point of view on this?
Yes, this is a QEMU bug. The comment in the QEMU code suggests that making MADV_DONTNEED zero memory is not going to be as straightforward as just passing through the call, though: case TARGET_NR_madvise: /* A straight passthrough may not be safe because qemu sometimes turns private file-backed mappings into anonymous mappings. This will break MADV_DONTNEED. This is a hint, so ignoring and returning success is ok. */ return 0; That an "advice" function has been given guaranteed "actual behaviour" requirements suggests somebody somewhere along the line made a bad API design choice, but we're stuck with it now :-( In general, QEMU's syscall emulation is not always perfect; you're more likely to run into bugs if you do weird things, and using madvise() to zero memory (rather than, say, just zeroing it) is somewhat off the beaten path. thanks -- PMM