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