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:
		| @@ -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 } | ||||
| }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user