Fix internal warning when "gdb -p xxx"
ps -e | grep a.out 28886 pts/12 00:00:00 a.out gdb -p 28886 Loaded symbols for /lib64/ld-linux-x86-64.so.2 0x0000003b0ccbc970 in __nanosleep_nocancel () from /lib64/libc.so.6 ../../binutils-gdb/gdb/cleanups.c:265: internal-warning: restore_my_cleanups has found a stale cleanup A problem internal to GDB has been detected, further debugging may prove unreliable. Quit this debugging session? (y or n) The backtrace of this issue: (gdb) bt file=0x8b0c10 "s' failed.", line=265, fmt=0x8b0c38 "nutils-gdb/gdb/cleanups.c", ap=0x7fff803e3ed8) at ../../binutils-gdb/gdb/utils.c:748 fmt=0x8b0c38 "nutils-gdb/gdb/cleanups.c", ap=0x7fff803e3ed8) at ../../binutils-gdb/gdb/utils.c:799 string=0x8b0c38 "nutils-gdb/gdb/cleanups.c") at ../../binutils-gdb/gdb/utils.c:809 at ../../binutils-gdb/gdb/cleanups.c:265 at ../../binutils-gdb/gdb/cleanups.c:276 at ../../binutils-gdb/gdb/exceptions.c:142 at ../../binutils-gdb/gdb/exceptions.c:203 command=0x5d5fb8 <attach_command_continuation_free_args+18>, arg=0x7fff803e525b "2914", from_tty=1, mask=RETURN_MASK_ALL) at ../../binutils-gdb/gdb/exceptions.c:549 ---Type <return> to continue, or q <return> to quit--- func_args=0x7fff803e4280, errstring=0x8cf2e4 "/local/bin", mask=RETURN_MASK_ALL) at ../../binutils-gdb/gdb/exceptions.c:522 This is a new issue. It is introduced by commit https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=commit;h=8bc2fe488957946d2cdccda3ce8d4f39e4003ea0 It removed the discard_cleanups (back_to) inside attach_command. Then restore_my_cleanups will throw a internal_warning. https://sourceware.org/ml/gdb-patches/2014-03/msg00374.html 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.
This commit is contained in:
parent
a2db7c0751
commit
b4ab256ded
@ -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>
|
2014-03-20 Maciej W. Rozycki <macro@codesourcery.com>
|
||||||
|
|
||||||
* mi/mi-interp.c (mi_memory_changed): Avoid using the ISO C99
|
* mi/mi-interp.c (mi_memory_changed): Avoid using the ISO C99
|
||||||
|
@ -1991,12 +1991,9 @@ set_enable_mach_exceptions (char *args, int from_tty,
|
|||||||
static char *
|
static char *
|
||||||
darwin_pid_to_exec_file (struct target_ops *self, int pid)
|
darwin_pid_to_exec_file (struct target_ops *self, int pid)
|
||||||
{
|
{
|
||||||
char *path;
|
static char path[PATH_MAX];
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
path = xmalloc (PATH_MAX);
|
|
||||||
make_cleanup (xfree, path);
|
|
||||||
|
|
||||||
res = proc_pidinfo (pid, PROC_PIDPATHINFO, 0, path, PATH_MAX);
|
res = proc_pidinfo (pid, PROC_PIDPATHINFO, 0, path, PATH_MAX);
|
||||||
if (res >= 0)
|
if (res >= 0)
|
||||||
return path;
|
return path;
|
||||||
|
@ -39,9 +39,9 @@
|
|||||||
char *
|
char *
|
||||||
fbsd_pid_to_exec_file (struct target_ops *self, int pid)
|
fbsd_pid_to_exec_file (struct target_ops *self, int pid)
|
||||||
{
|
{
|
||||||
size_t len = PATH_MAX;
|
ssize_t len = PATH_MAX;
|
||||||
char *buf = xcalloc (len, sizeof (char));
|
static char buf[PATH_MAX];
|
||||||
char *path;
|
char name[PATH_MAX];
|
||||||
|
|
||||||
#ifdef KERN_PROC_PATHNAME
|
#ifdef KERN_PROC_PATHNAME
|
||||||
int mib[4];
|
int mib[4];
|
||||||
@ -54,15 +54,15 @@ fbsd_pid_to_exec_file (struct target_ops *self, int pid)
|
|||||||
return buf;
|
return buf;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
path = xstrprintf ("/proc/%d/file", pid);
|
xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
|
||||||
if (readlink (path, buf, PATH_MAX - 1) == -1)
|
len = readlink (name, buf, PATH_MAX - 1);
|
||||||
|
if (len != -1)
|
||||||
{
|
{
|
||||||
xfree (buf);
|
buf[len] = '\0';
|
||||||
buf = NULL;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
xfree (path);
|
return NULL;
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -4011,19 +4011,15 @@ 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)
|
||||||
{
|
{
|
||||||
char *name1, *name2;
|
static char buf[PATH_MAX];
|
||||||
|
char name[PATH_MAX];
|
||||||
|
|
||||||
name1 = xmalloc (PATH_MAX);
|
xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
|
||||||
name2 = xmalloc (PATH_MAX);
|
memset (buf, 0, PATH_MAX);
|
||||||
make_cleanup (xfree, name1);
|
if (readlink (name, buf, PATH_MAX - 1) <= 0)
|
||||||
make_cleanup (xfree, name2);
|
strcpy (buf, name);
|
||||||
memset (name2, 0, PATH_MAX);
|
|
||||||
|
|
||||||
xsnprintf (name1, PATH_MAX, "/proc/%d/exe", pid);
|
return buf;
|
||||||
if (readlink (name1, name2, PATH_MAX - 1) > 0)
|
|
||||||
return name2;
|
|
||||||
else
|
|
||||||
return name1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Records the thread's register state for the corefile note
|
/* Records the thread's register state for the corefile note
|
||||||
|
@ -27,17 +27,17 @@
|
|||||||
char *
|
char *
|
||||||
nbsd_pid_to_exec_file (struct target_ops *self, int pid)
|
nbsd_pid_to_exec_file (struct target_ops *self, int pid)
|
||||||
{
|
{
|
||||||
size_t len = PATH_MAX;
|
ssize_t len;
|
||||||
char *buf = xcalloc (len, sizeof (char));
|
static char buf[PATH_MAX];
|
||||||
char *path;
|
char name[PATH_MAX];
|
||||||
|
|
||||||
path = xstrprintf ("/proc/%d/exe", pid);
|
xsnprintf (name, PATH_MAX, "/proc/%d/exe", pid);
|
||||||
if (readlink (path, buf, PATH_MAX - 1) == -1)
|
len = readlink (name, buf, PATH_MAX - 1);
|
||||||
|
if (len != -1)
|
||||||
{
|
{
|
||||||
xfree (buf);
|
buf[len] = '\0';
|
||||||
buf = NULL;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
xfree (path);
|
return NULL;
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user