This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch/rfc] Eliminate the es1800 target


Hello,

This code/target pre-dates the old Cygnus CVS repository (~89). Given that I really don't believe that one of these beasties still exists, I'm thinking of just removing it. (I tried and it doesn't compile).

Anyone object?
Andrew
2003-01-29  Andrew Cagney  <ac131313@redhat.com>

	* NEWS: Note that the m32r-*-elf* is obsolete. 
	* monitor.c (monitor_expect): Obsolete reference to m32r.
	* configure.tgt: Mark m32r-*-elf* as obsolete.
	* MAINTAINERS: Mark m32k as obsolete.
	* m32r-rom.c: Obsolete file.
	* config/m32r/m32r.mt: Obsolete file.
	* config/m32r/tm-m32r.h: Obsolete file.
	* m32r-stub.c: Obsolete file.
	* m32r-tdep.c: Obsolete file.

Index: MAINTAINERS
===================================================================
RCS file: /cvs/src/src/gdb/MAINTAINERS,v
retrieving revision 1.219
diff -u -r1.219 MAINTAINERS
--- MAINTAINERS	20 Jan 2003 00:46:42 -0000	1.219
+++ MAINTAINERS	29 Jan 2003 19:10:10 -0000
@@ -96,9 +96,7 @@
 			(--target=ia64-elf broken)
 			Kevin Buettner		kevinb@redhat.com
 
-	m32r		(--target=m32r-elf broken)
-			Michael Snyder		msnyder@redhat.com
-			OBSOLETE candidate, not multi-arch
+	m32r		(--target=m32r-elf OBSOLETE)
 
 	m68hc11		--target=m68hc11-elf ,-Werror ,
 			Stephane Carrez		stcarrez@nerim.fr
Index: NEWS
===================================================================
RCS file: /cvs/src/src/gdb/NEWS,v
retrieving revision 1.98
diff -u -r1.98 NEWS
--- NEWS	22 Jan 2003 23:50:35 -0000	1.98
+++ NEWS	29 Jan 2003 19:10:10 -0000
@@ -32,6 +32,8 @@
 configurations, the next release of GDB will have their sources
 permanently REMOVED.
 
+Mitsubishi M32R/D w/simulator			m32r-*-elf*
+
 * REMOVED configurations and files
 
 V850EA ISA				
Index: configure.tgt
===================================================================
RCS file: /cvs/src/src/gdb/configure.tgt,v
retrieving revision 1.90
diff -u -r1.90 configure.tgt
--- configure.tgt	4 Jan 2003 23:47:12 -0000	1.90
+++ configure.tgt	29 Jan 2003 19:10:10 -0000
@@ -116,7 +116,7 @@
 			;;
 ia64*-*-*)		gdb_target=ia64 ;;
 
-m32r-*-elf*)		gdb_target=m32r ;;
+# OBSOLETE m32r-*-elf*)		gdb_target=m32r ;;
 
 m68hc11*-*-*|m6811*-*-*)	gdb_target=m68hc11 ;;
 
