* remote-mips.c: Remove form feeds (^L) from source.
authorMark Alexander <marka@cygnus>
Thu, 27 Feb 1997 21:45:29 +0000 (21:45 +0000)
committerMark Alexander <marka@cygnus>
Thu, 27 Feb 1997 21:45:29 +0000 (21:45 +0000)
(mips_initialize): LSI PMON doesn't support 'set regsize' command.
(pmon_wait): Don't need to exit and re-enter debug mode on LSI
PMON after a continue; it causes target program misbehavior.
(mips_fetch_register): Don't fetch unsupported registers; this
cuts down on wasted serial traffic.

gdb/ChangeLog
gdb/remote-mips.c

index c625e08a54c167f9b2c2c2e33aea33dc61ad8c51..0161c6ddee900923b7c9f90ec3d33c445a538b4d 100644 (file)
@@ -1,3 +1,12 @@
+Thu Feb 27 12:04:24 1997  Mark Alexander  <marka@cygnus.com>
+
+       * remote-mips.c: Remove form feeds (^L) from source.
+       (mips_initialize): LSI PMON doesn't support 'set regsize' command.
+       (pmon_wait): Don't need to exit and re-enter debug mode on LSI
+       PMON after a continue; it causes target program misbehavior.
+       (mips_fetch_register): Don't fetch unsupported registers; this
+       cuts down on wasted serial traffic.
+
 Thu Feb 27 09:38:16 1997  Stu Grossman  (grossman@critters.cygnus.com)
 
        * configure.in configure (HPUX/OSF thread support):  Enable this
index a3e10d72836b2d225003c51b42840a3233e9a8c2..a5cca1d9be0042b292949107f5130bac10539620 100644 (file)
@@ -47,7 +47,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 extern void mips_set_processor_type_command PARAMS ((char *, int));
 
-\f
+
+
 /* Prototypes for local functions.  */
 
 static int mips_readchar PARAMS ((int timeout));
@@ -152,7 +153,8 @@ static void common_open PARAMS ((struct target_ops *ops, char *name,
 extern struct target_ops mips_ops;
 extern struct target_ops pmon_ops;
 extern struct target_ops ddb_ops;
-\f
+
+
 /* The MIPS remote debugging interface is built on top of a simple
    packet protocol.  Each packet is organized as follows:
 
@@ -297,7 +299,7 @@ enum mips_monitor_type {
   /* PMON monitor being used: */
   MON_PMON, /* 3.0.83 [COGENT,EB,FP,NET] Algorithmics Ltd. Nov  9 1995 17:19:50 */
   MON_DDB,  /* 2.7.473 [DDBVR4300,EL,FP,NET] Risq Modular Systems,  Thu Jun 6 09:28:40 PDT 1996 */
-  MON_LSI,  /* 4.2.5 [EB], LSI LOGIC Corp. Wed Dec  6 07:57:45 1995 */
+  MON_LSI,  /* 4.3.12 [EB,FP], LSI LOGIC Corp. Tue Feb 25 13:22:14 1997 */
   /* Last and unused value, for sizing vectors, etc. */
   MON_LAST
 };
@@ -1147,7 +1149,8 @@ mips_receive_packet (buff, throw_error, timeout)
 
   return len;
 }
-\f
+
+
 /* Optionally send a request to the remote system and optionally wait
    for the reply.  This implements the remote debugging protocol,
    which is built on top of the packet protocol defined above.  Each
@@ -1432,7 +1435,8 @@ mips_initialize ()
   if (mips_monitor != MON_IDT)
     {
       /* Ensure the correct target state: */
-      mips_send_command ("set regsize 64\r", -1);
+      if (mips_monitor != MON_LSI)
+       mips_send_command ("set regsize 64\r", -1);
       mips_send_command ("set hostport tty0\r", -1);
       mips_send_command ("set brkcmd \"\"\r", -1);
       /* Delete all the current breakpoints: */
