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]

Re: [patch/rfc] Eliminate the es1800 target


On Wed, Jan 29, 2003 at 03:32:23PM -0500, Andrew Cagney wrote:

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

[wrong patch] but I certainly don't object; let's kill it!
Grumph, the thing escaped.  Lets try again ...

Andrew

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

	* README: Remove reference to Ericsson 1800 monitor.
	* Makefile.in (remote-es.o): Delete rule.
	(ALLDEPFILES): Delete remote-es.c.
	* remote-es.c: Delete file.
	* config/m68k/es1800.mt: Delete file.
	* config/djgpp/fnchange.lst: Update.
	* configure.tgt: Delete m68*-ericsson-* target.

Index: doc/ChangeLog
2003-01-29  Andrew Cagney  <ac131313@redhat.com>

	* gdb.texinfo (M68K): Delete reference to es1800.

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.319
diff -u -r1.319 Makefile.in
--- Makefile.in	27 Jan 2003 21:41:39 -0000	1.319
+++ Makefile.in	29 Jan 2003 20:49:25 -0000
@@ -1384,7 +1384,7 @@
 	ppcnbsd-nat.o ppcnbsd-tdep.o \
 	procfs.c \
 	remote-array.c remote-e7000.c \
-	remote-es.c remote-hms.c remote-mips.c \
+	remote-hms.c remote-mips.c \
 	remote-rdp.c remote-sim.c \
 	remote-st.c remote-utils.c dcache.c \
 	remote-vx.c \
@@ -2049,9 +2049,6 @@
 remote-e7000.o: remote-e7000.c $(defs_h) $(gdbcore_h) $(gdbarch_h) \
 	$(inferior_h) $(target_h) $(value_h) $(command_h) $(gdb_string_h) \
 	$(gdbcmd_h) $(serial_h) $(remote_utils_h) $(symfile_h) $(regcache_h)
-remote-es.o: remote-es.c $(defs_h) $(gdb_string_h) $(frame_h) $(inferior_h) \
-	$(target_h) $(command_h) $(symfile_h) $(remote_utils_h) $(gdbcore_h) \
-	$(serial_h) $(regcache_h) $(value_h)
 remote-est.o: remote-est.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \
 	$(serial_h) $(regcache_h) $(m68k_tdep_h)
 remote-hms.o: remote-hms.c $(defs_h) $(gdbcore_h) $(target_h) $(monitor_h) \
Index: README
===================================================================
RCS file: /cvs/src/src/gdb/README,v
retrieving revision 1.25
diff -u -r1.25 README
--- README	18 Jan 2003 17:43:14 -0000	1.25
+++ README	29 Jan 2003 20:49:25 -0000
@@ -464,7 +464,6 @@
 
 	remote-array.c   Array Tech RAID controller
 	remote-e7000.c	 Hitachi E7000 ICE
-	remote-es.c	 Ericsson 1800 monitor
 	remote-est.c	 EST emulator
 	remote-hms.c	 Hitachi Micro Systems H8/300 monitor
 	remote-mips.c	 MIPS remote debugging protocol
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 20:49:25 -0000
@@ -126,7 +126,6 @@
 m68*-bull-sysv*)	gdb_target=dpx2 ;;
 m68*-att-*)		gdb_target=3b1 ;;
 m68*-cisco*-*)		gdb_target=cisco ;;
-m68*-ericsson-*)	gdb_target=es1800 ;;
 m68*-motorola-*)	gdb_target=delta68 ;;
 m68*-netx-*)		gdb_target=vxworks68 ;;
 m68*-tandem-*)		gdb_target=st2000 ;;
