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:
parent
a9a5a3d1d2
commit
e0d86d2cbd
|
@ -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>
|
2015-04-17 Gary Benson <gbenson@redhat.com>
|
||||||
|
|
||||||
* exec.c (solist.h): New include.
|
* exec.c (solist.h): New include.
|
||||||
|
|
|
@ -4106,15 +4106,7 @@ linux_nat_thread_name (struct target_ops *self, struct thread_info *thr)
|
||||||
static char *
|
static char *
|
||||||
linux_child_pid_to_exec_file (struct target_ops *self, int pid)
|
linux_child_pid_to_exec_file (struct target_ops *self, int pid)
|
||||||
{
|
{
|
||||||
static char buf[PATH_MAX];
|
return linux_proc_pid_to_exec_file (pid);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Implement the to_xfer_partial interface for memory reads using the /proc
|
/* Implement the to_xfer_partial interface for memory reads using the /proc
|
||||||
|
|
|
@ -273,3 +273,22 @@ linux_proc_task_list_dir_exists (pid_t pid)
|
||||||
xsnprintf (pathname, sizeof (pathname), "/proc/%ld/task", (long) pid);
|
xsnprintf (pathname, sizeof (pathname), "/proc/%ld/task", (long) pid);
|
||||||
return (stat (pathname, &buf) == 0);
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -73,4 +73,10 @@ extern void linux_proc_attach_tgid_threads (pid_t pid,
|
||||||
/* Return true if the /proc/PID/task/ directory exists. */
|
/* Return true if the /proc/PID/task/ directory exists. */
|
||||||
extern int linux_proc_task_list_dir_exists (pid_t pid);
|
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 */
|
#endif /* COMMON_LINUX_PROCFS_H */
|
||||||
|
|
Loading…
Reference in New Issue