* as.h [NEED_DECLARATION_FFS] (ffs): Prototype and alphabetize.
[deliverable/binutils-gdb.git] / gdb / ocd.c
index a853080fe0a75cca2c6c51b5d087f2d085aeb7e8..43fe35fc0bbb22a4029bb58cf6c85021e790fb92 100644 (file)
--- a/gdb/ocd.c
+++ b/gdb/ocd.c
@@ -1,21 +1,24 @@
 /* Target communications support for Macraigor Systems' On-Chip Debugging
-   Copyright 1996, 1997 Free Software Foundation, Inc.
 
-This file is part of GDB.
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004 Free
+   Software Foundation, Inc.
 
-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 2 of the License, or
-(at your option) any later version.
+   This file is part of GDB.
 
-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.
+   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 2 of the License, or
+   (at your option) any later version.
 
-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.  */
+   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, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
 #include "gdbcore.h"
@@ -26,67 +29,47 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 #include "bfd.h"
 #include "symfile.h"
 #include "target.h"
-#include "wait.h"
+#include "exceptions.h"
 #include "gdbcmd.h"
 #include "objfiles.h"
 #include "gdb-stabs.h"
-#include "dcache.h"
 #include <sys/types.h>
 #include <signal.h>
 #include "serial.h"
 #include "ocd.h"
+#include "regcache.h"
 
 /* Prototypes for local functions */
 
-static int ocd_read_bytes PARAMS ((CORE_ADDR memaddr,
-                                     char *myaddr, int len));
-
-static int ocd_start_remote PARAMS ((char *dummy));
-
-static int readchar PARAMS ((int timeout));
-
-static void reset_packet PARAMS ((void));
-
-static void output_packet PARAMS ((void));
+static int ocd_read_bytes (CORE_ADDR memaddr, char *myaddr, int len);
 
-static int get_quoted_char PARAMS ((int timeout));
+static int ocd_start_remote (void *dummy);
 
-static void put_quoted_char PARAMS ((int c));
+static int readchar (int timeout);
 
-static void ocd_interrupt PARAMS ((int signo));
+static void ocd_interrupt (int signo);
 
-static void ocd_interrupt_twice PARAMS ((int signo));
+static void ocd_interrupt_twice (int signo);
 
-static void interrupt_query PARAMS ((void));
+static void interrupt_query (void);
 
-static unsigned char * ocd_do_command PARAMS ((int cmd, int *statusp, int *lenp));
+static unsigned char *ocd_do_command (int cmd, int *statusp, int *lenp);
 
-static void ocd_put_packet PARAMS ((unsigned char *packet, int pktlen));
+static void ocd_put_packet (unsigned char *packet, int pktlen);
 
-static unsigned char * ocd_get_packet PARAMS ((int cmd, int *pktlen, int timeout));
+static unsigned char *ocd_get_packet (int cmd, int *pktlen, int timeout);
 
 static struct target_ops *current_ops = NULL;
 
 static int last_run_status;
 
-/* This was 5 seconds, which is a long time to sit and wait.
-   Unless this is going though some terminal server or multiplexer or
-   other form of hairy serial connection, I would think 2 seconds would
-   be plenty.  */
-
-/* Changed to allow option to set timeout value.
-   was static int remote_timeout = 2; */
-extern int remote_timeout;
-
 /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
    ocd_open knows that we don't have a file open when the program
    starts.  */
-static serial_t ocd_desc = NULL;
+static struct serial *ocd_desc = NULL;
 \f
 void
-ocd_error (s, error_code)
-     char *s;
-     int error_code;
+ocd_error (char *s, int error_code)
 {
   char buf[100];
 
@@ -95,55 +78,81 @@ ocd_error (s, error_code)
 
   switch (error_code)
     {
-    case 0x1: s = "Unknown fault"; break;
-    case 0x2: s = "Power failed"; break;
-    case 0x3: s = "Cable disconnected"; break;
-    case 0x4: s = "Couldn't enter OCD mode"; break;
-    case 0x5: s = "Target stuck in reset"; break;
-    case 0x6: s = "OCD hasn't been initialized"; break;
-    case 0x7: s = "Write verify failed"; break;
-    case 0x8: s = "Reg buff error (during MPC5xx fp reg read/write)"; break;
-    case 0x9: s = "Invalid CPU register access attempt failed"; break;
-    case 0x11: s = "Bus error"; break;
-    case 0x12: s = "Checksum error"; break;
-    case 0x13: s = "Illegal command"; break;
-    case 0x14: s = "Parameter error"; break;
-    case 0x15: s = "Internal error"; break;
-    case 0x80: s = "Flash erase error"; break;
+    case 0x1:
+      s = "Unknown fault";
+      break;
+    case 0x2:
+      s = "Power failed";
+      break;
+    case 0x3:
+      s = "Cable disconnected";
+      break;
+    case 0x4:
+      s = "Couldn't enter OCD mode";
+      break;
+    case 0x5:
+      s = "Target stuck in reset";
+      break;
+    case 0x6:
+      s = "OCD hasn't been initialized";
+      break;
+    case 0x7:
+      s = "Write verify failed";
+      break;
+    case 0x8:
+      s = "Reg buff error (during MPC5xx fp reg read/write)";
+      break;
+    case 0x9:
+      s = "Invalid CPU register access attempt failed";
+      break;
+    case 0x11:
+      s = "Bus error";
+      break;
+    case 0x12:
+      s = "Checksum error";
+      break;
+    case 0x13:
+      s = "Illegal command";
+      break;
+    case 0x14:
+      s = "Parameter error";
+      break;
+    case 0x15:
+      s = "Internal error";
+      break;
+    case 0x80:
+      s = "Flash erase error";
+      break;
     default:
       sprintf (buf, "Unknown error code %d", error_code);
       s = buf;
     }
 
-  error (s);
+  error (("%s"), s);
 }
 
 /*  Return nonzero if the thread TH is still alive on the remote system.  */
 
 int
-ocd_thread_alive (th)
-     int th;
+ocd_thread_alive (ptid_t th)
 {
   return 1;
 }
 \f
 /* Clean up connection to a remote debugger.  */
 
