diff options
-rw-r--r-- | gdb/ChangeLog | 7 | ||||
-rw-r--r-- | gdb/gdbserver/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/gdbserver/server.c | 55 | ||||
-rw-r--r-- | gdb/nat/linux-btrace.c | 3 | ||||
-rw-r--r-- | gdb/x86-linux-nat.c | 19 |
5 files changed, 53 insertions, 39 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 31d5334..3ff2ccf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,12 @@ 2018-02-09 Markus Metzger <markus.t.metzger@intel.com> + * 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. + +2018-02-09 Markus Metzger <markus.t.metzger@intel.com> + * nat/linux-btrace.c: Include scoped_fd.h and scoped_mmap.h. (perf_event_pt_event_type): Use gdb_file_up. (linux_enable_bts, linux_enable_pt): Use gdb::unique_xmalloc_ptr, 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; } diff --git a/gdb/nat/linux-btrace.c b/gdb/nat/linux-btrace.c index 354094f..2b37e41 100644 --- a/gdb/nat/linux-btrace.c +++ b/gdb/nat/linux-btrace.c @@ -909,6 +909,9 @@ linux_enable_btrace (ptid_t ptid, const struct btrace_config *conf) break; } + if (tinfo == NULL) + error (_("Unknown error.")); + return tinfo; } diff --git a/gdb/x86-linux-nat.c b/gdb/x86-linux-nat.c index 46bb6a4..75f68de 100644 --- a/gdb/x86-linux-nat.c +++ b/gdb/x86-linux-nat.c @@ -216,14 +216,17 @@ static struct btrace_target_info * x86_linux_enable_btrace (struct target_ops *self, ptid_t ptid, const struct btrace_config *conf) { - struct btrace_target_info *tinfo; - - errno = 0; - tinfo = linux_enable_btrace (ptid, conf); - - if (tinfo == NULL) - error (_("Could not enable branch tracing for %s: %s."), - target_pid_to_str (ptid), safe_strerror (errno)); + struct btrace_target_info *tinfo = nullptr; + TRY + { + tinfo = linux_enable_btrace (ptid, conf); + } + CATCH (exception, RETURN_MASK_ERROR) + { + error (_("Could not enable branch tracing for %s: %s"), + target_pid_to_str (ptid), exception.message); + } + END_CATCH return tinfo; } |