2 * taken from gdb/remote.c
4 * I am only interested in the write to memory stuff - everything else
7 * all the copyright notices etc have been left in
10 /* enough so that it will compile */
20 #define alloca __builtin_alloca
21 #else /* not GNU C. */
22 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
25 #if defined (MSDOS) && !defined (__TURBOC__)
27 #else /* not MSDOS, or __TURBOC__ */
31 #else /* not MSDOS, __TURBOC__, or _AIX */
35 #endif /* not MSDOS, or __TURBOC__ */
36 #endif /* not sparc. */
37 #endif /* not GNU C. */
45 #endif /* alloca not defined. */
51 #define REGISTER_BYTES 0
52 #define fprintf_unfiltered fprintf
53 #define fprintf_filtered fprintf
54 #define fputs_unfiltered fputs
55 #define fputs_filtered fputs
56 #define fputc_unfiltered fputc
57 #define fputc_filtered fputc
58 #define printf_unfiltered printf
59 #define printf_filtered printf
60 #define puts_unfiltered puts
61 #define puts_filtered puts
62 #define putchar_unfiltered putchar
63 #define putchar_filtered putchar
64 #define fputstr_unfiltered(a,b,c) fputs((a), (c))
65 #define gdb_stdlog stderr
66 #define SERIAL_READCHAR(fd,timo) serialreadchar((fd), (timo))
67 #define SERIAL_WRITE(fd, addr, len) serialwrite((fd), (addr), (len))
69 #define perror_with_name Perror
70 #define gdb_flush fflush
71 #define max(a,b) (((a)>(b))?(a):(b))
72 #define min(a,b) (((a)<(b))?(a):(b))
73 #define target_mourn_inferior() {}
74 #define ULONGEST unsigned long
75 #define CORE_ADDR unsigned long
77 static int putpkt (char *);
78 static int putpkt_binary(char *, int);
79 static void getpkt (char *, int);
81 static int remote_debug = 0, remote_register_buf_size = 0, watchdog = 0;
83 int remote_desc = -1, remote_timeout = 10;
86 fputstrn_unfiltered(char *s, int n, int x, FILE *fp)
95 SERIAL_WRITE(remote_desc, "+", 1);
104 /* Remote target communications for serial-line targets in custom GDB protocol
105 Copyright 1988, 91, 92, 93, 94, 95, 96, 97, 98, 1999
106 Free Software Foundation, Inc.
108 This file is part of GDB.
110 This program is free software; you can redistribute it and/or modify
111 it under the terms of the GNU General Public License as published by
112 the Free Software Foundation; either version 2 of the License, or
113 (at your option) any later version.
115 This program is distributed in the hope that it will be useful,
116 but WITHOUT ANY WARRANTY; without even the implied warranty of
117 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
118 GNU General Public License for more details.
120 You should have received a copy of the GNU General Public License
121 along with this program; if not, write to the Free Software
122 Foundation, Inc., 59 Temple Place - Suite 330,
123 Boston, MA 02111-1307, USA. */
125 /* Remote communication protocol.
127 A debug packet whose contents are <data>
128 is encapsulated for transmission in the form:
130 $ <data> # CSUM1 CSUM2
132 <data> must be ASCII alphanumeric and cannot include characters
133 '$' or '#'. If <data> starts with two characters followed by
134 ':', then the existing stubs interpret this as a sequence number.
136 CSUM1 and CSUM2 are ascii hex representation of an 8-bit
137 checksum of <data>, the most significant nibble is sent first.
138 the hex digits 0-9,a-f are used.
140 Receiver responds with:
142 + - if CSUM is correct and ready for next packet
143 - - if CSUM is incorrect
145 <data> is as follows:
146 Most values are encoded in ascii hex digits. Signal numbers are according
147 to the numbering in target.h.
151 set thread Hct... Set thread for subsequent operations.
152 c = 'c' for thread used in step and
153 continue; t... can be -1 for all
155 c = 'g' for thread used in other
156 operations. If zero, pick a thread,
162 reply XX....X Each byte of register data
163 is described by two hex digits.
164 Registers are in the internal order
165 for GDB, and the bytes in a register
166 are in the same order the machine uses.
169 write regs GXX..XX Each byte of register data
170 is described by two hex digits.
174 write reg Pn...=r... Write register n... with value r...,
175 which contains two hex digits for each
176 byte in the register (target byte
180 (not supported by all stubs).
182 read mem mAA..AA,LLLL AA..AA is address, LLLL is length.
183 reply XX..XX XX..XX is mem contents
184 Can be fewer bytes than requested
185 if able to read only part of the data.
188 write mem MAA..AA,LLLL:XX..XX
190 LLLL is number of bytes,
193 ENN for an error (this includes the case
194 where only part of the data was
197 write mem XAA..AA,LLLL:XX..XX
198 (binary) AA..AA is address,
199 LLLL is number of bytes,
200 XX..XX is binary data
204 continue cAA..AA AA..AA is address to resume
205 If AA..AA is omitted,
206 resume at same address.
208 step sAA..AA AA..AA is address to resume
209 If AA..AA is omitted,
210 resume at same address.
212 continue with Csig;AA..AA Continue with signal sig (hex signal
213 signal number). If ;AA..AA is omitted,
214 resume at same address.
216 step with Ssig;AA..AA Like 'C' but step not continue.
219 last signal ? Reply the current reason for stopping.
220 This is the same reply as is generated
221 for step or cont : SAA where AA is the
226 There is no immediate reply to step or cont.
227 The reply comes when the machine stops.
228 It is SAA AA is the signal number.
230 or... TAAn...:r...;n...:r...;n...:r...;
232 n... = register number (hex)
233 r... = register contents
235 r... = thread process ID. This is
237 n... = other string not starting
238 with valid hex digit.
239 gdb should ignore this n,r pair
240 and go on to the next. This way
241 we can extend the protocol.
242 or... WAA The process exited, and AA is
243 the exit status. This is only
244 applicable for certains sorts of
246 or... XAA The process terminated with signal
248 or (obsolete) NAA;tttttttt;dddddddd;bbbbbbbb
250 tttttttt = address of symbol "_start"
251 dddddddd = base of data section
252 bbbbbbbb = base of bss section.
253 Note: only used by Cisco Systems
254 targets. The difference between this
255 reply and the "qOffsets" query is that
256 the 'N' packet may arrive spontaneously
257 whereas the 'qOffsets' is a query
258 initiated by the host debugger.
259 or... OXX..XX XX..XX is hex encoding of ASCII data. This
260 can happen at any time while the
261 program is running and the debugger
262 should continue to wait for
265 thread alive TXX Find out if the thread XX is alive.
266 reply OK thread is still alive
269 remote restart RXX Restart the remote server
271 extended ops ! Use the extended remote protocol.
272 Sticky -- only needs to be set once.
276 toggle debug d toggle debug flag (see 386 & 68k stubs)
277 reset r reset -- see sparc stub.
278 reserved <other> On other requests, the stub should
279 ignore the request and send an empty
280 response ($#<checksum>). This way
281 we can extend the protocol and GDB
282 can tell whether the stub it is
283 talking to uses the old or the new.
284 search tAA:PP,MM Search backwards starting at address
285 AA for a match with pattern PP and
286 mask MM. PP and MM are 4 bytes.
287 Not supported by all stubs.
289 general query qXXXX Request info about XXXX.
290 general set QXXXX=yyyy Set value of XXXX to yyyy.
291 query sect offs qOffsets Get section offsets. Reply is
292 Text=xxx;Data=yyy;Bss=zzz
294 Responses can be run-length encoded to save space. A '*' means that
295 the next character is an ASCII encoding giving a repeat count which
296 stands for that many repititions of the character preceding the '*'.
297 The encoding is n+29, yielding a printable character where n >=3
298 (which is where rle starts to win). Don't use an n > 126.
301 "0* " means the same as "0000". */
304 /* This variable (available to the user via "set remotebinarydownload")
305 dictates whether downloads are sent in binary (via the 'X' packet).
306 We assume that the stub can, and attempt to do it. This will be cleared if
307 the stub does not understand it. This switch is still needed, though
308 in cases when the packet is supported in the stub, but the connection
309 does not allow it (i.e., 7-bit serial connection only). */
310 static int remote_binary_download = 1;
312 /* Have we already checked whether binary downloads work? */
313 static int remote_binary_checked;
315 /* Maximum number of bytes to read/write at once. The value here
316 is chosen to fill up a packet (the headers account for the 32). */
317 #define MAXBUFBYTES(N) (((N)-32)/2)
319 /* Having this larger than 400 causes us to be incompatible with m68k-stub.c
320 and i386-stub.c. Normally, no one would notice because it only matters
321 for writing large chunks of memory (e.g. in downloads). Also, this needs
322 to be more than 400 if required to hold the registers (see below, where
323 we round it up based on REGISTER_BYTES). */
324 /* Round up PBUFSIZ to hold all the registers, at least. */
325 #define PBUFSIZ ((REGISTER_BYTES > MAXBUFBYTES (400)) \
326 ? (REGISTER_BYTES * 2 + 32) \
330 /* This variable sets the number of bytes to be written to the target
331 in a single packet. Normally PBUFSIZ is satisfactory, but some
332 targets need smaller values (perhaps because the receiving end
335 static int remote_write_size = 0x7fffffff;
337 /* This variable sets the number of bits in an address that are to be
338 sent in a memory ("M" or "m") packet. Normally, after stripping
339 leading zeros, the entire address would be sent. This variable
340 restricts the address to REMOTE_ADDRESS_SIZE bits. HISTORY: The
341 initial implementation of remote.c restricted the address sent in
342 memory packets to ``host::sizeof long'' bytes - (typically 32
343 bits). Consequently, for 64 bit targets, the upper 32 bits of an
344 address was never sent. Since fixing this bug may cause a break in
345 some remote targets this variable is principly provided to
346 facilitate backward compatibility. */
348 static int remote_address_size;
350 /* Convert hex digit A to a number. */
355 if (a >= '0' && a <= '9')
357 else if (a >= 'a' && a <= 'f')
359 else if (a >= 'A' && a <= 'F')
362 error ("Reply contains invalid hex digit %d", a);
367 /* Convert number NIB to a hex digit. */
375 return 'a' + nib - 10;
378 /* Return the number of hex digits in num. */
381 hexnumlen (ULONGEST num)
385 for (i = 0; num != 0; i++)
391 /* Set BUF to the hex digits representing NUM. */
394 hexnumstr (char *buf, ULONGEST num)
397 int len = hexnumlen (num);
401 for (i = len - 1; i >= 0; i--)
403 buf[i] = "0123456789abcdef"[(num & 0xf)];
410 /* Mask all but the least significant REMOTE_ADDRESS_SIZE bits. */
413 remote_address_masked (CORE_ADDR addr)
415 if (remote_address_size > 0
416 && remote_address_size < (sizeof (ULONGEST) * 8))
418 /* Only create a mask when that mask can safely be constructed
419 in a ULONGEST variable. */
421 mask = (mask << remote_address_size) - 1;
427 /* Determine whether the remote target supports binary downloading.
428 This is accomplished by sending a no-op memory write of zero length
429 to the target at the specified address. It does not suffice to send
430 the whole packet, since many stubs strip the eighth bit and subsequently
431 compute a wrong checksum, which causes real havoc with remote_write_bytes.
433 NOTE: This can still lose if the serial line is not eight-bit clean. In
434 cases like this, the user should clear "remotebinarydownload". */
436 check_binary_download (CORE_ADDR addr)
438 if (remote_binary_download && !remote_binary_checked)
440 char *buf = alloca (PBUFSIZ);
442 remote_binary_checked = 1;
446 p += hexnumstr (p, (ULONGEST) addr);
448 p += hexnumstr (p, (ULONGEST) 0);
452 putpkt_binary (buf, (int) (p - buf));
456 remote_binary_download = 0;
461 if (remote_binary_download)
462 fprintf_unfiltered (gdb_stdlog,
463 "binary downloading suppported by target\n");
465 fprintf_unfiltered (gdb_stdlog,
466 "binary downloading NOT suppported by target\n");
470 /* Write memory data directly to the remote machine.
471 This does not inform the data cache; the data cache uses this.
472 MEMADDR is the address in the remote memory space.
473 MYADDR is the address of the buffer in our space.
474 LEN is the number of bytes.
476 Returns number of bytes transferred, or 0 for error. */
479 remote_write_bytes (memaddr, myaddr, len)
484 unsigned char *buf = alloca (PBUFSIZ);
485 int max_buf_size; /* Max size of packet output buffer */
489 /* Verify that the target can support a binary download */
490 check_binary_download (memaddr);
492 /* Chop the transfer down if necessary */
494 max_buf_size = min (remote_write_size, PBUFSIZ);
495 if (remote_register_buf_size != 0)
496 max_buf_size = min (max_buf_size, remote_register_buf_size);
498 /* Subtract header overhead from max payload size - $M<memaddr>,<len>:#nn */
499 max_buf_size -= 2 + hexnumlen (memaddr + len - 1) + 1 + hexnumlen (len) + 4;
504 unsigned char *p, *plen;
508 /* construct "M"<memaddr>","<len>":" */
509 /* sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, todo); */
510 memaddr = remote_address_masked (memaddr);
512 if (remote_binary_download)
515 todo = min (len, max_buf_size);
520 todo = min (len, max_buf_size / 2); /* num bytes that will fit */
523 p += hexnumstr ((char *)p, (ULONGEST) memaddr);
526 plen = p; /* remember where len field goes */
527 p += hexnumstr ((char *)p, (ULONGEST) todo);
531 /* We send target system values byte by byte, in increasing byte
532 addresses, each byte encoded as two hex characters (or one
533 binary character). */
534 if (remote_binary_download)
538 (i < todo) && (i + escaped) < (max_buf_size - 2);
541 switch (myaddr[i] & 0xff)
546 /* These must be escaped */
549 *p++ = (myaddr[i] & 0xff) ^ 0x20;
552 *p++ = myaddr[i] & 0xff;
559 /* Escape chars have filled up the buffer prematurely,
560 and we have actually sent fewer bytes than planned.
561 Fix-up the length field of the packet. */
563 /* FIXME: will fail if new len is a shorter string than
566 plen += hexnumstr ((char *)plen, (ULONGEST) i);
572 for (i = 0; i < todo; i++)
574 *p++ = tohex ((myaddr[i] >> 4) & 0xf);
575 *p++ = tohex (myaddr[i] & 0xf);
580 putpkt_binary ((char *)buf, (int) (p - buf));
581 getpkt ((char *)buf, 0);
585 /* There is no correspondance between what the remote protocol uses
586 for errors and errno codes. We would like a cleaner way of
587 representing errors (big enough to include errno codes, bfd_error
588 codes, and others). But for now just return EIO. */
593 /* Increment by i, not by todo, in case escape chars
594 caused us to send fewer bytes than we'd planned. */
605 /* Stuff for dealing with the packets which are part of this protocol.
606 See comment at top of file for details. */
608 /* Read a single character from the remote end, masking it down to 7 bits. */
611 readchar (int timeout)
615 ch = SERIAL_READCHAR (remote_desc, timeout);
620 error ("Remote connection closed");
622 perror_with_name ("Remote communication error");
634 return putpkt_binary (buf, strlen (buf));
637 /* Send a packet to the remote machine, with error checking. The data
638 of the packet is in BUF. The string in BUF can be at most PBUFSIZ - 5
639 to account for the $, # and checksum, and for a possible /0 if we are
640 debugging (remote_debug) and want to print the sent packet as a string */
643 putpkt_binary (buf, cnt)
648 unsigned char csum = 0;
649 char *buf2 = alloca (PBUFSIZ);
650 char *junkbuf = alloca (PBUFSIZ);
656 /* Copy the packet into buffer BUF2, encapsulating it
657 and giving it a checksum. */
659 if (cnt > BUFSIZ - 5) /* Prosanity check */
665 for (i = 0; i < cnt; i++)
671 *p++ = tohex ((csum >> 4) & 0xf);
672 *p++ = tohex (csum & 0xf);
674 /* Send it over and over until we get a positive ack. */
678 int started_error_output = 0;
683 fprintf_unfiltered (gdb_stdlog, "Sending packet: ");
684 fputstrn_unfiltered (buf2, p - buf2, 0, gdb_stdlog);
685 fprintf_unfiltered (gdb_stdlog, "...");
686 gdb_flush (gdb_stdlog);
688 if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
689 perror_with_name ("putpkt: write failed");
691 /* read until either a timeout occurs (-2) or '+' is read */
694 ch = readchar (remote_timeout);
703 if (started_error_output)
705 putchar_unfiltered ('\n');
706 started_error_output = 0;
715 fprintf_unfiltered (gdb_stdlog, "Ack\n");
721 break; /* Retransmit buffer */
724 /* It's probably an old response, and we're out of sync.
725 Just gobble up the packet and ignore it. */
727 continue; /* Now, go look for + */
732 if (!started_error_output)
734 started_error_output = 1;
735 fprintf_unfiltered (gdb_stdlog, "putpkt: Junk: ");
737 fputc_unfiltered (ch & 0177, gdb_stdlog);
741 break; /* Here to retransmit */
745 /* This is wrong. If doing a long backtrace, the user should be
746 able to get out next time we call QUIT, without anything as
747 violent as interrupt_query. If we want to provide a way out of
748 here without getting to the next QUIT, it should be based on
749 hitting ^C twice as in remote_wait. */
759 /* Come here after finding the start of the frame. Collect the rest
760 into BUF, verifying the checksum, length, and handling run-length
761 compression. Returns 0 on any error, 1 on success. */
764 read_frame (char *buf)
775 c = readchar (remote_timeout);
781 fputs_filtered ("Timeout in mid-packet, retrying\n", gdb_stdlog);
785 fputs_filtered ("Saw new packet start in middle of old one\n",
787 return 0; /* Start a new packet, count retries */
790 unsigned char pktcsum;
794 pktcsum = fromhex (readchar (remote_timeout)) << 4;
795 pktcsum |= fromhex (readchar (remote_timeout));
804 fprintf_filtered (gdb_stdlog,
805 "Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
807 fputs_filtered (buf, gdb_stdlog);
808 fputs_filtered ("\n", gdb_stdlog);
812 case '*': /* Run length encoding */
814 c = readchar (remote_timeout);
816 c = c - ' ' + 3; /* Compute repeat count */
818 if (c > 0 && c < 255 && bp + c - 1 < buf + PBUFSIZ - 1)
820 memset (bp, *(bp - 1), c);
826 printf_filtered ("Repeat count %d too large for buffer: ", c);
828 puts_filtered ("\n");
831 if (bp < buf + PBUFSIZ - 1)
839 puts_filtered ("Remote packet too long: ");
841 puts_filtered ("\n");
848 /* Read a packet from the remote machine, with error checking, and
849 store it in BUF. BUF is expected to be of size PBUFSIZ. If
850 FOREVER, wait forever rather than timing out; this is used while
851 the target is executing user code. */
854 getpkt (buf, forever)
863 strcpy (buf, "timeout");
867 timeout = watchdog > 0 ? watchdog : -1;
871 timeout = remote_timeout;
875 for (tries = 1; tries <= MAX_TRIES; tries++)
877 /* This can loop forever if the remote side sends us characters
878 continuously, but if it pauses, we'll get a zero from readchar
879 because of timeout. Then we'll count that as a retry. */
881 /* Note that we will only wait forever prior to the start of a packet.
882 After that, we expect characters to arrive at a brisk pace. They
883 should show up within remote_timeout intervals. */
887 c = readchar (timeout);
889 if (c == SERIAL_TIMEOUT)
891 if (forever) /* Watchdog went off. Kill the target. */
893 target_mourn_inferior ();
894 error ("Watchdog has expired. Target detached.\n");
897 fputs_filtered ("Timed out.\n", gdb_stdlog);
903 /* We've found the start of a packet, now collect the data. */
905 val = read_frame (buf);
911 fprintf_unfiltered (gdb_stdlog, "Packet received: ");
912 fputstr_unfiltered (buf, 0, gdb_stdlog);
913 fprintf_unfiltered (gdb_stdlog, "\n");
915 SERIAL_WRITE (remote_desc, "+", 1);
919 /* Try the whole thing again. */
921 SERIAL_WRITE (remote_desc, "-", 1);
924 /* We have tried hard enough, and just can't receive the packet. Give up. */
926 printf_unfiltered ("Ignoring packet error, continuing...\n");
927 SERIAL_WRITE (remote_desc, "+", 1);