Redefine ptid_t to be a struct rather than an int.
authorKevin Buettner <kevinb@redhat.com>
Tue, 15 May 2001 00:03:38 +0000 (00:03 +0000)
committerKevin Buettner <kevinb@redhat.com>
Tue, 15 May 2001 00:03:38 +0000 (00:03 +0000)
18 files changed:
gdb/ChangeLog
gdb/arm-linux-nat.c
gdb/config/i386/tm-i386sol2.h
gdb/config/i386/tm-i386v42mp.h
gdb/config/nm-linux.h
gdb/config/sparc/tm-sun4sol2.h
gdb/corelow.c
gdb/defs.h
gdb/i386-linux-nat.c
gdb/inferior.h
gdb/infptrace.c
gdb/infrun.c
gdb/lin-lwp.c
gdb/lin-thread.c
gdb/proc-service.c
gdb/procfs.c
gdb/sol-thread.c
gdb/thread-db.c

index e1088e13efe046f93480ea8d2e879d8734aeb156..8e3a4fcf33ed426cf36334cb2197af7a5b6c7b0c 100644 (file)
@@ -1,3 +1,70 @@
+2001-05-14  Kevin Buettner  <kevinb@redhat.com>
+
+       * inferior.h (null_ptid, minus_one_ptid): New variable declarations.
+       (ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp)
+       (ptid_get_tid, ptid_equal): New function declarations.
+       * infrun.c (null_ptid, minus_one_ptid): New variables.
+       (ptid_build, pid_to_ptid, ptid_get_pid, ptid_get_lwp)
+       (ptid_get_tid, ptid_equal): New functions.
+       (_initialize_infrun): Initialize null_ptid, minus_one_ptid,
+       inferior_ptid, and target_last_wait_ptid.
+
+       * defs.h (ptid_t): Redefine to be a struct rather than an int.
+       (pid_to_ptid, null_ptid, ptid_equal): Delete these macros.
+       (PIDGET, TIDGET, MERGEPID): Redefine these macros using the
+       new ptid accessors and constructor.
+
+       * config/i386/tm-i386v42mp.h (PIDGET, TIDGET, LIDGET, MERGEPID,
+       MKLID, MKTID, ISTID): Provide new definitions for these macros.
+       The old macros are retained, but disabled via #if 0 in order
+       to aid in future restructuring.  See FIXME.
+
+       * arm-linux-nat.c (PIDGET, TIDGET): Delete macro definitions.
+       * i386-linux-nat.c (PIDGET, TIDGET): Likewise.
+       * infptrace.c (PIDGET, TIDGET): Likewise.
+       * lin-lwp.c (PIDGET0, PIDGET, TIDGET, MERGEPID): Likewise.
+       * lin-thread.c (PIDGET0, PIDGET, TIDGET, MERGEPID): Likewise.
+       * proc-service.c (MERGEPID): Likewise.
+       * procfs.c (PIDGET, TIDGET, MERGEPID): Likewise.
+       * thread-db.c (PIDGET0, PIDGET, TIDGET, MERGEPID): Likewise.
+       * config/nm-linux.h (PIDGET0, PIDGET, TIDGET, MERGEPID): Likewise.
+       * config/i386/tm-i386sol2.h (PIDGET0, PIDGET, TIDGET, MERGEPID):
+       Likewise.
+       * config/sparc/tm-sun4sol2.h (PIDGET0, PIDGET, TIDGET, MERGEPID):
+       Likewise.
+
+       * lin-lwp.c (THREAD_FLAG): Delete macro definition.
+       (GET_LWP): Redefine in terms of ptid_get_lwp().
+       (GET_PID): Redefine in terms of ptid_get_pid().
+       (is_lwp): Redefine without the need for THREAD_FLAG.
+       (BUILD_LWP): Redefine in terms of ptid_build().
+       * lin-thread.c (THREAD_FLAG): Delete macro definition.
+       (GET_LWP): Redefine in terms of ptid_get_lwp().
+       (GET_PID): Redefine in terms of ptid_get_pid().
+       (GET_THREAD): Redefine in terms of ptid_get_tid().
+       (BUILD_THREAD, BUILD_LWP): Redefine in terms of ptid_build().
+       (is_lwp, is_thread): Redefine.
+       (linux_child_wait, check_all_signal_numbers)
+       (linuxthreads_discard_global_state, attach_thread): Declare these
+       functions to squash warnings about missing declarations.
+       * sol-thread.c (THREAD_FLAG): Delete macro definition.
+       (GET_PID): Redefine in terms of ptid_get_pid().
+       (GET_LWP): Redefine in terms of ptid_get_lwp().
+       (GET_THREAD): Redefine in terms of ptid_get_tid().
+       (BUILD_THREAD, BUILD_LWP): Redefine in terms of ptid_build().
+       (is_lwp, is_thread): Redefine.
+       * thread-db.c (THREAD_FLAG): Delete macro definition.
+       (GET_PID): Redefine in terms of ptid_get_pid().
+       (GET_LWP): Redefine in terms of ptid_get_lwp().
+       (GET_THREAD): Redefine in terms of ptid_get_tid().
+       (BUILD_THREAD, BUILD_LWP): Redefine in terms of ptid_build().
+       (is_lwp, is_thread): Redefine.
+
+       * corelow.c (add_to_thread_list, get_core_register_section):
+       Eliminate hacks needed to prevent regressions when inferior_ptid
+       wasn't wide enough to hold the core file thread id in the pid
+       component of inferior_ptid.
+
 2001-05-14  Michael Snyder  <msnyder@redhat.com>
 
        * remote.c (hex2bin):   Make first argument const.
