2003-09-05 Roland McGrath <roland@redhat.com>
authorroland <roland>
Tue, 9 Sep 2003 07:00:21 +0000 (07:00 +0000)
committerroland <roland>
Tue, 9 Sep 2003 07:00:21 +0000 (07:00 +0000)
* pthread_create.c (__pthread_pthread_sizeof_descr): Removed.
Instead, include ../nptl_db/db_info.c to do its magic.
* pthread_key_create.c (__pthread_pthread_keys_max): Removed.
(__pthread_pthread_key_2ndlevel_size): Likewise.
* sysdeps/alpha/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/i386/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/ia64/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/powerpc/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/s390/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/sh/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/sparc/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/x86_64/tls.h (DB_THREAD_SELF): New macro.
* sysdeps/alpha/td_ta_map_lwp2thr.c: File removed.
* sysdeps/generic/td_ta_map_lwp2thr.c: File removed.
* sysdeps/i386/td_ta_map_lwp2thr.c: File removed.
* sysdeps/ia64/td_ta_map_lwp2thr.c: File removed.
* sysdeps/powerpc/td_ta_map_lwp2thr.c: File removed.
* sysdeps/s390/td_ta_map_lwp2thr.c: File removed.
* sysdeps/sh/td_ta_map_lwp2thr.c: File removed.
* sysdeps/sparc/td_ta_map_lwp2thr.c: File removed.
* sysdeps/x86_64/td_ta_map_lwp2thr.c: File removed.

19 files changed:
nptl/pthread_create.c
nptl/pthread_key_create.c
nptl/sysdeps/alpha/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/alpha/tls.h
nptl/sysdeps/generic/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/i386/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/i386/tls.h
nptl/sysdeps/ia64/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/ia64/tls.h
nptl/sysdeps/powerpc/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/powerpc/tls.h
nptl/sysdeps/s390/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/s390/tls.h
nptl/sysdeps/sh/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/sh/tls.h
nptl/sysdeps/sparc/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/sparc/tls.h
nptl/sysdeps/x86_64/td_ta_map_lwp2thr.c [deleted file]
nptl/sysdeps/x86_64/tls.h

index 49825f0..f8ab269 100644 (file)
@@ -60,9 +60,6 @@ struct pthread_key_struct __pthread_keys[PTHREAD_KEYS_MAX]
   __attribute__ ((nocommon));
 hidden_data_def (__pthread_keys)
 
-/* This is for libthread_db only.  */
-const int __pthread_pthread_sizeof_descr = sizeof (struct pthread);
-
 struct pthread *
 internal_function
 __find_in_stack_list (pd)
@@ -475,3 +472,7 @@ __pthread_create_2_0 (newthread, attr, start_routine, arg)
 compat_symbol (libpthread, __pthread_create_2_0, pthread_create,
               GLIBC_2_0);
 #endif
+\f
+/* Information for libthread_db.  */
+
+#include "../nptl_db/db_info.c"
index 7827d9a..cf35bc8 100644 (file)
 /* Internal mutex for __pthread_keys table handling.  */
 lll_lock_t __pthread_keys_lock = LLL_LOCK_INITIALIZER;
 
-
-/* For debugging purposes put the maximum number of keys in a variable.  */
-const int __pthread_pthread_keys_max = PTHREAD_KEYS_MAX;
-const int __pthread_pthread_key_2ndlevel_size = PTHREAD_KEY_2NDLEVEL_SIZE;
-
-
 int
 __pthread_key_create (key, destr)
      pthread_key_t *key;
