* (struct remote_state): New type, only containing
[deliverable/binutils-gdb.git] / gdb / ppc-bdm.c
index e10ebace770c1a7d0e7caa6e4879360a74814496..96ea612c974ea5f12de7c0f1f50d26765fda6895 100644 (file)
@@ -1,6 +1,7 @@
 /* Remote target communications for the Macraigor Systems BDM Wiggler
    talking to a Motorola PPC 8xx ADS board
-   Copyright 1996, 1997 Free Software Foundation, Inc.
+   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -16,8 +17,8 @@
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
 
 #include "defs.h"
 #include "gdbcore.h"
 #include "bfd.h"
 #include "symfile.h"
 #include "target.h"
-#include "gdb_wait.h"
 #include "gdbcmd.h"
 #include "objfiles.h"
 #include "gdb-stabs.h"
 #include <sys/types.h>
-#include <signal.h>
 #include "serial.h"
 #include "ocd.h"
+#include "ppc-tdep.h"
+#include "regcache.h"
+#include "gdb_assert.h"
 
 static void bdm_ppc_open (char *name, int from_tty);
 
-static int bdm_ppc_wait (int pid, struct target_waitstatus *target_status);
+static ptid_t bdm_ppc_wait (ptid_t ptid,
+                            struct target_waitstatus *target_status);
 
 static void bdm_ppc_fetch_registers (int regno);
 
@@ -77,9 +80,7 @@ char nowatchdog[4] =
    NAME is the filename used for communication.  */
 
 static void
-bdm_ppc_open (name, from_tty)
-     char *name;
-     int from_tty;
+bdm_ppc_open (char *name, int from_tty)
 {
   CORE_ADDR watchdogaddr = 0xff000004;
 
@@ -98,10 +99,8 @@ bdm_ppc_open (name, from_tty)
    Returns "pid" (though it's not clear what, if anything, that
    means in the case of this target).  */
 
-static int
-bdm_ppc_wait (pid, target_status)
-     int pid;
-     struct target_waitstatus *target_status;
+static ptid_t
+bdm_ppc_wait (ptid_t ptid, struct target_waitstatus *target_status)
 {
   int stop_reason;
 
@@ -112,7 +111,7 @@ bdm_ppc_wait (pid, target_status)
   if (stop_reason)
     {
       target_status->value.sig = TARGET_SIGNAL_INT;
-      return inferior_pid;
+      return inferior_ptid;
     }
 
   target_status->value.sig = TARGET_SIGNAL_TRAP;       /* XXX for now */
@@ -127,7 +126,7 @@ bdm_ppc_wait (pid, target_status)
   }
 #endif
 
-  return inferior_pid;
+  return inferior_ptid;
 }
 \f
 static int bdm_regmap[] =
@@ -153,24 +152,14 @@ static int bdm_regmap[] =
  */
 
 static void
-bdm_ppc_fetch_registers (regno)
-     int regno;
+bdm_ppc_fetch_registers (int regno)
 {
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
   int i;
-  unsigned char *regs, *beginregs, *endregs, *almostregs;
-  unsigned char midregs[32];
-  unsigned char mqreg[1];
+  unsigned char *regs;
   int first_regno, last_regno;
   int first_bdm_regno, last_bdm_regno;
-  int reglen, beginreglen, endreglen;
-
-#if 1
-  for (i = 0; i < (FPLAST_REGNUM - FP0_REGNUM + 1); i++)
-    {
-      midregs[i] = -1;
-    }
-  mqreg[0] = -1;
-#endif
+  int reglen;
 
   if (regno == -1)
     {
@@ -191,10 +180,16 @@ bdm_ppc_fetch_registers (regno)
 
   if (first_bdm_regno == -1)
     {
-      supply_register (first_regno, NULL);
+      regcache_raw_supply (current_regcache, first_regno, NULL);
       return;                  /* Unsupported register */
     }
 
+  /* FIXME: jimb/2004-05-04: I'm not sure how to adapt this code to
+     processors that lack floating point registers, and I don't have
+     have the equipment to test it.  So we'll leave that case for the
+     next person who encounters it.  */
+  gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
+
 #if 1
   /* Can't ask for floating point regs on ppc 8xx, also need to
      avoid asking for the mq register. */
@@ -203,11 +198,13 @@ bdm_ppc_fetch_registers (regno)
 /*      printf("Asking for register %d\n", first_regno); */
 
       /* if asking for an invalid register */
-      if ((first_regno == MQ_REGNUM) ||
-         ((first_regno >= FP0_REGNUM) && (first_regno <= FPLAST_REGNUM)))
+      if ((first_regno == gdbarch_tdep (current_gdbarch)->ppc_mq_regnum)
+          || (first_regno == gdbarch_tdep (current_gdbarch)->ppc_fpscr_regnum)
+         || ((first_regno >= tdep->ppc_fp0_regnum)
+              && (first_regno < tdep->ppc_fp0_regnum + ppc_num_fprs)))
        {
 /*          printf("invalid reg request!\n"); */
-         supply_register (first_regno, NULL);
+         regcache_raw_supply (current_regcache, first_regno, NULL);
          return;               /* Unsupported register */
        }
       else
@@ -217,18 +214,9 @@ bdm_ppc_fetch_registers (regno)
        }
     }
   else
