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