binutils-gdb/gdb/testsuite/gdb.trace
Pedro Alves 4082afcc3d Fix several "set remote foo-packet on/off" commands.
For several RSP packets, there's a corresponding "set remote
foo-packet on/off/auto" command that one can use do bypass
auto-detection of support for the packet or feature.  However, I
noticed that setting several of these commands to 'on' or 'off'
doesn't actually have any effect.  These are, at least:

 set remote breakpoint-commands-packet
 set remote conditional-breakpoints-packet
 set remote fast-tracepoints-packet
 set remote static-tracepoints-packet
 set remote install-in-trace-packet

These are commands that control a remote protocol feature that doesn't
have a corresponding regular packet, and because of that we cache the
knowledge of the remote side support as returned by the qSupported
packet in the remote_state object.

E.g., in the case of the 'set remote breakpoint-commands-packet'
command, whether the feature is supported is recorded in the
'breakpoint_commands' field of the remote_state object.

Whether to bypass packet support auto-detection or not is controlled
by the 'detect' field of the corresponding packet's packet_config
structure.  That field is the variable associated directly with the
"set remote foo-packet" command.  Actual remote stub support for the
packet (or feature) is recorded in the 'support' field of the same
structure.

However, when the user toggles the command, the 'support' field is
also correspondingly updated to PACKET_ENABLE/DISABLE/SUPPORT_UNKNOWN,
discarding the knowledge of whether the target actually supports the
feature.  If one toggles back to 'auto', it's no big issue for real
packets, as they'll just end up re-probed the next time they might be
necessary.  But features whose support is only reported through
qSupported don't get their corresponding (manually added/maintained)
fields in remote_state objected updated.  As we lost the actual status
of the target support for the feature, GDB would need to probe the
qSupported features again, which GDB doesn't do.

But we can avoid that extra traffic, and clean things up, IMO.
Instead of going in that direction, this patch completely decouples
struct packet_config's 'detect' and 'support' fields.  E.g., when the
user does "set remote foo-packet off", instead of setting the packet
config's 'support' field to PACKET_DISABLE, the 'support' field is not
touched at all anymore.  That is, we end up respecting this simple
table:

| packet_config->detect | packet_config->support | should use packet/feature? |
|-----------------------+------------------------+----------------------------|
| auto                  | PACKET_ENABLE          | PACKET_ENABLE              |
| auto                  | PACKET_DISABLE         | PACKET_DISABLE             |
| auto                  | PACKET_UNKNOWN         | PACKET_UNKNOWN             |
| yes                   | don't care             | PACKET_ENABLE              |
| no                    | don't care             | PACKET_DISABLE             |

This is implemented by the new packet_support function.  With that, we
need to update this pattern throughout:

  if (remote_protocol_packets[PACKET_foo].support == PACKET_DISABLE)

to do this instead:

  if (packet_support (PACKET_qAttached) == PACKET_DISABLE)

where as mentioned, the packet_support function takes struct
packet_config's 'detect' field into account, like in the table above.

As when the packet is force-disabled or force-enabled, the 'support'
field is just ignored, if the command is set back to auto, we'll
resume respecting whatever the target said it supports.  IOW, the end
result is that the 'support' field always represents whether the
target actually supports the packet or not.

After all that, the manually maintained breakpoint_commands and
equivalent fields of struct remote_state can then be eliminated, with
references replaced by checking the result of calling the
packet_support function on the corresponding packet or feature.  This
required adding new PACKET_foo enum values for several features that
didn't have it yet.  (The patch does not add corresponding "set remote
foo-packet" style commands though, focusing only on bug fixing and
laying the groundwork).

Tested on x86_64 Fedora 17, native GDBserver.  The new tests all fail
without this patch.

