* Rename remote-es1800.c to remote-es.c
[deliverable/binutils-gdb.git] / gdb / remote-mips.c
index 1c7573cd2da0617e12913298176418aaf77ee444..2dc6dd22317eab0b9adf751216132ae7cf4fb422 100644 (file)
@@ -21,6 +21,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 #include "defs.h"
 #include "inferior.h"
+#include "symfile.h"
 #include "bfd.h"
 #include "wait.h"
 #include "gdbcmd.h"
@@ -281,18 +282,19 @@ static int mips_debug = 0;
 /* Handle used to access serial I/O stream.  */
 static serial_t mips_desc;
 
-/* Read a character from the remote, aborting on error.  Returns -2 on
-   timeout (since that's what serial_readchar returns).  FIXME: If we
-   see the string "<IDT>" from the board, then we are debugging on the
-   main console port, and we have somehow dropped out of remote
-   debugging mode.  In this case, we automatically go back in to
-   remote debugging mode.  This is a hack, put in because I can't find
-   any way for a program running on the remote board to terminate
-   without also ending remote debugging mode.  I assume users won't
-   have any trouble with this; for one thing, the IDT documentation
-   generally assumes that the remote debugging port is not the console
-   port.  This is, however, very convenient for DejaGnu when you only
-   have one connected serial port.  */
+/* Read a character from the remote, aborting on error.  Returns
+   SERIAL_TIMEOUT on timeout (since that's what SERIAL_READCHAR
+   returns).  FIXME: If we see the string "<IDT>" from the board, then
+   we are debugging on the main console port, and we have somehow
+   dropped out of remote debugging mode.  In this case, we
+   automatically go back in to remote debugging mode.  This is a hack,
+   put in because I can't find any way for a program running on the
+   remote board to terminate without also ending remote debugging
+   mode.  I assume users won't have any trouble with this; for one
+   thing, the IDT documentation generally assumes that the remote
+   debugging port is not the console port.  This is, however, very
+   convenient for DejaGnu when you only have one connected serial
+   port.  */
 
 static int
 mips_readchar (timeout)
@@ -368,7 +370,7 @@ mips_receive_header (hdr, pgarbage, ch, timeout)
       while (ch != SYN)
        {
          ch = mips_readchar (timeout);
-         if (ch == -2)
+         if (ch == SERIAL_TIMEOUT)
            return -1;
          if (ch != SYN)
            {
@@ -392,7 +394,7 @@ mips_receive_header (hdr, pgarbage, ch, timeout)
       for (i = 1; i < HDR_LENGTH; i++)
        {
          ch = mips_readchar (timeout);
-         if (ch == -2)
+         if (ch == SERIAL_TIMEOUT)
            return -1;
 
          /* Make sure this is a header byte.  */
@@ -428,7 +430,7 @@ mips_receive_trailer (trlr, pgarbage, pch, timeout)
     {
       ch = mips_readchar (timeout);
       *pch = ch;
-      if (ch == -2)
+      if (ch == SERIAL_TIMEOUT)
        return -1;
       if (! TRLR_CHECK (ch))
        return -2;
@@ -517,7 +519,8 @@ mips_send_packet (s, get_ack)
          printf_filtered ("Writing \"%s\"\n", packet + 1);
        }
 
-      if (SERIAL_WRITE (mips_desc, packet, HDR_LENGTH + len + TRLR_LENGTH))
+      if (SERIAL_WRITE (mips_desc, packet,
+                       HDR_LENGTH + len + TRLR_LENGTH) != 0)
        error ("write to target failed: %s", safe_strerror (errno));
 
       garbage = 0;
@@ -653,7 +656,7 @@ mips_receive_packet (buff)
              ch = SYN;
              break;
            }
-         if (rch == -2)
+         if (rch == SERIAL_TIMEOUT)
            error ("Timed out waiting for remote packet");
          buff[i] = rch;
        }
@@ -704,7 +707,7 @@ mips_receive_packet (buff)
                           ack + 1);
        }
 
-      if (SERIAL_WRITE (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH))
+      if (SERIAL_WRITE (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH) != 0)
        error ("write to target failed: %s", safe_strerror (errno));
     }
 
@@ -735,7 +738,7 @@ mips_receive_packet (buff)
                       ack + 1);
     }
 
