On 2023/08/08 23:42, Richard Henderson wrote:
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 <akihiko.od...@daynix.com>
---
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/20230808120303.585509-3-pbonz...@redhat.com/
where host support for Alpha is completely removed.
I sent v2 with the condition HOST_ALPHA replaced with
MAP_HUGETLB == 0x100000.
While Alpha is no longer supported, and linux-user will not work on
Alpha, code outside linux-user also refers to osdep.h and the build
script does not actively block building QEMU on an unsupported host so I
left the definition for Alpha just in case.
+#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?
glibc didn't have this defined until 2.28. The older releases still
maintained are 2.26, and 2.27, according to:
https://sourceware.org/glibc/wiki/Release
The page says ALT Linux p9 and Ubuntu 18.04 LTS (Bionic Beaver) has
glibc 2.27.
r~