]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gdb/sparclet-stub.c
Protoization.
[thirdparty/binutils-gdb.git] / gdb / sparclet-stub.c
index ecf670b11526838a443edc3e0de1a3b5edb75caa..f593df7f7e349f34752f26622fe3ce312eb5a96b 100644 (file)
@@ -50,7 +50,7 @@
  *
  *    g             return the value of the CPU registers  hex data or ENN
  *    G             set the value of the CPU registers     OK or ENN
- *    P             set the value of a single CPU register OK or P01 (???)
+ *    P             set the value of a single CPU register 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
@@ -65,9 +65,6 @@
  *
  *    ?             What was the last sigval ?             SNN   (signal NN)
  *
- *    bBB..BB      Set baud rate to BB..BB                OK or BNN, then sets
- *                                                        baud rate
- *
  * All commands and responses are sent with a packet which includes a
  * checksum.  A packet consists of
  *
@@ -438,8 +435,7 @@ recursive_trap:
 /* Convert ch from a hex digit to an int */
 
 static int
-hex(ch)
-     unsigned char ch;
+hex (unsigned char ch)
 {
   if (ch >= 'a' && ch <= 'f')
     return ch-'a'+10;
@@ -450,76 +446,79 @@ hex(ch)
   return -1;
 }
 
+static char remcomInBuffer[BUFMAX];
+static char remcomOutBuffer[BUFMAX];
+
 /* scan for the sequence $<data>#<checksum>     */
 
-static void
-getpacket(buffer)
-     char *buffer;
+unsigned char *
+getpacket (void)
 {
+  unsigned char *buffer = &remcomInBuffer[0];
   unsigned char checksum;
   unsigned char xmitcsum;
-  int i;
   int count;
-  unsigned char ch;
+  char ch;
 
-  do
+  while (1)
     {
       /* wait around for the start character, ignore all other characters */
-      while ((ch = (getDebugChar() & 0x7f)) != '$') 
+      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() & 0x7f;
+         ch = getDebugChar ();
+         if (ch == '$')
+           goto retry;
          if (ch == '#')
            break;
          checksum = checksum + ch;
          buffer[count] = ch;
          count = count + 1;
        }
-
-      if (count >= BUFMAX)
-       continue;
-
       buffer[count] = 0;
 
       if (ch == '#')
        {
-         xmitcsum = hex(ch = getDebugChar() & 0x7f) << 4;
-         xmitcsum |= hex(ch = getDebugChar() & 0x7f);
+         ch = getDebugChar ();
+         xmitcsum = hex (ch) << 4;
+         ch = getDebugChar ();
+         xmitcsum += hex (ch);
 
          if (checksum != xmitcsum)
-           putDebugChar('-');  /* failed checksum */
+           {
+             putDebugChar ('-');       /* failed checksum */
+           }
          else
            {
-             putDebugChar('+'); /* successful transfer */
+             putDebugChar ('+');       /* successful transfer */
+
              /* if a sequence char is present, reply the sequence ID */
              if (buffer[2] == ':')
                {
-                 putDebugChar(buffer[0]);
-                 putDebugChar(buffer[1]);
-                 /* remove sequence chars from buffer */
-                 count = strlen(buffer);
-                 for (i=3; i <= count; i++)
-                   buffer[i-3] = buffer[i];
+                 putDebugChar (buffer[0]);
+                 putDebugChar (buffer[1]);
+
+                 return &buffer[3];
                }
+
+             return &buffer[0];
            }
        }
     }
-  while (checksum != xmitcsum);
 }
 
 /* send the packet in buffer.  */
 
 static void
-putpacket(buffer)
-     unsigned char *buffer;
+putpacket (unsigned char *buffer)
 {
   unsigned char checksum;
   int count;
@@ -544,12 +543,9 @@ putpacket(buffer)
       putDebugChar(hexchars[checksum & 0xf]);
 
     }
-  while ((getDebugChar() & 0x7f) != '+');
+  while (getDebugChar() != '+');
 }
 
-static char remcomInBuffer[BUFMAX];
-static char remcomOutBuffer[BUFMAX];
-
 /* Indicate to caller of mem2hex or hex2mem that there has been an
    error.  */
 static volatile int mem_err = 0;
@@ -562,11 +558,7 @@ static volatile int mem_err = 0;
  */
 
 static unsigned char *