index 96c78342d10a0514806f55da7c492e19b9afb51c..50368b7adc2fab6f9190ba26628a7463272dbbd1 100644 (file)
@@ -79,14 +79,8 @@ static unsigned int os_version, os_major, os_minor, os_release;
 /* On Linux, threads are implemented as pseudo-processes, in which
    case we may be tracing more than one process at a time.  In that
    case, inferior_ptid will contain the main process ID and the
-   individual thread (process) ID mashed together.  These macros are
-   used to separate them out.  These definitions should be overridden
-   if thread support is included.  */
-
-#if !defined (PIDGET)  /* Default definition for PIDGET/TIDGET.  */
-#define PIDGET(PID)    PID
-#define TIDGET(PID)    0
-#endif
+   individual thread (process) ID.  get_thread_id () is used to
+   get the thread id if it's available, and the process id otherwise. */
 
 int
 get_thread_id (ptid_t ptid)
index f3ebcd91aef1c838d8bb01c407eaadb55224b1f1..bc2a5f8b8109e24cf49c9d0d53d1b057cd3c7c23 100644 (file)
@@ -51,12 +51,4 @@ extern char *sunpro_static_transform_name (char *);
 
 #define FAULTED_USE_SIGINFO
 
-/* Macros to extract process id and thread id from a composite pid/tid.
-   Allocate lower 16 bits for process id, next 15 bits for thread id, and
-   one bit for a flag to indicate a user thread vs. a kernel thread.  */
-#define PIDGET0(PID)           (((PID) & 0xffff))
-#define PIDGET(PID)            ((PIDGET0 (PID) == 0xffff) ? -1 : PIDGET0 (PID))
-#define TIDGET(PID)            (((PID) & 0x7fffffff) >> 16)
-#define MERGEPID(PID, TID)     (((PID) & 0xffff) | ((TID) << 16))
-
 #endif /* ifndef TM_I386SOL2_H */
index e70bc4d424dcab9fcd7d0989314e617661f98101..5671e42944c06aeb93b0f106b1229701fa78f6a7 100644 (file)
@@ -30,6 +30,7 @@
 
 #define UNIXWARE
 