diff --git a/nptl/sysdeps/alpha/td_ta_map_lwp2thr.c b/nptl/sysdeps/alpha/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index b30b10b..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Which thread is running on an LWP?  PowerPC version.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-  /* The uniq value is stored in slot 33 in recent gdb; it isn't stored
-     anywhere otherwise.  */
-  th->th_unique = ((void *) regs[32]
-                  - TLS_TCB_OFFSET - TLS_TCB_SIZE - TLS_PRE_TCB_SIZE);
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 1718b3e..8f61bb7 100644 (file)
@@ -118,6 +118,10 @@ typedef struct
     ((struct pthread *) (__builtin_thread_pointer () \
                         - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE))
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF \
+  REGISTER (64, 32 * 8, - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
+
 /* Identifier for the current thread.  THREAD_SELF is usable but
    sometimes more expensive than necessary as in this case.  */
 # define THREAD_ID (__builtin_thread_pointer ())
diff --git a/nptl/sysdeps/generic/td_ta_map_lwp2thr.c b/nptl/sysdeps/generic/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index 126673e..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Which thread is running on an LWP?  Stub version.
-   Copyright (C) 2002 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-#include <sys/reg.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-# error port this file
-  // th->th_unique = thread register;
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
diff --git a/nptl/sysdeps/i386/td_ta_map_lwp2thr.c b/nptl/sysdeps/i386/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index 94f6d34..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Which thread is running on an LWP?  i386 version.
-   Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 1999.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-#include <sys/reg.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-  /* Get the thread area for the addressed thread.  */
-  if (ps_get_thread_area (ta->ph, lwpid, regs[GS] >> 3, &th->th_unique)
-      != PS_OK)
-    return TD_ERR;     /* XXX Other error value?  */
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 85d6473..873467c 100644 (file)
@@ -251,6 +251,11 @@ union user_desc_init
          : "i" (offsetof (struct pthread, header.self)));                    \
      __self;})
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF \
+  REGISTER_THREAD_AREA (32, offsetof (struct user_regs_struct, xgs), 3) \
+  REGISTER_THREAD_AREA (64, 26 * 8, 3) /* x86-64's user_regs_struct->gs */
+
 
 /* Read member of the thread descriptor directly.  */
 # define THREAD_GETMEM(descr, member) \
diff --git a/nptl/sysdeps/ia64/td_ta_map_lwp2thr.c b/nptl/sysdeps/ia64/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index b9f32eb..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Which thread is running on an LWP?  IA-64 version.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-  /* IA-64 thread register is r13.  */
-  th->th_unique = (void *) (((struct pthread *) regs[13]) - 1);
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 8a13a59..b6b20c0 100644 (file)
@@ -113,6 +113,9 @@ register struct pthread *__thread_self __asm__("r13");
 /* Return the thread descriptor for the current thread.  */
 # define THREAD_SELF (__thread_self - 1)
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF REGISTER (64, 13 * 8, -sizeof (struct pthread))
+
 /* Access to data in the thread descriptor is easy.  */
 #define THREAD_GETMEM(descr, member) \
   descr->member
diff --git a/nptl/sysdeps/powerpc/td_ta_map_lwp2thr.c b/nptl/sysdeps/powerpc/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index d1a9368..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Which thread is running on an LWP?  PowerPC version.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-  th->th_unique = ((void *) regs[PT_THREAD_POINTER]
-                  - TLS_TCB_OFFSET - TLS_TCB_SIZE - TLS_PRE_TCB_SIZE);
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 6573bb6..0259563 100644 (file)
@@ -129,6 +129,13 @@ register void *__thread_register __asm__ ("r13");
     ((struct pthread *) (__thread_register \
                         - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE))
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF                                                              \
+  REGISTER (32, PT_THREAD_POINTER * 4,                                       \
+           - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)                              \
+  REGISTER (64, PT_THREAD_POINTER * 8,                                       \
+           - TLS_TCB_OFFSET - TLS_PRE_TCB_SIZE)
+
 /* Read member of the thread descriptor directly.  */
 # define THREAD_GETMEM(descr, member) ((void)(descr), (THREAD_SELF)->member)
 
diff --git a/nptl/sysdeps/s390/td_ta_map_lwp2thr.c b/nptl/sysdeps/s390/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index 5b0bf84..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Which thread is running on an LWP?  i386 version.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Martin Schwidefsky <schwidefsky@de.ibm.com>, 2003.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-  /* S390 thread register is ACR0, aka register 18.  */
-  th->th_unique = (void *) regs[18];
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 06237ae..7b38e33 100644 (file)
@@ -137,6 +137,9 @@ typedef struct
 /* Return the thread descriptor for the current thread.  */
 # define THREAD_SELF ((struct pthread *) __builtin_thread_pointer ())
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF REGISTER (32, 18 * 4, 0) REGISTER (64, 18 * 8, 0)
+
 /* Access to data in the thread descriptor is easy.  */
 #define THREAD_GETMEM(descr, member) \
   descr->member
diff --git a/nptl/sysdeps/sh/td_ta_map_lwp2thr.c b/nptl/sysdeps/sh/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index 7585300..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Which thread is running on an LWP?  Stub version.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-#include <sys/reg.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-  th->th_unique = regs[REG_GBR];
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 1e27b98..b6d8428 100644 (file)
@@ -117,6 +117,9 @@ typedef struct
      __asm ("stc gbr,%0" : "=r" (__self));                                   \
      __self - 1;})
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF REGISTER (32, REG_GBR * 4, 0)
+
 /* Read member of the thread descriptor directly.  */
 # define THREAD_GETMEM(descr, member) (descr->member)
 
diff --git a/nptl/sysdeps/sparc/td_ta_map_lwp2thr.c b/nptl/sysdeps/sparc/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index f120b96..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Which thread is running on an LWP?  SPARC version.
-   Copyright (C) 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  prgregset_t regs;
-  if (ps_lgetregs (ta->ph, lwpid, regs) != PS_OK)
-    return TD_ERR;
-
-  /* SPARC thread register is %g7.  */
-  th->th_unique = (void *) regs[7];
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 8725594..8c4264f 100644 (file)
@@ -104,6 +104,11 @@ register struct pthread *__thread_self __asm__("%g7");
 /* Return the thread descriptor for the current thread.  */
 #define THREAD_SELF  __thread_self
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF_INCLUDE <sys/ucontext.h>
+# define DB_THREAD_SELF \
+  REGISTER (32, REG_G7 * 4, 0) REGISTER (64, REG_G7 * 8, 0)
+
 /* Access to data in the thread descriptor is easy.  */
 #define THREAD_GETMEM(descr, member) \
   descr->member
diff --git a/nptl/sysdeps/x86_64/td_ta_map_lwp2thr.c b/nptl/sysdeps/x86_64/td_ta_map_lwp2thr.c
deleted file mode 100644 (file)
index d49d00c..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Which thread is running on an LWP?  x86-64 version.
-   Copyright (C) 1999, 2001, 2002, 2003 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@redhat.com>, 1999.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-   02111-1307 USA.  */
-
-#include "thread_dbP.h"
-#include <tls.h>
-#include <sys/reg.h>
-
-
-td_err_e
-td_ta_map_lwp2thr (const td_thragent_t *ta, lwpid_t lwpid, td_thrhandle_t *th)
-{
-  LOG ("td_ta_map_lwp2thr");
-
-  /* Test whether the TA parameter is ok.  */
-  if (! ta_ok (ta))
-    return TD_BADTA;
-
-  /* Get the %fs segment register base address for the addressed thread.  */
-  if (ps_get_thread_area (ta->ph, lwpid, FS, &th->th_unique) != PS_OK)
-    return TD_ERR;     /* XXX Other error value?  */
-
-  /* Found it.  Now complete the `td_thrhandle_t' object.  */
-  th->th_ta_p = (td_thragent_t *) ta;
-
-  return TD_OK;
-}
index 999c3aa..3d6111f 100644 (file)
@@ -161,6 +161,9 @@ typedef struct
          : "i" (offsetof (struct pthread, header.self)));                    \
      __self;})
 
+/* Magic for libthread_db to know how to do THREAD_SELF.  */
+# define DB_THREAD_SELF_INCLUDE  <sys/reg.h> /* For the FS constant.  */
+# define DB_THREAD_SELF CONST_THREAD_AREA (64, FS)
 
 /* Read member of the thread descriptor directly.  */
 # define THREAD_GETMEM(descr, member) \