* inf-ptrace.c: Include "gdbthread.h".
authorPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:25:05 +0000 (21:25 +0000)
committerPedro Alves <palves@redhat.com>
Mon, 8 Sep 2008 21:25:05 +0000 (21:25 +0000)
(inf_ptrace_attach): Add the main thread here.
* linux-nat.c (linux_nat_attach): Don't add the main thread here.
Decorate the main thread id with the lwp id.

gdb/ChangeLog
gdb/inf-ptrace.c
gdb/linux-nat.c

index 3f73fe1e46b68e9ec5707443297019c33ab7ffaf..22bd2b284b23204a7fe10ea3e34284d2d2a6ac12 100644 (file)
@@ -1,3 +1,10 @@
+2008-09-08  Pedro Alves  <pedro@codesourcery.com>
+
+       * inf-ptrace.c: Include "gdbthread.h".
+       (inf_ptrace_attach): Add the main thread here.
+       * linux-nat.c (linux_nat_attach): Don't add the main thread here.
+       Decorate the main thread id with the lwp id.
+
 2008-09-08  Pedro Alves  <pedro@codesourcery.com>
 
        * linux-nat.c (linux_nat_wait): Update inferior_ptid's ptid with
index ee2c8fa397daab5705c73553e0915dc10ea9311b..6899be0bc858e089824460971958f0c3ad6a661f 100644 (file)
@@ -33,6 +33,7 @@
 #include <signal.h>
 
 #include "inf-child.h"
+#include "gdbthread.h"
 
 /* HACK: Save the ptrace ops returned by inf_ptrace_target.  */
 static struct target_ops *ptrace_ops_hack;
@@ -218,6 +219,11 @@ inf_ptrace_attach (char *args, int from_tty)
 #endif
 
   inferior_ptid = pid_to_ptid (pid);
+
+  /* Always add a main thread.  If some target extends the ptrace
+     target, it should decorate the ptid later with more info.  */
+  add_thread_silent (inferior_ptid);
+
   push_target (ptrace_ops_hack);
 }
 
index fe78c258bdb9a7c167fc3902f11c77f7b74bba93..8ba6ea982f9ab0a88f66faaf9f96d8ede3313ace 100644 (file)
@@ -1345,6 +1345,7 @@ linux_nat_attach (char *args, int from_tty)
 {
   struct lwp_info *lp;
   int status;
+  ptid_t ptid;
 
   /* FIXME: We should probably accept a list of process id's, and
      attach all of them.  */
@@ -1359,18 +1360,18 @@ linux_nat_attach (char *args, int from_tty)
       sigdelset (&suspend_mask, SIGCHLD);
     }
 
+  /* The ptrace base target adds the main thread with (pid,0,0)
+     format.  Decorate it with lwp info.  */
+  ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
+  thread_change_ptid (inferior_ptid, ptid);
+
   /* Add the initial process as the first LWP to the list.  */
-  inferior_ptid = BUILD_LWP (GET_PID (inferior_ptid), GET_PID (inferior_ptid));
-  lp = add_lwp (inferior_ptid);
+  lp = add_lwp (ptid);
 
   status = linux_nat_post_attach_wait (lp->ptid, 1, &lp->cloned,
                                       &lp->signalled);
   lp->stopped = 1;
 
-  /* If this process is not using thread_db, then we still don't
-     detect any other threads, but add at least this one.  */
-  add_thread_silent (lp->ptid);
-
   /* Save the wait status to report later.  */
   lp->resumed = 1;
   if (debug_linux_nat)