+#if 0
 /* The following macros extract process and lwp/thread ids from a
    composite id.
 
@@ -43,8 +44,7 @@
 #define PIDBITS 16
 
 /* Return the process id stored in composite PID. */
-#define PIDGET0(PID)            (((PID) & ((1 << PIDBITS) - 1)))
-#define PIDGET(PID)             ((PIDGET0 (PID) == ((1 << PIDBITS) -1)) ? -1 : PIDGET0 (PID))
+#define PIDGET(PID)             (((PID) & ((1 << PIDBITS) - 1)))
 
 /* Return the thread or lwp id stored in composite PID. */
 #define TIDGET(PID)             (((PID) & 0x3fffffff) >> PIDBITS)
 
 /* Return whether PID contains a user-space thread id. */
 #define ISTID(PID)              ((PID) & 0x40000000)
+#endif
+
+/* New definitions of the ptid stuff.  Due to the way the
+   code is structured in uw-thread.c, I'm overloading the thread id
+   and lwp id onto the lwp field.  The tid field is used to indicate
+   whether the lwp is a tid or not.  
+   
+   FIXME: Check that core file support is not broken.  (See original
+   #if 0'd comments above.)
+   FIXME: Restructure uw-thread.c so that the struct ptid fields
+   can be used as intended. */
+
+/* Return the process id stored in composite PID. */
+#define PIDGET(PID) (ptid_get_pid (PID))
+
+/* Return the thread or lwp id stored in composite PID. */
+#define TIDGET(PID) (ptid_get_lwp (PID))
+#define LIDGET(PID) TIDGET(PID)
+
+#define MERGEPID(PID, LID) (ptid_build ((PID), (LID), 0))
+#define MKLID(PID, LID) (ptid_build ((PID), (LID), 0))
+
+/* Construct a composite id from thread TID and the process portion of
+   composite PID. */
+#define MKTID(PID, TID) (ptid_build ((PID), (TID), 1))
+
+/* Return whether PID contains a user-space thread id. */
+#define ISTID(PID) (ptid_get_tid (PID))
 
 #endif /* ifndef TM_I386V42MP_H */
index 19d685776f6ee5d94454eba3354fc88395e5fe63..f1e785c95e73211dd519ea55b5d08a1b17f1d5c4 100644 (file)
@@ -49,14 +49,6 @@ extern int linuxthreads_prepare_to_proceed (int step);
 /* Defined to make stepping-over-breakpoints be thread-atomic.  */
 #define USE_THREAD_STEP_NEEDED 1
 
-/* Macros to extract process id and thread id from a composite pid/tid.
-   Allocate lower 19 bits for process id, next 12 bits for thread id, and
-   one bit for a flag to indicate a user thread vs. a kernel thread.  */
-#define PIDGET0(PID)           (((PID) & 0xffff))
-#define PIDGET(PID)           ((PIDGET0 (PID) == 0xffff) ? -1 : PIDGET0 (PID))
-#define TIDGET(PID)           (((PID) & 0x7fffffff) >> 16)
-#define MERGEPID(PID, TID)    (((PID) & 0xffff) | ((TID) << 16))
-
 /* Use elf_gregset_t and elf_fpregset_t, rather than
    gregset_t and fpregset_t.  */
 
index 09f36bbd6f1e7f649ca98f100220d27d2253a399..f9b739cc69b83a40552987148dda1d0c32731518 100644 (file)
@@ -80,9 +80,3 @@ extern char *sunpro_static_transform_name (char *);
 
 /* Enable handling of shared libraries for a.out executables.  */
 #define HANDLE_SVR4_EXEC_EMULATORS
