14734f161bdbc5239ccfb33d05a134612327362b
[external/binutils.git] / gdb / gdbserver / remote-utils.c
1 /* Remote utility routines for the remote server for GDB.
2    Copyright 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3    2002
4    Free Software Foundation, Inc.
5
6    This file is part of GDB.
7
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 2 of the License, or
11    (at your option) any later version.
12
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
22
23 #include "server.h"
24 #include "terminal.h"
25 #include <stdio.h>
26 #include <string.h>
27 #include <sys/ioctl.h>
28 #include <sys/file.h>
29 #include <netinet/in.h>
30 #include <sys/socket.h>
31 #include <netdb.h>
32 #include <netinet/tcp.h>
33 #include <sys/ioctl.h>
34 #include <signal.h>
35 #include <fcntl.h>
36 #include <sys/time.h>
37 #include <unistd.h>
38 #include <arpa/inet.h>
39
40 int remote_debug = 0;
41 struct ui_file *gdb_stdlog;
42
43 static int remote_desc;
44
45 /* Open a connection to a remote debugger.
46    NAME is the filename used for communication.  */
47
48 void
49 remote_open (char *name)
50 {
51   int save_fcntl_flags;
52   
53   if (!strchr (name, ':'))
54     {
55       remote_desc = open (name, O_RDWR);
56       if (remote_desc < 0)
57         perror_with_name ("Could not open remote device");
58
59 #ifdef HAVE_TERMIOS
60       {
61         struct termios termios;
62         tcgetattr (remote_desc, &termios);
63
64         termios.c_iflag = 0;
65         termios.c_oflag = 0;
66         termios.c_lflag = 0;
67         termios.c_cflag &= ~(CSIZE | PARENB);
68         termios.c_cflag |= CLOCAL | CS8;
69         termios.c_cc[VMIN] = 1;
70         termios.c_cc[VTIME] = 0;
71
72         tcsetattr (remote_desc, TCSANOW, &termios);
73       }
74 #endif
75
76 #ifdef HAVE_TERMIO
77       {
78         struct termio termio;
79         ioctl (remote_desc, TCGETA, &termio);
80
81         termio.c_iflag = 0;
82         termio.c_oflag = 0;
83         termio.c_lflag = 0;
84         termio.c_cflag &= ~(CSIZE | PARENB);
85         termio.c_cflag |= CLOCAL | CS8;
86         termio.c_cc[VMIN] = 1;
87         termio.c_cc[VTIME] = 0;
88
89         ioctl (remote_desc, TCSETA, &termio);
90       }
91 #endif
92
93 #ifdef HAVE_SGTTY
94       {
95         struct sgttyb sg;
96
97         ioctl (remote_desc, TIOCGETP, &sg);
98         sg.sg_flags = RAW;
99         ioctl (remote_desc, TIOCSETP, &sg);
100       }
101 #endif
102
103       fprintf (stderr, "Remote debugging using %s\n", name);
104     }
105   else
106     {
107       char *port_str;
108       int port;
109       struct sockaddr_in sockaddr;
110       int tmp;
111       int tmp_desc;
112
113       port_str = strchr (name, ':');
114
115       port = atoi (port_str + 1);
116
117       tmp_desc = socket (PF_INET, SOCK_STREAM, 0);
118       if (tmp_desc < 0)
119         perror_with_name ("Can't open socket");
120
121       /* Allow rapid reuse of this port. */
122       tmp = 1;
123       setsockopt (tmp_desc, SOL_SOCKET, SO_REUSEADDR, (char *) &tmp,
124                   sizeof (tmp));
125
126       sockaddr.sin_family = PF_INET;
127       sockaddr.sin_port = htons (port);
128       sockaddr.sin_addr.s_addr = INADDR_ANY;
129
130       if (bind (tmp_desc, (struct sockaddr *) &sockaddr, sizeof (sockaddr))
131           || listen (tmp_desc, 1))
132         perror_with_name ("Can't bind address");
133
134       tmp = sizeof (sockaddr);
135       remote_desc = accept (tmp_desc, (struct sockaddr *) &sockaddr, &tmp);
136       if (remote_desc == -1)
137         perror_with_name ("Accept failed");
138
139       /* Enable TCP keep alive process. */
140       tmp = 1;
141       setsockopt (tmp_desc, SOL_SOCKET, SO_KEEPALIVE, (char *) &tmp, sizeof (tmp));
142
143       /* Tell TCP not to delay small packets.  This greatly speeds up
144          interactive response. */
145       tmp = 1;
146       setsockopt (remote_desc, IPPROTO_TCP, TCP_NODELAY,
147                   (char *) &tmp, sizeof (tmp));
148
149       close (tmp_desc);         /* No longer need this */
150
151       signal (SIGPIPE, SIG_IGN);        /* If we don't do this, then gdbserver simply
152                                            exits when the remote side dies.  */
153
154       /* Convert IP address to string.  */
155       fprintf (stderr, "Remote debugging from host %s\n", 
156          inet_ntoa (sockaddr.sin_addr));
157     }
158
159 #if defined(F_SETFL) && defined (FASYNC)
160   save_fcntl_flags = fcntl (remote_desc, F_GETFL, 0);
161   fcntl (remote_desc, F_SETFL, save_fcntl_flags | FASYNC);
162 #if defined (F_SETOWN)
163   fcntl (remote_desc, F_SETOWN, getpid ());
164 #endif
165 #endif
166   disable_async_io ();
167 }
168
169 void
170 remote_close (void)
171 {
172   close (remote_desc);
173 }
174
175 /* Convert hex digit A to a number.  */
176
177 static int
178 fromhex (int a)
179 {
180   if (a >= '0' && a <= '9')
181     return a - '0';
182   else if (a >= 'a' && a <= 'f')
183     return a - 'a' + 10;
184   else
185     error ("Reply contains invalid hex digit");
186   return 0;
187 }
188
189 int
190 unhexify (char *bin, const char *hex, int count)
191 {
192   int i;
193
194   for (i = 0; i < count; i++)
195     {
196       if (hex[0] == 0 || hex[1] == 0)
197         {
198           /* Hex string is short, or of uneven length.
199              Return the count that has been converted so far. */
200           return i;
201         }
202       *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
203       hex += 2;
204     }
205   return i;
206 }
207
208 static void
209 decode_address (CORE_ADDR *addrp, const char *start, int len)
210 {
211   CORE_ADDR addr;
212   char ch;
213   int i;
214
215   addr = 0;
216   for (i = 0; i < len; i++)
217     {
218       ch = start[i];
219       addr = addr << 4;
220       addr = addr | (fromhex (ch) & 0x0f);
221     }
222   *addrp = addr;
223 }
224
225 /* Convert number NIB to a hex digit.  */
226
227 static int
228 tohex (int nib)
229 {
230   if (nib < 10)
231     return '0' + nib;
232   else
233     return 'a' + nib - 10;
234 }
235
236 int
237 hexify (char *hex, const char *bin, int count)
238 {
239   int i;
240
241   /* May use a length, or a nul-terminated string as input. */
242   if (count == 0)
243     count = strlen (bin);
244
245   for (i = 0; i < count; i++)
246     {
247       *hex++ = tohex ((*bin >> 4) & 0xf);
248       *hex++ = tohex (*bin++ & 0xf);
249     }
250   *hex = 0;
251   return i;
252 }
253
254 /* Send a packet to the remote machine, with error checking.
255    The data of the packet is in BUF.  Returns >= 0 on success, -1 otherwise. */
256
257 int
258 putpkt (char *buf)
259 {
260   int i;
261   unsigned char csum = 0;
262   char *buf2;
263   char buf3[1];
264   int cnt = strlen (buf);
265   char *p;
266
267   buf2 = malloc (PBUFSIZ);
268
269   /* Copy the packet into buffer BUF2, encapsulating it
270      and giving it a checksum.  */
271
272   p = buf2;
273   *p++ = '$';
274
275   for (i = 0; i < cnt; i++)
276     {
277       csum += buf[i];
278       *p++ = buf[i];
279     }
280   *p++ = '#';
281   *p++ = tohex ((csum >> 4) & 0xf);
282   *p++ = tohex (csum & 0xf);
283
284   *p = '\0';
285
286   /* Send it over and over until we get a positive ack.  */
287
288   do
289     {
290       int cc;
291
292       if (write (remote_desc, buf2, p - buf2) != p - buf2)
293         {
294           perror ("putpkt(write)");
295           return -1;
296         }
297
298       if (remote_debug)
299         printf ("putpkt (\"%s\"); [looking for ack]\n", buf2);
300       cc = read (remote_desc, buf3, 1);
301       if (remote_debug)
302         printf ("[received '%c' (0x%x)]\n", buf3[0], buf3[0]);
303       if (cc <= 0)
304         {
305           if (cc == 0)
306             fprintf (stderr, "putpkt(read): Got EOF\n");
307           else
308             perror ("putpkt(read)");
309
310           free (buf2);
311           return -1;
312         }
313     }
314   while (buf3[0] != '+');
315
316   free (buf2);
317   return 1;                     /* Success! */
318 }
319
320 /* Come here when we get an input interrupt from the remote side.  This
321    interrupt should only be active while we are waiting for the child to do
322    something.  About the only thing that should come through is a ^C, which
323    will cause us to send a SIGINT to the child.  */
324
325 static void
326 input_interrupt (int unused)
327 {
328   fd_set readset;
329   struct timeval immediate = { 0, 0 };
330
331   /* Protect against spurious interrupts.  This has been observed to
332      be a problem under NetBSD 1.4 and 1.5.  */
333
334   FD_ZERO (&readset);
335   FD_SET (remote_desc, &readset);
336   if (select (remote_desc + 1, &readset, 0, 0, &immediate) > 0)
337     {
338       int cc;
339       char c;
340       
341       cc = read (remote_desc, &c, 1);
342
343       if (cc != 1 || c != '\003')
344         {
345           fprintf (stderr, "input_interrupt, cc = %d c = %d\n", cc, c);
346           return;
347         }
348       
349       kill (signal_pid, SIGINT);
350     }
351 }
352
353 void
354 enable_async_io (void)
355 {
356   signal (SIGIO, input_interrupt);
357 }
358
359 void
360 disable_async_io (void)
361 {
362   signal (SIGIO, SIG_IGN);
363 }
364
365 /* Returns next char from remote GDB.  -1 if error.  */
366
367 static int
368 readchar (void)
369 {
370   static char buf[BUFSIZ];
371   static int bufcnt = 0;
372   static char *bufp;
373
374   if (bufcnt-- > 0)
375     return *bufp++ & 0x7f;
376
377   bufcnt = read (remote_desc, buf, sizeof (buf));
378
379   if (bufcnt <= 0)
380     {
381       if (bufcnt == 0)
382         fprintf (stderr, "readchar: Got EOF\n");
383       else
384         perror ("readchar");
385
386       return -1;
387     }
388
389   bufp = buf;
390   bufcnt--;
391   return *bufp++ & 0x7f;
392 }
393
394 /* Read a packet from the remote machine, with error checking,
395    and store it in BUF.  Returns length of packet, or negative if error. */
396
397 int
398 getpkt (char *buf)
399 {
400   char *bp;
401   unsigned char csum, c1, c2;
402   int c;
403
404   while (1)
405     {
406       csum = 0;
407
408       while (1)
409         {
410           c = readchar ();
411           if (c == '$')
412             break;
413           if (remote_debug)
414             printf ("[getpkt: discarding char '%c']\n", c);
415           if (c < 0)
416             return -1;
417         }
418
419       bp = buf;
420       while (1)
421         {
422           c = readchar ();
423           if (c < 0)
424             return -1;
425           if (c == '#')
426             break;
427           *bp++ = c;
428           csum += c;
429         }
430       *bp = 0;
431
432       c1 = fromhex (readchar ());
433       c2 = fromhex (readchar ());
434
435       if (csum == (c1 << 4) + c2)
436         break;
437
438       fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
439                (c1 << 4) + c2, csum, buf);
440       write (remote_desc, "-", 1);
441     }
442
443   if (remote_debug)
444     printf ("getpkt (\"%s\");  [sending ack] \n", buf);
445
446   write (remote_desc, "+", 1);
447
448   if (remote_debug)
449     printf ("[sent ack]\n");
450   return bp - buf;
451 }
452
453 void
454 write_ok (char *buf)
455 {
456   buf[0] = 'O';
457   buf[1] = 'K';
458   buf[2] = '\0';
459 }
460
461 void
462 write_enn (char *buf)
463 {
464   buf[0] = 'E';
465   buf[1] = 'N';
466   buf[2] = 'N';
467   buf[3] = '\0';
468 }
469
470 void
471 convert_int_to_ascii (char *from, char *to, int n)
472 {
473   int nib;
474   char ch;
475   while (n--)
476     {
477       ch = *from++;
478       nib = ((ch & 0xf0) >> 4) & 0x0f;
479       *to++ = tohex (nib);
480       nib = ch & 0x0f;
481       *to++ = tohex (nib);
482     }
483   *to++ = 0;
484 }
485
486
487 void
488 convert_ascii_to_int (char *from, char *to, int n)
489 {
490   int nib1, nib2;
491   while (n--)
492     {
493       nib1 = fromhex (*from++);
494       nib2 = fromhex (*from++);
495       *to++ = (((nib1 & 0x0f) << 4) & 0xf0) | (nib2 & 0x0f);
496     }
497 }
498
499 static char *
500 outreg (int regno, char *buf)
501 {
502   int regsize = register_size (regno);
503
504   if ((regno >> 12) != 0)
505     *buf++ = tohex ((regno >> 12) & 0xf);
506   if ((regno >> 8) != 0)
507     *buf++ = tohex ((regno >> 8) & 0xf);
508   *buf++ = tohex ((regno >> 4) & 0xf);
509   *buf++ = tohex (regno & 0xf);
510   *buf++ = ':';
511   convert_int_to_ascii (register_data (regno), buf, regsize);
512   buf += 2 * regsize;
513   *buf++ = ';';
514
515   return buf;
516 }
517
518 void
519 prepare_resume_reply (char *buf, char status, unsigned char signo)
520 {
521   int nib, sig;
522
523   *buf++ = status;
524
525   sig = (int)target_signal_from_host (signo);
526
527   nib = ((sig & 0xf0) >> 4);
528   *buf++ = tohex (nib);
529   nib = sig & 0x0f;
530   *buf++ = tohex (nib);
531
532   if (status == 'T')
533     {
534       const char **regp = gdbserver_expedite_regs;
535       while (*regp)
536         {
537           buf = outreg (find_regno (*regp), buf);
538           regp ++;
539         }
540
541       /* If the debugger hasn't used any thread features, don't burden it with
542          threads.  If we didn't check this, GDB 4.13 and older would choke.  */
543       if (cont_thread != 0)
544         {
545           if (old_thread_from_wait != thread_from_wait)
546             {
547               sprintf (buf, "thread:%x;", thread_from_wait);
548               buf += strlen (buf);
549               old_thread_from_wait = thread_from_wait;
550             }
551         }
552     }
553   /* For W and X, we're done.  */
554   *buf++ = 0;
555 }
556
557 void
558 decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
559 {
560   int i = 0, j = 0;
561   char ch;
562   *mem_addr_ptr = *len_ptr = 0;
563
564   while ((ch = from[i++]) != ',')
565     {
566       *mem_addr_ptr = *mem_addr_ptr << 4;
567       *mem_addr_ptr |= fromhex (ch) & 0x0f;
568     }
569
570   for (j = 0; j < 4; j++)
571     {
572       if ((ch = from[i++]) == 0)
573         break;
574       *len_ptr = *len_ptr << 4;
575       *len_ptr |= fromhex (ch) & 0x0f;
576     }
577 }
578
579 void
580 decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
581                  char *to)
582 {
583   int i = 0;
584   char ch;
585   *mem_addr_ptr = *len_ptr = 0;
586
587   while ((ch = from[i++]) != ',')
588     {
589       *mem_addr_ptr = *mem_addr_ptr << 4;
590       *mem_addr_ptr |= fromhex (ch) & 0x0f;
591     }
592
593   while ((ch = from[i++]) != ':')
594     {
595       *len_ptr = *len_ptr << 4;
596       *len_ptr |= fromhex (ch) & 0x0f;
597     }
598
599   convert_ascii_to_int (&from[i++], to, *len_ptr);
600 }
601
602 int
603 look_up_one_symbol (const char *name, CORE_ADDR *addrp)
604 {
605   char own_buf[266], *p, *q;
606   int len;
607
608   /* Send the request.  */
609   strcpy (own_buf, "qSymbol:");
610   hexify (own_buf + strlen ("qSymbol:"), name, strlen (name));
611   if (putpkt (own_buf) < 0)
612     return -1;
613
614   /* FIXME:  Eventually add buffer overflow checking (to getpkt?)  */
615   len = getpkt (own_buf);
616   if (len < 0)
617     return -1;
618
619   if (strncmp (own_buf, "qSymbol:", strlen ("qSymbol:")) != 0)
620     {
621       /* Malformed response.  */
622       if (remote_debug)
623         fprintf (stderr, "Malformed response to qSymbol, ignoring.\n");
624       return -1;
625     }
626
627   p = own_buf + strlen ("qSymbol:");
628   q = p;
629   while (*q && *q != ':')
630     q++;
631
632   /* Make sure we found a value for the symbol.  */
633   if (p == q || *q == '\0')
634     return 0;
635
636   decode_address (addrp, p, q - p);
637   return 1;
638 }
639