Better support for introspection

Eric Pouech pouech-eric at wanadoo.fr
Sat Sep 13 07:59:53 CDT 2003


This patch adds in the get_process_info request the address of the first 
debug channel descriptor, so that a taskmanager (or any other tool like 
a debugger) can walk along the descriptor list.

A+
-- 
Eric Pouech
-------------- next part --------------
Name:          chnbase
ChangeLog:     added (debug info) channel in process information
License:       X11
GenDate:       2003/09/13 12:56:20 UTC
ModifiedFiles: libs/wine/debug.c scheduler/process.c server/protocol.def server/process.c server/process.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/libs/wine/debug.c,v
retrieving revision 1.1
diff -u -u -r1.1 debug.c
--- libs/wine/debug.c	22 Mar 2003 20:40:48 -0000	1.1
+++ libs/wine/debug.c	12 Sep 2003 18:58:02 -0000
@@ -61,6 +61,9 @@
     return strcmp( name, *chan + 1 );
 }
 
+/* get chennel start */
+void* wine_dbg_first(void) {return (void*)&first_dll;}
+
 /* apply a debug option to the channels of a given dll */
 static void apply_option( struct dll *dll, const struct debug_option *opt )
 {
Index: scheduler/process.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/scheduler/process.c,v
retrieving revision 1.230
diff -u -u -r1.230 process.c
--- scheduler/process.c	8 Sep 2003 19:02:01 -0000	1.230
+++ scheduler/process.c	12 Sep 2003 19:56:37 -0000
@@ -125,6 +125,9 @@
 extern void SHELL_LoadRegistry(void);
 extern void VERSION_Init( const char *appname );
 
+/* debug channels */
+extern void* wine_dbg_first(void);
+
 /***********************************************************************
  *           get_basename
  */
@@ -434,6 +437,7 @@
             req->name        = &main_exe_name_ptr;
             req->exe_file    = main_file;
             req->gui         = (nt->OptionalHeader.Subsystem != IMAGE_SUBSYSTEM_WINDOWS_CUI);
+            req->channel_base= wine_dbg_first();
             wine_server_add_data( req, main_exe_name, strlen(main_exe_name) );
             wine_server_call( req );
             peb->BeingDebugged = reply->debugged;
Index: server/protocol.def
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/server/protocol.def,v
retrieving revision 1.81
diff -u -u -r1.81 protocol.def
--- server/protocol.def	8 Sep 2003 19:04:01 -0000	1.81
+++ server/protocol.def	13 Sep 2003 08:48:53 -0000
@@ -279,6 +279,7 @@
     void*        name;         /* ptr to ptr to name (in process addr space) */
     obj_handle_t exe_file;     /* file handle for main exe */
     int          gui;          /* is it a GUI process? */
+    void*        channel_base; /* address of first channel (debug info) descriptor */
     VARARG(filename,string);   /* file name of main exe */
 @REPLY
     int          debugged;     /* being debugged? */
@@ -330,6 +331,7 @@
     int          priority;         /* priority class */
     int          process_affinity; /* process affinity mask */
     int          system_affinity;  /* system affinity mask */
+    void*        channel_base;     /* address of first channel (debug info) descriptor */
 @END
 
 
Index: server/process.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/server/process.c,v
retrieving revision 1.109
diff -u -u -r1.109 process.c
--- server/process.c	5 Sep 2003 23:15:41 -0000	1.109
+++ server/process.c	13 Sep 2003 09:10:07 -0000
@@ -729,6 +729,7 @@
     reply->priority         = process->priority;
     reply->process_affinity = process->affinity;
     reply->system_affinity  = 1;
+    reply->channel_base     = process->channel_base;
 }
 
 /* set all information about a process */
@@ -1001,6 +1003,7 @@
     set_process_startup_state( process, STARTUP_DONE );
 
     if (req->gui) process->idle_event = create_event( NULL, 0, 1, 0 );
+    process->channel_base = req->channel_base;
     if (current->suspend + process->suspend > 0) stop_thread( current );
     reply->debugged = (process->debugger != 0);
 }
Index: server/process.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/server/process.h,v
retrieving revision 1.38
diff -u -u -r1.38 process.h
--- server/process.h	24 Jul 2003 00:07:00 -0000	1.38
+++ server/process.h	13 Sep 2003 08:49:52 -0000
@@ -78,6 +78,7 @@
     struct process_dll   exe;             /* main exe file */
     void                *ldt_copy;        /* pointer to LDT copy in client addr space */
     void                *ldt_flags;       /* pointer to LDT flags in client addr space */
+    void                *channel_base;    /* pointer to channel (debug info) list start */
 };
 
 struct process_snapshot


More information about the wine-patches mailing list