gdb/
2014-04-25  Pedro Alves  <palves@redhat.com>

	* remote.c (struct remote_state): Remove multi_process_aware,
	non_stop_aware, cond_tracepoints, cond_breakpoints,
	breakpoint_commands, fast_tracepoints, static_tracepoints,
	install_in_trace, disconnected_tracing,
	enable_disable_tracepoints, string_tracing, and
	augmented_libraries_svr4_read fields.
	(remote_multi_process_p): Move further below in the file.
	(struct packet_config): Add comments.
	(update_packet_config): Delete function.
	(show_packet_config_cmd): Use packet_config_support.
	(add_packet_config_cmd): Use NULL as set callback.
	(packet_ok): "set remote foo-packet"-style commands no longer
	change config->supported -- adjust.
	(PACKET_ConditionalTracepoints, PACKET_ConditionalBreakpoints)
	(PACKET_BreakpointCommands, PACKET_FastTracepoints)
	(PACKET_StaticTracepoints, PACKET_InstallInTrace): Add comments.
	(PACKET_QNonStop, PACKET_multiprocess_feature)
	(PACKET_EnableDisableTracepoints_feature, PACKET_tracenz_feature)
	(PACKET_DisconnectedTracing_feature)
	(PACKET_augmented_libraries_svr4_read_feature): New enum values.
	(set_remote_protocol_packet_cmd): Delete function.
	(packet_config_support, packet_support): New functions.
	(set_remote_protocol_Z_packet_cmd): Don't call
	update_packet_config.
	(remote_query_attached, remote_pass_signals)
	(remote_program_signals, remote_threads_info)
	(remote_threads_extra_info, remote_start_remote): Use
	packet_support.
	(remote_start_remote): Use packet_config_support and
	packet_support.
	(init_all_packet_configs): Set all packets to unknown support,
	instead of calling update_packet_config.
	(remote_check_symbols): Use packet_support.
	(remote_supported_packet): Unconditionally set the packet config's
	support status.
	(remote_multi_process_feature, remote_non_stop_feature)
	(remote_cond_tracepoint_feature, remote_cond_breakpoint_feature)
	(remote_breakpoint_commands_feature)
	(remote_fast_tracepoint_feature, remote_static_tracepoint_feature)
	(remote_install_in_trace_feature)
	(remote_disconnected_tracing_feature)
	(remote_enable_disable_tracepoint_feature)
	(remote_string_tracing_feature)
	(remote_augmented_libraries_svr4_read_feature): Delete functions.
	(remote_protocol_features): Adjust to use remote_supported_packet
	for "augmented-libraries-svr4-read", "multiprocess", "QNonStop",
	"ConditionalTracepoints", "ConditionalBreakpoints",
	"BreakpointCommands", "FastTracepoints", "StaticTracepoints",
	"InstallInTrace", "DisconnectedTracing", "DisconnectedTracing",
	"EnableDisableTracepoints", and "tracenz".
	(remote_query_supported): Use packet_support.
	(remote_open_1): Adjust.
	(extended_remote_attach_1): Use packet_support.  Switch on the
	result of packet_ok instead of checking whether the packet ended
	up disabled.
	(remote_vcont_resume): Use packet_support.
	(remote_resume, remote_stop_ns, fetch_register_using_p)
	(remote_prepare_to_store, store_register_using_P)
	(check_binary_download, remote_write_bytes): Use packet_support.
	(remote_vkill): Use packet_support.  Switch on the result of
	packet_ok instead of checking whether the packet ended up
	disabled.
	(extended_remote_supports_disable_randomization): Use
	packet_support.
	(extended_remote_run): Switch on the result of packet_ok instead
	of checking whether the packet ended up disabled.
	(remote_insert_breakpoint, remote_remove_breakpoint)
	(remote_insert_watchpoint, remote_remove_watchpoint)
	(remote_insert_hw_breakpoint, remote_remove_hw_breakpoint): Use
	packet_support.
	(remote_search_memory): Use packet_config_support.
	(remote_get_thread_local_address, remote_get_tib_address)
	(remote_hostio_send_command, remote_can_execute_reverse): Use
	packet_support.
	(remote_supports_cond_tracepoints)
	(remote_supports_cond_breakpoints)
	(remote_supports_fast_tracepoints)
	(remote_supports_static_tracepoints)
	(remote_supports_install_in_trace)
	(remote_supports_enable_disable_tracepoint)
	(remote_supports_string_tracing)
	(remote_can_run_breakpoint_commands): Rewrite, checking whether
	the packet config says the feature is enabled or disabled.
	(remote_download_tracepoint, remote_trace_set_readonly_regions)
	(remote_get_trace_status): Use packet_support.
	(remote_set_disconnected_tracing): Adjust to check whether the
	feature is enabled with packet_support.
	(remote_set_trace_buffer_size, remote_use_agent)
	(remote_can_use_agent, remote_supports_btrace): Use
	packet_support.
	(remote_enable_btrace, remote_disable_btrace, remote_read_btrace):
	Use packet_config_support.
	(remote_augmented_libraries_svr4_read): Rewrite, checking whether
	the packet config says the feature is enabled or disabled.
	(set_range_stepping): Use packet_support.

