Rebase against f5bd0be6a44c1c7d69afb8b8eb6311923e7762a1.

This commit is contained in:
Zebediah Figura 2021-06-12 01:46:26 -05:00
parent 08912e4896
commit e3cca687be
11 changed files with 32 additions and 384 deletions

View File

@ -1,4 +1,4 @@
From 39109644ddeb39a7a42c2f10657b35c515dfee46 Mon Sep 17 00:00:00 2001
From 52c6ab47d908e75409bb3b7f2faac66da16ea23a Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 17:17:31 -0500
Subject: [PATCH] ntdll, server: Implement alertable waits.
@ -164,22 +164,22 @@ index d1a282c65e9..2a7c3865617 100644
/* We need to let the server know when we are doing a message wait, and when we
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index a5bade02b8a..76eef4220c5 100644
index f6934ae9e91..c3ad33e282b 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -53,6 +53,7 @@ struct ntdll_thread_data
@@ -61,6 +61,7 @@ struct ntdll_thread_data
void *cpu_data[16]; /* reserved for CPU-specific data */
struct debug_info *debug_info; /* info for debugstr functions */
void *start_stack; /* stack for thread startup */
void *kernel_stack; /* stack for thread startup and kernel syscalls */
+ int esync_apc_fd; /* fd to wait on for user APCs */
int request_fd; /* fd for sending server requests */
int reply_fd; /* fd for receiving server replies */
int wait_fd[2]; /* fd for sleeping server requests */
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index f3e6b612b93..04c31a473af 100644
index 422be6d8a73..1ff97ed5129 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -2876,6 +2876,7 @@ static TEB *init_teb( void *ptr, PEB *peb )
@@ -2888,6 +2888,7 @@ static TEB *init_teb( void *ptr, PEB *peb, BOOL is_wow )
teb->StaticUnicodeString.Buffer = teb->StaticUnicodeBuffer;
teb->StaticUnicodeString.MaximumLength = sizeof(teb->StaticUnicodeBuffer);
thread_data = (struct ntdll_thread_data *)&teb->GdiTebBatch;
@ -244,10 +244,10 @@ index aeb58c5469c..cea025d9308 100644
void esync_clear( int fd );
diff --git a/server/protocol.def b/server/protocol.def
index 00c89cce793..bb45c509685 100644
index 14558f2d842..fad731bdc74 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3738,3 +3738,7 @@ enum esync_type
@@ -3794,3 +3794,7 @@ enum esync_type
@REQ(esync_msgwait)
int in_msgwait; /* are we in a message wait? */
@END
@ -256,10 +256,10 @@ index 00c89cce793..bb45c509685 100644
+@REQ(get_esync_apc_fd)
+@END
diff --git a/server/thread.c b/server/thread.c
index 409a28129b3..e4781e57c8c 100644
index 10da1e3d4c7..258c3f28815 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -227,6 +227,7 @@ static inline void init_thread_structure( struct thread *thread )
@@ -228,6 +228,7 @@ static inline void init_thread_structure( struct thread *thread )
thread->teb = 0;
thread->entry_point = 0;
thread->esync_fd = -1;
@ -267,7 +267,7 @@ index 409a28129b3..e4781e57c8c 100644
thread->system_regs = 0;
thread->queue = NULL;
thread->wait = NULL;
@@ -374,7 +375,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
@@ -375,7 +376,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
}
if (do_esync())
@ -278,7 +278,7 @@ index 409a28129b3..e4781e57c8c 100644
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
add_process_thread( thread->process, thread );
@@ -1156,8 +1160,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
@@ -1164,8 +1168,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
grab_object( apc );
list_add_tail( queue, &apc->entry );
if (!list_prev( queue, &apc->entry )) /* first one */
@ -292,7 +292,7 @@ index 409a28129b3..e4781e57c8c 100644
return 1;
}
@@ -1203,6 +1212,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
@@ -1211,6 +1220,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
apc = LIST_ENTRY( ptr, struct thread_apc, entry );
list_remove( ptr );
}
@ -304,7 +304,7 @@ index 409a28129b3..e4781e57c8c 100644
}
diff --git a/server/thread.h b/server/thread.h
index 1eb501cbd52..13e4628d89a 100644
index 8a5a8501d9c..e5145f9eb07 100644
--- a/server/thread.h
+++ b/server/thread.h
@@ -55,6 +55,7 @@ struct thread

