gdb.trace: Save XML target description in tfile.
gdb/ChangeLog: * ctf.c (ctf_write_tdesc): New function. (ctf_write_ops): Wire in ctf_write_tdesc. * tracefile-tfile.c (tfile_write_tdesc): New function. (tfile_write_ops): Wire in tfile_write_tdesc. * tracefile.c (trace_save): Call write_tdesc method. * tracefile.h (struct trace_file_write_ops): Add write_tdesc method. * xml-tdesc.c (target_fetch_description_xml): New function. * xml-tdesc.h: Add target_fetch_description_xml prototype.
This commit is contained in:
parent
9f6a71b4bf
commit
18d3cec54e
7 changed files with 101 additions and 0 deletions
|
@ -1,3 +1,14 @@
|
|||
2016-02-10 Marcin Kościelnicki <koriakin@0x04.net>
|
||||
|
||||
* ctf.c (ctf_write_tdesc): New function.
|
||||
(ctf_write_ops): Wire in ctf_write_tdesc.
|
||||
* tracefile-tfile.c (tfile_write_tdesc): New function.
|
||||
(tfile_write_ops): Wire in tfile_write_tdesc.
|
||||
* tracefile.c (trace_save): Call write_tdesc method.
|
||||
* tracefile.h (struct trace_file_write_ops): Add write_tdesc method.
|
||||
* xml-tdesc.c (target_fetch_description_xml): New function.
|
||||
* xml-tdesc.h: Add target_fetch_description_xml prototype.
|
||||
|
||||
2016-02-10 Simon Marchi <simon.marchi@ericsson.com>
|
||||
|
||||
* arm-tdep.c (arm_copy_extra_ld_st): Fix "unpriveleged" typo.
|
||||
|
|
10
gdb/ctf.c
10
gdb/ctf.c
|
@ -616,6 +616,15 @@ ctf_write_uploaded_tp (struct trace_file_writer *self,
|
|||
|
||||
}
|
||||
|
||||
/* This is the implementation of trace_file_write_ops method
|
||||
write_tdesc. */
|
||||
|
||||
static void
|
||||
ctf_write_tdesc (struct trace_file_writer *self)
|
||||
{
|
||||
/* Nothing so far. */
|
||||
}
|
||||
|
||||
/* This is the implementation of trace_file_write_ops method
|
||||
write_definition_end. */
|
||||
|
||||
|
@ -799,6 +808,7 @@ static const struct trace_file_write_ops ctf_write_ops =
|
|||
ctf_write_status,
|
||||
ctf_write_uploaded_tsv,
|
||||
ctf_write_uploaded_tp,
|
||||
ctf_write_tdesc,
|
||||
ctf_write_definition_end,
|
||||
NULL,
|
||||
&ctf_write_frame_ops,
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "completer.h"
|
||||
#include "filenames.h"
|
||||
#include "remote.h"
|
||||
#include "xml-tdesc.h"
|
||||
|
||||
#ifndef O_LARGEFILE
|
||||
#define O_LARGEFILE 0
|
||||
|
@ -263,6 +264,42 @@ tfile_write_uploaded_tp (struct trace_file_writer *self,
|
|||
sizeof (utp->traceframe_usage)));
|
||||
}
|
||||
|
||||
/* This is the implementation of trace_file_write_ops method
|
||||
write_tdesc. */
|
||||
|
||||
static void
|
||||
tfile_write_tdesc (struct trace_file_writer *self)
|
||||
{
|
||||
struct tfile_trace_file_writer *writer
|
||||
= (struct tfile_trace_file_writer *) self;
|
||||
char *tdesc = target_fetch_description_xml (¤t_target);
|
||||
char *ptr = tdesc;
|
||||
char *next;
|
||||
|
||||
if (tdesc == NULL)
|
||||
return;
|
||||
|
||||
/* Write tdesc line by line, prefixing each line with "tdesc ". */
|
||||
while (ptr != NULL)
|
||||
{
|
||||
next = strchr (ptr, '\n');
|
||||
if (next != NULL)
|
||||
{
|
||||
fprintf (writer->fp, "tdesc %.*s\n", (int) (next - ptr), ptr);
|
||||
/* Skip the \n. */
|
||||
next++;
|
||||
}
|
||||
else if (*ptr != '\0')
|
||||
{
|
||||
/* Last line, doesn't have a newline. */
|
||||
fprintf (writer->fp, "tdesc %s\n", ptr);
|
||||
}
|
||||
ptr = next;
|
||||
}
|
||||
|
||||
xfree (tdesc);
|
||||
}
|
||||
|
||||
/* This is the implementation of trace_file_write_ops method
|
||||
write_definition_end. */
|
||||
|
||||
|
@ -316,6 +353,7 @@ static const struct trace_file_write_ops tfile_write_ops =
|
|||
tfile_write_status,
|
||||
tfile_write_uploaded_tsv,
|
||||
tfile_write_uploaded_tp,
|
||||
tfile_write_tdesc,
|
||||
tfile_write_definition_end,
|
||||
tfile_write_raw_data,
|
||||
NULL,
|
||||
|
|
|
@ -90,6 +90,9 @@ trace_save (const char *filename, struct trace_file_writer *writer,
|
|||
/* Write out the size of a register block. */
|
||||
writer->ops->write_regblock_type (writer, trace_regblock_size);
|
||||
|
||||
/* Write out the target description info. */
|
||||
writer->ops->write_tdesc (writer);
|
||||
|
||||
/* Write out status of the tracing run (aka "tstatus" info). */
|
||||
writer->ops->write_status (writer, ts);
|
||||
|
||||
|
|
|
@ -84,6 +84,9 @@ struct trace_file_write_ops
|
|||
void (*write_uploaded_tp) (struct trace_file_writer *self,
|
||||
struct uploaded_tp *tp);
|
||||
|
||||
/* Write target description. */
|
||||
void (*write_tdesc) (struct trace_file_writer *self);
|
||||
|
||||
/* Write to mark the end of the definition part. */
|
||||
void (*write_definition_end) (struct trace_file_writer *self);
|
||||
|
||||
|
|
|
@ -630,3 +630,33 @@ target_read_description_xml (struct target_ops *ops)
|
|||
|
||||
return tdesc;
|
||||
}
|
||||
|
||||
/* Fetches an XML target description using OPS, processing
|
||||
includes, but not parsing it. Used to dump whole tdesc
|
||||
as a single XML file. */
|
||||
|
||||
char *
|
||||
target_fetch_description_xml (struct target_ops *ops)
|
||||
{
|
||||
struct target_desc *tdesc;
|
||||
char *tdesc_str;
|
||||
char *expanded_text;
|
||||
struct cleanup *back_to;
|
||||
|
||||
tdesc_str = fetch_available_features_from_target ("target.xml", ops);
|
||||
if (tdesc_str == NULL)
|
||||
return NULL;
|
||||
|
||||
back_to = make_cleanup (xfree, tdesc_str);
|
||||
expanded_text = xml_process_xincludes (_("target description"),
|
||||
tdesc_str,
|
||||
fetch_available_features_from_target, ops, 0);
|
||||
do_cleanups (back_to);
|
||||
if (expanded_text == NULL)
|
||||
{
|
||||
warning (_("Could not load XML target description; ignoring"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return expanded_text;
|
||||
}
|
||||
|
|
|
@ -31,3 +31,9 @@ const struct target_desc *file_read_description_xml (const char *filename);
|
|||
parsed description. */
|
||||
|
||||
const struct target_desc *target_read_description_xml (struct target_ops *);
|
||||
|
||||
/* Fetches an XML target description using OPS, processing
|
||||
includes, but not parsing it. Used to dump whole tdesc
|
||||
as a single XML file. */
|
||||
|
||||
char *target_fetch_description_xml (struct target_ops *ops);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue