2002-01-08 Michael Snyder <msnyder@redhat.com>
authorMichael Snyder <msnyder@vmware.com>
Wed, 9 Jan 2002 02:21:25 +0000 (02:21 +0000)
committerMichael Snyder <msnyder@vmware.com>
Wed, 9 Jan 2002 02:21:25 +0000 (02:21 +0000)
* linux-proc.c (child_pid_to_exec_file): Use readlink to get the
real name of the executable, rather than the /proc name.

gdb/ChangeLog
gdb/linux-proc.c

index 49eac086f711e571452ec7159746d8823545229f..e06162246dc65c2355dc4df928eae2b1d79b2843 100644 (file)
@@ -1,3 +1,8 @@
+2002-01-08  Michael Snyder  <msnyder@redhat.com>
+
+       * linux-proc.c (child_pid_to_exec_file): Use readlink to get the
+       real name of the executable, rather than the /proc name.
+
 2002-01-03  Michael Snyder  <msnyder@redhat.com>
 
        Implement a "generate-core-file" command in gdb, save target state.
index 4d48b8d16ea4a9a380ac7346cff1bbece019fb40..3ccab9ced94d200789a4a5e2b36bae9105f021cd 100644 (file)
 char *
 child_pid_to_exec_file (int pid)
 {
-  static char fname[MAXPATHLEN];
+  char *name1, *name2;
 
-  sprintf (fname, "/proc/%d/exe", pid);
-  /* FIXME use readlink to get the real name. */
-  return fname;
+  name1 = xmalloc (MAXPATHLEN);
+  name2 = xmalloc (MAXPATHLEN);
+  make_cleanup (xfree, name1);
+  make_cleanup (xfree, name2);
+  memset (name2, 0, MAXPATHLEN);
+
+  sprintf (name1, "/proc/%d/exe", pid);
+  if (readlink (name1, name2, MAXPATHLEN) > 0)
+    return name2;
+  else
+    return name1;
 }
 
 /* Function: linux_find_memory_regions