Module: wine Branch: master Commit: b7ea896fdbba5ea23ceec23b71626537d0091c0c URL: https://gitlab.winehq.org/wine/wine/-/commit/b7ea896fdbba5ea23ceec23b7162653...
Author: Paul Gofman pgofman@codeweavers.com Date: Thu May 18 20:42:05 2023 -0600
ntdll: Support MEM_REPLACE_PLACEHOLDER in map_view().
---
dlls/ntdll/unix/virtual.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c index 959ac67694f..6a6fce6436a 100644 --- a/dlls/ntdll/unix/virtual.c +++ b/dlls/ntdll/unix/virtual.c @@ -1980,6 +1980,23 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size, void *ptr; NTSTATUS status;
+ if (alloc_type & MEM_REPLACE_PLACEHOLDER) + { + struct file_view *view; + + if (!(view = find_view( base, 0 ))) return STATUS_INVALID_PARAMETER; + if (view->base != base || view->size != size) return STATUS_CONFLICTING_ADDRESSES; + if (!(view->protect & VPROT_FREE_PLACEHOLDER)) return STATUS_INVALID_PARAMETER; + + TRACE( "found view %p, size %p, protect %#x.\n", view->base, (void *)view->size, view->protect ); + + view->protect = vprot | VPROT_PLACEHOLDER; + set_vprot( view, base, size, vprot ); + if (vprot & VPROT_WRITEWATCH) reset_write_watches( base, size ); + *view_ret = view; + return STATUS_SUCCESS; + } + if (base) { if (is_beyond_limit( base, size, address_space_limit ))