Rebase against 46367d1ecc8a016ab7c7af9ec107e33c6d46fc26.

This commit is contained in:
Alistair Leslie-Hughes
2021-11-04 10:15:32 +11:00
parent fe634350d2
commit 00ab8180c0
13 changed files with 76 additions and 193 deletions

View File

@@ -1,4 +1,4 @@
From dd7071e971c22e8100510f51763b0efa4e03eb33 Mon Sep 17 00:00:00 2001
From 4785271b7201cd43778befdf15029f858d2d25e9 Mon Sep 17 00:00:00 2001
From: Andrew Wesie <awesie@gmail.com>
Date: Fri, 24 Apr 2020 14:55:14 -0500
Subject: [PATCH] ntdll: Track if a WRITECOPY page has been modified.
@@ -12,18 +12,18 @@ Signed-off-by: Andrew Wesie <awesie@gmail.com>
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 312448de4a0..37264c91689 100644
index bf77d534049..c3c8f2d1d5b 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -141,6 +141,7 @@ struct file_view
@@ -125,6 +125,7 @@ struct file_view
#define VPROT_GUARD 0x10
#define VPROT_COMMITTED 0x20
#define VPROT_WRITEWATCH 0x40
+#define VPROT_WRITTEN 0x80
/* per-mapping protection flags */
#define VPROT_SYSTEM 0x0200 /* system view (underlying mmap not under our control) */
#define VPROT_NATIVE 0x0400
@@ -1136,7 +1137,7 @@ static int get_unix_prot( BYTE vprot )
@@ -1115,7 +1116,7 @@ static int get_unix_prot( BYTE vprot )
#if defined(__i386__)
if (vprot & VPROT_WRITECOPY)
{
@@ -32,7 +32,7 @@ index 312448de4a0..37264c91689 100644
prot = (prot & ~PROT_WRITE) | PROT_READ;
else
prot |= PROT_WRITE | PROT_READ;
@@ -1573,7 +1574,11 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
@@ -1677,7 +1678,11 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
*/
static DWORD get_win32_prot( BYTE vprot, unsigned int map_prot )
{
@@ -45,7 +45,7 @@ index 312448de4a0..37264c91689 100644
if (vprot & VPROT_GUARD) ret |= PAGE_GUARD;
if (map_prot & SEC_NOCACHE) ret |= PAGE_NOCACHE;
return ret;
@@ -1684,12 +1689,21 @@ static BOOL set_vprot( struct file_view *view, void *base, size_t size, BYTE vpr
@@ -1788,12 +1793,21 @@ static BOOL set_vprot( struct file_view *view, void *base, size_t size, BYTE vpr
if (view->protect & VPROT_WRITEWATCH)
{
/* each page may need different protections depending on write watch flag */
@@ -69,7 +69,7 @@ index 312448de4a0..37264c91689 100644
return TRUE;
}
@@ -3449,7 +3463,7 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack )
@@ -3365,7 +3379,7 @@ NTSTATUS virtual_handle_fault( void *addr, DWORD err, void *stack )
}
if (vprot & VPROT_WRITECOPY)
{

View File

@@ -1,5 +1,5 @@
Fixes: [29384] Multiple applications expect correct handling of WRITECOPY memory protection (Voobly fails to launch Age of Empires II, MSYS2)
Depends: ntdll-ForceBottomUpAlloc
#Depends: ntdll-ForceBottomUpAlloc
# Causes regressions?
# https://bugs.wine-staging.com/show_bug.cgi?id=207
# https://bugs.wine-staging.com/show_bug.cgi?id=521