-
-/* Macros to extract process id and thread id from a composite pid/tid */
-#define PIDGET0(PID)           (((PID) & 0xffff))
-#define PIDGET(PID)            ((PIDGET0 (PID) == 0xffff) ? -1 : PIDGET0 (PID))
-#define TIDGET(PID)            (((PID) & 0x7fffffff) >> 16)
-#define MERGEPID(PID, TID)     (((PID) & 0xffff) | ((TID) << 16))
index e0a4b6a727410cd4bdc9fc0d308ed868ae8196d7..5d8d3ceb9721e7ed7ffac5468663c243eeb3c20f 100644 (file)
@@ -248,14 +248,7 @@ add_to_thread_list (bfd *abfd, asection *asect, PTR reg_sect_arg)
 
   if (reg_sect != NULL
       && asect->filepos == reg_sect->filepos)  /* Did we find .reg? */
-#ifdef pid_to_ptid
-    /* Needed to prevent regressions in ptid conversion phase 1.  This
-       bit of code will be deleted in favor of the #else branch in
-       phase 3.  */
-    inferior_ptid = thread_id; /* Yes, make it current */
-#else
     inferior_ptid = pid_to_ptid (thread_id);   /* Yes, make it current */
-#endif
 }
 
 /* This routine opens and sets up the core file bfd.  */
@@ -413,16 +406,8 @@ get_core_register_section (char *name,
   bfd_size_type size;
   char *contents;
 
-#ifdef pid_to_ptid
-    /* Needed to prevent regressions in ptid conversion phase 1.  This
-       bit of code will be deleted in favor of the #else branch in
-       phase 3.  */
-  if (inferior_ptid)
-    sprintf (section_name, "%s/%d", name, inferior_ptid);
-#else
   if (PIDGET (inferior_ptid))
     sprintf (section_name, "%s/%d", name, PIDGET (inferior_ptid));
-#endif
   else
     strcpy (section_name, name);
 
index 166dde8947138a70419626b7838a7ff786a81b2c..435e47b32ac128cf3cbb6a349bcdc1c89d3873d5 100644 (file)
@@ -844,36 +844,37 @@ enum val_prettyprint
     Val_pretty_default
   };
 
-/* A collection of the various "ids" necessary for identifying
-   the inferior.  This consists of the process id (pid, thread
-   id (tid), and other fields necessary for uniquely identifying
-   the inferior process/thread being debugged.
-
-   The present typedef is obviously quite naive with respect to
-   the magnitudes that real life pids and tids can take on and
-   will be replaced with something more robust shortly.  */
-
-typedef int ptid_t;
-
-/* Convert a pid to a ptid_t.  This macro is temporary and will
-   be replaced shortly.  */
-
-#define pid_to_ptid(PID) ((ptid_t) MERGEPID ((PID),0))
-
-/* Define a value for the null (or zero) pid.  This macro is temporary
-   and will go away shortly.  */
-
-#define null_ptid (pid_to_ptid (0))
-
-/* Define a value for the -1 pid.  This macro is temporary and will go
-   away shortly.  */
+/* The ptid struct is a collection of the various "ids" necessary
+   for identifying the inferior.  This consists of the process id
+   (pid), thread id (tid), and other fields necessary for uniquely
+   identifying the inferior process/thread being debugged.  When
+   manipulating ptids, the constructors, accessors, and predicate
+   declared in inferior.h should be used.  These are as follows:
+
+      ptid_build       - Make a new ptid from a pid, lwp, and tid.
+      pid_to_ptid      - Make a new ptid from just a pid.
+      ptid_get_pid     - Fetch the pid component of a ptid.
+      ptid_get_lwp     - Fetch the lwp component of a ptid.
+      ptid_get_tid     - Fetch the tid component of a ptid.
+      ptid_equal       - Test to see if two ptids are equal.
+
+   Please do NOT access the struct ptid members directly (except, of
+   course, in the implementation of the above ptid manipulation
+   functions).  */
+
+struct ptid
+  {
+    /* Process id */
+    int pid;
 
-#define minus_one_ptid (pid_to_ptid (-1))
+    /* Lightweight process id */
+    long lwp;
 
-/* Define a ptid comparison operator.  This macro is temporary and will
-   be replaced with a real function shortly.  */
+    /* Thread id */
+    long tid;
+  };
 
