Module Name:    src
Committed By:   christos
Date:           Mon Sep 26 20:38:54 UTC 2011

Modified Files:
        src/external/gpl3/gdb/dist/gdb: amd64nbsd-nat.c nbsd-thread.c

Log Message:
Provide regset functions and gut parts that the new debugging thread library
does not provide yet, so that we can link. As expected this does not work
yet.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c
cvs rdiff -u -r1.1 -r1.2 src/external/gpl3/gdb/dist/gdb/nbsd-thread.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c
diff -u src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c:1.2 src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c:1.3
--- src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c:1.2	Sun Sep 25 12:30:24 2011
+++ src/external/gpl3/gdb/dist/gdb/amd64nbsd-nat.c	Mon Sep 26 16:38:54 2011
@@ -32,6 +32,17 @@
 
 #include <machine/frame.h>
 #include <machine/pcb.h>
+#include <machine/reg.h>
+
+#ifndef HAVE_GREGSET_T
+typedef struct reg gregset_t;
+#endif
+
+#ifndef HAVE_FPREGSET_T
+typedef struct fpreg fpregset_t;
+#endif
+
+#include "gregset.h"
 
 /* Mapping between the general-purpose registers in NetBSD/amd64
    `struct reg' format and GDB's register cache layout for
@@ -113,6 +124,45 @@ amd64nbsd_supply_pcb (struct regcache *r
   return 1;
 }
 
+void
+supply_gregset (struct regcache *regcache, const gregset_t *gregsetp)
+{
+  amd64_supply_native_gregset (regcache, gregsetp, -1);
+}
+
+/* Fill register REGNUM (if it is a general-purpose register) in
+   *GREGSETP with the value in GDB's register cache.  If REGNUM is -1,
+   do this for all registers.  */
+
+void
+fill_gregset (const struct regcache *regcache,
+	      gregset_t *gregsetp, int regnum)
+{
+  amd64_collect_native_gregset (regcache, gregsetp, regnum);
+}
+
+/* Transfering floating-point registers between GDB, inferiors and cores.  */
+
+/* Fill GDB's register cache with the floating-point and SSE register
+   values in *FPREGSETP.  */
+
+void
+supply_fpregset (struct regcache *regcache, const fpregset_t *fpregsetp)
+{
+  amd64_supply_fxsave (regcache, -1, fpregsetp);
+}
+
+/* Fill register REGNUM (if it is a floating-point or SSE register) in
+   *FPREGSETP with the value in GDB's register cache.  If REGNUM is
+   -1, do this for all registers.  */
+
+void
+fill_fpregset (const struct regcache *regcache,
+	       fpregset_t *fpregsetp, int regnum)
+{
+  amd64_collect_fxsave (regcache, regnum, fpregsetp);
+}
+
 /* Provide a prototype to silence -Wmissing-prototypes.  */
 void _initialize_amd64nbsd_nat (void);
 

Index: src/external/gpl3/gdb/dist/gdb/nbsd-thread.c
diff -u src/external/gpl3/gdb/dist/gdb/nbsd-thread.c:1.1 src/external/gpl3/gdb/dist/gdb/nbsd-thread.c:1.2
--- src/external/gpl3/gdb/dist/gdb/nbsd-thread.c:1.1	Mon Sep 26 14:55:56 2011
+++ src/external/gpl3/gdb/dist/gdb/nbsd-thread.c	Mon Sep 26 16:38:54 2011
@@ -75,14 +75,6 @@ struct target_ops nbsd_core_ops;
 struct td_proc_callbacks_t nbsd_thread_callbacks;
 struct td_proc_callbacks_t nbsd_core_callbacks;
 
-/* place to store core_ops before we overwrite it */
-static struct target_ops orig_core_ops;
-
-extern struct target_ops child_ops;  /* target vector for inftarg.c */
-extern struct target_ops core_ops; /* target vector for corelow.c */
-
-extern int child_suppress_run;
-
 static ptid_t find_active_thread (void);
 static void nbsd_find_new_threads (struct target_ops *);
 
