* remote.c (remote_notice_new_inferior): Use ptid_is_pid. Check
[deliverable/binutils-gdb.git] / gdb / remote.c
index 4173aaa54d258d7b6d727940497fc2c1ad260218..e27ad77642303368ae632b8d2463de817d321037 100644 (file)
@@ -1228,15 +1228,23 @@ remote_notice_new_inferior (ptid_t currthread, int running)
   if (!in_thread_list (currthread))
     {
       struct inferior *inf = NULL;
+      int pid = ptid_get_pid (currthread);
 
-      if (ptid_equal (pid_to_ptid (ptid_get_pid (currthread)), inferior_ptid))
+      if (ptid_is_pid (inferior_ptid)
+         && pid == ptid_get_pid (inferior_ptid))
        {
          /* inferior_ptid has no thread member yet.  This can happen
             with the vAttach -> remote_wait,"TAAthread:" path if the
             stub doesn't support qC.  This is the first stop reported
             after an attach, so this is the main thread.  Update the
             ptid in the thread list.  */
-         thread_change_ptid (inferior_ptid, currthread);
+         if (in_thread_list (pid_to_ptid (pid)))
+           thread_change_ptid (inferior_ptid, currthread);
+         else
+           {
+             remote_add_thread (currthread, running);
+             inferior_ptid = currthread;
+           }
          return;
        }
 
@@ -3484,19 +3492,34 @@ extended_remote_attach_1 (struct target_ops *target, char *args, int from_tty)
     error (_("Attaching to %s failed"),
           target_pid_to_str (pid_to_ptid (pid)));
 
+  remote_add_inferior (pid, 1);
+
   inferior_ptid = pid_to_ptid (pid);
 
-  /* Now, if we have thread information, update inferior_ptid.  */
-  inferior_ptid = remote_current_thread (inferior_ptid);
+  if (non_stop)
+    {
+      struct thread_info *thread;
 
-  remote_add_inferior (pid, 1);
+      /* Get list of threads.  */
+      remote_threads_info (target);
 
-  if (non_stop)
-    /* Get list of threads.  */
-    remote_threads_info (target);
+      thread = first_thread_of_process (pid);
+      if (thread)
+       inferior_ptid = thread->ptid;
+      else
+       inferior_ptid = pid_to_ptid (pid);
+
+      /* Invalidate our notion of the remote current thread.  */
+      record_currthread (minus_one_ptid);
+    }
   else
-    /* Add the main thread to the thread list.  */
-    add_thread_silent (inferior_ptid);
+    {
+      /* Now, if we have thread information, update inferior_ptid.  */
+      inferior_ptid = remote_current_thread (inferior_ptid);
+
+      /* Add the main thread to the thread list.  */
+      add_thread_silent (inferior_ptid);
+    }
 
   /* Next, if the target can specify a description, read it.  We do
      this before anything involving memory or registers.  */
This page took 0.025233 seconds and 4 git commands to generate.