On 8/8/23 04:52, Akihiko Odaki wrote:
do_brk() assumes target_mmap() emulates MAP_FIXED_NOREPLACE even when the host does not support it. However, such emulation is not possible if MAP_FIXED_NOREPLACE is defined as zero.Define MAP_FIXED_NOREPLACE with the real value instead of zero if it is not defined. Fixes: e69e032d1a ("linux-user: Use MAP_FIXED_NOREPLACE for do_brk()") Signed-off-by: Akihiko Odaki <[email protected]> --- include/qemu/osdep.h | 8 ++++++-- linux-user/elfload.c | 1 - 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h index cc61b00ba9..1aac17ec2f 100644 --- a/include/qemu/osdep.h +++ b/include/qemu/osdep.h @@ -289,8 +289,12 @@ void QEMU_ERROR("code path is reachable") #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON #endif -#ifndef MAP_FIXED_NOREPLACE -#define MAP_FIXED_NOREPLACE 0 +#if defined(__linux__) && !defined(MAP_FIXED_NOREPLACE) +#if HOST_ALPHA
HOST_ALPHA is not a thing. Also, see https://lore.kernel.org/qemu-devel/[email protected]/ where host support for Alpha is completely removed.
+#define MAP_FIXED_NOREPLACE 0x200000 +#else +#define MAP_FIXED_NOREPLACE 0x100000 +#endif
Which supported hosts do not define this value? Can we simply remove the fallback? r~
