aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Rytarowski <n54@gmx.com>2020-03-15 00:12:53 +0100
committerKamil Rytarowski <n54@gmx.com>2020-03-17 10:22:51 +0100
commita2ecbe9fb7355698aad97841f9717cdfd7096d95 (patch)
tree1c4800fef54bcf454be4d6bfe0f8c31e12a1de04
parent589902954da0d1dd140b33e578954746c9bfc374 (diff)
downloadbinutils-a2ecbe9fb7355698aad97841f9717cdfd7096d95.zip
binutils-a2ecbe9fb7355698aad97841f9717cdfd7096d95.tar.gz
binutils-a2ecbe9fb7355698aad97841f9717cdfd7096d95.tar.bz2
Rewrite nbsd_nat_target::pid_to_exec_file to sysctl(3)
procfs on NetBSD is optional and not recommended. * nbsd-nat.c: Include <sys/types.h>, <sys/ptrace.h> and <sys/sysctl.h>. * nbsd-nat.c (nbsd_nat_target::pid_to_exec_file): Rewrite.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/nbsd-nat.c22
2 files changed, 16 insertions, 12 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3c92150..cb2e91b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,9 @@
+2020-03-17 Kamil Rytarowski <n54@gmx.com>
+
+ * nbsd-nat.c: Include <sys/types.h>, <sys/ptrace.h> and
+ <sys/sysctl.h>.
+ * nbsd-nat.c (nbsd_nat_target::pid_to_exec_file): Rewrite.
+
2020-03-17 Tom de Vries <tdevries@suse.de>
PR gdb/23710
diff --git a/gdb/nbsd-nat.c b/gdb/nbsd-nat.c
index e7f91be..326bbe3 100644
--- a/gdb/nbsd-nat.c
+++ b/gdb/nbsd-nat.c
@@ -21,23 +21,21 @@
#include "nbsd-nat.h"
+#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/sysctl.h>
+
/* Return the name of a file that can be opened to get the symbols for
the child process identified by PID. */
char *
nbsd_nat_target::pid_to_exec_file (int pid)
{
- ssize_t len;
static char buf[PATH_MAX];
- char name[PATH_MAX];
-
- xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
- len = readlink (name, buf, PATH_MAX - 1);
- if (len != -1)
- {
- buf[len] = '\0';
- return buf;
- }
-
- return NULL;
+ size_t buflen;
+ int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_PATHNAME};
+ buflen = sizeof (buf);
+ if (sysctl (mib, ARRAY_SIZE (mib), buf, &buflen, NULL, 0))
+ return NULL;
+ return buf;
}