@@ -169,12 +161,13 @@ nbsd_thread_deactivate (void)
 static void
 nbsd_thread_attach (struct target_ops *ops, char *args, int from_tty)
 {
+  struct target_ops *beneath = find_target_beneath (ops);
   nbsd_thread_core = 0;
 
   if (nbsd_thread_present && !nbsd_thread_active)
     push_target(&nbsd_thread_ops);
 
-  child_ops.to_attach (ops, args, from_tty);
+  beneath->to_attach (beneath, args, from_tty);
 
   /* seems like a good place to activate, but isn't. Let it happen in
      nbsd_thread_post_attach(), after a wait has occurred. */
@@ -183,7 +176,10 @@ nbsd_thread_attach (struct target_ops *o
 static void
 nbsd_thread_post_attach (int pid)
 {
-  child_ops.to_post_attach (pid);
+#if 0
+  struct target_ops *beneath = find_target_beneath (ops);
+  beneath->to_post_attach (pid);
+#endif
 
   if (nbsd_thread_present && !nbsd_thread_active)
     nbsd_thread_activate ();
@@ -209,7 +205,7 @@ nbsd_thread_detach (struct target_ops *o
      cache so that attach -> detach -> attach works. */
   clear_solib();
   symbol_file_clear(0);
-  child_ops.to_detach (beneath, args, from_tty);
+  beneath->to_detach (beneath, args, from_tty);
 }
 
 static int nsusp;
@@ -266,6 +262,7 @@ static void
 nbsd_thread_resume (struct target_ops *ops, ptid_t ptid, int step,
     enum target_signal signo)
 {
+  struct target_ops *beneath = find_target_beneath (ops);
 
   /* If a particular thread is specified, then gdb wants to resume or
      step just that thread. If it isn't on a processor, then it needs
@@ -282,12 +279,12 @@ nbsd_thread_resume (struct target_ops *o
       if (val != 0)
 	error ("nbsd_thread_resume td_thr_iter: %s", td_err_string (val));
 
-	child_ops.to_resume (ops, ptid, step, signo);
+	beneath->to_resume (beneath, ptid, step, signo);
 
       /* can't un-suspend just yet, child may not be stopped */
     }
   else
-    child_ops.to_resume (ops, ptid, step, signo);
+    beneath->to_resume (beneath, ptid, step, signo);
 
   cached_thread = minus_one_ptid;
 }
@@ -341,8 +338,9 @@ nbsd_thread_wait (struct target_ops *ops
   struct target_waitstatus *ourstatus, int options)
 {
   ptid_t rtnval;
+  struct target_ops *beneath = find_target_beneath (ops);
 
-  rtnval = child_ops.to_wait (ops, ptid, ourstatus, options);
+  rtnval = beneath->to_wait (beneath, ptid, ourstatus, options);
 
   nbsd_thread_unsuspend();
 
@@ -362,6 +360,7 @@ static void
 nbsd_thread_fetch_registers (struct target_ops *ops, struct regcache *cache,
     int regno)
 {
+  struct target_ops *beneath = find_target_beneath (ops);
   td_thread_t *thread;
   gregset_t gregs;
   fpregset_t fpregs;
@@ -384,14 +383,12 @@ nbsd_thread_fetch_registers (struct targ
     }
   else
     {
-      if (target_has_execution)
-	child_ops.to_fetch_registers (ops, cache, regno);
-      else
+      if (!target_has_execution)
 	{
 	  inferior_ptid = pid_to_ptid ((GET_LWP (inferior_ptid) << 16) | 
 				        GET_PID (inferior_ptid));
-	  orig_core_ops.to_fetch_registers (ops, cache, regno);
 	}
+	beneath->to_fetch_registers (beneath, cache, regno);
     }
   
   do_cleanups (old_chain);
@@ -401,6 +398,7 @@ static void
 nbsd_thread_store_registers (struct target_ops *ops, struct regcache *cache,
     int regno)
 {
+  struct target_ops *beneath = find_target_beneath (ops);
   td_thread_t *thread;
   gregset_t gregs;
   fpregset_t fpregs;
@@ -427,10 +425,7 @@ nbsd_thread_store_registers (struct targ
     }
   else
     {
-      if (target_has_execution)
-	child_ops.to_store_registers (ops, cache, regno);
-      else
-	orig_core_ops.to_store_registers (ops, cache, regno);
+	beneath->to_store_registers (beneath, cache, regno);
     }
 
 }
@@ -443,15 +438,11 @@ nbsd_thread_xfer_partial (struct target_
 			  const gdb_byte *writebuf,  ULONGEST offset,
 			  LONGEST len)
 {
+  struct target_ops *beneath = find_target_beneath (ops);
   LONGEST val;
 
-  if (target_has_execution)
-    val = child_ops.to_xfer_partial (ops, object, annex, readbuf, writebuf,
-				     offset, len);
-  else
-    val = orig_core_ops.to_xfer_partial (ops, object, annex, readbuf, writebuf,
-					 offset, len);
-
+  val = beneath->to_xfer_partial (beneath, object, annex, readbuf, writebuf,
+				  offset, len);
   return val;
 }
 
@@ -466,20 +457,22 @@ nbsd_thread_mourn_inferior (struct targe
     nbsd_thread_deactivate ();
 
   unpush_target (ops);
-  child_ops.to_mourn_inferior (beneath);
+  beneath->to_mourn_inferior (beneath);
 }
 
 
 static void
 nbsd_thread_files_info (struct target_ops *ignore)
 {
-  child_ops.to_files_info (ignore);
+  struct target_ops *beneath = find_target_beneath (ignore);
+  beneath->to_files_info (beneath);
 }
 
 static void
 nbsd_core_files_info (struct target_ops *ignore)
 {
-  orig_core_ops.to_files_info (ignore);
+  struct target_ops *beneath = find_target_beneath (ignore);
+  beneath->to_files_info (beneath);
 }
 
 /* Convert a ptid to printable form. */
@@ -531,10 +524,6 @@ nbsd_thread_new_objfile (struct objfile 
       goto quit;
     }
 
-  /* don't do anything if init failed */
-  if (!child_suppress_run)
-    goto quit;
-
   /* Don't do anything if we've already fired up the debugging library */
   if (nbsd_thread_active)
     goto quit;
@@ -566,6 +555,7 @@ quit:
 static int
 nbsd_thread_alive (struct target_ops *ops, ptid_t ptid)
 {
+  struct target_ops *beneath = find_target_beneath (ops);
   td_thread_t *th;
   td_thread_info_t ti;
   int val;
@@ -595,10 +585,10 @@ nbsd_thread_alive (struct target_ops *op
 	    val = 1;
 	}
       else
-	val = child_ops.to_thread_alive (ops, ptid);
+	val = beneath->to_thread_alive (beneath, ptid);
     }
   else
-    val = child_ops.to_thread_alive (ops, ptid);
+    val = beneath->to_thread_alive (beneath, ptid);
 
   return val;
 }
@@ -606,7 +596,8 @@ nbsd_thread_alive (struct target_ops *op
 static int
 nbsd_core_thread_alive (struct target_ops *ops, ptid_t ptid)
 {
-  return orig_core_ops.to_thread_alive (ops, ptid);
+  struct target_ops *beneath = find_target_beneath (ops);
+  return beneath->to_thread_alive (beneath, ptid);
 }
 
 
@@ -638,15 +629,13 @@ nbsd_find_new_threads (struct target_ops
 {
   int retval;
   ptid_t ptid;
+#ifdef notyet
   td_thread_t *thread;
+#endif
 
   if (nbsd_thread_active == 0)
 	  return;
 
-  /* don't do anything if init failed to resolve the libthread_db library */
-  if (!child_suppress_run)
-    return;
-
   if (ptid_equal (inferior_ptid, minus_one_ptid))
     {
       printf_filtered ("No process.\n");
@@ -661,7 +650,9 @@ nbsd_find_new_threads (struct target_ops
       while ((retval != -1) && pl.pl_lwpid != 0)
 	{
 	  ptid = BUILD_LWP (pl.pl_lwpid, main_ptid);
+#ifdef notyet
 	  td_map_lwp2thr (main_ta, pl.pl_lwpid, &thread);
+#endif
 	  if (!in_thread_list (ptid))
 	    add_thread (ptid);
 	  retval = ptrace (PT_LWPINFO, GET_PID(inferior_ptid), (void *)&pl, sizeof(pl));
@@ -680,7 +671,7 @@ nbsd_find_new_threads (struct target_ops
 static int
 nbsd_thread_can_run (void)
 {
-  return child_suppress_run;
+  return 1;
 }
 
 
@@ -690,12 +681,13 @@ static void
 nbsd_thread_create_inferior (struct target_ops *ops, char *exec_file,
 			     char *allargs, char **env, int from_tty)
 {
+  struct target_ops *beneath = find_target_beneath (ops);
   nbsd_thread_core = 0;
 
   if (nbsd_thread_present && !nbsd_thread_active)
     push_target(&nbsd_thread_ops);
 
-  child_ops.to_create_inferior (ops, exec_file, allargs, env, from_tty);
+  beneath->to_create_inferior (beneath, exec_file, allargs, env, from_tty);
 
   if (nbsd_thread_present && !nbsd_thread_active)
     nbsd_thread_activate();
@@ -726,8 +718,10 @@ info_cb (td_thread_t *th, void *s)
 {
   int ret;
   td_thread_info_t ti, ti2;
+#ifdef notyet
   td_sync_t *ts;
   td_sync_info_t tsi;
+#endif
   char name[32];
 
   if ((ret = td_thr_info (th, &ti)) == 0)
@@ -764,6 +758,7 @@ info_cb (td_thread_t *th, void *s)
 
       if (ti.thread_state == TD_STATE_SLEEPING)
 	{
+#ifdef notyet
 	  td_thr_sleepinfo (th, &ts);
 	  td_sync_info (ts, &tsi);
 	  if (tsi.sync_type == TD_SYNC_JOIN)
@@ -777,14 +772,17 @@ info_cb (td_thread_t *th, void *s)
 			       syncnames[tsi.sync_type],
 			       (void *)tsi.sync_addr);
 	    }
+#endif
 	}
 
+#ifdef notyet
       if (ti.thread_hasjoiners)
 	{
 	  printf_filtered ("(being joined by");
 	  td_thr_join_iter (th, waiter_cb, NULL);
 	  printf_filtered (")");
 	}
+#endif
       printf_filtered ("\n");
     }
   else
@@ -846,8 +844,10 @@ static void
 nbsd_thread_sync_cmd (char *exp, int from_tty)
 {
   CORE_ADDR addr;
+#ifdef notyet
   td_sync_t *ts;
   td_sync_info_t tsi;
+#endif
   td_thread_info_t ti;
   int ret;
 
@@ -866,6 +866,7 @@ nbsd_thread_sync_cmd (char *exp, int fro
   else
     return;
 
+#ifdef notyet
   if ((ret = td_map_addr2sync (main_ta, (caddr_t)addr, &ts)) != 0)
     error ("nbsd_thread_sync_cmd: td_map_addr2sync: %s", td_err_string (ret));
 
@@ -926,6 +927,7 @@ nbsd_thread_sync_cmd (char *exp, int fro
     }
 
   printf_filtered ("\n");
+#endif
 }
 
 int
@@ -966,11 +968,14 @@ nbsd_add_to_thread_list (bfd *abfd, asec
 
   regval = atoi (bfd_section_name (abfd, asect) + 5);
 
+#ifdef notyet
   td_map_lwp2thr (main_ta, regval >> 16, &dummy);
+#endif
 
   add_thread (BUILD_LWP(regval >> 16, main_ptid));
 }
 
+#ifdef notyet
 static void
 nbsd_core_open (char *filename, int from_tty)
 {
@@ -978,7 +983,7 @@ nbsd_core_open (char *filename, int from
 
   nbsd_thread_core = 1;
 
-  orig_core_ops.to_open (filename, from_tty);
+  beneath->to_open (filename, from_tty);
 
   if (nbsd_thread_present)
     {
@@ -1006,8 +1011,9 @@ nbsd_core_close (int quitting)
    */
   inferior_ptid = minus_one_ptid;
 
-  orig_core_ops.to_close (quitting);
+  beneath->to_close (quitting);
 }
+#endif
 
 static void
 nbsd_core_detach (struct target_ops *ops, char *args, int from_tty)
@@ -1016,7 +1022,7 @@ nbsd_core_detach (struct target_ops *ops
   if (nbsd_thread_active)
     nbsd_thread_deactivate ();
   unpush_target (ops);
-  orig_core_ops.to_detach (beneath, args, from_tty);
+  beneath->to_detach (beneath, args, from_tty);
 }
 
 /*
@@ -1090,6 +1096,7 @@ nbsd_thread_proc_getregs (void *arg, int
   struct regcache *cache = a->cache;
   struct target_ops *ops = a->ops;
   struct cleanup *old_chain;
+  struct target_ops *beneath = find_target_beneath (ops);
   int ret;
 
   old_chain = save_inferior_ptid ();
@@ -1099,7 +1106,7 @@ nbsd_thread_proc_getregs (void *arg, int
       /* Fetching registers from a live process requires that
 	 inferior_ptid is a LWP value rather than a thread value. */
       inferior_ptid = BUILD_LWP (lwp, main_ptid);
-      child_ops.to_fetch_registers (ops, cache, -1);
+      beneath->to_fetch_registers (beneath, cache, -1);
     }
   else
     {
@@ -1107,7 +1114,7 @@ nbsd_thread_proc_getregs (void *arg, int
 	 the PID value of inferior_ptid have the funky value that
 	 the kernel drops rather than the real PID. Gross. */
       inferior_ptid = pid_to_ptid ((lwp << 16) | GET_PID (main_ptid));
-      orig_core_ops.to_fetch_registers (ops, cache, -1);
+      beneath->to_fetch_registers (ops, cache, -1);
     }
 
   ret = 0;
@@ -1135,6 +1142,7 @@ nbsd_thread_proc_setregs (void *arg, int
   struct regcache *cache = a->cache;
   struct target_ops *ops = a->ops;
   struct cleanup *old_chain;
+  struct target_ops *beneath = find_target_beneath (ops);
   int ret;
 
   ret = 0;
@@ -1155,7 +1163,7 @@ nbsd_thread_proc_setregs (void *arg, int
   /* Storing registers requires that inferior_ptid is a LWP value
      rather than a thread value. */
   inferior_ptid = BUILD_LWP (lwp, main_ptid);
-  child_ops.to_store_registers (ops, cache, -1);
+  beneath->to_store_registers (beneath, cache, -1);
   do_cleanups (old_chain);
 
   return ret;
@@ -1238,8 +1246,10 @@ init_nbsd_core_ops (void)
   nbsd_core_ops.to_shortname = "netbsd-core";
   nbsd_core_ops.to_longname = "NetBSD core pthread.";
   nbsd_core_ops.to_doc = "NetBSD pthread support for core files.";
+#ifdef notyet
   nbsd_core_ops.to_open = nbsd_core_open;
   nbsd_core_ops.to_close = nbsd_core_close;
+#endif
   nbsd_core_ops.to_detach = nbsd_core_detach;
   nbsd_core_ops.to_fetch_registers = nbsd_thread_fetch_registers;
   nbsd_core_ops.to_xfer_partial = nbsd_thread_xfer_partial;
@@ -1287,11 +1297,4 @@ _initialize_nbsd_thread (void)
 	   "Show all threads.",
 	   &thread_examine_list);
 
-
-  memcpy (&orig_core_ops, &core_ops, sizeof (struct target_ops));
-  memcpy (&core_ops, &nbsd_core_ops, sizeof (struct target_ops));
-  add_target (&core_ops);
-
-  child_suppress_run = 1;
-
 }

Reply via email to