]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Fix using uninitialised values users/ARM/embedded-gdb-7.10-branch-2016q1 users/ARM/users/ARM/embedded-gdb-2_26-branch-2016q1
authorAndre Simoes Dias Vieira <andsim01@arm.com>
Wed, 30 Mar 2016 08:23:06 +0000 (09:23 +0100)
committerAndre Simoes Dias Vieira <andsim01@arm.com>
Wed, 30 Mar 2016 08:23:48 +0000 (09:23 +0100)
We did a code refacotr here
https://sourceware.org/ml/gdb-patches/2013-11/msg00063.html

> (get_current_thread): New function, factored out from ...
> (add_current_inferior_and_thread): ... this.  Adjust.
>
>@@ -3332,18 +3371,8 @@ add_current_inferior_and_thread (char *wait_status)
>
>   inferior_ptid = null_ptid;
>
>-  /* Now, if we have thread information, update inferior_ptid.  First
>-     if we have a stop reply handy, maybe it's a T stop reply with a
>-     "thread" register we can extract the current thread from.  If
>-     not, ask the remote which is the current thread, with qC.  The
>-     former method avoids a roundtrip.  Note we don't use
>-     remote_parse_stop_reply as that makes use of the target
>-     architecture, which we haven't yet fully determined at this
>-     point.  */
>-  if (wait_status != NULL)
>-    ptid = stop_reply_extract_thread (wait_status);
>-  if (ptid_equal (ptid, null_ptid))
>-    ptid = remote_current_thread (inferior_ptid);
>+  /* Now, if we have thread information, update inferior_ptid.  */
>+  ptid = get_current_thread (wait_status);

but after the refactor, local variable ptid is used without
initialisation.  However, before this change, ptid is initialised to
null_ptid.  This error can be found by valgrind too...

==3298==    at 0x6B99BA: ptid_equal (ptid.c:80)
==3298==    by 0x4C67FF: get_current_thread (remote.c:3484)
==3298==    by 0x4C6951: add_current_inferior_and_thread (remote.c:3511)
==3298==    by 0x4C762C: extended_remote_create_inferior (remote.c:8506)
==3298==    by 0x5A5312: run_command_1 (infcmd.c:606)
==3298==    by 0x68B4FB: execute_command (top.c:463)
==3298==    by 0x5C7214: command_handler (event-top.c:494)
==3298==    by 0x5C78A3: command_line_handler (event-top.c:692)
==3298==    by 0x6DEB57: rl_callback_read_char (callback.c:220)
==3298==    by 0x5C7278: rl_callback_read_char_wrapper (event-top.c:171)
==3298==    by 0x5C72C2: stdin_event_handler (event-top.c:432)
==3298==    by 0x5C6194: gdb_wait_for_event (event-loop.c:834)

This patch initialises local variable ptid to null in get_current_thread.
We don't need to initialise ptid in add_current_inferior_and_thread,
so this patch also removes the ptid initialisation.

gdb/ChangeLog.arm:
2016-03-29  Andre Vieira <andre.simoesdiasvieira@arm.com>
  Backport from mainline
  2015-07-17  Yao Qi  <yao.qi@linaro.org>

  * remote.c (get_current_thread): Initialise ptid to null_ptid.
  (add_current_inferior_and_thread): Don't initialise ptid.

gdb/ChangeLog.arm
gdb/remote.c

index da444fdfd46945e000f0b8e1bda208a015f31e8c..e3b32556ee735a12527f4705267b9f3cc9d7dfe8 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-29  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+    Backport from mainline
+    2015-07-17  Yao Qi  <yao.qi@linaro.org>
+    * remote.c (get_current_thread): Initialise ptid to null_ptid.
+    (add_current_inferior_and_thread): Don't initialise ptid.
 2016-02-16  Andre Vieira  <andre.simoesdiasvieira@arm.com>
     Backport from mainline
     2016-02-04  Yao Qi  <yao.qi@linaro.org>
index 2ce29323267f7db09c2ca4a9e65f1a6f1aaad996..bc6bacf040a948de89ed92375d840535a4f98b81 100644 (file)
@@ -3507,7 +3507,7 @@ stop_reply_extract_thread (char *stop_reply)
 static ptid_t
 get_current_thread (char *wait_status)
 {
-  ptid_t ptid;
+  ptid_t ptid = null_ptid;
 
   /* Note we don't use remote_parse_stop_reply as that makes use of
      the target architecture, which we haven't yet fully determined at
@@ -3536,7 +3536,7 @@ add_current_inferior_and_thread (char *wait_status)
 {
   struct remote_state *rs = get_remote_state ();
   int fake_pid_p = 0;
-  ptid_t ptid = null_ptid;
+  ptid_t ptid;
 
   inferior_ptid = null_ptid;