View File

@ -1,114 +0,0 @@
From 99640ba7474a35f086d85bdb0b416e1e00d31c2f Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 10 Apr 2015 07:51:16 +0200
Subject: [PATCH] msvcrt: Calculate sinh/cosh/exp/pow with higher precision.
(v2)
Based on a patch by Zheng Chen.
---
dlls/msvcrt/unixlib.c | 63 ++++++++++++++++++++++++++++++++++++++++---
1 file changed, 59 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcrt/unixlib.c b/dlls/msvcrt/unixlib.c
index 6d3a3bd5a79..e0581f713cd 100644
--- a/dlls/msvcrt/unixlib.c
+++ b/dlls/msvcrt/unixlib.c
@@ -42,12 +42,67 @@
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
+#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+
+static inline double precise_cosh( double x )
+{
+ WORD precise_cw = 0x37f, pre_cw;
+ double z;
+ __asm__ __volatile__( "fnstcw %0" : "=m" (pre_cw) );
+ __asm__ __volatile__( "fldcw %0" : : "m" (precise_cw) );
+ z = cosh( x );
+ __asm__ __volatile__( "fldcw %0" : : "m" (pre_cw) );
+ return z;
+}
+
+static inline double precise_exp( double x )
+{
+ WORD precise_cw = 0x37f, pre_cw;
+ double z;
+ __asm__ __volatile__( "fnstcw %0" : "=m" (pre_cw) );
+ __asm__ __volatile__( "fldcw %0" : : "m" (precise_cw) );
+ z = exp( x );
+ __asm__ __volatile__( "fldcw %0" : : "m" (pre_cw) );
+ return z;
+}
+
+static inline double precise_pow( double x, double y )
+{
+ WORD precise_cw = 0x37f, pre_cw;
+ double z;
+ __asm__ __volatile__( "fnstcw %0" : "=m" (pre_cw) );
+ __asm__ __volatile__( "fldcw %0" : : "m" (precise_cw) );
+ z = pow( x, y );
+ __asm__ __volatile__( "fldcw %0" : : "m" (pre_cw) );
+ return z;
+}
+
+static inline double precise_sinh( double x )
+{
+ WORD precise_cw = 0x37f, pre_cw;
+ double z;
+ __asm__ __volatile__( "fnstcw %0" : "=m" (pre_cw) );
+ __asm__ __volatile__( "fldcw %0" : : "m" (precise_cw) );
+ z = sinh( x );
+ __asm__ __volatile__( "fldcw %0" : : "m" (pre_cw) );
+ return z;
+}
+
+#else
+
+#define precise_cosh cosh
+#define precise_exp exp
+#define precise_pow pow
+#define precise_sinh sinh
+
+#endif
+
/*********************************************************************
* cosh
*/
static double CDECL unix_cosh( double x )
{
- return cosh( x );
+ return precise_cosh( x );
}
/*********************************************************************
@@ -63,7 +118,7 @@ static float CDECL unix_coshf( float x )
*/
static double CDECL unix_exp( double x )
{
- return exp( x );
+ return precise_exp( x );
}
/*********************************************************************
@@ -297,7 +352,7 @@ static float CDECL unix_log2f(float x)
*/
static double CDECL unix_pow( double x, double y )
{
- return pow( x, y );
+ return precise_pow( x, y );
}
/*********************************************************************
@@ -313,7 +368,7 @@ static float CDECL unix_powf( float x, float y )
*/
static double CDECL unix_sinh( double x )
{
- return sinh( x );
+ return precise_sinh( x );
}
/*********************************************************************
--
2.30.2

View File

@ -1,3 +0,0 @@
Fixes: [37149] Calculate msvcrt exponential math operations with higher precision
# Needs retesting when exp() and pow() are moved as well.
Disabled: true

View File

@ -1,56 +0,0 @@
From 1d56beba1aeb7acb135db5333c2f61f40988b23f Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 21 Aug 2015 06:39:47 +0800
Subject: [PATCH] ntdll: Do not allow to deallocate thread stack for current
thread.
---
dlls/ntdll/unix/unix_private.h | 1 +
dlls/ntdll/unix/virtual.c | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index 0714d9ff898..5ea9664edcf 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -58,6 +58,7 @@ struct ntdll_thread_data
int reply_fd; /* fd for receiving server replies */
int wait_fd[2]; /* fd for sleeping server requests */
pthread_t pthread_id; /* pthread thread id */
+ void *pthread_stack; /* pthread stack */
struct list entry; /* entry in TEB list */
PRTL_THREAD_START_ROUTINE start; /* thread entry point */
void *param; /* thread entry point parameter */
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index 9b1ca761e9b..cb5db2891c6 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -2804,6 +2804,8 @@ NTSTATUS virtual_alloc_thread_stack( INITIAL_TEB *stack, SIZE_T reserve_size, SI
stack->DeallocationStack = view->base;
stack->StackBase = (char *)view->base + view->size;
stack->StackLimit = (char *)view->base + 2 * page_size;
+ ((struct ntdll_thread_data *)&NtCurrentTeb()->GdiTebBatch)->pthread_stack = view->base;
+
done:
server_leave_uninterrupted_section( &virtual_mutex, &sigset );
return status;
@@ -3594,6 +3596,16 @@ NTSTATUS WINAPI NtFreeVirtualMemory( HANDLE process, PVOID *addr_ptr, SIZE_T *si
/* Free the pages */
if (size || (base != view->base)) status = STATUS_INVALID_PARAMETER;
+ else if (view->base == (void *)((ULONG_PTR)ntdll_get_thread_data()->pthread_stack & ~1))
+ {
+ ULONG_PTR stack = (ULONG_PTR)ntdll_get_thread_data()->pthread_stack;
+ if (stack & 1) status = STATUS_INVALID_PARAMETER;
+ else
+ {
+ WARN( "Application tried to deallocate current pthread stack %p, deferring\n", view->base);
+ ntdll_get_thread_data()->pthread_stack = (void *)(stack | 1);
+ }
+ }
else
{
delete_view( view );
--
2.27.0

View File

@ -1 +0,0 @@
Fixes: Do not allow to deallocate thread stack for current thread

View File

@ -1,4 +1,4 @@
From 8d1cfce5ceee03b91f9843e7b5123fed823687e7 Mon Sep 17 00:00:00 2001
From 7744cca9f58990ee47b74f4fa967eb99f3dee862 Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Tue, 14 Jul 2020 15:00:34 +0300
Subject: [PATCH] ntdll: Support x86_64 syscall emulation.
@ -10,10 +10,10 @@ Subject: [PATCH] ntdll: Support x86_64 syscall emulation.
3 files changed, 120 insertions(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index caff5d1fe52..d30b437320a 100644
index 8c74532dabc..36d2295c1ca 100644
--- a/configure.ac
+++ b/configure.ac
@@ -467,6 +467,7 @@ AC_CHECK_HEADERS(\
@@ -477,6 +477,7 @@ AC_CHECK_HEADERS(\
linux/joystick.h \
linux/major.h \
linux/param.h \
@ -22,7 +22,7 @@ index caff5d1fe52..d30b437320a 100644
linux/types.h \
linux/ucdrom.h \
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
index 8d3353e959d..a8a142c2ab1 100644
index 4845d3dd5f4..9a80cafeadd 100644
--- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -28,6 +28,7 @@
@ -47,7 +47,7 @@ index 8d3353e959d..a8a142c2ab1 100644
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
#include "ntstatus.h"
@@ -2292,6 +2300,114 @@ static inline DWORD is_privileged_instr( CONTEXT *context )
@@ -2075,6 +2083,114 @@ static inline DWORD is_privileged_instr( CONTEXT *context )
return 0;
}
@ -162,7 +162,7 @@ index 8d3353e959d..a8a142c2ab1 100644
/***********************************************************************
* handle_interrupt
@@ -2751,6 +2867,7 @@ void signal_init_process(void)
@@ -2560,6 +2676,7 @@ void signal_init_process(void)
if (sigaction( SIGSEGV, &sig_act, NULL ) == -1) goto error;
if (sigaction( SIGILL, &sig_act, NULL ) == -1) goto error;
if (sigaction( SIGBUS, &sig_act, NULL ) == -1) goto error;
@ -171,18 +171,18 @@ index 8d3353e959d..a8a142c2ab1 100644
error:
diff --git a/tools/winebuild/import.c b/tools/winebuild/import.c
index 0fddbaf6134..901423cc028 100644
index f92c1b89c9c..13e1a3bb929 100644
--- a/tools/winebuild/import.c
+++ b/tools/winebuild/import.c
@@ -1510,6 +1510,7 @@ static void output_syscall_dispatcher( int count, const char *variant )
/* Legends of Runeterra hooks the first system call return instruction, and
* depends on us returning to it. Adjust the return address accordingly. */
output( "\tsubq $0xb,0x8(%%rbp)\n" );
@@ -1551,6 +1551,7 @@ static void output_syscall_dispatcher(void)
output( "\tjmp 5b\n" );
break;
case CPU_x86_64:
+ output( "\tsubq $0xf000,%%rax\n" );
output( "\tmovq 0x8(%%rbp),%%rbx\n" );
output( "\tmovq %%rbx,-0x28(%%rbp)\n" );
output( "\tleaq 0x10(%%rbp),%%rbx\n" );
@@ -1779,7 +1780,7 @@ void output_syscalls( DLLSPEC *spec )
output( "\tmovq %%gs:0x30,%%rcx\n" );
output( "\tmovq 0x328(%%rcx),%%rcx\n" ); /* amd64_thread_data()->syscall_frame */
output( "\tmovq %%rax,0x00(%%rcx)\n" );
@@ -1940,7 +1941,7 @@ void output_syscalls( DLLSPEC *spec )
* validate that instruction, we can just put a jmp there instead. */
output( "\t.byte 0x4c,0x8b,0xd1\n" ); /* movq %rcx,%r10 */
output( "\t.byte 0xb8\n" ); /* movl $i,%eax */
@ -192,5 +192,5 @@ index 0fddbaf6134..901423cc028 100644
output( "\t.byte 0x75,0x03\n" ); /* jne 1f */
output( "\t.byte 0x0f,0x05\n" ); /* syscall */
--
2.20.1
2.30.2

View File

@ -1,81 +0,0 @@
From ef57b2c7cadda78730cb57e117507c7a8a0ff6cb Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 13 Apr 2016 03:11:03 +0200
Subject: ntdll: Use a separate stack when starting new threads.
---
dlls/ntdll/thread.c | 33 +++++++++++++++++++++++----------
1 file changed, 23 insertions(+), 10 deletions(-)
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 07dc285..db27447 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -25,6 +25,7 @@
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
+#include <limits.h>
#include <sys/types.h>
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
@@ -452,15 +453,8 @@ void exit_thread( int status )
static void start_thread( struct startup_info *info )
{
TEB *teb = info->teb;
- struct ntdll_thread_data *thread_data = (struct ntdll_thread_data *)teb->SpareBytes1;
PRTL_THREAD_START_ROUTINE func = info->entry_point;
void *arg = info->entry_arg;
- struct debug_info debug_info;
-
- debug_info.str_pos = debug_info.strings;
- debug_info.out_pos = debug_info.output;
- thread_data->debug_info = &debug_info;
- thread_data->pthread_id = pthread_self();
signal_init_thread( teb );
server_init_thread( func );
@@ -476,6 +470,26 @@ static void start_thread( struct startup_info *info )
/***********************************************************************
+ * call_start_thread
+ *
+ * Setup debug_info struct and call start_thread on target stack.
+ */
+static void call_start_thread( struct startup_info *info )
+{
+ TEB *teb = info->teb;
+ struct ntdll_thread_data *thread_data = (struct ntdll_thread_data *)teb->SpareBytes1;
+ struct debug_info debug_info;
+
+ debug_info.str_pos = debug_info.strings;
+ debug_info.out_pos = debug_info.output;
+ thread_data->debug_info = &debug_info;
+ thread_data->pthread_id = pthread_self();
+
+ wine_switch_to_stack( (void (*)(void *))start_thread, info, teb->Tib.StackBase );
+}
+
+
+/***********************************************************************
* RtlCreateUserThread (NTDLL.@)
*/
NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *descr,
@@ -581,11 +595,10 @@ NTSTATUS WINAPI RtlCreateUserThread( HANDLE process, const SECURITY_DESCRIPTOR *
if ((status = virtual_alloc_thread_stack( teb, stack_reserve, stack_commit ))) goto error;
pthread_attr_init( &attr );
- pthread_attr_setstack( &attr, teb->DeallocationStack,
- (char *)teb->Tib.StackBase - (char *)teb->DeallocationStack );
+ pthread_attr_setstacksize( &attr, PTHREAD_STACK_MIN );
pthread_attr_setscope( &attr, PTHREAD_SCOPE_SYSTEM ); /* force creating a kernel thread */
interlocked_xchg_add( &nb_threads, 1 );
- if (pthread_create( &pthread_id, &attr, (void * (*)(void *))start_thread, info ))
+ if (pthread_create( &pthread_id, &attr, (void * (*)(void *))call_start_thread, info ))
{
interlocked_xchg_add( &nb_threads, -1 );
pthread_attr_destroy( &attr );
--
2.7.1

View File

@ -1,81 +0,0 @@
From 15ef836edec8fa90f4d02d15d6b071439a65b855 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Wed, 13 Apr 2016 06:49:03 +0200
Subject: ntdll: Ignore invalid exit_frame when exiting thread.
---
dlls/ntdll/signal_i386.c | 16 ++++++++++++++++
dlls/ntdll/signal_x86_64.c | 16 ++++++++++++++++
2 files changed, 32 insertions(+)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 9834c9f..8c09758 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -2832,6 +2832,14 @@ void call_thread_func( LPTHREAD_START_ROUTINE entry, void *arg, void *frame )
void WINAPI RtlExitUserThread( ULONG status )
{
if (!ntdll_get_thread_data()->exit_frame) exit_thread( status );
+ if (ntdll_get_thread_data()->exit_frame <= NtCurrentTeb()->DeallocationStack ||
+ ntdll_get_thread_data()->exit_frame > NtCurrentTeb()->Tib.StackBase)
+ {
+ WARN( "exit frame outside of stack limits in thread %04x frame %p stack %p-%p\n",
+ GetCurrentThreadId(), ntdll_get_thread_data()->exit_frame,
+ NtCurrentTeb()->Tib.StackLimit, NtCurrentTeb()->Tib.StackBase );
+ exit_thread( status );
+ }
call_thread_exit_func( status, exit_thread, ntdll_get_thread_data()->exit_frame );
}
@@ -2841,6 +2849,14 @@ void WINAPI RtlExitUserThread( ULONG status )
void abort_thread( int status )
{
if (!ntdll_get_thread_data()->exit_frame) terminate_thread( status );
+ if (ntdll_get_thread_data()->exit_frame <= NtCurrentTeb()->DeallocationStack ||
+ ntdll_get_thread_data()->exit_frame > NtCurrentTeb()->Tib.StackBase)
+ {
+ WARN( "exit frame outside of stack limits in thread %04x frame %p stack %p-%p\n",
+ GetCurrentThreadId(), ntdll_get_thread_data()->exit_frame,
+ NtCurrentTeb()->Tib.StackLimit, NtCurrentTeb()->Tib.StackBase );
+ terminate_thread( status );
+ }
call_thread_exit_func( status, terminate_thread, ntdll_get_thread_data()->exit_frame );
}
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index 93475d54..ffbb0f0 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -3831,6 +3831,14 @@ __ASM_GLOBAL_FUNC( call_thread_exit_func,
void WINAPI RtlExitUserThread( ULONG status )
{
if (!ntdll_get_thread_data()->exit_frame) exit_thread( status );
+ if (ntdll_get_thread_data()->exit_frame <= NtCurrentTeb()->DeallocationStack ||
+ ntdll_get_thread_data()->exit_frame > NtCurrentTeb()->Tib.StackBase)
+ {
+ WARN( "exit frame outside of stack limits in thread %04x frame %p stack %p-%p\n",
+ GetCurrentThreadId(), ntdll_get_thread_data()->exit_frame,
+ NtCurrentTeb()->Tib.StackLimit, NtCurrentTeb()->Tib.StackBase );
+ exit_thread( status );
+ }
call_thread_exit_func( status, exit_thread, ntdll_get_thread_data()->exit_frame );
}
@@ -3840,6 +3848,14 @@ void WINAPI RtlExitUserThread( ULONG status )
void abort_thread( int status )
{
if (!ntdll_get_thread_data()->exit_frame) terminate_thread( status );
+ if (ntdll_get_thread_data()->exit_frame <= NtCurrentTeb()->DeallocationStack ||
+ ntdll_get_thread_data()->exit_frame > NtCurrentTeb()->Tib.StackBase)
+ {
+ WARN( "exit frame outside of stack limits in thread %04x frame %p stack %p-%p\n",
+ GetCurrentThreadId(), ntdll_get_thread_data()->exit_frame,
+ NtCurrentTeb()->Tib.StackLimit, NtCurrentTeb()->Tib.StackBase );
+ terminate_thread( status );
+ }
call_thread_exit_func( status, terminate_thread, ntdll_get_thread_data()->exit_frame );
}
--
2.7.1

View File

@ -1,3 +0,0 @@
Fixes: Use a separate stack when starting new threads
Fixes: Ignore invalid exit_frame when exiting thread
Disabled: true

View File

@ -51,7 +51,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "2a505efb1ca14f33503657eb070de6edd484b4f3"
echo "f5bd0be6a44c1c7d69afb8b8eb6311923e7762a1"
}
# Show version information
@ -150,7 +150,6 @@ patch_enable_all ()
enable_ntdll_Builtin_Prot="$1"
enable_ntdll_CriticalSection="$1"
enable_ntdll_DOS_Attributes="$1"
enable_ntdll_Dealloc_Thread_Stack="$1"
enable_ntdll_Exception="$1"
enable_ntdll_FileDispositionInformation="$1"
enable_ntdll_FileFsFullSizeInformation="$1"
@ -497,9 +496,6 @@ patch_enable ()
ntdll-DOS_Attributes)
enable_ntdll_DOS_Attributes="$2"
;;
ntdll-Dealloc_Thread_Stack)
enable_ntdll_Dealloc_Thread_Stack="$2"
;;
ntdll-Exception)
enable_ntdll_Exception="$2"
;;
@ -2628,15 +2624,6 @@ if test "$enable_ntdll_CriticalSection" -eq 1; then
patch_apply ntdll-CriticalSection/0004-ntdll-Use-fast-CS-functions-for-threadpool-locking.patch
fi
# Patchset ntdll-Dealloc_Thread_Stack
# |
# | Modified files:
# | * dlls/ntdll/unix/unix_private.h, dlls/ntdll/unix/virtual.c
# |
if test "$enable_ntdll_Dealloc_Thread_Stack" -eq 1; then
patch_apply ntdll-Dealloc_Thread_Stack/0001-ntdll-Do-not-allow-to-allocate-thread-stack-for-curr.patch
fi
# Patchset ntdll-Exception
# |
# | This patchset fixes the following Wine bugs:

View File

@ -1 +1 @@
2a505efb1ca14f33503657eb070de6edd484b4f3
f5bd0be6a44c1c7d69afb8b8eb6311923e7762a1