Home | History | Annotate | Download | only in m_gdbserver
      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
     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. */
     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
    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 
    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
    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 
    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
    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
    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
    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 
    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 */
    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
    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 
    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 */
    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 
    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
    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. */
    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
    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 
    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 
    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
    607 int tohex (int nib)
    608 {
    609    if (nib < 10)
    610       return '0' + nib;
    611    else
    612       return 'a' + nib - 10;
    613 }
    614 
    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 */
    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 
    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
    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
    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
    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 
    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 
    856 int putpkt (char *buf)
    857 {
    858    return putpkt_binary (buf, strlen (buf));
    859 }
    860 
    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
    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 
    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 
   1013 void write_ok (char *buf)
   1014 {
   1015    buf[0] = 'O';
   1016    buf[1] = 'K';
   1017    buf[2] = '\0';
   1018 }
   1019 
   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 
   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 
   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
   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 
   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 
   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 
   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 
   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 *
   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