1 /* Remote target communications for serial-line targets in custom GDB protocol
2 Copyright 1988, 1991, 1992, 1993 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., 675 Mass Ave, Cambridge, MA 02139, 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
30 CSUM1 and CSUM2 are ascii hex representation of an 8-bit
31 checksum of <data>, the most significant nibble is sent first.
32 the hex digits 0-9,a-f are used.
34 Receiver responds with:
36 + - if CSUM is correct and ready for next packet
37 - - if CSUM is incorrect
40 All values are encoded in ascii hex digits.
45 reply XX....X Each byte of register data
46 is described by two hex digits.
47 Registers are in the internal order
48 for GDB, and the bytes in a register
49 are in the same order the machine uses.
52 write regs GXX..XX Each byte of register data
53 is described by two hex digits.
57 read mem mAA..AA,LLLL AA..AA is address, LLLL is length.
58 reply XX..XX XX..XX is mem contents
59 Can be fewer bytes than requested
60 if able to read only part of the data.
63 write mem MAA..AA,LLLL:XX..XX
65 LLLL is number of bytes,
68 ENN for an error (this includes the case
69 where only part of the data was
72 cont cAA..AA AA..AA is address to resume
74 resume at same address.
76 step sAA..AA AA..AA is address to resume
78 resume at same address.
80 last signal ? Reply the current reason for stopping.
81 This is the same reply as is generated
82 for step or cont : SAA where AA is the
85 There is no immediate reply to step or cont.
86 The reply comes when the machine stops.
87 It is SAA AA is the "signal number"
89 or... TAAn...:r...;n:r...;n...:r...;
91 n... = register number
92 r... = register contents
93 or... WAA The process extited, and AA is
94 the exit status. This is only
95 applicable for certains sorts of
97 or... NAATT;DD;BB Relocate the object file.
102 This is used by the NLM stub,
103 which is why it only has three
104 addresses rather than one per
105 section: the NLM stub always
106 sees only three sections, even
107 though gdb may see more.
111 toggle debug d toggle debug flag (see 386 & 68k stubs)
112 reset r reset -- see sparc stub.
113 reserved <other> On other requests, the stub should
114 ignore the request and send an empty
115 response ($#<checksum>). This way
116 we can extend the protocol and GDB
117 can tell whether the stub it is
118 talking to uses the old or the new.
125 #include "inferior.h"
130 #include "terminal.h"
132 #include "objfiles.h"
133 #include "gdb-stabs.h"
136 #include "remote-utils.h"
138 #if !defined(DONT_USE_REMOTE)
140 #include <sys/types.h>
146 /* Prototypes for local functions */
149 remote_write_bytes PARAMS ((CORE_ADDR memaddr, unsigned char *myaddr, int len));
152 remote_read_bytes PARAMS ((CORE_ADDR memaddr, unsigned char *myaddr, int len));
155 remote_files_info PARAMS ((struct target_ops *ignore));
158 remote_xfer_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len,
159 int should_write, struct target_ops *target));
162 remote_prepare_to_store PARAMS ((void));
165 remote_fetch_registers PARAMS ((int regno));
168 remote_resume PARAMS ((int pid, int step, int siggnal));
171 remote_start_remote PARAMS ((char *dummy));
174 remote_open PARAMS ((char *name, int from_tty));
177 remote_close PARAMS ((int quitting));
180 remote_store_registers PARAMS ((int regno));
183 getpkt PARAMS ((char *buf, int forever));
186 putpkt PARAMS ((char *buf));
189 remote_send PARAMS ((char *buf));
192 readchar PARAMS ((void));
195 remote_wait PARAMS ((WAITTYPE *status));
198 tohex PARAMS ((int nib));
201 fromhex PARAMS ((int a));
204 remote_detach PARAMS ((char *args, int from_tty));
207 remote_interrupt PARAMS ((int signo));
210 remote_interrupt_twice PARAMS ((int signo));
213 interrupt_query PARAMS ((void));
215 extern struct target_ops remote_ops; /* Forward decl */
217 /* This was 5 seconds, which is a long time to sit and wait.
218 Unless this is going though some terminal server or multiplexer or
219 other form of hairy serial connection, I would think 2 seconds would
221 static int timeout = 2;
227 /* Descriptor for I/O to remote machine. Initialize it to NULL so that
228 remote_open knows that we don't have a file open when the program
230 serial_t remote_desc = NULL;
234 /* Maximum number of bytes to read/write at once. The value here
235 is chosen to fill up a packet (the headers account for the 32). */
236 #define MAXBUFBYTES ((PBUFSIZ-32)/2)
238 /* Round up PBUFSIZ to hold all the registers, at least. */
239 #if REGISTER_BYTES > MAXBUFBYTES
241 #define PBUFSIZ (REGISTER_BYTES * 2 + 32)
244 /* Clean up connection to a remote debugger. */
248 remote_close (quitting)
252 SERIAL_CLOSE (remote_desc);
256 /* Stub for catch_errors. */
259 remote_start_remote (dummy)
262 immediate_quit = 1; /* Allow user to interrupt it */
264 /* Ack any packet which the remote side has already sent. */
265 /* I'm not sure this \r is needed; we don't use it any other time we
267 SERIAL_WRITE (remote_desc, "+\r", 2);
268 putpkt ("?"); /* initiate a query from remote machine */
271 start_remote (); /* Initialize gdb process mechanisms */
275 /* Open a connection to a remote debugger.
276 NAME is the filename used for communication. */
278 static DCACHE *remote_dcache;
281 remote_open (name, from_tty)
287 "To open a remote debug connection, you need to specify what serial\n\
288 device is attached to the remote system (e.g. /dev/ttya).");
290 target_preopen (from_tty);
292 unpush_target (&remote_ops);
294 remote_dcache = dcache_init (remote_read_bytes, remote_write_bytes);
296 remote_desc = SERIAL_OPEN (name);
298 perror_with_name (name);
300 if (SERIAL_SETBAUDRATE (remote_desc, sr_get_baud_rate()))
302 SERIAL_CLOSE (remote_desc);
303 perror_with_name (name);
306 SERIAL_RAW (remote_desc);
308 /* If there is something sitting in the buffer we might take it as a
309 response to a command, which would be bad. */
310 SERIAL_FLUSH_INPUT (remote_desc);
314 puts_filtered ("Remote debugging using ");
315 puts_filtered (name);
316 puts_filtered ("\n");
318 push_target (&remote_ops); /* Switch to using remote target now */
320 /* Start the remote connection; if error (0), discard this target.
321 In particular, if the user quits, be sure to discard it
322 (we'd be in an inconsistent state otherwise). */
323 if (!catch_errors (remote_start_remote, (char *)0,
324 "Couldn't establish connection to remote target\n", RETURN_MASK_ALL))
329 takes a program previously attached to and detaches it.
330 We better not have left any breakpoints
331 in the program or it'll die when it hits one.
332 Close the open connection to the remote debugger.
333 Use this when you want to detach and do something else
337 remote_detach (args, from_tty)
342 error ("Argument given to \"detach\" when remotely debugging.");
346 puts_filtered ("Ending remote debugging.\n");
349 /* Convert hex digit A to a number. */
355 if (a >= '0' && a <= '9')
357 else if (a >= 'a' && a <= 'f')
360 error ("Reply contains invalid hex digit");
364 /* Convert number NIB to a hex digit. */
376 /* Tell the remote machine to resume. */
379 remote_resume (pid, step, siggnal)
380 int pid, step, siggnal;
387 target_terminal_ours_for_output ();
388 printf_filtered ("Can't send signals to a remote system. ");
389 name = strsigno (siggnal);
391 printf_filtered (name);
393 printf_filtered ("Signal %d", siggnal);
394 printf_filtered (" not sent.\n");
395 target_terminal_inferior ();
398 dcache_flush (remote_dcache);
400 strcpy (buf, step ? "s": "c");
405 /* Send ^C to target to halt it. Target will respond, and send us a
409 remote_interrupt (signo)
412 /* If this doesn't work, try more severe steps. */
413 signal (signo, remote_interrupt_twice);
416 printf ("remote_interrupt called\n");
418 SERIAL_WRITE (remote_desc, "\003", 1); /* Send a ^C */
421 static void (*ofunc)();
423 /* The user typed ^C twice. */
425 remote_interrupt_twice (signo)
428 signal (signo, ofunc);
432 signal (signo, remote_interrupt);
435 /* Ask the user what to do when an interrupt is received. */
440 target_terminal_ours ();
442 if (query ("Interrupted while waiting for the program.\n\
443 Give up (and stop debugging it)? "))
445 target_mourn_inferior ();
446 return_to_top_level (RETURN_QUIT);
449 target_terminal_inferior ();
452 /* Wait until the remote machine stops, then return,
453 storing status in STATUS just as `wait' would.
454 Returns "pid" (though it's not clear what, if anything, that
455 means in the case of this target). */
461 unsigned char buf[PBUFSIZ];
463 WSETEXIT ((*status), 0);
469 ofunc = (void (*)()) signal (SIGINT, remote_interrupt);
470 getpkt ((char *) buf, 1);
471 signal (SIGINT, ofunc);
474 warning ("Remote failure reply: %s", buf);
475 else if (buf[0] == 'T')
479 char regs[MAX_REGISTER_RAW_SIZE];
481 /* Expedited reply, containing Signal, {regno, reg} repeat */
482 /* format is: 'Tssn...:r...;n...:r...;n...:r...;#cc', where
484 n... = register number
485 r... = register contents
488 p = &buf[3]; /* after Txx */
494 regno = strtol (p, &p1, 16); /* Read the register number */
497 warning ("Remote sent badly formed register number: %s\nPacket: '%s'\n",
503 warning ("Malformed packet (missing colon): %s\nPacket: '%s'\n",
506 if (regno >= NUM_REGS)
507 warning ("Remote sent bad register number %d: %s\nPacket: '%s'\n",
510 for (i = 0; i < REGISTER_RAW_SIZE (regno); i++)
512 if (p[0] == 0 || p[1] == 0)
513 warning ("Remote reply is too short: %s", buf);
514 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
519 warning ("Remote register badly formatted: %s", buf);
521 supply_register (regno, regs);
525 else if (buf[0] == 'N')
528 bfd_vma text_addr, data_addr, bss_addr;
530 /* Relocate object file. Format is NAATT;DD;BB where AA is
531 the signal number, TT is the new text address, DD is the
532 new data address, and BB is the new bss address. This is
533 used by the NLM stub; gdb may see more sections. */
535 text_addr = strtoul (p, &p1, 16);
536 if (p1 == p || *p1 != ';')
537 warning ("Malformed relocation packet: Packet '%s'", buf);
539 data_addr = strtoul (p, &p1, 16);
540 if (p1 == p || *p1 != ';')
541 warning ("Malformed relocation packet: Packet '%s'", buf);
543 bss_addr = strtoul (p, &p1, 16);
545 warning ("Malformed relocation packet: Packet '%s'", buf);
547 if (symfile_objfile != NULL
548 && (ANOFFSET (symfile_objfile->section_offsets,
549 SECT_OFF_TEXT) != text_addr
550 || ANOFFSET (symfile_objfile->section_offsets,
551 SECT_OFF_DATA) != data_addr
552 || ANOFFSET (symfile_objfile->section_offsets,
553 SECT_OFF_BSS) != bss_addr))
555 struct section_offsets *offs;
557 /* FIXME: This code assumes gdb-stabs.h is being used;
558 it's broken for xcoff, dwarf, sdb-coff, etc. But
559 there is no simple canonical representation for this
560 stuff. (Just what does "text" as seen by the stub
563 /* FIXME: Why don't the various symfile_offsets routines
564 in the sym_fns vectors set this?
565 (no good reason -kingdon). */
566 if (symfile_objfile->num_sections == 0)
567 symfile_objfile->num_sections = SECT_OFF_MAX;
569 offs = ((struct section_offsets *)
570 alloca (sizeof (struct section_offsets)
571 + (symfile_objfile->num_sections
572 * sizeof (offs->offsets))));
573 memcpy (offs, symfile_objfile->section_offsets,
574 (sizeof (struct section_offsets)
575 + (symfile_objfile->num_sections
576 * sizeof (offs->offsets))));
577 ANOFFSET (offs, SECT_OFF_TEXT) = text_addr;
578 ANOFFSET (offs, SECT_OFF_DATA) = data_addr;
579 ANOFFSET (offs, SECT_OFF_BSS) = bss_addr;
581 objfile_relocate (symfile_objfile, offs);
583 struct obj_section *s;
586 abfd = symfile_objfile->obfd;
588 for (s = symfile_objfile->sections;
589 s < symfile_objfile->sections_end; ++s)
593 flags = bfd_get_section_flags (abfd, s->sec_ptr);
595 if (flags & SEC_CODE)
597 s->addr += text_addr;
598 s->endaddr += text_addr;
600 else if (flags & (SEC_DATA | SEC_LOAD))
602 s->addr += data_addr;
603 s->endaddr += data_addr;
605 else if (flags & SEC_ALLOC)
608 s->endaddr += bss_addr;
615 else if (buf[0] == 'W')
617 /* The remote process exited. */
618 WSETEXIT (*status, (fromhex (buf[1]) << 4) + fromhex (buf[2]));
621 else if (buf[0] == 'S')
624 warning ("Invalid remote reply: %s", buf);
627 WSETSTOP ((*status), (((fromhex (buf[1])) << 4) + (fromhex (buf[2]))));
632 /* Number of bytes of registers this stub implements. */
633 static int register_bytes_found;
635 /* Read the remote registers into the block REGS. */
636 /* Currently we just read all the registers, so we don't use regno. */
639 remote_fetch_registers (regno)
645 char regs[REGISTER_BYTES];
650 /* Unimplemented registers read as all bits zero. */
651 memset (regs, 0, REGISTER_BYTES);
653 /* We can get out of synch in various cases. If the first character
654 in the buffer is not a hex character, assume that has happened
655 and try to fetch another packet to read. */
656 while ((buf[0] < '0' || buf[0] > '9')
657 && (buf[0] < 'a' || buf[0] > 'f'))
659 if (sr_get_debug () > 0)
660 printf ("Bad register packet; fetching a new packet\n");
664 /* Reply describes registers byte by byte, each byte encoded as two
665 hex characters. Suck them all up, then supply them to the
666 register cacheing/storage mechanism. */
669 for (i = 0; i < REGISTER_BYTES; i++)
675 warning ("Remote reply is of odd length: %s", buf);
676 /* Don't change register_bytes_found in this case, and don't
677 print a second warning. */
680 regs[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
684 if (i != register_bytes_found)
686 register_bytes_found = i;
687 #ifdef REGISTER_BYTES_OK
688 if (!REGISTER_BYTES_OK (i))
689 warning ("Remote reply is too short: %s", buf);
694 for (i = 0; i < NUM_REGS; i++)
695 supply_register (i, ®s[REGISTER_BYTE(i)]);
698 /* Prepare to store registers. Since we send them all, we have to
699 read out the ones we don't want to change first. */
702 remote_prepare_to_store ()
704 /* Make sure the entire registers array is valid. */
705 read_register_bytes (0, (char *)NULL, REGISTER_BYTES);
708 /* Store the remote registers from the contents of the block REGISTERS.
709 FIXME, eventually just store one register if that's all that is needed. */
713 remote_store_registers (regno)
722 /* Command describes registers byte by byte,
723 each byte encoded as two hex characters. */
726 /* remote_prepare_to_store insures that register_bytes_found gets set. */
727 for (i = 0; i < register_bytes_found; i++)
729 *p++ = tohex ((registers[i] >> 4) & 0xf);
730 *p++ = tohex (registers[i] & 0xf);
739 /* Use of the data cache is disabled because it loses for looking at
740 and changing hardware I/O ports and the like. Accepting `volatile'
741 would perhaps be one way to fix it, but a better way which would
742 win for more cases would be to use the executable file for the text
743 segment, like the `icache' code below but done cleanly (in some
744 target-independent place, perhaps in target_xfer_memory, perhaps
745 based on assigning each target a speed or perhaps by some simpler
748 /* Read a word from remote address ADDR and return it.
749 This goes through the data cache. */
752 remote_fetch_word (addr)
758 extern CORE_ADDR text_start, text_end;
760 if (addr >= text_start && addr < text_end)
763 xfer_core_file (addr, &buffer, sizeof (int));
768 return dcache_fetch (remote_dcache, addr);
771 /* Write a word WORD into remote address ADDR.
772 This goes through the data cache. */
775 remote_store_word (addr, word)
779 dcache_poke (remote_dcache, addr, word);
783 /* Write memory data directly to the remote machine.
784 This does not inform the data cache; the data cache uses this.
785 MEMADDR is the address in the remote memory space.
786 MYADDR is the address of the buffer in our space.
787 LEN is the number of bytes.
789 Returns number of bytes transferred, or 0 for error. */
792 remote_write_bytes (memaddr, myaddr, len)
794 unsigned char *myaddr;
801 if (len > PBUFSIZ / 2 - 20)
804 sprintf (buf, "M%x,%x:", memaddr, len);
806 /* We send target system values byte by byte, in increasing byte addresses,
807 each byte encoded as two hex characters. */
809 p = buf + strlen (buf);
810 for (i = 0; i < len; i++)
812 *p++ = tohex ((myaddr[i] >> 4) & 0xf);
813 *p++ = tohex (myaddr[i] & 0xf);
822 /* There is no correspondance between what the remote protocol uses
823 for errors and errno codes. We would like a cleaner way of
824 representing errors (big enough to include errno codes, bfd_error
825 codes, and others). But for now just return EIO. */
832 /* Read memory data directly from the remote machine.
833 This does not use the data cache; the data cache uses this.
834 MEMADDR is the address in the remote memory space.
835 MYADDR is the address of the buffer in our space.
836 LEN is the number of bytes.
838 Returns number of bytes transferred, or 0 for error. */
841 remote_read_bytes (memaddr, myaddr, len)
843 unsigned char *myaddr;
850 if (len > PBUFSIZ / 2 - 1)
853 sprintf (buf, "m%x,%x", memaddr, len);
859 /* There is no correspondance between what the remote protocol uses
860 for errors and errno codes. We would like a cleaner way of
861 representing errors (big enough to include errno codes, bfd_error
862 codes, and others). But for now just return EIO. */
867 /* Reply describes memory byte by byte,
868 each byte encoded as two hex characters. */
871 for (i = 0; i < len; i++)
873 if (p[0] == 0 || p[1] == 0)
874 /* Reply is short. This means that we were able to read only part
875 of what we wanted to. */
877 myaddr[i] = fromhex (p[0]) * 16 + fromhex (p[1]);
883 /* Read or write LEN bytes from inferior memory at MEMADDR, transferring
884 to or from debugger address MYADDR. Write to inferior if SHOULD_WRITE is
885 nonzero. Returns length of data written or read; 0 for error. */
889 remote_xfer_memory(memaddr, myaddr, len, should_write, target)
894 struct target_ops *target; /* ignored */
898 int total_xferred = 0;
902 if (len > MAXBUFBYTES)
903 xfersize = MAXBUFBYTES;
908 bytes_xferred = remote_write_bytes (memaddr, myaddr, xfersize);
910 bytes_xferred = remote_read_bytes (memaddr, myaddr, xfersize);
912 /* If we get an error, we are done xferring. */
913 if (bytes_xferred == 0)
916 memaddr += bytes_xferred;
917 myaddr += bytes_xferred;
918 len -= bytes_xferred;
919 total_xferred += bytes_xferred;
921 return total_xferred;
925 remote_files_info (ignore)
926 struct target_ops *ignore;
928 puts_filtered ("Debugging a target over a serial line.\n");
931 /* Stuff for dealing with the packets which are part of this protocol.
932 See comment at top of file for details. */
934 /* Read a single character from the remote end, masking it down to 7 bits. */
941 ch = SERIAL_READCHAR (remote_desc, timeout);
949 /* Send the command in BUF to the remote machine,
950 and read the reply into BUF.
951 Report an error if we get an error reply. */
962 error ("Remote failure reply: %s", buf);
965 /* Send a packet to the remote machine, with error checking.
966 The data of the packet is in BUF. */
973 unsigned char csum = 0;
975 int cnt = strlen (buf);
979 /* Copy the packet into buffer BUF2, encapsulating it
980 and giving it a checksum. */
982 if (cnt > sizeof(buf2) - 5) /* Prosanity check */
988 for (i = 0; i < cnt; i++)
994 *p++ = tohex ((csum >> 4) & 0xf);
995 *p++ = tohex (csum & 0xf);
997 /* Send it over and over until we get a positive ack. */
1001 if (sr_get_debug ())
1004 printf ("Sending packet: %s...", buf2); fflush(stdout);
1006 if (SERIAL_WRITE (remote_desc, buf2, p - buf2))
1007 perror_with_name ("putpkt: write failed");
1009 /* read until either a timeout occurs (-2) or '+' is read */
1017 if (sr_get_debug ())
1020 case SERIAL_TIMEOUT:
1021 break; /* Retransmit buffer */
1023 perror_with_name ("putpkt: couldn't read ACK");
1025 error ("putpkt: EOF while trying to read ACK");
1027 if (sr_get_debug ())
1028 printf ("%02X %c ", ch&0xFF, ch);
1031 break; /* Here to retransmit */
1042 /* Read a packet from the remote machine, with error checking,
1043 and store it in BUF. BUF is expected to be of size PBUFSIZ.
1044 If FOREVER, wait forever rather than timing out; this is used
1045 while the target is executing user code. */
1048 getpkt (buf, forever)
1055 unsigned char c1, c2;
1057 #define MAX_RETRIES 10
1067 /* This can loop forever if the remote side sends us characters
1068 continuously, but if it pauses, we'll get a zero from readchar
1069 because of timeout. Then we'll count that as a retry. */
1072 if (c > 0 && c != '$')
1075 if (c == SERIAL_TIMEOUT)
1079 if (++retries >= MAX_RETRIES)
1080 if (sr_get_debug ()) puts_filtered ("Timed out.\n");
1084 if (c == SERIAL_EOF)
1085 error ("Remote connection closed");
1086 if (c == SERIAL_ERROR)
1087 perror_with_name ("Remote communication error");
1089 /* Force csum to be zero here because of possible error retry. */
1096 if (c == SERIAL_TIMEOUT)
1098 if (sr_get_debug ())
1099 puts_filtered ("Timeout in mid-packet, retrying\n");
1100 goto whole; /* Start a new packet, count retries */
1104 if (sr_get_debug ())
1105 puts_filtered ("Saw new packet start in middle of old one\n");
1106 goto whole; /* Start a new packet, count retries */
1110 if (bp >= buf+PBUFSIZ-1)
1113 puts_filtered ("Remote packet too long: ");
1114 puts_filtered (buf);
1115 puts_filtered ("\n");
1123 c1 = fromhex (readchar ());
1124 c2 = fromhex (readchar ());
1125 if ((csum & 0xff) == (c1 << 4) + c2)
1127 printf_filtered ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=",
1128 (c1 << 4) + c2, csum & 0xff);
1129 puts_filtered (buf);
1130 puts_filtered ("\n");
1132 /* Try the whole thing again. */
1134 if (++retries < MAX_RETRIES)
1136 SERIAL_WRITE (remote_desc, "-", 1);
1140 printf ("Ignoring packet error, continuing...\n");
1147 SERIAL_WRITE (remote_desc, "+", 1);
1149 if (sr_get_debug ())
1150 fprintf (stderr,"Packet received: %s\n", buf);
1157 /* Don't wait for it to die. I'm not really sure it matters whether
1158 we do or not. For the existing stubs, kill is a noop. */
1159 target_mourn_inferior ();
1165 unpush_target (&remote_ops);
1166 generic_mourn_inferior ();
1169 #ifdef REMOTE_BREAKPOINT
1171 /* On some machines, e.g. 68k, we may use a different breakpoint instruction
1172 than other targets. */
1173 static unsigned char break_insn[] = REMOTE_BREAKPOINT;
1175 /* Check that it fits in BREAKPOINT_MAX bytes. */
1176 static unsigned char check_break_insn_size[BREAKPOINT_MAX] = REMOTE_BREAKPOINT;
1178 #else /* No REMOTE_BREAKPOINT. */
1180 /* Same old breakpoint instruction. This code does nothing different
1181 than mem-break.c. */
1182 static unsigned char break_insn[] = BREAKPOINT;
1184 #endif /* No REMOTE_BREAKPOINT. */
1186 /* Insert a breakpoint on targets that don't have any better breakpoint
1187 support. We read the contents of the target location and stash it,
1188 then overwrite it with a breakpoint instruction. ADDR is the target
1189 location in the target machine. CONTENTS_CACHE is a pointer to
1190 memory allocated for saving the target contents. It is guaranteed
1191 by the caller to be long enough to save sizeof BREAKPOINT bytes (this
1192 is accomplished via BREAKPOINT_MAX). */
1195 remote_insert_breakpoint (addr, contents_cache)
1197 char *contents_cache;
1201 val = target_read_memory (addr, contents_cache, sizeof break_insn);
1204 val = target_write_memory (addr, (char *)break_insn, sizeof break_insn);
1210 remote_remove_breakpoint (addr, contents_cache)
1212 char *contents_cache;
1214 return target_write_memory (addr, contents_cache, sizeof break_insn);
1217 /* Define the target subroutine names */
1219 struct target_ops remote_ops = {
1220 "remote", /* to_shortname */
1221 "Remote serial target in gdb-specific protocol", /* to_longname */
1222 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
1223 Specify the serial device it is connected to (e.g. /dev/ttya).", /* to_doc */
1224 remote_open, /* to_open */
1225 remote_close, /* to_close */
1226 NULL, /* to_attach */
1227 remote_detach, /* to_detach */
1228 remote_resume, /* to_resume */
1229 remote_wait, /* to_wait */
1230 remote_fetch_registers, /* to_fetch_registers */
1231 remote_store_registers, /* to_store_registers */
1232 remote_prepare_to_store, /* to_prepare_to_store */
1233 remote_xfer_memory, /* to_xfer_memory */
1234 remote_files_info, /* to_files_info */
1236 remote_insert_breakpoint, /* to_insert_breakpoint */
1237 remote_remove_breakpoint, /* to_remove_breakpoint */
1239 NULL, /* to_terminal_init */
1240 NULL, /* to_terminal_inferior */
1241 NULL, /* to_terminal_ours_for_output */
1242 NULL, /* to_terminal_ours */
1243 NULL, /* to_terminal_info */
1244 remote_kill, /* to_kill */
1245 generic_load, /* to_load */
1246 NULL, /* to_lookup_symbol */
1247 NULL, /* to_create_inferior */
1248 remote_mourn, /* to_mourn_inferior */
1250 0, /* to_notice_signals */
1251 process_stratum, /* to_stratum */
1253 1, /* to_has_all_memory */
1254 1, /* to_has_memory */
1255 1, /* to_has_stack */
1256 1, /* to_has_registers */
1257 1, /* to_has_execution */
1258 NULL, /* sections */
1259 NULL, /* sections_end */
1260 OPS_MAGIC /* to_magic */
1264 _initialize_remote ()
1266 add_target (&remote_ops);