Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
linux-user/loader.h | 3 +++
linux-user/elfload.c | 20 --------------------
linux-user/x86_64/elfload.c | 20 ++++++++++++++++++++
3 files changed, 23 insertions(+), 20 deletions(-)
diff --git a/linux-user/loader.h b/linux-user/loader.h
index 700bbdb02e..e5e317ab76 100644
--- a/linux-user/loader.h
+++ b/linux-user/loader.h
@@ -102,5 +102,8 @@ const char *elf_hwcap_str(uint32_t bit);
const char *elf_hwcap2_str(uint32_t bit);
const char *get_elf_platform(CPUState *cs);
const char *get_elf_base_platform(CPUState *cs);
+#if defined(TARGET_X86_64)
+bool init_guest_commpage(void);
+#endif
#endif /* LINUX_USER_LOADER_H */
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 6feab68a52..297151e4fa 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -159,27 +159,7 @@ typedef abi_int target_pid_t;
#define ELF_CLASS ELFCLASS64
#define ELF_ARCH EM_X86_64
-#if ULONG_MAX > UINT32_MAX
#define INIT_GUEST_COMMPAGE
-static bool init_guest_commpage(void)
-{
- /*
- * The vsyscall page is at a high negative address aka kernel space,
- * which means that we cannot actually allocate it with target_mmap.
- * We still should be able to use page_set_flags, unless the user
- * has specified -R reserved_va, which would trigger an assert().
- */
- if (reserved_va != 0 &&
- TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE - 1 > reserved_va) {
- error_report("Cannot allocate vsyscall page");
- exit(EXIT_FAILURE);
- }
- page_set_flags(TARGET_VSYSCALL_PAGE,
- TARGET_VSYSCALL_PAGE | ~TARGET_PAGE_MASK,
- PAGE_EXEC | PAGE_VALID);
- return true;
-}
-#endif
#else
/*
diff --git a/linux-user/x86_64/elfload.c b/linux-user/x86_64/elfload.c
index bc40ed8c5b..98acca94ef 100644
--- a/linux-user/x86_64/elfload.c
+++ b/linux-user/x86_64/elfload.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "qemu/osdep.h"
+#include "qemu/error-report.h"
#include "qemu.h"
#include "loader.h"
@@ -14,3 +15,22 @@ const char *get_elf_platform(CPUState *cs)
{
return "x86_64";
}
+
+bool init_guest_commpage(void)
+{
+ /*
+ * The vsyscall page is at a high negative address aka kernel space,
+ * which means that we cannot actually allocate it with target_mmap.
+ * We still should be able to use page_set_flags, unless the user
+ * has specified -R reserved_va, which would trigger an assert().
+ */
+ if (reserved_va != 0 &&
+ TARGET_VSYSCALL_PAGE + TARGET_PAGE_SIZE - 1 > reserved_va) {
+ error_report("Cannot allocate vsyscall page");
+ exit(EXIT_FAILURE);
+ }
+ page_set_flags(TARGET_VSYSCALL_PAGE,
+ TARGET_VSYSCALL_PAGE | ~TARGET_PAGE_MASK,
+ PAGE_EXEC | PAGE_VALID);
+ return true;
+}
--
2.43.0