public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [commit/hpux] delete hpux_pid_to_str (unused)
@ 2011-01-14  0:34 Joel Brobecker
  2011-01-14 12:30 ` Mark Kettenis
  0 siblings, 1 reply; 6+ messages in thread
From: Joel Brobecker @ 2011-01-14  0:34 UTC (permalink / raw)
  To: gdb-patches; +Cc: Joel Brobecker

This is something that Tom noticed, and told me about by email.

This function is unused, and the default formatting routine does
just fine, I think.   On pa-hpux:

        [New process 12565, lwp 2513]
        [New process 12565, lwp 2514]

So this patch deletes it.

gdb/ChangeLog:

        * hpux-thread.c (hpux_pid_to_str): Delete.

Checked in.

---
 gdb/ChangeLog     |    4 ++++
 gdb/hpux-thread.c |   13 -------------
 2 files changed, 4 insertions(+), 13 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3490da1..292ce00 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,9 @@
 2011-01-13  Joel Brobecker  <brobecker@adacore.com>
 
+	* hpux-thread.c (hpux_pid_to_str): Delete.
+
+2011-01-13  Joel Brobecker  <brobecker@adacore.com>
+
 	* ada-valprint.c (ada_emit_char): Remove strange code.
 	Check that c is <= UCHAR_MAX before passing it to isascii.
 	(char_at): Do not assume that TYPE_LEN is either 1 or 2.
diff --git a/gdb/hpux-thread.c b/gdb/hpux-thread.c
index 478b3db..a747ab5 100644
--- a/gdb/hpux-thread.c
+++ b/gdb/hpux-thread.c
@@ -522,19 +522,6 @@ hpux_thread_stop (ptid_t ptid)
   deprecated_child_ops.to_stop (ptid);
 }
 \f
-/* Convert a pid to printable form.  */
-
-char *
-hpux_pid_to_str (ptid_t ptid)
-{
-  static char buf[100];
-  int pid = PIDGET (ptid);
-
-  sprintf (buf, "Thread %ld", ptid_get_tid (ptid));
-
-  return buf;
-}
-\f
 static void
 init_hpux_thread_ops (void)
 {
-- 
1.7.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [commit/hpux] delete hpux_pid_to_str (unused)
  2011-01-14  0:34 [commit/hpux] delete hpux_pid_to_str (unused) Joel Brobecker
@ 2011-01-14 12:30 ` Mark Kettenis
  2011-01-14 12:38   ` Pedro Alves
  0 siblings, 1 reply; 6+ messages in thread
From: Mark Kettenis @ 2011-01-14 12:30 UTC (permalink / raw)
  To: brobecker; +Cc: gdb-patches, brobecker

> From: Joel Brobecker <brobecker@adacore.com>
> Date: Thu, 13 Jan 2011 19:02:08 -0500
> 
> This is something that Tom noticed, and told me about by email.
> 
> This function is unused, and the default formatting routine does
> just fine, I think.   On pa-hpux:
> 
>         [New process 12565, lwp 2513]
>         [New process 12565, lwp 2514]

Hmm, actually I think hpux-thread.c is only relevant for the userland
threads (DCE) implementation that was available as an add-on to HP-UX
10.x.  In that context, the hpux_pid_to_str() function makes a little
bit more sense that the default.

However, I think hpux-thread.c can be considered to be dead.  The
HP-UX 10.20 systems I have access don't have the DCE stuff installed
on them, so I've never actually tested it.  I vaguely remember that
the code doesn't even compile on machines that have the DCE stuff
installed.

Any objections if I kill it?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [commit/hpux] delete hpux_pid_to_str (unused)
  2011-01-14 12:30 ` Mark Kettenis
@ 2011-01-14 12:38   ` Pedro Alves
  2011-01-14 12:47     ` Mark Kettenis
  2011-01-14 13:41     ` Joel Brobecker
  0 siblings, 2 replies; 6+ messages in thread
From: Pedro Alves @ 2011-01-14 12:38 UTC (permalink / raw)
  To: gdb-patches; +Cc: Mark Kettenis, brobecker

On Friday 14 January 2011 11:00:12, Mark Kettenis wrote:
> > From: Joel Brobecker <brobecker@adacore.com>
> > Date: Thu, 13 Jan 2011 19:02:08 -0500
> > 
> > This is something that Tom noticed, and told me about by email.
> > 
> > This function is unused, and the default formatting routine does
> > 
> > just fine, I think.   On pa-hpux:
> >         [New process 12565, lwp 2513]
> >         [New process 12565, lwp 2514]
> 
> Hmm, actually I think hpux-thread.c is only relevant for the userland
> threads (DCE) implementation that was available as an add-on to HP-UX
> 10.x.  In that context, the hpux_pid_to_str() function makes a little
> bit more sense that the default.
> 
> However, I think hpux-thread.c can be considered to be dead.  The
> HP-UX 10.20 systems I have access don't have the DCE stuff installed
> on them, so I've never actually tested it.  I vaguely remember that
> the code doesn't even compile on machines that have the DCE stuff
> installed.
> 
> Any objections if I kill it?

Not from me!  It _is_ dead weight.  I wrote on:

 <http://sourceware.org/bugzilla/show_bug.cgi?id=8516#c18>

that hpux-thread.c is:

 - implemented on top of deprecated_child_ops.  deprecated_child_ops is
   just a dummy target that does nothing.  This was an alternative to removing
   hpux-thread.c completely at some point in the past.  So this file is just
   dead wait at this point, patiently waiting for someone to salvage it.

 - implemented as a process_stratum target using the ancient
   child_suppress_run hack.  Salvaging this target would mean turning it
   into a thread_stratum target.  I'm looking at the code, and I can
   tell you that without adding any new features, just translating the
   mechanisms, that most of the file would disappear.  The mildly interesting
   bits left are the register access code, and the objfile callback that
   detects the thread support is active in the inferior.  We're talking about
   a couple dozens of lines of code.

I wrote a patch getting rid of it at the time, but then never posted it,
waiting for Dave's comments.  See below.  I see he replied, but for
some reason I didn't see the reply until now...  (maybe he replied by
email, and that's been broken, in that it doesn't generate an
email to gdb-prs@...). He doesn't object, so...

-- 
Pedro Alves

---
 gdb/Makefile.in     |    5 
 gdb/configure       |   21 -
 gdb/configure.ac    |   16 -
 gdb/hppa-hpux-nat.c |   13 -
 gdb/hpux-thread.c   |  587 
----------------------------------------------------
 5 files changed, 642 deletions(-)

Index: src/gdb/Makefile.in
===================================================================
--- src.orig/gdb/Makefile.in	2011-01-13 15:07:14.000000000 +0000
+++ src/gdb/Makefile.in	2011-01-14 12:25:12.338101006 +0000
@@ -1503,11 +1503,6 @@ ALLDEPFILES = \
 # Some files need explicit build rules (due to -Werror problems) or due
 # to sub-directory fun 'n' games.
 
-hpux-thread.o: $(srcdir)/hpux-thread.c
-	$(COMPILE) -I$(srcdir)/osf-share -I$(srcdir)/osf-share/HP800 \
-		-I/usr/include/dce $(srcdir)/hpux-thread.c
-	$(POSTCOMPILE)
-
 # main.o needs an explicit build rule to get TARGET_SYSTEM_ROOT and BINDIR.
 main.o: $(srcdir)/main.c
 	$(COMPILE) $(TARGET_SYSTEM_ROOT_DEFINE) -DBINDIR=\"$(bindir)\" 
$(srcdir)/main.c
Index: src/gdb/configure
===================================================================
--- src.orig/gdb/configure	2011-01-13 10:47:50.000000000 +0000
+++ src/gdb/configure	2011-01-14 12:25:12.348101000 +0000
@@ -14328,27 +14328,6 @@ $as_echo "$found" >&6; }
 
 if test ${build} = ${host} -a ${host} = ${target} ; then
    case ${host_os} in
-   hpux*)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HPUX/OSF thread 
support" >&5
-$as_echo_n "checking for HPUX/OSF thread support... " >&6; }
-      if test -f /usr/include/dce/cma_config.h ; then
-         if test "$GCC" = "yes" ; then
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_HPUX_THREAD_SUPPORT 1" >>confdefs.h
-
-            CONFIG_OBS="${CONFIG_OBS} hpux-thread.o"
-            CONFIG_SRCS="${CONFIG_SRCS} hpux-thread.c"
-         else
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (suppressed 
because you are not using GCC)" >&5
-$as_echo "no (suppressed because you are not using GCC)" >&6; }
-         fi
-      else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      fi
-      ;;
    solaris*)
       # See if thread_db library is around for Solaris thread debugging.
       # Note that we must explicitly test for version 1 of the library
Index: src/gdb/configure.ac
===================================================================
--- src.orig/gdb/configure.ac	2011-01-13 15:07:19.000000000 +0000
+++ src/gdb/configure.ac	2011-01-14 12:25:12.348101000 +0000
@@ -1528,22 +1528,6 @@ dnl and not doing a canadian cross build
 
 if test ${build} = ${host} -a ${host} = ${target} ; then
    case ${host_os} in
-   hpux*)
-      AC_MSG_CHECKING(for HPUX/OSF thread support)
-      if test -f /usr/include/dce/cma_config.h ; then
-         if test "$GCC" = "yes" ; then
-            AC_MSG_RESULT(yes)
-            AC_DEFINE(HAVE_HPUX_THREAD_SUPPORT, 1,
-	    [Define if you have HPUX threads])
-            CONFIG_OBS="${CONFIG_OBS} hpux-thread.o"
-            CONFIG_SRCS="${CONFIG_SRCS} hpux-thread.c"
-         else
-            AC_MSG_RESULT(no (suppressed because you are not using GCC))
-         fi
-      else
-         AC_MSG_RESULT(no)
-      fi
-      ;;
    solaris*)
       # See if thread_db library is around for Solaris thread debugging.
       # Note that we must explicitly test for version 1 of the library
Index: src/gdb/hppa-hpux-nat.c
===================================================================
--- src.orig/gdb/hppa-hpux-nat.c	2011-01-13 15:07:22.000000000 +0000
+++ src/gdb/hppa-hpux-nat.c	2011-01-14 12:25:12.348101000 +0000
@@ -35,9 +35,6 @@
 #include "inf-ptrace.h"
 #include "inf-ttrace.h"
 
-/* Non-zero if we should pretend not to be a runnable target.  */
-int child_suppress_run = 0;
-
 /* Return the offset of register REGNUM within `struct save_state'.
    The offset returns depends on the flags in the "flags" register and
    the register size (32-bit or 64-bit).  These are taken from
@@ -236,15 +233,6 @@ hppa_hpux_store_inferior_registers (stru
     hppa_hpux_store_register (regcache, regnum);
 }
 
-static int
-hppa_hpux_child_can_run (void)
-{
-  /* This variable is controlled by modules that layer their own
-     process structure atop that provided here.  The code in
-     hpux-thread.c does this to support the HP-UX user-mode DCE
-     threads.  */
-  return !child_suppress_run;
-}
 \f
 
 /* Prevent warning from -Wmissing-prototypes.  */
@@ -263,7 +251,6 @@ _initialize_hppa_hpux_nat (void)
 
   t->to_fetch_registers = hppa_hpux_fetch_inferior_registers;
   t->to_store_registers = hppa_hpux_store_inferior_registers;
-  t->to_can_run = hppa_hpux_child_can_run;
 
   add_target (t);
 }
Index: src/gdb/hpux-thread.c
===================================================================
--- src.orig/gdb/hpux-thread.c	2011-01-13 15:07:23.000000000 +0000
+++ /dev/null	1970-01-01 00:00:00.000000000 +0000
@@ -1,587 +0,0 @@
-/* Low level interface for debugging HPUX/DCE threads for GDB, the GNU
-   debugger.
-
-   Copyright (C) 1996, 1998, 1999, 2000, 2001, 2004, 2007, 2008, 2009, 2010,
-   2011 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program 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 General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* This module implements a sort of half target that sits between the
-   machine-independent parts of GDB and the ptrace interface (infptrace.c) to
-   provide access to the HPUX user-mode thread implementation.
-
-   HPUX threads are true user-mode threads, which are invoked via the cma_*
-   and pthread_* (DCE and Posix respectively) interfaces.  These are mostly
-   implemented in user-space, with all thread context kept in various
-   structures that live in the user's heap.  For the most part, the kernel 
has
-   no knowlege of these threads.  */
-
-#include "defs.h"
-
-#define _CMA_NOWRAPPERS_
-
-#include <cma_tcb_defs.h>
-#include <cma_deb_core.h>
-#include "gdbthread.h"
-#include "target.h"
-#include "inferior.h"
-#include "regcache.h"
-#include <fcntl.h>
-#include <string.h>
-#include "gdb_stat.h"
-#include "gdbcore.h"
-#include "hppa-tdep.h"
-#include "observer.h"
-
-extern int child_suppress_run;
-
-extern void _initialize_hpux_thread (void);
-
-struct string_map
-  {
-    int num;
-    char *str;
-  };
-
-static int hpux_thread_active = 0;
-
-static ptid_t main_ptid;		/* Real process ID */
-
-static CORE_ADDR P_cma__g_known_threads;
-static CORE_ADDR P_cma__g_current_thread;
-
-static void init_hpux_thread_ops (void);
-
-static struct target_ops hpux_thread_ops;
-\f
-static ptid_t find_active_thread (void);
-
-static int cached_thread;
-static cma__t_int_tcb cached_tcb;
-
-static ptid_t
-find_active_thread (void)
-{
-  static cma__t_int_tcb tcb;
-  CORE_ADDR tcb_ptr;
-
-  read_memory ((CORE_ADDR) P_cma__g_current_thread,
-	       (char *) &tcb_ptr,
-	       sizeof tcb_ptr);
-
-  read_memory (tcb_ptr, (char *) &tcb, sizeof tcb);
-
-  return (ptid_build (PIDGET (main_ptid), 0,
-                      cma_thread_get_unique (&tcb.prolog.client_thread)));
-}
-
-static cma__t_int_tcb *find_tcb (ptid_t ptid);
-
-static cma__t_int_tcb *
-find_tcb (ptid_t ptid)
-{
-  cma__t_known_object queue_header;
-  cma__t_queue *queue_ptr;
-  int thread = ptid_get_tid (ptid);
-
-  if (thread == cached_thread)
-    return &cached_tcb;
-
-  read_memory ((CORE_ADDR) P_cma__g_known_threads,
-	       (char *) &queue_header,
-	       sizeof queue_header);
-
-  for (queue_ptr = queue_header.queue.flink;
-       queue_ptr != (cma__t_queue *) P_cma__g_known_threads;
-       queue_ptr = cached_tcb.threads.flink)
-    {
-      cma__t_int_tcb *tcb_ptr;
-
-      tcb_ptr = cma__base (queue_ptr, threads, cma__t_int_tcb);
-
-      read_memory ((CORE_ADDR) tcb_ptr, (char *) &cached_tcb,
-		   sizeof cached_tcb);
-
-      if (cached_tcb.header.type == cma__c_obj_tcb)
-	if (cma_thread_get_unique (&cached_tcb.prolog.client_thread) == thread)
-	  {
-	    cached_thread = thread;
-	    return &cached_tcb;
-	  }
-    }
-
-  error (_("Can't find TCB %d"), thread);
-  return NULL;
-}
-\f
-/* Most target vector functions from here on actually just pass through to
-   inftarg.c, as they don't need to do anything specific for threads.  */
-
-static void
-hpux_thread_open (char *arg, int from_tty)
-{
-  deprecated_child_ops.to_open (arg, from_tty);
-}
-
-/* Attach to process PID, then initialize for debugging it
-   and wait for the trace-trap that results from attaching.  */
-
-static void
-hpux_thread_attach (struct target_ops *ops, char *args, int from_tty)
-{
-  deprecated_child_ops.to_attach (&deprecated_child_ops, args, from_tty);
-
-  /* XXX - might want to iterate over all the threads and register them.  */
-}
-
-/* Take a program previously attached to and detaches it.
-   The program resumes execution and will no longer stop
-   on signals, etc.  We'd better not have left any breakpoints
-   in the program or it'll die when it hits one.  For this
-   to work, it may be necessary for the process to have been
-   previously attached.  It *might* work if the program was
-   started via the normal ptrace (PTRACE_TRACEME).  */
-
-static void
-hpux_thread_detach (struct target_ops *ops, char *args, int from_tty)
-{
-  deprecated_child_ops.to_detach (&deprecated_child_ops, args, from_tty);
-}
-
-/* Resume execution of process PID.  If STEP is nozero, then
-   just single step it.  If SIGNAL is nonzero, restart it with that
-   signal activated.  We may have to convert pid from a thread-id to an LWP 
id
-   for procfs.  */
-
-static void
-hpux_thread_resume (struct target_ops *ops,
-		    ptid_t ptid, int step, enum target_signal signo)
-{
-  struct cleanup *old_chain;
-
-  old_chain = save_inferior_ptid ();
-
-  ptid = main_ptid;
-  inferior_ptid = main_ptid;
-
-  deprecated_child_ops.to_resume (&deprecated_child_ops, ptid, step, signo);
-
-  cached_thread = 0;
-
-  do_cleanups (old_chain);
-}
-
-/* Wait for any threads to stop.  We may have to convert PID from a thread id
-   to a LWP id, and vice versa on the way out.  */
-
-static ptid_t
-hpux_thread_wait (struct target_ops *ops, ptid_t ptid,
-		  struct target_waitstatus *ourstatus, int options)
-{
-  ptid_t rtnval;
-  struct cleanup *old_chain;
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  if (!ptid_equal (ptid, minus_one_ptid))
-    ptid = main_ptid;
-
-  rtnval = deprecated_child_ops.to_wait (&deprecated_child_ops,
-					 ptid, ourstatus, options);
-
-  rtnval = find_active_thread ();
-
-  do_cleanups (old_chain);
-
-  return rtnval;
-}
-
-static char regmap[] =
-{
-  -2, -1, -1, 0, 4, 8, 12, 16, 20, 24,	/* flags, r1 -> r9 */
-  28, 32, 36, 40, 44, 48, 52, 56, 60, -1,	/* r10 -> r19 */
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	/* r20 -> r29 */
-
-  /* r30, r31, sar, pcoqh, pcsqh, pcoqt, pcsqt, eiem, iir, isr */
-  -2, -1, -1, -2, -1, -1, -1, -1, -1, -1,
-
-  /* ior, ipsw, goto, sr4, sr0, sr1, sr2, sr3, sr5, sr6 */
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-  /* sr7, cr0, cr8, cr9, ccr, cr12, cr13, cr24, cr25, cr26 */
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-  -1, -1, -1, -1,		/* mpsfu_high, mpsfu_low, mpsfu_ovflo, pad */
-  144, -1, -1, -1, -1, -1, -1, -1,	/* fpsr, fpe1 -> fpe7 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr4 -> fr7 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr8 -> fr11 */
-  136, -1, 128, -1, 120, -1, 112, -1,	/* fr12 -> fr15 */
-  104, -1, 96, -1, 88, -1, 80, -1,	/* fr16 -> fr19 */
-  72, -1, 64, -1, -1, -1, -1, -1,	/* fr20 -> fr23 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr24 -> fr27 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr28 -> fr31 */
-};
-
-static void
-hpux_thread_fetch_registers (struct target_ops *ops,
-			     struct regcache *regcache, int regno)
-{
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  cma__t_int_tcb tcb, *tcb_ptr;
-  struct cleanup *old_chain;
-  int i;
-  int first_regno, last_regno;
-
-  tcb_ptr = find_tcb (inferior_ptid);
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  if (tcb_ptr->state == cma__c_state_running)
-    {
-      deprecated_child_ops.to_fetch_registers (&deprecated_child_ops,
-					       regcache, regno);
-
-      do_cleanups (old_chain);
-
-      return;
-    }
-
-  if (regno == -1)
-    {
-      first_regno = 0;
-      last_regno = gdbarch_num_regs (gdbarch) - 1;
-    }
-  else
-    {
-      first_regno = regno;
-      last_regno = regno;
-    }
-
-  for (regno = first_regno; regno <= last_regno; regno++)
-    {
-      if (regmap[regno] == -1)
-	deprecated_child_ops.to_fetch_registers (&deprecated_child_ops,
-						 regcache, regno);
-      else
-	{
-	  unsigned char buf[MAX_REGISTER_SIZE];
-	  CORE_ADDR sp;
-
-	  sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160;
-
-	  if (regno == HPPA_FLAGS_REGNUM)
-	    /* Flags must be 0 to avoid bogus value for SS_INSYSCALL.  */
-	    memset (buf, '\000', register_size (gdbarch, regno));
-	  else if (regno == HPPA_SP_REGNUM)
-	    store_unsigned_integer (buf, sizeof sp, byte_order, sp);
-	  else if (regno == HPPA_PCOQ_HEAD_REGNUM)
-	    read_memory (sp - 20, buf, register_size (gdbarch, regno));
-	  else
-	    read_memory (sp + regmap[regno], buf,
-			 register_size (gdbarch, regno));
-
-	  regcache_raw_supply (regcache, regno, buf);
-	}
-    }
-
-  do_cleanups (old_chain);
-}
-
-static void
-hpux_thread_store_registers (struct target_ops *ops,
-			     struct regcache *regcache, int regno)
-{
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  cma__t_int_tcb tcb, *tcb_ptr;
-  struct cleanup *old_chain;
-  int i;
-  int first_regno, last_regno;
-
-  tcb_ptr = find_tcb (inferior_ptid);
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  if (tcb_ptr->state == cma__c_state_running)
-    {
-      deprecated_child_ops.to_store_registers (&deprecated_child_ops,
-					       regcache, regno);
-
-      do_cleanups (old_chain);
-
-      return;
-    }
-
-  if (regno == -1)
-    {
-      first_regno = 0;
-      last_regno = gdbarch_num_regs (gdbarch) - 1;
-    }
-  else
-    {
-      first_regno = regno;
-      last_regno = regno;
-    }
-
-  for (regno = first_regno; regno <= last_regno; regno++)
-    {
-      if (regmap[regno] == -1)
-	deprecated_child_ops.to_store_registers (regcache, regno);
-      else
-	{
-	  unsigned char buf[MAX_REGISTER_SIZE];
-	  CORE_ADDR sp;
-
-	  sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160;
-
-	  if (regno == HPPA_FLAGS_REGNUM)
-	    {
-	      /* Let lower layer handle this...  */
-	      deprecated_child_ops.to_store_registers
-		(&deprecated_child_ops, regcache, regno);
-	    }
-	  else if (regno == HPPA_SP_REGNUM)
-	    {
-	      regcache_raw_collect (regcache, regno, buf);
-	      write_memory ((CORE_ADDR) &tcb_ptr->static_ctx.sp, buf,
-			    register_size (gdbarch, regno));
-	      tcb_ptr->static_ctx.sp
-		= (cma__t_hppa_regs *) ((CORE_ADDR) buf + 160);
-	    }
-	  else if (regno == HPPA_PCOQ_HEAD_REGNUM)
-	    {
-	      regcache_raw_collect (regcache, regno, buf);
-	      write_memory (sp - 20, buf,
-			    register_size (gdbarch, regno));
-	    }
-	  else
-	    {
-	      regcache_raw_collect (regcache, regno, buf);
-	      write_memory (sp + regmap[regno], buf,
-			    register_size (gdbarch, regno));
-	    }
-	}
-    }
-
-  do_cleanups (old_chain);
-}
-
-/* Get ready to modify the registers array.  On machines which store
-   individual registers, this doesn't need to do anything.  On machines
-   which store all the registers in one fell swoop, this makes sure
-   that registers contains all the registers from the program being
-   debugged.  */
-
-static void
-hpux_thread_prepare_to_store (struct regcache *regcache)
-{
-  deprecated_child_ops.to_prepare_to_store (regcache);
-}
-
-static int
-hpux_thread_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
-			 int dowrite, struct mem_attrib *attribs,
-			 struct target_ops *target)
-{
-  int retval;
-  struct cleanup *old_chain;
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  retval = 
-    deprecated_child_ops.deprecated_xfer_memory (memaddr, myaddr, len,
-						 dowrite, attribs, target);
-
-  do_cleanups (old_chain);
-
-  return retval;
-}
-
-/* Print status information about what we're accessing.  */
-
-static void
-hpux_thread_files_info (struct target_ops *ignore)
-{
-  deprecated_child_ops.to_files_info (ignore);
-}
-
-static void
-hpux_thread_kill_inferior (struct target_ops *ops)
-{
-  deprecated_child_ops.to_kill (&deprecated_child_ops);
-}
-
-static void
-hpux_thread_notice_signals (ptid_t ptid)
-{
-  deprecated_child_ops.to_notice_signals (ptid);
-}
-
-/* Fork an inferior process, and start debugging it with /proc.  */
-
-static void
-hpux_thread_create_inferior (struct target_ops *ops, char *exec_file,
-			     char *allargs, char **env, int from_tty)
-{
-  deprecated_child_ops.to_create_inferior (&deprecated_child_ops, 
-					   exec_file, allargs, env, from_tty);
-
-  if (hpux_thread_active)
-    {
-      main_ptid = inferior_ptid;
-
-      push_target (&hpux_thread_ops);
-
-      inferior_ptid = find_active_thread ();
-
-      add_thread (inferior_ptid);
-    }
-}
-
-/* This routine is called whenever a new symbol table is read in, or when all
-   symbol tables are removed.  libthread_db can only be initialized when it
-   finds the right variables in libthread.so.  Since it's a shared library,
-   those variables don't show up until the library gets mapped and the symbol
-   table is read in.  */
-
-static void
-hpux_thread_new_objfile (struct objfile *objfile)
-{
-  struct minimal_symbol *ms;
-
-  if (!objfile)
-    {
-      hpux_thread_active = 0;
-      return;
-    }
-
-  ms = lookup_minimal_symbol ("cma__g_known_threads", NULL, objfile);
-
-  if (!ms)
-    return;
-
-  P_cma__g_known_threads = SYMBOL_VALUE_ADDRESS (ms);
-
-  ms = lookup_minimal_symbol ("cma__g_current_thread", NULL, objfile);
-
-  if (!ms)
-    return;
-
-  P_cma__g_current_thread = SYMBOL_VALUE_ADDRESS (ms);
-
-  hpux_thread_active = 1;
-}
-
-/* Clean up after the inferior dies.  */
-
-static void
-hpux_thread_mourn_inferior (void)
-{
-  deprecated_child_ops.to_mourn_inferior (&deprecated_child_ops);
-}
-
-/* Mark our target-struct as eligible for stray "run" and "attach"
-   commands.  */
-
-static int
-hpux_thread_can_run (void)
-{
-  return child_suppress_run;
-}
-
-static int
-hpux_thread_alive (struct target_ops *ops, ptid_t ptid)
-{
-  return 1;
-}
-
-static void
-hpux_thread_stop (ptid_t ptid)
-{
-  deprecated_child_ops.to_stop (ptid);
-}
-\f
-/* Convert a pid to printable form.  */
-
-char *
-hpux_pid_to_str (ptid_t ptid)
-{
-  static char buf[100];
-  int pid = PIDGET (ptid);
-
-  sprintf (buf, "Thread %ld", ptid_get_tid (ptid));
-
-  return buf;
-}
-\f
-static void
-init_hpux_thread_ops (void)
-{
-  hpux_thread_ops.to_shortname = "hpux-threads";
-  hpux_thread_ops.to_longname = "HPUX threads and pthread.";
-  hpux_thread_ops.to_doc = "HPUX threads and pthread support.";
-  hpux_thread_ops.to_open = hpux_thread_open;
-  hpux_thread_ops.to_attach = hpux_thread_attach;
-  hpux_thread_ops.to_detach = hpux_thread_detach;
-  hpux_thread_ops.to_resume = hpux_thread_resume;
-  hpux_thread_ops.to_wait = hpux_thread_wait;
-  hpux_thread_ops.to_fetch_registers = hpux_thread_fetch_registers;
-  hpux_thread_ops.to_store_registers = hpux_thread_store_registers;
-  hpux_thread_ops.to_prepare_to_store = hpux_thread_prepare_to_store;
-  hpux_thread_ops.deprecated_xfer_memory = hpux_thread_xfer_memory;
-  hpux_thread_ops.to_files_info = hpux_thread_files_info;
-  hpux_thread_ops.to_insert_breakpoint = memory_insert_breakpoint;
-  hpux_thread_ops.to_remove_breakpoint = memory_remove_breakpoint;
-  hpux_thread_ops.to_terminal_init = terminal_init_inferior;
-  hpux_thread_ops.to_terminal_inferior = terminal_inferior;
-  hpux_thread_ops.to_terminal_ours_for_output = terminal_ours_for_output;
-  hpux_thread_ops.to_terminal_save_ours = terminal_save_ours;
-  hpux_thread_ops.to_terminal_ours = terminal_ours;
-  hpux_thread_ops.to_terminal_info = child_terminal_info;
-  hpux_thread_ops.to_kill = hpux_thread_kill_inferior;
-  hpux_thread_ops.to_create_inferior = hpux_thread_create_inferior;
-  hpux_thread_ops.to_mourn_inferior = hpux_thread_mourn_inferior;
-  hpux_thread_ops.to_can_run = hpux_thread_can_run;
-  hpux_thread_ops.to_notice_signals = hpux_thread_notice_signals;
-  hpux_thread_ops.to_thread_alive = hpux_thread_alive;
-  hpux_thread_ops.to_stop = hpux_thread_stop;
-  hpux_thread_ops.to_stratum = process_stratum;
-  hpux_thread_ops.to_has_all_memory = default_child_has_all_memory;
-  hpux_thread_ops.to_has_memory = default_child_has_memory;
-  hpux_thread_ops.to_has_stack = default_child_has_stack;
-  hpux_thread_ops.to_has_registers = default_child_has_registers;
-  hpux_thread_ops.to_has_execution = default_child_has_execution;
-  hpux_thread_ops.to_magic = OPS_MAGIC;
-}
-
-void
-_initialize_hpux_thread (void)
-{
-  init_hpux_thread_ops ();
-  add_target (&hpux_thread_ops);
-
-  child_suppress_run = 1;
-  /* Hook into new_objfile notification.  */
-  observer_attach_new_objfile (hpux_thread_new_objfile);
-}

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [commit/hpux] delete hpux_pid_to_str (unused)
  2011-01-14 12:38   ` Pedro Alves
@ 2011-01-14 12:47     ` Mark Kettenis
  2011-01-14 13:49       ` Pedro Alves
  2011-01-14 13:41     ` Joel Brobecker
  1 sibling, 1 reply; 6+ messages in thread
From: Mark Kettenis @ 2011-01-14 12:47 UTC (permalink / raw)
  To: alves.ped; +Cc: gdb-patches, mark.kettenis, brobecker

> From: Pedro Alves <alves.ped@gmail.com>
> Date: Fri, 14 Jan 2011 12:30:30 +0000
> 
> On Friday 14 January 2011 11:00:12, Mark Kettenis wrote:
> > > From: Joel Brobecker <brobecker@adacore.com>
> > > Date: Thu, 13 Jan 2011 19:02:08 -0500
> > > 
> > > This is something that Tom noticed, and told me about by email.
> > > 
> > > This function is unused, and the default formatting routine does
> > > 
> > > just fine, I think.   On pa-hpux:
> > >         [New process 12565, lwp 2513]
> > >         [New process 12565, lwp 2514]
> > 
> > Hmm, actually I think hpux-thread.c is only relevant for the userland
> > threads (DCE) implementation that was available as an add-on to HP-UX
> > 10.x.  In that context, the hpux_pid_to_str() function makes a little
> > bit more sense that the default.
> > 
> > However, I think hpux-thread.c can be considered to be dead.  The
> > HP-UX 10.20 systems I have access don't have the DCE stuff installed
> > on them, so I've never actually tested it.  I vaguely remember that
> > the code doesn't even compile on machines that have the DCE stuff
> > installed.
> > 
> > Any objections if I kill it?
> 
> Not from me!  It _is_ dead weight.  I wrote on:
> 
>  <http://sourceware.org/bugzilla/show_bug.cgi?id=8516#c18>
> 
> that hpux-thread.c is:
> 
>  - implemented on top of deprecated_child_ops.  deprecated_child_ops is
>    just a dummy target that does nothing.  This was an alternative to removing
>    hpux-thread.c completely at some point in the past.  So this file is just
>    dead wait at this point, patiently waiting for someone to salvage it.
> 
>  - implemented as a process_stratum target using the ancient
>    child_suppress_run hack.  Salvaging this target would mean turning it
>    into a thread_stratum target.  I'm looking at the code, and I can
>    tell you that without adding any new features, just translating the
>    mechanisms, that most of the file would disappear.  The mildly interesting
>    bits left are the register access code, and the objfile callback that
>    detects the thread support is active in the inferior.  We're talking about
>    a couple dozens of lines of code.
> 
> I wrote a patch getting rid of it at the time, but then never posted it,
> waiting for Dave's comments.  See below.  I see he replied, but for
> some reason I didn't see the reply until now...  (maybe he replied by
> email, and that's been broken, in that it doesn't generate an
> email to gdb-prs@...). He doesn't object, so...

Please go ahead.

>  gdb/Makefile.in     |    5 
>  gdb/configure       |   21 -
>  gdb/configure.ac    |   16 -
>  gdb/hppa-hpux-nat.c |   13 -
>  gdb/hpux-thread.c   |  587 
> ----------------------------------------------------
>  5 files changed, 642 deletions(-)
> 
> Index: src/gdb/Makefile.in
> ===================================================================
> --- src.orig/gdb/Makefile.in	2011-01-13 15:07:14.000000000 +0000
> +++ src/gdb/Makefile.in	2011-01-14 12:25:12.338101006 +0000
> @@ -1503,11 +1503,6 @@ ALLDEPFILES = \
>  # Some files need explicit build rules (due to -Werror problems) or due
>  # to sub-directory fun 'n' games.
>  
> -hpux-thread.o: $(srcdir)/hpux-thread.c
> -	$(COMPILE) -I$(srcdir)/osf-share -I$(srcdir)/osf-share/HP800 \
> -		-I/usr/include/dce $(srcdir)/hpux-thread.c
> -	$(POSTCOMPILE)
> -
>  # main.o needs an explicit build rule to get TARGET_SYSTEM_ROOT and BINDIR.
>  main.o: $(srcdir)/main.c
>  	$(COMPILE) $(TARGET_SYSTEM_ROOT_DEFINE) -DBINDIR=\"$(bindir)\" 
> $(srcdir)/main.c
> Index: src/gdb/configure
> ===================================================================
> --- src.orig/gdb/configure	2011-01-13 10:47:50.000000000 +0000
> +++ src/gdb/configure	2011-01-14 12:25:12.348101000 +0000
> @@ -14328,27 +14328,6 @@ $as_echo "$found" >&6; }
>  
>  if test ${build} = ${host} -a ${host} = ${target} ; then
>     case ${host_os} in
> -   hpux*)
> -      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HPUX/OSF thread 
> support" >&5
> -$as_echo_n "checking for HPUX/OSF thread support... " >&6; }
> -      if test -f /usr/include/dce/cma_config.h ; then
> -         if test "$GCC" = "yes" ; then
> -            { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
> -$as_echo "yes" >&6; }
> -
> -$as_echo "#define HAVE_HPUX_THREAD_SUPPORT 1" >>confdefs.h
> -
> -            CONFIG_OBS="${CONFIG_OBS} hpux-thread.o"
> -            CONFIG_SRCS="${CONFIG_SRCS} hpux-thread.c"
> -         else
> -            { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (suppressed 
> because you are not using GCC)" >&5
> -$as_echo "no (suppressed because you are not using GCC)" >&6; }
> -         fi
> -      else
> -         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
> -$as_echo "no" >&6; }
> -      fi
> -      ;;
>     solaris*)
>        # See if thread_db library is around for Solaris thread debugging.
>        # Note that we must explicitly test for version 1 of the library
> Index: src/gdb/configure.ac
> ===================================================================
> --- src.orig/gdb/configure.ac	2011-01-13 15:07:19.000000000 +0000
> +++ src/gdb/configure.ac	2011-01-14 12:25:12.348101000 +0000
> @@ -1528,22 +1528,6 @@ dnl and not doing a canadian cross build
>  
>  if test ${build} = ${host} -a ${host} = ${target} ; then
>     case ${host_os} in
> -   hpux*)
> -      AC_MSG_CHECKING(for HPUX/OSF thread support)
> -      if test -f /usr/include/dce/cma_config.h ; then
> -         if test "$GCC" = "yes" ; then
> -            AC_MSG_RESULT(yes)
> -            AC_DEFINE(HAVE_HPUX_THREAD_SUPPORT, 1,
> -	    [Define if you have HPUX threads])
> -            CONFIG_OBS="${CONFIG_OBS} hpux-thread.o"
> -            CONFIG_SRCS="${CONFIG_SRCS} hpux-thread.c"
> -         else
> -            AC_MSG_RESULT(no (suppressed because you are not using GCC))
> -         fi
> -      else
> -         AC_MSG_RESULT(no)
> -      fi
> -      ;;
>     solaris*)
>        # See if thread_db library is around for Solaris thread debugging.
>        # Note that we must explicitly test for version 1 of the library
> Index: src/gdb/hppa-hpux-nat.c
> ===================================================================
> --- src.orig/gdb/hppa-hpux-nat.c	2011-01-13 15:07:22.000000000 +0000
> +++ src/gdb/hppa-hpux-nat.c	2011-01-14 12:25:12.348101000 +0000
> @@ -35,9 +35,6 @@
>  #include "inf-ptrace.h"
>  #include "inf-ttrace.h"
>  
> -/* Non-zero if we should pretend not to be a runnable target.  */
> -int child_suppress_run = 0;
> -
>  /* Return the offset of register REGNUM within `struct save_state'.
>     The offset returns depends on the flags in the "flags" register and
>     the register size (32-bit or 64-bit).  These are taken from
> @@ -236,15 +233,6 @@ hppa_hpux_store_inferior_registers (stru
>      hppa_hpux_store_register (regcache, regnum);
>  }
>  
> -static int
> -hppa_hpux_child_can_run (void)
> -{
> -  /* This variable is controlled by modules that layer their own
> -     process structure atop that provided here.  The code in
> -     hpux-thread.c does this to support the HP-UX user-mode DCE
> -     threads.  */
> -  return !child_suppress_run;
> -}
>  \f
>  
>  /* Prevent warning from -Wmissing-prototypes.  */
> @@ -263,7 +251,6 @@ _initialize_hppa_hpux_nat (void)
>  
>    t->to_fetch_registers = hppa_hpux_fetch_inferior_registers;
>    t->to_store_registers = hppa_hpux_store_inferior_registers;
> -  t->to_can_run = hppa_hpux_child_can_run;
>  
>    add_target (t);
>  }
> Index: src/gdb/hpux-thread.c
> ===================================================================
> --- src.orig/gdb/hpux-thread.c	2011-01-13 15:07:23.000000000 +0000
> +++ /dev/null	1970-01-01 00:00:00.000000000 +0000
> @@ -1,587 +0,0 @@
> -/* Low level interface for debugging HPUX/DCE threads for GDB, the GNU
> -   debugger.
> -
> -   Copyright (C) 1996, 1998, 1999, 2000, 2001, 2004, 2007, 2008, 2009, 2010,
> -   2011 Free Software Foundation, Inc.
> -
> -   This file is part of GDB.
> -
> -   This program is free software; you can redistribute it and/or modify
> -   it under the terms of the GNU General Public License as published by
> -   the Free Software Foundation; either version 3 of the License, or
> -   (at your option) any later version.
> -
> -   This program 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 General Public License for more details.
> -
> -   You should have received a copy of the GNU General Public License
> -   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> -
> -/* This module implements a sort of half target that sits between the
> -   machine-independent parts of GDB and the ptrace interface (infptrace.c) to
> -   provide access to the HPUX user-mode thread implementation.
> -
> -   HPUX threads are true user-mode threads, which are invoked via the cma_*
> -   and pthread_* (DCE and Posix respectively) interfaces.  These are mostly
> -   implemented in user-space, with all thread context kept in various
> -   structures that live in the user's heap.  For the most part, the kernel 
> has
> -   no knowlege of these threads.  */
> -
> -#include "defs.h"
> -
> -#define _CMA_NOWRAPPERS_
> -
> -#include <cma_tcb_defs.h>
> -#include <cma_deb_core.h>
> -#include "gdbthread.h"
> -#include "target.h"
> -#include "inferior.h"
> -#include "regcache.h"
> -#include <fcntl.h>
> -#include <string.h>
> -#include "gdb_stat.h"
> -#include "gdbcore.h"
> -#include "hppa-tdep.h"
> -#include "observer.h"
> -
> -extern int child_suppress_run;
> -
> -extern void _initialize_hpux_thread (void);
> -
> -struct string_map
> -  {
> -    int num;
> -    char *str;
> -  };
> -
> -static int hpux_thread_active = 0;
> -
> -static ptid_t main_ptid;		/* Real process ID */
> -
> -static CORE_ADDR P_cma__g_known_threads;
> -static CORE_ADDR P_cma__g_current_thread;
> -
> -static void init_hpux_thread_ops (void);
> -
> -static struct target_ops hpux_thread_ops;
> -\f
> -static ptid_t find_active_thread (void);
> -
> -static int cached_thread;
> -static cma__t_int_tcb cached_tcb;
> -
> -static ptid_t
> -find_active_thread (void)
> -{
> -  static cma__t_int_tcb tcb;
> -  CORE_ADDR tcb_ptr;
> -
> -  read_memory ((CORE_ADDR) P_cma__g_current_thread,
> -	       (char *) &tcb_ptr,
> -	       sizeof tcb_ptr);
> -
> -  read_memory (tcb_ptr, (char *) &tcb, sizeof tcb);
> -
> -  return (ptid_build (PIDGET (main_ptid), 0,
> -                      cma_thread_get_unique (&tcb.prolog.client_thread)));
> -}
> -
> -static cma__t_int_tcb *find_tcb (ptid_t ptid);
> -
> -static cma__t_int_tcb *
> -find_tcb (ptid_t ptid)
> -{
> -  cma__t_known_object queue_header;
> -  cma__t_queue *queue_ptr;
> -  int thread = ptid_get_tid (ptid);
> -
> -  if (thread == cached_thread)
> -    return &cached_tcb;
> -
> -  read_memory ((CORE_ADDR) P_cma__g_known_threads,
> -	       (char *) &queue_header,
> -	       sizeof queue_header);
> -
> -  for (queue_ptr = queue_header.queue.flink;
> -       queue_ptr != (cma__t_queue *) P_cma__g_known_threads;
> -       queue_ptr = cached_tcb.threads.flink)
> -    {
> -      cma__t_int_tcb *tcb_ptr;
> -
> -      tcb_ptr = cma__base (queue_ptr, threads, cma__t_int_tcb);
> -
> -      read_memory ((CORE_ADDR) tcb_ptr, (char *) &cached_tcb,
> -		   sizeof cached_tcb);
> -
> -      if (cached_tcb.header.type == cma__c_obj_tcb)
> -	if (cma_thread_get_unique (&cached_tcb.prolog.client_thread) == thread)
> -	  {
> -	    cached_thread = thread;
> -	    return &cached_tcb;
> -	  }
> -    }
> -
> -  error (_("Can't find TCB %d"), thread);
> -  return NULL;
> -}
> -\f
> -/* Most target vector functions from here on actually just pass through to
> -   inftarg.c, as they don't need to do anything specific for threads.  */
> -
> -static void
> -hpux_thread_open (char *arg, int from_tty)
> -{
> -  deprecated_child_ops.to_open (arg, from_tty);
> -}
> -
> -/* Attach to process PID, then initialize for debugging it
> -   and wait for the trace-trap that results from attaching.  */
> -
> -static void
> -hpux_thread_attach (struct target_ops *ops, char *args, int from_tty)
> -{
> -  deprecated_child_ops.to_attach (&deprecated_child_ops, args, from_tty);
> -
> -  /* XXX - might want to iterate over all the threads and register them.  */
> -}
> -
> -/* Take a program previously attached to and detaches it.
> -   The program resumes execution and will no longer stop
> -   on signals, etc.  We'd better not have left any breakpoints
> -   in the program or it'll die when it hits one.  For this
> -   to work, it may be necessary for the process to have been
> -   previously attached.  It *might* work if the program was
> -   started via the normal ptrace (PTRACE_TRACEME).  */
> -
> -static void
> -hpux_thread_detach (struct target_ops *ops, char *args, int from_tty)
> -{
> -  deprecated_child_ops.to_detach (&deprecated_child_ops, args, from_tty);
> -}
> -
> -/* Resume execution of process PID.  If STEP is nozero, then
> -   just single step it.  If SIGNAL is nonzero, restart it with that
> -   signal activated.  We may have to convert pid from a thread-id to an LWP 
> id
> -   for procfs.  */
> -
> -static void
> -hpux_thread_resume (struct target_ops *ops,
> -		    ptid_t ptid, int step, enum target_signal signo)
> -{
> -  struct cleanup *old_chain;
> -
> -  old_chain = save_inferior_ptid ();
> -
> -  ptid = main_ptid;
> -  inferior_ptid = main_ptid;
> -
> -  deprecated_child_ops.to_resume (&deprecated_child_ops, ptid, step, signo);
> -
> -  cached_thread = 0;
> -
> -  do_cleanups (old_chain);
> -}
> -
> -/* Wait for any threads to stop.  We may have to convert PID from a thread id
> -   to a LWP id, and vice versa on the way out.  */
> -
> -static ptid_t
> -hpux_thread_wait (struct target_ops *ops, ptid_t ptid,
> -		  struct target_waitstatus *ourstatus, int options)
> -{
> -  ptid_t rtnval;
> -  struct cleanup *old_chain;
> -
> -  old_chain = save_inferior_ptid ();
> -
> -  inferior_ptid = main_ptid;
> -
> -  if (!ptid_equal (ptid, minus_one_ptid))
> -    ptid = main_ptid;
> -
> -  rtnval = deprecated_child_ops.to_wait (&deprecated_child_ops,
> -					 ptid, ourstatus, options);
> -
> -  rtnval = find_active_thread ();
> -
> -  do_cleanups (old_chain);
> -
> -  return rtnval;
> -}
> -
> -static char regmap[] =
> -{
> -  -2, -1, -1, 0, 4, 8, 12, 16, 20, 24,	/* flags, r1 -> r9 */
> -  28, 32, 36, 40, 44, 48, 52, 56, 60, -1,	/* r10 -> r19 */
> -  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	/* r20 -> r29 */
> -
> -  /* r30, r31, sar, pcoqh, pcsqh, pcoqt, pcsqt, eiem, iir, isr */
> -  -2, -1, -1, -2, -1, -1, -1, -1, -1, -1,
> -
> -  /* ior, ipsw, goto, sr4, sr0, sr1, sr2, sr3, sr5, sr6 */
> -  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
> -
> -  /* sr7, cr0, cr8, cr9, ccr, cr12, cr13, cr24, cr25, cr26 */
> -  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
> -
> -  -1, -1, -1, -1,		/* mpsfu_high, mpsfu_low, mpsfu_ovflo, pad */
> -  144, -1, -1, -1, -1, -1, -1, -1,	/* fpsr, fpe1 -> fpe7 */
> -  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr4 -> fr7 */
> -  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr8 -> fr11 */
> -  136, -1, 128, -1, 120, -1, 112, -1,	/* fr12 -> fr15 */
> -  104, -1, 96, -1, 88, -1, 80, -1,	/* fr16 -> fr19 */
> -  72, -1, 64, -1, -1, -1, -1, -1,	/* fr20 -> fr23 */
> -  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr24 -> fr27 */
> -  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr28 -> fr31 */
> -};
> -
> -static void
> -hpux_thread_fetch_registers (struct target_ops *ops,
> -			     struct regcache *regcache, int regno)
> -{
> -  struct gdbarch *gdbarch = get_regcache_arch (regcache);
> -  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
> -  cma__t_int_tcb tcb, *tcb_ptr;
> -  struct cleanup *old_chain;
> -  int i;
> -  int first_regno, last_regno;
> -
> -  tcb_ptr = find_tcb (inferior_ptid);
> -
> -  old_chain = save_inferior_ptid ();
> -
> -  inferior_ptid = main_ptid;
> -
> -  if (tcb_ptr->state == cma__c_state_running)
> -    {
> -      deprecated_child_ops.to_fetch_registers (&deprecated_child_ops,
> -					       regcache, regno);
> -
> -      do_cleanups (old_chain);
> -
> -      return;
> -    }
> -
> -  if (regno == -1)
> -    {
> -      first_regno = 0;
> -      last_regno = gdbarch_num_regs (gdbarch) - 1;
> -    }
> -  else
> -    {
> -      first_regno = regno;
> -      last_regno = regno;
> -    }
> -
> -  for (regno = first_regno; regno <= last_regno; regno++)
> -    {
> -      if (regmap[regno] == -1)
> -	deprecated_child_ops.to_fetch_registers (&deprecated_child_ops,
> -						 regcache, regno);
> -      else
> -	{
> -	  unsigned char buf[MAX_REGISTER_SIZE];
> -	  CORE_ADDR sp;
> -
> -	  sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160;
> -
> -	  if (regno == HPPA_FLAGS_REGNUM)
> -	    /* Flags must be 0 to avoid bogus value for SS_INSYSCALL.  */
> -	    memset (buf, '\000', register_size (gdbarch, regno));
> -	  else if (regno == HPPA_SP_REGNUM)
> -	    store_unsigned_integer (buf, sizeof sp, byte_order, sp);
> -	  else if (regno == HPPA_PCOQ_HEAD_REGNUM)
> -	    read_memory (sp - 20, buf, register_size (gdbarch, regno));
> -	  else
> -	    read_memory (sp + regmap[regno], buf,
> -			 register_size (gdbarch, regno));
> -
> -	  regcache_raw_supply (regcache, regno, buf);
> -	}
> -    }
> -
> -  do_cleanups (old_chain);
> -}
> -
> -static void
> -hpux_thread_store_registers (struct target_ops *ops,
> -			     struct regcache *regcache, int regno)
> -{
> -  struct gdbarch *gdbarch = get_regcache_arch (regcache);
> -  cma__t_int_tcb tcb, *tcb_ptr;
> -  struct cleanup *old_chain;
> -  int i;
> -  int first_regno, last_regno;
> -
> -  tcb_ptr = find_tcb (inferior_ptid);
> -
> -  old_chain = save_inferior_ptid ();
> -
> -  inferior_ptid = main_ptid;
> -
> -  if (tcb_ptr->state == cma__c_state_running)
> -    {
> -      deprecated_child_ops.to_store_registers (&deprecated_child_ops,
> -					       regcache, regno);
> -
> -      do_cleanups (old_chain);
> -
> -      return;
> -    }
> -
> -  if (regno == -1)
> -    {
> -      first_regno = 0;
> -      last_regno = gdbarch_num_regs (gdbarch) - 1;
> -    }
> -  else
> -    {
> -      first_regno = regno;
> -      last_regno = regno;
> -    }
> -
> -  for (regno = first_regno; regno <= last_regno; regno++)
> -    {
> -      if (regmap[regno] == -1)
> -	deprecated_child_ops.to_store_registers (regcache, regno);
> -      else
> -	{
> -	  unsigned char buf[MAX_REGISTER_SIZE];
> -	  CORE_ADDR sp;
> -
> -	  sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160;
> -
> -	  if (regno == HPPA_FLAGS_REGNUM)
> -	    {
> -	      /* Let lower layer handle this...  */
> -	      deprecated_child_ops.to_store_registers
> -		(&deprecated_child_ops, regcache, regno);
> -	    }
> -	  else if (regno == HPPA_SP_REGNUM)
> -	    {
> -	      regcache_raw_collect (regcache, regno, buf);
> -	      write_memory ((CORE_ADDR) &tcb_ptr->static_ctx.sp, buf,
> -			    register_size (gdbarch, regno));
> -	      tcb_ptr->static_ctx.sp
> -		= (cma__t_hppa_regs *) ((CORE_ADDR) buf + 160);
> -	    }
> -	  else if (regno == HPPA_PCOQ_HEAD_REGNUM)
> -	    {
> -	      regcache_raw_collect (regcache, regno, buf);
> -	      write_memory (sp - 20, buf,
> -			    register_size (gdbarch, regno));
> -	    }
> -	  else
> -	    {
> -	      regcache_raw_collect (regcache, regno, buf);
> -	      write_memory (sp + regmap[regno], buf,
> -			    register_size (gdbarch, regno));
> -	    }
> -	}
> -    }
> -
> -  do_cleanups (old_chain);
> -}
> -
> -/* Get ready to modify the registers array.  On machines which store
> -   individual registers, this doesn't need to do anything.  On machines
> -   which store all the registers in one fell swoop, this makes sure
> -   that registers contains all the registers from the program being
> -   debugged.  */
> -
> -static void
> -hpux_thread_prepare_to_store (struct regcache *regcache)
> -{
> -  deprecated_child_ops.to_prepare_to_store (regcache);
> -}
> -
> -static int
> -hpux_thread_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
> -			 int dowrite, struct mem_attrib *attribs,
> -			 struct target_ops *target)
> -{
> -  int retval;
> -  struct cleanup *old_chain;
> -
> -  old_chain = save_inferior_ptid ();
> -
> -  inferior_ptid = main_ptid;
> -
> -  retval = 
> -    deprecated_child_ops.deprecated_xfer_memory (memaddr, myaddr, len,
> -						 dowrite, attribs, target);
> -
> -  do_cleanups (old_chain);
> -
> -  return retval;
> -}
> -
> -/* Print status information about what we're accessing.  */
> -
> -static void
> -hpux_thread_files_info (struct target_ops *ignore)
> -{
> -  deprecated_child_ops.to_files_info (ignore);
> -}
> -
> -static void
> -hpux_thread_kill_inferior (struct target_ops *ops)
> -{
> -  deprecated_child_ops.to_kill (&deprecated_child_ops);
> -}
> -
> -static void
> -hpux_thread_notice_signals (ptid_t ptid)
> -{
> -  deprecated_child_ops.to_notice_signals (ptid);
> -}
> -
> -/* Fork an inferior process, and start debugging it with /proc.  */
> -
> -static void
> -hpux_thread_create_inferior (struct target_ops *ops, char *exec_file,
> -			     char *allargs, char **env, int from_tty)
> -{
> -  deprecated_child_ops.to_create_inferior (&deprecated_child_ops, 
> -					   exec_file, allargs, env, from_tty);
> -
> -  if (hpux_thread_active)
> -    {
> -      main_ptid = inferior_ptid;
> -
> -      push_target (&hpux_thread_ops);
> -
> -      inferior_ptid = find_active_thread ();
> -
> -      add_thread (inferior_ptid);
> -    }
> -}
> -
> -/* This routine is called whenever a new symbol table is read in, or when all
> -   symbol tables are removed.  libthread_db can only be initialized when it
> -   finds the right variables in libthread.so.  Since it's a shared library,
> -   those variables don't show up until the library gets mapped and the symbol
> -   table is read in.  */
> -
> -static void
> -hpux_thread_new_objfile (struct objfile *objfile)
> -{
> -  struct minimal_symbol *ms;
> -
> -  if (!objfile)
> -    {
> -      hpux_thread_active = 0;
> -      return;
> -    }
> -
> -  ms = lookup_minimal_symbol ("cma__g_known_threads", NULL, objfile);
> -
> -  if (!ms)
> -    return;
> -
> -  P_cma__g_known_threads = SYMBOL_VALUE_ADDRESS (ms);
> -
> -  ms = lookup_minimal_symbol ("cma__g_current_thread", NULL, objfile);
> -
> -  if (!ms)
> -    return;
> -
> -  P_cma__g_current_thread = SYMBOL_VALUE_ADDRESS (ms);
> -
> -  hpux_thread_active = 1;
> -}
> -
> -/* Clean up after the inferior dies.  */
> -
> -static void
> -hpux_thread_mourn_inferior (void)
> -{
> -  deprecated_child_ops.to_mourn_inferior (&deprecated_child_ops);
> -}
> -
> -/* Mark our target-struct as eligible for stray "run" and "attach"
> -   commands.  */
> -
> -static int
> -hpux_thread_can_run (void)
> -{
> -  return child_suppress_run;
> -}
> -
> -static int
> -hpux_thread_alive (struct target_ops *ops, ptid_t ptid)
> -{
> -  return 1;
> -}
> -
> -static void
> -hpux_thread_stop (ptid_t ptid)
> -{
> -  deprecated_child_ops.to_stop (ptid);
> -}
> -\f
> -/* Convert a pid to printable form.  */
> -
> -char *
> -hpux_pid_to_str (ptid_t ptid)
> -{
> -  static char buf[100];
> -  int pid = PIDGET (ptid);
> -
> -  sprintf (buf, "Thread %ld", ptid_get_tid (ptid));
> -
> -  return buf;
> -}
> -\f
> -static void
> -init_hpux_thread_ops (void)
> -{
> -  hpux_thread_ops.to_shortname = "hpux-threads";
> -  hpux_thread_ops.to_longname = "HPUX threads and pthread.";
> -  hpux_thread_ops.to_doc = "HPUX threads and pthread support.";
> -  hpux_thread_ops.to_open = hpux_thread_open;
> -  hpux_thread_ops.to_attach = hpux_thread_attach;
> -  hpux_thread_ops.to_detach = hpux_thread_detach;
> -  hpux_thread_ops.to_resume = hpux_thread_resume;
> -  hpux_thread_ops.to_wait = hpux_thread_wait;
> -  hpux_thread_ops.to_fetch_registers = hpux_thread_fetch_registers;
> -  hpux_thread_ops.to_store_registers = hpux_thread_store_registers;
> -  hpux_thread_ops.to_prepare_to_store = hpux_thread_prepare_to_store;
> -  hpux_thread_ops.deprecated_xfer_memory = hpux_thread_xfer_memory;
> -  hpux_thread_ops.to_files_info = hpux_thread_files_info;
> -  hpux_thread_ops.to_insert_breakpoint = memory_insert_breakpoint;
> -  hpux_thread_ops.to_remove_breakpoint = memory_remove_breakpoint;
> -  hpux_thread_ops.to_terminal_init = terminal_init_inferior;
> -  hpux_thread_ops.to_terminal_inferior = terminal_inferior;
> -  hpux_thread_ops.to_terminal_ours_for_output = terminal_ours_for_output;
> -  hpux_thread_ops.to_terminal_save_ours = terminal_save_ours;
> -  hpux_thread_ops.to_terminal_ours = terminal_ours;
> -  hpux_thread_ops.to_terminal_info = child_terminal_info;
> -  hpux_thread_ops.to_kill = hpux_thread_kill_inferior;
> -  hpux_thread_ops.to_create_inferior = hpux_thread_create_inferior;
> -  hpux_thread_ops.to_mourn_inferior = hpux_thread_mourn_inferior;
> -  hpux_thread_ops.to_can_run = hpux_thread_can_run;
> -  hpux_thread_ops.to_notice_signals = hpux_thread_notice_signals;
> -  hpux_thread_ops.to_thread_alive = hpux_thread_alive;
> -  hpux_thread_ops.to_stop = hpux_thread_stop;
> -  hpux_thread_ops.to_stratum = process_stratum;
> -  hpux_thread_ops.to_has_all_memory = default_child_has_all_memory;
> -  hpux_thread_ops.to_has_memory = default_child_has_memory;
> -  hpux_thread_ops.to_has_stack = default_child_has_stack;
> -  hpux_thread_ops.to_has_registers = default_child_has_registers;
> -  hpux_thread_ops.to_has_execution = default_child_has_execution;
> -  hpux_thread_ops.to_magic = OPS_MAGIC;
> -}
> -
> -void
> -_initialize_hpux_thread (void)
> -{
> -  init_hpux_thread_ops ();
> -  add_target (&hpux_thread_ops);
> -
> -  child_suppress_run = 1;
> -  /* Hook into new_objfile notification.  */
> -  observer_attach_new_objfile (hpux_thread_new_objfile);
> -}
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [commit/hpux] delete hpux_pid_to_str (unused)
  2011-01-14 12:38   ` Pedro Alves
  2011-01-14 12:47     ` Mark Kettenis
@ 2011-01-14 13:41     ` Joel Brobecker
  1 sibling, 0 replies; 6+ messages in thread
From: Joel Brobecker @ 2011-01-14 13:41 UTC (permalink / raw)
  To: Pedro Alves; +Cc: gdb-patches, Mark Kettenis

> > Hmm, actually I think hpux-thread.c is only relevant for the userland
> > threads (DCE) implementation that was available as an add-on to HP-UX
> > 10.x.  In that context, the hpux_pid_to_str() function makes a little
> > bit more sense that the default.
> > 
> > However, I think hpux-thread.c can be considered to be dead.  The
> > HP-UX 10.20 systems I have access don't have the DCE stuff installed
> > on them, so I've never actually tested it.  I vaguely remember that
> > the code doesn't even compile on machines that have the DCE stuff
> > installed.
> > 
> > Any objections if I kill it?

Not from me either. We also had a discussion a few weeks ago with
Pierre, where it was suggested that we stop supporting version 10.x.
You're the only one I know who still has access to such a system
(and I didn't know it until now).

-- 
Joel

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [commit/hpux] delete hpux_pid_to_str (unused)
  2011-01-14 12:47     ` Mark Kettenis
@ 2011-01-14 13:49       ` Pedro Alves
  0 siblings, 0 replies; 6+ messages in thread
From: Pedro Alves @ 2011-01-14 13:49 UTC (permalink / raw)
  To: gdb-patches; +Cc: Mark Kettenis, brobecker

Applied then, as below.

-- 
Pedro Alves

2011-01-14  Pedro Alves  <pedro@codesourcery.com>

	gdb/
	* Makefile.in (hpux-thread.o): Delete rule.
	* configure.ac: Don't check for HPUX DCE threads support.
	* configure, config.in: Regenerate.
	* hppa-hpux-nat.c (child_suppress_run): Delete.
	(hppa_hpux_child_can_run): Delete.
	(_initialize_hppa_hpux_nat): Don't override to_can_run.
	* hpux-thread.c: Delete.

---
 gdb/Makefile.in     |    5 
 gdb/config.in       |    3 
 gdb/configure       |   21 -
 gdb/configure.ac    |   16 -
 gdb/hppa-hpux-nat.c |   13 -
 gdb/hpux-thread.c   |  574 
----------------------------------------------------
 6 files changed, 632 deletions(-)

Index: src/gdb/Makefile.in
===================================================================
--- src.orig/gdb/Makefile.in	2011-01-14 13:17:12.000000000 +0000
+++ src/gdb/Makefile.in	2011-01-14 13:17:41.638101006 +0000
@@ -1504,11 +1504,6 @@ ALLDEPFILES = \
 # Some files need explicit build rules (due to -Werror problems) or due
 # to sub-directory fun 'n' games.
 
-hpux-thread.o: $(srcdir)/hpux-thread.c
-	$(COMPILE) -I$(srcdir)/osf-share -I$(srcdir)/osf-share/HP800 \
-		-I/usr/include/dce $(srcdir)/hpux-thread.c
-	$(POSTCOMPILE)
-
 # main.o needs an explicit build rule to get TARGET_SYSTEM_ROOT and BINDIR.
 main.o: $(srcdir)/main.c
 	$(COMPILE) $(TARGET_SYSTEM_ROOT_DEFINE) -DBINDIR=\"$(bindir)\" 
$(srcdir)/main.c
Index: src/gdb/configure
===================================================================
--- src.orig/gdb/configure	2011-01-14 13:16:54.000000000 +0000
+++ src/gdb/configure	2011-01-14 13:30:42.698101003 +0000
@@ -14328,27 +14328,6 @@ $as_echo "$found" >&6; }
 
 if test ${build} = ${host} -a ${host} = ${target} ; then
    case ${host_os} in
-   hpux*)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HPUX/OSF thread 
support" >&5
-$as_echo_n "checking for HPUX/OSF thread support... " >&6; }
-      if test -f /usr/include/dce/cma_config.h ; then
-         if test "$GCC" = "yes" ; then
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_HPUX_THREAD_SUPPORT 1" >>confdefs.h
-
-            CONFIG_OBS="${CONFIG_OBS} hpux-thread.o"
-            CONFIG_SRCS="${CONFIG_SRCS} hpux-thread.c"
-         else
-            { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (suppressed 
because you are not using GCC)" >&5
-$as_echo "no (suppressed because you are not using GCC)" >&6; }
-         fi
-      else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      fi
-      ;;
    solaris*)
       # See if thread_db library is around for Solaris thread debugging.
       # Note that we must explicitly test for version 1 of the library
Index: src/gdb/configure.ac
===================================================================
--- src.orig/gdb/configure.ac	2011-01-14 13:16:54.000000000 +0000
+++ src/gdb/configure.ac	2011-01-14 13:17:41.648101000 +0000
@@ -1528,22 +1528,6 @@ dnl and not doing a canadian cross build
 
 if test ${build} = ${host} -a ${host} = ${target} ; then
    case ${host_os} in
-   hpux*)
-      AC_MSG_CHECKING(for HPUX/OSF thread support)
-      if test -f /usr/include/dce/cma_config.h ; then
-         if test "$GCC" = "yes" ; then
-            AC_MSG_RESULT(yes)
-            AC_DEFINE(HAVE_HPUX_THREAD_SUPPORT, 1,
-	    [Define if you have HPUX threads])
-            CONFIG_OBS="${CONFIG_OBS} hpux-thread.o"
-            CONFIG_SRCS="${CONFIG_SRCS} hpux-thread.c"
-         else
-            AC_MSG_RESULT(no (suppressed because you are not using GCC))
-         fi
-      else
-         AC_MSG_RESULT(no)
-      fi
-      ;;
    solaris*)
       # See if thread_db library is around for Solaris thread debugging.
       # Note that we must explicitly test for version 1 of the library
Index: src/gdb/hppa-hpux-nat.c
===================================================================
--- src.orig/gdb/hppa-hpux-nat.c	2011-01-14 13:16:54.000000000 +0000
+++ src/gdb/hppa-hpux-nat.c	2011-01-14 13:17:41.648101000 +0000
@@ -35,9 +35,6 @@
 #include "inf-ptrace.h"
 #include "inf-ttrace.h"
 
-/* Non-zero if we should pretend not to be a runnable target.  */
-int child_suppress_run = 0;
-
 /* Return the offset of register REGNUM within `struct save_state'.
    The offset returns depends on the flags in the "flags" register and
    the register size (32-bit or 64-bit).  These are taken from
@@ -236,15 +233,6 @@ hppa_hpux_store_inferior_registers (stru
     hppa_hpux_store_register (regcache, regnum);
 }
 
-static int
-hppa_hpux_child_can_run (void)
-{
-  /* This variable is controlled by modules that layer their own
-     process structure atop that provided here.  The code in
-     hpux-thread.c does this to support the HP-UX user-mode DCE
-     threads.  */
-  return !child_suppress_run;
-}
 \f
 
 /* Prevent warning from -Wmissing-prototypes.  */
@@ -263,7 +251,6 @@ _initialize_hppa_hpux_nat (void)
 
   t->to_fetch_registers = hppa_hpux_fetch_inferior_registers;
   t->to_store_registers = hppa_hpux_store_inferior_registers;
-  t->to_can_run = hppa_hpux_child_can_run;
 
   add_target (t);
 }
Index: src/gdb/hpux-thread.c
===================================================================
--- src.orig/gdb/hpux-thread.c	2011-01-14 13:17:12.000000000 +0000
+++ /dev/null	1970-01-01 00:00:00.000000000 +0000
@@ -1,574 +0,0 @@
-/* Low level interface for debugging HPUX/DCE threads for GDB, the GNU
-   debugger.
-
-   Copyright (C) 1996, 1998, 1999, 2000, 2001, 2004, 2007, 2008, 2009, 2010,
-   2011 Free Software Foundation, Inc.
-
-   This file is part of GDB.
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 3 of the License, or
-   (at your option) any later version.
-
-   This program 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 General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* This module implements a sort of half target that sits between the
-   machine-independent parts of GDB and the ptrace interface (infptrace.c) to
-   provide access to the HPUX user-mode thread implementation.
-
-   HPUX threads are true user-mode threads, which are invoked via the cma_*
-   and pthread_* (DCE and Posix respectively) interfaces.  These are mostly
-   implemented in user-space, with all thread context kept in various
-   structures that live in the user's heap.  For the most part, the kernel 
has
-   no knowlege of these threads.  */
-
-#include "defs.h"
-
-#define _CMA_NOWRAPPERS_
-
-#include <cma_tcb_defs.h>
-#include <cma_deb_core.h>
-#include "gdbthread.h"
-#include "target.h"
-#include "inferior.h"
-#include "regcache.h"
-#include <fcntl.h>
-#include <string.h>
-#include "gdb_stat.h"
-#include "gdbcore.h"
-#include "hppa-tdep.h"
-#include "observer.h"
-
-extern int child_suppress_run;
-
-extern void _initialize_hpux_thread (void);
-
-struct string_map
-  {
-    int num;
-    char *str;
-  };
-
-static int hpux_thread_active = 0;
-
-static ptid_t main_ptid;		/* Real process ID */
-
-static CORE_ADDR P_cma__g_known_threads;
-static CORE_ADDR P_cma__g_current_thread;
-
-static void init_hpux_thread_ops (void);
-
-static struct target_ops hpux_thread_ops;
-\f
-static ptid_t find_active_thread (void);
-
-static int cached_thread;
-static cma__t_int_tcb cached_tcb;
-
-static ptid_t
-find_active_thread (void)
-{
-  static cma__t_int_tcb tcb;
-  CORE_ADDR tcb_ptr;
-
-  read_memory ((CORE_ADDR) P_cma__g_current_thread,
-	       (char *) &tcb_ptr,
-	       sizeof tcb_ptr);
-
-  read_memory (tcb_ptr, (char *) &tcb, sizeof tcb);
-
-  return (ptid_build (PIDGET (main_ptid), 0,
-                      cma_thread_get_unique (&tcb.prolog.client_thread)));
-}
-
-static cma__t_int_tcb *find_tcb (ptid_t ptid);
-
-static cma__t_int_tcb *
-find_tcb (ptid_t ptid)
-{
-  cma__t_known_object queue_header;
-  cma__t_queue *queue_ptr;
-  int thread = ptid_get_tid (ptid);
-
-  if (thread == cached_thread)
-    return &cached_tcb;
-
-  read_memory ((CORE_ADDR) P_cma__g_known_threads,
-	       (char *) &queue_header,
-	       sizeof queue_header);
-
-  for (queue_ptr = queue_header.queue.flink;
-       queue_ptr != (cma__t_queue *) P_cma__g_known_threads;
-       queue_ptr = cached_tcb.threads.flink)
-    {
-      cma__t_int_tcb *tcb_ptr;
-
-      tcb_ptr = cma__base (queue_ptr, threads, cma__t_int_tcb);
-
-      read_memory ((CORE_ADDR) tcb_ptr, (char *) &cached_tcb,
-		   sizeof cached_tcb);
-
-      if (cached_tcb.header.type == cma__c_obj_tcb)
-	if (cma_thread_get_unique (&cached_tcb.prolog.client_thread) == thread)
-	  {
-	    cached_thread = thread;
-	    return &cached_tcb;
-	  }
-    }
-
-  error (_("Can't find TCB %d"), thread);
-  return NULL;
-}
-\f
-/* Most target vector functions from here on actually just pass through to
-   inftarg.c, as they don't need to do anything specific for threads.  */
-
-static void
-hpux_thread_open (char *arg, int from_tty)
-{
-  deprecated_child_ops.to_open (arg, from_tty);
-}
-
-/* Attach to process PID, then initialize for debugging it
-   and wait for the trace-trap that results from attaching.  */
-
-static void
-hpux_thread_attach (struct target_ops *ops, char *args, int from_tty)
-{
-  deprecated_child_ops.to_attach (&deprecated_child_ops, args, from_tty);
-
-  /* XXX - might want to iterate over all the threads and register them.  */
-}
-
-/* Take a program previously attached to and detaches it.
-   The program resumes execution and will no longer stop
-   on signals, etc.  We'd better not have left any breakpoints
-   in the program or it'll die when it hits one.  For this
-   to work, it may be necessary for the process to have been
-   previously attached.  It *might* work if the program was
-   started via the normal ptrace (PTRACE_TRACEME).  */
-
-static void
-hpux_thread_detach (struct target_ops *ops, char *args, int from_tty)
-{
-  deprecated_child_ops.to_detach (&deprecated_child_ops, args, from_tty);
-}
-
-/* Resume execution of process PID.  If STEP is nozero, then
-   just single step it.  If SIGNAL is nonzero, restart it with that
-   signal activated.  We may have to convert pid from a thread-id to an LWP 
id
-   for procfs.  */
-
-static void
-hpux_thread_resume (struct target_ops *ops,
-		    ptid_t ptid, int step, enum target_signal signo)
-{
-  struct cleanup *old_chain;
-
-  old_chain = save_inferior_ptid ();
-
-  ptid = main_ptid;
-  inferior_ptid = main_ptid;
-
-  deprecated_child_ops.to_resume (&deprecated_child_ops, ptid, step, signo);
-
-  cached_thread = 0;
-
-  do_cleanups (old_chain);
-}
-
-/* Wait for any threads to stop.  We may have to convert PID from a thread id
-   to a LWP id, and vice versa on the way out.  */
-
-static ptid_t
-hpux_thread_wait (struct target_ops *ops, ptid_t ptid,
-		  struct target_waitstatus *ourstatus, int options)
-{
-  ptid_t rtnval;
-  struct cleanup *old_chain;
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  if (!ptid_equal (ptid, minus_one_ptid))
-    ptid = main_ptid;
-
-  rtnval = deprecated_child_ops.to_wait (&deprecated_child_ops,
-					 ptid, ourstatus, options);
-
-  rtnval = find_active_thread ();
-
-  do_cleanups (old_chain);
-
-  return rtnval;
-}
-
-static char regmap[] =
-{
-  -2, -1, -1, 0, 4, 8, 12, 16, 20, 24,	/* flags, r1 -> r9 */
-  28, 32, 36, 40, 44, 48, 52, 56, 60, -1,	/* r10 -> r19 */
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,	/* r20 -> r29 */
-
-  /* r30, r31, sar, pcoqh, pcsqh, pcoqt, pcsqt, eiem, iir, isr */
-  -2, -1, -1, -2, -1, -1, -1, -1, -1, -1,
-
-  /* ior, ipsw, goto, sr4, sr0, sr1, sr2, sr3, sr5, sr6 */
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-  /* sr7, cr0, cr8, cr9, ccr, cr12, cr13, cr24, cr25, cr26 */
-  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-
-  -1, -1, -1, -1,		/* mpsfu_high, mpsfu_low, mpsfu_ovflo, pad */
-  144, -1, -1, -1, -1, -1, -1, -1,	/* fpsr, fpe1 -> fpe7 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr4 -> fr7 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr8 -> fr11 */
-  136, -1, 128, -1, 120, -1, 112, -1,	/* fr12 -> fr15 */
-  104, -1, 96, -1, 88, -1, 80, -1,	/* fr16 -> fr19 */
-  72, -1, 64, -1, -1, -1, -1, -1,	/* fr20 -> fr23 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr24 -> fr27 */
-  -1, -1, -1, -1, -1, -1, -1, -1,	/* fr28 -> fr31 */
-};
-
-static void
-hpux_thread_fetch_registers (struct target_ops *ops,
-			     struct regcache *regcache, int regno)
-{
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  cma__t_int_tcb tcb, *tcb_ptr;
-  struct cleanup *old_chain;
-  int i;
-  int first_regno, last_regno;
-
-  tcb_ptr = find_tcb (inferior_ptid);
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  if (tcb_ptr->state == cma__c_state_running)
-    {
-      deprecated_child_ops.to_fetch_registers (&deprecated_child_ops,
-					       regcache, regno);
-
-      do_cleanups (old_chain);
-
-      return;
-    }
-
-  if (regno == -1)
-    {
-      first_regno = 0;
-      last_regno = gdbarch_num_regs (gdbarch) - 1;
-    }
-  else
-    {
-      first_regno = regno;
-      last_regno = regno;
-    }
-
-  for (regno = first_regno; regno <= last_regno; regno++)
-    {
-      if (regmap[regno] == -1)
-	deprecated_child_ops.to_fetch_registers (&deprecated_child_ops,
-						 regcache, regno);
-      else
-	{
-	  unsigned char buf[MAX_REGISTER_SIZE];
-	  CORE_ADDR sp;
-
-	  sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160;
-
-	  if (regno == HPPA_FLAGS_REGNUM)
-	    /* Flags must be 0 to avoid bogus value for SS_INSYSCALL.  */
-	    memset (buf, '\000', register_size (gdbarch, regno));
-	  else if (regno == HPPA_SP_REGNUM)
-	    store_unsigned_integer (buf, sizeof sp, byte_order, sp);
-	  else if (regno == HPPA_PCOQ_HEAD_REGNUM)
-	    read_memory (sp - 20, buf, register_size (gdbarch, regno));
-	  else
-	    read_memory (sp + regmap[regno], buf,
-			 register_size (gdbarch, regno));
-
-	  regcache_raw_supply (regcache, regno, buf);
-	}
-    }
-
-  do_cleanups (old_chain);
-}
-
-static void
-hpux_thread_store_registers (struct target_ops *ops,
-			     struct regcache *regcache, int regno)
-{
-  struct gdbarch *gdbarch = get_regcache_arch (regcache);
-  cma__t_int_tcb tcb, *tcb_ptr;
-  struct cleanup *old_chain;
-  int i;
-  int first_regno, last_regno;
-
-  tcb_ptr = find_tcb (inferior_ptid);
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  if (tcb_ptr->state == cma__c_state_running)
-    {
-      deprecated_child_ops.to_store_registers (&deprecated_child_ops,
-					       regcache, regno);
-
-      do_cleanups (old_chain);
-
-      return;
-    }
-
-  if (regno == -1)
-    {
-      first_regno = 0;
-      last_regno = gdbarch_num_regs (gdbarch) - 1;
-    }
-  else
-    {
-      first_regno = regno;
-      last_regno = regno;
-    }
-
-  for (regno = first_regno; regno <= last_regno; regno++)
-    {
-      if (regmap[regno] == -1)
-	deprecated_child_ops.to_store_registers (regcache, regno);
-      else
-	{
-	  unsigned char buf[MAX_REGISTER_SIZE];
-	  CORE_ADDR sp;
-
-	  sp = (CORE_ADDR) tcb_ptr->static_ctx.sp - 160;
-
-	  if (regno == HPPA_FLAGS_REGNUM)
-	    {
-	      /* Let lower layer handle this...  */
-	      deprecated_child_ops.to_store_registers
-		(&deprecated_child_ops, regcache, regno);
-	    }
-	  else if (regno == HPPA_SP_REGNUM)
-	    {
-	      regcache_raw_collect (regcache, regno, buf);
-	      write_memory ((CORE_ADDR) &tcb_ptr->static_ctx.sp, buf,
-			    register_size (gdbarch, regno));
-	      tcb_ptr->static_ctx.sp
-		= (cma__t_hppa_regs *) ((CORE_ADDR) buf + 160);
-	    }
-	  else if (regno == HPPA_PCOQ_HEAD_REGNUM)
-	    {
-	      regcache_raw_collect (regcache, regno, buf);
-	      write_memory (sp - 20, buf,
-			    register_size (gdbarch, regno));
-	    }
-	  else
-	    {
-	      regcache_raw_collect (regcache, regno, buf);
-	      write_memory (sp + regmap[regno], buf,
-			    register_size (gdbarch, regno));
-	    }
-	}
-    }
-
-  do_cleanups (old_chain);
-}
-
-/* Get ready to modify the registers array.  On machines which store
-   individual registers, this doesn't need to do anything.  On machines
-   which store all the registers in one fell swoop, this makes sure
-   that registers contains all the registers from the program being
-   debugged.  */
-
-static void
-hpux_thread_prepare_to_store (struct regcache *regcache)
-{
-  deprecated_child_ops.to_prepare_to_store (regcache);
-}
-
-static int
-hpux_thread_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len,
-			 int dowrite, struct mem_attrib *attribs,
-			 struct target_ops *target)
-{
-  int retval;
-  struct cleanup *old_chain;
-
-  old_chain = save_inferior_ptid ();
-
-  inferior_ptid = main_ptid;
-
-  retval = 
-    deprecated_child_ops.deprecated_xfer_memory (memaddr, myaddr, len,
-						 dowrite, attribs, target);
-
-  do_cleanups (old_chain);
-
-  return retval;
-}
-
-/* Print status information about what we're accessing.  */
-
-static void
-hpux_thread_files_info (struct target_ops *ignore)
-{
-  deprecated_child_ops.to_files_info (ignore);
-}
-
-static void
-hpux_thread_kill_inferior (struct target_ops *ops)
-{
-  deprecated_child_ops.to_kill (&deprecated_child_ops);
-}
-
-static void
-hpux_thread_notice_signals (ptid_t ptid)
-{
-  deprecated_child_ops.to_notice_signals (ptid);
-}
-
-/* Fork an inferior process, and start debugging it with /proc.  */
-
-static void
-hpux_thread_create_inferior (struct target_ops *ops, char *exec_file,
-			     char *allargs, char **env, int from_tty)
-{
-  deprecated_child_ops.to_create_inferior (&deprecated_child_ops, 
-					   exec_file, allargs, env, from_tty);
-
-  if (hpux_thread_active)
-    {
-      main_ptid = inferior_ptid;
-
-      push_target (&hpux_thread_ops);
-
-      inferior_ptid = find_active_thread ();
-
-      add_thread (inferior_ptid);
-    }
-}
-
-/* This routine is called whenever a new symbol table is read in, or when all
-   symbol tables are removed.  libthread_db can only be initialized when it
-   finds the right variables in libthread.so.  Since it's a shared library,
-   those variables don't show up until the library gets mapped and the symbol
-   table is read in.  */
-
-static void
-hpux_thread_new_objfile (struct objfile *objfile)
-{
-  struct minimal_symbol *ms;
-
-  if (!objfile)
-    {
-      hpux_thread_active = 0;
-      return;
-    }
-
-  ms = lookup_minimal_symbol ("cma__g_known_threads", NULL, objfile);
-
-  if (!ms)
-    return;
-
-  P_cma__g_known_threads = SYMBOL_VALUE_ADDRESS (ms);
-
-  ms = lookup_minimal_symbol ("cma__g_current_thread", NULL, objfile);
-
-  if (!ms)
-    return;
-
-  P_cma__g_current_thread = SYMBOL_VALUE_ADDRESS (ms);
-
-  hpux_thread_active = 1;
-}
-
-/* Clean up after the inferior dies.  */
-
-static void
-hpux_thread_mourn_inferior (void)
-{
-  deprecated_child_ops.to_mourn_inferior (&deprecated_child_ops);
-}
-
-/* Mark our target-struct as eligible for stray "run" and "attach"
-   commands.  */
-
-static int
-hpux_thread_can_run (void)
-{
-  return child_suppress_run;
-}
-
-static int
-hpux_thread_alive (struct target_ops *ops, ptid_t ptid)
-{
-  return 1;
-}
-
-static void
-hpux_thread_stop (ptid_t ptid)
-{
-  deprecated_child_ops.to_stop (ptid);
-}
-\f
-static void
-init_hpux_thread_ops (void)
-{
-  hpux_thread_ops.to_shortname = "hpux-threads";
-  hpux_thread_ops.to_longname = "HPUX threads and pthread.";
-  hpux_thread_ops.to_doc = "HPUX threads and pthread support.";
-  hpux_thread_ops.to_open = hpux_thread_open;
-  hpux_thread_ops.to_attach = hpux_thread_attach;
-  hpux_thread_ops.to_detach = hpux_thread_detach;
-  hpux_thread_ops.to_resume = hpux_thread_resume;
-  hpux_thread_ops.to_wait = hpux_thread_wait;
-  hpux_thread_ops.to_fetch_registers = hpux_thread_fetch_registers;
-  hpux_thread_ops.to_store_registers = hpux_thread_store_registers;
-  hpux_thread_ops.to_prepare_to_store = hpux_thread_prepare_to_store;
-  hpux_thread_ops.deprecated_xfer_memory = hpux_thread_xfer_memory;
-  hpux_thread_ops.to_files_info = hpux_thread_files_info;
-  hpux_thread_ops.to_insert_breakpoint = memory_insert_breakpoint;
-  hpux_thread_ops.to_remove_breakpoint = memory_remove_breakpoint;
-  hpux_thread_ops.to_terminal_init = terminal_init_inferior;
-  hpux_thread_ops.to_terminal_inferior = terminal_inferior;
-  hpux_thread_ops.to_terminal_ours_for_output = terminal_ours_for_output;
-  hpux_thread_ops.to_terminal_save_ours = terminal_save_ours;
-  hpux_thread_ops.to_terminal_ours = terminal_ours;
-  hpux_thread_ops.to_terminal_info = child_terminal_info;
-  hpux_thread_ops.to_kill = hpux_thread_kill_inferior;
-  hpux_thread_ops.to_create_inferior = hpux_thread_create_inferior;
-  hpux_thread_ops.to_mourn_inferior = hpux_thread_mourn_inferior;
-  hpux_thread_ops.to_can_run = hpux_thread_can_run;
-  hpux_thread_ops.to_notice_signals = hpux_thread_notice_signals;
-  hpux_thread_ops.to_thread_alive = hpux_thread_alive;
-  hpux_thread_ops.to_stop = hpux_thread_stop;
-  hpux_thread_ops.to_stratum = process_stratum;
-  hpux_thread_ops.to_has_all_memory = default_child_has_all_memory;
-  hpux_thread_ops.to_has_memory = default_child_has_memory;
-  hpux_thread_ops.to_has_stack = default_child_has_stack;
-  hpux_thread_ops.to_has_registers = default_child_has_registers;
-  hpux_thread_ops.to_has_execution = default_child_has_execution;
-  hpux_thread_ops.to_magic = OPS_MAGIC;
-}
-
-void
-_initialize_hpux_thread (void)
-{
-  init_hpux_thread_ops ();
-  add_target (&hpux_thread_ops);
-
-  child_suppress_run = 1;
-  /* Hook into new_objfile notification.  */
-  observer_attach_new_objfile (hpux_thread_new_objfile);
-}
Index: src/gdb/config.in
===================================================================
--- src.orig/gdb/config.in	2011-01-13 10:47:50.000000000 +0000
+++ src/gdb/config.in	2011-01-14 13:30:48.000000000 +0000
@@ -190,9 +190,6 @@
 /* Define if <sys/procfs.h> has gregset_t. */
 #undef HAVE_GREGSET_T
 
-/* Define if you have HPUX threads */
-#undef HAVE_HPUX_THREAD_SUPPORT
-
 /* Define if you have the iconv() function. */
 #undef HAVE_ICONV
 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-01-14 13:41 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-01-14  0:34 [commit/hpux] delete hpux_pid_to_str (unused) Joel Brobecker
2011-01-14 12:30 ` Mark Kettenis
2011-01-14 12:38   ` Pedro Alves
2011-01-14 12:47     ` Mark Kettenis
2011-01-14 13:49       ` Pedro Alves
2011-01-14 13:41     ` Joel Brobecker

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).