diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2004-06-29 15:37:31 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2004-06-29 15:37:31 +0000 |
commit | 47216e511866495b7ece0227ef53f99cf23eda00 (patch) | |
tree | b972081c7cee8a346222323caf2994f24daf2e7c | |
parent | f03b584349d10c5e3380a5de6c8ac7c7252d3ec3 (diff) | |
download | gdb-47216e511866495b7ece0227ef53f99cf23eda00.zip gdb-47216e511866495b7ece0227ef53f99cf23eda00.tar.gz gdb-47216e511866495b7ece0227ef53f99cf23eda00.tar.bz2 |
* 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.
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/win32-nat.c | 31 | ||||
-rw-r--r-- | gdb/windows-nat.c | 31 |
3 files changed, 68 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index f459101..ca53c25 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2004-06-29 Corinna Vinschen <vinschen@redhat.com> + + * 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. + 2004-06-28 Andrew Cagney <cagney@gnu.org> * defs.h (xstrvprintf): Declare. diff --git a/gdb/win32-nat.c b/gdb/win32-nat.c index b8e5380..e1e865b 100644 --- a/gdb/win32-nat.c +++ b/gdb/win32-nat.c @@ -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 diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c index b8e5380..e1e865b 100644 --- a/gdb/windows-nat.c +++ b/gdb/windows-nat.c @@ -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 |