Implement "info proc cwd" for NetBSD

Add nbsd_pid_to_cwd() to query the program current directory.

gdb/ChangeLog:

	* nbsd-nat.c (nbsd_pid_to_cwd): Add.
	(nbsd_nat_target::info_proc): Add do_cwd.
This commit is contained in:
Kamil Rytarowski 2020-04-12 19:24:01 +02:00
parent 51c133d547
commit b4848d2a7b
2 changed files with 31 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2020-04-12 Kamil Rytarowski <n54@gmx.com>
* nbsd-nat.c (nbsd_pid_to_cwd): Add.
(nbsd_nat_target::info_proc): Add do_cwd.
2020-04-12 Kamil Rytarowski <n54@gmx.com>
* nbsd-nat.c (nbsd_nat_target::info_proc): Add do_exe.

View File

@ -44,6 +44,20 @@ nbsd_nat_target::pid_to_exec_file (int pid)
return buf;
}
/* Return the current directory for the process identified by PID. */
static std::string
nbsd_pid_to_cwd (int pid)
{
char buf[PATH_MAX];
size_t buflen;
int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_CWD};
buflen = sizeof (buf);
if (sysctl (mib, ARRAY_SIZE (mib), buf, &buflen, NULL, 0))
return "";
return buf;
}
/* Generic thread (LWP) lister within a specified process. The callback
parameters is a C++ function that is called for each detected thread. */
@ -299,6 +313,7 @@ bool
nbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
{
pid_t pid;
bool do_cwd = false;
bool do_exe = false;
bool do_mappings = false;
@ -310,6 +325,9 @@ nbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
case IP_EXE:
do_exe = true;
break;
case IP_CWD:
do_cwd = true;
break;
default:
error (_("Not supported on this target."));
}
@ -328,6 +346,14 @@ nbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
printf_filtered (_("process %d\n"), pid);
if (do_cwd)
{
std::string cwd = nbsd_pid_to_cwd (pid);
if (cwd != "")
printf_filtered ("cwd = '%s'\n", cwd.c_str ());
else
warning (_("unable to fetch current working directory"));
}
if (do_exe)
{
const char *exe = pid_to_exec_file (pid);