Introduce linux_proc_pid_to_exec_file

This commit introduces a new function linux_proc_pid_to_exec_file
that shared Linux code can use to discover the filename of the
executable that was run to create a process on the system.

gdb/ChangeLog:

	* 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.
This commit is contained in:
Gary Benson 2015-04-17 09:47:30 +01:00
parent a9a5a3d1d2
commit e0d86d2cbd
4 changed files with 34 additions and 9 deletions

View File

@ -1,3 +1,11 @@
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.

View File

@ -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

View File

@ -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;
}

View File

@ -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 */