Commit cd1c7fc0 authored by Alexandre Julliard's avatar Alexandre Julliard

server: Add hooks to support process tracing mechanisms other than ptrace.

parent 48b74b32
...@@ -284,6 +284,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit ...@@ -284,6 +284,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
process->winstation = 0; process->winstation = 0;
process->desktop = 0; process->desktop = 0;
process->token = token_create_admin(); process->token = token_create_admin();
process->trace_data = 0;
list_init( &process->thread_list ); list_init( &process->thread_list );
list_init( &process->locks ); list_init( &process->locks );
list_init( &process->classes ); list_init( &process->classes );
...@@ -343,6 +344,7 @@ data_size_t init_process( struct thread *thread ) ...@@ -343,6 +344,7 @@ data_size_t init_process( struct thread *thread )
struct process *process = thread->process; struct process *process = thread->process;
struct startup_info *info = process->startup_info; struct startup_info *info = process->startup_info;
init_process_tracing( process );
if (!info) return 0; if (!info) return 0;
return info->data_size; return info->data_size;
} }
...@@ -599,6 +601,7 @@ static void process_killed( struct process *process ) ...@@ -599,6 +601,7 @@ static void process_killed( struct process *process )
destroy_process_classes( process ); destroy_process_classes( process );
remove_process_locks( process ); remove_process_locks( process );
set_process_startup_state( process, STARTUP_ABORTED ); set_process_startup_state( process, STARTUP_ABORTED );
finish_process_tracing( process );
start_sigkill_timer( process ); start_sigkill_timer( process );
wake_up( &process->obj, 0 ); wake_up( &process->obj, 0 );
} }
......
...@@ -80,6 +80,7 @@ struct process ...@@ -80,6 +80,7 @@ struct process
struct list dlls; /* list of loaded dlls */ struct list dlls; /* list of loaded dlls */
void *peb; /* PEB address in client address space */ void *peb; /* PEB address in client address space */
void *ldt_copy; /* pointer to LDT copy in client addr space */ void *ldt_copy; /* pointer to LDT copy in client addr space */
unsigned int trace_data; /* opaque data used by the process tracing mechanism */
}; };
struct process_snapshot struct process_snapshot
...@@ -128,6 +129,10 @@ extern void detach_debugged_processes( struct thread *debugger ); ...@@ -128,6 +129,10 @@ extern void detach_debugged_processes( struct thread *debugger );
extern struct process_snapshot *process_snap( int *count ); extern struct process_snapshot *process_snap( int *count );
extern struct module_snapshot *module_snap( struct process *process, int *count ); extern struct module_snapshot *module_snap( struct process *process, int *count );
extern void enum_processes( int (*cb)(struct process*, void*), void *user); extern void enum_processes( int (*cb)(struct process*, void*), void *user);
extern void init_tracing_mechanism(void);
extern void init_process_tracing( struct process *process );
extern void finish_process_tracing( struct process *process );
extern int read_process_memory( struct process *process, const void *ptr, data_size_t size, char *dest ); extern int read_process_memory( struct process *process, const void *ptr, data_size_t size, char *dest );
extern int write_process_memory( struct process *process, void *ptr, data_size_t size, const char *src ); extern int write_process_memory( struct process *process, void *ptr, data_size_t size, const char *src );
......
...@@ -223,6 +223,23 @@ static inline int tkill( int tgid, int pid, int sig ) ...@@ -223,6 +223,23 @@ static inline int tkill( int tgid, int pid, int sig )
return -1; return -1;
} }
/* initialize the process tracing mechanism */
void init_tracing_mechanism(void)
{
/* no initialization needed for ptrace */
}
/* initialize the per-process tracing mechanism */
void init_process_tracing( struct process *process )
{
/* ptrace setup is done on-demand */
}
/* terminate the per-process tracing mechanism */
void finish_process_tracing( struct process *process )
{
}
/* send a Unix signal to a specific thread */ /* send a Unix signal to a specific thread */
int send_thread_signal( struct thread *thread, int sig ) int send_thread_signal( struct thread *thread, int sig )
{ {
......
...@@ -800,6 +800,9 @@ void open_master_socket(void) ...@@ -800,6 +800,9 @@ void open_master_socket(void)
/* init startup time */ /* init startup time */
gettimeofday( &server_start_time, NULL ); gettimeofday( &server_start_time, NULL );
/* init the process tracing mechanism */
init_tracing_mechanism();
} }
/* master socket timer expiration handler */ /* master socket timer expiration handler */
......
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