Index: remote-es.c
===================================================================
RCS file: remote-es.c
diff -N remote-es.c
--- remote-es.c	18 Jan 2003 15:55:52 -0000	1.25
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,2047 +0,0 @@
-/* Memory-access and commands for remote es1800 processes, for GDB.
-
-   Copyright 1988, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
-   2001, 2002 Free Software Foundation, Inc.
-
-   This file is added to GDB to make it possible to do debugging via an
-   ES-1800 emulator. The code was originally written by Johan Holmberg
-   TT/SJ Ericsson Telecom AB and later modified by Johan Henriksson
-   TT/SJ. It was modified for gdb 4.0 by TX/DK Jan Nordenand by TX/DKG
-   Harald Johansen.
-
-   This file is part of GDB.
-
-   GDB 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 1, or (at your option)
-   any later version.
-
-   GDB 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.  */
-
-
-/* Emulator communication protocol.
-   All values are encoded in ascii hex digits.
-
-   Request
-   Command
-   Reply
-   read registers:
-   DR<cr>
-   - 0 -    - 1 -    - 2 -    - 3 -      - 4 -    - 5 -    -- 6 -   - 7 - 
-   D = XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX   XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
-   A = XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX   XXXXXXXX XXXXXXXX XXXXXXXX 
-   PC = XXXXXX       SSP = XXXXXX    USP = XXXXXX     SR = XXXXXXXX
-   >
-   Each byte of register data is described by two hex digits.
-
-   write regs
-   D0=XXXXXXXX<cr>
-   >D1=XXXXXXXX<cr>
-   >D2=XXXXXXXX<cr>
-   >D3=XXXXXXXX<cr>
-   >D4=XXXXXXXX<cr>
-   >D5=XXXXXXXX<cr>
-   >D6=XXXXXXXX<cr>
-   >D7=XXXXXXXX<cr>
-   >A0=XXXXXXXX<cr>
-   >A1=XXXXXXXX<cr>
-   >A2=XXXXXXXX<cr>
-   >A3=XXXXXXXX<cr>
-   >A4=XXXXXXXX<cr>
-   >A5=XXXXXXXX<cr>
-   >A6=XXXXXXXX<cr>
-   >A7=XXXXXXXX<cr>
-   >SR=XXXXXXXX<cr>
-   >PC=XXXXXX<cr>
-   >
-   Each byte of register data is described by two hex digits.
-
-   read mem
-   @.BAA..AA
-   $FFFFFFXX
-   >
-   AA..AA is address, XXXXXXX is the contents
-
-   write mem
-   @.BAA..AA=$XXXXXXXX
-   >
-   AA..AA is address, XXXXXXXX is data
-
-   cont
-   PC=$AA..AA
-   >RBK
-   R>
-   AA..AA is address to resume. If AA..AA is omitted, resume at same address.
-
-   step
-   PC=$AA..AA
-   >STP
-   R>
-   AA..AA is address to resume. If AA..AA is omitted, resume at same address.
-
-   kill req
-   STP
-   >
- */
-
-
-#include <stdio.h>
-#include <signal.h>
-#include <sys/ioctl.h>
-#include <sys/file.h>
-#include <errno.h>
-#include <ctype.h>
-#include <setjmp.h>
-#include <fcntl.h>
-#include "defs.h"
-#include "gdb_string.h"
-#include "frame.h"
-#include "inferior.h"
-#include "target.h"
-#include "command.h"
-#include "symfile.h"
-#include "remote-utils.h"
-#include "gdbcore.h"
-#include "serial.h"
-#include "regcache.h"
-#include "value.h"
-
-/* Prototypes for local functions */
-
-static void es1800_child_detach (char *, int);
-
-static void es1800_child_open (char *, int);
-
-static void es1800_transparent (char *, int);
-
-static void es1800_create_inferior (char *, char *, char **);
-
-static void es1800_load (char *, int);
-
-static void es1800_kill (void);
-
-static int verify_break (int);
-
-static int es1800_remove_breakpoint (CORE_ADDR, char *);
-
-static int es1800_insert_breakpoint (CORE_ADDR, char *);
-
-static void es1800_files_info (struct target_ops *);
-
-static int es1800_xfer_inferior_memory (CORE_ADDR, char *, int, int,
-					struct mem_attrib *,
-					struct target_ops *);
-
-static void es1800_prepare_to_store (void);
-
-static ptid_t es1800_wait (ptid_t, struct target_waitstatus *);
-
-static void es1800_resume (ptid_t, int, enum target_signal);
-
-static void es1800_detach (char *, int);
-
-static void es1800_attach (char *, int);
-
-static int damn_b (char *);
-
-static void es1800_open (char *, int);
-
-static void es1800_timer (void);
-
-static void es1800_reset (char *);
-
-static void es1800_request_quit (void);
-
-static int readchar (void);
-
-static void expect (char *, int);
-
-static void expect_prompt (void);
-
-static void download (FILE *, int, int);
-
-#if 0
-static void bfd_copy (bfd *, bfd *);
-#endif
-
-static void get_break_addr (int, CORE_ADDR *);
-
-static int fromhex (int);
-
-static int tohex (int);
-
-static void es1800_close (int);
-
-static void es1800_fetch_registers (void);
-
-static void es1800_fetch_register (int);
-
-static void es1800_store_register (int);
-
-static void es1800_read_bytes (CORE_ADDR, char *, int);
-
-static void es1800_write_bytes (CORE_ADDR, char *, int);
-
-static void send_with_reply (char *, char *, int);
-
-static void send_command (char *);
-
-static void send (char *);
-
-static void getmessage (char *, int);
-
-static void es1800_mourn_inferior (void);
-
-static void es1800_create_break_insn (char *, int);
-
-static void es1800_init_break (char *, int);
-
-/* Local variables */
-
-/* FIXME: Convert this to use "set remotedebug" instead.  */
-#define LOG_FILE "es1800.log"
-#if defined (LOG_FILE)
-static FILE *log_file;
-#endif
-
-extern struct target_ops es1800_ops;	/* Forward decl */
-extern struct target_ops es1800_child_ops;	/* Forward decl */
-
-static int kiodebug;
-static int timeout = 100;
-static char *savename;		/* Name of i/o device used */
-static serial_ttystate es1800_saved_ttystate;
-static int es1800_fc_save;	/* Save fcntl state */
-
-/* indicates that the emulator uses 32-bit data-adress (68020-mode) 
-   instead of 24-bit (68000 -mode) */
-
-static int m68020;
-
-#define MODE (m68020 ? "M68020" : "M68000" )
-#define ES1800_BREAK_VEC (0xf)
-
-/* Descriptor for I/O to remote machine.  Initialize it to NULL so that
-   es1800_open knows that we don't have a file open when the program
-   starts.  */
-
-static struct serial *es1800_desc = NULL;
-
-#define	PBUFSIZ	1000
-#define HDRLEN sizeof("@.BAAAAAAAA=$VV\r")
-
-/* Maximum number of bytes to read/write at once.  The value here
-   is chosen to fill up a packet.  */
-
-#define MAXBUFBYTES ((PBUFSIZ-150)*16/75 )
-
-static int es1800_break_vec = 0;
-static char es1800_break_insn[2];
-static long es1800_break_address;
-static void (*old_sigint) ();	/* Old signal-handler for sigint */
-static jmp_buf interrupt;
-
-/* Local signalhandler to allow breaking tranfers or program run.
-   Rely on global variables: old_sigint(), interrupt */
-
-static void
-es1800_request_quit (void)
-{
-  /* restore original signalhandler */
-  signal (SIGINT, old_sigint);
-  longjmp (interrupt, 1);
-}
-
-
-/* Reset emulator.
-   Sending reset character(octal 32) to emulator.
-   quit - return to '(esgdb)' prompt or continue        */
-
-static void
-es1800_reset (char *quit)
-{
-  char buf[80];
-
-  if (quit)
-    {
-      printf ("\nResetting emulator...  ");
-    }
-  strcpy (buf, "\032");
-  send (buf);
-  expect_prompt ();
-  if (quit)
-    {
-      error ("done\n");
-    }
-}
-
-
-/* Open a connection to a remote debugger and push the new target
-   onto the stack. Check if the emulator is responding and find out
-   what kind of processor the emulator is connected to.
-   Initiate the breakpoint handling in the emulator.
-
-   name     - the filename used for communication (ex. '/dev/tta')
-   from_tty - says whether to be verbose or not */
-
-static void
-es1800_open (char *name, int from_tty)
-{
-  char buf[PBUFSIZ];
-  char *p;
-  int i, fcflag;
-
-  m68020 = 0;
-
-  if (!name)			/* no device name given in target command */
-    {
-      error_no_arg ("serial port device name");
-    }
-
-  target_preopen (from_tty);
-  es1800_close (0);
-
-  /* open the device and configure it for communication */
-
-#ifndef DEBUG_STDIN
-
-  es1800_desc = serial_open (name);
-  if (es1800_desc == NULL)
-    {
-      perror_with_name (name);
-    }
-  savename = savestring (name, strlen (name));
-
-  es1800_saved_ttystate = serial_get_tty_state (es1800_desc);
-
-  if ((fcflag = fcntl (deprecated_serial_fd (es1800_desc), F_GETFL, 0)) == -1)
-    {
-      perror_with_name ("fcntl serial");
-    }
-  es1800_fc_save = fcflag;
-
-  fcflag = (fcflag & (FREAD | FWRITE));		/* mask out any funny stuff */
-  if (fcntl (deprecated_serial_fd (es1800_desc), F_SETFL, fcflag) == -1)
-    {
-      perror_with_name ("fcntl serial");
-    }
-
-  if (baud_rate != -1)
-    {
-      if (serial_setbaudrate (es1800_desc, baud_rate))
-	{
-	  serial_close (es1800_desc);
-	  perror_with_name (name);
-	}
-    }
-
-  serial_raw (es1800_desc);
-
-  /* If there is something sitting in the buffer we might take it as a
-     response to a command, which would be bad.  */
-  serial_flush_input (es1800_desc);
-
-#endif /* DEBUG_STDIN */
-
-  push_target (&es1800_ops);	/* Switch to using remote target now */
-  if (from_tty)
-    {
-      printf ("Remote ES1800 debugging using %s\n", name);
-    }
-
-#if defined (LOG_FILE)
-
-  log_file = fopen (LOG_FILE, "w");
-  if (log_file == NULL)
-    {
-      perror_with_name (LOG_FILE);
-    }
-
-#endif /* LOG_FILE */
-
-  /* Hello?  Are you there?, also check mode  */
-
-  /*  send_with_reply( "DB 0 TO 1", buf, sizeof(buf)); */
-  /*  for (p = buf, i = 0; *p++ =='0';)  *//* count the number of zeros */
-  /*      i++; */
-
-  send ("\032");
-  getmessage (buf, sizeof (buf));	/* send reset character */
-
-  if (from_tty)
-    {
-      printf ("Checking mode.... ");
-    }
-  /*  m68020 = (i==8); *//* if eight zeros then we are in m68020 mode */
-
-  /* What kind of processor am i talking to ? */
-  p = buf;
-  while (*p++ != '\n')
-    {;
-    }
-  while (*p++ != '\n')
-    {;
-    }
-  while (*p++ != '\n')
-    {;
-    }
-  for (i = 0; i < 20; i++, p++)
-    {;
-    }
-  m68020 = !strncmp (p, "68020", 5);
-  if (from_tty)
-    {
-      printf ("You are in %s(%c%c%c%c%c)-mode\n", MODE, p[0], p[1], p[2],
-	      p[3], p[4]);
-    }
-
-  /* if no init_break statement is present in .gdb file we have to check 
-     whether to download a breakpoint routine or not */
-
-#if 0
-  if ((es1800_break_vec == 0) || (verify_break (es1800_break_vec) != 0)
-      && query ("No breakpoint routine in ES 1800 emulator!\nDownload a breakpoint routine to the emulator? "))
-    {
-      CORE_ADDR memaddress;
-      printf ("Give the start address of the breakpoint routine: ");
-      scanf ("%li", &memaddress);
-      es1800_init_break ((es1800_break_vec ? es1800_break_vec :
-			  ES1800_BREAK_VEC), memaddress);
-    }
-#endif
-
-}
-
-/*  Close out all files and local state before this target loses control.
-   quitting - are we quitting gdb now? */
-
-static void
-es1800_close (int quitting)
-{
-  if (es1800_desc != NULL)
-    {
-      printf ("\nClosing connection to emulator...\n");
-      if (serial_set_tty_state (es1800_desc, es1800_saved_ttystate) < 0)
-	print_sys_errmsg ("warning: unable to restore tty state", errno);
-      fcntl (deprecated_serial_fd (es1800_desc), F_SETFL, es1800_fc_save);
-      serial_close (es1800_desc);
-      es1800_desc = NULL;
-    }
-  if (savename != NULL)
-    {
-      xfree (savename);
-    }
-  savename = NULL;
-
-#if defined (LOG_FILE)
-
-  if (log_file != NULL)
-    {
-      if (ferror (log_file))
-	{
-	  printf ("Error writing log file.\n");
-	}
-      if (fclose (log_file) != 0)
-	{
-	  printf ("Error closing log file.\n");
-	}
-      log_file = NULL;
-    }
-
-#endif /* LOG_FILE */
-
-}
-
-/*  Attaches to a process on the target side
-   proc_id  - the id of the process to be attached.
-   from_tty - says whether to be verbose or not */
-
-static void
-es1800_attach (char *args, int from_tty)
-{
-  error ("Cannot attach to pid %s, this feature is not implemented yet.",
-	 args);
-}
-
-
-/* Takes a program previously attached to and detaches it.
-   We better not have left any breakpoints
-   in the program or it'll die when it hits one.
-   Close the open connection to the remote debugger.
-   Use this when you want to detach and do something else
-   with your gdb.
-
-   args     - arguments given to the 'detach' command
-   from_tty - says whether to be verbose or not */
-
-static void
-es1800_detach (char *args, int from_tty)
-{
-  if (args)
-    {
-      error ("Argument given to \"detach\" when remotely debugging.");
-    }
-  pop_target ();
-  if (from_tty)
-    {
-      printf ("Ending es1800 remote debugging.\n");
-    }
-}
-
-
-/* Tell the remote machine to resume.
-   step    - single-step or run free
-   siggnal - the signal value to be given to the target (0 = no signal) */
-
-static void
-es1800_resume (ptid_t ptid, int step, enum target_signal siggnal)
-{
-  char buf[PBUFSIZ];
-
-  if (siggnal)
-    {
-      error ("Can't send signals to a remote system.");
-    }
-  if (step)
-    {
-      strcpy (buf, "STP\r");
-      send (buf);
-    }
-  else
-    {
-      send_command ("RBK");
-    }
-}
-
-/* Wait until the remote machine stops, then return,
-   storing status in STATUS just as `wait' would.
-   status -  */
-
-static ptid_t
-es1800_wait (ptid_t ptid, struct target_waitstatus *status)
-{
-  unsigned char buf[PBUFSIZ];
-  int old_timeout = timeout;
-
-  status->kind = TARGET_WAITKIND_EXITED;
-  status->value.integer = 0;
-
-  timeout = 0;			/* Don't time out -- user program is running. */
-  if (!setjmp (interrupt))
-    {
-      old_sigint = signal (SIGINT, es1800_request_quit);
-      while (1)
-	{
-	  getmessage (buf, sizeof (buf));
-	  if (strncmp (buf, "\r\n* BREAK *", 11) == 0)
-	    {
-	      status->kind = TARGET_WAITKIND_STOPPED;
-	      status->value.sig = TARGET_SIGNAL_TRAP;
-	      send_command ("STP");	/* Restore stack and PC and such */
-	      if (m68020)
-		{
-		  send_command ("STP");
-		}
-	      break;
-	    }
-	  if (strncmp (buf, "STP\r\n ", 6) == 0)
-	    {
-	      status->kind = TARGET_WAITKIND_STOPPED;
-	      status->value.sig = TARGET_SIGNAL_TRAP;
-	      break;
-	    }
-	  if (buf[strlen (buf) - 2] == 'R')
-	    {
-	      printf ("Unexpected emulator reply: \n%s\n", buf);
-	    }
-	  else
-	    {
-	      printf ("Unexpected stop: \n%s\n", buf);
-	      status->kind = TARGET_WAITKIND_STOPPED;
-	      status->value.sig = TARGET_SIGNAL_QUIT;
-	      break;
-	    }
-	}
-    }
-  else
-    {
-      fflush (stdin);
-      printf ("\nStopping emulator...");
-      if (!setjmp (interrupt))
-	{
-	  old_sigint = signal (SIGINT, es1800_request_quit);
-	  send_command ("STP");
-	  printf (" emulator stopped\n");
-	  status->kind = TARGET_WAITKIND_STOPPED;
-	  status->value.sig = TARGET_SIGNAL_INT;
-	}
-      else
-	{
-	  fflush (stdin);
-	  es1800_reset ((char *) 1);
-	}
-    }
-  signal (SIGINT, old_sigint);
-  timeout = old_timeout;
-  return inferior_ptid;
-}
-
-
-/* Fetch register values from remote machine.
-   regno - the register to be fetched (fetch all registers if -1) */
-
-static void
-es1800_fetch_register (int regno)
-{
-  char buf[PBUFSIZ];
-  int k;
-  int r;
-  char *p;
-  static char regtab[18][4] =
-  {
-    "D0 ", "D1 ", "D2 ", "D3 ", "D4 ", "D5 ", "D6 ", "D7 ",
-    "A0 ", "A1 ", "A2 ", "A3 ", "A4 ", "A5 ", "A6 ", "SSP",
-    "SR ", "PC "
-  };
-
-  if ((regno < 15) || (regno == 16) || (regno == 17))
-    {
-      r = regno * 4;
-      send_with_reply (regtab[regno], buf, sizeof (buf));
-      p = buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if ((p[k * 2 + 1] == 0) || (p[k * 2 + 2] == 0))
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] = (fromhex (p[k * 2 + 1]) * 16) + fromhex (p[k * 2 + 2]);
-	}
-    }
-  else
-    {
-      es1800_fetch_registers ();
-    }
-}
-
-/* Read the remote registers into REGISTERS.
-   Always fetches all registers. */
-
-static void
-es1800_fetch_registers (void)
-{
-  char buf[PBUFSIZ];
-  char SR_buf[PBUFSIZ];
-  int i;
-  int k;
-  int r;
-  char *p;
-
-  send_with_reply ("DR", buf, sizeof (buf));
-
-  /* Reply is edited to a string that describes registers byte by byte,
-     each byte encoded as two hex characters.  */
-
-  p = buf;
-  r = 0;
-
-  /*  parsing row one - D0-D7-registers  */
-
-  while (*p++ != '\n')
-    {;
-    }
-  for (i = 4; i < 70; i += (i == 39 ? 3 : 1))
-    {
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[i + 0] == 0 || p[i + 1] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] = (fromhex (p[i + 0]) * 16) + fromhex (p[i + 1]);
-	  i += 2;
-	}
-    }
-  p += i;
-
-  /*  parsing row two - A0-A6-registers  */
-
-  while (*p++ != '\n')
-    {;
-    }
-  for (i = 4; i < 61; i += (i == 39 ? 3 : 1))
-    {
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[i + 0] == 0 || p[i + 1] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] = (fromhex (p[i + 0])) * 16 + fromhex (p[i + 1]);
-	  i += 2;
-	}
-    }
-  p += i;
-
-  while (*p++ != '\n')
-    {;
-    }
-
-  /* fetch SSP-, SR- and PC-registers  */
-
-  /* first - check STATUS-word and decide which stackpointer to use */
-
-  send_with_reply ("SR", SR_buf, sizeof (SR_buf));
-  p = SR_buf;
-  p += 5;
-
-  if (m68020)
-    {
-      if (*p == '3')		/* use masterstackpointer MSP */
-	{
-	  send_with_reply ("MSP", buf, sizeof (buf));
-	}
-      else if (*p == '2')	/* use interruptstackpointer ISP  */
-	{
-	  send_with_reply ("ISP", buf, sizeof (buf));
-	}
-      else
-	/* use userstackpointer USP  */
-	{
-	  send_with_reply ("USP", buf, sizeof (buf));
-	}
-      p = buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[k * 2 + 1] == 0 || p[k * 2 + 2] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] = fromhex (buf[k * 2 + 1]) * 16 + fromhex (buf[k * 2 + 2]);
-	}
-
-      p = SR_buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[k * 2 + 1] == 0 || p[k * 2 + 2] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] =
-	    fromhex (SR_buf[k * 2 + 1]) * 16 + fromhex (SR_buf[k * 2 + 2]);
-	}
-      send_with_reply ("PC", buf, sizeof (buf));
-      p = buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[k * 2 + 1] == 0 || p[k * 2 + 2] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] = fromhex (buf[k * 2 + 1]) * 16 + fromhex (buf[k * 2 + 2]);
-	}
-    }
-  else
-    /* 68000-mode */
-    {
-      if (*p == '2')		/* use supervisorstackpointer SSP  */
-	{
-	  send_with_reply ("SSP", buf, sizeof (buf));
-	}
-      else
-	/* use userstackpointer USP  */
-	{
-	  send_with_reply ("USP", buf, sizeof (buf));
-	}
-
-      /* fetch STACKPOINTER */
-
-      p = buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[k * 2 + 1] == 0 || p[k * 2 + 2] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] = fromhex (buf[k * 2 + 1]) * 16 + fromhex (buf[k * 2 + 2]);
-	}
-
-      /* fetch STATUS */
-
-      p = SR_buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[k * 2 + 1] == 0 || p[k * 2 + 2] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] =
-	    fromhex (SR_buf[k * 2 + 1]) * 16 + fromhex (SR_buf[k * 2 + 2]);
-	}
-
-      /* fetch PC */
-
-      send_with_reply ("PC", buf, sizeof (buf));
-      p = buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if (p[k * 2 + 1] == 0 || p[k * 2 + 2] == 0)
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  deprecated_registers[r++] = fromhex (buf[k * 2 + 1]) * 16 + fromhex (buf[k * 2 + 2]);
-	}
-    }
-}
-
-/* Store register value, located in REGISTER, on the target processor.
-   regno - the register-number of the register to store
-   (-1 means store them all)
-   FIXME: Return errno value.  */
-
-static void
-es1800_store_register (int regno)
-{
-
-  static char regtab[18][4] =
-  {
-    "D0 ", "D1 ", "D2 ", "D3 ", "D4 ", "D5 ", "D6 ", "D7 ",
-    "A0 ", "A1 ", "A2 ", "A3 ", "A4 ", "A5 ", "A6 ", "SSP",
-    "SR ", "PC "
-  };
-
-  char buf[PBUFSIZ];
-  char SR_buf[PBUFSIZ];
-  char stack_pointer[4];
-  char *p;
-  int i;
-  int j;
-  int k;
-  unsigned char *r;
-
-  r = (unsigned char *) deprecated_registers;
-
-  if (regno == -1)		/* write all registers */
-    {
-      j = 0;
-      k = 18;
-    }
-  else
-    /* write one register */
-    {
-      j = regno;
-      k = regno + 1;
-      r += regno * 4;
-    }
-
-  if ((regno == -1) || (regno == 15))
-    {
-      /* fetch current status */
-      send_with_reply ("SR", SR_buf, sizeof (SR_buf));
-      p = SR_buf;
-      p += 5;
-      if (m68020)
-	{
-	  if (*p == '3')	/* use masterstackpointer MSP */
-	    {
-	      strcpy (stack_pointer, "MSP");
-	    }
-	  else
-	    {
-	      if (*p == '2')	/* use interruptstackpointer ISP  */
-		{
-		  strcpy (stack_pointer, "ISP");
-		}
-	      else
-		{
-		  strcpy (stack_pointer, "USP");	/* use userstackpointer USP  */
-		}
-	    }
-	}
-      else
-	/* 68000-mode */
-	{
-	  if (*p == '2')	/* use supervisorstackpointer SSP  */
-	    {
-	      strcpy (stack_pointer, "SSP");
-	    }
-	  else
-	    {
-	      strcpy (stack_pointer, "USP");	/* use userstackpointer USP  */
-	    }
-	}
-      strcpy (regtab[15], stack_pointer);
-    }
-
-  for (i = j; i < k; i++)
-    {
-      buf[0] = regtab[i][0];
-      buf[1] = regtab[i][1];
-      buf[2] = regtab[i][2];
-      buf[3] = '=';
-      buf[4] = '$';
-      buf[5] = tohex ((*r >> 4) & 0x0f);
-      buf[6] = tohex (*r++ & 0x0f);
-      buf[7] = tohex ((*r >> 4) & 0x0f);
-      buf[8] = tohex (*r++ & 0x0f);
-      buf[9] = tohex ((*r >> 4) & 0x0f);
-      buf[10] = tohex (*r++ & 0x0f);
-      buf[11] = tohex ((*r >> 4) & 0x0f);
-      buf[12] = tohex (*r++ & 0x0f);
-      buf[13] = 0;
-
-      send_with_reply (buf, buf, sizeof (buf));		/* FIXME, reply not used? */
-    }
-}
-
-
-/* Prepare to store registers.  */
-
-static void
-es1800_prepare_to_store (void)
-{
-  /* Do nothing, since we can store individual regs */
-}
-
-/* Convert hex digit A to a number.  */
-
-static int
-fromhex (int a)
-{
-  if (a >= '0' && a <= '9')
-    {
-      return a - '0';
-    }
-  else if (a >= 'a' && a <= 'f')
-    {
-      return a - 'a' + 10;
-    }
-  else if (a >= 'A' && a <= 'F')
-    {
-      return a - 'A' + 10;
-    }
-  else
-    {
-      error ("Reply contains invalid hex digit");
-    }
-  return (-1);
-}
-
-
-/* Convert number NIB to a hex digit.  */
-
-static int
-tohex (int nib)
-{
-  if (nib < 10)
-    {
-      return ('0' + nib);
-    }
-  else
-    {
-      return ('A' + nib - 10);
-    }
-}
-
-/* Read or write LEN bytes from inferior memory at MEMADDR, transferring
-   to or from debugger address MYADDR.  Write to inferior if WRITE is
-   nonzero.  Returns length of data written or read; 0 for error. 
-
-   memaddr - the target's address
-   myaddr  - gdb's address
-   len     - number of bytes 
-   write   - write if != 0 otherwise read
-   tops    - unused */
-
-static int
-es1800_xfer_inferior_memory (CORE_ADDR memaddr, char *myaddr, int len,
-			     int write, struct mem_attrib *attrib,
-			     struct target_ops *target)
-{
-  int origlen = len;
-  int xfersize;
-
-  while (len > 0)
-    {
-      xfersize = len > MAXBUFBYTES ? MAXBUFBYTES : len;
-      if (write)
-	{
-	  es1800_write_bytes (memaddr, myaddr, xfersize);
-	}
-      else
-	{
-	  es1800_read_bytes (memaddr, myaddr, xfersize);
-	}
-      memaddr += xfersize;
-      myaddr += xfersize;
-      len -= xfersize;
-    }
-  return (origlen);		/* no error possible */
-}
-
-
-/* Write memory data directly to the emulator.
-   This does not inform the data cache; the data cache uses this.
-   MEMADDR is the address in the remote memory space.
-   MYADDR is the address of the buffer in our space.
-   LEN is the number of bytes.
-
-   memaddr - the target's address
-   myaddr  - gdb's address
-   len     - number of bytes   */
-
-static void
-es1800_write_bytes (CORE_ADDR memaddr, char *myaddr, int len)
-{
-  char buf[PBUFSIZ];
-  int i;
-  char *p;
-
-  p = myaddr;
-  for (i = 0; i < len; i++)
-    {
-      sprintf (buf, "@.B$%x=$%x", memaddr + i, (*p++) & 0xff);
-      send_with_reply (buf, buf, sizeof (buf));		/* FIXME send_command? */
-    }
-}
-
-
-/* Read memory data directly from the emulator.
-   This does not use the data cache; the data cache uses this.
-
-   memaddr - the target's address
-   myaddr  - gdb's address
-   len     - number of bytes   */
-
-static void
-es1800_read_bytes (CORE_ADDR memaddr, char *myaddr, int len)
-{
-  static int DB_tab[16] =
-  {8, 11, 14, 17, 20, 23, 26, 29, 34, 37, 40, 43, 46, 49, 52, 55};
-  char buf[PBUFSIZ];
-  int i;
-  int low_addr;
-  char *p;
-  char *b;
-
-  if (len > PBUFSIZ / 2 - 1)
-    {
-      internal_error (__FILE__, __LINE__, "failed internal consistency check");
-    }
-
-  if (len == 1)			/* The emulator does not like expressions like:  */
-    {
-      len = 2;			/* DB.B $20018 TO $20018                       */
-    }
-
-  /* Reply describes registers byte by byte, each byte encoded as two hex
-     characters.  */
-
-  sprintf (buf, "DB.B $%x TO $%x", memaddr, memaddr + len - 1);
-  send_with_reply (buf, buf, sizeof (buf));
-  b = buf;
-  low_addr = memaddr & 0x0f;
-  for (i = low_addr; i < low_addr + len; i++)
-    {
-      if ((!(i % 16)) && i)
-	{			/* if (i = 16,32,48)  */
-	  while (*p++ != '\n')
-	    {;
-	    }
-	  b = p;
-	}
-      p = b + DB_tab[i % 16] + (m68020 ? 2 : 0);
-      if (p[0] == 32 || p[1] == 32)
-	{
-	  error ("Emulator reply is too short: %s", buf);
-	}
-      myaddr[i - low_addr] = fromhex (p[0]) * 16 + fromhex (p[1]);
-    }
-}
-
-/* Display information about the current target.  TOPS is unused.  */
-
-static void
-es1800_files_info (struct target_ops *tops)
-{
-  printf ("ES1800 Attached to %s at %d baud in %s mode\n", savename, 19200,
-	  MODE);
-}
-
-
-/* We read the contents of the target location and stash it,
-   then overwrite it with a breakpoint instruction.
-
-   addr           - is the target location in the target machine.
-   contents_cache - is a pointer to memory allocated for saving the target contents.
-   It is guaranteed by the caller to be long enough to save sizeof 
-   BREAKPOINT bytes.
-
-   FIXME: This size is target_arch dependent and should be available in
-   the target_arch transfer vector, if we ever have one...  */
-
-static int
-es1800_insert_breakpoint (CORE_ADDR addr, char *contents_cache)
-{
-  int val;
-
-  val = target_read_memory (addr, contents_cache, sizeof (es1800_break_insn));
-
-  if (val == 0)
-    {
-      val = target_write_memory (addr, es1800_break_insn,
-				 sizeof (es1800_break_insn));
-    }
-
-  return (val);
-}
-
-
-/* Write back the stashed instruction
-
-   addr           - is the target location in the target machine.
-   contents_cache - is a pointer to memory allocated for saving the target contents.
-   It is guaranteed by the caller to be long enough to save sizeof 
-   BREAKPOINT bytes.    */
-
-static int
-es1800_remove_breakpoint (CORE_ADDR addr, char *contents_cache)
-{
-
-  return (target_write_memory (addr, contents_cache,
-			       sizeof (es1800_break_insn)));
-}
-
-/* create_break_insn ()
-   Primitive datastructures containing the es1800 breakpoint instruction  */
-
-static void
-es1800_create_break_insn (char *ins, int vec)
-{
-  if (vec == 15)
-    {
-      ins[0] = 0x4e;
-      ins[1] = 0x4f;
-    }
-}
-
-
-/* verify_break ()
-   Seach for breakpoint routine in emulator memory.
-   returns non-zero on failure
-   vec - trap vector used for breakpoints  */
-
-static int
-verify_break (int vec)
-{
-  CORE_ADDR memaddress;
-  char buf[8];
-  char *instr = "NqNqNqNs";	/* breakpoint routine */
-  int status;
-
-  get_break_addr (vec, &memaddress);
-
-  if (memaddress)
-    {
-      status = target_read_memory (memaddress, buf, 8);
-      if (status != 0)
-	{
-	  memory_error (status, memaddress);
-	}
-      return (strcmp (instr, buf));
-    }
-  return (-1);
-}
-
-
-/* get_break_addr ()
-   find address of breakpoint routine
-   vec - trap vector used for breakpoints
-   addrp - store the address here       */
-
-static void
-get_break_addr (int vec, CORE_ADDR *addrp)
-{
-  CORE_ADDR memaddress = 0;
-  int status;
-  int k;
-  char buf[PBUFSIZ];
-  char base_addr[4];
-  char *p;
-
-  if (m68020)
-    {
-      send_with_reply ("VBR ", buf, sizeof (buf));
-      p = buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if ((p[k * 2 + 1] == 0) || (p[k * 2 + 2] == 0))
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  base_addr[k] = (fromhex (p[k * 2 + 1]) * 16) + fromhex (p[k * 2 + 2]);
-	}
-      /* base addr of exception vector table */
-      memaddress = *((CORE_ADDR *) base_addr);
-    }
-
-  memaddress += (vec + 32) * 4;	/* address of trap vector */
-  status = target_read_memory (memaddress, (char *) addrp, 4);
-  if (status != 0)
-    {
-      memory_error (status, memaddress);
-    }
-}
-
-
-/* Kill an inferior process */
-
-static void
-es1800_kill (void)
-{
-  if (!ptid_equal (inferior_ptid, null_ptid))
-    {
-      inferior_ptid = null_ptid;
-      es1800_mourn_inferior ();
-    }
-}
-
-
-/* Load a file to the ES1800 emulator. 
-   Converts the file from a.out format into Extended Tekhex format
-   before the file is loaded.
-   Also loads the trap routine, and sets the ES1800 breakpoint on it
-   filename - the a.out to be loaded
-   from_tty - says whether to be verbose or not
-   FIXME Uses emulator overlay memory for trap routine  */
-
-static void
-es1800_load (char *filename, int from_tty)
-{
-
-  FILE *instream;
-  char loadname[15];
-  char buf[160];
-  struct cleanup *old_chain;
-  int es1800_load_format = 5;
-
-  if (es1800_desc == NULL)
-    {
-      printf ("No emulator attached, type emulator-command first\n");
-      return;
-    }
-
-  filename = tilde_expand (filename);
-  make_cleanup (xfree, filename);
-
-  switch (es1800_load_format)
-    {
-    case 2:			/* Extended Tekhex  */
-      if (from_tty)
-	{
-	  printf ("Converting \"%s\" to Extended Tekhex Format\n", filename);
-	}
-      sprintf (buf, "tekhex %s", filename);
-      system (buf);
-      sprintf (loadname, "out.hex");
-      break;
-
-    case 5:			/* Motorola S-rec  */
-      if (from_tty)
-	{
-	  printf ("Converting \"%s\" to Motorola S-record format\n",
-		  filename);
-	}
-      /* in the future the source code in copy (part of binutils-1.93) will
-         be included in this file */
-      sprintf (buf,
-	       "copy -s \"a.out-sunos-big\" -d \"srec\" %s /tmp/out.hex",
-	       filename);
-      system (buf);
-      sprintf (loadname, "/tmp/out.hex");
-      break;
-
-    default:
-      error ("Downloading format not defined\n");
-    }
-
-  breakpoint_init_inferior ();
-  inferior_ptid = null_ptid;
-  if (from_tty)
-    {
-      printf ("Downloading \"%s\" to the ES 1800\n", filename);
-    }
-  if ((instream = fopen (loadname, "r")) == NULL)
-    {
-      perror_with_name ("fopen:");
-    }
-
-  old_chain = make_cleanup (fclose, instream);
-  immediate_quit++;
-
-  es1800_reset (0);
-
-  download (instream, from_tty, es1800_load_format);
-
-  /* if breakpoint routine is not present anymore we have to check 
-     whether to download a new breakpoint routine or not */
-
-  if ((verify_break (es1800_break_vec) != 0)
-      && query ("No breakpoint routine in ES 1800 emulator!\nDownload a breakpoint routine to the emulator? "))
-    {
-      char buf[128];
-      printf ("Using break vector 0x%x\n", es1800_break_vec);
-      sprintf (buf, "0x%x ", es1800_break_vec);
-      printf ("Give the start address of the breakpoint routine: ");
-      fgets (buf + strlen (buf), sizeof (buf) - strlen (buf), stdin);
-      es1800_init_break (buf, 0);
-    }
-
-  do_cleanups (old_chain);
-  expect_prompt ();
-  readchar ();			/* FIXME I am getting a ^G = 7 after the prompt  */
-  printf ("\n");
-
-  if (fclose (instream) == EOF)
-    {
-      ;
-    }
-
-  if (es1800_load_format != 2)
-    {
-      sprintf (buf, "/usr/bin/rm %s", loadname);
-      system (buf);
-    }
-
-  symbol_file_add_main (filename, from_tty);	/* reading symbol table */
-  immediate_quit--;
-}
-
-#if 0
-
-#define NUMCPYBYTES 20
-
-static void
-bfd_copy (bfd *from_bfd, bfd *to_bfd)
-{
-  asection *p, *new;
-  int i;
-  char buf[NUMCPYBYTES];
-
-  for (p = from_bfd->sections; p != NULL; p = p->next)
-    {
-      printf ("  Copying section %s. Size = %x.\n", p->name, p->_cooked_size);
-      printf ("    vma = %x,  offset = %x,  output_sec = %x\n",
-	      p->vma, p->output_offset, p->output_section);
-      new = bfd_make_section (to_bfd, p->name);
-      if (p->_cooked_size &&
-	  !bfd_set_section_size (to_bfd, new, p->_cooked_size))
-	{
-	  error ("Wrong BFD size!\n");
-	}
-      if (!bfd_set_section_flags (to_bfd, new, p->flags))
-	{
-	  error ("bfd_set_section_flags");
-	}
-      new->vma = p->vma;
-
-      for (i = 0; (i + NUMCPYBYTES) < p->_cooked_size; i += NUMCPYBYTES)
-	{
-	  if (!bfd_get_section_contents (from_bfd, p, buf, (file_ptr) i,
-					 (bfd_size_type) NUMCPYBYTES))
-	    {
-	      error ("bfd_get_section_contents\n");
-	    }
-	  if (!bfd_set_section_contents (to_bfd, new, buf, (file_ptr) i,
-					 (bfd_size_type) NUMCPYBYTES))
-	    {
-	      error ("bfd_set_section_contents\n");
-	    }
-	}
-      bfd_get_section_contents (from_bfd, p, buf, (file_ptr) i,
-				(bfd_size_type) (p->_cooked_size - i));
-      bfd_set_section_contents (to_bfd, new, buf, (file_ptr) i,
-				(bfd_size_type) (p->_cooked_size - i));
-    }
-}
-
-#endif
-
-/* Start an process on the es1800 and set inferior_ptid to the new
-   process' pid.
-   execfile - the file to run
-   args     - arguments passed to the program
-   env      - the environment vector to pass    */
-
-static void
-es1800_create_inferior (char *execfile, char *args, char **env)
-{
-  int entry_pt;
-  int pid;
-#if 0
-  struct expression *expr;
-  register struct cleanup *old_chain = 0;
-  register value val;
-#endif
-
-  if (args && *args)
-    {
-      error ("Can't pass arguments to remote ES1800 process");
-    }
-
-#if 0
-  if (query ("Use 'start' as entry point? "))
-    {
-      expr = parse_c_expression ("start");
-      old_chain = make_cleanup (free_current_contents, &expr);
-      val = evaluate_expression (expr);
-      entry_pt = (val->location).address;
-    }
-  else
-    {
-      printf ("Enter the program's entry point (in hexadecimal): ");
-      scanf ("%x", &entry_pt);
-    }
-#endif
-
-  if (execfile == 0 || exec_bfd == 0)
-    {
-      error ("No executable file specified");
-    }
-
-  entry_pt = (int) bfd_get_start_address (exec_bfd);
-
-  pid = 42;
-
-  /* Now that we have a child process, make it our target.  */
-
-  push_target (&es1800_child_ops);
-
-  /* The "process" (board) is already stopped awaiting our commands, and
-     the program is already downloaded.  We just set its PC and go.  */
-
-  inferior_ptid = pid_to_ptid (pid);	/* Needed for wait_for_inferior below */
-
-  clear_proceed_status ();
-
-  /* Tell wait_for_inferior that we've started a new process.  */
-
-  init_wait_for_inferior ();
-
-  /* Set up the "saved terminal modes" of the inferior
-     based on what modes we are starting it with.  */
-
-  target_terminal_init ();
-
-  /* Install inferior's terminal modes.  */
-
-  target_terminal_inferior ();
-
-  /* remote_start (args); */
-  /* trap_expected = 0; */
-  /* insert_step_breakpoint ();  FIXME, do we need this?  */
-
-  /* Let 'er rip... */
-  proceed ((CORE_ADDR) entry_pt, TARGET_SIGNAL_DEFAULT, 0);
-
-}
-
-
-/* The process has died, clean up.  */
-
-static void
-es1800_mourn_inferior (void)
-{
-  remove_breakpoints ();
-  unpush_target (&es1800_child_ops);
-  generic_mourn_inferior ();	/* Do all the proper things now */
-}
-
-/* ES1800-protocol specific routines */
-
-/* Keep discarding input from the remote system, until STRING is found. 
-   Let the user break out immediately. 
-   string - the string to expect
-   nowait - break out if string not the emulator's first respond otherwise
-   read until string is found (== 0)   */
-
-static void
-expect (char *string, int nowait)
-{
-  char c;
-  char *p = string;
-
-  immediate_quit++;
-  while (1)
-    {
-      c = readchar ();
-      if (isalpha (c))
-	{
-	  c = toupper (c);
-	}
-      if (c == toupper (*p))
-	{
-	  p++;
-	  if (*p == '\0')
-	    {
-	      immediate_quit--;
-	      return;
-	    }
-	}
-      else if (!nowait)
-	{
-	  p = string;
-	}
-      else
-	{
-	  printf ("\'%s\' expected\n", string);
-	  printf ("char %d is %d", p - string, c);
-	  error ("\n");
-	}
-    }
-}
-
-/* Keep discarding input until we see the prompt.  */
-
-static void
-expect_prompt (void)
-{
-  expect (">", 0);
-}
-
-
-/* Read one character */
-
-#ifdef DEBUG_STDIN
-
-/* read from stdin */
-
-static int
-readchar (void)
-{
-  char buf[1];
-
-  buf[0] = '\0';
-  printf ("readchar, give one character\n");
-  read (0, buf, 1);
-
-#if defined (LOG_FILE)
-  putc (buf[0] & 0x7f, log_file);
-#endif
-
-  return (buf[0] & 0x7f);
-}
-
-#else /* !DEBUG_STDIN */
-
-/* Read a character from the remote system, doing all the fancy
-   timeout stuff.  */
-
-static int
-readchar (void)
-{
-  int ch;
-
-  ch = serial_readchar (es1800_desc, timeout);
-
-  /* FIXME: doing an error() here will probably cause trouble, at least if from
-     es1800_wait.  */
-  if (ch == SERIAL_TIMEOUT)
-    error ("Timeout reading from remote system.");
-  else if (ch == SERIAL_ERROR)
-    perror_with_name ("remote read");
-
-#if defined (LOG_FILE)
-  putc (ch & 0x7f, log_file);
-  fflush (log_file);
-#endif
-
-  return (ch);
-}
-
-#endif /* DEBUG_STDIN */
-
-
-/* Send a command to the emulator and save the reply.
-   Report an error if we get an error reply.
-   string - the es1800 command
-   buf    - containing the emulator reply on return
-   len    - size of buf  */
-
-static void
-send_with_reply (char *string, char *buf, int len)
-{
-  send (string);
-  serial_write (es1800_desc, "\r", 1);
-
-#ifndef DEBUG_STDIN
-  expect (string, 1);
-  expect ("\r\n", 0);
-#endif
-
-  getmessage (buf, len);
-}
-
-
-/* Send the command in STR to the emulator adding \r. check
-   the echo for consistency. 
-   string - the es1800 command  */
-
-static void
-send_command (char *string)
-{
-  send (string);
-  serial_write (es1800_desc, "\r", 1);
-
-#ifndef DEBUG_STDIN
-  expect (string, 0);
-  expect_prompt ();
-#endif
-
-}
-
-/* Send a string
-   string - the es1800 command  */
-
-static void
-send (char *string)
-{
-  if (kiodebug)
-    {
-      fprintf_unfiltered (gdb_stderr, "Sending: %s\n", string);
-    }
-  serial_write (es1800_desc, string, strlen (string));
-}
-
-
-/* Read a message from the emulator and store it in BUF. 
-   buf    - containing the emulator reply on return
-   len    - size of buf  */
-
-static void
-getmessage (char *buf, int len)
-{
-  char *bp;
-  int c;
-  int prompt_found = 0;
-  extern kiodebug;
-
-#if defined (LOG_FILE)
-  /* This is a convenient place to do this.  The idea is to do it often
-     enough that we never lose much data if we terminate abnormally.  */
-  fflush (log_file);
-#endif
-
-  bp = buf;
-  c = readchar ();
-  do
-    {
-      if (c)
-	{
-	  if (len-- < 2)	/* char and terminaling NULL */
-	    {
-	      error ("input buffer overrun\n");
-	    }
-	  *bp++ = c;
-	}
-      c = readchar ();
-      if ((c == '>') && (*(bp - 1) == ' '))
-	{
-	  prompt_found = 1;
-	}
-    }
-  while (!prompt_found);
-  *bp = 0;
-
-  if (kiodebug)
-    {
-      fprintf_unfiltered (gdb_stderr, "message received :%s\n", buf);
-    }
-}
-
-static void
-download (FILE *instream, int from_tty, int format)
-{
-  char c;
-  char buf[160];
-  int i = 0;
-
-  send_command ("SET #2,$1A");	/* reset char = ^Z */
-  send_command ("SET #3,$11,$13");	/* XON  XOFF */
-  if (format == 2)
-    {
-      send_command ("SET #26,#2");
-    }
-  else
-    {
-      send_command ("SET #26,#5");	/* Format=Extended Tekhex */
-    }
-  send_command ("DFB = $10");
-  send_command ("PUR");
-  send_command ("CES");
-  send ("DNL\r");
-  expect ("DNL", 1);
-  if (from_tty)
-    {
-      printf ("    0 records loaded...\r");
-    }
-  while (fgets (buf, 160, instream))
-    {
-      send (buf);
-      if (from_tty)
-	{
-	  printf ("%5d\b\b\b\b\b", ++i);
-	  fflush (stdout);
-	}
-      if ((c = readchar ()) != 006)
-	{
-	  error ("expected ACK");
-	}
-    }
-  if (from_tty)
-    {
-      printf ("- All");
-    }
-}
-
-/* Additional commands */
-
-#if defined (TIOCGETP) && defined (FNDELAY) && defined (EWOULDBLOCK)
-#define PROVIDE_TRANSPARENT
-#endif
-
-#ifdef PROVIDE_TRANSPARENT
-/* Talk directly to the emulator
-   FIXME, uses busy wait, and is SUNOS (or at least BSD) specific  */
-
-/*ARGSUSED */
-static void
-es1800_transparent (char *args, int from_tty)
-{
-  int console;
-  struct sgttyb modebl;
-  int fcflag;
-  int cc;
-  struct sgttyb console_mode_save;
-  int console_fc_save;
-  int es1800_fc_save;
-  int inputcnt = 80;
-  char inputbuf[80];
-  int consolecnt = 0;
-  char consolebuf[80];
-  int es1800_cnt = 0;
-  char es1800_buf[80];
-  int i;
-
-  dont_repeat ();
-  if (es1800_desc == NULL)
-    {
-      printf ("No emulator attached, type emulator-command first\n");
-      return;
-    }
-
-  printf ("\n");
-  printf ("You are now communicating directly with the ES 1800 emulator.\n");
-  printf ("To leave this mode (transparent mode), press ^E.\n");
-  printf ("\n");
-  printf (" >");
-  fflush (stdout);
-
-  if ((console = open ("/dev/tty", O_RDWR)) == -1)
-    {
-      perror_with_name ("/dev/tty:");
-    }
-
-  if ((fcflag = fcntl (console, F_GETFL, 0)) == -1)
-    {
-      perror_with_name ("fcntl console");
-    }
-
-  console_fc_save = fcflag;
-  fcflag = fcflag | FNDELAY;
-
-  if (fcntl (console, F_SETFL, fcflag) == -1)
-    {
-      perror_with_name ("fcntl console");
-    }
-
-  if (ioctl (console, TIOCGETP, &modebl))
-    {
-      perror_with_name ("ioctl console");
-    }
-
-  console_mode_save = modebl;
-  modebl.sg_flags = RAW;
-
-  if (ioctl (console, TIOCSETP, &modebl))
-    {
-      perror_with_name ("ioctl console");
-    }
-
-  if ((fcflag = fcntl (deprecated_serial_fd (es1800_desc), F_GETFL, 0)) == -1)
-    {
-      perror_with_name ("fcntl serial");
-    }
-
-  es1800_fc_save = fcflag;
-  fcflag = fcflag | FNDELAY;
-
-  if (fcntl (deprecated_serial_fd (es1800_desc), F_SETFL, fcflag) == -1)
-    {
-      perror_with_name ("fcntl serial");
-    }
-
-  while (1)
-    {
-      cc = read (console, inputbuf, inputcnt);
-      if (cc != -1)
-	{
-	  if ((*inputbuf & 0x7f) == 0x05)
-	    {
-	      break;
-	    }
-	  for (i = 0; i < cc;)
-	    {
-	      es1800_buf[es1800_cnt++] = inputbuf[i++];
-	    }
-	  if ((cc = serial_write (es1800_desc, es1800_buf, es1800_cnt)) == -1)
-	    {
-	      perror_with_name ("FEL! write:");
-	    }
-	  es1800_cnt -= cc;
-	  if (es1800_cnt && cc)
-	    {
-	      for (i = 0; i < es1800_cnt; i++)
-		{
-		  es1800_buf[i] = es1800_buf[cc + i];
-		}
-	    }
-	}
-      else if (errno != EWOULDBLOCK)
-	{
-	  perror_with_name ("FEL! read:");
-	}
-
-      cc = read (deprecated_serial_fd (es1800_desc), inputbuf, inputcnt);
-      if (cc != -1)
-	{
-	  for (i = 0; i < cc;)
-	    {
-	      consolebuf[consolecnt++] = inputbuf[i++];
-	    }
-	  if ((cc = write (console, consolebuf, consolecnt)) == -1)
-	    {
-	      perror_with_name ("FEL! write:");
-	    }
-	  consolecnt -= cc;
-	  if (consolecnt && cc)
-	    {
-	      for (i = 0; i < consolecnt; i++)
-		{
-		  consolebuf[i] = consolebuf[cc + i];
-		}
-	    }
-	}
-      else if (errno != EWOULDBLOCK)
-	{
-	  perror_with_name ("FEL! read:");
-	}
-    }
-
-  console_fc_save = console_fc_save & !FNDELAY;
-  if (fcntl (console, F_SETFL, console_fc_save) == -1)
-    {
-      perror_with_name ("FEL! fcntl");
-    }
-
-  if (ioctl (console, TIOCSETP, &console_mode_save))
-    {
-      perror_with_name ("FEL! ioctl");
-    }
-
-  close (console);
-
-  if (fcntl (deprecated_serial_fd (es1800_desc), F_SETFL, es1800_fc_save) == -1)
-    {
-      perror_with_name ("FEL! fcntl");
-    }
-
-  printf ("\n");
-
-}
-#endif /* PROVIDE_TRANSPARENT */
-
-static void
-es1800_init_break (char *args, int from_tty)
-{
-  CORE_ADDR memaddress = 0;
-  char buf[PBUFSIZ];
-  char base_addr[4];
-  char *space_index;
-  char *p;
-  int k;
-
-  if (args == NULL)
-    {
-      error_no_arg ("a trap vector");
-    }
-
-  if (!(space_index = strchr (args, ' ')))
-    {
-      error ("Two arguments needed (trap vector and address of break routine).\n");
-    }
-
-  *space_index = '\0';
-
-  es1800_break_vec = strtol (args, (char **) NULL, 0);
-  es1800_break_address = parse_and_eval_address (space_index + 1);
-
-  es1800_create_break_insn (es1800_break_insn, es1800_break_vec);
-
-  if (m68020)
-    {
-      send_with_reply ("VBR ", buf, sizeof (buf));
-      p = buf;
-      for (k = 0; k < 4; k++)
-	{
-	  if ((p[k * 2 + 1] == 0) || (p[k * 2 + 2] == 0))
-	    {
-	      error ("Emulator reply is too short: %s", buf);
-	    }
-	  base_addr[k] = (fromhex (p[k * 2 + 1]) * 16) + fromhex (p[k * 2 + 2]);
-	}
-      /* base addr of exception vector table */
-      memaddress = *((CORE_ADDR *) base_addr);
-    }
-
-  memaddress += (es1800_break_vec + 32) * 4;	/* address of trap vector */
-
-  sprintf (buf, "@.L%lx=$%lx", memaddress, es1800_break_address);
-  send_command (buf);		/* set the address of the break routine in the */
-  /* trap vector */
-
-  sprintf (buf, "@.L%lx=$4E714E71", es1800_break_address);	/* NOP; NOP */
-  send_command (buf);
-  sprintf (buf, "@.L%lx=$4E714E73", es1800_break_address + 4);	/* NOP; RTE */
-  send_command (buf);
-
-  sprintf (buf, "AC2=$%lx", es1800_break_address + 4);
-  /* breakpoint at es1800-break_address */
-  send_command (buf);
-  send_command ("WHEN AC2 THEN BRK");	/* ie in exception routine */
-
-  if (from_tty)
-    {
-      printf ("Breakpoint (trap $%x) routine at address: %lx\n",
-	      es1800_break_vec, es1800_break_address);
-    }
-}
-
-static void
-es1800_child_open (char *arg, int from_tty)
-{
-  error ("Use the \"run\" command to start a child process.");
-}
-
-static void
-es1800_child_detach (char *args, int from_tty)
-{
-  if (args)
-    {
-      error ("Argument given to \"detach\" when remotely debugging.");
-    }
-
-  pop_target ();
-  if (from_tty)
-    {
-      printf ("Ending debugging the process %d.\n", PIDGET (inferior_ptid));
-    }
-}
-
-
-/* Define the target subroutine names  */
-
-struct target_ops es1800_ops;
-
-static void
-init_es1800_ops (void)
-{
-  es1800_ops.to_shortname = "es1800";
-  es1800_ops.to_longname = "Remote serial target in ES1800-emulator protocol";
-  es1800_ops.to_doc = "Remote debugging on the es1800 emulator via a serial line.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).";
-  es1800_ops.to_open = es1800_open;
-  es1800_ops.to_close = es1800_close;
-  es1800_ops.to_attach = es1800_attach;
-  es1800_ops.to_detach = es1800_detach;
-  es1800_ops.to_resume = es1800_resume;
-  es1800_ops.to_prepare_to_store = es1800_prepare_to_store;
-  es1800_ops.to_xfer_memory = es1800_xfer_inferior_memory;
-  es1800_ops.to_files_info = es1800_files_info;
-  es1800_ops.to_insert_breakpoint = es1800_insert_breakpoint;
-  es1800_ops.to_remove_breakpoint = es1800_remove_breakpoint;
-  es1800_ops.to_load = es1800_load;
-  es1800_ops.to_create_inferior = es1800_create_inferior;
-  es1800_ops.to_stratum = core_stratum;
-  es1800_ops.to_has_memory = 1;
-  es1800_ops.to_magic = OPS_MAGIC;
-}
-
-/* Define the target subroutine names  */
-
-struct target_ops es1800_child_ops;
-
-static void
-init_es1800_child_ops (void)
-{
-  es1800_child_ops.to_shortname = "es1800_process";
-  es1800_child_ops.to_longname = "Remote serial target in ES1800-emulator protocol";
-  es1800_child_ops.to_doc = "Remote debugging on the es1800 emulator via a serial line.\n\
-Specify the serial device it is connected to (e.g. /dev/ttya).";
-  es1800_child_ops.to_open = es1800_child_open;
-  es1800_child_ops.to_attach = es1800_attach;
-  es1800_child_ops.to_detach = es1800_child_detach;
-  es1800_child_ops.to_resume = es1800_resume;
-  es1800_child_ops.to_wait = es1800_wait;
-  es1800_child_ops.to_fetch_registers = es1800_fetch_register;
-  es1800_child_ops.to_store_registers = es1800_store_register;
-  es1800_child_ops.to_prepare_to_store = es1800_prepare_to_store;
-  es1800_child_ops.to_xfer_memory = es1800_xfer_inferior_memory;
-  es1800_child_ops.to_files_info = es1800_files_info;
-  es1800_child_ops.to_insert_breakpoint = es1800_insert_breakpoint;
-  es1800_child_ops.to_remove_breakpoint = es1800_remove_breakpoint;
-  es1800_child_ops.to_kill = es1800_kill;
-  es1800_child_ops.to_load = es1800_load;
-  es1800_child_ops.to_create_inferior = es1800_create_inferior;
-  es1800_child_ops.to_mourn_inferior = es1800_mourn_inferior;
-  es1800_child_ops.to_stratum = process_stratum;
-  es1800_child_ops.to_has_all_memory = 1;
-  es1800_child_ops.to_has_memory = 1;
-  es1800_child_ops.to_has_stack = 1;
-  es1800_child_ops.to_has_registers = 1;
-  es1800_child_ops.to_has_execution = 1;
-  es1800_child_ops.to_magic = OPS_MAGIC;
-}
-
-void
-_initialize_es1800 (void)
-{
-  init_es1800_ops ();
-  init_es1800_child_ops ();
-  add_target (&es1800_ops);
-  add_target (&es1800_child_ops);
-#ifdef PROVIDE_TRANSPARENT
-  add_com ("transparent", class_support, es1800_transparent,
-	   "Start transparent communication with the ES 1800 emulator.");
-#endif /* PROVIDE_TRANSPARENT */
-  add_com ("init_break", class_support, es1800_init_break,
-	 "Download break routine and initialize break facility on ES 1800");
-}
Index: config/djgpp/fnchange.lst
===================================================================
RCS file: /cvs/src/src/gdb/config/djgpp/fnchange.lst,v
retrieving revision 1.43
diff -u -r1.43 fnchange.lst
--- config/djgpp/fnchange.lst	17 Jan 2003 16:56:52 -0000	1.43
+++ config/djgpp/fnchange.lst	29 Jan 2003 20:49:33 -0000
@@ -172,7 +172,6 @@
 @V@/gdb/remote-array.c @V@/gdb/rmt-array.c
 @V@/gdb/remote-e7000.c @V@/gdb/rmt-e7000.c
 @V@/gdb/remote-eb.c @V@/gdb/rmt-eb.c