gdb/testsuite/
2014-04-25  Pedro Alves  <palves@redhat.com>

	* gdb.base/cond-eval-mode.exp (warning): Move trailing \r\n to
	user.
	(top level): Test that "set remote conditional-breakpoints-packet
	off" works as intended.
	* gdb.base/dprintf.exp: Test that "set remote
	breakpoint-commands-packet off" works as intended.
	* gdb.trace/change-loc.exp (tracepoint_install_in_trace_disabled):
	New function.
	(top level): Call it.
	* gdb.trace/ftrace.exp (test_fast_tracepoints): Test that "set
	remote fast-tracepoints-packet off" works as intended.
	* gdb.trace/qtro.exp (gdb_is_target_remote): Moved ...
	* lib/gdb.exp (gdb_is_target_remote): ... here.
2014-04-25 18:07:02 +01:00
..
actions-changed.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
actions-changed.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
actions.c Ensure unreferenced static symbols aren't omitted by clang (either marking them __attribute__((used)) or making them non-static) 2014-04-24 22:33:46 -07:00
actions.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ax.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
backtrace.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
change-loc-1.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
change-loc-2.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
change-loc.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
change-loc.exp Fix several "set remote foo-packet on/off" commands. 2014-04-25 18:07:02 +01:00
change-loc.h Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
circ.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
circ.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
collection.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
collection.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
deltrace.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
disconnected-tracing.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
disconnected-tracing.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
entry-values.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
entry-values.exp Fix regression on s390x with entry-values.exp. 2014-01-22 17:02:13 +01:00
ftrace.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
ftrace.exp Fix several "set remote foo-packet on/off" commands. 2014-04-25 18:07:02 +01:00
infotrace.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
Makefile.in tracepoint->step_count fixes 2013-04-04 19:22:38 +00:00
mi-trace-frame-collected.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mi-trace-unavailable.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mi-traceframe-changed.exp Check tracefile is generated by binary execution 2014-04-22 09:57:44 +08:00
mi-tracepoint-changed.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
mi-tsv-changed.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
packetlen.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
passc-dyn.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
passcount.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
pending.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
pending.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
pendshr1.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
pendshr2.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
pr16508.exp Fix PR16508 2014-03-06 11:33:06 +08:00
qtro.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
qtro.exp Don't suppress errors inserting/removing hardware breakpoints in shared 2014-04-23 15:06:47 +01:00
range-stepping.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
range-stepping.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
read-memory.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
read-memory.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
report.exp Create inferior for ctf target. 2014-02-05 19:37:25 +08:00
save-trace.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
stap-trace.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
stap-trace.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
status-stop.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
status-stop.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
strace.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
strace.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
tfile.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
tfile.exp Check tracefile is generated by binary execution 2014-04-22 09:57:44 +08:00
tfind.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
trace-break.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
trace-break.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
trace-buffer-size.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
trace-buffer-size.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
trace-mt.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
trace-mt.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
trace-unavailable.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
tracecmd.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
tspeed.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
tspeed.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
tstatus.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
tsv.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
unavailable-dwarf-piece.c Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
unavailable-dwarf-piece.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
unavailable.cc Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
unavailable.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
while-dyn.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00
while-stepping.exp Update Copyright year range in all files maintained by GDB. 2014-01-01 07:54:24 +04:00