1
2/*--------------------------------------------------------------------*/
3/*--- Handle remote gdb protocol.                    m_gdbserver.c ---*/
4/*--------------------------------------------------------------------*/
5
6/*
7   This file is part of Valgrind, a dynamic binary instrumentation
8   framework.
9
10   Copyright (C) 2011-2012 Philippe Waroquiers
11
12   This program is free software; you can redistribute it and/or
13   modify it under the terms of the GNU General Public License as
14   published by the Free Software Foundation; either version 2 of the
15   License, or (at your option) any later version.
16
17   This program is distributed in the hope that it will be useful, but
18   WITHOUT ANY WARRANTY; without even the implied warranty of
19   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
20   General Public License for more details.
21
22   You should have received a copy of the GNU General Public License
23   along with this program; if not, write to the Free Software
24   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
25   02111-1307, USA.
26
27   The GNU General Public License is contained in the file COPYING.
28*/
29
30#include "pub_core_basics.h"
31#include "pub_core_vki.h"
32#include "pub_core_debuglog.h"
33#include "pub_core_libcproc.h"
34#include "pub_core_libcprint.h"
35#include "pub_core_mallocfree.h"
36#include "pub_core_gdbserver.h"
37#include "pub_core_options.h"
38#include "pub_core_libcsetjmp.h"
39#include "pub_core_threadstate.h"
40#include "pub_core_transtab.h"
41#include "pub_tool_hashtable.h"
42#include "pub_tool_xarray.h"
43#include "pub_core_libcassert.h"
44#include "pub_tool_libcbase.h"
45#include "pub_core_libcsignal.h"
46#include "pub_core_signals.h"
47#include "pub_tool_machine.h"     // VG_(fnptr_to_fnentry)
48#include "pub_tool_debuginfo.h"
49#include "pub_core_scheduler.h"
50#include "pub_core_syswrap.h"
51
52#include "server.h"
53
54Int VG_(dyn_vgdb_error);
55
56/* forward declarations */
57VG_REGPARM(1)
58void VG_(helperc_CallDebugger) ( HWord iaddr );
59VG_REGPARM(1)
60void VG_(helperc_invalidate_if_not_gdbserved) ( Addr addr );
61static void invalidate_current_ip (ThreadId tid, char *who);
62
63/* reasons of call to call_gdbserver. */
64typedef
65   enum {
66      init_reason,    // initialises gdbserver resources
67      vgdb_reason,    // gdbserver invocation by vgdb doing ptrace
68      core_reason,    // gdbserver invocation by core (e.g. error encountered)
69      break_reason,   // break encountered
70      watch_reason,   // watchpoint detected by tool
71      signal_reason}  // signal encountered
72    CallReason;
73
74static char* ppCallReason(CallReason reason)
75{
76   switch (reason) {
77   case init_reason:    return "init_reason";
78   case vgdb_reason:    return "vgdb_reason";
79   case core_reason:    return "core_reason";
80   case break_reason:   return "break_reason";
81   case watch_reason:   return "watch_reason";
82   case signal_reason:  return "signal_reason";
83   default: vg_assert (0);
84   }
85}
86
87/* An instruction instrumented for gdbserver looks like this:
88    1. Ist_Mark (0x1234)
89    2. Put (IP, 0x1234)
90    3. helperc_CallDebugger (0x1234)
91         This will give control to gdb if there is a break at 0x1234
92         or if we are single stepping
93    4. ... here the real IR for the instruction at 0x1234
94
95    When there is a break at 0x1234:
96      if user does "continue" or "step" or similar,
97        then - the call to debugger returns
98             - valgrind executes at 3. the real IR(s) for 0x1234
99
100      if as part of helperc_CallDebugger, the user calls
101      some code in gdb e.g print hello_world()
102        then - gdb prepares a dummy stack frame with a specific
103               return address (typically it uses _start) and
104               inserts a break at this address
105             - gdb then puts in EIP the address of hello_world()
106             - gdb then continues (so the helperc_CallDebugger
107               returns)
108             - call_gdbserver() function will then return the
109               control to the scheduler (using VG_MINIMAL_LONGJMP)
110               to allow the block of the new EIP
111               to be executed.
112             - hello_world code is executed.
113             - when hello_world() returns, it returns to
114               _start and encounters the break at _start.
115             - gdb then removes this break, put 0x1234 in EIP
116               and does a "step". This causes to jump from
117               _start to 0x1234, where the call to
118                helperc_CallDebugger is redone.
119             - This is all ok, the user can then give new gdb
120               commands.
121
122    However, when continue is given, address 0x1234 is to
123    be executed: gdb gives a single step, which must not
124    report again the break at 0x1234. To avoid a 2nd report
125    of the same break, the below tells that the next
126    helperc_CallDebugger call must ignore a break/stop at
127    this address.
128*/
129static Addr ignore_this_break_once = 0;
130
131
132static void call_gdbserver ( ThreadId tid , CallReason reason);
133
134/* Describes the address addr (for debugging/printing purposes).
135   Last two results are kept. A third call will replace the
136   oldest result. */
137static char* sym (Addr addr, Bool is_code)
138{
139   static char buf[2][200];
140   static int w = 0;
141   PtrdiffT offset;
142   if (w == 2) w = 0;
143   buf[w][0] = '\0';
144   if (is_code) {
145      VG_(describe_IP) (addr, buf[w], 200);
146   } else {
147      VG_(get_datasym_and_offset) (addr, buf[w], 200, &offset);
148   }
149   return buf[w++];
150}
151
152/* Each time gdbserver is called, gdbserver_called is incremented
153   gdbserver_exited is incremented when gdbserver is asked to exit */
154static int gdbserver_called = 0;
155static int gdbserver_exited = 0;
156
157/* alloc and free functions for xarray and similar. */
158static void* gs_alloc (HChar* cc, SizeT sz)
159{
160   void* res = VG_(arena_malloc)(VG_AR_CORE, cc, sz);
161   vg_assert (res);
162   return res;
163}
164static void gs_free (void* ptr)
165{
166   VG_(arena_free)(VG_AR_CORE, ptr);
167}
168
169typedef
170   enum {
171     GS_break,
172     GS_jump
173   }
174   GS_Kind;
175
176typedef
177   struct _GS_Address {
178      struct _GS_Address* next;
179      Addr    addr;
180      GS_Kind kind;
181   }
182   GS_Address;
183
184/* gs_addresses contains a list of all addresses that have been invalidated
185   because they have been (or must be) instrumented for gdbserver.
186   An entry is added in this table when there is a break at this
187   address (kind == GS_break) or if this address is the jump target of an
188   exit of a block that has been instrumented for gdbserver while
189   single stepping (kind == GS_jump).
190   When gdbserver is not single stepping anymore, all GS_jump entries
191   are removed, their translations are invalidated.
192
193   Note for ARM: addr in GS_Address is the value without the thumb bit set.
194*/
195static VgHashTable gs_addresses = NULL;
196
197// Transform addr in the form stored in the list of addresses.
198// For the ARM architecture, we store it with the thumb bit set to 0.
199static Addr HT_addr ( Addr addr )
200{
201#if defined(VGA_arm)
202  return addr & ~(Addr)1;
203#else
204  return addr;
205#endif
206}
207
208static void add_gs_address (Addr addr, GS_Kind kind, char* from)
209{
210   GS_Address *p;
211
212   p = VG_(arena_malloc)(VG_AR_CORE, from, sizeof(GS_Address));
213   p->addr = HT_addr (addr);
214   p->kind = kind;
215   VG_(HT_add_node)(gs_addresses, p);
216   /* It should be sufficient to discard a range of 1.
217      We use 2 to ensure the below is not sensitive to the presence
218      of thumb bit in the range of addresses to discard. */
219   VG_(discard_translations) (addr, 2, from);
220}
221
222static void remove_gs_address (GS_Address* g, char* from)
223{
224   VG_(HT_remove) (gs_addresses, g->addr);
225   // See add_gs_address for the explanation for the range 2 below.
226   VG_(discard_translations) (g->addr, 2, from);
227   VG_(arena_free) (VG_AR_CORE, g);
228}
229
230char* VG_(ppPointKind) (PointKind kind)
231{
232   switch(kind) {
233   case software_breakpoint: return "software_breakpoint";
234   case hardware_breakpoint: return "hardware_breakpoint";
235   case write_watchpoint:    return "write_watchpoint";
236   case read_watchpoint:     return "read_watchpoint";
237   case access_watchpoint:   return "access_watchpoint";
238   default:                  return "???wrong PointKind";
239   }
240}
241
242typedef
243   struct _GS_Watch {
244      Addr    addr;
245      SizeT   len;
246      PointKind kind;
247   }
248   GS_Watch;
249
250/* gs_watches contains a list of all addresses+len+kind that are being
251   watched. */
252static XArray* gs_watches = NULL;
253
254static inline GS_Watch* index_gs_watches(Word i)
255{
256   return *(GS_Watch **) VG_(indexXA) (gs_watches, i);
257}
258
259/* Returns the GS_Watch matching addr/len/kind and sets *g_ix to its
260   position in gs_watches.
261   If no matching GS_Watch is found, returns NULL and sets g_ix to -1. */
262static GS_Watch* lookup_gs_watch (Addr addr, SizeT len, PointKind kind,
263                                  Word* g_ix)
264{
265   const Word n_elems = VG_(sizeXA) (gs_watches);
266   Word i;
267   GS_Watch *g;
268
269   /* Linear search. If we have many watches, this might be optimised
270      by having the array sorted and using VG_(lookupXA) */
271   for (i = 0; i < n_elems; i++) {
272      g = index_gs_watches(i);
273      if (g->addr == addr && g->len == len && g->kind == kind) {
274         // Found.
275         *g_ix = i;
276         return g;
277      }
278   }
279
280   // Not found.
281   *g_ix = -1;
282   return NULL;
283}
284
285
286/* protocol spec tells the below must be idempotent. */
287static void breakpoint (Bool insert, CORE_ADDR addr)
288{
289   GS_Address *g;
290
291   g = VG_(HT_lookup) (gs_addresses, (UWord)HT_addr(addr));
292   if (insert) {
293      /* insert a breakpoint at addr or upgrade its kind */
294      if (g == NULL) {
295         add_gs_address (addr, GS_break, "m_gdbserver breakpoint insert");
296      } else {
297         /* already gdbserved. Normally, it must be because of a jump.
298            However, due to idempotent or if connection with gdb was
299            lost (kept breaks from the previous gdb), if already existing,
300            we just upgrade its kind. */
301         g->kind = GS_break;
302      }
303   } else {
304      /* delete a breakpoint at addr or downgrade its kind */
305      if (g != NULL && g->kind == GS_break) {
306         if (valgrind_single_stepping()) {
307            /* keep gdbserved instrumentation while single stepping */
308            g->kind = GS_jump;
309         } else {
310            remove_gs_address (g, "m_gdbserver breakpoint remove");
311         }
312      } else {
313         dlog (1, "remove break addr %p %s\n",
314               C2v(addr), (g == NULL ?
315                           "NULL" :
316                           (g->kind == GS_jump ? "GS_jump" : "GS_break")));
317      }
318   }
319}
320
321static Bool (*tool_watchpoint) (PointKind kind,
322                                Bool insert,
323                                Addr addr,
324                                SizeT len) = NULL;
325void VG_(needs_watchpoint) (Bool (*watchpoint) (PointKind kind,
326                                                Bool insert,
327                                                Addr addr,
328                                                SizeT len))
329{
330   tool_watchpoint = watchpoint;
331}
332
333Bool VG_(gdbserver_point) (PointKind kind, Bool insert,
334                           CORE_ADDR addr, int len)
335{
336   Bool res;
337   GS_Watch *g;
338   Word g_ix;
339   Bool is_code = kind == software_breakpoint || kind == hardware_breakpoint;
340
341   dlog(1, "%s %s at addr %p %s\n",
342        (insert ? "insert" : "remove"),
343        VG_(ppPointKind) (kind),
344        C2v(addr),
345        sym(addr, is_code));
346
347   if (is_code) {
348      breakpoint (insert, addr);
349      return True;
350   }
351
352   vg_assert (kind == access_watchpoint
353              || kind == read_watchpoint
354              || kind == write_watchpoint);
355
356   if (tool_watchpoint == NULL)
357      return False;
358
359   res = (*tool_watchpoint) (kind, insert, addr, len);
360   if (!res)
361      return False; /* error or unsupported */
362
363   // Protocol says insert/remove must be idempotent.
364   // So, we just ignore double insert or (supposed) double delete.
365
366   g = lookup_gs_watch (addr, len, kind, &g_ix);
367   if (insert) {
368      if (g == NULL) {
369         g = VG_(arena_malloc)(VG_AR_CORE, "gdbserver_point watchpoint",
370                               sizeof(GS_Watch));
371         g->addr = addr;
372         g->len  = len;
373         g->kind = kind;
374         VG_(addToXA)(gs_watches, &g);
375      } else {
376         dlog(1,
377              "VG_(gdbserver_point) addr %p len %d kind %s already inserted\n",
378               C2v(addr), len, VG_(ppPointKind) (kind));
379      }
380   } else {
381      if (g != NULL) {
382         VG_(removeIndexXA) (gs_watches, g_ix);
383         VG_(arena_free) (VG_AR_CORE, g);
384      } else {
385         dlog(1,
386              "VG_(gdbserver_point) addr %p len %d kind %s already deleted?\n",
387              C2v(addr), len, VG_(ppPointKind) (kind));
388      }
389   }
390   return True;
391}
392
393Bool VG_(is_watched)(PointKind kind, Addr addr, Int szB)
394{
395   Word n_elems;
396   GS_Watch* g;
397   Word i;
398   Bool watched = False;
399   const ThreadId tid = VG_(running_tid);
400
401   if (!gdbserver_called)
402      return False;
403
404   n_elems = VG_(sizeXA) (gs_watches);
405
406   Addr to = addr + szB; // semi-open interval [addr, to[
407
408   vg_assert (kind == access_watchpoint
409              || kind == read_watchpoint
410              || kind == write_watchpoint);
411   dlog(1, "tid %d VG_(is_watched) %s addr %p szB %d\n",
412        tid, VG_(ppPointKind) (kind), C2v(addr), szB);
413
414   for (i = 0; i < n_elems; i++) {
415      g = index_gs_watches(i);
416      switch (g->kind) {
417      case software_breakpoint:
418      case hardware_breakpoint:
419         break;
420      case access_watchpoint:
421      case read_watchpoint:
422      case write_watchpoint:
423         if (to <= g->addr || addr >= (g->addr + g->len))
424            /* If no overlap, examine next watchpoint: */
425            continue;
426
427         watched = True; /* We have an overlap */
428
429         /* call gdbserver if access kind reported by the tool
430            matches the watchpoint kind. */
431         if (kind == access_watchpoint
432             || g->kind == access_watchpoint
433             || g->kind == kind) {
434            /* Watchpoint encountered.
435               If this is a read watchpoint, we directly call gdbserver
436               to report it to gdb.
437               Otherwise, for a write watchpoint, we have to finish
438               the instruction so as to modify the value.
439               If we do not finish the instruction, then gdb sees no
440               value change and continues.
441               For a read watchpoint, we better call gdbserver directly:
442               in case the current block is not gdbserved, Valgrind
443               will execute instructions till the next block. */
444
445            /* set the watchpoint stop address to the first read or written. */
446            if (g->addr <= addr) {
447               VG_(set_watchpoint_stop_address) (addr);
448            } else {
449               VG_(set_watchpoint_stop_address) (g->addr);
450            }
451
452            if (kind == write_watchpoint) {
453               /* Let Valgrind stop as early as possible after this instruction
454                  by switching to Single Stepping mode. */
455               valgrind_set_single_stepping (True);
456               invalidate_current_ip (tid, "m_gdbserver write watchpoint");
457            } else {
458               call_gdbserver (tid, watch_reason);
459               VG_(set_watchpoint_stop_address) ((Addr) 0);
460            }
461            return True; // we are watched here.
462         }
463         break;
464      default:
465         vg_assert (0);
466      }
467   }
468   return watched;
469}
470
471/* Returns the reason for which gdbserver instrumentation is needed */
472static VgVgdb VG_(gdbserver_instrumentation_needed) (VexGuestExtents* vge)
473{
474   GS_Address* g;
475   int e;
476
477   if (!gdbserver_called)
478      return Vg_VgdbNo;
479
480   if (valgrind_single_stepping()) {
481      dlog(2, "gdbserver_instrumentation_needed due to single stepping\n");
482      return Vg_VgdbYes;
483   }
484
485   if (VG_(clo_vgdb) == Vg_VgdbYes && VG_(HT_count_nodes) (gs_addresses) == 0)
486      return Vg_VgdbNo;
487
488   /* We assume we do not have a huge nr of breakpoints.
489      Otherwise, we need something more efficient e.g.
490      a sorted list of breakpoints or associate extents to it or ...
491   */
492   VG_(HT_ResetIter) (gs_addresses);
493   while ((g = VG_(HT_Next) (gs_addresses))) {
494      for (e = 0; e < vge->n_used; e++) {
495         if (g->addr >= HT_addr(vge->base[e])
496             && g->addr < HT_addr(vge->base[e]) + vge->len[e]) {
497            dlog(2,
498                 "gdbserver_instrumentation_needed %p %s reason %s\n",
499                 C2v(g->addr), sym(g->addr, /* is_code */ True),
500                 (g->kind == GS_jump ? "GS_jump" : "GS_break"));
501            return Vg_VgdbYes;
502         }
503      }
504   }
505
506   if (VG_(clo_vgdb) == Vg_VgdbFull) {
507      dlog(4, "gdbserver_instrumentation_needed"
508           " due to VG_(clo_vgdb) == Vg_VgdbFull\n");
509      return Vg_VgdbFull;
510   }
511
512
513   return Vg_VgdbNo;
514}
515
516// Clear gdbserved_addresses in gs_addresses.
517// If clear_only_jumps, clears only the addresses that are served
518// for jump reasons.
519// Otherwise, clear all the addresses.
520// Cleared addresses are invalidated so as to have them re-translated.
521static void clear_gdbserved_addresses(Bool clear_only_jumps)
522{
523   GS_Address** ag;
524   UInt n_elems;
525   int i;
526
527   dlog(1,
528        "clear_gdbserved_addresses: scanning hash table nodes %d\n",
529        VG_(HT_count_nodes) (gs_addresses));
530   ag = (GS_Address**) VG_(HT_to_array) (gs_addresses, &n_elems);
531   for (i = 0; i < n_elems; i++)
532      if (!clear_only_jumps || ag[i]->kind == GS_jump)
533         remove_gs_address (ag[i], "clear_gdbserved_addresses");
534   VG_(free) (ag);
535}
536
537// Clear watched addressed in gs_watches, delete gs_watches.
538static void clear_watched_addresses(void)
539{
540   GS_Watch* g;
541   const Word n_elems = VG_(sizeXA) (gs_watches);
542   Word i;
543
544   dlog(1,
545        "clear_watched_addresses: %ld elements\n",
546        n_elems);
547
548   for (i = 0; i < n_elems; i++) {
549      g = index_gs_watches(i);
550      if (!VG_(gdbserver_point) (g->kind,
551                                 /* insert */ False,
552                                 g->addr,
553                                 g->len)) {
554         vg_assert (0);
555      }
556   }
557
558   VG_(deleteXA) (gs_watches);
559   gs_watches = NULL;
560}
561
562static void invalidate_if_jump_not_yet_gdbserved (Addr addr, char* from)
563{
564   if (VG_(HT_lookup) (gs_addresses, (UWord)HT_addr(addr)))
565      return;
566   add_gs_address (addr, GS_jump, from);
567}
568
569static void invalidate_current_ip (ThreadId tid, char *who)
570{
571   invalidate_if_jump_not_yet_gdbserved (VG_(get_IP) (tid), who);
572}
573
574void VG_(gdbserver_prerun_action) (ThreadId tid)
575{
576   // Using VG_(dyn_vgdb_error) allows the user to control if gdbserver
577   // stops after a fork.
578   if (VG_(dyn_vgdb_error) == 0) {
579      /* The below call allows gdb to attach at startup
580         before the first guest instruction is executed. */
581      VG_(umsg)("(action at startup) vgdb me ... \n");
582      VG_(gdbserver)(tid);
583   } else {
584      /* User has activated gdbserver => initialize now the FIFOs
585         to let vgdb/gdb contact us either via the scheduler poll
586         mechanism or via vgdb ptrace-ing valgrind. */
587      if (VG_(gdbserver_activity) (tid))
588         VG_(gdbserver) (tid);
589   }
590}
591
592/* when fork is done, various cleanup is needed in the child process.
593   In particular, child must have its own connection to avoid stealing
594   data from its parent */
595static void gdbserver_cleanup_in_child_after_fork(ThreadId me)
596{
597   dlog(1, "thread %d gdbserver_cleanup_in_child_after_fork pid %d\n",
598        me, VG_(getpid) ());
599
600   /* finish connection inheritated from parent */
601   remote_finish(reset_after_fork);
602
603   /* ensure next call to gdbserver will be considered as a brand
604      new call that will initialize a fresh gdbserver. */
605   if (gdbserver_called) {
606      gdbserver_called = 0;
607      vg_assert (gs_addresses != NULL);
608      vg_assert (gs_watches != NULL);
609      clear_gdbserved_addresses(/* clear only jumps */ False);
610      VG_(HT_destruct) (gs_addresses, VG_(free));
611      gs_addresses = NULL;
612      clear_watched_addresses();
613   } else {
614      vg_assert (gs_addresses == NULL);
615      vg_assert (gs_watches == NULL);
616   }
617
618
619   if (VG_(clo_trace_children)) {
620      VG_(gdbserver_prerun_action) (me);
621   }
622}
623
624/* If reason is init_reason, creates the connection resources (e.g.
625      the FIFOs) to allow a gdb connection to be detected by polling
626      using remote_desc_activity.
627   Otherwise (other reasons):
628       If connection with gdb not yet opened, opens the connection with gdb.
629       reads gdb remote protocol packets and executes the requested commands.
630*/
631static void call_gdbserver ( ThreadId tid , CallReason reason)
632{
633   ThreadState*     tst = VG_(get_ThreadState)(tid);
634   int stepping;
635   Addr saved_pc;
636
637   dlog(1,
638        "entering call_gdbserver %s ... pid %d tid %d status %s "
639        "sched_jmpbuf_valid %d\n",
640        ppCallReason (reason),
641        VG_(getpid) (), tid, VG_(name_of_ThreadStatus)(tst->status),
642        tst->sched_jmpbuf_valid);
643
644   vg_assert(VG_(is_valid_tid)(tid));
645   saved_pc = VG_(get_IP) (tid);
646
647   if (gdbserver_exited) {
648      dlog(0, "call_gdbserver called when gdbserver_exited %d\n",
649           gdbserver_exited);
650      return;
651   }
652
653   if (gdbserver_called == 0) {
654      vg_assert (gs_addresses == NULL);
655      vg_assert (gs_watches == NULL);
656      gs_addresses = VG_(HT_construct)( "gdbserved_addresses" );
657      gs_watches = VG_(newXA)(gs_alloc,
658                              "gdbserved_watches",
659                              gs_free,
660                              sizeof(GS_Watch*));
661      VG_(atfork)(NULL, NULL, gdbserver_cleanup_in_child_after_fork);
662   }
663   vg_assert (gs_addresses != NULL);
664   vg_assert (gs_watches != NULL);
665
666   gdbserver_called++;
667
668   /* call gdbserver_init if this is the first call to gdbserver. */
669   if (gdbserver_called == 1)
670      gdbserver_init();
671
672   if (reason == init_reason || gdbserver_called == 1)
673      remote_open(VG_(clo_vgdb_prefix));
674
675   /* if the call reason is to initialize, then return control to
676      valgrind. After this initialization, gdbserver will be called
677      again either if there is an error detected by valgrind or
678      if vgdb sends data to the valgrind process. */
679   if (reason == init_reason) {
680      return;
681   }
682
683   stepping = valgrind_single_stepping();
684
685   server_main();
686
687   ignore_this_break_once = valgrind_get_ignore_break_once();
688   if (ignore_this_break_once)
689      dlog(1, "!!! will ignore_this_break_once %s\n",
690           sym(ignore_this_break_once, /* is_code */ True));
691
692
693   if (valgrind_single_stepping()) {
694      /* we are single stepping. If we were not stepping on entry,
695         then invalidate the current program counter so as to properly
696         do single step. In case the program counter was changed by
697         gdb, this will also invalidate the target address we will
698         jump to. */
699      if (!stepping && tid != 0) {
700         invalidate_current_ip (tid, "m_gdbserver single step");
701      }
702   } else {
703      /* We are not single stepping.  If we were stepping on entry,
704         then clear the gdbserved addresses.  This will cause all
705         these gdbserved blocks to be invalidated so that they can be
706         re-translated without being gdbserved. */
707      if (stepping)
708         clear_gdbserved_addresses(/* clear only jumps */ True);
709   }
710
711   /* can't do sanity check at beginning. At least the stack
712      check is not yet possible. */
713   if (gdbserver_called > 1)
714      VG_(sanity_check_general) (/* force_expensive */ False);
715
716   /* If the PC has been changed by gdb, then we VG_MINIMAL_LONGJMP to
717      the scheduler to execute the block of the new PC.
718      Otherwise we just return to continue executing the
719      current block. */
720   if (VG_(get_IP) (tid) != saved_pc) {
721      dlog(1, "tid %d %s PC changed from %s to %s\n",
722           tid, VG_(name_of_ThreadStatus) (tst->status),
723           sym(saved_pc, /* is_code */ True),
724           sym(VG_(get_IP) (tid), /* is_code */ True));
725      if (tst->status == VgTs_Yielding) {
726         SysRes sres;
727         VG_(memset)(&sres, 0, sizeof(SysRes));
728         VG_(acquire_BigLock)(tid, "gdbsrv VG_MINIMAL_LONGJMP");
729      }
730      if (tst->sched_jmpbuf_valid) {
731         /* resume scheduler */
732         VG_MINIMAL_LONGJMP(tst->sched_jmpbuf);
733      }
734      /* else continue to run */
735   }
736   /* continue to run */
737}
738
739/* busy > 0 when gdbserver is currently being called.
740   busy is used to to avoid vgdb invoking gdbserver
741   while gdbserver by Valgrind. */
742static volatile int busy = 0;
743
744void VG_(gdbserver) ( ThreadId tid )
745{
746   busy++;
747   /* called by the rest of valgrind for
748         --vgdb-error=0 reason
749      or by scheduler "poll/debug/interrupt" reason
750      or to terminate. */
751   if (tid != 0) {
752      call_gdbserver (tid, core_reason);
753   } else {
754      if (gdbserver_called == 0) {
755         dlog(1, "VG_(gdbserver) called to terminate, nothing to terminate\n");
756      } else if (gdbserver_exited) {
757         dlog(0, "VG_(gdbserver) called to terminate again %d\n",
758              gdbserver_exited);
759      } else {
760         gdbserver_terminate();
761         gdbserver_exited++;
762      }
763   }
764   busy--;
765}
766
767// nr of invoke_gdbserver while gdbserver is already executing.
768static int interrupts_while_busy = 0;
769
770// nr of invoke_gdbserver while gdbserver is not executing.
771static int interrupts_non_busy = 0;
772
773// nr of invoke_gdbserver when some threads are not interruptible.
774static int interrupts_non_interruptible = 0;
775
776/* When all threads are blocked in a system call, the Valgrind
777   scheduler cannot poll the shared memory for gdbserver activity.  In
778   such a case, vgdb will force the invokation of gdbserver using
779   ptrace. To do that, vgdb 'pushes' a call to invoke_gdbserver
780   on the stack using ptrace. invoke_gdbserver must not return.
781   Instead, it must call give_control_back_to_vgdb.
782   vgdb expects to receive a SIGSTOP, which this function generates.
783   When vgdb gets this SIGSTOP, it knows invoke_gdbserver call
784   is finished and can reset the Valgrind process in the state prior to
785   the 'pushed call' (using ptrace again).
786   This all works well. However, the user must avoid
787   'kill-9ing' vgdb during such a pushed call, otherwise
788   the SIGSTOP generated below will be seen by the Valgrind core,
789   instead of being handled by vgdb. The OS will then handle the SIGSTOP
790   by stopping the Valgrind process.
791   We use SIGSTOP as this process cannot be masked. */
792
793static void give_control_back_to_vgdb(void)
794{
795   /* cause a SIGSTOP to be sent to ourself, so that vgdb takes control.
796      vgdb will then restore the stack so as to resume the activity
797      before the ptrace (typically do_syscall_WRK). */
798   if (VG_(kill)(VG_(getpid)(), VKI_SIGSTOP) != 0)
799      vg_assert2(0, "SIGSTOP for vgdb could not be generated\n");
800
801   /* If we arrive here, it means a call was pushed on the stack
802      by vgdb, but during this call, vgdb and/or connection
803      died. Alternatively, it is a bug in the vgdb<=>Valgrind gdbserver
804      ptrace handling. */
805   vg_assert2(0,
806              "vgdb did not took control. Did you kill vgdb ?\n"
807              "busy %d vgdb_interrupted_tid %d\n",
808              busy, vgdb_interrupted_tid);
809}
810
811/* Using ptrace calls, vgdb will force an invocation of gdbserver.
812   VG_(invoke_gdbserver) is the entry point called through the
813   vgdb ptrace technique. */
814void VG_(invoke_gdbserver) ( int check )
815{
816   /* ******* Avoid non-reentrant function call from here .....
817      till the ".... till here" below. */
818
819   /* We need to determine the state of the various threads to decide
820      if we directly invoke gdbserver or if we rather indicate to the
821      scheduler to invoke the gdbserver.  To decide that, it is
822      critical to avoid any "coregrind" function call as the ptrace
823      might have stopped the process in the middle of this (possibly)
824      non-rentrant function.  So, it is only when all threads are in
825      an "interruptible" state that we can safely invoke
826      gdbserver. Otherwise, we let the valgrind scheduler invoke
827      gdbserver at the next poll.  This poll will be made very soon
828      thanks to a call to VG_(force_vgdb_poll). */
829   int n_tid;
830
831   vg_assert (check == 0x8BADF00D);
832
833   if (busy) {
834      interrupts_while_busy++;
835      give_control_back_to_vgdb();
836   }
837   interrupts_non_busy++;
838
839   /* check if all threads are in an "interruptible" state.  If yes,
840      we invoke gdbserver. Otherwise, we tell the scheduler to wake up
841      asap. */
842   for (n_tid = 1; n_tid < VG_N_THREADS; n_tid++) {
843      switch (VG_(threads)[n_tid].status) {
844      /* interruptible states. */
845      case VgTs_WaitSys:
846      case VgTs_Yielding:
847         if (vgdb_interrupted_tid == 0) vgdb_interrupted_tid = n_tid;
848         break;
849
850      case VgTs_Empty:
851      case VgTs_Zombie:
852         break;
853
854      /* non interruptible states. */
855      case VgTs_Init:
856      case VgTs_Runnable:
857         interrupts_non_interruptible++;
858         VG_(force_vgdb_poll) ();
859         give_control_back_to_vgdb();
860
861      default:             vg_assert(0);
862      }
863   }
864
865   /* .... till here.
866      From here onwards, function calls are ok: it is
867      safe to call valgrind core functions: all threads are blocked in
868      a system call or are yielding or ... */
869   dlog(1, "invoke_gdbserver running_tid %d vgdb_interrupted_tid %d\n",
870        VG_(running_tid), vgdb_interrupted_tid);
871   call_gdbserver (vgdb_interrupted_tid, vgdb_reason);
872   vgdb_interrupted_tid = 0;
873   dlog(1,
874        "exit invoke_gdbserver running_tid %d\n", VG_(running_tid));
875   give_control_back_to_vgdb();
876
877   vg_assert2(0, "end of invoke_gdbserver reached");
878
879}
880
881Bool VG_(gdbserver_activity) (ThreadId tid)
882{
883   Bool ret;
884   busy++;
885   if (!gdbserver_called)
886      call_gdbserver (tid, init_reason);
887   switch (remote_desc_activity("VG_(gdbserver_activity)")) {
888   case 0: ret = False; break;
889   case 1: ret = True; break;
890   case 2: call_gdbserver (tid, init_reason); ret = False; break;
891   default: vg_assert (0);
892   }
893   busy--;
894   return ret;
895}
896
897Bool VG_(gdbserver_report_signal) (Int vki_sigNo, ThreadId tid)
898{
899   dlog(1, "VG core calling VG_(gdbserver_report_signal) "
900        "vki_nr %d %s gdb_nr %d %s tid %d\n",
901        vki_sigNo, VG_(signame)(vki_sigNo),
902        target_signal_from_host (vki_sigNo),
903        target_signal_to_name(target_signal_from_host (vki_sigNo)),
904        tid);
905
906   /* if gdbserver is currently not connected, then signal
907      is to be given to the process */
908   if (!remote_connected()) {
909      dlog(1, "not connected => pass\n");
910      return True;
911   }
912   /* if gdb has informed gdbserver that this signal can be
913      passed directly without informing gdb, then signal is
914      to be given to the process. */
915   if (pass_signals[target_signal_from_host(vki_sigNo)]) {
916      dlog(1, "pass_signals => pass\n");
917      return True;
918   }
919
920   /* indicate to gdbserver that there is a signal */
921   gdbserver_signal_encountered (vki_sigNo);
922
923   /* let gdbserver do some work, e.g. show the signal to the user */
924   call_gdbserver (tid, signal_reason);
925
926   /* ask gdbserver what is the final decision */
927   if (gdbserver_deliver_signal (vki_sigNo)) {
928      dlog(1, "gdbserver deliver signal\n");
929      return True;
930   } else {
931      dlog(1, "gdbserver ignore signal\n");
932      return False;
933   }
934}
935
936// Check if single_stepping or if there is a break requested at iaddr.
937// If yes, call debugger
938VG_REGPARM(1)
939void VG_(helperc_CallDebugger) ( HWord iaddr )
940{
941   GS_Address* g;
942
943   // For Vg_VgdbFull, after a fork, we might have calls to this helper
944   // while gdbserver is not yet initialized.
945   if (!gdbserver_called)
946      return;
947
948   if (valgrind_single_stepping() ||
949       ((g = VG_(HT_lookup) (gs_addresses, (UWord)HT_addr(iaddr))) &&
950        (g->kind == GS_break))) {
951      if (iaddr == HT_addr(ignore_this_break_once)) {
952         dlog(1, "ignoring ignore_this_break_once %s\n",
953              sym(ignore_this_break_once, /* is_code */ True));
954         ignore_this_break_once = 0;
955      } else {
956         call_gdbserver (VG_(get_running_tid)(), break_reason);
957      }
958   }
959}
960
961/* software_breakpoint support --------------------------------------*/
962/* When a block is instrumented for gdbserver, single step and breaks
963   will be obeyed in this block.  However, if a jump to another block
964   is executed while single_stepping is active, we must ensure that
965   this block is also instrumented. For this, when a block is
966   instrumented for gdbserver while single_stepping, the target of all
967   the Jump instructions in this block will be checked to verify if
968   the block is already instrumented for gdbserver.  The below will
969   ensure that if not already instrumented for gdbserver, the target
970   block translation containing addr will be invalidated.  The list of
971   gdbserved Addr will also be kept so that translations can be
972   dropped automatically by gdbserver when going out of single step
973   mode.
974
975   Call the below at translation time if the jump target is a constant.
976   Otherwise, rather use VG_(add_stmt_call_invalidate_if_not_gdbserved).
977
978   To instrument the target exit statement, you can call
979   VG_(add_stmt_call_invalidate_exit_target_if_not_gdbserved) rather
980   than check the kind of target exit. */
981static void VG_(invalidate_if_not_gdbserved) (Addr addr)
982{
983   if (valgrind_single_stepping())
984      invalidate_if_jump_not_yet_gdbserved
985         (addr, "gdbserver target jump (instrument)");
986}
987
988// same as VG_(invalidate_if_not_gdbserved) but is intended to be called
989// at runtime (only difference is the invalidate reason which traces
990// it is at runtime)
991VG_REGPARM(1)
992void VG_(helperc_invalidate_if_not_gdbserved) ( Addr addr )
993{
994   if (valgrind_single_stepping())
995      invalidate_if_jump_not_yet_gdbserved
996         (addr, "gdbserver target jump (runtime)");
997}
998
999static void VG_(add_stmt_call_invalidate_if_not_gdbserved)
1000     ( IRSB* sb_in,
1001       VexGuestLayout* layout,
1002       VexGuestExtents* vge,
1003       IRTemp jmp,
1004       IRSB* irsb)
1005{
1006
1007   void*    fn;
1008   HChar*   nm;
1009   IRExpr** args;
1010   Int      nargs;
1011   IRDirty* di;
1012
1013   fn    = &VG_(helperc_invalidate_if_not_gdbserved);
1014   nm    = "VG_(helperc_invalidate_if_not_gdbserved)";
1015   args  = mkIRExprVec_1(IRExpr_RdTmp (jmp));
1016   nargs = 1;
1017
1018   di = unsafeIRDirty_0_N( nargs/*regparms*/, nm,
1019                           VG_(fnptr_to_fnentry)( fn ), args );
1020
1021   di->nFxState = 0;
1022
1023   addStmtToIRSB(irsb, IRStmt_Dirty(di));
1024}
1025
1026/* software_breakpoint support --------------------------------------*/
1027/* If a tool wants to allow gdbserver to do something at Addr, then
1028   VG_(add_stmt_call_gdbserver) will add in IRSB a call to a helper
1029   function.  This helper function will check if the process must be
1030   stopped at the instruction Addr: either there is a break at Addr or
1031   the process is being single-stepped.  Typical usage of the below is to
1032   instrument an Ist_IMark to allow the debugger to interact at any
1033   instruction being executed.  As soon as there is one break in a block,
1034   then to allow single stepping in this block (and possible insertions
1035   of other breaks in the same sb_in while the process is stopped), a
1036   debugger statement will be inserted for all instructions of a block. */
1037static void VG_(add_stmt_call_gdbserver)
1038     (IRSB* sb_in,                /* block being translated */
1039      VexGuestLayout* layout,
1040      VexGuestExtents* vge,
1041      IRType gWordTy, IRType hWordTy,
1042      Addr  iaddr,                /* Addr of instruction being instrumented */
1043      UChar delta,                /* delta to add to iaddr to obtain IP */
1044      IRSB* irsb)                 /* irsb block to which call is added */
1045{
1046   void*    fn;
1047   HChar*   nm;
1048   IRExpr** args;
1049   Int      nargs;
1050   IRDirty* di;
1051
1052   /* first store the address in the program counter so that the check
1053      done by VG_(helperc_CallDebugger) will be based on the correct
1054      program counter.  We might make this more efficient by rather
1055      searching for assignement to program counter and instrumenting
1056      that but the below is easier and I guess that the optimiser will
1057      remove the redundant store. And in any case, when debugging a
1058      piece of code, the efficiency requirement is not critical: very
1059      few blocks will be instrumented for debugging. */
1060
1061   /* For platforms on which the IP can differ from the addr of the instruction
1062      being executed, we need to add the delta to obtain the IP.
1063      This IP will be given to gdb (e.g. if a breakpoint is put at iaddr).
1064
1065      For ARM, this delta will ensure that the thumb bit is set in the
1066      IP when executing thumb code. gdb uses this thumb bit a.o.
1067      to properly guess the next IP for the 'step' and 'stepi' commands. */
1068   vg_assert(delta <= 1);
1069   addStmtToIRSB(irsb, IRStmt_Put(layout->offset_IP ,
1070                                  mkIRExpr_HWord(iaddr + (Addr)delta)));
1071
1072   fn    = &VG_(helperc_CallDebugger);
1073   nm    = "VG_(helperc_CallDebugger)";
1074   args  = mkIRExprVec_1(mkIRExpr_HWord (iaddr));
1075   nargs = 1;
1076
1077   di = unsafeIRDirty_0_N( nargs/*regparms*/, nm,
1078                           VG_(fnptr_to_fnentry)( fn ), args );
1079
1080   /* Note: in fact, a debugger call can read whatever register
1081      or memory. It can also write whatever register or memory.
1082      So, in theory, we have to indicate the whole universe
1083      can be read and modified. It is however not critical
1084      to indicate precisely what is being read/written
1085      as such indications are needed for tool error detection
1086      and we do not want to have errors being detected for
1087      gdb interactions. */
1088
1089   di->nFxState = 2;
1090   di->fxState[0].fx        = Ifx_Read;
1091   di->fxState[0].offset    = layout->offset_SP;
1092   di->fxState[0].size      = layout->sizeof_SP;
1093   di->fxState[0].nRepeats  = 0;
1094   di->fxState[0].repeatLen = 0;
1095   di->fxState[1].fx        = Ifx_Modify;
1096   di->fxState[1].offset    = layout->offset_IP;
1097   di->fxState[1].size      = layout->sizeof_IP;
1098   di->fxState[1].nRepeats  = 0;
1099   di->fxState[1].repeatLen = 0;
1100
1101   addStmtToIRSB(irsb, IRStmt_Dirty(di));
1102
1103}
1104
1105
1106/* Invalidate the target of the exit if needed:
1107   If target is constant, it is invalidated at translation time.
1108   Otherwise, a call to a helper function is generated to invalidate
1109   the translation at run time.
1110   The below is thus calling either VG_(invalidate_if_not_gdbserved)
1111   or VG_(add_stmt_call_invalidate_if_not_gdbserved).  */
1112static void VG_(add_stmt_call_invalidate_exit_target_if_not_gdbserved)
1113   (IRSB* sb_in,
1114    VexGuestLayout* layout,
1115    VexGuestExtents* vge,
1116    IRType gWordTy,
1117    IRSB* irsb)
1118{
1119   if (sb_in->next->tag == Iex_Const) {
1120     VG_(invalidate_if_not_gdbserved) (gWordTy == Ity_I64 ?
1121                                       sb_in->next->Iex.Const.con->Ico.U64
1122                                       : sb_in->next->Iex.Const.con->Ico.U32);
1123   } else if (sb_in->next->tag == Iex_RdTmp) {
1124     VG_(add_stmt_call_invalidate_if_not_gdbserved)
1125       (sb_in, layout, vge, sb_in->next->Iex.RdTmp.tmp, irsb);
1126   } else {
1127     vg_assert (0); /* unexpected expression tag in exit. */
1128   }
1129}
1130
1131IRSB* VG_(instrument_for_gdbserver_if_needed)
1132     (IRSB* sb_in,
1133      VexGuestLayout* layout,
1134      VexGuestExtents* vge,
1135      IRType gWordTy, IRType hWordTy)
1136{
1137   IRSB* sb_out;
1138   Int i;
1139   const VgVgdb instr_needed = VG_(gdbserver_instrumentation_needed) (vge);
1140
1141   if (instr_needed == Vg_VgdbNo)
1142     return sb_in;
1143
1144
1145   /* here, we need to instrument for gdbserver */
1146   sb_out = deepCopyIRSBExceptStmts(sb_in);
1147
1148   for (i = 0; i < sb_in->stmts_used; i++) {
1149      IRStmt* st = sb_in->stmts[i];
1150
1151      if (!st || st->tag == Ist_NoOp) continue;
1152
1153      if (st->tag == Ist_Exit && instr_needed == Vg_VgdbYes) {
1154        VG_(invalidate_if_not_gdbserved)
1155          (hWordTy == Ity_I64 ?
1156           st->Ist.Exit.dst->Ico.U64 :
1157           st->Ist.Exit.dst->Ico.U32);
1158      }
1159      addStmtToIRSB( sb_out, st );
1160      if (st->tag == Ist_IMark) {
1161         /* For an Ist_Mark, add a call to debugger. */
1162         switch (instr_needed) {
1163         case Vg_VgdbNo: vg_assert (0);
1164         case Vg_VgdbYes:
1165         case Vg_VgdbFull:
1166            VG_(add_stmt_call_gdbserver) ( sb_in, layout, vge,
1167                                           gWordTy, hWordTy,
1168                                           st->Ist.IMark.addr,
1169                                           st->Ist.IMark.delta,
1170                                           sb_out);
1171            /* There is an optimisation possible here for Vg_VgdbFull:
1172               Put a guard ensuring we only call gdbserver if 'FullCallNeeded'.
1173               FullCallNeeded would be set to 1 we have just switched on
1174               Single Stepping or have just encountered a watchpoint
1175               or have just inserted a breakpoint.
1176               (as gdb by default removes and re-insert breakpoints), we would
1177               need to also implement the notion of 'breakpoint pending removal'
1178               to remove at the next 'continue/step' packet. */
1179            break;
1180         default: vg_assert (0);
1181         }
1182      }
1183   }
1184
1185   if (instr_needed == Vg_VgdbYes) {
1186      VG_(add_stmt_call_invalidate_exit_target_if_not_gdbserved) (sb_in,
1187                                                                  layout, vge,
1188                                                                  gWordTy,
1189                                                                  sb_out);
1190   }
1191
1192   return sb_out;
1193}
1194
1195struct mon_out_buf {
1196   char buf[DATASIZ+1];
1197   int next;
1198   UInt ret;
1199};
1200
1201static void mon_out (HChar c, void *opaque)
1202{
1203   struct mon_out_buf *b = (struct mon_out_buf *) opaque;
1204   b->ret++;
1205   b->buf[b->next] = c;
1206   b->next++;
1207   if (b->next == DATASIZ) {
1208      b->buf[b->next] = '\0';
1209      monitor_output(b->buf);
1210      b->next = 0;
1211   }
1212}
1213UInt VG_(gdb_printf) ( const HChar *format, ... )
1214{
1215   struct mon_out_buf b;
1216
1217   b.next = 0;
1218   b.ret = 0;
1219
1220   va_list vargs;
1221   va_start(vargs, format);
1222   VG_(vcbprintf) (mon_out, &b, format, vargs);
1223   va_end(vargs);
1224
1225   if (b.next > 0) {
1226      b.buf[b.next] = '\0';
1227      monitor_output(b.buf);
1228   }
1229   return b.ret;
1230}
1231
1232Int VG_(keyword_id) (Char* keywords, Char* input_word, kwd_report_error report)
1233{
1234   const Int il = (input_word == NULL ? 0 : VG_(strlen) (input_word));
1235   Char  iw[il+1];
1236   Char  kwds[VG_(strlen)(keywords)+1];
1237   Char  *kwdssaveptr;
1238
1239   Char* kw; /* current keyword, its length, its position */
1240   Int   kwl;
1241   Int   kpos = -1;
1242
1243   Int pass;
1244   /* pass 0 = search, optional pass 1 = output message multiple matches */
1245
1246   Int pass1needed = 0;
1247
1248   Int partial_match = -1;
1249   Int full_match = -1;
1250
1251   if (input_word == NULL) {
1252      iw[0] = 0;
1253      partial_match = 0; /* to force an empty string to cause an error */
1254   } else {
1255      VG_(strcpy) (iw, input_word);
1256   }
1257
1258   for (pass = 0; pass < 2; pass++) {
1259      VG_(strcpy) (kwds, keywords);
1260      if (pass == 1)
1261         VG_(gdb_printf) ("%s can match",
1262                          (il == 0 ? "<empty string>" : (char *) iw));
1263      for (kw = VG_(strtok_r) (kwds, " ", &kwdssaveptr);
1264           kw != NULL;
1265           kw = VG_(strtok_r) (NULL, " ", &kwdssaveptr)) {
1266         kwl = VG_(strlen) (kw);
1267         kpos++;
1268
1269         if (il > kwl) {
1270            ; /* ishtar !~ is */
1271         } else if (il == kwl) {
1272            if (VG_(strcmp) (kw, iw) == 0) {
1273               /* exact match */
1274               if (pass == 1)
1275                  VG_(gdb_printf) (" %s", kw);
1276               if (full_match != -1)
1277                  pass1needed++;
1278               full_match = kpos;
1279            }
1280         } else {
1281            /* il < kwl */
1282            if (VG_(strncmp) (iw, kw, il) == 0) {
1283               /* partial match */
1284               if (pass == 1)
1285                  VG_(gdb_printf) (" %s", kw);
1286               if (partial_match != -1)
1287                  pass1needed++;
1288               partial_match = kpos;
1289            }
1290         }
1291      }
1292      /* check for success or for no match at all */
1293      if (pass1needed == 0) {
1294         if (full_match != -1) {
1295            return full_match;
1296         } else {
1297            if (report == kwd_report_all && partial_match == -1) {
1298               VG_(gdb_printf) ("%s does not match any of '%s'\n",
1299                                iw, keywords);
1300            }
1301            return partial_match;
1302         }
1303      }
1304
1305      /* here we have duplicated match error */
1306      if (pass == 1 || report == kwd_report_none) {
1307         if (report != kwd_report_none) {
1308            VG_(gdb_printf) ("\n");
1309         }
1310         if (partial_match != -1 || full_match != -1)
1311            return -2;
1312         else
1313            return -1;
1314      }
1315   }
1316   /* UNREACHED */
1317   vg_assert (0);
1318}
1319
1320/* True if string can be a 0x number */
1321static Bool is_zero_x (Char *s)
1322{
1323   if (strlen (s) >= 3 && s[0] == '0' && s[1] == 'x')
1324      return True;
1325   else
1326      return False;
1327}
1328
1329/* True if string can be a 0b number */
1330static Bool is_zero_b (Char *s)
1331{
1332   if (strlen (s) >= 3 && s[0] == '0' && s[1] == 'b')
1333      return True;
1334   else
1335      return False;
1336}
1337
1338void VG_(strtok_get_address_and_size) (Addr* address,
1339                                       SizeT* szB,
1340                                       Char **ssaveptr)
1341{
1342   Char* wa;
1343   Char* ws;
1344   Char* endptr;
1345   UChar *ppc;
1346
1347   wa = VG_(strtok_r) (NULL, " ", ssaveptr);
1348   ppc = wa;
1349   if (ppc == NULL || !VG_(parse_Addr) (&ppc, address)) {
1350      VG_(gdb_printf) ("missing or malformed address\n");
1351      *address = (Addr) 0;
1352      *szB = 0;
1353      return;
1354   }
1355   ws = VG_(strtok_r) (NULL, " ", ssaveptr);
1356   if (ws == NULL) {
1357      /* Do nothing, i.e. keep current value of szB. */ ;
1358   } else if (is_zero_x (ws)) {
1359      *szB = VG_(strtoull16) (ws, &endptr);
1360   } else if (is_zero_b (ws)) {
1361      Int j;
1362      Char *parsews = ws;
1363      Int n_bits = VG_(strlen) (ws) - 2;
1364      *szB = 0;
1365      ws = NULL; // assume the below loop gives a correct nr.
1366      for (j = 0; j < n_bits; j++) {
1367         if      ('0' == parsews[j+2]) { /* do nothing */ }
1368         else if ('1' == parsews[j+2]) *szB |= (1 << (n_bits-j-1));
1369         else {
1370            /* report malformed binary integer */
1371            ws = parsews;
1372            endptr = ws + j + 2;
1373            break;
1374         }
1375      }
1376   } else {
1377      *szB = VG_(strtoull10) (ws, &endptr);
1378   }
1379
1380   if (ws != NULL && *endptr != '\0') {
1381      VG_(gdb_printf) ("malformed integer, expecting "
1382                       "hex 0x..... or dec ...... or binary .....b\n");
1383      *address = (Addr) 0;
1384      *szB = 0;
1385      return;
1386   }
1387}
1388
1389void VG_(gdbserver_status_output)(void)
1390{
1391   const int nr_gdbserved_addresses
1392      = (gs_addresses == NULL ? -1 : VG_(HT_count_nodes) (gs_addresses));
1393   const int nr_watchpoints
1394      = (gs_watches == NULL ? -1 : (int) VG_(sizeXA) (gs_watches));
1395   remote_utils_output_status();
1396   VG_(umsg)
1397      ("nr of calls to gdbserver: %d\n"
1398       "single stepping %d\n"
1399       "interrupts intr_tid %d gs_non_busy %d gs_busy %d tid_non_intr %d\n"
1400       "gdbserved addresses %d (-1 = not initialized)\n"
1401       "watchpoints %d (-1 = not initialized)\n"
1402       "vgdb-error %d\n",
1403       gdbserver_called,
1404       valgrind_single_stepping(),
1405
1406       vgdb_interrupted_tid,
1407       interrupts_non_busy,
1408       interrupts_while_busy,
1409       interrupts_non_interruptible,
1410
1411       nr_gdbserved_addresses,
1412       nr_watchpoints,
1413       VG_(dyn_vgdb_error));
1414}
1415