From 28a93511837e1a3c26732fef8687fe5fe48735ec Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Wed, 26 Jun 2013 08:01:57 +0000 Subject: [PATCH] gdb/ 2013-06-26 Pedro Alves Yao Qi * ctf.c (ctf_traceframe_info): Push trace state variables present in the trace data into the traceframe info object. * breakpoint.c (DEF_VEC_I): Remove. * common/filestuff.c (DEF_VEC_I): Likewise. * dwarf2loc.c (DEF_VEC_I): Likewise. * mi/mi-main.c (DEF_VEC_I): Likewise. * common/gdb_vecs.h (DEF_VEC_I): Define vector for int. * features/traceframe-info.dtd: Add tvar element and its attributes. * tracepoint.c (free_traceframe_info): Free vector 'tvars'. (build_traceframe_info): Push trace state variables present in the trace data into the traceframe info object. (traceframe_info_start_tvar): New function. (tvar_attributes): New. (traceframe_info_children): Add "tvar" element. * tracepoint.h (struct traceframe_info) : New field. * NEWS: Mention the change in GDB and GDBserver. gdb/doc: 2013-06-26 Pedro Alves * gdb.texinfo (Traceframe Info Format): Document tvar element and its attributes. gdb/gdbserver: 2013-06-26 Pedro Alves * tracepoint.c (build_traceframe_info_xml): Output trace state variables present in the trace buffer. --- gdb/ChangeLog | 22 ++++++++++++++++++++++ gdb/NEWS | 7 +++++++ gdb/breakpoint.c | 2 -- gdb/common/filestuff.c | 2 -- gdb/common/gdb_vecs.h | 2 ++ gdb/ctf.c | 12 ++++++++++++ gdb/doc/ChangeLog | 5 +++++ gdb/doc/gdb.texinfo | 12 +++++++++++- gdb/dwarf2loc.c | 2 -- gdb/features/traceframe-info.dtd | 5 ++++- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/tracepoint.c | 7 +++++++ gdb/mi/mi-main.c | 2 -- gdb/tracepoint.c | 30 ++++++++++++++++++++++++++++++ gdb/tracepoint.h | 3 +++ 15 files changed, 108 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1397e73128c..0b0ff73f4bf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,25 @@ +2013-06-26 Pedro Alves + Yao Qi + + * ctf.c (ctf_traceframe_info): Push trace state variables + present in the trace data into the traceframe info object. + * breakpoint.c (DEF_VEC_I): Remove. + * common/filestuff.c (DEF_VEC_I): Likewise. + * dwarf2loc.c (DEF_VEC_I): Likewise. + * mi/mi-main.c (DEF_VEC_I): Likewise. + * common/gdb_vecs.h (DEF_VEC_I): Define vector for int. + * features/traceframe-info.dtd: Add tvar element and its + attributes. + * tracepoint.c (free_traceframe_info): Free vector 'tvars'. + (build_traceframe_info): Push trace state variables present in + the trace data into the traceframe info object. + (traceframe_info_start_tvar): New function. + (tvar_attributes): New. + (traceframe_info_children): Add "tvar" element. + * tracepoint.h (struct traceframe_info) : New field. + + * NEWS: Mention the change in GDB and GDBserver. + 2013-06-26 Pedro Alves Yao Qi diff --git a/gdb/NEWS b/gdb/NEWS index b86e8d8a5fd..ab8f2833cfd 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -92,6 +92,9 @@ show range-stepping the number of control packets from/to GDB. See "New remote packets" below. +* GDB now understands the element 'tvar' in the XML traceframe info. + It has the id of the collected trace state variables. + * New remote packets vCont;r @@ -113,6 +116,10 @@ qXfer:libraries-svr4:read's annex ** GDBserver now supports target-assisted range stepping. Currently enabled on x86/x86_64 GNU/Linux targets. + ** GDBserver now adds element 'tvar' in the XML in the reply to + 'qXfer:traceframe-info:read'. It has the id of the collected + trace state variables. + *** Changes in GDB 7.6 * Target record has been renamed to record-full. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index ccd05d9795f..af6a42a2edc 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -5799,8 +5799,6 @@ bptype_string (enum bptype type) return bptypes[(int) type].description; } -DEF_VEC_I(int); - /* For MI, output a field named 'thread-groups' with a list as the value. For CLI, prefix the list with the string 'inf'. */ diff --git a/gdb/common/filestuff.c b/gdb/common/filestuff.c index daf96d9655c..7d1a69a5a79 100644 --- a/gdb/common/filestuff.c +++ b/gdb/common/filestuff.c @@ -157,8 +157,6 @@ fdwalk (int (*func) (void *, int), void *arg) don't use a hashtab because libiberty isn't linked into gdbserver; and anyway we don't expect there to be many open fds. */ -DEF_VEC_I (int); - static VEC (int) *open_fds; /* An fdwalk callback function used by notice_open_fds. It puts the diff --git a/gdb/common/gdb_vecs.h b/gdb/common/gdb_vecs.h index 1b05b0c8f12..7df3001c9b3 100644 --- a/gdb/common/gdb_vecs.h +++ b/gdb/common/gdb_vecs.h @@ -29,6 +29,8 @@ DEF_VEC_P (char_ptr); DEF_VEC_P (const_char_ptr); +DEF_VEC_I (int); + extern void free_char_ptr_vec (VEC (char_ptr) *char_ptr_vec); extern struct cleanup * diff --git a/gdb/ctf.c b/gdb/ctf.c index 278f9503107..23ee36d440a 100644 --- a/gdb/ctf.c +++ b/gdb/ctf.c @@ -1778,6 +1778,18 @@ ctf_traceframe_info (void) def = bt_ctf_get_field (event, scope, "length"); r->length = (uint16_t) bt_ctf_get_uint64 (def); } + else if (strcmp (name, "tsv") == 0) + { + int vnum; + const struct bt_definition *scope + = bt_ctf_get_top_level_scope (event, + BT_EVENT_FIELDS); + const struct bt_definition *def; + + def = bt_ctf_get_field (event, scope, "num"); + vnum = (int) bt_ctf_get_int64 (def); + VEC_safe_push (int, info->tvars, vnum); + } else { warning (_("Unhandled trace block type (%s) " diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 41ccea2ee82..5090ae916ea 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,8 @@ +2013-06-26 Pedro Alves + + * gdb.texinfo (Traceframe Info Format): Document tvar element + and its attributes. + 2013-06-25 Yao Qi * gdbint.texinfo (Testsuite): Document 'gdb,predefined_tsv'. diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index d25cdae3a58..39927044229 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -41789,17 +41789,27 @@ A region of collected memory starting at @var{addr} and extending for @end smallexample +@item +A block indicating trace state variable numbered @var{number} has been +collected: + +@smallexample + +@end smallexample + @end itemize The formal DTD for the traceframe info format is given below: @smallexample - + + + @end smallexample @node Branch Trace Format diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index bb600d1243c..02afcdf339b 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -42,8 +42,6 @@ #include "gdb_string.h" #include "gdb_assert.h" -DEF_VEC_I(int); - extern int dwarf2_always_disassemble; static void dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, diff --git a/gdb/features/traceframe-info.dtd b/gdb/features/traceframe-info.dtd index 0da2bec1d83..b8111223c1b 100644 --- a/gdb/features/traceframe-info.dtd +++ b/gdb/features/traceframe-info.dtd @@ -5,9 +5,12 @@ notice and this notice are preserved. --> - + + + + diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index 31e71c4f60a..ec79b1a8771 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2013-06-26 Pedro Alves + + * tracepoint.c (build_traceframe_info_xml): Output trace state + variables present in the trace buffer. + 2013-06-24 Tom Tromey * Makefile.in (version.c): Use bfd/version.h, common/version.in, diff --git a/gdb/gdbserver/tracepoint.c b/gdb/gdbserver/tracepoint.c index d237e7f18b5..6492b5aec9f 100644 --- a/gdb/gdbserver/tracepoint.c +++ b/gdb/gdbserver/tracepoint.c @@ -5401,6 +5401,13 @@ build_traceframe_info_xml (char blocktype, unsigned char *dataptr, void *data) break; } case 'V': + { + int vnum; + + memcpy (&vnum, dataptr, sizeof (vnum)); + buffer_xml_printf (buffer, "\n", vnum); + break; + } case 'R': case 'S': { diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 127f6ff82ec..430d530ae12 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -513,8 +513,6 @@ mi_cmd_thread_info (char *command, char **argv, int argc) print_thread_info (current_uiout, argv[0], -1); } -DEF_VEC_I(int); - struct collect_cores_data { int pid; diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 61e9efad36e..62b1a2c5da4 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -235,6 +235,7 @@ free_traceframe_info (struct traceframe_info *info) if (info != NULL) { VEC_free (mem_range_s, info->memory); + VEC_free (int, info->tvars); xfree (info); } @@ -5224,6 +5225,12 @@ build_traceframe_info (char blocktype, void *data) break; } case 'V': + { + int vnum; + + tfile_read ((gdb_byte *) &vnum, 4); + VEC_safe_push (int, info->tvars, vnum); + } case 'R': case 'S': { @@ -5581,6 +5588,21 @@ traceframe_info_start_memory (struct gdb_xml_parser *parser, r->length = *length_p; } +/* Handle the start of a element. */ + +static void +traceframe_info_start_tvar (struct gdb_xml_parser *parser, + const struct gdb_xml_element *element, + void *user_data, + VEC(gdb_xml_value_s) *attributes) +{ + struct traceframe_info *info = user_data; + const char *id_attrib = xml_find_attribute (attributes, "id")->value; + int id = gdb_xml_parse_ulongest (parser, id_attrib); + + VEC_safe_push (int, info->tvars, id); +} + /* Discard the constructed trace frame info (if an error occurs). */ static void @@ -5599,10 +5621,18 @@ static const struct gdb_xml_attribute memory_attributes[] = { { NULL, GDB_XML_AF_NONE, NULL, NULL } }; +static const struct gdb_xml_attribute tvar_attributes[] = { + { "id", GDB_XML_AF_NONE, NULL, NULL }, + { NULL, GDB_XML_AF_NONE, NULL, NULL } +}; + static const struct gdb_xml_element traceframe_info_children[] = { { "memory", memory_attributes, NULL, GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL, traceframe_info_start_memory, NULL }, + { "tvar", tvar_attributes, NULL, + GDB_XML_EF_REPEATABLE | GDB_XML_EF_OPTIONAL, + traceframe_info_start_tvar, NULL }, { NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL } }; diff --git a/gdb/tracepoint.h b/gdb/tracepoint.h index 3b09ca8964c..350ab5ec519 100644 --- a/gdb/tracepoint.h +++ b/gdb/tracepoint.h @@ -30,6 +30,9 @@ struct traceframe_info { /* Collected memory. */ VEC(mem_range_s) *memory; + + /* Collected trace state variables. */ + VEC(int) *tvars; }; /* A trace state variable is a value managed by a target being -- 2.30.2