linux-user: Populate more bits in mmap_flags_tbl
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>
This commit is contained in:
parent
6edfca9eae
commit
4b840f9609
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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 }
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user