*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / ocd.c
index 1eeed77ed2e3a6ecd268724d723178cb126282ec..4155d735405a0e2d9c9d4336ba2cf64cd33a741e 100644 (file)
--- a/gdb/ocd.c
+++ b/gdb/ocd.c
@@ -1,5 +1,7 @@
 /* Target communications support for Macraigor Systems' On-Chip Debugging
-   Copyright 1996, 1997 Free Software Foundation, Inc.
+
+   Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software
+   Foundation, Inc.
 
    This file is part of GDB.
 
 #include "bfd.h"
 #include "symfile.h"
 #include "target.h"
-#include "gdb_wait.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 (CORE_ADDR memaddr, char *myaddr, int len);
 
-static int ocd_start_remote (PTR dummy);
+static int ocd_start_remote (void *dummy);
 
 static int readchar (int timeout);
 
@@ -83,12 +84,10 @@ static int remote_timeout = 2;
 /* 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];
 
@@ -147,35 +146,31 @@ ocd_error (s, 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)
-     PTR dummy;
+ocd_start_remote (void *dummy)
 {
   unsigned char buf[10], *p;
   int pktlen;
@@ -186,9 +181,9 @@ ocd_start_remote (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 */
 
@@ -248,7 +243,7 @@ ocd_start_remote (dummy)
     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
@@ -258,9 +253,7 @@ 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 (), -1, 1);
 
   buf[0] = OCD_LOG_FILE;
   buf[1] = 3;                  /* close existing WIGGLERS.LOG */
@@ -278,14 +271,9 @@ 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 pktlen;
@@ -300,46 +288,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)
     {
@@ -356,7 +322,7 @@ 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).  */
@@ -375,9 +341,7 @@ 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.");
@@ -390,14 +354,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
@@ -405,7 +365,7 @@ ocd_resume (pid, step, siggnal)
 }
 \f
 void
-ocd_stop ()
+ocd_stop (void)
 {
   int status;
   int pktlen;
@@ -422,8 +382,7 @@ 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);
@@ -445,8 +404,7 @@ static void (*ofunc) ();
 
 /* The user typed ^C twice.  */
 static void
-ocd_interrupt_twice (signo)
-     int signo;
+ocd_interrupt_twice (int signo)
 {
   signal (signo, ofunc);
 
@@ -458,7 +416,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 ();
 
@@ -466,7 +424,7 @@ interrupt_query ()
 Give up (and stop debugging it)? "))
     {
       target_mourn_inferior ();
-      return_to_top_level (RETURN_QUIT);
+      throw_exception (RETURN_QUIT);
     }
 
   target_terminal_inferior ();
@@ -481,7 +439,7 @@ static int kill_kludge;
    means in the case of this target).  */
 
 int
-ocd_wait ()
+ocd_wait (void)
 {
   unsigned char *p;
   int error_code;
@@ -529,10 +487,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;
@@ -574,8 +529,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;
@@ -588,10 +542,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;
@@ -620,9 +571,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];
 
@@ -632,7 +581,7 @@ ocd_write_bdm_register (bdm_regno, reg)
 }
 \f
 void
-ocd_prepare_to_store ()
+ocd_prepare_to_store (void)
 {
 }
 \f
@@ -647,10 +596,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;
@@ -722,10 +668,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;
@@ -790,23 +733,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");
 }
@@ -817,12 +762,11 @@ 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)
     {
@@ -843,8 +787,7 @@ readchar (timeout)
    mistaken for real data).  */
 
 static int
-get_quoted_char (timeout)
-     int timeout;
+get_quoted_char (int timeout)
 {
   int ch;
 
@@ -869,15 +812,15 @@ get_quoted_char (timeout)
 static unsigned char pkt[256 * 2 + 10], *pktp; /* Worst case */
 
 static void
-reset_packet ()
+reset_packet (void)
 {
   pktp = pkt;
 }
 
 static void
-output_packet ()
+output_packet (void)
 {
-  if (SERIAL_WRITE (ocd_desc, pkt, pktp - pkt))
+  if (serial_write (ocd_desc, pkt, pktp - pkt))
     perror_with_name ("output_packet: write failed");
 
   reset_packet ();
@@ -887,8 +830,7 @@ output_packet ()
    through untouched.  */
 
 static void
-put_quoted_char (c)
-     int c;
+put_quoted_char (int c)
 {
   switch (c)
     {
@@ -911,15 +853,13 @@ put_quoted_char (c)
    byte count. */
 
 static void
-stu_put_packet (buf, len)
-     unsigned char *buf;
-     int len;
+stu_put_packet (unsigned char *buf, int len)
 {
   unsigned char checksum;
   unsigned char c;
 
   if (len == 0 || len > 256)
-    abort ();                  /* Can't represent 0 length packet */
+    internal_error (__FILE__, __LINE__, "failed internal consistency check");                  /* Can't represent 0 length packet */
 
   reset_packet ();
 
@@ -956,9 +896,7 @@ 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;
@@ -980,7 +918,7 @@ ocd_put_packet (buf, len)
     }
 
   *packet_ptr++ = -checksum;
-  if (SERIAL_WRITE (ocd_desc, packet, packet_ptr - packet))
+  if (serial_write (ocd_desc, packet, packet_ptr - packet))
     perror_with_name ("output_packet: write failed");
 }
 #endif
@@ -993,9 +931,7 @@ ocd_put_packet (buf, len)
  */
 
 static unsigned char *
-stu_get_packet (cmd, lenp, timeout)
-     unsigned char cmd;
-     int *lenp;
+stu_get_packet (unsigned char cmd, int *lenp, int timeout)
 {
   int ch;
   int len;
@@ -1058,9 +994,7 @@ found_syn:                 /* Found the start of a packet */
  */
 
 static unsigned char *
-ocd_get_packet (cmd, lenp, timeout)
-     int cmd;
-     int *lenp;
+ocd_get_packet (int cmd, int *lenp, int timeout)
 {
   int ch;
   int len;
@@ -1207,10 +1141,7 @@ ocd_get_packet (cmd, lenp, timeout)
    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;
@@ -1256,7 +1187,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.  */
@@ -1273,7 +1204,7 @@ ocd_kill ()
 }
 
 void
-ocd_mourn ()
+ocd_mourn (void)
 {
   unpush_target (current_ops);
   generic_mourn_inferior ();
@@ -1283,10 +1214,7 @@ 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)
 {
   if (args && (*args != '\000'))
     error ("Args are not supported by BDM.");
@@ -1296,13 +1224,11 @@ ocd_create_inferior (exec_file, args, env)
 }
 
 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
@@ -1325,9 +1251,7 @@ ocd_load (args, from_tty)
 /* 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;
@@ -1341,9 +1265,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;
@@ -1354,17 +1276,13 @@ 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'");
 }
 
 static void
-bdm_reset_command (args, from_tty)
-     char *args;
-     int from_tty;
+bdm_reset_command (char *args, int from_tty)
 {
   int status, pktlen;
 
@@ -1372,14 +1290,12 @@ bdm_reset_command (args, from_tty)
     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;
 
@@ -1397,15 +1313,12 @@ 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; 
@@ -1438,9 +1351,7 @@ bdm_update_flash_command (args, from_tty)
 }
 
 static void
-bdm_read_register_command (args, from_tty)
-     char *args;
-     int from_tty;
+bdm_read_register_command (char *args, int from_tty)
 {
   /* XXX repeat should go on to the next register */
 
@@ -1452,8 +1363,10 @@ bdm_read_register_command (args, from_tty)
 
 }
 \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;
This page took 0.031686 seconds and 4 git commands to generate.