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

Alexandre Julliard julliard at wine.codeweavers.com
Fri Dec 29 14:35:28 CST 2006


Module: wine
Branch: master
Commit: cd1c7fc056decda40f62d99438dda69d005fd7ed
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cd1c7fc056decda40f62d99438dda69d005fd7ed

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri Dec 29 16:56:11 2006 +0100

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

---

 server/process.c |    3 +++
 server/process.h |    5 +++++
 server/ptrace.c  |   17 +++++++++++++++++
 server/request.c |    3 +++
 4 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/server/process.c b/server/process.c
index 217710a..001afcb 100644
--- a/server/process.c
+++ b/server/process.c
@@ -284,6 +284,7 @@ struct thread *create_process( int fd, s
     process->winstation      = 0;
     process->desktop         = 0;
     process->token           = token_create_admin();
+    process->trace_data      = 0;
     list_init( &process->thread_list );
     list_init( &process->locks );
     list_init( &process->classes );
@@ -343,6 +344,7 @@ data_size_t init_process( struct thread
     struct process *process = thread->process;
     struct startup_info *info = process->startup_info;
 
+    init_process_tracing( process );
     if (!info) return 0;
     return info->data_size;
 }
@@ -599,6 +601,7 @@ static void process_killed( struct proce
     destroy_process_classes( process );
     remove_process_locks( process );
     set_process_startup_state( process, STARTUP_ABORTED );
+    finish_process_tracing( process );
     start_sigkill_timer( process );
     wake_up( &process->obj, 0 );
 }
diff --git a/server/process.h b/server/process.h
index af84719..6d5d676 100644
--- a/server/process.h
+++ b/server/process.h
@@ -80,6 +80,7 @@ struct process
     struct list          dlls;            /* list of loaded dlls */
     void                *peb;             /* PEB address in client address 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
@@ -128,6 +129,10 @@ extern void detach_debugged_processes( s
 extern struct process_snapshot *process_snap( 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 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 write_process_memory( struct process *process, void *ptr, data_size_t size, const char *src );
 
diff --git a/server/ptrace.c b/server/ptrace.c
index c7aa088..7b0bfa0 100644
--- a/server/ptrace.c
+++ b/server/ptrace.c
@@ -223,6 +223,23 @@ static inline int tkill( int tgid, int p
     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 */
 int send_thread_signal( struct thread *thread, int sig )
 {
diff --git a/server/request.c b/server/request.c
index 07cc5fb..c01a70e 100644
--- a/server/request.c
+++ b/server/request.c
@@ -800,6 +800,9 @@ void open_master_socket(void)
 
     /* init startup time */
     gettimeofday( &server_start_time, NULL );
+
+    /* init the process tracing mechanism */
+    init_tracing_mechanism();
 }
 
 /* master socket timer expiration handler */




More information about the wine-cvs mailing list