]> Git Repo - binutils.git/blob - gdb/remote.c
keep nm-irix5.h
[binutils.git] / gdb / remote.c
1 /* Remote target communications for serial-line targets in custom GDB protocol
2    Copyright 1988, 1991, 1992, 1993, 1994, 1995 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 '#'.  If <data> starts with two characters followed by
29         ':', then the existing stubs interpret this as a sequence number.
30
31         CSUM1 and CSUM2 are ascii hex representation of an 8-bit 
32         checksum of <data>, the most significant nibble is sent first.
33         the hex digits 0-9,a-f are used.
34
35    Receiver responds with:
36
37         +       - if CSUM is correct and ready for next packet
38         -       - if CSUM is incorrect
39
40    <data> is as follows:
41    Most values are encoded in ascii hex digits.  Signal numbers are according
42    to the numbering in target.h.
43
44         Request         Packet
45
46         set thread      Hct...          Set thread for subsequent operations.
47                                         c = 'c' for thread used in step and 
48                                         continue; t... can be -1 for all
49                                         threads.
50                                         c = 'g' for thread used in other
51                                         operations.  If zero, pick a thread,
52                                         any thread.
53         reply           OK              for success
54                         ENN             for an error.
55
56         read registers  g
57         reply           XX....X         Each byte of register data
58                                         is described by two hex digits.
59                                         Registers are in the internal order
60                                         for GDB, and the bytes in a register
61                                         are in the same order the machine uses.
62                         or ENN          for an error.
63
64         write regs      GXX..XX         Each byte of register data
65                                         is described by two hex digits.
66         reply           OK              for success
67                         ENN             for an error
68
69         write reg       Pn...=r...      Write register n... with value r...,
70                                         which contains two hex digits for each
71                                         byte in the register (target byte
72                                         order).
73         reply           OK              for success
74                         ENN             for an error
75         (not supported by all stubs).
76
77         read mem        mAA..AA,LLLL    AA..AA is address, LLLL is length.
78         reply           XX..XX          XX..XX is mem contents
79                                         Can be fewer bytes than requested
80                                         if able to read only part of the data.
81                         or ENN          NN is errno
82
83         write mem       MAA..AA,LLLL:XX..XX
84                                         AA..AA is address,
85                                         LLLL is number of bytes,
86                                         XX..XX is data
87         reply           OK              for success
88                         ENN             for an error (this includes the case
89                                         where only part of the data was
90                                         written).
91
92         continue        cAA..AA         AA..AA is address to resume
93                                         If AA..AA is omitted,
94                                         resume at same address.
95
96         step            sAA..AA         AA..AA is address to resume
97                                         If AA..AA is omitted,
98                                         resume at same address.
99
100         continue with   Csig;AA         Continue with signal sig (hex signal
101         signal                          number).
102
103         step with       Ssig;AA         Like 'C' but step not continue.
104         signal
105
106         last signal     ?               Reply the current reason for stopping.
107                                         This is the same reply as is generated
108                                         for step or cont : SAA where AA is the
109                                         signal number.
110
111         There is no immediate reply to step or cont.
112         The reply comes when the machine stops.
113         It is           SAA             AA is the signal number.
114
115         or...           TAAn...:r...;n...:r...;n...:r...;
116                                         AA = signal number
117                                         n... = register number (hex)
118                                           r... = register contents
119                                         n... = `thread'
120                                           r... = thread process ID.  This is
121                                                  a hex integer.
122                                         n... = other string not starting 
123                                             with valid hex digit.
124                                           gdb should ignore this n,r pair
125                                           and go on to the next.  This way
126                                           we can extend the protocol.
127         or...           WAA             The process exited, and AA is
128                                         the exit status.  This is only
129                                         applicable for certains sorts of
130                                         targets.
131         or...           XAA             The process terminated with signal
132                                         AA.
133         or...           OXX..XX XX..XX  is hex encoding of ASCII data. This
134                                         can happen at any time while the program is
135                                         running and the debugger should
136                                         continue to wait for 'W', 'T', etc.
137
138         thread alive    TXX             Find out if the thread XX is alive.
139         reply           OK              thread is still alive
140                         ENN             thread is dead
141         
142         remote restart  RXX             Restart the remote server
143
144         extended ops    !               Use the extended remote protocol.
145                                         Sticky -- only needs to be set once.
146
147         kill request    k
148
149         toggle debug    d               toggle debug flag (see 386 & 68k stubs)
150         reset           r               reset -- see sparc stub.
151         reserved        <other>         On other requests, the stub should
152                                         ignore the request and send an empty
153                                         response ($#<checksum>).  This way
154                                         we can extend the protocol and GDB
155                                         can tell whether the stub it is
156                                         talking to uses the old or the new.
157         search          tAA:PP,MM       Search backwards starting at address
158                                         AA for a match with pattern PP and
159                                         mask MM.  PP and MM are 4 bytes.
160                                         Not supported by all stubs.
161
162         general query   qXXXX           Request info about XXXX.
163         general set     QXXXX=yyyy      Set value of XXXX to yyyy.
164         query sect offs qOffsets        Get section offsets.  Reply is
165                                         Text=xxx;Data=yyy;Bss=zzz
166
167         Responses can be run-length encoded to save space.  A '*' means that
168         the next character is an ASCII encoding giving a repeat count which
169         stands for that many repititions of the character preceding the '*'.
170         The encoding is n+29, yielding a printable character where n >=3 
171         (which is where rle starts to win).  Don't use an n > 126.
172
173         So 
174         "0* " means the same as "0000".  */
175
176 #include "defs.h"
177 #include "gdb_string.h"
178 #include <fcntl.h>
179 #include "frame.h"
180 #include "inferior.h"
181 #include "bfd.h"
182 #include "symfile.h"
183 #include "target.h"
184 #include "wait.h"
185 #include "terminal.h"
186 #include "gdbcmd.h"
187 #include "objfiles.h"
188 #include "gdb-stabs.h"
189 #include "thread.h"
190
191 #include "dcache.h"
192
193 #ifdef USG
194 #include <sys/types.h>
195 #endif
196
197 #include <signal.h>
198 #include "serial.h"
199
200 /* Prototypes for local functions */
201
202 static int remote_write_bytes PARAMS ((CORE_ADDR memaddr,
203                                        char *myaddr, int len));
204
205 static int remote_read_bytes PARAMS ((CORE_ADDR memaddr,
206                                       char *myaddr, int len));
207
208 static void remote_files_info PARAMS ((struct target_ops *ignore));
209
210 static int remote_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr,
211                                        int len, int should_write,
212                                        struct target_ops *target));
213
214 static void remote_prepare_to_store PARAMS ((void));
215
216 static void remote_fetch_registers PARAMS ((int regno));
217
218 static void remote_resume PARAMS ((int pid, int step,
219                                    enum target_signal siggnal));
220
221 static int remote_start_remote PARAMS ((char *dummy));
222
223 static void remote_open PARAMS ((char *name, int from_tty));
224
225 static void extended_remote_open PARAMS ((char *name, int from_tty));
226
227 static void remote_open_1 PARAMS ((char *, int, struct target_ops *));
228
229 static void remote_close PARAMS ((int quitting));
230
231 static void remote_store_registers PARAMS ((int regno));
232
233 static void remote_mourn PARAMS ((void));
234
235 static void extended_remote_restart PARAMS ((void));
236
237 static void extended_remote_mourn PARAMS ((void));
238
239 static void extended_remote_create_inferior PARAMS ((char *, char *, char **));
240
241 static void remote_mourn_1 PARAMS ((struct target_ops *));
242
243 static void getpkt PARAMS ((char *buf, int forever));
244
245 static int putpkt PARAMS ((char *buf));
246
247 static void remote_send PARAMS ((char *buf));
248
249 static int readchar PARAMS ((int timeout));
250
251 static int remote_wait PARAMS ((int pid, struct target_waitstatus *status));
252
253 static void remote_kill PARAMS ((void));
254
255 static int tohex PARAMS ((int nib));
256
257 static int fromhex PARAMS ((int a));
258
259 static void remote_detach PARAMS ((char *args, int from_tty));
260
261 static void remote_interrupt PARAMS ((int signo));
262
263 static void remote_interrupt_twice PARAMS ((int signo));
264
265 static void interrupt_query PARAMS ((void));
266
267 extern struct target_ops remote_ops;    /* Forward decl */
268 extern struct target_ops extended_remote_ops;   /* Forward decl */
269
270 /* This was 5 seconds, which is a long time to sit and wait.
271    Unless this is going though some terminal server or multiplexer or
272    other form of hairy serial connection, I would think 2 seconds would
273    be plenty.  */
274
275 static int remote_timeout = 2;
276
277 /* Descriptor for I/O to remote machine.  Initialize it to NULL so that
278    remote_open knows that we don't have a file open when the program
279    starts.  */
280 serial_t remote_desc = NULL;
281
282 /* Having this larger than 400 causes us to be incompatible with m68k-stub.c
283    and i386-stub.c.  Normally, no one would notice because it only matters
284    for writing large chunks of memory (e.g. in downloads).  Also, this needs
285    to be more than 400 if required to hold the registers (see below, where
286    we round it up based on REGISTER_BYTES).  */
287 #define PBUFSIZ 400
288
289 /* Maximum number of bytes to read/write at once.  The value here
290    is chosen to fill up a packet (the headers account for the 32).  */
291 #define MAXBUFBYTES ((PBUFSIZ-32)/2)
292
293 /* Round up PBUFSIZ to hold all the registers, at least.  */
294 /* The blank line after the #if seems to be required to work around a
295    bug in HP's PA compiler.  */
296 #if REGISTER_BYTES > MAXBUFBYTES
297
298 #undef PBUFSIZ
299 #define PBUFSIZ (REGISTER_BYTES * 2 + 32)
300 #endif
301
302 /* Should we try the 'P' request?  If this is set to one when the stub
303    doesn't support 'P', the only consequence is some unnecessary traffic.  */
304 static int stub_supports_P = 1;
305
306 \f
307 /* These are the threads which we last sent to the remote system.  -1 for all
308    or -2 for not sent yet.  */
309 int general_thread;
310 int cont_thread;
311
312 static void
313 set_thread (th, gen)
314      int th;
315      int gen;
316 {
317   char buf[PBUFSIZ];
318   int state = gen ? general_thread : cont_thread;
319   if (state == th)
320     return;
321   buf[0] = 'H';
322   buf[1] = gen ? 'g' : 'c';
323   if (th == 42000)
324     {
325       buf[2] = '0';
326       buf[3] = '\0';
327     }
328   else if (th < 0)
329     sprintf (&buf[2], "-%x", -th);
330   else
331     sprintf (&buf[2], "%x", th);
332   putpkt (buf);
333   getpkt (buf, 0);
334   if (gen)
335     general_thread = th;
336   else
337     cont_thread = th;
338 }
339 \f
340 /*  Return nonzero if the thread TH is still alive on the remote system.  */
341
342 static int
343 remote_thread_alive (th)
344      int th;
345 {
346   char buf[PBUFSIZ];
347
348   buf[0] = 'T';
349   if (th < 0)
350     sprintf (&buf[1], "-%x", -th);
351   else
352     sprintf (&buf[1], "%x", th);
353   putpkt (buf);
354   getpkt (buf, 0);
355   return (buf[0] == 'O' && buf[1] == 'K');
356 }
357
358 /*  Restart the remote side; this is an extended protocol operation.  */
359
360 static void
361 extended_remote_restart ()
362 {
363   char buf[PBUFSIZ];
364
365   /* Send the restart command; for reasons I don't understand the
366      remote side really expects a number after the "R".  */
367   buf[0] = 'R';
368   sprintf (&buf[1], "%x", 0);
369   putpkt (buf);
370
371   /* Now query for status so this looks just like we restarted
372      gdbserver from scratch.  */
373   putpkt ("?");
374   getpkt (buf, 0);
375 }
376 \f
377 /* Clean up connection to a remote debugger.  */
378
379 /* ARGSUSED */
380 static void
381 remote_close (quitting)
382      int quitting;
383 {
384   if (remote_desc)
385     SERIAL_CLOSE (remote_desc);
386   remote_desc = NULL;
387 }
388
389 /* Query the remote side for the text, data and bss offsets. */
390
391 static void
392 get_offsets ()
393 {
394   char buf[PBUFSIZ];
395   int nvals;
396   CORE_ADDR text_addr, data_addr, bss_addr;
397   struct section_offsets *offs;
398
399   putpkt ("qOffsets");
400
401   getpkt (buf, 0);
402
403   if (buf[0] == '\000')
404     return;                     /* Return silently.  Stub doesn't support this
405                                    command. */
406   if (buf[0] == 'E')
407     {
408       warning ("Remote failure reply: %s", buf);
409       return;
410     }
411
412   nvals = sscanf (buf, "Text=%lx;Data=%lx;Bss=%lx", &text_addr, &data_addr,
413                   &bss_addr);
414   if (nvals != 3)
415     error ("Malformed response to offset query, %s", buf);
416
417   if (symfile_objfile == NULL)
418     return;
419
420   offs = (struct section_offsets *) alloca (sizeof (struct section_offsets)
421                                             + symfile_objfile->num_sections
422                                             * sizeof (offs->offsets));
423   memcpy (offs, symfile_objfile->section_offsets,
424           sizeof (struct section_offsets)
425           + symfile_objfile->num_sections
426           * sizeof (offs->offsets));
427
428   ANOFFSET (offs, SECT_OFF_TEXT) = text_addr;
429
430   /* This is a temporary kludge to force data and bss to use the same offsets
431      because that's what nlmconv does now.  The real solution requires changes
432      to the stub and remote.c that I don't have time to do right now.  */
433
434   ANOFFSET (offs, SECT_OFF_DATA) = data_addr;
435   ANOFFSET (offs, SECT_OFF_BSS) = data_addr;
436
437   objfile_relocate (symfile_objfile, offs);
438 }
439
440 /* Stub for catch_errors.  */
441
442 static int
443 remote_start_remote (dummy)
444      char *dummy;
445 {
446   immediate_quit = 1;           /* Allow user to interrupt it */
447
448   /* Ack any packet which the remote side has already sent.  */
449   SERIAL_WRITE (remote_desc, "+", 1);
450
451   /* Let the stub know that we want it to return the thread.  */
452   set_thread (-1, 0);
453
454   get_offsets ();               /* Get text, data & bss offsets */
455
456   putpkt ("?");                 /* initiate a query from remote machine */
457   immediate_quit = 0;
458
459   start_remote ();              /* Initialize gdb process mechanisms */
460   return 1;
461 }
462
463 /* Open a connection to a remote debugger.
464    NAME is the filename used for communication.  */
465
466 static void
467 remote_open (name, from_tty)
468      char *name;
469      int from_tty;
470 {
471   remote_open_1 (name, from_tty, &remote_ops);
472 }
473
474 /* Open a connection to a remote debugger using the extended
475    remote gdb protocol.  NAME is hte filename used for communication.  */
476
477 static void
478 extended_remote_open (name, from_tty)
479      char *name;
480      int from_tty;
481 {
482   char buf[PBUFSIZ];
483
484   /* Do the basic remote open stuff.  */
485   remote_open_1 (name, from_tty, &extended_remote_ops);
486
487   /* Now tell the remote that we're using the extended protocol.  */
488   putpkt ("!");
489   getpkt (buf, 0);
490
491 }
492
493 /* Generic code for opening a connection to a remote target.  */
494 static DCACHE *remote_dcache;
495
496 static void
497 remote_open_1 (name, from_tty, target)
498      char *name;
499      int from_tty;
500      struct target_ops *target;
501 {
502   if (name == 0)
503     error ("To open a remote debug connection, you need to specify what serial\n\
504 device is attached to the remote system (e.g. /dev/ttya).");
505
506   target_preopen (from_tty);
507
508   unpush_target (target);
509
510   remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
511
512   remote_desc = SERIAL_OPEN (name);
513   if (!remote_desc)
514     perror_with_name (name);
515
516   if (baud_rate != -1)
517     {
518       if (SERIAL_SETBAUDRATE (remote_desc, baud_rate))
519         {
520           SERIAL_CLOSE (remote_desc);
521           perror_with_name (name);
522         }
523     }
524
525
526   SERIAL_RAW (remote_desc);
527
528   /* If there is something sitting in the buffer we might take it as a
529      response to a command, which would be bad.  */
530   SERIAL_FLUSH_INPUT (remote_desc);
531
532   if (from_tty)
533     {
534       puts_filtered ("Remote debugging using ");
535       puts_filtered (name);
536       puts_filtered ("\n");
537     }
538   push_target (target); /* Switch to using remote target now */
539
540   /* Start out by trying the 'P' request to set registers.  We set this each
541      time that we open a new target so that if the user switches from one
542      stub to another, we can (if the target is closed and reopened) cope.  */
543   stub_supports_P = 1;
544
545   general_thread = -2;
546   cont_thread = -2;
547
548   /* Without this, some commands which require an active target (such as kill)
549      won't work.  This variable serves (at least) double duty as both the pid
550      of the target process (if it has such), and as a flag indicating that a
551      target is active.  These functions should be split out into seperate
552      variables, especially since GDB will someday have a notion of debugging
553      several processes.  */
554
555   inferior_pid = 42000;
556   /* Start the remote connection; if error (0), discard this target.
557      In particular, if the user quits, be sure to discard it
558      (we'd be in an inconsistent state otherwise).  */
559   if (!catch_errors (remote_start_remote, (char *)0, 
560                      "Couldn't establish connection to remote target\n", RETURN_MASK_ALL))
561     pop_target();
562 }
563
564 /* remote_detach()
565    takes a program previously attached to and detaches it.
566    We better not have left any breakpoints
567    in the program or it'll die when it hits one.
568    Close the open connection to the remote debugger.
569    Use this when you want to detach and do something else
570    with your gdb.  */
571
572 static void
573 remote_detach (args, from_tty)
574      char *args;
575      int from_tty;
576 {
577   if (args)
578     error ("Argument given to \"detach\" when remotely debugging.");
579   
580   pop_target ();
581   if (from_tty)
582     puts_filtered ("Ending remote debugging.\n");
583 }
584
585 /* Convert hex digit A to a number.  */
586
587 static int
588 fromhex (a)
589      int a;
590 {
591   if (a >= '0' && a <= '9')
592     return a - '0';
593   else if (a >= 'a' && a <= 'f')
594     return a - 'a' + 10;
595   else 
596     error ("Reply contains invalid hex digit %d", a);
597 }
598
599 /* Convert number NIB to a hex digit.  */
600
601 static int
602 tohex (nib)
603      int nib;
604 {
605   if (nib < 10)
606     return '0'+nib;
607   else
608     return 'a'+nib-10;
609 }
610 \f
611 /* Tell the remote machine to resume.  */
612
613 static enum target_signal last_sent_signal = TARGET_SIGNAL_0;
614 int last_sent_step;
615
616 static void
617 remote_resume (pid, step, siggnal)
618      int pid, step;
619      enum target_signal siggnal;
620 {
621   char buf[PBUFSIZ];
622
623   if (pid == -1)
624     set_thread (inferior_pid, 0);
625   else
626     set_thread (pid, 0);
627
628   dcache_flush (remote_dcache);
629
630   last_sent_signal = siggnal;
631   last_sent_step = step;
632
633   if (siggnal != TARGET_SIGNAL_0)
634     {
635       buf[0] = step ? 'S' : 'C';
636       buf[1] = tohex (((int)siggnal >> 4) & 0xf);
637       buf[2] = tohex ((int)siggnal & 0xf);
638       buf[3] = '\0';
639     }
640   else
641     strcpy (buf, step ? "s": "c");
642
643   putpkt (buf);
644 }
645 \f
646 /* Send ^C to target to halt it.  Target will respond, and send us a
647    packet.  */
648
649 static void
650 remote_interrupt (signo)
651      int signo;
652 {
653   /* If this doesn't work, try more severe steps.  */
654   signal (signo, remote_interrupt_twice);
655   
656   if (remote_debug)
657     printf_unfiltered ("remote_interrupt called\n");
658
659   SERIAL_WRITE (remote_desc, "\003", 1); /* Send a ^C */
660 }
661
662 static void (*ofunc)();
663
664 /* The user typed ^C twice.  */
665 static void
666 remote_interrupt_twice (signo)
667      int signo;
668 {
669   signal (signo, ofunc);
670   
671   interrupt_query ();
672
673   signal (signo, remote_interrupt);
674 }
675
676 /* Ask the user what to do when an interrupt is received.  */
677
678 static void
679 interrupt_query ()
680 {
681   target_terminal_ours ();
682
683   if (query ("Interrupted while waiting for the program.\n\
684 Give up (and stop debugging it)? "))
685     {
686       target_mourn_inferior ();
687       return_to_top_level (RETURN_QUIT);
688     }
689
690   target_terminal_inferior ();
691 }
692
693 /* If nonzero, ignore the next kill.  */
694 int kill_kludge;
695
696 /* Wait until the remote machine stops, then return,
697    storing status in STATUS just as `wait' would.
698    Returns "pid" (though it's not clear what, if anything, that
699    means in the case of this target).  */
700
701 static int
702 remote_wait (pid, status)
703      int pid;
704      struct target_waitstatus *status;
705 {
706   unsigned char buf[PBUFSIZ];
707   int thread_num = -1;
708
709   status->kind = TARGET_WAITKIND_EXITED;
710   status->value.integer = 0;
711
712   while (1)
713     {
714       unsigned char *p;
715
716       ofunc = (void (*)()) signal (SIGINT, remote_interrupt);
717       getpkt ((char *) buf, 1);
718       signal (SIGINT, ofunc);
719
720       switch (buf[0])
721         {
722         case 'E':               /* Error of some sort */
723           warning ("Remote failure reply: %s", buf);
724           continue;
725         case 'T':               /* Status with PC, SP, FP, ... */
726           {
727             int i;
728             long regno;
729             char regs[MAX_REGISTER_RAW_SIZE];
730
731             /* Expedited reply, containing Signal, {regno, reg} repeat */
732             /*  format is:  'Tssn...:r...;n...:r...;n...:r...;#cc', where
733                 ss = signal number
734                 n... = register number
735                 r... = register contents
736                 */
737
738             p = &buf[3];        /* after Txx */
739
740             while (*p)
741               {
742                 unsigned char *p1;
743                 char *p_temp;
744                 unsigned LONGEST val;
745
746                 regno = strtol ((const char *) p, &p_temp, 16); /* Read the register number */
747                 p1 = (unsigned char *)p_temp;
748
749                 if (p1 == p)
750                   {
751                     p1 = (unsigned char *) strchr ((const char *) p, ':');
752                     if (p1 == NULL)
753                       warning ("Malformed packet (missing colon): %s\n\
754 Packet: '%s'\n",
755                                p, buf);
756                     if (strncmp ((const char *) p, "thread", p1 - p) == 0)
757                       {
758                         thread_num = strtol ((const char *) ++p1, &p_temp, 16);
759                         p = (unsigned char *)p_temp;
760                       }
761                   }
762                 else
763                   {
764                     p = p1;
765
766                     if (*p++ != ':')
767                       warning ("Malformed packet (missing colon): %s\n\
768 Packet: '%s'\n",
769                                p, buf);
770
771                     if (regno >= NUM_REGS)
772                       warning ("Remote sent bad register number %ld: %s\n\
773 Packet: '%s'\n",
774                                regno, p, buf);
775
776                     val = 0L;
777                     for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
778                       {
779                         if (p[0] == 0 || p[1] == 0)
780                           warning ("Remote reply is too short: %s", buf);
781                         val = val * 256 + fromhex (p[0]) * 16 + fromhex (p[1]);
782                         p += 2;
783
784                       }
785                     store_unsigned_integer (regs, REGISTER_RAW_SIZE (regno), val);
786                     supply_register (regno, regs);
787                   }
788
789                 if (*p++ != ';')
790                   warning ("Remote register badly formatted: %s", buf);
791               }
792           }
793           /* fall through */
794         case 'S':               /* Old style status, just signal only */
795           status->kind = TARGET_WAITKIND_STOPPED;
796           status->value.sig = (enum target_signal)
797             (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
798
799           goto got_status;
800         case 'W':               /* Target exited */
801           {
802             /* The remote process exited.  */
803             status->kind = TARGET_WAITKIND_EXITED;
804             status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
805             goto got_status;
806           }
807         case 'X':
808           status->kind = TARGET_WAITKIND_SIGNALLED;
809           status->value.sig = (enum target_signal)
810             (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
811           kill_kludge = 1;
812
813           goto got_status;
814         case 'O':               /* Console output */
815           for (p = buf + 1; *p; p +=2) 
816             {
817               char tb[2];
818               char c = fromhex (p[0]) * 16 + fromhex (p[1]);
819               tb[0] = c;
820               tb[1] = 0;
821               if (target_output_hook)
822                 target_output_hook (tb);
823               else 
824                 fputs_filtered (tb, gdb_stdout);
825             }
826           continue;
827         case '\0':
828           if (last_sent_signal != TARGET_SIGNAL_0)
829             {
830               /* Zero length reply means that we tried 'S' or 'C' and
831                  the remote system doesn't support it.  */
832               target_terminal_ours_for_output ();
833               printf_filtered
834                 ("Can't send signals to this remote system.  %s not sent.\n",
835                  target_signal_to_name (last_sent_signal));
836               last_sent_signal = TARGET_SIGNAL_0;
837               target_terminal_inferior ();
838
839               strcpy ((char *) buf, last_sent_step ? "s" : "c");
840               putpkt ((char *) buf);
841               continue;
842             }
843           /* else fallthrough */
844         default:
845           warning ("Invalid remote reply: %s", buf);
846           continue;
847         }
848     }
849  got_status:
850   if (thread_num != -1)
851     {
852       /* Initial thread value can only be acquired via wait, so deal with
853          this marker which is used before the first thread value is
854          acquired.  */
855       if (inferior_pid == 42000)
856         {
857           inferior_pid = thread_num;
858           add_thread (inferior_pid);
859         }
860       return thread_num;
861     }
862   return inferior_pid;
863 }
864
865 /* Number of bytes of registers this stub implements.  */
866 static int register_bytes_found;
867
868 /* Read the remote registers into the block REGS.  */
869 /* Currently we just read all the registers, so we don't use regno.  */
870 /* ARGSUSED */
871 static void
872 remote_fetch_registers (regno)
873      int regno;
874 {
875   char buf[PBUFSIZ];
876   int i;
877   char *p;
878   char regs[REGISTER_BYTES];
879
880   set_thread (inferior_pid, 1);
881
882   sprintf (buf, "g");
883   remote_send (buf);
884
885   /* Unimplemented registers read as all bits zero.  */
886   memset (regs, 0, REGISTER_BYTES);
887
888   /* We can get out of synch in various cases.  If the first character
889      in the buffer is not a hex character, assume that has happened
890      and try to fetch another packet to read.  */
891   while ((buf[0] < '0' || buf[0] > '9')
892          && (buf[0] < 'a' || buf[0] > 'f'))
893     {
894       if (remote_debug)
895         printf_unfiltered ("Bad register packet; fetching a new packet\n");
896       getpkt (buf, 0);
897     }
898
899   /* Reply describes registers byte by byte, each byte encoded as two
900      hex characters.  Suck them all up, then supply them to the
901      register cacheing/storage mechanism.  */
902
903   p = buf;
904   for (i = 0; i < REGISTER_BYTES; i++)
905     {
906       if (p[0] == 0)
907         break;
908       if (p[1] == 0)
909         {
910           warning ("Remote reply is of odd length: %s", buf);
911           /* Don't change register_bytes_found in this case, and don't
912              print a second warning.  */
913           goto supply_them;
914         }
915       regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
916       p += 2;
917     }
918
919   if (i != register_bytes_found)
920     {
921       register_bytes_found = i;
922 #ifdef REGISTER_BYTES_OK
923       if (!REGISTER_BYTES_OK (i))
924         warning ("Remote reply is too short: %s", buf);
925 #endif
926     }
927
928  supply_them:
929   for (i = 0; i < NUM_REGS; i++)
930     supply_register (i, &regs[REGISTER_BYTE(i)]);
931 }
932
933 /* Prepare to store registers.  Since we may send them all (using a
934    'G' request), we have to read out the ones we don't want to change
935    first.  */
936
937 static void 
938 remote_prepare_to_store ()
939 {
940   /* Make sure the entire registers array is valid.  */
941   read_register_bytes (0, (char *)NULL, REGISTER_BYTES);
942 }
943
944 /* Store register REGNO, or all registers if REGNO == -1, from the contents
945    of REGISTERS.  FIXME: ignores errors.  */
946
947 static void
948 remote_store_registers (regno)
949      int regno;
950 {
951   char buf[PBUFSIZ];
952   int i;
953   char *p;
954
955   set_thread (inferior_pid, 1);
956
957   if (regno >= 0 && stub_supports_P)
958     {
959       /* Try storing a single register.  */
960       char *regp;
961
962       sprintf (buf, "P%x=", regno);
963       p = buf + strlen (buf);
964       regp = &registers[REGISTER_BYTE (regno)];
965       for (i = 0; i < REGISTER_RAW_SIZE (regno); ++i)
966         {
967           *p++ = tohex ((regp[i] >> 4) & 0xf);
968           *p++ = tohex (regp[i] & 0xf);
969         }
970       *p = '\0';
971       remote_send (buf);
972       if (buf[0] != '\0')
973         {
974           /* The stub understands the 'P' request.  We are done.  */
975           return;
976         }
977
978       /* The stub does not support the 'P' request.  Use 'G' instead,
979          and don't try using 'P' in the future (it will just waste our
980          time).  */
981       stub_supports_P = 0;
982     }
983
984   buf[0] = 'G';
985
986   /* Command describes registers byte by byte,
987      each byte encoded as two hex characters.  */
988
989   p = buf + 1;
990   /* remote_prepare_to_store insures that register_bytes_found gets set.  */
991   for (i = 0; i < register_bytes_found; i++)
992     {
993       *p++ = tohex ((registers[i] >> 4) & 0xf);
994       *p++ = tohex (registers[i] & 0xf);
995     }
996   *p = '\0';
997
998   remote_send (buf);
999 }
1000
1001 /* 
1002    Use of the data cache *used* to be disabled because it loses for looking at
1003    and changing hardware I/O ports and the like.  Accepting `volatile'
1004    would perhaps be one way to fix it.  Another idea would be to use the
1005    executable file for the text segment (for all SEC_CODE sections?
1006    For all SEC_READONLY sections?).  This has problems if you want to
1007    actually see what the memory contains (e.g. self-modifying code,
1008    clobbered memory, user downloaded the wrong thing).  
1009
1010    Because it speeds so much up, it's now enabled, if you're playing
1011    with registers you turn it of (set remotecache 0)
1012 */
1013
1014 /* Read a word from remote address ADDR and return it.
1015    This goes through the data cache.  */
1016
1017 #if 0   /* unused? */
1018 static int
1019 remote_fetch_word (addr)
1020      CORE_ADDR addr;
1021 {
1022   return dcache_fetch (remote_dcache, addr);
1023 }
1024
1025 /* Write a word WORD into remote address ADDR.
1026    This goes through the data cache.  */
1027
1028 static void
1029 remote_store_word (addr, word)
1030      CORE_ADDR addr;
1031      int word;
1032 {
1033   dcache_poke (remote_dcache, addr, word);
1034 }
1035 #endif  /* 0 (unused?) */
1036
1037 \f
1038 /* Write memory data directly to the remote machine.
1039    This does not inform the data cache; the data cache uses this.
1040    MEMADDR is the address in the remote memory space.
1041    MYADDR is the address of the buffer in our space.
1042    LEN is the number of bytes.
1043
1044    Returns number of bytes transferred, or 0 for error.  */
1045
1046 static int
1047 remote_write_bytes (memaddr, myaddr, len)
1048      CORE_ADDR memaddr;
1049      char *myaddr;
1050      int len;
1051 {
1052   char buf[PBUFSIZ];
1053   int i;
1054   char *p;
1055   int done;
1056   /* Chop the transfer down if necessary */
1057
1058   done = 0;
1059   while (done < len)
1060     {
1061       int todo = len - done;
1062       int cando = PBUFSIZ /2 - 32; /* number of bytes that will fit. */
1063       if (todo > cando)
1064         todo = cando;
1065
1066       /* FIXME-32x64: Need a version of print_address_numeric which puts the
1067          result in a buffer like sprintf.  */
1068       sprintf (buf, "M%lx,%x:", (unsigned long) memaddr + done, todo);
1069
1070       /* We send target system values byte by byte, in increasing byte addresses,
1071          each byte encoded as two hex characters.  */
1072
1073       p = buf + strlen (buf);
1074       for (i = 0; i < todo; i++)
1075         {
1076           *p++ = tohex ((myaddr[i + done] >> 4) & 0xf);
1077           *p++ = tohex (myaddr[i + done] & 0xf);
1078         }
1079       *p = '\0';
1080
1081       putpkt (buf);
1082       getpkt (buf, 0);
1083
1084       if (buf[0] == 'E')
1085         {
1086           /* There is no correspondance between what the remote protocol uses
1087              for errors and errno codes.  We would like a cleaner way of
1088              representing errors (big enough to include errno codes, bfd_error
1089              codes, and others).  But for now just return EIO.  */
1090           errno = EIO;
1091           return 0;
1092         }
1093       done += todo;
1094     }
1095   return len;
1096 }
1097
1098 /* Read memory data directly from the remote machine.
1099    This does not use the data cache; the data cache uses this.
1100    MEMADDR is the address in the remote memory space.
1101    MYADDR is the address of the buffer in our space.
1102    LEN is the number of bytes.
1103
1104    Returns number of bytes transferred, or 0 for error.  */
1105
1106 static int
1107 remote_read_bytes (memaddr, myaddr, len)
1108      CORE_ADDR memaddr;
1109      char *myaddr;
1110      int len;
1111 {
1112   char buf[PBUFSIZ];
1113   int i;
1114   char *p;
1115
1116   if (len > PBUFSIZ / 2 - 1)
1117     abort ();
1118
1119   /* FIXME-32x64: Need a version of print_address_numeric which puts the
1120      result in a buffer like sprintf.  */
1121   sprintf (buf, "m%lx,%x", (unsigned long) memaddr, len);
1122   putpkt (buf);
1123   getpkt (buf, 0);
1124
1125   if (buf[0] == 'E')
1126     {
1127       /* There is no correspondance between what the remote protocol uses
1128          for errors and errno codes.  We would like a cleaner way of
1129          representing errors (big enough to include errno codes, bfd_error
1130          codes, and others).  But for now just return EIO.  */
1131       errno = EIO;
1132       return 0;
1133     }
1134
1135   /* Reply describes memory byte by byte,
1136      each byte encoded as two hex characters.  */
1137
1138   p = buf;
1139   for (i = 0; i < len; i++)
1140     {
1141       if (p[0] == 0 || p[1] == 0)
1142         /* Reply is short.  This means that we were able to read only part
1143            of what we wanted to.  */
1144         break;
1145       myaddr[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
1146       p += 2;
1147     }
1148   return i;
1149 }
1150 \f
1151 /* Read or write LEN bytes from inferior memory at MEMADDR, transferring
1152    to or from debugger address MYADDR.  Write to inferior if SHOULD_WRITE is
1153    nonzero.  Returns length of data written or read; 0 for error.  */
1154
1155 /* ARGSUSED */
1156 static int
1157 remote_xfer_memory(memaddr, myaddr, len, should_write, target)
1158      CORE_ADDR memaddr;
1159      char *myaddr;
1160      int len;
1161      int should_write;
1162      struct target_ops *target;                 /* ignored */
1163 {
1164   return dcache_xfer_memory (remote_dcache, memaddr, myaddr, len, should_write);
1165 }
1166
1167    
1168 #if 0
1169 /* Enable after 4.12.  */
1170
1171 void
1172 remote_search (len, data, mask, startaddr, increment, lorange, hirange
1173                addr_found, data_found)
1174      int len;
1175      char *data;
1176      char *mask;
1177      CORE_ADDR startaddr;
1178      int increment;
1179      CORE_ADDR lorange;
1180      CORE_ADDR hirange;
1181      CORE_ADDR *addr_found;
1182      char *data_found;
1183 {
1184   if (increment == -4 && len == 4)
1185     {
1186       long mask_long, data_long;
1187       long data_found_long;
1188       CORE_ADDR addr_we_found;
1189       char buf[PBUFSIZ];
1190       long returned_long[2];
1191       char *p;
1192
1193       mask_long = extract_unsigned_integer (mask, len);
1194       data_long = extract_unsigned_integer (data, len);
1195       sprintf (buf, "t%x:%x,%x", startaddr, data_long, mask_long);
1196       putpkt (buf);
1197       getpkt (buf, 0);
1198       if (buf[0] == '\0')
1199         {
1200           /* The stub doesn't support the 't' request.  We might want to
1201              remember this fact, but on the other hand the stub could be
1202              switched on us.  Maybe we should remember it only until
1203              the next "target remote".  */
1204           generic_search (len, data, mask, startaddr, increment, lorange,
1205                           hirange, addr_found, data_found);
1206           return;
1207         }
1208
1209       if (buf[0] == 'E')
1210         /* There is no correspondance between what the remote protocol uses
1211            for errors and errno codes.  We would like a cleaner way of
1212            representing errors (big enough to include errno codes, bfd_error
1213            codes, and others).  But for now just use EIO.  */
1214         memory_error (EIO, startaddr);
1215       p = buf;
1216       addr_we_found = 0;
1217       while (*p != '\0' && *p != ',')
1218         addr_we_found = (addr_we_found << 4) + fromhex (*p++);
1219       if (*p == '\0')
1220         error ("Protocol error: short return for search");
1221
1222       data_found_long = 0;
1223       while (*p != '\0' && *p != ',')
1224         data_found_long = (data_found_long << 4) + fromhex (*p++);
1225       /* Ignore anything after this comma, for future extensions.  */
1226
1227       if (addr_we_found < lorange || addr_we_found >= hirange)
1228         {
1229           *addr_found = 0;
1230           return;
1231         }
1232
1233       *addr_found = addr_we_found;
1234       *data_found = store_unsigned_integer (data_we_found, len);
1235       return;
1236     }
1237   generic_search (len, data, mask, startaddr, increment, lorange,
1238                   hirange, addr_found, data_found);
1239 }
1240 #endif /* 0 */
1241 \f
1242 static void
1243 remote_files_info (ignore)
1244      struct target_ops *ignore;
1245 {
1246   puts_filtered ("Debugging a target over a serial line.\n");
1247 }
1248 \f
1249 /* Stuff for dealing with the packets which are part of this protocol.
1250    See comment at top of file for details.  */
1251
1252 /* Read a single character from the remote end, masking it down to 7 bits. */
1253
1254 static int
1255 readchar (timeout)
1256      int timeout;
1257 {
1258   int ch;
1259
1260   ch = SERIAL_READCHAR (remote_desc, timeout);
1261
1262   switch (ch)
1263     {
1264     case SERIAL_EOF:
1265       error ("Remote connection closed");
1266     case SERIAL_ERROR:
1267       perror_with_name ("Remote communication error");
1268     case SERIAL_TIMEOUT:
1269       return ch;
1270     default:
1271       return ch & 0x7f;
1272     }
1273 }
1274
1275 /* Send the command in BUF to the remote machine,
1276    and read the reply into BUF.
1277    Report an error if we get an error reply.  */
1278
1279 static void
1280 remote_send (buf)
1281      char *buf;
1282 {
1283   putpkt (buf);
1284   getpkt (buf, 0);
1285
1286   if (buf[0] == 'E')
1287     error ("Remote failure reply: %s", buf);
1288 }
1289
1290 /* Send a packet to the remote machine, with error checking.
1291    The data of the packet is in BUF.  */
1292
1293 static int
1294 putpkt (buf)
1295      char *buf;
1296 {
1297   int i;
1298   unsigned char csum = 0;
1299   char buf2[PBUFSIZ];
1300   int cnt = strlen (buf);
1301   int ch;
1302   int tcount = 0;
1303   char *p;
1304
1305   /* Copy the packet into buffer BUF2, encapsulating it
1306      and giving it a checksum.  */
1307
1308   if (cnt > sizeof(buf2) - 5)           /* Prosanity check */
1309     abort();
1310
1311   p = buf2;
1312   *p++ = '$';
1313
1314   for (i = 0; i < cnt; i++)
1315     {
1316       csum += buf[i];
1317       *p++ = buf[i];
1318     }
1319   *p++ = '#';
1320   *p++ = tohex ((csum >> 4) & 0xf);
1321   *p++ = tohex (csum & 0xf);
1322
1323   /* Send it over and over until we get a positive ack.  */
1324
1325   while (1)
1326     {
1327       int started_error_output = 0;
1328
1329       if (remote_debug)
1330         {
1331           *p = '\0';
1332           printf_unfiltered ("Sending packet: %s...", buf2);
1333           gdb_flush(gdb_stdout);
1334         }
1335       if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
1336         perror_with_name ("putpkt: write failed");
1337
1338       /* read until either a timeout occurs (-2) or '+' is read */
1339       while (1)
1340         {
1341           ch = readchar (remote_timeout);
1342
1343           if (remote_debug)
1344             {
1345               switch (ch)
1346                 {
1347                 case '+':
1348                 case SERIAL_TIMEOUT:
1349                 case '$':
1350                   if (started_error_output)
1351                     {
1352                       putchar_unfiltered ('\n');
1353                       started_error_output = 0;
1354                     }
1355                 }
1356             }
1357
1358           switch (ch)
1359             {
1360             case '+':
1361               if (remote_debug)
1362                 printf_unfiltered("Ack\n");
1363               return 1;
1364             case SERIAL_TIMEOUT:
1365               tcount ++;
1366               if (tcount > 3)
1367                 return 0;
1368               break;            /* Retransmit buffer */
1369             case '$':
1370               {
1371                 char junkbuf[PBUFSIZ];
1372
1373               /* It's probably an old response, and we're out of sync.  Just
1374                  gobble up the packet and ignore it.  */
1375                 getpkt (junkbuf, 0);
1376                 continue;               /* Now, go look for + */
1377               }
1378             default:
1379               if (remote_debug)
1380                 {
1381                   if (!started_error_output)
1382                     {
1383                       started_error_output = 1;
1384                       printf_unfiltered ("putpkt: Junk: ");
1385                     }
1386                   putchar_unfiltered (ch & 0177);
1387                 }
1388               continue;
1389             }
1390           break;                /* Here to retransmit */
1391         }
1392
1393 #if 0
1394       /* This is wrong.  If doing a long backtrace, the user should be
1395          able to get out next time we call QUIT, without anything as violent
1396          as interrupt_query.  If we want to provide a way out of here
1397          without getting to the next QUIT, it should be based on hitting
1398          ^C twice as in remote_wait.  */
1399       if (quit_flag)
1400         {
1401           quit_flag = 0;
1402           interrupt_query ();
1403         }
1404 #endif
1405     }
1406 }
1407
1408 /* Come here after finding the start of the frame.  Collect the rest into BUF,
1409    verifying the checksum, length, and handling run-length compression.
1410    Returns 0 on any error, 1 on success.  */
1411
1412 static int
1413 read_frame (buf)
1414      char *buf;
1415 {
1416   unsigned char csum;
1417   char *bp;
1418   int c;
1419
1420   csum = 0;
1421   bp = buf;
1422
1423   while (1)
1424     {
1425       c = readchar (remote_timeout);
1426
1427       switch (c)
1428         {
1429         case SERIAL_TIMEOUT:
1430           if (remote_debug)
1431             puts_filtered ("Timeout in mid-packet, retrying\n");
1432           return 0;
1433         case '$':
1434           if (remote_debug)
1435             puts_filtered ("Saw new packet start in middle of old one\n");
1436           return 0;             /* Start a new packet, count retries */
1437         case '#':
1438           {
1439             unsigned char pktcsum;
1440
1441             *bp = '\000';
1442
1443             pktcsum = fromhex (readchar (remote_timeout)) << 4;
1444             pktcsum |= fromhex (readchar (remote_timeout));
1445
1446             if (csum == pktcsum)
1447               return 1;
1448
1449             if (remote_debug) 
1450               {
1451                 printf_filtered ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
1452                                  pktcsum, csum);
1453                 puts_filtered (buf);
1454                 puts_filtered ("\n");
1455               }
1456             return 0;
1457           }
1458         case '*':               /* Run length encoding */
1459           csum += c;
1460           c = readchar (remote_timeout);
1461           csum += c;
1462           c = c - ' ' + 3;      /* Compute repeat count */
1463
1464
1465           if (c > 0 && c < 255 && bp + c - 1 < buf + PBUFSIZ - 1)
1466             {
1467               memset (bp, *(bp - 1), c);
1468               bp += c;
1469               continue;
1470             }
1471
1472           *bp = '\0';
1473           printf_filtered ("Repeat count %d too large for buffer: ", c);
1474           puts_filtered (buf);
1475           puts_filtered ("\n");
1476           return 0;
1477
1478         default:
1479           if (bp < buf + PBUFSIZ - 1)
1480             {
1481               *bp++ = c;
1482               csum += c;
1483               continue;
1484             }
1485
1486           *bp = '\0';
1487           puts_filtered ("Remote packet too long: ");
1488           puts_filtered (buf);
1489           puts_filtered ("\n");
1490
1491           return 0;
1492         }
1493     }
1494 }
1495
1496 /* Read a packet from the remote machine, with error checking,
1497    and store it in BUF.  BUF is expected to be of size PBUFSIZ.
1498    If FOREVER, wait forever rather than timing out; this is used
1499    while the target is executing user code.  */
1500
1501 static void
1502 getpkt (buf, forever)
1503      char *buf;
1504      int forever;
1505 {
1506   int c;
1507   int tries;
1508   int timeout;
1509   int val;
1510
1511   strcpy (buf,"timeout");
1512
1513   if (forever)
1514     {
1515 #ifdef MAINTENANCE_CMDS
1516       timeout = watchdog > 0 ? watchdog : -1;
1517 #else
1518       timeout = -1;
1519 #endif
1520     }
1521
1522   else
1523     timeout = remote_timeout;
1524
1525 #define MAX_TRIES 3
1526
1527   for (tries = 1; tries <= MAX_TRIES; tries++)
1528     {
1529       /* This can loop forever if the remote side sends us characters
1530          continuously, but if it pauses, we'll get a zero from readchar
1531          because of timeout.  Then we'll count that as a retry.  */
1532
1533       /* Note that we will only wait forever prior to the start of a packet.
1534          After that, we expect characters to arrive at a brisk pace.  They
1535          should show up within remote_timeout intervals.  */
1536
1537       do
1538         {
1539           c = readchar (timeout);
1540
1541           if (c == SERIAL_TIMEOUT)
1542             {
1543 #ifdef MAINTENANCE_CMDS
1544               if (forever)      /* Watchdog went off.  Kill the target. */
1545                 {
1546                   target_mourn_inferior ();
1547                   error ("Watchdog has expired.  Target detached.\n");
1548                 }
1549 #endif
1550               if (remote_debug)
1551                 puts_filtered ("Timed out.\n");
1552               goto retry;
1553             }
1554         }
1555       while (c != '$');
1556
1557       /* We've found the start of a packet, now collect the data.  */
1558
1559       val = read_frame (buf);
1560
1561       if (val == 1)
1562         {
1563           if (remote_debug)
1564             fprintf_unfiltered (gdb_stderr, "Packet received: %s\n", buf);
1565           SERIAL_WRITE (remote_desc, "+", 1);
1566           return;
1567         }
1568
1569       /* Try the whole thing again.  */
1570     retry:
1571       SERIAL_WRITE (remote_desc, "-", 1);
1572     }
1573
1574   /* We have tried hard enough, and just can't receive the packet.  Give up. */
1575
1576   printf_unfiltered ("Ignoring packet error, continuing...\n");
1577   SERIAL_WRITE (remote_desc, "+", 1);
1578 }
1579 \f
1580 static void
1581 remote_kill ()
1582 {
1583   /* For some mysterious reason, wait_for_inferior calls kill instead of
1584      mourn after it gets TARGET_WAITKIND_SIGNALLED.  Work around it.  */
1585   if (kill_kludge)
1586     {
1587       kill_kludge = 0;
1588       target_mourn_inferior ();
1589       return;
1590     }
1591
1592   /* Use catch_errors so the user can quit from gdb even when we aren't on
1593      speaking terms with the remote system.  */
1594   catch_errors (putpkt, "k", "", RETURN_MASK_ERROR);
1595
1596   /* Don't wait for it to die.  I'm not really sure it matters whether
1597      we do or not.  For the existing stubs, kill is a noop.  */
1598   target_mourn_inferior ();
1599 }
1600
1601 static void
1602 remote_mourn ()
1603 {
1604   remote_mourn_1 (&remote_ops);
1605 }
1606
1607 static void
1608 extended_remote_mourn ()
1609 {
1610   /* We do _not_ want to mourn the target like this; this will
1611      remove the extended remote target  from the target stack,
1612      and the next time the user says "run" it'll fail. 
1613
1614      FIXME: What is the right thing to do here?  */
1615 #if 0
1616   remote_mourn_1 (&extended_remote_ops);
1617 #endif
1618 }
1619
1620 /* Worker function for remote_mourn.  */
1621 static void
1622 remote_mourn_1 (target)
1623      struct target_ops *target;
1624 {
1625   unpush_target (target);
1626   generic_mourn_inferior ();
1627 }
1628
1629 /* In the extended protocol we want to be able to do things like
1630    "run" and have them basically work as expected.  So we need
1631    a special create_inferior function. 
1632
1633    FIXME: One day add support for changing the exec file
1634    we're debugging, arguments and an environment.  */
1635
1636 static void
1637 extended_remote_create_inferior (exec_file, args, env)
1638      char *exec_file;
1639      char *args;
1640      char **env;
1641 {
1642   /* Rip out the breakpoints; we'll reinsert them after restarting
1643      the remote server.  */
1644   remove_breakpoints ();
1645
1646   /* Now restart the remote server.  */
1647   extended_remote_restart ();
1648
1649   /* Now put the breakpoints back in.  This way we're safe if the
1650      restart function works via a unix fork on the remote side.  */
1651   insert_breakpoints ();
1652
1653   /* Clean up from the last time we were running.  */
1654   clear_proceed_status ();
1655
1656   /* Let the remote process run.  */
1657   proceed (-1, TARGET_SIGNAL_0, 0);
1658 }
1659
1660 \f
1661 #ifdef REMOTE_BREAKPOINT
1662
1663 /* On some machines, e.g. 68k, we may use a different breakpoint instruction
1664    than other targets.  */
1665 static unsigned char break_insn[] = REMOTE_BREAKPOINT;
1666
1667 #else /* No REMOTE_BREAKPOINT.  */
1668
1669 /* Same old breakpoint instruction.  This code does nothing different
1670    than mem-break.c.  */
1671 static unsigned char break_insn[] = BREAKPOINT;
1672
1673 #endif /* No REMOTE_BREAKPOINT.  */
1674
1675 /* Insert a breakpoint on targets that don't have any better breakpoint
1676    support.  We read the contents of the target location and stash it,
1677    then overwrite it with a breakpoint instruction.  ADDR is the target
1678    location in the target machine.  CONTENTS_CACHE is a pointer to 
1679    memory allocated for saving the target contents.  It is guaranteed
1680    by the caller to be long enough to save sizeof BREAKPOINT bytes (this
1681    is accomplished via BREAKPOINT_MAX).  */
1682
1683 static int
1684 remote_insert_breakpoint (addr, contents_cache)
1685      CORE_ADDR addr;
1686      char *contents_cache;
1687 {
1688   int val;
1689
1690   val = target_read_memory (addr, contents_cache, sizeof break_insn);
1691
1692   if (val == 0)
1693     val = target_write_memory (addr, (char *)break_insn, sizeof break_insn);
1694
1695   return val;
1696 }
1697
1698 static int
1699 remote_remove_breakpoint (addr, contents_cache)
1700      CORE_ADDR addr;
1701      char *contents_cache;
1702 {
1703   return target_write_memory (addr, contents_cache, sizeof break_insn);
1704 }
1705 \f
1706 /* Define the target subroutine names */
1707
1708 struct target_ops remote_ops = {
1709   "remote",                     /* to_shortname */
1710   "Remote serial target in gdb-specific protocol",      /* to_longname */
1711   "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
1712 Specify the serial device it is connected to (e.g. /dev/ttya).",  /* to_doc */
1713   remote_open,                  /* to_open */
1714   remote_close,                 /* to_close */
1715   NULL,                         /* to_attach */
1716   remote_detach,                /* to_detach */
1717   remote_resume,                /* to_resume */
1718   remote_wait,                  /* to_wait */
1719   remote_fetch_registers,       /* to_fetch_registers */
1720   remote_store_registers,       /* to_store_registers */
1721   remote_prepare_to_store,      /* to_prepare_to_store */
1722   remote_xfer_memory,           /* to_xfer_memory */
1723   remote_files_info,            /* to_files_info */
1724
1725   remote_insert_breakpoint,     /* to_insert_breakpoint */
1726   remote_remove_breakpoint,     /* to_remove_breakpoint */
1727
1728   NULL,                         /* to_terminal_init */
1729   NULL,                         /* to_terminal_inferior */
1730   NULL,                         /* to_terminal_ours_for_output */
1731   NULL,                         /* to_terminal_ours */
1732   NULL,                         /* to_terminal_info */
1733   remote_kill,                  /* to_kill */
1734   generic_load,                 /* to_load */
1735   NULL,                         /* to_lookup_symbol */
1736   NULL,                         /* to_create_inferior */
1737   remote_mourn,                 /* to_mourn_inferior */
1738   0,                            /* to_can_run */
1739   0,                            /* to_notice_signals */
1740   remote_thread_alive,          /* to_thread_alive */
1741   0,                            /* to_stop */
1742   process_stratum,              /* to_stratum */
1743   NULL,                         /* to_next */
1744   1,                            /* to_has_all_memory */
1745   1,                            /* to_has_memory */
1746   1,                            /* to_has_stack */
1747   1,                            /* to_has_registers */
1748   1,                            /* to_has_execution */
1749   NULL,                         /* sections */
1750   NULL,                         /* sections_end */
1751   OPS_MAGIC                     /* to_magic */
1752 };
1753
1754 struct target_ops extended_remote_ops = {
1755   "extended-remote",                    /* to_shortname */
1756   "Extended remote serial target in gdb-specific protocol",/* to_longname */
1757   "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
1758 Specify the serial device it is connected to (e.g. /dev/ttya).",  /* to_doc */
1759   extended_remote_open,                 /* to_open */
1760   remote_close,                 /* to_close */
1761   NULL,                         /* to_attach */
1762   remote_detach,                /* to_detach */
1763   remote_resume,                /* to_resume */
1764   remote_wait,                  /* to_wait */
1765   remote_fetch_registers,       /* to_fetch_registers */
1766   remote_store_registers,       /* to_store_registers */
1767   remote_prepare_to_store,      /* to_prepare_to_store */
1768   remote_xfer_memory,           /* to_xfer_memory */
1769   remote_files_info,            /* to_files_info */
1770
1771   remote_insert_breakpoint,     /* to_insert_breakpoint */
1772   remote_remove_breakpoint,     /* to_remove_breakpoint */
1773
1774   NULL,                         /* to_terminal_init */
1775   NULL,                         /* to_terminal_inferior */
1776   NULL,                         /* to_terminal_ours_for_output */
1777   NULL,                         /* to_terminal_ours */
1778   NULL,                         /* to_terminal_info */
1779   remote_kill,                  /* to_kill */
1780   generic_load,                 /* to_load */
1781   NULL,                         /* to_lookup_symbol */
1782   extended_remote_create_inferior,/* to_create_inferior */
1783   extended_remote_mourn,        /* to_mourn_inferior */
1784   0,                            /* to_can_run */
1785   0,                            /* to_notice_signals */
1786   remote_thread_alive,          /* to_thread_alive */
1787   0,                            /* to_stop */
1788   process_stratum,              /* to_stratum */
1789   NULL,                         /* to_next */
1790   1,                            /* to_has_all_memory */
1791   1,                            /* to_has_memory */
1792   1,                            /* to_has_stack */
1793   1,                            /* to_has_registers */
1794   1,                            /* to_has_execution */
1795   NULL,                         /* sections */
1796   NULL,                         /* sections_end */
1797   OPS_MAGIC                     /* to_magic */
1798 };
1799
1800 void
1801 _initialize_remote ()
1802 {
1803   add_target (&remote_ops);
1804   add_target (&extended_remote_ops);
1805 }
This page took 0.16445 seconds and 4 git commands to generate.