* serial.h (SERIAL_SET_TTY_STATE): Comment return value.
[deliverable/binutils-gdb.git] / gdb / remote-hms.c
index a21d86e79e0e2b96c99193cfd0507c45667fce01..e86c1350145fcb7fd1ec0f40fd3860df5d4ef141 100644 (file)
@@ -32,6 +32,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "terminal.h"
 #include "target.h"
 #include "gdbcore.h"
+#include "serial.h"
 
 /* External data declarations */
 extern int stop_soon_quietly;  /* for wait_for_inferior */
@@ -49,6 +50,9 @@ extern struct target_ops hms_ops;
 
 static int quiet = 1;
 
+
+serial_t desc;
+
 /***********************************************************************/
 /* Caching stuff stolen from remote-nindy.c  */
 
@@ -232,7 +236,7 @@ static const char *dev_name;
    starts.  */
 
 int is_open = 0;
-int 
+int
 check_open ()
 {
   if (!is_open)
@@ -251,13 +255,13 @@ readchar ()
 {
   int buf;
 
-  buf = serial_readchar (timeout);
+  buf = SERIAL_READCHAR (desc, timeout);
 
-  if (buf < 0)
+  if (buf == SERIAL_TIMEOUT)
     error ("Timeout reading from remote system.");
 
   if (!quiet)
-    printf ("%c", buf);
+    printf_unfiltered ("%c", buf);
 
   return buf & 0x7f;
 }
@@ -267,11 +271,11 @@ readchar_nofail ()
 {
   int buf;
 
-  buf = serial_readchar (timeout);
-  if (buf < 0)
+  buf = SERIAL_READCHAR (desc, timeout);
+  if (buf == SERIAL_TIMEOUT)
     buf = 0;
   if (!quiet)
-    printf ("%c", buf);
+    printf_unfiltered ("%c", buf);
 
   return buf & 0x7f;
 
@@ -408,7 +412,7 @@ hms_load (args, fromtty)
 
   dcache_flush ();
   inferior_pid = 0;
-  abfd = bfd_openr (args, 0);
+  abfd = bfd_openr (args, gnutarget);
   if (!abfd)
     {
       printf_filtered ("Unable to open file %s\n", args);
@@ -442,7 +446,7 @@ hms_load (args, fromtty)
              bfd_get_section_contents (abfd, s, buffer, i, delta);
              hms_write_inferior_memory (s->vma + i, buffer, delta);
              printf_filtered ("*");
-             fflush (stdout);
+             gdb_flush (gdb_stdout);
            }
          printf_filtered ("\n");
          free (buffer);
@@ -481,7 +485,7 @@ hms_create_inferior (execfile, args, env)
   expect_prompt ();
 
   insert_breakpoints ();       /* Needed to get correct instruction in cache */
-  proceed (entry_pt, -1, 0);
+  proceed (entry_pt, TARGET_SIGNAL_DEFAULT, 0);
 }
 
 /* Open a connection to a remote debugger.
@@ -541,7 +545,7 @@ is_baudrate_right ()
 
   while (1)
     {
-      ok = serial_readchar (timeout);
+      ok = SERIAL_READCHAR (desc, timeout);
       if (ok < 0)
        break;
     }
@@ -557,35 +561,16 @@ is_baudrate_right ()
 static void
 set_rate ()
 {
-  if (!serial_setbaudrate (baudrate))
+  if (!SERIAL_SETBAUDRATE (desc, baudrate))
     error ("Can't set baudrate");
 }
 
-static void
-get_baudrate_right ()
-{
-#if 0
-  while (!is_baudrate_right ())
-    {
-      baudrate = serial_nextbaudrate (baudrate);
-      if (baudrate == 0)
-       {
-         printf_filtered ("Board not yet in sync\n");
-         break;
-       }
-      printf_filtered ("Board not responding, trying %d baud\n", baudrate);
-      QUIT;
-      serial_setbaudrate (baudrate);
-    }
-#endif
-}
 
 static void
 hms_open (name, from_tty)
      char *name;
      int from_tty;
 {
-
   unsigned int prl;
   char *p;
 
@@ -595,19 +580,18 @@ hms_open (name, from_tty)
     }
   if (is_open)
     hms_close (0);
-  if (name && strlen (name))
-    dev_name = strdup (name);
-  if (!serial_open (dev_name))
+  dev_name = strdup (name);
+
+  if (!(desc = SERIAL_OPEN (dev_name)))
     perror_with_name ((char *) dev_name);
-  serial_raw ();
+
+  SERIAL_RAW (desc);
   is_open = 1;
 
   dcache_init ();
 
-  get_baudrate_right ();
-
   /* Hello?  Are you there?  */
-  serial_write ("\r", 1);
+  SERIAL_WRITE (desc, "\r", 1);
   expect_prompt ();
 
   /* Clear any break points */
@@ -622,14 +606,14 @@ static void
 hms_close (quitting)
      int quitting;
 {
-
   /* Clear any break points */
   hms_clear_breakpoints ();
-
-  /* Put this port back into REMOTE mode */
   sleep (1);                   /* Let any output make it all the way back */
-  serial_write ("R\r", 2);
-  serial_close ();
+  if (is_open)
+    {
+      SERIAL_WRITE (desc, "R\r", 2);
+      SERIAL_CLOSE (desc);
+    }
   is_open = 0;
 }
 
@@ -654,8 +638,9 @@ hms_detach (args, from_tty)
 /* Tell the remote machine to resume.  */
 
 void
-hms_resume (step, sig)
-     int step, sig;
+hms_resume (pid, step, sig)
+     int pid, step;
+     enum target_signal sig;
 {
   dcache_flush ();
 
@@ -680,8 +665,9 @@ hms_resume (step, sig)
    storing status in STATUS just as `wait' would.  */
 
 int
-hms_wait (status)
-     WAITTYPE *status;
+hms_wait (pid, status)
+     int pid;
+     struct target_waitstatus *status;
 {
   /* Strings to look for.  '?' means match any single character.
      Note that with the algorithm we use, the initial character
@@ -709,16 +695,18 @@ hms_wait (status)
   int old_immediate_quit = immediate_quit;
   int swallowed_cr = 0;
 
-  WSETEXIT ((*status), 0);
+  status->kind = TARGET_WAITKIND_EXITED;
+  status->value.integer = 0;
 
   if (need_artificial_trap != 0)
     {
-      WSETSTOP ((*status), SIGTRAP);
+      status->kind = TARGET_WAITKIND_STOPPED;
+      status->value.sig = TARGET_SIGNAL_TRAP;
       need_artificial_trap--;
       return 0;
     }
 
-  timeout = 99999;             /* Don't time out -- user program is running. */
+  timeout = -1;                /* Don't time out -- user program is running. */
   immediate_quit = 1;          /* Helps ability to QUIT */
   while (1)
     {
@@ -759,12 +747,12 @@ hms_wait (status)
 
          /* Print out any characters which have been swallowed.  */
          for (p = swallowed; p < swallowed_p; ++p)
-           putc (*p, stdout);
+           putc_unfiltered (*p);
          swallowed_p = swallowed;
 
          if ((ch != '\r' && ch != '\n') || swallowed_cr > 10)
            {
-             putc (ch, stdout);
+             putc_unfiltered (ch);
              swallowed_cr = 10;
            }
          swallowed_cr++;
@@ -773,12 +761,14 @@ hms_wait (status)
     }
   if (*bp == '\0')
     {
-      WSETSTOP ((*status), SIGTRAP);
+      status->kind = TARGET_WAITKIND_STOPPED;
+      status->value.sig = TARGET_SIGNAL_TRAP;
       expect_prompt ();
     }
   else
     {
-      WSETEXIT ((*status), 0);
+      status->kind = TARGET_WAITKIND_EXITED;
+      status->value.integer = 0;
     }
 
   timeout = old_timeout;
@@ -794,13 +784,13 @@ static char *
 get_reg_name (regno)
      int regno;
 {
-  static char *rn[NUM_REGS] = REGISTER_NAMES;
+  static char *rn[] = REGISTER_NAMES;
 
   return rn[regno];
 }
 
 /* Read the remote registers.  */
-static int 
+static int
 gethex (length, start, ok)
      unsigned int length;
      char *start;
@@ -850,7 +840,6 @@ timed_read (buf, n, timeout)
 
     }
   return i;
-
 }
 
 hms_write (a, l)
@@ -858,12 +847,12 @@ hms_write (a, l)
 {
   int i;
 
-  serial_write (a, l);
+  SERIAL_WRITE (desc, a, l);
 
   if (!quiet)
     for (i = 0; i < l; i++)
       {
-       printf ("%c", a[i]);
+       printf_unfiltered ("%c", a[i]);
       }
 }
 
@@ -884,7 +873,7 @@ hms_fetch_register (dummy)
   int s;
   int gottok;
 
-  REGISTER_TYPE reg[NUM_REGS];
+  unsigned LONGEST reg[NUM_REGS];
   int foo[8];
 
   check_open ();
@@ -938,8 +927,6 @@ static void
 hms_store_register (regno)
      int regno;
 {
-
-  /* printf("hms_store_register() called.\n"); fflush(stdout); /* */
   if (regno == -1)
     {
       for (regno = 0; regno < NUM_REGS; regno++)
@@ -1043,7 +1030,7 @@ hms_xfer_inferior_memory (memaddr, myaddr, len, write, target)
 
       /* Copy data to be written over corresponding part of buffer */
 
-      bcopy (myaddr, (char *) buffer + (memaddr & (sizeof (int) - 1)), len);
+      memcpy ((char *) buffer + (memaddr & (sizeof (int) - 1)), myaddr, len);
 
       /* Write the entire buffer.  */
 
@@ -1074,7 +1061,7 @@ hms_xfer_inferior_memory (memaddr, myaddr, len, write, target)
        }
 
       /* Copy appropriate bytes out of the buffer.  */
-      bcopy ((char *) buffer + (memaddr & (sizeof (int) - 1)), myaddr, len);
+      memcpy (myaddr, (char *) buffer + (memaddr & (sizeof (int) - 1)), len);
     }
 
   return len;
@@ -1129,7 +1116,7 @@ hms_files_info ()
 #ifdef __GO32__
     printf_filtered ("\tAttached to DOS asynctsr and running program %s\n", file);
 #else
-    printf_filtered ("\tAttached to %s at %d baud and running program %s\n", file);
+    printf_filtered ("\tAttached to %s at %d baud and running program %s\n", dev_name, baudrate, file);
 #endif
   printf_filtered ("\ton an H8/300 processor.\n");
 }
@@ -1218,6 +1205,7 @@ hms_read_inferior_memory (memaddr, myaddr, len)
 
        }
     }
+  expect ("emory>");
   hms_write_cr (" ");
   expect_prompt ();
   return len;
@@ -1232,8 +1220,7 @@ hms_before_main_loop ()
 {
   char ttyname[100];
   char *p, *p2;
-  extern FILE *instream;
-  extern jmp_buf to_top_level;
+  extern GDB_FILE *instream;
 
   push_target (&hms_ops);
 }
@@ -1259,7 +1246,7 @@ hms_insert_breakpoint (addr, save)
     }
   else
     {
-      fprintf_filtered (stderr,
+      fprintf_filtered (gdb_stderr,
                      "Too many break points, break point not installed\n");
       return (1);
     }
@@ -1299,6 +1286,7 @@ static void
 hms_mourn ()
 {
   hms_clear_breakpoints ();
+  unpush_target (&hms_ops);
   generic_mourn_inferior ();
 }
 
@@ -1385,13 +1373,11 @@ hms_speed (s)
       int newrate = atoi (s);
       int which = 0;
 
-      if (!serial_setbaudrate (newrate))
+      if (SERIAL_SETBAUDRATE (desc, newrate))
        error ("Can't use %d baud\n", newrate);
 
       printf_filtered ("Checking target is in sync\n");
 
-      get_baudrate_right ();
-      baudrate = newrate;
       printf_filtered ("Sending commands to set target to %d\n",
                       baudrate);
 
This page took 0.027915 seconds and 4 git commands to generate.