189977ddb9698e9c21aa8d7ff23a98236b758a44
[external/binutils.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                                         Can be fewer bytes than requested
60                                         if able to read only part of the data.
61                         or ENN          NN is errno
62
63         write mem       MAA..AA,LLLL:XX..XX
64                                         AA..AA is address,
65                                         LLLL is number of bytes,
66                                         XX..XX is data
67         reply           OK              for success
68                         ENN             for an error (this includes the case
69                                         where only part of the data was
70                                         written).
71
72         cont            cAA..AA         AA..AA is address to resume
73                                         If AA..AA is omitted,
74                                         resume at same address.
75
76         step            sAA..AA         AA..AA is address to resume
77                                         If AA..AA is omitted,
78                                         resume at same address.
79
80         last signal     ?               Reply the current reason for stopping.
81                                         This is the same reply as is generated
82                                         for step or cont : SAA where AA is the
83                                         signal number.
84
85         There is no immediate reply to step or cont.
86         The reply comes when the machine stops.
87         It is           SAA             AA is the "signal number"
88
89         or...           TAAn...:r...;n:r...;n...:r...;
90                                         AA = signal number
91                                         n... = register number
92                                         r... = register contents
93         or...           WAA             The process extited, and AA is
94                                         the exit status.  This is only
95                                         applicable for certains sorts of
96                                         targets.
97         or...           NAATT;DD;BB     Relocate the object file.
98                                         AA = signal number
99                                         TT = text address
100                                         DD = data address
101                                         BB = bss address
102                                         This is used by the NLM stub,
103                                         which is why it only has three
104                                         addresses rather than one per
105                                         section: the NLM stub always
106                                         sees only three sections, even
107                                         though gdb may see more.
108
109         kill request    k
110
111         toggle debug    d               toggle debug flag (see 386 & 68k stubs)
112         reset           r               reset -- see sparc stub.
113         reserved        <other>         On other requests, the stub should
114                                         ignore the request and send an empty
115                                         response ($#<checksum>).  This way
116                                         we can extend the protocol and GDB
117                                         can tell whether the stub it is
118                                         talking to uses the old or the new.
119 */
120
121 #include "defs.h"
122 #include <string.h>
123 #include <fcntl.h>
124 #include "frame.h"
125 #include "inferior.h"
126 #include "bfd.h"
127 #include "symfile.h"
128 #include "target.h"
129 #include "wait.h"
130 #include "terminal.h"
131 #include "gdbcmd.h"
132 #include "objfiles.h"
133 #include "gdb-stabs.h"
134
135 #include "dcache.h"
136
137 #if !defined(DONT_USE_REMOTE)
138 #ifdef USG
139 #include <sys/types.h>
140 #endif
141
142 #include <signal.h>
143 #include "serial.h"
144
145 /* Prototypes for local functions */
146
147 static int
148 remote_write_bytes PARAMS ((CORE_ADDR memaddr, unsigned char *myaddr, int len));
149
150 static int
151 remote_read_bytes PARAMS ((CORE_ADDR memaddr, unsigned char *myaddr, int len));
152
153 static void
154 remote_files_info PARAMS ((struct target_ops *ignore));
155
156 static int
157 remote_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len,
158                             int should_write, struct target_ops *target));
159
160 static void 
161 remote_prepare_to_store PARAMS ((void));
162
163 static void
164 remote_fetch_registers PARAMS ((int regno));
165
166 static void
167 remote_resume PARAMS ((int pid, int step, int siggnal));
168
169 static int
170 remote_start_remote PARAMS ((char *dummy));
171
172 static void
173 remote_open PARAMS ((char *name, int from_tty));
174
175 static void
176 remote_close PARAMS ((int quitting));
177
178 static void
179 remote_store_registers PARAMS ((int regno));
180
181 static void
182 getpkt PARAMS ((char *buf, int forever));
183
184 static void
185 putpkt PARAMS ((char *buf));
186
187 static void
188 remote_send PARAMS ((char *buf));
189
190 static int
191 readchar PARAMS ((void));
192
193 static int
194 remote_wait PARAMS ((int pid, WAITTYPE *status));
195
196 static int
197 tohex PARAMS ((int nib));
198
199 static int
200 fromhex PARAMS ((int a));
201
202 static void
203 remote_detach PARAMS ((char *args, int from_tty));
204
205 static void
206 remote_interrupt PARAMS ((int signo));
207
208 static void
209 remote_interrupt_twice PARAMS ((int signo));
210
211 static void
212 interrupt_query PARAMS ((void));
213
214 extern struct target_ops remote_ops;    /* Forward decl */
215
216 /* This was 5 seconds, which is a long time to sit and wait.
217    Unless this is going though some terminal server or multiplexer or
218    other form of hairy serial connection, I would think 2 seconds would
219    be plenty.  */
220 static int timeout = 2;
221
222 #if 0
223 int icache;
224 #endif
225
226 /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
227    remote_open knows that we don't have a file open when the program
228    starts.  */
229 serial_t remote_desc = NULL;
230
231 #define PBUFSIZ 1024
232
233 /* Maximum number of bytes to read/write at once.  The value here
234    is chosen to fill up a packet (the headers account for the 32).  */
235 #define MAXBUFBYTES ((PBUFSIZ-32)/2)
236
237 /* Round up PBUFSIZ to hold all the registers, at least.  */
238 #if REGISTER_BYTES > MAXBUFBYTES
239 #undef  PBUFSIZ
240 #define PBUFSIZ (REGISTER_BYTES * 2 + 32)
241 #endif
242 \f
243 /* Clean up connection to a remote debugger.  */
244
245 /* ARGSUSED */
246 static void
247 remote_close (quitting)
248      int quitting;
249 {
250   if (remote_desc)
251     SERIAL_CLOSE (remote_desc);
252   remote_desc = NULL;
253 }
254
255 /* Stub for catch_errors.  */
256
257 static int
258 remote_start_remote (dummy)
259      char *dummy;
260 {
261   immediate_quit = 1;           /* Allow user to interrupt it */
262
263   /* Ack any packet which the remote side has already sent.  */
264   /* I'm not sure this \r is needed; we don't use it any other time we
265      send an ack.  */
266   SERIAL_WRITE (remote_desc, "+\r", 2);
267   putpkt ("?");                 /* initiate a query from remote machine */
268   immediate_quit = 0;
269
270   start_remote ();              /* Initialize gdb process mechanisms */
271   return 1;
272 }
273
274 /* Open a connection to a remote debugger.
275    NAME is the filename used for communication.  */
276
277 static DCACHE *remote_dcache;
278
279 static void
280 remote_open (name, from_tty)
281      char *name;
282      int from_tty;
283 {
284   if (name == 0)
285     error (
286 "To open a remote debug connection, you need to specify what serial\n\
287 device is attached to the remote system (e.g. /dev/ttya).");
288
289   target_preopen (from_tty);
290
291   unpush_target (&remote_ops);
292
293   remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
294
295   remote_desc = SERIAL_OPEN (name);
296   if (!remote_desc)
297     perror_with_name (name);
298
299   if (SERIAL_SETBAUDRATE (remote_desc, baud_rate))
300     {
301       SERIAL_CLOSE (remote_desc);
302       perror_with_name (name);
303     }
304
305   SERIAL_RAW (remote_desc);
306
307   /* If there is something sitting in the buffer we might take it as a
308      response to a command, which would be bad.  */
309   SERIAL_FLUSH_INPUT (remote_desc);
310
311   if (from_tty)
312     {
313       puts_filtered ("Remote debugging using ");
314       puts_filtered (name);
315       puts_filtered ("\n");
316     }
317   push_target (&remote_ops);    /* Switch to using remote target now */
318
319   /* Start the remote connection; if error (0), discard this target.
320      In particular, if the user quits, be sure to discard it
321      (we'd be in an inconsistent state otherwise).  */
322   if (!catch_errors (remote_start_remote, (char *)0, 
323         "Couldn't establish connection to remote target\n", RETURN_MASK_ALL))
324     pop_target();
325 }
326
327 /* remote_detach()
328    takes a program previously attached to and detaches it.
329    We better not have left any breakpoints
330    in the program or it'll die when it hits one.
331    Close the open connection to the remote debugger.
332    Use this when you want to detach and do something else
333    with your gdb.  */
334
335 static void
336 remote_detach (args, from_tty)
337      char *args;
338      int from_tty;
339 {
340   if (args)
341     error ("Argument given to \"detach\" when remotely debugging.");
342   
343   pop_target ();
344   if (from_tty)
345     puts_filtered ("Ending remote debugging.\n");
346 }
347
348 /* Convert hex digit A to a number.  */
349
350 static int
351 fromhex (a)
352      int a;
353 {
354   if (a >= '0' && a <= '9')
355     return a - '0';
356   else if (a >= 'a' && a <= 'f')
357     return a - 'a' + 10;
358   else
359     error ("Reply contains invalid hex digit");
360   return -1;
361 }
362
363 /* Convert number NIB to a hex digit.  */
364
365 static int
366 tohex (nib)
367      int nib;
368 {
369   if (nib < 10)
370     return '0'+nib;
371   else
372     return 'a'+nib-10;
373 }
374 \f
375 /* Tell the remote machine to resume.  */
376
377 static void
378 remote_resume (pid, step, siggnal)
379      int pid, step, siggnal;
380 {
381   char buf[PBUFSIZ];
382
383   if (siggnal)
384     {
385       char *name;
386       target_terminal_ours_for_output ();
387       printf_filtered ("Can't send signals to a remote system.  ");
388       name = strsigno (siggnal);
389       if (name)
390         printf_filtered (name);
391       else
392         printf_filtered ("Signal %d", siggnal);
393       printf_filtered (" not sent.\n");
394       target_terminal_inferior ();
395     }
396
397   dcache_flush (remote_dcache);
398
399   strcpy (buf, step ? "s": "c");
400
401   putpkt (buf);
402 }
403 \f
404 /* Send ^C to target to halt it.  Target will respond, and send us a
405    packet.  */
406
407 static void
408 remote_interrupt (signo)
409      int signo;
410 {
411   /* If this doesn't work, try more severe steps.  */
412   signal (signo, remote_interrupt_twice);
413   
414   if (remote_debug)
415     printf ("remote_interrupt called\n");
416
417   SERIAL_WRITE (remote_desc, "\003", 1); /* Send a ^C */
418 }
419
420 static void (*ofunc)();
421
422 /* The user typed ^C twice.  */
423 static void
424 remote_interrupt_twice (signo)
425      int signo;
426 {
427   signal (signo, ofunc);
428   
429   interrupt_query ();
430
431   signal (signo, remote_interrupt);
432 }
433
434 /* Ask the user what to do when an interrupt is received.  */
435
436 static void
437 interrupt_query ()
438 {
439   target_terminal_ours ();
440
441   if (query ("Interrupted while waiting for the program.\n\
442 Give up (and stop debugging it)? "))
443     {
444       target_mourn_inferior ();
445       return_to_top_level (RETURN_QUIT);
446     }
447
448   target_terminal_inferior ();
449 }
450
451 /* Wait until the remote machine stops, then return,
452    storing status in STATUS just as `wait' would.
453    Returns "pid" (though it's not clear what, if anything, that
454    means in the case of this target).  */
455
456 static int
457 remote_wait (pid, status)
458      int pid;
459      WAITTYPE *status;
460 {
461   unsigned char buf[PBUFSIZ];
462
463   WSETEXIT ((*status), 0);
464
465   while (1)
466     {
467       unsigned char *p;
468
469       ofunc = (void (*)()) signal (SIGINT, remote_interrupt);
470       getpkt ((char *) buf, 1);
471       signal (SIGINT, ofunc);
472
473       if (buf[0] == 'E')
474         warning ("Remote failure reply: %s", buf);
475       else if (buf[0] == 'T')
476         {
477           int i;
478           long regno;
479           char regs[MAX_REGISTER_RAW_SIZE];
480
481           /* Expedited reply, containing Signal, {regno, reg} repeat */
482           /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
483               ss = signal number
484               n... = register number
485               r... = register contents
486               */
487
488           p = &buf[3];          /* after Txx */
489
490           while (*p)
491             {
492               unsigned char *p1;
493
494               regno = strtol (p, &p1, 16); /* Read the register number */
495
496               if (p1 == p)
497                 warning ("Remote sent badly formed register number: %s\nPacket: '%s'\n",
498                          p1, buf);
499
500               p = p1;
501
502               if (*p++ != ':')
503                 warning ("Malformed packet (missing colon): %s\nPacket: '%s'\n",
504                          p, buf);
505
506               if (regno >= NUM_REGS)
507                 warning ("Remote sent bad register number %d: %s\nPacket: '%s'\n",
508                          regno, p, buf);
509
510               for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
511                 {
512                   if (p[0] == 0 || p[1] == 0)
513                     warning ("Remote reply is too short: %s", buf);
514                   regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
515                   p += 2;
516                 }
517
518               if (*p++ != ';')
519                 warning ("Remote register badly formatted: %s", buf);
520
521               supply_register (regno, regs);
522             }
523           break;
524         }
525       else if (buf[0] == 'N')
526         {
527           unsigned char *p1;
528           bfd_vma text_addr, data_addr, bss_addr;
529
530           /* Relocate object file.  Format is NAATT;DD;BB where AA is
531              the signal number, TT is the new text address, DD is the
532              new data address, and BB is the new bss address.  This is
533              used by the NLM stub; gdb may see more sections.  */
534           p = &buf[3];
535           text_addr = strtoul (p, &p1, 16);
536           if (p1 == p || *p1 != ';')
537             warning ("Malformed relocation packet: Packet '%s'", buf);
538           p = p1 + 1;
539           data_addr = strtoul (p, &p1, 16);
540           if (p1 == p || *p1 != ';')
541             warning ("Malformed relocation packet: Packet '%s'", buf);
542           p = p1 + 1;
543           bss_addr = strtoul (p, &p1, 16);
544           if (p1 == p)
545             warning ("Malformed relocation packet: Packet '%s'", buf);
546
547           if (symfile_objfile != NULL
548               && (ANOFFSET (symfile_objfile->section_offsets,
549                             SECT_OFF_TEXT) != text_addr
550                   || ANOFFSET (symfile_objfile->section_offsets,
551                                SECT_OFF_DATA) != data_addr
552                   || ANOFFSET (symfile_objfile->section_offsets,
553                                SECT_OFF_BSS) != bss_addr))
554             {
555               struct section_offsets *offs;
556
557               /* FIXME: This code assumes gdb-stabs.h is being used;
558                  it's broken for xcoff, dwarf, sdb-coff, etc.  But
559                  there is no simple canonical representation for this
560                  stuff.  (Just what does "text" as seen by the stub
561                  mean, anyway?).  */
562
563               /* FIXME: Why don't the various symfile_offsets routines
564                  in the sym_fns vectors set this?
565                  (no good reason -kingdon).  */
566               if (symfile_objfile->num_sections == 0)
567                 symfile_objfile->num_sections = SECT_OFF_MAX;
568
569               offs = ((struct section_offsets *)
570                       alloca (sizeof (struct section_offsets)
571                               + (symfile_objfile->num_sections
572                                  * sizeof (offs->offsets))));
573               memcpy (offs, symfile_objfile->section_offsets,
574                       (sizeof (struct section_offsets)
575                        + (symfile_objfile->num_sections
576                           * sizeof (offs->offsets))));
577               ANOFFSET (offs, SECT_OFF_TEXT) = text_addr;
578               ANOFFSET (offs, SECT_OFF_DATA) = data_addr;
579               ANOFFSET (offs, SECT_OFF_BSS) = bss_addr;
580
581               objfile_relocate (symfile_objfile, offs);
582               {
583                 struct obj_section *s;
584                 bfd *abfd;
585
586                 abfd = symfile_objfile->obfd;
587
588                 for (s = symfile_objfile->sections;
589                      s < symfile_objfile->sections_end; ++s)
590                   {
591                     flagword flags;
592
593                     flags = bfd_get_section_flags (abfd, s->sec_ptr);
594
595                     if (flags & SEC_CODE)
596                       {
597                         s->addr += text_addr;
598                         s->endaddr += text_addr;
599                       }
600                     else if (flags & (SEC_DATA | SEC_LOAD))
601                       {
602                         s->addr += data_addr;
603                         s->endaddr += data_addr;
604                       }
605                     else if (flags & SEC_ALLOC)
606                       {
607                         s->addr += bss_addr;
608                         s->endaddr += bss_addr;
609                       }
610                   }
611               }
612             }
613           break;
614         }
615       else if (buf[0] == 'W')
616         {
617           /* The remote process exited.  */
618           WSETEXIT (*status, (fromhex (buf[1]) << 4) + fromhex (buf[2]));
619           return 0;
620         }
621       else if (buf[0] == 'S')
622         break;
623       else
624         warning ("Invalid remote reply: %s", buf);
625     }
626
627   WSETSTOP ((*status), (((fromhex (buf[1])) << 4) + (fromhex (buf[2]))));
628
629   return 0;
630 }
631
632 /* Number of bytes of registers this stub implements.  */
633 static int register_bytes_found;
634
635 /* Read the remote registers into the block REGS.  */
636 /* Currently we just read all the registers, so we don't use regno.  */
637 /* ARGSUSED */
638 static void
639 remote_fetch_registers (regno)
640      int regno;
641 {
642   char buf[PBUFSIZ];
643   int i;
644   char *p;
645   char regs[REGISTER_BYTES];
646
647   sprintf (buf, "g");
648   remote_send (buf);
649
650   /* Unimplemented registers read as all bits zero.  */
651   memset (regs, 0, REGISTER_BYTES);
652
653   /* We can get out of synch in various cases.  If the first character
654      in the buffer is not a hex character, assume that has happened
655      and try to fetch another packet to read.  */
656   while ((buf[0] < '0' || buf[0] > '9')
657          && (buf[0] < 'a' || buf[0] > 'f'))
658     {
659       if (remote_debug)
660         printf ("Bad register packet; fetching a new packet\n");
661       getpkt (buf, 0);
662     }
663
664   /* Reply describes registers byte by byte, each byte encoded as two
665      hex characters.  Suck them all up, then supply them to the
666      register cacheing/storage mechanism.  */
667
668   p = buf;
669   for (i = 0; i < REGISTER_BYTES; i++)
670     {
671       if (p[0] == 0)
672         break;
673       if (p[1] == 0)
674         {
675           warning ("Remote reply is of odd length: %s", buf);
676           /* Don't change register_bytes_found in this case, and don't
677              print a second warning.  */
678           goto supply_them;
679         }
680       regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
681       p += 2;
682     }
683
684   if (i != register_bytes_found)
685     {
686       register_bytes_found = i;
687 #ifdef REGISTER_BYTES_OK
688       if (!REGISTER_BYTES_OK (i))
689         warning ("Remote reply is too short: %s", buf);
690 #endif
691     }
692
693  supply_them:
694   for (i = 0; i < NUM_REGS; i++)
695     supply_register (i, &regs[REGISTER_BYTE(i)]);
696 }
697
698 /* Prepare to store registers.  Since we send them all, we have to
699    read out the ones we don't want to change first.  */
700
701 static void 
702 remote_prepare_to_store ()
703 {
704   /* Make sure the entire registers array is valid.  */
705   read_register_bytes (0, (char *)NULL, REGISTER_BYTES);
706 }
707
708 /* Store the remote registers from the contents of the block REGISTERS. 
709    FIXME, eventually just store one register if that's all that is needed.  */
710
711 /* ARGSUSED */
712 static void
713 remote_store_registers (regno)
714      int regno;
715 {
716   char buf[PBUFSIZ];
717   int i;
718   char *p;
719
720   buf[0] = 'G';
721   
722   /* Command describes registers byte by byte,
723      each byte encoded as two hex characters.  */
724
725   p = buf + 1;
726   /* remote_prepare_to_store insures that register_bytes_found gets set.  */
727   for (i = 0; i < register_bytes_found; i++)
728     {
729       *p++ = tohex ((registers[i] >> 4) & 0xf);
730       *p++ = tohex (registers[i] & 0xf);
731     }
732   *p = '\0';
733
734   remote_send (buf);
735 }
736
737 #if 0
738
739 /* Use of the data cache is disabled because it loses for looking at
740    and changing hardware I/O ports and the like.  Accepting `volatile'
741    would perhaps be one way to fix it, but a better way which would
742    win for more cases would be to use the executable file for the text
743    segment, like the `icache' code below but done cleanly (in some
744    target-independent place, perhaps in target_xfer_memory, perhaps
745    based on assigning each target a speed or perhaps by some simpler
746    mechanism).  */
747
748 /* Read a word from remote address ADDR and return it.
749    This goes through the data cache.  */
750
751 static int
752 remote_fetch_word (addr)
753      CORE_ADDR addr;
754 {
755 #if 0
756   if (icache)
757     {
758       extern CORE_ADDR text_start, text_end;
759
760       if (addr >= text_start && addr < text_end)
761         {
762           int buffer;
763           xfer_core_file (addr, &buffer, sizeof (int));
764           return buffer;
765         }
766     }
767 #endif
768   return dcache_fetch (remote_dcache, addr);
769 }
770
771 /* Write a word WORD into remote address ADDR.
772    This goes through the data cache.  */
773
774 static void
775 remote_store_word (addr, word)
776      CORE_ADDR addr;
777      int word;
778 {
779   dcache_poke (remote_dcache, addr, word);
780 }
781 #endif /* 0 */
782 \f
783 /* Write memory data directly to the remote machine.
784    This does not inform the data cache; the data cache uses this.
785    MEMADDR is the address in the remote memory space.
786    MYADDR is the address of the buffer in our space.
787    LEN is the number of bytes.
788
789    Returns number of bytes transferred, or 0 for error.  */
790
791 static int
792 remote_write_bytes (memaddr, myaddr, len)
793      CORE_ADDR memaddr;
794      unsigned char *myaddr;
795      int len;
796 {
797   char buf[PBUFSIZ];
798   int i;
799   char *p;
800
801   if (len > PBUFSIZ / 2 - 20)
802     abort ();
803
804   sprintf (buf, "M%x,%x:", memaddr, len);
805
806   /* We send target system values byte by byte, in increasing byte addresses,
807      each byte encoded as two hex characters.  */
808
809   p = buf + strlen (buf);
810   for (i = 0; i < len; i++)
811     {
812       *p++ = tohex ((myaddr[i] >> 4) & 0xf);
813       *p++ = tohex (myaddr[i] & 0xf);
814     }
815   *p = '\0';
816
817   putpkt (buf);
818   getpkt (buf, 0);
819
820   if (buf[0] == 'E')
821     {
822       /* There is no correspondance between what the remote protocol uses
823          for errors and errno codes.  We would like a cleaner way of
824          representing errors (big enough to include errno codes, bfd_error
825          codes, and others).  But for now just return EIO.  */
826       errno = EIO;
827       return 0;
828     }
829   return len;
830 }
831
832 /* Read memory data directly from the remote machine.
833    This does not use the data cache; the data cache uses this.
834    MEMADDR is the address in the remote memory space.
835    MYADDR is the address of the buffer in our space.
836    LEN is the number of bytes.
837
838    Returns number of bytes transferred, or 0 for error.  */
839
840 static int
841 remote_read_bytes (memaddr, myaddr, len)
842      CORE_ADDR memaddr;
843      unsigned char *myaddr;
844      int len;
845 {
846   char buf[PBUFSIZ];
847   int i;
848   char *p;
849
850   if (len > PBUFSIZ / 2 - 1)
851     abort ();
852
853   sprintf (buf, "m%x,%x", memaddr, len);
854   putpkt (buf);
855   getpkt (buf, 0);
856
857   if (buf[0] == 'E')
858     {
859       /* There is no correspondance between what the remote protocol uses
860          for errors and errno codes.  We would like a cleaner way of
861          representing errors (big enough to include errno codes, bfd_error
862          codes, and others).  But for now just return EIO.  */
863       errno = EIO;
864       return 0;
865     }
866
867   /* Reply describes memory byte by byte,
868      each byte encoded as two hex characters.  */
869
870   p = buf;
871   for (i = 0; i < len; i++)
872     {
873       if (p[0] == 0 || p[1] == 0)
874         /* Reply is short.  This means that we were able to read only part
875            of what we wanted to.  */
876         break;
877       myaddr[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
878       p += 2;
879     }
880   return i;
881 }
882 \f
883 /* Read or write LEN bytes from inferior memory at MEMADDR, transferring
884    to or from debugger address MYADDR.  Write to inferior if SHOULD_WRITE is
885    nonzero.  Returns length of data written or read; 0 for error.  */
886
887 /* ARGSUSED */
888 static int
889 remote_xfer_memory(memaddr, myaddr, len, should_write, target)
890      CORE_ADDR memaddr;
891      char *myaddr;
892      int len;
893      int should_write;
894      struct target_ops *target;                 /* ignored */
895 {
896   int xfersize;
897   int bytes_xferred;
898   int total_xferred = 0;
899
900   while (len > 0)
901     {
902       if (len > MAXBUFBYTES)
903         xfersize = MAXBUFBYTES;
904       else
905         xfersize = len;
906
907       if (should_write)
908         bytes_xferred = remote_write_bytes (memaddr, myaddr, xfersize);
909       else
910         bytes_xferred = remote_read_bytes (memaddr, myaddr, xfersize);
911
912       /* If we get an error, we are done xferring.  */
913       if (bytes_xferred == 0)
914         break;
915
916       memaddr += bytes_xferred;
917       myaddr  += bytes_xferred;
918       len     -= bytes_xferred;
919       total_xferred += bytes_xferred;
920     }
921   return total_xferred;
922 }
923
924 static void
925 remote_files_info (ignore)
926      struct target_ops *ignore;
927 {
928   puts_filtered ("Debugging a target over a serial line.\n");
929 }
930 \f
931 /* Stuff for dealing with the packets which are part of this protocol.
932    See comment at top of file for details.  */
933
934 /* Read a single character from the remote end, masking it down to 7 bits. */
935
936 static int
937 readchar ()
938 {
939   int ch;
940
941   ch = SERIAL_READCHAR (remote_desc, timeout);
942
943   if (ch < 0)
944     return ch;
945
946   return ch & 0x7f;
947 }
948
949 /* Send the command in BUF to the remote machine,
950    and read the reply into BUF.
951    Report an error if we get an error reply.  */
952
953 static void
954 remote_send (buf)
955      char *buf;
956 {
957
958   putpkt (buf);
959   getpkt (buf, 0);
960
961   if (buf[0] == 'E')
962     error ("Remote failure reply: %s", buf);
963 }
964
965 /* Send a packet to the remote machine, with error checking.
966    The data of the packet is in BUF.  */
967
968 static void
969 putpkt (buf)
970      char *buf;
971 {
972   int i;
973   unsigned char csum = 0;
974   char buf2[PBUFSIZ];
975   int cnt = strlen (buf);
976   int ch;
977   char *p;
978
979   /* Copy the packet into buffer BUF2, encapsulating it
980      and giving it a checksum.  */
981
982   if (cnt > sizeof(buf2) - 5)           /* Prosanity check */
983     abort();
984
985   p = buf2;
986   *p++ = '$';
987
988   for (i = 0; i < cnt; i++)
989     {
990       csum += buf[i];
991       *p++ = buf[i];
992     }
993   *p++ = '#';
994   *p++ = tohex ((csum >> 4) & 0xf);
995   *p++ = tohex (csum & 0xf);
996
997   /* Send it over and over until we get a positive ack.  */
998
999   while (1)
1000     {
1001       if (remote_debug)
1002         {
1003           *p = '\0';
1004           printf ("Sending packet: %s...", buf2);  fflush(stdout);
1005         }
1006       if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
1007         perror_with_name ("putpkt: write failed");
1008
1009       /* read until either a timeout occurs (-2) or '+' is read */
1010       while (1)
1011         {
1012           ch = readchar ();
1013
1014           switch (ch)
1015             {
1016             case '+':
1017               if (remote_debug)
1018                 printf("Ack\n");
1019               return;
1020             case SERIAL_TIMEOUT:
1021               break;            /* Retransmit buffer */
1022             case SERIAL_ERROR:
1023               perror_with_name ("putpkt: couldn't read ACK");
1024             case SERIAL_EOF:
1025               error ("putpkt: EOF while trying to read ACK");
1026             default:
1027               if (remote_debug)
1028                 printf ("%02X %c ", ch&0xFF, ch);
1029               continue;
1030             }
1031           break;                /* Here to retransmit */
1032         }
1033
1034       if (quit_flag)
1035         {
1036           quit_flag = 0;
1037           interrupt_query ();
1038         }
1039     }
1040 }
1041
1042 /* Read a packet from the remote machine, with error checking,
1043    and store it in BUF.  BUF is expected to be of size PBUFSIZ.
1044    If FOREVER, wait forever rather than timing out; this is used
1045    while the target is executing user code.  */
1046
1047 static void
1048 getpkt (buf, forever)
1049      char *buf;
1050      int forever;
1051 {
1052   char *bp;
1053   unsigned char csum;
1054   int c = 0;
1055   unsigned char c1, c2;
1056   int retries = 0;
1057 #define MAX_RETRIES     10
1058
1059   while (1)
1060     {
1061       if (quit_flag)
1062         {
1063           quit_flag = 0;
1064           interrupt_query ();
1065         }
1066
1067       /* This can loop forever if the remote side sends us characters
1068          continuously, but if it pauses, we'll get a zero from readchar
1069          because of timeout.  Then we'll count that as a retry.  */
1070
1071       c = readchar();
1072       if (c > 0 && c != '$')
1073         continue;
1074
1075       if (c == SERIAL_TIMEOUT)
1076         {
1077           if (forever)
1078             continue;
1079           if (++retries >= MAX_RETRIES)
1080             if (remote_debug) puts_filtered ("Timed out.\n");
1081           goto out;
1082         }
1083
1084       if (c == SERIAL_EOF)
1085         error ("Remote connection closed");
1086       if (c == SERIAL_ERROR)
1087         perror_with_name ("Remote communication error");
1088
1089       /* Force csum to be zero here because of possible error retry.  */
1090       csum = 0;
1091       bp = buf;
1092
1093       while (1)
1094         {
1095           c = readchar ();
1096           if (c == SERIAL_TIMEOUT)
1097             {
1098               if (remote_debug)
1099                 puts_filtered ("Timeout in mid-packet, retrying\n");
1100               goto whole;               /* Start a new packet, count retries */
1101             } 
1102           if (c == '$')
1103             {
1104               if (remote_debug)
1105                 puts_filtered ("Saw new packet start in middle of old one\n");
1106               goto whole;               /* Start a new packet, count retries */
1107             }
1108           if (c == '#')
1109             break;
1110           if (bp >= buf+PBUFSIZ-1)
1111           {
1112             *bp = '\0';
1113             puts_filtered ("Remote packet too long: ");
1114             puts_filtered (buf);
1115             puts_filtered ("\n");
1116             goto whole;
1117           }
1118           *bp++ = c;
1119           csum += c;
1120         }
1121       *bp = 0;
1122
1123       c1 = fromhex (readchar ());
1124       c2 = fromhex (readchar ());
1125       if ((csum & 0xff) == (c1 << 4) + c2)
1126         break;
1127       printf_filtered ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
1128               (c1 << 4) + c2, csum & 0xff);
1129       puts_filtered (buf);
1130       puts_filtered ("\n");
1131
1132       /* Try the whole thing again.  */
1133 whole:
1134       if (++retries < MAX_RETRIES)
1135         {
1136           SERIAL_WRITE (remote_desc, "-", 1);
1137         }
1138       else
1139         {
1140           printf ("Ignoring packet error, continuing...\n");
1141           break;
1142         }
1143     }
1144
1145 out:
1146
1147   SERIAL_WRITE (remote_desc, "+", 1);
1148
1149   if (remote_debug)
1150     fprintf (stderr,"Packet received: %s\n", buf);
1151 }
1152 \f
1153 static void
1154 remote_kill ()
1155 {
1156   putpkt ("k");
1157   /* Don't wait for it to die.  I'm not really sure it matters whether
1158      we do or not.  For the existing stubs, kill is a noop.  */
1159   target_mourn_inferior ();
1160 }
1161
1162 static void
1163 remote_mourn ()
1164 {
1165   unpush_target (&remote_ops);
1166   generic_mourn_inferior ();
1167 }
1168 \f
1169 #ifdef REMOTE_BREAKPOINT
1170
1171 /* On some machines, e.g. 68k, we may use a different breakpoint instruction
1172    than other targets.  */
1173 static unsigned char break_insn[] = REMOTE_BREAKPOINT;
1174
1175 /* Check that it fits in BREAKPOINT_MAX bytes.  */
1176 static unsigned char check_break_insn_size[BREAKPOINT_MAX] = REMOTE_BREAKPOINT;
1177
1178 #else /* No REMOTE_BREAKPOINT.  */
1179
1180 /* Same old breakpoint instruction.  This code does nothing different
1181    than mem-break.c.  */
1182 static unsigned char break_insn[] = BREAKPOINT;
1183
1184 #endif /* No REMOTE_BREAKPOINT.  */
1185
1186 /* Insert a breakpoint on targets that don't have any better breakpoint
1187    support.  We read the contents of the target location and stash it,
1188    then overwrite it with a breakpoint instruction.  ADDR is the target
1189    location in the target machine.  CONTENTS_CACHE is a pointer to 
1190    memory allocated for saving the target contents.  It is guaranteed
1191    by the caller to be long enough to save sizeof BREAKPOINT bytes (this
1192    is accomplished via BREAKPOINT_MAX).  */
1193
1194 static int
1195 remote_insert_breakpoint (addr, contents_cache)
1196      CORE_ADDR addr;
1197      char *contents_cache;
1198 {
1199   int val;
1200
1201   val = target_read_memory (addr, contents_cache, sizeof break_insn);
1202
1203   if (val == 0)
1204     val = target_write_memory (addr, (char *)break_insn, sizeof break_insn);
1205
1206   return val;
1207 }
1208
1209 static int
1210 remote_remove_breakpoint (addr, contents_cache)
1211      CORE_ADDR addr;
1212      char *contents_cache;
1213 {
1214   return target_write_memory (addr, contents_cache, sizeof break_insn);
1215 }
1216 \f
1217 /* Define the target subroutine names */
1218
1219 struct target_ops remote_ops = {
1220   "remote",                     /* to_shortname */
1221   "Remote serial target in gdb-specific protocol",      /* to_longname */
1222   "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
1223 Specify the serial device it is connected to (e.g. /dev/ttya).",  /* to_doc */
1224   remote_open,                  /* to_open */
1225   remote_close,                 /* to_close */
1226   NULL,                         /* to_attach */
1227   remote_detach,                /* to_detach */
1228   remote_resume,                /* to_resume */
1229   remote_wait,                  /* to_wait */
1230   remote_fetch_registers,       /* to_fetch_registers */
1231   remote_store_registers,       /* to_store_registers */
1232   remote_prepare_to_store,      /* to_prepare_to_store */
1233   remote_xfer_memory,           /* to_xfer_memory */
1234   remote_files_info,            /* to_files_info */
1235
1236   remote_insert_breakpoint,     /* to_insert_breakpoint */
1237   remote_remove_breakpoint,     /* to_remove_breakpoint */
1238
1239   NULL,                         /* to_terminal_init */
1240   NULL,                         /* to_terminal_inferior */
1241   NULL,                         /* to_terminal_ours_for_output */
1242   NULL,                         /* to_terminal_ours */
1243   NULL,                         /* to_terminal_info */
1244   remote_kill,                  /* to_kill */
1245   generic_load,                 /* to_load */
1246   NULL,                         /* to_lookup_symbol */
1247   NULL,                         /* to_create_inferior */
1248   remote_mourn,                 /* to_mourn_inferior */
1249   0,                            /* to_can_run */
1250   0,                            /* to_notice_signals */
1251   process_stratum,              /* to_stratum */
1252   NULL,                         /* to_next */
1253   1,                            /* to_has_all_memory */
1254   1,                            /* to_has_memory */
1255   1,                            /* to_has_stack */
1256   1,                            /* to_has_registers */
1257   1,                            /* to_has_execution */
1258   NULL,                         /* sections */
1259   NULL,                         /* sections_end */
1260   OPS_MAGIC                     /* to_magic */
1261 };
1262 #endif /* Use remote.  */
1263
1264 void
1265 _initialize_remote ()
1266 {
1267 #if !defined(DONT_USE_REMOTE)
1268   add_target (&remote_ops);
1269 #endif
1270 }