Index: m32r-rom.c
===================================================================
RCS file: /cvs/src/src/gdb/m32r-rom.c,v
retrieving revision 1.9
diff -u -r1.9 m32r-rom.c
--- m32r-rom.c	10 Jun 2001 16:25:51 -0000	1.9
+++ m32r-rom.c	29 Jan 2003 19:10:10 -0000
@@ -1,626 +1,626 @@
-/* Remote debugging interface to m32r and mon2000 ROM monitors for GDB, 
-   the GNU debugger.
-   Copyright 1996, 1997, 1998, 1999, 2000, 2001
-   Free Software Foundation, Inc.
-
-   Adapted by Michael Snyder of Cygnus Support.
-
-   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 module defines communication with the Mitsubishi m32r monitor */
-
-#include "defs.h"
-#include "gdbcore.h"
-#include "target.h"
-#include "monitor.h"
-#include "serial.h"
-#include "symtab.h"
-#include "command.h"
-#include "gdbcmd.h"
-#include "symfile.h"		/* for generic load */
-#include <time.h>		/* for time_t */
-#include "gdb_string.h"
-#include "objfiles.h"		/* for ALL_OBJFILES etc. */
-#include "inferior.h"		/* for write_pc() */
-#include <ctype.h>
-#include "regcache.h"
-
-extern void report_transfer_performance (unsigned long, time_t, time_t);
-
-/*
- * All this stuff just to get my host computer's IP address!
- */
-#include <sys/types.h>
-#include <netdb.h>		/* for hostent */
-#include <netinet/in.h>		/* for struct in_addr */
-#if 1
-#include <arpa/inet.h>		/* for inet_ntoa */
-#endif
-
-static char *board_addr;	/* user-settable IP address for M32R-EVA */
-static char *server_addr;	/* user-settable IP address for gdb host */
-static char *download_path;	/* user-settable path for SREC files     */
-
-
-/* 
- * Function: m32r_load_1 (helper function)
- */
-
-static void
-m32r_load_section (bfd *abfd, asection *s, void *obj)
-{
-  unsigned int *data_count = obj;
-  if (s->flags & SEC_LOAD)
-    {
-      bfd_size_type section_size = bfd_section_size (abfd, s);
-      bfd_vma section_base = bfd_section_lma (abfd, s);
-      unsigned int buffer, i;
-
-      *data_count += section_size;
-
-      printf_filtered ("Loading section %s, size 0x%lx lma ",
-		       bfd_section_name (abfd, s), section_size);
-      print_address_numeric (section_base, 1, gdb_stdout);
-      printf_filtered ("\n");
-      gdb_flush (gdb_stdout);
-      monitor_printf ("%s mw\r", paddr_nz (section_base));
-      for (i = 0; i < section_size; i += 4)
-	{
-	  QUIT;
-	  monitor_expect (" -> ", NULL, 0);
-	  bfd_get_section_contents (abfd, s, (char *) &buffer, i, 4);
-	  monitor_printf ("%x\n", buffer);
-	}
-      monitor_expect (" -> ", NULL, 0);
-      monitor_printf ("q\n");
-      monitor_expect_prompt (NULL, 0);
-    }
-}
-
-static int
-m32r_load_1 (void *dummy)
-{
-  int data_count = 0;
-
-  bfd_map_over_sections ((bfd *) dummy, m32r_load_section, &data_count);
-  return data_count;
-}
-
-/* 
- * Function: m32r_load (an alternate way to load) 
- */
-
-static void
-m32r_load (char *filename, int from_tty)
-{
-  bfd *abfd;
-  asection *s;
-  unsigned int i, data_count = 0;
-  time_t start_time, end_time;	/* for timing of download */
-
-  if (filename == NULL || filename[0] == 0)
-    filename = get_exec_file (1);
-
-  abfd = bfd_openr (filename, 0);
-  if (!abfd)
-    error ("Unable to open file %s\n", filename);
-  if (bfd_check_format (abfd, bfd_object) == 0)
-    error ("File is not an object file\n");
-  start_time = time (NULL);
-#if 0
-  for (s = abfd->sections; s; s = s->next)
-    if (s->flags & SEC_LOAD)
-      {
-	bfd_size_type section_size = bfd_section_size (abfd, s);
-	bfd_vma section_base = bfd_section_vma (abfd, s);
-	unsigned int buffer;
-
-	data_count += section_size;
-
-	printf_filtered ("Loading section %s, size 0x%lx vma ",
-			 bfd_section_name (abfd, s), section_size);
-	print_address_numeric (section_base, 1, gdb_stdout);
-	printf_filtered ("\n");
-	gdb_flush (gdb_stdout);
-	monitor_printf ("%x mw\r", section_base);
-	for (i = 0; i < section_size; i += 4)
-	  {
-	    monitor_expect (" -> ", NULL, 0);
-	    bfd_get_section_contents (abfd, s, (char *) &buffer, i, 4);
-	    monitor_printf ("%x\n", buffer);
-	  }
-	monitor_expect (" -> ", NULL, 0);
-	monitor_printf ("q\n");
-	monitor_expect_prompt (NULL, 0);
-      }
-#else
-  if (!(catch_errors (m32r_load_1, abfd, "Load aborted!\n", RETURN_MASK_ALL)))
-    {
-      monitor_printf ("q\n");
-      return;
-    }
-#endif
-  end_time = time (NULL);
-  printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
-  report_transfer_performance (data_count, start_time, end_time);
-
-  /* Finally, make the PC point at the start address */
-  if (exec_bfd)
-    write_pc (bfd_get_start_address (exec_bfd));
-
-  inferior_ptid = null_ptid;	/* No process now */
-
-  /* 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 new code (and just changed the PC).
-     Another way to do this might be to call normal_stop, except that
-     the stack may not be valid, and things would get horribly
-     confused... */
-
-  clear_symtab_users ();
-}
-
-static void
-m32r_load_gen (char *filename, int from_tty)
-{
-  generic_load (filename, from_tty);
-}
-
-static void m32r_open (char *args, int from_tty);
-static void mon2000_open (char *args, int from_tty);
-
-/* This array of registers needs to match the indexes used by GDB. The
-   whole reason this exists is because the various ROM monitors use
-   different names than GDB does, and don't support all the registers
-   either. So, typing "info reg sp" becomes an "A7". */
-
-static char *m32r_regnames[] =
-{"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
- "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
- "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
-};
-
-static void
-m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
-{
-  int regno;
-  int num_regs = sizeof (m32r_regnames) / sizeof (m32r_regnames[0]);
-
-  for (regno = 0; regno < num_regs; regno++)
-    if (strncmp (regname, m32r_regnames[regno], regnamelen) == 0)
-      break;
-
-  if (regno >= num_regs)
-    return;			/* no match */
-
-  if (regno == ACCL_REGNUM)
-    {				/* special handling for 64-bit acc reg */
-      monitor_supply_register (ACCH_REGNUM, val);
-      val = strchr (val, ':');	/* skip past ':' to get 2nd word */
-      if (val != NULL)
-	monitor_supply_register (ACCL_REGNUM, val + 1);
-    }
-  else
-    {
-      monitor_supply_register (regno, val);
-      if (regno == PSW_REGNUM)
-	{
-	  unsigned long psw = strtoul (val, NULL, 16);
-	  char *zero = "00000000", *one = "00000001";
-
-#ifdef SM_REGNUM
-	  /* Stack mode bit */
-	  monitor_supply_register (SM_REGNUM, (psw & 0x80) ? one : zero);
-#endif
-#ifdef BSM_REGNUM
-	  /* Backup stack mode bit */
-	  monitor_supply_register (BSM_REGNUM, (psw & 0x8000) ? one : zero);
-#endif
-#ifdef IE_REGNUM
-	  /* Interrupt enable bit */
-	  monitor_supply_register (IE_REGNUM, (psw & 0x40) ? one : zero);
-#endif
-#ifdef BIE_REGNUM
-	  /* Backup interrupt enable bit */
-	  monitor_supply_register (BIE_REGNUM, (psw & 0x4000) ? one : zero);
-#endif
-#ifdef COND_REGNUM
-	  /* Condition bit (carry etc.) */
-	  monitor_supply_register (COND_REGNUM, (psw & 0x1) ? one : zero);
-#endif
-#ifdef CBR_REGNUM
-	  monitor_supply_register (CBR_REGNUM, (psw & 0x1) ? one : zero);
-#endif
-#ifdef BPC_REGNUM
-	  monitor_supply_register (BPC_REGNUM, zero);	/* KLUDGE:   (???????) */
-#endif
-#ifdef BCARRY_REGNUM
-	  monitor_supply_register (BCARRY_REGNUM, zero);	/* KLUDGE: (??????) */
-#endif
-	}
-
-      if (regno == SPI_REGNUM || regno == SPU_REGNUM)
-	{			/* special handling for stack pointer (spu or spi) */
-	  unsigned long stackmode = read_register (PSW_REGNUM) & 0x80;
-
-	  if (regno == SPI_REGNUM && !stackmode)	/* SP == SPI */
-	    monitor_supply_register (SP_REGNUM, val);
-	  else if (regno == SPU_REGNUM && stackmode)	/* SP == SPU */
-	    monitor_supply_register (SP_REGNUM, val);
-	}
-    }
-}
-
-/* m32r RevC board monitor */
-
-static struct target_ops m32r_ops;
-
-static char *m32r_inits[] =
-{"\r", NULL};
-
-static struct monitor_ops m32r_cmds;
-
-static void
-init_m32r_cmds (void)
-{
-  m32r_cmds.flags = MO_CLR_BREAK_USES_ADDR | MO_REGISTER_VALUE_FIRST;
-  m32r_cmds.init = m32r_inits;	/* Init strings */
-  m32r_cmds.cont = "go\r";	/* continue command */
-  m32r_cmds.step = "step\r";	/* single step */
-  m32r_cmds.stop = NULL;	/* interrupt command */
-  m32r_cmds.set_break = "%x +bp\r";	/* set a breakpoint */
-  m32r_cmds.clr_break = "%x -bp\r";	/* clear a breakpoint */
-  m32r_cmds.clr_all_break = "bpoff\r";	/* clear all breakpoints */
-  m32r_cmds.fill = "%x %x %x fill\r";	/* fill (start length val) */
-  m32r_cmds.setmem.cmdb = "%x 1 %x fill\r";	/* setmem.cmdb (addr, value) */
-  m32r_cmds.setmem.cmdw = "%x 1 %x fillh\r";	/* setmem.cmdw (addr, value) */
-  m32r_cmds.setmem.cmdl = "%x 1 %x fillw\r";	/* setmem.cmdl (addr, value) */
-  m32r_cmds.setmem.cmdll = NULL;	/* setmem.cmdll (addr, value) */
-  m32r_cmds.setmem.resp_delim = NULL;	/* setmem.resp_delim */
-  m32r_cmds.setmem.term = NULL;	/* setmem.term */
-  m32r_cmds.setmem.term_cmd = NULL;	/* setmem.term_cmd */
-  m32r_cmds.getmem.cmdb = "%x %x dump\r";	/* getmem.cmdb (addr, len) */
-  m32r_cmds.getmem.cmdw = NULL;	/* getmem.cmdw (addr, len) */
-  m32r_cmds.getmem.cmdl = NULL;	/* getmem.cmdl (addr, len) */
-  m32r_cmds.getmem.cmdll = NULL;	/* getmem.cmdll (addr, len) */
-  m32r_cmds.getmem.resp_delim = ": ";	/* getmem.resp_delim */
-  m32r_cmds.getmem.term = NULL;	/* getmem.term */
-  m32r_cmds.getmem.term_cmd = NULL;	/* getmem.term_cmd */
-  m32r_cmds.setreg.cmd = "%x to %%%s\r";	/* setreg.cmd (name, value) */
-  m32r_cmds.setreg.resp_delim = NULL;	/* setreg.resp_delim */
-  m32r_cmds.setreg.term = NULL;	/* setreg.term */
-  m32r_cmds.setreg.term_cmd = NULL;	/* setreg.term_cmd */
-  m32r_cmds.getreg.cmd = NULL;	/* getreg.cmd (name) */
-  m32r_cmds.getreg.resp_delim = NULL;	/* getreg.resp_delim */
-  m32r_cmds.getreg.term = NULL;	/* getreg.term */
-  m32r_cmds.getreg.term_cmd = NULL;	/* getreg.term_cmd */
-  m32r_cmds.dump_registers = ".reg\r";	/* dump_registers */
-  m32r_cmds.register_pattern = "\\(\\w+\\) += \\([0-9a-fA-F]+\\b\\)";	/* register_pattern */
-  m32r_cmds.supply_register = m32r_supply_register;	/* supply_register */
-  m32r_cmds.load_routine = NULL;	/* load_routine (defaults to SRECs) */
-  m32r_cmds.load = NULL;	/* download command */
-  m32r_cmds.loadresp = NULL;	/* load response */
-  m32r_cmds.prompt = "ok ";	/* monitor command prompt */
-  m32r_cmds.line_term = "\r";	/* end-of-line terminator */
-  m32r_cmds.cmd_end = NULL;	/* optional command terminator */
-  m32r_cmds.target = &m32r_ops;	/* target operations */
-  m32r_cmds.stopbits = SERIAL_1_STOPBITS;	/* number of stop bits */
-  m32r_cmds.regnames = m32r_regnames;	/* registers names */
-  m32r_cmds.magic = MONITOR_OPS_MAGIC;	/* magic */
-}				/* init_m32r_cmds */
-
-static void
-m32r_open (char *args, int from_tty)
-{
-  monitor_open (args, &m32r_cmds, from_tty);
-}
-
-/* Mon2000 monitor (MSA2000 board) */
-
-static struct target_ops mon2000_ops;
-static struct monitor_ops mon2000_cmds;
-
-static void
-init_mon2000_cmds (void)
-{
-  mon2000_cmds.flags = MO_CLR_BREAK_USES_ADDR | MO_REGISTER_VALUE_FIRST;
-  mon2000_cmds.init = m32r_inits;	/* Init strings */
-  mon2000_cmds.cont = "go\r";	/* continue command */
-  mon2000_cmds.step = "step\r";	/* single step */
-  mon2000_cmds.stop = NULL;	/* interrupt command */
-  mon2000_cmds.set_break = "%x +bp\r";	/* set a breakpoint */
-  mon2000_cmds.clr_break = "%x -bp\r";	/* clear a breakpoint */
-  mon2000_cmds.clr_all_break = "bpoff\r";	/* clear all breakpoints */
-  mon2000_cmds.fill = "%x %x %x fill\r";	/* fill (start length val) */
-  mon2000_cmds.setmem.cmdb = "%x 1 %x fill\r";	/* setmem.cmdb (addr, value) */
-  mon2000_cmds.setmem.cmdw = "%x 1 %x fillh\r";		/* setmem.cmdw (addr, value) */
-  mon2000_cmds.setmem.cmdl = "%x 1 %x fillw\r";		/* setmem.cmdl (addr, value) */
-  mon2000_cmds.setmem.cmdll = NULL;	/* setmem.cmdll (addr, value) */
-  mon2000_cmds.setmem.resp_delim = NULL;	/* setmem.resp_delim */
-  mon2000_cmds.setmem.term = NULL;	/* setmem.term */
-  mon2000_cmds.setmem.term_cmd = NULL;	/* setmem.term_cmd */
-  mon2000_cmds.getmem.cmdb = "%x %x dump\r";	/* getmem.cmdb (addr, len) */
-  mon2000_cmds.getmem.cmdw = NULL;	/* getmem.cmdw (addr, len) */
-  mon2000_cmds.getmem.cmdl = NULL;	/* getmem.cmdl (addr, len) */
-  mon2000_cmds.getmem.cmdll = NULL;	/* getmem.cmdll (addr, len) */
-  mon2000_cmds.getmem.resp_delim = ": ";	/* getmem.resp_delim */
-  mon2000_cmds.getmem.term = NULL;	/* getmem.term */
-  mon2000_cmds.getmem.term_cmd = NULL;	/* getmem.term_cmd */
-  mon2000_cmds.setreg.cmd = "%x to %%%s\r";	/* setreg.cmd (name, value) */
-  mon2000_cmds.setreg.resp_delim = NULL;	/* setreg.resp_delim */
-  mon2000_cmds.setreg.term = NULL;	/* setreg.term */
-  mon2000_cmds.setreg.term_cmd = NULL;	/* setreg.term_cmd */
-  mon2000_cmds.getreg.cmd = NULL;	/* getreg.cmd (name) */
-  mon2000_cmds.getreg.resp_delim = NULL;	/* getreg.resp_delim */
-  mon2000_cmds.getreg.term = NULL;	/* getreg.term */
-  mon2000_cmds.getreg.term_cmd = NULL;	/* getreg.term_cmd */
-  mon2000_cmds.dump_registers = ".reg\r";	/* dump_registers */
-  mon2000_cmds.register_pattern = "\\(\\w+\\) += \\([0-9a-fA-F]+\\b\\)";	/* register_pattern */
-  mon2000_cmds.supply_register = m32r_supply_register;	/* supply_register */
-  mon2000_cmds.load_routine = NULL;	/* load_routine (defaults to SRECs) */
-  mon2000_cmds.load = NULL;	/* download command */
-  mon2000_cmds.loadresp = NULL;	/* load response */
-  mon2000_cmds.prompt = "Mon2000>";	/* monitor command prompt */
-  mon2000_cmds.line_term = "\r";	/* end-of-line terminator */
-  mon2000_cmds.cmd_end = NULL;	/* optional command terminator */
-  mon2000_cmds.target = &mon2000_ops;	/* target operations */
-  mon2000_cmds.stopbits = SERIAL_1_STOPBITS;	/* number of stop bits */
-  mon2000_cmds.regnames = m32r_regnames;	/* registers names */
-  mon2000_cmds.magic = MONITOR_OPS_MAGIC;	/* magic */
-}				/* init_mon2000_cmds */
-
-static void
-mon2000_open (char *args, int from_tty)
-{
-  monitor_open (args, &mon2000_cmds, from_tty);
-}
-
-/* Function: set_board_address
-   Tell the BootOne monitor what it's ethernet IP address is. */
-
-static void
-m32r_set_board_address (char *args, int from_tty)
-{
-  int resp_len;
-  char buf[1024];
-
-  if (args && *args)
-    {
-      monitor_printf ("ulip %s\n", args);
-      resp_len = monitor_expect_prompt (buf, sizeof (buf));
-      /* now parse the result for success */
-    }
-  else
-    error ("Requires argument (IP address for M32R-EVA board)");
-}
-
-/* Function: set_server_address
-   Tell the BootOne monitor what gdb's ethernet IP address is. */
-
-static void
-m32r_set_server_address (char *args, int from_tty)
-{
-  int resp_len;
-  char buf[1024];
-
-  if (args && *args)
-    {
-      monitor_printf ("uhip %s\n", args);
-      resp_len = monitor_expect_prompt (buf, sizeof (buf));
-      /* now parse the result for success */
-    }
-  else
-    error ("Requires argument (IP address of GDB's host computer)");
-}
-
-/* Function: set_download_path
-   Tell the BootOne monitor the default path for downloadable SREC files. */
-
-static void
-m32r_set_download_path (char *args, int from_tty)
-{
-  int resp_len;
-  char buf[1024];
-
-  if (args && *args)
-    {
-      monitor_printf ("up %s\n", args);
-      resp_len = monitor_expect_prompt (buf, sizeof (buf));
-      /* now parse the result for success */
-    }
-  else
-    error ("Requires argument (default path for downloadable SREC files)");
-}
-
-static void
-m32r_upload_command (char *args, int from_tty)
-{
-  bfd *abfd;
-  asection *s;
-  time_t start_time, end_time;	/* for timing of download */
-  int resp_len, data_count = 0;
-  char buf[1024];
-  struct hostent *hostent;
-  struct in_addr inet_addr;
-
-  /* first check to see if there's an ethernet port! */
-  monitor_printf ("ust\r");
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));
-  if (!strchr (buf, ':'))
-    error ("No ethernet connection!");
-
-  if (board_addr == 0)
-    {
-      /* scan second colon in the output from the "ust" command */
-      char *myIPaddress = strchr (strchr (buf, ':') + 1, ':') + 1;
-
-      while (isspace (*myIPaddress))
-	myIPaddress++;
-
-      if (!strncmp (myIPaddress, "0.0.", 4))	/* empty */
-	error ("Please use 'set board-address' to set the M32R-EVA board's IP address.");
-      if (strchr (myIPaddress, '('))
-	*(strchr (myIPaddress, '(')) = '\0';	/* delete trailing junk */
-      board_addr = xstrdup (myIPaddress);
-    }
-  if (server_addr == 0)
-    {
-      buf[0] = 0;
-      gethostname (buf, sizeof (buf));
-      if (buf[0] != 0)
-	hostent = gethostbyname (buf);
-      if (hostent != 0)
-	{
-#if 1
-	  memcpy (&inet_addr.s_addr, hostent->h_addr,
-		  sizeof (inet_addr.s_addr));
-	  server_addr = (char *) inet_ntoa (inet_addr);
-#else
-	  server_addr = (char *) inet_ntoa (hostent->h_addr);
-#endif
-	}
-      if (server_addr == 0)	/* failed? */
-	error ("Need to know gdb host computer's IP address (use 'set server-address')");
-    }
-
-  if (args == 0 || args[0] == 0)	/* no args: upload the current file */
-    args = get_exec_file (1);
-
-  if (args[0] != '/' && download_path == 0)
-    {
-      if (current_directory)
-	download_path = xstrdup (current_directory);
-      else
-	error ("Need to know default download path (use 'set download-path')");
-    }
-
-  start_time = time (NULL);
-  monitor_printf ("uhip %s\r", server_addr);
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
-  monitor_printf ("ulip %s\r", board_addr);
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
-  if (args[0] != '/')
-    monitor_printf ("up %s\r", download_path);	/* use default path */
-  else
-    monitor_printf ("up\r");	/* rooted filename/path */
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
-
-  if (strrchr (args, '.') && !strcmp (strrchr (args, '.'), ".srec"))
-    monitor_printf ("ul %s\r", args);
-  else				/* add ".srec" suffix */
-    monitor_printf ("ul %s.srec\r", args);
-  resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
-
-  if (buf[0] == 0 || strstr (buf, "complete") == 0)
-    error ("Upload file not found: %s.srec\nCheck IP addresses and download path.", args);
-  else
-    printf_filtered (" -- Ethernet load complete.\n");
-
-  end_time = time (NULL);
-  abfd = bfd_openr (args, 0);
-  if (abfd != NULL)
-    {				/* Download is done -- print section statistics */
-      if (bfd_check_format (abfd, bfd_object) == 0)
-	{
-	  printf_filtered ("File is not an object file\n");
-	}
-      for (s = abfd->sections; s; s = s->next)
-	if (s->flags & SEC_LOAD)
-	  {
-	    bfd_size_type section_size = bfd_section_size (abfd, s);
-	    bfd_vma section_base = bfd_section_lma (abfd, s);
-	    unsigned int buffer;
-
-	    data_count += section_size;
-
-	    printf_filtered ("Loading section %s, size 0x%lx lma ",
-			     bfd_section_name (abfd, s), section_size);
-	    print_address_numeric (section_base, 1, gdb_stdout);
-	    printf_filtered ("\n");
-	    gdb_flush (gdb_stdout);
-	  }
-      /* Finally, make the PC point at the start address */
-      write_pc (bfd_get_start_address (abfd));
-      report_transfer_performance (data_count, start_time, end_time);
-      printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
-    }
-  inferior_ptid = null_ptid;	/* No process now */
-
-  /* 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 new code (and just changed the PC).
-     Another way to do this might be to call normal_stop, except that
-     the stack may not be valid, and things would get horribly
-     confused... */
-
-  clear_symtab_users ();
-}
-
-void
-_initialize_m32r_rom (void)
-{
-  /* Initialize m32r RevC monitor target */
-  init_m32r_cmds ();
-  init_monitor_ops (&m32r_ops);
-
-  m32r_ops.to_shortname = "m32r";
-  m32r_ops.to_longname = "m32r monitor";
-  m32r_ops.to_load = m32r_load_gen;	/* monitor lacks a download command */
-  m32r_ops.to_doc = "Debug via the m32r monitor.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).";
-  m32r_ops.to_open = m32r_open;
-  add_target (&m32r_ops);
-
-  /* Initialize mon2000 monitor target */
-  init_mon2000_cmds ();
-  init_monitor_ops (&mon2000_ops);
-
-  mon2000_ops.to_shortname = "mon2000";
-  mon2000_ops.to_longname = "Mon2000 monitor";
-  mon2000_ops.to_load = m32r_load_gen;	/* monitor lacks a download command */
-  mon2000_ops.to_doc = "Debug via the Mon2000 monitor.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).";
-  mon2000_ops.to_open = mon2000_open;
-  add_target (&mon2000_ops);
-
-  add_show_from_set
-    (add_set_cmd ("download-path", class_obscure, var_string,
-		  (char *) &download_path,
-		  "Set the default path for downloadable SREC files.",
-		  &setlist),
-     &showlist);
-
-  add_show_from_set
-    (add_set_cmd ("board-address", class_obscure, var_string,
-		  (char *) &board_addr,
-		  "Set IP address for M32R-EVA target board.",
-		  &setlist),
-     &showlist);
-
-  add_show_from_set
-    (add_set_cmd ("server-address", class_obscure, var_string,
-		  (char *) &server_addr,
-		"Set IP address for download server (GDB's host computer).",
-		  &setlist),
-     &showlist);
-
-  add_com ("upload", class_obscure, m32r_upload_command,
-      "Upload the srec file via the monitor's Ethernet upload capability.");
-
-  add_com ("tload", class_obscure, m32r_load, "test upload command.");
-}
+// OBSOLETE /* Remote debugging interface to m32r and mon2000 ROM monitors for GDB, 
+// OBSOLETE    the GNU debugger.
+// OBSOLETE    Copyright 1996, 1997, 1998, 1999, 2000, 2001
+// OBSOLETE    Free Software Foundation, Inc.
+// OBSOLETE 
+// OBSOLETE    Adapted by Michael Snyder of Cygnus Support.
+// 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 module defines communication with the Mitsubishi m32r monitor */
+// OBSOLETE 
+// OBSOLETE #include "defs.h"
+// OBSOLETE #include "gdbcore.h"
+// OBSOLETE #include "target.h"
+// OBSOLETE #include "monitor.h"
+// OBSOLETE #include "serial.h"
+// OBSOLETE #include "symtab.h"
+// OBSOLETE #include "command.h"
+// OBSOLETE #include "gdbcmd.h"
+// OBSOLETE #include "symfile.h"		/* for generic load */
+// OBSOLETE #include <time.h>		/* for time_t */
+// OBSOLETE #include "gdb_string.h"
+// OBSOLETE #include "objfiles.h"		/* for ALL_OBJFILES etc. */
+// OBSOLETE #include "inferior.h"		/* for write_pc() */
+// OBSOLETE #include <ctype.h>
+// OBSOLETE #include "regcache.h"
+// OBSOLETE 
+// OBSOLETE extern void report_transfer_performance (unsigned long, time_t, time_t);
+// OBSOLETE 
+// OBSOLETE /*
+// OBSOLETE  * All this stuff just to get my host computer's IP address!
+// OBSOLETE  */
+// OBSOLETE #include <sys/types.h>
+// OBSOLETE #include <netdb.h>		/* for hostent */
+// OBSOLETE #include <netinet/in.h>		/* for struct in_addr */
+// OBSOLETE #if 1
+// OBSOLETE #include <arpa/inet.h>		/* for inet_ntoa */
+// OBSOLETE #endif
+// OBSOLETE 
+// OBSOLETE static char *board_addr;	/* user-settable IP address for M32R-EVA */
+// OBSOLETE static char *server_addr;	/* user-settable IP address for gdb host */
+// OBSOLETE static char *download_path;	/* user-settable path for SREC files     */
+// OBSOLETE 
+// OBSOLETE 
+// OBSOLETE /* 
+// OBSOLETE  * Function: m32r_load_1 (helper function)
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_load_section (bfd *abfd, asection *s, void *obj)
+// OBSOLETE {
+// OBSOLETE   unsigned int *data_count = obj;
+// OBSOLETE   if (s->flags & SEC_LOAD)
+// OBSOLETE     {
+// OBSOLETE       bfd_size_type section_size = bfd_section_size (abfd, s);
+// OBSOLETE       bfd_vma section_base = bfd_section_lma (abfd, s);
+// OBSOLETE       unsigned int buffer, i;
+// OBSOLETE 
+// OBSOLETE       *data_count += section_size;
+// OBSOLETE 
+// OBSOLETE       printf_filtered ("Loading section %s, size 0x%lx lma ",
+// OBSOLETE 		       bfd_section_name (abfd, s), section_size);
+// OBSOLETE       print_address_numeric (section_base, 1, gdb_stdout);
+// OBSOLETE       printf_filtered ("\n");
+// OBSOLETE       gdb_flush (gdb_stdout);
+// OBSOLETE       monitor_printf ("%s mw\r", paddr_nz (section_base));
+// OBSOLETE       for (i = 0; i < section_size; i += 4)
+// OBSOLETE 	{
+// OBSOLETE 	  QUIT;
+// OBSOLETE 	  monitor_expect (" -> ", NULL, 0);
+// OBSOLETE 	  bfd_get_section_contents (abfd, s, (char *) &buffer, i, 4);
+// OBSOLETE 	  monitor_printf ("%x\n", buffer);
+// OBSOLETE 	}
+// OBSOLETE       monitor_expect (" -> ", NULL, 0);
+// OBSOLETE       monitor_printf ("q\n");
+// OBSOLETE       monitor_expect_prompt (NULL, 0);
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE static int
+// OBSOLETE m32r_load_1 (void *dummy)
+// OBSOLETE {
+// OBSOLETE   int data_count = 0;
+// OBSOLETE 
+// OBSOLETE   bfd_map_over_sections ((bfd *) dummy, m32r_load_section, &data_count);
+// OBSOLETE   return data_count;
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* 
+// OBSOLETE  * Function: m32r_load (an alternate way to load) 
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_load (char *filename, int from_tty)
+// OBSOLETE {
+// OBSOLETE   bfd *abfd;
+// OBSOLETE   asection *s;
+// OBSOLETE   unsigned int i, data_count = 0;
+// OBSOLETE   time_t start_time, end_time;	/* for timing of download */
+// OBSOLETE 
+// OBSOLETE   if (filename == NULL || filename[0] == 0)
+// OBSOLETE     filename = get_exec_file (1);
+// OBSOLETE 
+// OBSOLETE   abfd = bfd_openr (filename, 0);
+// OBSOLETE   if (!abfd)
+// OBSOLETE     error ("Unable to open file %s\n", filename);
+// OBSOLETE   if (bfd_check_format (abfd, bfd_object) == 0)
+// OBSOLETE     error ("File is not an object file\n");
+// OBSOLETE   start_time = time (NULL);
+// OBSOLETE #if 0
+// OBSOLETE   for (s = abfd->sections; s; s = s->next)
+// OBSOLETE     if (s->flags & SEC_LOAD)
+// OBSOLETE       {
+// OBSOLETE 	bfd_size_type section_size = bfd_section_size (abfd, s);
+// OBSOLETE 	bfd_vma section_base = bfd_section_vma (abfd, s);
+// OBSOLETE 	unsigned int buffer;
+// OBSOLETE 
+// OBSOLETE 	data_count += section_size;
+// OBSOLETE 
+// OBSOLETE 	printf_filtered ("Loading section %s, size 0x%lx vma ",
+// OBSOLETE 			 bfd_section_name (abfd, s), section_size);
+// OBSOLETE 	print_address_numeric (section_base, 1, gdb_stdout);
+// OBSOLETE 	printf_filtered ("\n");
+// OBSOLETE 	gdb_flush (gdb_stdout);
+// OBSOLETE 	monitor_printf ("%x mw\r", section_base);
+// OBSOLETE 	for (i = 0; i < section_size; i += 4)
+// OBSOLETE 	  {
+// OBSOLETE 	    monitor_expect (" -> ", NULL, 0);
+// OBSOLETE 	    bfd_get_section_contents (abfd, s, (char *) &buffer, i, 4);
+// OBSOLETE 	    monitor_printf ("%x\n", buffer);
+// OBSOLETE 	  }
+// OBSOLETE 	monitor_expect (" -> ", NULL, 0);
+// OBSOLETE 	monitor_printf ("q\n");
+// OBSOLETE 	monitor_expect_prompt (NULL, 0);
+// OBSOLETE       }
+// OBSOLETE #else
+// OBSOLETE   if (!(catch_errors (m32r_load_1, abfd, "Load aborted!\n", RETURN_MASK_ALL)))
+// OBSOLETE     {
+// OBSOLETE       monitor_printf ("q\n");
+// OBSOLETE       return;
+// OBSOLETE     }
+// OBSOLETE #endif
+// OBSOLETE   end_time = time (NULL);
+// OBSOLETE   printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
+// OBSOLETE   report_transfer_performance (data_count, start_time, end_time);
+// OBSOLETE 
+// OBSOLETE   /* Finally, make the PC point at the start address */
+// OBSOLETE   if (exec_bfd)
+// OBSOLETE     write_pc (bfd_get_start_address (exec_bfd));
+// OBSOLETE 
+// OBSOLETE   inferior_ptid = null_ptid;	/* No process now */
+// OBSOLETE 
+// OBSOLETE   /* This is necessary because many things were based on the PC at the
+// OBSOLETE      time that we attached to the monitor, which is no longer valid
+// OBSOLETE      now that we have loaded new code (and just changed the PC).
+// OBSOLETE      Another way to do this might be to call normal_stop, except that
+// OBSOLETE      the stack may not be valid, and things would get horribly
+// OBSOLETE      confused... */
+// OBSOLETE 
+// OBSOLETE   clear_symtab_users ();
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_load_gen (char *filename, int from_tty)
+// OBSOLETE {
+// OBSOLETE   generic_load (filename, from_tty);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE static void m32r_open (char *args, int from_tty);
+// OBSOLETE static void mon2000_open (char *args, int from_tty);
+// OBSOLETE 
+// OBSOLETE /* This array of registers needs to match the indexes used by GDB. The
+// OBSOLETE    whole reason this exists is because the various ROM monitors use
+// OBSOLETE    different names than GDB does, and don't support all the registers
+// OBSOLETE    either. So, typing "info reg sp" becomes an "A7". */
+// OBSOLETE 
+// OBSOLETE static char *m32r_regnames[] =
+// OBSOLETE {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
+// OBSOLETE  "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
+// OBSOLETE  "psw", "cbr", "spi", "spu", "bpc", "pc", "accl", "acch",
+// OBSOLETE };
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_supply_register (char *regname, int regnamelen, char *val, int vallen)
+// OBSOLETE {
+// OBSOLETE   int regno;
+// OBSOLETE   int num_regs = sizeof (m32r_regnames) / sizeof (m32r_regnames[0]);
+// OBSOLETE 
+// OBSOLETE   for (regno = 0; regno < num_regs; regno++)
+// OBSOLETE     if (strncmp (regname, m32r_regnames[regno], regnamelen) == 0)
+// OBSOLETE       break;
+// OBSOLETE 
+// OBSOLETE   if (regno >= num_regs)
+// OBSOLETE     return;			/* no match */
+// OBSOLETE 
+// OBSOLETE   if (regno == ACCL_REGNUM)
+// OBSOLETE     {				/* special handling for 64-bit acc reg */
+// OBSOLETE       monitor_supply_register (ACCH_REGNUM, val);
+// OBSOLETE       val = strchr (val, ':');	/* skip past ':' to get 2nd word */
+// OBSOLETE       if (val != NULL)
+// OBSOLETE 	monitor_supply_register (ACCL_REGNUM, val + 1);
+// OBSOLETE     }
+// OBSOLETE   else
+// OBSOLETE     {
+// OBSOLETE       monitor_supply_register (regno, val);
+// OBSOLETE       if (regno == PSW_REGNUM)
+// OBSOLETE 	{
+// OBSOLETE 	  unsigned long psw = strtoul (val, NULL, 16);
+// OBSOLETE 	  char *zero = "00000000", *one = "00000001";
+// OBSOLETE 
+// OBSOLETE #ifdef SM_REGNUM
+// OBSOLETE 	  /* Stack mode bit */
+// OBSOLETE 	  monitor_supply_register (SM_REGNUM, (psw & 0x80) ? one : zero);
+// OBSOLETE #endif
+// OBSOLETE #ifdef BSM_REGNUM
+// OBSOLETE 	  /* Backup stack mode bit */
+// OBSOLETE 	  monitor_supply_register (BSM_REGNUM, (psw & 0x8000) ? one : zero);
+// OBSOLETE #endif
+// OBSOLETE #ifdef IE_REGNUM
+// OBSOLETE 	  /* Interrupt enable bit */
+// OBSOLETE 	  monitor_supply_register (IE_REGNUM, (psw & 0x40) ? one : zero);
+// OBSOLETE #endif
+// OBSOLETE #ifdef BIE_REGNUM
+// OBSOLETE 	  /* Backup interrupt enable bit */
+// OBSOLETE 	  monitor_supply_register (BIE_REGNUM, (psw & 0x4000) ? one : zero);
+// OBSOLETE #endif
+// OBSOLETE #ifdef COND_REGNUM
+// OBSOLETE 	  /* Condition bit (carry etc.) */
+// OBSOLETE 	  monitor_supply_register (COND_REGNUM, (psw & 0x1) ? one : zero);
+// OBSOLETE #endif
+// OBSOLETE #ifdef CBR_REGNUM
+// OBSOLETE 	  monitor_supply_register (CBR_REGNUM, (psw & 0x1) ? one : zero);
+// OBSOLETE #endif
+// OBSOLETE #ifdef BPC_REGNUM
+// OBSOLETE 	  monitor_supply_register (BPC_REGNUM, zero);	/* KLUDGE:   (???????) */
+// OBSOLETE #endif
+// OBSOLETE #ifdef BCARRY_REGNUM
+// OBSOLETE 	  monitor_supply_register (BCARRY_REGNUM, zero);	/* KLUDGE: (??????) */
+// OBSOLETE #endif
+// OBSOLETE 	}
+// OBSOLETE 
+// OBSOLETE       if (regno == SPI_REGNUM || regno == SPU_REGNUM)
+// OBSOLETE 	{			/* special handling for stack pointer (spu or spi) */
+// OBSOLETE 	  unsigned long stackmode = read_register (PSW_REGNUM) & 0x80;
+// OBSOLETE 
+// OBSOLETE 	  if (regno == SPI_REGNUM && !stackmode)	/* SP == SPI */
+// OBSOLETE 	    monitor_supply_register (SP_REGNUM, val);
+// OBSOLETE 	  else if (regno == SPU_REGNUM && stackmode)	/* SP == SPU */
+// OBSOLETE 	    monitor_supply_register (SP_REGNUM, val);
+// OBSOLETE 	}
+// OBSOLETE     }
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* m32r RevC board monitor */
+// OBSOLETE 
+// OBSOLETE static struct target_ops m32r_ops;
+// OBSOLETE 
+// OBSOLETE static char *m32r_inits[] =
+// OBSOLETE {"\r", NULL};
+// OBSOLETE 
+// OBSOLETE static struct monitor_ops m32r_cmds;
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE init_m32r_cmds (void)
+// OBSOLETE {
+// OBSOLETE   m32r_cmds.flags = MO_CLR_BREAK_USES_ADDR | MO_REGISTER_VALUE_FIRST;
+// OBSOLETE   m32r_cmds.init = m32r_inits;	/* Init strings */
+// OBSOLETE   m32r_cmds.cont = "go\r";	/* continue command */
+// OBSOLETE   m32r_cmds.step = "step\r";	/* single step */
+// OBSOLETE   m32r_cmds.stop = NULL;	/* interrupt command */
+// OBSOLETE   m32r_cmds.set_break = "%x +bp\r";	/* set a breakpoint */
+// OBSOLETE   m32r_cmds.clr_break = "%x -bp\r";	/* clear a breakpoint */
+// OBSOLETE   m32r_cmds.clr_all_break = "bpoff\r";	/* clear all breakpoints */
+// OBSOLETE   m32r_cmds.fill = "%x %x %x fill\r";	/* fill (start length val) */
+// OBSOLETE   m32r_cmds.setmem.cmdb = "%x 1 %x fill\r";	/* setmem.cmdb (addr, value) */
+// OBSOLETE   m32r_cmds.setmem.cmdw = "%x 1 %x fillh\r";	/* setmem.cmdw (addr, value) */
+// OBSOLETE   m32r_cmds.setmem.cmdl = "%x 1 %x fillw\r";	/* setmem.cmdl (addr, value) */
+// OBSOLETE   m32r_cmds.setmem.cmdll = NULL;	/* setmem.cmdll (addr, value) */
+// OBSOLETE   m32r_cmds.setmem.resp_delim = NULL;	/* setmem.resp_delim */
+// OBSOLETE   m32r_cmds.setmem.term = NULL;	/* setmem.term */
+// OBSOLETE   m32r_cmds.setmem.term_cmd = NULL;	/* setmem.term_cmd */
+// OBSOLETE   m32r_cmds.getmem.cmdb = "%x %x dump\r";	/* getmem.cmdb (addr, len) */
+// OBSOLETE   m32r_cmds.getmem.cmdw = NULL;	/* getmem.cmdw (addr, len) */
+// OBSOLETE   m32r_cmds.getmem.cmdl = NULL;	/* getmem.cmdl (addr, len) */
+// OBSOLETE   m32r_cmds.getmem.cmdll = NULL;	/* getmem.cmdll (addr, len) */
+// OBSOLETE   m32r_cmds.getmem.resp_delim = ": ";	/* getmem.resp_delim */
+// OBSOLETE   m32r_cmds.getmem.term = NULL;	/* getmem.term */
+// OBSOLETE   m32r_cmds.getmem.term_cmd = NULL;	/* getmem.term_cmd */
+// OBSOLETE   m32r_cmds.setreg.cmd = "%x to %%%s\r";	/* setreg.cmd (name, value) */
+// OBSOLETE   m32r_cmds.setreg.resp_delim = NULL;	/* setreg.resp_delim */
+// OBSOLETE   m32r_cmds.setreg.term = NULL;	/* setreg.term */
+// OBSOLETE   m32r_cmds.setreg.term_cmd = NULL;	/* setreg.term_cmd */
+// OBSOLETE   m32r_cmds.getreg.cmd = NULL;	/* getreg.cmd (name) */
+// OBSOLETE   m32r_cmds.getreg.resp_delim = NULL;	/* getreg.resp_delim */
+// OBSOLETE   m32r_cmds.getreg.term = NULL;	/* getreg.term */
+// OBSOLETE   m32r_cmds.getreg.term_cmd = NULL;	/* getreg.term_cmd */
+// OBSOLETE   m32r_cmds.dump_registers = ".reg\r";	/* dump_registers */
+// OBSOLETE   m32r_cmds.register_pattern = "\\(\\w+\\) += \\([0-9a-fA-F]+\\b\\)";	/* register_pattern */
+// OBSOLETE   m32r_cmds.supply_register = m32r_supply_register;	/* supply_register */
+// OBSOLETE   m32r_cmds.load_routine = NULL;	/* load_routine (defaults to SRECs) */
+// OBSOLETE   m32r_cmds.load = NULL;	/* download command */
+// OBSOLETE   m32r_cmds.loadresp = NULL;	/* load response */
+// OBSOLETE   m32r_cmds.prompt = "ok ";	/* monitor command prompt */
+// OBSOLETE   m32r_cmds.line_term = "\r";	/* end-of-line terminator */
+// OBSOLETE   m32r_cmds.cmd_end = NULL;	/* optional command terminator */
+// OBSOLETE   m32r_cmds.target = &m32r_ops;	/* target operations */
+// OBSOLETE   m32r_cmds.stopbits = SERIAL_1_STOPBITS;	/* number of stop bits */
+// OBSOLETE   m32r_cmds.regnames = m32r_regnames;	/* registers names */
+// OBSOLETE   m32r_cmds.magic = MONITOR_OPS_MAGIC;	/* magic */
+// OBSOLETE }				/* init_m32r_cmds */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_open (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   monitor_open (args, &m32r_cmds, from_tty);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Mon2000 monitor (MSA2000 board) */
+// OBSOLETE 
+// OBSOLETE static struct target_ops mon2000_ops;
+// OBSOLETE static struct monitor_ops mon2000_cmds;
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE init_mon2000_cmds (void)
+// OBSOLETE {
+// OBSOLETE   mon2000_cmds.flags = MO_CLR_BREAK_USES_ADDR | MO_REGISTER_VALUE_FIRST;
+// OBSOLETE   mon2000_cmds.init = m32r_inits;	/* Init strings */
+// OBSOLETE   mon2000_cmds.cont = "go\r";	/* continue command */
+// OBSOLETE   mon2000_cmds.step = "step\r";	/* single step */
+// OBSOLETE   mon2000_cmds.stop = NULL;	/* interrupt command */
+// OBSOLETE   mon2000_cmds.set_break = "%x +bp\r";	/* set a breakpoint */
+// OBSOLETE   mon2000_cmds.clr_break = "%x -bp\r";	/* clear a breakpoint */
+// OBSOLETE   mon2000_cmds.clr_all_break = "bpoff\r";	/* clear all breakpoints */
+// OBSOLETE   mon2000_cmds.fill = "%x %x %x fill\r";	/* fill (start length val) */
+// OBSOLETE   mon2000_cmds.setmem.cmdb = "%x 1 %x fill\r";	/* setmem.cmdb (addr, value) */
+// OBSOLETE   mon2000_cmds.setmem.cmdw = "%x 1 %x fillh\r";		/* setmem.cmdw (addr, value) */
+// OBSOLETE   mon2000_cmds.setmem.cmdl = "%x 1 %x fillw\r";		/* setmem.cmdl (addr, value) */
+// OBSOLETE   mon2000_cmds.setmem.cmdll = NULL;	/* setmem.cmdll (addr, value) */
+// OBSOLETE   mon2000_cmds.setmem.resp_delim = NULL;	/* setmem.resp_delim */
+// OBSOLETE   mon2000_cmds.setmem.term = NULL;	/* setmem.term */
+// OBSOLETE   mon2000_cmds.setmem.term_cmd = NULL;	/* setmem.term_cmd */
+// OBSOLETE   mon2000_cmds.getmem.cmdb = "%x %x dump\r";	/* getmem.cmdb (addr, len) */
+// OBSOLETE   mon2000_cmds.getmem.cmdw = NULL;	/* getmem.cmdw (addr, len) */
+// OBSOLETE   mon2000_cmds.getmem.cmdl = NULL;	/* getmem.cmdl (addr, len) */
+// OBSOLETE   mon2000_cmds.getmem.cmdll = NULL;	/* getmem.cmdll (addr, len) */
+// OBSOLETE   mon2000_cmds.getmem.resp_delim = ": ";	/* getmem.resp_delim */
+// OBSOLETE   mon2000_cmds.getmem.term = NULL;	/* getmem.term */
+// OBSOLETE   mon2000_cmds.getmem.term_cmd = NULL;	/* getmem.term_cmd */
+// OBSOLETE   mon2000_cmds.setreg.cmd = "%x to %%%s\r";	/* setreg.cmd (name, value) */
+// OBSOLETE   mon2000_cmds.setreg.resp_delim = NULL;	/* setreg.resp_delim */
+// OBSOLETE   mon2000_cmds.setreg.term = NULL;	/* setreg.term */
+// OBSOLETE   mon2000_cmds.setreg.term_cmd = NULL;	/* setreg.term_cmd */
+// OBSOLETE   mon2000_cmds.getreg.cmd = NULL;	/* getreg.cmd (name) */
+// OBSOLETE   mon2000_cmds.getreg.resp_delim = NULL;	/* getreg.resp_delim */
+// OBSOLETE   mon2000_cmds.getreg.term = NULL;	/* getreg.term */
+// OBSOLETE   mon2000_cmds.getreg.term_cmd = NULL;	/* getreg.term_cmd */
+// OBSOLETE   mon2000_cmds.dump_registers = ".reg\r";	/* dump_registers */
+// OBSOLETE   mon2000_cmds.register_pattern = "\\(\\w+\\) += \\([0-9a-fA-F]+\\b\\)";	/* register_pattern */
+// OBSOLETE   mon2000_cmds.supply_register = m32r_supply_register;	/* supply_register */
+// OBSOLETE   mon2000_cmds.load_routine = NULL;	/* load_routine (defaults to SRECs) */
+// OBSOLETE   mon2000_cmds.load = NULL;	/* download command */
+// OBSOLETE   mon2000_cmds.loadresp = NULL;	/* load response */
+// OBSOLETE   mon2000_cmds.prompt = "Mon2000>";	/* monitor command prompt */
+// OBSOLETE   mon2000_cmds.line_term = "\r";	/* end-of-line terminator */
+// OBSOLETE   mon2000_cmds.cmd_end = NULL;	/* optional command terminator */
+// OBSOLETE   mon2000_cmds.target = &mon2000_ops;	/* target operations */
+// OBSOLETE   mon2000_cmds.stopbits = SERIAL_1_STOPBITS;	/* number of stop bits */
+// OBSOLETE   mon2000_cmds.regnames = m32r_regnames;	/* registers names */
+// OBSOLETE   mon2000_cmds.magic = MONITOR_OPS_MAGIC;	/* magic */
+// OBSOLETE }				/* init_mon2000_cmds */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE mon2000_open (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   monitor_open (args, &mon2000_cmds, from_tty);
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Function: set_board_address
+// OBSOLETE    Tell the BootOne monitor what it's ethernet IP address is. */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_set_board_address (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   int resp_len;
+// OBSOLETE   char buf[1024];
+// OBSOLETE 
+// OBSOLETE   if (args && *args)
+// OBSOLETE     {
+// OBSOLETE       monitor_printf ("ulip %s\n", args);
+// OBSOLETE       resp_len = monitor_expect_prompt (buf, sizeof (buf));
+// OBSOLETE       /* now parse the result for success */
+// OBSOLETE     }
+// OBSOLETE   else
+// OBSOLETE     error ("Requires argument (IP address for M32R-EVA board)");
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Function: set_server_address
+// OBSOLETE    Tell the BootOne monitor what gdb's ethernet IP address is. */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_set_server_address (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   int resp_len;
+// OBSOLETE   char buf[1024];
+// OBSOLETE 
+// OBSOLETE   if (args && *args)
+// OBSOLETE     {
+// OBSOLETE       monitor_printf ("uhip %s\n", args);
+// OBSOLETE       resp_len = monitor_expect_prompt (buf, sizeof (buf));
+// OBSOLETE       /* now parse the result for success */
+// OBSOLETE     }
+// OBSOLETE   else
+// OBSOLETE     error ("Requires argument (IP address of GDB's host computer)");
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE /* Function: set_download_path
+// OBSOLETE    Tell the BootOne monitor the default path for downloadable SREC files. */
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_set_download_path (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   int resp_len;
+// OBSOLETE   char buf[1024];
+// OBSOLETE 
+// OBSOLETE   if (args && *args)
+// OBSOLETE     {
+// OBSOLETE       monitor_printf ("up %s\n", args);
+// OBSOLETE       resp_len = monitor_expect_prompt (buf, sizeof (buf));
+// OBSOLETE       /* now parse the result for success */
+// OBSOLETE     }
+// OBSOLETE   else
+// OBSOLETE     error ("Requires argument (default path for downloadable SREC files)");
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE static void
+// OBSOLETE m32r_upload_command (char *args, int from_tty)
+// OBSOLETE {
+// OBSOLETE   bfd *abfd;
+// OBSOLETE   asection *s;
+// OBSOLETE   time_t start_time, end_time;	/* for timing of download */
+// OBSOLETE   int resp_len, data_count = 0;
+// OBSOLETE   char buf[1024];
+// OBSOLETE   struct hostent *hostent;
+// OBSOLETE   struct in_addr inet_addr;
+// OBSOLETE 
+// OBSOLETE   /* first check to see if there's an ethernet port! */
+// OBSOLETE   monitor_printf ("ust\r");
+// OBSOLETE   resp_len = monitor_expect_prompt (buf, sizeof (buf));
+// OBSOLETE   if (!strchr (buf, ':'))
+// OBSOLETE     error ("No ethernet connection!");
+// OBSOLETE 
+// OBSOLETE   if (board_addr == 0)
+// OBSOLETE     {
+// OBSOLETE       /* scan second colon in the output from the "ust" command */
+// OBSOLETE       char *myIPaddress = strchr (strchr (buf, ':') + 1, ':') + 1;
+// OBSOLETE 
+// OBSOLETE       while (isspace (*myIPaddress))
+// OBSOLETE 	myIPaddress++;
+// OBSOLETE 
+// OBSOLETE       if (!strncmp (myIPaddress, "0.0.", 4))	/* empty */
+// OBSOLETE 	error ("Please use 'set board-address' to set the M32R-EVA board's IP address.");
+// OBSOLETE       if (strchr (myIPaddress, '('))
+// OBSOLETE 	*(strchr (myIPaddress, '(')) = '\0';	/* delete trailing junk */
+// OBSOLETE       board_addr = xstrdup (myIPaddress);
+// OBSOLETE     }
+// OBSOLETE   if (server_addr == 0)
+// OBSOLETE     {
+// OBSOLETE       buf[0] = 0;
+// OBSOLETE       gethostname (buf, sizeof (buf));
+// OBSOLETE       if (buf[0] != 0)
+// OBSOLETE 	hostent = gethostbyname (buf);
+// OBSOLETE       if (hostent != 0)
+// OBSOLETE 	{
+// OBSOLETE #if 1
+// OBSOLETE 	  memcpy (&inet_addr.s_addr, hostent->h_addr,
+// OBSOLETE 		  sizeof (inet_addr.s_addr));
+// OBSOLETE 	  server_addr = (char *) inet_ntoa (inet_addr);
+// OBSOLETE #else
+// OBSOLETE 	  server_addr = (char *) inet_ntoa (hostent->h_addr);
+// OBSOLETE #endif
+// OBSOLETE 	}
+// OBSOLETE       if (server_addr == 0)	/* failed? */
+// OBSOLETE 	error ("Need to know gdb host computer's IP address (use 'set server-address')");
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   if (args == 0 || args[0] == 0)	/* no args: upload the current file */
+// OBSOLETE     args = get_exec_file (1);
+// OBSOLETE 
+// OBSOLETE   if (args[0] != '/' && download_path == 0)
+// OBSOLETE     {
+// OBSOLETE       if (current_directory)
+// OBSOLETE 	download_path = xstrdup (current_directory);
+// OBSOLETE       else
+// OBSOLETE 	error ("Need to know default download path (use 'set download-path')");
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   start_time = time (NULL);
+// OBSOLETE   monitor_printf ("uhip %s\r", server_addr);
+// OBSOLETE   resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
+// OBSOLETE   monitor_printf ("ulip %s\r", board_addr);
+// OBSOLETE   resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
+// OBSOLETE   if (args[0] != '/')
+// OBSOLETE     monitor_printf ("up %s\r", download_path);	/* use default path */
+// OBSOLETE   else
+// OBSOLETE     monitor_printf ("up\r");	/* rooted filename/path */
+// OBSOLETE   resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
+// OBSOLETE 
+// OBSOLETE   if (strrchr (args, '.') && !strcmp (strrchr (args, '.'), ".srec"))
+// OBSOLETE     monitor_printf ("ul %s\r", args);
+// OBSOLETE   else				/* add ".srec" suffix */
+// OBSOLETE     monitor_printf ("ul %s.srec\r", args);
+// OBSOLETE   resp_len = monitor_expect_prompt (buf, sizeof (buf));		/* parse result? */
+// OBSOLETE 
+// OBSOLETE   if (buf[0] == 0 || strstr (buf, "complete") == 0)
+// OBSOLETE     error ("Upload file not found: %s.srec\nCheck IP addresses and download path.", args);
+// OBSOLETE   else
+// OBSOLETE     printf_filtered (" -- Ethernet load complete.\n");
+// OBSOLETE 
+// OBSOLETE   end_time = time (NULL);
+// OBSOLETE   abfd = bfd_openr (args, 0);
+// OBSOLETE   if (abfd != NULL)
+// OBSOLETE     {				/* Download is done -- print section statistics */
+// OBSOLETE       if (bfd_check_format (abfd, bfd_object) == 0)
+// OBSOLETE 	{
+// OBSOLETE 	  printf_filtered ("File is not an object file\n");
+// OBSOLETE 	}
+// OBSOLETE       for (s = abfd->sections; s; s = s->next)
+// OBSOLETE 	if (s->flags & SEC_LOAD)
+// OBSOLETE 	  {
+// OBSOLETE 	    bfd_size_type section_size = bfd_section_size (abfd, s);
+// OBSOLETE 	    bfd_vma section_base = bfd_section_lma (abfd, s);
+// OBSOLETE 	    unsigned int buffer;
+// OBSOLETE 
+// OBSOLETE 	    data_count += section_size;
+// OBSOLETE 
+// OBSOLETE 	    printf_filtered ("Loading section %s, size 0x%lx lma ",
+// OBSOLETE 			     bfd_section_name (abfd, s), section_size);
+// OBSOLETE 	    print_address_numeric (section_base, 1, gdb_stdout);
+// OBSOLETE 	    printf_filtered ("\n");
+// OBSOLETE 	    gdb_flush (gdb_stdout);
+// OBSOLETE 	  }
+// OBSOLETE       /* Finally, make the PC point at the start address */
+// OBSOLETE       write_pc (bfd_get_start_address (abfd));
+// OBSOLETE       report_transfer_performance (data_count, start_time, end_time);
+// OBSOLETE       printf_filtered ("Start address 0x%lx\n", bfd_get_start_address (abfd));
+// OBSOLETE     }
+// OBSOLETE   inferior_ptid = null_ptid;	/* No process now */
+// OBSOLETE 
+// OBSOLETE   /* This is necessary because many things were based on the PC at the
+// OBSOLETE      time that we attached to the monitor, which is no longer valid
+// OBSOLETE      now that we have loaded new code (and just changed the PC).
+// OBSOLETE      Another way to do this might be to call normal_stop, except that
+// OBSOLETE      the stack may not be valid, and things would get horribly
+// OBSOLETE      confused... */
+// OBSOLETE 
+// OBSOLETE   clear_symtab_users ();
+// OBSOLETE }
+// OBSOLETE 
+// OBSOLETE void
+// OBSOLETE _initialize_m32r_rom (void)
+// OBSOLETE {
+// OBSOLETE   /* Initialize m32r RevC monitor target */
+// OBSOLETE   init_m32r_cmds ();
+// OBSOLETE   init_monitor_ops (&m32r_ops);
+// OBSOLETE 
+// OBSOLETE   m32r_ops.to_shortname = "m32r";
+// OBSOLETE   m32r_ops.to_longname = "m32r monitor";
+// OBSOLETE   m32r_ops.to_load = m32r_load_gen;	/* monitor lacks a download command */
+// OBSOLETE   m32r_ops.to_doc = "Debug via the m32r monitor.\n\
+// OBSOLETE Specify the serial device it is connected to (e.g. /dev/ttya).";
+// OBSOLETE   m32r_ops.to_open = m32r_open;
+// OBSOLETE   add_target (&m32r_ops);
+// OBSOLETE 
+// OBSOLETE   /* Initialize mon2000 monitor target */
+// OBSOLETE   init_mon2000_cmds ();
+// OBSOLETE   init_monitor_ops (&mon2000_ops);
+// OBSOLETE 
+// OBSOLETE   mon2000_ops.to_shortname = "mon2000";
+// OBSOLETE   mon2000_ops.to_longname = "Mon2000 monitor";
+// OBSOLETE   mon2000_ops.to_load = m32r_load_gen;	/* monitor lacks a download command */
+// OBSOLETE   mon2000_ops.to_doc = "Debug via the Mon2000 monitor.\n\
+// OBSOLETE Specify the serial device it is connected to (e.g. /dev/ttya).";
+// OBSOLETE   mon2000_ops.to_open = mon2000_open;
+// OBSOLETE   add_target (&mon2000_ops);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set
+// OBSOLETE     (add_set_cmd ("download-path", class_obscure, var_string,
+// OBSOLETE 		  (char *) &download_path,
+// OBSOLETE 		  "Set the default path for downloadable SREC files.",
+// OBSOLETE 		  &setlist),
+// OBSOLETE      &showlist);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set
+// OBSOLETE     (add_set_cmd ("board-address", class_obscure, var_string,
+// OBSOLETE 		  (char *) &board_addr,
+// OBSOLETE 		  "Set IP address for M32R-EVA target board.",
+// OBSOLETE 		  &setlist),
+// OBSOLETE      &showlist);
+// OBSOLETE 
+// OBSOLETE   add_show_from_set
+// OBSOLETE     (add_set_cmd ("server-address", class_obscure, var_string,
+// OBSOLETE 		  (char *) &server_addr,
+// OBSOLETE 		"Set IP address for download server (GDB's host computer).",
+// OBSOLETE 		  &setlist),
+// OBSOLETE      &showlist);
+// OBSOLETE 
+// OBSOLETE   add_com ("upload", class_obscure, m32r_upload_command,
+// OBSOLETE       "Upload the srec file via the monitor's Ethernet upload capability.");
+// OBSOLETE 
+// OBSOLETE   add_com ("tload", class_obscure, m32r_load, "test upload command.");
+// OBSOLETE }
Index: m32r-stub.c
===================================================================
RCS file: /cvs/src/src/gdb/m32r-stub.c,v
retrieving revision 1.5
diff -u -r1.5 m32r-stub.c
--- m32r-stub.c	4 Oct 2002 22:17:36 -0000	1.5
+++ m32r-stub.c	29 Jan 2003 19:10:10 -0000
@@ -1,1718 +1,1718 @@
-/****************************************************************************
-
-		THIS SOFTWARE IS NOT COPYRIGHTED
-
-   HP offers the following for use in the public domain.  HP makes no
-   warranty with regard to the software or it's performance and the
-   user accepts the software "AS IS" with all faults.
-
-   HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
-   TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-   OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-****************************************************************************/
-
-/****************************************************************************
- *  Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $
- *
- *  Module name: remcom.c $
- *  Revision: 1.34 $
- *  Date: 91/03/09 12:29:49 $
- *  Contributor:     Lake Stevens Instrument Division$
- *
- *  Description:     low level support for gdb debugger. $
- *
- *  Considerations:  only works on target hardware $
- *
- *  Written by:      Glenn Engel $
- *  ModuleState:     Experimental $
- *
- *  NOTES:           See Below $
- *
- *  Modified for M32R by Michael Snyder, Cygnus Support.
- *
- *  To enable debugger support, two things need to happen.  One, a
- *  call to set_debug_traps() is necessary in order to allow any breakpoints
- *  or error conditions to be properly intercepted and reported to gdb.
- *  Two, a breakpoint needs to be generated to begin communication.  This
- *  is most easily accomplished by a call to breakpoint().  Breakpoint()
- *  simulates a breakpoint by executing a trap #1.
- *
- *  The external function exceptionHandler() is
- *  used to attach a specific handler to a specific M32R vector number.
- *  It should use the same privilege level it runs at.  It should
- *  install it as an interrupt gate so that interrupts are masked
- *  while the handler runs.
- *
- *  Because gdb will sometimes write to the stack area to execute function
- *  calls, this program cannot rely on using the supervisor stack so it
- *  uses it's own stack area reserved in the int array remcomStack.
- *
- *************
- *
- *    The following gdb commands are supported:
- *
- * command          function                               Return value
- *
- *    g             return the value of the CPU registers  hex data or ENN
- *    G             set the value of the CPU registers     OK or ENN
- *
- *    mAA..AA,LLLL  Read LLLL bytes at address AA..AA      hex data or ENN
- *    MAA..AA,LLLL: Write LLLL bytes at address AA.AA      OK or ENN
- *    XAA..AA,LLLL: Write LLLL binary bytes at address     OK or ENN
- *                  AA..AA
- *
- *    c             Resume at current address              SNN   ( signal NN)
- *    cAA..AA       Continue at address AA..AA             SNN
- *
- *    s             Step one instruction                   SNN
- *    sAA..AA       Step one instruction from AA..AA       SNN
- *
- *    k             kill
- *
- *    ?             What was the last sigval ?             SNN   (signal NN)
- *
- * All commands and responses are sent with a packet which includes a
- * checksum.  A packet consists of
- *
- * $<packet info>#<checksum>.
- *
- * where
- * <packet info> :: <characters representing the command or response>
- * <checksum>    :: <two hex digits computed as modulo 256 sum of <packetinfo>>
- *
- * When a packet is received, it is first acknowledged with either '+' or '-'.
- * '+' indicates a successful transfer.  '-' indicates a failed transfer.
- *
- * Example:
- *
- * Host:                  Reply:
- * $m0,10#2a               +$00010203040506070809101112131415#42
- *
- ****************************************************************************/
-
-
-/************************************************************************
- *
- * external low-level support routines
- */
-extern void putDebugChar();	/* write a single character      */
-extern int getDebugChar();	/* read and return a single char */
-extern void exceptionHandler();	/* assign an exception handler   */
-
-/*****************************************************************************
- * BUFMAX defines the maximum number of characters in inbound/outbound buffers
- * at least NUMREGBYTES*2 are needed for register packets 
- */
-#define BUFMAX 400
-
-static char initialized;  /* boolean flag. != 0 means we've been initialized */
-
-int     remote_debug;
-/*  debug >  0 prints ill-formed commands in valid packets & checksum errors */
-
-static const unsigned char hexchars[]="0123456789abcdef";
-
-#define NUMREGS 24
-
-/* Number of bytes of registers.  */
-#define NUMREGBYTES (NUMREGS * 4)
-enum regnames { R0,  R1,  R2,  R3,  R4,  R5,  R6,   R7,
-		R8,  R9,  R10, R11, R12, R13, R14,  R15,
-		PSW, CBR, SPI, SPU, BPC, PC,  ACCL, ACCH };
-
-enum SYS_calls {
-  	SYS_null, 
-	SYS_exit,
-	SYS_open,
-	SYS_close,
-	SYS_read,
-	SYS_write,
-	SYS_lseek,
-	SYS_unlink,
-	SYS_getpid,
-	SYS_kill,
-	SYS_fstat,
-	SYS_sbrk,
-	SYS_fork,
-	SYS_execve,
-	SYS_wait4,
-	SYS_link,
-	SYS_chdir,
-	SYS_stat,
-	SYS_utime,
-	SYS_chown,
-	SYS_chmod,
-	SYS_time,
-	SYS_pipe };
-
-static int registers[NUMREGS];
-
-#define STACKSIZE 8096
-static unsigned char remcomInBuffer[BUFMAX];
-static unsigned char remcomOutBuffer[BUFMAX];
-static int  remcomStack[STACKSIZE/sizeof(int)];
-static int*  stackPtr = &remcomStack[STACKSIZE/sizeof(int) - 1];
-
-static unsigned int save_vectors[18];	/* previous exception vectors */
-
-/* Indicate to caller of mem2hex or hex2mem that there has been an error. */
-static volatile int mem_err = 0;
-
-/* Store the vector number here (since GDB only gets the signal
-   number through the usual means, and that's not very specific).  */
-int gdb_m32r_vector = -1;
-
-#if 0
-#include "syscall.h" /* for SYS_exit, SYS_write etc. */
-#endif
-
-/* Global entry points:
- */
-
-extern void handle_exception(int);
-extern void set_debug_traps(void);
-extern void breakpoint(void);
-
-/* Local functions:
- */
-
-static int  computeSignal(int);
-static void putpacket(unsigned char *);
-static unsigned char *getpacket(void);
-
-static unsigned char *mem2hex(unsigned char *, unsigned char *, int, int);
-static unsigned char *hex2mem(unsigned char *, unsigned char *, int, int);
-static int  hexToInt(unsigned char **, int *);
-static unsigned char *bin2mem(unsigned char *, unsigned char *, int, int);
-static void stash_registers(void);
-static void restore_registers(void);
-static int  prepare_to_step(int);
-static int  finish_from_step(void);
-static unsigned long crc32 (unsigned char *, int, unsigned long);
-
-static void gdb_error(char *, char *);
-static int  gdb_putchar(int), gdb_puts(char *), gdb_write(char *, int);
-
-static unsigned char *strcpy (unsigned char *, const unsigned char *);
-static int   strlen (const unsigned char *);
-
-/*
- * This function does all command procesing for interfacing to gdb.
- */
-
-void 
-handle_exception(int exceptionVector)
-{
-  int    sigval, stepping;
-  int    addr, length, i;
-  unsigned char * ptr;
-  unsigned char   buf[16];
-  int binary;
-
-  /* Do not call finish_from_step() if this is not a trap #1
-   * (breakpoint trap).  Without this check, the finish_from_step()
-   * might interpret a system call trap as a single step trap.  This
-   * can happen if: the stub receives 's' and exits, but an interrupt
-   * was pending; the interrupt is now handled and causes the stub to
-   * be reentered because some function makes a system call.  
-   */
-  if (exceptionVector == 1)	/* Trap exception? */
-    if (!finish_from_step())	/* Go see if stepping state needs update. */
-      return;		/* "false step": let the target continue */
-
-  gdb_m32r_vector = exceptionVector;
-
-  if (remote_debug)
-    {
-      mem2hex((unsigned char *) &exceptionVector, buf, 4, 0);
-      gdb_error("Handle exception %s, ", buf);
-      mem2hex((unsigned char *) &registers[PC], buf, 4, 0);
-      gdb_error("PC == 0x%s\n", buf);
-    }
-
-  /* reply to host that an exception has occurred */
-  sigval = computeSignal( exceptionVector );
-
-  ptr = remcomOutBuffer;
- 
-  *ptr++ = 'T';         /* notify gdb with signo, PC, FP and SP */
-  *ptr++ = hexchars[sigval >> 4];
-  *ptr++ = hexchars[sigval & 0xf];
- 
-  *ptr++ = hexchars[PC >> 4];
-  *ptr++ = hexchars[PC & 0xf];
-  *ptr++ = ':';
-  ptr = mem2hex((unsigned char *)&registers[PC], ptr, 4, 0);     /* PC */
-  *ptr++ = ';';
- 
-  *ptr++ = hexchars[R13 >> 4];
-  *ptr++ = hexchars[R13 & 0xf];
-  *ptr++ = ':';
-  ptr = mem2hex((unsigned char *)&registers[R13], ptr, 4, 0);    /* FP */
-  *ptr++ = ';';
- 
-  *ptr++ = hexchars[R15 >> 4];
-  *ptr++ = hexchars[R15 & 0xf];
-  *ptr++ = ':';
-  ptr = mem2hex((unsigned char *)&registers[R15], ptr, 4, 0);    /* SP */
-  *ptr++ = ';';
-  *ptr++ = 0;
- 
-  if (exceptionVector == 0)     /* simulated SYS call stuff */
-    {
-      mem2hex((unsigned char *) &registers[PC], buf, 4, 0);
-      switch (registers[R0]) {
-      case SYS_exit:
-	gdb_error("Target program has exited at %s\n", buf);
-	ptr = remcomOutBuffer;
-	*ptr++ = 'W';
-	sigval = registers[R1] & 0xff;
-	*ptr++ = hexchars[sigval >> 4];
-	*ptr++ = hexchars[sigval & 0xf];
-	*ptr++ = 0;
-	break;
-      case SYS_open:
-	gdb_error("Target attempts SYS_open call at %s\n", buf);
-	break;
-      case SYS_close:
-	gdb_error("Target attempts SYS_close call at %s\n", buf);
-	break;
-      case SYS_read:
-	gdb_error("Target attempts SYS_read call at %s\n", buf);
-	break;
-      case SYS_write:
-	if (registers[R1] == 1 ||       /* write to stdout  */
-	    registers[R1] == 2)		/* write to stderr  */
-	  {				/* (we can do that) */
-	    registers[R0] = gdb_write((void *) registers[R2], registers[R3]);
-	    return;
-	  }
-	else
-	  gdb_error("Target attempts SYS_write call at %s\n", buf);
-	break;
-      case SYS_lseek:
-	gdb_error("Target attempts SYS_lseek call at %s\n", buf);
-	break;
-      case SYS_unlink:
-	gdb_error("Target attempts SYS_unlink call at %s\n", buf);
-	break;
-      case SYS_getpid:
-	gdb_error("Target attempts SYS_getpid call at %s\n", buf);
-	break;
-      case SYS_kill:
-	gdb_error("Target attempts SYS_kill call at %s\n", buf);
-	break;
-      case SYS_fstat:
-	gdb_error("Target attempts SYS_fstat call at %s\n", buf);
-	break;
-      default:
-	gdb_error("Target attempts unknown SYS call at %s\n", buf);
-	break;
-      }
-    }
-
-  putpacket(remcomOutBuffer);
-
-  stepping = 0;
-
-  while (1==1) {
-    remcomOutBuffer[0] = 0;
-    ptr = getpacket();
-    binary = 0;
-    switch (*ptr++) {
-      default:	/* Unknown code.  Return an empty reply message. */
-	break;
-      case 'R':
-	if (hexToInt (&ptr, &addr))
-	  registers[PC] = addr;
-	strcpy(remcomOutBuffer, "OK");
-	break;
-      case '!':
-	strcpy(remcomOutBuffer, "OK");
-	break;
-    case 'X': /* XAA..AA,LLLL:<binary data>#cs */
-      binary = 1;
-    case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */
-      /* TRY TO READ '%x,%x:'.  IF SUCCEED, SET PTR = 0 */
-      {
-        if (hexToInt(&ptr,&addr))
-          if (*(ptr++) == ',')
-            if (hexToInt(&ptr,&length))
-              if (*(ptr++) == ':')
-                {
-                  mem_err = 0;
-                  if (binary)
-                    bin2mem (ptr, (unsigned char *) addr, length, 1);
-                  else
-                    hex2mem(ptr, (unsigned char*) addr, length, 1);
-                  if (mem_err) {
-                    strcpy (remcomOutBuffer, "E03");
-                    gdb_error ("memory fault", "");
-                  } else {
-                    strcpy(remcomOutBuffer,"OK");
-                  }
-                  ptr = 0;
-                }
-        if (ptr)
-          {
-            strcpy(remcomOutBuffer,"E02");
-          }
-      }
-	break;
-      case 'm': /* mAA..AA,LLLL  Read LLLL bytes at address AA..AA */
-		/* TRY TO READ %x,%x.  IF SUCCEED, SET PTR = 0 */
-	if (hexToInt(&ptr,&addr))
-	  if (*(ptr++) == ',')
-	    if (hexToInt(&ptr,&length))
-	      {
-		ptr = 0;
-		mem_err = 0;
-		mem2hex((unsigned char*) addr, remcomOutBuffer, length, 1);
-		if (mem_err) {
-		  strcpy (remcomOutBuffer, "E03");
-		  gdb_error ("memory fault", "");
-		}
-	      }
-	if (ptr)
-	  {
-	    strcpy(remcomOutBuffer,"E01");
-	  }
-	break;
-      case '?': 
-	remcomOutBuffer[0] = 'S';
-	remcomOutBuffer[1] =  hexchars[sigval >> 4];
-	remcomOutBuffer[2] =  hexchars[sigval % 16];
-	remcomOutBuffer[3] = 0;
-	break;
-      case 'd': 
-	remote_debug = !(remote_debug);  /* toggle debug flag */
-	break;
-      case 'g': /* return the value of the CPU registers */
-	mem2hex((unsigned char*) registers, remcomOutBuffer, NUMREGBYTES, 0);
-	break;
-      case 'P': /* set the value of a single CPU register - return OK */
-	{
-	  int regno;
-
-	  if (hexToInt (&ptr, &regno) && *ptr++ == '=')
-	    if (regno >= 0 && regno < NUMREGS)
-	      {
-		int stackmode;
-
-		hex2mem (ptr, (unsigned char *) &registers[regno], 4, 0);
-		/*
-		 * Since we just changed a single CPU register, let's
-		 * make sure to keep the several stack pointers consistant.
-		 */
-		stackmode = registers[PSW] & 0x80;
-		if (regno == R15)	/* stack pointer changed */
-		  {			/* need to change SPI or SPU */
-		    if (stackmode == 0)
-		      registers[SPI] = registers[R15];
-		    else
-		      registers[SPU] = registers[R15];
-		  }
-		else if (regno == SPU)	/* "user" stack pointer changed */
-		  {
-		    if (stackmode != 0)	/* stack in user mode: copy SP */
-		      registers[R15] = registers[SPU];
-		  }
-		else if (regno == SPI)	/* "interrupt" stack pointer changed */
-		  {
-		    if (stackmode == 0)	/* stack in interrupt mode: copy SP */
-		      registers[R15] = registers[SPI];
-		  }
-		else if (regno == PSW)	/* stack mode may have changed! */
-		  {			/* force SP to either SPU or SPI */
-		    if (stackmode == 0)	/* stack in user mode */
-		      registers[R15] = registers[SPI];
-		    else		/* stack in interrupt mode */
-		      registers[R15] = registers[SPU];
-		  }
-		strcpy (remcomOutBuffer, "OK");
-		break;
-	      }
-	  strcpy (remcomOutBuffer, "E01");
-	  break;
-	}
-      case 'G': /* set the value of the CPU registers - return OK */
-	hex2mem(ptr, (unsigned char*) registers, NUMREGBYTES, 0);
-	strcpy(remcomOutBuffer,"OK");
-	break;
-      case 's': /* sAA..AA	Step one instruction from AA..AA(optional) */
-	stepping = 1;
-      case 'c': /* cAA..AA	Continue from address AA..AA(optional) */
-		/* try to read optional parameter, pc unchanged if no parm */
-	if (hexToInt(&ptr,&addr))
-	  registers[ PC ] = addr;
-	
-	if (stepping)	/* single-stepping */
-	  {
-	    if (!prepare_to_step(0))	/* set up for single-step */
-	      {
-		/* prepare_to_step has already emulated the target insn:
-		   Send SIGTRAP to gdb, don't resume the target at all.  */
-		ptr = remcomOutBuffer;
-		*ptr++ = 'T';           /* Simulate stopping with SIGTRAP */
-		*ptr++ = '0';
-		*ptr++ = '5';
-
-		*ptr++ = hexchars[PC >> 4];     /* send PC */
-		*ptr++ = hexchars[PC & 0xf];
-		*ptr++ = ':';
-		ptr = mem2hex((unsigned char *)&registers[PC], ptr, 4, 0);
-		*ptr++ = ';';
-
-		*ptr++ = hexchars[R13 >> 4];    /* send FP */
-		*ptr++ = hexchars[R13 & 0xf];
-		*ptr++ = ':';
-		ptr = mem2hex((unsigned char *)&registers[R13], ptr, 4, 0);
-		*ptr++ = ';';
-
-		*ptr++ = hexchars[R15 >> 4];    /* send SP */
-		*ptr++ = hexchars[R15 & 0xf];
-		*ptr++ = ':';
-		ptr = mem2hex((unsigned char *)&registers[R15], ptr, 4, 0);
-		*ptr++ = ';';
-		*ptr++ = 0;
-
-		break;	
-	      }
-	  }
-	else	/* continuing, not single-stepping */
-	  {
-	    /* OK, about to do a "continue".  First check to see if the 
-	       target pc is on an odd boundary (second instruction in the 
-	       word).  If so, we must do a single-step first, because 
-	       ya can't jump or return back to an odd boundary!  */
-	    if ((registers[PC] & 2) != 0)
-	      prepare_to_step(1);
-	  }
-
-	return;
-
-      case 'D':	/* Detach */
-#if 0
-	/* I am interpreting this to mean, release the board from control 
-	   by the remote stub.  To do this, I am restoring the original
-	   (or at least previous) exception vectors.
-	 */
-	for (i = 0; i < 18; i++)
-	  exceptionHandler (i, save_vectors[i]);
-	putpacket ("OK");
-	return;		/* continue the inferior */
-#else
-	strcpy(remcomOutBuffer,"OK");
-	break;
-#endif
-    case 'q':
-      if (*ptr++ == 'C' &&
-	  *ptr++ == 'R' &&
-	  *ptr++ == 'C' &&
-	  *ptr++ == ':')
-	{
-	  unsigned long start, len, our_crc;
-
-	  if (hexToInt (&ptr, (int *) &start) &&
-	      *ptr++ == ','                   &&
-	      hexToInt (&ptr, (int *) &len))
-	    {
-	      remcomOutBuffer[0] = 'C';
-	      our_crc = crc32 ((unsigned char *) start, len, 0xffffffff);
-	      mem2hex ((char *) &our_crc, 
-		       &remcomOutBuffer[1], 
-		       sizeof (long), 
-		       0); 
-	    } /* else do nothing */
-	} /* else do nothing */
-      break;
-
-      case 'k': /* kill the program */
-	continue;
-      } /* switch */
-
-    /* reply to the request */
-    putpacket(remcomOutBuffer);
-  }
-}
-
-/* qCRC support */
-
-/* Table used by the crc32 function to calcuate the checksum. */
-static unsigned long crc32_table[256] = {0, 0};
-
-static unsigned long
-crc32 (unsigned char *buf, int len, unsigned long crc)
-{
-  if (! crc32_table[1])
-    {
-      /* Initialize the CRC table and the decoding table. */
-      int i, j;
-      unsigned long c;
-
-      for (i = 0; i < 256; i++)
-	{
-	  for (c = i << 24, j = 8; j > 0; --j)
-	    c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
-	  crc32_table[i] = c;
-	}
-    }
-
-  while (len--)
-    {
-      crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
-      buf++;
-    }
-  return crc;
-}
-
-static int 
-hex (unsigned char ch)
-{
-  if ((ch >= 'a') && (ch <= 'f')) return (ch-'a'+10);
-  if ((ch >= '0') && (ch <= '9')) return (ch-'0');
-  if ((ch >= 'A') && (ch <= 'F')) return (ch-'A'+10);
-  return (-1);
-}
-
-/* scan for the sequence $<data>#<checksum>     */
-
-unsigned char *
-getpacket (void)
-{
-  unsigned char *buffer = &remcomInBuffer[0];
-  unsigned char checksum;
-  unsigned char xmitcsum;
-  int count;
-  char ch;
-
-  while (1)
-    {
-      /* wait around for the start character, ignore all other characters */
-      while ((ch = getDebugChar ()) != '$')
-	;
-
-retry:
-      checksum = 0;
-      xmitcsum = -1;
-      count = 0;
-
-      /* now, read until a # or end of buffer is found */
-      while (count < BUFMAX)
-	{
-	  ch = getDebugChar ();
-          if (ch == '$')
-	    goto retry;
-	  if (ch == '#')
-	    break;
-	  checksum = checksum + ch;
-	  buffer[count] = ch;
-	  count = count + 1;
-	}
-      buffer[count] = 0;
-
-      if (ch == '#')
-	{
-	  ch = getDebugChar ();
-	  xmitcsum = hex (ch) << 4;
-	  ch = getDebugChar ();
-	  xmitcsum += hex (ch);
-
-	  if (checksum != xmitcsum)
-	    {
-	      if (remote_debug)
-		{
-		  unsigned char buf[16];
-
-		  mem2hex((unsigned char *) &checksum, buf, 4, 0);
-		  gdb_error("Bad checksum: my count = %s, ", buf);
-		  mem2hex((unsigned char *) &xmitcsum, buf, 4, 0);
-		  gdb_error("sent count = %s\n", buf);
-		  gdb_error(" -- Bad buffer: \"%s\"\n", buffer); 
-		}
-	      putDebugChar ('-');	/* failed checksum */
-	    }
-	  else
-	    {
-	      putDebugChar ('+');	/* successful transfer */
-
-	      /* if a sequence char is present, reply the sequence ID */
-	      if (buffer[2] == ':')
-		{
-		  putDebugChar (buffer[0]);
-		  putDebugChar (buffer[1]);
-
-		  return &buffer[3];
-		}
-
-	      return &buffer[0];
-	    }
-	}
-    }
-}
-
-/* send the packet in buffer.  */
-
-static void 
-putpacket (unsigned char *buffer)
-{
-  unsigned char checksum;
-  int  count;
-  char ch;
-
-  /*  $<packet info>#<checksum>. */
-  do {
-    putDebugChar('$');
-    checksum = 0;
-    count    = 0;
-
-    while (ch=buffer[count]) {
-      putDebugChar(ch);
-      checksum += ch;
-      count += 1;
-    }
-    putDebugChar('#');
-    putDebugChar(hexchars[checksum >> 4]);
-    putDebugChar(hexchars[checksum % 16]);
-  } while (getDebugChar() != '+');
-}
-
-/* Address of a routine to RTE to if we get a memory fault.  */
-
-static void (*volatile mem_fault_routine)() = 0;
-
-static void
-set_mem_err (void)
-{
-  mem_err = 1;
-}
-
-/* Check the address for safe access ranges.  As currently defined,
-   this routine will reject the "expansion bus" address range(s).
-   To make those ranges useable, someone must implement code to detect
-   whether there's anything connected to the expansion bus. */
-
-static int
-mem_safe (unsigned char *addr)
-{
-#define BAD_RANGE_ONE_START	((unsigned char *) 0x600000)
-#define BAD_RANGE_ONE_END	((unsigned char *) 0xa00000)
-#define BAD_RANGE_TWO_START	((unsigned char *) 0xff680000)
-#define BAD_RANGE_TWO_END	((unsigned char *) 0xff800000)
-
-  if (addr < BAD_RANGE_ONE_START)	return 1;	/* safe */
-  if (addr < BAD_RANGE_ONE_END)		return 0;	/* unsafe */
-  if (addr < BAD_RANGE_TWO_START)	return 1;	/* safe */
-  if (addr < BAD_RANGE_TWO_END)		return 0;	/* unsafe */
-}
-
-/* These are separate functions so that they are so short and sweet
-   that the compiler won't save any registers (if there is a fault
-   to mem_fault, they won't get restored, so there better not be any
-   saved).  */
-static int
-get_char (unsigned char *addr)
-{
-#if 1
-  if (mem_fault_routine && !mem_safe(addr))
-    {
-      mem_fault_routine ();
-      return 0;
-    }
-#endif
-  return *addr;
-}
-
-static void
-set_char (unsigned char *addr, unsigned char val)
-{
-#if 1
-  if (mem_fault_routine && !mem_safe (addr))
-    {
-      mem_fault_routine ();
-      return;
-    }
-#endif
-  *addr = val;
-}
-
-/* Convert the memory pointed to by mem into hex, placing result in buf.
-   Return a pointer to the last char put in buf (null).
-   If MAY_FAULT is non-zero, then we should set mem_err in response to
-   a fault; if zero treat a fault like any other fault in the stub.  */
-
-static unsigned char *
-mem2hex (unsigned char *mem, unsigned char *buf, int count, int may_fault)
-{
-  int i;
-  unsigned char ch;
-
-  if (may_fault)
-    mem_fault_routine = set_mem_err;
-  for (i=0;i<count;i++) {
-    ch = get_char (mem++);
-    if (may_fault && mem_err)
-      return (buf);
-    *buf++ = hexchars[ch >> 4];
-    *buf++ = hexchars[ch % 16];
-  }
-  *buf = 0;
-  if (may_fault)
-    mem_fault_routine = 0;
-  return(buf);
-}
-
-/* Convert the hex array pointed to by buf into binary to be placed in mem.
-   Return a pointer to the character AFTER the last byte written. */
-
-static unsigned char* 
-hex2mem (unsigned char *buf, unsigned char *mem, int count, int may_fault)
-{
-  int i;
-  unsigned char ch;
-
-  if (may_fault)
-    mem_fault_routine = set_mem_err;
-  for (i=0;i<count;i++) {
-    ch = hex(*buf++) << 4;
-    ch = ch + hex(*buf++);
-    set_char (mem++, ch);
-    if (may_fault && mem_err)
-      return (mem);
-  }
-  if (may_fault)
-    mem_fault_routine = 0;
-  return(mem);
-}
-
-/* Convert the binary stream in BUF to memory.
-
-   Gdb will escape $, #, and the escape char (0x7d).
-   COUNT is the total number of bytes to write into
-   memory. */
-static unsigned char *
-bin2mem (unsigned char *buf, unsigned char *mem, int count, int may_fault)
-{
-  int i;
-  unsigned char ch;
-
-  if (may_fault)
-    mem_fault_routine = set_mem_err;
-  for (i = 0; i < count; i++)
-    {
-      /* Check for any escaped characters. Be paranoid and
-         only unescape chars that should be escaped. */
-      if (*buf == 0x7d)
-        {
-          switch (*(buf+1))
-            {
-            case 0x3:  /* # */
-            case 0x4:  /* $ */
-            case 0x5d: /* escape char */
-              buf++;
-              *buf |= 0x20;
-              break;
-            default:
-              /* nothing */
-              break;
-            }
-        }
-
-      set_char (mem++, *buf++);
-
-      if (may_fault && mem_err)
-        return mem;
-    }
-
-  if (may_fault)
-    mem_fault_routine = 0;
-  return mem;
-}
-
-/* this function takes the m32r exception vector and attempts to
-   translate this number into a unix compatible signal value */
-
-static int 
-computeSignal (int exceptionVector)
-{
-  int sigval;
-  switch (exceptionVector) {
-    case 0  : sigval = 23; break; /* I/O trap                    */
-    case 1  : sigval = 5;  break; /* breakpoint                  */
-    case 2  : sigval = 5;  break; /* breakpoint                  */
-    case 3  : sigval = 5;  break; /* breakpoint                  */
-    case 4  : sigval = 5;  break; /* breakpoint                  */
-    case 5  : sigval = 5;  break; /* breakpoint                  */
-    case 6  : sigval = 5;  break; /* breakpoint                  */
-    case 7  : sigval = 5;  break; /* breakpoint                  */
-    case 8  : sigval = 5;  break; /* breakpoint                  */
-    case 9  : sigval = 5;  break; /* breakpoint                  */
-    case 10 : sigval = 5;  break; /* breakpoint                  */
-    case 11 : sigval = 5;  break; /* breakpoint                  */
-    case 12 : sigval = 5;  break; /* breakpoint                  */
-    case 13 : sigval = 5;  break; /* breakpoint                  */
-    case 14 : sigval = 5;  break; /* breakpoint                  */
-    case 15 : sigval = 5;  break; /* breakpoint                  */
-    case 16 : sigval = 10; break; /* BUS ERROR (alignment)       */
-    case 17 : sigval = 2;  break; /* INTerrupt                   */
-    default : sigval = 7;  break; /* "software generated"        */
-  }
-  return (sigval);
-}
-
-/**********************************************/
-/* WHILE WE FIND NICE HEX CHARS, BUILD AN INT */
-/* RETURN NUMBER OF CHARS PROCESSED           */
-/**********************************************/
-static int 
-hexToInt (unsigned char **ptr, int *intValue)
-{
-  int numChars = 0;
-  int hexValue;
-
-  *intValue = 0;
-  while (**ptr)
-    {
-      hexValue = hex(**ptr);
-      if (hexValue >=0)
-        {
-	  *intValue = (*intValue <<4) | hexValue;
-	  numChars ++;
-        }
-      else
-	break;
-      (*ptr)++;
-    }
-  return (numChars);
-}
-
-/*
-  Table of branch instructions:
-  
-  10B6		RTE	return from trap or exception
-  1FCr		JMP	jump
-  1ECr		JL	jump and link
-  7Fxx		BRA	branch
-  FFxxxxxx	BRA	branch (long)
-  B09rxxxx	BNEZ	branch not-equal-zero
-  Br1rxxxx	BNE	branch not-equal
-  7Dxx		BNC	branch not-condition
-  FDxxxxxx	BNC	branch not-condition (long)
-  B0Arxxxx	BLTZ	branch less-than-zero
-  B0Crxxxx	BLEZ	branch less-equal-zero
-  7Exx		BL	branch and link
-  FExxxxxx	BL	branch and link (long)
-  B0Drxxxx	BGTZ	branch greater-than-zero
-  B0Brxxxx	BGEZ	branch greater-equal-zero
-  B08rxxxx	BEQZ	branch equal-zero
-  Br0rxxxx	BEQ	branch equal
-  7Cxx		BC	branch condition
-  FCxxxxxx	BC	branch condition (long)
-  */
-
-static int 
-isShortBranch (unsigned char *instr)
-{
-  unsigned char instr0 = instr[0] & 0x7F;		/* mask off high bit */
-
-  if (instr0 == 0x10 && instr[1] == 0xB6)	/* RTE */
-    return 1;		/* return from trap or exception */
-
-  if (instr0 == 0x1E || instr0 == 0x1F)		/* JL or JMP */
-    if ((instr[1] & 0xF0) == 0xC0)
-      return 2;					/* jump thru a register */
-
-  if (instr0 == 0x7C || instr0 == 0x7D || 	/* BC, BNC, BL, BRA */
-      instr0 == 0x7E || instr0 == 0x7F)
-    return 3;					/* eight bit PC offset */
-
-  return 0;
-}
-
-static int
-isLongBranch (unsigned char *instr)
-{
-  if (instr[0] == 0xFC || instr[0] == 0xFD ||	/* BRA, BNC, BL, BC */
-      instr[0] == 0xFE || instr[0] == 0xFF)	/* 24 bit relative */
-    return 4;
-  if ((instr[0] & 0xF0) == 0xB0)		/* 16 bit relative */
-    {
-      if ((instr[1] & 0xF0) == 0x00 || 		/* BNE, BEQ */
-	  (instr[1] & 0xF0) == 0x10)
-	return 5;
-      if (instr[0] == 0xB0)	/* BNEZ, BLTZ, BLEZ, BGTZ, BGEZ, BEQZ */
-	if ((instr[1] & 0xF0) == 0x80 || (instr[1] & 0xF0) == 0x90 || 
-	    (instr[1] & 0xF0) == 0xA0 || (instr[1] & 0xF0) == 0xB0 ||
-	    (instr[1] & 0xF0) == 0xC0 || (instr[1] & 0xF0) == 0xD0)
-	  return 6;
-    }
-  return 0;
-}
-
-/* if address is NOT on a 4-byte boundary, or high-bit of instr is zero, 
-   then it's a 2-byte instruction, else it's a 4-byte instruction.  */
-
-#define INSTRUCTION_SIZE(addr) \
-    ((((int) addr & 2) || (((unsigned char *) addr)[0] & 0x80) == 0) ? 2 : 4)
-
-static int
-isBranch (unsigned char *instr)
-{
-  if (INSTRUCTION_SIZE(instr) == 2)
-    return isShortBranch(instr);
-  else
-    return isLongBranch(instr);
-}
-
-static int
-willBranch (unsigned char *instr, int branchCode)
-{
-  switch (branchCode) 
-    {
-    case 0:	return 0;	/* not a branch */
-    case 1:	return 1;	/* RTE */
-    case 2:	return 1;	/* JL or JMP    */
-    case 3:			/* BC, BNC, BL, BRA (short) */
-    case 4:			/* BC, BNC, BL, BRA (long) */
-      switch (instr[0] & 0x0F) 
-	{
-	case 0xC:		/* Branch if Condition Register */
-	  return (registers[CBR] != 0);
-	case 0xD:		/* Branch if NOT Condition Register */
-	  return (registers[CBR] == 0);
-	case 0xE:		/* Branch and Link */
-	case 0xF:		/* Branch (unconditional) */
-	  return 1;
-	default:		/* oops? */
-	  return 0;
-	}
-    case 5: 			/* BNE, BEQ */
-      switch (instr[1] & 0xF0) 
-	{
-	case 0x00:		/* Branch if r1 equal to r2 */
-	  return (registers[instr[0] & 0x0F] == registers[instr[1] & 0x0F]);
-	case 0x10:		/* Branch if r1 NOT equal to r2 */
-	  return (registers[instr[0] & 0x0F] != registers[instr[1] & 0x0F]);
-	default:		/* oops? */
-	  return 0;
-	}
-    case 6: 			/* BNEZ, BLTZ, BLEZ, BGTZ, BGEZ ,BEQZ */
-      switch (instr[1] & 0xF0) 
-	{
-	case 0x80:		/* Branch if reg equal to zero */
-	  return (registers[instr[1] & 0x0F] == 0);
-	case 0x90:		/* Branch if reg NOT equal to zero */
-	  return (registers[instr[1] & 0x0F] != 0);
-	case 0xA0:		/* Branch if reg less than zero */
-	  return (registers[instr[1] & 0x0F] < 0);
-	case 0xB0:		/* Branch if reg greater or equal to zero */
-	  return (registers[instr[1] & 0x0F] >= 0);
-	case 0xC0:		/* Branch if reg less than or equal to zero */
-	  return (registers[instr[1] & 0x0F] <= 0);
-	case 0xD0:		/* Branch if reg greater than zero */
-	  return (registers[instr[1] & 0x0F] > 0);
-	default:		/* oops? */
-	  return 0;
-	}
-    default:			/* oops? */
-      return 0;
-    }
-}
-
-static int 
-branchDestination (unsigned char *instr, int branchCode)
-{ 
-  switch (branchCode) { 
-  default: 
-  case 0:					/* not a branch */ 
-    return 0;
-  case 1:					/* RTE */ 
-    return registers[BPC] & ~3; 		/* pop BPC into PC */
-  case 2: 					/* JL or JMP */ 
-    return registers[instr[1] & 0x0F] & ~3;	/* jump thru a register */ 
-  case 3: 		/* BC, BNC, BL, BRA (short, 8-bit relative offset) */ 
-    return (((int) instr) & ~3) + ((char) instr[1] << 2);
-  case 4: 		/* BC, BNC, BL, BRA (long, 24-bit relative offset) */ 
-    return ((int) instr + 
-	    ((((char) instr[1] << 16) | (instr[2] << 8) | (instr[3])) << 2)); 
-  case 5: 		/* BNE, BEQ (16-bit relative offset) */ 
-  case 6: 		/* BNEZ, BLTZ, BLEZ, BGTZ, BGEZ ,BEQZ (ditto) */ 
-    return ((int) instr + ((((char) instr[2] << 8) | (instr[3])) << 2)); 
-  }
-
-  /* An explanatory note: in the last three return expressions, I have
-     cast the most-significant byte of the return offset to char.
-     What this accomplishes is sign extension.  If the other
-     less-significant bytes were signed as well, they would get sign
-     extended too and, if negative, their leading bits would clobber
-     the bits of the more-significant bytes ahead of them.  There are
-     other ways I could have done this, but sign extension from
-     odd-sized integers is always a pain. */
-}
-
-static void
-branchSideEffects (unsigned char *instr, int branchCode)
-{
-  switch (branchCode)
-    {
-    case 1:			/* RTE */
-      return;			/* I <THINK> this is already handled... */
-    case 2:			/* JL (or JMP) */
-    case 3:			/* BL (or BC, BNC, BRA) */
-    case 4:
-      if ((instr[0] & 0x0F) == 0x0E)		/* branch/jump and link */
-	registers[R14] = (registers[PC] & ~3) + 4;
-      return;
-    default:			/* any other branch has no side effects */
-      return;
-    }
-}
-
-static struct STEPPING_CONTEXT {
-  int stepping;			/* true when we've started a single-step */
-  unsigned long  target_addr;	/* the instr we're trying to execute */
-  unsigned long  target_size;	/* the size of the target instr */
-  unsigned long  noop_addr;	/* where we've inserted a no-op, if any */
-  unsigned long  trap1_addr;	/* the trap following the target instr */
-  unsigned long  trap2_addr;	/* the trap at a branch destination, if any */
-  unsigned short noop_save;	/* instruction overwritten by our no-op */
-  unsigned short trap1_save;	/* instruction overwritten by trap1 */
-  unsigned short trap2_save;	/* instruction overwritten by trap2 */
-  unsigned short continue_p;	/* true if NOT returning to gdb after step */
-} stepping;
-
-/* Function: prepare_to_step
-   Called from handle_exception to prepare the user program to single-step.
-   Places a trap instruction after the target instruction, with special 
-   extra handling for branch instructions and for instructions in the 
-   second half-word of a word.  
-
-   Returns: True  if we should actually execute the instruction; 
-	    False if we are going to emulate executing the instruction,
-	    in which case we simply report to GDB that the instruction 
-	    has already been executed.  */
-
-#define TRAP1  0x10f1;	/* trap #1 instruction */
-#define NOOP   0x7000;  /* noop    instruction */
-
-static unsigned short trap1 = TRAP1;
-static unsigned short noop  = NOOP;
-
-static int
-prepare_to_step(continue_p)
-     int continue_p;	/* if this isn't REALLY a single-step (see below) */
-{
-  unsigned long pc = registers[PC];
-  int branchCode   = isBranch((unsigned char *) pc);
-  unsigned char *p;
-
-  /* zero out the stepping context 
-     (paranoia -- it should already be zeroed) */
-  for (p = (unsigned char *) &stepping;
-       p < ((unsigned char *) &stepping) + sizeof(stepping);
-       p++)
-    *p = 0;
-
-  if (branchCode != 0)			/* next instruction is a branch */
-    {
-      branchSideEffects((unsigned char *) pc, branchCode);
-      if (willBranch((unsigned char *)pc, branchCode))
-	registers[PC] = branchDestination((unsigned char *) pc, branchCode);
-      else
-	registers[PC] = pc + INSTRUCTION_SIZE(pc);
-      return 0;			/* branch "executed" -- just notify GDB */
-    }
-  else if (((int) pc & 2) != 0)		/* "second-slot" instruction */
-    {
-      /* insert no-op before pc */
-      stepping.noop_addr  =  pc - 2;
-      stepping.noop_save  = *(unsigned short *) stepping.noop_addr;
-      *(unsigned short *) stepping.noop_addr  = noop;
-      /* insert trap  after  pc */
-      stepping.trap1_addr =  pc + 2;
-      stepping.trap1_save = *(unsigned short *) stepping.trap1_addr;
-      *(unsigned short *) stepping.trap1_addr = trap1;
-    }
-  else					/* "first-slot" instruction */
-    {
-      /* insert trap  after  pc */
-      stepping.trap1_addr = pc + INSTRUCTION_SIZE(pc);	
-      stepping.trap1_save = *(unsigned short *) stepping.trap1_addr;
-      *(unsigned short *) stepping.trap1_addr = trap1;
-    }
-  /* "continue_p" means that we are actually doing a continue, and not 
-     being requested to single-step by GDB.  Sometimes we have to do
-     one single-step before continuing, because the PC is on a half-word
-     boundary.  There's no way to simply resume at such an address.  */
-  stepping.continue_p = continue_p;
-  stepping.stepping = 1;		/* starting a single-step */
-  return 1;
-}
-
-/* Function: finish_from_step
-   Called from handle_exception to finish up when the user program 
-   returns from a single-step.  Replaces the instructions that had
-   been overwritten by traps or no-ops, 
-
-   Returns: True  if we should notify GDB that the target stopped.
-	    False if we only single-stepped because we had to before we
-	    could continue (ie. we were trying to continue at a 
-	    half-word boundary).  In that case don't notify GDB:
-	    just "continue continuing".  */
-
-static int
-finish_from_step (void)
-{
-  if (stepping.stepping)	/* anything to do? */
-    {
-      int continue_p = stepping.continue_p;
-      unsigned char *p;
-
-      if (stepping.noop_addr)	/* replace instr "under" our no-op */
-	*(unsigned short *) stepping.noop_addr  = stepping.noop_save;
-      if (stepping.trap1_addr)	/* replace instr "under" our trap  */
-	*(unsigned short *) stepping.trap1_addr = stepping.trap1_save;
-      if (stepping.trap2_addr)  /* ditto our other trap, if any    */
-	*(unsigned short *) stepping.trap2_addr = stepping.trap2_save;
-
-      for (p = (unsigned char *) &stepping;	/* zero out the stepping context */
-	   p < ((unsigned char *) &stepping) + sizeof(stepping);
-	   p++)
-	*p = 0;
-
-      return !(continue_p);
-    }
-  else 	/* we didn't single-step, therefore this must be a legitimate stop */
-    return 1;
-}
-
-struct PSWreg {		/* separate out the bit flags in the PSW register */
-  int pad1 : 16;
-  int bsm  : 1;
-  int bie  : 1;
-  int pad2 : 5;
-  int bc   : 1;
-  int sm   : 1;
-  int ie   : 1;
-  int pad3 : 5;
-  int c    : 1;
-} *psw;
-
-/* Upon entry the value for LR to save has been pushed.
-   We unpush that so that the value for the stack pointer saved is correct.
-   Upon entry, all other registers are assumed to have not been modified
-   since the interrupt/trap occured.  */
-
-asm ("
-stash_registers:
-	push r0
-	push r1
-	seth r1, #shigh(registers)
-	add3 r1, r1, #low(registers)
-	pop r0		; r1
-	st r0, @(4,r1)
-	pop r0		; r0
-	st r0, @r1
-	addi r1, #4	; only add 4 as subsequent saves are `pre inc'
-	st r2, @+r1
-	st r3, @+r1
-	st r4, @+r1
-	st r5, @+r1
-	st r6, @+r1
-	st r7, @+r1
-	st r8, @+r1
-	st r9, @+r1
-	st r10, @+r1
-	st r11, @+r1
-	st r12, @+r1
-	st r13, @+r1    ; fp
-	pop r0		; lr (r14)
-	st r0, @+r1
-	st sp, @+r1	; sp contains right value at this point
-	mvfc r0, cr0
-	st r0, @+r1	; cr0 == PSW
-	mvfc r0, cr1
-	st r0, @+r1	; cr1 == CBR
-	mvfc r0, cr2
-	st r0, @+r1	; cr2 == SPI
-	mvfc r0, cr3
-	st r0, @+r1	; cr3 == SPU
-	mvfc r0, cr6
-	st r0, @+r1	; cr6 == BPC
-	st r0, @+r1	; PC  == BPC
-	mvfaclo r0
-	st r0, @+r1	; ACCL
-	mvfachi r0
-	st r0, @+r1	; ACCH
-	jmp lr");
-
-/* C routine to clean up what stash_registers did.
-   It is called after calling stash_registers.
-   This is separate from stash_registers as we want to do this in C
-   but doing stash_registers in C isn't straightforward.  */
-
-static void
-cleanup_stash (void)
-{
-  psw = (struct PSWreg *) &registers[PSW];	/* fields of PSW register */
-  psw->sm = psw->bsm;		/* fix up pre-trap values of psw fields */
-  psw->ie = psw->bie;
-  psw->c  = psw->bc;
-  registers[CBR] = psw->bc;		/* fix up pre-trap "C" register */
-
-#if 0 /* FIXME: Was in previous version.  Necessary?
-	 (Remember that we use the "rte" insn to return from the
-	 trap/interrupt so the values of bsm, bie, bc are important.  */
-  psw->bsm = psw->bie = psw->bc = 0;	/* zero post-trap values */
-#endif
-
-  /* FIXME: Copied from previous version.  This can probably be deleted
-     since methinks stash_registers has already done this.  */
-  registers[PC] = registers[BPC];	/* pre-trap PC */
-
-  /* FIXME: Copied from previous version.  Necessary?  */
-  if (psw->sm)			/* copy R15 into (psw->sm ? SPU : SPI) */
-    registers[SPU] = registers[R15];
-  else
-    registers[SPI] = registers[R15];
-}
-
-asm ("
-restore_and_return:
-	seth r0, #shigh(registers+8)
-	add3 r0, r0, #low(registers+8)
-	ld r2, @r0+	; restore r2
-	ld r3, @r0+	; restore r3
-	ld r4, @r0+	; restore r4
-	ld r5, @r0+	; restore r5
-	ld r6, @r0+	; restore r6
-	ld r7, @r0+	; restore r7
-	ld r8, @r0+	; restore r8
-	ld r9, @r0+	; restore r9
-	ld r10, @r0+	; restore r10
-	ld r11, @r0+	; restore r11
-	ld r12, @r0+	; restore r12
-	ld r13, @r0+	; restore r13
-	ld r14, @r0+	; restore r14
-	ld r15, @r0+	; restore r15
-	addi r0, #4	; don't restore PSW (rte will do it)
-	ld r1, @r0+	; restore cr1 == CBR (no-op, because it's read only)
-	mvtc r1, cr1
-	ld r1, @r0+	; restore cr2 == SPI
-	mvtc r1, cr2
-	ld r1, @r0+	; restore cr3 == SPU
-	mvtc r1, cr3
-	addi r0, #4	; skip BPC
-	ld r1, @r0+	; restore cr6 (BPC) == PC
-	mvtc r1, cr6
-	ld r1, @r0+	; restore ACCL
-	mvtaclo r1
-	ld r1, @r0+	; restore ACCH
-	mvtachi r1
-	seth r0, #shigh(registers)
-	add3 r0, r0, #low(registers)
-	ld r1, @(4,r0)	; restore r1
-	ld r0, @r0	; restore r0
-	rte");
-
-/* General trap handler, called after the registers have been stashed.
-   NUM is the trap/exception number.  */
-
-static void
-process_exception (int num)
-{
-  cleanup_stash ();
-  asm volatile ("
-	seth r1, #shigh(stackPtr)
-	add3 r1, r1, #low(stackPtr)
-	ld r15, @r1		; setup local stack (protect user stack)
-	mv r0, %0
-	bl handle_exception
-	bl restore_and_return"
-		: : "r" (num) : "r0", "r1");
-}
-
-void _catchException0 ();
-
-asm ("
-_catchException0:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #0
-	bl process_exception");
-
-void _catchException1 ();
-
-asm ("
-_catchException1:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	bl cleanup_stash
-	seth r1, #shigh(stackPtr)
-	add3 r1, r1, #low(stackPtr)
-	ld r15, @r1		; setup local stack (protect user stack)
-	seth r1, #shigh(registers + 21*4) ; PC
-	add3 r1, r1, #low(registers + 21*4)
-	ld r0, @r1
-	addi r0, #-4		; back up PC for breakpoint trap.
-	st r0, @r1		; FIXME: what about bp in right slot?
-	ldi r0, #1
-	bl handle_exception
-	bl restore_and_return");
-
-void _catchException2 ();
-
-asm ("
-_catchException2:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #2
-	bl process_exception");
-
-void _catchException3 ();
-
-asm ("
-_catchException3:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #3
-	bl process_exception");
-
-void _catchException4 ();
-
-asm ("
-_catchException4:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #4
-	bl process_exception");
-
-void _catchException5 ();
-
-asm ("
-_catchException5:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #5
-	bl process_exception");
-
-void _catchException6 ();
-
-asm ("
-_catchException6:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #6
-	bl process_exception");
-
-void _catchException7 ();
-
-asm ("
-_catchException7:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #7
-	bl process_exception");
-
-void _catchException8 ();
-
-asm ("
-_catchException8:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #8
-	bl process_exception");
-
-void _catchException9 ();
-
-asm ("
-_catchException9:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #9
-	bl process_exception");
-
-void _catchException10 ();
-
-asm ("
-_catchException10:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #10
-	bl process_exception");
-
-void _catchException11 ();
-
-asm ("
-_catchException11:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #11
-	bl process_exception");
-
-void _catchException12 ();
-
-asm ("
-_catchException12:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #12
-	bl process_exception");
-
-void _catchException13 ();
-
-asm ("
-_catchException13:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #13
-	bl process_exception");
-
-void _catchException14 ();
-
-asm ("
-_catchException14:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #14
-	bl process_exception");
-
-void _catchException15 ();
-
-asm ("
-_catchException15:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #15
-	bl process_exception");
-
-void _catchException16 ();
-
-asm ("
-_catchException16:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #16
-	bl process_exception");
-
-void _catchException17 ();
-
-asm ("
-_catchException17:
-	push lr
-	bl stash_registers
-	; Note that at this point the pushed value of `lr' has been popped
-	ldi r0, #17
-	bl process_exception");
-
-
-/* this function is used to set up exception handlers for tracing and
-   breakpoints */
-void 
-set_debug_traps (void)
-{
-  /*  extern void remcomHandler(); */
-  int i;
-
-  for (i = 0; i < 18; i++)		/* keep a copy of old vectors */
-    if (save_vectors[i] == 0)		/* only copy them the first time */
-      save_vectors[i] = getExceptionHandler (i);
-
-  stackPtr  = &remcomStack[STACKSIZE/sizeof(int) - 1];
-
-  exceptionHandler (0, _catchException0);
-  exceptionHandler (1, _catchException1);
-  exceptionHandler (2, _catchException2);
-  exceptionHandler (3, _catchException3);
-  exceptionHandler (4, _catchException4);
-  exceptionHandler (5, _catchException5);
-  exceptionHandler (6, _catchException6);
-  exceptionHandler (7, _catchException7);
-  exceptionHandler (8, _catchException8);
-  exceptionHandler (9, _catchException9);
-  exceptionHandler (10, _catchException10);
-  exceptionHandler (11, _catchException11);
-  exceptionHandler (12, _catchException12);
-  exceptionHandler (13, _catchException13);
-  exceptionHandler (14, _catchException14);
-  exceptionHandler (15, _catchException15);
-  exceptionHandler (16, _catchException16);
-  /*  exceptionHandler (17, _catchException17); */
-
-  initialized = 1;
-}
-
-/* This function will generate a breakpoint exception.  It is used at the
-   beginning of a program to sync up with a debugger and can be used
-   otherwise as a quick means to stop program execution and "break" into
-   the debugger. */
-
-#define BREAKPOINT() asm volatile ("	trap #2");
-
-void 
-breakpoint (void)
-{
-  if (initialized)
-    BREAKPOINT();
-}
-
-/* STDOUT section:
-   Stuff pertaining to simulating stdout by sending chars to gdb to be echoed.
-   Functions: gdb_putchar(char ch)
-              gdb_puts(char *str)
-              gdb_write(char *str, int len)
-              gdb_error(char *format, char *parm)
-	      */
- 
-/* Function: gdb_putchar(int)
-   Make gdb write a char to stdout.
-   Returns: the char */
- 
-static int
-gdb_putchar (int ch)
-{
-  char buf[4];
- 
-  buf[0] = 'O';
-  buf[1] = hexchars[ch >> 4];
-  buf[2] = hexchars[ch & 0x0F];
-  buf[3] = 0;
-  putpacket(buf);
-  return ch;
-}
- 
-/* Function: gdb_write(char *, int)
-   Make gdb write n bytes to stdout (not assumed to be null-terminated).
-   Returns: number of bytes written */
- 
-static int
-gdb_write (char *data, int len)
-{
-  char *buf, *cpy;
-  int i;
- 
-  buf = remcomOutBuffer;
-  buf[0] = 'O';
-  i = 0;
-  while (i < len)
-    {
-      for (cpy = buf+1; 
-	   i < len && cpy < buf + sizeof(remcomOutBuffer) - 3; 
-	   i++)
-	{
-	  *cpy++ = hexchars[data[i] >> 4];
-	  *cpy++ = hexchars[data[i] & 0x0F];
-	}
-      *cpy = 0;
-      putpacket(buf);
-    }
-  return len;
-}
-
-/* Function: gdb_puts(char *)
-   Make gdb write a null-terminated string to stdout.
-   Returns: the length of the string */
- 
-static int
-gdb_puts (char *str)
-{
-  return gdb_write(str, strlen(str));
-}
- 
-/* Function: gdb_error(char *, char *)
-   Send an error message to gdb's stdout.
-   First string may have 1 (one) optional "%s" in it, which
-   will cause the optional second string to be inserted.  */
- 
-static void
-gdb_error (char *format, char *parm)
-{
-  char buf[400], *cpy;
-  int len;
- 
-  if (remote_debug)
-    {
-      if (format && *format)
-	len = strlen(format);
-      else
-	return;             /* empty input */
-
-      if (parm && *parm)
-	len += strlen(parm);
- 
-      for (cpy = buf; *format; )
-	{
-	  if (format[0] == '%' && format[1] == 's') /* include second string */
-	    {
-	      format += 2;          /* advance two chars instead of just one */
-	      while (parm && *parm)
-		*cpy++ = *parm++;
-	    }
-	  else
-	    *cpy++ = *format++;
-	}
-      *cpy = '\0';
-      gdb_puts(buf);
-    }
-}
- 
-static unsigned char *
-strcpy (unsigned char *dest, const unsigned char *src)
-{
-  unsigned char *ret = dest;
-
-  if (dest && src)
-    {
-      while (*src)
-	*dest++ = *src++;
-      *dest = 0;
-    }
-  return ret;
-}
-
-static int
-strlen (const unsigned char *src)
-{
-  int ret;
-
-  for (ret = 0; *src; src++)
-    ret++;
-
-  return ret;
-}
-
-#if 0
-void exit (code)
-     int code;
-{
-  _exit (code);
-}
-
-int atexit (void *p)
-{
-  return 0;
-}
-
-void abort (void)
-{
-  _exit (1);
-}
-#endif
+// OBSOLETE /****************************************************************************
+// OBSOLETE 
+// OBSOLETE 		THIS SOFTWARE IS NOT COPYRIGHTED
+// OBSOLETE 
+// OBSOLETE    HP offers the following for use in the public domain.  HP makes no
+// OBSOLETE    warranty with regard to the software or it's performance and the
+// OBSOLETE    user accepts the software "AS IS" with all faults.
+// OBSOLETE 
+// OBSOLETE    HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
+// OBSOLETE    TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// OBSOLETE    OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+// OBSOLETE 
+// OBSOLETE ****************************************************************************/
+// OBSOLETE 
+// OBSOLETE /****************************************************************************
+// OBSOLETE  *  Header: remcom.c,v 1.34 91/03/09 12:29:49 glenne Exp $
+// OBSOLETE  *
+// OBSOLETE  *  Module name: remcom.c $
+// OBSOLETE  *  Revision: 1.34 $
+// OBSOLETE  *  Date: 91/03/09 12:29:49 $
+// OBSOLETE  *  Contributor:     Lake Stevens Instrument Division$
+// OBSOLETE  *
+// OBSOLETE  *  Description:     low level support for gdb debugger. $
+// OBSOLETE  *
+// OBSOLETE  *  Considerations:  only works on target hardware $
+// OBSOLETE  *
+// OBSOLETE  *  Written by:      Glenn Engel $
+// OBSOLETE  *  ModuleState:     Experimental $
+// OBSOLETE  *
+// OBSOLETE  *  NOTES:           See Below $
+// OBSOLETE  *
+// OBSOLETE  *  Modified for M32R by Michael Snyder, Cygnus Support.
+// OBSOLETE  *
+// OBSOLETE  *  To enable debugger support, two things need to happen.  One, a
+// OBSOLETE  *  call to set_debug_traps() is necessary in order to allow any breakpoints
+// OBSOLETE  *  or error conditions to be properly intercepted and reported to gdb.
+// OBSOLETE  *  Two, a breakpoint needs to be generated to begin communication.  This
+// OBSOLETE  *  is most easily accomplished by a call to breakpoint().  Breakpoint()
+// OBSOLETE  *  simulates a breakpoint by executing a trap #1.
+// OBSOLETE  *
+// OBSOLETE  *  The external function exceptionHandler() is
+// OBSOLETE  *  used to attach a specific handler to a specific M32R vector number.
+// OBSOLETE  *  It should use the same privilege level it runs at.  It should
+// OBSOLETE  *  install it as an interrupt gate so that interrupts are masked
+// OBSOLETE  *  while the handler runs.
+// OBSOLETE  *
+// OBSOLETE  *  Because gdb will sometimes write to the stack area to execute function
+// OBSOLETE  *  calls, this program cannot rely on using the supervisor stack so it
+// OBSOLETE  *  uses it's own stack area reserved in the int array remcomStack.
+// OBSOLETE  *
+// OBSOLETE  *************
+// OBSOLETE  *
+// OBSOLETE  *    The following gdb commands are supported:
+// OBSOLETE  *
+// OBSOLETE  * command          function                               Return value
+// OBSOLETE  *
+// OBSOLETE  *    g             return the value of the CPU registers  hex data or ENN
+// OBSOLETE  *    G             set the value of the CPU registers     OK or ENN
+// OBSOLETE  *
+// OBSOLETE  *    mAA..AA,LLLL  Read LLLL bytes at address AA..AA      hex data or ENN
+// OBSOLETE  *    MAA..AA,LLLL: Write LLLL bytes at address AA.AA      OK or ENN
+// OBSOLETE  *    XAA..AA,LLLL: Write LLLL binary bytes at address     OK or ENN
+// OBSOLETE  *                  AA..AA
+// OBSOLETE  *
+// OBSOLETE  *    c             Resume at current address              SNN   ( signal NN)
+// OBSOLETE  *    cAA..AA       Continue at address AA..AA             SNN
+// OBSOLETE  *
+// OBSOLETE  *    s             Step one instruction                   SNN
+// OBSOLETE  *    sAA..AA       Step one instruction from AA..AA       SNN
+// OBSOLETE  *
+// OBSOLETE  *    k             kill
+// OBSOLETE  *
+// OBSOLETE  *    ?             What was the last sigval ?             SNN   (signal NN)
+// OBSOLETE  *
+// OBSOLETE  * All commands and responses are sent with a packet which includes a
+// OBSOLETE  * checksum.  A packet consists of
+// OBSOLETE  *
+// OBSOLETE  * $<packet info>#<checksum>.
+// OBSOLETE  *
+// OBSOLETE  * where
+// OBSOLETE  * <packet info> :: <characters representing the command or response>
+// OBSOLETE  * <checksum>    :: <two hex digits computed as modulo 256 sum of <packetinfo>>
+// OBSOLETE  *
+// OBSOLETE  * When a packet is received, it is first acknowledged with either '+' or '-'.
+// OBSOLETE  * '+' indicates a successful transfer.  '-' indicates a failed transfer.
+// OBSOLETE  *
+// OBSOLETE  * Example:
+// OBSOLETE  *
+// OBSOLETE  * Host:                  Reply:
+// OBSOLETE  * $m0,10#2a               +$00010203040506070809101112131415#42
+// OBSOLETE  *
+// OBSOLETE  ****************************************************************************/
+// OBSOLETE 
+// OBSOLETE 
+// OBSOLETE /************************************************************************
+// OBSOLETE  *
+// OBSOLETE  * external low-level support routines
+// OBSOLETE  */
+// OBSOLETE extern void putDebugChar();	/* write a single character      */
+// OBSOLETE extern int getDebugChar();	/* read and return a single char */
+// OBSOLETE extern void exceptionHandler();	/* assign an exception handler   */
+// OBSOLETE 
+// OBSOLETE /*****************************************************************************
+// OBSOLETE  * BUFMAX defines the maximum number of characters in inbound/outbound buffers
+// OBSOLETE  * at least NUMREGBYTES*2 are needed for register packets 
+// OBSOLETE  */
+// OBSOLETE #define BUFMAX 400
+// OBSOLETE 
+// OBSOLETE static char initialized;  /* boolean flag. != 0 means we've been initialized */
+// OBSOLETE 
+// OBSOLETE int     remote_debug;
+// OBSOLETE /*  debug >  0 prints ill-formed commands in valid packets & checksum errors */
+// OBSOLETE 
+// OBSOLETE static const unsigned char hexchars[]="0123456789abcdef";
+// OBSOLETE 
+// OBSOLETE #define NUMREGS 24
+// OBSOLETE 
+// OBSOLETE /* Number of bytes of registers.  */
+// OBSOLETE #define NUMREGBYTES (NUMREGS * 4)
+// OBSOLETE enum regnames { R0,  R1,  R2,  R3,  R4,  R5,  R6,   R7,
+// OBSOLETE 		R8,  R9,  R10, R11, R12, R13, R14,  R15,
+// OBSOLETE 		PSW, CBR, SPI, SPU, BPC, PC,  ACCL, ACCH };
+// OBSOLETE 
+// OBSOLETE enum SYS_calls {
+// OBSOLETE   	SYS_null, 
+// OBSOLETE 	SYS_exit,
+// OBSOLETE 	SYS_open,
+// OBSOLETE 	SYS_close,
+// OBSOLETE 	SYS_read,
+// OBSOLETE 	SYS_write,
+// OBSOLETE 	SYS_lseek,
+// OBSOLETE 	SYS_unlink,
+// OBSOLETE 	SYS_getpid,
+// OBSOLETE 	SYS_kill,
+// OBSOLETE 	SYS_fstat,
+// OBSOLETE 	SYS_sbrk,
+// OBSOLETE 	SYS_fork,
+// OBSOLETE 	SYS_execve,
+// OBSOLETE 	SYS_wait4,
+// OBSOLETE 	SYS_link,
+// OBSOLETE 	SYS_chdir,
+// OBSOLETE 	SYS_stat,
+// OBSOLETE 	SYS_utime,
+// OBSOLETE 	SYS_chown,
+// OBSOLETE 	SYS_chmod,
+// OBSOLETE 	SYS_time,
+// OBSOLETE 	SYS_pipe };
+// OBSOLETE 
+// OBSOLETE static int registers[NUMREGS];
+// OBSOLETE 
+// OBSOLETE #define STACKSIZE 8096
+// OBSOLETE static unsigned char remcomInBuffer[BUFMAX];
+// OBSOLETE static unsigned char remcomOutBuffer[BUFMAX];
+// OBSOLETE static int  remcomStack[STACKSIZE/sizeof(int)];
+// OBSOLETE static int*  stackPtr = &remcomStack[STACKSIZE/sizeof(int) - 1];
+// OBSOLETE 
+// OBSOLETE static unsigned int save_vectors[18];	/* previous exception vectors */
+// OBSOLETE 
+// OBSOLETE /* Indicate to caller of mem2hex or hex2mem that there has been an error. */
+// OBSOLETE static volatile int mem_err = 0;
+// OBSOLETE 
+// OBSOLETE /* Store the vector number here (since GDB only gets the signal
+// OBSOLETE    number through the usual means, and that's not very specific).  */
+// OBSOLETE int gdb_m32r_vector = -1;
+// OBSOLETE 
+// OBSOLETE #if 0
+// OBSOLETE #include "syscall.h" /* for SYS_exit, SYS_write etc. */
+// OBSOLETE #endif
+// OBSOLETE 
+// OBSOLETE /* Global entry points:
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE extern void handle_exception(int);
+// OBSOLETE extern void set_debug_traps(void);
+// OBSOLETE extern void breakpoint(void);
+// OBSOLETE 
+// OBSOLETE /* Local functions:
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE static int  computeSignal(int);
+// OBSOLETE static void putpacket(unsigned char *);
+// OBSOLETE static unsigned char *getpacket(void);
+// OBSOLETE 
+// OBSOLETE static unsigned char *mem2hex(unsigned char *, unsigned char *, int, int);
+// OBSOLETE static unsigned char *hex2mem(unsigned char *, unsigned char *, int, int);
+// OBSOLETE static int  hexToInt(unsigned char **, int *);
+// OBSOLETE static unsigned char *bin2mem(unsigned char *, unsigned char *, int, int);
+// OBSOLETE static void stash_registers(void);
+// OBSOLETE static void restore_registers(void);
+// OBSOLETE static int  prepare_to_step(int);
+// OBSOLETE static int  finish_from_step(void);
+// OBSOLETE static unsigned long crc32 (unsigned char *, int, unsigned long);
+// OBSOLETE 
+// OBSOLETE static void gdb_error(char *, char *);
+// OBSOLETE static int  gdb_putchar(int), gdb_puts(char *), gdb_write(char *, int);
+// OBSOLETE 
+// OBSOLETE static unsigned char *strcpy (unsigned char *, const unsigned char *);
+// OBSOLETE static int   strlen (const unsigned char *);
+// OBSOLETE 
+// OBSOLETE /*
+// OBSOLETE  * This function does all command procesing for interfacing to gdb.
+// OBSOLETE  */
+// OBSOLETE 
+// OBSOLETE void 
+// OBSOLETE handle_exception(int exceptionVector)
+// OBSOLETE {
+// OBSOLETE   int    sigval, stepping;
+// OBSOLETE   int    addr, length, i;
+// OBSOLETE   unsigned char * ptr;
+// OBSOLETE   unsigned char   buf[16];
+// OBSOLETE   int binary;
+// OBSOLETE 
+// OBSOLETE   /* Do not call finish_from_step() if this is not a trap #1
+// OBSOLETE    * (breakpoint trap).  Without this check, the finish_from_step()
+// OBSOLETE    * might interpret a system call trap as a single step trap.  This
+// OBSOLETE    * can happen if: the stub receives 's' and exits, but an interrupt
+// OBSOLETE    * was pending; the interrupt is now handled and causes the stub to
+// OBSOLETE    * be reentered because some function makes a system call.  
+// OBSOLETE    */
+// OBSOLETE   if (exceptionVector == 1)	/* Trap exception? */
+// OBSOLETE     if (!finish_from_step())	/* Go see if stepping state needs update. */
+// OBSOLETE       return;		/* "false step": let the target continue */
+// OBSOLETE 
+// OBSOLETE   gdb_m32r_vector = exceptionVector;
+// OBSOLETE 
+// OBSOLETE   if (remote_debug)
+// OBSOLETE     {
+// OBSOLETE       mem2hex((unsigned char *) &exceptionVector, buf, 4, 0);
+// OBSOLETE       gdb_error("Handle exception %s, ", buf);
+// OBSOLETE       mem2hex((unsigned char *) &registers[PC], buf, 4, 0);
+// OBSOLETE       gdb_error("PC == 0x%s\n", buf);
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   /* reply to host that an exception has occurred */
+// OBSOLETE   sigval = computeSignal( exceptionVector );
+// OBSOLETE 
+// OBSOLETE   ptr = remcomOutBuffer;
+// OBSOLETE  
+// OBSOLETE   *ptr++ = 'T';         /* notify gdb with signo, PC, FP and SP */
+// OBSOLETE   *ptr++ = hexchars[sigval >> 4];
+// OBSOLETE   *ptr++ = hexchars[sigval & 0xf];
+// OBSOLETE  
+// OBSOLETE   *ptr++ = hexchars[PC >> 4];
+// OBSOLETE   *ptr++ = hexchars[PC & 0xf];
+// OBSOLETE   *ptr++ = ':';
+// OBSOLETE   ptr = mem2hex((unsigned char *)&registers[PC], ptr, 4, 0);     /* PC */
+// OBSOLETE   *ptr++ = ';';
+// OBSOLETE  
+// OBSOLETE   *ptr++ = hexchars[R13 >> 4];
+// OBSOLETE   *ptr++ = hexchars[R13 & 0xf];
+// OBSOLETE   *ptr++ = ':';
+// OBSOLETE   ptr = mem2hex((unsigned char *)&registers[R13], ptr, 4, 0);    /* FP */
+// OBSOLETE   *ptr++ = ';';
+// OBSOLETE  
+// OBSOLETE   *ptr++ = hexchars[R15 >> 4];
+// OBSOLETE   *ptr++ = hexchars[R15 & 0xf];
+// OBSOLETE   *ptr++ = ':';
+// OBSOLETE   ptr = mem2hex((unsigned char *)&registers[R15], ptr, 4, 0);    /* SP */
+// OBSOLETE   *ptr++ = ';';
+// OBSOLETE   *ptr++ = 0;
+// OBSOLETE  
+// OBSOLETE   if (exceptionVector == 0)     /* simulated SYS call stuff */
+// OBSOLETE     {
+// OBSOLETE       mem2hex((unsigned char *) &registers[PC], buf, 4, 0);
+// OBSOLETE       switch (registers[R0]) {
+// OBSOLETE       case SYS_exit:
+// OBSOLETE 	gdb_error("Target program has exited at %s\n", buf);
+// OBSOLETE 	ptr = remcomOutBuffer;
+// OBSOLETE 	*ptr++ = 'W';
+// OBSOLETE 	sigval = registers[R1] & 0xff;
+// OBSOLETE 	*ptr++ = hexchars[sigval >> 4];
+// OBSOLETE 	*ptr++ = hexchars[sigval & 0xf];
+// OBSOLETE 	*ptr++ = 0;
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_open:
+// OBSOLETE 	gdb_error("Target attempts SYS_open call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_close:
+// OBSOLETE 	gdb_error("Target attempts SYS_close call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_read:
+// OBSOLETE 	gdb_error("Target attempts SYS_read call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_write:
+// OBSOLETE 	if (registers[R1] == 1 ||       /* write to stdout  */
+// OBSOLETE 	    registers[R1] == 2)		/* write to stderr  */
+// OBSOLETE 	  {				/* (we can do that) */
+// OBSOLETE 	    registers[R0] = gdb_write((void *) registers[R2], registers[R3]);
+// OBSOLETE 	    return;
+// OBSOLETE 	  }
+// OBSOLETE 	else
+// OBSOLETE 	  gdb_error("Target attempts SYS_write call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_lseek:
+// OBSOLETE 	gdb_error("Target attempts SYS_lseek call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_unlink:
+// OBSOLETE 	gdb_error("Target attempts SYS_unlink call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_getpid:
+// OBSOLETE 	gdb_error("Target attempts SYS_getpid call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_kill:
+// OBSOLETE 	gdb_error("Target attempts SYS_kill call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       case SYS_fstat:
+// OBSOLETE 	gdb_error("Target attempts SYS_fstat call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       default:
+// OBSOLETE 	gdb_error("Target attempts unknown SYS call at %s\n", buf);
+// OBSOLETE 	break;
+// OBSOLETE       }
+// OBSOLETE     }
+// OBSOLETE 
+// OBSOLETE   putpacket(remcomOutBuffer);
+// OBSOLETE 
+// OBSOLETE   stepping = 0;
+// OBSOLETE 
+// OBSOLETE   while (1==1) {
+// OBSOLETE     remcomOutBuffer[0] = 0;
+// OBSOLETE     ptr = getpacket();
+// OBSOLETE     binary = 0;
+// OBSOLETE     switch (*ptr++) {
+// OBSOLETE       default:	/* Unknown code.  Return an empty reply message. */
+// OBSOLETE 	break;
+// OBSOLETE       case 'R':
+// OBSOLETE 	if (hexToInt (&ptr, &addr))
+// OBSOLETE 	  registers[PC] = addr;
+// OBSOLETE 	strcpy(remcomOutBuffer, "OK");
+// OBSOLETE 	break;
+// OBSOLETE       case '!':
+// OBSOLETE 	strcpy(remcomOutBuffer, "OK");
+// OBSOLETE 	break;
+// OBSOLETE     case 'X': /* XAA..AA,LLLL:<binary data>#cs */
+// OBSOLETE       binary = 1;
+// OBSOLETE     case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */
+// OBSOLETE       /* TRY TO READ '%x,%x:'.  IF SUCCEED, SET PTR = 0 */
+// OBSOLETE       {
+// OBSOLETE         if (hexToInt(&ptr,&addr))
+// OBSOLETE           if (*(ptr++) == ',')
+// OBSOLETE             if (hexToInt(&ptr,&length))
+// OBSOLETE               if (*(ptr++) == ':')
+// OBSOLETE                 {
+// OBSOLETE                   mem_err = 0;
+// OBSOLETE                   if (binary)
+// OBSOLETE                     bin2mem (ptr, (unsigned char *) addr, length, 1);
+// OBSOLETE                   else
+// OBSOLETE                     hex2mem(ptr, (unsigned char*) addr, length, 1);
+// OBSOLETE                   if (mem_err) {
+// OBSOLETE                     strcpy (remcomOutBuffer, "E03");
+// OBSOLETE                     gdb_error ("memory fault", "");
+// OBSOLETE                   } else {
+// OBSOLETE                     strcpy(remcomOutBuffer,"OK");
+// OBSOLETE                   }
+// OBSOLETE                   ptr = 0;
+// OBSOLETE                 }
+// OBSOLETE         if (ptr)
+// OBSOLETE           {
+// OBSOLETE             strcpy(remcomOutBuffer,"E02");
+// OBSOLETE           }
+// OBSOLETE       }
+// OBSOLETE 	break;
+// OBSOLETE       case 'm': /* mAA..AA,LLLL  Read LLLL bytes at address AA..AA */
+// OBSOLETE 		/* TRY TO READ %x,%x.  IF SUCCEED, SET PTR = 0 */
+// OBSOLETE 	if (hexToInt(&ptr,&addr))
+// OBSOLETE 	  if (*(ptr++) == ',')
+// OBSOLETE 	    if (hexToInt(&ptr,&length))
+// OBSOLETE 	      {
+// OBSOLETE 		ptr = 0;
+// OBSOLETE 		mem_err = 0;
+// OBSOLETE 		mem2hex((unsigned char*) addr, remcomOutBuffer, length, 1);
+// OBSOLETE 		if (mem_err) {
+// OBSOLETE 		  strcpy (remcomOutBuffer, "E03");
+// OBSOLETE 		  gdb_error ("memory fault", "");
+// OBSOLETE 		}
+// OBSOLETE 	      }
+// OBSOLETE 	if (ptr)
+// OBSOLETE 	  {
+// OBSOLETE 	    strcpy(remcomOutBuffer,"E01");
+// OBSOLETE 	  }
+// OBSOLETE 	break;
+// OBSOLETE       case '?': 
+// OBSOLETE 	remcomOutBuffer[0] = 'S';
+// OBSOLETE 	remcomOutBuffer[1] =  hexchars[sigval >> 4];
+// OBSOLETE 	remcomOutBuffer[2] =  hexchars[sigval % 16];
+// OBSOLETE 	remcomOutBuffer[3] = 0;
+// OBSOLETE 	break;
+// OBSOLETE       case 'd': 
+// OBSOLETE 	remote_debug = !(remote_debug);  /* toggle debug flag */
+// OBSOLETE 	break;
+// OBSOLETE       case 'g': /* return the value of the CPU registers */
+// OBSOLETE 	mem2hex((unsigned char*) registers, remcomOutBuffer, NUMREGBYTES, 0);
+// OBSOLETE 	break;
+// OBSOLETE       case 'P': /* set the value of a single CPU register - return OK */
+// OBSOLETE 	{
+// OBSOLETE 	  int regno;
+// OBSOLETE 
+// OBSOLETE 	  if (hexToInt (&ptr, &regno) && *ptr++ == '=')
+// OBSOLETE 	    if (regno >= 0 && regno < NUMREGS)
+// OBSOLETE 	      {
+// OBSOLETE 		int stackmode;
+// OBSOLETE 
+// OBSOLETE 		hex2mem (ptr, (unsigned char *) &registers[regno], 4, 0);
+// OBSOLETE 		/*
+// OBSOLETE 		 * Since we just changed a single CPU register, let's
+// OBSOLETE 		 * make sure to keep the several stack pointers consistant.
+// OBSOLETE 		 */
+// OBSOLETE 		stackmode = registers[PSW] & 0x80;
+// OBSOLETE 		if (regno == R15)	/* stack pointer changed */
+// OBSOLETE 		  {			/* need to change SPI or SPU */
+// OBSOLETE 		    if (stackmode == 0)
+// OBSOLETE 		      registers[SPI] = registers[R15];
+// OBSOLETE 		    else
+// OBSOLETE 		      registers[SPU] = registers[R15];
+// OBSOLETE 		  }
+// OBSOLETE 		else if (regno == SPU)	/* "user" stack pointer changed */
+// OBSOLETE 		  {
+// OBSOLETE 		    if (stackmode != 0)	/* stack in user mode: copy SP */
+// OBSOLETE 		      registers[R15] = registers[SPU];
+// OBSOLETE 		  }
+// OBSOLETE 		else if (regno == SPI)	/* "interrupt" stack pointer changed */
+// OBSOLETE 		  {
+// OBSOLETE 		    if (stackmode == 0)	/* stack in interrupt mode: copy SP */
+// OBSOLETE 		      registers[R15] = registers[SPI];
+// OBSOLETE 		  }
+// OBSOLETE 		else if (regno == PSW)	/* stack mode may have changed! */
+// OBSOLETE 		  {			/* force SP to either SPU or SPI */
+// OBSOLETE 		    if (stackmode == 0)	/* stack in user mode */
+// OBSOLETE 		      registers[R15] = registers[SPI];
+// OBSOLETE 		    else		/* stack in interrupt mode */
+// OBSOLETE 		      registers[R15] = registers[SPU];
+// OBSOLETE 		  }
+// OBSOLETE 		strcpy (remcomOutBuffer, "OK");
+// OBSOLETE 		break;
+// OBSOLETE 	      }
+// OBSOLETE 	  strcpy (remcomOutBuffer, "E01");
+// OBSOLETE 	  break;
+// OBSOLETE 	}
+// OBSOLETE       case 'G': /* set the value of the CPU registers - return OK */
+// OBSOLETE 	hex2mem(ptr, (unsigned char*) registers, NUMREGBYTES, 0);
+// OBSOLETE 	strcpy(remcomOutBuffer,"OK");
+// OBSOLETE 	break;
+// OBSOLETE       case 's': /* sAA..AA	Step one instruction from AA..AA(optional) */
+// OBSOLETE 	stepping = 1;
+// OBSOLETE       case 'c': /* cAA..AA	Continue from address AA..AA(optional) */
+// OBSOLETE 		/* try to read optional parameter, pc unch