diff options
author | Pedro Alves <palves@redhat.com> | 2017-10-10 16:45:51 +0100 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2017-10-10 17:01:25 +0100 |
commit | 65630365f7d073430e62b4fe65f34dcdc0a4b05e (patch) | |
tree | a719688b221a7f234a045feb5a7fcee83ed93d95 /gdb/mi | |
parent | bf4692711232eb96cd840f96d88897a2746d8190 (diff) | |
download | gdb-65630365f7d073430e62b4fe65f34dcdc0a4b05e.zip gdb-65630365f7d073430e62b4fe65f34dcdc0a4b05e.tar.gz gdb-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.c | 13 | ||||
-rw-r--r-- | gdb/mi/mi-cmd-catch.c | 1 | ||||
-rw-r--r-- | gdb/mi/mi-interp.c | 74 | ||||
-rw-r--r-- | gdb/mi/mi-main.c | 49 |
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 (¤t_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 |