diff options
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/linux-nat.c | 10 | ||||
-rw-r--r-- | gdb/nat/linux-procfs.c | 19 | ||||
-rw-r--r-- | gdb/nat/linux-procfs.h | 6 |
4 files changed, 34 insertions, 9 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index af85385..ddedf87 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2015-04-17 Gary Benson <gbenson@redhat.com> + * nat/linux-procfs.h (linux_proc_pid_to_exec_file): + New declaration. + * nat/linux-procfs.c (linux_proc_pid_to_exec_file): + New function, factored out from... + * linux-nat.c (linux_child_pid_to_exec_file): ...here. + +2015-04-17 Gary Benson <gbenson@redhat.com> + * exec.c (solist.h): New include. (exec_file_locate_attach): Prefix absolute executable paths with gdb_sysroot if set. diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c index 6c198cf..b04aa68 100644 --- a/gdb/linux-nat.c +++ b/gdb/linux-nat.c @@ -4106,15 +4106,7 @@ linux_nat_thread_name (struct target_ops *self, struct thread_info *thr) static char * linux_child_pid_to_exec_file (struct target_ops *self, int pid) { - static char buf[PATH_MAX]; - char name[PATH_MAX]; - - xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid); - memset (buf, 0, PATH_MAX); - if (readlink (name, buf, PATH_MAX - 1) <= 0) - strcpy (buf, name); - - return buf; + return linux_proc_pid_to_exec_file (pid); } /* Implement the to_xfer_partial interface for memory reads using the /proc diff --git a/gdb/nat/linux-procfs.c b/gdb/nat/linux-procfs.c index 7599b32..44364c5 100644 --- a/gdb/nat/linux-procfs.c +++ b/gdb/nat/linux-procfs.c @@ -273,3 +273,22 @@ linux_proc_task_list_dir_exists (pid_t pid) xsnprintf (pathname, sizeof (pathname), "/proc/%ld/task", (long) pid); return (stat (pathname, &buf) == 0); } + +/* See linux-procfs.h. */ + +char * +linux_proc_pid_to_exec_file (int pid) +{ + static char buf[PATH_MAX]; + char name[PATH_MAX]; + ssize_t len; + + xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid); + len = readlink (name, buf, PATH_MAX - 1); + if (len <= 0) + strcpy (buf, name); + else + buf[len] = '\0'; + + return buf; +} diff --git a/gdb/nat/linux-procfs.h b/gdb/nat/linux-procfs.h index c4f5788..fdbf383 100644 --- a/gdb/nat/linux-procfs.h +++ b/gdb/nat/linux-procfs.h @@ -73,4 +73,10 @@ extern void linux_proc_attach_tgid_threads (pid_t pid, /* Return true if the /proc/PID/task/ directory exists. */ extern int linux_proc_task_list_dir_exists (pid_t pid); +/* Return the full absolute name of the executable file that was run + to create the process PID. The returned value persists until this + function is next called. */ + +extern char *linux_proc_pid_to_exec_file (int pid); + #endif /* COMMON_LINUX_PROCFS_H */ |