• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Remote utility routines for the remote server for GDB.
2    Copyright (C) 1986, 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
3    2001, 2002, 2003, 2004, 2005, 2006, 2011
4    Free Software Foundation, Inc.
5 
6    This file is part of GDB.
7    It has been modified to integrate it in valgrind
8 
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 2 of the License, or
12    (at your option) any later version.
13 
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18 
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 51 Franklin Street, Fifth Floor,
22    Boston, MA 02110-1301, USA.  */
23 
24 #include "pub_core_basics.h"
25 #include "pub_core_vki.h"
26 #include "pub_core_vkiscnums.h"
27 #include "pub_core_libcsignal.h"
28 #include "pub_core_options.h"
29 
30 #include "server.h"
31 
32 #  if defined(VGO_linux)
33 #include <sys/prctl.h>
34 #  endif
35 
36 /* Calls sr_perror with msg.
37    Outputs more information about Valgrind state if verbosity > 0
38    or debuglog_getlevel > 0. */
39 static
sr_extended_perror(SysRes sr,const HChar * msg)40 void sr_extended_perror (SysRes sr, const HChar *msg)
41 {
42    sr_perror (sr, "%s", msg);
43    if (VG_(clo_verbosity) > 0 || VG_(debugLog_getLevel)() >= 1) {
44       Int i;
45       vki_sigset_t cursigset;
46       VG_(show_sched_status) (True,  // host_stacktrace
47                               True,  // valgrind_stack_usage
48                               True); // exited_threads
49       VG_(sigprocmask) (0,           // dummy how.
50                         NULL,        // do not change the sigmask
51                         &cursigset); //
52       VG_(dmsg)("current sigmask value { ");
53       for (i = 1; i <= _VKI_NSIG; i++) {
54          if (VG_(sigismember)(&cursigset, i))
55             VG_(dmsg)("%u ", i);
56       }
57       VG_(dmsg)("}\n");
58    }
59 }
60 
61 /* Calls VG_(poll) with given arguments. If VG_(poll) fails due to EINTR,
62    restarts the syscall.
63    Normally, VG_(poll) gdbsrv syscalls are not supposed to be interrupted :
64      either gdbsrv has been called by the scheduler (so all async signals
65      are masked)
66      or gdbsrv has been forced invoked by vgdb+ptrace, and vgdb is queuing
67      the signals.
68 
69    However, on old kernels (such as on RHEL5.5 2.6.18), when vgdb+ptrace
70    intercepts and queues an async signal, the poll syscall is not properly
71    restarted. Instead, it returns EINTR even if no signal was effectively
72    received by the ptraced process.
73    See red-hat "Bug 679129 - Change in behaviour between RH5.5 and RH6
74    with ptrace and syscalls bugzilla"
75    e.g. "Why rhel5 differs? Because unlike in rhel6, sys_poll() returns
76          -EINTR if interrupted, that is all. This old implementation does
77          not support the restart-if-eintr-is-spurious."
78 
79    So in case VG_(poll) fails with EINTR, we retry. */
VG_(poll_no_eintr)80 static SysRes VG_(poll_no_eintr) (struct vki_pollfd *fds, Int nfds, Int timeout)
81 {
82   const HChar* msg = "VG_(poll) failed (old kernel ?) retrying ... \n";
83   SysRes sr;
84   do {
85      sr = VG_(poll) (fds, nfds, timeout);
86      if (!sr_isError(sr) || sr_Err(sr) != VKI_EINTR)
87         return sr;
88      sr_perror (sr, "%s", msg);
89      if (VG_(debugLog_getLevel)() >= 1) {
90         sr_extended_perror (sr, msg);
91      }
92   } while (1);
93   /*NOTREACHED*/
94 }
95 
96 Bool noack_mode;
97 
98 static int readchar (int single);
99 
100 void remote_utils_output_status(void);
101 
102 #define INVALID_DESCRIPTOR -1
103 static int remote_desc = INVALID_DESCRIPTOR;
104 
105 static VgdbShared *shared;
106 static int  last_looked_cntr = -1;
107 static struct vki_pollfd remote_desc_pollfdread_activity;
108 
109 /* for a gdbserver embedded in valgrind, we read from a FIFO and write
110    to another FIFO So, we need two descriptors */
111 static int write_remote_desc = INVALID_DESCRIPTOR;
112 static int pid_from_to_creator;
113 /* only this pid will remove the FIFOs: if an exec fails, we must avoid
114    that the exiting child believes it has to remove the FIFOs of its parent */
115 static int mknod_done = 0;
116 
117 static char *from_gdb = NULL;
118 static char *to_gdb = NULL;
119 static char *shared_mem = NULL;
120 
121 static
open_fifo(const char * side,const char * path,int flags)122 int open_fifo (const char *side, const char *path, int flags)
123 {
124   SysRes o;
125   int fd;
126   dlog(1, "Opening %s side %s\n", side, path);
127   o = VG_(open) (path, flags, 0);
128   if (sr_isError (o)) {
129      sr_perror(o, "open fifo %s\n", path);
130      fatal ("valgrind: fatal error: vgdb FIFO cannot be opened.\n");
131   } else {
132      fd = sr_Res(o);
133      dlog(1, "result fd %d\n", fd);
134   }
135   fd = VG_(safe_fd)(fd);
136   dlog(1, "result safe_fd %d\n", fd);
137   if (fd == -1)
138      fatal("safe_fd for vgdb FIFO failed\n");
139   return fd;
140 }
141 
remote_utils_output_status(void)142 void remote_utils_output_status(void)
143 {
144    if (shared == NULL)
145       VG_(umsg)("remote communication not initialized\n");
146    else
147       VG_(umsg)("shared->written_by_vgdb %d shared->seen_by_valgrind %d\n",
148                 shared->written_by_vgdb, shared->seen_by_valgrind);
149 }
150 
151 /* Returns 0 if vgdb and connection state looks good,
152    otherwise returns an int value telling which check failed. */
153 static
vgdb_state_looks_bad(const char * where)154 int vgdb_state_looks_bad(const char* where)
155 {
156    if (VG_(kill)(shared->vgdb_pid, 0) != 0)
157       return 1; // vgdb process does not exist anymore.
158 
159    if (remote_desc_activity(where) == 2)
160       return 2; // check for error on remote desc shows a problem
161 
162    if (remote_desc == INVALID_DESCRIPTOR)
163       return 3; // after check, remote_desc not ok anymore
164 
165    return 0; // all is ok.
166 }
167 
VG_(set_ptracer)168 void VG_(set_ptracer)(void)
169 {
170 #ifdef PR_SET_PTRACER
171    SysRes o;
172    const char *ptrace_scope_setting_file = "/proc/sys/kernel/yama/ptrace_scope";
173    int fd;
174    char ptrace_scope;
175    int ret;
176 
177    o = VG_(open) (ptrace_scope_setting_file, VKI_O_RDONLY, 0);
178    if (sr_isError(o)) {
179       if (VG_(debugLog_getLevel)() >= 1) {
180          sr_perror(o, "error VG_(open) %s\n", ptrace_scope_setting_file);
181       }
182       /* can't read setting. Assuming ptrace can be called by vgdb. */
183       return;
184    }
185    fd = sr_Res(o);
186    if (VG_(read) (fd, &ptrace_scope, 1) == 1) {
187       dlog(1, "ptrace_scope %c\n", ptrace_scope);
188       if (ptrace_scope != '0') {
189          /* insufficient default ptrace_scope.
190             Indicate to the kernel that we accept to be ptraced. */
191 #ifdef PR_SET_PTRACER_ANY
192          ret = VG_(prctl) (PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0);
193          dlog(1, "set_ptracer to PR_SET_PTRACER_ANY result %d\n", ret);
194 #else
195          ret = VG_(prctl) (PR_SET_PTRACER, 1, 0, 0, 0);
196          dlog(1, "set_ptracer to 1 result %d\n", ret);
197 #endif
198          if (ret)
199             VG_(umsg)("error calling PR_SET_PTRACER, vgdb might block\n");
200       }
201    } else {
202       dlog(0, "Could not read the ptrace_scope setting from %s\n",
203            ptrace_scope_setting_file);
204    }
205 
206    VG_(close) (fd);
207 #endif
208 }
209 
210 /* returns 1 if one or more poll "errors" is set.
211    Errors are: VKI_POLLERR or VKI_POLLHUP or VKI_POLLNAL */
212 static
poll_cond(short revents)213 int poll_cond (short revents)
214 {
215    return (revents & (VKI_POLLERR | VKI_POLLHUP | VKI_POLLNVAL));
216 }
217 
218 /* Ensures we have a valid write file descriptor.
219    Returns 1 if we have a valid write file descriptor,
220    0 if the write fd is not valid/cannot be opened. */
221 static
ensure_write_remote_desc(void)222 int ensure_write_remote_desc(void)
223 {
224    struct vki_pollfd write_remote_desc_ok;
225    SysRes ret;
226    if (write_remote_desc != INVALID_DESCRIPTOR) {
227       write_remote_desc_ok.fd = write_remote_desc;
228       write_remote_desc_ok.events = VKI_POLLOUT;
229       write_remote_desc_ok.revents = 0;
230       ret = VG_(poll_no_eintr)(&write_remote_desc_ok, 1, 0);
231       if (sr_isError(ret)
232           || (sr_Res(ret) > 0 && poll_cond(write_remote_desc_ok.revents))) {
233         if (sr_isError(ret)) {
234           sr_extended_perror(ret, "ensure_write_remote_desc: poll error\n");
235         } else {
236           dlog(0, "POLLcond %d closing write_remote_desc %d\n",
237                write_remote_desc_ok.revents, write_remote_desc);
238         }
239         VG_(close) (write_remote_desc);
240         write_remote_desc = INVALID_DESCRIPTOR;
241       }
242    }
243    if (write_remote_desc == INVALID_DESCRIPTOR) {
244       /* open_fifo write will block if the receiving vgdb
245          process is dead.  So, let's check for vgdb state to
246          be reasonably sure someone is reading on the other
247          side of the fifo. */
248       if (!vgdb_state_looks_bad("bad?@ensure_write_remote_desc")) {
249          write_remote_desc = open_fifo ("write", to_gdb, VKI_O_WRONLY);
250       }
251    }
252 
253    return (write_remote_desc != INVALID_DESCRIPTOR);
254 }
255 
256 #if defined(VGO_darwin)
257 #define VKI_S_IFIFO 0010000
258 #endif
259 static
safe_mknod(char * nod)260 void safe_mknod (char *nod)
261 {
262    SysRes m;
263    m = VG_(mknod) (nod, VKI_S_IFIFO|0600, 0);
264    if (sr_isError (m)) {
265       if (sr_Err (m) == VKI_EEXIST) {
266          if (VG_(clo_verbosity) > 1) {
267             VG_(umsg)("%s already created\n", nod);
268          }
269       } else {
270          sr_perror(m, "mknod %s\n", nod);
271          VG_(umsg) ("valgrind: fatal error: vgdb FIFOs cannot be created.\n");
272          VG_(exit)(1);
273       }
274    }
275 }
276 
277 /* Open a connection to a remote debugger.
278    NAME is the filename used for communication.
279    For Valgrind, name is the prefix for the two read and write FIFOs
280    The two FIFOs names will be build by appending
281    -from-vgdb-to-pid-by-user-on-host and -to-vgdb-from-pid-by-user-on-host
282    with pid being the pidnr of the valgrind process These two FIFOs
283    will be created if not existing yet. They will be removed when
284    the gdbserver connection is closed or the process exits */
285 
remote_open(const HChar * name)286 void remote_open (const HChar *name)
287 {
288    const HChar *user, *host;
289    int save_fcntl_flags, len;
290    VgdbShared vgdbinit =
291       {0, 0, (Addr) VG_(invoke_gdbserver),
292        (Addr) VG_(threads), sizeof(ThreadState),
293        offsetof(ThreadState, status),
294        offsetof(ThreadState, os_state) + offsetof(ThreadOSstate, lwpid),
295        0};
296    const int pid = VG_(getpid)();
297    Addr addr_shared;
298    SysRes o;
299    int shared_mem_fd = INVALID_DESCRIPTOR;
300 
301    user = VG_(getenv)("LOGNAME");
302    if (user == NULL) user = VG_(getenv)("USER");
303    if (user == NULL) user = "???";
304 
305    host = VG_(getenv)("HOST");
306    if (host == NULL) host = VG_(getenv)("HOSTNAME");
307    if (host == NULL) host = "???";
308 
309    len = strlen(name) + strlen(user) + strlen(host) + 40;
310 
311    if (from_gdb != NULL)
312       free (from_gdb);
313    from_gdb = malloc (len);
314    if (to_gdb != NULL)
315       free (to_gdb);
316    to_gdb = malloc (len);
317    if (shared_mem != NULL)
318       free (shared_mem);
319    shared_mem = malloc (len);
320    /* below 3 lines must match the equivalent in vgdb.c */
321    VG_(sprintf) (from_gdb,   "%s-from-vgdb-to-%d-by-%s-on-%s",    name,
322                  pid, user, host);
323    VG_(sprintf) (to_gdb,     "%s-to-vgdb-from-%d-by-%s-on-%s",    name,
324                  pid, user, host);
325    VG_(sprintf) (shared_mem, "%s-shared-mem-vgdb-%d-by-%s-on-%s", name,
326                  pid, user, host);
327    if (VG_(clo_verbosity) > 1) {
328       VG_(umsg)("embedded gdbserver: reading from %s\n", from_gdb);
329       VG_(umsg)("embedded gdbserver: writing to   %s\n", to_gdb);
330       VG_(umsg)("embedded gdbserver: shared mem   %s\n", shared_mem);
331       VG_(umsg)("\n");
332       VG_(umsg)("TO CONTROL THIS PROCESS USING vgdb (which you probably\n"
333                 "don't want to do, unless you know exactly what you're doing,\n"
334                 "or are doing some strange experiment):\n"
335                 "  %s/../../bin/vgdb%s%s --pid=%d ...command...\n",
336                 VG_(libdir),
337                 (VG_(arg_vgdb_prefix) ? " " : ""),
338                 (VG_(arg_vgdb_prefix) ? VG_(arg_vgdb_prefix) : ""),
339                 pid);
340    }
341    if (VG_(clo_verbosity) > 1
342        || VG_(clo_vgdb_error) < 999999999
343        || VG_(clo_vgdb_stop_at) != 0) {
344       VG_(umsg)("\n");
345       VG_(umsg)(
346          "TO DEBUG THIS PROCESS USING GDB: start GDB like this\n"
347          "  /path/to/gdb %s\n"
348          "and then give GDB the following command\n"
349          "  target remote | %s/../../bin/vgdb%s%s --pid=%d\n",
350          VG_(args_the_exename),
351          VG_(libdir),
352          (VG_(arg_vgdb_prefix) ? " " : ""),
353          (VG_(arg_vgdb_prefix) ? VG_(arg_vgdb_prefix) : ""),
354          pid
355       );
356       VG_(umsg)("--pid is optional if only one valgrind process is running\n");
357       VG_(umsg)("\n");
358    }
359 
360    if (!mknod_done) {
361       mknod_done++;
362       VG_(set_ptracer)();
363       /*
364        * Unlink just in case a previous process with the same PID had been
365        * killed and hence Valgrind hasn't had the chance yet to remove these.
366        */
367       VG_(unlink)(from_gdb);
368       VG_(unlink)(to_gdb);
369       VG_(unlink)(shared_mem);
370 
371       safe_mknod(from_gdb);
372       safe_mknod(to_gdb);
373 
374       pid_from_to_creator = pid;
375 
376       o = VG_(open) (shared_mem, VKI_O_CREAT|VKI_O_RDWR, 0600);
377       if (sr_isError (o)) {
378          sr_perror(o, "cannot create shared_mem file %s\n", shared_mem);
379          fatal("");
380       } else {
381          shared_mem_fd = sr_Res(o);
382       }
383 
384       if (VG_(write)(shared_mem_fd, &vgdbinit, sizeof(VgdbShared))
385           != sizeof(VgdbShared)) {
386          fatal("error writing %d bytes to shared mem %s\n",
387                (int) sizeof(VgdbShared), shared_mem);
388       }
389       {
390          SysRes res = VG_(am_shared_mmap_file_float_valgrind)
391             (sizeof(VgdbShared), VKI_PROT_READ|VKI_PROT_WRITE,
392              shared_mem_fd, (Off64T)0);
393          if (sr_isError(res)) {
394             sr_perror(res, "error VG_(am_shared_mmap_file_float_valgrind) %s\n",
395                       shared_mem);
396             fatal("");
397          }
398          addr_shared = sr_Res (res);
399       }
400       shared = (VgdbShared*) addr_shared;
401       VG_(close) (shared_mem_fd);
402    }
403 
404    if (remote_desc == INVALID_DESCRIPTOR) {
405       /* we open the read side FIFO in non blocking mode
406          We then set the fd in blocking mode.
407          Opening in non-blocking read mode always succeeds while opening
408          in non-blocking write mode succeeds only if the fifo is already
409          opened in read mode. So, we wait till we have read the first
410          character from the read side before opening the write side. */
411       remote_desc = open_fifo ("read", from_gdb, VKI_O_RDONLY|VKI_O_NONBLOCK);
412       save_fcntl_flags = VG_(fcntl) (remote_desc, VKI_F_GETFL, 0);
413       VG_(fcntl) (remote_desc, VKI_F_SETFL, save_fcntl_flags & ~VKI_O_NONBLOCK);
414    }
415    remote_desc_pollfdread_activity.fd = remote_desc;
416    remote_desc_pollfdread_activity.events = VKI_POLLIN;
417    remote_desc_pollfdread_activity.revents = 0;
418 }
419 
420 /* sync_gdb_connection wait a time long enough to let the connection
421    be properly closed if needed when closing the connection (in case
422    of detach or error), if we reopen it too quickly, it seems there
423    are some events queued in the kernel concerning the "old"
424    connection/remote_desc which are discovered with poll or select on
425    the "new" connection/remote_desc.  We bypass this by waiting some
426    time to let a proper cleanup to be donex */
sync_gdb_connection(void)427 void sync_gdb_connection(void)
428 {
429    SysRes ret;
430    ret = VG_(poll_no_eintr)(0, 0, 100);
431    if (sr_isError(ret))
432       sr_extended_perror(ret, "sync_gdb_connection: poll error\n");
433 }
434 
435 static
ppFinishReason(FinishReason reason)436 const char * ppFinishReason (FinishReason reason)
437 {
438    switch (reason) {
439    case orderly_finish:    return "orderly_finish";
440    case reset_after_error: return "reset_after_error";
441    case reset_after_fork:  return "reset_after_fork";
442    default: vg_assert (0);
443    }
444 }
445 
remote_finish(FinishReason reason)446 void remote_finish (FinishReason reason)
447 {
448    dlog(1, "remote_finish (reason %s) %d %d\n",
449         ppFinishReason(reason), remote_desc, write_remote_desc);
450    reset_valgrind_sink(ppFinishReason(reason));
451    if (write_remote_desc != INVALID_DESCRIPTOR)
452       VG_(close) (write_remote_desc);
453    write_remote_desc = INVALID_DESCRIPTOR;
454 
455    if (remote_desc != INVALID_DESCRIPTOR && reason != reset_after_error) {
456       /* Fully close the connection, either due to orderly_finish or
457          to reset_after_fork.
458          For reset_after_error, keep the reading side opened, to always be
459          ready to accept new vgdb connection. */
460       vg_assert (reason == reset_after_fork || reason == orderly_finish);
461       remote_desc_pollfdread_activity.fd = INVALID_DESCRIPTOR;
462       remote_desc_pollfdread_activity.events = 0;
463       remote_desc_pollfdread_activity.revents = 0;
464       VG_(close) (remote_desc);
465       remote_desc = INVALID_DESCRIPTOR;
466    }
467    noack_mode = False;
468 
469    /* ensure the child will create its own FIFOs */
470    if (reason == reset_after_fork)
471       mknod_done = 0;
472 
473    if (reason == reset_after_error)
474       sync_gdb_connection();
475 }
476 
477 /* orderly close, cleans up everything */
remote_close(void)478 void remote_close (void)
479 {
480    const int pid = VG_(getpid)();
481    remote_finish(orderly_finish);
482    dlog(1, "%d (creator %d) maybe unlinking \n    %s\n    %s\n    %s\n",
483         pid, pid_from_to_creator,
484         from_gdb ? from_gdb : "NULL",
485         to_gdb ? to_gdb : "NULL",
486         shared_mem ? shared_mem : "NULL");
487    if (pid == pid_from_to_creator && from_gdb && VG_(unlink) (from_gdb) == -1)
488       warning ("could not unlink %s\n", from_gdb);
489    if (pid == pid_from_to_creator && to_gdb && VG_(unlink) (to_gdb) == -1)
490       warning ("could not unlink %s\n", to_gdb);
491    if (pid == pid_from_to_creator && shared_mem && VG_(unlink) (shared_mem) == -1)
492       warning ("could not unlink %s\n", shared_mem);
493    free (from_gdb);
494    from_gdb = NULL;
495    free (to_gdb);
496    to_gdb = NULL;
497    free (shared_mem);
498    shared_mem = NULL;
499 }
500 
remote_connected(void)501 Bool remote_connected(void)
502 {
503    return write_remote_desc != INVALID_DESCRIPTOR;
504 }
505 
506 /* cleanup after an error detected by poll_cond */
507 static
error_poll_cond(void)508 void error_poll_cond(void)
509 {
510    /* if we will close the connection, we assume either that
511       all characters have been seen or that they will be dropped. */
512    shared->seen_by_valgrind = shared->written_by_vgdb;
513    remote_finish(reset_after_error);
514 }
515 
516 /* remote_desc_activity might be used at high frequency if the user
517    gives a small value to --vgdb-poll. So, the function avoids
518    doing repetitively system calls by rather looking at the
519    counter values maintained in shared memory by vgdb. */
remote_desc_activity(const char * msg)520 int remote_desc_activity(const char *msg)
521 {
522    int retval;
523    SysRes ret;
524    const int looking_at = shared->written_by_vgdb;
525    if (shared->seen_by_valgrind == looking_at)
526       return 0;
527    if (remote_desc == INVALID_DESCRIPTOR)
528       return 0;
529 
530    /* poll the remote desc */
531    remote_desc_pollfdread_activity.revents = 0;
532    ret = VG_(poll_no_eintr) (&remote_desc_pollfdread_activity, 1, 0);
533    if (sr_isError(ret)
534        || (sr_Res(ret) && poll_cond(remote_desc_pollfdread_activity.revents))) {
535      if (sr_isError(ret)) {
536        sr_extended_perror(ret, "remote_desc_activity: poll error\n");
537      } else {
538        dlog(0, "POLLcond %d remote_desc_pollfdread %d\n",
539             remote_desc_pollfdread_activity.revents, remote_desc);
540        error_poll_cond();
541      }
542      retval = 2;
543    } else {
544      retval = sr_Res(ret);
545    }
546    dlog(1,
547         "remote_desc_activity %s %d last_looked_cntr %d looking_at %d"
548         " shared->written_by_vgdb %d shared->seen_by_valgrind %d"
549         " retval %d\n",
550         msg, remote_desc, last_looked_cntr, looking_at,
551         shared->written_by_vgdb, shared->seen_by_valgrind,
552         retval);
553    /* if no error from poll, indicate we have "seen" up to looking_at */
554    if (retval == 1)
555       last_looked_cntr = looking_at;
556    return retval;
557 }
558 
559 /* Convert hex digit A to a number.  */
560 
561 static
fromhex(int a)562 int fromhex (int a)
563 {
564    if (a >= '0' && a <= '9')
565       return a - '0';
566    else if (a >= 'a' && a <= 'f')
567       return a - 'a' + 10;
568    else
569       error ("Reply contains invalid hex digit 0x%x\n", a);
570    return 0;
571 }
572 
unhexify(char * bin,const char * hex,int count)573 int unhexify (char *bin, const char *hex, int count)
574 {
575    int i;
576 
577    for (i = 0; i < count; i++) {
578       if (hex[0] == 0 || hex[1] == 0) {
579          /* Hex string is short, or of uneven length.
580             Return the count that has been converted so far. */
581          return i;
582       }
583       *bin++ = fromhex (hex[0]) * 16 + fromhex (hex[1]);
584       hex += 2;
585    }
586    return i;
587 }
588 
decode_address(CORE_ADDR * addrp,const char * start,int len)589 void decode_address (CORE_ADDR *addrp, const char *start, int len)
590 {
591    CORE_ADDR addr;
592    char ch;
593    int i;
594 
595    addr = 0;
596    for (i = 0; i < len; i++) {
597       ch = start[i];
598       addr = addr << 4;
599       addr = addr | (fromhex (ch) & 0x0f);
600    }
601    *addrp = addr;
602 }
603 
604 /* Convert number NIB to a hex digit.  */
605 
606 static
tohex(int nib)607 int tohex (int nib)
608 {
609    if (nib < 10)
610       return '0' + nib;
611    else
612       return 'a' + nib - 10;
613 }
614 
hexify(char * hex,const char * bin,int count)615 int hexify (char *hex, const char *bin, int count)
616 {
617    int i;
618 
619    /* May use a length, or a nul-terminated string as input. */
620    if (count == 0)
621       count = strlen (bin);
622 
623   for (i = 0; i < count; i++) {
624      *hex++ = tohex ((*bin >> 4) & 0xf);
625      *hex++ = tohex (*bin++ & 0xf);
626   }
627   *hex = 0;
628   return i;
629 }
630 
631 /* builds an image of bin according to byte order of the architecture
632    Useful for register and int image */
heximage(char * buf,char * bin,int count)633 char* heximage (char *buf, char *bin, int count)
634 {
635 #if defined(VGA_x86) || defined(VGA_amd64)
636    char rev[count];
637    /* note: no need for trailing \0, length is known with count */
638   int i;
639   for (i = 0; i < count; i++)
640     rev[i] = bin[count - i - 1];
641   hexify (buf, rev, count);
642 #else
643   hexify (buf, bin, count);
644 #endif
645   return buf;
646 }
647 
C2v(CORE_ADDR addr)648 void* C2v(CORE_ADDR addr)
649 {
650    return (void*) addr;
651 }
652 
653 
654 /* Convert BUFFER, binary data at least LEN bytes long, into escaped
655    binary data in OUT_BUF.  Set *OUT_LEN to the length of the data
656    encoded in OUT_BUF, and return the number of bytes in OUT_BUF
657    (which may be more than *OUT_LEN due to escape characters).  The
658    total number of bytes in the output buffer will be at most
659    OUT_MAXLEN.  */
660 
661 int
remote_escape_output(const gdb_byte * buffer,int len,gdb_byte * out_buf,int * out_len,int out_maxlen)662 remote_escape_output (const gdb_byte *buffer, int len,
663 		      gdb_byte *out_buf, int *out_len,
664 		      int out_maxlen)
665 {
666    int input_index, output_index;
667 
668    output_index = 0;
669    for (input_index = 0; input_index < len; input_index++) {
670       gdb_byte b = buffer[input_index];
671 
672       if (b == '$' || b == '#' || b == '}' || b == '*') {
673          /* These must be escaped.  */
674          if (output_index + 2 > out_maxlen)
675 	    break;
676          out_buf[output_index++] = '}';
677          out_buf[output_index++] = b ^ 0x20;
678       } else {
679          if (output_index + 1 > out_maxlen)
680 	    break;
681          out_buf[output_index++] = b;
682       }
683    }
684 
685    *out_len = input_index;
686    return output_index;
687 }
688 
689 /* Convert BUFFER, escaped data LEN bytes long, into binary data
690    in OUT_BUF.  Return the number of bytes written to OUT_BUF.
691    Raise an error if the total number of bytes exceeds OUT_MAXLEN.
692 
693    This function reverses remote_escape_output.  It allows more
694    escaped characters than that function does, in particular because
695    '*' must be escaped to avoid the run-length encoding processing
696    in reading packets.  */
697 
698 static
remote_unescape_input(const gdb_byte * buffer,int len,gdb_byte * out_buf,int out_maxlen)699 int remote_unescape_input (const gdb_byte *buffer, int len,
700 		       gdb_byte *out_buf, int out_maxlen)
701 {
702    int input_index, output_index;
703    int escaped;
704 
705    output_index = 0;
706    escaped = 0;
707    for (input_index = 0; input_index < len; input_index++) {
708       gdb_byte b = buffer[input_index];
709 
710       if (output_index + 1 > out_maxlen)
711          error ("Received too much data (len %d) from the target.\n", len);
712 
713       if (escaped) {
714          out_buf[output_index++] = b ^ 0x20;
715          escaped = 0;
716       } else if (b == '}') {
717          escaped = 1;
718       } else {
719          out_buf[output_index++] = b;
720       }
721    }
722 
723    if (escaped)
724       error ("Unmatched escape character in target response.\n");
725 
726    return output_index;
727 }
728 
729 /* Look for a sequence of characters which can be run-length encoded.
730    If there are any, update *CSUM and *P.  Otherwise, output the
731    single character.  Return the number of characters consumed.  */
732 
733 static
try_rle(char * buf,int remaining,unsigned char * csum,char ** p)734 int try_rle (char *buf, int remaining, unsigned char *csum, char **p)
735 {
736    int n;
737 
738    /* Always output the character.  */
739    *csum += buf[0];
740    *(*p)++ = buf[0];
741 
742    /* Don't go past '~'.  */
743    if (remaining > 97)
744       remaining = 97;
745 
746    for (n = 1; n < remaining; n++)
747       if (buf[n] != buf[0])
748          break;
749 
750    /* N is the index of the first character not the same as buf[0].
751       buf[0] is counted twice, so by decrementing N, we get the number
752       of characters the RLE sequence will replace.  */
753    n--;
754 
755    if (n < 3)
756       return 1;
757 
758    /* Skip the frame characters.  The manual says to skip '+' and '-'
759       also, but there's no reason to.  Unfortunately these two unusable
760       characters double the encoded length of a four byte zero
761       value.  */
762    while (n + 29 == '$' || n + 29 == '#')
763       n--;
764 
765    *csum += '*';
766    *(*p)++ = '*';
767    *csum += n + 29;
768    *(*p)++ = n + 29;
769 
770    return n + 1;
771 }
772 
773 /* Send a packet to the remote machine, with error checking.
774    The data of the packet is in BUF, and the length of the
775    packet is in CNT.  Returns >= 0 on success, -1 otherwise.  */
776 
putpkt_binary(char * buf,int cnt)777 int putpkt_binary (char *buf, int cnt)
778 {
779    int i;
780    unsigned char csum = 0;
781    char *buf2;
782    char *p;
783    int cc;
784 
785    buf2 = malloc (PBUFSIZ+POVERHSIZ);
786    // should malloc PBUFSIZ, but bypass GDB bug (see gdbserver_init in server.c)
787    vg_assert (5 == POVERHSIZ);
788    vg_assert (cnt <= PBUFSIZ); // be tolerant for GDB bug.
789 
790    /* Copy the packet into buffer BUF2, encapsulating it
791       and giving it a checksum.  */
792 
793    p = buf2;
794    *p++ = '$';
795 
796    for (i = 0; i < cnt;)
797       i += try_rle (buf + i, cnt - i, &csum, &p);
798 
799    *p++ = '#';
800    *p++ = tohex ((csum >> 4) & 0xf);
801    *p++ = tohex (csum & 0xf);
802 
803    *p = '\0';
804 
805    /* we might have to write a pkt when out FIFO not yet/anymore opened */
806    if (!ensure_write_remote_desc()) {
807       warning ("putpkt(write) error: no write_remote_desc\n");
808       return -1;
809    }
810 
811    /* Send it once (noack_mode)
812       or send it over and over until we get a positive ack.  */
813 
814    do {
815       if (VG_(write) (write_remote_desc, buf2, p - buf2) != p - buf2) {
816          warning ("putpkt(write) error\n");
817          return -1;
818       }
819 
820       if (noack_mode)
821          dlog(1, "putpkt (\"%s\"); [no ack]\n", buf2);
822       else
823          dlog(1,"putpkt (\"%s\"); [looking for ack]\n", buf2);
824 
825       if (noack_mode)
826          break;
827 
828       cc = readchar (1);
829       if (cc > 0)
830          dlog(1, "[received '%c' (0x%x)]\n", cc, cc);
831 
832       if (cc <= 0) {
833          if (cc == 0)
834             dlog(1, "putpkt(read): Got EOF\n");
835          else
836 	    warning ("putpkt(read) error\n");
837 
838          free (buf2);
839          return -1;
840       }
841 
842       /* Check for an input interrupt while we're here.  */
843       if (cc == '\003')
844          dlog(1, "Received 0x03 character (SIGINT)\n");
845    }
846    while (cc != '+');
847 
848    free (buf2);
849    return 1;			/* Success! */
850 }
851 
852 /* Send a packet to the remote machine, with error checking.  The data
853    of the packet is in BUF, and the packet should be a NUL-terminated
854    string.  Returns >= 0 on success, -1 otherwise.  */
855 
putpkt(char * buf)856 int putpkt (char *buf)
857 {
858    return putpkt_binary (buf, strlen (buf));
859 }
860 
monitor_output(char * s)861 void monitor_output (char *s)
862 {
863    if (remote_connected()) {
864       const int len = strlen(s);
865       char *buf = malloc(1 + 2*len + 1);
866 
867       buf[0] = 'O';
868       hexify(buf+1, s, len);
869       if (putpkt (buf) < 0) {
870          /* We probably have lost the connection with vgdb. */
871          reset_valgrind_sink("Error writing monitor output");
872          /* write again after reset */
873          VG_(printf) ("%s", s);
874       }
875 
876       free (buf);
877    } else {
878       print_to_initial_valgrind_sink (s);
879    }
880 }
881 
882 /* Returns next char from remote GDB.  -1 if error.  */
883 /* if single, only one character maximum can be read with
884    read system call. Otherwise, when reading an ack character
885    we might pile up the next gdb command in the static buf.
886    The read loop is then blocked in poll till gdb times out. */
887 static
readchar(int single)888 int readchar (int single)
889 {
890    static unsigned char buf[PBUFSIZ];
891    static int bufcnt = 0;
892    static unsigned char *bufp;
893    SysRes ret;
894 
895    if (bufcnt-- > 0)
896       return *bufp++;
897 
898    if (remote_desc == INVALID_DESCRIPTOR)
899       return -1;
900 
901    /* No characters available in buf =>
902       wait for some characters to arrive */
903    remote_desc_pollfdread_activity.revents = 0;
904    ret = VG_(poll_no_eintr)(&remote_desc_pollfdread_activity, 1, -1);
905    if (sr_isError(ret) || sr_Res(ret) != 1) {
906      if (sr_isError(ret)) {
907         sr_extended_perror(ret, "readchar: poll error\n");
908      } else {
909         dlog(0, "readchar: poll got %d, expecting 1\n", (int)sr_Res(ret));
910      }
911      return -1;
912    }
913    if (single)
914       bufcnt = VG_(read) (remote_desc, buf, 1);
915    else
916       bufcnt = VG_(read) (remote_desc, buf, sizeof (buf));
917 
918    if (bufcnt <= 0) {
919       if (bufcnt == 0)
920          dlog (1, "readchar: Got EOF\n");
921       else
922          warning ("readchar read error\n");
923 
924       return -1;
925    }
926 
927    shared->seen_by_valgrind += bufcnt;
928 
929    /* If we have received a character and we do not yet have a
930       connection, we better open our "write" fifo to let vgdb open its
931       read fifo side */
932    if (write_remote_desc == INVALID_DESCRIPTOR
933        && !ensure_write_remote_desc()) {
934       dlog(1, "reachar: write_remote_desc could not be created");
935    }
936 
937    bufp = buf;
938    bufcnt--;
939 
940    if (poll_cond(remote_desc_pollfdread_activity.revents)) {
941       dlog(1, "readchar: POLLcond got %d\n",
942            remote_desc_pollfdread_activity.revents);
943       error_poll_cond();
944    }
945 
946    return *bufp++;
947 }
948 
949 
950 /* Read a packet from the remote machine, with error checking,
951    and store it in BUF.  Returns length of packet, or negative if error. */
952 
getpkt(char * buf)953 int getpkt (char *buf)
954 {
955    char *bp;
956    unsigned char csum, c1, c2;
957    int c;
958 
959    while (1) {
960       csum = 0;
961 
962       while (1) {
963          c = readchar (0);
964          if (c == '$')
965 	    break;
966          dlog(1, "[getpkt: discarding char '%c']\n", c);
967          if (c < 0)
968 	    return -1;
969       }
970 
971       bp = buf;
972       while (1) {
973          c = readchar (0);
974          if (c < 0)
975 	    return -1;
976          if (c == '#')
977 	    break;
978          *bp++ = c;
979          csum += c;
980       }
981       *bp = 0;
982 
983       c1 = fromhex (readchar (0));
984       c2 = fromhex (readchar (0));
985 
986       if (csum == (c1 << 4) + c2)
987          break;
988 
989       dlog (0, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n",
990             (c1 << 4) + c2, csum, buf);
991       if (!ensure_write_remote_desc()) {
992          dlog(1, "getpkt(write nack) no write_remote_desc");
993       }
994       VG_(write) (write_remote_desc, "-", 1);
995    }
996 
997    if (noack_mode)
998       dlog(1, "getpkt (\"%s\");  [no ack] \n", buf);
999    else
1000       dlog(1, "getpkt (\"%s\");  [sending ack] \n", buf);
1001 
1002    if (!noack_mode) {
1003       if (!ensure_write_remote_desc()) {
1004          dlog(1, "getpkt(write ack) no write_remote_desc");
1005       }
1006       VG_(write) (write_remote_desc, "+", 1);
1007       dlog(1, "[sent ack]\n");
1008    }
1009 
1010    return bp - buf;
1011 }
1012 
write_ok(char * buf)1013 void write_ok (char *buf)
1014 {
1015    buf[0] = 'O';
1016    buf[1] = 'K';
1017    buf[2] = '\0';
1018 }
1019 
write_enn(char * buf)1020 void write_enn (char *buf)
1021 {
1022    /* Some day, we should define the meanings of the error codes... */
1023    buf[0] = 'E';
1024    buf[1] = '0';
1025    buf[2] = '1';
1026    buf[3] = '\0';
1027 }
1028 
convert_int_to_ascii(const unsigned char * from,char * to,int n)1029 void convert_int_to_ascii (const unsigned char *from, char *to, int n)
1030 {
1031    int nib;
1032    int ch;
1033    while (n--) {
1034       ch = *from++;
1035       nib = ((ch & 0xf0) >> 4) & 0x0f;
1036       *to++ = tohex (nib);
1037       nib = ch & 0x0f;
1038       *to++ = tohex (nib);
1039    }
1040    *to++ = 0;
1041 }
1042 
1043 
convert_ascii_to_int(const char * from,unsigned char * to,int n)1044 void convert_ascii_to_int (const char *from, unsigned char *to, int n)
1045 {
1046    int nib1, nib2;
1047    while (n--) {
1048       nib1 = fromhex (*from++);
1049       nib2 = fromhex (*from++);
1050       *to++ = (((nib1 & 0x0f) << 4) & 0xf0) | (nib2 & 0x0f);
1051    }
1052 }
1053 
1054 static
outreg(int regno,char * buf)1055 char * outreg (int regno, char *buf)
1056 {
1057    if ((regno >> 12) != 0)
1058       *buf++ = tohex ((regno >> 12) & 0xf);
1059    if ((regno >> 8) != 0)
1060       *buf++ = tohex ((regno >> 8) & 0xf);
1061    *buf++ = tohex ((regno >> 4) & 0xf);
1062    *buf++ = tohex (regno & 0xf);
1063    *buf++ = ':';
1064    collect_register_as_string (regno, buf);
1065    buf += 2 * register_size (regno);
1066    *buf++ = ';';
1067 
1068    return buf;
1069 }
1070 
prepare_resume_reply(char * buf,char status,unsigned char sig)1071 void prepare_resume_reply (char *buf, char status, unsigned char sig)
1072 {
1073    int nib;
1074 
1075    *buf++ = status;
1076 
1077    nib = ((sig & 0xf0) >> 4);
1078    *buf++ = tohex (nib);
1079    nib = sig & 0x0f;
1080    *buf++ = tohex (nib);
1081 
1082    if (status == 'T') {
1083       const char **regp = gdbserver_expedite_regs;
1084 
1085       if (valgrind_stopped_by_watchpoint()) {
1086          CORE_ADDR addr;
1087          int i;
1088 
1089          strncpy (buf, "watch:", 6);
1090          buf += 6;
1091 
1092          addr = valgrind_stopped_data_address ();
1093 
1094          /* Convert each byte of the address into two hexadecimal chars.
1095             Note that we take sizeof (void *) instead of sizeof (addr);
1096             this is to avoid sending a 64-bit address to a 32-bit GDB.  */
1097          for (i = sizeof (void *) * 2; i > 0; i--) {
1098             *buf++ = tohex ((addr >> (i - 1) * 4) & 0xf);
1099          }
1100          *buf++ = ';';
1101       }
1102 
1103       while (*regp) {
1104          buf = outreg (find_regno (*regp), buf);
1105          regp ++;
1106       }
1107 
1108       {
1109          unsigned int gdb_id_from_wait;
1110 
1111          /* FIXME right place to set this? */
1112          thread_from_wait =
1113             ((struct inferior_list_entry *)current_inferior)->id;
1114          gdb_id_from_wait = thread_to_gdb_id (current_inferior);
1115 
1116          dlog(1, "Writing resume reply for %ld\n", thread_from_wait);
1117          /* This if (1) ought to be unnecessary.  But remote_wait in GDB
1118             will claim this event belongs to inferior_ptid if we do not
1119             specify a thread, and there's no way for gdbserver to know
1120             what inferior_ptid is.  */
1121          if (1 || old_thread_from_wait != thread_from_wait) {
1122             general_thread = thread_from_wait;
1123             VG_(sprintf) (buf, "thread:%x;", gdb_id_from_wait);
1124             buf += strlen (buf);
1125             old_thread_from_wait = thread_from_wait;
1126          }
1127       }
1128    }
1129    /* For W and X, we're done.  */
1130    *buf++ = 0;
1131 }
1132 
decode_m_packet(char * from,CORE_ADDR * mem_addr_ptr,unsigned int * len_ptr)1133 void decode_m_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr)
1134 {
1135    int i = 0, j = 0;
1136    char ch;
1137    *mem_addr_ptr = *len_ptr = 0;
1138 
1139    while ((ch = from[i++]) != ',') {
1140       *mem_addr_ptr = *mem_addr_ptr << 4;
1141       *mem_addr_ptr |= fromhex (ch) & 0x0f;
1142    }
1143 
1144    for (j = 0; j < 4; j++) {
1145       if ((ch = from[i++]) == 0)
1146          break;
1147       *len_ptr = *len_ptr << 4;
1148       *len_ptr |= fromhex (ch) & 0x0f;
1149    }
1150 }
1151 
decode_M_packet(char * from,CORE_ADDR * mem_addr_ptr,unsigned int * len_ptr,unsigned char * to)1152 void decode_M_packet (char *from, CORE_ADDR *mem_addr_ptr, unsigned int *len_ptr,
1153 		 unsigned char *to)
1154 {
1155    int i = 0;
1156    char ch;
1157    *mem_addr_ptr = *len_ptr = 0;
1158 
1159    while ((ch = from[i++]) != ',') {
1160       *mem_addr_ptr = *mem_addr_ptr << 4;
1161       *mem_addr_ptr |= fromhex (ch) & 0x0f;
1162    }
1163 
1164    while ((ch = from[i++]) != ':') {
1165       *len_ptr = *len_ptr << 4;
1166       *len_ptr |= fromhex (ch) & 0x0f;
1167    }
1168 
1169    convert_ascii_to_int (&from[i++], to, *len_ptr);
1170 }
1171 
decode_X_packet(char * from,int packet_len,CORE_ADDR * mem_addr_ptr,unsigned int * len_ptr,unsigned char * to)1172 int decode_X_packet (char *from, int packet_len, CORE_ADDR *mem_addr_ptr,
1173 		 unsigned int *len_ptr, unsigned char *to)
1174 {
1175    int i = 0;
1176    char ch;
1177    *mem_addr_ptr = *len_ptr = 0;
1178 
1179    while ((ch = from[i++]) != ',') {
1180       *mem_addr_ptr = *mem_addr_ptr << 4;
1181       *mem_addr_ptr |= fromhex (ch) & 0x0f;
1182    }
1183 
1184    while ((ch = from[i++]) != ':') {
1185       *len_ptr = *len_ptr << 4;
1186       *len_ptr |= fromhex (ch) & 0x0f;
1187    }
1188 
1189    if (remote_unescape_input ((const gdb_byte *) &from[i], packet_len - i,
1190                               to, *len_ptr) != *len_ptr)
1191       return -1;
1192 
1193    return 0;
1194 }
1195 
1196 
1197 /* Return the default path prefix for the named pipes (FIFOs) used by vgdb/gdb
1198    to communicate with valgrind */
1199 HChar *
VG_(vgdb_prefix_default)1200 VG_(vgdb_prefix_default)(void)
1201 {
1202    static HChar *prefix;
1203 
1204    if (prefix == NULL) {
1205      const HChar *tmpdir = VG_(tmpdir)();
1206      prefix = malloc(strlen(tmpdir) + strlen("/vgdb-pipe") + 1);
1207      strcpy(prefix, tmpdir);
1208      strcat(prefix, "/vgdb-pipe");
1209    }
1210    return prefix;
1211 }
1212