From e08596a7703c656149fe235a2a4fbc7f748094bc Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Wed, 6 Aug 2014 00:19:57 +0200 Subject: [PATCH] Added patch to set ldr.EntryPoint for main executable (fixes wine bug 33034). --- README.md | 3 +- debian/changelog | 3 +- patches/Makefile | 19 ++++++++++ .../ntdll-Pipe_SpecialCharacters/definition | 2 +- ...t-ldr.EntryPoint-for-main-executable.patch | 38 +++++++++++++++++++ patches/ntdll-loader_EntryPoint/definition | 4 ++ 6 files changed, 66 insertions(+), 3 deletions(-) create mode 100644 patches/ntdll-loader_EntryPoint/0001-ntdll-Set-ldr.EntryPoint-for-main-executable.patch create mode 100644 patches/ntdll-loader_EntryPoint/definition diff --git a/README.md b/README.md index fb94896f..77e44c16 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Wine-Compholio contains fixes for the following Wine bugs: * Add Dynamic DST exceptions for Israel Standard Time ([Wine Bug #36374](http://bugs.winehq.org/show_bug.cgi?id=36374 "Israel timezone handled incorrectly")) * Add implementation of WTSEnumerateProcessesW ([Wine Bug #29903](http://bugs.winehq.org/show_bug.cgi?id=29903 "Some Microsoft debuggers fail to enumerate processes due to wtsapi32.WTSEnumerateProcessesW() being a stub (Microsoft Visual Studio 2005, DbgCLR from .NET 2.0 SDK)")) * Add support for extra large and jumbo icon lists in shell32 ([Wine Bug #24721](http://bugs.winehq.org/show_bug.cgi?id=24721 "Explorer++ crashes when choosing to view large icons or extra large icons")) -* Allow special characters in pipe names. ([Wine Bug #28995](http://bugs.winehq.org/show_bug.cgi?id=28995 "Unable to use named pipes with \">\" character in the name")) +* Allow special characters in pipe names ([Wine Bug #28995](http://bugs.winehq.org/show_bug.cgi?id=28995 "Unable to use named pipes with \">\" character in the name")) * Fix for ConnectNamedPort return value in overlapped mode ([Wine Bug #16550](http://bugs.winehq.org/show_bug.cgi?id=16550 "ConnectNamedPort should never return OK in overlapped mode (affects chromium ui_tests.exe)")) * Fix race conditions and deadlocks in strmbase/quartz ([Wine Bug #31566](http://bugs.winehq.org/show_bug.cgi?id=31566 "Fallout 3: regression causes block at critical section when radio is enabled")) * GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](http://bugs.winehq.org/show_bug.cgi?id=15980 "Rhapsody 2 crashes on startup (GetSecurityInfo returns NULL DACL for process object)")) @@ -30,6 +30,7 @@ Wine-Compholio contains fixes for the following Wine bugs: * Old games cannot locate software-only renderer ([Wine Bug #32581](http://bugs.winehq.org/show_bug.cgi?id=32581 "Invalid dwFlags of reference rasterizer's HAL D3DDEVICEDESC")) * Return correct IMediaSeeking stream positions in quartz ([Wine Bug #23174](http://bugs.winehq.org/show_bug.cgi?id=23174 "Fallout 3: Diologue and Video/sound issues")) * SHCreateSessionKey not implemented ([Wine Bug #35630](http://bugs.winehq.org/show_bug.cgi?id=35630 "SHCreateSessionKey is unimplemented")) +* Set ldr.EntryPoint for main executable ([Wine Bug #33034](http://bugs.winehq.org/show_bug.cgi?id=33034 "Many GFWL (Games For Windows Live) 1.x/2.x/3.x games crash or exit silently on startup (DiRT 2/3, GTA IV Steam)")) * Support for AllocateAndGetTcpExTableFromStack ([Wine Bug #34372](http://bugs.winehq.org/show_bug.cgi?id=34372 "Add missing function AllocateAndGetTcpExTableFromStack() to iphlpapi.dll")) * Support for GetSystemTimes ([Wine Bug #19813](http://bugs.winehq.org/show_bug.cgi?id=19813 "Voddler needs GetSystemTimes to run")) * Support for Junction Points ([Wine Bug #12401](http://bugs.winehq.org/show_bug.cgi?id=12401 "Support junction points, i.e. DeviceIoCtl(FSCTL_SET_REPARSE_POINT/FSCTL_GET_REPARSE_POINT)")) diff --git a/debian/changelog b/debian/changelog index f34baac7..53eacc2d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -14,7 +14,8 @@ wine-compholio (1.7.24) UNRELEASED; urgency=low * Added patch to return the appropriate connection time with SO_CONNECT_TIME. * Added patch to support extra large and jumbo icons. * Added patch to allow setting tablet / media center status via registry. - * Added patch to use manual redirection for RunDLL_CallEntry16 + * Added patch to use manual redirection for RunDLL_CallEntry16. + * Added patch to set ldr.EntryPoint for main executable. * Removed patch to create directories (accepted upstream). -- Erich E. Hoover Wed, 30 Jul 2014 17:40:14 -0600 diff --git a/patches/Makefile b/patches/Makefile index 0063d229..2b433385 100644 --- a/patches/Makefile +++ b/patches/Makefile @@ -20,6 +20,7 @@ PATCHLIST := Miscellaneous.ok \ ntdll-FD_Cache.ok \ ntdll-Junction_Points.ok \ ntdll-Pipe_SpecialCharacters.ok \ + ntdll-loader_EntryPoint.ok \ quartz-MediaSeeking_Positions.ok \ server-ACL_Compat.ok \ server-Address_Change_Notification.ok \ @@ -349,6 +350,24 @@ ntdll-Pipe_SpecialCharacters.ok: echo '+ { "ntdll-Pipe_SpecialCharacters", "Michael Müller", "Allow special characters in pipe names." },'; \ ) > ntdll-Pipe_SpecialCharacters.ok +# Patchset ntdll-loader_EntryPoint +# | +# | Included patches: +# | * Set ldr.EntryPoint for main executable. [by Sebastian Lackner] +# | +# | This patchset fixes the following Wine bugs: +# | * [#33034] Many GFWL (Games For Windows Live) 1.x/2.x/3.x games crash or exit silently on startup (DiRT 2/3, GTA IV Steam) +# | +# | Modified files: +# | * dlls/ntdll/loader.c +# | +.INTERMEDIATE: ntdll-loader_EntryPoint.ok +ntdll-loader_EntryPoint.ok: + $(PATCH) < ntdll-loader_EntryPoint/0001-ntdll-Set-ldr.EntryPoint-for-main-executable.patch + @( \ + echo '+ { "ntdll-loader_EntryPoint", "Sebastian Lackner", "Set ldr.EntryPoint for main executable." },'; \ + ) > ntdll-loader_EntryPoint.ok + # Patchset quartz-MediaSeeking_Positions # | # | Included patches: diff --git a/patches/ntdll-Pipe_SpecialCharacters/definition b/patches/ntdll-Pipe_SpecialCharacters/definition index 8c3d846b..5915577a 100644 --- a/patches/ntdll-Pipe_SpecialCharacters/definition +++ b/patches/ntdll-Pipe_SpecialCharacters/definition @@ -1,4 +1,4 @@ Author: Michael Müller Subject: Allow special characters in pipe names. Revision: 1 -Fixes: [28995] Allow special characters in pipe names. +Fixes: [28995] Allow special characters in pipe names diff --git a/patches/ntdll-loader_EntryPoint/0001-ntdll-Set-ldr.EntryPoint-for-main-executable.patch b/patches/ntdll-loader_EntryPoint/0001-ntdll-Set-ldr.EntryPoint-for-main-executable.patch new file mode 100644 index 00000000..428e5880 --- /dev/null +++ b/patches/ntdll-loader_EntryPoint/0001-ntdll-Set-ldr.EntryPoint-for-main-executable.patch @@ -0,0 +1,38 @@ +From 63a62bb5903e62f161b7e5972662220c606d702f Mon Sep 17 00:00:00 2001 +From: Sebastian Lackner +Date: Sat, 2 Aug 2014 18:27:20 +0200 +Subject: ntdll: Set ldr.EntryPoint for main executable. + +--- + dlls/ntdll/loader.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/dlls/ntdll/loader.c b/dlls/ntdll/loader.c +index 79aa341..c869d8f 100644 +--- a/dlls/ntdll/loader.c ++++ b/dlls/ntdll/loader.c +@@ -921,9 +921,10 @@ static WINE_MODREF *alloc_module( HMODULE hModule, LPCWSTR filename ) + else p = wm->ldr.FullDllName.Buffer; + RtlInitUnicodeString( &wm->ldr.BaseDllName, p ); + +- if ((nt->FileHeader.Characteristics & IMAGE_FILE_DLL) && !is_dll_native_subsystem( hModule, nt, p )) ++ if (!(nt->FileHeader.Characteristics & IMAGE_FILE_DLL) || !is_dll_native_subsystem( hModule, nt, p )) + { +- wm->ldr.Flags |= LDR_IMAGE_IS_DLL; ++ if (nt->FileHeader.Characteristics & IMAGE_FILE_DLL) ++ wm->ldr.Flags |= LDR_IMAGE_IS_DLL; + if (nt->OptionalHeader.AddressOfEntryPoint) + wm->ldr.EntryPoint = (char *)hModule + nt->OptionalHeader.AddressOfEntryPoint; + } +@@ -1049,7 +1050,7 @@ static NTSTATUS MODULE_InitDLL( WINE_MODREF *wm, UINT reason, LPVOID lpReserved + + if (wm->ldr.Flags & LDR_DONT_RESOLVE_REFS) return STATUS_SUCCESS; + if (wm->ldr.TlsIndex != -1) call_tls_callbacks( wm->ldr.BaseAddress, reason ); +- if (!entry) return STATUS_SUCCESS; ++ if (!entry || !(wm->ldr.Flags & LDR_IMAGE_IS_DLL)) return STATUS_SUCCESS; + + if (TRACE_ON(relay)) + { +-- +1.7.9.5 + diff --git a/patches/ntdll-loader_EntryPoint/definition b/patches/ntdll-loader_EntryPoint/definition new file mode 100644 index 00000000..5fffd85d --- /dev/null +++ b/patches/ntdll-loader_EntryPoint/definition @@ -0,0 +1,4 @@ +Author: Sebastian Lackner +Subject: Set ldr.EntryPoint for main executable. +Revision: 1 +Fixes: [33034] Set ldr.EntryPoint for main executable