[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 25/47] linux-user: Populate more bits in mmap_flags_tbl
From: |
Richard Henderson |
Subject: |
[PULL 25/47] linux-user: Populate more bits in mmap_flags_tbl |
Date: |
Sat, 15 Jul 2023 14:52:55 +0100 |
Fix translation of TARGET_MAP_SHARED and TARGET_MAP_PRIVATE,
which are types not single bits. Add TARGET_MAP_SHARED_VALIDATE,
TARGET_MAP_SYNC, TARGET_MAP_NONBLOCK, TARGET_MAP_POPULATE,
TARGET_MAP_FIXED_NOREPLACE, and TARGET_MAP_UNINITIALIZED.
Update strace to match.
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20230707204054.8792-9-richard.henderson@linaro.org>
---
linux-user/strace.c | 23 ++++++++++-------------
linux-user/syscall.c | 21 +++++++++++++++++++--
2 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/linux-user/strace.c b/linux-user/strace.c
index 9228b235da..bbd29148d4 100644
--- a/linux-user/strace.c
+++ b/linux-user/strace.c
@@ -1094,28 +1094,25 @@ UNUSED static const struct flags mmap_prot_flags[] = {
};
UNUSED static const struct flags mmap_flags[] = {
- FLAG_TARGET(MAP_SHARED),
- FLAG_TARGET(MAP_PRIVATE),
+ FLAG_TARGET_MASK(MAP_SHARED, MAP_TYPE),
+ FLAG_TARGET_MASK(MAP_PRIVATE, MAP_TYPE),
+ FLAG_TARGET_MASK(MAP_SHARED_VALIDATE, MAP_TYPE),
FLAG_TARGET(MAP_ANONYMOUS),
FLAG_TARGET(MAP_DENYWRITE),
- FLAG_TARGET(MAP_FIXED),
- FLAG_TARGET(MAP_GROWSDOWN),
FLAG_TARGET(MAP_EXECUTABLE),
-#ifdef MAP_LOCKED
+ FLAG_TARGET(MAP_FIXED),
+ FLAG_TARGET(MAP_FIXED_NOREPLACE),
+ FLAG_TARGET(MAP_GROWSDOWN),
+ FLAG_TARGET(MAP_HUGETLB),
FLAG_TARGET(MAP_LOCKED),
-#endif
-#ifdef MAP_NONBLOCK
FLAG_TARGET(MAP_NONBLOCK),
-#endif
FLAG_TARGET(MAP_NORESERVE),
-#ifdef MAP_POPULATE
FLAG_TARGET(MAP_POPULATE),
-#endif
-#if defined(TARGET_MAP_UNINITIALIZED) && TARGET_MAP_UNINITIALIZED != 0
+ FLAG_TARGET(MAP_STACK),
+ FLAG_TARGET(MAP_SYNC),
+#if TARGET_MAP_UNINITIALIZED != 0
FLAG_TARGET(MAP_UNINITIALIZED),
#endif
- FLAG_TARGET(MAP_HUGETLB),
- FLAG_TARGET(MAP_STACK),
FLAG_END,
};
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 02d3b6c90a..3a89f6b408 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -6012,9 +6012,19 @@ static const StructEntry struct_termios_def = {
.print = print_termios,
};
+/* If the host does not provide these bits, they may be safely discarded. */
+#ifndef MAP_SYNC
+#define MAP_SYNC 0
+#endif
+#ifndef MAP_UNINITIALIZED
+#define MAP_UNINITIALIZED 0
+#endif
+
static const bitmask_transtbl mmap_flags_tbl[] = {
- { TARGET_MAP_SHARED, TARGET_MAP_SHARED, MAP_SHARED, MAP_SHARED },
- { TARGET_MAP_PRIVATE, TARGET_MAP_PRIVATE, MAP_PRIVATE, MAP_PRIVATE },
+ { TARGET_MAP_TYPE, TARGET_MAP_SHARED, MAP_TYPE, MAP_SHARED },
+ { TARGET_MAP_TYPE, TARGET_MAP_PRIVATE, MAP_TYPE, MAP_PRIVATE },
+ { TARGET_MAP_TYPE, TARGET_MAP_SHARED_VALIDATE,
+ MAP_TYPE, MAP_SHARED_VALIDATE },
{ TARGET_MAP_FIXED, TARGET_MAP_FIXED, MAP_FIXED, MAP_FIXED },
{ TARGET_MAP_ANONYMOUS, TARGET_MAP_ANONYMOUS,
MAP_ANONYMOUS, MAP_ANONYMOUS },
@@ -6032,6 +6042,13 @@ static const bitmask_transtbl mmap_flags_tbl[] = {
Recognize it for the target insofar as we do not want to pass
it through to the host. */
{ TARGET_MAP_STACK, TARGET_MAP_STACK, 0, 0 },
+ { TARGET_MAP_SYNC, TARGET_MAP_SYNC, MAP_SYNC, MAP_SYNC },
+ { TARGET_MAP_NONBLOCK, TARGET_MAP_NONBLOCK, MAP_NONBLOCK, MAP_NONBLOCK },
+ { TARGET_MAP_POPULATE, TARGET_MAP_POPULATE, MAP_POPULATE, MAP_POPULATE },
+ { TARGET_MAP_FIXED_NOREPLACE, TARGET_MAP_FIXED_NOREPLACE,
+ MAP_FIXED_NOREPLACE, MAP_FIXED_NOREPLACE },
+ { TARGET_MAP_UNINITIALIZED, TARGET_MAP_UNINITIALIZED,
+ MAP_UNINITIALIZED, MAP_UNINITIALIZED },
{ 0, 0, 0, 0 }
};
--
2.34.1
- [PULL 00/47] tcg + linux-user patch queue, Richard Henderson, 2023/07/15
- [PULL 04/47] linux-user: Use abi_int not int32_t in syscall_defs.h, Richard Henderson, 2023/07/15
- [PULL 06/47] linux-user: Use abi_llong not int64_t in syscall_defs.h, Richard Henderson, 2023/07/15
- [PULL 05/47] linux-user: Use abi_ullong not uint64_t in syscall_defs.h, Richard Henderson, 2023/07/15
- [PULL 02/47] linux-user: Remove #if 0 block in syscall_defs.h, Richard Henderson, 2023/07/15
- [PULL 09/47] linux-user: Use abi_llong not long long in syscall_defs.h, Richard Henderson, 2023/07/15
- [PULL 13/47] linux-user: Use abi_uint not unsigned in syscall_defs.h, Richard Henderson, 2023/07/15
- [PULL 15/47] include/exec/user: Set ABI_LLONG_ALIGNMENT to 4 for nios2, Richard Henderson, 2023/07/15
- [PULL 25/47] linux-user: Populate more bits in mmap_flags_tbl,
Richard Henderson <=
- [PULL 30/47] linux-user: Widen target_mmap offset argument to off_t, Richard Henderson, 2023/07/15
- [PULL 10/47] linux-user: Use abi_int not int in syscall_defs.h, Richard Henderson, 2023/07/15
- [PULL 20/47] linux-user: Make sure initial brk(0) is page-aligned, Richard Henderson, 2023/07/15
- [PULL 36/47] linux-user: Use 'last' instead of 'end' in target_mmap, Richard Henderson, 2023/07/15
- [PULL 17/47] linux-user: Fix do_shmat type errors, Richard Henderson, 2023/07/15
- [PULL 19/47] tcg: Fix info_in_idx increment in layout_arg_by_ref, Richard Henderson, 2023/07/15