gdbserver: do not report btrace support if target does not announce it
Commit Message
Gdbserver unconditionally reports support for btrace packets. Do not
report the support, if the underlying target does not say it supports
it. Otherwise GDB would query the server with btrace-related packets
unnecessarily.
---
gdbserver/linux-low.cc | 6 ++++++
gdbserver/linux-low.h | 2 ++
gdbserver/server.cc | 3 ++-
gdbserver/target.cc | 6 ++++++
gdbserver/target.h | 3 +++
5 files changed, 19 insertions(+), 1 deletion(-)
Comments
>>>>> Tankut Baris Aktemur via Gdb-patches <gdb-patches@sourceware.org> writes:
> Gdbserver unconditionally reports support for btrace packets. Do not
> report the support, if the underlying target does not say it supports
> it. Otherwise GDB would query the server with btrace-related packets
> unnecessarily.
Looks good to me. Thank you.
Tom
@@ -6712,6 +6712,12 @@ linux_process_target::qxfer_libraries_svr4 (const char *annex,
#ifdef HAVE_LINUX_BTRACE
+bool
+linux_process_target::supports_btrace ()
+{
+ return true;
+}
+
btrace_target_info *
linux_process_target::enable_btrace (thread_info *tp,
const btrace_config *conf)
@@ -275,6 +275,8 @@ class linux_process_target : public process_stratum_target
bool supports_agent () override;
#ifdef HAVE_LINUX_BTRACE
+ bool supports_btrace () override;
+
btrace_target_info *enable_btrace (thread_info *tp,
const btrace_config *conf) override;
@@ -2475,7 +2475,8 @@ handle_query (char *own_buf, int packet_len, int *new_packet_len_p)
if (target_supports_agent ())
strcat (own_buf, ";QAgent+");
- supported_btrace_packets (own_buf);
+ if (the_target->supports_btrace ())
+ supported_btrace_packets (own_buf);
if (target_supports_stopped_by_sw_breakpoint ())
strcat (own_buf, ";swbreak+");
@@ -694,6 +694,12 @@ process_stratum_target::supports_agent ()
return false;
}
+bool
+process_stratum_target::supports_btrace ()
+{
+ return false;
+}
+
btrace_target_info *
process_stratum_target::enable_btrace (thread_info *tp,
const btrace_config *conf)
@@ -388,6 +388,9 @@ class process_stratum_target
/* Return true if target supports debugging agent. */
virtual bool supports_agent ();
+ /* Return true if target supports btrace. */
+ virtual bool supports_btrace ();
+
/* Enable branch tracing for TP based on CONF and allocate a branch trace
target information struct for reading and for disabling branch trace. */
virtual btrace_target_info *enable_btrace (thread_info *tp,