65 #define CTF_MAGIC 0xC1FC1FC1 66 #define CTF_SAVE_MAJOR 1 67 #define CTF_SAVE_MINOR 8 69 #define CTF_METADATA_NAME "metadata" 70 #define CTF_DATASTREAM_NAME "datastream" 74 #define CTF_EVENT_ID_REGISTER 0 75 #define CTF_EVENT_ID_TSV 1 76 #define CTF_EVENT_ID_MEMORY 2 77 #define CTF_EVENT_ID_FRAME 3 78 #define CTF_EVENT_ID_STATUS 4 79 #define CTF_EVENT_ID_TSV_DEF 5 80 #define CTF_EVENT_ID_TP_DEF 6 104 const char *format, ...)
109 const
char *format, ...)
113 va_start (args, format);
114 if (vfprintf (handler->metadata_fd, format, args) < 0)
115 error (
_(
"Unable to write metadata file (%s)"),
128 error (
_(
"Unable to write file for saving trace data (%s)"),
139 #define ctf_save_write_uint32(HANDLER, U32) \ 140 ctf_save_write (HANDLER, (gdb_byte *) &U32, 4) 145 #define ctf_save_write_int32(HANDLER, INT32) \ 146 ctf_save_write ((HANDLER), (gdb_byte *) &(INT32), 4) 157 || offset <= handler->content_size + handler->
packet_start);
160 error (
_(
"Unable to seek file for saving trace data (%s)"),
175 size_t size,
size_t align_size)
208 "typealias integer { size = 8; align = 8; " 209 "signed = false; encoding = ascii;}" 212 "typealias integer { size = 8; align = 8; " 216 "typealias integer { size = 16; align = 16;" 217 "signed = false; } := uint16_t;\n");
219 "typealias integer { size = 32; align = 32;" 220 "signed = false; } := uint32_t;\n");
222 "typealias integer { size = 64; align = 64;" 223 "signed = false; base = hex;}" 226 "typealias integer { size = 32; align = 32;" 227 "signed = true; } := int32_t;\n");
229 "typealias integer { size = 64; align = 64;" 230 "signed = true; } := int64_t;\n");
232 "typealias string { encoding = ascii;" 239 #define HOST_ENDIANNESS "be" 241 #define HOST_ENDIANNESS "le" 248 " byte_order = %s;\n" 249 " packet.header := struct {\n" 255 " packet.context := struct {\n" 256 " uint32_t content_size;\n" 257 " uint32_t packet_size;\n" 260 " event.header := struct {\n" 316 mode_t hmode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH;
319 if (mkdir (dirname, hmode) && errno != EEXIST)
320 error (
_(
"Unable to open directory '%s' for saving trace data (%s)"),
329 error (
_(
"Unable to open file '%s' for saving trace data (%s)"),
337 error (
_(
"Unable to open file '%s' for saving trace data (%s)"),
354 "event {\n\tname = \"memory\";\n\tid = %u;\n" 355 "\tfields := struct { \n" 356 "\t\tuint64_t address;\n" 357 "\t\tuint16_t length;\n" 358 "\t\tuint8_t contents[length];\n" 364 "event {\n\tname = \"tsv\";\n\tid = %u;\n" 365 "\tfields := struct { \n" 366 "\t\tuint64_t val;\n" 367 "\t\tuint32_t num;\n" 373 "event {\n\tname = \"frame\";\n\tid = %u;\n" 374 "\tfields := struct { \n" 380 "event {\n\tname = \"tsv_def\";\n" 381 "\tid = %u;\n\tfields := struct { \n" 382 "\t\tint64_t initial_value;\n" 383 "\t\tint32_t number;\n" 384 "\t\tint32_t builtin;\n" 391 "event {\n\tname = \"tp_def\";\n" 392 "\tid = %u;\n\tfields := struct { \n" 393 "\t\tuint64_t addr;\n" 394 "\t\tuint64_t traceframe_usage;\n" 395 "\t\tint32_t number;\n" 396 "\t\tint32_t enabled;\n" 397 "\t\tint32_t step;\n" 398 "\t\tint32_t pass;\n" 399 "\t\tint32_t hit_count;\n" 400 "\t\tint32_t type;\n" 403 "\t\tuint32_t action_num;\n" 404 "\t\tchars actions[action_num];\n" 406 "\t\tuint32_t step_action_num;\n" 407 "\t\tchars step_actions[step_action_num];\n" 409 "\t\tchars at_string;\n" 410 "\t\tchars cond_string;\n" 412 "\t\tuint32_t cmd_num;\n" 413 "\t\tchars cmd_strings[cmd_num];\n" 421 self->ops->frame_ops->start (
self, 0);
437 "event {\n\tname = \"register\";\n\tid = %u;\n" 438 "\tfields := struct { \n" 439 "\t\tascii contents[%d];\n" 458 "event {\n\tname = \"status\";\n\tid = %u;\n" 459 "\tfields := struct { \n" 460 "\t\tint32_t stop_reason;\n" 461 "\t\tint32_t stopping_tracepoint;\n" 462 "\t\tint32_t traceframe_count;\n" 463 "\t\tint32_t traceframes_created;\n" 464 "\t\tint32_t buffer_free;\n" 465 "\t\tint32_t buffer_size;\n" 466 "\t\tint32_t disconnected_tracing;\n" 467 "\t\tint32_t circular_buffer;\n" 514 if (tsv->
name != NULL)
567 if (tp->
cond != NULL)
618 self->ops->frame_ops->end (
self);
682 uint64_t addr, uint16_t length)
717 int32_t num, uint64_t val)
811 #if HAVE_LIBBABELTRACE 817 #include <babeltrace/babeltrace.h> 818 #include <babeltrace/ctf/events.h> 819 #include <babeltrace/ctf/iterator.h> 822 static int handle_id = -1;
823 static struct bt_context *ctx = NULL;
824 static struct bt_ctf_iter *ctf_iter = NULL;
826 static struct bt_iter_pos *start_pos;
829 static char *trace_dirname;
838 if (ctf_iter != NULL)
840 bt_ctf_iter_destroy (ctf_iter);
845 bt_context_put (ctx);
853 ctf_open_dir (
const char *dirname)
855 struct bt_iter_pos begin_pos;
856 unsigned int count, i;
857 struct bt_ctf_event_decl *
const *list;
859 ctx = bt_context_create ();
861 error (
_(
"Unable to create bt_context"));
862 handle_id = bt_context_add_trace (ctx, dirname,
"ctf", NULL, NULL, NULL);
866 error (
_(
"Unable to use libbabeltrace on directory \"%s\""),
870 begin_pos.type = BT_SEEK_BEGIN;
871 ctf_iter = bt_ctf_iter_create (ctx, &begin_pos, NULL);
872 if (ctf_iter == NULL)
875 error (
_(
"Unable to create bt_iterator"));
881 bt_ctf_get_event_decl_list (handle_id, ctx, &list, &count);
882 for (i = 0; i < count; i++)
883 if (strcmp (
"register", bt_ctf_get_decl_event_name (list[i])) == 0)
885 const struct bt_ctf_field_decl *
const *field_list;
886 const struct bt_declaration *decl;
888 bt_ctf_get_decl_fields (list[i], BT_EVENT_FIELDS, &field_list,
893 bt_ctf_get_decl_field_name (field_list[0])));
894 decl = bt_ctf_get_decl_from_field_decl (field_list[0]);
901 #define SET_INT32_FIELD(EVENT, SCOPE, VAR, FIELD) \ 902 (VAR)->FIELD = (int) bt_ctf_get_int64 (bt_ctf_get_field ((EVENT), \ 906 #define SET_ENUM_FIELD(EVENT, SCOPE, VAR, TYPE, FIELD) \ 907 (VAR)->FIELD = (TYPE) bt_ctf_get_int64 (bt_ctf_get_field ((EVENT), \ 915 ctf_read_status (
struct bt_ctf_event *event,
struct trace_status *ts)
917 const struct bt_definition *scope
918 = bt_ctf_get_top_level_scope (event, BT_EVENT_FIELDS);
921 SET_INT32_FIELD (event, scope, ts, stopping_tracepoint);
922 SET_INT32_FIELD (event, scope, ts, traceframe_count);
923 SET_INT32_FIELD (event, scope, ts, traceframes_created);
925 SET_INT32_FIELD (event, scope, ts, buffer_size);
926 SET_INT32_FIELD (event, scope, ts, disconnected_tracing);
927 SET_INT32_FIELD (event, scope, ts, circular_buffer);
929 bt_iter_next (bt_ctf_get_iter (ctf_iter));
942 struct bt_ctf_event *event;
943 const struct bt_definition *scope;
944 const struct bt_definition *def;
948 event = bt_ctf_iter_read_event (ctf_iter);
949 scope = bt_ctf_get_top_level_scope (event,
950 BT_STREAM_EVENT_HEADER);
951 event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope,
956 scope = bt_ctf_get_top_level_scope (event,
959 def = bt_ctf_get_field (event, scope,
"number");
963 def = bt_ctf_get_field (event, scope,
"builtin");
964 utsv->
builtin = (int32_t) bt_ctf_get_int64 (def);
965 def = bt_ctf_get_field (event, scope,
"initial_value");
968 def = bt_ctf_get_field (event, scope,
"name");
969 utsv->
name = xstrdup (bt_ctf_get_string (def));
971 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
980 #define SET_ARRAY_FIELD(EVENT, SCOPE, VAR, NUM, ARRAY) \ 984 const struct bt_definition *def; \ 986 u32 = (uint32_t) bt_ctf_get_uint64 (bt_ctf_get_field ((EVENT), \ 989 def = bt_ctf_get_field ((EVENT), (SCOPE), #ARRAY); \ 990 for (i = 0; i < u32; i++) \ 992 const struct bt_definition *element \ 993 = bt_ctf_get_index ((EVENT), def, i); \ 995 VEC_safe_push (char_ptr, (VAR)->ARRAY, \ 996 xstrdup (bt_ctf_get_string (element))); \ 1004 #define SET_STRING_FIELD(EVENT, SCOPE, VAR, FIELD) \ 1007 const char *p = bt_ctf_get_string (bt_ctf_get_field ((EVENT), \ 1011 if (strlen (p) > 0) \ 1012 (VAR)->FIELD = xstrdup (p); \ 1014 (VAR)->FIELD = NULL; \ 1028 struct bt_ctf_event *event;
1029 const struct bt_definition *scope;
1035 event = bt_ctf_iter_read_event (ctf_iter);
1036 scope = bt_ctf_get_top_level_scope (event,
1037 BT_STREAM_EVENT_HEADER);
1038 u32 = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope,
1043 scope = bt_ctf_get_top_level_scope (event,
1045 int32 = (int32_t) bt_ctf_get_int64 (bt_ctf_get_field (event,
1048 u64 = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope,
1052 SET_INT32_FIELD (event, scope, utp,
enabled);
1053 SET_INT32_FIELD (event, scope, utp,
step);
1054 SET_INT32_FIELD (event, scope, utp,
pass);
1055 SET_INT32_FIELD (event, scope, utp,
hit_count);
1056 SET_ENUM_FIELD (event, scope, utp,
enum bptype,
type);
1059 SET_ARRAY_FIELD (event, scope, utp, cmd_num, cmd_strings);
1061 SET_ARRAY_FIELD (event, scope, utp, action_num, actions);
1063 SET_ARRAY_FIELD (event, scope, utp, step_action_num,
1066 SET_STRING_FIELD(event, scope, utp,
at_string);
1069 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1080 ctf_open (
const char *dirname,
int from_tty)
1082 struct bt_ctf_event *event;
1084 const struct bt_definition *scope;
1089 error (
_(
"No CTF directory specified."));
1091 ctf_open_dir (dirname);
1097 event = bt_ctf_iter_read_event (ctf_iter);
1098 scope = bt_ctf_get_top_level_scope (event, BT_STREAM_EVENT_HEADER);
1099 event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope,
"id"));
1101 error (
_(
"Wrong event id of the first event"));
1103 bt_iter_next (bt_ctf_get_iter (ctf_iter));
1104 event = bt_ctf_iter_read_event (ctf_iter);
1105 scope = bt_ctf_get_top_level_scope (event, BT_STREAM_EVENT_HEADER);
1106 event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope,
"id"));
1108 error (
_(
"Wrong event id of the second event"));
1111 ctf_read_tsv (&uploaded_tsvs);
1113 ctf_read_tp (&uploaded_tps);
1115 event = bt_ctf_iter_read_event (ctf_iter);
1120 scope = bt_ctf_get_top_level_scope (event,
1121 BT_STREAM_EVENT_HEADER);
1122 event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event,
1125 error (
_(
"Wrong event id of the first event of the second packet"));
1128 start_pos = bt_iter_get_pos (bt_ctf_get_iter (ctf_iter));
1129 gdb_assert (start_pos->type == BT_SEEK_RESTORE);
1131 trace_dirname = xstrdup (dirname);
1153 xfree (trace_dirname);
1154 trace_dirname = NULL;
1182 struct bt_ctf_event *
event = NULL;
1183 struct bt_iter_pos *pos;
1192 pos = bt_iter_get_pos (bt_ctf_get_iter (ctf_iter));
1198 struct bt_ctf_event *event1;
1200 event1 = bt_ctf_iter_read_event (ctf_iter);
1202 name = bt_ctf_event_name (event1);
1204 if (
name == NULL || strcmp (
name,
"frame") == 0)
1206 else if (strcmp (
name,
"register") == 0)
1212 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1217 bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), pos);
1221 int offset, regsize, regn;
1222 const struct bt_definition *scope
1223 = bt_ctf_get_top_level_scope (event,
1225 const struct bt_definition *array
1226 = bt_ctf_get_field (event, scope,
"contents");
1245 else if (regno == -1)
1265 const char *annex,
gdb_byte *readbuf,
1273 if (readbuf == NULL)
1274 error (
_(
"ctf_xfer_partial: trace file is read-only"));
1278 struct bt_iter_pos *pos;
1286 pos = bt_iter_get_pos (bt_ctf_get_iter (ctf_iter));
1296 const struct bt_definition *scope;
1297 const struct bt_definition *def;
1298 struct bt_ctf_event *
event 1299 = bt_ctf_iter_read_event (ctf_iter);
1300 const char *
name = bt_ctf_event_name (event);
1302 if (
name == NULL || strcmp (
name,
"frame") == 0)
1304 else if (strcmp (
name,
"memory") != 0)
1306 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1312 scope = bt_ctf_get_top_level_scope (event,
1315 def = bt_ctf_get_field (event, scope,
"address");
1316 maddr = bt_ctf_get_uint64 (def);
1317 def = bt_ctf_get_field (event, scope,
"length");
1318 mlen = (uint16_t) bt_ctf_get_uint64 (def);
1326 const struct bt_definition *array
1327 = bt_ctf_get_field (event, scope,
"contents");
1333 for (k = 0; k < mlen; k++)
1335 const struct bt_definition *element
1336 = bt_ctf_get_index (event, array, k);
1338 contents[k] = (
gdb_byte) bt_ctf_get_uint64 (element);
1341 amt = (maddr + mlen) -
offset;
1345 memcpy (readbuf, &contents[
offset - maddr], amt);
1350 bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), pos);
1362 if (low_addr_available == 0 || low_addr_available > maddr)
1363 low_addr_available = maddr;
1365 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1370 bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), pos);
1375 if (
offset < low_addr_available)
1376 len = std::min (len, low_addr_available -
offset);
1403 ctf_get_trace_state_variable_value (
struct target_ops *
self,
1406 struct bt_iter_pos *pos;
1411 pos = bt_iter_get_pos (bt_ctf_get_iter (ctf_iter));
1418 struct bt_ctf_event *
event 1419 = bt_ctf_iter_read_event (ctf_iter);
1420 const char *
name = bt_ctf_event_name (event);
1422 if (
name == NULL || strcmp (
name,
"frame") == 0)
1424 else if (strcmp (
name,
"tsv") == 0)
1426 const struct bt_definition *scope;
1427 const struct bt_definition *def;
1429 scope = bt_ctf_get_top_level_scope (event,
1432 def = bt_ctf_get_field (event, scope,
"num");
1433 if (tsvnum == (int32_t) bt_ctf_get_uint64 (def))
1435 def = bt_ctf_get_field (event, scope,
"val");
1436 *val = bt_ctf_get_uint64 (def);
1442 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1447 bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), pos);
1455 ctf_get_tpnum_from_frame_event (
struct bt_ctf_event *event)
1458 const struct bt_definition *scope
1459 = bt_ctf_get_top_level_scope (event, BT_STREAM_PACKET_CONTEXT);
1461 = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope,
"tpnum"));
1469 ctf_get_traceframe_address (
void)
1471 struct bt_ctf_event *
event = NULL;
1472 struct bt_iter_pos *pos;
1476 pos = bt_iter_get_pos (bt_ctf_get_iter (ctf_iter));
1482 struct bt_ctf_event *event1;
1484 event1 = bt_ctf_iter_read_event (ctf_iter);
1486 name = bt_ctf_event_name (event1);
1490 else if (strcmp (
name,
"frame") == 0)
1496 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1502 int tpnum = ctf_get_tpnum_from_frame_event (event);
1511 bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), pos);
1536 bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), start_pos);
1540 struct bt_ctf_event *event;
1543 event = bt_ctf_iter_read_event (ctf_iter);
1545 name = bt_ctf_event_name (event);
1547 if (event == NULL ||
name == NULL)
1550 if (strcmp (
name,
"frame") == 0)
1573 == ctf_get_tpnum_from_frame_event (event)))
1578 tfaddr = ctf_get_traceframe_address ();
1579 if (tfaddr == addr1)
1583 tfaddr = ctf_get_traceframe_address ();
1584 if (addr1 <= tfaddr && tfaddr <= addr2)
1588 tfaddr = ctf_get_traceframe_address ();
1589 if (!(addr1 <= tfaddr && tfaddr <= addr2))
1600 *tpp = ctf_get_tpnum_from_frame_event (event);
1603 bt_iter_next (bt_ctf_get_iter (ctf_iter));
1610 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1623 ctf_traceframe_info (
struct target_ops *
self)
1627 struct bt_iter_pos *pos;
1631 pos = bt_iter_get_pos (bt_ctf_get_iter (ctf_iter));
1636 struct bt_ctf_event *
event 1637 = bt_ctf_iter_read_event (ctf_iter);
1639 name = bt_ctf_event_name (event);
1641 if (
name == NULL || strcmp (
name,
"register") == 0
1642 || strcmp (
name,
"frame") == 0)
1644 else if (strcmp (
name,
"memory") == 0)
1646 const struct bt_definition *scope
1647 = bt_ctf_get_top_level_scope (event,
1649 const struct bt_definition *def;
1651 def = bt_ctf_get_field (event, scope,
"address");
1652 CORE_ADDR start = bt_ctf_get_uint64 (def);
1654 def = bt_ctf_get_field (event, scope,
"length");
1655 int length = (uint16_t) bt_ctf_get_uint64 (def);
1657 info->memory.emplace_back (start, length);
1659 else if (strcmp (
name,
"tsv") == 0)
1662 const struct bt_definition *scope
1663 = bt_ctf_get_top_level_scope (event,
1665 const struct bt_definition *def;
1667 def = bt_ctf_get_field (event, scope,
"num");
1668 vnum = (int) bt_ctf_get_uint64 (def);
1669 info->tvars.push_back (vnum);
1673 warning (
_(
"Unhandled trace block type (%s) " 1674 "while building trace frame info."),
1678 if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0)
1681 while (
name != NULL && strcmp (
name,
"frame") != 0);
1684 bt_iter_set_pos (bt_ctf_get_iter (ctf_iter), pos);
1692 memset (&ctf_ops, 0,
sizeof (ctf_ops));
1695 ctf_ops.to_shortname =
"ctf";
1696 ctf_ops.to_longname =
"CTF file";
1697 ctf_ops.to_doc =
"Use a CTF directory as a target.\n\ 1698 Specify the filename of the CTF directory.";
1699 ctf_ops.to_open = ctf_open;
1700 ctf_ops.to_close = ctf_close;
1701 ctf_ops.to_fetch_registers = ctf_fetch_registers;
1702 ctf_ops.to_xfer_partial = ctf_xfer_partial;
1703 ctf_ops.to_files_info = ctf_files_info;
1704 ctf_ops.to_trace_find = ctf_trace_find;
1705 ctf_ops.to_get_trace_state_variable_value
1706 = ctf_get_trace_state_variable_value;
1707 ctf_ops.to_traceframe_info = ctf_traceframe_info;
1717 #if HAVE_LIBBABELTRACE
static void ctf_dtor(struct trace_file_writer *self)
#define CTF_EVENT_ID_MEMORY
void post_create_inferior(struct target_ops *target, int from_tty)
int ptid_get_pid(const ptid_t &ptid)
mach_port_t mach_port_t name mach_port_t mach_port_t name kern_return_t int int rusage_t pid_t pid
const struct trace_file_write_ops * ops
void warning(const char *fmt,...)
void push_target(struct target_ops *t)
void buffer_free(struct buffer *buffer)
void * memset(T *s, int c, size_t n)=delete
void internal_error(const char *file, int line, const char *fmt,...)
#define CTF_EVENT_ID_FRAME
static void ctf_write_tdesc(struct trace_file_writer *self)
static void ctf_write_uploaded_tp(struct trace_file_writer *self, struct uploaded_tp *tp)
static void ctf_write_frame_m_block_header(struct trace_file_writer *self, uint64_t addr, uint16_t length)
void filename_completer(struct cmd_list_element *ignore, completion_tracker &tracker, const char *text, const char *word)
int gdbarch_num_regs(struct gdbarch *gdbarch)
struct tracepoint * get_tracepoint(int num)
#define CTF_EVENT_ID_TSV_DEF
static void ctf_write_uploaded_tsv(struct trace_file_writer *self, struct uploaded_tsv *tsv)
ULONGEST traceframe_usage
static int ctf_save_write(struct trace_write_handler *handler, const gdb_byte *buf, size_t size)
void printf_filtered(const char *format,...)
static const struct trace_file_write_ops ctf_write_ops
static void ctf_save_next_packet(struct trace_write_handler *handler)
struct trace_status * current_trace_status(void)
static void ctf_end(struct trace_file_writer *self)
struct uploaded_tp * get_uploaded_tp(int num, ULONGEST addr, struct uploaded_tp **utpp)
struct trace_write_handler tcs
#define VEC_iterate(T, V, I, P)
struct tracepoint * get_tracepoint_by_number_on_target(int num)
#define CTF_EVENT_ID_REGISTER
static void ctf_write_status(struct trace_file_writer *self, struct trace_status *ts)
void merge_uploaded_tracepoints(struct uploaded_tp **uploaded_tps)
struct uploaded_tsv * get_uploaded_tsv(int num, struct uploaded_tsv **utsvp)
void merge_uploaded_trace_state_variables(struct uploaded_tsv **uploaded_tsvs)
static void ctf_save_metadata_header(struct trace_write_handler *handler)
void trace_reset_local_state(void)
static int ctf_save_fseek(struct trace_write_handler *handler, long offset, int whence)
enum trace_stop_reason stop_reason
ptid_t pid_to_ptid(int pid)
void init_tracefile_ops(struct target_ops *ops)
int get_traceframe_number(void)
#define CTF_EVENT_ID_STATUS
static void ctf_write_frame_end(struct trace_file_writer *self)
void add_target_with_completer(struct target_ops *t, completer_ftype *completer)
enum target_xfer_status exec_read_partial_read_only(gdb_byte *readbuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
static void ctf_write_frame_r_block(struct trace_file_writer *self, gdb_byte *buf, int32_t size)
struct thread_info * add_thread_silent(ptid_t ptid)
struct trace_file_writer base
enum target_xfer_status section_table_read_available_memory(gdb_byte *readbuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len)
#define ctf_save_write_int32(HANDLER, INT32)
#define ctf_save_write_uint32(HANDLER, U32)
#define CTF_EVENT_ID_TP_DEF
std::unique_ptr< traceframe_info > traceframe_info_up
ULONGEST align_up(ULONGEST v, int n)
void tracefile_fetch_registers(struct regcache *regcache, int regno)
enum register_status regcache_register_status(const struct regcache *regcache, int regnum)
#define CTF_METADATA_NAME
char * safe_strerror(int)
struct trace_file_writer * ctf_trace_file_writer_new(void)
void _initialize_ctf(void)
static void ctf_write_frame_v_block(struct trace_file_writer *self, int32_t num, uint64_t val)
std::string string_printf(const char *fmt,...)
static void ctf_write_definition_end(struct trace_file_writer *self)
struct inferior * current_inferior(void)
void regcache_raw_supply(struct regcache *regcache, int regnum, const void *buf)
#define CTF_DATASTREAM_NAME
unsigned long long ULONGEST
void exit_inferior_silent(int pid)
int register_size(struct gdbarch *gdbarch, int regnum)
static void ctf_write_regblock_type(struct trace_file_writer *self, int size)
static const struct trace_frame_write_ops ctf_write_frame_ops
static int ctf_target_save(struct trace_file_writer *self, const char *dirname)
static void ctf_write_frame_m_block_memory(struct trace_file_writer *self, gdb_byte *buf, uint16_t length)
static void ctf_save_write_metadata(struct trace_write_handler *handler, const char *format,...) ATTRIBUTE_PRINTF(2
void target_preopen(int from_tty)
static void ctf_write_header(struct trace_file_writer *self)
static int ctf_save_align_write(struct trace_write_handler *handler, const gdb_byte *buf, size_t size, size_t align_size)
void error(const char *fmt,...)
static void ctf_start(struct trace_file_writer *self, const char *dirname)
void inferior_appeared(struct inferior *inf, int pid)
static void ctf_write_frame_start(struct trace_file_writer *self, uint16_t tpnum)