-@V@/gdb/remote-es.c @V@/gdb/rmt-es.c
 @V@/gdb/remote-est.c @V@/gdb/rmt-est.c
 @V@/gdb/remote-mips.c @V@/gdb/emt-mips.c
 @V@/gdb/remote-mm.c @V@/gdb/emt-mm.c
Index: config/m68k/es1800.mt
===================================================================
RCS file: config/m68k/es1800.mt
diff -N config/m68k/es1800.mt
--- config/m68k/es1800.mt	16 Apr 1999 01:34:21 -0000	1.1.1.1
+++ /dev/null	1 Jan 1970 00:00:00 -0000
@@ -1,9 +0,0 @@
-# Target:  Ericsson ES-1800 emulator (remote) for m68k.
-
-# remote-es.o should perhaps be part of the standard monitor.mt
-# configuration, if it is desirable to reduce the number of different
-# configurations.  However, before that happens remote-es.c has to be
-# fixed to compile on a DOS host.
-
-TDEPFILES= m68k-tdep.o remote-es.o 
-TM_FILE= tm-es1800.h
Index: doc/gdb.texinfo
===================================================================
RCS file: /cvs/src/src/gdb/doc/gdb.texinfo,v
retrieving revision 1.143
diff -u -r1.143 gdb.texinfo
--- doc/gdb.texinfo	29 Jan 2003 16:10:53 -0000	1.143
+++ doc/gdb.texinfo	29 Jan 2003 20:49:43 -0000
@@ -11831,19 +11831,6 @@
 
 @end table
 
-If @value{GDBN} is configured with @code{m68*-ericsson-*}, it will
-instead have only a single special target command:
-
-@table @code
-
-@kindex target es1800
-@item target es1800 @var{dev}
-ES-1800 emulator for M68K.
-
-@end table
-
-[context?]
-
 @table @code
 
 @kindex target rombug

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]