-#define ptid_equal(PTID1,PTID2) ((PTID1) == (PTID2))
+typedef struct ptid ptid_t;
 
 \f
 
@@ -1391,15 +1392,16 @@ extern int use_windows;
 #define ROOTED_P(X) (SLASH_P((X)[0]))
 #endif
 
-/* On some systems, PIDGET is defined to extract the inferior pid from
-   an internal pid that has the thread id and pid in seperate bit
-   fields.  If not defined, then just use the entire internal pid as
-   the actual pid. */
+/* Provide default definitions of PIDGET, TIDGET, and MERGEPID.
+   The name ``TIDGET'' is a historical accident.  Many uses of TIDGET
+   in the code actually refer to a lightweight process id, i.e,
+   something that can be considered a process id in its own right for
+   certain purposes.  */
 
 #ifndef PIDGET
-#define PIDGET(PID) (PID)
-#define TIDGET(PID) 0
-#define MERGEPID(PID, TID) (PID)
+#define PIDGET(PTID) (ptid_get_pid (PTID))
+#define TIDGET(PTID) (ptid_get_lwp (PTID))
+#define MERGEPID(PID, TID) ptid_build (PID, TID, 0)
 #endif
 
 /* Define well known filenos if the system does not define them.  */
index eb222fdbcff7cf05e74809eca697123591e970f5..94d9ab393bd16a0967e6924f14d821188d8131dc 100644 (file)
 /* Prototypes for local functions.  */
 static void dummy_sse_values (void);
 
-/* On Linux, threads are implemented as pseudo-processes, in which
-   case we may be tracing more than one process at a time.  In that
-   case, inferior_ptid will contain the main process ID and the
-   individual thread (process) ID mashed together.  These macros are
-   used to separate them out.  These definitions should be overridden
-   if thread support is included.  */
-
-#if !defined (PIDGET)  /* Default definition for PIDGET/TIDGET.  */
-#define PIDGET(PID)    PID
-#define TIDGET(PID)    0
-#endif
 \f
 
 /* The register sets used in Linux ELF core-dumps are identical to the
index 91741975941db2152541903a274aa33808f40039..502d3efbcc9d3dc4f0f843fd33b2d1baa0ff1fbd 100644 (file)
@@ -51,6 +51,33 @@ extern void write_inferior_status_register (struct inferior_status
                                            *inf_status, int regno,
                                            LONGEST val);
 
+/* The -1 ptid, often used to indicate either an error condition
+   or a "don't care" condition, i.e, "run all threads."  */
+extern ptid_t minus_one_ptid;
+
+/* The null or zero ptid, often used to indicate no process. */
+extern ptid_t null_ptid;
+
+/* Attempt to find and return an existing ptid with the given PID, LWP,
+   and TID components.  If none exists, create a new one and return
+   that.  */
+ptid_t ptid_build (int pid, long lwp, long tid);
+
+/* Find/Create a ptid from just a pid. */
+ptid_t pid_to_ptid (int pid);
+
+/* Fetch the pid (process id) component from a ptid. */
+int ptid_get_pid (ptid_t ptid);
+
+/* Fetch the lwp (lightweight process) component from a ptid. */
+long ptid_get_lwp (ptid_t ptid);
+
+/* Fetch the tid (thread id) component from a ptid. */
+long ptid_get_tid (ptid_t ptid);
+
+/* Compare two ptids to see if they are equal */
+extern int ptid_equal (ptid_t p1, ptid_t p2);
+
 /* Save value of inferior_ptid so that it may be restored by
    a later call to do_cleanups().  Returns the struct cleanup
    pointer needed for later doing the cleanup.  */
index d9eee366ccdc9b0f14d0c38e7150fab5d7b06018..3be361495f84a122cb2c9250106bdeed09bd50d7 100644 (file)
@@ -110,22 +110,6 @@ static void fetch_register (int);
 static void store_register (int);
 #endif
 