@@ -1668,6 +1672,7 @@ mips_resume (pid, step, siggnal)
      int pid, step;
      enum target_signal siggnal;
 {
+  int err;
 
 /* start-sanitize-gm */
 #ifndef GENERAL_MAGIC
@@ -1678,10 +1683,12 @@ mips_resume (pid, step, siggnal)
 #endif /* GENERAL_MAGIC */
 /* end-sanitize-gm */
 
+  /* LSI PMON requires returns a reply packet "0x1 s 0x0 0x57f" after
+     a single step, so we wait for that.  */
   mips_request (step ? 's' : 'c',
                (unsigned int) 1,
                (unsigned int) siggnal,
-               (int *) NULL,
+               mips_monitor == MON_LSI && step ? &err : (int *) NULL,
                mips_receive_wait, NULL);
 }
 
@@ -1844,7 +1851,7 @@ pmon_wait (pid, status)
      seems to be caused by a check on the number of arguments, and the
      command length, within the monitor causing it to echo the command
      as a bad packet. */
-  if (mips_monitor != MON_DDB)
+  if (mips_monitor != MON_DDB && mips_monitor != MON_LSI)
     {
       mips_exit_debug ();
       mips_enter_debug ();
@@ -1928,18 +1935,26 @@ mips_fetch_registers (regno)
     val = 0;
   else
     {
-      /* Unfortunately the PMON version in the Vr4300 board has been
-         compiled without the 64bit register access commands. This
-         means we cannot get hold of the full register width. */
-      if (mips_monitor == MON_DDB)
-        val = (unsigned)mips_request ('t', (unsigned int) mips_map_regno (regno),
-                            (unsigned int) 0, &err, mips_receive_wait, NULL);
+      /* If PMON doesn't support this register, don't waste serial
+         bandwidth trying to read it.  */
+      int pmon_reg = mips_map_regno (regno);
+      if (regno != 0 && pmon_reg == 0)
+       val = 0;
       else
-        val = mips_request ('r', (unsigned int) mips_map_regno (regno),
-                            (unsigned int) 0, &err, mips_receive_wait, NULL);
-      if (err)
-       mips_error ("Can't read register %d: %s", regno,
-                   safe_strerror (errno));
+       {
+         /* Unfortunately the PMON version in the Vr4300 board has been
+            compiled without the 64bit register access commands. This
+            means we cannot get hold of the full register width. */
+         if (mips_monitor == MON_DDB)
+           val = (unsigned)mips_request ('t', (unsigned int) pmon_reg,
+                               (unsigned int) 0, &err, mips_receive_wait, NULL);
+         else
+           val = mips_request ('r', (unsigned int) pmon_reg,
+                               (unsigned int) 0, &err, mips_receive_wait, NULL);
+         if (err)
+           mips_error ("Can't read register %d: %s", regno,
+                       safe_strerror (errno));
+       }
     }
 
   {
@@ -2235,7 +2250,8 @@ mips_mourn_inferior ()
     unpush_target (current_ops);
   generic_mourn_inferior ();
 }
-\f
+
+
 /* We can write a breakpoint and read the shadow contents in one
    operation.  */
 
@@ -2540,7 +2556,8 @@ common_breakpoint (cmd, addr, mask, flags)
 
   return 0;
 }
-\f
+
+
 static void
 send_srec (srec, len, addr)
      char *srec;
@@ -3212,7 +3229,8 @@ mips_load (file, from_tty)
 
   clear_symtab_users ();
 }
-\f
+
+
 /* The target vector.  */
 
 struct target_ops mips_ops =
@@ -3261,7 +3279,8 @@ HOST:PORT to access a board over a network",  /* to_doc */
   NULL,                                /* sections_end */
   OPS_MAGIC                    /* to_magic */
 };
-\f
+
+
 /* An alternative target vector: */
 struct target_ops pmon_ops =
 {
@@ -3309,7 +3328,8 @@ colon, HOST:PORT to access a board over a network",  /* to_doc */
   NULL,                                /* sections_end */
   OPS_MAGIC                    /* to_magic */
 };
-\f
+
+
 /* Another alternative target vector. This is a PMON system, but with
    a different monitor prompt, aswell as some other operational
    differences: */
@@ -3415,7 +3435,8 @@ of the TFTP temporary file, if it differs from the filename seen by the board",
   NULL,                                /* sections_end */
   OPS_MAGIC                    /* to_magic */
 };
-\f
+
+
 void
 _initialize_remote_mips ()
 {