1 /* Remote target communications for serial-line targets in custom GDB protocol
2 Copyright 1988, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
4 This file is part of GDB.
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.
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.
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. */
20 /* Remote communication protocol.
22 A debug packet whose contents are <data>
23 is encapsulated for transmission in the form:
25 $ <data> # CSUM1 CSUM2
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.
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.
35 Receiver responds with:
37 + - if CSUM is correct and ready for next packet
38 - - if CSUM is incorrect
41 All values are encoded in ascii hex digits.
46 reply XX....X Each byte of register data
47 is described by two hex digits.
48 Registers are in the internal order
49 for GDB, and the bytes in a register
50 are in the same order the machine uses.
53 write regs GXX..XX Each byte of register data
54 is described by two hex digits.
58 write reg Pn...=r... Write register n... with value r...,
59 which contains two hex digits for each
60 byte in the register (target byte
64 (not supported by all stubs).
66 read mem mAA..AA,LLLL AA..AA is address, LLLL is length.
67 reply XX..XX XX..XX is mem contents
68 Can be fewer bytes than requested
69 if able to read only part of the data.
72 write mem MAA..AA,LLLL:XX..XX
74 LLLL is number of bytes,
77 ENN for an error (this includes the case
78 where only part of the data was
81 cont cAA..AA AA..AA is address to resume
83 resume at same address.
85 step sAA..AA AA..AA is address to resume
87 resume at same address.
89 last signal ? Reply the current reason for stopping.
90 This is the same reply as is generated
91 for step or cont : SAA where AA is the
94 There is no immediate reply to step or cont.
95 The reply comes when the machine stops.
96 It is SAA AA is the "signal number"
98 or... TAAn...:r...;n:r...;n...:r...;
100 n... = register number
101 r... = register contents
102 or... WAA The process exited, and AA is
103 the exit status. This is only
104 applicable for certains sorts of
108 toggle debug d toggle debug flag (see 386 & 68k stubs)
109 reset r reset -- see sparc stub.
110 reserved <other> On other requests, the stub should
111 ignore the request and send an empty
112 response ($#<checksum>). This way
113 we can extend the protocol and GDB
114 can tell whether the stub it is
115 talking to uses the old or the new.
116 search tAA:PP,MM Search backwards starting at address
117 AA for a match with pattern PP and
118 mask MM. PP and MM are 4 bytes.
119 Not supported by all stubs.
121 general query qXXXX Request info about XXXX.
122 general set QXXXX=yyyy Set value of XXXX to yyyy.
123 query sect offs qOffsets Get section offsets. Reply is
124 Text=xxx;Data=yyy;Bss=zzz
125 console output Otext Send text to stdout. Only comes from
128 Responses can be run-length encoded to save space. A '*' means that
129 the next character is an ASCII encoding giving a repeat count which
130 stands for that many repititions of the character preceding the '*'.
131 The encoding is n+29, yielding a printable character where n >=3
132 (which is where rle starts to win). Don't use an n > 126.
135 "0* " means the same as "0000". */
138 #include "gdb_string.h"
141 #include "inferior.h"
146 #include "terminal.h"
148 #include "objfiles.h"
149 #include "gdb-stabs.h"
150 #include "remote-utils.h"
154 #include <sys/types.h>
160 /* Prototypes for local functions */
163 remote_remove_breakpoint PARAMS ((CORE_ADDR, char *));
166 remote_insert_breakpoint PARAMS ((CORE_ADDR, char *));
169 remote_mourn PARAMS ((void));
172 remote_kill PARAMS ((void));
175 read_frame PARAMS ((char *));
178 boot_board PARAMS ((char *, int));
181 remote_write_bytes PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
184 remote_read_bytes PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
187 remote_files_info PARAMS ((struct target_ops *ignore));
190 remote_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len,
191 int should_write, struct target_ops *target));
194 remote_prepare_to_store PARAMS ((void));
197 remote_fetch_registers PARAMS ((int regno));
200 remote_resume PARAMS ((int pid, int step, enum target_signal siggnal));
203 remote_start_remote PARAMS ((char *dummy));
206 remote_open PARAMS ((char *name, int from_tty));
209 remote_close PARAMS ((int quitting));
212 remote_store_registers PARAMS ((int regno));
215 getpkt PARAMS ((char *buf, int forever));
218 putpkt PARAMS ((char *buf));
221 remote_send PARAMS ((char *buf));
224 readchar PARAMS ((int timeout));
227 remote_wait PARAMS ((int pid, struct target_waitstatus *status));
230 tohex PARAMS ((int nib));
233 fromhex PARAMS ((int a));
236 remote_detach PARAMS ((char *args, int from_tty));
239 remote_interrupt PARAMS ((int signo));
242 remote_interrupt_twice PARAMS ((int signo));
245 interrupt_query PARAMS ((void));
248 hppro_load PARAMS ((char *name, int from_tty));
250 extern struct target_ops remote_ops; /* Forward decl */
252 /* This was 5 seconds, which is a long time to sit and wait.
253 Unless this is going though some terminal server or multiplexer or
254 other form of hairy serial connection, I would think 2 seconds would
256 static int remote_timeout = 2;
258 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
259 remote_open knows that we don't have a file open when the program
261 extern serial_t remote_desc;
263 /* Having this larger than 400 causes us to be incompatible with m68k-stub.c
264 and i386-stub.c. Normally, no one would notice because it only matters
265 for writing large chunks of memory (e.g. in downloads). Also, this needs
266 to be more than 400 if required to hold the registers (see below, where
267 we round it up based on REGISTER_BYTES). */
270 /* Maximum number of bytes to read/write at once. The value here
271 is chosen to fill up a packet (the headers account for the 32). */
272 #define MAXBUFBYTES ((PBUFSIZ-32)/2)
274 /* Round up PBUFSIZ to hold all the registers, at least. */
275 /* The blank line after the #if seems to be required to work around a
276 bug in HP's PA compiler. */
277 #if REGISTER_BYTES > MAXBUFBYTES
280 #define PBUFSIZ (REGISTER_BYTES * 2 + 32)
283 /* Should we try the 'P' request? If this is set to one when the stub
284 doesn't support 'P', the only consequence is some unnecessary traffic. */
285 static int stub_supports_P = 1;
287 /* sets the download protocol, choices are srec, generic, boot */
289 static char *loadtype_str;
290 static void set_loadtype_command
291 PARAMS ((char *, int, struct cmd_list_element *));
294 hppro_load (file, from_tty)
298 puts ("Loading... HA!");
302 /* Clean up connection to a remote debugger. */
306 remote_close (quitting)
310 SERIAL_CLOSE (remote_desc);
314 /* Query the remote side for the text, data and bss offsets. */
321 unsigned char buf[PBUFSIZ];
323 CORE_ADDR text_addr, data_addr, bss_addr;
324 struct section_offsets *offs;
330 if (buf[0] == '\000')
331 return; /* Return silently. Stub doesn't support this
335 warning ("Remote failure reply: %s", buf);
339 nvals = sscanf (buf, "Text=%lx;Data=%lx;Bss=%lx", &text_addr, &data_addr,
342 error ("Malformed response to offset query, %s", buf);
344 if (symfile_objfile == NULL)
347 offs = (struct section_offsets *) alloca (sizeof (struct section_offsets)
348 + symfile_objfile->num_sections
349 * sizeof (offs->offsets));
350 memcpy (offs, symfile_objfile->section_offsets,
351 sizeof (struct section_offsets)
352 + symfile_objfile->num_sections
353 * sizeof (offs->offsets));
355 /* FIXME: This code assumes gdb-stabs.h is being used; it's broken
356 for xcoff, dwarf, sdb-coff, etc. But there is no simple
357 canonical representation for this stuff. (Just what does "text"
358 as seen by the stub mean, anyway? I think it means all sections
359 with SEC_CODE set, but we currently have no way to deal with that). */
361 ANOFFSET (offs, SECT_OFF_TEXT) = text_addr;
363 /* This is a temporary kludge to force data and bss to use the same offsets
364 because that's what nlmconv does now. The real solution requires changes
365 to the stub and remote.c that I don't have time to do right now. */
367 ANOFFSET (offs, SECT_OFF_DATA) = data_addr;
368 ANOFFSET (offs, SECT_OFF_BSS) = data_addr;
370 objfile_relocate (symfile_objfile, offs);
378 boot_board (dummy1, dummy2)
386 /* See if we can connect to the boot ROM command line */
389 SERIAL_WRITE (remote_desc, "\r\n", 2);
391 if ((sr_get_debug() > 2) && (isascii(c)))
393 if (c == SERIAL_TIMEOUT) {
395 puts_filtered ("Timed out.\n");
399 if (sr_get_debug() > 2)
400 puts ("Got ACK from stub");
404 if (sr_get_debug() > 2)
405 puts ("Got prompt from ROM monitor");
412 /* Stub for catch_errors. */
414 remote_start_remote (dummy)
417 immediate_quit = 1; /* Allow user to interrupt it */
419 /* Ack any packet which the remote side has already sent. */
422 puts ("Trying a '+' to ACK the target.");
424 SERIAL_WRITE (remote_desc, "+", 1);
429 get_offsets (); /* Get text, data & bss offsets */
432 putpkt ("?"); /* initiate a query from remote machine */
435 start_remote (); /* Initialize gdb process mechanisms */
440 /* Open a connection to a remote debugger.
441 NAME is the filename used for communication. */
443 static DCACHE *remote_dcache;
446 remote_open (name, from_tty)
452 "To open a remote debug connection, you need to specify what serial\n\
453 device is attached to the remote system (e.g. /dev/ttya).");
455 target_preopen (from_tty);
457 unpush_target (&remote_ops);
459 remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
461 remote_desc = SERIAL_OPEN (name);
463 perror_with_name (name);
467 if (SERIAL_SETBAUDRATE (remote_desc, baud_rate))
469 SERIAL_CLOSE (remote_desc);
470 perror_with_name (name);
474 SERIAL_RAW (remote_desc);
476 /* If there is something sitting in the buffer we might take it as a
477 response to a command, which would be bad. */
478 SERIAL_FLUSH_INPUT (remote_desc);
482 puts_filtered ("Remote debugging using ");
483 puts_filtered (name);
484 puts_filtered ("\n");
486 push_target (&remote_ops); /* Switch to using remote target now */
488 /* Start out by trying the 'P' request to set registers. We set this each
489 time that we open a new target so that if the user switches from one
490 stub to another, we can (if the target is closed and reopened) cope. */
493 /* Without this, some commands which require an active target (such as kill)
494 won't work. This variable serves (at least) double duty as both the pid
495 of the target process (if it has such), and as a flag indicating that a
496 target is active. These functions should be split out into seperate
497 variables, especially since GDB will someday have a notion of debugging
498 several processes. */
500 inferior_pid = 42000;
502 /* Start the remote connection; if error (0), discard this target.
503 In particular, if the user quits, be sure to discard it
504 (we'd be in an inconsistent state otherwise). */
505 if (!catch_errors (remote_start_remote, (char *)0,
506 "Couldn't establish connection to remote target\n", RETURN_MASK_ALL))
511 takes a program previously attached to and detaches it.
512 We better not have left any breakpoints
513 in the program or it'll die when it hits one.
514 Close the open connection to the remote debugger.
515 Use this when you want to detach and do something else
519 remote_detach (args, from_tty)
524 error ("Argument given to \"detach\" when remotely debugging.");
528 puts_filtered ("Ending remote debugging.\n");
531 /* Convert hex digit A to a number. */
537 if (a >= '0' && a <= '9')
539 else if (a >= 'a' && a <= 'f')
542 error ("Reply contains invalid hex digit");
545 /* Convert number NIB to a hex digit. */
557 /* Tell the remote machine to resume. */
560 remote_resume (pid, step, siggnal)
562 enum target_signal siggnal;
568 target_terminal_ours_for_output ();
570 ("Can't send signals to a remote system. %s not sent.\n",
571 target_signal_to_name (siggnal)); target_terminal_inferior ();
574 dcache_flush (remote_dcache);
576 strcpy (buf, step ? "s": "c");
581 /* Send ^C to target to halt it. Target will respond, and send us a
585 remote_interrupt (signo)
588 /* If this doesn't work, try more severe steps. */
589 signal (signo, remote_interrupt_twice);
592 printf_unfiltered ("remote_interrupt called\n");
594 SERIAL_WRITE (remote_desc, "\003", 1); /* Send a ^C */
597 static void (*ofunc)();
599 /* The user typed ^C twice. */
601 remote_interrupt_twice (signo)
604 signal (signo, ofunc);
608 signal (signo, remote_interrupt);
611 /* Ask the user what to do when an interrupt is received. */
616 target_terminal_ours ();
618 if (query ("Interrupted while waiting for the program.\n\
619 Give up (and stop debugging it)? "))
621 target_mourn_inferior ();
622 return_to_top_level (RETURN_QUIT);
625 target_terminal_inferior ();
628 /* Wait until the remote machine stops, then return,
629 storing status in STATUS just as `wait' would.
630 Returns "pid" (though it's not clear what, if anything, that
631 means in the case of this target). */
634 remote_wait (pid, status)
636 struct target_waitstatus *status;
638 unsigned char buf[PBUFSIZ];
640 status->kind = TARGET_WAITKIND_EXITED;
641 status->value.integer = 0;
647 ofunc = (void (*)()) signal (SIGINT, remote_interrupt);
648 getpkt ((char *) buf, 1);
649 signal (SIGINT, ofunc);
653 case 'E': /* Error of some sort */
654 warning ("Remote failure reply: %s", buf);
656 case 'T': /* Status with PC, SP, FP, ... */
660 char regs[MAX_REGISTER_RAW_SIZE];
662 /* Expedited reply, containing Signal, {regno, reg} repeat */
663 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
665 n... = register number
666 r... = register contents
669 p = &buf[3]; /* after Txx */
675 regno = strtol (p, (char **) &p1, 16); /* Read the register number */
678 warning ("Remote sent badly formed register number: %s\nPacket: '%s'\n",
684 warning ("Malformed packet (missing colon): %s\nPacket: '%s'\n",
687 if (regno >= NUM_REGS)
688 warning ("Remote sent bad register number %d: %s\nPacket: '%s'\n",
691 for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
693 if (p[0] == 0 || p[1] == 0)
694 warning ("Remote reply is too short: %s", buf);
695 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
700 warning ("Remote register badly formatted: %s", buf);
702 supply_register (regno, regs);
706 case 'S': /* Old style status, just signal only */
707 status->kind = TARGET_WAITKIND_STOPPED;
708 status->value.sig = (enum target_signal)
709 (((fromhex (buf[1])) << 4) + (fromhex (buf[2])));
712 case 'W': /* Target exited */
714 /* The remote process exited. */
715 status->kind = TARGET_WAITKIND_EXITED;
716 status->value.integer = (fromhex (buf[1]) << 4) + fromhex (buf[2]);
719 case 'O': /* Console output */
720 fputs_filtered (buf + 1, gdb_stdout);
723 warning ("Invalid remote reply: %s", buf);
730 /* Number of bytes of registers this stub implements. */
731 static int register_bytes_found;
733 /* Read the remote registers into the block REGS. */
734 /* Currently we just read all the registers, so we don't use regno. */
737 remote_fetch_registers (regno)
743 char regs[REGISTER_BYTES];
748 /* Unimplemented registers read as all bits zero. */
749 memset (regs, 0, REGISTER_BYTES);
751 /* We can get out of synch in various cases. If the first character
752 in the buffer is not a hex character, assume that has happened
753 and try to fetch another packet to read. */
754 while ((buf[0] < '0' || buf[0] > '9')
755 && (buf[0] < 'a' || buf[0] > 'f'))
758 printf_unfiltered ("Bad register packet; fetching a new packet\n");
762 /* Reply describes registers byte by byte, each byte encoded as two
763 hex characters. Suck them all up, then supply them to the
764 register cacheing/storage mechanism. */
767 for (i = 0; i < REGISTER_BYTES; i++)
773 warning ("Remote reply is of odd length: %s", buf);
774 /* Don't change register_bytes_found in this case, and don't
775 print a second warning. */
778 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
782 if (i != register_bytes_found)
784 register_bytes_found = i;
785 #ifdef REGISTER_BYTES_OK
786 if (!REGISTER_BYTES_OK (i))
787 warning ("Remote reply is too short: %s", buf);
792 for (i = 0; i < NUM_REGS; i++)
793 supply_register (i, ®s[REGISTER_BYTE(i)]);
796 /* Prepare to store registers. Since we may send them all (using a
797 'G' request), we have to read out the ones we don't want to change
801 remote_prepare_to_store ()
803 /* Make sure the entire registers array is valid. */
804 read_register_bytes (0, (char *)NULL, REGISTER_BYTES);
807 /* Store register REGNO, or all registers if REGNO == -1, from the contents
808 of REGISTERS. FIXME: ignores errors. */
811 remote_store_registers (regno)
818 if (regno >= 0 && stub_supports_P)
820 /* Try storing a single register. */
823 sprintf (buf, "P%x=", regno);
824 p = buf + strlen (buf);
825 regp = ®isters[REGISTER_BYTE (regno)];
826 for (i = 0; i < REGISTER_RAW_SIZE (regno); ++i)
828 *p++ = tohex ((regp[i] >> 4) & 0xf);
829 *p++ = tohex (regp[i] & 0xf);
835 /* The stub understands the 'P' request. We are done. */
839 /* The stub does not support the 'P' request. Use 'G' instead,
840 and don't try using 'P' in the future (it will just waste our
847 /* Command describes registers byte by byte,
848 each byte encoded as two hex characters. */
851 /* remote_prepare_to_store insures that register_bytes_found gets set. */
852 for (i = 0; i < register_bytes_found; i++)
854 *p++ = tohex ((registers[i] >> 4) & 0xf);
855 *p++ = tohex (registers[i] & 0xf);
864 /* Use of the data cache is disabled because it loses for looking at
865 and changing hardware I/O ports and the like. Accepting `volatile'
866 would perhaps be one way to fix it. Another idea would be to use the
867 executable file for the text segment (for all SEC_CODE sections?
868 For all SEC_READONLY sections?). This has problems if you want to
869 actually see what the memory contains (e.g. self-modifying code,
870 clobbered memory, user downloaded the wrong thing). */
872 /* Read a word from remote address ADDR and return it.
873 This goes through the data cache. */
876 remote_fetch_word (addr)
879 return dcache_fetch (remote_dcache, addr);
882 /* Write a word WORD into remote address ADDR.
883 This goes through the data cache. */
886 remote_store_word (addr, word)
890 dcache_poke (remote_dcache, addr, word);
894 /* Write memory data directly to the remote machine.
895 This does not inform the data cache; the data cache uses this.
896 MEMADDR is the address in the remote memory space.
897 MYADDR is the address of the buffer in our space.
898 LEN is the number of bytes.
900 Returns number of bytes transferred, or 0 for error. */
903 remote_write_bytes (memaddr, myaddr, len)
912 /* FIXME-32x64: Need a version of print_address_numeric which puts the
913 result in a buffer like sprintf. */
914 sprintf (buf, "M%lx,%x:", (unsigned long) memaddr, len);
916 /* We send target system values byte by byte, in increasing byte addresses,
917 each byte encoded as two hex characters. */
919 p = buf + strlen (buf);
920 for (i = 0; i < len; i++)
922 *p++ = tohex ((myaddr[i] >> 4) & 0xf);
923 *p++ = tohex (myaddr[i] & 0xf);
932 /* There is no correspondance between what the remote protocol uses
933 for errors and errno codes. We would like a cleaner way of
934 representing errors (big enough to include errno codes, bfd_error
935 codes, and others). But for now just return EIO. */
942 /* Read memory data directly from the remote machine.
943 This does not use the data cache; the data cache uses this.
944 MEMADDR is the address in the remote memory space.
945 MYADDR is the address of the buffer in our space.
946 LEN is the number of bytes.
948 Returns number of bytes transferred, or 0 for error. */
951 remote_read_bytes (memaddr, myaddr, len)
960 if (len > PBUFSIZ / 2 - 1)
963 /* FIXME-32x64: Need a version of print_address_numeric which puts the
964 result in a buffer like sprintf. */
965 sprintf (buf, "m%lx,%x", (unsigned long) memaddr, len);
971 /* There is no correspondance between what the remote protocol uses
972 for errors and errno codes. We would like a cleaner way of
973 representing errors (big enough to include errno codes, bfd_error
974 codes, and others). But for now just return EIO. */
979 /* Reply describes memory byte by byte,
980 each byte encoded as two hex characters. */
983 for (i = 0; i < len; i++)
985 if (p[0] == 0 || p[1] == 0)
986 /* Reply is short. This means that we were able to read only part
987 of what we wanted to. */
989 myaddr[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
995 /* Read or write LEN bytes from inferior memory at MEMADDR, transferring
996 to or from debugger address MYADDR. Write to inferior if SHOULD_WRITE is
997 nonzero. Returns length of data written or read; 0 for error. */
1001 remote_xfer_memory(memaddr, myaddr, len, should_write, target)
1006 struct target_ops *target; /* ignored */
1010 int total_xferred = 0;
1014 if (len > MAXBUFBYTES)
1015 xfersize = MAXBUFBYTES;
1020 bytes_xferred = remote_write_bytes (memaddr, myaddr, xfersize);
1022 bytes_xferred = remote_read_bytes (memaddr, myaddr, xfersize);
1024 /* If we get an error, we are done xferring. */
1025 if (bytes_xferred == 0)
1028 memaddr += bytes_xferred;
1029 myaddr += bytes_xferred;
1030 len -= bytes_xferred;
1031 total_xferred += bytes_xferred;
1033 return total_xferred;
1037 /* Enable after 4.12. */
1040 remote_search (len, data, mask, startaddr, increment, lorange, hirange
1041 addr_found, data_found)
1045 CORE_ADDR startaddr;
1049 CORE_ADDR *addr_found;
1052 if (increment == -4 && len == 4)
1054 long mask_long, data_long;
1055 long data_found_long;
1056 CORE_ADDR addr_we_found;
1058 long returned_long[2];
1061 mask_long = extract_unsigned_integer (mask, len);
1062 data_long = extract_unsigned_integer (data, len);
1063 sprintf (buf, "t%x:%x,%x", startaddr, data_long, mask_long);
1068 /* The stub doesn't support the 't' request. We might want to
1069 remember this fact, but on the other hand the stub could be
1070 switched on us. Maybe we should remember it only until
1071 the next "target remote". */
1072 generic_search (len, data, mask, startaddr, increment, lorange,
1073 hirange, addr_found, data_found);
1078 /* There is no correspondance between what the remote protocol uses
1079 for errors and errno codes. We would like a cleaner way of
1080 representing errors (big enough to include errno codes, bfd_error
1081 codes, and others). But for now just use EIO. */
1082 memory_error (EIO, startaddr);
1085 while (*p != '\0' && *p != ',')
1086 addr_we_found = (addr_we_found << 4) + fromhex (*p++);
1088 error ("Protocol error: short return for search");
1090 data_found_long = 0;
1091 while (*p != '\0' && *p != ',')
1092 data_found_long = (data_found_long << 4) + fromhex (*p++);
1093 /* Ignore anything after this comma, for future extensions. */
1095 if (addr_we_found < lorange || addr_we_found >= hirange)
1101 *addr_found = addr_we_found;
1102 *data_found = store_unsigned_integer (data_we_found, len);
1105 generic_search (len, data, mask, startaddr, increment, lorange,
1106 hirange, addr_found, data_found);
1111 remote_files_info (ignore)
1112 struct target_ops *ignore;
1114 puts_filtered ("Debugging a target over a serial line.\n");
1117 /* Stuff for dealing with the packets which are part of this protocol.
1118 See comment at top of file for details. */
1120 /* Read a single character from the remote end, masking it down to 7 bits. */
1128 ch = SERIAL_READCHAR (remote_desc, timeout);
1133 error ("Remote connection closed");
1135 perror_with_name ("Remote communication error");
1136 case SERIAL_TIMEOUT:
1143 /* Send the command in BUF to the remote machine,
1144 and read the reply into BUF.
1145 Report an error if we get an error reply. */
1156 error ("Remote failure reply: %s", buf);
1159 /* Send a packet to the remote machine, with error checking.
1160 The data of the packet is in BUF. */
1166 unsigned char csum = 0;
1168 int cnt = strlen (buf);
1172 /* Copy the packet into buffer BUF2, encapsulating it
1173 and giving it a checksum. */
1175 if (cnt > sizeof(buf2) - 5) /* Prosanity check */
1181 for (i = 0; i < cnt; i++)
1187 *p++ = tohex ((csum >> 4) & 0xf);
1188 *p++ = tohex (csum & 0xf);
1190 /* Send it over and over until we get a positive ack. */
1194 int started_error_output = 0;
1199 printf_unfiltered ("Sending packet: %s...", buf2);
1200 gdb_flush(gdb_stdout);
1202 if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
1203 perror_with_name ("putpkt: write failed");
1205 /* read until either a timeout occurs (-2) or '+' is read */
1208 ch = readchar (remote_timeout);
1215 case SERIAL_TIMEOUT:
1217 if (started_error_output)
1219 putchar_unfiltered ('\n');
1220 started_error_output = 0;
1229 printf_unfiltered("Got Ack\n");
1231 case SERIAL_TIMEOUT:
1232 break; /* Retransmit buffer */
1235 unsigned char junkbuf[PBUFSIZ];
1237 /* It's probably an old response, and we're out of sync. Just
1238 gobble up the packet and ignore it. */
1239 getpkt (junkbuf, 0);
1240 continue; /* Now, go look for + */
1245 if (!started_error_output)
1247 started_error_output = 1;
1248 printf_unfiltered ("putpkt: Junk: ");
1250 putchar_unfiltered (ch & 0177);
1254 break; /* Here to retransmit */
1258 /* This is wrong. If doing a long backtrace, the user should be
1259 able to get out next time we call QUIT, without anything as violent
1260 as interrupt_query. If we want to provide a way out of here
1261 without getting to the next QUIT, it should be based on hitting
1262 ^C twice as in remote_wait. */
1272 /* Come here after finding the start of the frame. Collect the rest into BUF,
1273 verifying the checksum, length, and handling run-length compression.
1274 Returns 0 on any error, 1 on success. */
1289 c = readchar (remote_timeout);
1293 case SERIAL_TIMEOUT:
1295 puts_filtered ("Timeout in mid-packet, retrying\n");
1299 puts_filtered ("Saw new packet start in middle of old one\n");
1300 return 0; /* Start a new packet, count retries */
1303 unsigned char pktcsum;
1307 pktcsum = fromhex (readchar (remote_timeout)) << 4;
1308 pktcsum |= fromhex (readchar (remote_timeout));
1310 if (csum == pktcsum)
1313 printf_filtered ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
1315 puts_filtered (buf);
1316 puts_filtered ("\n");
1320 case '*': /* Run length encoding */
1322 c = readchar (remote_timeout);
1324 c = c - ' ' + 3; /* Compute repeat count */
1326 if (bp + c - 1 < buf + PBUFSIZ - 1)
1328 memset (bp, *(bp - 1), c);
1334 printf_filtered ("Repeat count %d too large for buffer: ", c);
1335 puts_filtered (buf);
1336 puts_filtered ("\n");
1340 if (bp < buf + PBUFSIZ - 1)
1348 puts_filtered ("Remote packet too long: ");
1349 puts_filtered (buf);
1350 puts_filtered ("\n");
1357 /* Read a packet from the remote machine, with error checking,
1358 and store it in BUF. BUF is expected to be of size PBUFSIZ.
1359 If FOREVER, wait forever rather than timing out; this is used
1360 while the target is executing user code. */
1363 getpkt (buf, forever)
1375 timeout = remote_timeout;
1377 #define MAX_TRIES 10
1379 for (tries = 1; tries <= MAX_TRIES; tries++)
1381 /* This can loop forever if the remote side sends us characters
1382 continuously, but if it pauses, we'll get a zero from readchar
1383 because of timeout. Then we'll count that as a retry. */
1385 /* Note that we will only wait forever prior to the start of a packet.
1386 After that, we expect characters to arrive at a brisk pace. They
1387 should show up within remote_timeout intervals. */
1391 c = readchar (timeout);
1393 if (c == SERIAL_TIMEOUT)
1396 puts_filtered ("Timed out.\n");
1402 /* We've found the start of a packet, now collect the data. */
1404 val = read_frame (buf);
1409 fprintf_unfiltered (gdb_stderr, "Packet received: %s\n", buf);
1410 SERIAL_WRITE (remote_desc, "+", 1);
1414 /* Try the whole thing again. */
1416 SERIAL_WRITE (remote_desc, "-", 1);
1419 /* We have tried hard enough, and just can't receive the packet. Give up. */
1421 printf_unfiltered ("Ignoring packet error, continuing...\n");
1422 SERIAL_WRITE (remote_desc, "+", 1);
1429 /* Don't wait for it to die. I'm not really sure it matters whether
1430 we do or not. For the existing stubs, kill is a noop. */
1431 target_mourn_inferior ();
1437 unpush_target (&remote_ops);
1438 generic_mourn_inferior ();
1441 #ifdef REMOTE_BREAKPOINT
1443 /* On some machines, e.g. 68k, we may use a different breakpoint instruction
1444 than other targets. */
1445 static unsigned char break_insn[] = REMOTE_BREAKPOINT;
1447 #else /* No REMOTE_BREAKPOINT. */
1449 /* Same old breakpoint instruction. This code does nothing different
1450 than mem-break.c. */
1451 static unsigned char break_insn[] = BREAKPOINT;
1453 #endif /* No REMOTE_BREAKPOINT. */
1455 /* Insert a breakpoint on targets that don't have any better breakpoint
1456 support. We read the contents of the target location and stash it,
1457 then overwrite it with a breakpoint instruction. ADDR is the target
1458 location in the target machine. CONTENTS_CACHE is a pointer to
1459 memory allocated for saving the target contents. It is guaranteed
1460 by the caller to be long enough to save sizeof BREAKPOINT bytes (this
1461 is accomplished via BREAKPOINT_MAX). */
1464 remote_insert_breakpoint (addr, contents_cache)
1466 char *contents_cache;
1470 val = target_read_memory (addr, contents_cache, sizeof break_insn);
1473 val = target_write_memory (addr, (char *)break_insn, sizeof break_insn);
1479 remote_remove_breakpoint (addr, contents_cache)
1481 char *contents_cache;
1483 return target_write_memory (addr, contents_cache, sizeof break_insn);
1486 /* Define the target subroutine names */
1488 struct target_ops remote_hppro_ops = {
1489 "hppro", /* to_shortname */
1490 "Remote serial target for HP-PRO targets", /* to_longname */
1491 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
1492 This is for targets that supports the HP-PRO standard.\n\
1493 Specify the serial device it is connected to (e.g. /dev/ttya) or telnet port.", /* to_doc */
1494 remote_open, /* to_open */
1495 remote_close, /* to_close */
1496 NULL, /* to_attach */
1497 remote_detach, /* to_detach */
1498 remote_resume, /* to_resume */
1499 remote_wait, /* to_wait */
1500 remote_fetch_registers, /* to_fetch_registers */
1501 remote_store_registers, /* to_store_registers */
1502 remote_prepare_to_store, /* to_prepare_to_store */
1503 remote_xfer_memory, /* to_xfer_memory */
1504 remote_files_info, /* to_files_info */
1506 remote_insert_breakpoint, /* to_insert_breakpoint */
1507 remote_remove_breakpoint, /* to_remove_breakpoint */
1509 NULL, /* to_terminal_init */
1510 NULL, /* to_terminal_inferior */
1511 NULL, /* to_terminal_ours_for_output */
1512 NULL, /* to_terminal_ours */
1513 NULL, /* to_terminal_info */
1514 remote_kill, /* to_kill */
1515 hppro_load, /* to_load */
1516 NULL, /* to_lookup_symbol */
1517 NULL, /* to_create_inferior */
1518 remote_mourn, /* to_mourn_inferior */
1520 0, /* to_notice_signals */
1521 0, /* to_thread_alive */
1523 process_stratum, /* to_stratum */
1525 1, /* to_has_all_memory */
1526 1, /* to_has_memory */
1527 1, /* to_has_stack */
1528 1, /* to_has_registers */
1529 1, /* to_has_execution */
1530 NULL, /* sections */
1531 NULL, /* sections_end */
1532 OPS_MAGIC /* to_magic */
1536 _initialize_remote_hppro ()
1538 struct cmd_list_element *c;
1539 add_target (&remote_hppro_ops);
1541 /* this sets the type of download protocol */
1542 c = add_set_cmd ("loadtype", no_class, var_string, (char *)&loadtype_str,
1543 "Set the type of the remote load protocol.\n", &setlist);
1544 c->function.sfunc = set_loadtype_command;
1545 add_show_from_set (c, &showlist);
1546 loadtype_str = savestring ("generic", 8);
1548 /* this adds a command to boot the board */
1549 add_com ("boot", class_support, boot_board,
1550 "Boot the damn target board.\n");
1554 set_loadtype_command (ignore, from_tty, c)
1557 struct cmd_list_element *c;
1559 loadtype_str = savestring (*(char **) c->var, strlen (*(char **) c->var));