1 /* Memory-access and commands for inferior process, for GDB.
2 Copyright (C) 1988-1991 Free Software Foundation, Inc.
4 This file is part of GDB.
6 GDB 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 1, or (at your option)
11 GDB 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 GDB; see the file COPYING. If not, write to
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
20 /* Remote communication protocol.
21 All values are encoded in ascii hex digits.
26 reply XX....X Each byte of register data
27 is described by two hex digits.
28 Registers are in the internal order
29 for GDB, and the bytes in a register
30 are in the same order the machine uses.
33 write regs GXX..XX Each byte of register data
34 is described by two hex digits.
38 read mem mAA..AA,LLLL AA..AA is address, LLLL is length.
39 reply XX..XX XX..XX is mem contents
42 write mem MAA..AA,LLLL:XX..XX
44 LLLL is number of bytes,
49 cont cAA..AA AA..AA is address to resume
51 resume at same address.
53 step sAA..AA AA..AA is address to resume
55 resume at same address.
57 last signal ? Reply the current reason for stopping.
58 This is the same reply as is generated
59 for step or cont : SAA where AA is the
62 There is no immediate reply to step or cont.
63 The reply comes when the machine stops.
64 It is SAA AA is the "signal number"
81 #include <sys/types.h>
86 extern int memory_insert_breakpoint ();
87 extern int memory_remove_breakpoint ();
88 extern void add_syms_addr_command ();
89 extern struct value
*call_function_by_hand();
90 extern void start_remote ();
92 extern struct target_ops remote_ops
; /* Forward decl */
95 static int timeout
= 5;
101 /* Descriptor for I/O to remote machine. Initialize it to -1 so that
102 remote_open knows that we don't have a file open when the program
104 int remote_desc
= -1;
108 /* Maximum number of bytes to read/write at once. The value here
109 is chosen to fill up a packet (the headers account for the 32). */
110 #define MAXBUFBYTES ((PBUFSIZ-32)/2)
112 static void remote_send ();
113 static void putpkt ();
114 static void getpkt ();
116 static void dcache_flush ();
120 /* Called when SIGALRM signal sent due to alarm() timeout. */
126 printf ("remote_timer called\n");
132 /* Initialize remote connection */
139 /* Clean up connection to a remote debugger. */
143 remote_close (quitting
)
146 if (remote_desc
>= 0)
151 /* Open a connection to a remote debugger.
152 NAME is the filename used for communication. */
155 remote_open (name
, from_tty
)
163 "To open a remote debug connection, you need to specify what serial\n\
164 device is attached to the remote system (e.g. /dev/ttya).");
166 target_preopen (from_tty
);
174 remote_desc
= open (name
, O_RDWR
);
176 perror_with_name (name
);
178 ioctl (remote_desc
, TIOCGETP
, &sg
);
180 sg
.c_cc
[VMIN
] = 0; /* read with timeout. */
181 sg
.c_cc
[VTIME
] = timeout
* 10;
182 sg
.c_lflag
&= ~(ICANON
| ECHO
);
186 ioctl (remote_desc
, TIOCSETP
, &sg
);
189 printf ("Remote debugging using %s\n", name
);
190 push_target (&remote_ops
); /* Switch to using remote target now */
193 #ifndef NO_SIGINTERRUPT
194 /* Cause SIGALRM's to make reads fail. */
195 if (siginterrupt (SIGALRM
, 1) != 0)
196 perror ("remote_open: error in siginterrupt");
199 /* Set up read timeout timer. */
200 if ((void (*)()) signal (SIGALRM
, remote_timer
) == (void (*)()) -1)
201 perror ("remote_open: error in signal");
204 /* Ack any packet which the remote side has already sent. */
205 write (remote_desc
, "+", 1);
206 putpkt ("?"); /* initiate a query from remote machine */
208 start_remote (); /* Initialize gdb process mechanisms */
212 takes a program previously attached to and detaches it.
213 We better not have left any breakpoints
214 in the program or it'll die when it hits one.
215 Close the open connection to the remote debugger.
216 Use this when you want to detach and do something else
220 remote_detach (args
, from_tty
)
225 error ("Argument given to \"detach\" when remotely debugging.");
229 printf ("Ending remote debugging.\n");
232 /* Convert hex digit A to a number. */
238 if (a
>= '0' && a
<= '9')
240 else if (a
>= 'a' && a
<= 'f')
243 error ("Reply contains invalid hex digit");
247 /* Convert number NIB to a hex digit. */
259 /* Tell the remote machine to resume. */
262 remote_resume (step
, siggnal
)
268 error ("Can't send signals to a remote system.");
274 strcpy (buf
, step
? "s": "c");
279 /* Wait until the remote machine stops, then return,
280 storing status in STATUS just as `wait' would.
281 Returns "pid" (though it's not clear what, if anything, that
282 means in the case of this target). */
288 unsigned char buf
[PBUFSIZ
];
290 WSETEXIT ((*status
), 0);
293 error ("Remote failure reply: %s", buf
);
295 error ("Invalid remote reply: %s", buf
);
296 WSETSTOP ((*status
), (((fromhex (buf
[1])) << 4) + (fromhex (buf
[2]))));
300 /* Read the remote registers into the block REGS. */
302 /* Currently we just read all the registers, so we don't use regno. */
305 remote_fetch_registers (regno
)
311 char regs
[REGISTER_BYTES
];
316 /* Reply describes registers byte by byte, each byte encoded as two
317 hex characters. Suck them all up, then supply them to the
318 register cacheing/storage mechanism. */
321 for (i
= 0; i
< REGISTER_BYTES
; i
++)
323 if (p
[0] == 0 || p
[1] == 0)
324 error ("Remote reply is too short: %s", buf
);
325 regs
[i
] = fromhex (p
[0]) * 16 + fromhex (p
[1]);
328 for (i
= 0; i
< NUM_REGS
; i
++)
329 supply_register (i
, ®s
[REGISTER_BYTE(i
)]);
333 /* Prepare to store registers. Since we send them all, we have to
334 read out the ones we don't want to change first. */
337 remote_prepare_to_store ()
339 remote_fetch_registers (-1);
342 /* Store the remote registers from the contents of the block REGISTERS.
343 FIXME, eventually just store one register if that's all that is needed. */
347 remote_store_registers (regno
)
356 /* Command describes registers byte by byte,
357 each byte encoded as two hex characters. */
360 for (i
= 0; i
< REGISTER_BYTES
; i
++)
362 *p
++ = tohex ((registers
[i
] >> 4) & 0xf);
363 *p
++ = tohex (registers
[i
] & 0xf);
372 /* Read a word from remote address ADDR and return it.
373 This goes through the data cache. */
376 remote_fetch_word (addr
)
381 extern CORE_ADDR text_start
, text_end
;
383 if (addr
>= text_start
&& addr
< text_end
)
386 xfer_core_file (addr
, &buffer
, sizeof (int));
390 return dcache_fetch (addr
);
393 /* Write a word WORD into remote address ADDR.
394 This goes through the data cache. */
397 remote_store_word (addr
, word
)
401 dcache_poke (addr
, word
);
405 /* Write memory data directly to the remote machine.
406 This does not inform the data cache; the data cache uses this.
407 MEMADDR is the address in the remote memory space.
408 MYADDR is the address of the buffer in our space.
409 LEN is the number of bytes. */
412 remote_write_bytes (memaddr
, myaddr
, len
)
421 if (len
> PBUFSIZ
/ 2 - 20)
424 sprintf (buf
, "M%x,%x:", memaddr
, len
);
426 /* Command describes registers byte by byte,
427 each byte encoded as two hex characters. */
429 p
= buf
+ strlen (buf
);
430 for (i
= 0; i
< len
; i
++)
432 *p
++ = tohex ((myaddr
[i
] >> 4) & 0xf);
433 *p
++ = tohex (myaddr
[i
] & 0xf);
440 /* Read memory data directly from the remote machine.
441 This does not use the data cache; the data cache uses this.
442 MEMADDR is the address in the remote memory space.
443 MYADDR is the address of the buffer in our space.
444 LEN is the number of bytes. */
447 remote_read_bytes (memaddr
, myaddr
, len
)
456 if (len
> PBUFSIZ
/ 2 - 1)
459 sprintf (buf
, "m%x,%x", memaddr
, len
);
462 /* Reply describes registers byte by byte,
463 each byte encoded as two hex characters. */
466 for (i
= 0; i
< len
; i
++)
468 if (p
[0] == 0 || p
[1] == 0)
469 error ("Remote reply is too short: %s", buf
);
470 myaddr
[i
] = fromhex (p
[0]) * 16 + fromhex (p
[1]);
475 /* Read or write LEN bytes from inferior memory at MEMADDR, transferring
476 to or from debugger address MYADDR. Write to inferior if SHOULD_WRITE is
477 nonzero. Returns length of data written or read; 0 for error. */
480 remote_xfer_inferior_memory(memaddr
, myaddr
, len
, should_write
)
490 if (len
> MAXBUFBYTES
)
491 xfersize
= MAXBUFBYTES
;
496 remote_write_bytes(memaddr
, myaddr
, xfersize
);
498 remote_read_bytes (memaddr
, myaddr
, xfersize
);
503 return origlen
; /* no error possible */
509 printf ("remote files info missing here. FIXME.\n");
514 A debug packet whose contents are <data>
515 is encapsulated for transmission in the form:
517 $ <data> # CSUM1 CSUM2
519 <data> must be ASCII alphanumeric and cannot include characters
522 CSUM1 and CSUM2 are ascii hex representation of an 8-bit
523 checksum of <data>, the most significant nibble is sent first.
524 the hex digits 0-9,a-f are used.
526 Receiver responds with:
528 + - if CSUM is correct and ready for next packet
529 - - if CSUM is incorrect
540 /* termio does the timeout for us. */
541 read (remote_desc
, &buf
, 1);
544 read (remote_desc
, &buf
, 1);
551 /* Send the command in BUF to the remote machine,
552 and read the reply into BUF.
553 Report an error if we get an error reply. */
564 error ("Remote failure reply: %s", buf
);
567 /* Send a packet to the remote machine, with error checking.
568 The data of the packet is in BUF. */
575 unsigned char csum
= 0;
577 int cnt
= strlen (buf
);
581 /* Copy the packet into buffer BUF2, encapsulating it
582 and giving it a checksum. */
587 for (i
= 0; i
< cnt
; i
++)
593 *p
++ = tohex ((csum
>> 4) & 0xf);
594 *p
++ = tohex (csum
& 0xf);
596 /* Send it over and over until we get a positive ack. */
602 printf ("Sending packet: %s (%s)\n", buf2
, buf
);
604 write (remote_desc
, buf2
, p
- buf2
);
606 /* read until either a timeout occurs (\0) or '+' is read */
609 } while ((ch
!= '+') && (ch
!= '\0'));
613 /* Read a packet from the remote machine, with error checking,
614 and store it in BUF. */
623 unsigned char c1
, c2
;
626 /* Sorry, this will cause all hell to break loose, i.e. we'll end
627 up in the command loop with an inferior, but (at least if this
628 happens in remote_wait or some such place) without a current_frame,
629 having set up prev_* in wait_for_inferior, etc.
631 If it is necessary to have such an "emergency exit", seems like
632 the only plausible thing to do is to say the inferior died, and
633 make the user reattach if they want to. Perhaps with a prompt
634 asking for confirmation. */
636 /* allow immediate quit while reading from device, it could be hung */
642 /* Force csum to be zero here because of possible error retry. */
645 while ((c
= readchar()) != '$');
658 c1
= fromhex (readchar ());
659 c2
= fromhex (readchar ());
660 if ((csum
& 0xff) == (c1
<< 4) + c2
)
662 printf ("Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
663 (c1
<< 4) + c2
, csum
& 0xff, buf
);
664 write (remote_desc
, "-", 1);
671 write (remote_desc
, "+", 1);
674 fprintf (stderr
,"Packet received :%s\n", buf
);
677 /* The data cache leads to incorrect results because it doesn't know about
678 volatile variables, thus making it impossible to debug functions which
679 use hardware registers. Therefore it is #if 0'd out. Effect on
680 performance is some, for backtraces of functions with a few
681 arguments each. For functions with many arguments, the stack
682 frames don't fit in the cache blocks, which makes the cache less
683 helpful. Disabling the cache is a big performance win for fetching
684 large structures, because the cache code fetched data in 16-byte
687 /* The data cache records all the data read from the remote machine
688 since the last time it stopped.
690 Each cache block holds 16 bytes of data
691 starting at a multiple-of-16 address. */
693 #define DCACHE_SIZE 64 /* Number of cache blocks */
695 struct dcache_block
{
696 struct dcache_block
*next
, *last
;
697 unsigned int addr
; /* Address for which data is recorded. */
701 struct dcache_block dcache_free
, dcache_valid
;
703 /* Free all the data cache blocks, thus discarding all cached data. */
708 register struct dcache_block
*db
;
710 while ((db
= dcache_valid
.next
) != &dcache_valid
)
713 insque (db
, &dcache_free
);
718 * If addr is present in the dcache, return the address of the block
722 struct dcache_block
*
725 register struct dcache_block
*db
;
730 /* Search all cache blocks for one that is at this address. */
731 db
= dcache_valid
.next
;
732 while (db
!= &dcache_valid
)
734 if ((addr
& 0xfffffff0) == db
->addr
)
741 /* Return the int data at address ADDR in dcache block DC. */
744 dcache_value (db
, addr
)
745 struct dcache_block
*db
;
750 return (db
->data
[(addr
>>2)&3]);
753 /* Get a free cache block, put it on the valid list,
754 and return its address. The caller should store into the block
755 the address and data that it describes. */
757 struct dcache_block
*
760 register struct dcache_block
*db
;
762 if ((db
= dcache_free
.next
) == &dcache_free
)
763 /* If we can't get one from the free list, take last valid */
764 db
= dcache_valid
.last
;
767 insque (db
, &dcache_valid
);
771 /* Return the contents of the word at address ADDR in the remote machine,
772 using the data cache. */
778 register struct dcache_block
*db
;
780 db
= dcache_hit (addr
);
783 db
= dcache_alloc ();
784 remote_read_bytes (addr
& ~0xf, db
->data
, 16);
785 db
->addr
= addr
& ~0xf;
787 return (dcache_value (db
, addr
));
790 /* Write the word at ADDR both in the data cache and in the remote machine. */
792 dcache_poke (addr
, data
)
796 register struct dcache_block
*db
;
798 /* First make sure the word is IN the cache. DB is its cache block. */
799 db
= dcache_hit (addr
);
802 db
= dcache_alloc ();
803 remote_read_bytes (addr
& ~0xf, db
->data
, 16);
804 db
->addr
= addr
& ~0xf;
807 /* Modify the word in the cache. */
808 db
->data
[(addr
>>2)&3] = data
;
810 /* Send the changed word. */
811 remote_write_bytes (addr
, &data
, 4);
814 /* Initialize the data cache. */
819 register struct dcache_block
*db
;
821 db
= (struct dcache_block
*) xmalloc (sizeof (struct dcache_block
) *
823 dcache_free
.next
= dcache_free
.last
= &dcache_free
;
824 dcache_valid
.next
= dcache_valid
.last
= &dcache_valid
;
825 for (i
=0;i
<DCACHE_SIZE
;i
++,db
++)
826 insque (db
, &dcache_free
);
830 /* Define the target subroutine names */
832 struct target_ops remote_ops
= {
833 "remote", "Remote serial target in gdb-specific protocol",
834 "Use a remote computer via a serial line, using a gdb-specific protocol.\n\
835 Specify the serial device it is connected to (e.g. /dev/ttya).",
836 remote_open
, remote_close
,
837 0, remote_detach
, remote_resume
, remote_wait
, /* attach */
838 remote_fetch_registers
, remote_store_registers
,
839 remote_prepare_to_store
, 0, 0, /* conv_from, conv_to */
840 remote_xfer_inferior_memory
, remote_files_info
,
841 0, 0, /* insert_breakpoint, remove_breakpoint, */
842 0, 0, 0, 0, 0, /* Terminal crud */
844 0, add_syms_addr_command
, /* load */
845 call_function_by_hand
,
846 0, /* lookup_symbol */
847 0, 0, /* create_inferior FIXME, mourn_inferior FIXME */
848 process_stratum
, 0, /* next */
849 1, 1, 1, 1, 1, /* all mem, mem, stack, regs, exec */
850 OPS_MAGIC
, /* Always the last thing */
854 _initialize_remote ()
856 add_target (&remote_ops
);