diff options
author | Markus Metzger <markus.t.metzger@intel.com> | 2018-01-19 09:41:42 +0100 |
---|---|---|
committer | Markus Metzger <markus.t.metzger@intel.com> | 2018-02-09 14:03:19 +0100 |
commit | 9ee23a853c18da3c83530c7957464bc6b6e9fb16 (patch) | |
tree | cc521ddfe1933136fba498948eb2729ee48a9f55 /gdb/gdbserver | |
parent | 5c3284c1ec2edc28b0697532fd094d93d5ecf31b (diff) | |
download | gdb-9ee23a853c18da3c83530c7957464bc6b6e9fb16.zip gdb-9ee23a853c18da3c83530c7957464bc6b6e9fb16.tar.gz gdb-9ee23a853c18da3c83530c7957464bc6b6e9fb16.tar.bz2 |
btrace, gdbserver: use exceptions to convey btrace enable/disable errors
Change error reporting to use exceptions and be prepared to catch them in
gdbserver. We use the exception message in our error reply to GDB.
This may remove some detail from the error message in the native case since
errno is no longer printed. Later patches will improve that.
We're still using error strings on the RSP level. This patch does not affect
the interoperability of older/newer GDB/gdbserver.
gdbserver/
* server.c (handle_btrace_enable_bts, handle_btrace_enable_pt)
(handle_btrace_disable): Change return type to void. Use exceptions
to report errors.
(handle_btrace_general_set): Catch exception and copy message to
return message.
gdb/
* nat/linux-btrace.c (linux_enable_btrace): Throw exception if enabling
btrace failed.
* x86-linux-nat.c (x86_linux_enable_btrace): Catch btrace enabling
exception and use message in own exception.
Diffstat (limited to 'gdb/gdbserver')
-rw-r--r-- | gdb/gdbserver/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/gdbserver/server.c | 55 |
2 files changed, 32 insertions, 31 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index b80d820..1b8d6f6 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,11 @@ +2018-02-09 Markus Metzger <markus.t.metzger@intel.com> + + * server.c (handle_btrace_enable_bts, handle_btrace_enable_pt) + (handle_btrace_disable): Change return type to void. Use exceptions + to report errors. + (handle_btrace_general_set): Catch exception and copy message to + return message. + 2018-02-08 Tom Tromey <tom@tromey.com> * linux-low.c (install_software_single_step_breakpoints): Use diff --git a/gdb/gdbserver/server.c b/gdb/gdbserver/server.c index 9d12ce6..5ce6281 100644 --- a/gdb/gdbserver/server.c +++ b/gdb/gdbserver/server.c @@ -380,50 +380,41 @@ write_qxfer_response (char *buf, const gdb_byte *data, int len, int is_more) /* Handle btrace enabling in BTS format. */ -static const char * +static void handle_btrace_enable_bts (struct thread_info *thread) { if (thread->btrace != NULL) - return "E.Btrace already enabled."; + error (_("Btrace already enabled.")); current_btrace_conf.format = BTRACE_FORMAT_BTS; thread->btrace = target_enable_btrace (thread->id, ¤t_btrace_conf); - if (thread->btrace == NULL) - return "E.Could not enable btrace."; - - return NULL; } /* Handle btrace enabling in Intel Processor Trace format. */ -static const char * +static void handle_btrace_enable_pt (struct thread_info *thread) { if (thread->btrace != NULL) - return "E.Btrace already enabled."; + error (_("Btrace already enabled.")); current_btrace_conf.format = BTRACE_FORMAT_PT; thread->btrace = target_enable_btrace (thread->id, ¤t_btrace_conf); - if (thread->btrace == NULL) - return "E.Could not enable btrace."; - - return NULL; } /* Handle btrace disabling. */ -static const char * +static void handle_btrace_disable (struct thread_info *thread) { if (thread->btrace == NULL) - return "E.Branch tracing not enabled."; + error (_("Branch tracing not enabled.")); if (target_disable_btrace (thread->btrace) != 0) - return "E.Could not disable branch tracing."; + error (_("Could not disable branch tracing.")); thread->btrace = NULL; - return NULL; } /* Handle the "Qbtrace" packet. */ @@ -432,7 +423,6 @@ static int handle_btrace_general_set (char *own_buf) { struct thread_info *thread; - const char *err; char *op; if (!startswith (own_buf, "Qbtrace:")) @@ -454,21 +444,24 @@ handle_btrace_general_set (char *own_buf) return -1; } - err = NULL; - - if (strcmp (op, "bts") == 0) - err = handle_btrace_enable_bts (thread); - else if (strcmp (op, "pt") == 0) - err = handle_btrace_enable_pt (thread); - else if (strcmp (op, "off") == 0) - err = handle_btrace_disable (thread); - else - err = "E.Bad Qbtrace operation. Use bts, pt, or off."; + TRY + { + if (strcmp (op, "bts") == 0) + handle_btrace_enable_bts (thread); + else if (strcmp (op, "pt") == 0) + handle_btrace_enable_pt (thread); + else if (strcmp (op, "off") == 0) + handle_btrace_disable (thread); + else + error (_("Bad Qbtrace operation. Use bts, pt, or off.")); - if (err != 0) - strcpy (own_buf, err); - else - write_ok (own_buf); + write_ok (own_buf); + } + CATCH (exception, RETURN_MASK_ERROR) + { + sprintf (own_buf, "E.%s", exception.message); + } + END_CATCH return 1; } |