aboutsummaryrefslogtreecommitdiff
path: root/gdb/mi
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2017-10-10 16:45:51 +0100
committerPedro Alves <palves@redhat.com>2017-10-10 17:01:25 +0100
commit65630365f7d073430e62b4fe65f34dcdc0a4b05e (patch)
treea719688b221a7f234a045feb5a7fcee83ed93d95 /gdb/mi
parentbf4692711232eb96cd840f96d88897a2746d8190 (diff)
downloadbinutils-65630365f7d073430e62b4fe65f34dcdc0a4b05e.zip
binutils-65630365f7d073430e62b4fe65f34dcdc0a4b05e.tar.gz
binutils-65630365f7d073430e62b4fe65f34dcdc0a4b05e.tar.bz2
Eliminate catch_exceptions/catch_exceptions_with_msg
This patch gets rid of catch_exceptions / catch_exceptions_with_msg. The latter is done mostly by getting rid of the three remaining vestigial libgdb wrapper functions, which are really pointless nowadays. This results in a good number of simplifications. (I checked that Insight doesn't use those functions.) The gdb.mi/mi-pthreads.exp change is necessary because this actually fixes a bug, IMO -- the patch stops MI's -thread-select causing output on the CLI stream. I.e., before: -thread-select 123456789 &"Thread ID 123456789 not known.\n" ^error,msg="Thread ID 123456789 not known." (gdb) After: -thread-select 123456789 ^error,msg="Thread ID 123456789 not known." (gdb) gdb/ChangeLog 2017-10-10 Pedro Alves <palves@redhat.com> Tom Tromey <tom@tromey.com> * breakpoint.c (struct captured_breakpoint_query_args) (do_captured_breakpoint_query, gdb_breakpoint_query): Delete. (print_breakpoint): New. * breakpoint.h (print_breakpoint): Declare. * common/common-exceptions.h (enum return_reason): Remove references to catch_exceptions. * exceptions.c (catch_exceptions, catch_exceptions_with_msg): Delete. * exceptions.h (catch_exceptions_ftype, catch_exceptions) (catch_exception_ftype, catch_exceptions_with_msg): Delete. * gdb.h: Delete. * gdbthread.h (thread_select): Declare. * mi/mi-cmd-break.c: Don't include gdb.h. (breakpoint_notify): Use print_breakpoint. * mi/mi-cmd-catch.c: Don't include gdb.h. * mi/mi-interp.c: Don't include gdb.h. (mi_print_breakpoint_for_event): New. (mi_breakpoint_created, mi_breakpoint_modified): Use mi_print_breakpoint_for_event. * mi/mi-main.c: Don't include gdb.h. (mi_cmd_thread_select): Parse the global thread ID here. Use thread_select instead of gdb_thread_select. (mi_cmd_thread_list_ids): Output "thread-ids" tuple here instead of using gdb_list_thread_ids. * remote-fileio.c (do_remote_fileio_request): Change type. Reply FILEIO_ENOSYS here. (remote_fileio_request): Use TRY/CATCH instead of catch_exceptions. * symfile-mem.c (struct symbol_file_add_from_memory_args) (symbol_file_add_from_memory_wrapper): Delete. (add_vsyscall_page): Use TRY/CATCH instead of catch_exceptions. * thread.c: Don't include gdb.h. (do_captured_list_thread_ids, gdb_list_thread_ids): Delete. (thread_alive): Use thread_select. (do_captured_thread_select): Delete, parts salvaged as ... (thread_select): ... this new function. (gdb_thread_select): Delete. gdb/testsuite/ChangeLog 2017-10-10 Pedro Alves <palves@redhat.com> * gdb.mi/mi-pthreads.exp (check_mi_thread_command_set): Don't expect CLI output.
Diffstat (limited to 'gdb/mi')
-rw-r--r--gdb/mi/mi-cmd-break.c13
-rw-r--r--gdb/mi/mi-cmd-catch.c1
-rw-r--r--gdb/mi/mi-interp.c74
-rw-r--r--gdb/mi/mi-main.c49
4 files changed, 73 insertions, 64 deletions
diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c
index 6519e29..833bdc0 100644
--- a/gdb/mi/mi-cmd-break.c
+++ b/gdb/mi/mi-cmd-break.c
@@ -24,7 +24,6 @@
#include "mi-out.h"
#include "breakpoint.h"
#include "mi-getopt.h"
-#include "gdb.h"
#include "observer.h"
#include "mi-main.h"
#include "mi-cmd-break.h"
@@ -53,7 +52,17 @@ static void
breakpoint_notify (struct breakpoint *b)
{
if (mi_can_breakpoint_notify)
- gdb_breakpoint_query (current_uiout, b->number, NULL);
+ {
+ TRY
+ {
+ print_breakpoint (b);
+ }
+ CATCH (ex, RETURN_MASK_ALL)
+ {
+ exception_print (gdb_stderr, ex);
+ }
+ END_CATCH
+ }
}
enum bp_type
diff --git a/gdb/mi/mi-cmd-catch.c b/gdb/mi/mi-cmd-catch.c
index 0e1fb7e..9c103d2 100644
--- a/gdb/mi/mi-cmd-catch.c
+++ b/gdb/mi/mi-cmd-catch.c
@@ -21,7 +21,6 @@
#include "defs.h"
#include "arch-utils.h"
#include "breakpoint.h"
-#include "gdb.h"
#include "ada-lang.h"
#include "mi-cmds.h"
#include "mi-getopt.h"
diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c
index 714bb4b..d845a9c 100644
--- a/gdb/mi/mi-interp.c
+++ b/gdb/mi/mi-interp.c
@@ -33,7 +33,6 @@
#include "observer.h"
#include "gdbthread.h"
#include "solist.h"
-#include "gdb.h"
#include "objfiles.h"
#include "tracepoint.h"
#include "cli-out.h"
@@ -828,6 +827,38 @@ mi_tsv_modified (const struct trace_state_variable *tsv)
}
}
+/* Print breakpoint BP on MI's event channel. */
+
+static void
+mi_print_breakpoint_for_event (struct mi_interp *mi, breakpoint *bp)
+{
+ ui_out *mi_uiout = interp_ui_out (mi);
+
+ /* We want the output from print_breakpoint to go to
+ mi->event_channel. One approach would be to just call
+ print_breakpoint, and then use mi_out_put to send the current
+ content of mi_uiout into mi->event_channel. However, that will
+ break if anything is output to mi_uiout prior to calling the
+ breakpoint_created notifications. So, we use
+ ui_out_redirect. */
+ mi_uiout->redirect (mi->event_channel);
+
+ TRY
+ {
+ scoped_restore restore_uiout
+ = make_scoped_restore (&current_uiout, mi_uiout);
+
+ print_breakpoint (bp);
+ }
+ CATCH (ex, RETURN_MASK_ALL)
+ {
+ exception_print (gdb_stderr, ex);
+ }
+ END_CATCH
+
+ mi_uiout->redirect (NULL);
+}
+
/* Emit notification about a created breakpoint. */
static void
@@ -842,36 +873,16 @@ mi_breakpoint_created (struct breakpoint *b)
SWITCH_THRU_ALL_UIS ()
{
struct mi_interp *mi = as_mi_interp (top_level_interpreter ());
- struct ui_out *mi_uiout;
if (mi == NULL)
continue;
- mi_uiout = interp_ui_out (top_level_interpreter ());
-
target_terminal::scoped_restore_terminal_state term_state;
target_terminal::ours_for_output ();
fprintf_unfiltered (mi->event_channel,
"breakpoint-created");
- /* We want the output from gdb_breakpoint_query to go to
- mi->event_channel. One approach would be to just call
- gdb_breakpoint_query, and then use mi_out_put to send the current
- content of mi_uiout into mi->event_channel. However, that will
- break if anything is output to mi_uiout prior to calling the
- breakpoint_created notifications. So, we use
- ui_out_redirect. */
- mi_uiout->redirect (mi->event_channel);
- TRY
- {
- gdb_breakpoint_query (mi_uiout, b->number, NULL);
- }
- CATCH (e, RETURN_MASK_ERROR)
- {
- }
- END_CATCH
-
- mi_uiout->redirect (NULL);
+ mi_print_breakpoint_for_event (mi, b);
gdb_flush (mi->event_channel);
}
@@ -927,24 +938,7 @@ mi_breakpoint_modified (struct breakpoint *b)
target_terminal::ours_for_output ();
fprintf_unfiltered (mi->event_channel,
"breakpoint-modified");
- /* We want the output from gdb_breakpoint_query to go to
- mi->event_channel. One approach would be to just call
- gdb_breakpoint_query, and then use mi_out_put to send the current
- content of mi_uiout into mi->event_channel. However, that will
- break if anything is output to mi_uiout prior to calling the
- breakpoint_created notifications. So, we use
- ui_out_redirect. */
- mi->mi_uiout->redirect (mi->event_channel);
- TRY
- {
- gdb_breakpoint_query (mi->mi_uiout, b->number, NULL);
- }
- CATCH (e, RETURN_MASK_ERROR)
- {
- }
- END_CATCH
-
- mi->mi_uiout->redirect (NULL);
+ mi_print_breakpoint_for_event (mi, b);
gdb_flush (mi->event_channel);
}
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index b9d3cba..5057f94 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -38,7 +38,6 @@
#include "gdbcore.h" /* For write_memory(). */
#include "value.h"
#include "regcache.h"
-#include "gdb.h"
#include "frame.h"
#include "mi-main.h"
#include "mi-common.h"
@@ -555,21 +554,17 @@ mi_cmd_target_flash_erase (const char *command, char **argv, int argc)
void
mi_cmd_thread_select (const char *command, char **argv, int argc)
{
- enum gdb_rc rc;
- char *mi_error_message;
- ptid_t previous_ptid = inferior_ptid;
-
if (argc != 1)
error (_("-thread-select: USAGE: threadnum."));
- rc = gdb_thread_select (current_uiout, argv[0], &mi_error_message);
+ int num = value_as_long (parse_and_eval (argv[0]));
+ thread_info *thr = find_thread_global_id (num);
+ if (thr == NULL)
+ error (_("Thread ID %d not known."), num);
- /* If thread switch did not succeed don't notify or print. */
- if (rc == GDB_RC_FAIL)
- {
- make_cleanup (xfree, mi_error_message);
- error ("%s", mi_error_message);
- }
+ ptid_t previous_ptid = inferior_ptid;
+
+ thread_select (argv[0], thr);
print_selected_thread_frame (current_uiout,
USER_SELECTED_THREAD | USER_SELECTED_FRAME);
@@ -585,19 +580,31 @@ mi_cmd_thread_select (const char *command, char **argv, int argc)
void
mi_cmd_thread_list_ids (const char *command, char **argv, int argc)
{
- enum gdb_rc rc;
- char *mi_error_message;
-
if (argc != 0)
error (_("-thread-list-ids: No arguments required."));
- rc = gdb_list_thread_ids (current_uiout, &mi_error_message);
+ int num = 0;
+ int current_thread = -1;
- if (rc == GDB_RC_FAIL)
- {
- make_cleanup (xfree, mi_error_message);
- error ("%s", mi_error_message);
- }
+ update_thread_list ();
+
+ {
+ ui_out_emit_tuple tuple_emitter (current_uiout, "thread-ids");
+
+ struct thread_info *tp;
+ ALL_NON_EXITED_THREADS (tp)
+ {
+ if (tp->ptid == inferior_ptid)
+ current_thread = tp->global_num;
+
+ num++;
+ current_uiout->field_int ("thread-id", tp->global_num);
+ }
+ }
+
+ if (current_thread != -1)
+ current_uiout->field_int ("current-thread-id", current_thread);
+ current_uiout->field_int ("number-of-threads", num);
}
void