-    /* want all regs */
-    {
-/*      printf("Asking for registers %d to %d\n", first_regno, last_regno); */
-      beginregs = ocd_read_bdm_registers (first_bdm_regno,
-                                         FP0_REGNUM - 1, &beginreglen);
-      endregs = (strcat (midregs,
-                        ocd_read_bdm_registers (FPLAST_REGNUM + 1,
-                                         last_bdm_regno - 1, &endreglen)));
-      almostregs = (strcat (beginregs, endregs));
-      regs = (strcat (almostregs, mqreg));
-      reglen = beginreglen + 32 + endreglen + 1;
-    }
+    internal_error (__FILE__, __LINE__,
+                    _("ppc_bdm_fetch_registers: "
+                    "'all registers' case not implemented"));
 
 #endif
 #if 0
@@ -247,10 +235,10 @@ bdm_ppc_fetch_registers (regno)
          if (regoffset >= reglen / 4)
            continue;
 
-         supply_register (i, regs + 4 * regoffset);
+         regcache_raw_supply (current_regcache, i, regs + 4 * regoffset);
        }
       else
-       supply_register (i, NULL);      /* Unsupported register */
+       regcache_raw_supply (current_regcache, i, NULL);        /* Unsupported register */
     }
 }
 
@@ -258,9 +246,9 @@ bdm_ppc_fetch_registers (regno)
    of REGISTERS.  FIXME: ignores errors.  */
 
 static void
