[0/1] Fix internal warning when "gdb -p xxx"
Commit Message
On 03/20/14 10:58, Hui Zhu wrote:
> On 03/19/14 18:16, Pedro Alves wrote:
>> On 03/19/2014 03:57 AM, Hui Zhu wrote:
>>>>>
>>>>> Same with the nul termination. The most standard solution is:
>>>>>
>>>>> 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 != -1)
>>>>> {
>>>>> buf[len] = '\0';
>>>>> return buf;
>>>>> }
>>>>> return NULL;
>>>>>
>>> I make a new patch according to your comments.
>>> Please help me review it.
>>
>> The patch changes the bsd implementations's behavior, because
>> you made them return the /proc path when readlink fails (like
>> the Linux version does), instead of what the current code does
>> or what I suggested above.
>>
>
> I made a new version that change fbsd_pid_to_exec_file and nbsd_pid_to_exec_file
> to your suggested above.
>
> Please help me review it.
>
> Thanks,
> Hui
>
I am sorry that I post a wrong version patch that use "size_t len".
I post a new version that fixed this issue.
Thanks,
Hui
2014-03-20 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.
Comments
On 03/20/2014 03:27 AM, Hui Zhu wrote:
> 2014-03-20 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.
OK, thanks.
On 03/20/14 19:00, Pedro Alves wrote:
> On 03/20/2014 03:27 AM, Hui Zhu wrote:
>
>> 2014-03-20 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.
>
> OK, thanks.
>
Thanks for your help.
Committed to https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=b4ab256ded5020a82ff7ce8dc485e7882fc5b6a7
Best,
Hui
@@ -1991,12 +1991,9 @@ set_enable_mach_exceptions (char *args,
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;
@@ -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
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
@@ -4011,19 +4011,15 @@ linux_nat_thread_name (struct target_ops
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
@@ -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;
}