diff --git a/debian/changelog b/debian/changelog index bf71cad..9293125 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,7 @@ +wine-staging (1.7.36-1) UNRELEASED; urgency=low + * Update patchset for RtlUnwindEx on x86_64 and fix a second bug. + -- Sebastian Lackner Sun, 15 Feb 2015 22:24:13 +0100 + wine-staging (1.7.36) unstable; urgency=low * Fix an incompatibility of patchinstall.sh with non-bash shells under specific situations. * Improve dinput-Events patch to be compatible with applications which do not explicitly poll for input. diff --git a/patches/ntdll-RtlUnwindEx/0001-ntdll-Fix-check-for-end_frame-in-RtlUnwindEx-on-x86_.patch b/patches/ntdll-RtlUnwindEx/0001-ntdll-Fix-check-for-end_frame-in-RtlUnwindEx-on-x86_.patch index 455a7fc..c5e8903 100644 --- a/patches/ntdll-RtlUnwindEx/0001-ntdll-Fix-check-for-end_frame-in-RtlUnwindEx-on-x86_.patch +++ b/patches/ntdll-RtlUnwindEx/0001-ntdll-Fix-check-for-end_frame-in-RtlUnwindEx-on-x86_.patch @@ -1,18 +1,32 @@ -From 7dd7631b611976b237acc63386b26866e5b4b253 Mon Sep 17 00:00:00 2001 +From 3c89d2a189c2cc869c7ce81293ab752e3fa57708 Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 25 Jan 2015 15:46:05 +0100 -Subject: ntdll: Fix check for end_frame in RtlUnwindEx on x86_64. +Subject: ntdll: Fix check for end_frame in RtlUnwindEx on x86_64. (rev 2) +Changes in v2: +* Calling wine internal handlers should not mess up the EstablisherFrame. --- - dlls/ntdll/signal_x86_64.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + dlls/ntdll/signal_x86_64.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c -index 05581c2..e739cdb 100644 +index 05581c2..7072569 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c -@@ -3178,7 +3178,7 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec - dispatch.EstablisherFrame = new_context.Rsp; +@@ -3167,6 +3167,7 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec + } + else /* hack: call builtin handlers registered in the tib list */ + { ++ DWORD64 backup_frame = dispatch.EstablisherFrame; + while ((ULONG64)teb_frame < new_context.Rsp && (ULONG64)teb_frame < (ULONG64)end_frame) + { + TRACE( "found builtin frame %p handler %p\n", teb_frame, teb_frame->Handler ); +@@ -3175,10 +3176,10 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec + teb_frame = __wine_pop_frame( teb_frame ); + } + if ((ULONG64)teb_frame == (ULONG64)end_frame && (ULONG64)end_frame < new_context.Rsp) break; +- dispatch.EstablisherFrame = new_context.Rsp; ++ dispatch.EstablisherFrame = backup_frame; } - if (context->Rsp == (ULONG64)end_frame) break; @@ -21,5 +35,5 @@ index 05581c2..e739cdb 100644 } -- -2.2.1 +2.2.2 diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index b1ac228..9f8a0fa 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -2228,7 +2228,7 @@ fi if test "$enable_ntdll_RtlUnwindEx" -eq 1; then patch_apply ntdll-RtlUnwindEx/0001-ntdll-Fix-check-for-end_frame-in-RtlUnwindEx-on-x86_.patch ( - echo '+ { "Sebastian Lackner", "ntdll: Fix check for end_frame in RtlUnwindEx on x86_64.", 1 },'; + echo '+ { "Sebastian Lackner", "ntdll: Fix check for end_frame in RtlUnwindEx on x86_64.", 2 },'; ) >> "$patchlist" fi