Tue Jul 13 14:03:48 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
[deliverable/binutils-gdb.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2 Copyright 1988, 1991, 1992, 1993 Free Software Foundation, Inc.
3
4 This file is part of GDB.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
19
20 /* Remote communication protocol.
21
22 A debug packet whose contents are <data>
23 is encapsulated for transmission in the form:
24
25 $ <data> # CSUM1 CSUM2
26
27 <data> must be ASCII alphanumeric and cannot include characters
28 '$' or '#'
29
30 CSUM1 and CSUM2 are ascii hex representation of an 8-bit
31 checksum of <data>, the most significant nibble is sent first.
32 the hex digits 0-9,a-f are used.
33
34 Receiver responds with:
35
36 + - if CSUM is correct and ready for next packet
37 - - if CSUM is incorrect
38
39 <data> is as follows:
40 All values are encoded in ascii hex digits.
41
42 Request Packet
43
44 read registers g
45 reply XX....X Each byte of register data
46 is described by two hex digits.
47 Registers are in the internal order
48 for GDB, and the bytes in a register
49 are in the same order the machine uses.
50 or ENN for an error.
51
52 write regs GXX..XX Each byte of register data
53 is described by two hex digits.
54 reply OK for success
55 ENN for an error
56
57 read mem mAA..AA,LLLL AA..AA is address, LLLL is length.
58 reply XX..XX XX..XX is mem contents
59 or ENN NN is errno
60
61 write mem MAA..AA,LLLL:XX..XX
62 AA..AA is address,
63 LLLL is number of bytes,
64 XX..XX is data
65 reply OK for success
66 ENN for an error
67
68 cont cAA..AA AA..AA is address to resume
69 If AA..AA is omitted,
70 resume at same address.
71
72 step sAA..AA AA..AA is address to resume
73 If AA..AA is omitted,
74 resume at same address.
75
76 last signal ? Reply the current reason for stopping.
77 This is the same reply as is generated
78 for step or cont : SAA where AA is the
79 signal number.
80
81 There is no immediate reply to step or cont.
82 The reply comes when the machine stops.
83 It is SAA AA is the "signal number"
84
85 or... TAAn...:r...;n:r...;n...:r...;
86 AA = signal number
87 n... = register number
88 r... = register contents
89
90 kill req k
91 */
92
93 #include "defs.h"
94 #include <string.h>
95 #include <fcntl.h>
96 #include "frame.h"
97 #include "inferior.h"
98 #include "bfd.h"
99 #include "symfile.h"
100 #include "target.h"
101 #include "wait.h"
102 #include "terminal.h"
103 #include "gdbcmd.h"
104
105 #if !defined(DONT_USE_REMOTE)
106 #ifdef USG
107 #include <sys/types.h>
108 #endif
109
110 #include <signal.h>
111 #include "serial.h"
112
113 /* Prototypes for local functions */
114
115 static void
116 remote_write_bytes PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
117
118 static void
119 remote_read_bytes PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
120
121 static void
122 remote_files_info PARAMS ((struct target_ops *ignore));
123
124 static int
125 remote_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len,
126 int should_write, struct target_ops *target));
127
128 static void
129 remote_prepare_to_store PARAMS ((void));
130
131 static void
132 remote_fetch_registers PARAMS ((int regno));
133
134 static void
135 remote_resume PARAMS ((int step, int siggnal));
136
137 static int
138 remote_start_remote PARAMS ((char *dummy));
139
140 static void
141 remote_open PARAMS ((char *name, int from_tty));
142
143 static void
144 remote_close PARAMS ((int quitting));
145
146 static void
147 remote_store_registers PARAMS ((int regno));
148
149 static void
150 getpkt PARAMS ((char *buf, int forever));
151
152 static void
153 putpkt PARAMS ((char *buf));
154
155 static void
156 remote_send PARAMS ((char *buf));
157
158 static int
159 readchar PARAMS ((void));
160
161 static int
162 remote_wait PARAMS ((WAITTYPE *status));
163
164 static int
165 tohex PARAMS ((int nib));
166
167 static int
168 fromhex PARAMS ((int a));
169
170 static void
171 remote_detach PARAMS ((char *args, int from_tty));
172
173 static void
174 remote_interrupt PARAMS ((int signo));
175
176 static void
177 remote_interrupt_twice PARAMS ((int signo));
178
179 extern struct target_ops remote_ops; /* Forward decl */
180
181 static int kiodebug = 0;
182 /* This was 5 seconds, which is a long time to sit and wait.
183 Unless this is going though some terminal server or multiplexer or
184 other form of hairy serial connection, I would think 2 seconds would
185 be plenty. */
186 static int timeout = 2;
187
188 #if 0
189 int icache;
190 #endif
191
192 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
193 remote_open knows that we don't have a file open when the program
194 starts. */
195 serial_t remote_desc = NULL;
196
197 #define PBUFSIZ 1024
198
199 /* Maximum number of bytes to read/write at once. The value here
200 is chosen to fill up a packet (the headers account for the 32). */
201 #define MAXBUFBYTES ((PBUFSIZ-32)/2)
202
203 /* Round up PBUFSIZ to hold all the registers, at least. */
204 #if REGISTER_BYTES > MAXBUFBYTES
205 #undef PBUFSIZ
206 #define PBUFSIZ (REGISTER_BYTES * 2 + 32)
207 #endif
208 \f
209 /* Clean up connection to a remote debugger. */
210
211 /* ARGSUSED */
212 static void
213 remote_close (quitting)
214 int quitting;
215 {
216 if (remote_desc)
217 SERIAL_CLOSE (remote_desc);
218 remote_desc = NULL;
219 }
220
221 /* Stub for catch_errors. */
222
223 static int
224 remote_start_remote (dummy)
225 char *dummy;
226 {
227 /* Ack any packet which the remote side has already sent. */
228 /* I'm not sure this \r is needed; we don't use it any other time we
229 send an ack. */
230 SERIAL_WRITE (remote_desc, "+\r", 2);
231 putpkt ("?"); /* initiate a query from remote machine */
232
233 start_remote (); /* Initialize gdb process mechanisms */
234 return 1;
235 }
236
237 /* Open a connection to a remote debugger.
238 NAME is the filename used for communication. */
239
240 static void
241 remote_open (name, from_tty)
242 char *name;
243 int from_tty;
244 {
245 if (name == 0)
246 error (
247 "To open a remote debug connection, you need to specify what serial\n\
248 device is attached to the remote system (e.g. /dev/ttya).");
249
250 target_preopen (from_tty);
251
252 unpush_target (&remote_ops);
253
254 #if 0
255 dcache_init ();
256 #endif
257
258 remote_desc = SERIAL_OPEN (name);
259 if (!remote_desc)
260 perror_with_name (name);
261
262 if (baud_rate)
263 {
264 int rate;
265
266 if (sscanf (baud_rate, "%d", &rate) == 1)
267 if (SERIAL_SETBAUDRATE (remote_desc, rate))
268 {
269 SERIAL_CLOSE (remote_desc);
270 perror_with_name (name);
271 }
272 }
273
274 SERIAL_RAW (remote_desc);
275
276 if (from_tty)
277 {
278 puts_filtered ("Remote debugging using ");
279 puts_filtered (name);
280 puts_filtered ("\n");
281 }
282 push_target (&remote_ops); /* Switch to using remote target now */
283
284 /* Start the remote connection; if error (0), discard this target. */
285 immediate_quit++; /* Allow user to interrupt it */
286 if (!catch_errors (remote_start_remote, (char *)0,
287 "Couldn't establish connection to remote target\n", RETURN_MASK_ALL))
288 pop_target();
289 }
290
291 /* remote_detach()
292 takes a program previously attached to and detaches it.
293 We better not have left any breakpoints
294 in the program or it'll die when it hits one.
295 Close the open connection to the remote debugger.
296 Use this when you want to detach and do something else
297 with your gdb. */
298
299 static void
300 remote_detach (args, from_tty)
301 char *args;
302 int from_tty;
303 {
304 if (args)
305 error ("Argument given to \"detach\" when remotely debugging.");
306
307 pop_target ();
308 if (from_tty)
309 puts_filtered ("Ending remote debugging.\n");
310 }
311
312 /* Convert hex digit A to a number. */
313
314 static int
315 fromhex (a)
316 int a;
317 {
318 if (a >= '0' && a <= '9')
319 return a - '0';
320 else if (a >= 'a' && a <= 'f')
321 return a - 'a' + 10;
322 else
323 error ("Reply contains invalid hex digit");
324 return -1;
325 }
326
327 /* Convert number NIB to a hex digit. */
328
329 static int
330 tohex (nib)
331 int nib;
332 {
333 if (nib < 10)
334 return '0'+nib;
335 else
336 return 'a'+nib-10;
337 }
338 \f
339 /* Tell the remote machine to resume. */
340
341 static void
342 remote_resume (step, siggnal)
343 int step, siggnal;
344 {
345 char buf[PBUFSIZ];
346
347 if (siggnal)
348 {
349 char *name;
350 target_terminal_ours_for_output ();
351 printf_filtered ("Can't send signals to a remote system. ");
352 name = strsigno (siggnal);
353 if (name)
354 printf_filtered (name);
355 else
356 printf_filtered ("Signal %d", siggnal);
357 printf_filtered (" not sent.\n");
358 target_terminal_inferior ();
359 }
360
361 #if 0
362 dcache_flush ();
363 #endif
364
365 strcpy (buf, step ? "s": "c");
366
367 putpkt (buf);
368 }
369 \f
370 /* Send ^C to target to halt it. Target will respond, and send us a
371 packet. */
372
373 static void
374 remote_interrupt (signo)
375 int signo;
376 {
377 /* If this doesn't work, try more severe steps. */
378 signal (signo, remote_interrupt_twice);
379
380 if (kiodebug)
381 printf ("remote_interrupt called\n");
382
383 SERIAL_WRITE (remote_desc, "\003", 1); /* Send a ^C */
384 }
385
386 static void (*ofunc)();
387
388 /* The user typed ^C twice. */
389 static void
390 remote_interrupt_twice (signo)
391 int signo;
392 {
393 signal (signo, ofunc);
394
395 target_terminal_ours ();
396 if (query ("Interrupted while waiting for the program.\n\
397 Give up (and stop debugging it)? "))
398 {
399 target_mourn_inferior ();
400 return_to_top_level (RETURN_QUIT);
401 }
402 else
403 {
404 signal (signo, remote_interrupt);
405 target_terminal_inferior ();
406 }
407 }
408
409 /* Wait until the remote machine stops, then return,
410 storing status in STATUS just as `wait' would.
411 Returns "pid" (though it's not clear what, if anything, that
412 means in the case of this target). */
413
414 static int
415 remote_wait (status)
416 WAITTYPE *status;
417 {
418 unsigned char buf[PBUFSIZ];
419 unsigned char *p;
420 int i;
421 long regno;
422 char regs[MAX_REGISTER_RAW_SIZE];
423
424 WSETEXIT ((*status), 0);
425
426 ofunc = (void (*)()) signal (SIGINT, remote_interrupt);
427 getpkt ((char *) buf, 1);
428 signal (SIGINT, ofunc);
429
430 if (buf[0] == 'E')
431 error ("Remote failure reply: %s", buf);
432 if (buf[0] == 'T')
433 {
434 /* Expedited reply, containing Signal, {regno, reg} repeat */
435 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
436 ss = signal number
437 n... = register number
438 r... = register contents
439 */
440
441 p = &buf[3]; /* after Txx */
442
443 while (*p)
444 {
445 unsigned char *p1;
446
447 regno = strtol (p, &p1, 16); /* Read the register number */
448
449 if (p1 == p)
450 error ("Remote sent badly formed register number: %s\nPacket: '%s'\n",
451 p1, buf);
452
453 p = p1;
454
455 if (*p++ != ':')
456 error ("Malformed packet (missing colon): %s\nPacket: '%s'\n",
457 p, buf);
458
459 if (regno >= NUM_REGS)
460 error ("Remote sent bad register number %d: %s\nPacket: '%s'\n",
461 regno, p, buf);
462
463 for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
464 {
465 if (p[0] == 0 || p[1] == 0)
466 error ("Remote reply is too short: %s", buf);
467 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
468 p += 2;
469 }
470
471 if (*p++ != ';')
472 error("Remote register badly formatted: %s", buf);
473
474 supply_register (regno, regs);
475 }
476 }
477 else if (buf[0] != 'S')
478 error ("Invalid remote reply: %s", buf);
479
480 WSETSTOP ((*status), (((fromhex (buf[1])) << 4) + (fromhex (buf[2]))));
481
482 return 0;
483 }
484
485 /* Read the remote registers into the block REGS. */
486 /* Currently we just read all the registers, so we don't use regno. */
487 /* ARGSUSED */
488 static void
489 remote_fetch_registers (regno)
490 int regno;
491 {
492 char buf[PBUFSIZ];
493 int i;
494 char *p;
495 char regs[REGISTER_BYTES];
496
497 sprintf (buf, "g");
498 remote_send (buf);
499
500 /* Reply describes registers byte by byte, each byte encoded as two
501 hex characters. Suck them all up, then supply them to the
502 register cacheing/storage mechanism. */
503
504 p = buf;
505 for (i = 0; i < REGISTER_BYTES; i++)
506 {
507 if (p[0] == 0 || p[1] == 0)
508 error ("Remote reply is too short: %s", buf);
509 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
510 p += 2;
511 }
512 for (i = 0; i < NUM_REGS; i++)
513 supply_register (i, &regs[REGISTER_BYTE(i)]);
514 }
515
516 /* Prepare to store registers. Since we send them all, we have to
517 read out the ones we don't want to change first. */
518
519 static void
520 remote_prepare_to_store ()
521 {
522 /* Make sure the entire registers array is valid. */
523 read_register_bytes (0, (char *)NULL, REGISTER_BYTES);
524 }
525
526 /* Store the remote registers from the contents of the block REGISTERS.
527 FIXME, eventually just store one register if that's all that is needed. */
528
529 /* ARGSUSED */
530 static void
531 remote_store_registers (regno)
532 int regno;
533 {
534 char buf[PBUFSIZ];
535 int i;
536 char *p;
537
538 buf[0] = 'G';
539
540 /* Command describes registers byte by byte,
541 each byte encoded as two hex characters. */
542
543 p = buf + 1;
544 for (i = 0; i < REGISTER_BYTES; i++)
545 {
546 *p++ = tohex ((registers[i] >> 4) & 0xf);
547 *p++ = tohex (registers[i] & 0xf);
548 }
549 *p = '\0';
550
551 remote_send (buf);
552 }
553
554 #if 0
555 /* Read a word from remote address ADDR and return it.
556 This goes through the data cache. */
557
558 int
559 remote_fetch_word (addr)
560 CORE_ADDR addr;
561 {
562 if (icache)
563 {
564 extern CORE_ADDR text_start, text_end;
565
566 if (addr >= text_start && addr < text_end)
567 {
568 int buffer;
569 xfer_core_file (addr, &buffer, sizeof (int));
570 return buffer;
571 }
572 }
573 return dcache_fetch (addr);
574 }
575
576 /* Write a word WORD into remote address ADDR.
577 This goes through the data cache. */
578
579 void
580 remote_store_word (addr, word)
581 CORE_ADDR addr;
582 int word;
583 {
584 dcache_poke (addr, word);
585 }
586 #endif /* 0 */
587 \f
588 /* Write memory data directly to the remote machine.
589 This does not inform the data cache; the data cache uses this.
590 MEMADDR is the address in the remote memory space.
591 MYADDR is the address of the buffer in our space.
592 LEN is the number of bytes. */
593
594 static void
595 remote_write_bytes (memaddr, myaddr, len)
596 CORE_ADDR memaddr;
597 char *myaddr;
598 int len;
599 {
600 char buf[PBUFSIZ];
601 int i;
602 char *p;
603
604 if (len > PBUFSIZ / 2 - 20)
605 abort ();
606
607 sprintf (buf, "M%x,%x:", memaddr, len);
608
609 /* We send target system values byte by byte, in increasing byte addresses,
610 each byte encoded as two hex characters. */
611
612 p = buf + strlen (buf);
613 for (i = 0; i < len; i++)
614 {
615 *p++ = tohex ((myaddr[i] >> 4) & 0xf);
616 *p++ = tohex (myaddr[i] & 0xf);
617 }
618 *p = '\0';
619
620 remote_send (buf);
621 }
622
623 /* Read memory data directly from the remote machine.
624 This does not use the data cache; the data cache uses this.
625 MEMADDR is the address in the remote memory space.
626 MYADDR is the address of the buffer in our space.
627 LEN is the number of bytes. */
628
629 static void
630 remote_read_bytes (memaddr, myaddr, len)
631 CORE_ADDR memaddr;
632 char *myaddr;
633 int len;
634 {
635 char buf[PBUFSIZ];
636 int i;
637 char *p;
638
639 if (len > PBUFSIZ / 2 - 1)
640 abort ();
641
642 sprintf (buf, "m%x,%x", memaddr, len);
643 remote_send (buf);
644
645 /* Reply describes memory byte by byte,
646 each byte encoded as two hex characters. */
647
648 p = buf;
649 for (i = 0; i < len; i++)
650 {
651 if (p[0] == 0 || p[1] == 0)
652 error ("Remote reply is too short: %s", buf);
653 myaddr[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
654 p += 2;
655 }
656 }
657 \f
658 /* Read or write LEN bytes from inferior memory at MEMADDR, transferring
659 to or from debugger address MYADDR. Write to inferior if SHOULD_WRITE is
660 nonzero. Returns length of data written or read; 0 for error. */
661
662 /* ARGSUSED */
663 static int
664 remote_xfer_memory(memaddr, myaddr, len, should_write, target)
665 CORE_ADDR memaddr;
666 char *myaddr;
667 int len;
668 int should_write;
669 struct target_ops *target; /* ignored */
670 {
671 int origlen = len;
672 int xfersize;
673 while (len > 0)
674 {
675 if (len > MAXBUFBYTES)
676 xfersize = MAXBUFBYTES;
677 else
678 xfersize = len;
679
680 if (should_write)
681 remote_write_bytes(memaddr, myaddr, xfersize);
682 else
683 remote_read_bytes (memaddr, myaddr, xfersize);
684 memaddr += xfersize;
685 myaddr += xfersize;
686 len -= xfersize;
687 }
688 return origlen; /* no error possible */
689 }
690
691 static void
692 remote_files_info (ignore)
693 struct target_ops *ignore;
694 {
695 puts_filtered ("Debugging a target over a serial line.\n");
696 }
697 \f
698 /* Stuff for dealing with the packets which are part of this protocol.
699 See comment at top of file for details. */
700
701 /* Read a single character from the remote end, masking it down to 7 bits. */
702
703 static int
704 readchar ()
705 {
706 int ch;
707
708 ch = SERIAL_READCHAR (remote_desc, timeout);
709
710 if (ch < 0)
711 return ch;
712
713 return ch & 0x7f;
714 }
715
716 /* Send the command in BUF to the remote machine,
717 and read the reply into BUF.
718 Report an error if we get an error reply. */
719
720 static void
721 remote_send (buf)
722 char *buf;
723 {
724
725 putpkt (buf);
726 getpkt (buf, 0);
727
728 if (buf[0] == 'E')
729 error ("Remote failure reply: %s", buf);
730 }
731
732 /* Send a packet to the remote machine, with error checking.
733 The data of the packet is in BUF. */
734
735 static void
736 putpkt (buf)
737 char *buf;
738 {
739 int i;
740 unsigned char csum = 0;
741 char buf2[PBUFSIZ];
742 int cnt = strlen (buf);
743 int ch;
744 char *p;
745
746 /* Copy the packet into buffer BUF2, encapsulating it
747 and giving it a checksum. */
748
749 if (cnt > sizeof(buf2) - 5) /* Prosanity check */
750 abort();
751
752 p = buf2;
753 *p++ = '$';
754
755 for (i = 0; i < cnt; i++)
756 {
757 csum += buf[i];
758 *p++ = buf[i];
759 }
760 *p++ = '#';
761 *p++ = tohex ((csum >> 4) & 0xf);
762 *p++ = tohex (csum & 0xf);
763
764 /* Send it over and over until we get a positive ack. */
765
766 while (1)
767 {
768 if (kiodebug)
769 {
770 *p = '\0';
771 printf ("Sending packet: %s...", buf2); fflush(stdout);
772 }
773 if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
774 perror_with_name ("putpkt: write failed");
775
776 /* read until either a timeout occurs (-2) or '+' is read */
777 while (1)
778 {
779 ch = readchar ();
780
781 switch (ch)
782 {
783 case '+':
784 if (kiodebug)
785 printf("Ack\n");
786 return;
787 case SERIAL_TIMEOUT:
788 break; /* Retransmit buffer */
789 case SERIAL_ERROR:
790 perror_with_name ("putpkt: couldn't read ACK");
791 case SERIAL_EOF:
792 error ("putpkt: EOF while trying to read ACK");
793 default:
794 if (kiodebug)
795 printf ("%02X %c ", ch&0xFF, ch);
796 continue;
797 }
798 break; /* Here to retransmit */
799 }
800 }
801 }
802
803 /* Read a packet from the remote machine, with error checking,
804 and store it in BUF. BUF is expected to be of size PBUFSIZ.
805 If FOREVER, wait forever rather than timing out; this is used
806 while the target is executing user code. */
807
808 static void
809 getpkt (buf, forever)
810 char *buf;
811 int forever;
812 {
813 char *bp;
814 unsigned char csum;
815 int c = 0;
816 unsigned char c1, c2;
817 int retries = 0;
818 #define MAX_RETRIES 10
819
820 while (1)
821 {
822 /* This can loop forever if the remote side sends us characters
823 continuously, but if it pauses, we'll get a zero from readchar
824 because of timeout. Then we'll count that as a retry. */
825
826 c = readchar();
827 if (c > 0 && c != '$')
828 continue;
829
830 if (c == SERIAL_TIMEOUT)
831 {
832 if (forever)
833 continue;
834 if (++retries >= MAX_RETRIES)
835 if (kiodebug) puts_filtered ("Timed out.\n");
836 goto out;
837 }
838
839 if (c == SERIAL_EOF)
840 error ("Remote connection closed");
841 if (c == SERIAL_ERROR)
842 perror_with_name ("Remote communication error");
843
844 /* Force csum to be zero here because of possible error retry. */
845 csum = 0;
846 bp = buf;
847
848 while (1)
849 {
850 c = readchar ();
851 if (c == SERIAL_TIMEOUT)
852 {
853 if (kiodebug)
854 puts_filtered ("Timeout in mid-packet, retrying\n");
855 goto whole; /* Start a new packet, count retries */
856 }
857 if (c == '$')
858 {
859 if (kiodebug)
860 puts_filtered ("Saw new packet start in middle of old one\n");
861 goto whole; /* Start a new packet, count retries */
862 }
863 if (c == '#')
864 break;
865 if (bp >= buf+PBUFSIZ-1)
866 {
867 *bp = '\0';
868 puts_filtered ("Remote packet too long: ");
869 puts_filtered (buf);
870 puts_filtered ("\n");
871 goto whole;
872 }
873 *bp++ = c;
874 csum += c;
875 }
876 *bp = 0;
877
878 c1 = fromhex (readchar ());
879 c2 = fromhex (readchar ());
880 if ((csum & 0xff) == (c1 << 4) + c2)
881 break;
882 printf_filtered ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
883 (c1 << 4) + c2, csum & 0xff);
884 puts_filtered (buf);
885 puts_filtered ("\n");
886
887 /* Try the whole thing again. */
888 whole:
889 if (++retries < MAX_RETRIES)
890 {
891 SERIAL_WRITE (remote_desc, "-", 1);
892 }
893 else
894 {
895 printf ("Ignoring packet error, continuing...\n");
896 break;
897 }
898 }
899
900 out:
901
902 SERIAL_WRITE (remote_desc, "+", 1);
903
904 if (kiodebug)
905 fprintf (stderr,"Packet received: %s\n", buf);
906 }
907 \f
908 /* The data cache leads to incorrect results because it doesn't know about
909 volatile variables, thus making it impossible to debug functions which
910 use hardware registers. Therefore it is #if 0'd out. Effect on
911 performance is some, for backtraces of functions with a few
912 arguments each. For functions with many arguments, the stack
913 frames don't fit in the cache blocks, which makes the cache less
914 helpful. Disabling the cache is a big performance win for fetching
915 large structures, because the cache code fetched data in 16-byte
916 chunks. */
917 #if 0
918 /* The data cache records all the data read from the remote machine
919 since the last time it stopped.
920
921 Each cache block holds 16 bytes of data
922 starting at a multiple-of-16 address. */
923
924 #define DCACHE_SIZE 64 /* Number of cache blocks */
925
926 struct dcache_block {
927 struct dcache_block *next, *last;
928 unsigned int addr; /* Address for which data is recorded. */
929 int data[4];
930 };
931
932 struct dcache_block dcache_free, dcache_valid;
933
934 /* Free all the data cache blocks, thus discarding all cached data. */
935
936 static void
937 dcache_flush ()
938 {
939 register struct dcache_block *db;
940
941 while ((db = dcache_valid.next) != &dcache_valid)
942 {
943 remque (db);
944 insque (db, &dcache_free);
945 }
946 }
947
948 /*
949 * If addr is present in the dcache, return the address of the block
950 * containing it.
951 */
952
953 struct dcache_block *
954 dcache_hit (addr)
955 {
956 register struct dcache_block *db;
957
958 if (addr & 3)
959 abort ();
960
961 /* Search all cache blocks for one that is at this address. */
962 db = dcache_valid.next;
963 while (db != &dcache_valid)
964 {
965 if ((addr & 0xfffffff0) == db->addr)
966 return db;
967 db = db->next;
968 }
969 return NULL;
970 }
971
972 /* Return the int data at address ADDR in dcache block DC. */
973
974 int
975 dcache_value (db, addr)
976 struct dcache_block *db;
977 unsigned int addr;
978 {
979 if (addr & 3)
980 abort ();
981 return (db->data[(addr>>2)&3]);
982 }
983
984 /* Get a free cache block, put it on the valid list,
985 and return its address. The caller should store into the block
986 the address and data that it describes. */
987
988 struct dcache_block *
989 dcache_alloc ()
990 {
991 register struct dcache_block *db;
992
993 if ((db = dcache_free.next) == &dcache_free)
994 /* If we can't get one from the free list, take last valid */
995 db = dcache_valid.last;
996
997 remque (db);
998 insque (db, &dcache_valid);
999 return (db);
1000 }
1001
1002 /* Return the contents of the word at address ADDR in the remote machine,
1003 using the data cache. */
1004
1005 int
1006 dcache_fetch (addr)
1007 CORE_ADDR addr;
1008 {
1009 register struct dcache_block *db;
1010
1011 db = dcache_hit (addr);
1012 if (db == 0)
1013 {
1014 db = dcache_alloc ();
1015 remote_read_bytes (addr & ~0xf, db->data, 16);
1016 db->addr = addr & ~0xf;
1017 }
1018 return (dcache_value (db, addr));
1019 }
1020
1021 /* Write the word at ADDR both in the data cache and in the remote machine. */
1022
1023 dcache_poke (addr, data)
1024 CORE_ADDR addr;
1025 int data;
1026 {
1027 register struct dcache_block *db;
1028
1029 /* First make sure the word is IN the cache. DB is its cache block. */
1030 db = dcache_hit (addr);
1031 if (db == 0)
1032 {
1033 db = dcache_alloc ();
1034 remote_read_bytes (addr & ~0xf, db->data, 16);
1035 db->addr = addr & ~0xf;
1036 }
1037
1038 /* Modify the word in the cache. */
1039 db->data[(addr>>2)&3] = data;
1040
1041 /* Send the changed word. */
1042 remote_write_bytes (addr, &data, 4);
1043 }
1044
1045 /* Initialize the data cache. */
1046
1047 dcache_init ()
1048 {
1049 register i;
1050 register struct dcache_block *db;
1051
1052 db = (struct dcache_block *) xmalloc (sizeof (struct dcache_block) *
1053 DCACHE_SIZE);
1054 dcache_free.next = dcache_free.last = &dcache_free;
1055 dcache_valid.next = dcache_valid.last = &dcache_valid;
1056 for (i=0;i<DCACHE_SIZE;i++,db++)
1057 insque (db, &dcache_free);
1058 }
1059 #endif /* 0 */
1060 \f
1061 static void
1062 remote_kill ()
1063 {
1064 putpkt ("k");
1065 /* Don't wait for it to die. I'm not really sure it matters whether
1066 we do or not. For the existing stubs, kill is a noop. */
1067 target_mourn_inferior ();
1068 }
1069
1070 static void
1071 remote_mourn ()
1072 {
1073 unpush_target (&remote_ops);
1074 generic_mourn_inferior ();
1075 }
1076 \f
1077 #ifdef REMOTE_BREAKPOINT
1078
1079 /* On some machines, e.g. 68k, we may use a different breakpoint instruction
1080 than other targets. */
1081 static unsigned char break_insn[] = REMOTE_BREAKPOINT;
1082
1083 /* Check that it fits in BREAKPOINT_MAX bytes. */
1084 static unsigned char check_break_insn_size[BREAKPOINT_MAX] = REMOTE_BREAKPOINT;
1085
1086 #else /* No REMOTE_BREAKPOINT. */
1087
1088 /* Same old breakpoint instruction. This code does nothing different
1089 than mem-break.c. */
1090 static unsigned char break_insn[] = BREAKPOINT;
1091
1092 #endif /* No REMOTE_BREAKPOINT. */
1093
1094 /* Insert a breakpoint on targets that don't have any better breakpoint
1095 support. We read the contents of the target location and stash it,
1096 then overwrite it with a breakpoint instruction. ADDR is the target
1097 location in the target machine. CONTENTS_CACHE is a pointer to
1098 memory allocated for saving the target contents. It is guaranteed
1099 by the caller to be long enough to save sizeof BREAKPOINT bytes (this
1100 is accomplished via BREAKPOINT_MAX). */
1101
1102 int
1103 remote_insert_breakpoint (addr, contents_cache)
1104 CORE_ADDR addr;
1105 char *contents_cache;
1106 {
1107 int val;
1108
1109 val = target_read_memory (addr, contents_cache, sizeof break_insn);
1110
1111 if (val == 0)
1112 val = target_write_memory (addr, (char *)break_insn, sizeof break_insn);
1113
1114 return val;
1115 }
1116
1117 int
1118 remote_remove_breakpoint (addr, contents_cache)
1119 CORE_ADDR addr;
1120 char *contents_cache;
1121 {
1122 return target_write_memory (addr, contents_cache, sizeof break_insn);
1123 }
1124 \f
1125 /* Define the target subroutine names */
1126
1127 struct target_ops remote_ops = {
1128 "remote", /* to_shortname */
1129 "Remote serial target in gdb-specific protocol", /* to_longname */
1130 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
1131 Specify the serial device it is connected to (e.g. /dev/ttya).", /* to_doc */
1132 remote_open, /* to_open */
1133 remote_close, /* to_close */
1134 NULL, /* to_attach */
1135 remote_detach, /* to_detach */
1136 remote_resume, /* to_resume */
1137 remote_wait, /* to_wait */
1138 remote_fetch_registers, /* to_fetch_registers */
1139 remote_store_registers, /* to_store_registers */
1140 remote_prepare_to_store, /* to_prepare_to_store */
1141 remote_xfer_memory, /* to_xfer_memory */
1142 remote_files_info, /* to_files_info */
1143
1144 remote_insert_breakpoint, /* to_insert_breakpoint */
1145 remote_remove_breakpoint, /* to_remove_breakpoint */
1146
1147 NULL, /* to_terminal_init */
1148 NULL, /* to_terminal_inferior */
1149 NULL, /* to_terminal_ours_for_output */
1150 NULL, /* to_terminal_ours */
1151 NULL, /* to_terminal_info */
1152 remote_kill, /* to_kill */
1153 generic_load, /* to_load */
1154 NULL, /* to_lookup_symbol */
1155 NULL, /* to_create_inferior */
1156 remote_mourn, /* to_mourn_inferior */
1157 0, /* to_can_run */
1158 0, /* to_notice_signals */
1159 process_stratum, /* to_stratum */
1160 NULL, /* to_next */
1161 1, /* to_has_all_memory */
1162 1, /* to_has_memory */
1163 1, /* to_has_stack */
1164 1, /* to_has_registers */
1165 1, /* to_has_execution */
1166 NULL, /* sections */
1167 NULL, /* sections_end */
1168 OPS_MAGIC /* to_magic */
1169 };
1170
1171 void
1172 _initialize_remote ()
1173 {
1174 add_target (&remote_ops);
1175
1176 add_show_from_set (
1177 add_set_cmd ("remotedebug", no_class, var_boolean, (char *)&kiodebug,
1178 "Set debugging of remote serial I/O.\n\
1179 When enabled, each packet sent or received with the remote target\n\
1180 is displayed.", &setlist),
1181 &showlist);
1182 }
1183
1184 #endif
This page took 0.078612 seconds and 5 git commands to generate.