28 #define TRACE_WRITE_R_BLOCK(writer, buf, size) \ 29 writer->ops->frame_ops->write_r_block ((writer), (buf), (size)) 30 #define TRACE_WRITE_M_BLOCK_HEADER(writer, addr, size) \ 31 writer->ops->frame_ops->write_m_block_header ((writer), (addr), \ 33 #define TRACE_WRITE_M_BLOCK_MEMORY(writer, buf, size) \ 34 writer->ops->frame_ops->write_m_block_memory ((writer), (buf), \ 36 #define TRACE_WRITE_V_BLOCK(writer, num, val) \ 37 writer->ops->frame_ops->write_v_block ((writer), (num), (val)) 64 #define MAX_TRACE_UPLOAD 2000 73 error (
_(
"Target failed to save trace data to '%s'."),
84 writer->
ops->
start (writer, filename);
111 for (utsv = uploaded_tsvs; utsv; utsv = utsv->
next)
118 for (utp = uploaded_tps; utp; utp = utp->
next)
121 for (utp = uploaded_tps; utp; utp = utp->
next)
145 error (
_(
"Failure to get requested trace buffer data"));
192 error (
_(
"Failure to get requested trace buffer data"));
206 error (
_(
"Failure to get requested trace" 221 error (
_(
"Failure to get requested trace" 231 mlen = (
unsigned short)
241 for (j = 0; j < mlen; )
243 unsigned int read_length;
248 read_length = mlen - j;
254 error (
_(
"Failure to get requested" 255 " trace buffer data"));
261 gotten += read_length;
275 error (
_(
"Failure to get requested" 276 " trace buffer data"));
289 error (
_(
"Unknown block type '%c' (0x%x) in" 305 writer->
ops->
end (writer);
311 int target_does_save = 0;
313 char *filename = NULL;
315 int generate_ctf = 0;
326 if (strcmp (*
argv,
"-r") == 0)
327 target_does_save = 1;
328 else if (strcmp (*
argv,
"-ctf") == 0)
330 else if (**
argv ==
'-')
346 trace_save (filename, writer, target_does_save);
350 generate_ctf ?
"directory" :
"file", filename);
365 trace_save (filename, writer, target_does_save);
380 trace_save (dirname, writer, target_does_save);
401 if (tp == NULL || tp->
loc == NULL)
407 warning (
_(
"Tracepoint %d has multiple " 408 "locations, cannot infer $pc"),
415 warning (
_(
"Tracepoint %d does while-stepping, " 502 Save the trace data to a file.\n\ 503 Use the '-ctf' option to save the data to CTF format.\n\ 504 Use the '-r' option to direct the target to save directly to the file,\n\ 505 using its own filesystem."));
void error_no_arg(const char *why)
struct gdbarch * target_gdbarch(void)
#define target_upload_trace_state_variables(utsvp)
const struct trace_file_write_ops * ops
void warning(const char *fmt,...)
void(* write_status)(struct trace_file_writer *self, struct trace_status *ts)
void free_uploaded_tps(struct uploaded_tp **utpp)
#define target_get_raw_trace_data(buf, offset, len)
#define TRACE_WRITE_M_BLOCK_HEADER(writer, addr, size)
static int tracefile_has_registers(struct target_ops *ops)
static int tracefile_has_stack(struct target_ops *ops)
const breakpoint_ops * ops
int gdbarch_num_regs(struct gdbarch *gdbarch)
struct tracepoint * get_tracepoint(int num)
void(* start)(struct trace_file_writer *self, const char *name)
#define target_get_tracepoint_status(tp, utp)
void free_uploaded_tsvs(struct uploaded_tsv **utsvp)
void(* write_regblock_type)(struct trace_file_writer *self, int size)
void printf_filtered(const char *format,...)
const struct trace_frame_write_ops * frame_ops
void _initialize_tracefile(void)
struct trace_status * current_trace_status(void)
void trace_save_ctf(const char *dirname, int target_does_save)
struct uploaded_tsv * next
static ULONGEST extract_unsigned_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
void(* end)(struct trace_file_writer *self)
#define TRACE_WRITE_V_BLOCK(writer, num, val)
struct uploaded_tp * next
static int tracefile_has_all_memory(struct target_ops *ops)
enum bfd_endian gdbarch_byte_order(struct gdbarch *gdbarch)
void init_tracefile_ops(struct target_ops *ops)
int get_traceframe_number(void)
void(* write_uploaded_tsv)(struct trace_file_writer *self, struct uploaded_tsv *tsv)
struct cleanup * make_cleanup(make_cleanup_ftype *function, void *arg)
#define TRACE_WRITE_R_BLOCK(writer, buf, size)
static int tracefile_thread_alive(struct target_ops *ops, ptid_t ptid)
static void trace_save(const char *filename, struct trace_file_writer *writer, int target_does_save)
#define target_get_trace_status(ts)
int get_tracepoint_number(void)
void tracefile_fetch_registers(struct regcache *regcache, int regno)
void(* write_header)(struct trace_file_writer *self)
void(* dtor)(struct trace_file_writer *self)
static int tracefile_get_trace_status(struct target_ops *self, struct trace_status *ts)
#define TRACE_WRITE_M_BLOCK_MEMORY(writer, buf, size)
void(* write_definition_end)(struct trace_file_writer *self)
struct trace_file_writer * ctf_trace_file_writer_new(void)
static LONGEST extract_signed_integer(const gdb_byte *addr, int len, enum bfd_endian byte_order)
void regcache_raw_supply(struct regcache *regcache, int regnum, const void *buf)
void(* start)(struct trace_file_writer *self, uint16_t tpnum)
void(* write_tdesc)(struct trace_file_writer *self)
void trace_save_tfile(const char *filename, int target_does_save)
unsigned long long ULONGEST
static void trace_file_writer_xfree(void *arg)
void(* end)(struct trace_file_writer *self)
struct trace_file_writer * tfile_trace_file_writer_new(void)
void(* write_uploaded_tp)(struct trace_file_writer *self, struct uploaded_tp *tp)
struct cmd_list_element * add_com(const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc)
void(* write_trace_buffer)(struct trace_file_writer *self, gdb_byte *buf, LONGEST len)
void gdbarch_guess_tracepoint_registers(struct gdbarch *gdbarch, struct regcache *regcache, CORE_ADDR addr)
void error(const char *fmt,...)
static int tracefile_has_memory(struct target_ops *ops)
int(* target_save)(struct trace_file_writer *self, const char *name)
static void tsave_command(const char *args, int from_tty)
void do_cleanups(struct cleanup *old_chain)
#define target_upload_tracepoints(utpp)