2002-11-13 Andrew Cagney <cagney@redhat.com>
[deliverable/binutils-gdb.git] / gdb / remote-os9k.c
index acdc8479efe31ff6c29003c2f7ce2e4d9a02e366..5a7dd3410f9e4cf8439217069b74eacce8ea54e6 100644 (file)
-/* Remote debugging interface for boot monitors, for GDB.
-   Copyright 1990, 1991, 1992, 1993 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 2 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, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
-
-/* This file was derived from remote-eb.c, which did a similar job, but for
-   an AMD-29K running EBMON.  That file was in turn derived from remote.c
-   as mentioned in the following comment (left in for comic relief):
-
-  "This is like remote.c but is for a different situation--
-   having a PC running os9000 hook up with a unix machine with
-   a serial line, and running ctty com2 on the PC. os9000 has a debug
-   monitor called ROMBUG running.  Not to mention that the PC
-   has PC/NFS, so it can access the same executables that gdb can,
-   over the net in real time."
-
-   In reality, this module talks to a debug monitor called 'ROMBUG', which
-   We communicate with ROMBUG via a direct serial line, the network version
-   of ROMBUG is not available yet.
-*/
-
-/* FIXME This file needs to be rewritten if it's to work again, either
-   to self-contained or to use the new monitor interface.  */
-
-#include "defs.h"
-#include "gdbcore.h"
-#include "target.h"
-#include "wait.h"
-#ifdef ANSI_PROTOTYPES
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-#include <signal.h>
-#include "gdb_string.h"
-#include <sys/types.h>
-#include "command.h"
-#include "serial.h"
-#include "monitor.h"
-#include "remote-utils.h"
-#include "symtab.h"
-#include "symfile.h"
-#include "objfiles.h"
-#include "gdb-stabs.h"
-
-struct cmd_list_element *showlist;
-extern struct target_ops rombug_ops;           /* Forward declaration */
-extern struct monitor_ops rombug_cmds;         /* Forward declaration */
-extern struct cmd_list_element *setlist;
-extern struct cmd_list_element *unsetlist;
-extern int attach_flag;
-
-static void rombug_close();
-static void rombug_fetch_register();
-static void rombug_fetch_registers();
-static void rombug_store_register();
-#if 0
-static int sr_get_debug();                     /* flag set by "set remotedebug" */
-#endif
-static int hashmark;                           /* flag set by "set hash" */
-static int rombug_is_open = 0;
-
-/* FIXME: Replace with sr_get_debug ().  */
-#define LOG_FILE "monitor.log"
-FILE *log_file;
-static int monitor_log = 0;
-static int tty_xon = 0;
-static int tty_xoff = 0;
-
-static int timeout = 10;
-static int is_trace_mode = 0;
-/* Descriptor for I/O to remote machine.  Initialize it to NULL*/
-static serial_t monitor_desc = NULL;
-
-static CORE_ADDR bufaddr = 0;
-static int buflen = 0;
-static char readbuf[16];
-
-/* Send data to monitor.  Works just like printf. */
-static void
-#ifdef ANSI_PROTOTYPES
-printf_monitor(char *pattern, ...)
-#else
-printf_monitor(va_alist)
-     va_dcl
-#endif
-{
-  va_list args;
-  char buf[200];
-  int i;
-
-#ifdef ANSI_PROTOTYPES
-  va_start (args, pattern);
-#else
-  char *pattern;
-  va_start(args);
-  pattern = va_arg(args, char *);
-#endif
-
-  vsprintf(buf, pattern, args);
-  va_end(args);
-
-  if (SERIAL_WRITE(monitor_desc, buf, strlen(buf)))
-    fprintf(stderr, "SERIAL_WRITE failed: %s\n", safe_strerror(errno));
-}
-
-/* Read a character from the remote system, doing all the fancy timeout stuff*/
-static int
-readchar(timeout)
-     int timeout;
-{
-  int c;
-
-  c = SERIAL_READCHAR(monitor_desc, timeout);
-
-  if (sr_get_debug())
-    putchar(c & 0x7f);
-
-  if (monitor_log && isascii(c))
-    putc(c & 0x7f, log_file);
-
-  if (c >= 0)
-    return c & 0x7f;
-
-  if (c == SERIAL_TIMEOUT)
-    {
-      if (timeout == 0)
-       return c;               /* Polls shouldn't generate timeout errors */
-
-      error("Timeout reading from remote system.");
-    }
-
-  perror_with_name("remote-monitor");
-}
-
-/* Scan input from the remote system, until STRING is found.  If DISCARD is
-   non-zero, then discard non-matching input, else print it out.
-   Let the user break out immediately.  */
-static void
-expect(string, discard)
-     char *string;
-     int discard;
-{
-  char *p = string;
-  int c;
-
-  if (sr_get_debug())
-    printf ("Expecting \"%s\"\n", string);
-
-  immediate_quit = 1;
-  while (1)
-    {
-      c = readchar(timeout);
-      if (!isascii (c))
-       continue;
-      if (c == *p++)
-       {
-         if (*p == '\0')
-           {
-             immediate_quit = 0;
-             if (sr_get_debug())
-               printf ("\nMatched\n");
-             return;
-           }
-       }
-      else
-       {
-         if (!discard)
-           {
-             fwrite(string, 1, (p - 1) - string, stdout);
-             putchar((char)c);
-             fflush(stdout);
-           }
-         p = string;
-       }
-    }
-}
-
-/* Keep discarding input until we see the ROMBUG prompt.
-
-   The convention for dealing with the prompt is that you
-   o give your command
-   o *then* wait for the prompt.
-
-   Thus the last thing that a procedure does with the serial line
-   will be an expect_prompt().  Exception:  rombug_resume does not
-   wait for the prompt, because the terminal is being handed over
-   to the inferior.  However, the next thing which happens after that
-   is a rombug_wait which does wait for the prompt.
-   Note that this includes abnormal exit, e.g. error().  This is
-   necessary to prevent getting into states from which we can't
-   recover.  */
-static void
-expect_prompt(discard)
-     int discard;
-{
-  if (monitor_log)
-  /* This is a convenient place to do this.  The idea is to do it often
-     enough that we never lose much data if we terminate abnormally.  */
-    fflush(log_file);
-
-  if (is_trace_mode) {
-    expect("trace", discard);
-  } else {
-    expect (PROMPT, discard);
-  }
-}
-
-/* Get a hex digit from the remote system & return its value.
-   If ignore_space is nonzero, ignore spaces (not newline, tab, etc).  */
-static int
-get_hex_digit(ignore_space)
-     int ignore_space;
-{
-  int ch;
-  while (1)
-    {
-      ch = readchar(timeout);
-      if (ch >= '0' && ch <= '9')
-       return ch - '0';
-      else if (ch >= 'A' && ch <= 'F')
-       return ch - 'A' + 10;
-      else if (ch >= 'a' && ch <= 'f')
-       return ch - 'a' + 10;
-      else if (ch == ' ' && ignore_space)
-       ;
-      else
-       {
-         expect_prompt(1);
-         error("Invalid hex digit from remote system.");
-       }
-    }
-}
-
-/* Get a byte from monitor and put it in *BYT.  Accept any number
-   leading spaces.  */
-static void
-get_hex_byte (byt)
-     char *byt;
-{
-  int val;
-
-  val = get_hex_digit (1) << 4;
-  val |= get_hex_digit (0);
-  *byt = val;
-}
-
-/* Get N 32-bit words from remote, each preceded by a space,
-   and put them in registers starting at REGNO.  */
-static void
-get_hex_regs (n, regno)
-     int n;
-     int regno;
-{
-  long val;
-  int i;
-  unsigned char b;
-
-  for (i = 0; i < n; i++)
-    {
-      int j;
-      
-      val = 0;
-      for (j = 0; j < 4; j++)
-       {
-         get_hex_byte (&b);
-         if (TARGET_BYTE_ORDER == BIG_ENDIAN)
-           val = (val << 8) + b;
-         else
-           val = val + (b << (j*8));
-       }
-      supply_register (regno++, (char *) &val);
-    }
-}
-
-/* This is called not only when we first attach, but also when the
-   user types "run" after having attached.  */
-static void
-rombug_create_inferior (execfile, args, env)
-     char *execfile;
-     char *args;
-     char **env;
-{
-  int entry_pt;
-
-  if (args && *args)
-    error("Can't pass arguments to remote ROMBUG process");
-
-  if (execfile == 0 || exec_bfd == 0)
-    error("No executable file specified");
-
-  entry_pt = (int) bfd_get_start_address (exec_bfd);
-
-  if (monitor_log)
-    fputs ("\nIn Create_inferior()", log_file);
-
-
-/* The "process" (board) is already stopped awaiting our commands, and
-   the program is already downloaded.  We just set its PC and go.  */
-
-  init_wait_for_inferior ();
-  proceed ((CORE_ADDR)entry_pt, TARGET_SIGNAL_DEFAULT, 0);
-}
-
-/* Open a connection to a remote debugger.
-   NAME is the filename used for communication.  */
-
-static char dev_name[100];
-
-static void
-rombug_open(args, from_tty)
-     char *args;
-     int from_tty;
-{
-  if (args == NULL)
-    error ("Use `target RomBug DEVICE-NAME' to use a serial port, or \n\
-`target RomBug HOST-NAME:PORT-NUMBER' to use a network connection.");
-
-  target_preopen(from_tty);
-
-  if (rombug_is_open)
-    unpush_target(&rombug_ops);
-
-  strcpy(dev_name, args);
-  monitor_desc = SERIAL_OPEN(dev_name);
-  if (monitor_desc == NULL)
-    perror_with_name(dev_name);
-
-  /* if baud rate is set by 'set remotebaud' */
-  if (SERIAL_SETBAUDRATE (monitor_desc, sr_get_baud_rate()))
-    {
-      SERIAL_CLOSE (monitor_desc);
-      perror_with_name ("RomBug");
-    }
-  SERIAL_RAW(monitor_desc);
-  if (tty_xon || tty_xoff)
-    {
-    struct hardware_ttystate { struct termios t;} *tty_s;
-
-      tty_s =(struct hardware_ttystate  *)SERIAL_GET_TTY_STATE(monitor_desc);
-      if (tty_xon) tty_s->t.c_iflag |= IXON; 
-      if (tty_xoff) tty_s->t.c_iflag |= IXOFF;
-      SERIAL_SET_TTY_STATE(monitor_desc, (serial_ttystate) tty_s);
-    }
-
-  rombug_is_open = 1;
-
-  log_file = fopen (LOG_FILE, "w");
-  if (log_file == NULL)
-    perror_with_name (LOG_FILE);
-
-  push_monitor (&rombug_cmds);
-  printf_monitor("\r");        /* CR wakes up monitor */
-  expect_prompt(1);
-  push_target (&rombug_ops);
-  attach_flag = 1;
-
-  if (from_tty)
-    printf("Remote %s connected to %s\n", target_shortname,
-          dev_name);
-
-  rombug_fetch_registers();
-
-  printf_monitor ("ov e \r");
-  expect_prompt(1);
-  bufaddr = 0;
-  buflen = 0;
-}
-
-/*
- * Close out all files and local state before this target loses control.
- */
-
-static void
-rombug_close (quitting)
-     int quitting;
-{
-  if (rombug_is_open) {
-    SERIAL_CLOSE(monitor_desc);
-    monitor_desc = NULL;
-    rombug_is_open = 0;
-  }
-
-  if (log_file) {
-    if (ferror(log_file))
-      fprintf(stderr, "Error writing log file.\n");
-    if (fclose(log_file) != 0)
-      fprintf(stderr, "Error closing log file.\n");
-    log_file = 0;
-  }
-}
-
-int
-rombug_link(mod_name, text_reloc)
-     char *mod_name;
-     CORE_ADDR *text_reloc;
-{
-  int i, j;
-  unsigned long val;
-  unsigned char b;
-
-  printf_monitor("l %s \r", mod_name); 
-  expect_prompt(1);
-  printf_monitor(".r \r");
-  expect(REG_DELIM, 1);
-  for (i=0; i <= 7; i++)
-    {
-      val = 0;
-      for (j = 0; j < 4; j++)
-        {
-          get_hex_byte(&b);
-          val = (val << 8) + b;
-       }
-    }
-  expect_prompt(1);
-  *text_reloc = val;
-  return 1;
-}
-
-/* Terminate the open connection to the remote debugger.
-   Use this when you want to detach and do something else
-   with your gdb.  */
-static void
-rombug_detach (from_tty)
-     int from_tty;
-{
-  if (attach_flag) {
-    printf_monitor (GO_CMD);
-    attach_flag = 0;
-  }
-  pop_target();                /* calls rombug_close to do the real work */
-  if (from_tty)
-    printf ("Ending remote %s debugging\n", target_shortname);
-}
-/*
- * Tell the remote machine to resume.
- */
-static void
-rombug_resume (pid, step, sig)
-     int pid, step;
-     enum target_signal sig;
-{
-  if (monitor_log)
-    fprintf (log_file, "\nIn Resume (step=%d, sig=%d)\n", step, sig);
-
-  if (step)
-    {
-      is_trace_mode = 1;
-      printf_monitor (STEP_CMD);
-      /* wait for the echo.  **
-      expect (STEP_CMD, 1);
-      */
-    }
-  else
-    {
-      printf_monitor (GO_CMD);
-      /* swallow the echo.  **
-      expect (GO_CMD, 1);
-      */
-    }
-  bufaddr = 0;
-  buflen= 0;
-}
-
-/*
- * Wait until the remote machine stops, then return,
- * storing status in status just as `wait' would.
- */
-
-static int
-rombug_wait (pid, status)
-     int pid;
-     struct target_waitstatus *status;
-{
-  int old_timeout = timeout;
-  struct section_offsets *offs;
-  CORE_ADDR addr, pc;
-  struct obj_section *obj_sec;
-
-  if (monitor_log)
-    fputs ("\nIn wait ()", log_file);
-
-  status->kind = TARGET_WAITKIND_EXITED;
-  status->value.integer = 0;
-
-  timeout = -1;                /* Don't time out -- user program is running. */
-  expect ("eax:", 0);   /* output any message before register display */
-  expect_prompt(1);     /* Wait for prompt, outputting extraneous text */
-
-  status->kind = TARGET_WAITKIND_STOPPED;
-  status->value.sig = TARGET_SIGNAL_TRAP;
-  timeout = old_timeout;
-  rombug_fetch_registers();
-  bufaddr = 0;
-  buflen = 0;
-  pc = read_register(PC_REGNUM);
-  addr = read_register(DATABASE_REG);
-  obj_sec = find_pc_section (pc);
-  if (obj_sec != NULL)
-    {
-      if (obj_sec->objfile != symfile_objfile)
-        new_symfile_objfile(obj_sec->objfile, 1, 0);
-      offs = ((struct section_offsets *)
-        alloca (sizeof (struct section_offsets)
-        + (symfile_objfile->num_sections * sizeof (offs->offsets))));
-      memcpy (offs, symfile_objfile->section_offsets,
-         (sizeof (struct section_offsets) + 
-        (symfile_objfile->num_sections * sizeof (offs->offsets))));
-      ANOFFSET (offs, SECT_OFF_DATA) = addr;
-      ANOFFSET (offs, SECT_OFF_BSS) = addr;
-
-      objfile_relocate(symfile_objfile, offs);
-    }
-
-  return 0;
-}
-
-/* Return the name of register number regno in the form input and output by
-   monitor.  Currently, register_names just happens to contain exactly what
-   monitor wants.  Lets take advantage of that just as long as possible! */
-
-static char *
-get_reg_name (regno)
-     int regno;
-{
-  static char buf[50];
-  char *p;
-  char *b;
-
-  b = buf;
-
-  if (regno < 0)
-    return ("");
-/*
-  for (p = REGISTER_NAME (regno); *p; p++)
-    *b++ = toupper(*p);
-  *b = '\000';
-*/
-  p = (char *)REGISTER_NAME (regno);
-  return p;
-/*
-  return buf;
-*/
-}
-
-/* read the remote registers into the block regs.  */
-
-static void
-rombug_fetch_registers ()
-{
-  int regno, j, i;
-  long val;
-  unsigned char b;
-
-  printf_monitor (GET_REG);
-  expect("eax:", 1);
-  expect("\n", 1);
-  get_hex_regs(1, 0);
-  get_hex_regs(1, 3);
-  get_hex_regs(1, 1);
-  get_hex_regs(1, 2);
-  get_hex_regs(1, 6);
-  get_hex_regs(1, 7);
-  get_hex_regs(1, 5);
-  get_hex_regs(1, 4);
-  for (regno = 8; regno <= 15; regno++)
-    {
-      expect(REG_DELIM, 1);
-      if (regno >= 8 && regno <= 13)
-       {
-         val = 0;
-         for (j = 0; j < 2; j++)
-            {
-              get_hex_byte (&b);
-             if (TARGET_BYTE_ORDER == BIG_ENDIAN)
-               val = (val << 8) + b;
-             else
-               val = val + (b << (j*8));
-            }
-
-         if (regno == 8) i = 10;
-         if (regno >=  9 && regno <= 12) i = regno + 3;
-         if (regno == 13) i = 11;
-         supply_register (i, (char *) &val);
-       }
-      else if (regno == 14)
-       {
-         get_hex_regs(1, PC_REGNUM);
-       }
-      else if (regno == 15)
-       {
-         get_hex_regs(1, 9);
-       }
-      else
-       {
-         val = 0;
-         supply_register(regno, (char *) &val);
-       }
-    }
-  is_trace_mode = 0;
-  expect_prompt (1);
-}
-
-/* Fetch register REGNO, or all registers if REGNO is -1.
-   Returns errno value.  */
-static void
-rombug_fetch_register (regno)
-     int regno;
-{
-  int val, j;
-  unsigned char b;
-
-  if (monitor_log) {
-    fprintf (log_file, "\nIn Fetch Register (reg=%s)\n", get_reg_name (regno));
-    fflush (log_file);
-  }
-
-  if (regno < 0)
-    {
-      rombug_fetch_registers ();
-    }
-  else
-    {
-      char *name = get_reg_name (regno);
-      printf_monitor (GET_REG);
-      if (regno >= 10 && regno <= 15)
-       {
-         expect ("\n", 1);
-         expect ("\n", 1);
-          expect (name, 1);
-          expect (REG_DELIM, 1);
-         val = 0;
-         for (j = 0; j < 2; j++)
-            {
-              get_hex_byte (&b);
-             if (TARGET_BYTE_ORDER == BIG_ENDIAN)
-               val = (val << 8) + b;
-             else
-               val = val + (b << (j*8));
-            }
-         supply_register (regno, (char *) &val);
-       }
-      else if (regno == 8 || regno == 9)
-       {
-         expect ("\n", 1);
-         expect ("\n", 1);
-         expect ("\n", 1);
-          expect (name, 1);
-          expect (REG_DELIM, 1);
-         get_hex_regs (1, regno);
-       }
-      else
-       {
-          expect (name, 1);
-          expect (REG_DELIM, 1);
-         expect("\n", 1);
-         get_hex_regs(1, 0);
-         get_hex_regs(1, 3);
-         get_hex_regs(1, 1);
-         get_hex_regs(1, 2);
-         get_hex_regs(1, 6);
-         get_hex_regs(1, 7);
-         get_hex_regs(1, 5);
-         get_hex_regs(1, 4);
-       }
-      expect_prompt (1);
-    }
-  return;
-}
-
-/* Store the remote registers from the contents of the block REGS.  */
-
-static void
-rombug_store_registers ()
-{
-  int regno;
-
-  for (regno = 0; regno <= PC_REGNUM; regno++)
-    rombug_store_register(regno);
-
-  registers_changed ();
-}
-
-/* Store register REGNO, or all if REGNO == 0.
-   return errno value.  */
-static void
-rombug_store_register (regno)
-     int regno;
-{
-char *name;
-
-  if (monitor_log)
-    fprintf (log_file, "\nIn Store_register (regno=%d)\n", regno);
-
-  if (regno == -1)
-    rombug_store_registers ();
-  else
-    {
-      if (sr_get_debug())
-       printf ("Setting register %s to 0x%x\n", get_reg_name (regno), read_register (regno));
-
-      name = get_reg_name(regno);
-      if (name == 0) return;
-      printf_monitor (SET_REG, name, read_register (regno));
-
-      is_trace_mode = 0;
-      expect_prompt (1);
-    }
-}
-
-/* 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
-rombug_prepare_to_store ()
-{
-  /* Do nothing, since we can store individual regs */
-}
-
-static void
-rombug_files_info ()
-{
-  printf ("\tAttached to %s at %d baud.\n",
-         dev_name, sr_get_baud_rate());
-}
-
-/* Copy LEN bytes of data from debugger memory at MYADDR
-   to inferior's memory at MEMADDR.  Returns length moved.  */
-static int
-rombug_write_inferior_memory (memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     unsigned char *myaddr;
-     int len;
-{
-  int i;
-  char buf[10];
-
-  if (monitor_log)
-    fprintf (log_file, "\nIn Write_inferior_memory (memaddr=%x, len=%d)\n", memaddr, len);
-
-  printf_monitor (MEM_SET_CMD, memaddr);
-  for (i = 0; i < len; i++)
-    {
-      expect (CMD_DELIM, 1);
-      printf_monitor ("%x \r", myaddr[i]);
-      if (sr_get_debug())
-       printf ("\nSet 0x%x to 0x%x\n", memaddr + i, myaddr[i]);
-    }
-  expect (CMD_DELIM, 1);
-  if (CMD_END)
-    printf_monitor (CMD_END);
-  is_trace_mode = 0;
-  expect_prompt (1);
-
-  bufaddr = 0;
-  buflen = 0;
-  return len;
-}
-
-/* Read LEN bytes from inferior memory at MEMADDR.  Put the result
-   at debugger address MYADDR.  Returns length moved.  */
-static int
-rombug_read_inferior_memory(memaddr, myaddr, len)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-{
-  int i, j;
-
-  /* Number of bytes read so far.  */
-  int count;
-
-  /* Starting address of this pass.  */
-  unsigned long startaddr;
-
-  /* Number of bytes to read in this pass.  */
-  int len_this_pass;
-
-  if (monitor_log)
-    fprintf (log_file, "\nIn Read_inferior_memory (memaddr=%x, len=%d)\n", memaddr, len);
-
-  /* Note that this code works correctly if startaddr is just less
-     than UINT_MAX (well, really CORE_ADDR_MAX if there was such a
-     thing).  That is, something like
-     rombug_read_bytes (CORE_ADDR_MAX - 4, foo, 4)
-     works--it never adds len To memaddr and gets 0.  */
-  /* However, something like
-     rombug_read_bytes (CORE_ADDR_MAX - 3, foo, 4)
-     doesn't need to work.  Detect it and give up if there's an attempt
-     to do that.  */
-  if (((memaddr - 1) + len) < memaddr) {
-    errno = EIO;
-    return 0;
-  }
-  if (bufaddr <= memaddr && (memaddr+len) <= (bufaddr+buflen))
-    {
-      memcpy(myaddr, &readbuf[memaddr-bufaddr], len);
-      return len;
-    }
-  
-  startaddr = memaddr;
-  count = 0;
-  while (count < len)
-    {
-      len_this_pass = 16;
-      if ((startaddr % 16) != 0)
-       len_this_pass -= startaddr % 16;
-      if (len_this_pass > (len - count))
-       len_this_pass = (len - count);
-      if (sr_get_debug())
-       printf ("\nDisplay %d bytes at %x\n", len_this_pass, startaddr);
-
-      printf_monitor (MEM_DIS_CMD, startaddr, 8);
-      expect ("- ", 1);
-      for (i = 0; i < 16; i++)
-       {
-         get_hex_byte (&readbuf[i]);
-       }
-      bufaddr = startaddr;
-      buflen = 16;
-      memcpy(&myaddr[count], readbuf, len_this_pass); 
-      count += len_this_pass;
-      startaddr += len_this_pass;
-      expect(CMD_DELIM, 1);
-    }
-  if (CMD_END) 
-      printf_monitor (CMD_END);
-  is_trace_mode = 0;
-  expect_prompt (1);
-
-  return len;
-}
-
-/* FIXME-someday!  merge these two.  */
-static int
-rombug_xfer_inferior_memory (memaddr, myaddr, len, write, target)
-     CORE_ADDR memaddr;
-     char *myaddr;
-     int len;
-     int write;
-     struct target_ops *target;                /* ignored */
-{
-  if (write)
-    return rombug_write_inferior_memory (memaddr, myaddr, len);
-  else
-    return rombug_read_inferior_memory (memaddr, myaddr, len);
-}
-
-static void
-rombug_kill (args, from_tty)
-     char *args;
-     int from_tty;
-{
-  return;              /* ignore attempts to kill target system */
-}
-
-/* Clean up when a program exits.
-   The program actually lives on in the remote processor's RAM, and may be
-   run again without a download.  Don't leave it full of breakpoint
-   instructions.  */
-
-static void
-rombug_mourn_inferior ()
-{
-  remove_breakpoints ();
-  generic_mourn_inferior ();   /* Do all the proper things now */
-}
-
-#define MAX_MONITOR_BREAKPOINTS 16
-
-static CORE_ADDR breakaddr[MAX_MONITOR_BREAKPOINTS] = {0};
-
-static int
-rombug_insert_breakpoint (addr, shadow)
-     CORE_ADDR addr;
-     char *shadow;
-{
-  int i;
-  CORE_ADDR bp_addr = addr;
-  int bp_size = 0;
-
-  if (monitor_log)
-    fprintf (log_file, "\nIn Insert_breakpoint (addr=%x)\n", addr);
-  BREAKPOINT_FROM_PC (&bp_addr, &bp_size);
-
-  for (i = 0; i <= MAX_MONITOR_BREAKPOINTS; i++)
-    if (breakaddr[i] == 0)
-      {
-       breakaddr[i] = addr;
-       if (sr_get_debug())
-         printf ("Breakpoint at %x\n", addr);
-       rombug_read_inferior_memory (bp_addr, shadow, bp_size);
-       printf_monitor(SET_BREAK_CMD, addr);
-       is_trace_mode = 0;
-       expect_prompt(1);
-       return 0;
-      }
-
-  fprintf(stderr, "Too many breakpoints (> 16) for monitor\n");
-  return 1;
-}
-
-/*
- * _remove_breakpoint -- Tell the monitor to remove a breakpoint
- */
-static int
-rombug_remove_breakpoint (addr, shadow)
-     CORE_ADDR addr;
-     char *shadow;
-{
-  int i;
-
-  if (monitor_log)
-    fprintf (log_file, "\nIn Remove_breakpoint (addr=%x)\n", addr);
-
-  for (i = 0; i < MAX_MONITOR_BREAKPOINTS; i++)
-    if (breakaddr[i] == addr)
-      {
-       breakaddr[i] = 0;
-       printf_monitor(CLR_BREAK_CMD, addr);
-       is_trace_mode = 0;
-       expect_prompt(1);
-       return 0;
-      }
-
-  fprintf(stderr, "Can't find breakpoint associated with 0x%x\n", addr);
-  return 1;
-}
-
-/* Load a file. This is usually an srecord, which is ascii. No 
-   protocol, just sent line by line. */
-
-#define DOWNLOAD_LINE_SIZE 100
-static void
-rombug_load (arg)
-    char       *arg;
-{
-/* this part comment out for os9* */
-#if 0
-  FILE *download;
-  char buf[DOWNLOAD_LINE_SIZE];
-  int i, bytes_read;
-
-  if (sr_get_debug())
-    printf ("Loading %s to monitor\n", arg);
-
-  download = fopen (arg, "r");
-  if (download == NULL)
-    {
-    error (sprintf (buf, "%s Does not exist", arg));
-    return;
-  }
-
-  printf_monitor (LOAD_CMD);
-/*  expect ("Waiting for S-records from host... ", 1); */
-
-  while (!feof (download))
-    {
-      bytes_read = fread (buf, sizeof (char), DOWNLOAD_LINE_SIZE, download);
-      if (hashmark)
-       {
-         putchar ('.');
-         fflush (stdout);
-       }
-
-      if (SERIAL_WRITE(monitor_desc, buf, bytes_read)) {
-       fprintf(stderr, "SERIAL_WRITE failed: (while downloading) %s\n", safe_strerror(errno));
-       break;
-      }
-      i = 0;
-      while (i++ <=200000) {} ;                        /* Ugly HACK, probably needs flow control */
-      if (bytes_read < DOWNLOAD_LINE_SIZE)
-       {
-         if (!feof (download))
-           error ("Only read %d bytes\n", bytes_read);
-         break;
-       }
-    }
-
-  if (hashmark)
-    {
-      putchar ('\n');
-    }
-  if (!feof (download))
-    error ("Never got EOF while downloading");
-  fclose (download);
-#endif 0
-}
-
-/* Put a command string, in args, out to MONITOR.  
-   Output from MONITOR is placed on the users terminal until the prompt 
-   is seen. */
-
-static void
-rombug_command (args, fromtty)
-     char      *args;
-     int       fromtty;
-{
-  if (monitor_desc == NULL)
-    error("monitor target not open.");
-  
-  if (monitor_log)
-    fprintf (log_file, "\nIn command (args=%s)\n", args);
-
-  if (!args)
-    error("Missing command.");
-       
-  printf_monitor("%s\r", args);
-  expect_prompt(0);
-}
-
-#if 0
-/* Connect the user directly to MONITOR.  This command acts just like the
-   'cu' or 'tip' command.  Use <CR>~. or <CR>~^D to break out.  */
-
-static struct ttystate ttystate;
-
-static void
-cleanup_tty()
-{  printf("\r\n[Exiting connect mode]\r\n");
-  /*SERIAL_RESTORE(0, &ttystate);*/
-}
-
-static void
-connect_command (args, fromtty)
-     char      *args;
-     int       fromtty;
-{
-  fd_set readfds;
-  int numfds;
-  int c;
-  char cur_esc = 0;
-
-  dont_repeat();
-
-  if (monitor_desc == NULL)
-    error("monitor target not open.");
-  
-  if (args)
-    fprintf("This command takes no args.  They have been ignored.\n");
-       
-  printf("[Entering connect mode.  Use ~. or ~^D to escape]\n");
-
-  serial_raw(0, &ttystate);
-
-  make_cleanup(cleanup_tty, 0);
-
-  FD_ZERO(&readfds);
-
-  while (1)
-    {
-      do
-       {
-         FD_SET(0, &readfds);
-         FD_SET(monitor_desc, &readfds);
-         numfds = select(sizeof(readfds)*8, &readfds, 0, 0, 0);
-       }
-      while (numfds == 0);
-
-      if (numfds < 0)
-       perror_with_name("select");
-
-      if (FD_ISSET(0, &readfds))
-       {                       /* tty input, send to monitor */
-         c = getchar();
-         if (c < 0)
-           perror_with_name("connect");
-
-         printf_monitor("%c", c);
-         switch (cur_esc)
-           {
-           case 0:
-             if (c == '\r')
-               cur_esc = c;
-             break;
-           case '\r':
-             if (c == '~')
-               cur_esc = c;
-             else
-               cur_esc = 0;
-             break;
-           case '~':
-             if (c == '.' || c == '\004')
-               return;
-             else
-               cur_esc = 0;
-           }
-       }
-
-      if (FD_ISSET(monitor_desc, &readfds))
-       {
-         while (1)
-           {
-             c = readchar(0);
-             if (c < 0)
-               break;
-             putchar(c);
-           }
-         fflush(stdout);
-       }
-    }
-}
-#endif
-
-/*
- * Define the monitor command strings. Since these are passed directly
- * through to a printf style function, we need can include formatting
- * strings. We also need a CR or LF on the end.
- */
-#warning FIXME: monitor interface pattern strings, stale struct decl
-struct monitor_ops rombug_cmds = {
-  "g \r",                              /* execute or usually GO command */
-  "g \r",                              /* continue command */
-  "t \r",                              /* single step */
-  "b %x\r",                            /* set a breakpoint */
-  "k %x\r",                            /* clear a breakpoint */
-  "c %x\r",                            /* set memory to a value */
-  "d %x %d\r",                         /* display memory */
-  "$%08X",                             /* prompt memory commands use */
-  ".%s %x\r",                          /* set a register */
-  ":",                                 /* delimiter between registers */
-  ". \r",                              /* read a register */
-  "mf \r",                             /* download command */
-  "RomBug: ",                          /* monitor command prompt */
-  ": ",                                        /* end-of-command delimitor */
-  ".\r"                                        /* optional command terminator */
-};
-
-struct target_ops rombug_ops ;
-
-static void init_rombug_ops(void)
-{
-  rombug_ops.to_shortname =   "rombug";
-  rombug_ops.to_longname =   "Microware's ROMBUG debug monitor";
-  rombug_ops.to_doc =   "Use a remote computer running the ROMBUG debug monitor.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).",
-    rombug_ops.to_open =   rombug_open;
-  rombug_ops.to_close =   rombug_close;
-  rombug_ops.to_attach =   0;
-  rombug_ops.to_detach =   rombug_detach;
-  rombug_ops.to_resume =   rombug_resume;
-  rombug_ops.to_wait  =   rombug_wait;
-  rombug_ops.to_fetch_registers  =   rombug_fetch_register;
-  rombug_ops.to_store_registers  =   rombug_store_register;
-  rombug_ops.to_prepare_to_store =   rombug_prepare_to_store;
-  rombug_ops.to_xfer_memory  =   rombug_xfer_inferior_memory;
-  rombug_ops.to_files_info  =   rombug_files_info;
-  rombug_ops.to_insert_breakpoint =   rombug_insert_breakpoint;
-  rombug_ops.to_remove_breakpoint =   rombug_remove_breakpoint;        /* Breakpoints */
-  rombug_ops.to_terminal_init  =   0;
-  rombug_ops.to_terminal_inferior =   0;
-  rombug_ops.to_terminal_ours_for_output =   0;
-  rombug_ops.to_terminal_ours  =   0;
-  rombug_ops.to_terminal_info  =   0;                          /* Terminal handling */
-  rombug_ops.to_kill  =   rombug_kill;
-  rombug_ops.to_load  =   rombug_load;                 /* load */
-  rombug_ops.to_lookup_symbol =   rombug_link;                         /* lookup_symbol */
-  rombug_ops.to_create_inferior =   rombug_create_inferior;
-  rombug_ops.to_mourn_inferior =   rombug_mourn_inferior;
-  rombug_ops.to_can_run  =   0;                                /* can_run */
-  rombug_ops.to_notice_signals =   0;                          /* notice_signals */
-  rombug_ops.to_thread_alive  =   0;
-  rombug_ops.to_stop  =   0;                           /* to_stop */
-  rombug_ops.to_stratum =   process_stratum;
-  rombug_ops.DONT_USE =   0;                           /* next */
-  rombug_ops.to_has_all_memory =   1;
-  rombug_ops.to_has_memory =   1;
-  rombug_ops.to_has_stack =   1;
-  rombug_ops.to_has_registers =   1;
-  rombug_ops.to_has_execution =   1;                           /* has execution */
-  rombug_ops.to_sections =   0;
-  rombug_ops.to_sections_end =   0;                            /* Section pointers */
-  rombug_ops.to_magic =   OPS_MAGIC;                   /* Always the last thing */
-} 
-
-void
-_initialize_remote_os9k ()
-{
-  init_rombug_ops() ;
-  add_target (&rombug_ops);
-
-  add_show_from_set (
-        add_set_cmd ("hash", no_class, var_boolean, (char *)&hashmark,
-               "Set display of activity while downloading a file.\nWhen enabled, a period \'.\' is displayed.",
-                &setlist),
-       &showlist);
-
-  add_show_from_set (
-        add_set_cmd ("timeout", no_class, var_zinteger,
-                 (char *) &timeout,
-                 "Set timeout in seconds for remote MIPS serial I/O.",
-                 &setlist),
-        &showlist);
-
-  add_show_from_set (
-        add_set_cmd ("remotelog", no_class, var_zinteger,
-                 (char *) &monitor_log,
-                 "Set monitor activity log on(=1) or off(=0).",
-                 &setlist),
-        &showlist);
-
-  add_show_from_set (
-        add_set_cmd ("remotexon", no_class, var_zinteger,
-                 (char *) &tty_xon,
-                 "Set remote tty line XON control",
-                 &setlist),
-        &showlist);
-
-  add_show_from_set (
-        add_set_cmd ("remotexoff", no_class, var_zinteger,
-                 (char *) &tty_xoff,
-                 "Set remote tty line XOFF control",
-                 &setlist),
-        &showlist);
-
-  add_com ("rombug <command>", class_obscure, rombug_command,
-          "Send a command to the debug monitor."); 
-#if 0
-  add_com ("connect", class_obscure, connect_command,
-          "Connect the terminal directly up to a serial based command monitor.\nUse <CR>~. or <CR>~^D to break out.");
-#endif
-}
+// OBSOLETE /* Remote debugging interface for boot monitors, for GDB.
+// OBSOLETE 
+// OBSOLETE    Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999,
+// OBSOLETE    2000, 2001, 2002 Free Software Foundation, Inc.
+// OBSOLETE 
+// OBSOLETE    This file is part of GDB.
+// OBSOLETE 
+// OBSOLETE    This program is free software; you can redistribute it and/or modify
+// OBSOLETE    it under the terms of the GNU General Public License as published by
+// OBSOLETE    the Free Software Foundation; either version 2 of the License, or
+// OBSOLETE    (at your option) any later version.
+// OBSOLETE 
+// OBSOLETE    This program is distributed in the hope that it will be useful,
+// OBSOLETE    but WITHOUT ANY WARRANTY; without even the implied warranty of
+// OBSOLETE    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// OBSOLETE    GNU General Public License for more details.
+// OBSOLETE 
+// OBSOLETE    You should have received a copy of the GNU General Public License
+// OBSOLETE    along with this program; if not, write to the Free Software
+// OBSOLETE    Foundation, Inc., 59 Temple Place - Suite 330,
+// OBSOLETE    Boston, MA 02111-1307, USA.  */
+// OBSOLETE 
+// OBSOLETE /* This file was derived from remote-eb.c, which did a similar job, but for
+// OBSOLETE    an AMD-29K running EBMON.  That file was in turn derived from remote.c
+// OBSOLETE    as mentioned in the following comment (left in for comic relief):
+// OBSOLETE 
+// OBSOLETE    "This is like remote.c but is for a different situation--
+// OBSOLETE    having a PC running os9000 hook up with a unix machine with
+// OBSOLETE    a serial line, and running ctty com2 on the PC. os9000 has a debug
+// OBSOLETE    monitor called ROMBUG running.  Not to mention that the PC
+// OBSOLETE    has PC/NFS, so it can access the same executables that gdb can,
+// OBSOLETE    over the net in real time."
+// OBSOLETE 
+// OBSOLETE    In reality, this module talks to a debug monitor called 'ROMBUG', which
+// OBSOLETE    We communicate with ROMBUG via a direct serial line, the network version
+// OBSOLETE    of ROMBUG is not available yet.
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE /* FIXME This file needs to be rewritten if it's to work again, either
+// OBSOLETE    to self-contained or to use the new monitor interface.  */
+// OBSOLETE 
+// OBSOLETE #include "defs.h"
+// OBSOLETE #include "gdbcore.h"
+// OBSOLETE #include "target.h"
+// OBSOLETE #include "gdb_string.h"
+// OBSOLETE #include <sys/types.h>
+// OBSOLETE #include "command.h"
+// OBSOLETE #include "serial.h"
+// OBSOLETE #include "monitor.h"
+// OBSOLETE #include "remote-utils.h"
+// OBSOLETE #include "symtab.h"
+// OBSOLETE #include "symfile.h"
+// OBSOLETE #include "objfiles.h"
+// OBSOLETE #include "gdb-stabs.h"
+// OBSOLETE #include "regcache.h"
+// OBSOLETE 
+// OBSOLETE struct cmd_list_element *showlist;
+// OBSOLETE extern struct target_ops rombug_ops;       /* Forward declaration */
+// OBSOLETE extern struct monitor_ops rombug_cmds;     /* Forward declaration */
+// OBSOLETE extern struct cmd_list_element *setlist;
+// OBSOLETE extern struct cmd_list_element *unsetlist;
+// OBSOLETE extern int attach_flag;
+// OBSOLETE 
+// OBSOLETE static void rombug_close ();
+// OBSOLETE static void rombug_fetch_register ();
+// OBSOLETE static void rombug_fetch_registers ();
+// OBSOLETE static void rombug_store_register ();
+// OBSOLETE #if 0
+// OBSOLETE static int sr_get_debug ();        /* flag set by "set remotedebug" */
+// OBSOLETE #endif
+// OBSOLETE static int hashmark;               /* flag set by "set hash" */
+// OBSOLETE static int rombug_is_open = 0;
+// OBSOLETE 
+// OBSOLETE /* FIXME: Replace with sr_get_debug ().  */
+// OBSOLETE #define LOG_FILE "monitor.log"
+// OBSOLETE FILE *log_file;
+// OBSOLETE static int monitor_log = 0;
+// OBSOLETE static int tty_xon = 0;
+// OBSOLETE static int tty_xoff = 0;
+// OBSOLETE 
+// OBSOLETE static int timeout = 10;
+// OBSOLETE static int is_trace_mode = 0;
+// OBSOLETE /* Descriptor for I/O to remote machine.  Initialize it to NULL */
+// OBSOLETE static struct serial *monitor_desc = NULL;
+// OBSOLETE 
+// OBSOLETE static CORE_ADDR bufaddr = 0;
+// OBSOLETE static int buflen = 0;
+// OBSOLETE static char readbuf[16];
+// OBSOLETE 
+// OBSOLETE /* Send data to monitor.  Works just like printf. */
+// OBSOLETE static void
+// OBSOLETE printf_monitor (char *pattern,...)
+// OBSOLETE {
+// OBSOLETE   va_list args;
+// OBSOLETE   char buf[200];
+// OBSOLETE   int i;
+// OBSOLETE 
+// OBSOLETE   va_start (args, pattern);
+// OBSOLETE 
+// OBSOLETE   vsprintf (buf, pattern, args);
+// OBSOLETE   va_end (args);
+// OBSOLETE 
+// OBSOLETE   if (serial_write (monitor_desc, buf, strlen (buf)))
+// OBSOLETE     fprintf_unfiltered (gdb_stderr, "serial_write failed: %s\n",
+// OBSOLETE                    safe_strerror (errno));
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Read a character from the remote system, doing all the fancy timeout stuff */
+// OBSOLETE static int
+// OBSOLETE readchar (int timeout)
+// OBSOLETE {
+// OBSOLETE   int c;
+// OBSOLETE 
+// OBSOLETE   c = serial_readchar (monitor_desc, timeout);
+// OBSOLETE 
+// OBSOLETE   if (sr_get_debug ())
+// OBSOLETE     putchar (c & 0x7f);
+// OBSOLETE 
+// OBSOLETE   if (monitor_log && isascii (c))
+// OBSOLETE     putc (c & 0x7f, log_file);
+// OBSOLETE 
+// OBSOLETE   if (c >= 0)
+// OBSOLETE     return c & 0x7f;
+// OBSOLETE 
+// OBSOLETE   if (c == SERIAL_TIMEOUT)
+// OBSOLETE     {
+// OBSOLETE       if (timeout == 0)
+// OBSOLETE    return c;               /* Polls shouldn't generate timeout errors */
+// OBSOLETE 
+// OBSOLETE       error ("Timeout reading from remote system.");
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   perror_with_name ("remote-monitor");
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Scan input from the remote system, until STRING is found.  If DISCARD is
+// OBSOLETE    non-zero, then discard non-matching input, else print it out.
+// OBSOLETE    Let the user break out immediately.  */
+// OBSOLETE static void
+// OBSOLETE expect (char *string, int discard)
+// OBSOLETE {
+// OBSOLETE   char *p = string;
+// OBSOLETE   int c;
+// OBSOLETE 
+// OBSOLETE   if (sr_get_debug ())
+// OBSOLETE     printf ("Expecting \"%s\"\n", string);
+// OBSOLETE 
+// OBSOLETE   immediate_quit++;
+// OBSOLETE   while (1)
+// OBSOLETE     {
+// OBSOLETE       c = readchar (timeout);
+// OBSOLETE       if (!isascii (c))
+// OBSOLETE    continue;
+// OBSOLETE       if (c == *p++)
+// OBSOLETE    {
+// OBSOLETE      if (*p == '\0')
+// OBSOLETE        {
+// OBSOLETE          immediate_quit--;
+// OBSOLETE          if (sr_get_debug ())
+// OBSOLETE            printf ("\nMatched\n");
+// OBSOLETE          return;
+// OBSOLETE        }
+// OBSOLETE    }
+// OBSOLETE       else
+// OBSOLETE    {
+// OBSOLETE      if (!discard)
+// OBSOLETE        {
+// OBSOLETE          fwrite (string, 1, (p - 1) - string, stdout);
+// OBSOLETE          putchar ((char) c);
+// OBSOLETE          fflush (stdout);
+// OBSOLETE        }
+// OBSOLETE      p = string;
+// OBSOLETE    }
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Keep discarding input until we see the ROMBUG prompt.
+// OBSOLETE 
+// OBSOLETE    The convention for dealing with the prompt is that you
+// OBSOLETE    o give your command
+// OBSOLETE    o *then* wait for the prompt.
+// OBSOLETE 
+// OBSOLETE    Thus the last thing that a procedure does with the serial line
+// OBSOLETE    will be an expect_prompt().  Exception:  rombug_resume does not
+// OBSOLETE    wait for the prompt, because the terminal is being handed over
+// OBSOLETE    to the inferior.  However, the next thing which happens after that
+// OBSOLETE    is a rombug_wait which does wait for the prompt.
+// OBSOLETE    Note that this includes abnormal exit, e.g. error().  This is
+// OBSOLETE    necessary to prevent getting into states from which we can't
+// OBSOLETE    recover.  */
+// OBSOLETE static void
+// OBSOLETE expect_prompt (int discard)
+// OBSOLETE {
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     /* This is a convenient place to do this.  The idea is to do it often
+// OBSOLETE        enough that we never lose much data if we terminate abnormally.  */
+// OBSOLETE     fflush (log_file);
+// OBSOLETE 
+// OBSOLETE   if (is_trace_mode)
+// OBSOLETE     {
+// OBSOLETE       expect ("trace", discard);
+// OBSOLETE     }
+// OBSOLETE   else
+// OBSOLETE     {
+// OBSOLETE       expect (PROMPT, discard);
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Get a hex digit from the remote system & return its value.
+// OBSOLETE    If ignore_space is nonzero, ignore spaces (not newline, tab, etc).  */
+// OBSOLETE static int
+// OBSOLETE get_hex_digit (int ignore_space)
+// OBSOLETE {
+// OBSOLETE   int ch;
+// OBSOLETE   while (1)
+// OBSOLETE     {
+// OBSOLETE       ch = readchar (timeout);
+// OBSOLETE       if (ch >= '0' && ch <= '9')
+// OBSOLETE    return ch - '0';
+// OBSOLETE       else if (ch >= 'A' && ch <= 'F')
+// OBSOLETE    return ch - 'A' + 10;
+// OBSOLETE       else if (ch >= 'a' && ch <= 'f')
+// OBSOLETE    return ch - 'a' + 10;
+// OBSOLETE       else if (ch == ' ' && ignore_space)
+// OBSOLETE    ;
+// OBSOLETE       else
+// OBSOLETE    {
+// OBSOLETE      expect_prompt (1);
+// OBSOLETE      error ("Invalid hex digit from remote system.");
+// OBSOLETE    }
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Get a byte from monitor and put it in *BYT.  Accept any number
+// OBSOLETE    leading spaces.  */
+// OBSOLETE static void
+// OBSOLETE get_hex_byte (char *byt)
+// OBSOLETE {
+// OBSOLETE   int val;
+// OBSOLETE 
+// OBSOLETE   val = get_hex_digit (1) << 4;
+// OBSOLETE   val |= get_hex_digit (0);
+// OBSOLETE   *byt = val;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Get N 32-bit words from remote, each preceded by a space,
+// OBSOLETE    and put them in registers starting at REGNO.  */
+// OBSOLETE static void
+// OBSOLETE get_hex_regs (int n, int regno)
+// OBSOLETE {
+// OBSOLETE   long val;
+// OBSOLETE   int i;
+// OBSOLETE   unsigned char b;
+// OBSOLETE 
+// OBSOLETE   for (i = 0; i < n; i++)
+// OBSOLETE     {
+// OBSOLETE       int j;
+// OBSOLETE 
+// OBSOLETE       val = 0;
+// OBSOLETE       for (j = 0; j < 4; j++)
+// OBSOLETE    {
+// OBSOLETE      get_hex_byte (&b);
+// OBSOLETE      if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
+// OBSOLETE        val = (val << 8) + b;
+// OBSOLETE      else
+// OBSOLETE        val = val + (b << (j * 8));
+// OBSOLETE    }
+// OBSOLETE       supply_register (regno++, (char *) &val);
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* This is called not only when we first attach, but also when the
+// OBSOLETE    user types "run" after having attached.  */
+// OBSOLETE static void
+// OBSOLETE rombug_create_inferior (char *execfile, char *args, char **env)
+// OBSOLETE {
+// OBSOLETE   int entry_pt;
+// OBSOLETE 
+// OBSOLETE   if (args && *args)
+// OBSOLETE     error ("Can't pass arguments to remote ROMBUG process");
+// OBSOLETE 
+// OBSOLETE   if (execfile == 0 || exec_bfd == 0)
+// OBSOLETE     error ("No executable file specified");
+// OBSOLETE 
+// OBSOLETE   entry_pt = (int) bfd_get_start_address (exec_bfd);
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fputs ("\nIn Create_inferior()", log_file);
+// OBSOLETE 
+// OBSOLETE 
+// OBSOLETE /* The "process" (board) is already stopped awaiting our commands, and
+// OBSOLETE    the program is already downloaded.  We just set its PC and go.  */
+// OBSOLETE 
+// OBSOLETE   init_wait_for_inferior ();
+// OBSOLETE   proceed ((CORE_ADDR) entry_pt, TARGET_SIGNAL_DEFAULT, 0);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Open a connection to a remote debugger.
+// OBSOLETE    NAME is the filename used for communication.  */
+// OBSOLETE 
+// OBSOLETE static char dev_name[100];
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_open (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   if (args == NULL)
+// OBSOLETE     error ("Use `target RomBug DEVICE-NAME' to use a serial port, or \n\
+// OBSOLETE `target RomBug HOST-NAME:PORT-NUMBER' to use a network connection.");
+// OBSOLETE 
+// OBSOLETE   target_preopen (from_tty);
+// OBSOLETE 
+// OBSOLETE   if (rombug_is_open)
+// OBSOLETE     unpush_target (&rombug_ops);
+// OBSOLETE 
+// OBSOLETE   strcpy (dev_name, args);
+// OBSOLETE   monitor_desc = serial_open (dev_name);
+// OBSOLETE   if (monitor_desc == NULL)
+// OBSOLETE     perror_with_name (dev_name);
+// OBSOLETE 
+// OBSOLETE   /* if baud rate is set by 'set remotebaud' */
+// OBSOLETE   if (serial_setbaudrate (monitor_desc, sr_get_baud_rate ()))
+// OBSOLETE     {
+// OBSOLETE       serial_close (monitor_desc);
+// OBSOLETE       perror_with_name ("RomBug");
+// OBSOLETE     }
+// OBSOLETE   serial_raw (monitor_desc);
+// OBSOLETE   if (tty_xon || tty_xoff)
+// OBSOLETE     {
+// OBSOLETE       struct hardware_ttystate
+// OBSOLETE    {
+// OBSOLETE      struct termios t;
+// OBSOLETE    }
+// OBSOLETE        *tty_s;
+// OBSOLETE 
+// OBSOLETE       tty_s = (struct hardware_ttystate *) serial_get_tty_state (monitor_desc);
+// OBSOLETE       if (tty_xon)
+// OBSOLETE    tty_s->t.c_iflag |= IXON;
+// OBSOLETE       if (tty_xoff)
+// OBSOLETE    tty_s->t.c_iflag |= IXOFF;
+// OBSOLETE       serial_set_tty_state (monitor_desc, (serial_ttystate) tty_s);
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   rombug_is_open = 1;
+// OBSOLETE 
+// OBSOLETE   log_file = fopen (LOG_FILE, "w");
+// OBSOLETE   if (log_file == NULL)
+// OBSOLETE     perror_with_name (LOG_FILE);
+// OBSOLETE 
+// OBSOLETE   push_monitor (&rombug_cmds);
+// OBSOLETE   printf_monitor ("\r");   /* CR wakes up monitor */
+// OBSOLETE   expect_prompt (1);
+// OBSOLETE   push_target (&rombug_ops);
+// OBSOLETE   attach_flag = 1;
+// OBSOLETE 
+// OBSOLETE   if (from_tty)
+// OBSOLETE     printf ("Remote %s connected to %s\n", target_shortname,
+// OBSOLETE        dev_name);
+// OBSOLETE 
+// OBSOLETE   rombug_fetch_registers ();
+// OBSOLETE 
+// OBSOLETE   printf_monitor ("ov e \r");
+// OBSOLETE   expect_prompt (1);
+// OBSOLETE   bufaddr = 0;
+// OBSOLETE   buflen = 0;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /*
+// OBSOLETE  * Close out all files and local state before this target loses control.
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_close (int quitting)
+// OBSOLETE {
+// OBSOLETE   if (rombug_is_open)
+// OBSOLETE     {
+// OBSOLETE       serial_close (monitor_desc);
+// OBSOLETE       monitor_desc = NULL;
+// OBSOLETE       rombug_is_open = 0;
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   if (log_file)
+// OBSOLETE     {
+// OBSOLETE       if (ferror (log_file))
+// OBSOLETE    fprintf_unfiltered (gdb_stderr, "Error writing log file.\n");
+// OBSOLETE       if (fclose (log_file) != 0)
+// OBSOLETE    fprintf_unfiltered (gdb_stderr, "Error closing log file.\n");
+// OBSOLETE       log_file = 0;
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE int
+// OBSOLETE rombug_link (char *mod_name, CORE_ADDR *text_reloc)
+// OBSOLETE {
+// OBSOLETE   int i, j;
+// OBSOLETE   unsigned long val;
+// OBSOLETE   unsigned char b;
+// OBSOLETE 
+// OBSOLETE   printf_monitor ("l %s \r", mod_name);
+// OBSOLETE   expect_prompt (1);
+// OBSOLETE   printf_monitor (".r \r");
+// OBSOLETE   expect (REG_DELIM, 1);
+// OBSOLETE   for (i = 0; i <= 7; i++)
+// OBSOLETE     {
+// OBSOLETE       val = 0;
+// OBSOLETE       for (j = 0; j < 4; j++)
+// OBSOLETE    {
+// OBSOLETE      get_hex_byte (&b);
+// OBSOLETE      val = (val << 8) + b;
+// OBSOLETE    }
+// OBSOLETE     }
+// OBSOLETE   expect_prompt (1);
+// OBSOLETE   *text_reloc = val;
+// OBSOLETE   return 1;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Terminate the open connection to the remote debugger.
+// OBSOLETE    Use this when you want to detach and do something else
+// OBSOLETE    with your gdb.  */
+// OBSOLETE static void
+// OBSOLETE rombug_detach (int from_tty)
+// OBSOLETE {
+// OBSOLETE   if (attach_flag)
+// OBSOLETE     {
+// OBSOLETE       printf_monitor (GO_CMD);
+// OBSOLETE       attach_flag = 0;
+// OBSOLETE     }
+// OBSOLETE   pop_target ();           /* calls rombug_close to do the real work */
+// OBSOLETE   if (from_tty)
+// OBSOLETE     printf ("Ending remote %s debugging\n", target_shortname);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /*
+// OBSOLETE  * Tell the remote machine to resume.
+// OBSOLETE  */
+// OBSOLETE static void
+// OBSOLETE rombug_resume (ptid_t ptid, int step, enum target_signal sig)
+// OBSOLETE {
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fprintf (log_file, "\nIn Resume (step=%d, sig=%d)\n", step, sig);
+// OBSOLETE 
+// OBSOLETE   if (step)
+// OBSOLETE     {
+// OBSOLETE       is_trace_mode = 1;
+// OBSOLETE       printf_monitor (STEP_CMD);
+// OBSOLETE       /* wait for the echo.  **
+// OBSOLETE          expect (STEP_CMD, 1);
+// OBSOLETE        */
+// OBSOLETE     }
+// OBSOLETE   else
+// OBSOLETE     {
+// OBSOLETE       printf_monitor (GO_CMD);
+// OBSOLETE       /* swallow the echo.  **
+// OBSOLETE          expect (GO_CMD, 1);
+// OBSOLETE        */
+// OBSOLETE     }
+// OBSOLETE   bufaddr = 0;
+// OBSOLETE   buflen = 0;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /*
+// OBSOLETE  * Wait until the remote machine stops, then return,
+// OBSOLETE  * storing status in status just as `wait' would.
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE static ptid *
+// OBSOLETE rombug_wait (ptid_t ptid, struct target_waitstatus *status)
+// OBSOLETE {
+// OBSOLETE   int old_timeout = timeout;
+// OBSOLETE   struct section_offsets *offs;
+// OBSOLETE   CORE_ADDR addr, pc;
+// OBSOLETE   struct obj_section *obj_sec;
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fputs ("\nIn wait ()", log_file);
+// OBSOLETE 
+// OBSOLETE   status->kind = TARGET_WAITKIND_EXITED;
+// OBSOLETE   status->value.integer = 0;
+// OBSOLETE 
+// OBSOLETE   timeout = -1;                    /* Don't time out -- user program is running. */
+// OBSOLETE   expect ("eax:", 0);              /* output any message before register display */
+// OBSOLETE   expect_prompt (1);               /* Wait for prompt, outputting extraneous text */
+// OBSOLETE 
+// OBSOLETE   status->kind = TARGET_WAITKIND_STOPPED;
+// OBSOLETE   status->value.sig = TARGET_SIGNAL_TRAP;
+// OBSOLETE   timeout = old_timeout;
+// OBSOLETE   rombug_fetch_registers ();
+// OBSOLETE   bufaddr = 0;
+// OBSOLETE   buflen = 0;
+// OBSOLETE   pc = read_register (PC_REGNUM);
+// OBSOLETE   addr = read_register (DATABASE_REG);
+// OBSOLETE   obj_sec = find_pc_section (pc);
+// OBSOLETE   if (obj_sec != NULL)
+// OBSOLETE     {
+// OBSOLETE       if (obj_sec->objfile != symfile_objfile)
+// OBSOLETE    new_symfile_objfile (obj_sec->objfile, 1, 0);
+// OBSOLETE       offs = (struct section_offsets *) alloca (SIZEOF_SECTION_OFFSETS);
+// OBSOLETE       memcpy (offs, symfile_objfile->section_offsets, SIZEOF_SECTION_OFFSETS);
+// OBSOLETE       offs->offsets[SECT_OFF_DATA (symfile_objfile)]  = addr;
+// OBSOLETE       offs->offsets[SECT_OFF_BSS (symfile_objfile)]  = addr;
+// OBSOLETE 
+// OBSOLETE       objfile_relocate (symfile_objfile, offs);
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   return inferior_ptid;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Return the name of register number regno in the form input and output by
+// OBSOLETE    monitor.  Currently, register_names just happens to contain exactly what
+// OBSOLETE    monitor wants.  Lets take advantage of that just as long as possible! */
+// OBSOLETE 
+// OBSOLETE static char *
+// OBSOLETE get_reg_name (int regno)
+// OBSOLETE {
+// OBSOLETE   static char buf[50];
+// OBSOLETE   char *p;
+// OBSOLETE   char *b;
+// OBSOLETE 
+// OBSOLETE   b = buf;
+// OBSOLETE 
+// OBSOLETE   if (regno < 0)
+// OBSOLETE     return ("");
+// OBSOLETE /*
+// OBSOLETE    for (p = REGISTER_NAME (regno); *p; p++)
+// OBSOLETE    *b++ = toupper(*p);
+// OBSOLETE    *b = '\000';
+// OBSOLETE  */
+// OBSOLETE   p = (char *) REGISTER_NAME (regno);
+// OBSOLETE   return p;
+// OBSOLETE /*
+// OBSOLETE    return buf;
+// OBSOLETE  */
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* read the remote registers into the block regs.  */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_fetch_registers (void)
+// OBSOLETE {
+// OBSOLETE   int regno, j, i;
+// OBSOLETE   long val;
+// OBSOLETE   unsigned char b;
+// OBSOLETE 
+// OBSOLETE   printf_monitor (GET_REG);
+// OBSOLETE   expect ("eax:", 1);
+// OBSOLETE   expect ("\n", 1);
+// OBSOLETE   get_hex_regs (1, 0);
+// OBSOLETE   get_hex_regs (1, 3);
+// OBSOLETE   get_hex_regs (1, 1);
+// OBSOLETE   get_hex_regs (1, 2);
+// OBSOLETE   get_hex_regs (1, 6);
+// OBSOLETE   get_hex_regs (1, 7);
+// OBSOLETE   get_hex_regs (1, 5);
+// OBSOLETE   get_hex_regs (1, 4);
+// OBSOLETE   for (regno = 8; regno <= 15; regno++)
+// OBSOLETE     {
+// OBSOLETE       expect (REG_DELIM, 1);
+// OBSOLETE       if (regno >= 8 && regno <= 13)
+// OBSOLETE    {
+// OBSOLETE      val = 0;
+// OBSOLETE      for (j = 0; j < 2; j++)
+// OBSOLETE        {
+// OBSOLETE          get_hex_byte (&b);
+// OBSOLETE          if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
+// OBSOLETE            val = (val << 8) + b;
+// OBSOLETE          else
+// OBSOLETE            val = val + (b << (j * 8));
+// OBSOLETE        }
+// OBSOLETE 
+// OBSOLETE      if (regno == 8)
+// OBSOLETE        i = 10;
+// OBSOLETE      if (regno >= 9 && regno <= 12)
+// OBSOLETE        i = regno + 3;
+// OBSOLETE      if (regno == 13)
+// OBSOLETE        i = 11;
+// OBSOLETE      supply_register (i, (char *) &val);
+// OBSOLETE    }
+// OBSOLETE       else if (regno == 14)
+// OBSOLETE    {
+// OBSOLETE      get_hex_regs (1, PC_REGNUM);
+// OBSOLETE    }
+// OBSOLETE       else if (regno == 15)
+// OBSOLETE    {
+// OBSOLETE      get_hex_regs (1, 9);
+// OBSOLETE    }
+// OBSOLETE       else
+// OBSOLETE    {
+// OBSOLETE      val = 0;
+// OBSOLETE      supply_register (regno, (char *) &val);
+// OBSOLETE    }
+// OBSOLETE     }
+// OBSOLETE   is_trace_mode = 0;
+// OBSOLETE   expect_prompt (1);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Fetch register REGNO, or all registers if REGNO is -1.
+// OBSOLETE    Returns errno value.  */
+// OBSOLETE static void
+// OBSOLETE rombug_fetch_register (int regno)
+// OBSOLETE {
+// OBSOLETE   int val, j;
+// OBSOLETE   unsigned char b;
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     {
+// OBSOLETE       fprintf (log_file, "\nIn Fetch Register (reg=%s)\n", get_reg_name (regno));
+// OBSOLETE       fflush (log_file);
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   if (regno < 0)
+// OBSOLETE     {
+// OBSOLETE       rombug_fetch_registers ();
+// OBSOLETE     }
+// OBSOLETE   else
+// OBSOLETE     {
+// OBSOLETE       char *name = get_reg_name (regno);
+// OBSOLETE       printf_monitor (GET_REG);
+// OBSOLETE       if (regno >= 10 && regno <= 15)
+// OBSOLETE    {
+// OBSOLETE      expect ("\n", 1);
+// OBSOLETE      expect ("\n", 1);
+// OBSOLETE      expect (name, 1);
+// OBSOLETE      expect (REG_DELIM, 1);
+// OBSOLETE      val = 0;
+// OBSOLETE      for (j = 0; j < 2; j++)
+// OBSOLETE        {
+// OBSOLETE          get_hex_byte (&b);
+// OBSOLETE          if (TARGET_BYTE_ORDER == BFD_ENDIAN_BIG)
+// OBSOLETE            val = (val << 8) + b;
+// OBSOLETE          else
+// OBSOLETE            val = val + (b << (j * 8));
+// OBSOLETE        }
+// OBSOLETE      supply_register (regno, (char *) &val);
+// OBSOLETE    }
+// OBSOLETE       else if (regno == 8 || regno == 9)
+// OBSOLETE    {
+// OBSOLETE      expect ("\n", 1);
+// OBSOLETE      expect ("\n", 1);
+// OBSOLETE      expect ("\n", 1);
+// OBSOLETE      expect (name, 1);
+// OBSOLETE      expect (REG_DELIM, 1);
+// OBSOLETE      get_hex_regs (1, regno);
+// OBSOLETE    }
+// OBSOLETE       else
+// OBSOLETE    {
+// OBSOLETE      expect (name, 1);
+// OBSOLETE      expect (REG_DELIM, 1);
+// OBSOLETE      expect ("\n", 1);
+// OBSOLETE      get_hex_regs (1, 0);
+// OBSOLETE      get_hex_regs (1, 3);
+// OBSOLETE      get_hex_regs (1, 1);
+// OBSOLETE      get_hex_regs (1, 2);
+// OBSOLETE      get_hex_regs (1, 6);
+// OBSOLETE      get_hex_regs (1, 7);
+// OBSOLETE      get_hex_regs (1, 5);
+// OBSOLETE      get_hex_regs (1, 4);
+// OBSOLETE    }
+// OBSOLETE       expect_prompt (1);
+// OBSOLETE     }
+// OBSOLETE   return;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Store the remote registers from the contents of the block REGS.  */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_store_registers (void)
+// OBSOLETE {
+// OBSOLETE   int regno;
+// OBSOLETE 
+// OBSOLETE   for (regno = 0; regno <= PC_REGNUM; regno++)
+// OBSOLETE     rombug_store_register (regno);
+// OBSOLETE 
+// OBSOLETE   registers_changed ();
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Store register REGNO, or all if REGNO == 0.
+// OBSOLETE    return errno value.  */
+// OBSOLETE static void
+// OBSOLETE rombug_store_register (int regno)
+// OBSOLETE {
+// OBSOLETE   char *name;
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fprintf (log_file, "\nIn Store_register (regno=%d)\n", regno);
+// OBSOLETE 
+// OBSOLETE   if (regno == -1)
+// OBSOLETE     rombug_store_registers ();
+// OBSOLETE   else
+// OBSOLETE     {
+// OBSOLETE       if (sr_get_debug ())
+// OBSOLETE    printf ("Setting register %s to 0x%x\n", get_reg_name (regno), read_register (regno));
+// OBSOLETE 
+// OBSOLETE       name = get_reg_name (regno);
+// OBSOLETE       if (name == 0)
+// OBSOLETE    return;
+// OBSOLETE       printf_monitor (SET_REG, name, read_register (regno));
+// OBSOLETE 
+// OBSOLETE       is_trace_mode = 0;
+// OBSOLETE       expect_prompt (1);
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Get ready to modify the registers array.  On machines which store
+// OBSOLETE    individual registers, this doesn't need to do anything.  On machines
+// OBSOLETE    which store all the registers in one fell swoop, this makes sure
+// OBSOLETE    that registers contains all the registers from the program being
+// OBSOLETE    debugged.  */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_prepare_to_store (void)
+// OBSOLETE {
+// OBSOLETE   /* Do nothing, since we can store individual regs */
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_files_info (void)
+// OBSOLETE {
+// OBSOLETE   printf ("\tAttached to %s at %d baud.\n",
+// OBSOLETE      dev_name, sr_get_baud_rate ());
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Copy LEN bytes of data from debugger memory at MYADDR
+// OBSOLETE    to inferior's memory at MEMADDR.  Returns length moved.  */
+// OBSOLETE static int
+// OBSOLETE rombug_write_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
+// OBSOLETE {
+// OBSOLETE   int i;
+// OBSOLETE   char buf[10];
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fprintf (log_file, "\nIn Write_inferior_memory (memaddr=%x, len=%d)\n", memaddr, len);
+// OBSOLETE 
+// OBSOLETE   printf_monitor (MEM_SET_CMD, memaddr);
+// OBSOLETE   for (i = 0; i < len; i++)
+// OBSOLETE     {
+// OBSOLETE       expect (CMD_DELIM, 1);
+// OBSOLETE       printf_monitor ("%x \r", myaddr[i]);
+// OBSOLETE       if (sr_get_debug ())
+// OBSOLETE    printf ("\nSet 0x%x to 0x%x\n", memaddr + i, myaddr[i]);
+// OBSOLETE     }
+// OBSOLETE   expect (CMD_DELIM, 1);
+// OBSOLETE   if (CMD_END)
+// OBSOLETE     printf_monitor (CMD_END);
+// OBSOLETE   is_trace_mode = 0;
+// OBSOLETE   expect_prompt (1);
+// OBSOLETE 
+// OBSOLETE   bufaddr = 0;
+// OBSOLETE   buflen = 0;
+// OBSOLETE   return len;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Read LEN bytes from inferior memory at MEMADDR.  Put the result
+// OBSOLETE    at debugger address MYADDR.  Returns length moved.  */
+// OBSOLETE static int
+// OBSOLETE rombug_read_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len)
+// OBSOLETE {
+// OBSOLETE   int i, j;
+// OBSOLETE 
+// OBSOLETE   /* Number of bytes read so far.  */
+// OBSOLETE   int count;
+// OBSOLETE 
+// OBSOLETE   /* Starting address of this pass.  */
+// OBSOLETE   unsigned long startaddr;
+// OBSOLETE 
+// OBSOLETE   /* Number of bytes to read in this pass.  */
+// OBSOLETE   int len_this_pass;
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fprintf (log_file, "\nIn Read_inferior_memory (memaddr=%x, len=%d)\n", memaddr, len);
+// OBSOLETE 
+// OBSOLETE   /* Note that this code works correctly if startaddr is just less
+// OBSOLETE      than UINT_MAX (well, really CORE_ADDR_MAX if there was such a
+// OBSOLETE      thing).  That is, something like
+// OBSOLETE      rombug_read_bytes (CORE_ADDR_MAX - 4, foo, 4)
+// OBSOLETE      works--it never adds len To memaddr and gets 0.  */
+// OBSOLETE   /* However, something like
+// OBSOLETE      rombug_read_bytes (CORE_ADDR_MAX - 3, foo, 4)
+// OBSOLETE      doesn't need to work.  Detect it and give up if there's an attempt
+// OBSOLETE      to do that.  */
+// OBSOLETE   if (((memaddr - 1) + len) < memaddr)
+// OBSOLETE     {
+// OBSOLETE       errno = EIO;
+// OBSOLETE       return 0;
+// OBSOLETE     }
+// OBSOLETE   if (bufaddr <= memaddr && (memaddr + len) <= (bufaddr + buflen))
+// OBSOLETE     {
+// OBSOLETE       memcpy (myaddr, &readbuf[memaddr - bufaddr], len);
+// OBSOLETE       return len;
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   startaddr = memaddr;
+// OBSOLETE   count = 0;
+// OBSOLETE   while (count < len)
+// OBSOLETE     {
+// OBSOLETE       len_this_pass = 16;
+// OBSOLETE       if ((startaddr % 16) != 0)
+// OBSOLETE    len_this_pass -= startaddr % 16;
+// OBSOLETE       if (len_this_pass > (len - count))
+// OBSOLETE    len_this_pass = (len - count);
+// OBSOLETE       if (sr_get_debug ())
+// OBSOLETE    printf ("\nDisplay %d bytes at %x\n", len_this_pass, startaddr);
+// OBSOLETE 
+// OBSOLETE       printf_monitor (MEM_DIS_CMD, startaddr, 8);
+// OBSOLETE       expect ("- ", 1);
+// OBSOLETE       for (i = 0; i < 16; i++)
+// OBSOLETE    {
+// OBSOLETE      get_hex_byte (&readbuf[i]);
+// OBSOLETE    }
+// OBSOLETE       bufaddr = startaddr;
+// OBSOLETE       buflen = 16;
+// OBSOLETE       memcpy (&myaddr[count], readbuf, len_this_pass);
+// OBSOLETE       count += len_this_pass;
+// OBSOLETE       startaddr += len_this_pass;
+// OBSOLETE       expect (CMD_DELIM, 1);
+// OBSOLETE     }
+// OBSOLETE   if (CMD_END)
+// OBSOLETE     printf_monitor (CMD_END);
+// OBSOLETE   is_trace_mode = 0;
+// OBSOLETE   expect_prompt (1);
+// OBSOLETE 
+// OBSOLETE   return len;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Transfer LEN bytes between GDB address MYADDR and target address
+// OBSOLETE    MEMADDR.  If WRITE is non-zero, transfer them to the target,
+// OBSOLETE    otherwise transfer them from the target.  TARGET is unused.
+// OBSOLETE 
+// OBSOLETE    Returns the number of bytes transferred. */
+// OBSOLETE 
+// OBSOLETE static int
+// OBSOLETE rombug_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len,
+// OBSOLETE                         int write, struct mem_attrib *attrib,
+// OBSOLETE                         struct target_ops *target)
+// OBSOLETE {
+// OBSOLETE   if (write)
+// OBSOLETE     return rombug_write_inferior_memory (memaddr, myaddr, len);
+// OBSOLETE   else
+// OBSOLETE     return rombug_read_inferior_memory (memaddr, myaddr, len);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_kill (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   return;                  /* ignore attempts to kill target system */
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Clean up when a program exits.
+// OBSOLETE    The program actually lives on in the remote processor's RAM, and may be
+// OBSOLETE    run again without a download.  Don't leave it full of breakpoint
+// OBSOLETE    instructions.  */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_mourn_inferior (void)
+// OBSOLETE {
+// OBSOLETE   remove_breakpoints ();
+// OBSOLETE   generic_mourn_inferior ();       /* Do all the proper things now */
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE #define MAX_MONITOR_BREAKPOINTS 16
+// OBSOLETE 
+// OBSOLETE static CORE_ADDR breakaddr[MAX_MONITOR_BREAKPOINTS] =
+// OBSOLETE {0};
+// OBSOLETE 
+// OBSOLETE static int
+// OBSOLETE rombug_insert_breakpoint (CORE_ADDR addr, char *shadow)
+// OBSOLETE {
+// OBSOLETE   int i;
+// OBSOLETE   CORE_ADDR bp_addr = addr;
+// OBSOLETE   int bp_size = 0;
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fprintf (log_file, "\nIn Insert_breakpoint (addr=%x)\n", addr);
+// OBSOLETE   BREAKPOINT_FROM_PC (&bp_addr, &bp_size);
+// OBSOLETE 
+// OBSOLETE   for (i = 0; i <= MAX_MONITOR_BREAKPOINTS; i++)
+// OBSOLETE     if (breakaddr[i] == 0)
+// OBSOLETE       {
+// OBSOLETE    breakaddr[i] = addr;
+// OBSOLETE    if (sr_get_debug ())
+// OBSOLETE      printf ("Breakpoint at %x\n", addr);
+// OBSOLETE    rombug_read_inferior_memory (bp_addr, shadow, bp_size);
+// OBSOLETE    printf_monitor (SET_BREAK_CMD, addr);
+// OBSOLETE    is_trace_mode = 0;
+// OBSOLETE    expect_prompt (1);
+// OBSOLETE    return 0;
+// OBSOLETE       }
+// OBSOLETE 
+// OBSOLETE   fprintf_unfiltered (gdb_stderr, "Too many breakpoints (> 16) for monitor\n");
+// OBSOLETE   return 1;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /*
+// OBSOLETE  * _remove_breakpoint -- Tell the monitor to remove a breakpoint
+// OBSOLETE  */
+// OBSOLETE static int
+// OBSOLETE rombug_remove_breakpoint (CORE_ADDR addr, char *shadow)
+// OBSOLETE {
+// OBSOLETE   int i;
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fprintf (log_file, "\nIn Remove_breakpoint (addr=%x)\n", addr);
+// OBSOLETE 
+// OBSOLETE   for (i = 0; i < MAX_MONITOR_BREAKPOINTS; i++)
+// OBSOLETE     if (breakaddr[i] == addr)
+// OBSOLETE       {
+// OBSOLETE    breakaddr[i] = 0;
+// OBSOLETE    printf_monitor (CLR_BREAK_CMD, addr);
+// OBSOLETE    is_trace_mode = 0;
+// OBSOLETE    expect_prompt (1);
+// OBSOLETE    return 0;
+// OBSOLETE       }
+// OBSOLETE 
+// OBSOLETE   fprintf_unfiltered (gdb_stderr,
+// OBSOLETE                  "Can't find breakpoint associated with 0x%x\n", addr);
+// OBSOLETE   return 1;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Load a file. This is usually an srecord, which is ascii. No 
+// OBSOLETE    protocol, just sent line by line. */
+// OBSOLETE 
+// OBSOLETE #define DOWNLOAD_LINE_SIZE 100
+// OBSOLETE static void
+// OBSOLETE rombug_load (char *arg)
+// OBSOLETE {
+// OBSOLETE /* this part comment out for os9* */
+// OBSOLETE #if 0
+// OBSOLETE   FILE *download;
+// OBSOLETE   char buf[DOWNLOAD_LINE_SIZE];
+// OBSOLETE   int i, bytes_read;
+// OBSOLETE 
+// OBSOLETE   if (sr_get_debug ())
+// OBSOLETE     printf ("Loading %s to monitor\n", arg);
+// OBSOLETE 
+// OBSOLETE   download = fopen (arg, "r");
+// OBSOLETE   if (download == NULL)
+// OBSOLETE     {
+// OBSOLETE       error (sprintf (buf, "%s Does not exist", arg));
+// OBSOLETE       return;
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   printf_monitor (LOAD_CMD);
+// OBSOLETE /*  expect ("Waiting for S-records from host... ", 1); */
+// OBSOLETE 
+// OBSOLETE   while (!feof (download))
+// OBSOLETE     {
+// OBSOLETE       bytes_read = fread (buf, sizeof (char), DOWNLOAD_LINE_SIZE, download);
+// OBSOLETE       if (hashmark)
+// OBSOLETE    {
+// OBSOLETE      putchar ('.');
+// OBSOLETE      fflush (stdout);
+// OBSOLETE    }
+// OBSOLETE 
+// OBSOLETE       if (serial_write (monitor_desc, buf, bytes_read))
+// OBSOLETE    {
+// OBSOLETE      fprintf_unfiltered (gdb_stderr,
+// OBSOLETE                          "serial_write failed: (while downloading) %s\n",
+// OBSOLETE                          safe_strerror (errno));
+// OBSOLETE      break;
+// OBSOLETE    }
+// OBSOLETE       i = 0;
+// OBSOLETE       while (i++ <= 200000)
+// OBSOLETE    {
+// OBSOLETE    };                      /* Ugly HACK, probably needs flow control */
+// OBSOLETE       if (bytes_read < DOWNLOAD_LINE_SIZE)
+// OBSOLETE    {
+// OBSOLETE      if (!feof (download))
+// OBSOLETE        error ("Only read %d bytes\n", bytes_read);
+// OBSOLETE      break;
+// OBSOLETE    }
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   if (hashmark)
+// OBSOLETE     {
+// OBSOLETE       putchar ('\n');
+// OBSOLETE     }
+// OBSOLETE   if (!feof (download))
+// OBSOLETE     error ("Never got EOF while downloading");
+// OBSOLETE   fclose (download);
+// OBSOLETE #endif /* 0 */
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Put a command string, in args, out to MONITOR.  
+// OBSOLETE    Output from MONITOR is placed on the users terminal until the prompt 
+// OBSOLETE    is seen. */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE rombug_command (char *args, int fromtty)
+// OBSOLETE {
+// OBSOLETE   if (monitor_desc == NULL)
+// OBSOLETE     error ("monitor target not open.");
+// OBSOLETE 
+// OBSOLETE   if (monitor_log)
+// OBSOLETE     fprintf (log_file, "\nIn command (args=%s)\n", args);
+// OBSOLETE 
+// OBSOLETE   if (!args)
+// OBSOLETE     error ("Missing command.");
+// OBSOLETE 
+// OBSOLETE   printf_monitor ("%s\r", args);
+// OBSOLETE   expect_prompt (0);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE #if 0
+// OBSOLETE /* Connect the user directly to MONITOR.  This command acts just like the
+// OBSOLETE    'cu' or 'tip' command.  Use <CR>~. or <CR>~^D to break out.  */
+// OBSOLETE 
+// OBSOLETE static struct ttystate ttystate;
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE cleanup_tty (void)
+// OBSOLETE {
+// OBSOLETE   printf ("\r\n[Exiting connect mode]\r\n");
+// OBSOLETE   /*serial_restore(0, &ttystate); */
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE connect_command (char *args, int fromtty)
+// OBSOLETE {
+// OBSOLETE   fd_set readfds;
+// OBSOLETE   int numfds;
+// OBSOLETE   int c;
+// OBSOLETE   char cur_esc = 0;
+// OBSOLETE 
+// OBSOLETE   dont_repeat ();
+// OBSOLETE 
+// OBSOLETE   if (monitor_desc == NULL)
+// OBSOLETE     error ("monitor target not open.");
+// OBSOLETE 
+// OBSOLETE   if (args)
+// OBSOLETE     fprintf ("This command takes no args.  They have been ignored.\n");
+// OBSOLETE 
+// OBSOLETE   printf ("[Entering connect mode.  Use ~. or ~^D to escape]\n");
+// OBSOLETE 
+// OBSOLETE   serial_raw (0, &ttystate);
+// OBSOLETE 
+// OBSOLETE   make_cleanup (cleanup_tty, 0);
+// OBSOLETE 
+// OBSOLETE   FD_ZERO (&readfds);
+// OBSOLETE 
+// OBSOLETE   while (1)
+// OBSOLETE     {
+// OBSOLETE       do
+// OBSOLETE    {
+// OBSOLETE      FD_SET (0, &readfds);
+// OBSOLETE      FD_SET (deprecated_serial_fd (monitor_desc), &readfds);
+// OBSOLETE      numfds = select (sizeof (readfds) * 8, &readfds, 0, 0, 0);
+// OBSOLETE    }
+// OBSOLETE       while (numfds == 0);
+// OBSOLETE 
+// OBSOLETE       if (numfds < 0)
+// OBSOLETE    perror_with_name ("select");
+// OBSOLETE 
+// OBSOLETE       if (FD_ISSET (0, &readfds))
+// OBSOLETE    {                       /* tty input, send to monitor */
+// OBSOLETE      c = getchar ();
+// OBSOLETE      if (c < 0)
+// OBSOLETE        perror_with_name ("connect");
+// OBSOLETE 
+// OBSOLETE      printf_monitor ("%c", c);
+// OBSOLETE      switch (cur_esc)
+// OBSOLETE        {
+// OBSOLETE        case 0:
+// OBSOLETE          if (c == '\r')
+// OBSOLETE            cur_esc = c;
+// OBSOLETE          break;
+// OBSOLETE        case '\r':
+// OBSOLETE          if (c == '~')
+// OBSOLETE            cur_esc = c;
+// OBSOLETE          else
+// OBSOLETE            cur_esc = 0;
+// OBSOLETE          break;
+// OBSOLETE        case '~':
+// OBSOLETE          if (c == '.' || c == '\004')
+// OBSOLETE            return;
+// OBSOLETE          else
+// OBSOLETE            cur_esc = 0;
+// OBSOLETE        }
+// OBSOLETE    }
+// OBSOLETE 
+// OBSOLETE       if (FD_ISSET (deprecated_serial_fd (monitor_desc), &readfds))
+// OBSOLETE    {
+// OBSOLETE      while (1)
+// OBSOLETE        {
+// OBSOLETE          c = readchar (0);
+// OBSOLETE          if (c < 0)
+// OBSOLETE            break;
+// OBSOLETE          putchar (c);
+// OBSOLETE        }
+// OBSOLETE      fflush (stdout);
+// OBSOLETE    }
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE #endif
+// OBSOLETE 
+// OBSOLETE /*
+// OBSOLETE  * Define the monitor command strings. Since these are passed directly
+// OBSOLETE  * through to a printf style function, we need can include formatting
+// OBSOLETE  * strings. We also need a CR or LF on the end.
+// OBSOLETE  */
+// OBSOLETE #warning FIXME: monitor interface pattern strings, stale struct decl
+// OBSOLETE struct monitor_ops rombug_cmds =
+// OBSOLETE {
+// OBSOLETE   "g \r",                  /* execute or usually GO command */
+// OBSOLETE   "g \r",                  /* continue command */
+// OBSOLETE   "t \r",                  /* single step */
+// OBSOLETE   "b %x\r",                        /* set a breakpoint */
+// OBSOLETE   "k %x\r",                        /* clear a breakpoint */
+// OBSOLETE   "c %x\r",                        /* set memory to a value */
+// OBSOLETE   "d %x %d\r",                     /* display memory */
+// OBSOLETE   "$%08X",                 /* prompt memory commands use */
+// OBSOLETE   ".%s %x\r",                      /* set a register */
+// OBSOLETE   ":",                             /* delimiter between registers */
+// OBSOLETE   ". \r",                  /* read a register */
+// OBSOLETE   "mf \r",                 /* download command */
+// OBSOLETE   "RomBug: ",                      /* monitor command prompt */
+// OBSOLETE   ": ",                            /* end-of-command delimitor */
+// OBSOLETE   ".\r"                            /* optional command terminator */
+// OBSOLETE };
+// OBSOLETE 
+// OBSOLETE struct target_ops rombug_ops;
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE init_rombug_ops (void)
+// OBSOLETE {
+// OBSOLETE   rombug_ops.to_shortname = "rombug";
+// OBSOLETE   rombug_ops.to_longname = "Microware's ROMBUG debug monitor";
+// OBSOLETE   rombug_ops.to_doc = "Use a remote computer running the ROMBUG debug monitor.\n\
+// OBSOLETE Specify the serial device it is connected to (e.g. /dev/ttya).",
+// OBSOLETE     rombug_ops.to_open = rombug_open;
+// OBSOLETE   rombug_ops.to_close = rombug_close;
+// OBSOLETE   rombug_ops.to_attach = 0;
+// OBSOLETE   rombug_ops.to_post_attach = NULL;
+// OBSOLETE   rombug_ops.to_require_attach = NULL;
+// OBSOLETE   rombug_ops.to_detach = rombug_detach;
+// OBSOLETE   rombug_ops.to_require_detach = NULL;
+// OBSOLETE   rombug_ops.to_resume = rombug_resume;
+// OBSOLETE   rombug_ops.to_wait = rombug_wait;
+// OBSOLETE   rombug_ops.to_post_wait = NULL;
+// OBSOLETE   rombug_ops.to_fetch_registers = rombug_fetch_register;
+// OBSOLETE   rombug_ops.to_store_registers = rombug_store_register;
+// OBSOLETE   rombug_ops.to_prepare_to_store = rombug_prepare_to_store;
+// OBSOLETE   rombug_ops.to_xfer_memory = rombug_xfer_inferior_memory;
+// OBSOLETE   rombug_ops.to_files_info = rombug_files_info;
+// OBSOLETE   rombug_ops.to_insert_breakpoint = rombug_insert_breakpoint;
+// OBSOLETE   rombug_ops.to_remove_breakpoint = rombug_remove_breakpoint;      /* Breakpoints */
+// OBSOLETE   rombug_ops.to_terminal_init = 0;
+// OBSOLETE   rombug_ops.to_terminal_inferior = 0;
+// OBSOLETE   rombug_ops.to_terminal_ours_for_output = 0;
+// OBSOLETE   rombug_ops.to_terminal_ours = 0;
+// OBSOLETE   rombug_ops.to_terminal_info = 0; /* Terminal handling */
+// OBSOLETE   rombug_ops.to_kill = rombug_kill;
+// OBSOLETE   rombug_ops.to_load = rombug_load;        /* load */
+// OBSOLETE   rombug_ops.to_lookup_symbol = rombug_link;       /* lookup_symbol */
+// OBSOLETE   rombug_ops.to_create_inferior = rombug_create_inferior;
+// OBSOLETE   rombug_ops.to_post_startup_inferior = NULL;
+// OBSOLETE   rombug_ops.to_acknowledge_created_inferior = NULL;
+// OBSOLETE   rombug_ops.to_clone_and_follow_inferior = NULL;
+// OBSOLETE   rombug_ops.to_post_follow_inferior_by_clone = NULL;
+// OBSOLETE   rombug_ops.to_insert_fork_catchpoint = NULL;
+// OBSOLETE   rombug_ops.to_remove_fork_catchpoint = NULL;
+// OBSOLETE   rombug_ops.to_insert_vfork_catchpoint = NULL;
+// OBSOLETE   rombug_ops.to_remove_vfork_catchpoint = NULL;
+// OBSOLETE   rombug_ops.to_has_forked = NULL;
+// OBSOLETE   rombug_ops.to_has_vforked = NULL;
+// OBSOLETE   rombug_ops.to_can_follow_vfork_prior_to_exec = NULL;
+// OBSOLETE   rombug_ops.to_post_follow_vfork = NULL;
+// OBSOLETE   rombug_ops.to_insert_exec_catchpoint = NULL;
+// OBSOLETE   rombug_ops.to_remove_exec_catchpoint = NULL;
+// OBSOLETE   rombug_ops.to_has_execd = NULL;
+// OBSOLETE   rombug_ops.to_reported_exec_events_per_exec_call = NULL;
+// OBSOLETE   rombug_ops.to_has_exited = NULL;
+// OBSOLETE   rombug_ops.to_mourn_inferior = rombug_mourn_inferior;
+// OBSOLETE   rombug_ops.to_can_run = 0;       /* can_run */
+// OBSOLETE   rombug_ops.to_notice_signals = 0;        /* notice_signals */
+// OBSOLETE   rombug_ops.to_thread_alive = 0;
+// OBSOLETE   rombug_ops.to_stop = 0;  /* to_stop */
+// OBSOLETE   rombug_ops.to_pid_to_exec_file = NULL;
+// OBSOLETE   rombug_ops.to_stratum = process_stratum;
+// OBSOLETE   rombug_ops.DONT_USE = 0; /* next */
+// OBSOLETE   rombug_ops.to_has_all_memory = 1;
+// OBSOLETE   rombug_ops.to_has_memory = 1;
+// OBSOLETE   rombug_ops.to_has_stack = 1;
+// OBSOLETE   rombug_ops.to_has_registers = 1;
+// OBSOLETE   rombug_ops.to_has_execution = 1; /* has execution */
+// OBSOLETE   rombug_ops.to_sections = 0;
+// OBSOLETE   rombug_ops.to_sections_end = 0;  /* Section pointers */
+// OBSOLETE   rombug_ops.to_magic = OPS_MAGIC; /* Always the last thing */
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE void
+// OBSOLETE _initialize_remote_os9k (void)
+// OBSOLETE {
+// OBSOLETE   init_rombug_ops ();
+// OBSOLETE   add_target (&rombug_ops);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set (
+// OBSOLETE         add_set_cmd ("hash", no_class, var_boolean, (char *) &hashmark,
+// OBSOLETE                      "Set display of activity while downloading a file.\nWhen enabled, a period \'.\' is displayed.",
+// OBSOLETE                      &setlist),
+// OBSOLETE                  &showlist);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set (
+// OBSOLETE                  add_set_cmd ("timeout", no_class, var_zinteger,
+// OBSOLETE                               (char *) &timeout,
+// OBSOLETE                   "Set timeout in seconds for remote MIPS serial I/O.",
+// OBSOLETE                               &setlist),
+// OBSOLETE                  &showlist);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set (
+// OBSOLETE                  add_set_cmd ("remotelog", no_class, var_zinteger,
+// OBSOLETE                               (char *) &monitor_log,
+// OBSOLETE                          "Set monitor activity log on(=1) or off(=0).",
+// OBSOLETE                               &setlist),
+// OBSOLETE                  &showlist);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set (
+// OBSOLETE                  add_set_cmd ("remotexon", no_class, var_zinteger,
+// OBSOLETE                               (char *) &tty_xon,
+// OBSOLETE                               "Set remote tty line XON control",
+// OBSOLETE                               &setlist),
+// OBSOLETE                  &showlist);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set (
+// OBSOLETE                  add_set_cmd ("remotexoff", no_class, var_zinteger,
+// OBSOLETE                               (char *) &tty_xoff,
+// OBSOLETE                               "Set remote tty line XOFF control",
+// OBSOLETE                               &setlist),
+// OBSOLETE                  &showlist);
+// OBSOLETE 
+// OBSOLETE   add_com ("rombug <command>", class_obscure, rombug_command,
+// OBSOLETE       "Send a command to the debug monitor.");
+// OBSOLETE #if 0
+// OBSOLETE   add_com ("connect", class_obscure, connect_command,
+// OBSOLETE       "Connect the terminal directly up to a serial based command monitor.\nUse <CR>~. or <CR>~^D to break out.");
+// OBSOLETE #endif
+// OBSOLETE }
This page took 0.046616 seconds and 4 git commands to generate.