-bdm_ppc_store_registers (regno)
-     int regno;
+bdm_ppc_store_registers (int regno)
 {
+  struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
   int i;
   int first_regno, last_regno;
   int first_bdm_regno, last_bdm_regno;
@@ -285,6 +273,12 @@ bdm_ppc_store_registers (regno)
   if (first_bdm_regno == -1)
     return;                    /* Unsupported register */
 
+  /* FIXME: jimb/2004-05-04: I'm not sure how to adapt this code to
+     processors that lack floating point registers, and I don't have
+     have the equipment to test it.  So we'll leave that case for the
+     next person who encounters it.  */
+  gdb_assert (ppc_floating_point_unit_p (current_gdbarch));
+
   for (i = first_regno; i <= last_regno; i++)
     {
       int bdm_regno;
@@ -293,14 +287,17 @@ bdm_ppc_store_registers (regno)
 
       /* only attempt to write if it's a valid ppc 8xx register */
       /* (need to avoid FP regs and MQ reg) */
-      if ((i != MQ_REGNUM) && ((i < FP0_REGNUM) || (i > FPLAST_REGNUM)))
+      if ((i != gdbarch_tdep (current_gdbarch)->ppc_mq_regnum) 
+          && (i != gdbarch_tdep (current_gdbarch)->ppc_fpscr_regnum) 
+          && ((i < tdep->ppc_fp0_regnum)
+              || (i >= tdep->ppc_fp0_regnum + ppc_num_fprs)))
        {
 /*          printf("write valid reg %d\n", bdm_regno); */
-         ocd_write_bdm_registers (bdm_regno, registers + REGISTER_BYTE (i), 4);
+         ocd_write_bdm_registers (bdm_regno, deprecated_registers + DEPRECATED_REGISTER_BYTE (i), 4);
        }
 /*
-   else if (i == MQ_REGNUM)
-   printf("don't write invalid reg %d (MQ_REGNUM)\n", bdm_regno);
+   else if (i == gdbarch_tdep (current_gdbarch)->ppc_mq_regnum)
+   printf("don't write invalid reg %d (PPC_MQ_REGNUM)\n", bdm_regno);
    else
    printf("don't write invalid reg %d\n", bdm_regno);
  */
@@ -322,68 +319,35 @@ a wiggler, specify wiggler and then the port it is connected to\n\
 (e.g. wiggler lpt1).";         /* to_doc */
   bdm_ppc_ops.to_open = bdm_ppc_open;
   bdm_ppc_ops.to_close = ocd_close;
-  bdm_ppc_ops.to_attach = NULL;
-  bdm_ppc_ops.to_post_attach = NULL;
-  bdm_ppc_ops.to_require_attach = NULL;
   bdm_ppc_ops.to_detach = ocd_detach;
-  bdm_ppc_ops.to_require_detach = NULL;
   bdm_ppc_ops.to_resume = ocd_resume;
   bdm_ppc_ops.to_wait = bdm_ppc_wait;
-  bdm_ppc_ops.to_post_wait = NULL;
   bdm_ppc_ops.to_fetch_registers = bdm_ppc_fetch_registers;
   bdm_ppc_ops.to_store_registers = bdm_ppc_store_registers;
   bdm_ppc_ops.to_prepare_to_store = ocd_prepare_to_store;
-  bdm_ppc_ops.to_xfer_memory = ocd_xfer_memory;
+  bdm_ppc_ops.deprecated_xfer_memory = ocd_xfer_memory;
   bdm_ppc_ops.to_files_info = ocd_files_info;
   bdm_ppc_ops.to_insert_breakpoint = ocd_insert_breakpoint;
   bdm_ppc_ops.to_remove_breakpoint = ocd_remove_breakpoint;
-  bdm_ppc_ops.to_terminal_init = NULL;
-  bdm_ppc_ops.to_terminal_inferior = NULL;
-  bdm_ppc_ops.to_terminal_ours_for_output = NULL;
-  bdm_ppc_ops.to_terminal_ours = NULL;
-  bdm_ppc_ops.to_terminal_info = NULL;
   bdm_ppc_ops.to_kill = ocd_kill;
   bdm_ppc_ops.to_load = ocd_load;
-  bdm_ppc_ops.to_lookup_symbol = NULL;
   bdm_ppc_ops.to_create_inferior = ocd_create_inferior;
-  bdm_ppc_ops.to_post_startup_inferior = NULL;
-  bdm_ppc_ops.to_acknowledge_created_inferior = NULL;
-  bdm_ppc_ops.to_clone_and_follow_inferior = NULL;
-  bdm_ppc_ops.to_post_follow_inferior_by_clone = NULL;
-  bdm_ppc_ops.to_insert_fork_catchpoint = NULL;
-  bdm_ppc_ops.to_remove_fork_catchpoint = NULL;
-  bdm_ppc_ops.to_insert_vfork_catchpoint = NULL;
-  bdm_ppc_ops.to_remove_vfork_catchpoint = NULL;
-  bdm_ppc_ops.to_has_forked = NULL;
-  bdm_ppc_ops.to_has_vforked = NULL;
-  bdm_ppc_ops.to_can_follow_vfork_prior_to_exec = NULL;
-  bdm_ppc_ops.to_post_follow_vfork = NULL;
-  bdm_ppc_ops.to_insert_exec_catchpoint = NULL;
-  bdm_ppc_ops.to_remove_exec_catchpoint = NULL;
-  bdm_ppc_ops.to_has_execd = NULL;
-  bdm_ppc_ops.to_reported_exec_events_per_exec_call = NULL;
-  bdm_ppc_ops.to_has_exited = NULL;
   bdm_ppc_ops.to_mourn_inferior = ocd_mourn;
-  bdm_ppc_ops.to_can_run = 0;
-  bdm_ppc_ops.to_notice_signals = 0;
   bdm_ppc_ops.to_thread_alive = ocd_thread_alive;
   bdm_ppc_ops.to_stop = ocd_stop;
-  bdm_ppc_ops.to_pid_to_exec_file = NULL;
-  bdm_ppc_ops.to_core_file_to_sym_file = NULL;
   bdm_ppc_ops.to_stratum = process_stratum;
-  bdm_ppc_ops.DONT_USE = NULL;
   bdm_ppc_ops.to_has_all_memory = 1;
   bdm_ppc_ops.to_has_memory = 1;
   bdm_ppc_ops.to_has_stack = 1;
   bdm_ppc_ops.to_has_registers = 1;
   bdm_ppc_ops.to_has_execution = 1;
-  bdm_ppc_ops.to_sections = NULL;
-  bdm_ppc_ops.to_sections_end = NULL;
   bdm_ppc_ops.to_magic = OPS_MAGIC;
 }                              /* init_bdm_ppc_ops */
 
+extern initialize_file_ftype _initialize_bdm_ppc; /* -Wmissing-prototypes */
+
 void
-_initialize_bdm_ppc ()
+_initialize_bdm_ppc (void)
 {
   init_bdm_ppc_ops ();
   add_target (&bdm_ppc_ops);
This page took 0.027898 seconds and 4 git commands to generate.