On 7/3/23 11:51, Alex Bennée wrote:
@@ -544,7 +544,7 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int
target_prot,
}
}
- if (!(flags & MAP_FIXED)) {
+ if (!(flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))) {
unsigned long host_start;
void *p;
...
@@ -608,7 +615,8 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int
target_prot,
goto fail;
}
retaddr = target_mmap(start, len, target_prot | PROT_WRITE,
- MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
+ (flags & (MAP_FIXED | MAP_FIXED_NOREPLACE))
+ | MAP_PRIVATE | MAP_ANONYMOUS,
I thought we always MAP_FIXED because we've already jumped the hoops to
work out where in the memory space this allocation is going.
We have not, no. Not here, anyway.
IOW I thought the MAP_FIXED here was an internal QEMU implementation
details rather than reflecting the guests wishes.
As I read it, MAP_FIXED was here because we'd already checked for it in the IF that I
retained above. But now we're checking for 2 things, and must pass that on to the recursion.
r~