-mem2hex(mem, buf, count, may_fault)
-     unsigned char *mem;
-     unsigned char *buf;
-     int count;
-     int may_fault;
+mem2hex (unsigned char *mem, unsigned char *buf, int count, int may_fault)
 {
   unsigned char ch;
 
@@ -592,11 +584,7 @@ mem2hex(mem, buf, count, may_fault)
  * return a pointer to the character AFTER the last byte written */
 
 static char *
-hex2mem(buf, mem, count, may_fault)
-     unsigned char *buf;
-     unsigned char *mem;
-     int count;
-     int may_fault;
+hex2mem (unsigned char *buf, unsigned char *mem, int count, int may_fault)
 {
   int i;
   unsigned char ch;
@@ -642,17 +630,13 @@ static struct hard_trap_info
 /* Set up exception handlers for tracing and breakpoints */
 
 void
-set_debug_traps()
+set_debug_traps (void)
 {
   struct hard_trap_info *ht;
 
   for (ht = hard_trap_info; ht->tt && ht->signo; ht++)
     exceptionHandler(ht->tt, trap_low);
 
-  /* In case GDB is started before us, ack any packets (presumably
-     "$?#xx") sitting there.  */
-  putDebugChar ('+');
-
   initialized = 1;
 }
 
@@ -673,8 +657,7 @@ _fltr_set_mem_err:
 ");
 
 static void
-set_mem_fault_trap(enable)
-     int enable;
+set_mem_fault_trap (int enable)
 {
   extern void fltr_set_mem_err();
   mem_err = 0;
@@ -697,8 +680,7 @@ _dummy_hw_breakpoint:
 ");
 
 static void
-set_hw_breakpoint_trap(enable)
-     int enable;
+set_hw_breakpoint_trap (int enable)
 {
   extern void dummy_hw_breakpoint();
 
@@ -709,7 +691,7 @@ set_hw_breakpoint_trap(enable)
 }
 
 static void
-get_in_break_mode()
+get_in_break_mode (void)
 {
 #if 0
   int x;
@@ -733,8 +715,7 @@ get_in_break_mode()
 /* Convert the SPARC hardware trap type code to a unix signal number. */
 
 static int
-computeSignal(tt)
-     int tt;
+computeSignal (int tt)
 {
   struct hard_trap_info *ht;
 
@@ -780,8 +761,7 @@ hexToInt(char **ptr, int *intValue)
  */
 
 static void
-handle_exception (registers)
-     unsigned long *registers;
+handle_exception (unsigned long *registers)
 {
   int tt;                      /* Trap type */
   int sigval;
@@ -884,8 +864,8 @@ handle_exception (registers)
     {
       remcomOutBuffer[0] = 0;
 
-      getpacket(remcomInBuffer);
-      switch (remcomInBuffer[0])
+      ptr = getpacket();
+      switch (*ptr++)
        {
        case '?':
          remcomOutBuffer[0] = 'S';
@@ -932,9 +912,7 @@ handle_exception (registers)
 
            psr = registers[PSR];
 
-           ptr = &remcomInBuffer[1];
-
-           if (remcomInBuffer[0] == 'P')       /* do a single register */
+           if (ptr[-1] == 'P') /* do a single register */
              {
                int regno;
  
@@ -946,7 +924,7 @@ handle_exception (registers)
                     hex2mem (ptr, (char *)&registers[regno], 4, 0);
                 else
                   {
-                    strcpy (remcomOutBuffer, "P01");
+                    strcpy (remcomOutBuffer, "E01");
                     break;
                   }
              }
@@ -985,8 +963,6 @@ handle_exception (registers)
        case 'm':         /* mAA..AA,LLLL  Read LLLL bytes at address AA..AA */
          /* Try to read %x,%x.  */
 
-         ptr = &remcomInBuffer[1];
-
          if (hexToInt(&ptr, &addr)
              && *ptr++ == ','
              && hexToInt(&ptr, &length))
@@ -1003,8 +979,6 @@ handle_exception (registers)
        case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */
          /* Try to read '%x,%x:'.  */
 
-         ptr = &remcomInBuffer[1];
-
          if (hexToInt(&ptr, &addr)
              && *ptr++ == ','
              && hexToInt(&ptr, &length)
@@ -1022,7 +996,6 @@ handle_exception (registers)
        case 'c':    /* cAA..AA    Continue at address AA..AA(optional) */
          /* try to read optional parameter, pc unchanged if no parm */
 
-         ptr = &remcomInBuffer[1];
          if (hexToInt(&ptr, &addr))
            {
              registers[PC] = addr;
@@ -1049,44 +1022,6 @@ handle_exception (registers)
          asm ("call 0
                nop ");
          break;
-
-#if 0
-Disabled until we can unscrew this properly
-
-       case 'b':         /* bBB...  Set baud rate to BB... */
-         {
-           int baudrate;
-           extern void set_timer_3();
-
-           ptr = &remcomInBuffer[1];
-           if (!hexToInt(&ptr, &baudrate))
-             {
-               strcpy(remcomOutBuffer,"B01");
-               break;
-             }
-
-           /* Convert baud rate to uart clock divider */
-           switch (baudrate)
-             {
-             case 38400:
-               baudrate = 16;
-               break;
-             case 19200:
-               baudrate = 33;
-               break;
-             case 9600:
-               baudrate = 65;
-               break;
-             default:
-               strcpy(remcomOutBuffer,"B02");
-               goto x1;
-             }
-
-           putpacket("OK");    /* Ack before changing speed */
-           set_timer_3(baudrate); /* Set it */
-         }
-x1:      break;
-#endif
        }                       /* switch */
 
       /* reply to the request */
@@ -1100,7 +1035,7 @@ x1:         break;
    the debugger. */
 
 void
-breakpoint()
+breakpoint (void)
 {
   if (!initialized)
     return;
@@ -1112,7 +1047,7 @@ breakpoint()
 }
 
 static void
-hw_breakpoint()
+hw_breakpoint (void)
 {
   asm("
       ta 127