Commit cd0c5988 authored by Alexandre Julliard's avatar Alexandre Julliard

ntdll: Consolidate some of the init routines into the init_threading() entry point.

parent c73f4a81
...@@ -4376,14 +4376,8 @@ void __wine_process_init(void) ...@@ -4376,14 +4376,8 @@ void __wine_process_init(void)
if (!unix_funcs) load_ntdll_so( ntdll_module, &__wine_spec_nt_header ); if (!unix_funcs) load_ntdll_so( ntdll_module, &__wine_spec_nt_header );
teb = thread_init(); teb = thread_init( &info_size, &suspend );
peb = teb->Peb; peb = teb->Peb;
/* setup the server connection */
server_init_process();
info_size = unix_funcs->server_init_thread( peb, &suspend, &server_cpus,
&is_wow64, &server_start_time );
peb->ProcessHeap = RtlCreateHeap( HEAP_GROWABLE, NULL, 0, 0, NULL, NULL ); peb->ProcessHeap = RtlCreateHeap( HEAP_GROWABLE, NULL, 0, 0, NULL, NULL );
peb->LoaderLock = &loader_section; peb->LoaderLock = &loader_section;
......
...@@ -80,7 +80,7 @@ extern SIZE_T signal_stack_mask DECLSPEC_HIDDEN; ...@@ -80,7 +80,7 @@ extern SIZE_T signal_stack_mask DECLSPEC_HIDDEN;
extern void signal_init_process(void) DECLSPEC_HIDDEN; extern void signal_init_process(void) DECLSPEC_HIDDEN;
extern void version_init(void) DECLSPEC_HIDDEN; extern void version_init(void) DECLSPEC_HIDDEN;
extern void debug_init(void) DECLSPEC_HIDDEN; extern void debug_init(void) DECLSPEC_HIDDEN;
extern TEB *thread_init(void) DECLSPEC_HIDDEN; extern TEB *thread_init( SIZE_T *info_size, BOOL *suspend ) DECLSPEC_HIDDEN;
extern void actctx_init(void) DECLSPEC_HIDDEN; extern void actctx_init(void) DECLSPEC_HIDDEN;
extern void virtual_init(void) DECLSPEC_HIDDEN; extern void virtual_init(void) DECLSPEC_HIDDEN;
extern void fill_cpu_info(void) DECLSPEC_HIDDEN; extern void fill_cpu_info(void) DECLSPEC_HIDDEN;
......
...@@ -256,7 +256,6 @@ void server_init_process(void) ...@@ -256,7 +256,6 @@ void server_init_process(void)
sigaddset( &server_block_set, SIGUSR1 ); sigaddset( &server_block_set, SIGUSR1 );
sigaddset( &server_block_set, SIGUSR2 ); sigaddset( &server_block_set, SIGUSR2 );
sigaddset( &server_block_set, SIGCHLD ); sigaddset( &server_block_set, SIGCHLD );
unix_funcs->server_init_process();
} }
......
...@@ -208,13 +208,12 @@ void map_user_shared_data(void) ...@@ -208,13 +208,12 @@ void map_user_shared_data(void)
* *
* NOTES: The first allocated TEB on NT is at 0x7ffde000. * NOTES: The first allocated TEB on NT is at 0x7ffde000.
*/ */
TEB *thread_init(void) TEB *thread_init( SIZE_T *info_size, BOOL *suspend )
{ {
TEB *teb; TEB *teb;
void *addr; void *addr;
SIZE_T size; SIZE_T size;
NTSTATUS status; NTSTATUS status;
struct ntdll_thread_data *thread_data;
virtual_init(); virtual_init();
...@@ -233,8 +232,8 @@ TEB *thread_init(void) ...@@ -233,8 +232,8 @@ TEB *thread_init(void)
/* allocate and initialize the PEB and initial TEB */ /* allocate and initialize the PEB and initial TEB */
teb = unix_funcs->virtual_alloc_first_teb(); teb = unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy, info_size, suspend, &server_cpus,
unix_funcs->init_threading( &nb_threads, &__wine_ldt_copy ); &is_wow64, &server_start_time );
peb = teb->Peb; peb = teb->Peb;
peb->FastPebLock = &peb_lock; peb->FastPebLock = &peb_lock;
...@@ -266,15 +265,9 @@ TEB *thread_init(void) ...@@ -266,15 +265,9 @@ TEB *thread_init(void)
*/ */
peb->SessionId = 1; peb->SessionId = 1;
thread_data = (struct ntdll_thread_data *)&teb->GdiTebBatch;
thread_data->request_fd = -1;
thread_data->reply_fd = -1;
thread_data->wait_fd[0] = -1;
thread_data->wait_fd[1] = -1;
unix_funcs->dbg_init();
unix_funcs->get_paths( &build_dir, &data_dir, &config_dir ); unix_funcs->get_paths( &build_dir, &data_dir, &config_dir );
fill_cpu_info(); fill_cpu_info();
server_init_process();
return teb; return teb;
} }
......
...@@ -290,7 +290,7 @@ int __cdecl __wine_dbg_header( enum __wine_debug_class cls, struct __wine_debug_ ...@@ -290,7 +290,7 @@ int __cdecl __wine_dbg_header( enum __wine_debug_class cls, struct __wine_debug_
/*********************************************************************** /***********************************************************************
* dbg_init * dbg_init
*/ */
void CDECL dbg_init(void) void dbg_init(void)
{ {
setbuf( stdout, NULL ); setbuf( stdout, NULL );
setbuf( stderr, NULL ); setbuf( stderr, NULL );
......
...@@ -1016,7 +1016,6 @@ static struct unix_funcs unix_funcs = ...@@ -1016,7 +1016,6 @@ static struct unix_funcs unix_funcs =
virtual_map_section, virtual_map_section,
virtual_get_system_info, virtual_get_system_info,
virtual_create_builtin_view, virtual_create_builtin_view,
virtual_alloc_first_teb,
virtual_alloc_thread_stack, virtual_alloc_thread_stack,
virtual_handle_fault, virtual_handle_fault,
virtual_locked_server_call, virtual_locked_server_call,
...@@ -1049,10 +1048,7 @@ static struct unix_funcs unix_funcs = ...@@ -1049,10 +1048,7 @@ static struct unix_funcs unix_funcs =
server_handle_to_fd, server_handle_to_fd,
server_release_fd, server_release_fd,
server_pipe, server_pipe,
server_init_process,
server_init_process_done, server_init_process_done,
server_init_thread,
dbg_init,
__wine_dbg_get_channel_flags, __wine_dbg_get_channel_flags,
__wine_dbg_strdup, __wine_dbg_strdup,
__wine_dbg_output, __wine_dbg_output,
......
...@@ -1399,7 +1399,7 @@ static int get_unix_tid(void) ...@@ -1399,7 +1399,7 @@ static int get_unix_tid(void)
* *
* Start the server and create the initial socket pair. * Start the server and create the initial socket pair.
*/ */
void CDECL server_init_process(void) void server_init_process(void)
{ {
obj_handle_t version; obj_handle_t version;
const char *env_socket = getenv( "WINESERVERSOCKET" ); const char *env_socket = getenv( "WINESERVERSOCKET" );
...@@ -1474,8 +1474,7 @@ void CDECL server_init_process_done(void) ...@@ -1474,8 +1474,7 @@ void CDECL server_init_process_done(void)
* *
* Send an init thread request. * Send an init thread request.
*/ */
size_t CDECL server_init_thread( void *entry_point, BOOL *suspend, unsigned int *cpus, size_t server_init_thread( void *entry_point, BOOL *suspend )
BOOL *wow64, timeout_t *start_time )
{ {
static const char *cpu_names[] = { "x86", "x86_64", "PowerPC", "ARM", "ARM64" }; static const char *cpu_names[] = { "x86", "x86_64", "PowerPC", "ARM", "ARM64" };
const char *arch = getenv( "WINEARCH" ); const char *arch = getenv( "WINEARCH" );
...@@ -1532,9 +1531,6 @@ size_t CDECL server_init_thread( void *entry_point, BOOL *suspend, unsigned int ...@@ -1532,9 +1531,6 @@ size_t CDECL server_init_thread( void *entry_point, BOOL *suspend, unsigned int
if (!strcmp( arch, "win64" ) && !is_win64 && !is_wow64) if (!strcmp( arch, "win64" ) && !is_win64 && !is_wow64)
fatal_error( "WINEARCH set to win64 but '%s' is a 32-bit installation.\n", config_dir ); fatal_error( "WINEARCH set to win64 but '%s' is a 32-bit installation.\n", config_dir );
} }
if (cpus) *cpus = server_cpus;
if (wow64) *wow64 = is_wow64;
if (start_time) *start_time = server_start_time;
return info_size; return info_size;
case STATUS_INVALID_IMAGE_WIN_64: case STATUS_INVALID_IMAGE_WIN_64:
fatal_error( "'%s' is a 32-bit installation, it cannot support 64-bit applications.\n", config_dir ); fatal_error( "'%s' is a 32-bit installation, it cannot support 64-bit applications.\n", config_dir );
......
...@@ -82,13 +82,36 @@ static void pthread_exit_wrapper( int status ) ...@@ -82,13 +82,36 @@ static void pthread_exit_wrapper( int status )
/*********************************************************************** /***********************************************************************
* init_threading * init_threading
*/ */
void CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy ) TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size, BOOL *suspend,
unsigned int *cpus, BOOL *wow64, timeout_t *start_time )
{ {
TEB *teb;
SIZE_T info_size;
struct ntdll_thread_data *thread_data;
#ifdef __i386__ #ifdef __i386__
extern struct ldt_copy __wine_ldt_copy; extern struct ldt_copy __wine_ldt_copy;
*ldt_copy = &__wine_ldt_copy; *ldt_copy = &__wine_ldt_copy;
#endif #endif
nb_threads = nb_threads_ptr; nb_threads = nb_threads_ptr;
teb = virtual_alloc_first_teb();
thread_data = (struct ntdll_thread_data *)&teb->GdiTebBatch;
thread_data->request_fd = -1;
thread_data->reply_fd = -1;
thread_data->wait_fd[0] = -1;
thread_data->wait_fd[1] = -1;
signal_init_threading();
signal_alloc_thread( teb );
signal_init_thread( teb );
dbg_init();
server_init_process();
info_size = server_init_thread( teb->Peb, suspend );
if (size) *size = info_size;
if (cpus) *cpus = server_cpus;
if (wow64) *wow64 = is_wow64;
if (start_time) *start_time = server_start_time;
return teb;
} }
...@@ -118,7 +141,7 @@ static void start_thread( TEB *teb ) ...@@ -118,7 +141,7 @@ static void start_thread( TEB *teb )
thread_data->debug_info = &debug_info; thread_data->debug_info = &debug_info;
thread_data->pthread_id = pthread_self(); thread_data->pthread_id = pthread_self();
signal_init_thread( teb ); signal_init_thread( teb );
server_init_thread( info->entry, &suspend, NULL, NULL, NULL ); server_init_thread( info->entry, &suspend );
if (info->actctx) if (info->actctx)
{ {
RtlActivateActivationContext( 0, info->actctx, &cookie ); RtlActivateActivationContext( 0, info->actctx, &cookie );
......
...@@ -62,7 +62,6 @@ extern NTSTATUS CDECL virtual_map_section( HANDLE handle, PVOID *addr_ptr, unsig ...@@ -62,7 +62,6 @@ extern NTSTATUS CDECL virtual_map_section( HANDLE handle, PVOID *addr_ptr, unsig
ULONG protect, pe_image_info_t *image_info ) DECLSPEC_HIDDEN; ULONG protect, pe_image_info_t *image_info ) DECLSPEC_HIDDEN;
extern void CDECL virtual_get_system_info( SYSTEM_BASIC_INFORMATION *info ) DECLSPEC_HIDDEN; extern void CDECL virtual_get_system_info( SYSTEM_BASIC_INFORMATION *info ) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL virtual_create_builtin_view( void *module ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL virtual_create_builtin_view( void *module ) DECLSPEC_HIDDEN;
extern TEB * CDECL virtual_alloc_first_teb(void) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL virtual_alloc_thread_stack( INITIAL_TEB *stack, SIZE_T reserve_size, SIZE_T commit_size, SIZE_T *pthread_size ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL virtual_alloc_thread_stack( INITIAL_TEB *stack, SIZE_T reserve_size, SIZE_T commit_size, SIZE_T *pthread_size ) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL virtual_handle_fault( LPCVOID addr, DWORD err, BOOL on_signal_stack ) DECLSPEC_HIDDEN; extern NTSTATUS CDECL virtual_handle_fault( LPCVOID addr, DWORD err, BOOL on_signal_stack ) DECLSPEC_HIDDEN;
extern unsigned int CDECL virtual_locked_server_call( void *req_ptr ) DECLSPEC_HIDDEN; extern unsigned int CDECL virtual_locked_server_call( void *req_ptr ) DECLSPEC_HIDDEN;
...@@ -79,10 +78,6 @@ extern void CDECL virtual_set_force_exec( BOOL enable ) DECLSPEC_HIDDEN; ...@@ -79,10 +78,6 @@ extern void CDECL virtual_set_force_exec( BOOL enable ) DECLSPEC_HIDDEN;
extern void CDECL virtual_release_address_space(void) DECLSPEC_HIDDEN; extern void CDECL virtual_release_address_space(void) DECLSPEC_HIDDEN;
extern void CDECL virtual_set_large_address_space(void) DECLSPEC_HIDDEN; extern void CDECL virtual_set_large_address_space(void) DECLSPEC_HIDDEN;
extern void virtual_init(void) DECLSPEC_HIDDEN;
extern void CDECL dbg_init(void) DECLSPEC_HIDDEN;
extern unsigned int CDECL server_select( const select_op_t *select_op, data_size_t size, UINT flags, extern unsigned int CDECL server_select( const select_op_t *select_op, data_size_t size, UINT flags,
timeout_t abs_timeout, CONTEXT *context, RTL_CRITICAL_SECTION *cs, timeout_t abs_timeout, CONTEXT *context, RTL_CRITICAL_SECTION *cs,
user_apc_t *user_apc ) DECLSPEC_HIDDEN; user_apc_t *user_apc ) DECLSPEC_HIDDEN;
...@@ -99,11 +94,10 @@ extern NTSTATUS CDECL server_handle_to_fd( HANDLE handle, unsigned int access, i ...@@ -99,11 +94,10 @@ extern NTSTATUS CDECL server_handle_to_fd( HANDLE handle, unsigned int access, i
unsigned int *options ) DECLSPEC_HIDDEN; unsigned int *options ) DECLSPEC_HIDDEN;
extern void CDECL server_release_fd( HANDLE handle, int unix_fd ) DECLSPEC_HIDDEN; extern void CDECL server_release_fd( HANDLE handle, int unix_fd ) DECLSPEC_HIDDEN;
extern int CDECL server_pipe( int fd[2] ) DECLSPEC_HIDDEN; extern int CDECL server_pipe( int fd[2] ) DECLSPEC_HIDDEN;
extern void CDECL server_init_process(void) DECLSPEC_HIDDEN;
extern void CDECL server_init_process_done(void) DECLSPEC_HIDDEN; extern void CDECL server_init_process_done(void) DECLSPEC_HIDDEN;
extern size_t CDECL server_init_thread( void *entry_point, BOOL *suspend, unsigned int *cpus, extern TEB * CDECL init_threading( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size,
BOOL *wow64, timeout_t *start_time ) DECLSPEC_HIDDEN; BOOL *suspend, unsigned int *cpus, BOOL *wow64,
extern void CDECL init_threading( int *nb_threads, struct ldt_copy **ldt_copy ) DECLSPEC_HIDDEN; timeout_t *start_time ) DECLSPEC_HIDDEN;
extern NTSTATUS CDECL create_thread( SIZE_T stack_reserve, SIZE_T stack_commit, HANDLE actctx, DWORD tid, extern NTSTATUS CDECL create_thread( SIZE_T stack_reserve, SIZE_T stack_commit, HANDLE actctx, DWORD tid,
int request_fd, PRTL_THREAD_START_ROUTINE start, int request_fd, PRTL_THREAD_START_ROUTINE start,
void *param, void *relay ) DECLSPEC_HIDDEN; void *param, void *relay ) DECLSPEC_HIDDEN;
...@@ -116,7 +110,9 @@ extern NTSTATUS CDECL get_thread_ldt_entry( HANDLE handle, void *data, ULONG len ...@@ -116,7 +110,9 @@ extern NTSTATUS CDECL get_thread_ldt_entry( HANDLE handle, void *data, ULONG len
extern const char *data_dir DECLSPEC_HIDDEN; extern const char *data_dir DECLSPEC_HIDDEN;
extern const char *build_dir DECLSPEC_HIDDEN; extern const char *build_dir DECLSPEC_HIDDEN;
extern const char *config_dir DECLSPEC_HIDDEN; extern const char *config_dir DECLSPEC_HIDDEN;
extern unsigned int server_cpus DECLSPEC_HIDDEN;
extern BOOL is_wow64 DECLSPEC_HIDDEN; extern BOOL is_wow64 DECLSPEC_HIDDEN;
extern timeout_t server_start_time DECLSPEC_HIDDEN;
extern sigset_t server_block_set DECLSPEC_HIDDEN; extern sigset_t server_block_set DECLSPEC_HIDDEN;
extern SIZE_T signal_stack_size DECLSPEC_HIDDEN; extern SIZE_T signal_stack_size DECLSPEC_HIDDEN;
extern SIZE_T signal_stack_mask DECLSPEC_HIDDEN; extern SIZE_T signal_stack_mask DECLSPEC_HIDDEN;
...@@ -125,6 +121,8 @@ extern unsigned int server_call_unlocked( void *req_ptr ) DECLSPEC_HIDDEN; ...@@ -125,6 +121,8 @@ extern unsigned int server_call_unlocked( void *req_ptr ) DECLSPEC_HIDDEN;
extern void server_enter_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ) DECLSPEC_HIDDEN; extern void server_enter_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ) DECLSPEC_HIDDEN;
extern void server_leave_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ) DECLSPEC_HIDDEN; extern void server_leave_uninterrupted_section( RTL_CRITICAL_SECTION *cs, sigset_t *sigset ) DECLSPEC_HIDDEN;
extern void start_server( BOOL debug ) DECLSPEC_HIDDEN; extern void start_server( BOOL debug ) DECLSPEC_HIDDEN;
extern void server_init_process(void) DECLSPEC_HIDDEN;
extern size_t server_init_thread( void *entry_point, BOOL *suspend ) DECLSPEC_HIDDEN;
extern NTSTATUS context_to_server( context_t *to, const CONTEXT *from ) DECLSPEC_HIDDEN; extern NTSTATUS context_to_server( context_t *to, const CONTEXT *from ) DECLSPEC_HIDDEN;
extern NTSTATUS context_from_server( CONTEXT *to, const context_t *from ) DECLSPEC_HIDDEN; extern NTSTATUS context_from_server( CONTEXT *to, const context_t *from ) DECLSPEC_HIDDEN;
...@@ -132,6 +130,8 @@ extern void wait_suspend( CONTEXT *context ) DECLSPEC_HIDDEN; ...@@ -132,6 +130,8 @@ extern void wait_suspend( CONTEXT *context ) DECLSPEC_HIDDEN;
extern NTSTATUS set_thread_context( HANDLE handle, const context_t *context, BOOL *self ) DECLSPEC_HIDDEN; extern NTSTATUS set_thread_context( HANDLE handle, const context_t *context, BOOL *self ) DECLSPEC_HIDDEN;
extern NTSTATUS get_thread_context( HANDLE handle, context_t *context, unsigned int flags, BOOL *self ) DECLSPEC_HIDDEN; extern NTSTATUS get_thread_context( HANDLE handle, context_t *context, unsigned int flags, BOOL *self ) DECLSPEC_HIDDEN;
extern void virtual_init(void) DECLSPEC_HIDDEN;
extern TEB *virtual_alloc_first_teb(void) DECLSPEC_HIDDEN;
extern NTSTATUS virtual_alloc_teb( TEB **ret_teb ) DECLSPEC_HIDDEN; extern NTSTATUS virtual_alloc_teb( TEB **ret_teb ) DECLSPEC_HIDDEN;
extern void virtual_free_teb( TEB *teb ) DECLSPEC_HIDDEN; extern void virtual_free_teb( TEB *teb ) DECLSPEC_HIDDEN;
...@@ -143,4 +143,6 @@ extern void DECLSPEC_NORETURN signal_start_thread( PRTL_THREAD_START_ROUTINE ent ...@@ -143,4 +143,6 @@ extern void DECLSPEC_NORETURN signal_start_thread( PRTL_THREAD_START_ROUTINE ent
BOOL suspend, void *relay, TEB *teb ) DECLSPEC_HIDDEN; BOOL suspend, void *relay, TEB *teb ) DECLSPEC_HIDDEN;
extern void DECLSPEC_NORETURN signal_exit_thread( int status, void (*func)(int) ) DECLSPEC_HIDDEN; extern void DECLSPEC_NORETURN signal_exit_thread( int status, void (*func)(int) ) DECLSPEC_HIDDEN;
extern void dbg_init(void) DECLSPEC_HIDDEN;
#endif /* __NTDLL_UNIX_PRIVATE_H */ #endif /* __NTDLL_UNIX_PRIVATE_H */
...@@ -2539,7 +2539,7 @@ NTSTATUS CDECL virtual_create_builtin_view( void *module ) ...@@ -2539,7 +2539,7 @@ NTSTATUS CDECL virtual_create_builtin_view( void *module )
/*********************************************************************** /***********************************************************************
* virtual_alloc_first_teb * virtual_alloc_first_teb
*/ */
TEB * CDECL virtual_alloc_first_teb(void) TEB *virtual_alloc_first_teb(void)
{ {
TEB *teb; TEB *teb;
PEB *peb; PEB *peb;
...@@ -2561,9 +2561,6 @@ TEB * CDECL virtual_alloc_first_teb(void) ...@@ -2561,9 +2561,6 @@ TEB * CDECL virtual_alloc_first_teb(void)
teb->Tib.StackBase = (void *)~0ul; teb->Tib.StackBase = (void *)~0ul;
teb->StaticUnicodeString.Buffer = teb->StaticUnicodeBuffer; teb->StaticUnicodeString.Buffer = teb->StaticUnicodeBuffer;
teb->StaticUnicodeString.MaximumLength = sizeof(teb->StaticUnicodeBuffer); teb->StaticUnicodeString.MaximumLength = sizeof(teb->StaticUnicodeBuffer);
signal_init_threading();
signal_alloc_thread( teb );
signal_init_thread( teb );
use_locks = TRUE; use_locks = TRUE;
return teb; return teb;
} }
......
...@@ -28,7 +28,7 @@ struct ldt_copy; ...@@ -28,7 +28,7 @@ struct ldt_copy;
struct msghdr; struct msghdr;
/* increment this when you change the function table */ /* increment this when you change the function table */
#define NTDLL_UNIXLIB_VERSION 19 #define NTDLL_UNIXLIB_VERSION 20
struct unix_funcs struct unix_funcs
{ {
...@@ -91,7 +91,6 @@ struct unix_funcs ...@@ -91,7 +91,6 @@ struct unix_funcs
ULONG protect, pe_image_info_t *image_info ); ULONG protect, pe_image_info_t *image_info );
void (CDECL *virtual_get_system_info)( SYSTEM_BASIC_INFORMATION *info ); void (CDECL *virtual_get_system_info)( SYSTEM_BASIC_INFORMATION *info );
NTSTATUS (CDECL *virtual_create_builtin_view)( void *module ); NTSTATUS (CDECL *virtual_create_builtin_view)( void *module );
TEB * (CDECL *virtual_alloc_first_teb)(void);
NTSTATUS (CDECL *virtual_alloc_thread_stack)( INITIAL_TEB *stack, SIZE_T reserve_size, SIZE_T commit_size, SIZE_T *pthread_size ); NTSTATUS (CDECL *virtual_alloc_thread_stack)( INITIAL_TEB *stack, SIZE_T reserve_size, SIZE_T commit_size, SIZE_T *pthread_size );
NTSTATUS (CDECL *virtual_handle_fault)( LPCVOID addr, DWORD err, BOOL on_signal_stack ); NTSTATUS (CDECL *virtual_handle_fault)( LPCVOID addr, DWORD err, BOOL on_signal_stack );
unsigned int (CDECL *virtual_locked_server_call)( void *req_ptr ); unsigned int (CDECL *virtual_locked_server_call)( void *req_ptr );
...@@ -109,7 +108,8 @@ struct unix_funcs ...@@ -109,7 +108,8 @@ struct unix_funcs
void (CDECL *virtual_set_large_address_space)(void); void (CDECL *virtual_set_large_address_space)(void);
/* thread/process functions */ /* thread/process functions */
void (CDECL *init_threading)( int *nb_threads, struct ldt_copy **ldt_copy ); TEB * (CDECL *init_threading)( int *nb_threads_ptr, struct ldt_copy **ldt_copy, SIZE_T *size,
BOOL *suspend, unsigned int *cpus, BOOL *wow64, timeout_t *start_time );
NTSTATUS (CDECL *create_thread)( SIZE_T stack_reserve, SIZE_T stack_commit, HANDLE actctx, NTSTATUS (CDECL *create_thread)( SIZE_T stack_reserve, SIZE_T stack_commit, HANDLE actctx,
DWORD tid, int request_fd, PRTL_THREAD_START_ROUTINE start, DWORD tid, int request_fd, PRTL_THREAD_START_ROUTINE start,
void *param, void *relay ); void *param, void *relay );
...@@ -136,13 +136,9 @@ struct unix_funcs ...@@ -136,13 +136,9 @@ struct unix_funcs
unsigned int *options ); unsigned int *options );
void (CDECL *server_release_fd)( HANDLE handle, int unix_fd ); void (CDECL *server_release_fd)( HANDLE handle, int unix_fd );
int (CDECL *server_pipe)( int fd[2] ); int (CDECL *server_pipe)( int fd[2] );
void (CDECL *server_init_process)(void);
void (CDECL *server_init_process_done)(void); void (CDECL *server_init_process_done)(void);
size_t (CDECL *server_init_thread)( void *entry_point, BOOL *suspend, unsigned int *cpus,
BOOL *wow64, timeout_t *start_time );
/* debugging functions */ /* debugging functions */
void (CDECL *dbg_init)(void);
unsigned char (CDECL *dbg_get_channel_flags)( struct __wine_debug_channel *channel ); unsigned char (CDECL *dbg_get_channel_flags)( struct __wine_debug_channel *channel );
const char * (CDECL *dbg_strdup)( const char *str ); const char * (CDECL *dbg_strdup)( const char *str );
int (CDECL *dbg_output)( const char *str ); int (CDECL *dbg_output)( const char *str );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment