Share fork_inferior et al with gdbserver
[external/binutils.git] / gdb / gdbserver / tracepoint.c
1 /* Tracepoint code for remote server for GDB.
2    Copyright (C) 2009-2017 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
18
19 #include "server.h"
20 #include "tracepoint.h"
21 #include "gdbthread.h"
22 #include "agent.h"
23 #include "rsp-low.h"
24
25 #include <ctype.h>
26 #include <fcntl.h>
27 #include <unistd.h>
28 #include <chrono>
29 #include <inttypes.h>
30 #include "ax.h"
31 #include "tdesc.h"
32
33 #define DEFAULT_TRACE_BUFFER_SIZE 5242880 /* 5*1024*1024 */
34
35 /* This file is built for both GDBserver, and the in-process
36    agent (IPA), a shared library that includes a tracing agent that is
37    loaded by the inferior to support fast tracepoints.  Fast
38    tracepoints (or more accurately, jump based tracepoints) are
39    implemented by patching the tracepoint location with a jump into a
40    small trampoline function whose job is to save the register state,
41    call the in-process tracing agent, and then execute the original
42    instruction that was under the tracepoint jump (possibly adjusted,
43    if PC-relative, or some such).
44
45    The current synchronization design is pull based.  That means,
46    GDBserver does most of the work, by peeking/poking at the inferior
47    agent's memory directly for downloading tracepoint and associated
48    objects, and for uploading trace frames.  Whenever the IPA needs
49    something from GDBserver (trace buffer is full, tracing stopped for
50    some reason, etc.) the IPA calls a corresponding hook function
51    where GDBserver has placed a breakpoint.
52
53    Each of the agents has its own trace buffer.  When browsing the
54    trace frames built from slow and fast tracepoints from GDB (tfind
55    mode), there's no guarantee the user is seeing the trace frames in
56    strict chronological creation order, although, GDBserver tries to
57    keep the order relatively reasonable, by syncing the trace buffers
58    at appropriate times.
59
60 */
61
62 #ifdef IN_PROCESS_AGENT
63
64 static void trace_vdebug (const char *, ...) ATTRIBUTE_PRINTF (1, 2);
65
66 static void
67 trace_vdebug (const char *fmt, ...)
68 {
69   char buf[1024];
70   va_list ap;
71
72   va_start (ap, fmt);
73   vsprintf (buf, fmt, ap);
74   fprintf (stderr, PROG "/tracepoint: %s\n", buf);
75   va_end (ap);
76 }
77
78 #define trace_debug_1(level, fmt, args...)      \
79   do {                                          \
80     if (level <= debug_threads)         \
81       trace_vdebug ((fmt), ##args);             \
82   } while (0)
83
84 #else
85
86 #define trace_debug_1(level, fmt, args...)      \
87   do {                                          \
88     if (level <= debug_threads)                 \
89       {                                         \
90         debug_printf ((fmt), ##args);           \
91         debug_printf ("\n");                    \
92       }                                         \
93   } while (0)
94
95 #endif
96
97 #define trace_debug(FMT, args...)               \
98   trace_debug_1 (1, FMT, ##args)
99
100 /* Prefix exported symbols, for good citizenship.  All the symbols
101    that need exporting are defined in this module.  Note that all
102    these symbols must be tagged with IP_AGENT_EXPORT_*.  */
103 #ifdef IN_PROCESS_AGENT
104 # define gdb_tp_heap_buffer IPA_SYM_EXPORTED_NAME (gdb_tp_heap_buffer)
105 # define gdb_jump_pad_buffer IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer)
106 # define gdb_jump_pad_buffer_end IPA_SYM_EXPORTED_NAME (gdb_jump_pad_buffer_end)
107 # define gdb_trampoline_buffer IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer)
108 # define gdb_trampoline_buffer_end IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_end)
109 # define gdb_trampoline_buffer_error IPA_SYM_EXPORTED_NAME (gdb_trampoline_buffer_error)
110 # define collecting IPA_SYM_EXPORTED_NAME (collecting)
111 # define gdb_collect_ptr IPA_SYM_EXPORTED_NAME (gdb_collect_ptr)
112 # define stop_tracing IPA_SYM_EXPORTED_NAME (stop_tracing)
113 # define flush_trace_buffer IPA_SYM_EXPORTED_NAME (flush_trace_buffer)
114 # define about_to_request_buffer_space IPA_SYM_EXPORTED_NAME (about_to_request_buffer_space)
115 # define trace_buffer_is_full IPA_SYM_EXPORTED_NAME (trace_buffer_is_full)
116 # define stopping_tracepoint IPA_SYM_EXPORTED_NAME (stopping_tracepoint)
117 # define expr_eval_result IPA_SYM_EXPORTED_NAME (expr_eval_result)
118 # define error_tracepoint IPA_SYM_EXPORTED_NAME (error_tracepoint)
119 # define tracepoints IPA_SYM_EXPORTED_NAME (tracepoints)
120 # define tracing IPA_SYM_EXPORTED_NAME (tracing)
121 # define trace_buffer_ctrl IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl)
122 # define trace_buffer_ctrl_curr IPA_SYM_EXPORTED_NAME (trace_buffer_ctrl_curr)
123 # define trace_buffer_lo IPA_SYM_EXPORTED_NAME (trace_buffer_lo)
124 # define trace_buffer_hi IPA_SYM_EXPORTED_NAME (trace_buffer_hi)
125 # define traceframe_read_count IPA_SYM_EXPORTED_NAME (traceframe_read_count)
126 # define traceframe_write_count IPA_SYM_EXPORTED_NAME (traceframe_write_count)
127 # define traceframes_created IPA_SYM_EXPORTED_NAME (traceframes_created)
128 # define trace_state_variables IPA_SYM_EXPORTED_NAME (trace_state_variables)
129 # define get_raw_reg_ptr IPA_SYM_EXPORTED_NAME (get_raw_reg_ptr)
130 # define get_trace_state_variable_value_ptr \
131   IPA_SYM_EXPORTED_NAME (get_trace_state_variable_value_ptr)
132 # define set_trace_state_variable_value_ptr \
133   IPA_SYM_EXPORTED_NAME (set_trace_state_variable_value_ptr)
134 # define ust_loaded IPA_SYM_EXPORTED_NAME (ust_loaded)
135 # define helper_thread_id IPA_SYM_EXPORTED_NAME (helper_thread_id)
136 # define cmd_buf IPA_SYM_EXPORTED_NAME (cmd_buf)
137 # define ipa_tdesc_idx IPA_SYM_EXPORTED_NAME (ipa_tdesc_idx)
138 #endif
139
140 #ifndef IN_PROCESS_AGENT
141
142 /* Addresses of in-process agent's symbols GDBserver cares about.  */
143
144 struct ipa_sym_addresses
145 {
146   CORE_ADDR addr_gdb_tp_heap_buffer;
147   CORE_ADDR addr_gdb_jump_pad_buffer;
148   CORE_ADDR addr_gdb_jump_pad_buffer_end;
149   CORE_ADDR addr_gdb_trampoline_buffer;
150   CORE_ADDR addr_gdb_trampoline_buffer_end;
151   CORE_ADDR addr_gdb_trampoline_buffer_error;
152   CORE_ADDR addr_collecting;
153   CORE_ADDR addr_gdb_collect_ptr;
154   CORE_ADDR addr_stop_tracing;
155   CORE_ADDR addr_flush_trace_buffer;
156   CORE_ADDR addr_about_to_request_buffer_space;
157   CORE_ADDR addr_trace_buffer_is_full;
158   CORE_ADDR addr_stopping_tracepoint;
159   CORE_ADDR addr_expr_eval_result;
160   CORE_ADDR addr_error_tracepoint;
161   CORE_ADDR addr_tracepoints;
162   CORE_ADDR addr_tracing;
163   CORE_ADDR addr_trace_buffer_ctrl;
164   CORE_ADDR addr_trace_buffer_ctrl_curr;
165   CORE_ADDR addr_trace_buffer_lo;
166   CORE_ADDR addr_trace_buffer_hi;
167   CORE_ADDR addr_traceframe_read_count;
168   CORE_ADDR addr_traceframe_write_count;
169   CORE_ADDR addr_traceframes_created;
170   CORE_ADDR addr_trace_state_variables;
171   CORE_ADDR addr_get_raw_reg_ptr;
172   CORE_ADDR addr_get_trace_state_variable_value_ptr;
173   CORE_ADDR addr_set_trace_state_variable_value_ptr;
174   CORE_ADDR addr_ust_loaded;
175   CORE_ADDR addr_ipa_tdesc_idx;
176 };
177
178 static struct
179 {
180   const char *name;
181   int offset;
182 } symbol_list[] = {
183   IPA_SYM(gdb_tp_heap_buffer),
184   IPA_SYM(gdb_jump_pad_buffer),
185   IPA_SYM(gdb_jump_pad_buffer_end),
186   IPA_SYM(gdb_trampoline_buffer),
187   IPA_SYM(gdb_trampoline_buffer_end),
188   IPA_SYM(gdb_trampoline_buffer_error),
189   IPA_SYM(collecting),
190   IPA_SYM(gdb_collect_ptr),
191   IPA_SYM(stop_tracing),
192   IPA_SYM(flush_trace_buffer),
193   IPA_SYM(about_to_request_buffer_space),
194   IPA_SYM(trace_buffer_is_full),
195   IPA_SYM(stopping_tracepoint),
196   IPA_SYM(expr_eval_result),
197   IPA_SYM(error_tracepoint),
198   IPA_SYM(tracepoints),
199   IPA_SYM(tracing),
200   IPA_SYM(trace_buffer_ctrl),
201   IPA_SYM(trace_buffer_ctrl_curr),
202   IPA_SYM(trace_buffer_lo),
203   IPA_SYM(trace_buffer_hi),
204   IPA_SYM(traceframe_read_count),
205   IPA_SYM(traceframe_write_count),
206   IPA_SYM(traceframes_created),
207   IPA_SYM(trace_state_variables),
208   IPA_SYM(get_raw_reg_ptr),
209   IPA_SYM(get_trace_state_variable_value_ptr),
210   IPA_SYM(set_trace_state_variable_value_ptr),
211   IPA_SYM(ust_loaded),
212   IPA_SYM(ipa_tdesc_idx),
213 };
214
215 static struct ipa_sym_addresses ipa_sym_addrs;
216
217 static int read_inferior_integer (CORE_ADDR symaddr, int *val);
218
219 /* Returns true if both the in-process agent library and the static
220    tracepoints libraries are loaded in the inferior, and agent has
221    capability on static tracepoints.  */
222
223 static int
224 in_process_agent_supports_ust (void)
225 {
226   int loaded = 0;
227
228   if (!agent_loaded_p ())
229     {
230       warning ("In-process agent not loaded");
231       return 0;
232     }
233
234   if (agent_capability_check (AGENT_CAPA_STATIC_TRACE))
235     {
236       /* Agent understands static tracepoint, then check whether UST is in
237          fact loaded in the inferior.  */
238       if (read_inferior_integer (ipa_sym_addrs.addr_ust_loaded, &loaded))
239         {
240           warning ("Error reading ust_loaded in lib");
241           return 0;
242         }
243
244       return loaded;
245     }
246   else
247     return 0;
248 }
249
250 static void
251 write_e_ipa_not_loaded (char *buffer)
252 {
253   sprintf (buffer,
254            "E.In-process agent library not loaded in process.  "
255            "Fast and static tracepoints unavailable.");
256 }
257
258 /* Write an error to BUFFER indicating that UST isn't loaded in the
259    inferior.  */
260
261 static void
262 write_e_ust_not_loaded (char *buffer)
263 {
264 #ifdef HAVE_UST
265   sprintf (buffer,
266            "E.UST library not loaded in process.  "
267            "Static tracepoints unavailable.");
268 #else
269   sprintf (buffer, "E.GDBserver was built without static tracepoints support");
270 #endif
271 }
272
273 /* If the in-process agent library isn't loaded in the inferior, write
274    an error to BUFFER, and return 1.  Otherwise, return 0.  */
275
276 static int
277 maybe_write_ipa_not_loaded (char *buffer)
278 {
279   if (!agent_loaded_p ())
280     {
281       write_e_ipa_not_loaded (buffer);
282       return 1;
283     }
284   return 0;
285 }
286
287 /* If the in-process agent library and the ust (static tracepoints)
288    library aren't loaded in the inferior, write an error to BUFFER,
289    and return 1.  Otherwise, return 0.  */
290
291 static int
292 maybe_write_ipa_ust_not_loaded (char *buffer)
293 {
294   if (!agent_loaded_p ())
295     {
296       write_e_ipa_not_loaded (buffer);
297       return 1;
298     }
299   else if (!in_process_agent_supports_ust ())
300     {
301       write_e_ust_not_loaded (buffer);
302       return 1;
303     }
304   return 0;
305 }
306
307 /* Cache all future symbols that the tracepoints module might request.
308    We can not request symbols at arbitrary states in the remote
309    protocol, only when the client tells us that new symbols are
310    available.  So when we load the in-process library, make sure to
311    check the entire list.  */
312
313 void
314 tracepoint_look_up_symbols (void)
315 {
316   int i;
317
318   if (agent_loaded_p ())
319     return;
320
321   for (i = 0; i < sizeof (symbol_list) / sizeof (symbol_list[0]); i++)
322     {
323       CORE_ADDR *addrp =
324         (CORE_ADDR *) ((char *) &ipa_sym_addrs + symbol_list[i].offset);
325
326       if (look_up_one_symbol (symbol_list[i].name, addrp, 1) == 0)
327         {
328           if (debug_threads)
329             debug_printf ("symbol `%s' not found\n", symbol_list[i].name);
330           return;
331         }
332     }
333
334   agent_look_up_symbols (NULL);
335 }
336
337 #endif
338
339 /* GDBserver places a breakpoint on the IPA's version (which is a nop)
340    of the "stop_tracing" function.  When this breakpoint is hit,
341    tracing stopped in the IPA for some reason.  E.g., due to
342    tracepoint reaching the pass count, hitting conditional expression
343    evaluation error, etc.
344
345    The IPA's trace buffer is never in circular tracing mode: instead,
346    GDBserver's is, and whenever the in-process buffer fills, it calls
347    "flush_trace_buffer", which triggers an internal breakpoint.
348    GDBserver reacts to this breakpoint by pulling the meanwhile
349    collected data.  Old frames discarding is always handled on the
350    GDBserver side.  */
351
352 #ifdef IN_PROCESS_AGENT
353 int
354 read_inferior_memory (CORE_ADDR memaddr, unsigned char *myaddr, int len)
355 {
356   memcpy (myaddr, (void *) (uintptr_t) memaddr, len);
357   return 0;
358 }
359
360 /* Call this in the functions where GDBserver places a breakpoint, so
361    that the compiler doesn't try to be clever and skip calling the
362    function at all.  This is necessary, even if we tell the compiler
363    to not inline said functions.  */
364
365 #if defined(__GNUC__)
366 #  define UNKNOWN_SIDE_EFFECTS() asm ("")
367 #else
368 #  define UNKNOWN_SIDE_EFFECTS() do {} while (0)
369 #endif
370
371 IP_AGENT_EXPORT_FUNC void
372 stop_tracing (void)
373 {
374   /* GDBserver places breakpoint here.  */
375   UNKNOWN_SIDE_EFFECTS();
376 }
377
378 IP_AGENT_EXPORT_FUNC void
379 flush_trace_buffer (void)
380 {
381   /* GDBserver places breakpoint here.  */
382   UNKNOWN_SIDE_EFFECTS();
383 }
384
385 #endif
386
387 #ifndef IN_PROCESS_AGENT
388 static int
389 tracepoint_handler (CORE_ADDR address)
390 {
391   trace_debug ("tracepoint_handler: tracepoint at 0x%s hit",
392                paddress (address));
393   return 0;
394 }
395
396 /* Breakpoint at "stop_tracing" in the inferior lib.  */
397 struct breakpoint *stop_tracing_bkpt;
398 static int stop_tracing_handler (CORE_ADDR);
399
400 /* Breakpoint at "flush_trace_buffer" in the inferior lib.  */
401 struct breakpoint *flush_trace_buffer_bkpt;
402 static int flush_trace_buffer_handler (CORE_ADDR);
403
404 static void download_trace_state_variables (void);
405 static void upload_fast_traceframes (void);
406
407 static int run_inferior_command (char *cmd, int len);
408
409 static int
410 read_inferior_integer (CORE_ADDR symaddr, int *val)
411 {
412   return read_inferior_memory (symaddr, (unsigned char *) val,
413                                sizeof (*val));
414 }
415
416 struct tracepoint;
417 static int tracepoint_send_agent (struct tracepoint *tpoint);
418
419 static int
420 read_inferior_uinteger (CORE_ADDR symaddr, unsigned int *val)
421 {
422   return read_inferior_memory (symaddr, (unsigned char *) val,
423                                sizeof (*val));
424 }
425
426 static int
427 read_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR *val)
428 {
429   void *pval = (void *) (uintptr_t) val;
430   int ret;
431
432   ret = read_inferior_memory (symaddr, (unsigned char *) &pval, sizeof (pval));
433   *val = (uintptr_t) pval;
434   return ret;
435 }
436
437 static int
438 write_inferior_data_pointer (CORE_ADDR symaddr, CORE_ADDR val)
439 {
440   void *pval = (void *) (uintptr_t) val;
441   return write_inferior_memory (symaddr,
442                                 (unsigned char *) &pval, sizeof (pval));
443 }
444
445 static int
446 write_inferior_integer (CORE_ADDR symaddr, int val)
447 {
448   return write_inferior_memory (symaddr, (unsigned char *) &val, sizeof (val));
449 }
450
451 static int
452 write_inferior_int8 (CORE_ADDR symaddr, int8_t val)
453 {
454   return write_inferior_memory (symaddr, (unsigned char *) &val, sizeof (val));
455 }
456
457 static int
458 write_inferior_uinteger (CORE_ADDR symaddr, unsigned int val)
459 {
460   return write_inferior_memory (symaddr, (unsigned char *) &val, sizeof (val));
461 }
462
463 static CORE_ADDR target_malloc (ULONGEST size);
464
465 #define COPY_FIELD_TO_BUF(BUF, OBJ, FIELD)      \
466   do {                                                  \
467     memcpy (BUF, &(OBJ)->FIELD, sizeof ((OBJ)->FIELD)); \
468     BUF += sizeof ((OBJ)->FIELD);                       \
469   } while (0)
470
471 #endif
472
473 /* Base action.  Concrete actions inherit this.  */
474
475 struct tracepoint_action
476 {
477   char type;
478 };
479
480 /* An 'M' (collect memory) action.  */
481 struct collect_memory_action
482 {
483   struct tracepoint_action base;
484
485   ULONGEST addr;
486   ULONGEST len;
487   int32_t basereg;
488 };
489
490 /* An 'R' (collect registers) action.  */
491
492 struct collect_registers_action
493 {
494   struct tracepoint_action base;
495 };
496
497 /* An 'X' (evaluate expression) action.  */
498
499 struct eval_expr_action
500 {
501   struct tracepoint_action base;
502
503   struct agent_expr *expr;
504 };
505
506 /* An 'L' (collect static trace data) action.  */
507 struct collect_static_trace_data_action
508 {
509   struct tracepoint_action base;
510 };
511
512 #ifndef IN_PROCESS_AGENT
513 static CORE_ADDR
514 m_tracepoint_action_download (const struct tracepoint_action *action)
515 {
516   CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_memory_action));
517
518   write_inferior_memory (ipa_action, (unsigned char *) action,
519                          sizeof (struct collect_memory_action));
520
521   return ipa_action;
522 }
523 static char *
524 m_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
525 {
526   struct collect_memory_action *maction
527     = (struct collect_memory_action *) action;
528
529   COPY_FIELD_TO_BUF (buffer, maction, addr);
530   COPY_FIELD_TO_BUF (buffer, maction, len);
531   COPY_FIELD_TO_BUF (buffer, maction, basereg);
532
533   return buffer;
534 }
535
536 static CORE_ADDR
537 r_tracepoint_action_download (const struct tracepoint_action *action)
538 {
539   CORE_ADDR ipa_action = target_malloc (sizeof (struct collect_registers_action));
540
541   write_inferior_memory (ipa_action, (unsigned char *) action,
542                          sizeof (struct collect_registers_action));
543
544   return ipa_action;
545 }
546
547 static char *
548 r_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
549 {
550   return buffer;
551 }
552
553 static CORE_ADDR download_agent_expr (struct agent_expr *expr);
554
555 static CORE_ADDR
556 x_tracepoint_action_download (const struct tracepoint_action *action)
557 {
558   CORE_ADDR ipa_action = target_malloc (sizeof (struct eval_expr_action));
559   CORE_ADDR expr;
560
561   write_inferior_memory (ipa_action, (unsigned char *) action,
562                          sizeof (struct eval_expr_action));
563   expr = download_agent_expr (((struct eval_expr_action *) action)->expr);
564   write_inferior_data_pointer (ipa_action
565                                + offsetof (struct eval_expr_action, expr),
566                                expr);
567
568   return ipa_action;
569 }
570
571 /* Copy agent expression AEXPR to buffer pointed by P.  If AEXPR is NULL,
572    copy 0 to P.  Return updated header of buffer.  */
573
574 static char *
575 agent_expr_send (char *p, const struct agent_expr *aexpr)
576 {
577   /* Copy the length of condition first, and then copy its
578      content.  */
579   if (aexpr == NULL)
580     {
581       memset (p, 0, 4);
582       p += 4;
583     }
584   else
585     {
586       memcpy (p, &aexpr->length, 4);
587       p +=4;
588
589       memcpy (p, aexpr->bytes, aexpr->length);
590       p += aexpr->length;
591     }
592   return p;
593 }
594
595 static char *
596 x_tracepoint_action_send ( char *buffer, const struct tracepoint_action *action)
597 {
598   struct eval_expr_action *eaction = (struct eval_expr_action *) action;
599
600   return agent_expr_send (buffer, eaction->expr);
601 }
602
603 static CORE_ADDR
604 l_tracepoint_action_download (const struct tracepoint_action *action)
605 {
606   CORE_ADDR ipa_action
607     = target_malloc (sizeof (struct collect_static_trace_data_action));
608
609   write_inferior_memory (ipa_action, (unsigned char *) action,
610                          sizeof (struct collect_static_trace_data_action));
611
612   return ipa_action;
613 }
614
615 static char *
616 l_tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
617 {
618   return buffer;
619 }
620
621 static char *
622 tracepoint_action_send (char *buffer, const struct tracepoint_action *action)
623 {
624   switch (action->type)
625     {
626     case 'M':
627       return m_tracepoint_action_send (buffer, action);
628     case 'R':
629       return r_tracepoint_action_send (buffer, action);
630     case 'X':
631       return x_tracepoint_action_send (buffer, action);
632     case 'L':
633       return l_tracepoint_action_send (buffer, action);
634     }
635   error ("Unknown trace action '%c'.", action->type);
636 }
637
638 static CORE_ADDR
639 tracepoint_action_download (const struct tracepoint_action *action)
640 {
641   switch (action->type)
642     {
643     case 'M':
644       return m_tracepoint_action_download (action);
645     case 'R':
646       return r_tracepoint_action_download (action);
647     case 'X':
648       return x_tracepoint_action_download (action);
649     case 'L':
650       return l_tracepoint_action_download (action);
651     }
652   error ("Unknown trace action '%c'.", action->type);
653 }
654 #endif
655
656 /* This structure describes a piece of the source-level definition of
657    the tracepoint.  The contents are not interpreted by the target,
658    but preserved verbatim for uploading upon reconnection.  */
659
660 struct source_string
661 {
662   /* The type of string, such as "cond" for a conditional.  */
663   char *type;
664
665   /* The source-level string itself.  For the sake of target
666      debugging, we store it in plaintext, even though it is always
667      transmitted in hex.  */
668   char *str;
669
670   /* Link to the next one in the list.  We link them in the order
671      received, in case some make up an ordered list of commands or
672      some such.  */
673   struct source_string *next;
674 };
675
676 enum tracepoint_type
677 {
678   /* Trap based tracepoint.  */
679   trap_tracepoint,
680
681   /* A fast tracepoint implemented with a jump instead of a trap.  */
682   fast_tracepoint,
683
684   /* A static tracepoint, implemented by a program call into a tracing
685      library.  */
686   static_tracepoint
687 };
688
689 struct tracepoint_hit_ctx;
690
691 typedef enum eval_result_type (*condfn) (unsigned char *,
692                                          ULONGEST *);
693
694 /* The definition of a tracepoint.  */
695
696 /* Tracepoints may have multiple locations, each at a different
697    address.  This can occur with optimizations, template
698    instantiation, etc.  Since the locations may be in different
699    scopes, the conditions and actions may be different for each
700    location.  Our target version of tracepoints is more like GDB's
701    notion of "breakpoint locations", but we have almost nothing that
702    is not per-location, so we bother having two kinds of objects.  The
703    key consequence is that numbers are not unique, and that it takes
704    both number and address to identify a tracepoint uniquely.  */
705
706 struct tracepoint
707 {
708   /* The number of the tracepoint, as specified by GDB.  Several
709      tracepoint objects here may share a number.  */
710   uint32_t number;
711
712   /* Address at which the tracepoint is supposed to trigger.  Several
713      tracepoints may share an address.  */
714   CORE_ADDR address;
715
716   /* Tracepoint type.  */
717   enum tracepoint_type type;
718
719   /* True if the tracepoint is currently enabled.  */
720   int8_t enabled;
721
722   /* The number of single steps that will be performed after each
723      tracepoint hit.  */
724   uint64_t step_count;
725
726   /* The number of times the tracepoint may be hit before it will
727      terminate the entire tracing run.  */
728   uint64_t pass_count;
729
730   /* Pointer to the agent expression that is the tracepoint's
731      conditional, or NULL if the tracepoint is unconditional.  */
732   struct agent_expr *cond;
733
734   /* The list of actions to take when the tracepoint triggers.  */
735   uint32_t numactions;
736   struct tracepoint_action **actions;
737
738   /* Count of the times we've hit this tracepoint during the run.
739      Note that while-stepping steps are not counted as "hits".  */
740   uint64_t hit_count;
741
742   /* Cached sum of the sizes of traceframes created by this point.  */
743   uint64_t traceframe_usage;
744
745   CORE_ADDR compiled_cond;
746
747   /* Link to the next tracepoint in the list.  */
748   struct tracepoint *next;
749
750 #ifndef IN_PROCESS_AGENT
751   /* The list of actions to take when the tracepoint triggers, in
752      string/packet form.  */
753   char **actions_str;
754
755   /* The collection of strings that describe the tracepoint as it was
756      entered into GDB.  These are not used by the target, but are
757      reported back to GDB upon reconnection.  */
758   struct source_string *source_strings;
759
760   /* The number of bytes displaced by fast tracepoints. It may subsume
761      multiple instructions, for multi-byte fast tracepoints.  This
762      field is only valid for fast tracepoints.  */
763   uint32_t orig_size;
764
765   /* Only for fast tracepoints.  */
766   CORE_ADDR obj_addr_on_target;
767
768   /* Address range where the original instruction under a fast
769      tracepoint was relocated to.  (_end is actually one byte past
770      the end).  */
771   CORE_ADDR adjusted_insn_addr;
772   CORE_ADDR adjusted_insn_addr_end;
773
774   /* The address range of the piece of the jump pad buffer that was
775      assigned to this fast tracepoint.  (_end is actually one byte
776      past the end).*/
777   CORE_ADDR jump_pad;
778   CORE_ADDR jump_pad_end;
779
780   /* The address range of the piece of the trampoline buffer that was
781      assigned to this fast tracepoint.  (_end is actually one byte
782      past the end).  */
783   CORE_ADDR trampoline;
784   CORE_ADDR trampoline_end;
785
786   /* The list of actions to take while in a stepping loop.  These
787      fields are only valid for patch-based tracepoints.  */
788   int num_step_actions;
789   struct tracepoint_action **step_actions;
790   /* Same, but in string/packet form.  */
791   char **step_actions_str;
792
793   /* Handle returned by the breakpoint or tracepoint module when we
794      inserted the trap or jump, or hooked into a static tracepoint.
795      NULL if we haven't inserted it yet.  */
796   void *handle;
797 #endif
798
799 };
800
801 #ifndef IN_PROCESS_AGENT
802
803 /* Given `while-stepping', a thread may be collecting data for more
804    than one tracepoint simultaneously.  On the other hand, the same
805    tracepoint with a while-stepping action may be hit by more than one
806    thread simultaneously (but not quite, each thread could be handling
807    a different step).  Each thread holds a list of these objects,
808    representing the current step of each while-stepping action being
809    collected.  */
810
811 struct wstep_state
812 {
813   struct wstep_state *next;
814
815   /* The tracepoint number.  */
816   int tp_number;
817   /* The tracepoint's address.  */
818   CORE_ADDR tp_address;
819
820   /* The number of the current step in this 'while-stepping'
821      action.  */
822   long current_step;
823 };
824
825 #endif
826
827 EXTERN_C_PUSH
828
829 /* The linked list of all tracepoints.  Marked explicitly as used as
830    the in-process library doesn't use it for the fast tracepoints
831    support.  */
832 IP_AGENT_EXPORT_VAR struct tracepoint *tracepoints;
833
834 /* The first tracepoint to exceed its pass count.  */
835
836 IP_AGENT_EXPORT_VAR struct tracepoint *stopping_tracepoint;
837
838 /* True if the trace buffer is full or otherwise no longer usable.  */
839
840 IP_AGENT_EXPORT_VAR int trace_buffer_is_full;
841
842 /* The first error that occurred during expression evaluation.  */
843
844 /* Stored as an int to avoid the IPA ABI being dependent on whatever
845    the compiler decides to use for the enum's underlying type.  Holds
846    enum eval_result_type values.  */
847 IP_AGENT_EXPORT_VAR int expr_eval_result = expr_eval_no_error;
848
849 EXTERN_C_POP
850
851 #ifndef IN_PROCESS_AGENT
852
853 /* Pointer to the last tracepoint in the list, new tracepoints are
854    linked in at the end.  */
855
856 static struct tracepoint *last_tracepoint;
857
858 static const char *eval_result_names[] =
859   {
860     "terror:in the attic",  /* this should never be reported */
861     "terror:empty expression",
862     "terror:empty stack",
863     "terror:stack overflow",
864     "terror:stack underflow",
865     "terror:unhandled opcode",
866     "terror:unrecognized opcode",
867     "terror:divide by zero"
868   };
869
870 #endif
871
872 /* The tracepoint in which the error occurred.  */
873
874 EXTERN_C_PUSH
875 IP_AGENT_EXPORT_VAR struct tracepoint *error_tracepoint;
876 EXTERN_C_POP
877
878 struct trace_state_variable
879 {
880   /* This is the name of the variable as used in GDB.  The target
881      doesn't use the name, but needs to have it for saving and
882      reconnection purposes.  */
883   char *name;
884
885   /* This number identifies the variable uniquely.  Numbers may be
886      assigned either by the target (in the case of builtin variables),
887      or by GDB, and are presumed unique during the course of a trace
888      experiment.  */
889   int number;
890
891   /* The variable's initial value, a 64-bit signed integer always.  */
892   LONGEST initial_value;
893
894   /* The variable's value, a 64-bit signed integer always.  */
895   LONGEST value;
896
897   /* Pointer to a getter function, used to supply computed values.  */
898   LONGEST (*getter) (void);
899
900   /* Link to the next variable.  */
901   struct trace_state_variable *next;
902 };
903
904 /* Linked list of all trace state variables.  */
905
906 #ifdef IN_PROCESS_AGENT
907 struct trace_state_variable *alloced_trace_state_variables;
908 #endif
909
910 IP_AGENT_EXPORT_VAR struct trace_state_variable *trace_state_variables;
911
912 /* The results of tracing go into a fixed-size space known as the
913    "trace buffer".  Because usage follows a limited number of
914    patterns, we manage it ourselves rather than with malloc.  Basic
915    rules are that we create only one trace frame at a time, each is
916    variable in size, they are never moved once created, and we only
917    discard if we are doing a circular buffer, and then only the oldest
918    ones.  Each trace frame includes its own size, so we don't need to
919    link them together, and the trace frame number is relative to the
920    first one, so we don't need to record numbers.  A trace frame also
921    records the number of the tracepoint that created it.  The data
922    itself is a series of blocks, each introduced by a single character
923    and with a defined format.  Each type of block has enough
924    type/length info to allow scanners to jump quickly from one block
925    to the next without reading each byte in the block.  */
926
927 /* Trace buffer management would be simple - advance a free pointer
928    from beginning to end, then stop - were it not for the circular
929    buffer option, which is a useful way to prevent a trace run from
930    stopping prematurely because the buffer filled up.  In the circular
931    case, the location of the first trace frame (trace_buffer_start)
932    moves as old trace frames are discarded.  Also, since we grow trace
933    frames incrementally as actions are performed, we wrap around to
934    the beginning of the trace buffer.  This is per-block, so each
935    block within a trace frame remains contiguous.  Things get messy
936    when the wrapped-around trace frame is the one being discarded; the
937    free space ends up in two parts at opposite ends of the buffer.  */
938
939 #ifndef ATTR_PACKED
940 #  if defined(__GNUC__)
941 #    define ATTR_PACKED __attribute__ ((packed))
942 #  else
943 #    define ATTR_PACKED /* nothing */
944 #  endif
945 #endif
946
947 /* The data collected at a tracepoint hit.  This object should be as
948    small as possible, since there may be a great many of them.  We do
949    not need to keep a frame number, because they are all sequential
950    and there are no deletions; so the Nth frame in the buffer is
951    always frame number N.  */
952
953 struct traceframe
954 {
955   /* Number of the tracepoint that collected this traceframe.  A value
956      of 0 indicates the current end of the trace buffer.  We make this
957      a 16-bit field because it's never going to happen that GDB's
958      numbering of tracepoints reaches 32,000.  */
959   int tpnum : 16;
960
961   /* The size of the data in this trace frame.  We limit this to 32
962      bits, even on a 64-bit target, because it's just implausible that
963      one is validly going to collect 4 gigabytes of data at a single
964      tracepoint hit.  */
965   unsigned int data_size : 32;
966
967   /* The base of the trace data, which is contiguous from this point.  */
968   unsigned char data[0];
969
970 } ATTR_PACKED;
971
972 /* The size of the EOB marker, in bytes.  A traceframe with zeroed
973    fields (and no data) marks the end of trace data.  */
974 #define TRACEFRAME_EOB_MARKER_SIZE offsetof (struct traceframe, data)
975
976 /* The traceframe to be used as the source of data to send back to
977    GDB.  A value of -1 means to get data from the live program.  */
978
979 int current_traceframe = -1;
980
981 /* This flag is true if the trace buffer is circular, meaning that
982    when it fills, the oldest trace frames are discarded in order to
983    make room.  */
984
985 #ifndef IN_PROCESS_AGENT
986 static int circular_trace_buffer;
987 #endif
988
989 /* Size of the trace buffer.  */
990
991 static LONGEST trace_buffer_size;
992
993 EXTERN_C_PUSH
994
995 /* Pointer to the block of memory that traceframes all go into.  */
996
997 IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_lo;
998
999 /* Pointer to the end of the trace buffer, more precisely to the byte
1000    after the end of the buffer.  */
1001
1002 IP_AGENT_EXPORT_VAR unsigned char *trace_buffer_hi;
1003
1004 EXTERN_C_POP
1005
1006 /* Control structure holding the read/write/etc. pointers into the
1007    trace buffer.  We need more than one of these to implement a
1008    transaction-like mechanism to garantees that both GDBserver and the
1009    in-process agent can try to change the trace buffer
1010    simultaneously.  */
1011
1012 struct trace_buffer_control
1013 {
1014   /* Pointer to the first trace frame in the buffer.  In the
1015      non-circular case, this is equal to trace_buffer_lo, otherwise it
1016      moves around in the buffer.  */
1017   unsigned char *start;
1018
1019   /* Pointer to the free part of the trace buffer.  Note that we clear
1020      several bytes at and after this pointer, so that traceframe
1021      scans/searches terminate properly.  */
1022   unsigned char *free;
1023
1024   /* Pointer to the byte after the end of the free part.  Note that
1025      this may be smaller than trace_buffer_free in the circular case,
1026      and means that the free part is in two pieces.  Initially it is
1027      equal to trace_buffer_hi, then is generally equivalent to
1028      trace_buffer_start.  */
1029   unsigned char *end_free;
1030
1031   /* Pointer to the wraparound.  If not equal to trace_buffer_hi, then
1032      this is the point at which the trace data breaks, and resumes at
1033      trace_buffer_lo.  */
1034   unsigned char *wrap;
1035 };
1036
1037 /* Same as above, to be used by GDBserver when updating the in-process
1038    agent.  */
1039 struct ipa_trace_buffer_control
1040 {
1041   uintptr_t start;
1042   uintptr_t free;
1043   uintptr_t end_free;
1044   uintptr_t wrap;
1045 };
1046
1047
1048 /* We have possibly both GDBserver and an inferior thread accessing
1049    the same IPA trace buffer memory.  The IPA is the producer (tries
1050    to put new frames in the buffer), while GDBserver occasionally
1051    consumes them, that is, flushes the IPA's buffer into its own
1052    buffer.  Both sides need to update the trace buffer control
1053    pointers (current head, tail, etc.).  We can't use a global lock to
1054    synchronize the accesses, as otherwise we could deadlock GDBserver
1055    (if the thread holding the lock stops for a signal, say).  So
1056    instead of that, we use a transaction scheme where GDBserver writes
1057    always prevail over the IPAs writes, and, we have the IPA detect
1058    the commit failure/overwrite, and retry the whole attempt.  This is
1059    mainly implemented by having a global token object that represents
1060    who wrote last to the buffer control structure.  We need to freeze
1061    any inferior writing to the buffer while GDBserver touches memory,
1062    so that the inferior can correctly detect that GDBserver had been
1063    there, otherwise, it could mistakingly think its commit was
1064    successful; that's implemented by simply having GDBserver set a
1065    breakpoint the inferior hits if it is the critical region.
1066
1067    There are three cycling trace buffer control structure copies
1068    (buffer head, tail, etc.), with the token object including an index
1069    indicating which is current live copy.  The IPA tentatively builds
1070    an updated copy in a non-current control structure, while GDBserver
1071    always clobbers the current version directly.  The IPA then tries
1072    to atomically "commit" its version; if GDBserver clobbered the
1073    structure meanwhile, that will fail, and the IPA restarts the
1074    allocation process.
1075
1076    Listing the step in further detail, we have:
1077
1078   In-process agent (producer):
1079
1080   - passes by `about_to_request_buffer_space' breakpoint/lock
1081
1082   - reads current token, extracts current trace buffer control index,
1083     and starts tentatively updating the rightmost one (0->1, 1->2,
1084     2->0).  Note that only one inferior thread is executing this code
1085     at any given time, due to an outer lock in the jump pads.
1086
1087   - updates counters, and tries to commit the token.
1088
1089   - passes by second `about_to_request_buffer_space' breakpoint/lock,
1090     leaving the sync region.
1091
1092   - checks if the update was effective.
1093
1094   - if trace buffer was found full, hits flush_trace_buffer
1095     breakpoint, and restarts later afterwards.
1096
1097   GDBserver (consumer):
1098
1099   - sets `about_to_request_buffer_space' breakpoint/lock.
1100
1101   - updates the token unconditionally, using the current buffer
1102     control index, since it knows that the IP agent always writes to
1103     the rightmost, and due to the breakpoint, at most one IP thread
1104     can try to update the trace buffer concurrently to GDBserver, so
1105     there will be no danger of trace buffer control index wrap making
1106     the IPA write to the same index as GDBserver.
1107
1108   - flushes the IP agent's trace buffer completely, and updates the
1109     current trace buffer control structure.  GDBserver *always* wins.
1110
1111   - removes the `about_to_request_buffer_space' breakpoint.
1112
1113 The token is stored in the `trace_buffer_ctrl_curr' variable.
1114 Internally, it's bits are defined as:
1115
1116  |-------------+-----+-------------+--------+-------------+--------------|
1117  | Bit offsets |  31 |   30 - 20   |   19   |    18-8     |     7-0      |
1118  |-------------+-----+-------------+--------+-------------+--------------|
1119  | What        | GSB | PC (11-bit) | unused | CC (11-bit) | TBCI (8-bit) |
1120  |-------------+-----+-------------+--------+-------------+--------------|
1121
1122  GSB  - GDBserver Stamp Bit
1123  PC   - Previous Counter
1124  CC   - Current Counter
1125  TBCI - Trace Buffer Control Index
1126
1127
1128 An IPA update of `trace_buffer_ctrl_curr' does:
1129
1130     - read CC from the current token, save as PC.
1131     - updates pointers
1132     - atomically tries to write PC+1,CC
1133
1134 A GDBserver update of `trace_buffer_ctrl_curr' does:
1135
1136     - reads PC and CC from the current token.
1137     - updates pointers
1138     - writes GSB,PC,CC
1139 */
1140
1141 /* These are the bits of `trace_buffer_ctrl_curr' that are reserved
1142    for the counters described below.  The cleared bits are used to
1143    hold the index of the items of the `trace_buffer_ctrl' array that
1144    is "current".  */
1145 #define GDBSERVER_FLUSH_COUNT_MASK        0xfffffff0
1146
1147 /* `trace_buffer_ctrl_curr' contains two counters.  The `previous'
1148    counter, and the `current' counter.  */
1149
1150 #define GDBSERVER_FLUSH_COUNT_MASK_PREV   0x7ff00000
1151 #define GDBSERVER_FLUSH_COUNT_MASK_CURR   0x0007ff00
1152
1153 /* When GDBserver update the IP agent's `trace_buffer_ctrl_curr', it
1154    always stamps this bit as set.  */
1155 #define GDBSERVER_UPDATED_FLUSH_COUNT_BIT 0x80000000
1156
1157 #ifdef IN_PROCESS_AGENT
1158 IP_AGENT_EXPORT_VAR struct trace_buffer_control trace_buffer_ctrl[3];
1159 IP_AGENT_EXPORT_VAR unsigned int trace_buffer_ctrl_curr;
1160
1161 # define TRACE_BUFFER_CTRL_CURR \
1162   (trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK)
1163
1164 #else
1165
1166 /* The GDBserver side agent only needs one instance of this object, as
1167    it doesn't need to sync with itself.  Define it as array anyway so
1168    that the rest of the code base doesn't need to care for the
1169    difference.  */
1170 struct trace_buffer_control trace_buffer_ctrl[1];
1171 # define TRACE_BUFFER_CTRL_CURR 0
1172 #endif
1173
1174 /* These are convenience macros used to access the current trace
1175    buffer control in effect.  */
1176 #define trace_buffer_start (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].start)
1177 #define trace_buffer_free (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].free)
1178 #define trace_buffer_end_free \
1179   (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].end_free)
1180 #define trace_buffer_wrap (trace_buffer_ctrl[TRACE_BUFFER_CTRL_CURR].wrap)
1181
1182
1183 /* Macro that returns a pointer to the first traceframe in the buffer.  */
1184
1185 #define FIRST_TRACEFRAME() ((struct traceframe *) trace_buffer_start)
1186
1187 /* Macro that returns a pointer to the next traceframe in the buffer.
1188    If the computed location is beyond the wraparound point, subtract
1189    the offset of the wraparound.  */
1190
1191 #define NEXT_TRACEFRAME_1(TF) \
1192   (((unsigned char *) (TF)) + sizeof (struct traceframe) + (TF)->data_size)
1193
1194 #define NEXT_TRACEFRAME(TF) \
1195   ((struct traceframe *) (NEXT_TRACEFRAME_1 (TF)  \
1196                           - ((NEXT_TRACEFRAME_1 (TF) >= trace_buffer_wrap) \
1197                              ? (trace_buffer_wrap - trace_buffer_lo)    \
1198                              : 0)))
1199
1200 /* The difference between these counters represents the total number
1201    of complete traceframes present in the trace buffer.  The IP agent
1202    writes to the write count, GDBserver writes to read count.  */
1203
1204 IP_AGENT_EXPORT_VAR unsigned int traceframe_write_count;
1205 IP_AGENT_EXPORT_VAR unsigned int traceframe_read_count;
1206
1207 /* Convenience macro.  */
1208
1209 #define traceframe_count \
1210   ((unsigned int) (traceframe_write_count - traceframe_read_count))
1211
1212 /* The count of all traceframes created in the current run, including
1213    ones that were discarded to make room.  */
1214
1215 IP_AGENT_EXPORT_VAR int traceframes_created;
1216
1217 #ifndef IN_PROCESS_AGENT
1218
1219 /* Read-only regions are address ranges whose contents don't change,
1220    and so can be read from target memory even while looking at a trace
1221    frame.  Without these, disassembly for instance will likely fail,
1222    because the program code is not usually collected into a trace
1223    frame.  This data structure does not need to be very complicated or
1224    particularly efficient, it's only going to be used occasionally,
1225    and only by some commands.  */
1226
1227 struct readonly_region
1228 {
1229   /* The bounds of the region.  */
1230   CORE_ADDR start, end;
1231
1232   /* Link to the next one.  */
1233   struct readonly_region *next;
1234 };
1235
1236 /* Linked list of readonly regions.  This list stays in effect from
1237    one tstart to the next.  */
1238
1239 static struct readonly_region *readonly_regions;
1240
1241 #endif
1242
1243 /* The global that controls tracing overall.  */
1244
1245 IP_AGENT_EXPORT_VAR int tracing;
1246
1247 #ifndef IN_PROCESS_AGENT
1248
1249 /* Controls whether tracing should continue after GDB disconnects.  */
1250
1251 int disconnected_tracing;
1252
1253 /* The reason for the last tracing run to have stopped.  We initialize
1254    to a distinct string so that GDB can distinguish between "stopped
1255    after running" and "stopped because never run" cases.  */
1256
1257 static const char *tracing_stop_reason = "tnotrun";
1258
1259 static int tracing_stop_tpnum;
1260
1261 /* 64-bit timestamps for the trace run's start and finish, expressed
1262    in microseconds from the Unix epoch.  */
1263
1264 LONGEST tracing_start_time;
1265 LONGEST tracing_stop_time;
1266
1267 /* The (optional) user-supplied name of the user that started the run.
1268    This is an arbitrary string, and may be NULL.  */
1269
1270 char *tracing_user_name;
1271
1272 /* Optional user-supplied text describing the run.  This is
1273    an arbitrary string, and may be NULL.  */
1274
1275 char *tracing_notes;
1276
1277 /* Optional user-supplied text explaining a tstop command.  This is an
1278    arbitrary string, and may be NULL.  */
1279
1280 char *tracing_stop_note;
1281
1282 #endif
1283
1284 /* Functions local to this file.  */
1285
1286 /* Base "class" for tracepoint type specific data to be passed down to
1287    collect_data_at_tracepoint.  */
1288 struct tracepoint_hit_ctx
1289 {
1290   enum tracepoint_type type;
1291 };
1292
1293 #ifdef IN_PROCESS_AGENT
1294
1295 /* Fast/jump tracepoint specific data to be passed down to
1296    collect_data_at_tracepoint.  */
1297 struct fast_tracepoint_ctx
1298 {
1299   struct tracepoint_hit_ctx base;
1300
1301   struct regcache regcache;
1302   int regcache_initted;
1303   unsigned char *regspace;
1304
1305   unsigned char *regs;
1306   struct tracepoint *tpoint;
1307 };
1308
1309 /* Static tracepoint specific data to be passed down to
1310    collect_data_at_tracepoint.  */
1311 struct static_tracepoint_ctx
1312 {
1313   struct tracepoint_hit_ctx base;
1314
1315   /* The regcache corresponding to the registers state at the time of
1316      the tracepoint hit.  Initialized lazily, from REGS.  */
1317   struct regcache regcache;
1318   int regcache_initted;
1319
1320   /* The buffer space REGCACHE above uses.  We use a separate buffer
1321      instead of letting the regcache malloc for both signal safety and
1322      performance reasons; this is allocated on the stack instead.  */
1323   unsigned char *regspace;
1324
1325   /* The register buffer as passed on by lttng/ust.  */
1326   struct registers *regs;
1327
1328   /* The "printf" formatter and the args the user passed to the marker
1329      call.  We use this to be able to collect "static trace data"
1330      ($_sdata).  */
1331   const char *fmt;
1332   va_list *args;
1333
1334   /* The GDB tracepoint matching the probed marker that was "hit".  */
1335   struct tracepoint *tpoint;
1336 };
1337
1338 #else
1339
1340 /* Static tracepoint specific data to be passed down to
1341    collect_data_at_tracepoint.  */
1342 struct trap_tracepoint_ctx
1343 {
1344   struct tracepoint_hit_ctx base;
1345
1346   struct regcache *regcache;
1347 };
1348
1349 #endif
1350
1351 #ifndef IN_PROCESS_AGENT
1352 static CORE_ADDR traceframe_get_pc (struct traceframe *tframe);
1353 static int traceframe_read_tsv (int num, LONGEST *val);
1354 #endif
1355
1356 static int condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
1357                                          struct tracepoint *tpoint);
1358
1359 #ifndef IN_PROCESS_AGENT
1360 static void clear_readonly_regions (void);
1361 static void clear_installed_tracepoints (void);
1362 #endif
1363
1364 static void collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
1365                                         CORE_ADDR stop_pc,
1366                                         struct tracepoint *tpoint);
1367 #ifndef IN_PROCESS_AGENT
1368 static void collect_data_at_step (struct tracepoint_hit_ctx *ctx,
1369                                   CORE_ADDR stop_pc,
1370                                   struct tracepoint *tpoint, int current_step);
1371 static void compile_tracepoint_condition (struct tracepoint *tpoint,
1372                                           CORE_ADDR *jump_entry);
1373 #endif
1374 static void do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx,
1375                                      CORE_ADDR stop_pc,
1376                                      struct tracepoint *tpoint,
1377                                      struct traceframe *tframe,
1378                                      struct tracepoint_action *taction);
1379
1380 #ifndef IN_PROCESS_AGENT
1381 static struct tracepoint *fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR);
1382
1383 static void install_tracepoint (struct tracepoint *, char *own_buf);
1384 static void download_tracepoint (struct tracepoint *);
1385 static int install_fast_tracepoint (struct tracepoint *, char *errbuf);
1386 static void clone_fast_tracepoint (struct tracepoint *to,
1387                                    const struct tracepoint *from);
1388 #endif
1389
1390 static LONGEST get_timestamp (void);
1391
1392 #if defined(__GNUC__)
1393 #  define memory_barrier() asm volatile ("" : : : "memory")
1394 #else
1395 #  define memory_barrier() do {} while (0)
1396 #endif
1397
1398 /* We only build the IPA if this builtin is supported, and there are
1399    no uses of this in GDBserver itself, so we're safe in defining this
1400    unconditionally.  */
1401 #define cmpxchg(mem, oldval, newval) \
1402   __sync_val_compare_and_swap (mem, oldval, newval)
1403
1404 /* Record that an error occurred during expression evaluation.  */
1405
1406 static void
1407 record_tracepoint_error (struct tracepoint *tpoint, const char *which,
1408                          enum eval_result_type rtype)
1409 {
1410   trace_debug ("Tracepoint %d at %s %s eval reports error %d",
1411                tpoint->number, paddress (tpoint->address), which, rtype);
1412
1413 #ifdef IN_PROCESS_AGENT
1414   /* Only record the first error we get.  */
1415   if (cmpxchg (&expr_eval_result,
1416                expr_eval_no_error,
1417                rtype) != expr_eval_no_error)
1418     return;
1419 #else
1420   if (expr_eval_result != expr_eval_no_error)
1421     return;
1422 #endif
1423
1424   error_tracepoint = tpoint;
1425 }
1426
1427 /* Trace buffer management.  */
1428
1429 static void
1430 clear_trace_buffer (void)
1431 {
1432   trace_buffer_start = trace_buffer_lo;
1433   trace_buffer_free = trace_buffer_lo;
1434   trace_buffer_end_free = trace_buffer_hi;
1435   trace_buffer_wrap = trace_buffer_hi;
1436   /* A traceframe with zeroed fields marks the end of trace data.  */
1437   ((struct traceframe *) trace_buffer_free)->tpnum = 0;
1438   ((struct traceframe *) trace_buffer_free)->data_size = 0;
1439   traceframe_read_count = traceframe_write_count = 0;
1440   traceframes_created = 0;
1441 }
1442
1443 #ifndef IN_PROCESS_AGENT
1444
1445 static void
1446 clear_inferior_trace_buffer (void)
1447 {
1448   CORE_ADDR ipa_trace_buffer_lo;
1449   CORE_ADDR ipa_trace_buffer_hi;
1450   struct traceframe ipa_traceframe = { 0 };
1451   struct ipa_trace_buffer_control ipa_trace_buffer_ctrl;
1452
1453   read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo,
1454                               &ipa_trace_buffer_lo);
1455   read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi,
1456                               &ipa_trace_buffer_hi);
1457
1458   ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo;
1459   ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo;
1460   ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi;
1461   ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi;
1462
1463   /* A traceframe with zeroed fields marks the end of trace data.  */
1464   write_inferior_memory (ipa_sym_addrs.addr_trace_buffer_ctrl,
1465                          (unsigned char *) &ipa_trace_buffer_ctrl,
1466                          sizeof (ipa_trace_buffer_ctrl));
1467
1468   write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr, 0);
1469
1470   /* A traceframe with zeroed fields marks the end of trace data.  */
1471   write_inferior_memory (ipa_trace_buffer_lo,
1472                          (unsigned char *) &ipa_traceframe,
1473                          sizeof (ipa_traceframe));
1474
1475   write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count, 0);
1476   write_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count, 0);
1477   write_inferior_integer (ipa_sym_addrs.addr_traceframes_created, 0);
1478 }
1479
1480 #endif
1481
1482 static void
1483 init_trace_buffer (LONGEST bufsize)
1484 {
1485   size_t alloc_size;
1486
1487   trace_buffer_size = bufsize;
1488
1489   /* Make sure to internally allocate at least space for the EOB
1490      marker.  */
1491   alloc_size = (bufsize < TRACEFRAME_EOB_MARKER_SIZE
1492                 ? TRACEFRAME_EOB_MARKER_SIZE : bufsize);
1493   trace_buffer_lo = (unsigned char *) xrealloc (trace_buffer_lo, alloc_size);
1494
1495   trace_buffer_hi = trace_buffer_lo + trace_buffer_size;
1496
1497   clear_trace_buffer ();
1498 }
1499
1500 #ifdef IN_PROCESS_AGENT
1501
1502 IP_AGENT_EXPORT_FUNC void
1503 about_to_request_buffer_space (void)
1504 {
1505   /* GDBserver places breakpoint here while it goes about to flush
1506      data at random times.  */
1507   UNKNOWN_SIDE_EFFECTS();
1508 }
1509
1510 #endif
1511
1512 /* Carve out a piece of the trace buffer, returning NULL in case of
1513    failure.  */
1514
1515 static void *
1516 trace_buffer_alloc (size_t amt)
1517 {
1518   unsigned char *rslt;
1519   struct trace_buffer_control *tbctrl;
1520   unsigned int curr;
1521 #ifdef IN_PROCESS_AGENT
1522   unsigned int prev, prev_filtered;
1523   unsigned int commit_count;
1524   unsigned int commit;
1525   unsigned int readout;
1526 #else
1527   struct traceframe *oldest;
1528   unsigned char *new_start;
1529 #endif
1530
1531   trace_debug ("Want to allocate %ld+%ld bytes in trace buffer",
1532                (long) amt, (long) sizeof (struct traceframe));
1533
1534   /* Account for the EOB marker.  */
1535   amt += TRACEFRAME_EOB_MARKER_SIZE;
1536
1537 #ifdef IN_PROCESS_AGENT
1538  again:
1539   memory_barrier ();
1540
1541   /* Read the current token and extract the index to try to write to,
1542      storing it in CURR.  */
1543   prev = trace_buffer_ctrl_curr;
1544   prev_filtered = prev & ~GDBSERVER_FLUSH_COUNT_MASK;
1545   curr = prev_filtered + 1;
1546   if (curr > 2)
1547     curr = 0;
1548
1549   about_to_request_buffer_space ();
1550
1551   /* Start out with a copy of the current state.  GDBserver may be
1552      midway writing to the PREV_FILTERED TBC, but, that's OK, we won't
1553      be able to commit anyway if that happens.  */
1554   trace_buffer_ctrl[curr]
1555     = trace_buffer_ctrl[prev_filtered];
1556   trace_debug ("trying curr=%u", curr);
1557 #else
1558   /* The GDBserver's agent doesn't need all that syncing, and always
1559      updates TCB 0 (there's only one, mind you).  */
1560   curr = 0;
1561 #endif
1562   tbctrl = &trace_buffer_ctrl[curr];
1563
1564   /* Offsets are easier to grok for debugging than raw addresses,
1565      especially for the small trace buffer sizes that are useful for
1566      testing.  */
1567   trace_debug ("Trace buffer [%d] start=%d free=%d endfree=%d wrap=%d hi=%d",
1568                curr,
1569                (int) (tbctrl->start - trace_buffer_lo),
1570                (int) (tbctrl->free - trace_buffer_lo),
1571                (int) (tbctrl->end_free - trace_buffer_lo),
1572                (int) (tbctrl->wrap - trace_buffer_lo),
1573                (int) (trace_buffer_hi - trace_buffer_lo));
1574
1575   /* The algorithm here is to keep trying to get a contiguous block of
1576      the requested size, possibly discarding older traceframes to free
1577      up space.  Since free space might come in one or two pieces,
1578      depending on whether discarded traceframes wrapped around at the
1579      high end of the buffer, we test both pieces after each
1580      discard.  */
1581   while (1)
1582     {
1583       /* First, if we have two free parts, try the upper one first.  */
1584       if (tbctrl->end_free < tbctrl->free)
1585         {
1586           if (tbctrl->free + amt <= trace_buffer_hi)
1587             /* We have enough in the upper part.  */
1588             break;
1589           else
1590             {
1591               /* Our high part of free space wasn't enough.  Give up
1592                  on it for now, set wraparound.  We will recover the
1593                  space later, if/when the wrapped-around traceframe is
1594                  discarded.  */
1595               trace_debug ("Upper part too small, setting wraparound");
1596               tbctrl->wrap = tbctrl->free;
1597               tbctrl->free = trace_buffer_lo;
1598             }
1599         }
1600
1601       /* The normal case.  */
1602       if (tbctrl->free + amt <= tbctrl->end_free)
1603         break;
1604
1605 #ifdef IN_PROCESS_AGENT
1606       /* The IP Agent's buffer is always circular.  It isn't used
1607          currently, but `circular_trace_buffer' could represent
1608          GDBserver's mode.  If we didn't find space, ask GDBserver to
1609          flush.  */
1610
1611       flush_trace_buffer ();
1612       memory_barrier ();
1613       if (tracing)
1614         {
1615           trace_debug ("gdbserver flushed buffer, retrying");
1616           goto again;
1617         }
1618
1619       /* GDBserver cancelled the tracing.  Bail out as well.  */
1620       return NULL;
1621 #else
1622       /* If we're here, then neither part is big enough, and
1623          non-circular trace buffers are now full.  */
1624       if (!circular_trace_buffer)
1625         {
1626           trace_debug ("Not enough space in the trace buffer");
1627           return NULL;
1628         }
1629
1630       trace_debug ("Need more space in the trace buffer");
1631
1632       /* If we have a circular buffer, we can try discarding the
1633          oldest traceframe and see if that helps.  */
1634       oldest = FIRST_TRACEFRAME ();
1635       if (oldest->tpnum == 0)
1636         {
1637           /* Not good; we have no traceframes to free.  Perhaps we're
1638              asking for a block that is larger than the buffer?  In
1639              any case, give up.  */
1640           trace_debug ("No traceframes to discard");
1641           return NULL;
1642         }
1643
1644       /* We don't run this code in the in-process agent currently.
1645          E.g., we could leave the in-process agent in autonomous
1646          circular mode if we only have fast tracepoints.  If we do
1647          that, then this bit becomes racy with GDBserver, which also
1648          writes to this counter.  */
1649       --traceframe_write_count;
1650
1651       new_start = (unsigned char *) NEXT_TRACEFRAME (oldest);
1652       /* If we freed the traceframe that wrapped around, go back
1653          to the non-wrap case.  */
1654       if (new_start < tbctrl->start)
1655         {
1656           trace_debug ("Discarding past the wraparound");
1657           tbctrl->wrap = trace_buffer_hi;
1658         }
1659       tbctrl->start = new_start;
1660       tbctrl->end_free = tbctrl->start;
1661
1662       trace_debug ("Discarded a traceframe\n"
1663                    "Trace buffer [%d], start=%d free=%d "
1664                    "endfree=%d wrap=%d hi=%d",
1665                    curr,
1666                    (int) (tbctrl->start - trace_buffer_lo),
1667                    (int) (tbctrl->free - trace_buffer_lo),
1668                    (int) (tbctrl->end_free - trace_buffer_lo),
1669                    (int) (tbctrl->wrap - trace_buffer_lo),
1670                    (int) (trace_buffer_hi - trace_buffer_lo));
1671
1672       /* Now go back around the loop.  The discard might have resulted
1673          in either one or two pieces of free space, so we want to try
1674          both before freeing any more traceframes.  */
1675 #endif
1676     }
1677
1678   /* If we get here, we know we can provide the asked-for space.  */
1679
1680   rslt = tbctrl->free;
1681
1682   /* Adjust the request back down, now that we know we have space for
1683      the marker, but don't commit to AMT yet, we may still need to
1684      restart the operation if GDBserver touches the trace buffer
1685      (obviously only important in the in-process agent's version).  */
1686   tbctrl->free += (amt - sizeof (struct traceframe));
1687
1688   /* Or not.  If GDBserver changed the trace buffer behind our back,
1689      we get to restart a new allocation attempt.  */
1690
1691 #ifdef IN_PROCESS_AGENT
1692   /* Build the tentative token.  */
1693   commit_count = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) + 0x100)
1694                   & GDBSERVER_FLUSH_COUNT_MASK_CURR);
1695   commit = (((prev & GDBSERVER_FLUSH_COUNT_MASK_CURR) << 12)
1696             | commit_count
1697             | curr);
1698
1699   /* Try to commit it.  */
1700   readout = cmpxchg (&trace_buffer_ctrl_curr, prev, commit);
1701   if (readout != prev)
1702     {
1703       trace_debug ("GDBserver has touched the trace buffer, restarting."
1704                    " (prev=%08x, commit=%08x, readout=%08x)",
1705                    prev, commit, readout);
1706       goto again;
1707     }
1708
1709   /* Hold your horses here.  Even if that change was committed,
1710      GDBserver could come in, and clobber it.  We need to hold to be
1711      able to tell if GDBserver clobbers before or after we committed
1712      the change.  Whenever GDBserver goes about touching the IPA
1713      buffer, it sets a breakpoint in this routine, so we have a sync
1714      point here.  */
1715   about_to_request_buffer_space ();
1716
1717   /* Check if the change has been effective, even if GDBserver stopped
1718      us at the breakpoint.  */
1719
1720   {
1721     unsigned int refetch;
1722
1723     memory_barrier ();
1724
1725     refetch = trace_buffer_ctrl_curr;
1726
1727     if (refetch == commit
1728         || ((refetch & GDBSERVER_FLUSH_COUNT_MASK_PREV) >> 12) == commit_count)
1729       {
1730         /* effective */
1731         trace_debug ("change is effective: (prev=%08x, commit=%08x, "
1732                      "readout=%08x, refetch=%08x)",
1733                      prev, commit, readout, refetch);
1734       }
1735     else
1736       {
1737         trace_debug ("GDBserver has touched the trace buffer, not effective."
1738                      " (prev=%08x, commit=%08x, readout=%08x, refetch=%08x)",
1739                      prev, commit, readout, refetch);
1740         goto again;
1741       }
1742   }
1743 #endif
1744
1745   /* We have a new piece of the trace buffer.  Hurray!  */
1746
1747   /* Add an EOB marker just past this allocation.  */
1748   ((struct traceframe *) tbctrl->free)->tpnum = 0;
1749   ((struct traceframe *) tbctrl->free)->data_size = 0;
1750
1751   /* Adjust the request back down, now that we know we have space for
1752      the marker.  */
1753   amt -= sizeof (struct traceframe);
1754
1755   if (debug_threads)
1756     {
1757       trace_debug ("Allocated %d bytes", (int) amt);
1758       trace_debug ("Trace buffer [%d] start=%d free=%d "
1759                    "endfree=%d wrap=%d hi=%d",
1760                    curr,
1761                    (int) (tbctrl->start - trace_buffer_lo),
1762                    (int) (tbctrl->free - trace_buffer_lo),
1763                    (int) (tbctrl->end_free - trace_buffer_lo),
1764                    (int) (tbctrl->wrap - trace_buffer_lo),
1765                    (int) (trace_buffer_hi - trace_buffer_lo));
1766     }
1767
1768   return rslt;
1769 }
1770
1771 #ifndef IN_PROCESS_AGENT
1772
1773 /* Return the total free space.  This is not necessarily the largest
1774    block we can allocate, because of the two-part case.  */
1775
1776 static int
1777 free_space (void)
1778 {
1779   if (trace_buffer_free <= trace_buffer_end_free)
1780     return trace_buffer_end_free - trace_buffer_free;
1781   else
1782     return ((trace_buffer_end_free - trace_buffer_lo)
1783             + (trace_buffer_hi - trace_buffer_free));
1784 }
1785
1786 /* An 'S' in continuation packets indicates remainder are for
1787    while-stepping.  */
1788
1789 static int seen_step_action_flag;
1790
1791 /* Create a tracepoint (location) with given number and address.  Add this
1792    new tracepoint to list and sort this list.  */
1793
1794 static struct tracepoint *
1795 add_tracepoint (int num, CORE_ADDR addr)
1796 {
1797   struct tracepoint *tpoint, **tp_next;
1798
1799   tpoint = XNEW (struct tracepoint);
1800   tpoint->number = num;
1801   tpoint->address = addr;
1802   tpoint->numactions = 0;
1803   tpoint->actions = NULL;
1804   tpoint->actions_str = NULL;
1805   tpoint->cond = NULL;
1806   tpoint->num_step_actions = 0;
1807   tpoint->step_actions = NULL;
1808   tpoint->step_actions_str = NULL;
1809   /* Start all off as regular (slow) tracepoints.  */
1810   tpoint->type = trap_tracepoint;
1811   tpoint->orig_size = -1;
1812   tpoint->source_strings = NULL;
1813   tpoint->compiled_cond = 0;
1814   tpoint->handle = NULL;
1815   tpoint->next = NULL;
1816
1817   /* Find a place to insert this tracepoint into list in order to keep
1818      the tracepoint list still in the ascending order.  There may be
1819      multiple tracepoints at the same address as TPOINT's, and this
1820      guarantees TPOINT is inserted after all the tracepoints which are
1821      set at the same address.  For example, fast tracepoints A, B, C are
1822      set at the same address, and D is to be insert at the same place as
1823      well,
1824
1825      -->| A |--> | B |-->| C |->...
1826
1827      One jump pad was created for tracepoint A, B, and C, and the target
1828      address of A is referenced/used in jump pad.  So jump pad will let
1829      inferior jump to A.  If D is inserted in front of A, like this,
1830
1831      -->| D |-->| A |--> | B |-->| C |->...
1832
1833      without updating jump pad, D is not reachable during collect, which
1834      is wrong.  As we can see, the order of B, C and D doesn't matter, but
1835      A should always be the `first' one.  */
1836   for (tp_next = &tracepoints;
1837        (*tp_next) != NULL && (*tp_next)->address <= tpoint->address;
1838        tp_next = &(*tp_next)->next)
1839     ;
1840   tpoint->next = *tp_next;
1841   *tp_next = tpoint;
1842   last_tracepoint = tpoint;
1843
1844   seen_step_action_flag = 0;
1845
1846   return tpoint;
1847 }
1848
1849 #ifndef IN_PROCESS_AGENT
1850
1851 /* Return the tracepoint with the given number and address, or NULL.  */
1852
1853 static struct tracepoint *
1854 find_tracepoint (int id, CORE_ADDR addr)
1855 {
1856   struct tracepoint *tpoint;
1857
1858   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
1859     if (tpoint->number == id && tpoint->address == addr)
1860       return tpoint;
1861
1862   return NULL;
1863 }
1864
1865 /* Remove TPOINT from global list.  */
1866
1867 static void
1868 remove_tracepoint (struct tracepoint *tpoint)
1869 {
1870   struct tracepoint *tp, *tp_prev;
1871
1872   for (tp = tracepoints, tp_prev = NULL; tp && tp != tpoint;
1873        tp_prev = tp, tp = tp->next)
1874     ;
1875
1876   if (tp)
1877     {
1878       if (tp_prev)
1879         tp_prev->next = tp->next;
1880       else
1881         tracepoints = tp->next;
1882
1883       xfree (tp);
1884     }
1885 }
1886
1887 /* There may be several tracepoints with the same number (because they
1888    are "locations", in GDB parlance); return the next one after the
1889    given tracepoint, or search from the beginning of the list if the
1890    first argument is NULL.  */
1891
1892 static struct tracepoint *
1893 find_next_tracepoint_by_number (struct tracepoint *prev_tp, int num)
1894 {
1895   struct tracepoint *tpoint;
1896
1897   if (prev_tp)
1898     tpoint = prev_tp->next;
1899   else
1900     tpoint = tracepoints;
1901   for (; tpoint; tpoint = tpoint->next)
1902     if (tpoint->number == num)
1903       return tpoint;
1904
1905   return NULL;
1906 }
1907
1908 #endif
1909
1910 /* Append another action to perform when the tracepoint triggers.  */
1911
1912 static void
1913 add_tracepoint_action (struct tracepoint *tpoint, char *packet)
1914 {
1915   char *act;
1916
1917   if (*packet == 'S')
1918     {
1919       seen_step_action_flag = 1;
1920       ++packet;
1921     }
1922
1923   act = packet;
1924
1925   while (*act)
1926     {
1927       char *act_start = act;
1928       struct tracepoint_action *action = NULL;
1929
1930       switch (*act)
1931         {
1932         case 'M':
1933           {
1934             struct collect_memory_action *maction =
1935               XNEW (struct collect_memory_action);
1936             ULONGEST basereg;
1937             int is_neg;
1938
1939             maction->base.type = *act;
1940             action = &maction->base;
1941
1942             ++act;
1943             is_neg = (*act == '-');
1944             if (*act == '-')
1945               ++act;
1946             act = unpack_varlen_hex (act, &basereg);
1947             ++act;
1948             act = unpack_varlen_hex (act, &maction->addr);
1949             ++act;
1950             act = unpack_varlen_hex (act, &maction->len);
1951             maction->basereg = (is_neg
1952                                 ? - (int) basereg
1953                                 : (int) basereg);
1954             trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)",
1955                          pulongest (maction->len),
1956                          paddress (maction->addr), maction->basereg);
1957             break;
1958           }
1959         case 'R':
1960           {
1961             struct collect_registers_action *raction =
1962               XNEW (struct collect_registers_action);
1963
1964             raction->base.type = *act;
1965             action = &raction->base;
1966
1967             trace_debug ("Want to collect registers");
1968             ++act;
1969             /* skip past hex digits of mask for now */
1970             while (isxdigit(*act))
1971               ++act;
1972             break;
1973           }
1974         case 'L':
1975           {
1976             struct collect_static_trace_data_action *raction =
1977               XNEW (struct collect_static_trace_data_action);
1978
1979             raction->base.type = *act;
1980             action = &raction->base;
1981
1982             trace_debug ("Want to collect static trace data");
1983             ++act;
1984             break;
1985           }
1986         case 'S':
1987           trace_debug ("Unexpected step action, ignoring");
1988           ++act;
1989           break;
1990         case 'X':
1991           {
1992             struct eval_expr_action *xaction = XNEW (struct eval_expr_action);
1993
1994             xaction->base.type = *act;
1995             action = &xaction->base;
1996
1997             trace_debug ("Want to evaluate expression");
1998             xaction->expr = gdb_parse_agent_expr (&act);
1999             break;
2000           }
2001         default:
2002           trace_debug ("unknown trace action '%c', ignoring...", *act);
2003           break;
2004         case '-':
2005           break;
2006         }
2007
2008       if (action == NULL)
2009         break;
2010
2011       if (seen_step_action_flag)
2012         {
2013           tpoint->num_step_actions++;
2014
2015           tpoint->step_actions
2016             = XRESIZEVEC (struct tracepoint_action *, tpoint->step_actions,
2017                           tpoint->num_step_actions);
2018           tpoint->step_actions_str
2019             = XRESIZEVEC (char *, tpoint->step_actions_str,
2020                           tpoint->num_step_actions);
2021           tpoint->step_actions[tpoint->num_step_actions - 1] = action;
2022           tpoint->step_actions_str[tpoint->num_step_actions - 1]
2023             = savestring (act_start, act - act_start);
2024         }
2025       else
2026         {
2027           tpoint->numactions++;
2028           tpoint->actions
2029             = XRESIZEVEC (struct tracepoint_action *, tpoint->actions,
2030                           tpoint->numactions);
2031           tpoint->actions_str
2032             = XRESIZEVEC (char *, tpoint->actions_str, tpoint->numactions);
2033           tpoint->actions[tpoint->numactions - 1] = action;
2034           tpoint->actions_str[tpoint->numactions - 1]
2035             = savestring (act_start, act - act_start);
2036         }
2037     }
2038 }
2039
2040 #endif
2041
2042 /* Find or create a trace state variable with the given number.  */
2043
2044 static struct trace_state_variable *
2045 get_trace_state_variable (int num)
2046 {
2047   struct trace_state_variable *tsv;
2048
2049 #ifdef IN_PROCESS_AGENT
2050   /* Search for an existing variable.  */
2051   for (tsv = alloced_trace_state_variables; tsv; tsv = tsv->next)
2052     if (tsv->number == num)
2053       return tsv;
2054 #endif
2055
2056   /* Search for an existing variable.  */
2057   for (tsv = trace_state_variables; tsv; tsv = tsv->next)
2058     if (tsv->number == num)
2059       return tsv;
2060
2061   return NULL;
2062 }
2063
2064 /* Find or create a trace state variable with the given number.  */
2065
2066 static struct trace_state_variable *
2067 create_trace_state_variable (int num, int gdb)
2068 {
2069   struct trace_state_variable *tsv;
2070
2071   tsv = get_trace_state_variable (num);
2072   if (tsv != NULL)
2073     return tsv;
2074
2075   /* Create a new variable.  */
2076   tsv = XNEW (struct trace_state_variable);
2077   tsv->number = num;
2078   tsv->initial_value = 0;
2079   tsv->value = 0;
2080   tsv->getter = NULL;
2081   tsv->name = NULL;
2082 #ifdef IN_PROCESS_AGENT
2083   if (!gdb)
2084     {
2085       tsv->next = alloced_trace_state_variables;
2086       alloced_trace_state_variables = tsv;
2087     }
2088   else
2089 #endif
2090     {
2091       tsv->next = trace_state_variables;
2092       trace_state_variables = tsv;
2093     }
2094   return tsv;
2095 }
2096
2097 IP_AGENT_EXPORT_FUNC LONGEST
2098 get_trace_state_variable_value (int num)
2099 {
2100   struct trace_state_variable *tsv;
2101
2102   tsv = get_trace_state_variable (num);
2103
2104   if (!tsv)
2105     {
2106       trace_debug ("No trace state variable %d, skipping value get", num);
2107       return 0;
2108     }
2109
2110   /* Call a getter function if we have one.  While it's tempting to
2111      set up something to only call the getter once per tracepoint hit,
2112      it could run afoul of thread races. Better to let the getter
2113      handle it directly, if necessary to worry about it.  */
2114   if (tsv->getter)
2115     tsv->value = (tsv->getter) ();
2116
2117   trace_debug ("get_trace_state_variable_value(%d) ==> %s",
2118                num, plongest (tsv->value));
2119
2120   return tsv->value;
2121 }
2122
2123 IP_AGENT_EXPORT_FUNC void
2124 set_trace_state_variable_value (int num, LONGEST val)
2125 {
2126   struct trace_state_variable *tsv;
2127
2128   tsv = get_trace_state_variable (num);
2129
2130   if (!tsv)
2131     {
2132       trace_debug ("No trace state variable %d, skipping value set", num);
2133       return;
2134     }
2135
2136   tsv->value = val;
2137 }
2138
2139 LONGEST
2140 agent_get_trace_state_variable_value (int num)
2141 {
2142   return get_trace_state_variable_value (num);
2143 }
2144
2145 void
2146 agent_set_trace_state_variable_value (int num, LONGEST val)
2147 {
2148   set_trace_state_variable_value (num, val);
2149 }
2150
2151 static void
2152 set_trace_state_variable_name (int num, const char *name)
2153 {
2154   struct trace_state_variable *tsv;
2155
2156   tsv = get_trace_state_variable (num);
2157
2158   if (!tsv)
2159     {
2160       trace_debug ("No trace state variable %d, skipping name set", num);
2161       return;
2162     }
2163
2164   tsv->name = (char *) name;
2165 }
2166
2167 static void
2168 set_trace_state_variable_getter (int num, LONGEST (*getter) (void))
2169 {
2170   struct trace_state_variable *tsv;
2171
2172   tsv = get_trace_state_variable (num);
2173
2174   if (!tsv)
2175     {
2176       trace_debug ("No trace state variable %d, skipping getter set", num);
2177       return;
2178     }
2179
2180   tsv->getter = getter;
2181 }
2182
2183 /* Add a raw traceframe for the given tracepoint.  */
2184
2185 static struct traceframe *
2186 add_traceframe (struct tracepoint *tpoint)
2187 {
2188   struct traceframe *tframe;
2189
2190   tframe
2191     = (struct traceframe *) trace_buffer_alloc (sizeof (struct traceframe));
2192
2193   if (tframe == NULL)
2194     return NULL;
2195
2196   tframe->tpnum = tpoint->number;
2197   tframe->data_size = 0;
2198
2199   return tframe;
2200 }
2201
2202 /* Add a block to the traceframe currently being worked on.  */
2203
2204 static unsigned char *
2205 add_traceframe_block (struct traceframe *tframe,
2206                       struct tracepoint *tpoint, int amt)
2207 {
2208   unsigned char *block;
2209
2210   if (!tframe)
2211     return NULL;
2212
2213   block = (unsigned char *) trace_buffer_alloc (amt);
2214
2215   if (!block)
2216     return NULL;
2217
2218   gdb_assert (tframe->tpnum == tpoint->number);
2219
2220   tframe->data_size += amt;
2221   tpoint->traceframe_usage += amt;
2222
2223   return block;
2224 }
2225
2226 /* Flag that the current traceframe is finished.  */
2227
2228 static void
2229 finish_traceframe (struct traceframe *tframe)
2230 {
2231   ++traceframe_write_count;
2232   ++traceframes_created;
2233 }
2234
2235 #ifndef IN_PROCESS_AGENT
2236
2237 /* Given a traceframe number NUM, find the NUMth traceframe in the
2238    buffer.  */
2239
2240 static struct traceframe *
2241 find_traceframe (int num)
2242 {
2243   struct traceframe *tframe;
2244   int tfnum = 0;
2245
2246   for (tframe = FIRST_TRACEFRAME ();
2247        tframe->tpnum != 0;
2248        tframe = NEXT_TRACEFRAME (tframe))
2249     {
2250       if (tfnum == num)
2251         return tframe;
2252       ++tfnum;
2253     }
2254
2255   return NULL;
2256 }
2257
2258 static CORE_ADDR
2259 get_traceframe_address (struct traceframe *tframe)
2260 {
2261   CORE_ADDR addr;
2262   struct tracepoint *tpoint;
2263
2264   addr = traceframe_get_pc (tframe);
2265
2266   if (addr)
2267     return addr;
2268
2269   /* Fallback strategy, will be incorrect for while-stepping frames
2270      and multi-location tracepoints.  */
2271   tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum);
2272   return tpoint->address;
2273 }
2274
2275 /* Search for the next traceframe whose address is inside or outside
2276    the given range.  */
2277
2278 static struct traceframe *
2279 find_next_traceframe_in_range (CORE_ADDR lo, CORE_ADDR hi, int inside_p,
2280                                int *tfnump)
2281 {
2282   struct traceframe *tframe;
2283   CORE_ADDR tfaddr;
2284
2285   *tfnump = current_traceframe + 1;
2286   tframe = find_traceframe (*tfnump);
2287   /* The search is not supposed to wrap around.  */
2288   if (!tframe)
2289     {
2290       *tfnump = -1;
2291       return NULL;
2292     }
2293
2294   for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe))
2295     {
2296       tfaddr = get_traceframe_address (tframe);
2297       if (inside_p
2298           ? (lo <= tfaddr && tfaddr <= hi)
2299           : (lo > tfaddr || tfaddr > hi))
2300         return tframe;
2301       ++*tfnump;
2302     }
2303
2304   *tfnump = -1;
2305   return NULL;
2306 }
2307
2308 /* Search for the next traceframe recorded by the given tracepoint.
2309    Note that for multi-location tracepoints, this will find whatever
2310    location appears first.  */
2311
2312 static struct traceframe *
2313 find_next_traceframe_by_tracepoint (int num, int *tfnump)
2314 {
2315   struct traceframe *tframe;
2316
2317   *tfnump = current_traceframe + 1;
2318   tframe = find_traceframe (*tfnump);
2319   /* The search is not supposed to wrap around.  */
2320   if (!tframe)
2321     {
2322       *tfnump = -1;
2323       return NULL;
2324     }
2325
2326   for (; tframe->tpnum != 0; tframe = NEXT_TRACEFRAME (tframe))
2327     {
2328       if (tframe->tpnum == num)
2329         return tframe;
2330       ++*tfnump;
2331     }
2332
2333   *tfnump = -1;
2334   return NULL;
2335 }
2336
2337 #endif
2338
2339 #ifndef IN_PROCESS_AGENT
2340
2341 /* Clear all past trace state.  */
2342
2343 static void
2344 cmd_qtinit (char *packet)
2345 {
2346   struct trace_state_variable *tsv, *prev, *next;
2347
2348   /* Can't do this command without a pid attached.  */
2349   if (current_thread == NULL)
2350     {
2351       write_enn (packet);
2352       return;
2353     }
2354
2355   /* Make sure we don't try to read from a trace frame.  */
2356   current_traceframe = -1;
2357
2358   stop_tracing ();
2359
2360   trace_debug ("Initializing the trace");
2361
2362   clear_installed_tracepoints ();
2363   clear_readonly_regions ();
2364
2365   tracepoints = NULL;
2366   last_tracepoint = NULL;
2367
2368   /* Clear out any leftover trace state variables.  Ones with target
2369      defined getters should be kept however.  */
2370   prev = NULL;
2371   tsv = trace_state_variables;
2372   while (tsv)
2373     {
2374       trace_debug ("Looking at var %d", tsv->number);
2375       if (tsv->getter == NULL)
2376         {
2377           next = tsv->next;
2378           if (prev)
2379             prev->next = next;
2380           else
2381             trace_state_variables = next;
2382           trace_debug ("Deleting var %d", tsv->number);
2383           free (tsv);
2384           tsv = next;
2385         }
2386       else
2387         {
2388           prev = tsv;
2389           tsv = tsv->next;
2390         }
2391     }
2392
2393   clear_trace_buffer ();
2394   clear_inferior_trace_buffer ();
2395
2396   write_ok (packet);
2397 }
2398
2399 /* Unprobe the UST marker at ADDRESS.  */
2400
2401 static void
2402 unprobe_marker_at (CORE_ADDR address)
2403 {
2404   char cmd[IPA_CMD_BUF_SIZE];
2405
2406   sprintf (cmd, "unprobe_marker_at:%s", paddress (address));
2407   run_inferior_command (cmd, strlen (cmd) + 1);
2408 }
2409
2410 /* Restore the program to its pre-tracing state.  This routine may be called
2411    in error situations, so it needs to be careful about only restoring
2412    from known-valid bits.  */
2413
2414 static void
2415 clear_installed_tracepoints (void)
2416 {
2417   struct tracepoint *tpoint;
2418   struct tracepoint *prev_stpoint;
2419
2420   pause_all (1);
2421
2422   prev_stpoint = NULL;
2423
2424   /* Restore any bytes overwritten by tracepoints.  */
2425   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
2426     {
2427       /* Catch the case where we might try to remove a tracepoint that
2428          was never actually installed.  */
2429       if (tpoint->handle == NULL)
2430         {
2431           trace_debug ("Tracepoint %d at 0x%s was "
2432                        "never installed, nothing to clear",
2433                        tpoint->number, paddress (tpoint->address));
2434           continue;
2435         }
2436
2437       switch (tpoint->type)
2438         {
2439         case trap_tracepoint:
2440           {
2441             struct breakpoint *bp
2442               = (struct breakpoint *) tpoint->handle;
2443
2444             delete_breakpoint (bp);
2445           }
2446           break;
2447         case fast_tracepoint:
2448           {
2449             struct fast_tracepoint_jump *jump
2450               = (struct fast_tracepoint_jump *) tpoint->handle;
2451
2452             delete_fast_tracepoint_jump (jump);
2453           }
2454           break;
2455         case static_tracepoint:
2456           if (prev_stpoint != NULL
2457               && prev_stpoint->address == tpoint->address)
2458             /* Nothing to do.  We already unprobed a tracepoint set at
2459                this marker address (and there can only be one probe
2460                per marker).  */
2461             ;
2462           else
2463             {
2464               unprobe_marker_at (tpoint->address);
2465               prev_stpoint = tpoint;
2466             }
2467           break;
2468         }
2469
2470       tpoint->handle = NULL;
2471     }
2472
2473   unpause_all (1);
2474 }
2475
2476 /* Parse a packet that defines a tracepoint.  */
2477
2478 static void
2479 cmd_qtdp (char *own_buf)
2480 {
2481   int tppacket;
2482   /* Whether there is a trailing hyphen at the end of the QTDP packet.  */
2483   int trail_hyphen = 0;
2484   ULONGEST num;
2485   ULONGEST addr;
2486   ULONGEST count;
2487   struct tracepoint *tpoint;
2488   char *actparm;
2489   char *packet = own_buf;
2490
2491   packet += strlen ("QTDP:");
2492
2493   /* A hyphen at the beginning marks a packet specifying actions for a
2494      tracepoint already supplied.  */
2495   tppacket = 1;
2496   if (*packet == '-')
2497     {
2498       tppacket = 0;
2499       ++packet;
2500     }
2501   packet = unpack_varlen_hex (packet, &num);
2502   ++packet; /* skip a colon */
2503   packet = unpack_varlen_hex (packet, &addr);
2504   ++packet; /* skip a colon */
2505
2506   /* See if we already have this tracepoint.  */
2507   tpoint = find_tracepoint (num, addr);
2508
2509   if (tppacket)
2510     {
2511       /* Duplicate tracepoints are never allowed.  */
2512       if (tpoint)
2513         {
2514           trace_debug ("Tracepoint error: tracepoint %d"
2515                        " at 0x%s already exists",
2516                        (int) num, paddress (addr));
2517           write_enn (own_buf);
2518           return;
2519         }
2520
2521       tpoint = add_tracepoint (num, addr);
2522
2523       tpoint->enabled = (*packet == 'E');
2524       ++packet; /* skip 'E' */
2525       ++packet; /* skip a colon */
2526       packet = unpack_varlen_hex (packet, &count);
2527       tpoint->step_count = count;
2528       ++packet; /* skip a colon */
2529       packet = unpack_varlen_hex (packet, &count);
2530       tpoint->pass_count = count;
2531       /* See if we have any of the additional optional fields.  */
2532       while (*packet == ':')
2533         {
2534           ++packet;
2535           if (*packet == 'F')
2536             {
2537               tpoint->type = fast_tracepoint;
2538               ++packet;
2539               packet = unpack_varlen_hex (packet, &count);
2540               tpoint->orig_size = count;
2541             }
2542           else if (*packet == 'S')
2543             {
2544               tpoint->type = static_tracepoint;
2545               ++packet;
2546             }
2547           else if (*packet == 'X')
2548             {
2549               actparm = (char *) packet;
2550               tpoint->cond = gdb_parse_agent_expr (&actparm);
2551               packet = actparm;
2552             }
2553           else if (*packet == '-')
2554             break;
2555           else if (*packet == '\0')
2556             break;
2557           else
2558             trace_debug ("Unknown optional tracepoint field");
2559         }
2560       if (*packet == '-')
2561         {
2562           trail_hyphen = 1;
2563           trace_debug ("Also has actions\n");
2564         }
2565
2566       trace_debug ("Defined %stracepoint %d at 0x%s, "
2567                    "enabled %d step %" PRIu64 " pass %" PRIu64,
2568                    tpoint->type == fast_tracepoint ? "fast "
2569                    : tpoint->type == static_tracepoint ? "static " : "",
2570                    tpoint->number, paddress (tpoint->address), tpoint->enabled,
2571                    tpoint->step_count, tpoint->pass_count);
2572     }
2573   else if (tpoint)
2574     add_tracepoint_action (tpoint, packet);
2575   else
2576     {
2577       trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found",
2578                    (int) num, paddress (addr));
2579       write_enn (own_buf);
2580       return;
2581     }
2582
2583   /* Install tracepoint during tracing only once for each tracepoint location.
2584      For each tracepoint loc, GDB may send multiple QTDP packets, and we can
2585      determine the last QTDP packet for one tracepoint location by checking
2586      trailing hyphen in QTDP packet.  */
2587   if (tracing && !trail_hyphen)
2588     {
2589       struct tracepoint *tp = NULL;
2590
2591       /* Pause all threads temporarily while we patch tracepoints.  */
2592       pause_all (0);
2593
2594       /* download_tracepoint will update global `tracepoints'
2595          list, so it is unsafe to leave threads in jump pad.  */
2596       stabilize_threads ();
2597
2598       /* Freeze threads.  */
2599       pause_all (1);
2600
2601
2602       if (tpoint->type != trap_tracepoint)
2603         {
2604           /* Find another fast or static tracepoint at the same address.  */
2605           for (tp = tracepoints; tp; tp = tp->next)
2606             {
2607               if (tp->address == tpoint->address && tp->type == tpoint->type
2608                   && tp->number != tpoint->number)
2609                 break;
2610             }
2611
2612           /* TPOINT is installed at the same address as TP.  */
2613           if (tp)
2614             {
2615               if (tpoint->type == fast_tracepoint)
2616                 clone_fast_tracepoint (tpoint, tp);
2617               else if (tpoint->type == static_tracepoint)
2618                 tpoint->handle = (void *) -1;
2619             }
2620         }
2621
2622       if (use_agent && tpoint->type == fast_tracepoint
2623           && agent_capability_check (AGENT_CAPA_FAST_TRACE))
2624         {
2625           /* Download and install fast tracepoint by agent.  */
2626           if (tracepoint_send_agent (tpoint) == 0)
2627             write_ok (own_buf);
2628           else
2629             {
2630               write_enn (own_buf);
2631               remove_tracepoint (tpoint);
2632             }
2633         }
2634       else
2635         {
2636           download_tracepoint (tpoint);
2637
2638           if (tpoint->type == trap_tracepoint || tp == NULL)
2639             {
2640               install_tracepoint (tpoint, own_buf);
2641               if (strcmp (own_buf, "OK") != 0)
2642                 remove_tracepoint (tpoint);
2643             }
2644           else
2645             write_ok (own_buf);
2646         }
2647
2648       unpause_all (1);
2649       return;
2650     }
2651
2652   write_ok (own_buf);
2653 }
2654
2655 static void
2656 cmd_qtdpsrc (char *own_buf)
2657 {
2658   ULONGEST num, addr, start, slen;
2659   struct tracepoint *tpoint;
2660   char *packet = own_buf;
2661   char *saved, *srctype, *src;
2662   size_t nbytes;
2663   struct source_string *last, *newlast;
2664
2665   packet += strlen ("QTDPsrc:");
2666
2667   packet = unpack_varlen_hex (packet, &num);
2668   ++packet; /* skip a colon */
2669   packet = unpack_varlen_hex (packet, &addr);
2670   ++packet; /* skip a colon */
2671
2672   /* See if we already have this tracepoint.  */
2673   tpoint = find_tracepoint (num, addr);
2674
2675   if (!tpoint)
2676     {
2677       trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found",
2678                    (int) num, paddress (addr));
2679       write_enn (own_buf);
2680       return;
2681     }
2682
2683   saved = packet;
2684   packet = strchr (packet, ':');
2685   srctype = (char *) xmalloc (packet - saved + 1);
2686   memcpy (srctype, saved, packet - saved);
2687   srctype[packet - saved] = '\0';
2688   ++packet;
2689   packet = unpack_varlen_hex (packet, &start);
2690   ++packet; /* skip a colon */
2691   packet = unpack_varlen_hex (packet, &slen);
2692   ++packet; /* skip a colon */
2693   src = (char *) xmalloc (slen + 1);
2694   nbytes = hex2bin (packet, (gdb_byte *) src, strlen (packet) / 2);
2695   src[nbytes] = '\0';
2696
2697   newlast = XNEW (struct source_string);
2698   newlast->type = srctype;
2699   newlast->str = src;
2700   newlast->next = NULL;
2701   /* Always add a source string to the end of the list;
2702      this keeps sequences of actions/commands in the right
2703      order.  */
2704   if (tpoint->source_strings)
2705     {
2706       for (last = tpoint->source_strings; last->next; last = last->next)
2707         ;
2708       last->next = newlast;
2709     }
2710   else
2711     tpoint->source_strings = newlast;
2712
2713   write_ok (own_buf);
2714 }
2715
2716 static void
2717 cmd_qtdv (char *own_buf)
2718 {
2719   ULONGEST num, val, builtin;
2720   char *varname;
2721   size_t nbytes;
2722   struct trace_state_variable *tsv;
2723   char *packet = own_buf;
2724
2725   packet += strlen ("QTDV:");
2726
2727   packet = unpack_varlen_hex (packet, &num);
2728   ++packet; /* skip a colon */
2729   packet = unpack_varlen_hex (packet, &val);
2730   ++packet; /* skip a colon */
2731   packet = unpack_varlen_hex (packet, &builtin);
2732   ++packet; /* skip a colon */
2733
2734   nbytes = strlen (packet) / 2;
2735   varname = (char *) xmalloc (nbytes + 1);
2736   nbytes = hex2bin (packet, (gdb_byte *) varname, nbytes);
2737   varname[nbytes] = '\0';
2738
2739   tsv = create_trace_state_variable (num, 1);
2740   tsv->initial_value = (LONGEST) val;
2741   tsv->name = varname;
2742
2743   set_trace_state_variable_value (num, (LONGEST) val);
2744
2745   write_ok (own_buf);
2746 }
2747
2748 static void
2749 cmd_qtenable_disable (char *own_buf, int enable)
2750 {
2751   char *packet = own_buf;
2752   ULONGEST num, addr;
2753   struct tracepoint *tp;
2754
2755   packet += strlen (enable ? "QTEnable:" : "QTDisable:");
2756   packet = unpack_varlen_hex (packet, &num);
2757   ++packet; /* skip a colon */
2758   packet = unpack_varlen_hex (packet, &addr);
2759
2760   tp = find_tracepoint (num, addr);
2761
2762   if (tp)
2763     {
2764       if ((enable && tp->enabled) || (!enable && !tp->enabled))
2765         {
2766           trace_debug ("Tracepoint %d at 0x%s is already %s",
2767                        (int) num, paddress (addr),
2768                        enable ? "enabled" : "disabled");
2769           write_ok (own_buf);
2770           return;
2771         }
2772
2773       trace_debug ("%s tracepoint %d at 0x%s",
2774                    enable ? "Enabling" : "Disabling",
2775                    (int) num, paddress (addr));
2776
2777       tp->enabled = enable;
2778
2779       if (tp->type == fast_tracepoint || tp->type == static_tracepoint)
2780         {
2781           int ret;
2782           int offset = offsetof (struct tracepoint, enabled);
2783           CORE_ADDR obj_addr = tp->obj_addr_on_target + offset;
2784
2785           ret = prepare_to_access_memory ();
2786           if (ret)
2787             {
2788               trace_debug ("Failed to temporarily stop inferior threads");
2789               write_enn (own_buf);
2790               return;
2791             }
2792
2793           ret = write_inferior_int8 (obj_addr, enable);
2794           done_accessing_memory ();
2795           
2796           if (ret)
2797             {
2798               trace_debug ("Cannot write enabled flag into "
2799                            "inferior process memory");
2800               write_enn (own_buf);
2801               return;
2802             }
2803         }
2804
2805       write_ok (own_buf);
2806     }
2807   else
2808     {
2809       trace_debug ("Tracepoint %d at 0x%s not found",
2810                    (int) num, paddress (addr));
2811       write_enn (own_buf);
2812     }
2813 }
2814
2815 static void
2816 cmd_qtv (char *own_buf)
2817 {
2818   ULONGEST num;
2819   LONGEST val = 0;
2820   int err;
2821   char *packet = own_buf;
2822
2823   packet += strlen ("qTV:");
2824   unpack_varlen_hex (packet, &num);
2825
2826   if (current_traceframe >= 0)
2827     {
2828       err = traceframe_read_tsv ((int) num, &val);
2829       if (err)
2830         {
2831           strcpy (own_buf, "U");
2832           return;
2833         }
2834     }
2835   /* Only make tsv's be undefined before the first trace run.  After a
2836      trace run is over, the user might want to see the last value of
2837      the tsv, and it might not be available in a traceframe.  */
2838   else if (!tracing && strcmp (tracing_stop_reason, "tnotrun") == 0)
2839     {
2840       strcpy (own_buf, "U");
2841       return;
2842     }
2843   else
2844     val = get_trace_state_variable_value (num);
2845
2846   sprintf (own_buf, "V%s", phex_nz (val, 0));
2847 }
2848
2849 /* Clear out the list of readonly regions.  */
2850
2851 static void
2852 clear_readonly_regions (void)
2853 {
2854   struct readonly_region *roreg;
2855
2856   while (readonly_regions)
2857     {
2858       roreg = readonly_regions;
2859       readonly_regions = readonly_regions->next;
2860       free (roreg);
2861     }
2862 }
2863
2864 /* Parse the collection of address ranges whose contents GDB believes
2865    to be unchanging and so can be read directly from target memory
2866    even while looking at a traceframe.  */
2867
2868 static void
2869 cmd_qtro (char *own_buf)
2870 {
2871   ULONGEST start, end;
2872   struct readonly_region *roreg;
2873   char *packet = own_buf;
2874
2875   trace_debug ("Want to mark readonly regions");
2876
2877   clear_readonly_regions ();
2878
2879   packet += strlen ("QTro");
2880
2881   while (*packet == ':')
2882     {
2883       ++packet;  /* skip a colon */
2884       packet = unpack_varlen_hex (packet, &start);
2885       ++packet;  /* skip a comma */
2886       packet = unpack_varlen_hex (packet, &end);
2887
2888       roreg = XNEW (struct readonly_region);
2889       roreg->start = start;
2890       roreg->end = end;
2891       roreg->next = readonly_regions;
2892       readonly_regions = roreg;
2893       trace_debug ("Added readonly region from 0x%s to 0x%s",
2894                    paddress (roreg->start), paddress (roreg->end));
2895     }
2896
2897   write_ok (own_buf);
2898 }
2899
2900 /* Test to see if the given range is in our list of readonly ranges.
2901    We only test for being entirely within a range, GDB is not going to
2902    send a single memory packet that spans multiple regions.  */
2903
2904 int
2905 in_readonly_region (CORE_ADDR addr, ULONGEST length)
2906 {
2907   struct readonly_region *roreg;
2908
2909   for (roreg = readonly_regions; roreg; roreg = roreg->next)
2910     if (roreg->start <= addr && (addr + length - 1) <= roreg->end)
2911       return 1;
2912
2913   return 0;
2914 }
2915
2916 static CORE_ADDR gdb_jump_pad_head;
2917
2918 /* Return the address of the next free jump space.  */
2919
2920 static CORE_ADDR
2921 get_jump_space_head (void)
2922 {
2923   if (gdb_jump_pad_head == 0)
2924     {
2925       if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer,
2926                                       &gdb_jump_pad_head))
2927         {
2928           internal_error (__FILE__, __LINE__,
2929                           "error extracting jump_pad_buffer");
2930         }
2931     }
2932
2933   return gdb_jump_pad_head;
2934 }
2935
2936 /* Reserve USED bytes from the jump space.  */
2937
2938 static void
2939 claim_jump_space (ULONGEST used)
2940 {
2941   trace_debug ("claim_jump_space reserves %s bytes at %s",
2942                pulongest (used), paddress (gdb_jump_pad_head));
2943   gdb_jump_pad_head += used;
2944 }
2945
2946 static CORE_ADDR trampoline_buffer_head = 0;
2947 static CORE_ADDR trampoline_buffer_tail;
2948
2949 /* Reserve USED bytes from the trampoline buffer and return the
2950    address of the start of the reserved space in TRAMPOLINE.  Returns
2951    non-zero if the space is successfully claimed.  */
2952
2953 int
2954 claim_trampoline_space (ULONGEST used, CORE_ADDR *trampoline)
2955 {
2956   if (!trampoline_buffer_head)
2957     {
2958       if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer,
2959                                       &trampoline_buffer_tail))
2960         {
2961           internal_error (__FILE__, __LINE__,
2962                           "error extracting trampoline_buffer");
2963         }
2964
2965       if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end,
2966                                       &trampoline_buffer_head))
2967         {
2968           internal_error (__FILE__, __LINE__,
2969                           "error extracting trampoline_buffer_end");
2970         }
2971     }
2972
2973   /* Start claiming space from the top of the trampoline space.  If
2974      the space is located at the bottom of the virtual address space,
2975      this reduces the possibility that corruption will occur if a null
2976      pointer is used to write to memory.  */
2977   if (trampoline_buffer_head - trampoline_buffer_tail < used)
2978     {
2979       trace_debug ("claim_trampoline_space failed to reserve %s bytes",
2980                    pulongest (used));
2981       return 0;
2982     }
2983
2984   trampoline_buffer_head -= used;
2985
2986   trace_debug ("claim_trampoline_space reserves %s bytes at %s",
2987                pulongest (used), paddress (trampoline_buffer_head));
2988
2989   *trampoline = trampoline_buffer_head;
2990   return 1;
2991 }
2992
2993 /* Returns non-zero if there is space allocated for use in trampolines
2994    for fast tracepoints.  */
2995
2996 int
2997 have_fast_tracepoint_trampoline_buffer (char *buf)
2998 {
2999   CORE_ADDR trampoline_end, errbuf;
3000
3001   if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end,
3002                                   &trampoline_end))
3003     {
3004       internal_error (__FILE__, __LINE__,
3005                       "error extracting trampoline_buffer_end");
3006     }
3007   
3008   if (buf)
3009     {
3010       buf[0] = '\0';
3011       strcpy (buf, "was claiming");
3012       if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_error,
3013                                   &errbuf))
3014         {
3015           internal_error (__FILE__, __LINE__,
3016                           "error extracting errbuf");
3017         }
3018
3019       read_inferior_memory (errbuf, (unsigned char *) buf, 100);
3020     }
3021
3022   return trampoline_end != 0;
3023 }
3024
3025 /* Ask the IPA to probe the marker at ADDRESS.  Returns -1 if running
3026    the command fails, or 0 otherwise.  If the command ran
3027    successfully, but probing the marker failed, ERROUT will be filled
3028    with the error to reply to GDB, and -1 is also returned.  This
3029    allows directly passing IPA errors to GDB.  */
3030
3031 static int
3032 probe_marker_at (CORE_ADDR address, char *errout)
3033 {
3034   char cmd[IPA_CMD_BUF_SIZE];
3035   int err;
3036
3037   sprintf (cmd, "probe_marker_at:%s", paddress (address));
3038   err = run_inferior_command (cmd, strlen (cmd) + 1);
3039
3040   if (err == 0)
3041     {
3042       if (*cmd == 'E')
3043         {
3044           strcpy (errout, cmd);
3045           return -1;
3046         }
3047     }
3048
3049   return err;
3050 }
3051
3052 static void
3053 clone_fast_tracepoint (struct tracepoint *to, const struct tracepoint *from)
3054 {
3055   to->jump_pad = from->jump_pad;
3056   to->jump_pad_end = from->jump_pad_end;
3057   to->trampoline = from->trampoline;
3058   to->trampoline_end = from->trampoline_end;
3059   to->adjusted_insn_addr = from->adjusted_insn_addr;
3060   to->adjusted_insn_addr_end = from->adjusted_insn_addr_end;
3061   to->handle = from->handle;
3062
3063   gdb_assert (from->handle);
3064   inc_ref_fast_tracepoint_jump ((struct fast_tracepoint_jump *) from->handle);
3065 }
3066
3067 #define MAX_JUMP_SIZE 20
3068
3069 /* Install fast tracepoint.  Return 0 if successful, otherwise return
3070    non-zero.  */
3071
3072 static int
3073 install_fast_tracepoint (struct tracepoint *tpoint, char *errbuf)
3074 {
3075   CORE_ADDR jentry, jump_entry;
3076   CORE_ADDR trampoline;
3077   CORE_ADDR collect;
3078   ULONGEST trampoline_size;
3079   int err = 0;
3080   /* The jump to the jump pad of the last fast tracepoint
3081      installed.  */
3082   unsigned char fjump[MAX_JUMP_SIZE];
3083   ULONGEST fjump_size;
3084
3085   if (tpoint->orig_size < target_get_min_fast_tracepoint_insn_len ())
3086     {
3087       trace_debug ("Requested a fast tracepoint on an instruction "
3088                    "that is of less than the minimum length.");
3089       return 0;
3090     }
3091
3092   if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_collect_ptr,
3093                                   &collect))
3094     {
3095       error ("error extracting gdb_collect_ptr");
3096       return 1;
3097     }
3098
3099   jentry = jump_entry = get_jump_space_head ();
3100
3101   trampoline = 0;
3102   trampoline_size = 0;
3103
3104   /* Install the jump pad.  */
3105   err = install_fast_tracepoint_jump_pad (tpoint->obj_addr_on_target,
3106                                           tpoint->address,
3107                                           collect,
3108                                           ipa_sym_addrs.addr_collecting,
3109                                           tpoint->orig_size,
3110                                           &jentry,
3111                                           &trampoline, &trampoline_size,
3112                                           fjump, &fjump_size,
3113                                           &tpoint->adjusted_insn_addr,
3114                                           &tpoint->adjusted_insn_addr_end,
3115                                           errbuf);
3116
3117   if (err)
3118     return 1;
3119
3120   /* Wire it in.  */
3121   tpoint->handle = set_fast_tracepoint_jump (tpoint->address, fjump,
3122                                              fjump_size);
3123
3124   if (tpoint->handle != NULL)
3125     {
3126       tpoint->jump_pad = jump_entry;
3127       tpoint->jump_pad_end = jentry;
3128       tpoint->trampoline = trampoline;
3129       tpoint->trampoline_end = trampoline + trampoline_size;
3130
3131       /* Pad to 8-byte alignment.  */
3132       jentry = ((jentry + 7) & ~0x7);
3133       claim_jump_space (jentry - jump_entry);
3134     }
3135
3136   return 0;
3137 }
3138
3139
3140 /* Install tracepoint TPOINT, and write reply message in OWN_BUF.  */
3141
3142 static void
3143 install_tracepoint (struct tracepoint *tpoint, char *own_buf)
3144 {
3145   tpoint->handle = NULL;
3146   *own_buf = '\0';
3147
3148   if (tpoint->type == trap_tracepoint)
3149     {
3150       /* Tracepoints are installed as memory breakpoints.  Just go
3151          ahead and install the trap.  The breakpoints module
3152          handles duplicated breakpoints, and the memory read
3153          routine handles un-patching traps from memory reads.  */
3154       tpoint->handle = set_breakpoint_at (tpoint->address,
3155                                           tracepoint_handler);
3156     }
3157   else if (tpoint->type == fast_tracepoint || tpoint->type == static_tracepoint)
3158     {
3159       if (!agent_loaded_p ())
3160         {
3161           trace_debug ("Requested a %s tracepoint, but fast "
3162                        "tracepoints aren't supported.",
3163                        tpoint->type == static_tracepoint ? "static" : "fast");
3164           write_e_ipa_not_loaded (own_buf);
3165           return;
3166         }
3167       if (tpoint->type == static_tracepoint
3168           && !in_process_agent_supports_ust ())
3169         {
3170           trace_debug ("Requested a static tracepoint, but static "
3171                        "tracepoints are not supported.");
3172           write_e_ust_not_loaded (own_buf);
3173           return;
3174         }
3175
3176       if (tpoint->type == fast_tracepoint)
3177         install_fast_tracepoint (tpoint, own_buf);
3178       else
3179         {
3180           if (probe_marker_at (tpoint->address, own_buf) == 0)
3181             tpoint->handle = (void *) -1;
3182         }
3183
3184     }
3185   else
3186     internal_error (__FILE__, __LINE__, "Unknown tracepoint type");
3187
3188   if (tpoint->handle == NULL)
3189     {
3190       if (*own_buf == '\0')
3191         write_enn (own_buf);
3192     }
3193   else
3194     write_ok (own_buf);
3195 }
3196
3197 static void download_tracepoint_1 (struct tracepoint *tpoint);
3198
3199 static void
3200 cmd_qtstart (char *packet)
3201 {
3202   struct tracepoint *tpoint, *prev_ftpoint, *prev_stpoint;
3203   CORE_ADDR tpptr = 0, prev_tpptr = 0;
3204
3205   trace_debug ("Starting the trace");
3206
3207   /* Pause all threads temporarily while we patch tracepoints.  */
3208   pause_all (0);
3209
3210   /* Get threads out of jump pads.  Safe to do here, since this is a
3211      top level command.  And, required to do here, since we're
3212      deleting/rewriting jump pads.  */
3213
3214   stabilize_threads ();
3215
3216   /* Freeze threads.  */
3217   pause_all (1);
3218
3219   /* Sync the fast tracepoints list in the inferior ftlib.  */
3220   if (agent_loaded_p ())
3221     download_trace_state_variables ();
3222
3223   /* No previous fast tpoint yet.  */
3224   prev_ftpoint = NULL;
3225
3226   /* No previous static tpoint yet.  */
3227   prev_stpoint = NULL;
3228
3229   *packet = '\0';
3230
3231   if (agent_loaded_p ())
3232     {
3233       /* Tell IPA about the correct tdesc.  */
3234       if (write_inferior_integer (ipa_sym_addrs.addr_ipa_tdesc_idx,
3235                                   target_get_ipa_tdesc_idx ()))
3236         error ("Error setting ipa_tdesc_idx variable in lib");
3237     }
3238
3239   /* Start out empty.  */
3240   if (agent_loaded_p ())
3241     write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, 0);
3242
3243   /* Download and install tracepoints.  */
3244   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
3245     {
3246       /* Ensure all the hit counts start at zero.  */
3247       tpoint->hit_count = 0;
3248       tpoint->traceframe_usage = 0;
3249
3250       if (tpoint->type == trap_tracepoint)
3251         {
3252           /* Tracepoints are installed as memory breakpoints.  Just go
3253              ahead and install the trap.  The breakpoints module
3254              handles duplicated breakpoints, and the memory read
3255              routine handles un-patching traps from memory reads.  */
3256           tpoint->handle = set_breakpoint_at (tpoint->address,
3257                                               tracepoint_handler);
3258         }
3259       else if (tpoint->type == fast_tracepoint
3260                || tpoint->type == static_tracepoint)
3261         {
3262           if (maybe_write_ipa_not_loaded (packet))
3263             {
3264               trace_debug ("Requested a %s tracepoint, but fast "
3265                            "tracepoints aren't supported.",
3266                            tpoint->type == static_tracepoint
3267                            ? "static" : "fast");
3268               break;
3269             }
3270
3271           if (tpoint->type == fast_tracepoint)
3272             {
3273               int use_agent_p
3274                 = use_agent && agent_capability_check (AGENT_CAPA_FAST_TRACE);
3275
3276               if (prev_ftpoint != NULL
3277                   && prev_ftpoint->address == tpoint->address)
3278                 {
3279                   if (use_agent_p)
3280                     tracepoint_send_agent (tpoint);
3281                   else
3282                     download_tracepoint_1 (tpoint);
3283
3284                   clone_fast_tracepoint (tpoint, prev_ftpoint);
3285                 }
3286               else
3287                 {
3288                   /* Tracepoint is installed successfully?  */
3289                   int installed = 0;
3290
3291                   /* Download and install fast tracepoint by agent.  */
3292                   if (use_agent_p)
3293                     installed = !tracepoint_send_agent (tpoint);
3294                   else
3295                     {
3296                       download_tracepoint_1 (tpoint);
3297                       installed = !install_fast_tracepoint (tpoint, packet);
3298                     }
3299
3300                   if (installed)
3301                     prev_ftpoint = tpoint;
3302                 }
3303             }
3304           else
3305             {
3306               if (!in_process_agent_supports_ust ())
3307                 {
3308                   trace_debug ("Requested a static tracepoint, but static "
3309                                "tracepoints are not supported.");
3310                   break;
3311                 }
3312
3313               download_tracepoint_1 (tpoint);
3314               /* Can only probe a given marker once.  */
3315               if (prev_stpoint != NULL
3316                   && prev_stpoint->address == tpoint->address)
3317                 tpoint->handle = (void *) -1;
3318               else
3319                 {
3320                   if (probe_marker_at (tpoint->address, packet) == 0)
3321                     {
3322                       tpoint->handle = (void *) -1;
3323
3324                       /* So that we can handle multiple static tracepoints
3325                          at the same address easily.  */
3326                       prev_stpoint = tpoint;
3327                     }
3328                 }
3329             }
3330
3331           prev_tpptr = tpptr;
3332           tpptr = tpoint->obj_addr_on_target;
3333
3334           if (tpoint == tracepoints)
3335             /* First object in list, set the head pointer in the
3336                inferior.  */
3337             write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints, tpptr);
3338           else
3339             write_inferior_data_pointer (prev_tpptr
3340                                          + offsetof (struct tracepoint, next),
3341                                          tpptr);
3342         }
3343
3344       /* Any failure in the inner loop is sufficient cause to give
3345          up.  */
3346       if (tpoint->handle == NULL)
3347         break;
3348     }
3349
3350   /* Any error in tracepoint insertion is unacceptable; better to
3351      address the problem now, than end up with a useless or misleading
3352      trace run.  */
3353   if (tpoint != NULL)
3354     {
3355       clear_installed_tracepoints ();
3356       if (*packet == '\0')
3357         write_enn (packet);
3358       unpause_all (1);
3359       return;
3360     }
3361
3362   stopping_tracepoint = NULL;
3363   trace_buffer_is_full = 0;
3364   expr_eval_result = expr_eval_no_error;
3365   error_tracepoint = NULL;
3366   tracing_start_time = get_timestamp ();
3367
3368   /* Tracing is now active, hits will now start being logged.  */
3369   tracing = 1;
3370
3371   if (agent_loaded_p ())
3372     {
3373       if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 1))
3374         {
3375           internal_error (__FILE__, __LINE__,
3376                           "Error setting tracing variable in lib");
3377         }
3378
3379       if (write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint,
3380                                        0))
3381         {
3382           internal_error (__FILE__, __LINE__,
3383                           "Error clearing stopping_tracepoint variable"
3384                           " in lib");
3385         }
3386
3387       if (write_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full, 0))
3388         {
3389           internal_error (__FILE__, __LINE__,
3390                           "Error clearing trace_buffer_is_full variable"
3391                           " in lib");
3392         }
3393
3394       stop_tracing_bkpt = set_breakpoint_at (ipa_sym_addrs.addr_stop_tracing,
3395                                              stop_tracing_handler);
3396       if (stop_tracing_bkpt == NULL)
3397         error ("Error setting stop_tracing breakpoint");
3398
3399       flush_trace_buffer_bkpt
3400         = set_breakpoint_at (ipa_sym_addrs.addr_flush_trace_buffer,
3401                              flush_trace_buffer_handler);
3402       if (flush_trace_buffer_bkpt == NULL)
3403         error ("Error setting flush_trace_buffer breakpoint");
3404     }
3405
3406   unpause_all (1);
3407
3408   write_ok (packet);
3409 }
3410
3411 /* End a tracing run, filling in a stop reason to report back to GDB,
3412    and removing the tracepoints from the code.  */
3413
3414 void
3415 stop_tracing (void)
3416 {
3417   if (!tracing)
3418     {
3419       trace_debug ("Tracing is already off, ignoring");
3420       return;
3421     }
3422
3423   trace_debug ("Stopping the trace");
3424
3425   /* Pause all threads before removing fast jumps from memory,
3426      breakpoints, and touching IPA state variables (inferior memory).
3427      Some thread may hit the internal tracing breakpoints, or be
3428      collecting this moment, but that's ok, we don't release the
3429      tpoint object's memory or the jump pads here (we only do that
3430      when we're sure we can move all threads out of the jump pads).
3431      We can't now, since we may be getting here due to the inferior
3432      agent calling us.  */
3433   pause_all (1);
3434
3435   /* Stop logging. Tracepoints can still be hit, but they will not be
3436      recorded.  */
3437   tracing = 0;
3438   if (agent_loaded_p ())
3439     {
3440       if (write_inferior_integer (ipa_sym_addrs.addr_tracing, 0))
3441         {
3442           internal_error (__FILE__, __LINE__,
3443                           "Error clearing tracing variable in lib");
3444         }
3445     }
3446
3447   tracing_stop_time = get_timestamp ();
3448   tracing_stop_reason = "t???";
3449   tracing_stop_tpnum = 0;
3450   if (stopping_tracepoint)
3451     {
3452       trace_debug ("Stopping the trace because "
3453                    "tracepoint %d was hit %" PRIu64 " times",
3454                    stopping_tracepoint->number,
3455                    stopping_tracepoint->pass_count);
3456       tracing_stop_reason = "tpasscount";
3457       tracing_stop_tpnum = stopping_tracepoint->number;
3458     }
3459   else if (trace_buffer_is_full)
3460     {
3461       trace_debug ("Stopping the trace because the trace buffer is full");
3462       tracing_stop_reason = "tfull";
3463     }
3464   else if (expr_eval_result != expr_eval_no_error)
3465     {
3466       trace_debug ("Stopping the trace because of an expression eval error");
3467       tracing_stop_reason = eval_result_names[expr_eval_result];
3468       tracing_stop_tpnum = error_tracepoint->number;
3469     }
3470 #ifndef IN_PROCESS_AGENT
3471   else if (!gdb_connected ())
3472     {
3473       trace_debug ("Stopping the trace because GDB disconnected");
3474       tracing_stop_reason = "tdisconnected";
3475     }
3476 #endif
3477   else
3478     {
3479       trace_debug ("Stopping the trace because of a tstop command");
3480       tracing_stop_reason = "tstop";
3481     }
3482
3483   stopping_tracepoint = NULL;
3484   error_tracepoint = NULL;
3485
3486   /* Clear out the tracepoints.  */
3487   clear_installed_tracepoints ();
3488
3489   if (agent_loaded_p ())
3490     {
3491       /* Pull in fast tracepoint trace frames from the inferior lib
3492          buffer into our buffer, even if our buffer is already full,
3493          because we want to present the full number of created frames
3494          in addition to what fit in the trace buffer.  */
3495       upload_fast_traceframes ();
3496     }
3497
3498   if (stop_tracing_bkpt != NULL)
3499     {
3500       delete_breakpoint (stop_tracing_bkpt);
3501       stop_tracing_bkpt = NULL;
3502     }
3503
3504   if (flush_trace_buffer_bkpt != NULL)
3505     {
3506       delete_breakpoint (flush_trace_buffer_bkpt);
3507       flush_trace_buffer_bkpt = NULL;
3508     }
3509
3510   unpause_all (1);
3511 }
3512
3513 static int
3514 stop_tracing_handler (CORE_ADDR addr)
3515 {
3516   trace_debug ("lib hit stop_tracing");
3517
3518   /* Don't actually handle it here.  When we stop tracing we remove
3519      breakpoints from the inferior, and that is not allowed in a
3520      breakpoint handler (as the caller is walking the breakpoint
3521      list).  */
3522   return 0;
3523 }
3524
3525 static int
3526 flush_trace_buffer_handler (CORE_ADDR addr)
3527 {
3528   trace_debug ("lib hit flush_trace_buffer");
3529   return 0;
3530 }
3531
3532 static void
3533 cmd_qtstop (char *packet)
3534 {
3535   stop_tracing ();
3536   write_ok (packet);
3537 }
3538
3539 static void
3540 cmd_qtdisconnected (char *own_buf)
3541 {
3542   ULONGEST setting;
3543   char *packet = own_buf;
3544
3545   packet += strlen ("QTDisconnected:");
3546
3547   unpack_varlen_hex (packet, &setting);
3548
3549   write_ok (own_buf);
3550
3551   disconnected_tracing = setting;
3552 }
3553
3554 static void
3555 cmd_qtframe (char *own_buf)
3556 {
3557   ULONGEST frame, pc, lo, hi, num;
3558   int tfnum, tpnum;
3559   struct traceframe *tframe;
3560   char *packet = own_buf;
3561
3562   packet += strlen ("QTFrame:");
3563
3564   if (startswith (packet, "pc:"))
3565     {
3566       packet += strlen ("pc:");
3567       unpack_varlen_hex (packet, &pc);
3568       trace_debug ("Want to find next traceframe at pc=0x%s", paddress (pc));
3569       tframe = find_next_traceframe_in_range (pc, pc, 1, &tfnum);
3570     }
3571   else if (startswith (packet, "range:"))
3572     {
3573       packet += strlen ("range:");
3574       packet = unpack_varlen_hex (packet, &lo);
3575       ++packet;
3576       unpack_varlen_hex (packet, &hi);
3577       trace_debug ("Want to find next traceframe in the range 0x%s to 0x%s",
3578                    paddress (lo), paddress (hi));
3579       tframe = find_next_traceframe_in_range (lo, hi, 1, &tfnum);
3580     }
3581   else if (startswith (packet, "outside:"))
3582     {
3583       packet += strlen ("outside:");
3584       packet = unpack_varlen_hex (packet, &lo);
3585       ++packet;
3586       unpack_varlen_hex (packet, &hi);
3587       trace_debug ("Want to find next traceframe "
3588                    "outside the range 0x%s to 0x%s",
3589                    paddress (lo), paddress (hi));
3590       tframe = find_next_traceframe_in_range (lo, hi, 0, &tfnum);
3591     }
3592   else if (startswith (packet, "tdp:"))
3593     {
3594       packet += strlen ("tdp:");
3595       unpack_varlen_hex (packet, &num);
3596       tpnum = (int) num;
3597       trace_debug ("Want to find next traceframe for tracepoint %d", tpnum);
3598       tframe = find_next_traceframe_by_tracepoint (tpnum, &tfnum);
3599     }
3600   else
3601     {
3602       unpack_varlen_hex (packet, &frame);
3603       tfnum = (int) frame;
3604       if (tfnum == -1)
3605         {
3606           trace_debug ("Want to stop looking at traceframes");
3607           current_traceframe = -1;
3608           write_ok (own_buf);
3609           return;
3610         }
3611       trace_debug ("Want to look at traceframe %d", tfnum);
3612       tframe = find_traceframe (tfnum);
3613     }
3614
3615   if (tframe)
3616     {
3617       current_traceframe = tfnum;
3618       sprintf (own_buf, "F%xT%x", tfnum, tframe->tpnum);
3619     }
3620   else
3621     sprintf (own_buf, "F-1");
3622 }
3623
3624 static void
3625 cmd_qtstatus (char *packet)
3626 {
3627   char *stop_reason_rsp = NULL;
3628   char *buf1, *buf2, *buf3;
3629   const char *str;
3630   int slen;
3631
3632   /* Translate the plain text of the notes back into hex for
3633      transmission.  */
3634
3635   str = (tracing_user_name ? tracing_user_name : "");
3636   slen = strlen (str);
3637   buf1 = (char *) alloca (slen * 2 + 1);
3638   bin2hex ((gdb_byte *) str, buf1, slen);
3639
3640   str = (tracing_notes ? tracing_notes : "");
3641   slen = strlen (str);
3642   buf2 = (char *) alloca (slen * 2 + 1);
3643   bin2hex ((gdb_byte *) str, buf2, slen);
3644
3645   str = (tracing_stop_note ? tracing_stop_note : "");
3646   slen = strlen (str);
3647   buf3 = (char *) alloca (slen * 2 + 1);
3648   bin2hex ((gdb_byte *) str, buf3, slen);
3649
3650   trace_debug ("Returning trace status as %d, stop reason %s",
3651                tracing, tracing_stop_reason);
3652
3653   if (agent_loaded_p ())
3654     {
3655       pause_all (1);
3656
3657       upload_fast_traceframes ();
3658
3659       unpause_all (1);
3660    }
3661
3662   stop_reason_rsp = (char *) tracing_stop_reason;
3663
3664   /* The user visible error string in terror needs to be hex encoded.
3665      We leave it as plain string in `tracing_stop_reason' to ease
3666      debugging.  */
3667   if (startswith (stop_reason_rsp, "terror:"))
3668     {
3669       const char *result_name;
3670       int hexstr_len;
3671       char *p;
3672
3673       result_name = stop_reason_rsp + strlen ("terror:");
3674       hexstr_len = strlen (result_name) * 2;
3675       p = stop_reason_rsp
3676         = (char *) alloca (strlen ("terror:") + hexstr_len + 1);
3677       strcpy (p, "terror:");
3678       p += strlen (p);
3679       bin2hex ((gdb_byte *) result_name, p, strlen (result_name));
3680     }
3681
3682   /* If this was a forced stop, include any stop note that was supplied.  */
3683   if (strcmp (stop_reason_rsp, "tstop") == 0)
3684     {
3685       stop_reason_rsp = (char *) alloca (strlen ("tstop:") + strlen (buf3) + 1);
3686       strcpy (stop_reason_rsp, "tstop:");
3687       strcat (stop_reason_rsp, buf3);
3688     }
3689
3690   sprintf (packet,
3691            "T%d;"
3692            "%s:%x;"
3693            "tframes:%x;tcreated:%x;"
3694            "tfree:%x;tsize:%s;"
3695            "circular:%d;"
3696            "disconn:%d;"
3697            "starttime:%s;stoptime:%s;"
3698            "username:%s;notes:%s:",
3699            tracing ? 1 : 0,
3700            stop_reason_rsp, tracing_stop_tpnum,
3701            traceframe_count, traceframes_created,
3702            free_space (), phex_nz (trace_buffer_hi - trace_buffer_lo, 0),
3703            circular_trace_buffer,
3704            disconnected_tracing,
3705            phex_nz (tracing_start_time, sizeof (tracing_start_time)),
3706            phex_nz (tracing_stop_time, sizeof (tracing_stop_time)),
3707            buf1, buf2);
3708 }
3709
3710 static void
3711 cmd_qtp (char *own_buf)
3712 {
3713   ULONGEST num, addr;
3714   struct tracepoint *tpoint;
3715   char *packet = own_buf;
3716
3717   packet += strlen ("qTP:");
3718
3719   packet = unpack_varlen_hex (packet, &num);
3720   ++packet; /* skip a colon */
3721   packet = unpack_varlen_hex (packet, &addr);
3722
3723   /* See if we already have this tracepoint.  */
3724   tpoint = find_tracepoint (num, addr);
3725
3726   if (!tpoint)
3727     {
3728       trace_debug ("Tracepoint error: tracepoint %d at 0x%s not found",
3729                    (int) num, paddress (addr));
3730       write_enn (own_buf);
3731       return;
3732     }
3733
3734   sprintf (own_buf, "V%" PRIu64 ":%" PRIu64 "", tpoint->hit_count,
3735            tpoint->traceframe_usage);
3736 }
3737
3738 /* State variables to help return all the tracepoint bits.  */
3739 static struct tracepoint *cur_tpoint;
3740 static unsigned int cur_action;
3741 static unsigned int cur_step_action;
3742 static struct source_string *cur_source_string;
3743 static struct trace_state_variable *cur_tsv;
3744
3745 /* Compose a response that is an imitation of the syntax by which the
3746    tracepoint was originally downloaded.  */
3747
3748 static void
3749 response_tracepoint (char *packet, struct tracepoint *tpoint)
3750 {
3751   char *buf;
3752
3753   sprintf (packet, "T%x:%s:%c:%" PRIx64 ":%" PRIx64, tpoint->number,
3754            paddress (tpoint->address),
3755            (tpoint->enabled ? 'E' : 'D'), tpoint->step_count,
3756            tpoint->pass_count);
3757   if (tpoint->type == fast_tracepoint)
3758     sprintf (packet + strlen (packet), ":F%x", tpoint->orig_size);
3759   else if (tpoint->type == static_tracepoint)
3760     sprintf (packet + strlen (packet), ":S");
3761
3762   if (tpoint->cond)
3763     {
3764       buf = gdb_unparse_agent_expr (tpoint->cond);
3765       sprintf (packet + strlen (packet), ":X%x,%s",
3766                tpoint->cond->length, buf);
3767       free (buf);
3768     }
3769 }
3770
3771 /* Compose a response that is an imitation of the syntax by which the
3772    tracepoint action was originally downloaded (with the difference
3773    that due to the way we store the actions, this will output a packet
3774    per action, while GDB could have combined more than one action
3775    per-packet.  */
3776
3777 static void
3778 response_action (char *packet, struct tracepoint *tpoint,
3779                  char *taction, int step)
3780 {
3781   sprintf (packet, "%c%x:%s:%s",
3782            (step ? 'S' : 'A'), tpoint->number, paddress (tpoint->address),
3783            taction);
3784 }
3785
3786 /* Compose a response that is an imitation of the syntax by which the
3787    tracepoint source piece was originally downloaded.  */
3788
3789 static void
3790 response_source (char *packet,
3791                  struct tracepoint *tpoint, struct source_string *src)
3792 {
3793   char *buf;
3794   int len;
3795
3796   len = strlen (src->str);
3797   buf = (char *) alloca (len * 2 + 1);
3798   bin2hex ((gdb_byte *) src->str, buf, len);
3799
3800   sprintf (packet, "Z%x:%s:%s:%x:%x:%s",
3801            tpoint->number, paddress (tpoint->address),
3802            src->type, 0, len, buf);
3803 }
3804
3805 /* Return the first piece of tracepoint definition, and initialize the
3806    state machine that will iterate through all the tracepoint
3807    bits.  */
3808
3809 static void
3810 cmd_qtfp (char *packet)
3811 {
3812   trace_debug ("Returning first tracepoint definition piece");
3813
3814   cur_tpoint = tracepoints;
3815   cur_action = cur_step_action = 0;
3816   cur_source_string = NULL;
3817
3818   if (cur_tpoint)
3819     response_tracepoint (packet, cur_tpoint);
3820   else
3821     strcpy (packet, "l");
3822 }
3823
3824 /* Return additional pieces of tracepoint definition.  Each action and
3825    stepping action must go into its own packet, because of packet size
3826    limits, and so we use state variables to deliver one piece at a
3827    time.  */
3828
3829 static void
3830 cmd_qtsp (char *packet)
3831 {
3832   trace_debug ("Returning subsequent tracepoint definition piece");
3833
3834   if (!cur_tpoint)
3835     {
3836       /* This case would normally never occur, but be prepared for
3837          GDB misbehavior.  */
3838       strcpy (packet, "l");
3839     }
3840   else if (cur_action < cur_tpoint->numactions)
3841     {
3842       response_action (packet, cur_tpoint,
3843                        cur_tpoint->actions_str[cur_action], 0);
3844       ++cur_action;
3845     }
3846   else if (cur_step_action < cur_tpoint->num_step_actions)
3847     {
3848       response_action (packet, cur_tpoint,
3849                        cur_tpoint->step_actions_str[cur_step_action], 1);
3850       ++cur_step_action;
3851     }
3852   else if ((cur_source_string
3853             ? cur_source_string->next
3854             : cur_tpoint->source_strings))
3855     {
3856       if (cur_source_string)
3857         cur_source_string = cur_source_string->next;
3858       else
3859         cur_source_string = cur_tpoint->source_strings;
3860       response_source (packet, cur_tpoint, cur_source_string);
3861     }
3862   else
3863     {
3864       cur_tpoint = cur_tpoint->next;
3865       cur_action = cur_step_action = 0;
3866       cur_source_string = NULL;
3867       if (cur_tpoint)
3868         response_tracepoint (packet, cur_tpoint);
3869       else
3870         strcpy (packet, "l");
3871     }
3872 }
3873
3874 /* Compose a response that is an imitation of the syntax by which the
3875    trace state variable was originally downloaded.  */
3876
3877 static void
3878 response_tsv (char *packet, struct trace_state_variable *tsv)
3879 {
3880   char *buf = (char *) "";
3881   int namelen;
3882
3883   if (tsv->name)
3884     {
3885       namelen = strlen (tsv->name);
3886       buf = (char *) alloca (namelen * 2 + 1);
3887       bin2hex ((gdb_byte *) tsv->name, buf, namelen);
3888     }
3889
3890   sprintf (packet, "%x:%s:%x:%s", tsv->number, phex_nz (tsv->initial_value, 0),
3891            tsv->getter ? 1 : 0, buf);
3892 }
3893
3894 /* Return the first trace state variable definition, and initialize
3895    the state machine that will iterate through all the tsv bits.  */
3896
3897 static void
3898 cmd_qtfv (char *packet)
3899 {
3900   trace_debug ("Returning first trace state variable definition");
3901
3902   cur_tsv = trace_state_variables;
3903
3904   if (cur_tsv)
3905     response_tsv (packet, cur_tsv);
3906   else
3907     strcpy (packet, "l");
3908 }
3909
3910 /* Return additional trace state variable definitions. */
3911
3912 static void
3913 cmd_qtsv (char *packet)
3914 {
3915   trace_debug ("Returning additional trace state variable definition");
3916
3917   if (cur_tsv)
3918     {
3919       cur_tsv = cur_tsv->next;
3920       if (cur_tsv)
3921         response_tsv (packet, cur_tsv);
3922       else
3923         strcpy (packet, "l");
3924     }
3925   else
3926     strcpy (packet, "l");
3927 }
3928
3929 /* Return the first static tracepoint marker, and initialize the state
3930    machine that will iterate through all the static tracepoints
3931    markers.  */
3932
3933 static void
3934 cmd_qtfstm (char *packet)
3935 {
3936   if (!maybe_write_ipa_ust_not_loaded (packet))
3937     run_inferior_command (packet, strlen (packet) + 1);
3938 }
3939
3940 /* Return additional static tracepoints markers.  */
3941
3942 static void
3943 cmd_qtsstm (char *packet)
3944 {
3945   if (!maybe_write_ipa_ust_not_loaded (packet))
3946     run_inferior_command (packet, strlen (packet) + 1);
3947 }
3948
3949 /* Return the definition of the static tracepoint at a given address.
3950    Result packet is the same as qTsST's.  */
3951
3952 static void
3953 cmd_qtstmat (char *packet)
3954 {
3955   if (!maybe_write_ipa_ust_not_loaded (packet))
3956     run_inferior_command (packet, strlen (packet) + 1);
3957 }
3958
3959 /* Helper for gdb_agent_about_to_close.
3960    Return non-zero if thread ENTRY is in the same process in DATA.  */
3961
3962 static int
3963 same_process_p (struct inferior_list_entry *entry, void *data)
3964 {
3965   int *pid = (int *) data;
3966
3967   return ptid_get_pid (entry->id) == *pid;
3968 }
3969
3970 /* Sent the agent a command to close it.  */
3971
3972 void
3973 gdb_agent_about_to_close (int pid)
3974 {
3975   char buf[IPA_CMD_BUF_SIZE];
3976
3977   if (!maybe_write_ipa_not_loaded (buf))
3978     {
3979       struct thread_info *saved_thread;
3980
3981       saved_thread = current_thread;
3982
3983       /* Find any thread which belongs to process PID.  */
3984       current_thread = (struct thread_info *)
3985         find_inferior (&all_threads, same_process_p, &pid);
3986
3987       strcpy (buf, "close");
3988
3989       run_inferior_command (buf, strlen (buf) + 1);
3990
3991       current_thread = saved_thread;
3992     }
3993 }
3994
3995 /* Return the minimum instruction size needed for fast tracepoints as a
3996    hexadecimal number.  */
3997
3998 static void
3999 cmd_qtminftpilen (char *packet)
4000 {
4001   if (current_thread == NULL)
4002     {
4003       /* Indicate that the minimum length is currently unknown.  */
4004       strcpy (packet, "0");
4005       return;
4006     }
4007
4008   sprintf (packet, "%x", target_get_min_fast_tracepoint_insn_len ());
4009 }
4010
4011 /* Respond to qTBuffer packet with a block of raw data from the trace
4012    buffer.  GDB may ask for a lot, but we are allowed to reply with
4013    only as much as will fit within packet limits or whatever.  */
4014
4015 static void
4016 cmd_qtbuffer (char *own_buf)
4017 {
4018   ULONGEST offset, num, tot;
4019   unsigned char *tbp;
4020   char *packet = own_buf;
4021
4022   packet += strlen ("qTBuffer:");
4023
4024   packet = unpack_varlen_hex (packet, &offset);
4025   ++packet; /* skip a comma */
4026   unpack_varlen_hex (packet, &num);
4027
4028   trace_debug ("Want to get trace buffer, %d bytes at offset 0x%s",
4029                (int) num, phex_nz (offset, 0));
4030
4031   tot = (trace_buffer_hi - trace_buffer_lo) - free_space ();
4032
4033   /* If we're right at the end, reply specially that we're done.  */
4034   if (offset == tot)
4035     {
4036       strcpy (own_buf, "l");
4037       return;
4038     }
4039
4040   /* Object to any other out-of-bounds request.  */
4041   if (offset > tot)
4042     {
4043       write_enn (own_buf);
4044       return;
4045     }
4046
4047   /* Compute the pointer corresponding to the given offset, accounting
4048      for wraparound.  */
4049   tbp = trace_buffer_start + offset;
4050   if (tbp >= trace_buffer_wrap)
4051     tbp -= (trace_buffer_wrap - trace_buffer_lo);
4052
4053   /* Trim to the remaining bytes if we're close to the end.  */
4054   if (num > tot - offset)
4055     num = tot - offset;
4056
4057   /* Trim to available packet size.  */
4058   if (num >= (PBUFSIZ - 16) / 2 )
4059     num = (PBUFSIZ - 16) / 2;
4060
4061   bin2hex (tbp, own_buf, num);
4062 }
4063
4064 static void
4065 cmd_bigqtbuffer_circular (char *own_buf)
4066 {
4067   ULONGEST val;
4068   char *packet = own_buf;
4069
4070   packet += strlen ("QTBuffer:circular:");
4071
4072   unpack_varlen_hex (packet, &val);
4073   circular_trace_buffer = val;
4074   trace_debug ("Trace buffer is now %s",
4075                circular_trace_buffer ? "circular" : "linear");
4076   write_ok (own_buf);
4077 }
4078
4079 static void
4080 cmd_bigqtbuffer_size (char *own_buf)
4081 {
4082   ULONGEST val;
4083   LONGEST sval;
4084   char *packet = own_buf;
4085
4086   /* Can't change the size during a tracing run.  */
4087   if (tracing)
4088     {
4089       write_enn (own_buf);
4090       return;
4091     }
4092
4093   packet += strlen ("QTBuffer:size:");
4094
4095   /* -1 is sent as literal "-1".  */
4096   if (strcmp (packet, "-1") == 0)
4097     sval = DEFAULT_TRACE_BUFFER_SIZE;
4098   else
4099     {
4100       unpack_varlen_hex (packet, &val);
4101       sval = (LONGEST) val;
4102     }
4103
4104   init_trace_buffer (sval);
4105   trace_debug ("Trace buffer is now %s bytes",
4106                plongest (trace_buffer_size));
4107   write_ok (own_buf);
4108 }
4109
4110 static void
4111 cmd_qtnotes (char *own_buf)
4112 {
4113   size_t nbytes;
4114   char *saved, *user, *notes, *stopnote;
4115   char *packet = own_buf;
4116
4117   packet += strlen ("QTNotes:");
4118
4119   while (*packet)
4120     {
4121       if (startswith (packet, "user:"))
4122         {
4123           packet += strlen ("user:");
4124           saved = packet;
4125           packet = strchr (packet, ';');
4126           nbytes = (packet - saved) / 2;
4127           user = (char *) xmalloc (nbytes + 1);
4128           nbytes = hex2bin (saved, (gdb_byte *) user, nbytes);
4129           user[nbytes] = '\0';
4130           ++packet; /* skip the semicolon */
4131           trace_debug ("User is '%s'", user);
4132           xfree (tracing_user_name);
4133           tracing_user_name = user;
4134         }
4135       else if (startswith (packet, "notes:"))
4136         {
4137           packet += strlen ("notes:");
4138           saved = packet;
4139           packet = strchr (packet, ';');
4140           nbytes = (packet - saved) / 2;
4141           notes = (char *) xmalloc (nbytes + 1);
4142           nbytes = hex2bin (saved, (gdb_byte *) notes, nbytes);
4143           notes[nbytes] = '\0';
4144           ++packet; /* skip the semicolon */
4145           trace_debug ("Notes is '%s'", notes);
4146           xfree (tracing_notes);
4147           tracing_notes = notes;
4148         }
4149       else if (startswith (packet, "tstop:"))
4150         {
4151           packet += strlen ("tstop:");
4152           saved = packet;
4153           packet = strchr (packet, ';');
4154           nbytes = (packet - saved) / 2;
4155           stopnote = (char *) xmalloc (nbytes + 1);
4156           nbytes = hex2bin (saved, (gdb_byte *) stopnote, nbytes);
4157           stopnote[nbytes] = '\0';
4158           ++packet; /* skip the semicolon */
4159           trace_debug ("tstop note is '%s'", stopnote);
4160           xfree (tracing_stop_note);
4161           tracing_stop_note = stopnote;
4162         }
4163       else
4164         break;
4165     }
4166
4167   write_ok (own_buf);
4168 }
4169
4170 int
4171 handle_tracepoint_general_set (char *packet)
4172 {
4173   if (strcmp ("QTinit", packet) == 0)
4174     {
4175       cmd_qtinit (packet);
4176       return 1;
4177     }
4178   else if (startswith (packet, "QTDP:"))
4179     {
4180       cmd_qtdp (packet);
4181       return 1;
4182     }
4183   else if (startswith (packet, "QTDPsrc:"))
4184     {
4185       cmd_qtdpsrc (packet);
4186       return 1;
4187     }
4188   else if (startswith (packet, "QTEnable:"))
4189     {
4190       cmd_qtenable_disable (packet, 1);
4191       return 1;
4192     }
4193   else if (startswith (packet, "QTDisable:"))
4194     {
4195       cmd_qtenable_disable (packet, 0);
4196       return 1;
4197     }
4198   else if (startswith (packet, "QTDV:"))
4199     {
4200       cmd_qtdv (packet);
4201       return 1;
4202     }
4203   else if (startswith (packet, "QTro:"))
4204     {
4205       cmd_qtro (packet);
4206       return 1;
4207     }
4208   else if (strcmp ("QTStart", packet) == 0)
4209     {
4210       cmd_qtstart (packet);
4211       return 1;
4212     }
4213   else if (strcmp ("QTStop", packet) == 0)
4214     {
4215       cmd_qtstop (packet);
4216       return 1;
4217     }
4218   else if (startswith (packet, "QTDisconnected:"))
4219     {
4220       cmd_qtdisconnected (packet);
4221       return 1;
4222     }
4223   else if (startswith (packet, "QTFrame:"))
4224     {
4225       cmd_qtframe (packet);
4226       return 1;
4227     }
4228   else if (startswith (packet, "QTBuffer:circular:"))
4229     {
4230       cmd_bigqtbuffer_circular (packet);
4231       return 1;
4232     }
4233   else if (startswith (packet, "QTBuffer:size:"))
4234     {
4235       cmd_bigqtbuffer_size (packet);
4236       return 1;
4237     }
4238   else if (startswith (packet, "QTNotes:"))
4239     {
4240       cmd_qtnotes (packet);
4241       return 1;
4242     }
4243
4244   return 0;
4245 }
4246
4247 int
4248 handle_tracepoint_query (char *packet)
4249 {
4250   if (strcmp ("qTStatus", packet) == 0)
4251     {
4252       cmd_qtstatus (packet);
4253       return 1;
4254     }
4255   else if (startswith (packet, "qTP:"))
4256     {
4257       cmd_qtp (packet);
4258       return 1;
4259     }
4260   else if (strcmp ("qTfP", packet) == 0)
4261     {
4262       cmd_qtfp (packet);
4263       return 1;
4264     }
4265   else if (strcmp ("qTsP", packet) == 0)
4266     {
4267       cmd_qtsp (packet);
4268       return 1;
4269     }
4270   else if (strcmp ("qTfV", packet) == 0)
4271     {
4272       cmd_qtfv (packet);
4273       return 1;
4274     }
4275   else if (strcmp ("qTsV", packet) == 0)
4276     {
4277       cmd_qtsv (packet);
4278       return 1;
4279     }
4280   else if (startswith (packet, "qTV:"))
4281     {
4282       cmd_qtv (packet);
4283       return 1;
4284     }
4285   else if (startswith (packet, "qTBuffer:"))
4286     {
4287       cmd_qtbuffer (packet);
4288       return 1;
4289     }
4290   else if (strcmp ("qTfSTM", packet) == 0)
4291     {
4292       cmd_qtfstm (packet);
4293       return 1;
4294     }
4295   else if (strcmp ("qTsSTM", packet) == 0)
4296     {
4297       cmd_qtsstm (packet);
4298       return 1;
4299     }
4300   else if (startswith (packet, "qTSTMat:"))
4301     {
4302       cmd_qtstmat (packet);
4303       return 1;
4304     }
4305   else if (strcmp ("qTMinFTPILen", packet) == 0)
4306     {
4307       cmd_qtminftpilen (packet);
4308       return 1;
4309     }
4310
4311   return 0;
4312 }
4313
4314 #endif
4315 #ifndef IN_PROCESS_AGENT
4316
4317 /* Call this when thread TINFO has hit the tracepoint defined by
4318    TP_NUMBER and TP_ADDRESS, and that tracepoint has a while-stepping
4319    action.  This adds a while-stepping collecting state item to the
4320    threads' collecting state list, so that we can keep track of
4321    multiple simultaneous while-stepping actions being collected by the
4322    same thread.  This can happen in cases like:
4323
4324     ff0001  INSN1 <-- TP1, while-stepping 10 collect $regs
4325     ff0002  INSN2
4326     ff0003  INSN3 <-- TP2, collect $regs
4327     ff0004  INSN4 <-- TP3, while-stepping 10 collect $regs
4328     ff0005  INSN5
4329
4330    Notice that when instruction INSN5 is reached, the while-stepping
4331    actions of both TP1 and TP3 are still being collected, and that TP2
4332    had been collected meanwhile.  The whole range of ff0001-ff0005
4333    should be single-stepped, due to at least TP1's while-stepping
4334    action covering the whole range.  */
4335
4336 static void
4337 add_while_stepping_state (struct thread_info *tinfo,
4338                           int tp_number, CORE_ADDR tp_address)
4339 {
4340   struct wstep_state *wstep = XNEW (struct wstep_state);
4341
4342   wstep->next = tinfo->while_stepping;
4343
4344   wstep->tp_number = tp_number;
4345   wstep->tp_address = tp_address;
4346   wstep->current_step = 0;
4347
4348   tinfo->while_stepping = wstep;
4349 }
4350
4351 /* Release the while-stepping collecting state WSTEP.  */
4352
4353 static void
4354 release_while_stepping_state (struct wstep_state *wstep)
4355 {
4356   free (wstep);
4357 }
4358
4359 /* Release all while-stepping collecting states currently associated
4360    with thread TINFO.  */
4361
4362 void
4363 release_while_stepping_state_list (struct thread_info *tinfo)
4364 {
4365   struct wstep_state *head;
4366
4367   while (tinfo->while_stepping)
4368     {
4369       head = tinfo->while_stepping;
4370       tinfo->while_stepping = head->next;
4371       release_while_stepping_state (head);
4372     }
4373 }
4374
4375 /* If TINFO was handling a 'while-stepping' action, the step has
4376    finished, so collect any step data needed, and check if any more
4377    steps are required.  Return true if the thread was indeed
4378    collecting tracepoint data, false otherwise.  */
4379
4380 int
4381 tracepoint_finished_step (struct thread_info *tinfo, CORE_ADDR stop_pc)
4382 {
4383   struct tracepoint *tpoint;
4384   struct wstep_state *wstep;
4385   struct wstep_state **wstep_link;
4386   struct trap_tracepoint_ctx ctx;
4387
4388   /* Pull in fast tracepoint trace frames from the inferior lib buffer into
4389      our buffer.  */
4390   if (agent_loaded_p ())
4391     upload_fast_traceframes ();
4392
4393   /* Check if we were indeed collecting data for one of more
4394      tracepoints with a 'while-stepping' count.  */
4395   if (tinfo->while_stepping == NULL)
4396     return 0;
4397
4398   if (!tracing)
4399     {
4400       /* We're not even tracing anymore.  Stop this thread from
4401          collecting.  */
4402       release_while_stepping_state_list (tinfo);
4403
4404       /* The thread had stopped due to a single-step request indeed
4405          explained by a tracepoint.  */
4406       return 1;
4407     }
4408
4409   wstep = tinfo->while_stepping;
4410   wstep_link = &tinfo->while_stepping;
4411
4412   trace_debug ("Thread %s finished a single-step for tracepoint %d at 0x%s",
4413                target_pid_to_str (tinfo->entry.id),
4414                wstep->tp_number, paddress (wstep->tp_address));
4415
4416   ctx.base.type = trap_tracepoint;
4417   ctx.regcache = get_thread_regcache (tinfo, 1);
4418
4419   while (wstep != NULL)
4420     {
4421       tpoint = find_tracepoint (wstep->tp_number, wstep->tp_address);
4422       if (tpoint == NULL)
4423         {
4424           trace_debug ("NO TRACEPOINT %d at 0x%s FOR THREAD %s!",
4425                        wstep->tp_number, paddress (wstep->tp_address),
4426                        target_pid_to_str (tinfo->entry.id));
4427
4428           /* Unlink.  */
4429           *wstep_link = wstep->next;
4430           release_while_stepping_state (wstep);
4431           wstep = *wstep_link;
4432           continue;
4433         }
4434
4435       /* We've just finished one step.  */
4436       ++wstep->current_step;
4437
4438       /* Collect data.  */
4439       collect_data_at_step ((struct tracepoint_hit_ctx *) &ctx,
4440                             stop_pc, tpoint, wstep->current_step);
4441
4442       if (wstep->current_step >= tpoint->step_count)
4443         {
4444           /* The requested numbers of steps have occurred.  */
4445           trace_debug ("Thread %s done stepping for tracepoint %d at 0x%s",
4446                        target_pid_to_str (tinfo->entry.id),
4447                        wstep->tp_number, paddress (wstep->tp_address));
4448
4449           /* Unlink the wstep.  */
4450           *wstep_link = wstep->next;
4451           release_while_stepping_state (wstep);
4452           wstep = *wstep_link;
4453
4454           /* Only check the hit count now, which ensure that we do all
4455              our stepping before stopping the run.  */
4456           if (tpoint->pass_count > 0
4457               && tpoint->hit_count >= tpoint->pass_count
4458               && stopping_tracepoint == NULL)
4459             stopping_tracepoint = tpoint;
4460         }
4461       else
4462         {
4463           /* Keep single-stepping until the requested numbers of steps
4464              have occurred.  */
4465           wstep_link = &wstep->next;
4466           wstep = *wstep_link;
4467         }
4468
4469       if (stopping_tracepoint
4470           || trace_buffer_is_full
4471           || expr_eval_result != expr_eval_no_error)
4472         {
4473           stop_tracing ();
4474           break;
4475         }
4476     }
4477
4478   return 1;
4479 }
4480
4481 /* Handle any internal tracing control breakpoint hits.  That means,
4482    pull traceframes from the IPA to our buffer, and syncing both
4483    tracing agents when the IPA's tracing stops for some reason.  */
4484
4485 int
4486 handle_tracepoint_bkpts (struct thread_info *tinfo, CORE_ADDR stop_pc)
4487 {
4488   /* Pull in fast tracepoint trace frames from the inferior in-process
4489      agent's buffer into our buffer.  */
4490
4491   if (!agent_loaded_p ())
4492     return 0;
4493
4494   upload_fast_traceframes ();
4495
4496   /* Check if the in-process agent had decided we should stop
4497      tracing.  */
4498   if (stop_pc == ipa_sym_addrs.addr_stop_tracing)
4499     {
4500       int ipa_trace_buffer_is_full;
4501       CORE_ADDR ipa_stopping_tracepoint;
4502       int ipa_expr_eval_result;
4503       CORE_ADDR ipa_error_tracepoint;
4504
4505       trace_debug ("lib stopped at stop_tracing");
4506
4507       read_inferior_integer (ipa_sym_addrs.addr_trace_buffer_is_full,
4508                              &ipa_trace_buffer_is_full);
4509
4510       read_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint,
4511                                   &ipa_stopping_tracepoint);
4512       write_inferior_data_pointer (ipa_sym_addrs.addr_stopping_tracepoint, 0);
4513
4514       read_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint,
4515                                   &ipa_error_tracepoint);
4516       write_inferior_data_pointer (ipa_sym_addrs.addr_error_tracepoint, 0);
4517
4518       read_inferior_integer (ipa_sym_addrs.addr_expr_eval_result,
4519                              &ipa_expr_eval_result);
4520       write_inferior_integer (ipa_sym_addrs.addr_expr_eval_result, 0);
4521
4522       trace_debug ("lib: trace_buffer_is_full: %d, "
4523                    "stopping_tracepoint: %s, "
4524                    "ipa_expr_eval_result: %d, "
4525                    "error_tracepoint: %s, ",
4526                    ipa_trace_buffer_is_full,
4527                    paddress (ipa_stopping_tracepoint),
4528                    ipa_expr_eval_result,
4529                    paddress (ipa_error_tracepoint));
4530
4531       if (debug_threads)
4532         {
4533           if (ipa_trace_buffer_is_full)
4534             trace_debug ("lib stopped due to full buffer.");
4535           if (ipa_stopping_tracepoint)
4536             trace_debug ("lib stopped due to tpoint");
4537           if (ipa_error_tracepoint)
4538             trace_debug ("lib stopped due to error");
4539         }
4540
4541       if (ipa_stopping_tracepoint != 0)
4542         {
4543           stopping_tracepoint
4544             = fast_tracepoint_from_ipa_tpoint_address (ipa_stopping_tracepoint);
4545         }
4546       else if (ipa_expr_eval_result != expr_eval_no_error)
4547         {
4548           expr_eval_result = ipa_expr_eval_result;
4549           error_tracepoint
4550             = fast_tracepoint_from_ipa_tpoint_address (ipa_error_tracepoint);
4551         }
4552       stop_tracing ();
4553       return 1;
4554     }
4555   else if (stop_pc == ipa_sym_addrs.addr_flush_trace_buffer)
4556     {
4557       trace_debug ("lib stopped at flush_trace_buffer");
4558       return 1;
4559     }
4560
4561   return 0;
4562 }
4563
4564 /* Return true if TINFO just hit a tracepoint.  Collect data if
4565    so.  */
4566
4567 int
4568 tracepoint_was_hit (struct thread_info *tinfo, CORE_ADDR stop_pc)
4569 {
4570   struct tracepoint *tpoint;
4571   int ret = 0;
4572   struct trap_tracepoint_ctx ctx;
4573
4574   /* Not tracing, don't handle.  */
4575   if (!tracing)
4576     return 0;
4577
4578   ctx.base.type = trap_tracepoint;
4579   ctx.regcache = get_thread_regcache (tinfo, 1);
4580
4581   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
4582     {
4583       /* Note that we collect fast tracepoints here as well.  We'll
4584          step over the fast tracepoint jump later, which avoids the
4585          double collect.  However, we don't collect for static
4586          tracepoints here, because UST markers are compiled in program,
4587          and probes will be executed in program.  So static tracepoints
4588          are collected there.   */
4589       if (tpoint->enabled && stop_pc == tpoint->address
4590           && tpoint->type != static_tracepoint)
4591         {
4592           trace_debug ("Thread %s at address of tracepoint %d at 0x%s",
4593                        target_pid_to_str (tinfo->entry.id),
4594                        tpoint->number, paddress (tpoint->address));
4595
4596           /* Test the condition if present, and collect if true.  */
4597           if (!tpoint->cond
4598               || (condition_true_at_tracepoint
4599                   ((struct tracepoint_hit_ctx *) &ctx, tpoint)))
4600             collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
4601                                         stop_pc, tpoint);
4602
4603           if (stopping_tracepoint
4604               || trace_buffer_is_full
4605               || expr_eval_result != expr_eval_no_error)
4606             {
4607               stop_tracing ();
4608             }
4609           /* If the tracepoint had a 'while-stepping' action, then set
4610              the thread to collect this tracepoint on the following
4611              single-steps.  */
4612           else if (tpoint->step_count > 0)
4613             {
4614               add_while_stepping_state (tinfo,
4615                                         tpoint->number, tpoint->address);
4616             }
4617
4618           ret = 1;
4619         }
4620     }
4621
4622   return ret;
4623 }
4624
4625 #endif
4626
4627 #if defined IN_PROCESS_AGENT && defined HAVE_UST
4628 struct ust_marker_data;
4629 static void collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
4630                                             struct traceframe *tframe);
4631 #endif
4632
4633 /* Create a trace frame for the hit of the given tracepoint in the
4634    given thread.  */
4635
4636 static void
4637 collect_data_at_tracepoint (struct tracepoint_hit_ctx *ctx, CORE_ADDR stop_pc,
4638                             struct tracepoint *tpoint)
4639 {
4640   struct traceframe *tframe;
4641   int acti;
4642
4643   /* Only count it as a hit when we actually collect data.  */
4644   tpoint->hit_count++;
4645
4646   /* If we've exceeded a defined pass count, record the event for
4647      later, and finish the collection for this hit.  This test is only
4648      for nonstepping tracepoints, stepping tracepoints test at the end
4649      of their while-stepping loop.  */
4650   if (tpoint->pass_count > 0
4651       && tpoint->hit_count >= tpoint->pass_count
4652       && tpoint->step_count == 0
4653       && stopping_tracepoint == NULL)
4654     stopping_tracepoint = tpoint;
4655
4656   trace_debug ("Making new traceframe for tracepoint %d at 0x%s, hit %" PRIu64,
4657                tpoint->number, paddress (tpoint->address), tpoint->hit_count);
4658
4659   tframe = add_traceframe (tpoint);
4660
4661   if (tframe)
4662     {
4663       for (acti = 0; acti < tpoint->numactions; ++acti)
4664         {
4665 #ifndef IN_PROCESS_AGENT
4666           trace_debug ("Tracepoint %d at 0x%s about to do action '%s'",
4667                        tpoint->number, paddress (tpoint->address),
4668                        tpoint->actions_str[acti]);
4669 #endif
4670
4671           do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe,
4672                                    tpoint->actions[acti]);
4673         }
4674
4675       finish_traceframe (tframe);
4676     }
4677
4678   if (tframe == NULL && tracing)
4679     trace_buffer_is_full = 1;
4680 }
4681
4682 #ifndef IN_PROCESS_AGENT
4683
4684 static void
4685 collect_data_at_step (struct tracepoint_hit_ctx *ctx,
4686                       CORE_ADDR stop_pc,
4687                       struct tracepoint *tpoint, int current_step)
4688 {
4689   struct traceframe *tframe;
4690   int acti;
4691
4692   trace_debug ("Making new step traceframe for "
4693                "tracepoint %d at 0x%s, step %d of %" PRIu64 ", hit %" PRIu64,
4694                tpoint->number, paddress (tpoint->address),
4695                current_step, tpoint->step_count,
4696                tpoint->hit_count);
4697
4698   tframe = add_traceframe (tpoint);
4699
4700   if (tframe)
4701     {
4702       for (acti = 0; acti < tpoint->num_step_actions; ++acti)
4703         {
4704           trace_debug ("Tracepoint %d at 0x%s about to do step action '%s'",
4705                        tpoint->number, paddress (tpoint->address),
4706                        tpoint->step_actions_str[acti]);
4707
4708           do_action_at_tracepoint (ctx, stop_pc, tpoint, tframe,
4709                                    tpoint->step_actions[acti]);
4710         }
4711
4712       finish_traceframe (tframe);
4713     }
4714
4715   if (tframe == NULL && tracing)
4716     trace_buffer_is_full = 1;
4717 }
4718
4719 #endif
4720
4721 #ifdef IN_PROCESS_AGENT
4722 /* The target description index for IPA.  Passed from gdbserver, used
4723    to select ipa_tdesc.  */
4724 EXTERN_C_PUSH
4725 IP_AGENT_EXPORT_VAR int ipa_tdesc_idx;
4726 EXTERN_C_POP
4727 #endif
4728
4729 static struct regcache *
4730 get_context_regcache (struct tracepoint_hit_ctx *ctx)
4731 {
4732   struct regcache *regcache = NULL;
4733 #ifdef IN_PROCESS_AGENT
4734   const struct target_desc *ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx);
4735
4736   if (ctx->type == fast_tracepoint)
4737     {
4738       struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx;
4739       if (!fctx->regcache_initted)
4740         {
4741           fctx->regcache_initted = 1;
4742           init_register_cache (&fctx->regcache, ipa_tdesc, fctx->regspace);
4743           supply_regblock (&fctx->regcache, NULL);
4744           supply_fast_tracepoint_registers (&fctx->regcache, fctx->regs);
4745         }
4746       regcache = &fctx->regcache;
4747     }
4748 #ifdef HAVE_UST
4749   if (ctx->type == static_tracepoint)
4750     {
4751       struct static_tracepoint_ctx *sctx
4752         = (struct static_tracepoint_ctx *) ctx;
4753
4754       if (!sctx->regcache_initted)
4755         {
4756           sctx->regcache_initted = 1;
4757           init_register_cache (&sctx->regcache, ipa_tdesc, sctx->regspace);
4758           supply_regblock (&sctx->regcache, NULL);
4759           /* Pass down the tracepoint address, because REGS doesn't
4760              include the PC, but we know what it must have been.  */
4761           supply_static_tracepoint_registers (&sctx->regcache,
4762                                               (const unsigned char *)
4763                                               sctx->regs,
4764                                               sctx->tpoint->address);
4765         }
4766       regcache = &sctx->regcache;
4767     }
4768 #endif
4769 #else
4770   if (ctx->type == trap_tracepoint)
4771     {
4772       struct trap_tracepoint_ctx *tctx = (struct trap_tracepoint_ctx *) ctx;
4773       regcache = tctx->regcache;
4774     }
4775 #endif
4776
4777   gdb_assert (regcache != NULL);
4778
4779   return regcache;
4780 }
4781
4782 static void
4783 do_action_at_tracepoint (struct tracepoint_hit_ctx *ctx,
4784                          CORE_ADDR stop_pc,
4785                          struct tracepoint *tpoint,
4786                          struct traceframe *tframe,
4787                          struct tracepoint_action *taction)
4788 {
4789   enum eval_result_type err;
4790
4791   switch (taction->type)
4792     {
4793     case 'M':
4794       {
4795         struct collect_memory_action *maction;
4796         struct eval_agent_expr_context ax_ctx;
4797
4798         maction = (struct collect_memory_action *) taction;
4799         ax_ctx.regcache = NULL;
4800         ax_ctx.tframe = tframe;
4801         ax_ctx.tpoint = tpoint;
4802
4803         trace_debug ("Want to collect %s bytes at 0x%s (basereg %d)",
4804                      pulongest (maction->len),
4805                      paddress (maction->addr), maction->basereg);
4806         /* (should use basereg) */
4807         agent_mem_read (&ax_ctx, NULL, (CORE_ADDR) maction->addr,
4808                         maction->len);
4809         break;
4810       }
4811     case 'R':
4812       {
4813         unsigned char *regspace;
4814         struct regcache tregcache;
4815         struct regcache *context_regcache;
4816         int regcache_size;
4817
4818         trace_debug ("Want to collect registers");
4819
4820         context_regcache = get_context_regcache (ctx);
4821         regcache_size = register_cache_size (context_regcache->tdesc);
4822
4823         /* Collect all registers for now.  */
4824         regspace = add_traceframe_block (tframe, tpoint, 1 + regcache_size);
4825         if (regspace == NULL)
4826           {
4827             trace_debug ("Trace buffer block allocation failed, skipping");
4828             break;
4829           }
4830         /* Identify a register block.  */
4831         *regspace = 'R';
4832
4833         /* Wrap the regblock in a register cache (in the stack, we
4834            don't want to malloc here).  */
4835         init_register_cache (&tregcache, context_regcache->tdesc,
4836                              regspace + 1);
4837
4838         /* Copy the register data to the regblock.  */
4839         regcache_cpy (&tregcache, context_regcache);
4840
4841 #ifndef IN_PROCESS_AGENT
4842         /* On some platforms, trap-based tracepoints will have the PC
4843            pointing to the next instruction after the trap, but we
4844            don't want the user or GDB trying to guess whether the
4845            saved PC needs adjusting; so always record the adjusted
4846            stop_pc.  Note that we can't use tpoint->address instead,
4847            since it will be wrong for while-stepping actions.  This
4848            adjustment is a nop for fast tracepoints collected from the
4849            in-process lib (but not if GDBserver is collecting one
4850            preemptively), since the PC had already been adjusted to
4851            contain the tracepoint's address by the jump pad.  */
4852         trace_debug ("Storing stop pc (0x%s) in regblock",
4853                      paddress (stop_pc));
4854
4855         /* This changes the regblock, not the thread's
4856            regcache.  */
4857         regcache_write_pc (&tregcache, stop_pc);
4858 #endif
4859       }
4860       break;
4861     case 'X':
4862       {
4863         struct eval_expr_action *eaction;
4864         struct eval_agent_expr_context ax_ctx;
4865
4866         eaction = (struct eval_expr_action *) taction;
4867         ax_ctx.regcache = get_context_regcache (ctx);
4868         ax_ctx.tframe = tframe;
4869         ax_ctx.tpoint = tpoint;
4870
4871         trace_debug ("Want to evaluate expression");
4872
4873         err = gdb_eval_agent_expr (&ax_ctx, eaction->expr, NULL);
4874
4875         if (err != expr_eval_no_error)
4876           {
4877             record_tracepoint_error (tpoint, "action expression", err);
4878             return;
4879           }
4880       }
4881       break;
4882     case 'L':
4883       {
4884 #if defined IN_PROCESS_AGENT && defined HAVE_UST
4885         trace_debug ("Want to collect static trace data");
4886         collect_ust_data_at_tracepoint (ctx, tframe);
4887 #else
4888         trace_debug ("warning: collecting static trace data, "
4889                      "but static tracepoints are not supported");
4890 #endif
4891       }
4892       break;
4893     default:
4894       trace_debug ("unknown trace action '%c', ignoring", taction->type);
4895       break;
4896     }
4897 }
4898
4899 static int
4900 condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
4901                               struct tracepoint *tpoint)
4902 {
4903   ULONGEST value = 0;
4904   enum eval_result_type err;
4905
4906   /* Presently, gdbserver doesn't run compiled conditions, only the
4907      IPA does.  If the program stops at a fast tracepoint's address
4908      (e.g., due to a breakpoint, trap tracepoint, or stepping),
4909      gdbserver preemptively collect the fast tracepoint.  Later, on
4910      resume, gdbserver steps over the fast tracepoint like it steps
4911      over breakpoints, so that the IPA doesn't see that fast
4912      tracepoint.  This avoids double collects of fast tracepoints in
4913      that stopping scenario.  Having gdbserver itself handle the fast
4914      tracepoint gives the user a consistent view of when fast or trap
4915      tracepoints are collected, compared to an alternative where only
4916      trap tracepoints are collected on stop, and fast tracepoints on
4917      resume.  When a fast tracepoint is being processed by gdbserver,
4918      it is always the non-compiled condition expression that is
4919      used.  */
4920 #ifdef IN_PROCESS_AGENT
4921   if (tpoint->compiled_cond)
4922     {
4923       struct fast_tracepoint_ctx *fctx = (struct fast_tracepoint_ctx *) ctx;
4924       err = ((condfn) (uintptr_t) (tpoint->compiled_cond)) (fctx->regs, &value);
4925     }
4926   else
4927 #endif
4928     {
4929       struct eval_agent_expr_context ax_ctx;
4930
4931       ax_ctx.regcache = get_context_regcache (ctx);
4932       ax_ctx.tframe = NULL;
4933       ax_ctx.tpoint = tpoint;
4934
4935       err = gdb_eval_agent_expr (&ax_ctx, tpoint->cond, &value);
4936     }
4937   if (err != expr_eval_no_error)
4938     {
4939       record_tracepoint_error (tpoint, "condition", err);
4940       /* The error case must return false.  */
4941       return 0;
4942     }
4943
4944   trace_debug ("Tracepoint %d at 0x%s condition evals to %s",
4945                tpoint->number, paddress (tpoint->address),
4946                pulongest (value));
4947   return (value ? 1 : 0);
4948 }
4949
4950 /* Do memory copies for bytecodes.  */
4951 /* Do the recording of memory blocks for actions and bytecodes.  */
4952
4953 int
4954 agent_mem_read (struct eval_agent_expr_context *ctx,
4955                 unsigned char *to, CORE_ADDR from, ULONGEST len)
4956 {
4957   unsigned char *mspace;
4958   ULONGEST remaining = len;
4959   unsigned short blocklen;
4960
4961   /* If a 'to' buffer is specified, use it.  */
4962   if (to != NULL)
4963     {
4964       read_inferior_memory (from, to, len);
4965       return 0;
4966     }
4967
4968   /* Otherwise, create a new memory block in the trace buffer.  */
4969   while (remaining > 0)
4970     {
4971       size_t sp;
4972
4973       blocklen = (remaining > 65535 ? 65535 : remaining);
4974       sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen;
4975       mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp);
4976       if (mspace == NULL)
4977         return 1;
4978       /* Identify block as a memory block.  */
4979       *mspace = 'M';
4980       ++mspace;
4981       /* Record address and size.  */
4982       memcpy (mspace, &from, sizeof (from));
4983       mspace += sizeof (from);
4984       memcpy (mspace, &blocklen, sizeof (blocklen));
4985       mspace += sizeof (blocklen);
4986       /* Record the memory block proper.  */
4987       read_inferior_memory (from, mspace, blocklen);
4988       trace_debug ("%d bytes recorded", blocklen);
4989       remaining -= blocklen;
4990       from += blocklen;
4991     }
4992   return 0;
4993 }
4994
4995 int
4996 agent_mem_read_string (struct eval_agent_expr_context *ctx,
4997                        unsigned char *to, CORE_ADDR from, ULONGEST len)
4998 {
4999   unsigned char *buf, *mspace;
5000   ULONGEST remaining = len;
5001   unsigned short blocklen, i;
5002
5003   /* To save a bit of space, block lengths are 16-bit, so break large
5004      requests into multiple blocks.  Bordering on overkill for strings,
5005      but it could happen that someone specifies a large max length.  */
5006   while (remaining > 0)
5007     {
5008       size_t sp;
5009
5010       blocklen = (remaining > 65535 ? 65535 : remaining);
5011       /* We want working space to accumulate nonzero bytes, since
5012          traceframes must have a predecided size (otherwise it gets
5013          harder to wrap correctly for the circular case, etc).  */
5014       buf = (unsigned char *) xmalloc (blocklen + 1);
5015       for (i = 0; i < blocklen; ++i)
5016         {
5017           /* Read the string one byte at a time, in case the string is
5018              at the end of a valid memory area - we don't want a
5019              correctly-terminated string to engender segvio
5020              complaints.  */
5021           read_inferior_memory (from + i, buf + i, 1);
5022
5023           if (buf[i] == '\0')
5024             {
5025               blocklen = i + 1;
5026               /* Make sure outer loop stops now too.  */
5027               remaining = blocklen;
5028               break;
5029             }
5030         }
5031       sp = 1 + sizeof (from) + sizeof (blocklen) + blocklen;
5032       mspace = add_traceframe_block (ctx->tframe, ctx->tpoint, sp);
5033       if (mspace == NULL)
5034         {
5035           xfree (buf);
5036           return 1;
5037         }
5038       /* Identify block as a memory block.  */
5039       *mspace = 'M';
5040       ++mspace;
5041       /* Record address and size.  */
5042       memcpy ((void *) mspace, (void *) &from, sizeof (from));
5043       mspace += sizeof (from);
5044       memcpy ((void *) mspace, (void *) &blocklen, sizeof (blocklen));
5045       mspace += sizeof (blocklen);
5046       /* Copy the string contents.  */
5047       memcpy ((void *) mspace, (void *) buf, blocklen);
5048       remaining -= blocklen;
5049       from += blocklen;
5050       xfree (buf);
5051     }
5052   return 0;
5053 }
5054
5055 /* Record the value of a trace state variable.  */
5056
5057 int
5058 agent_tsv_read (struct eval_agent_expr_context *ctx, int n)
5059 {
5060   unsigned char *vspace;
5061   LONGEST val;
5062
5063   vspace = add_traceframe_block (ctx->tframe, ctx->tpoint,
5064                                  1 + sizeof (n) + sizeof (LONGEST));
5065   if (vspace == NULL)
5066     return 1;
5067   /* Identify block as a variable.  */
5068   *vspace = 'V';
5069   /* Record variable's number and value.  */
5070   memcpy (vspace + 1, &n, sizeof (n));
5071   val = get_trace_state_variable_value (n);
5072   memcpy (vspace + 1 + sizeof (n), &val, sizeof (val));
5073   trace_debug ("Variable %d recorded", n);
5074   return 0;
5075 }
5076
5077 #ifndef IN_PROCESS_AGENT
5078
5079 /* Callback for traceframe_walk_blocks, used to find a given block
5080    type in a traceframe.  */
5081
5082 static int
5083 match_blocktype (char blocktype, unsigned char *dataptr, void *data)
5084 {
5085   char *wantedp = (char *) data;
5086
5087   if (*wantedp == blocktype)
5088     return 1;
5089
5090   return 0;
5091 }
5092
5093 /* Walk over all traceframe blocks of the traceframe buffer starting
5094    at DATABASE, of DATASIZE bytes long, and call CALLBACK for each
5095    block found, passing in DATA unmodified.  If CALLBACK returns true,
5096    this returns a pointer to where the block is found.  Returns NULL
5097    if no callback call returned true, indicating that all blocks have
5098    been walked.  */
5099
5100 static unsigned char *
5101 traceframe_walk_blocks (unsigned char *database, unsigned int datasize,
5102                         int tfnum,
5103                         int (*callback) (char blocktype,
5104                                          unsigned char *dataptr,
5105                                          void *data),
5106                         void *data)
5107 {
5108   unsigned char *dataptr;
5109
5110   if (datasize == 0)
5111     {
5112       trace_debug ("traceframe %d has no data", tfnum);
5113       return NULL;
5114     }
5115
5116   /* Iterate through a traceframe's blocks, looking for a block of the
5117      requested type.  */
5118   for (dataptr = database;
5119        dataptr < database + datasize;
5120        /* nothing */)
5121     {
5122       char blocktype;
5123       unsigned short mlen;
5124
5125       if (dataptr == trace_buffer_wrap)
5126         {
5127           /* Adjust to reflect wrapping part of the frame around to
5128              the beginning.  */
5129           datasize = dataptr - database;
5130           dataptr = database = trace_buffer_lo;
5131         }
5132
5133       blocktype = *dataptr++;
5134
5135       if ((*callback) (blocktype, dataptr, data))
5136         return dataptr;
5137
5138       switch (blocktype)
5139         {
5140         case 'R':
5141           /* Skip over the registers block.  */
5142           dataptr += current_target_desc ()->registers_size;
5143           break;
5144         case 'M':
5145           /* Skip over the memory block.  */
5146           dataptr += sizeof (CORE_ADDR);
5147           memcpy (&mlen, dataptr, sizeof (mlen));
5148           dataptr += (sizeof (mlen) + mlen);
5149           break;
5150         case 'V':
5151           /* Skip over the TSV block.  */
5152           dataptr += (sizeof (int) + sizeof (LONGEST));
5153           break;
5154         case 'S':
5155           /* Skip over the static trace data block.  */
5156           memcpy (&mlen, dataptr, sizeof (mlen));
5157           dataptr += (sizeof (mlen) + mlen);
5158           break;
5159         default:
5160           trace_debug ("traceframe %d has unknown block type 0x%x",
5161                        tfnum, blocktype);
5162           return NULL;
5163         }
5164     }
5165
5166   return NULL;
5167 }
5168
5169 /* Look for the block of type TYPE_WANTED in the trameframe starting
5170    at DATABASE of DATASIZE bytes long.  TFNUM is the traceframe
5171    number.  */
5172
5173 static unsigned char *
5174 traceframe_find_block_type (unsigned char *database, unsigned int datasize,
5175                             int tfnum, char type_wanted)
5176 {
5177   return traceframe_walk_blocks (database, datasize, tfnum,
5178                                  match_blocktype, &type_wanted);
5179 }
5180
5181 static unsigned char *
5182 traceframe_find_regblock (struct traceframe *tframe, int tfnum)
5183 {
5184   unsigned char *regblock;
5185
5186   regblock = traceframe_find_block_type (tframe->data,
5187                                          tframe->data_size,
5188                                          tfnum, 'R');
5189
5190   if (regblock == NULL)
5191     trace_debug ("traceframe %d has no register data", tfnum);
5192
5193   return regblock;
5194 }
5195
5196 /* Get registers from a traceframe.  */
5197
5198 int
5199 fetch_traceframe_registers (int tfnum, struct regcache *regcache, int regnum)
5200 {
5201   unsigned char *dataptr;
5202   struct tracepoint *tpoint;
5203   struct traceframe *tframe;
5204
5205   tframe = find_traceframe (tfnum);
5206
5207   if (tframe == NULL)
5208     {
5209       trace_debug ("traceframe %d not found", tfnum);
5210       return 1;
5211     }
5212
5213   dataptr = traceframe_find_regblock (tframe, tfnum);
5214   if (dataptr == NULL)
5215     {
5216       /* Mark registers unavailable.  */
5217       supply_regblock (regcache, NULL);
5218
5219       /* We can generally guess at a PC, although this will be
5220          misleading for while-stepping frames and multi-location
5221          tracepoints.  */
5222       tpoint = find_next_tracepoint_by_number (NULL, tframe->tpnum);
5223       if (tpoint != NULL)
5224         regcache_write_pc (regcache, tpoint->address);
5225     }
5226   else
5227     supply_regblock (regcache, dataptr);
5228
5229   return 0;
5230 }
5231
5232 static CORE_ADDR
5233 traceframe_get_pc (struct traceframe *tframe)
5234 {
5235   struct regcache regcache;
5236   unsigned char *dataptr;
5237   const struct target_desc *tdesc = current_target_desc ();
5238
5239   dataptr = traceframe_find_regblock (tframe, -1);
5240   if (dataptr == NULL)
5241     return 0;
5242
5243   init_register_cache (&regcache, tdesc, dataptr);
5244   return regcache_read_pc (&regcache);
5245 }
5246
5247 /* Read a requested block of memory from a trace frame.  */
5248
5249 int
5250 traceframe_read_mem (int tfnum, CORE_ADDR addr,
5251                      unsigned char *buf, ULONGEST length,
5252                      ULONGEST *nbytes)
5253 {
5254   struct traceframe *tframe;
5255   unsigned char *database, *dataptr;
5256   unsigned int datasize;
5257   CORE_ADDR maddr;
5258   unsigned short mlen;
5259
5260   trace_debug ("traceframe_read_mem");
5261
5262   tframe = find_traceframe (tfnum);
5263
5264   if (!tframe)
5265     {
5266       trace_debug ("traceframe %d not found", tfnum);
5267       return 1;
5268     }
5269
5270   datasize = tframe->data_size;
5271   database = dataptr = &tframe->data[0];
5272
5273   /* Iterate through a traceframe's blocks, looking for memory.  */
5274   while ((dataptr = traceframe_find_block_type (dataptr,
5275                                                 datasize
5276                                                 - (dataptr - database),
5277                                                 tfnum, 'M')) != NULL)
5278     {
5279       memcpy (&maddr, dataptr, sizeof (maddr));
5280       dataptr += sizeof (maddr);
5281       memcpy (&mlen, dataptr, sizeof (mlen));
5282       dataptr += sizeof (mlen);
5283       trace_debug ("traceframe %d has %d bytes at %s",
5284                    tfnum, mlen, paddress (maddr));
5285
5286       /* If the block includes the first part of the desired range,
5287          return as much it has; GDB will re-request the remainder,
5288          which might be in a different block of this trace frame.  */
5289       if (maddr <= addr && addr < (maddr + mlen))
5290         {
5291           ULONGEST amt = (maddr + mlen) - addr;
5292           if (amt > length)
5293             amt = length;
5294
5295           memcpy (buf, dataptr + (addr - maddr), amt);
5296           *nbytes = amt;
5297           return 0;
5298         }
5299
5300       /* Skip over this block.  */
5301       dataptr += mlen;
5302     }
5303
5304   trace_debug ("traceframe %d has no memory data for the desired region",
5305                tfnum);
5306
5307   *nbytes = 0;
5308   return 0;
5309 }
5310
5311 static int
5312 traceframe_read_tsv (int tsvnum, LONGEST *val)
5313 {
5314   int tfnum;
5315   struct traceframe *tframe;
5316   unsigned char *database, *dataptr;
5317   unsigned int datasize;
5318   int vnum;
5319   int found = 0;
5320
5321   trace_debug ("traceframe_read_tsv");
5322
5323   tfnum = current_traceframe;
5324
5325   if (tfnum < 0)
5326     {
5327       trace_debug ("no current traceframe");
5328       return 1;
5329     }
5330
5331   tframe = find_traceframe (tfnum);
5332
5333   if (tframe == NULL)
5334     {
5335       trace_debug ("traceframe %d not found", tfnum);
5336       return 1;
5337     }
5338
5339   datasize = tframe->data_size;
5340   database = dataptr = &tframe->data[0];
5341
5342   /* Iterate through a traceframe's blocks, looking for the last
5343      matched tsv.  */
5344   while ((dataptr = traceframe_find_block_type (dataptr,
5345                                                 datasize
5346                                                 - (dataptr - database),
5347                                                 tfnum, 'V')) != NULL)
5348     {
5349       memcpy (&vnum, dataptr, sizeof (vnum));
5350       dataptr += sizeof (vnum);
5351
5352       trace_debug ("traceframe %d has variable %d", tfnum, vnum);
5353
5354       /* Check that this is the variable we want.  */
5355       if (tsvnum == vnum)
5356         {
5357           memcpy (val, dataptr, sizeof (*val));
5358           found = 1;
5359         }
5360
5361       /* Skip over this block.  */
5362       dataptr += sizeof (LONGEST);
5363     }
5364
5365   if (!found)
5366     trace_debug ("traceframe %d has no data for variable %d",
5367                  tfnum, tsvnum);
5368   return !found;
5369 }
5370
5371 /* Read a requested block of static tracepoint data from a trace
5372    frame.  */
5373
5374 int
5375 traceframe_read_sdata (int tfnum, ULONGEST offset,
5376                        unsigned char *buf, ULONGEST length,
5377                        ULONGEST *nbytes)
5378 {
5379   struct traceframe *tframe;
5380   unsigned char *database, *dataptr;
5381   unsigned int datasize;
5382   unsigned short mlen;
5383
5384   trace_debug ("traceframe_read_sdata");
5385
5386   tframe = find_traceframe (tfnum);
5387
5388   if (!tframe)
5389     {
5390       trace_debug ("traceframe %d not found", tfnum);
5391       return 1;
5392     }
5393
5394   datasize = tframe->data_size;
5395   database = &tframe->data[0];
5396
5397   /* Iterate through a traceframe's blocks, looking for static
5398      tracepoint data.  */
5399   dataptr = traceframe_find_block_type (database, datasize,
5400                                         tfnum, 'S');
5401   if (dataptr != NULL)
5402     {
5403       memcpy (&mlen, dataptr, sizeof (mlen));
5404       dataptr += sizeof (mlen);
5405       if (offset < mlen)
5406         {
5407           if (offset + length > mlen)
5408             length = mlen - offset;
5409
5410           memcpy (buf, dataptr, length);
5411           *nbytes = length;
5412         }
5413       else
5414         *nbytes = 0;
5415       return 0;
5416     }
5417
5418   trace_debug ("traceframe %d has no static trace data", tfnum);
5419
5420   *nbytes = 0;
5421   return 0;
5422 }
5423
5424 /* Callback for traceframe_walk_blocks.  Builds a traceframe-info
5425    object.  DATA is pointer to a struct buffer holding the
5426    traceframe-info object being built.  */
5427
5428 static int
5429 build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data)
5430 {
5431   struct buffer *buffer = (struct buffer *) data;
5432
5433   switch (blocktype)
5434     {
5435     case 'M':
5436       {
5437         unsigned short mlen;
5438         CORE_ADDR maddr;
5439
5440         memcpy (&maddr, dataptr, sizeof (maddr));
5441         dataptr += sizeof (maddr);
5442         memcpy (&mlen, dataptr, sizeof (mlen));
5443         dataptr += sizeof (mlen);
5444         buffer_xml_printf (buffer,
5445                            "<memory start=\"0x%s\" length=\"0x%s\"/>\n",
5446                            paddress (maddr), phex_nz (mlen, sizeof (mlen)));
5447         break;
5448       }
5449     case 'V':
5450       {
5451         int vnum;
5452
5453         memcpy (&vnum, dataptr, sizeof (vnum));
5454         buffer_xml_printf (buffer, "<tvar id=\"%d\"/>\n", vnum);
5455         break;
5456       }
5457     case 'R':
5458     case 'S':
5459       {
5460         break;
5461       }
5462     default:
5463       warning ("Unhandled trace block type (%d) '%c ' "
5464                "while building trace frame info.",
5465                blocktype, blocktype);
5466       break;
5467     }
5468
5469   return 0;
5470 }
5471
5472 /* Build a traceframe-info object for traceframe number TFNUM into
5473    BUFFER.  */
5474
5475 int
5476 traceframe_read_info (int tfnum, struct buffer *buffer)
5477 {
5478   struct traceframe *tframe;
5479
5480   trace_debug ("traceframe_read_info");
5481
5482   tframe = find_traceframe (tfnum);
5483
5484   if (!tframe)
5485     {
5486       trace_debug ("traceframe %d not found", tfnum);
5487       return 1;
5488     }
5489
5490   buffer_grow_str (buffer, "<traceframe-info>\n");
5491   traceframe_walk_blocks (tframe->data, tframe->data_size,
5492                           tfnum, build_traceframe_info_xml, buffer);
5493   buffer_grow_str0 (buffer, "</traceframe-info>\n");
5494   return 0;
5495 }
5496
5497 /* Return the first fast tracepoint whose jump pad contains PC.  */
5498
5499 static struct tracepoint *
5500 fast_tracepoint_from_jump_pad_address (CORE_ADDR pc)
5501 {
5502   struct tracepoint *tpoint;
5503
5504   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
5505     if (tpoint->type == fast_tracepoint)
5506       if (tpoint->jump_pad <= pc && pc < tpoint->jump_pad_end)
5507         return tpoint;
5508
5509   return NULL;
5510 }
5511
5512 /* Return the first fast tracepoint whose trampoline contains PC.  */
5513
5514 static struct tracepoint *
5515 fast_tracepoint_from_trampoline_address (CORE_ADDR pc)
5516 {
5517   struct tracepoint *tpoint;
5518
5519   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
5520     {
5521       if (tpoint->type == fast_tracepoint
5522           && tpoint->trampoline <= pc && pc < tpoint->trampoline_end)
5523         return tpoint;
5524     }
5525
5526   return NULL;
5527 }
5528
5529 /* Return GDBserver's tracepoint that matches the IP Agent's
5530    tracepoint object that lives at IPA_TPOINT_OBJ in the IP Agent's
5531    address space.  */
5532
5533 static struct tracepoint *
5534 fast_tracepoint_from_ipa_tpoint_address (CORE_ADDR ipa_tpoint_obj)
5535 {
5536   struct tracepoint *tpoint;
5537
5538   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
5539     if (tpoint->type == fast_tracepoint)
5540       if (tpoint->obj_addr_on_target == ipa_tpoint_obj)
5541         return tpoint;
5542
5543   return NULL;
5544 }
5545
5546 #endif
5547
5548 /* The type of the object that is used to synchronize fast tracepoint
5549    collection.  */
5550
5551 typedef struct collecting_t
5552 {
5553   /* The fast tracepoint number currently collecting.  */
5554   uintptr_t tpoint;
5555
5556   /* A number that GDBserver can use to identify the thread that is
5557      presently holding the collect lock.  This need not (and usually
5558      is not) the thread id, as getting the current thread ID usually
5559      requires a system call, which we want to avoid like the plague.
5560      Usually this is thread's TCB, found in the TLS (pseudo-)
5561      register, which is readable with a single insn on several
5562      architectures.  */
5563   uintptr_t thread_area;
5564 } collecting_t;
5565
5566 #ifndef IN_PROCESS_AGENT
5567
5568 void
5569 force_unlock_trace_buffer (void)
5570 {
5571   write_inferior_data_pointer (ipa_sym_addrs.addr_collecting, 0);
5572 }
5573
5574 /* Check if the thread identified by THREAD_AREA which is stopped at
5575    STOP_PC, is presently locking the fast tracepoint collection, and
5576    if so, gather some status of said collection.  Returns 0 if the
5577    thread isn't collecting or in the jump pad at all.  1, if in the
5578    jump pad (or within gdb_collect) and hasn't executed the adjusted
5579    original insn yet (can set a breakpoint there and run to it).  2,
5580    if presently executing the adjusted original insn --- in which
5581    case, if we want to move the thread out of the jump pad, we need to
5582    single-step it until this function returns 0.  */
5583
5584 int
5585 fast_tracepoint_collecting (CORE_ADDR thread_area,
5586                             CORE_ADDR stop_pc,
5587                             struct fast_tpoint_collect_status *status)
5588 {
5589   CORE_ADDR ipa_collecting;
5590   CORE_ADDR ipa_gdb_jump_pad_buffer, ipa_gdb_jump_pad_buffer_end;
5591   CORE_ADDR ipa_gdb_trampoline_buffer;
5592   CORE_ADDR ipa_gdb_trampoline_buffer_end;
5593   struct tracepoint *tpoint;
5594   int needs_breakpoint;
5595
5596   /* The thread THREAD_AREA is either:
5597
5598       0. not collecting at all, not within the jump pad, or within
5599          gdb_collect or one of its callees.
5600
5601       1. in the jump pad and haven't reached gdb_collect
5602
5603       2. within gdb_collect (out of the jump pad) (collect is set)
5604
5605       3. we're in the jump pad, after gdb_collect having returned,
5606          possibly executing the adjusted insns.
5607
5608       For cases 1 and 3, `collecting' may or not be set.  The jump pad
5609       doesn't have any complicated jump logic, so we can tell if the
5610       thread is executing the adjust original insn or not by just
5611       matching STOP_PC with known jump pad addresses.  If we it isn't
5612       yet executing the original insn, set a breakpoint there, and let
5613       the thread run to it, so to quickly step over a possible (many
5614       insns) gdb_collect call.  Otherwise, or when the breakpoint is
5615       hit, only a few (small number of) insns are left to be executed
5616       in the jump pad.  Single-step the thread until it leaves the
5617       jump pad.  */
5618
5619  again:
5620   tpoint = NULL;
5621   needs_breakpoint = 0;
5622   trace_debug ("fast_tracepoint_collecting");
5623
5624   if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer,
5625                                   &ipa_gdb_jump_pad_buffer))
5626     {
5627       internal_error (__FILE__, __LINE__,
5628                       "error extracting `gdb_jump_pad_buffer'");
5629     }
5630   if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_jump_pad_buffer_end,
5631                                   &ipa_gdb_jump_pad_buffer_end))
5632     {
5633       internal_error (__FILE__, __LINE__,
5634                       "error extracting `gdb_jump_pad_buffer_end'");
5635     }
5636
5637   if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer,
5638                                   &ipa_gdb_trampoline_buffer))
5639     {
5640       internal_error (__FILE__, __LINE__,
5641                       "error extracting `gdb_trampoline_buffer'");
5642     }
5643   if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_trampoline_buffer_end,
5644                                   &ipa_gdb_trampoline_buffer_end))
5645     {
5646       internal_error (__FILE__, __LINE__,
5647                       "error extracting `gdb_trampoline_buffer_end'");
5648     }
5649
5650   if (ipa_gdb_jump_pad_buffer <= stop_pc
5651       && stop_pc < ipa_gdb_jump_pad_buffer_end)
5652     {
5653       /* We can tell which tracepoint(s) the thread is collecting by
5654          matching the jump pad address back to the tracepoint.  */
5655       tpoint = fast_tracepoint_from_jump_pad_address (stop_pc);
5656       if (tpoint == NULL)
5657         {
5658           warning ("in jump pad, but no matching tpoint?");
5659           return 0;
5660         }
5661       else
5662         {
5663           trace_debug ("in jump pad of tpoint (%d, %s); jump_pad(%s, %s); "
5664                        "adj_insn(%s, %s)",
5665                        tpoint->number, paddress (tpoint->address),
5666                        paddress (tpoint->jump_pad),
5667                        paddress (tpoint->jump_pad_end),
5668                        paddress (tpoint->adjusted_insn_addr),
5669                        paddress (tpoint->adjusted_insn_addr_end));
5670         }
5671
5672       /* Definitely in the jump pad.  May or may not need
5673          fast-exit-jump-pad breakpoint.  */
5674       if (tpoint->jump_pad <= stop_pc
5675           && stop_pc < tpoint->adjusted_insn_addr)
5676         needs_breakpoint =  1;
5677     }
5678   else if (ipa_gdb_trampoline_buffer <= stop_pc
5679            && stop_pc < ipa_gdb_trampoline_buffer_end)
5680     {
5681       /* We can tell which tracepoint(s) the thread is collecting by
5682          matching the trampoline address back to the tracepoint.  */
5683       tpoint = fast_tracepoint_from_trampoline_address (stop_pc);
5684       if (tpoint == NULL)
5685         {
5686           warning ("in trampoline, but no matching tpoint?");
5687           return 0;
5688         }
5689       else
5690         {
5691           trace_debug ("in trampoline of tpoint (%d, %s); trampoline(%s, %s)",
5692                        tpoint->number, paddress (tpoint->address),
5693                        paddress (tpoint->trampoline),
5694                        paddress (tpoint->trampoline_end));
5695         }
5696
5697       /* Have not reached jump pad yet, but treat the trampoline as a
5698          part of the jump pad that is before the adjusted original
5699          instruction.  */
5700       needs_breakpoint = 1;
5701     }
5702   else
5703     {
5704       collecting_t ipa_collecting_obj;
5705
5706       /* If `collecting' is set/locked, then the THREAD_AREA thread
5707          may or not be the one holding the lock.  We have to read the
5708          lock to find out.  */
5709
5710       if (read_inferior_data_pointer (ipa_sym_addrs.addr_collecting,
5711                                       &ipa_collecting))
5712         {
5713           trace_debug ("fast_tracepoint_collecting:"
5714                        " failed reading 'collecting' in the inferior");
5715           return 0;
5716         }
5717
5718       if (!ipa_collecting)
5719         {
5720           trace_debug ("fast_tracepoint_collecting: not collecting"
5721                        " (and nobody is).");
5722           return 0;
5723         }
5724
5725       /* Some thread is collecting.  Check which.  */
5726       if (read_inferior_memory (ipa_collecting,
5727                                 (unsigned char *) &ipa_collecting_obj,
5728                                 sizeof (ipa_collecting_obj)) != 0)
5729         goto again;
5730
5731       if (ipa_collecting_obj.thread_area != thread_area)
5732         {
5733           trace_debug ("fast_tracepoint_collecting: not collecting "
5734                        "(another thread is)");
5735           return 0;
5736         }
5737
5738       tpoint
5739         = fast_tracepoint_from_ipa_tpoint_address (ipa_collecting_obj.tpoint);
5740       if (tpoint == NULL)
5741         {
5742           warning ("fast_tracepoint_collecting: collecting, "
5743                    "but tpoint %s not found?",
5744                    paddress ((CORE_ADDR) ipa_collecting_obj.tpoint));
5745           return 0;
5746         }
5747
5748       /* The thread is within `gdb_collect', skip over the rest of
5749          fast tracepoint collection quickly using a breakpoint.  */
5750       needs_breakpoint = 1;
5751     }
5752
5753   /* The caller wants a bit of status detail.  */
5754   if (status != NULL)
5755     {
5756       status->tpoint_num = tpoint->number;
5757       status->tpoint_addr = tpoint->address;
5758       status->adjusted_insn_addr = tpoint->adjusted_insn_addr;
5759       status->adjusted_insn_addr_end = tpoint->adjusted_insn_addr_end;
5760     }
5761
5762   if (needs_breakpoint)
5763     {
5764       /* Hasn't executed the original instruction yet.  Set breakpoint
5765          there, and wait till it's hit, then single-step until exiting
5766          the jump pad.  */
5767
5768       trace_debug ("\
5769 fast_tracepoint_collecting, returning continue-until-break at %s",
5770                    paddress (tpoint->adjusted_insn_addr));
5771
5772       return 1; /* continue */
5773     }
5774   else
5775     {
5776       /* Just single-step until exiting the jump pad.  */
5777
5778       trace_debug ("fast_tracepoint_collecting, returning "
5779                    "need-single-step (%s-%s)",
5780                    paddress (tpoint->adjusted_insn_addr),
5781                    paddress (tpoint->adjusted_insn_addr_end));
5782
5783       return 2; /* single-step */
5784     }
5785 }
5786
5787 #endif
5788
5789 #ifdef IN_PROCESS_AGENT
5790
5791 /* The global fast tracepoint collect lock.  Points to a collecting_t
5792    object built on the stack by the jump pad, if presently locked;
5793    NULL if it isn't locked.  Note that this lock *must* be set while
5794    executing any *function other than the jump pad.  See
5795    fast_tracepoint_collecting.  */
5796 EXTERN_C_PUSH
5797 IP_AGENT_EXPORT_VAR collecting_t *collecting;
5798 EXTERN_C_POP
5799
5800 /* This routine, called from the jump pad (in asm) is designed to be
5801    called from the jump pads of fast tracepoints, thus it is on the
5802    critical path.  */
5803
5804 IP_AGENT_EXPORT_FUNC void
5805 gdb_collect (struct tracepoint *tpoint, unsigned char *regs)
5806 {
5807   struct fast_tracepoint_ctx ctx;
5808   const struct target_desc *ipa_tdesc;
5809
5810   /* Don't do anything until the trace run is completely set up.  */
5811   if (!tracing)
5812     return;
5813
5814   ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx);
5815   ctx.base.type = fast_tracepoint;
5816   ctx.regs = regs;
5817   ctx.regcache_initted = 0;
5818   /* Wrap the regblock in a register cache (in the stack, we don't
5819      want to malloc here).  */
5820   ctx.regspace = (unsigned char *) alloca (ipa_tdesc->registers_size);
5821   if (ctx.regspace == NULL)
5822     {
5823       trace_debug ("Trace buffer block allocation failed, skipping");
5824       return;
5825     }
5826
5827   for (ctx.tpoint = tpoint;
5828        ctx.tpoint != NULL && ctx.tpoint->address == tpoint->address;
5829        ctx.tpoint = ctx.tpoint->next)
5830     {
5831       if (!ctx.tpoint->enabled)
5832         continue;
5833
5834       /* Multiple tracepoints of different types, such as fast tracepoint and
5835          static tracepoint, can be set at the same address.  */
5836       if (ctx.tpoint->type != tpoint->type)
5837         continue;
5838
5839       /* Test the condition if present, and collect if true.  */
5840       if (ctx.tpoint->cond == NULL
5841           || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
5842                                            ctx.tpoint))
5843         {
5844           collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
5845                                       ctx.tpoint->address, ctx.tpoint);
5846
5847           /* Note that this will cause original insns to be written back
5848              to where we jumped from, but that's OK because we're jumping
5849              back to the next whole instruction.  This will go badly if
5850              instruction restoration is not atomic though.  */
5851           if (stopping_tracepoint
5852               || trace_buffer_is_full
5853               || expr_eval_result != expr_eval_no_error)
5854             {
5855               stop_tracing ();
5856               break;
5857             }
5858         }
5859       else
5860         {
5861           /* If there was a condition and it evaluated to false, the only
5862              way we would stop tracing is if there was an error during
5863              condition expression evaluation.  */
5864           if (expr_eval_result != expr_eval_no_error)
5865             {
5866               stop_tracing ();
5867               break;
5868             }
5869         }
5870     }
5871 }
5872
5873 /* These global variables points to the corresponding functions.  This is
5874    necessary on powerpc64, where asking for function symbol address from gdb
5875    results in returning the actual code pointer, instead of the descriptor
5876    pointer.  */
5877
5878 typedef void (*gdb_collect_ptr_type) (struct tracepoint *, unsigned char *);
5879 typedef ULONGEST (*get_raw_reg_ptr_type) (const unsigned char *, int);
5880 typedef LONGEST (*get_trace_state_variable_value_ptr_type) (int);
5881 typedef void (*set_trace_state_variable_value_ptr_type) (int, LONGEST);
5882
5883 EXTERN_C_PUSH
5884 IP_AGENT_EXPORT_VAR gdb_collect_ptr_type gdb_collect_ptr = gdb_collect;
5885 IP_AGENT_EXPORT_VAR get_raw_reg_ptr_type get_raw_reg_ptr = get_raw_reg;
5886 IP_AGENT_EXPORT_VAR get_trace_state_variable_value_ptr_type
5887   get_trace_state_variable_value_ptr = get_trace_state_variable_value;
5888 IP_AGENT_EXPORT_VAR set_trace_state_variable_value_ptr_type
5889   set_trace_state_variable_value_ptr = set_trace_state_variable_value;
5890 EXTERN_C_POP
5891
5892 #endif
5893
5894 #ifndef IN_PROCESS_AGENT
5895
5896 CORE_ADDR
5897 get_raw_reg_func_addr (void)
5898 {
5899   CORE_ADDR res;
5900   if (read_inferior_data_pointer (ipa_sym_addrs.addr_get_raw_reg_ptr, &res))
5901     {
5902       error ("error extracting get_raw_reg_ptr");
5903       return 0;
5904     }
5905   return res;
5906 }
5907
5908 CORE_ADDR
5909 get_get_tsv_func_addr (void)
5910 {
5911   CORE_ADDR res;
5912   if (read_inferior_data_pointer (
5913         ipa_sym_addrs.addr_get_trace_state_variable_value_ptr, &res))
5914     {
5915       error ("error extracting get_trace_state_variable_value_ptr");
5916       return 0;
5917     }
5918   return res;
5919 }
5920
5921 CORE_ADDR
5922 get_set_tsv_func_addr (void)
5923 {
5924   CORE_ADDR res;
5925   if (read_inferior_data_pointer (
5926         ipa_sym_addrs.addr_set_trace_state_variable_value_ptr, &res))
5927     {
5928       error ("error extracting set_trace_state_variable_value_ptr");
5929       return 0;
5930     }
5931   return res;
5932 }
5933
5934 static void
5935 compile_tracepoint_condition (struct tracepoint *tpoint,
5936                               CORE_ADDR *jump_entry)
5937 {
5938   CORE_ADDR entry_point = *jump_entry;
5939   enum eval_result_type err;
5940
5941   trace_debug ("Starting condition compilation for tracepoint %d\n",
5942                tpoint->number);
5943
5944   /* Initialize the global pointer to the code being built.  */
5945   current_insn_ptr = *jump_entry;
5946
5947   emit_prologue ();
5948
5949   err = compile_bytecodes (tpoint->cond);
5950
5951   if (err == expr_eval_no_error)
5952     {
5953       emit_epilogue ();
5954
5955       /* Record the beginning of the compiled code.  */
5956       tpoint->compiled_cond = entry_point;
5957
5958       trace_debug ("Condition compilation for tracepoint %d complete\n",
5959                    tpoint->number);
5960     }
5961   else
5962     {
5963       /* Leave the unfinished code in situ, but don't point to it.  */
5964
5965       tpoint->compiled_cond = 0;
5966
5967       trace_debug ("Condition compilation for tracepoint %d failed, "
5968                    "error code %d",
5969                    tpoint->number, err);
5970     }
5971
5972   /* Update the code pointer passed in.  Note that we do this even if
5973      the compile fails, so that we can look at the partial results
5974      instead of letting them be overwritten.  */
5975   *jump_entry = current_insn_ptr;
5976
5977   /* Leave a gap, to aid dump decipherment.  */
5978   *jump_entry += 16;
5979 }
5980
5981 /* The base pointer of the IPA's heap.  This is the only memory the
5982    IPA is allowed to use.  The IPA should _not_ call the inferior's
5983    `malloc' during operation.  That'd be slow, and, most importantly,
5984    it may not be safe.  We may be collecting a tracepoint in a signal
5985    handler, for example.  */
5986 static CORE_ADDR target_tp_heap;
5987
5988 /* Allocate at least SIZE bytes of memory from the IPA heap, aligned
5989    to 8 bytes.  */
5990
5991 static CORE_ADDR
5992 target_malloc (ULONGEST size)
5993 {
5994   CORE_ADDR ptr;
5995
5996   if (target_tp_heap == 0)
5997     {
5998       /* We have the pointer *address*, need what it points to.  */
5999       if (read_inferior_data_pointer (ipa_sym_addrs.addr_gdb_tp_heap_buffer,
6000                                       &target_tp_heap))
6001         {
6002           internal_error (__FILE__, __LINE__,
6003                           "couldn't get target heap head pointer");
6004         }
6005     }
6006
6007   ptr = target_tp_heap;
6008   target_tp_heap += size;
6009
6010   /* Pad to 8-byte alignment.  */
6011   target_tp_heap = ((target_tp_heap + 7) & ~0x7);
6012
6013   return ptr;
6014 }
6015
6016 static CORE_ADDR
6017 download_agent_expr (struct agent_expr *expr)
6018 {
6019   CORE_ADDR expr_addr;
6020   CORE_ADDR expr_bytes;
6021
6022   expr_addr = target_malloc (sizeof (*expr));
6023   write_inferior_memory (expr_addr, (unsigned char *) expr, sizeof (*expr));
6024
6025   expr_bytes = target_malloc (expr->length);
6026   write_inferior_data_pointer (expr_addr + offsetof (struct agent_expr, bytes),
6027                                expr_bytes);
6028   write_inferior_memory (expr_bytes, expr->bytes, expr->length);
6029
6030   return expr_addr;
6031 }
6032
6033 /* Align V up to N bits.  */
6034 #define UALIGN(V, N) (((V) + ((N) - 1)) & ~((N) - 1))
6035
6036 /* Sync tracepoint with IPA, but leave maintenance of linked list to caller.  */
6037
6038 static void
6039 download_tracepoint_1 (struct tracepoint *tpoint)
6040 {
6041   struct tracepoint target_tracepoint;
6042   CORE_ADDR tpptr = 0;
6043
6044   gdb_assert (tpoint->type == fast_tracepoint
6045               || tpoint->type == static_tracepoint);
6046
6047   if (tpoint->cond != NULL && target_emit_ops () != NULL)
6048     {
6049       CORE_ADDR jentry, jump_entry;
6050
6051       jentry = jump_entry = get_jump_space_head ();
6052
6053       if (tpoint->cond != NULL)
6054         {
6055           /* Pad to 8-byte alignment. (needed?)  */
6056           /* Actually this should be left for the target to
6057              decide.  */
6058           jentry = UALIGN (jentry, 8);
6059
6060           compile_tracepoint_condition (tpoint, &jentry);
6061         }
6062
6063       /* Pad to 8-byte alignment.  */
6064       jentry = UALIGN (jentry, 8);
6065       claim_jump_space (jentry - jump_entry);
6066     }
6067
6068   target_tracepoint = *tpoint;
6069
6070   tpptr = target_malloc (sizeof (*tpoint));
6071   tpoint->obj_addr_on_target = tpptr;
6072
6073   /* Write the whole object.  We'll fix up its pointers in a bit.
6074      Assume no next for now.  This is fixed up above on the next
6075      iteration, if there's any.  */
6076   target_tracepoint.next = NULL;
6077   /* Need to clear this here too, since we're downloading the
6078      tracepoints before clearing our own copy.  */
6079   target_tracepoint.hit_count = 0;
6080
6081   write_inferior_memory (tpptr, (unsigned char *) &target_tracepoint,
6082                          sizeof (target_tracepoint));
6083
6084   if (tpoint->cond)
6085     write_inferior_data_pointer (tpptr
6086                                  + offsetof (struct tracepoint, cond),
6087                                  download_agent_expr (tpoint->cond));
6088
6089   if (tpoint->numactions)
6090     {
6091       int i;
6092       CORE_ADDR actions_array;
6093
6094       /* The pointers array.  */
6095       actions_array
6096         = target_malloc (sizeof (*tpoint->actions) * tpoint->numactions);
6097       write_inferior_data_pointer (tpptr + offsetof (struct tracepoint,
6098                                                      actions),
6099                                    actions_array);
6100
6101       /* Now for each pointer, download the action.  */
6102       for (i = 0; i < tpoint->numactions; i++)
6103         {
6104           struct tracepoint_action *action = tpoint->actions[i];
6105           CORE_ADDR ipa_action = tracepoint_action_download (action);
6106
6107           if (ipa_action != 0)
6108             write_inferior_data_pointer (actions_array
6109                                          + i * sizeof (*tpoint->actions),
6110                                          ipa_action);
6111         }
6112     }
6113 }
6114
6115 #define IPA_PROTO_FAST_TRACE_FLAG 0
6116 #define IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET 2
6117 #define IPA_PROTO_FAST_TRACE_JUMP_PAD 10
6118 #define IPA_PROTO_FAST_TRACE_FJUMP_SIZE 18
6119 #define IPA_PROTO_FAST_TRACE_FJUMP_INSN 22
6120
6121 /* Send a command to agent to download and install tracepoint TPOINT.  */
6122
6123 static int
6124 tracepoint_send_agent (struct tracepoint *tpoint)
6125 {
6126   char buf[IPA_CMD_BUF_SIZE];
6127   char *p;
6128   int i, ret;
6129
6130   p = buf;
6131   strcpy (p, "FastTrace:");
6132   p += 10;
6133
6134   COPY_FIELD_TO_BUF (p, tpoint, number);
6135   COPY_FIELD_TO_BUF (p, tpoint, address);
6136   COPY_FIELD_TO_BUF (p, tpoint, type);
6137   COPY_FIELD_TO_BUF (p, tpoint, enabled);
6138   COPY_FIELD_TO_BUF (p, tpoint, step_count);
6139   COPY_FIELD_TO_BUF (p, tpoint, pass_count);
6140   COPY_FIELD_TO_BUF (p, tpoint, numactions);
6141   COPY_FIELD_TO_BUF (p, tpoint, hit_count);
6142   COPY_FIELD_TO_BUF (p, tpoint, traceframe_usage);
6143   COPY_FIELD_TO_BUF (p, tpoint, compiled_cond);
6144   COPY_FIELD_TO_BUF (p, tpoint, orig_size);
6145
6146   /* condition */
6147   p = agent_expr_send (p, tpoint->cond);
6148
6149   /* tracepoint_action */
6150   for (i = 0; i < tpoint->numactions; i++)
6151     {
6152       struct tracepoint_action *action = tpoint->actions[i];
6153
6154       p[0] = action->type;
6155       p = tracepoint_action_send (&p[1], action);
6156     }
6157
6158   get_jump_space_head ();
6159   /* Copy the value of GDB_JUMP_PAD_HEAD to command buffer, so that
6160      agent can use jump pad from it.  */
6161   if (tpoint->type == fast_tracepoint)
6162     {
6163       memcpy (p, &gdb_jump_pad_head, 8);
6164       p += 8;
6165     }
6166
6167   ret = run_inferior_command (buf, (int) (ptrdiff_t) (p - buf));
6168   if (ret)
6169     return ret;
6170
6171   if (!startswith (buf, "OK"))
6172     return 1;
6173
6174   /* The value of tracepoint's target address is stored in BUF.  */
6175   memcpy (&tpoint->obj_addr_on_target,
6176           &buf[IPA_PROTO_FAST_TRACE_ADDR_ON_TARGET], 8);
6177
6178   if (tpoint->type == fast_tracepoint)
6179     {
6180       unsigned char *insn
6181         = (unsigned char *) &buf[IPA_PROTO_FAST_TRACE_FJUMP_INSN];
6182       int fjump_size;
6183
6184      trace_debug ("agent: read from cmd_buf 0x%x 0x%x\n",
6185                   (unsigned int) tpoint->obj_addr_on_target,
6186                   (unsigned int) gdb_jump_pad_head);
6187
6188       memcpy (&gdb_jump_pad_head, &buf[IPA_PROTO_FAST_TRACE_JUMP_PAD], 8);
6189
6190       /* This has been done in agent.  We should also set up record for it.  */
6191       memcpy (&fjump_size, &buf[IPA_PROTO_FAST_TRACE_FJUMP_SIZE], 4);
6192       /* Wire it in.  */
6193       tpoint->handle
6194         = set_fast_tracepoint_jump (tpoint->address, insn, fjump_size);
6195     }
6196
6197   return 0;
6198 }
6199
6200 static void
6201 download_tracepoint (struct tracepoint *tpoint)
6202 {
6203   struct tracepoint *tp, *tp_prev;
6204
6205   if (tpoint->type != fast_tracepoint
6206       && tpoint->type != static_tracepoint)
6207     return;
6208
6209   download_tracepoint_1 (tpoint);
6210
6211   /* Find the previous entry of TPOINT, which is fast tracepoint or
6212      static tracepoint.  */
6213   tp_prev = NULL;
6214   for (tp = tracepoints; tp != tpoint; tp = tp->next)
6215     {
6216       if (tp->type == fast_tracepoint || tp->type == static_tracepoint)
6217         tp_prev = tp;
6218     }
6219
6220   if (tp_prev)
6221     {
6222       CORE_ADDR tp_prev_target_next_addr;
6223
6224       /* Insert TPOINT after TP_PREV in IPA.  */
6225       if (read_inferior_data_pointer (tp_prev->obj_addr_on_target
6226                                       + offsetof (struct tracepoint, next),
6227                                       &tp_prev_target_next_addr))
6228         {
6229           internal_error (__FILE__, __LINE__,
6230                           "error reading `tp_prev->next'");
6231         }
6232
6233       /* tpoint->next = tp_prev->next */
6234       write_inferior_data_pointer (tpoint->obj_addr_on_target
6235                                    + offsetof (struct tracepoint, next),
6236                                    tp_prev_target_next_addr);
6237       /* tp_prev->next = tpoint */
6238       write_inferior_data_pointer (tp_prev->obj_addr_on_target
6239                                    + offsetof (struct tracepoint, next),
6240                                    tpoint->obj_addr_on_target);
6241     }
6242   else
6243     /* First object in list, set the head pointer in the
6244        inferior.  */
6245     write_inferior_data_pointer (ipa_sym_addrs.addr_tracepoints,
6246                                  tpoint->obj_addr_on_target);
6247
6248 }
6249
6250 static void
6251 download_trace_state_variables (void)
6252 {
6253   CORE_ADDR ptr = 0, prev_ptr = 0;
6254   struct trace_state_variable *tsv;
6255
6256   /* Start out empty.  */
6257   write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables, 0);
6258
6259   for (tsv = trace_state_variables; tsv != NULL; tsv = tsv->next)
6260     {
6261       struct trace_state_variable target_tsv;
6262
6263       /* TSV's with a getter have been initialized equally in both the
6264          inferior and GDBserver.  Skip them.  */
6265       if (tsv->getter != NULL)
6266         continue;
6267
6268       target_tsv = *tsv;
6269
6270       prev_ptr = ptr;
6271       ptr = target_malloc (sizeof (*tsv));
6272
6273       if (tsv == trace_state_variables)
6274         {
6275           /* First object in list, set the head pointer in the
6276              inferior.  */
6277
6278           write_inferior_data_pointer (ipa_sym_addrs.addr_trace_state_variables,
6279                                        ptr);
6280         }
6281       else
6282         {
6283           write_inferior_data_pointer (prev_ptr
6284                                        + offsetof (struct trace_state_variable,
6285                                                    next),
6286                                        ptr);
6287         }
6288
6289       /* Write the whole object.  We'll fix up its pointers in a bit.
6290          Assume no next, fixup when needed.  */
6291       target_tsv.next = NULL;
6292
6293       write_inferior_memory (ptr, (unsigned char *) &target_tsv,
6294                              sizeof (target_tsv));
6295
6296       if (tsv->name != NULL)
6297         {
6298           size_t size = strlen (tsv->name) + 1;
6299           CORE_ADDR name_addr = target_malloc (size);
6300           write_inferior_memory (name_addr,
6301                                  (unsigned char *) tsv->name, size);
6302           write_inferior_data_pointer (ptr
6303                                        + offsetof (struct trace_state_variable,
6304                                                    name),
6305                                        name_addr);
6306         }
6307
6308       gdb_assert (tsv->getter == NULL);
6309     }
6310
6311   if (prev_ptr != 0)
6312     {
6313       /* Fixup the next pointer in the last item in the list.  */
6314       write_inferior_data_pointer (prev_ptr
6315                                    + offsetof (struct trace_state_variable,
6316                                                next), 0);
6317     }
6318 }
6319
6320 /* Upload complete trace frames out of the IP Agent's trace buffer
6321    into GDBserver's trace buffer.  This always uploads either all or
6322    no trace frames.  This is the counter part of
6323    `trace_alloc_trace_buffer'.  See its description of the atomic
6324    synching mechanism.  */
6325
6326 static void
6327 upload_fast_traceframes (void)
6328 {
6329   unsigned int ipa_traceframe_read_count, ipa_traceframe_write_count;
6330   unsigned int ipa_traceframe_read_count_racy, ipa_traceframe_write_count_racy;
6331   CORE_ADDR tf;
6332   struct ipa_trace_buffer_control ipa_trace_buffer_ctrl;
6333   unsigned int curr_tbctrl_idx;
6334   unsigned int ipa_trace_buffer_ctrl_curr;
6335   unsigned int ipa_trace_buffer_ctrl_curr_old;
6336   CORE_ADDR ipa_trace_buffer_ctrl_addr;
6337   struct breakpoint *about_to_request_buffer_space_bkpt;
6338   CORE_ADDR ipa_trace_buffer_lo;
6339   CORE_ADDR ipa_trace_buffer_hi;
6340
6341   if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count,
6342                               &ipa_traceframe_read_count_racy))
6343     {
6344       /* This will happen in most targets if the current thread is
6345          running.  */
6346       return;
6347     }
6348
6349   if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count,
6350                               &ipa_traceframe_write_count_racy))
6351     return;
6352
6353   trace_debug ("ipa_traceframe_count (racy area): %d (w=%d, r=%d)",
6354                ipa_traceframe_write_count_racy
6355                - ipa_traceframe_read_count_racy,
6356                ipa_traceframe_write_count_racy,
6357                ipa_traceframe_read_count_racy);
6358
6359   if (ipa_traceframe_write_count_racy == ipa_traceframe_read_count_racy)
6360     return;
6361
6362   about_to_request_buffer_space_bkpt
6363     = set_breakpoint_at (ipa_sym_addrs.addr_about_to_request_buffer_space,
6364                          NULL);
6365
6366   if (read_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr,
6367                               &ipa_trace_buffer_ctrl_curr))
6368     return;
6369
6370   ipa_trace_buffer_ctrl_curr_old = ipa_trace_buffer_ctrl_curr;
6371
6372   curr_tbctrl_idx = ipa_trace_buffer_ctrl_curr & ~GDBSERVER_FLUSH_COUNT_MASK;
6373
6374   {
6375     unsigned int prev, counter;
6376
6377     /* Update the token, with new counters, and the GDBserver stamp
6378        bit.  Alway reuse the current TBC index.  */
6379     prev = ipa_trace_buffer_ctrl_curr & GDBSERVER_FLUSH_COUNT_MASK_CURR;
6380     counter = (prev + 0x100) & GDBSERVER_FLUSH_COUNT_MASK_CURR;
6381
6382     ipa_trace_buffer_ctrl_curr = (GDBSERVER_UPDATED_FLUSH_COUNT_BIT
6383                                   | (prev << 12)
6384                                   | counter
6385                                   | curr_tbctrl_idx);
6386   }
6387
6388   if (write_inferior_uinteger (ipa_sym_addrs.addr_trace_buffer_ctrl_curr,
6389                                ipa_trace_buffer_ctrl_curr))
6390     return;
6391
6392   trace_debug ("Lib: Committed %08x -> %08x",
6393                ipa_trace_buffer_ctrl_curr_old,
6394                ipa_trace_buffer_ctrl_curr);
6395
6396   /* Re-read these, now that we've installed the
6397      `about_to_request_buffer_space' breakpoint/lock.  A thread could
6398      have finished a traceframe between the last read of these
6399      counters and setting the breakpoint above.  If we start
6400      uploading, we never want to leave this function with
6401      traceframe_read_count != 0, otherwise, GDBserver could end up
6402      incrementing the counter tokens more than once (due to event loop
6403      nesting), which would break the IP agent's "effective" detection
6404      (see trace_alloc_trace_buffer).  */
6405   if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_read_count,
6406                               &ipa_traceframe_read_count))
6407     return;
6408   if (read_inferior_uinteger (ipa_sym_addrs.addr_traceframe_write_count,
6409                               &ipa_traceframe_write_count))
6410     return;
6411
6412   if (debug_threads)
6413     {
6414       trace_debug ("ipa_traceframe_count (blocked area): %d (w=%d, r=%d)",
6415                    ipa_traceframe_write_count - ipa_traceframe_read_count,
6416                    ipa_traceframe_write_count, ipa_traceframe_read_count);
6417
6418       if (ipa_traceframe_write_count != ipa_traceframe_write_count_racy
6419           || ipa_traceframe_read_count != ipa_traceframe_read_count_racy)
6420         trace_debug ("note that ipa_traceframe_count's parts changed");
6421     }
6422
6423   /* Get the address of the current TBC object (the IP agent has an
6424      array of 3 such objects).  The index is stored in the TBC
6425      token.  */
6426   ipa_trace_buffer_ctrl_addr = ipa_sym_addrs.addr_trace_buffer_ctrl;
6427   ipa_trace_buffer_ctrl_addr
6428     += sizeof (struct ipa_trace_buffer_control) * curr_tbctrl_idx;
6429
6430   if (read_inferior_memory (ipa_trace_buffer_ctrl_addr,
6431                             (unsigned char *) &ipa_trace_buffer_ctrl,
6432                             sizeof (struct ipa_trace_buffer_control)))
6433     return;
6434
6435   if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_lo,
6436                                   &ipa_trace_buffer_lo))
6437     return;
6438   if (read_inferior_data_pointer (ipa_sym_addrs.addr_trace_buffer_hi,
6439                                   &ipa_trace_buffer_hi))
6440     return;
6441
6442   /* Offsets are easier to grok for debugging than raw addresses,
6443      especially for the small trace buffer sizes that are useful for
6444      testing.  */
6445   trace_debug ("Lib: Trace buffer [%d] start=%d free=%d "
6446                "endfree=%d wrap=%d hi=%d",
6447                curr_tbctrl_idx,
6448                (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo),
6449                (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo),
6450                (int) (ipa_trace_buffer_ctrl.end_free - ipa_trace_buffer_lo),
6451                (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo),
6452                (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo));
6453
6454   /* Note that the IPA's buffer is always circular.  */
6455
6456 #define IPA_FIRST_TRACEFRAME() (ipa_trace_buffer_ctrl.start)
6457
6458 #define IPA_NEXT_TRACEFRAME_1(TF, TFOBJ)                \
6459   ((TF) + sizeof (struct traceframe) + (TFOBJ)->data_size)
6460
6461 #define IPA_NEXT_TRACEFRAME(TF, TFOBJ)                                  \
6462   (IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ)                                    \
6463    - ((IPA_NEXT_TRACEFRAME_1 (TF, TFOBJ) >= ipa_trace_buffer_ctrl.wrap) \
6464       ? (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo)              \
6465       : 0))
6466
6467   tf = IPA_FIRST_TRACEFRAME ();
6468
6469   while (ipa_traceframe_write_count - ipa_traceframe_read_count)
6470     {
6471       struct tracepoint *tpoint;
6472       struct traceframe *tframe;
6473       unsigned char *block;
6474       struct traceframe ipa_tframe;
6475
6476       if (read_inferior_memory (tf, (unsigned char *) &ipa_tframe,
6477                                 offsetof (struct traceframe, data)))
6478         error ("Uploading: couldn't read traceframe at %s\n", paddress (tf));
6479
6480       if (ipa_tframe.tpnum == 0)
6481         {
6482           internal_error (__FILE__, __LINE__,
6483                           "Uploading: No (more) fast traceframes, but"
6484                           " ipa_traceframe_count == %u??\n",
6485                           ipa_traceframe_write_count
6486                           - ipa_traceframe_read_count);
6487         }
6488
6489       /* Note that this will be incorrect for multi-location
6490          tracepoints...  */
6491       tpoint = find_next_tracepoint_by_number (NULL, ipa_tframe.tpnum);
6492
6493       tframe = add_traceframe (tpoint);
6494       if (tframe == NULL)
6495         {
6496           trace_buffer_is_full = 1;
6497           trace_debug ("Uploading: trace buffer is full");
6498         }
6499       else
6500         {
6501           /* Copy the whole set of blocks in one go for now.  FIXME:
6502              split this in smaller blocks.  */
6503           block = add_traceframe_block (tframe, tpoint,
6504                                         ipa_tframe.data_size);
6505           if (block != NULL)
6506             {
6507               if (read_inferior_memory (tf
6508                                         + offsetof (struct traceframe, data),
6509                                         block, ipa_tframe.data_size))
6510                 error ("Uploading: Couldn't read traceframe data at %s\n",
6511                        paddress (tf + offsetof (struct traceframe, data)));
6512             }
6513
6514           trace_debug ("Uploading: traceframe didn't fit");
6515           finish_traceframe (tframe);
6516         }
6517
6518       tf = IPA_NEXT_TRACEFRAME (tf, &ipa_tframe);
6519
6520       /* If we freed the traceframe that wrapped around, go back
6521          to the non-wrap case.  */
6522       if (tf < ipa_trace_buffer_ctrl.start)
6523         {
6524           trace_debug ("Lib: Discarding past the wraparound");
6525           ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi;
6526         }
6527       ipa_trace_buffer_ctrl.start = tf;
6528       ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_ctrl.start;
6529       ++ipa_traceframe_read_count;
6530
6531       if (ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.free
6532           && ipa_trace_buffer_ctrl.start == ipa_trace_buffer_ctrl.end_free)
6533         {
6534           trace_debug ("Lib: buffer is fully empty.  "
6535                        "Trace buffer [%d] start=%d free=%d endfree=%d",
6536                        curr_tbctrl_idx,
6537                        (int) (ipa_trace_buffer_ctrl.start
6538                               - ipa_trace_buffer_lo),
6539                        (int) (ipa_trace_buffer_ctrl.free
6540                               - ipa_trace_buffer_lo),
6541                        (int) (ipa_trace_buffer_ctrl.end_free
6542                               - ipa_trace_buffer_lo));
6543
6544           ipa_trace_buffer_ctrl.start = ipa_trace_buffer_lo;
6545           ipa_trace_buffer_ctrl.free = ipa_trace_buffer_lo;
6546           ipa_trace_buffer_ctrl.end_free = ipa_trace_buffer_hi;
6547           ipa_trace_buffer_ctrl.wrap = ipa_trace_buffer_hi;
6548         }
6549
6550       trace_debug ("Uploaded a traceframe\n"
6551                    "Lib: Trace buffer [%d] start=%d free=%d "
6552                    "endfree=%d wrap=%d hi=%d",
6553                    curr_tbctrl_idx,
6554                    (int) (ipa_trace_buffer_ctrl.start - ipa_trace_buffer_lo),
6555                    (int) (ipa_trace_buffer_ctrl.free - ipa_trace_buffer_lo),
6556                    (int) (ipa_trace_buffer_ctrl.end_free
6557                           - ipa_trace_buffer_lo),
6558                    (int) (ipa_trace_buffer_ctrl.wrap - ipa_trace_buffer_lo),
6559                    (int) (ipa_trace_buffer_hi - ipa_trace_buffer_lo));
6560     }
6561
6562   if (write_inferior_memory (ipa_trace_buffer_ctrl_addr,
6563                              (unsigned char *) &ipa_trace_buffer_ctrl,
6564                              sizeof (struct ipa_trace_buffer_control)))
6565     return;
6566
6567   write_inferior_integer (ipa_sym_addrs.addr_traceframe_read_count,
6568                           ipa_traceframe_read_count);
6569
6570   trace_debug ("Done uploading traceframes [%d]\n", curr_tbctrl_idx);
6571
6572   pause_all (1);
6573
6574   delete_breakpoint (about_to_request_buffer_space_bkpt);
6575   about_to_request_buffer_space_bkpt = NULL;
6576
6577   unpause_all (1);
6578
6579   if (trace_buffer_is_full)
6580     stop_tracing ();
6581 }
6582 #endif
6583
6584 #ifdef IN_PROCESS_AGENT
6585
6586 IP_AGENT_EXPORT_VAR int ust_loaded;
6587 IP_AGENT_EXPORT_VAR char cmd_buf[IPA_CMD_BUF_SIZE];
6588
6589 #ifdef HAVE_UST
6590
6591 /* Static tracepoints.  */
6592
6593 /* UST puts a "struct tracepoint" in the global namespace, which
6594    conflicts with our tracepoint.  Arguably, being a library, it
6595    shouldn't take ownership of such a generic name.  We work around it
6596    here.  */
6597 #define tracepoint ust_tracepoint
6598 #include <ust/ust.h>
6599 #undef tracepoint
6600
6601 extern int serialize_to_text (char *outbuf, int bufsize,
6602                               const char *fmt, va_list ap);
6603
6604 #define GDB_PROBE_NAME "gdb"
6605
6606 /* We dynamically search for the UST symbols instead of linking them
6607    in.  This lets the user decide if the application uses static
6608    tracepoints, instead of always pulling libust.so in.  This vector
6609    holds pointers to all functions we care about.  */
6610
6611 static struct
6612 {
6613   int (*serialize_to_text) (char *outbuf, int bufsize,
6614                             const char *fmt, va_list ap);
6615
6616   int (*ltt_probe_register) (struct ltt_available_probe *pdata);
6617   int (*ltt_probe_unregister) (struct ltt_available_probe *pdata);
6618
6619   int (*ltt_marker_connect) (const char *channel, const char *mname,
6620                              const char *pname);
6621   int (*ltt_marker_disconnect) (const char *channel, const char *mname,
6622                                 const char *pname);
6623
6624   void (*marker_iter_start) (struct marker_iter *iter);
6625   void (*marker_iter_next) (struct marker_iter *iter);
6626   void (*marker_iter_stop) (struct marker_iter *iter);
6627   void (*marker_iter_reset) (struct marker_iter *iter);
6628 } ust_ops;
6629
6630 #include <dlfcn.h>
6631
6632 /* Cast through typeof to catch incompatible API changes.  Since UST
6633    only builds with gcc, we can freely use gcc extensions here
6634    too.  */
6635 #define GET_UST_SYM(SYM)                                        \
6636   do                                                            \
6637     {                                                           \
6638       if (ust_ops.SYM == NULL)                                  \
6639         ust_ops.SYM = (typeof (&SYM)) dlsym (RTLD_DEFAULT, #SYM);       \
6640       if (ust_ops.SYM == NULL)                                  \
6641         return 0;                                               \
6642     } while (0)
6643
6644 #define USTF(SYM) ust_ops.SYM
6645
6646 /* Get pointers to all libust.so functions we care about.  */
6647
6648 static int
6649 dlsym_ust (void)
6650 {
6651   GET_UST_SYM (serialize_to_text);
6652
6653   GET_UST_SYM (ltt_probe_register);
6654   GET_UST_SYM (ltt_probe_unregister);
6655   GET_UST_SYM (ltt_marker_connect);
6656   GET_UST_SYM (ltt_marker_disconnect);
6657
6658   GET_UST_SYM (marker_iter_start);
6659   GET_UST_SYM (marker_iter_next);
6660   GET_UST_SYM (marker_iter_stop);
6661   GET_UST_SYM (marker_iter_reset);
6662
6663   ust_loaded = 1;
6664   return 1;
6665 }
6666
6667 /* Given an UST marker, return the matching gdb static tracepoint.
6668    The match is done by address.  */
6669
6670 static struct tracepoint *
6671 ust_marker_to_static_tracepoint (const struct marker *mdata)
6672 {
6673   struct tracepoint *tpoint;
6674
6675   for (tpoint = tracepoints; tpoint; tpoint = tpoint->next)
6676     {
6677       if (tpoint->type != static_tracepoint)
6678         continue;
6679
6680       if (tpoint->address == (uintptr_t) mdata->location)
6681         return tpoint;
6682     }
6683
6684   return NULL;
6685 }
6686
6687 /* The probe function we install on lttng/ust markers.  Whenever a
6688    probed ust marker is hit, this function is called.  This is similar
6689    to gdb_collect, only for static tracepoints, instead of fast
6690    tracepoints.  */
6691
6692 static void
6693 gdb_probe (const struct marker *mdata, void *probe_private,
6694            struct registers *regs, void *call_private,
6695            const char *fmt, va_list *args)
6696 {
6697   struct tracepoint *tpoint;
6698   struct static_tracepoint_ctx ctx;
6699   const struct target_desc *ipa_tdesc;
6700
6701   /* Don't do anything until the trace run is completely set up.  */
6702   if (!tracing)
6703     {
6704       trace_debug ("gdb_probe: not tracing\n");
6705       return;
6706     }
6707
6708   ipa_tdesc = get_ipa_tdesc (ipa_tdesc_idx);
6709   ctx.base.type = static_tracepoint;
6710   ctx.regcache_initted = 0;
6711   ctx.regs = regs;
6712   ctx.fmt = fmt;
6713   ctx.args = args;
6714
6715   /* Wrap the regblock in a register cache (in the stack, we don't
6716      want to malloc here).  */
6717   ctx.regspace = alloca (ipa_tdesc->registers_size);
6718   if (ctx.regspace == NULL)
6719     {
6720       trace_debug ("Trace buffer block allocation failed, skipping");
6721       return;
6722     }
6723
6724   tpoint = ust_marker_to_static_tracepoint (mdata);
6725   if (tpoint == NULL)
6726     {
6727       trace_debug ("gdb_probe: marker not known: "
6728                    "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"",
6729                    mdata->location, mdata->channel,
6730                    mdata->name, mdata->format);
6731       return;
6732     }
6733
6734   if (!tpoint->enabled)
6735     {
6736       trace_debug ("gdb_probe: tracepoint disabled");
6737       return;
6738     }
6739
6740   ctx.tpoint = tpoint;
6741
6742   trace_debug ("gdb_probe: collecting marker: "
6743                "loc:0x%p, ch:\"%s\",n:\"%s\",f:\"%s\"",
6744                mdata->location, mdata->channel,
6745                mdata->name, mdata->format);
6746
6747   /* Test the condition if present, and collect if true.  */
6748   if (tpoint->cond == NULL
6749       || condition_true_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
6750                                        tpoint))
6751     {
6752       collect_data_at_tracepoint ((struct tracepoint_hit_ctx *) &ctx,
6753                                   tpoint->address, tpoint);
6754
6755       if (stopping_tracepoint
6756           || trace_buffer_is_full
6757           || expr_eval_result != expr_eval_no_error)
6758         stop_tracing ();
6759     }
6760   else
6761     {
6762       /* If there was a condition and it evaluated to false, the only
6763          way we would stop tracing is if there was an error during
6764          condition expression evaluation.  */
6765       if (expr_eval_result != expr_eval_no_error)
6766         stop_tracing ();
6767     }
6768 }
6769
6770 /* Called if the gdb static tracepoint requested collecting "$_sdata",
6771    static tracepoint string data.  This is a string passed to the
6772    tracing library by the user, at the time of the tracepoint marker
6773    call.  E.g., in the UST marker call:
6774
6775      trace_mark (ust, bar33, "str %s", "FOOBAZ");
6776
6777    the collected data is "str FOOBAZ".
6778 */
6779
6780 static void
6781 collect_ust_data_at_tracepoint (struct tracepoint_hit_ctx *ctx,
6782                                 struct traceframe *tframe)
6783 {
6784   struct static_tracepoint_ctx *umd = (struct static_tracepoint_ctx *) ctx;
6785   unsigned char *bufspace;
6786   int size;
6787   va_list copy;
6788   unsigned short blocklen;
6789
6790   if (umd == NULL)
6791     {
6792       trace_debug ("Wanted to collect static trace data, "
6793                    "but there's no static trace data");
6794       return;
6795     }
6796
6797   va_copy (copy, *umd->args);
6798   size = USTF(serialize_to_text) (NULL, 0, umd->fmt, copy);
6799   va_end (copy);
6800
6801   trace_debug ("Want to collect ust data");
6802
6803   /* 'S' + size + string */
6804   bufspace = add_traceframe_block (tframe, umd->tpoint,
6805                                    1 + sizeof (blocklen) + size + 1);
6806   if (bufspace == NULL)
6807     {
6808       trace_debug ("Trace buffer block allocation failed, skipping");
6809       return;
6810     }
6811
6812   /* Identify a static trace data block.  */
6813   *bufspace = 'S';
6814
6815   blocklen = size + 1;
6816   memcpy (bufspace + 1, &blocklen, sizeof (blocklen));
6817
6818   va_copy (copy, *umd->args);
6819   USTF(serialize_to_text) ((char *) bufspace + 1 + sizeof (blocklen),
6820                            size + 1, umd->fmt, copy);
6821   va_end (copy);
6822
6823   trace_debug ("Storing static tracepoint data in regblock: %s",
6824                bufspace + 1 + sizeof (blocklen));
6825 }
6826
6827 /* The probe to register with lttng/ust.  */
6828 static struct ltt_available_probe gdb_ust_probe =
6829   {
6830     GDB_PROBE_NAME,
6831     NULL,
6832     gdb_probe,
6833   };
6834
6835 #endif /* HAVE_UST */
6836 #endif /* IN_PROCESS_AGENT */
6837
6838 #ifndef IN_PROCESS_AGENT
6839
6840 /* Ask the in-process agent to run a command.  Since we don't want to
6841    have to handle the IPA hitting breakpoints while running the
6842    command, we pause all threads, remove all breakpoints, and then set
6843    the helper thread re-running.  We communicate with the helper
6844    thread by means of direct memory xfering, and a socket for
6845    synchronization.  */
6846
6847 static int
6848 run_inferior_command (char *cmd, int len)
6849 {
6850   int err = -1;
6851   int pid = ptid_get_pid (current_ptid);
6852
6853   trace_debug ("run_inferior_command: running: %s", cmd);
6854
6855   pause_all (0);
6856   uninsert_all_breakpoints ();
6857
6858   err = agent_run_command (pid, (const char *) cmd, len);
6859
6860   reinsert_all_breakpoints ();
6861   unpause_all (0);
6862
6863   return err;
6864 }
6865
6866 #else /* !IN_PROCESS_AGENT */
6867
6868 #include <sys/socket.h>
6869 #include <sys/un.h>
6870
6871 #ifndef UNIX_PATH_MAX
6872 #define UNIX_PATH_MAX sizeof(((struct sockaddr_un *) NULL)->sun_path)
6873 #endif
6874
6875 /* Where we put the socked used for synchronization.  */
6876 #define SOCK_DIR P_tmpdir
6877
6878 /* Thread ID of the helper thread.  GDBserver reads this to know which
6879    is the help thread.  This is an LWP id on Linux.  */
6880 EXTERN_C_PUSH
6881 IP_AGENT_EXPORT_VAR int helper_thread_id;
6882 EXTERN_C_POP
6883
6884 static int
6885 init_named_socket (const char *name)
6886 {
6887   int result, fd;
6888   struct sockaddr_un addr;
6889
6890   result = fd = socket (PF_UNIX, SOCK_STREAM, 0);
6891   if (result == -1)
6892     {
6893       warning ("socket creation failed: %s", strerror (errno));
6894       return -1;
6895     }
6896
6897   addr.sun_family = AF_UNIX;
6898
6899   strncpy (addr.sun_path, name, UNIX_PATH_MAX);
6900   addr.sun_path[UNIX_PATH_MAX - 1] = '\0';
6901
6902   result = access (name, F_OK);
6903   if (result == 0)
6904     {
6905       /* File exists.  */
6906       result = unlink (name);
6907       if (result == -1)
6908         {
6909           warning ("unlink failed: %s", strerror (errno));
6910           close (fd);
6911           return -1;
6912         }
6913       warning ("socket %s already exists; overwriting", name);
6914     }
6915
6916   result = bind (fd, (struct sockaddr *) &addr, sizeof (addr));
6917   if (result == -1)
6918     {
6919       warning ("bind failed: %s", strerror (errno));
6920       close (fd);
6921       return -1;
6922     }
6923
6924   result = listen (fd, 1);
6925   if (result == -1)
6926     {
6927       warning ("listen: %s", strerror (errno));
6928       close (fd);
6929       return -1;
6930     }
6931
6932   return fd;
6933 }
6934
6935 static char agent_socket_name[UNIX_PATH_MAX];
6936
6937 static int
6938 gdb_agent_socket_init (void)
6939 {
6940   int result, fd;
6941
6942   result = xsnprintf (agent_socket_name, UNIX_PATH_MAX, "%s/gdb_ust%d",
6943                       SOCK_DIR, getpid ());
6944   if (result >= UNIX_PATH_MAX)
6945     {
6946       trace_debug ("string overflow allocating socket name");
6947       return -1;
6948     }
6949
6950   fd = init_named_socket (agent_socket_name);
6951   if (fd < 0)
6952     warning ("Error initializing named socket (%s) for communication with the "
6953              "ust helper thread. Check that directory exists and that it "
6954              "is writable.", agent_socket_name);
6955
6956   return fd;
6957 }
6958
6959 #ifdef HAVE_UST
6960
6961 /* The next marker to be returned on a qTsSTM command.  */
6962 static const struct marker *next_st;
6963
6964 /* Returns the first known marker.  */
6965
6966 struct marker *
6967 first_marker (void)
6968 {
6969   struct marker_iter iter;
6970
6971   USTF(marker_iter_reset) (&iter);
6972   USTF(marker_iter_start) (&iter);
6973
6974   return iter.marker;
6975 }
6976
6977 /* Returns the marker following M.  */
6978
6979 const struct marker *
6980 next_marker (const struct marker *m)
6981 {
6982   struct marker_iter iter;
6983
6984   USTF(marker_iter_reset) (&iter);
6985   USTF(marker_iter_start) (&iter);
6986
6987   for (; iter.marker != NULL; USTF(marker_iter_next) (&iter))
6988     {
6989       if (iter.marker == m)
6990         {
6991           USTF(marker_iter_next) (&iter);
6992           return iter.marker;
6993         }
6994     }
6995
6996   return NULL;
6997 }
6998
6999 /* Return an hexstr version of the STR C string, fit for sending to
7000    GDB.  */
7001
7002 static char *
7003 cstr_to_hexstr (const char *str)
7004 {
7005   int len = strlen (str);
7006   char *hexstr = xmalloc (len * 2 + 1);
7007   bin2hex ((gdb_byte *) str, hexstr, len);
7008   return hexstr;
7009 }
7010
7011 /* Compose packet that is the response to the qTsSTM/qTfSTM/qTSTMat
7012    packets.  */
7013
7014 static void
7015 response_ust_marker (char *packet, const struct marker *st)
7016 {
7017   char *strid, *format, *tmp;
7018
7019   next_st = next_marker (st);
7020
7021   tmp = xmalloc (strlen (st->channel) + 1 +
7022                  strlen (st->name) + 1);
7023   sprintf (tmp, "%s/%s", st->channel, st->name);
7024
7025   strid = cstr_to_hexstr (tmp);
7026   free (tmp);
7027
7028   format = cstr_to_hexstr (st->format);
7029
7030   sprintf (packet, "m%s:%s:%s",
7031            paddress ((uintptr_t) st->location),
7032            strid,
7033            format);
7034
7035   free (strid);
7036   free (format);
7037 }
7038
7039 /* Return the first static tracepoint, and initialize the state
7040    machine that will iterate through all the static tracepoints.  */
7041
7042 static void
7043 cmd_qtfstm (char *packet)
7044 {
7045   trace_debug ("Returning first trace state variable definition");
7046
7047   if (first_marker ())
7048     response_ust_marker (packet, first_marker ());
7049   else
7050     strcpy (packet, "l");
7051 }
7052
7053 /* Return additional trace state variable definitions. */
7054
7055 static void
7056 cmd_qtsstm (char *packet)
7057 {
7058   trace_debug ("Returning static tracepoint");
7059
7060   if (next_st)
7061     response_ust_marker (packet, next_st);
7062   else
7063     strcpy (packet, "l");
7064 }
7065
7066 /* Disconnect the GDB probe from a marker at a given address.  */
7067
7068 static void
7069 unprobe_marker_at (char *packet)
7070 {
7071   char *p = packet;
7072   ULONGEST address;
7073   struct marker_iter iter;
7074
7075   p += sizeof ("unprobe_marker_at:") - 1;
7076
7077   p = unpack_varlen_hex (p, &address);
7078
7079   USTF(marker_iter_reset) (&iter);
7080   USTF(marker_iter_start) (&iter);
7081   for (; iter.marker != NULL; USTF(marker_iter_next) (&iter))
7082     if ((uintptr_t ) iter.marker->location == address)
7083       {
7084         int result;
7085
7086         result = USTF(ltt_marker_disconnect) (iter.marker->channel,
7087                                               iter.marker->name,
7088                                               GDB_PROBE_NAME);
7089         if (result < 0)
7090           warning ("could not disable marker %s/%s",
7091                    iter.marker->channel, iter.marker->name);
7092         break;
7093       }
7094 }
7095
7096 /* Connect the GDB probe to a marker at a given address.  */
7097
7098 static int
7099 probe_marker_at (char *packet)
7100 {
7101   char *p = packet;
7102   ULONGEST address;
7103   struct marker_iter iter;
7104   struct marker *m;
7105
7106   p += sizeof ("probe_marker_at:") - 1;
7107
7108   p = unpack_varlen_hex (p, &address);
7109
7110   USTF(marker_iter_reset) (&iter);
7111
7112   for (USTF(marker_iter_start) (&iter), m = iter.marker;
7113        m != NULL;
7114        USTF(marker_iter_next) (&iter), m = iter.marker)
7115     if ((uintptr_t ) m->location == address)
7116       {
7117         int result;
7118
7119         trace_debug ("found marker for address.  "
7120                      "ltt_marker_connect (marker = %s/%s)",
7121                      m->channel, m->name);
7122
7123         result = USTF(ltt_marker_connect) (m->channel, m->name,
7124                                            GDB_PROBE_NAME);
7125         if (result && result != -EEXIST)
7126           trace_debug ("ltt_marker_connect (marker = %s/%s, errno = %d)",
7127                        m->channel, m->name, -result);
7128
7129         if (result < 0)
7130           {
7131             sprintf (packet, "E.could not connect marker: channel=%s, name=%s",
7132                      m->channel, m->name);
7133             return -1;
7134           }
7135
7136         strcpy (packet, "OK");
7137         return 0;
7138       }
7139
7140   sprintf (packet, "E.no marker found at 0x%s", paddress (address));
7141   return -1;
7142 }
7143
7144 static int
7145 cmd_qtstmat (char *packet)
7146 {
7147   char *p = packet;
7148   ULONGEST address;
7149   struct marker_iter iter;
7150   struct marker *m;
7151
7152   p += sizeof ("qTSTMat:") - 1;
7153
7154   p = unpack_varlen_hex (p, &address);
7155
7156   USTF(marker_iter_reset) (&iter);
7157
7158   for (USTF(marker_iter_start) (&iter), m = iter.marker;
7159        m != NULL;
7160        USTF(marker_iter_next) (&iter), m = iter.marker)
7161     if ((uintptr_t ) m->location == address)
7162       {
7163         response_ust_marker (packet, m);
7164         return 0;
7165       }
7166
7167   strcpy (packet, "l");
7168   return -1;
7169 }
7170
7171 static void
7172 gdb_ust_init (void)
7173 {
7174   if (!dlsym_ust ())
7175     return;
7176
7177   USTF(ltt_probe_register) (&gdb_ust_probe);
7178 }
7179
7180 #endif /* HAVE_UST */
7181
7182 #include <sys/syscall.h>
7183
7184 static void
7185 gdb_agent_remove_socket (void)
7186 {
7187   unlink (agent_socket_name);
7188 }
7189
7190 /* Helper thread of agent.  */
7191
7192 static void *
7193 gdb_agent_helper_thread (void *arg)
7194 {
7195   int listen_fd;
7196
7197   atexit (gdb_agent_remove_socket);
7198
7199   while (1)
7200     {
7201       listen_fd = gdb_agent_socket_init ();
7202
7203       if (helper_thread_id == 0)
7204         helper_thread_id = syscall (SYS_gettid);
7205
7206       if (listen_fd == -1)
7207         {
7208           warning ("could not create sync socket\n");
7209           break;
7210         }
7211
7212       while (1)
7213         {
7214           socklen_t tmp;
7215           struct sockaddr_un sockaddr;
7216           int fd;
7217           char buf[1];
7218           int ret;
7219           int stop_loop = 0;
7220
7221           tmp = sizeof (sockaddr);
7222
7223           do
7224             {
7225               fd = accept (listen_fd, (struct sockaddr *) &sockaddr, &tmp);
7226             }
7227           /* It seems an ERESTARTSYS can escape out of accept.  */
7228           while (fd == -512 || (fd == -1 && errno == EINTR));
7229
7230           if (fd < 0)
7231             {
7232               warning ("Accept returned %d, error: %s\n",
7233                        fd, strerror (errno));
7234               break;
7235             }
7236
7237           do
7238             {
7239               ret = read (fd, buf, 1);
7240             } while (ret == -1 && errno == EINTR);
7241
7242           if (ret == -1)
7243             {
7244               warning ("reading socket (fd=%d) failed with %s",
7245                        fd, strerror (errno));
7246               close (fd);
7247               break;
7248             }
7249
7250           if (cmd_buf[0])
7251             {
7252               if (startswith (cmd_buf, "close"))
7253                 {
7254                   stop_loop = 1;
7255                 }
7256 #ifdef HAVE_UST
7257               else if (strcmp ("qTfSTM", cmd_buf) == 0)
7258                 {
7259                   cmd_qtfstm (cmd_buf);
7260                 }
7261               else if (strcmp ("qTsSTM", cmd_buf) == 0)
7262                 {
7263                   cmd_qtsstm (cmd_buf);
7264                 }
7265               else if (startswith (cmd_buf, "unprobe_marker_at:"))
7266                 {
7267                   unprobe_marker_at (cmd_buf);
7268                 }
7269               else if (startswith (cmd_buf, "probe_marker_at:"))
7270                 {
7271                   probe_marker_at (cmd_buf);
7272                 }
7273               else if (startswith (cmd_buf, "qTSTMat:"))
7274                 {
7275                   cmd_qtstmat (cmd_buf);
7276                 }
7277 #endif /* HAVE_UST */
7278             }
7279
7280           /* Fix compiler's warning: ignoring return value of 'write'.  */
7281           ret = write (fd, buf, 1);
7282           close (fd);
7283
7284           if (stop_loop)
7285             {
7286               close (listen_fd);
7287               unlink (agent_socket_name);
7288
7289               /* Sleep endlessly to wait the whole inferior stops.  This
7290                  thread can not exit because GDB or GDBserver may still need
7291                  'current_thread' (representing this thread) to access
7292                  inferior memory.  Otherwise, this thread exits earlier than
7293                  other threads, and 'current_thread' is set to NULL.  */
7294               while (1)
7295                 sleep (10);
7296             }
7297         }
7298     }
7299
7300   return NULL;
7301 }
7302
7303 #include <signal.h>
7304 #include <pthread.h>
7305
7306 EXTERN_C_PUSH
7307 IP_AGENT_EXPORT_VAR int gdb_agent_capability = AGENT_CAPA_STATIC_TRACE;
7308 EXTERN_C_POP
7309
7310 static void
7311 gdb_agent_init (void)
7312 {
7313   int res;
7314   pthread_t thread;
7315   sigset_t new_mask;
7316   sigset_t orig_mask;
7317
7318   /* We want the helper thread to be as transparent as possible, so
7319      have it inherit an all-signals-blocked mask.  */
7320
7321   sigfillset (&new_mask);
7322   res = pthread_sigmask (SIG_SETMASK, &new_mask, &orig_mask);
7323   if (res)
7324     perror_with_name ("pthread_sigmask (1)");
7325
7326   res = pthread_create (&thread,
7327                         NULL,
7328                         gdb_agent_helper_thread,
7329                         NULL);
7330
7331   res = pthread_sigmask (SIG_SETMASK, &orig_mask, NULL);
7332   if (res)
7333     perror_with_name ("pthread_sigmask (2)");
7334
7335   while (helper_thread_id == 0)
7336     usleep (1);
7337
7338 #ifdef HAVE_UST
7339   gdb_ust_init ();
7340 #endif
7341 }
7342
7343 #include <sys/mman.h>
7344 #include <fcntl.h>
7345
7346 IP_AGENT_EXPORT_VAR char *gdb_tp_heap_buffer;
7347 IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer;
7348 IP_AGENT_EXPORT_VAR char *gdb_jump_pad_buffer_end;
7349 IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer;
7350 IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_end;
7351 IP_AGENT_EXPORT_VAR char *gdb_trampoline_buffer_error;
7352
7353 /* Record the result of getting buffer space for fast tracepoint
7354    trampolines.  Any error message is copied, since caller may not be
7355    using persistent storage.  */
7356
7357 void
7358 set_trampoline_buffer_space (CORE_ADDR begin, CORE_ADDR end, char *errmsg)
7359 {
7360   gdb_trampoline_buffer = (char *) (uintptr_t) begin;
7361   gdb_trampoline_buffer_end = (char *) (uintptr_t) end;
7362   if (errmsg)
7363     strncpy (gdb_trampoline_buffer_error, errmsg, 99);
7364   else
7365     strcpy (gdb_trampoline_buffer_error, "no buffer passed");
7366 }
7367
7368 static void __attribute__ ((constructor))
7369 initialize_tracepoint_ftlib (void)
7370 {
7371   initialize_tracepoint ();
7372
7373   gdb_agent_init ();
7374 }
7375
7376 #ifndef HAVE_GETAUXVAL
7377 /* Retrieve the value of TYPE from the auxiliary vector.  If TYPE is not
7378    found, 0 is returned.  This function is provided if glibc is too old.  */
7379
7380 unsigned long
7381 getauxval (unsigned long type)
7382 {
7383   unsigned long data[2];
7384   FILE *f = fopen ("/proc/self/auxv", "r");
7385   unsigned long value = 0;
7386
7387   if (f == NULL)
7388     return 0;
7389
7390   while (fread (data, sizeof (data), 1, f) > 0)
7391     {
7392       if (data[0] == type)
7393         {
7394           value = data[1];
7395           break;
7396         }
7397     }
7398
7399   fclose (f);
7400   return value;
7401 }
7402 #endif
7403
7404 #endif /* IN_PROCESS_AGENT */
7405
7406 /* Return a timestamp, expressed as microseconds of the usual Unix
7407    time.  (As the result is a 64-bit number, it will not overflow any
7408    time soon.)  */
7409
7410 static LONGEST
7411 get_timestamp (void)
7412 {
7413   using namespace std::chrono;
7414
7415   steady_clock::time_point now = steady_clock::now ();
7416   return duration_cast<microseconds> (now.time_since_epoch ()).count ();
7417 }
7418
7419 void
7420 initialize_tracepoint (void)
7421 {
7422   /* Start with the default size.  */
7423   init_trace_buffer (DEFAULT_TRACE_BUFFER_SIZE);
7424
7425   /* Wire trace state variable 1 to be the timestamp.  This will be
7426      uploaded to GDB upon connection and become one of its trace state
7427      variables.  (In case you're wondering, if GDB already has a trace
7428      variable numbered 1, it will be renumbered.)  */
7429   create_trace_state_variable (1, 0);
7430   set_trace_state_variable_name (1, "trace_timestamp");
7431   set_trace_state_variable_getter (1, get_timestamp);
7432
7433 #ifdef IN_PROCESS_AGENT
7434   {
7435     int pagesize;
7436     size_t jump_pad_size;
7437
7438     pagesize = sysconf (_SC_PAGE_SIZE);
7439     if (pagesize == -1)
7440       perror_with_name ("sysconf");
7441
7442 #define SCRATCH_BUFFER_NPAGES 20
7443
7444     jump_pad_size = pagesize * SCRATCH_BUFFER_NPAGES;
7445
7446     gdb_tp_heap_buffer = (char *) xmalloc (5 * 1024 * 1024);
7447     gdb_jump_pad_buffer = (char *) alloc_jump_pad_buffer (jump_pad_size);
7448     if (gdb_jump_pad_buffer == NULL)
7449       perror_with_name ("mmap");
7450     gdb_jump_pad_buffer_end = gdb_jump_pad_buffer + jump_pad_size;
7451   }
7452
7453   gdb_trampoline_buffer = gdb_trampoline_buffer_end = 0;
7454
7455   /* It's not a fatal error for something to go wrong with trampoline
7456      buffer setup, but it can be mysterious, so create a channel to
7457      report back on what went wrong, using a fixed size since we may
7458      not be able to allocate space later when the problem occurs.  */
7459   gdb_trampoline_buffer_error = (char *) xmalloc (IPA_BUFSIZ);
7460
7461   strcpy (gdb_trampoline_buffer_error, "No errors reported");
7462
7463   initialize_low_tracepoint ();
7464 #endif
7465 }