-  if (SERIAL_WRITE (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH))
+  if (SERIAL_WRITE (mips_desc, ack, HDR_LENGTH + TRLR_LENGTH) != 0)
     error ("write to target failed: %s", safe_strerror (errno));
 
   return len;
@@ -847,7 +850,7 @@ mips_initialize ()
      it means.  The packet seems to be triggered by a carriage return
      character, although perhaps any character would do.  */
   cr = '\r';
-  SERIAL_WRITE (mip_desc, &cr, 1);
+  SERIAL_WRITE (mips_desc, &cr, 1);
 
   hold_wait = mips_receive_wait;
   mips_receive_wait = 3;
@@ -899,8 +902,7 @@ device is attached to the target board (e.g., /dev/ttya).");
     unpush_target (&mips_ops);
 
   mips_desc = SERIAL_OPEN (name);
-
-  if (!mips_desc)
+  if (mips_desc == (serial_t) NULL)
     perror_with_name (name);
 
   SERIAL_RAW (mips_desc);
@@ -1231,74 +1233,6 @@ mips_kill ()
 #endif
 }
 
-/* Load an executable onto the board.  */
-
-static void
-mips_load (args, from_tty)
-     char *args;
-     int from_tty;
-{
-  bfd *abfd;
-  asection *s;
-  int err;
-  CORE_ADDR text;
-
-  abfd = bfd_openr (args, 0);
-  if (abfd == (bfd *) NULL)
-    error ("Unable to open file %s", args);
-
-  if (bfd_check_format (abfd, bfd_object) == 0)
-    error ("%s: Not an object file", args);
-
-  text = UINT_MAX;
-  for (s = abfd->sections; s != (asection *) NULL; s = s->next)
-    {
-      if ((s->flags & SEC_LOAD) != 0)
-       {
-         bfd_size_type size;
-
-         size = bfd_get_section_size_before_reloc (s);
-         if (size > 0)
-           {
-             char *buffer;
-             struct cleanup *old_chain;
-             bfd_vma vma;
-
-             buffer = xmalloc (size);
-             old_chain = make_cleanup (free, buffer);
-
-             vma = bfd_get_section_vma (abfd, s);
-             printf_filtered ("Loading section %s, size 0x%x vma 0x%x\n",
-                              bfd_get_section_name (abfd, s), size, vma);
-             bfd_get_section_contents (abfd, s, buffer, 0, size);
-             mips_xfer_memory (vma, buffer, size, 1, &mips_ops);
-
-             do_cleanups (old_chain);
-
-             if ((bfd_get_section_flags (abfd, s) & SEC_CODE) != 0
-                 && vma < text)
-               text = vma;
-           }
-       }
-    }
-
-  mips_request ('R', (unsigned int) mips_map_regno (PC_REGNUM),
-               (unsigned int) abfd->start_address,
-               &err);
-  if (err)
-    error ("Can't write PC register: %s", safe_strerror (errno));
-
-  bfd_close (abfd);
-
-  /* FIXME: Should we call symbol_file_add here?  The local variable
-     text exists just for this call.  Making the call seems to confuse
-     gdb if more than one file is loaded in.  Perhaps passing MAINLINE
-     as 1 would fix this, but it's not clear that that is correct
-     either since it is possible to load several files onto the board.
-
-     symbol_file_add (args, from_tty, text, 0, 0, 0);  */
-}
-
 /* Start running on the target board.  */
 
 static void
@@ -1329,6 +1263,7 @@ mips_create_inferior (execfile, args, env)
 static void
 mips_mourn_inferior ()
 {
+  unpush_target (&mips_ops);
   generic_mourn_inferior ();
 }
 \f
@@ -1359,7 +1294,7 @@ Specify the serial device it is connected to (e.g., /dev/ttya).",  /* to_doc */
   NULL,                                /* to_terminal_ours */
   NULL,                                /* to_terminal_info */
   mips_kill,                   /* to_kill */
-  mips_load,                   /* to_load */
+  generic_load,                        /* to_load */
   NULL,                                /* to_lookup_symbol */
   mips_create_inferior,                /* to_create_inferior */
   mips_mourn_inferior,         /* to_mourn_inferior */
This page took 0.027603 seconds and 4 git commands to generate.