-/*
- * Some systems (Linux) may have threads implemented as pseudo-processes, 
- * in which case we may be tracing more than one process at a time.
- * In that case, inferior_pid will contain the main process ID and the 
- * individual thread (process) id mashed together.  These macros are 
- * used to separate them out.  The definitions may be overridden in tm.h
- *
- * NOTE: default definitions here are for systems with no threads.
- * Useful definitions MUST be provided in tm.h
- */
-
-#if !defined (PIDGET)  /* Default definition for PIDGET/TIDGET.  */
-#define PIDGET(PID)    PID
-#define TIDGET(PID)    0
-#endif
-
 void _initialize_kernel_u_addr (void);
 void _initialize_infptrace (void);
 \f
index 21d07f27759f083b306bcbf7f3c0bbf8af13a7a9..824b610cec8012243d1e843c6a13d15617c37b82 100644 (file)
@@ -4192,7 +4192,67 @@ discard_inferior_status (struct inferior_status *inf_status)
   free_inferior_status (inf_status);
 }
 
-/* Helper function for save_inferior_ptid */
+/* Oft used ptids */
+ptid_t null_ptid;
+ptid_t minus_one_ptid;
+
+/* Create a ptid given the necessary PID, LWP, and TID components.  */
+   
+ptid_t
+ptid_build (int pid, long lwp, long tid)
+{
+  ptid_t ptid;
+
+  ptid.pid = pid;
+  ptid.lwp = lwp;
+  ptid.tid = tid;
+  return ptid;
+}
+
+/* Create a ptid from just a pid.  */
+
+ptid_t
+pid_to_ptid (int pid)
+{
+  return ptid_build (pid, 0, 0);
+}
+
+/* Fetch the pid (process id) component from a ptid.  */
+
+int
+ptid_get_pid (ptid_t ptid)
+{
+  return ptid.pid;
+}
+
+/* Fetch the lwp (lightweight process) component from a ptid.  */
+
+long
+ptid_get_lwp (ptid_t ptid)
+{
+  return ptid.lwp;
+}
+
+/* Fetch the tid (thread id) component from a ptid.  */
+
+long
+ptid_get_tid (ptid_t ptid)
+{
+  return ptid.tid;
+}
+
+/* ptid_equal() is used to test equality of two ptids.  */
+
+int
+ptid_equal (ptid_t ptid1, ptid_t ptid2)
+{
+  return (ptid1.pid == ptid2.pid && ptid1.lwp == ptid2.lwp
+          && ptid1.tid == ptid2.tid);
+}
+
+/* restore_inferior_ptid() will be used by the cleanup machinery
+   to restore the inferior_ptid value saved in a call to
+   save_inferior_ptid().  */
 
 static void
 restore_inferior_ptid (void *arg)
@@ -4400,4 +4460,10 @@ instruction of that function. Otherwise, the function is skipped and\n\
 the step command stops at a different source line.",
                        &setlist);
   add_show_from_set (c, &showlist);
+
+  /* ptid initializations */
+  null_ptid = ptid_build (0, 0, 0);
+  minus_one_ptid = ptid_build (-1, 0, 0);
+  inferior_ptid = null_ptid;
+  target_last_wait_ptid = minus_one_ptid;
 }
index 055ace708524d72c7392269eeeb0c34a81daa8ef..650333109d55ba0a2d2d6d5562312a9c4c073964 100644 (file)
@@ -102,18 +102,10 @@ static int num_lwps;
 static int threaded;
 \f
 
