diff options
author | Pedro Alves <palves@redhat.com> | 2014-07-15 15:35:28 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2014-07-15 15:35:28 +0100 |
commit | ce9e3fe795c05bd7458a1466e14104f489f2b483 (patch) | |
tree | 9481716ff81029a4ffd8cc37693651256a145c14 | |
parent | 19f2f6a9c4aeb0e37d448cb5593164e25ab055a9 (diff) | |
download | gdb-ce9e3fe795c05bd7458a1466e14104f489f2b483.zip gdb-ce9e3fe795c05bd7458a1466e14104f489f2b483.tar.gz gdb-ce9e3fe795c05bd7458a1466e14104f489f2b483.tar.bz2 |
[GDBserver] Avoid stale errno
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 or ptid_of may well clobber errno when
we get to evaluate the third argument to debug_printf.
gdb/gdbserver/
2014-07-15 Pedro Alves <palves@redhat.com>
* linux-low.c (linux_kill_one_lwp): Save errno and work with saved
copy.
-rw-r--r-- | gdb/gdbserver/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gdbserver/linux-low.c | 20 |
2 files changed, 19 insertions, 6 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index e6b0a84..4658abf 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2014-07-15 Pedro Alves <palves@redhat.com> + + * linux-low.c (linux_kill_one_lwp): Save errno and work with saved + copy. + 2014-07-11 Pedro Alves <palves@redhat.com> * linux-low.c (kill_wait_lwp): New function, based on diff --git a/gdb/gdbserver/linux-low.c b/gdb/gdbserver/linux-low.c index 215a80c..0f4dbe2 100644 --- a/gdb/gdbserver/linux-low.c +++ b/gdb/gdbserver/linux-low.c @@ -897,16 +897,24 @@ linux_kill_one_lwp (struct lwp_info *lwp) errno = 0; kill (pid, SIGKILL); if (debug_threads) - debug_printf ("LKL: kill (SIGKILL) %s, 0, 0 (%s)\n", - target_pid_to_str (ptid_of (thr)), - errno ? strerror (errno) : "OK"); + { + int save_errno = errno; + + debug_printf ("LKL: kill_lwp (SIGKILL) %s, 0, 0 (%s)\n", + target_pid_to_str (ptid_of (thr)), + save_errno ? strerror (save_errno) : "OK"); + } errno = 0; ptrace (PTRACE_KILL, pid, (PTRACE_TYPE_ARG3) 0, (PTRACE_TYPE_ARG4) 0); if (debug_threads) - debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n", - target_pid_to_str (ptid_of (thr)), - errno ? strerror (errno) : "OK"); + { + int save_errno = errno; + + debug_printf ("LKL: PTRACE_KILL %s, 0, 0 (%s)\n", + target_pid_to_str (ptid_of (thr)), + save_errno ? strerror (save_errno) : "OK"); + } } /* Kill LWP and wait for it to die. */ |