aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/darwin-nat.c5
-rw-r--r--gdb/fbsd-nat.c18
-rw-r--r--gdb/linux-nat.c18
-rw-r--r--gdb/nbsd-nat.c18
5 files changed, 35 insertions, 33 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f2e4a81..ba2ca31 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+2014-03-21 Hui Zhu <hui@codesourcery.com>
+ Pedro Alves <palves@redhat.com>
+
+ * darwin-nat.c (darwin_pid_to_exec_file): Change xmalloc to
+ static buffer.
+ * fbsd-nat.c (fbsd_pid_to_exec_file): Ditto.
+ * linux-nat.c (linux_child_pid_to_exec_file): Ditto.
+ * nbsd-nat.c (nbsd_pid_to_exec_file): Ditto.
+
2014-03-20 Maciej W. Rozycki <macro@codesourcery.com>
* mi/mi-interp.c (mi_memory_changed): Avoid using the ISO C99
diff --git a/gdb/darwin-nat.c b/gdb/darwin-nat.c
index 88cecf3..23a921d 100644
--- a/gdb/darwin-nat.c
+++ b/gdb/darwin-nat.c
@@ -1991,12 +1991,9 @@ set_enable_mach_exceptions (char *args, int from_tty,
static char *
darwin_pid_to_exec_file (struct target_ops *self, int pid)
{
- char *path;
+ static char path[PATH_MAX];
int res;
- path = xmalloc (PATH_MAX);
- make_cleanup (xfree, path);
-
res = proc_pidinfo (pid, PROC_PIDPATHINFO, 0, path, PATH_MAX);
if (res >= 0)
return path;
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index a2a1f60..9f30edf 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -39,9 +39,9 @@
char *
fbsd_pid_to_exec_file (struct target_ops *self, int pid)
{
- size_t len = PATH_MAX;
- char *buf = xcalloc (len, sizeof (char));
- char *path;
+ ssize_t len = PATH_MAX;
+ static char buf[PATH_MAX];
+ char name[PATH_MAX];
#ifdef KERN_PROC_PATHNAME
int mib[4];
@@ -54,15 +54,15 @@ fbsd_pid_to_exec_file (struct target_ops *self, int pid)
return buf;
#endif
- path = xstrprintf ("/proc/%d/file", pid);
- if (readlink (path, buf, PATH_MAX - 1) == -1)
+ xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
+ len = readlink (name, buf, PATH_MAX - 1);
+ if (len != -1)
{
- xfree (buf);
- buf = NULL;
+ buf[len] = '\0';
+ return buf;
}
- xfree (path);
- return buf;
+ return NULL;
}
static int
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index b615423..d08cb13 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -4011,19 +4011,15 @@ 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)
{
- char *name1, *name2;
+ static char buf[PATH_MAX];
+ char name[PATH_MAX];
- name1 = xmalloc (PATH_MAX);
- name2 = xmalloc (PATH_MAX);
- make_cleanup (xfree, name1);
- make_cleanup (xfree, name2);
- memset (name2, 0, 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);
- xsnprintf (name1, PATH_MAX, "/proc/%d/exe", pid);
- if (readlink (name1, name2, PATH_MAX - 1) > 0)
- return name2;
- else
- return name1;
+ return buf;
}
/* Records the thread's register state for the corefile note
diff --git a/gdb/nbsd-nat.c b/gdb/nbsd-nat.c
index 72c471b..133de61 100644
--- a/gdb/nbsd-nat.c
+++ b/gdb/nbsd-nat.c
@@ -27,17 +27,17 @@
char *
nbsd_pid_to_exec_file (struct target_ops *self, int pid)
{
- size_t len = PATH_MAX;
- char *buf = xcalloc (len, sizeof (char));
- char *path;
+ ssize_t len;
+ static char buf[PATH_MAX];
+ char name[PATH_MAX];
- path = xstrprintf ("/proc/%d/exe", pid);
- if (readlink (path, buf, PATH_MAX - 1) == -1)
+ xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
+ len = readlink (name, buf, PATH_MAX - 1);
+ if (len != -1)
{
- xfree (buf);
- buf = NULL;
+ buf[len] = '\0';
+ return buf;
}
- xfree (path);
- return buf;
+ return NULL;
}