-/* ARGSUSED */
 void
-ocd_close (quitting)
-     int quitting;
+ocd_close (int quitting)
 {
   if (ocd_desc)
-    SERIAL_CLOSE (ocd_desc);
+    serial_close (ocd_desc);
   ocd_desc = NULL;
 }
 
 /* Stub for catch_errors.  */
 
 static int
-ocd_start_remote (dummy)
-     char *dummy;
+ocd_start_remote (void *dummy)
 {
   unsigned char buf[10], *p;
   int pktlen;
@@ -152,11 +161,11 @@ ocd_start_remote (dummy)
   int speed;
   enum ocd_target_type target_type;
 
-  target_type = (enum ocd_target_type)dummy;
+  target_type = *(enum ocd_target_type *) dummy;
 
-  immediate_quit = 1;          /* Allow user to interrupt it */
+  immediate_quit++;            /* Allow user to interrupt it */
 
-  SERIAL_SEND_BREAK (ocd_desc); /* Wake up the wiggler */
+  serial_send_break (ocd_desc);        /* Wake up the wiggler */
 
   speed = 80;                  /* Divide clock by 4000 */
 
@@ -168,52 +177,46 @@ ocd_start_remote (dummy)
   p = ocd_get_packet (buf[0], &pktlen, remote_timeout);
 
   if (pktlen < 2)
-    error ("Truncated response packet from OCD device");
+    error (_("Truncated response packet from OCD device"));
 
   status = p[1];
   error_code = p[2];
 
   if (error_code != 0)
-    ocd_error ("OCD_INIT:", error_code);
+    ocd_error (_("OCD_INIT:"), error_code);
 
   ocd_do_command (OCD_AYT, &status, &pktlen);
 
   p = ocd_do_command (OCD_GET_VERSION, &status, &pktlen);
 
-  printf_unfiltered ("[Wiggler version %x.%x, capability 0x%x]\n",
+  printf_unfiltered (_("[Wiggler version %x.%x, capability 0x%x]\n"),
                     p[0], p[1], (p[2] << 16) | p[3]);
 
-#if 0
-  /* Reset the target */
-
-  ocd_do_command (OCD_RESET_RUN, &status, &pktlen);
-/*  ocd_do_command (OCD_RESET, &status, &pktlen);*/
-#endif
-
   /* If processor is still running, stop it.  */
 
   if (!(status & OCD_FLAG_BDM))
     ocd_stop ();
 
-#if 1
+  /* When using a target box, we want to asynchronously return status when
+     target stops.  The OCD_SET_CTL_FLAGS command is ignored by Wigglers.dll
+     when using a parallel Wiggler */
   buf[0] = OCD_SET_CTL_FLAGS;
   buf[1] = 0;
-  buf[2] = 1;          /* Asynchronously return status when target stops */
+  buf[2] = 1;
   ocd_put_packet (buf, 3);
 
   p = ocd_get_packet (buf[0], &pktlen, remote_timeout);
 
   if (pktlen < 2)
-    error ("Truncated response packet from OCD device");
+    error (_("Truncated response packet from OCD device"));
 
   status = p[1];
   error_code = p[2];
 
   if (error_code != 0)
     ocd_error ("OCD_SET_CTL_FLAGS:", error_code);
-#endif
 
-  immediate_quit = 0;
+  immediate_quit--;
 
 /* This is really the job of start_remote however, that makes an assumption
    that the target is about to print out a status message of some sort.  That
@@ -223,17 +226,15 @@ ocd_start_remote (dummy)
   flush_cached_frames ();
   registers_changed ();
   stop_pc = read_pc ();
-  set_current_frame (create_new_frame (read_fp (), stop_pc));
-  select_frame (get_current_frame (), 0);
-  print_stack_frame (selected_frame, -1, 1);
+  print_stack_frame (get_selected_frame (NULL), 0, SRC_AND_LOC);
 
   buf[0] = OCD_LOG_FILE;
-  buf[1] = 3;   /* close existing WIGGLERS.LOG */
+  buf[1] = 3;                  /* close existing WIGGLERS.LOG */
   ocd_put_packet (buf, 2);
   p = ocd_get_packet (buf[0], &pktlen, remote_timeout);
 
   buf[0] = OCD_LOG_FILE;
-  buf[1] = 2;   /* append to existing WIGGLERS.LOG */
+  buf[1] = 2;                  /* append to existing WIGGLERS.LOG */
   ocd_put_packet (buf, 2);
   p = ocd_get_packet (buf[0], &pktlen, remote_timeout);
 
@@ -243,22 +244,16 @@ ocd_start_remote (dummy)
 /* Open a connection to a remote debugger.
    NAME is the filename used for communication.  */
 
-static DCACHE *ocd_dcache;
-
 void
-ocd_open (name, from_tty, target_type, ops)
-     char *name;
-     int from_tty;
-     enum ocd_target_type target_type;
-     struct target_ops *ops;
+ocd_open (char *name, int from_tty, enum ocd_target_type target_type,
+         struct target_ops *ops)
 {
   unsigned char buf[10], *p;
-  int status;
   int pktlen;
 
   if (name == 0)
-    error ("To open an OCD connection, you need to specify the\n\
-device the OCD device is attached to (e.g. /dev/ttya).");
+    error (_("To open an OCD connection, you need to specify the\n\
+device the OCD device is attached to (e.g. /dev/ttya)."));
 
   target_preopen (from_tty);
 
@@ -266,45 +261,24 @@ device the OCD device is attached to (e.g. /dev/ttya).");
 
   unpush_target (current_ops);
 
-  ocd_dcache = dcache_init (ocd_read_bytes, ocd_write_bytes);
-
-  if (strncmp(name,"wiggler",7) == 0)
-      {
-         ocd_desc = SERIAL_OPEN ("ocd");
-          if (!ocd_desc)
-            perror_with_name (name);
-
-         buf[0] = OCD_LOG_FILE;
-         buf[1] = 1;   /* open new or overwrite existing WIGGLERS.LOG */
-         ocd_put_packet (buf, 2);
-         p = ocd_get_packet (buf[0], &pktlen, remote_timeout);
-
-         buf[0] = OCD_SET_CONNECTION;
-         buf[1] = 0x01;        /* atoi (name[11]); */
-         ocd_put_packet (buf, 2);
-         p = ocd_get_packet (buf[0], &pktlen, remote_timeout);
-      }
-  else /* not using Wigglers.dll */
-      {
-          ocd_desc = SERIAL_OPEN (name);
-         if (!ocd_desc)
-             perror_with_name (name);
-      }
+  ocd_desc = serial_open (name);
+  if (!ocd_desc)
+    perror_with_name (name);
 
   if (baud_rate != -1)
     {
-      if (SERIAL_SETBAUDRATE (ocd_desc, baud_rate))
+      if (serial_setbaudrate (ocd_desc, baud_rate))
        {
-         SERIAL_CLOSE (ocd_desc);
+         serial_close (ocd_desc);
          perror_with_name (name);
        }
     }
 
-  SERIAL_RAW (ocd_desc);
+  serial_raw (ocd_desc);
 
   /* If there is something sitting in the buffer we might take it as a
      response to a command, which would be bad.  */
-  SERIAL_FLUSH_INPUT (ocd_desc);
+  serial_flush_input (ocd_desc);
 
   if (from_tty)
     {
@@ -321,14 +295,17 @@ device the OCD device is attached to (e.g. /dev/ttya).");
      variables, especially since GDB will someday have a notion of debugging
      several processes.  */
 
-  inferior_pid = 42000;
+  inferior_ptid = pid_to_ptid (42000);
   /* Start the remote connection; if error (0), discard this target.
      In particular, if the user quits, be sure to discard it
      (we'd be in an inconsistent state otherwise).  */
-  if (!catch_errors (ocd_start_remote, (char *)target_type,
+  if (!catch_errors (ocd_start_remote, &target_type,
                     "Couldn't establish connection to remote target\n",
                     RETURN_MASK_ALL))
-    pop_target();
+    {
+      pop_target ();
+      error (_("Failed to connect to OCD."));
+    }
 }
 
 /* This takes a program previously attached to and detaches it.  After
@@ -337,12 +314,10 @@ device the OCD device is attached to (e.g. /dev/ttya).");
    die when it hits one.  */
 
 void
-ocd_detach (args, from_tty)
-     char *args;
-     int from_tty;
+ocd_detach (char *args, int from_tty)
 {
   if (args)
-    error ("Argument given to \"detach\" when remotely debugging.");
+    error (_("Argument given to \"detach\" when remotely debugging."));
 
   pop_target ();
   if (from_tty)
@@ -352,14 +327,10 @@ ocd_detach (args, from_tty)
 /* Tell the remote machine to resume.  */
 
 void
-ocd_resume (pid, step, siggnal)
-     int pid, step;
-     enum target_signal siggnal;
+ocd_resume (ptid_t ptid, int step, enum target_signal siggnal)
 {
   int pktlen;
 
-  dcache_flush (ocd_dcache);
-
   if (step)
     ocd_do_command (OCD_STEP, &last_run_status, &pktlen);
   else
@@ -367,7 +338,7 @@ ocd_resume (pid, step, siggnal)
 }
 \f
 void
-ocd_stop ()
+ocd_stop (void)
 {
   int status;
   int pktlen;
@@ -375,7 +346,7 @@ ocd_stop ()
   ocd_do_command (OCD_STOP, &status, &pktlen);
 
   if (!(status & OCD_FLAG_BDM))
-    error ("Can't stop target via BDM");
+    error (_("Can't stop target via BDM"));
 }
 
 static volatile int ocd_interrupt_flag;
@@ -384,12 +355,11 @@ static volatile int ocd_interrupt_flag;
    packet.  */
 
 static void
-ocd_interrupt (signo)
-     int signo;
+ocd_interrupt (int signo)
 {
   /* If this doesn't work, try more severe steps.  */
   signal (signo, ocd_interrupt_twice);
-  
+
   if (remote_debug)
     printf_unfiltered ("ocd_interrupt called\n");
 
@@ -403,15 +373,14 @@ ocd_interrupt (signo)
   }
 }
 
-static void (*ofunc)();
+static void (*ofunc) ();
 
 /* The user typed ^C twice.  */
 static void
-ocd_interrupt_twice (signo)
-     int signo;
+ocd_interrupt_twice (int signo)
 {
   signal (signo, ofunc);
-  
+
   interrupt_query ();
 
   signal (signo, ocd_interrupt);
@@ -420,7 +389,7 @@ ocd_interrupt_twice (signo)
 /* Ask the user what to do when an interrupt is received.  */
 
 static void
-interrupt_query ()
+interrupt_query (void)
 {
   target_terminal_ours ();
 
@@ -428,7 +397,7 @@ interrupt_query ()
 Give up (and stop debugging it)? "))
     {
       target_mourn_inferior ();
-      return_to_top_level (RETURN_QUIT);
+      deprecated_throw_reason (RETURN_QUIT);
     }
 
   target_terminal_inferior ();
@@ -443,29 +412,30 @@ static int kill_kludge;
    means in the case of this target).  */
 
 int
-ocd_wait ()
+ocd_wait (void)
 {
   unsigned char *p;
-  int error_code, status;
+  int error_code;
   int pktlen;
+  char buf[1];
 
   ocd_interrupt_flag = 0;
 
-  /* Target may already be stopped by the time we get here. */
+  /* Target might already be stopped by the time we get here. */
+  /* If we aren't already stopped, we need to loop until we've dropped
+     back into BDM mode */
 
-/* if (!(last_run_status & OCD_FLAG_BDM)) */
-
-  /* Loop until we've dropped back into BDM mode */
   while (!(last_run_status & OCD_FLAG_BDM))
     {
-      ofunc = (void (*)()) signal (SIGINT, ocd_interrupt);
-
+      buf[0] = OCD_AYT;
+      ocd_put_packet (buf, 1);
       p = ocd_get_packet (OCD_AYT, &pktlen, -1);
 
+      ofunc = (void (*)()) signal (SIGINT, ocd_interrupt);
       signal (SIGINT, ofunc);
 
       if (pktlen < 2)
-       error ("Truncated response packet from OCD device");
+       error (_("Truncated response packet from OCD device"));
 
       last_run_status = p[1];
       error_code = p[2];
@@ -474,13 +444,9 @@ ocd_wait ()
        ocd_error ("target_wait:", error_code);
 
       if (last_run_status & OCD_FLAG_PWF)
-       error ("OCD device lost VCC at BDM interface.");
+       error (_("OCD device lost VCC at BDM interface."));
       else if (last_run_status & OCD_FLAG_CABLE_DISC)
-       error ("OCD device cable appears to have been disconnected.");
-#if 0
-      if (!(last_run_status & OCD_FLAG_BDM))
-       error ("OCD device woke up, but wasn't stopped: 0x%x", status);
-#endif
+       error (_("OCD device cable appears to have been disconnected."));
     }
 
   if (ocd_interrupt_flag)
@@ -494,10 +460,7 @@ ocd_wait ()
    Returns a pointer to a static array containing the register contents.  */
 
 unsigned char *
-ocd_read_bdm_registers (first_bdm_regno, last_bdm_regno, reglen)
-     int first_bdm_regno;
-     int last_bdm_regno;
-     int *reglen;
+ocd_read_bdm_registers (int first_bdm_regno, int last_bdm_regno, int *reglen)
 {
   unsigned char buf[10];
   int i;
@@ -527,7 +490,7 @@ ocd_read_bdm_registers (first_bdm_regno, last_bdm_regno, reglen)
 
   if (i > pktlen - 4
       || ((i & 3) != 0))
-    error ("Register block size bad:  %d", i);
+    error (_("Register block size bad:  %d"), i);
 
   *reglen = i;
 
@@ -539,8 +502,7 @@ ocd_read_bdm_registers (first_bdm_regno, last_bdm_regno, reglen)
 /* Read register BDM_REGNO and returns its value ala read_register() */
 
 CORE_ADDR
-ocd_read_bdm_register (bdm_regno)
-     int bdm_regno;
+ocd_read_bdm_register (int bdm_regno)
 {
   int reglen;
   unsigned char *p;
@@ -553,10 +515,7 @@ ocd_read_bdm_register (bdm_regno)
 }
 
 void
-ocd_write_bdm_registers (first_bdm_regno, regptr, reglen)
-     int first_bdm_regno;
-     unsigned char *regptr;
-     int reglen;
+ocd_write_bdm_registers (int first_bdm_regno, unsigned char *regptr, int reglen)
 {
   unsigned char *buf;
   unsigned char *p;
@@ -575,7 +534,7 @@ ocd_write_bdm_registers (first_bdm_regno, regptr, reglen)
   p = ocd_get_packet (OCD_WRITE_REGS, &pktlen, remote_timeout);
 
   if (pktlen < 3)
-    error ("Truncated response packet from OCD device");
+    error (_("Truncated response packet from OCD device"));
 
   status = p[1];
   error_code = p[2];
@@ -585,9 +544,7 @@ ocd_write_bdm_registers (first_bdm_regno, regptr, reglen)
 }
 
 void
-ocd_write_bdm_register (bdm_regno, reg)
-     int bdm_regno;
-     CORE_ADDR reg;
+ocd_write_bdm_register (int bdm_regno, CORE_ADDR reg)
 {
   unsigned char buf[4];
 
@@ -596,8 +553,8 @@ ocd_write_bdm_register (bdm_regno, reg)
   ocd_write_bdm_registers (bdm_regno, buf, 4);
 }
 \f
-void 
-ocd_prepare_to_store ()
+void
+ocd_prepare_to_store (void)
 {
 }
 \f
@@ -612,10 +569,7 @@ ocd_prepare_to_store ()
 static int write_mem_command = OCD_WRITE_MEM;
 
 int
-ocd_write_bytes (memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
+ocd_write_bytes (CORE_ADDR memaddr, char *myaddr, int len)
 {
   char buf[256 + 10];
   unsigned char *p;
@@ -646,7 +600,7 @@ ocd_write_bytes (memaddr, myaddr, len)
       ocd_put_packet (buf, 8 + numbytes);
       p = ocd_get_packet (OCD_WRITE_MEM, &pktlen, remote_timeout);
       if (pktlen < 3)
-       error ("Truncated response packet from OCD device");
+       error (_("Truncated response packet from OCD device"));
 
       status = p[1];
       error_code = p[2];
@@ -687,10 +641,7 @@ ocd_write_bytes (memaddr, myaddr, len)
    Returns number of bytes transferred, or 0 for error.  */
 
 static int
-ocd_read_bytes (memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
+ocd_read_bytes (CORE_ADDR memaddr, char *myaddr, int len)
 {
   char buf[256 + 10];
   unsigned char *p;
@@ -719,7 +670,7 @@ ocd_read_bytes (memaddr, myaddr, len)
       ocd_put_packet (buf, 7);
       p = ocd_get_packet (OCD_READ_MEM, &pktlen, remote_timeout);
       if (pktlen < 4)
-       error ("Truncated response packet from OCD device");
+       error (_("Truncated response packet from OCD device"));
 
       status = p[1];
       error_code = p[2];
@@ -755,23 +706,25 @@ ocd_read_bytes (memaddr, myaddr, len)
 \f
 /* Read or write LEN bytes from inferior memory at MEMADDR, transferring
    to or from debugger address MYADDR.  Write to inferior if SHOULD_WRITE is
-   nonzero.  Returns length of data written or read; 0 for error.  */
+   nonzero.  Returns length of data written or read; 0 for error.  TARGET
+   is ignored.  */
 
-/* ARGSUSED */
 int
-ocd_xfer_memory (memaddr, myaddr, len, should_write, target)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-     int should_write;
-     struct target_ops *target;                        /* ignored */
+ocd_xfer_memory (CORE_ADDR memaddr, char *myaddr, int len, int should_write,
+                struct mem_attrib *attrib, struct target_ops *target)
 {
-  return dcache_xfer_memory (ocd_dcache, memaddr, myaddr, len, should_write);
+  int res;
+
+  if (should_write)
+    res = ocd_write_bytes (memaddr, myaddr, len);
+  else
+    res = ocd_read_bytes (memaddr, myaddr, len);
+
+  return res;
 }
 \f
 void
-ocd_files_info (ignore)
-     struct target_ops *ignore;
+ocd_files_info (struct target_ops *ignore)
 {
   puts_filtered ("Debugging a target over a serial line.\n");
 }
@@ -782,135 +735,24 @@ ocd_files_info (ignore)
 /* Read a single character from the remote side, handling wierd errors. */
 
 static int
-readchar (timeout)
-     int timeout;
+readchar (int timeout)
 {
   int ch;
 
-  ch = SERIAL_READCHAR (ocd_desc, timeout);
+  ch = serial_readchar (ocd_desc, timeout);
 
   switch (ch)
     {
     case SERIAL_EOF:
-      error ("Remote connection closed");
+      error (_("Remote connection closed"));
     case SERIAL_ERROR:
-      perror_with_name ("Remote communication error");
-    case SERIAL_TIMEOUT:
-    default:
-      return ch;
-    }
-}
-
-#if 0
-/* Read a character from the data stream, dequoting as necessary.  SYN is
-   treated special.  Any SYNs appearing in the data stream are returned as the
-   distinct value RAW_SYN (which has a value > 8 bits and therefore cannot be
-   mistaken for real data).  */
-
-static int
-get_quoted_char (timeout)
-     int timeout;
-{
-  int ch;
-
-  ch = readchar (timeout);
-
-  switch (ch)
-    {
+      perror_with_name (_("Remote communication error"));
     case SERIAL_TIMEOUT:
-      error ("Timeout in mid-packet, aborting");
-    case SYN:
-      return RAW_SYN;
-    case DLE:
-      ch = readchar (timeout);
-      if (ch == SYN)
-       return RAW_SYN;
-      return ch & ~0100;
     default:
       return ch;
     }
 }
 
-static unsigned char pkt[256 * 2 + 10], *pktp; /* Worst case */
-
-static void
-reset_packet ()
-{
-  pktp = pkt;
-}
-
-static void
-output_packet ()
-{
-  if (SERIAL_WRITE (ocd_desc, pkt, pktp - pkt))
-    perror_with_name ("output_packet: write failed");
-
-  reset_packet ();
-}
-
-/* Output a quoted character.  SYNs and DLEs are quoted.  Everything else goes
-   through untouched.  */
-
-static void
-put_quoted_char (c)
-     int c;
-{
-  switch (c)
-    {
-    case SYN:
-    case DLE:
-      *pktp++ = DLE;
-      c |= 0100;
-    }
-
-  *pktp++ = c;
-}
-
-/* Send a packet to the OCD device.  The packet framed by a SYN character,
-   a byte count and a checksum.  The byte count only counts the number of
-   bytes between the count and the checksum.  A count of zero actually
-   means 256.  Any SYNs within the packet (including the checksum and
-   count) must be quoted.  The quote character must be quoted as well.
-   Quoting is done by replacing the character with the two-character sequence
-   DLE, {char} | 0100.  Note that the quoting mechanism has no effect on the
-   byte count. */
-
-static void
-stu_put_packet (buf, len)
-     unsigned char *buf;
-     int len;
-{
-  unsigned char checksum;
-  unsigned char c;
-
-  if (len == 0 || len > 256)
-    abort ();                  /* Can't represent 0 length packet */
-
-  reset_packet ();
-
-  checksum = 0;
-
-  put_quoted_char (RAW_SYN);
-
-  c = len;
-
-  do
-    {
-      checksum += c;
-
-      put_quoted_char (c);
-
-      c = *buf++;
-    }
-  while (len-- > 0);
-
-  put_quoted_char (-checksum & 0xff);
-
-  output_packet ();
-}
-
-#else
-
 /* Send a packet to the OCD device.  The packet framed by a SYN character,
    a byte count and a checksum.  The byte count only counts the number of
    bytes between the count and the checksum.  A count of zero actually
@@ -921,15 +763,13 @@ stu_put_packet (buf, len)
    byte count.  */
 
 static void
-ocd_put_packet (buf, len)
-     unsigned char *buf;
-     int len;
+ocd_put_packet (unsigned char *buf, int len)
 {
   unsigned char checksum;
   unsigned char c;
   unsigned char *packet, *packet_ptr;
 
-  packet = alloca (len + 1 + 1); /* packet + SYN + checksum */
+  packet = alloca (len + 1 + 1);       /* packet + SYN + checksum */
   packet_ptr = packet;
 
   checksum = 0;
@@ -945,104 +785,32 @@ ocd_put_packet (buf, len)
     }
 
   *packet_ptr++ = -checksum;
-  if (SERIAL_WRITE (ocd_desc, packet, packet_ptr - packet))
-    perror_with_name ("output_packet: write failed");
+  if (serial_write (ocd_desc, packet, packet_ptr - packet))
+    perror_with_name (_("output_packet: write failed"));
 }
-#endif
 
-#if 0
 /* Get a packet from the OCD device.  Timeout is only enforced for the
    first byte of the packet.  Subsequent bytes are expected to arrive in
    time <= remote_timeout.  Returns a pointer to a static buffer containing
    the payload of the packet.  *LENP contains the length of the packet.
-*/
+ */
 
 static unsigned char *
-stu_get_packet (cmd, lenp, timeout)
-     unsigned char cmd;
-     int *lenp;
+ocd_get_packet (int cmd, int *lenp, int timeout)
 {
   int ch;
   int len;
-  static unsigned char buf[256 + 10], *p;
-  unsigned char checksum;
-
- find_packet:
-
-  ch = get_quoted_char (timeout);
-
-  if (ch < 0)
-    error ("get_packet (readchar): %d", ch);
-
-  if (ch != RAW_SYN)
-    goto find_packet;
-
- found_syn:                    /* Found the start of a packet */
-
-  p = buf;
-  checksum = 0;
-
-  len = get_quoted_char (remote_timeout);
-
-  if (len == RAW_SYN)
-    goto found_syn;
-
-  checksum += len;
-
-  if (len == 0)
-    len = 256;
-
-  len++;                       /* Include checksum */
-
-  while (len-- > 0)
-    {
-      ch = get_quoted_char (remote_timeout);
-      if (ch == RAW_SYN)
-       goto found_syn;
-
-      *p++ = ch;
-      checksum += ch;
-    }
-
-  if (checksum != 0)
-    goto find_packet;
-
-  if (cmd != buf[0])
-    error ("Response phase error.  Got 0x%x, expected 0x%x", buf[0], cmd);
-
-  *lenp = p - buf - 1;
-  return buf;
-}
-
-#else
-
-/* Get a packet from the OCD device.  Timeout is only enforced for the
-   first byte of the packet.  Subsequent bytes are expected to arrive in
-   time <= remote_timeout.  Returns a pointer to a static buffer containing
-   the payload of the packet.  *LENP contains the length of the packet.
-*/
-
-static unsigned char *
-ocd_get_packet (cmd, lenp, timeout)
-     int cmd;
-     int *lenp;
-{
-  int ch;
-  int len;
-  int i;
   static unsigned char packet[512];
   unsigned char *packet_ptr;
   unsigned char checksum;
 
- find_packet:
-
   ch = readchar (timeout);
 
   if (ch < 0)
-    error ("ocd_get_packet (readchar): %d", ch);
+    error (_("ocd_get_packet (readchar): %d"), ch);
 
   if (ch != 0x55)
-    goto find_packet;
+    error (_("ocd_get_packet (readchar): %d"), ch);
 
 /* Found the start of a packet */
 
@@ -1054,7 +822,7 @@ ocd_get_packet (cmd, lenp, timeout)
   ch = readchar (timeout);
 
   if (ch < 0)
-    error ("ocd_get_packet (readchar): %d", ch);
+    error (_("ocd_get_packet (readchar): %d"), ch);
 
   *packet_ptr++ = ch;
   checksum += ch;
@@ -1064,7 +832,7 @@ ocd_get_packet (cmd, lenp, timeout)
   ch = readchar (timeout);
 
   if (ch < 0)
-    error ("ocd_get_packet (readchar): %d", ch);
+    error (_("ocd_get_packet (readchar): %d"), ch);
   *packet_ptr++ = ch;
   checksum += ch;
 
@@ -1073,7 +841,7 @@ ocd_get_packet (cmd, lenp, timeout)
   ch = readchar (timeout);
 
   if (ch < 0)
-    error ("ocd_get_packet (readchar): %d", ch);
+    error (_("ocd_get_packet (readchar): %d"), ch);
   *packet_ptr++ = ch;
   checksum += ch;
 
@@ -1083,7 +851,7 @@ ocd_get_packet (cmd, lenp, timeout)
       len = 8;                 /* write address, value read back */
       break;
     case 0x11:                 /* Bus error? */
-                               /* write address, read flag */
+      /* write address, read flag */
     case 0x15:                 /* Internal error */
       len = 5;                 /* error code, vector */
       break;
@@ -1093,48 +861,47 @@ ocd_get_packet (cmd, lenp, timeout)
     case 0x0:                  /* Normal result */
       switch (packet[0])
        {
-       case OCD_AYT:   /* Are You There? */
-       case OCD_SET_BAUD_RATE: /* Set Baud Rate */
-       case OCD_INIT:  /* Initialize OCD device */
+       case OCD_AYT:           /* Are You There? */
+       case OCD_SET_BAUD_RATE: /* Set Baud Rate */
+       case OCD_INIT:          /* Initialize OCD device */
        case OCD_SET_SPEED:     /* Set Speed */
-       case OCD_SET_FUNC_CODE: /* Set Function Code */
-       case OCD_SET_CTL_FLAGS: /* Set Control Flags */
-       case OCD_SET_BUF_ADDR: /* Set Register Buffer Address */
-       case OCD_RUN:   /* Run Target from PC  */
+       case OCD_SET_FUNC_CODE: /* Set Function Code */
+       case OCD_SET_CTL_FLAGS: /* Set Control Flags */
+       case OCD_SET_BUF_ADDR:  /* Set Register Buffer Address */
+       case OCD_RUN:           /* Run Target from PC  */
        case OCD_RUN_ADDR:      /* Run Target from Specified Address  */
-       case OCD_STOP:  /* Stop Target */
+       case OCD_STOP:          /* Stop Target */
        case OCD_RESET_RUN:     /* Reset Target and Run */
        case OCD_RESET: /* Reset Target and Halt */
-       case OCD_STEP:  /* Single Step */
-       case OCD_WRITE_REGS: /* Write Register */
+       case OCD_STEP:          /* Single Step */
+       case OCD_WRITE_REGS:    /* Write Register */
        case OCD_WRITE_MEM:     /* Write Memory */
        case OCD_FILL_MEM:      /* Fill Memory */
        case OCD_MOVE_MEM:      /* Move Memory */
-       case OCD_WRITE_INT_MEM: /* Write Internal Memory */
-       case OCD_JUMP:  /* Jump to Subroutine */
-       case OCD_ERASE_FLASH: /* Erase flash memory */
-       case OCD_PROGRAM_FLASH: /* Write flash memory */
+       case OCD_WRITE_INT_MEM: /* Write Internal Memory */
+       case OCD_JUMP:          /* Jump to Subroutine */
+       case OCD_ERASE_FLASH:   /* Erase flash memory */
+       case OCD_PROGRAM_FLASH: /* Write flash memory */
        case OCD_EXIT_MON:      /* Exit the flash programming monitor  */
        case OCD_ENTER_MON:     /* Enter the flash programming monitor  */
        case OCD_LOG_FILE:      /* Make Wigglers.dll save Wigglers.log */
-       case OCD_SET_CONNECTION: /* Set type of connection in Wigglers.dll */
+       case OCD_SET_CONNECTION:        /* Set type of connection in Wigglers.dll */
          len = 0;
          break;
-       case OCD_GET_VERSION: /* Get Version */
+       case OCD_GET_VERSION:   /* Get Version */
          len = 10;
          break;
-       case OCD_GET_STATUS_MASK: /* Get Status Mask */
+       case OCD_GET_STATUS_MASK:       /* Get Status Mask */
          len = 1;
          break;
        case OCD_GET_CTRS:      /* Get Error Counters */
        case OCD_READ_REGS:     /* Read Register */
        case OCD_READ_MEM:      /* Read Memory */
-       case OCD_READ_INT_MEM: /* Read Internal Memory */
+       case OCD_READ_INT_MEM:  /* Read Internal Memory */
          len = 257;
          break;
        default:
-         fprintf_filtered (gdb_stderr, "Unknown packet type 0x%x\n", ch);
-         goto find_packet;
+         error (_("ocd_get_packet: unknown packet type 0x%x."), ch);
        }
     }
 
@@ -1143,7 +910,7 @@ ocd_get_packet (cmd, lenp, timeout)
       ch = readchar (timeout);
 
       if (ch < 0)
-       error ("ocd_get_packet (readchar): %d", ch);
+       error (_("ocd_get_packet (readchar): %d"), ch);
       *packet_ptr++ = ch;
       checksum += ch;
       len = ch;
@@ -1156,30 +923,26 @@ ocd_get_packet (cmd, lenp, timeout)
       ch = readchar (timeout);
 
       if (ch < 0)
-       error ("ocd_get_packet (readchar): %d", ch);
+       error (_("ocd_get_packet (readchar): %d"), ch);
       *packet_ptr++ = ch;
       checksum += ch;
     }
 
   if (checksum != 0)
-    goto find_packet;
+    error (_("ocd_get_packet: bad packet checksum"));
 
   if (cmd != -1 && cmd != packet[0])
-    error ("Response phase error.  Got 0x%x, expected 0x%x", packet[0], cmd);
+    error (_("Response phase error.  Got 0x%x, expected 0x%x"), packet[0], cmd);
 
-  *lenp = packet_ptr - packet - 1; /* Subtract checksum byte */
+  *lenp = packet_ptr - packet - 1;     /* Subtract checksum byte */
   return packet;
 }
-#endif
 
 /* Execute a simple (one-byte) command.  Returns a pointer to the data
    following the error code.  */
 
 static unsigned char *
-ocd_do_command (cmd, statusp, lenp)
-     int cmd;
-     int *statusp;
-     int *lenp;
+ocd_do_command (int cmd, int *statusp, int *lenp)
 {
   unsigned char buf[100], *p;
   int status, error_code;
@@ -1189,11 +952,11 @@ ocd_do_command (cmd, statusp, lenp)
   int logpktlen;
 
   buf[0] = cmd;
-  ocd_put_packet (buf, 1);             /* Send command */
+  ocd_put_packet (buf, 1);     /* Send command */
   p = ocd_get_packet (*buf, lenp, remote_timeout);
 
   if (*lenp < 3)
-    error ("Truncated response packet from OCD device");
+    error (_("Truncated response packet from OCD device"));
 
   status = p[1];
   error_code = p[2];
@@ -1205,19 +968,19 @@ ocd_do_command (cmd, statusp, lenp)
     }
 
   if (status & OCD_FLAG_PWF)
-    error ("OCD device can't detect VCC at BDM interface.");
+    error (_("OCD device can't detect VCC at BDM interface."));
   else if (status & OCD_FLAG_CABLE_DISC)
-    error ("BDM cable appears to be disconnected.");
+    error (_("BDM cable appears to be disconnected."));
 
   *statusp = status;
 
   logbuf[0] = OCD_LOG_FILE;
-  logbuf[1] = 3;   /* close existing WIGGLERS.LOG */
+  logbuf[1] = 3;               /* close existing WIGGLERS.LOG */
   ocd_put_packet (logbuf, 2);
   ocd_get_packet (logbuf[0], &logpktlen, remote_timeout);
 
   logbuf[0] = OCD_LOG_FILE;
-  logbuf[1] = 2;   /* append to existing WIGGLERS.LOG */
+  logbuf[1] = 2;               /* append to existing WIGGLERS.LOG */
   ocd_put_packet (logbuf, 2);
   ocd_get_packet (logbuf[0], &logpktlen, remote_timeout);
 
@@ -1225,7 +988,7 @@ ocd_do_command (cmd, statusp, lenp)
 }
 \f
 void
-ocd_kill ()
+ocd_kill (void)
 {
   /* For some mysterious reason, wait_for_inferior calls kill instead of
      mourn after it gets TARGET_WAITKIND_SIGNALLED.  Work around it.  */
@@ -1242,7 +1005,7 @@ ocd_kill ()
 }
 
 void
-ocd_mourn ()
+ocd_mourn (void)
 {
   unpush_target (current_ops);
   generic_mourn_inferior ();
@@ -1252,26 +1015,21 @@ ocd_mourn ()
    the program at that point.  */
 
 void
-ocd_create_inferior (exec_file, args, env)
-     char *exec_file;
-     char *args;
-     char **env;
+ocd_create_inferior (char *exec_file, char *args, char **env, int from_tty)
 {
   if (args && (*args != '\000'))
-    error ("Args are not supported by BDM.");
+    error (_("Args are not supported by BDM."));
 
   clear_proceed_status ();
   proceed (bfd_get_start_address (exec_bfd), TARGET_SIGNAL_0, 0);
 }
 
 void
-ocd_load (args, from_tty)
-     char *args;
-     int from_tty;
+ocd_load (char *args, int from_tty)
 {
   generic_load (args, from_tty);
 
-  inferior_pid = 0;
+  inferior_ptid = null_ptid;
 
 /* This is necessary because many things were based on the PC at the time that
    we attached to the monitor, which is no longer valid now that we have loaded
@@ -1285,16 +1043,13 @@ ocd_load (args, from_tty)
 /* This should be defined for each target */
 /* But we want to be able to compile this file for some configurations
    not yet supported fully */
-   
-#define BDM_BREAKPOINT {0x0,0x0,0x0,0x0} /* For ppc 8xx */
-/* #define BDM_BREAKPOINT {0x4a,0xfa} /* BGND insn used for CPU32 */
+
+#define BDM_BREAKPOINT {0x0,0x0,0x0,0x0}       /* For ppc 8xx */
 
 /* BDM (at least on CPU32) uses a different breakpoint */
 
 int
-ocd_insert_breakpoint (addr, contents_cache)
-     CORE_ADDR addr;
-     char *contents_cache;
+ocd_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
 {
   static char break_insn[] = BDM_BREAKPOINT;
   int val;
@@ -1308,9 +1063,7 @@ ocd_insert_breakpoint (addr, contents_cache)
 }
 
 int
-ocd_remove_breakpoint (addr, contents_cache)
-     CORE_ADDR addr;
-     char *contents_cache;
+ocd_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
 {
   static char break_insn[] = BDM_BREAKPOINT;
   int val;
@@ -1321,37 +1074,31 @@ ocd_remove_breakpoint (addr, contents_cache)
 }
 
 static void
-bdm_command (args, from_tty)
-     char *args;
-     int from_tty;
+bdm_command (char *args, int from_tty)
 {
-  error ("bdm command must be followed by `reset'");
+  error (_("bdm command must be followed by `reset'"));
 }
 
 static void
-bdm_reset_command (args, from_tty)
-     char *args;
-     int from_tty;
+bdm_reset_command (char *args, int from_tty)
 {
   int status, pktlen;
 
   if (!ocd_desc)
-    error ("Not connected to OCD device.");
+    error (_("Not connected to OCD device."));
 
   ocd_do_command (OCD_RESET, &status, &pktlen);
-  dcache_flush (ocd_dcache);
+  dcache_invalidate (target_dcache);
   registers_changed ();
 }
 
 static void
-bdm_restart_command (args, from_tty)
-     char *args;
-     int from_tty;
+bdm_restart_command (char *args, int from_tty)
 {
   int status, pktlen;
 
   if (!ocd_desc)
-    error ("Not connected to OCD device.");
+    error (_("Not connected to OCD device."));
 
   ocd_do_command (OCD_RESET_RUN, &status, &pktlen);
   last_run_status = status;
@@ -1364,27 +1111,24 @@ bdm_restart_command (args, from_tty)
    generic_load from trying to set the PC.  */
 
 static void
-noop_store_registers (regno)
-     int regno;
+noop_store_registers (int regno)
 {
 }
 
 static void
-bdm_update_flash_command (args, from_tty)
-     char *args;
-     int from_tty;
+bdm_update_flash_command (char *args, int from_tty)
 {
   int status, pktlen;
-  struct cleanup *old_chain;
-  void (*store_registers_tmp) PARAMS ((int));
+  struct cleanup *old_chain; 
+  void (*store_registers_tmp) (int);
 
   if (!ocd_desc)
-    error ("Not connected to OCD device.");
+    error (_("Not connected to OCD device."));
 
   if (!args)
-    error ("Must specify file containing new OCD code.");
+    error (_("Must specify file containing new OCD code."));
 
-/*  old_chain = make_cleanup (flash_cleanup, 0);*/
+/*  old_chain = make_cleanup (flash_cleanup, 0); */
 
   ocd_do_command (OCD_ENTER_MON, &status, &pktlen);
 
@@ -1401,40 +1145,30 @@ bdm_update_flash_command (args, from_tty)
 
   ocd_do_command (OCD_EXIT_MON, &status, &pktlen);
 
-/*  discard_cleanups (old_chain);*/
-}
-
-static void
-bdm_read_register_command (args, from_tty)
-     char *args;
-     int from_tty;
-{
-  /* XXX repeat should go on to the next register */
-
-  if (!ocd_desc)
-    error ("Not connected to OCD device.");
-
-  if (!args)
-    error ("Must specify BDM register number.");
-
+/*  discard_cleanups (old_chain); */
 }
 \f
+extern initialize_file_ftype _initialize_remote_ocd; /* -Wmissing-prototypes */
+
 void
-_initialize_remote_ocd ()
+_initialize_remote_ocd (void)
 {
   extern struct cmd_list_element *cmdlist;
   static struct cmd_list_element *ocd_cmd_list = NULL;
 
-  add_show_from_set (add_set_cmd ("remotetimeout", no_class,
-                                 var_integer, (char *)&remote_timeout,
-                                 "Set timeout value for remote read.\n", &setlist),
-                    &showlist);
-
-  add_prefix_cmd ("ocd", class_obscure, bdm_command, "", &ocd_cmd_list, "ocd ",
-                 0, &cmdlist);
-
-  add_cmd ("reset", class_obscure, bdm_reset_command, "", &ocd_cmd_list);
-  add_cmd ("restart", class_obscure, bdm_restart_command, "", &ocd_cmd_list);
-  add_cmd ("update-flash", class_obscure, bdm_update_flash_command, "", &ocd_cmd_list);
-  /*  add_cmd ("read-register", class_obscure, bdm_read_register_command, "", &ocd_cmd_list);*/
+  add_setshow_integer_cmd ("remotetimeout", no_class, &remote_timeout, _("\
+Set timeout value for remote read."), _("\
+Show timeout value for remote read."), NULL,
+                          NULL,
+                          NULL, /* FIXME: i18n: */
+                          &setlist, &showlist);
+
+  /* FIXME: i18n: What documentation?  */
+  add_prefix_cmd ("ocd", class_obscure, bdm_command, (""), &ocd_cmd_list,
+                 "ocd ", 0, &cmdlist);
+
+  /* FIXME: i18n: what documentation? */
+  add_cmd ("reset", class_obscure, bdm_reset_command, (""), &ocd_cmd_list);
+  add_cmd ("restart", class_obscure, bdm_restart_command, (""), &ocd_cmd_list);
+  add_cmd ("update-flash", class_obscure, bdm_update_flash_command, (""), &ocd_cmd_list);
 }
This page took 0.041607 seconds and 4 git commands to generate.