You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
9 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
4b6879f30f | ||
|
94337e021c | ||
|
05c42b1df2 | ||
|
1bc4da9d59 | ||
|
16476ce303 | ||
|
bdb9f49c3e | ||
|
82118b0d67 | ||
|
00985bf311 | ||
|
3c8c7910e7 |
@@ -1,4 +1,4 @@
|
||||
From b034a39ba4e554aad252745996dacd9bf02d5d53 Mon Sep 17 00:00:00 2001
|
||||
From b4010603ae2bab3a4fdc8b57efaebe47254eb168 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Wendt <daniel.wendt@linux.com>
|
||||
Date: Fri, 15 Nov 2013 12:52:37 +0100
|
||||
Subject: [PATCH] gdi32: fix for rotated Arc, ArcTo, Chord and Pie drawing
|
||||
@@ -11,7 +11,7 @@ Wine-Bug: http://bugs.winehq.org/show_bug.cgi?id=34579
|
||||
2 files changed, 83 insertions(+)
|
||||
|
||||
diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c
|
||||
index e4e2de8f99f..af82d63e15b 100644
|
||||
index c6f11ae6a69..e4a5f7bab8b 100644
|
||||
--- a/dlls/gdi32/dibdrv/graphics.c
|
||||
+++ b/dlls/gdi32/dibdrv/graphics.c
|
||||
@@ -312,6 +312,60 @@ static int get_arc_points( int arc_dir, const RECT *rect, POINT start, POINT end
|
||||
@@ -116,12 +116,12 @@ index e4e2de8f99f..af82d63e15b 100644
|
||||
{
|
||||
HeapFree( GetProcessHeap(), 0, points );
|
||||
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
|
||||
index 105d72b23f0..6624a4f7cb7 100644
|
||||
index 6d23e7e0ecc..e8e08d00b81 100644
|
||||
--- a/dlls/gdi32/gdi_private.h
|
||||
+++ b/dlls/gdi32/gdi_private.h
|
||||
@@ -122,4 +122,7 @@ extern BOOL EMFDC_SetROP2( DC_ATTR *dc_attr, INT rop ) DECLSPEC_HIDDEN;
|
||||
extern BOOL EMFDC_SetStretchBltMode( DC_ATTR *dc_attr, INT mode ) DECLSPEC_HIDDEN;
|
||||
extern BOOL EMFDC_SetTextAlign( DC_ATTR *dc_attr, UINT align ) DECLSPEC_HIDDEN;
|
||||
@@ -208,4 +208,7 @@ extern BOOL EMFDC_StretchDIBits( DC_ATTR *dc_attr, INT x_dst, INT y_dst, INT wid
|
||||
INT height_src, const void *bits, const BITMAPINFO *info,
|
||||
UINT coloruse, DWORD rop ) DECLSPEC_HIDDEN;
|
||||
|
||||
+BOOL xform_has_rotate_and_uniform_scale_and_shear( const XFORM *xform ) DECLSPEC_HIDDEN;
|
||||
+BOOL xform_decompose_rotation_and_translation( XFORM *xform, XFORM *rotation_and_translation ) DECLSPEC_HIDDEN;
|
||||
|
@@ -0,0 +1,26 @@
|
||||
From 06dbd32747a1451deb12d1bebc9cbf5a56dfdca5 Mon Sep 17 00:00:00 2001
|
||||
From: Derek Lesho <dlesho@codeweavers.com>
|
||||
Date: Thu, 18 Mar 2021 16:54:44 -0400
|
||||
Subject: [PATCH] mfplat: Stub out MFCreateDXGIDeviceManager, to avoid the d3d
|
||||
path.
|
||||
|
||||
---
|
||||
dlls/mfplat/main.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/dlls/mfplat/main.c b/dlls/mfplat/main.c
|
||||
index 7fd713261fc..9e458ea49bb 100644
|
||||
--- a/dlls/mfplat/main.c
|
||||
+++ b/dlls/mfplat/main.c
|
||||
@@ -8891,6 +8891,8 @@ HRESULT WINAPI MFCreateDXGIDeviceManager(UINT *token, IMFDXGIDeviceManager **man
|
||||
|
||||
TRACE("%p, %p.\n", token, manager);
|
||||
|
||||
+ return E_NOTIMPL;
|
||||
+
|
||||
if (!token || !manager)
|
||||
return E_POINTER;
|
||||
|
||||
--
|
||||
2.30.2
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 6bbf7676b4b7887a54f47b43929b8f3f1d7e77ae Mon Sep 17 00:00:00 2001
|
||||
From 06af804bd6e75332dd2be2005b443e285bc4f2dc Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Wed, 20 Aug 2014 00:08:52 -0600
|
||||
Subject: [PATCH] ntdll: Implement storing DOS attributes in
|
||||
@@ -6,14 +6,14 @@ Subject: [PATCH] ntdll: Implement storing DOS attributes in
|
||||
|
||||
---
|
||||
dlls/ntdll/tests/file.c | 8 ++---
|
||||
dlls/ntdll/unix/file.c | 74 ++++++++++++++++++++++++++++++-----------
|
||||
2 files changed, 58 insertions(+), 24 deletions(-)
|
||||
dlls/ntdll/unix/file.c | 76 +++++++++++++++++++++++++++++------------
|
||||
2 files changed, 59 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index 8b9ec4f624d..6d2c8d2fc94 100644
|
||||
index 19ae5f2ac21..cb578ceee9e 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -1389,7 +1389,7 @@ static void test_file_basic_information(void)
|
||||
@@ -1400,7 +1400,7 @@ static void test_file_basic_information(void)
|
||||
memset(&fbi, 0, sizeof(fbi));
|
||||
res = pNtQueryInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
|
||||
ok ( res == STATUS_SUCCESS, "can't get attributes\n");
|
||||
@@ -22,7 +22,7 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
|
||||
|
||||
/* Then HIDDEN */
|
||||
memset(&fbi, 0, sizeof(fbi));
|
||||
@@ -1402,7 +1402,7 @@ static void test_file_basic_information(void)
|
||||
@@ -1413,7 +1413,7 @@ static void test_file_basic_information(void)
|
||||
memset(&fbi, 0, sizeof(fbi));
|
||||
res = pNtQueryInformationFile(h, &io, &fbi, sizeof fbi, FileBasicInformation);
|
||||
ok ( res == STATUS_SUCCESS, "can't get attributes\n");
|
||||
@@ -31,7 +31,7 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
|
||||
|
||||
/* Check NORMAL last of all (to make sure we can clear attributes) */
|
||||
memset(&fbi, 0, sizeof(fbi));
|
||||
@@ -1459,7 +1459,7 @@ static void test_file_all_information(void)
|
||||
@@ -1470,7 +1470,7 @@ static void test_file_all_information(void)
|
||||
memset(&fai_buf.fai, 0, sizeof(fai_buf.fai));
|
||||
res = pNtQueryInformationFile(h, &io, &fai_buf.fai, sizeof fai_buf, FileAllInformation);
|
||||
ok ( res == STATUS_SUCCESS, "can't get attributes, res %x\n", res);
|
||||
@@ -40,7 +40,7 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
|
||||
|
||||
/* Then HIDDEN */
|
||||
memset(&fai_buf.fai.BasicInformation, 0, sizeof(fai_buf.fai.BasicInformation));
|
||||
@@ -1472,7 +1472,7 @@ static void test_file_all_information(void)
|
||||
@@ -1483,7 +1483,7 @@ static void test_file_all_information(void)
|
||||
memset(&fai_buf.fai, 0, sizeof(fai_buf.fai));
|
||||
res = pNtQueryInformationFile(h, &io, &fai_buf.fai, sizeof fai_buf, FileAllInformation);
|
||||
ok ( res == STATUS_SUCCESS, "can't get attributes\n");
|
||||
@@ -50,10 +50,10 @@ index 8b9ec4f624d..6d2c8d2fc94 100644
|
||||
/* Check NORMAL last of all (to make sure we can clear attributes) */
|
||||
memset(&fai_buf.fai.BasicInformation, 0, sizeof(fai_buf.fai.BasicInformation));
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index da8f65af7b3..0a326a7a1bd 100644
|
||||
index a2cae9708db..9a1bd50c695 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -376,6 +376,26 @@ NTSTATUS errno_to_status( int err )
|
||||
@@ -374,6 +374,26 @@ NTSTATUS errno_to_status( int err )
|
||||
#define XATTR_USER_PREFIX "user."
|
||||
#endif
|
||||
|
||||
@@ -120,7 +120,7 @@ index da8f65af7b3..0a326a7a1bd 100644
|
||||
/* get the stat info and file attributes for a file (by name) */
|
||||
static int get_file_info( const char *path, struct stat *st, ULONG *attr )
|
||||
{
|
||||
@@ -4139,7 +4192,6 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
@@ -4356,7 +4409,6 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
case FileBasicInformation:
|
||||
if (len >= sizeof(FILE_BASIC_INFORMATION))
|
||||
{
|
||||
@@ -128,12 +128,13 @@ index da8f65af7b3..0a326a7a1bd 100644
|
||||
const FILE_BASIC_INFORMATION *info = ptr;
|
||||
LARGE_INTEGER mtime, atime;
|
||||
|
||||
@@ -4153,25 +4205,7 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
io->u.Status = set_file_times( fd, &mtime, &atime );
|
||||
@@ -4369,26 +4421,8 @@ NTSTATUS WINAPI NtSetInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
if (atime.QuadPart || mtime.QuadPart)
|
||||
status = set_file_times( fd, &mtime, &atime );
|
||||
|
||||
if (io->u.Status == STATUS_SUCCESS && info->FileAttributes)
|
||||
- if (status == STATUS_SUCCESS && info->FileAttributes)
|
||||
- {
|
||||
- if (fstat( fd, &st ) == -1) io->u.Status = errno_to_status( errno );
|
||||
- if (fstat( fd, &st ) == -1) status = errno_to_status( errno );
|
||||
- else
|
||||
- {
|
||||
- if (info->FileAttributes & FILE_ATTRIBUTE_READONLY)
|
||||
@@ -148,13 +149,14 @@ index da8f65af7b3..0a326a7a1bd 100644
|
||||
- /* add write permission only where we already have read permission */
|
||||
- st.st_mode |= (0600 | ((st.st_mode & 044) >> 1)) & (~start_umask);
|
||||
- }
|
||||
- if (fchmod( fd, st.st_mode ) == -1) io->u.Status = errno_to_status( errno );
|
||||
- if (fchmod( fd, st.st_mode ) == -1) status = errno_to_status( errno );
|
||||
- }
|
||||
- }
|
||||
+ io->u.Status = fd_set_file_info( fd, info->FileAttributes );
|
||||
+ if (status == STATUS_SUCCESS && info->FileAttributes)
|
||||
+ status = fd_set_file_info( fd, info->FileAttributes );
|
||||
|
||||
if (needs_close) close( fd );
|
||||
}
|
||||
--
|
||||
2.28.0
|
||||
2.30.2
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 02050df2d792e003c28a302d23e7a464573c113c Mon Sep 17 00:00:00 2001
|
||||
From 494342c8f911f827783f1aed9717d793c4e6a8c0 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Wed, 20 Aug 2014 15:28:00 -0600
|
||||
Subject: [PATCH] ntdll: Implement storing DOS attributes in NtCreateFile.
|
||||
@@ -58,10 +58,10 @@ index 6a423174664..fccd48f23e5 100644
|
||||
}
|
||||
testfiles[i].nfound++;
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index b2494d0343a..ad39732fd29 100644
|
||||
index 9a1bd50c695..9b3735dd917 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -407,6 +407,26 @@ static int xattr_get( const char *path, const char *name, void *value, size_t si
|
||||
@@ -404,6 +404,26 @@ static int xattr_get( const char *path, const char *name, void *value, size_t si
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ index b2494d0343a..ad39732fd29 100644
|
||||
/* get space from the current directory data buffer, allocating a new one if necessary */
|
||||
static void *get_dir_data_space( struct dir_data *data, unsigned int size )
|
||||
{
|
||||
@@ -3760,6 +3780,20 @@ static NTSTATUS unmount_device( HANDLE handle )
|
||||
@@ -3783,6 +3803,20 @@ static NTSTATUS unmount_device( HANDLE handle )
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -109,27 +109,27 @@ index b2494d0343a..ad39732fd29 100644
|
||||
|
||||
/******************************************************************************
|
||||
* open_unix_file
|
||||
@@ -3854,13 +3888,14 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
io->u.Status = STATUS_SUCCESS;
|
||||
@@ -3868,13 +3902,14 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
status = STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
- if (io->u.Status == STATUS_SUCCESS)
|
||||
+ if (io->u.Status != STATUS_SUCCESS)
|
||||
- if (status == STATUS_SUCCESS)
|
||||
+ if (status != STATUS_SUCCESS)
|
||||
{
|
||||
- io->u.Status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
|
||||
- sharing, disposition, options, ea_buffer, ea_length );
|
||||
- status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
|
||||
- sharing, disposition, options, ea_buffer, ea_length );
|
||||
- free( unix_name );
|
||||
+ WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
|
||||
+ return io->u.Status;
|
||||
+ return status;
|
||||
}
|
||||
- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), io->u.Status );
|
||||
- else WARN( "%s not found (%x)\n", debugstr_us(attr->ObjectName), status );
|
||||
+
|
||||
+ io->u.Status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
|
||||
+ status = open_unix_file( handle, unix_name, access, &new_attr, attributes,
|
||||
+ sharing, disposition, options, ea_buffer, ea_length );
|
||||
|
||||
if (io->u.Status == STATUS_SUCCESS)
|
||||
if (status == STATUS_SUCCESS)
|
||||
{
|
||||
@@ -3882,6 +3917,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
@@ -3896,6 +3931,11 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
io->Information = FILE_OVERWRITTEN;
|
||||
break;
|
||||
}
|
||||
@@ -139,14 +139,14 @@ index b2494d0343a..ad39732fd29 100644
|
||||
+ set_file_info( unix_name, attributes );
|
||||
+ }
|
||||
}
|
||||
else if (io->u.Status == STATUS_TOO_MANY_OPENED_FILES)
|
||||
else if (status == STATUS_TOO_MANY_OPENED_FILES)
|
||||
{
|
||||
@@ -3890,6 +3930,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
@@ -3904,6 +3944,7 @@ NTSTATUS WINAPI NtCreateFile( HANDLE *handle, ACCESS_MASK access, OBJECT_ATTRIBU
|
||||
}
|
||||
|
||||
free( nt_name.Buffer );
|
||||
+ free( unix_name );
|
||||
return io->u.Status;
|
||||
return io->u.Status = status;
|
||||
}
|
||||
|
||||
--
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From f4f37eddd1eb809cf491ae3a0029f3850021d69d Mon Sep 17 00:00:00 2001
|
||||
From 9b99e441e86ac54a15dc54802db7c739ae729bb8 Mon Sep 17 00:00:00 2001
|
||||
From: Jianqiu Zhang <zhangjianqiu_133@yeah.net>
|
||||
Date: Fri, 17 Apr 2015 14:33:41 +0800
|
||||
Subject: [PATCH] ntdll: Add support for FileFsFullSizeInformation class in
|
||||
@@ -6,14 +6,14 @@ Subject: [PATCH] ntdll: Add support for FileFsFullSizeInformation class in
|
||||
|
||||
---
|
||||
dlls/ntdll/tests/file.c | 8 +-----
|
||||
dlls/ntdll/unix/file.c | 54 ++++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 54 insertions(+), 8 deletions(-)
|
||||
dlls/ntdll/unix/file.c | 55 +++++++++++++++++++++++++++++++++++++++--
|
||||
2 files changed, 54 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
|
||||
index 184b7cdad59..2ef8b451457 100644
|
||||
index bff3b18ce83..5dcb7a2729a 100644
|
||||
--- a/dlls/ntdll/tests/file.c
|
||||
+++ b/dlls/ntdll/tests/file.c
|
||||
@@ -1265,7 +1265,7 @@ static void test_file_full_size_information(void)
|
||||
@@ -1291,7 +1291,7 @@ static void test_file_full_size_information(void)
|
||||
|
||||
/* Assume No Quota Settings configured on Wine Testbot */
|
||||
res = pNtQueryVolumeInformationFile(h, &io, &ffsi, sizeof ffsi, FileFsFullSizeInformation);
|
||||
@@ -22,7 +22,7 @@ index 184b7cdad59..2ef8b451457 100644
|
||||
res = pNtQueryVolumeInformationFile(h, &io, &fsi, sizeof fsi, FileFsSizeInformation);
|
||||
ok(res == STATUS_SUCCESS, "cannot get attributes, res %x\n", res);
|
||||
|
||||
@@ -1281,8 +1281,6 @@ static void test_file_full_size_information(void)
|
||||
@@ -1307,8 +1307,6 @@ static void test_file_full_size_information(void)
|
||||
ok(fsi.BytesPerSector == 512, "[fsi] BytesPerSector expected 512, got %d\n",fsi.BytesPerSector);
|
||||
ok(fsi.SectorsPerAllocationUnit == 8, "[fsi] SectorsPerAllocationUnit expected 8, got %d\n",fsi.SectorsPerAllocationUnit);
|
||||
|
||||
@@ -31,7 +31,7 @@ index 184b7cdad59..2ef8b451457 100644
|
||||
ok(ffsi.TotalAllocationUnits.QuadPart > 0,
|
||||
"[ffsi] TotalAllocationUnits expected positive, got negative value 0x%s\n",
|
||||
wine_dbgstr_longlong(ffsi.TotalAllocationUnits.QuadPart));
|
||||
@@ -1300,14 +1298,10 @@ static void test_file_full_size_information(void)
|
||||
@@ -1326,14 +1324,10 @@ static void test_file_full_size_information(void)
|
||||
"[ffsi] CallerAvailableAllocationUnits error fsi:0x%s, ffsi: 0x%s\n",
|
||||
wine_dbgstr_longlong(fsi.AvailableAllocationUnits.QuadPart),
|
||||
wine_dbgstr_longlong(ffsi.CallerAvailableAllocationUnits.QuadPart));
|
||||
@@ -47,14 +47,15 @@ index 184b7cdad59..2ef8b451457 100644
|
||||
CloseHandle( h );
|
||||
}
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index ca6899b50f5..389470804ee 100644
|
||||
index 5f7ed799c53..d7f91b41324 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -6271,7 +6271,59 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, IO_STATUS_BLOCK *io
|
||||
@@ -7518,8 +7518,59 @@ NTSTATUS WINAPI NtQueryVolumeInformationFile( HANDLE handle, IO_STATUS_BLOCK *io
|
||||
break;
|
||||
|
||||
case FileFsFullSizeInformation:
|
||||
- FIXME( "%p: full size info not supported\n", handle );
|
||||
- status = STATUS_NOT_IMPLEMENTED;
|
||||
+ if(length < sizeof(FILE_FS_FULL_SIZE_INFORMATION))
|
||||
+ io->u.Status = STATUS_BUFFER_TOO_SMALL;
|
||||
+ else
|
||||
@@ -112,5 +113,5 @@ index ca6899b50f5..389470804ee 100644
|
||||
|
||||
case FileFsObjectIdInformation:
|
||||
--
|
||||
2.27.0
|
||||
2.30.2
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 03e143d7abd6684600722fee6c96d05d2c70830d Mon Sep 17 00:00:00 2001
|
||||
From e127c088e6f4cfae3066b31adcd73c4eee9008ed Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Mon, 25 Nov 2019 12:19:20 +0300
|
||||
Subject: [PATCH] ntdll: Force virtual memory allocation order.
|
||||
@@ -12,14 +12,14 @@ are from higher memory than they expect.
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48175
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46568
|
||||
---
|
||||
dlls/ntdll/unix/virtual.c | 418 ++++++++++++++++++--------------------
|
||||
1 file changed, 202 insertions(+), 216 deletions(-)
|
||||
dlls/ntdll/unix/virtual.c | 421 ++++++++++++++++++--------------------
|
||||
1 file changed, 204 insertions(+), 217 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index 75fa0b91872..525c55b8097 100644
|
||||
index 606e136dfaa..4899fc7b443 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -1135,44 +1135,6 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
@@ -1217,44 +1217,6 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ index 75fa0b91872..525c55b8097 100644
|
||||
/***********************************************************************
|
||||
* try_map_free_area
|
||||
*
|
||||
@@ -1205,110 +1167,6 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
|
||||
@@ -1287,110 +1249,6 @@ static void* try_map_free_area( void *base, void *end, ptrdiff_t step,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -175,7 +175,7 @@ index 75fa0b91872..525c55b8097 100644
|
||||
/***********************************************************************
|
||||
* add_reserved_area
|
||||
*
|
||||
@@ -1466,8 +1324,7 @@ static void delete_view( struct file_view *view ) /* [in] View */
|
||||
@@ -1548,8 +1406,7 @@ static void delete_view( struct file_view *view ) /* [in] View */
|
||||
{
|
||||
if (!(view->protect & VPROT_SYSTEM)) unmap_area( view->base, view->size );
|
||||
set_page_vprot( view->base, view->size, 0 );
|
||||
@@ -185,7 +185,7 @@ index 75fa0b91872..525c55b8097 100644
|
||||
wine_rb_remove( &views_tree, &view->entry );
|
||||
*(struct file_view **)view = next_free_view;
|
||||
next_free_view = view;
|
||||
@@ -1515,8 +1372,7 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
|
||||
@@ -1597,8 +1454,7 @@ static NTSTATUS create_view( struct file_view **view_ret, void *base, size_t siz
|
||||
set_page_vprot( base, size, vprot );
|
||||
|
||||
wine_rb_put( &views_tree, view->base, &view->entry );
|
||||
@@ -195,11 +195,8 @@ index 75fa0b91872..525c55b8097 100644
|
||||
|
||||
*view_ret = view;
|
||||
|
||||
@@ -1741,54 +1597,220 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
|
||||
return ptr;
|
||||
}
|
||||
@@ -1812,51 +1668,218 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
|
||||
|
||||
-
|
||||
struct alloc_area
|
||||
{
|
||||
+ char *map_area_start, *map_area_end, *result;
|
||||
@@ -217,20 +214,20 @@ index 75fa0b91872..525c55b8097 100644
|
||||
- *
|
||||
- * Try to map some space inside a reserved area. Callback for mmap_enum_reserved_areas.
|
||||
- */
|
||||
-static int CDECL alloc_reserved_area_callback( void *start, SIZE_T size, void *arg )
|
||||
+static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
|
||||
-static int alloc_reserved_area_callback( void *start, SIZE_T size, void *arg )
|
||||
+static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
|
||||
{
|
||||
- struct alloc_area *alloc = arg;
|
||||
- void *end = (char *)start + size;
|
||||
-
|
||||
- if (start < address_space_start) start = address_space_start;
|
||||
- if (is_beyond_limit( start, size, alloc->limit )) end = alloc->limit;
|
||||
- if (start >= end) return 0;
|
||||
+ char *intersect_start, *intersect_end;
|
||||
+ char *end = (char *)start + size;
|
||||
+ struct alloc_area *area = arg;
|
||||
+ char *alloc_start;
|
||||
|
||||
- if (start < address_space_start) start = address_space_start;
|
||||
- if (is_beyond_limit( start, size, alloc->limit )) end = alloc->limit;
|
||||
- if (start >= end) return 0;
|
||||
-
|
||||
- /* make sure we don't touch the preloader reserved range */
|
||||
- if (preload_reserve_end >= start)
|
||||
+ if (area->top_down)
|
||||
@@ -253,13 +250,20 @@ index 75fa0b91872..525c55b8097 100644
|
||||
{
|
||||
- if (preload_reserve_start <= start) return 0; /* no space in that area */
|
||||
- if (preload_reserve_start < end) end = preload_reserve_start;
|
||||
- }
|
||||
- else if (preload_reserve_start <= start) start = preload_reserve_end;
|
||||
- else
|
||||
- {
|
||||
- /* range is split in two by the preloader reservation, try first part */
|
||||
- if ((alloc->result = find_reserved_free_area( start, preload_reserve_start, alloc->size,
|
||||
- alloc->top_down )))
|
||||
+ alloc_start = ROUND_ADDR( (char *)area->map_area_end - size, granularity_mask );
|
||||
+ if ((area->result = try_map_free_area( intersect_end, alloc_start + size, area->step,
|
||||
+ alloc_start, area->size, area->unix_prot )))
|
||||
+ return 1;
|
||||
return 1;
|
||||
- /* then fall through to try second part */
|
||||
- start = preload_reserve_end;
|
||||
}
|
||||
- else if (preload_reserve_start <= start) start = preload_reserve_end;
|
||||
- else
|
||||
+
|
||||
+ if (intersect_end - intersect_start >= area->size)
|
||||
+ {
|
||||
@@ -291,16 +295,11 @@ index 75fa0b91872..525c55b8097 100644
|
||||
+ assert(ROUND_ADDR(area->map_area_start, granularity_mask) == area->map_area_start);
|
||||
+
|
||||
+ if (intersect_start - area->map_area_start >= area->size)
|
||||
{
|
||||
- /* range is split in two by the preloader reservation, try first part */
|
||||
- if ((alloc->result = find_reserved_free_area( start, preload_reserve_start, alloc->size,
|
||||
- alloc->top_down )))
|
||||
+ {
|
||||
+ if ((area->result = try_map_free_area( area->map_area_start, intersect_start, area->step,
|
||||
+ area->map_area_start, area->size, area->unix_prot )))
|
||||
return 1;
|
||||
- /* then fall through to try second part */
|
||||
- start = preload_reserve_end;
|
||||
}
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (intersect_end - intersect_start >= area->size)
|
||||
+ {
|
||||
@@ -446,7 +445,7 @@ index 75fa0b91872..525c55b8097 100644
|
||||
/***********************************************************************
|
||||
* map_fixed_area
|
||||
*
|
||||
@@ -1860,48 +1882,11 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
|
||||
@@ -1928,48 +1951,11 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
|
||||
if (status != STATUS_SUCCESS) return status;
|
||||
ptr = base;
|
||||
}
|
||||
@@ -498,7 +497,7 @@ index 75fa0b91872..525c55b8097 100644
|
||||
status = create_view( view_ret, ptr, size, vprot );
|
||||
if (status != STATUS_SUCCESS) unmap_area( ptr, size );
|
||||
return status;
|
||||
@@ -2627,6 +2612,7 @@ void virtual_init(void)
|
||||
@@ -2695,6 +2681,7 @@ void virtual_init(void)
|
||||
if (preload_reserve_start)
|
||||
address_space_start = min( address_space_start, preload_reserve_start );
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 9d123ae160a93e689b35e50682405f421d094c18 Mon Sep 17 00:00:00 2001
|
||||
From bcc882f5d1980cbf353891d1e1686e97c068f8c7 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Tue, 2 Jun 2020 21:06:33 +0300
|
||||
Subject: [PATCH] ntdll: Exclude natively mapped areas from free areas list.
|
||||
@@ -8,10 +8,10 @@ Subject: [PATCH] ntdll: Exclude natively mapped areas from free areas list.
|
||||
1 file changed, 109 insertions(+), 28 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
|
||||
index cee8d1d5041..7c26c79649e 100644
|
||||
index 4899fc7b443..cee739bd942 100644
|
||||
--- a/dlls/ntdll/unix/virtual.c
|
||||
+++ b/dlls/ntdll/unix/virtual.c
|
||||
@@ -116,6 +116,7 @@ struct file_view
|
||||
@@ -143,6 +143,7 @@ struct file_view
|
||||
#define VPROT_WRITEWATCH 0x40
|
||||
/* per-mapping protection flags */
|
||||
#define VPROT_SYSTEM 0x0200 /* system view (underlying mmap not under our control) */
|
||||
@@ -19,7 +19,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
|
||||
/* Conversion from VPROT_* to Win32 flags */
|
||||
static const BYTE VIRTUAL_Win32Flags[16] =
|
||||
@@ -999,7 +1000,9 @@ static void dump_view( struct file_view *view )
|
||||
@@ -1081,7 +1082,9 @@ static void dump_view( struct file_view *view )
|
||||
BYTE prot = get_page_vprot( addr );
|
||||
|
||||
TRACE( "View: %p - %p", addr, addr + view->size - 1 );
|
||||
@@ -30,7 +30,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
TRACE( " (builtin image)\n" );
|
||||
else if (view->protect & SEC_IMAGE)
|
||||
TRACE( " (image)\n" );
|
||||
@@ -1134,6 +1137,16 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
@@ -1216,6 +1219,16 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
|
||||
/***********************************************************************
|
||||
* try_map_free_area
|
||||
@@ -1141,21 +1154,27 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
@@ -1223,21 +1236,27 @@ static struct file_view *find_view_range( const void *addr, size_t size )
|
||||
* Try mmaping some expected free memory region, eventually stepping and
|
||||
* retrying inside it, and return where it actually succeeded, or NULL.
|
||||
*/
|
||||
@@ -80,10 +80,10 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
if ((step > 0 && (char *)end - (char *)start < step) ||
|
||||
(step < 0 && (char *)start - (char *)base < -step) ||
|
||||
step == 0)
|
||||
@@ -1597,15 +1616,6 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
|
||||
return ptr;
|
||||
@@ -1666,15 +1685,6 @@ static inline void *unmap_extra_space( void *ptr, size_t total_size, size_t want
|
||||
}
|
||||
|
||||
|
||||
-struct alloc_area
|
||||
-{
|
||||
- char *map_area_start, *map_area_end, *result;
|
||||
@@ -93,10 +93,10 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
- BOOL top_down;
|
||||
-};
|
||||
-
|
||||
static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
|
||||
static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size, void *arg )
|
||||
{
|
||||
char *intersect_start, *intersect_end;
|
||||
@@ -1631,8 +1641,8 @@ static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T
|
||||
@@ -1700,8 +1710,8 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
|
||||
if (area->map_area_end - intersect_end >= area->size)
|
||||
{
|
||||
alloc_start = ROUND_ADDR( (char *)area->map_area_end - size, granularity_mask );
|
||||
@@ -107,7 +107,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1667,8 +1677,8 @@ static int CDECL alloc_area_in_reserved_or_between_callback( void *start, SIZE_T
|
||||
@@ -1736,8 +1746,8 @@ static int alloc_area_in_reserved_or_between_callback( void *start, SIZE_T size,
|
||||
|
||||
if (intersect_start - area->map_area_start >= area->size)
|
||||
{
|
||||
@@ -118,7 +118,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1723,8 +1733,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
@@ -1792,8 +1802,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
if (start >= area->map_area_end || start < area->map_area_start)
|
||||
return NULL;
|
||||
|
||||
@@ -128,7 +128,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1733,8 +1742,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
@@ -1802,8 +1811,7 @@ static void *alloc_free_area_in_range( struct alloc_area *area, char *base, char
|
||||
|| area->map_area_end - start < area->size)
|
||||
return NULL;
|
||||
|
||||
@@ -138,7 +138,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1744,6 +1752,7 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
@@ -1813,6 +1821,7 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
char *reserve_start, *reserve_end;
|
||||
struct alloc_area area;
|
||||
char *base, *end;
|
||||
@@ -146,7 +146,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
int ranges_inc;
|
||||
|
||||
TRACE("limit %p, size %p, top_down %#x.\n", limit, (void *)size, top_down);
|
||||
@@ -1799,16 +1808,67 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
@@ -1868,16 +1877,67 @@ static void *alloc_free_area( void *limit, size_t size, BOOL top_down, int unix_
|
||||
{
|
||||
/* range is split in two by the preloader reservation, try first part. */
|
||||
if ((area.result = alloc_free_area_in_range( &area, base, reserve_start )))
|
||||
@@ -217,7 +217,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@@ -1862,6 +1922,17 @@ static NTSTATUS map_fixed_area( void *base, size_t size, unsigned int vprot )
|
||||
@@ -1931,6 +1991,17 @@ static NTSTATUS map_fixed_area( void *base, size_t size, unsigned int vprot )
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
/***********************************************************************
|
||||
* map_view
|
||||
*
|
||||
@@ -1885,7 +1956,12 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
|
||||
@@ -1954,7 +2025,12 @@ static NTSTATUS map_view( struct file_view **view_ret, void *base, size_t size,
|
||||
else if (!(ptr = alloc_free_area( (void*)(get_zero_bits_mask( zero_bits )
|
||||
& (UINT_PTR)user_space_limit), size, top_down, get_unix_prot( vprot ) )))
|
||||
{
|
||||
@@ -249,7 +249,7 @@ index cee8d1d5041..7c26c79649e 100644
|
||||
}
|
||||
status = create_view( view_ret, ptr, size, vprot );
|
||||
if (status != STATUS_SUCCESS) unmap_area( ptr, size );
|
||||
@@ -3538,7 +3614,12 @@ void virtual_set_force_exec( BOOL enable )
|
||||
@@ -3646,7 +3722,12 @@ void virtual_set_force_exec( BOOL enable )
|
||||
WINE_RB_FOR_EACH_ENTRY( view, &views_tree, struct file_view, entry )
|
||||
{
|
||||
/* file mappings are always accessible */
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 78a4666b1a010b45f8ac13cd4be3d4cdecb3dfdc Mon Sep 17 00:00:00 2001
|
||||
From 38208bd58f6c39d87fec031bd9cc996d60416614 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
|
||||
Date: Sun, 22 Nov 2020 22:35:50 -0700
|
||||
Subject: [PATCH] kernelbase: Convert FILE_FLAG_OPEN_REPARSE_POINT for passing
|
||||
@@ -9,11 +9,11 @@ Subject: [PATCH] kernelbase: Convert FILE_FLAG_OPEN_REPARSE_POINT for passing
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/dlls/kernelbase/file.c b/dlls/kernelbase/file.c
|
||||
index e0a75c2ad08..7eabf5aa211 100644
|
||||
index d21ad299d1f..eecc23f48fc 100644
|
||||
--- a/dlls/kernelbase/file.c
|
||||
+++ b/dlls/kernelbase/file.c
|
||||
@@ -725,6 +725,8 @@ static UINT get_nt_file_options( DWORD attributes )
|
||||
options |= FILE_RANDOM_ACCESS;
|
||||
@@ -727,6 +727,8 @@ static UINT get_nt_file_options( DWORD attributes )
|
||||
options |= FILE_SEQUENTIAL_ONLY;
|
||||
if (attributes & FILE_FLAG_WRITE_THROUGH)
|
||||
options |= FILE_WRITE_THROUGH;
|
||||
+ if (attributes & FILE_FLAG_OPEN_REPARSE_POINT)
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 27c9c2851bb3629cb47134efe3a2162bca80aca6 Mon Sep 17 00:00:00 2001
|
||||
From 9d760a7c86cff579f870d78d0d5b4a6624b22324 Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
|
||||
Date: Sun, 22 Nov 2020 22:37:33 -0700
|
||||
Subject: [PATCH] ntdll: Allow set_file_times_precise to work on reparse
|
||||
@@ -11,12 +11,12 @@ Subject: [PATCH] ntdll: Allow set_file_times_precise to work on reparse
|
||||
3 files changed, 24 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index f80fbd737ef..fb71556cfa3 100644
|
||||
index 4b7d72063d8..0a15b7b92ff 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2223,7 +2223,8 @@ AC_CHECK_FUNCS(\
|
||||
sigprocmask \
|
||||
@@ -2224,7 +2224,8 @@ AC_CHECK_FUNCS(\
|
||||
symlink \
|
||||
sysinfo \
|
||||
tcdrain \
|
||||
- thr_kill2
|
||||
+ thr_kill2 \
|
||||
@@ -65,10 +65,10 @@ index 490d5160761..2449ee54799 100644
|
||||
CloseHandle(handle);
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index a84062df272..185f7e3bbeb 100644
|
||||
index 2ee9288f500..2f0ec520288 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -1731,6 +1731,14 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
|
||||
@@ -1728,6 +1728,14 @@ static int get_file_info( const char *path, struct stat *st, ULONG *attr )
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ index a84062df272..185f7e3bbeb 100644
|
||||
#if defined(__ANDROID__) && !defined(HAVE_FUTIMENS)
|
||||
static int futimens( int fd, const struct timespec spec[2] )
|
||||
{
|
||||
@@ -1746,7 +1754,7 @@ static int futimens( int fd, const struct timespec spec[2] )
|
||||
@@ -1743,7 +1751,7 @@ static int futimens( int fd, const struct timespec spec[2] )
|
||||
static BOOL set_file_times_precise( int fd, const LARGE_INTEGER *mtime,
|
||||
const LARGE_INTEGER *atime, NTSTATUS *status )
|
||||
{
|
||||
@@ -92,7 +92,7 @@ index a84062df272..185f7e3bbeb 100644
|
||||
struct timespec tv[2];
|
||||
|
||||
tv[0].tv_sec = tv[1].tv_sec = 0;
|
||||
@@ -1762,10 +1770,16 @@ static BOOL set_file_times_precise( int fd, const LARGE_INTEGER *mtime,
|
||||
@@ -1759,10 +1767,16 @@ static BOOL set_file_times_precise( int fd, const LARGE_INTEGER *mtime,
|
||||
tv[1].tv_nsec = (mtime->QuadPart % 10000000) * 100;
|
||||
}
|
||||
#ifdef __APPLE__
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 8f44306c926d3e72fea2b5ffcd8c0b5b8c32f8b0 Mon Sep 17 00:00:00 2001
|
||||
From 42f756e849366ece3e83a7add81f7ddfbddcd0df Mon Sep 17 00:00:00 2001
|
||||
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
|
||||
Date: Sat, 18 Jul 2020 09:13:29 -0600
|
||||
Subject: [PATCH] server: Fix obtaining information about a symlink.
|
||||
@@ -11,10 +11,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
|
||||
3 files changed, 15 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
|
||||
index c4efbc40878..4c0e864a011 100644
|
||||
index c6a02995e99..9e27f848e90 100644
|
||||
--- a/dlls/ntdll/unix/file.c
|
||||
+++ b/dlls/ntdll/unix/file.c
|
||||
@@ -1989,7 +1989,7 @@ static NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr,
|
||||
@@ -1986,7 +1986,7 @@ static NTSTATUS fill_file_info( const struct stat *st, ULONG attr, void *ptr,
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ index c4efbc40878..4c0e864a011 100644
|
||||
{
|
||||
data_size_t size = 1024;
|
||||
NTSTATUS ret;
|
||||
@@ -2002,6 +2002,7 @@ static NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
|
||||
@@ -1999,6 +1999,7 @@ static NTSTATUS server_get_unix_name( HANDLE handle, char **unix_name )
|
||||
SERVER_START_REQ( get_handle_unix_name )
|
||||
{
|
||||
req->handle = wine_server_obj_handle( handle );
|
||||
@@ -31,7 +31,7 @@ index c4efbc40878..4c0e864a011 100644
|
||||
wine_server_set_reply( req, name, size );
|
||||
ret = wine_server_call( req );
|
||||
size = reply->name_len;
|
||||
@@ -2197,7 +2198,7 @@ static NTSTATUS get_mountmgr_fs_info( HANDLE handle, int fd, struct mountmgr_uni
|
||||
@@ -2194,7 +2195,7 @@ static NTSTATUS get_mountmgr_fs_info( HANDLE handle, int fd, struct mountmgr_uni
|
||||
NTSTATUS status;
|
||||
int letter;
|
||||
|
||||
@@ -40,34 +40,34 @@ index c4efbc40878..4c0e864a011 100644
|
||||
letter = find_dos_device( unix_name );
|
||||
free( unix_name );
|
||||
|
||||
@@ -4415,7 +4416,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
if (fd_get_file_info( fd, options, &st, &attr ) == -1) io->u.Status = errno_to_status( errno );
|
||||
@@ -4413,7 +4414,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
if (fd_get_file_info( fd, options, &st, &attr ) == -1) status = errno_to_status( errno );
|
||||
else if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode))
|
||||
io->u.Status = STATUS_INVALID_INFO_CLASS;
|
||||
- else if (!(io->u.Status = server_get_unix_name( handle, &unix_name )))
|
||||
+ else if (!(io->u.Status = server_get_unix_name( handle, &unix_name, FALSE )))
|
||||
status = STATUS_INVALID_INFO_CLASS;
|
||||
- else if (!(status = server_get_unix_name( handle, &unix_name )))
|
||||
+ else if (!(status = server_get_unix_name( handle, &unix_name, FALSE )))
|
||||
{
|
||||
LONG name_len = len - FIELD_OFFSET(FILE_ALL_INFORMATION, NameInformation.FileName);
|
||||
|
||||
@@ -4476,7 +4477,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
@@ -4474,7 +4475,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
FILE_NAME_INFORMATION *info = ptr;
|
||||
char *unix_name;
|
||||
|
||||
- if (!(io->u.Status = server_get_unix_name( handle, &unix_name )))
|
||||
+ if (!(io->u.Status = server_get_unix_name( handle, &unix_name, FALSE )))
|
||||
- if (!(status = server_get_unix_name( handle, &unix_name )))
|
||||
+ if (!(status = server_get_unix_name( handle, &unix_name, FALSE )))
|
||||
{
|
||||
LONG name_len = len - FIELD_OFFSET(FILE_NAME_INFORMATION, FileName);
|
||||
io->u.Status = fill_name_info( unix_name, info, &name_len );
|
||||
@@ -4490,7 +4491,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
status = fill_name_info( unix_name, info, &name_len );
|
||||
@@ -4488,7 +4489,7 @@ NTSTATUS WINAPI NtQueryInformationFile( HANDLE handle, IO_STATUS_BLOCK *io,
|
||||
FILE_NETWORK_OPEN_INFORMATION *info = ptr;
|
||||
char *unix_name;
|
||||
|
||||
- if (!(io->u.Status = server_get_unix_name( handle, &unix_name )))
|
||||
+ if (!(io->u.Status = server_get_unix_name( handle, &unix_name, FALSE )))
|
||||
- if (!(status = server_get_unix_name( handle, &unix_name )))
|
||||
+ if (!(status = server_get_unix_name( handle, &unix_name, FALSE )))
|
||||
{
|
||||
ULONG attributes;
|
||||
struct stat st;
|
||||
@@ -6058,7 +6059,7 @@ NTSTATUS create_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
@@ -6038,7 +6039,7 @@ NTSTATUS create_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer)
|
||||
if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL )))
|
||||
return status;
|
||||
|
||||
@@ -76,7 +76,7 @@ index c4efbc40878..4c0e864a011 100644
|
||||
goto cleanup;
|
||||
src_allocated = TRUE;
|
||||
if (flags == SYMLINK_FLAG_RELATIVE)
|
||||
@@ -6339,7 +6340,7 @@ NTSTATUS get_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out
|
||||
@@ -6319,7 +6320,7 @@ NTSTATUS get_reparse_point(HANDLE handle, REPARSE_DATA_BUFFER *buffer, ULONG out
|
||||
if ((status = server_get_unix_fd( handle, FILE_ANY_ACCESS, &dest_fd, &needs_close, NULL, NULL )))
|
||||
return status;
|
||||
|
||||
@@ -85,7 +85,7 @@ index c4efbc40878..4c0e864a011 100644
|
||||
goto cleanup;
|
||||
|
||||
if ((status = get_symlink_properties( unix_src, unix_dest, &unix_dest_len, &buffer->ReparseTag,
|
||||
@@ -6457,7 +6458,7 @@ NTSTATUS remove_reparse_point(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
@@ -6437,7 +6438,7 @@ NTSTATUS remove_reparse_point(HANDLE handle, REPARSE_GUID_DATA_BUFFER *buffer)
|
||||
if ((status = server_get_unix_fd( handle, FILE_SPECIAL_ACCESS, &dest_fd, &needs_close, NULL, NULL )))
|
||||
return status;
|
||||
|
||||
@@ -94,7 +94,7 @@ index c4efbc40878..4c0e864a011 100644
|
||||
goto cleanup;
|
||||
|
||||
TRACE( "Deleting symlink %s\n", unix_name );
|
||||
@@ -7564,7 +7565,7 @@ NTSTATUS WINAPI NtQueryObject( HANDLE handle, OBJECT_INFORMATION_CLASS info_clas
|
||||
@@ -7548,7 +7549,7 @@ NTSTATUS WINAPI NtQueryObject( HANDLE handle, OBJECT_INFORMATION_CLASS info_clas
|
||||
|
||||
/* first try as a file object */
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 0487d1a9007c970043397a02b787d6446722e15c Mon Sep 17 00:00:00 2001
|
||||
From e1e438f9089561a1fd7e80db9274c720be46b43b Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Mon, 31 Aug 2020 23:55:29 -0500
|
||||
Subject: [PATCH] ntdll: Get rid of the direct futex path for condition
|
||||
@@ -80,10 +80,10 @@ index 6edf104c5e9..4b92379a0ff 100644
|
||||
if (flags & RTL_CONDITION_VARIABLE_LOCKMODE_SHARED)
|
||||
RtlAcquireSRWLockShared( lock );
|
||||
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
|
||||
index 1fb2d79dc8e..73f22b83b3d 100644
|
||||
index 3cf19b16c4e..f1767f2b568 100644
|
||||
--- a/dlls/ntdll/unix/loader.c
|
||||
+++ b/dlls/ntdll/unix/loader.c
|
||||
@@ -1817,8 +1817,6 @@ static struct unix_funcs unix_funcs =
|
||||
@@ -1876,8 +1876,6 @@ static struct unix_funcs unix_funcs =
|
||||
fast_RtlAcquireSRWLockShared,
|
||||
fast_RtlReleaseSRWLockExclusive,
|
||||
fast_RtlReleaseSRWLockShared,
|
||||
@@ -93,10 +93,10 @@ index 1fb2d79dc8e..73f22b83b3d 100644
|
||||
ntdll_ceil,
|
||||
ntdll_cos,
|
||||
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
|
||||
index 302698dc5b6..45472a72ed8 100644
|
||||
index 42ac52c9704..99be558da12 100644
|
||||
--- a/dlls/ntdll/unix/sync.c
|
||||
+++ b/dlls/ntdll/unix/sync.c
|
||||
@@ -169,23 +169,6 @@ static int *get_futex(void **ptr)
|
||||
@@ -170,23 +170,6 @@ static int *get_futex(void **ptr)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -120,7 +120,7 @@ index 302698dc5b6..45472a72ed8 100644
|
||||
#endif
|
||||
|
||||
|
||||
@@ -2749,50 +2732,6 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
|
||||
@@ -2842,50 +2825,6 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@ index 302698dc5b6..45472a72ed8 100644
|
||||
#else
|
||||
|
||||
NTSTATUS CDECL fast_RtlTryAcquireSRWLockExclusive( RTL_SRWLOCK *lock )
|
||||
@@ -2825,14 +2764,4 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
|
||||
@@ -2918,14 +2857,4 @@ NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock )
|
||||
return STATUS_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
@@ -187,10 +187,10 @@ index 302698dc5b6..45472a72ed8 100644
|
||||
-
|
||||
#endif
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index bac75ac2d13..07ce95230f1 100644
|
||||
index a5d63e918cc..452eb2790ab 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -103,10 +103,7 @@ extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLS
|
||||
@@ -102,10 +102,7 @@ extern NTSTATUS CDECL fast_RtlTryAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLS
|
||||
extern NTSTATUS CDECL fast_RtlAcquireSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS CDECL fast_RtlReleaseSRWLockExclusive( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
|
||||
@@ -199,18 +199,18 @@ index bac75ac2d13..07ce95230f1 100644
|
||||
-extern NTSTATUS CDECL fast_wait_cv( RTL_CONDITION_VARIABLE *variable, const void *value,
|
||||
- const LARGE_INTEGER *timeout ) DECLSPEC_HIDDEN;
|
||||
|
||||
extern void CDECL virtual_release_address_space(void) DECLSPEC_HIDDEN;
|
||||
|
||||
extern NTSTATUS CDECL unwind_builtin_dll( ULONG type, struct _DISPATCHER_CONTEXT *dispatch,
|
||||
CONTEXT *context ) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h
|
||||
index ca668995562..1fab653728c 100644
|
||||
index 94e0096089b..9d9842b4072 100644
|
||||
--- a/dlls/ntdll/unixlib.h
|
||||
+++ b/dlls/ntdll/unixlib.h
|
||||
@@ -26,7 +26,7 @@
|
||||
struct _DISPATCHER_CONTEXT;
|
||||
|
||||
/* increment this when you change the function table */
|
||||
-#define NTDLL_UNIXLIB_VERSION 123
|
||||
+#define NTDLL_UNIXLIB_VERSION 124
|
||||
-#define NTDLL_UNIXLIB_VERSION 125
|
||||
+#define NTDLL_UNIXLIB_VERSION 126
|
||||
|
||||
struct unix_funcs
|
||||
{
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 10e7bf638ebb34278c5fe3adcb360556aa73d999 Mon Sep 17 00:00:00 2001
|
||||
From 8071d356061b69182746fda71ec9f1b0e9a40e3d Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Sun, 22 Nov 2020 20:51:10 -0600
|
||||
Subject: [PATCH] ntdll: Reimplement SRW locks on top of Win32 futexes.
|
||||
@@ -392,10 +392,10 @@ index 4b92379a0ff..2edc9f8d558 100644
|
||||
|
||||
/***********************************************************************
|
||||
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
|
||||
index 5b2619ff92f..c6f9227dd90 100644
|
||||
index f1767f2b568..99268914734 100644
|
||||
--- a/dlls/ntdll/unix/loader.c
|
||||
+++ b/dlls/ntdll/unix/loader.c
|
||||
@@ -1872,12 +1872,6 @@ static struct unix_funcs unix_funcs =
|
||||
@@ -1870,12 +1870,6 @@ static struct unix_funcs unix_funcs =
|
||||
#endif
|
||||
DbgUiIssueRemoteBreakin,
|
||||
RtlGetSystemTimePrecise,
|
||||
@@ -409,7 +409,7 @@ index 5b2619ff92f..c6f9227dd90 100644
|
||||
ntdll_ceil,
|
||||
ntdll_cos,
|
||||
diff --git a/dlls/ntdll/unix/sync.c b/dlls/ntdll/unix/sync.c
|
||||
index 45b0b03bda0..82094813570 100644
|
||||
index 99be558da12..5a82cf7e539 100644
|
||||
--- a/dlls/ntdll/unix/sync.c
|
||||
+++ b/dlls/ntdll/unix/sync.c
|
||||
@@ -118,8 +118,6 @@ static inline ULONGLONG monotonic_counter(void)
|
||||
@@ -455,7 +455,7 @@ index 45b0b03bda0..82094813570 100644
|
||||
#endif
|
||||
|
||||
|
||||
@@ -2535,289 +2513,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
|
||||
@@ -2572,289 +2550,3 @@ NTSTATUS WINAPI NtWaitForAlertByThreadId( const void *address, const LARGE_INTEG
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -746,7 +746,7 @@ index 45b0b03bda0..82094813570 100644
|
||||
-
|
||||
-#endif
|
||||
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
|
||||
index 2f642ed77f7..9e500b3dc95 100644
|
||||
index 452eb2790ab..8f85eb5ebc6 100644
|
||||
--- a/dlls/ntdll/unix/unix_private.h
|
||||
+++ b/dlls/ntdll/unix/unix_private.h
|
||||
@@ -96,12 +96,6 @@ extern void (WINAPI *pLdrInitializeThunk)(CONTEXT*,void**,ULONG_PTR,ULONG_PT
|
||||
@@ -761,17 +761,17 @@ index 2f642ed77f7..9e500b3dc95 100644
|
||||
-extern NTSTATUS CDECL fast_RtlReleaseSRWLockShared( RTL_SRWLOCK *lock ) DECLSPEC_HIDDEN;
|
||||
extern LONGLONG CDECL fast_RtlGetSystemTimePrecise(void) DECLSPEC_HIDDEN;
|
||||
|
||||
extern void CDECL virtual_release_address_space(void) DECLSPEC_HIDDEN;
|
||||
extern NTSTATUS CDECL unwind_builtin_dll( ULONG type, struct _DISPATCHER_CONTEXT *dispatch,
|
||||
diff --git a/dlls/ntdll/unixlib.h b/dlls/ntdll/unixlib.h
|
||||
index e90000c13e9..742f1a7b681 100644
|
||||
index 9d9842b4072..4aaa20d1795 100644
|
||||
--- a/dlls/ntdll/unixlib.h
|
||||
+++ b/dlls/ntdll/unixlib.h
|
||||
@@ -26,7 +26,7 @@
|
||||
struct _DISPATCHER_CONTEXT;
|
||||
|
||||
/* increment this when you change the function table */
|
||||
-#define NTDLL_UNIXLIB_VERSION 124
|
||||
+#define NTDLL_UNIXLIB_VERSION 125
|
||||
-#define NTDLL_UNIXLIB_VERSION 126
|
||||
+#define NTDLL_UNIXLIB_VERSION 127
|
||||
|
||||
struct unix_funcs
|
||||
{
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From d1536aa5b9df87c3764dc2090bdde76f708fda94 Mon Sep 17 00:00:00 2001
|
||||
From f15d4797f17e6b45056fd1d211f54d4810c31e67 Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Wed, 9 Sep 2015 05:31:18 +0800
|
||||
Subject: [PATCH] ntdll: Initialize mod_name to zero.
|
||||
@@ -8,11 +8,11 @@ Subject: [PATCH] ntdll: Initialize mod_name to zero.
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index 42cdc628021..ef1e28af2e7 100644
|
||||
index f9dd2e8c61a..ba43de24576 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -1299,6 +1299,8 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF *wm, UINT reason, LPVOID lpReserved
|
||||
unix_funcs->init_builtin_dll( wm->ldr.DllBase );
|
||||
@@ -1424,6 +1424,8 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF *wm, UINT reason, LPVOID lpReserved
|
||||
init_builtin_dll( wm->ldr.DllBase );
|
||||
if (!entry) return STATUS_SUCCESS;
|
||||
|
||||
+ memset( mod_name, 0, sizeof(mod_name) );
|
||||
@@ -21,5 +21,5 @@ index 42cdc628021..ef1e28af2e7 100644
|
||||
{
|
||||
size_t len = min( wm->ldr.BaseDllName.Length, sizeof(mod_name)-sizeof(WCHAR) );
|
||||
--
|
||||
2.27.0
|
||||
2.30.2
|
||||
|
||||
|
@@ -1,42 +0,0 @@
|
||||
From 40088e644ecba6005de000c49b65cb168cc9ad5d Mon Sep 17 00:00:00 2001
|
||||
From: Martin Storsjo <martin@martin.st>
|
||||
Date: Wed, 21 Jun 2017 11:42:40 +0300
|
||||
Subject: [PATCH] configure: Avoid clobbering x18 on arm64 within wine
|
||||
|
||||
On aarch64/arm64 on linux, the compiler is free to use x18 for normal
|
||||
code generation (while the register is reserved on iOS/darwin, and
|
||||
on windows).
|
||||
|
||||
If targeting arm64, check for the flags that allows this register to
|
||||
be left untouched (the flag is supported both by gcc and clang).
|
||||
|
||||
Similar issues can still pop up as soon as system library functions
|
||||
that happen to touch x18 are called, unless the system libraries have
|
||||
been built with the same flag.
|
||||
|
||||
Signed-off-by: Martin Storsjo <martin@martin.st>
|
||||
---
|
||||
configure.ac | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index b0981767977..67e82744dae 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -219,8 +219,13 @@ case $host in
|
||||
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdarg.h>]], [[void func(__builtin_ms_va_list *args);]])],
|
||||
[wine_cv_builtin_ms_va_list=yes],[wine_cv_builtin_ms_va_list=no])])
|
||||
test $wine_cv_builtin_ms_va_list != no || AC_MSG_ERROR([You need clang >= 5.0 to build Wine for arm64.])
|
||||
+
|
||||
enable_wow64=${enable_wow64:-yes}
|
||||
enable_wow64win=${enable_wow64win:-yes}
|
||||
+ # Avoid clobbering the x18 register which is reserved in windows.
|
||||
+ # This isn't complete/enough unless all of the system libraries have
|
||||
+ # been built with the same flag though.
|
||||
+ WINE_TRY_CFLAGS([-ffixed-x18], [CFLAGS="$CFLAGS -ffixed-x18"])
|
||||
;;
|
||||
i[[3456789]]86*)
|
||||
enable_win16=${enable_win16:-yes}
|
||||
--
|
||||
2.30.2
|
||||
|
@@ -1,60 +0,0 @@
|
||||
From 53921ff97159fcd4a060568df463886192d41420 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Storsjo <martin@martin.st>
|
||||
Date: Wed, 16 Aug 2017 23:48:40 +0300
|
||||
Subject: [PATCH] ntdll: Always restore TEB to x18 on aarch 64 on return from
|
||||
calls to builtins
|
||||
|
||||
This requires always enabling relaying of calls though.
|
||||
|
||||
This isn't enough for cases where builtin functions call back into
|
||||
the user code though, but works well enough for all pratical cases
|
||||
I've run so far.
|
||||
|
||||
This does give a bit of performance overhead, but it makes it
|
||||
possible to run most real arm64 binaries (all I've tried).
|
||||
|
||||
Signed-off-by: Martin Storsjo <martin@martin.st>
|
||||
---
|
||||
dlls/ntdll/loader.c | 8 +++++++-
|
||||
dlls/ntdll/relay.c | 4 ++++
|
||||
2 files changed, 11 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c
|
||||
index 092c47eac3b..05e36598cdb 100644
|
||||
--- a/dlls/ntdll/loader.c
|
||||
+++ b/dlls/ntdll/loader.c
|
||||
@@ -1890,7 +1890,13 @@ static NTSTATUS build_module( LPCWSTR load_path, const UNICODE_STRING *nt_name,
|
||||
|
||||
if (is_builtin)
|
||||
{
|
||||
- if (TRACE_ON(relay)) RELAY_SetupDLL( *module );
|
||||
+#ifdef __aarch64__
|
||||
+ /* Always enable relay entry points on aarch64, to allow restoring
|
||||
+ * the TEB to x18. */
|
||||
+#else
|
||||
+ if (TRACE_ON(relay))
|
||||
+#endif
|
||||
+ RELAY_SetupDLL( *module );
|
||||
}
|
||||
else
|
||||
{
|
||||
diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c
|
||||
index be2dc833377..e29496a8c7a 100644
|
||||
--- a/dlls/ntdll/relay.c
|
||||
+++ b/dlls/ntdll/relay.c
|
||||
@@ -691,8 +691,12 @@ static LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx,
|
||||
{
|
||||
unsigned int nb_args;
|
||||
void *func = relay_trace_entry( descr, idx, stack, &nb_args );
|
||||
+ void *teb;
|
||||
LONGLONG ret = call_entry_point( func, nb_args, stack );
|
||||
relay_trace_exit( descr, idx, stack[-1], ret );
|
||||
+ teb = NtCurrentTeb();
|
||||
+ /* Restore the TEB pointer, in case the builtin call clobbered it. */
|
||||
+ __asm__ __volatile__( "mov x18, %0" : : "r" (teb) );
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [38780] AArch64 platforms: register X18 (TEB) must remain reserved for Wine to run 64-bit ARM Windows applications.
|
@@ -51,13 +51,13 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "7bedd313c88d7b1fd4fe7b04c20bb0ec91605cac"
|
||||
echo "7f144646ffac6f3632d0c39b217dbd433c1154a0"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
version()
|
||||
{
|
||||
echo "Wine Staging 6.14"
|
||||
echo "Wine Staging 6.15"
|
||||
echo "Copyright (C) 2014-2019 the Wine Staging project authors."
|
||||
echo "Copyright (C) 2018-2020 Alistair Leslie-Hughes"
|
||||
echo ""
|
||||
@@ -169,7 +169,6 @@ patch_enable_all ()
|
||||
enable_ntdll_Syscall_Emulation="$1"
|
||||
enable_ntdll_WRITECOPY="$1"
|
||||
enable_ntdll_Zero_mod_name="$1"
|
||||
enable_ntdll_aarch_TEB="$1"
|
||||
enable_ntdll_ext4_case_folder="$1"
|
||||
enable_ntoskrnl_Stubs="$1"
|
||||
enable_nvapi_Stub_DLL="$1"
|
||||
@@ -241,7 +240,6 @@ patch_enable_all ()
|
||||
enable_windowscodecs_TIFF_Support="$1"
|
||||
enable_wine_inf_Directory_ContextMenuHandlers="$1"
|
||||
enable_wine_inf_Dummy_CA_Certificate="$1"
|
||||
enable_wine_inf_Performance="$1"
|
||||
enable_wineboot_HKEY_DYN_DATA="$1"
|
||||
enable_wineboot_ProxySettings="$1"
|
||||
enable_winecfg_Libraries="$1"
|
||||
@@ -549,9 +547,6 @@ patch_enable ()
|
||||
ntdll-Zero_mod_name)
|
||||
enable_ntdll_Zero_mod_name="$2"
|
||||
;;
|
||||
ntdll-aarch-TEB)
|
||||
enable_ntdll_aarch_TEB="$2"
|
||||
;;
|
||||
ntdll-ext4-case-folder)
|
||||
enable_ntdll_ext4_case_folder="$2"
|
||||
;;
|
||||
@@ -765,9 +760,6 @@ patch_enable ()
|
||||
wine.inf-Dummy_CA_Certificate)
|
||||
enable_wine_inf_Dummy_CA_Certificate="$2"
|
||||
;;
|
||||
wine.inf-Performance)
|
||||
enable_wine_inf_Performance="$2"
|
||||
;;
|
||||
wineboot-HKEY_DYN_DATA)
|
||||
enable_wineboot_HKEY_DYN_DATA="$2"
|
||||
;;
|
||||
@@ -2391,7 +2383,7 @@ fi
|
||||
# | * [#49692] Multiple applications need a Media Foundation media source implementation
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/mf/topology.c, dlls/winegstreamer/Makefile.in, dlls/winegstreamer/audioconvert.c,
|
||||
# | * dlls/mf/topology.c, dlls/mfplat/main.c, dlls/winegstreamer/Makefile.in, dlls/winegstreamer/audioconvert.c,
|
||||
# | dlls/winegstreamer/colorconvert.c, dlls/winegstreamer/decode_transform.c, dlls/winegstreamer/gst_private.h,
|
||||
# | dlls/winegstreamer/media_source.c, dlls/winegstreamer/mfplat.c, dlls/winegstreamer/quartz_parser.c,
|
||||
# | dlls/winegstreamer/wg_parser.c, dlls/winegstreamer/winegstreamer_classes.idl, include/mfidl.idl, include/wmcodecdsp.idl
|
||||
@@ -2434,6 +2426,7 @@ if test "$enable_mfplat_streaming_support" -eq 1; then
|
||||
patch_apply mfplat-streaming-support/0035-winegstreamer-Don-t-rely-on-max_size-in-unseekable-p.patch
|
||||
patch_apply mfplat-streaming-support/0036-winegstreamer-Implement-MFT_MESSAGE_COMMAND_FLUSH-fo.patch
|
||||
patch_apply mfplat-streaming-support/0037-winegstreamer-Default-Frame-size-if-one-isn-t-availa.patch
|
||||
patch_apply mfplat-streaming-support/0038-mfplat-Stub-out-MFCreateDXGIDeviceManager-to-avoid-t.patch
|
||||
fi
|
||||
|
||||
# Patchset mmsystem.dll16-MIDIHDR_Refcount
|
||||
@@ -2789,19 +2782,6 @@ if test "$enable_ntdll_Zero_mod_name" -eq 1; then
|
||||
patch_apply ntdll-Zero_mod_name/0001-ntdll-Initialize-mod_name-to-zero.patch
|
||||
fi
|
||||
|
||||
# Patchset ntdll-aarch-TEB
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#38780] AArch64 platforms: register X18 (TEB) must remain reserved for Wine to run 64-bit ARM Windows applications.
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * configure.ac, dlls/ntdll/loader.c, dlls/ntdll/relay.c
|
||||
# |
|
||||
if test "$enable_ntdll_aarch_TEB" -eq 1; then
|
||||
patch_apply ntdll-aarch-TEB/0001-configure-Avoid-clobbering-x18-on-arm64-within-wine.patch
|
||||
patch_apply ntdll-aarch-TEB/0002-ntdll-Always-restore-TEB-to-x18-on-aarch-64-on-retur.patch
|
||||
fi
|
||||
|
||||
# Patchset ntdll-ext4-case-folder
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
@@ -3743,21 +3723,6 @@ if test "$enable_wine_inf_Dummy_CA_Certificate" -eq 1; then
|
||||
patch_apply wine.inf-Dummy_CA_Certificate/0001-wine.inf.in-Add-invalid-dummy-certificate-to-CA-cert.patch
|
||||
fi
|
||||
|
||||
# Patchset wine.inf-Performance
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
# | * [#33661] Add performance library registry keys needed by MS SQL Server Management Studio Express 2008 R2
|
||||
# | * [#33037] Visual Studio 6 can't be installed with WinVer >= Win2K (missing HKEY_PERFORMANCE_DATA 230, process object)
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/advapi32/tests/registry.c, loader/wine.inf.in
|
||||
# |
|
||||
if test "$enable_wine_inf_Performance" -eq 1; then
|
||||
patch_apply wine.inf-Performance/0001-wine.inf-Add-registry-keys-for-Windows-Performance-L.patch
|
||||
patch_apply wine.inf-Performance/0002-wine.inf-Add-Counters-to-the-perflib-key-as-an-alias.patch
|
||||
patch_apply wine.inf-Performance/0003-advapi32-tests-Add-test-for-perflib-registry-key.patch
|
||||
fi
|
||||
|
||||
# Patchset wineboot-HKEY_DYN_DATA
|
||||
# |
|
||||
# | This patchset fixes the following Wine bugs:
|
||||
|
@@ -1,27 +0,0 @@
|
||||
From cb92c3e3611dd8d8d97992b79e1c9fc449ff2569 Mon Sep 17 00:00:00 2001
|
||||
From: Daniel Jelinski <djelinski1@gmail.com>
|
||||
Date: Sun, 8 Feb 2015 06:32:34 +0100
|
||||
Subject: wine.inf: Add registry keys for Windows Performance Library.
|
||||
|
||||
---
|
||||
loader/wine.inf.in | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
|
||||
index 315ef29..2de7e61 100644
|
||||
--- a/loader/wine.inf.in
|
||||
+++ b/loader/wine.inf.in
|
||||
@@ -492,6 +492,10 @@ HKLM,%CurrentVersionNT%\Language Pack,,16
|
||||
HKLM,%CurrentVersionNT%\NetworkCards,,16
|
||||
HKLM,%CurrentVersionNT%\OpenGLDrivers,,16
|
||||
HKLM,%CurrentVersionNT%\Perflib,,16
|
||||
+HKLM,%CurrentVersionNT%\Perflib,Last Counter,0x10003,1846
|
||||
+HKLM,%CurrentVersionNT%\Perflib,Last Help,0x10003,1847
|
||||
+HKLM,%CurrentVersionNT%\Perflib\009,Counter,0x10002,1,1847,1846,End Marker
|
||||
+HKLM,%CurrentVersionNT%\Perflib\009,Help,0x10002,1847,End Marker
|
||||
HKLM,%CurrentVersionNT%\Ports,,16
|
||||
HKLM,%CurrentVersionNT%\Print,,16
|
||||
HKLM,%CurrentVersionNT%\ProfileList,,16
|
||||
--
|
||||
2.4.5
|
||||
|
@@ -1,26 +0,0 @@
|
||||
From 9a3d921b80c5c602bbb130457f0f67c79da44660 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Tue, 23 May 2017 14:59:15 +0800
|
||||
Subject: wine.inf: Add 'Counters' to the perflib key as an alias for
|
||||
'Counter'.
|
||||
|
||||
Visual Studio 6.0 setup depends on this.
|
||||
---
|
||||
loader/wine.inf.in | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
|
||||
index 6f6ae55b0f7..7fa93a62630 100644
|
||||
--- a/loader/wine.inf.in
|
||||
+++ b/loader/wine.inf.in
|
||||
@@ -522,6 +522,7 @@ HKLM,%CurrentVersionNT%\Perflib,,16
|
||||
HKLM,%CurrentVersionNT%\Perflib,Last Counter,0x10003,1846
|
||||
HKLM,%CurrentVersionNT%\Perflib,Last Help,0x10003,1847
|
||||
HKLM,%CurrentVersionNT%\Perflib\009,Counter,0x10002,1,1847,1846,End Marker
|
||||
+HKLM,%CurrentVersionNT%\Perflib\009,Counters,0x10002,1,1847,1846,End Marker
|
||||
HKLM,%CurrentVersionNT%\Perflib\009,Help,0x10002,1847,End Marker
|
||||
HKLM,%CurrentVersionNT%\Ports,,16
|
||||
HKLM,%CurrentVersionNT%\Print,,16
|
||||
--
|
||||
2.12.2
|
||||
|
@@ -1,63 +0,0 @@
|
||||
From 5a0796af64d474437f7c26620efe6560f8961b55 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 29 May 2017 01:59:36 +0200
|
||||
Subject: advapi32/tests: Add test for perflib registry key.
|
||||
|
||||
---
|
||||
dlls/advapi32/tests/registry.c | 33 +++++++++++++++++++++++++++++++++
|
||||
1 file changed, 33 insertions(+)
|
||||
|
||||
diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c
|
||||
index ddde9059222..f6b7736c83c 100644
|
||||
--- a/dlls/advapi32/tests/registry.c
|
||||
+++ b/dlls/advapi32/tests/registry.c
|
||||
@@ -3293,6 +3293,38 @@ static void test_classesroot_mask(void)
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
|
||||
+static void test_perflib_key(void)
|
||||
+{
|
||||
+ DWORD size;
|
||||
+ LONG ret;
|
||||
+ HKEY key;
|
||||
+
|
||||
+ ret = RegOpenKeyA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Perflib\\009", &key);
|
||||
+ ok(ret == ERROR_SUCCESS, "RegOpenKeyA failed with error %u\n", ret);
|
||||
+
|
||||
+ ret = RegQueryValueExA(key, "Counter", NULL, NULL, NULL, &size);
|
||||
+ if (ret != ERROR_SUCCESS)
|
||||
+ {
|
||||
+ skip("Perflib\\009\\Counter does not exist, skipping perflib test\n");
|
||||
+ goto done;
|
||||
+ }
|
||||
+ ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
|
||||
+
|
||||
+ /* Windows only compares the first few characters of the value name.
|
||||
+ * On Windows XP / 2003, it is sufficient to use "Cou", newer versions
|
||||
+ * require a longer substring. */
|
||||
+
|
||||
+ ret = RegQueryValueExA(key, "Counters", NULL, NULL, NULL, &size);
|
||||
+ ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
|
||||
+ ret = RegQueryValueExA(key, "Counter2", NULL, NULL, NULL, &size);
|
||||
+ todo_wine ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
|
||||
+ ret = RegQueryValueExA(key, "CounterWine", NULL, NULL, NULL, &size);
|
||||
+ todo_wine ok(ret == ERROR_SUCCESS, "RegQueryValueExA failed with error %u\n", ret);
|
||||
+
|
||||
+done:
|
||||
+ RegCloseKey(key);
|
||||
+}
|
||||
+
|
||||
static void test_deleted_key(void)
|
||||
{
|
||||
HKEY hkey, hkey2;
|
||||
@@ -3741,6 +3773,7 @@ START_TEST(registry)
|
||||
test_classesroot();
|
||||
test_classesroot_enum();
|
||||
test_classesroot_mask();
|
||||
+ test_perflib_key();
|
||||
test_reg_save_key();
|
||||
test_reg_load_key();
|
||||
test_reg_unload_key();
|
||||
--
|
||||
2.12.2
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user