[GDB/Linux] Avoid stale errno
The fix that went into GDBserver is also needed on the GDB side. Although most compilers follow right-to-left evaluation order, the order of evaluation of a function call's arguments is really unspecified. target_pid_to_str may well clobber errno when we get to evaluate the third argument to fprintf_unfiltered. gdb/ 2014-07-15 Pedro Alves <palves@redhat.com> * linux-nat.c (kill_callback): Save errno and work with saved copy.
This commit is contained in:
parent
2d40be181f
commit
57745c903f
2 changed files with 21 additions and 8 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
2014-07-15 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* linux-nat.c (kill_callback): Save errno and work with saved
|
||||||
|
copy.
|
||||||
|
|
||||||
2014-07-15 Simon Marchi <simon.marchi@ericsson.com>
|
2014-07-15 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
* expprint.c (dump_subexp_body_standard): Handle OP_STRING.
|
* expprint.c (dump_subexp_body_standard): Handle OP_STRING.
|
||||||
|
|
|
@ -3706,20 +3706,28 @@ kill_callback (struct lwp_info *lp, void *data)
|
||||||
errno = 0;
|
errno = 0;
|
||||||
kill (ptid_get_lwp (lp->ptid), SIGKILL);
|
kill (ptid_get_lwp (lp->ptid), SIGKILL);
|
||||||
if (debug_linux_nat)
|
if (debug_linux_nat)
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
{
|
||||||
"KC: kill (SIGKILL) %s, 0, 0 (%s)\n",
|
int save_errno = errno;
|
||||||
target_pid_to_str (lp->ptid),
|
|
||||||
errno ? safe_strerror (errno) : "OK");
|
fprintf_unfiltered (gdb_stdlog,
|
||||||
|
"KC: kill (SIGKILL) %s, 0, 0 (%s)\n",
|
||||||
|
target_pid_to_str (lp->ptid),
|
||||||
|
save_errno ? safe_strerror (save_errno) : "OK");
|
||||||
|
}
|
||||||
|
|
||||||
/* Some kernels ignore even SIGKILL for processes under ptrace. */
|
/* Some kernels ignore even SIGKILL for processes under ptrace. */
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ptrace (PTRACE_KILL, ptid_get_lwp (lp->ptid), 0, 0);
|
ptrace (PTRACE_KILL, ptid_get_lwp (lp->ptid), 0, 0);
|
||||||
if (debug_linux_nat)
|
if (debug_linux_nat)
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
{
|
||||||
"KC: PTRACE_KILL %s, 0, 0 (%s)\n",
|
int save_errno = errno;
|
||||||
target_pid_to_str (lp->ptid),
|
|
||||||
errno ? safe_strerror (errno) : "OK");
|
fprintf_unfiltered (gdb_stdlog,
|
||||||
|
"KC: PTRACE_KILL %s, 0, 0 (%s)\n",
|
||||||
|
target_pid_to_str (lp->ptid),
|
||||||
|
save_errno ? safe_strerror (save_errno) : "OK");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue