This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [commit/hpux] delete hpux_pid_to_str (unused)


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;
-}
 
 
 /* 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;
-
-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;
-}
-
-/* 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);
-}
-
-/* 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;
-}
-
-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 Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]