aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2014-07-15 15:35:28 +0100
committerPedro Alves <palves@redhat.com>2014-07-15 15:35:28 +0100
commitce9e3fe795c05bd7458a1466e14104f489f2b483 (patch)
tree9481716ff81029a4ffd8cc37693651256a145c14
parent19f2f6a9c4aeb0e37d448cb5593164e25ab055a9 (diff)
downloadgdb-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/ChangeLog5
-rw-r--r--gdb/gdbserver/linux-low.c20
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. */