--- a/ctf.c +++ b/ctf.c @@ -616,6 +616,17 @@ ctf_write_uploaded_tp (struct trace_file } /* This is the implementation of trace_file_write_ops method + write_default_collect. */ + +static void +ctf_write_default_collect (struct trace_file_writer *self, + char *collect) +{ + /* It is not supported yet to write default collect + into CTF trace data. */ +} + +/* This is the implementation of trace_file_write_ops method write_definition_end. */ static void @@ -847,6 +858,7 @@ static const struct trace_file_write_ops ctf_write_status, ctf_write_uploaded_tsv, ctf_write_uploaded_tp, + ctf_write_default_collect, ctf_write_definition_end, NULL, &ctf_write_frame_ops, --- a/tracepoint.c +++ b/tracepoint.c @@ -3237,6 +3237,19 @@ tfile_write_uploaded_tp (struct trace_fi } /* This is the implementation of trace_file_write_ops method + write_default_collect. */ + +static void +tfile_write_default_collect (struct trace_file_writer *self, + char *collect) +{ + struct tfile_trace_file_writer *writer + = (struct tfile_trace_file_writer *) self; + + fprintf (writer->fp, "dc %s\n", collect); +} + +/* This is the implementation of trace_file_write_ops method write_definition_end. */ static void @@ -3289,6 +3302,7 @@ static const struct trace_file_write_ops tfile_write_status, tfile_write_uploaded_tsv, tfile_write_uploaded_tp, + tfile_write_default_collect, tfile_write_definition_end, tfile_write_raw_data, NULL, @@ -3378,6 +3392,8 @@ trace_save (const char *filename, struct for (utp = uploaded_tps; utp; utp = utp->next) writer->ops->write_uploaded_tp (writer, utp); + writer->ops->write_default_collect (writer, default_collect); + free_uploaded_tps (&uploaded_tps); /* Mark the end of the definition section. */ @@ -4147,7 +4163,8 @@ int trace_regblock_size; static void tfile_interp_line (char *line, struct uploaded_tp **utpp, - struct uploaded_tsv **utsvp); + struct uploaded_tsv **utsvp, + char **collectp); /* Read SIZE bytes into READBUF from the trace frame, starting at TRACE_FD's current position. Note that this call `read' @@ -4182,6 +4199,7 @@ tfile_open (char *filename, int from_tty struct trace_status *ts; struct uploaded_tp *uploaded_tps = NULL; struct uploaded_tsv *uploaded_tsvs = NULL; + char *uploaded_default_collect = NULL; target_preopen (from_tty); if (!filename) @@ -4251,7 +4269,8 @@ tfile_open (char *filename, int from_tty break; linebuf[i] = '\0'; i = 0; - tfile_interp_line (linebuf, &uploaded_tps, &uploaded_tsvs); + tfile_interp_line (linebuf, &uploaded_tps, &uploaded_tsvs, + &uploaded_default_collect); } else linebuf[i++] = byte; @@ -4289,6 +4308,8 @@ tfile_open (char *filename, int from_tty merge_uploaded_tracepoints (&uploaded_tps); + trace_set_default_collect (uploaded_default_collect); + post_create_inferior (&tfile_ops, from_tty); } @@ -4297,7 +4318,8 @@ tfile_open (char *filename, int from_tty static void tfile_interp_line (char *line, - struct uploaded_tp **utpp, struct uploaded_tsv **utsvp) + struct uploaded_tp **utpp, struct uploaded_tsv **utsvp, + char **collectp) { char *p = line; @@ -4321,6 +4343,11 @@ tfile_interp_line (char *line, p += strlen ("tsv "); parse_tsv_definition (p, utsvp); } + else if (strncmp (p, "dc ", strlen ("dc ")) == 0) + { + p += strlen ("dc "); + *collectp = xstrdup (p); + } else warning (_("Ignoring trace file definition \"%s\""), line); } --- a/tracepoint.h +++ b/tracepoint.h @@ -296,6 +296,10 @@ struct trace_file_write_ops void (*write_uploaded_tp) (struct trace_file_writer *self, struct uploaded_tp *tp); + /* Write the tracepoint default collect. */ + void (*write_default_collect) (struct trace_file_writer *self, + char *collect); + /* Write to mark the end of the definition part. */ void (*write_definition_end) (struct trace_file_writer *self);