diff options
author | Pedro Alves <palves@redhat.com> | 2011-02-14 11:13:12 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-02-14 11:13:12 +0000 |
commit | b3b9301ef4f284b2f2f3dd276cf63600507fe47a (patch) | |
tree | 9bd1640020d2fdb0b3e05644c08fbbf7341e7cfb /gdb/remote.c | |
parent | 4e07d55ffbd3d926ab776b2ce3fd13e96d214269 (diff) | |
download | gdb-b3b9301ef4f284b2f2f3dd276cf63600507fe47a.zip gdb-b3b9301ef4f284b2f2f3dd276cf63600507fe47a.tar.gz gdb-b3b9301ef4f284b2f2f3dd276cf63600507fe47a.tar.bz2 |
gdb/
* target.h (struct traceframe_info): Forward declare.
(enum target_object): Add TARGET_OBJECT_TRACEFRAME_INFO.
(struct target_ops) <to_traceframe_info>: New field.
(target_traceframe_info): New.
* target.c (update_current_target): Inherit and default
to_traceframe_info.
* remote.c (PACKET_qXfer_traceframe_info): New.
(remote_protocol_features): Register qXfer:traceframe-info:read.
(remote_xfer_partial): Handle TARGET_OBJECT_TRACEFRAME_INFO.
(remote_traceframe_info): New.
(init_remote_ops): Install it.
(_initialize_remote): Install "set/show remote traceframe-info"
commands.
* tracepoint.h (parse_traceframe_info): Declare.
* tracepoint.c (struct mem_range): New.
(mem_range_s): New typedef.
(struct traceframe_info): New.
(traceframe_info): New global.
(free_traceframe_info): New function.
(clear_traceframe_info): New function.
(start_tracing, tfind_1, set_traceframe_number): Clear traceframe
info.
(build_traceframe_info): New function.
(tfile_traceframe_info): New function.
(init_tfile_ops): Install tfile_traceframe_info.
(traceframe_info_start_memory, free_result): New functions.
(memory_attributes, traceframe_info_elements): New globals.
(parse_traceframe_info, get_traceframe_info): New functions.
* features/traceframe-info.dtd: New file.
* Makefile.in (XMLFILES): Add traceframe-info.dtd.
gdb/gdbserver/
* server.c (handle_qxfer_traceframe_info): New.
(qxfer_packets): Register "traceframe-info".
(handle_query): Report support for qXfer:traceframe-info:read+.
* tracepoint.c (match_blocktype): New.
(traceframe_find_block_type): Rename to ...
(traceframe_walk_blocks): ... this. Add callback filter argument,
and use it.
(traceframe_find_block_type): New, reimplemented on top of
traceframe_walk_blocks.
(build_traceframe_info_xml): New.
(traceframe_read_info): New.
* server.h (traceframe_read_info): Declare.
gdb/doc/
* gdb.texinfo (Remote Configuration): Mention set/show remote
traceframe-info.
(Tools/Packages Optional for Building GDB): Mention that expat is
used for traceframe info.
(Remote Protocol) <Menu>: Add "Traceframe Info Format".
(General Query Packets) <qSupported>: Describe the
qXfer:traceframe-info:read feature.
(qXfer::read): Describe qXfer:traceframe-info:read.
(Traceframe Info Format): New section.
Diffstat (limited to 'gdb/remote.c')
-rw-r--r-- | gdb/remote.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gdb/remote.c b/gdb/remote.c index c79f6e2..da04932 100644 --- a/gdb/remote.c +++ b/gdb/remote.c @@ -1205,6 +1205,7 @@ enum { PACKET_qXfer_osdata, PACKET_qXfer_threads, PACKET_qXfer_statictrace_read, + PACKET_qXfer_traceframe_info, PACKET_qGetTIBAddr, PACKET_qGetTLSAddr, PACKET_qSupported, @@ -3683,6 +3684,8 @@ static struct protocol_feature remote_protocol_features[] = { PACKET_qXfer_osdata }, { "qXfer:threads:read", PACKET_DISABLE, remote_supported_packet, PACKET_qXfer_threads }, + { "qXfer:traceframe-info:read", PACKET_DISABLE, remote_supported_packet, + PACKET_qXfer_traceframe_info }, { "QPassSignals", PACKET_DISABLE, remote_supported_packet, PACKET_QPassSignals }, { "QStartNoAckMode", PACKET_DISABLE, remote_supported_packet, @@ -8211,6 +8214,11 @@ remote_xfer_partial (struct target_ops *ops, enum target_object object, return remote_read_qxfer (ops, "threads", annex, readbuf, offset, len, &remote_protocol_packets[PACKET_qXfer_threads]); + case TARGET_OBJECT_TRACEFRAME_INFO: + gdb_assert (annex == NULL); + return remote_read_qxfer + (ops, "traceframe-info", annex, readbuf, offset, len, + &remote_protocol_packets[PACKET_qXfer_traceframe_info]); default: return -1; } @@ -10157,6 +10165,26 @@ remote_set_circular_trace_buffer (int val) error (_("Bogus reply from target: %s"), reply); } +static struct traceframe_info * +remote_traceframe_info (void) +{ + char *text; + + text = target_read_stralloc (¤t_target, + TARGET_OBJECT_TRACEFRAME_INFO, NULL); + if (text != NULL) + { + struct traceframe_info *info; + struct cleanup *back_to = make_cleanup (xfree, text); + + info = parse_traceframe_info (text); + do_cleanups (back_to); + return info; + } + + return NULL; +} + static void init_remote_ops (void) { @@ -10248,6 +10276,7 @@ Specify the serial device it is connected to\n\ = remote_static_tracepoint_marker_at; remote_ops.to_static_tracepoint_markers_by_strid = remote_static_tracepoint_markers_by_strid; + remote_ops.to_traceframe_info = remote_traceframe_info; } /* Set up the extended remote vector by making a copy of the standard @@ -10670,6 +10699,10 @@ Show the maximum size of the address (in bits) in a memory packet."), NULL, add_packet_config_cmd (&remote_protocol_packets[PACKET_qXfer_siginfo_write], "qXfer:siginfo:write", "write-siginfo-object", 0); + add_packet_config_cmd + (&remote_protocol_packets[PACKET_qXfer_traceframe_info], + "qXfer:trace-frame-info:read", "traceframe-info", 0); + add_packet_config_cmd (&remote_protocol_packets[PACKET_qGetTLSAddr], "qGetTLSAddr", "get-thread-local-storage-address", 0); |