-#ifndef TIDGET
-#define TIDGET(PID)            (((PID) & 0x7fffffff) >> 16)
-#define PIDGET0(PID)           (((PID) & 0xffff))
-#define PIDGET(PID)            ((PIDGET0 (PID) == 0xffff) ? -1 : PIDGET0 (PID))
-#define MERGEPID(PID, TID)     (((PID) & 0xffff) | ((TID) << 16))
-#endif
-
-#define THREAD_FLAG            0x80000000
-#define is_lwp(pid)            (((pid) & THREAD_FLAG) == 0 && TIDGET (pid))
-#define GET_LWP(pid)           TIDGET (pid)
-#define GET_PID(pid)           PIDGET (pid)
-#define BUILD_LWP(tid, pid)    MERGEPID (pid, tid)
+#define GET_LWP(ptid)          ptid_get_lwp (ptid)
+#define GET_PID(ptid)          ptid_get_pid (ptid)
+#define is_lwp(ptid)           (GET_LWP (ptid) != 0)
+#define BUILD_LWP(lwp, pid)    ptid_build (pid, lwp, 0)
 
 #define is_cloned(pid) (GET_LWP (pid) != GET_PID (pid))
 
index 4e1ae7a2e2fa5799208c4a12de33f0232cbb5a4f..a14af7b075b6c1301fd1ec5f74473e42af00df21 100644 (file)
 /* Prototypes for supply_gregset etc. */
 #include "gregset.h"
 
-#ifndef TIDGET
-#define TIDGET(PID)            (((PID) & 0x7fffffff) >> 16)
-#define PIDGET0(PID)           (((PID) & 0xffff))
-#define PIDGET(PID)            ((PIDGET0 (PID) == 0xffff) ? -1 : PIDGET0 (PID))
-#define MERGEPID(PID, TID)     (((PID) & 0xffff) | ((TID) << 16))
-#endif
-
 /* Macros for superimposing PID and TID into inferior_ptid.  */
-#define THREAD_FLAG            0x80000000
-#define is_thread(ARG)         (((ARG) & THREAD_FLAG) != 0)
-#define is_lwp(ARG)            (((ARG) & THREAD_FLAG) == 0)
-#define GET_LWP(PID)           TIDGET (PID)
-#define GET_THREAD(PID)                TIDGET (PID)
-#define BUILD_LWP(TID, PID)    MERGEPID (PID, TID)
-#define BUILD_THREAD(TID, PID) (MERGEPID (PID, TID) | THREAD_FLAG)
+#define GET_PID(ptid)          ptid_get_pid (ptid)
+#define GET_LWP(ptid)          ptid_get_lwp (ptid)
+#define GET_THREAD(ptid)       ptid_get_tid (ptid)
+
+#define is_lwp(ptid)           (GET_LWP (ptid) != 0)
+#define is_thread(ptid)                (GET_THREAD (ptid) != 0)
+
+#define BUILD_LWP(lwp, pid)    ptid_build (pid, lwp, 0)
+#define BUILD_THREAD(tid, pid) ptid_build (pid, 0, tid)
+
+/* From linux-thread.c.  FIXME: These should go in a separate header
+   file, but I'm told that the life expectancy of lin-thread.c and
+   linux-thread.c isn't very long... */
+
+extern int linux_child_wait (int, int *, int *);
+extern void check_all_signal_numbers (void);
+extern void linuxthreads_discard_global_state (void);
+extern void attach_thread (int);
 
 /*
  * target_beneath is a pointer to the target_ops underlying this one.
index 37ab1bd7dad9deb64e2fdc67a0ea3c9ec2fb9785..c13929cc4231d92cacc51901d1d475a90d63e355 100644 (file)
@@ -51,10 +51,6 @@ typedef size_t gdb_ps_size_t;
 
 /* Building process ids.  */
 
-#ifndef MERGEPID
-#define MERGEPID(PID, TID)     (((PID) & 0xffff) | ((TID) << 16))
-#endif
-
 #define BUILD_LWP(tid, pid)    MERGEPID (pid, tid)
 \f
 
index 53f04896035190a0298b5e683145c76f214160e3..5a91ed887fe853a596612ed6227c819568604441 100644 (file)
@@ -315,18 +315,6 @@ typedef prstatus_t gdb_prstatus_t;
 typedef prstatus_t gdb_lwpstatus_t;
 #endif /* NEW_PROC_API */
 
-
-/* Provide default composite pid manipulation macros for systems that
-   don't have threads. */
-
-#ifndef PIDGET
-#define PIDGET(PID)            (PID)
-#define TIDGET(PID)            (PID)
-#endif
-#ifndef MERGEPID
-#define MERGEPID(PID, TID)     (PID)
-#endif
-
 typedef struct procinfo {
   struct procinfo *next;
   int pid;                     /* Process ID    */
index cf8f33c984361ec73edf973cbb4eb0ef01534be3..f92c49e4b3f8f53b0d2018b4127b412d5bf2765b 100644 (file)
@@ -111,14 +111,15 @@ static void init_sol_core_ops (void);
 /* Default definitions: These must be defined in tm.h 
    if they are to be shared with a process module such as procfs.  */
 
-#define THREAD_FLAG            0x80000000
-#define is_thread(ARG)         (((ARG) & THREAD_FLAG) != 0)
-#define is_lwp(ARG)            (((ARG) & THREAD_FLAG) == 0)
-#define GET_LWP(PID)           TIDGET (PID)
-#define GET_THREAD(PID)                TIDGET (PID)
-#define BUILD_LWP(TID, PID)    MERGEPID (PID, TID)
-
-#define BUILD_THREAD(TID, PID) (MERGEPID (PID, TID) | THREAD_FLAG)
+#define GET_PID(ptid)          ptid_get_pid (ptid)
+#define GET_LWP(ptid)          ptid_get_lwp (ptid)
+#define GET_THREAD(ptid)       ptid_get_tid (ptid)
+
+#define is_lwp(ptid)           (GET_LWP (ptid) != 0)
+#define is_thread(ptid)                (GET_THREAD (ptid) != 0)
+
+#define BUILD_LWP(lwp, pid)    ptid_build (pid, lwp, 0)
+#define BUILD_THREAD(tid, pid) ptid_build (pid, 0, tid)
 
 /* Pointers to routines from lithread_db resolved by dlopen() */
 
index 2c2672ae52a183e5d9af75967ba130cb4d50770b..a54f9fb6ed34f49183f7c282766015481d6416f4 100644 (file)
@@ -123,24 +123,17 @@ static void thread_db_find_new_threads (void);
 
 /* Building process ids.  */
 
-#ifndef TIDGET
-#define TIDGET(PID)            (((PID) & 0x7fffffff) >> 16)
-#define PIDGET0(PID)           (((PID) & 0xffff))
-#define PIDGET(PID)            ((PIDGET0 (PID) == 0xffff) ? -1 : PIDGET0 (PID))
-#define MERGEPID(PID, TID)     (((PID) & 0xffff) | ((TID) << 16))
-#endif
 
-#define THREAD_FLAG            0x80000000
+#define GET_PID(ptid)          ptid_get_pid (ptid)
+#define GET_LWP(ptid)          ptid_get_lwp (ptid)
+#define GET_THREAD(ptid)       ptid_get_tid (ptid)
 
-#define is_lwp(pid)            (((pid) & THREAD_FLAG) == 0 && TIDGET (pid))
-#define is_thread(pid)         ((pid) & THREAD_FLAG)
+#define is_lwp(ptid)           (GET_LWP (ptid) != 0)
+#define is_thread(ptid)                (GET_THREAD (ptid) != 0)
 
-#define GET_PID(pid)           PIDGET (pid)
-#define GET_LWP(pid)           TIDGET (pid)
-#define GET_THREAD(pid)                TIDGET (pid)
+#define BUILD_LWP(lwp, pid)    ptid_build (pid, lwp, 0)
+#define BUILD_THREAD(tid, pid) ptid_build (pid, 0, tid)
 
-#define BUILD_LWP(tid, pid)    MERGEPID (pid, tid)
-#define BUILD_THREAD(tid, pid) (MERGEPID (pid, tid) | THREAD_FLAG)
 \f
 
 struct private_thread_info