Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Corinna Vinschen <vinschen@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA] win32-nat.c: Add to_pid_to_exec_file function
Date: Sat, 26 Jun 2004 12:11:00 -0000	[thread overview]
Message-ID: <20040626121115.GB8039@cygbert.vinschen.de> (raw)

Hi,

the below patch adds a to_pid_to_exec_file function to win32-nat.c
It allows to load the symbol table of a process automatically when
attaching to a running process.  So far, without this function, the
symbol table has to be loaded manually (file command).

In this step the new functionality only works for Cygwin processes.
I'm planning to add the same functionality also for native Windows
processes in a next step.

This patch also requires another patch to infcmd.c (attach_command),
which I'm going to submit separately to discuss it separately.  It
looks like a more generic problem to me and I'm not exactly sure if
my patch is the best solution.

This patch is the base for running testsuite/gdb.base/attach.exp nearly
FAIL free (I'm locally down to just 1 FAIL), together with a few
adjustments in attach.exp itself.  I'll submit the changes to attach.exp
also in a separate posting.


Corinna


	* win32-nat.c (child_pid_to_exec_file): New function.
	(init_child_ops): Add child_pid_to_exec_file as to_pid_to_exec_file
	functionality.

Index: win32-nat.c
===================================================================
RCS file: /cvs/src/src/gdb/win32-nat.c,v
retrieving revision 1.92
diff -u -p -r1.92 win32-nat.c
--- win32-nat.c	25 Jun 2004 19:46:08 -0000	1.92
+++ win32-nat.c	26 Jun 2004 08:18:41 -0000
@@ -1656,6 +1656,36 @@ child_detach (char *args, int from_tty)
   unpush_target (&child_ops);
 }
 
+char *
+child_pid_to_exec_file (int pid)
+{
+  /* Try to find the process path using the Cygwin internal process list
+     pid isn't a valid pid, unfortunately.  Use current_event.dwProcessId
+     instead.  */
+  /* TODO: Also find native Windows processes using CW_GETPINFO_FULL.  */
+
+  static char path[MAX_PATH + 1];
+  char *path_ptr = NULL;
+  int cpid;
+  struct external_pinfo *pinfo;
+
+  cygwin_internal (CW_LOCK_PINFO, 1000);
+  for (cpid = 0;
+       (pinfo = (struct external_pinfo *)
+                       cygwin_internal (CW_GETPINFO, cpid | CW_NEXTPID));
+       cpid = pinfo->pid)
+    {
+      if (pinfo->dwProcessId == current_event.dwProcessId) /* Got it */
+       {
+         cygwin_conv_to_full_posix_path (pinfo->progname, path);
+         path_ptr = path; 
+         break;
+       }
+    }
+  cygwin_internal (CW_UNLOCK_PINFO);
+  return path_ptr; 
+}
+
 /* Print status information about what we're accessing.  */
 
 static void
@@ -2078,6 +2108,7 @@ init_child_ops (void)
   child_ops.to_has_registers = 1;
   child_ops.to_has_execution = 1;
   child_ops.to_magic = OPS_MAGIC;
+  child_ops.to_pid_to_exec_file = child_pid_to_exec_file;
 }
 
 void


             reply	other threads:[~2004-06-26 12:11 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-06-26 12:11 Corinna Vinschen [this message]
2004-06-29 14:37 ` Christopher Faylor
2004-06-29 15:39   ` Corinna Vinschen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040626121115.GB8039@cygbert.vinschen.de \
    --to=vinschen@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox