diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e89769a553..509545149e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,30 @@ 2005-01-13 Andrew Cagney + * breakpoint.c (gdb_breakpoint_query): Update, use + catch_exceptions_with_msg. + (do_captured_breakpoint): Add uiout parameter. + (gdb_breakpoint): Update, use catch_exceptions_with_msg. + * mi/mi-main.c (mi_cmd_thread_select): Pass mi_error_message to + gdb_thread_select. Return MI_CMD_ERROR instead of + MI_CMD_CAUGHT_ERROR. + (mi_cmd_thread_list_ids): Ditto for gdb_list_thread_ids. + (enum captured_mi_execute_command_actions): Delete + EXECUTE_COMMAND_DISPLAY_ERROR. + (captured_mi_execute_command): Delete code handling + MI_CMD_CAUGHT_ERROR. + (mi_execute_command): Don't check for + EXECUTE_COMMAND_DISPLAY_ERROR. + * mi/mi-cmd-break.c (breakpoint_notify): Update call to + gdb_breakpoint_query. + (mi_cmd_break_insert): Pass mi_error_message to gdb_breakpoint. + * mi/mi-cmds.h (enum mi_cmd_result): Delete MI_CMD_CAUGHT_ERROR. + * gdb.h (gdb_thread_select, gdb_list_thread_ids) + (gdb_breakpoint, gdb_breakpoint_query): Add error_message + parameter. + * thread.c (thread_command): Update call. + (gdb_thread_select, gdb_list_thread_ids): Update, call + catch_exceptions_with_msg. + * mi/mi-main.c (mi_execute_command): Use catch_exception, eliminate call to error_last_message. (captured_mi_execute_command): Change return type to void. diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index b05bf4ec34..822f4b76fa 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -3603,14 +3603,14 @@ do_captured_breakpoint_query (struct ui_out *uiout, void *data) } enum gdb_rc -gdb_breakpoint_query (struct ui_out *uiout, int bnum) +gdb_breakpoint_query (struct ui_out *uiout, int bnum, char **error_message) { struct captured_breakpoint_query_args args; args.bnum = bnum; /* For the moment we don't trust print_one_breakpoint() to not throw an error. */ - return catch_exceptions (uiout, do_captured_breakpoint_query, &args, - NULL, RETURN_MASK_ALL); + return catch_exceptions_with_msg (uiout, do_captured_breakpoint_query, &args, + NULL, error_message, RETURN_MASK_ALL); } /* Return non-zero if B is user settable (breakpoints, watchpoints, @@ -5334,7 +5334,7 @@ struct captured_breakpoint_args }; static int -do_captured_breakpoint (void *data) +do_captured_breakpoint (struct ui_out *uiout, void *data) { struct captured_breakpoint_args *args = data; struct symtabs_and_lines sals; @@ -5432,7 +5432,8 @@ do_captured_breakpoint (void *data) enum gdb_rc gdb_breakpoint (char *address, char *condition, int hardwareflag, int tempflag, - int thread, int ignore_count) + int thread, int ignore_count, + char **error_message) { struct captured_breakpoint_args args; args.address = address; @@ -5441,8 +5442,8 @@ gdb_breakpoint (char *address, char *condition, args.tempflag = tempflag; args.thread = thread; args.ignore_count = ignore_count; - return catch_errors (do_captured_breakpoint, &args, - NULL, RETURN_MASK_ALL); + return catch_exceptions_with_msg (uiout, do_captured_breakpoint, &args, + NULL, error_message, RETURN_MASK_ALL); } diff --git a/gdb/gdb.h b/gdb/gdb.h index 6a2eaa0ca1..0dd49e3d9b 100644 --- a/gdb/gdb.h +++ b/gdb/gdb.h @@ -29,8 +29,9 @@ struct ui_out; enum gdb_rc { /* The operation failed. The failure message can be fetched by - calling ``char *error_last_message(void)''. The value is - determined by the catch_errors() interface. */ + calling ``char *error_last_message(void)''. The value is + determined by the catch_errors() interface. The MSG parameter is + set to a freshly allocated copy of the error message. */ /* NOTE: Since ``defs.h:catch_errors()'' does not return an error / internal / quit indication it is not possible to return that here. */ @@ -46,17 +47,21 @@ enum gdb_rc { /* Print the specified breakpoint on GDB_STDOUT. (Eventually this function will ``print'' the object on ``output''). */ -enum gdb_rc gdb_breakpoint_query (struct ui_out *uiout, int bnum); +enum gdb_rc gdb_breakpoint_query (struct ui_out *uiout, int bnum, + char **error_message); /* Create a breakpoint at ADDRESS (a GDB source and line). */ enum gdb_rc gdb_breakpoint (char *address, char *condition, int hardwareflag, int tempflag, - int thread, int ignore_count); + int thread, int ignore_count, + char **error_message); /* Switch thread and print notification. */ -enum gdb_rc gdb_thread_select (struct ui_out *uiout, char *tidstr); +enum gdb_rc gdb_thread_select (struct ui_out *uiout, char *tidstr, + char **error_message); /* Print a list of known thread ids. */ -enum gdb_rc gdb_list_thread_ids (struct ui_out *uiout); +enum gdb_rc gdb_list_thread_ids (struct ui_out *uiout, + char **error_message); #endif diff --git a/gdb/mi/mi-cmd-break.c b/gdb/mi/mi-cmd-break.c index 528cd3c9d3..6406084e84 100644 --- a/gdb/mi/mi-cmd-break.c +++ b/gdb/mi/mi-cmd-break.c @@ -39,7 +39,7 @@ enum static void breakpoint_notify (int b) { - gdb_breakpoint_query (uiout, b); + gdb_breakpoint_query (uiout, b, NULL); } @@ -140,12 +140,14 @@ mi_cmd_break_insert (char *command, char **argv, int argc) case REG_BP: rc = gdb_breakpoint (address, condition, 0 /*hardwareflag */ , temp_p, - thread, ignore_count); + thread, ignore_count, + &mi_error_message); break; case HW_BP: rc = gdb_breakpoint (address, condition, 1 /*hardwareflag */ , temp_p, - thread, ignore_count); + thread, ignore_count, + &mi_error_message); break; #if 0 case REGEXP_BP: @@ -163,7 +165,7 @@ mi_cmd_break_insert (char *command, char **argv, int argc) deprecated_set_gdb_event_hooks (old_hooks); if (rc == GDB_RC_FAIL) - return MI_CMD_CAUGHT_ERROR; + return MI_CMD_ERROR; else return MI_CMD_DONE; } diff --git a/gdb/mi/mi-cmds.h b/gdb/mi/mi-cmds.h index f9a08d9d30..81662bfefc 100644 --- a/gdb/mi/mi-cmds.h +++ b/gdb/mi/mi-cmds.h @@ -38,10 +38,6 @@ enum mi_cmd_result asprintf'd into the mi_error_message buffer. The main loop will display the error message and the completion prompt. */ MI_CMD_ERROR, - /* An error condition was detected and caught. The error message is - in the global error message buffer. The main loop will display - the error message and the completion prompt. */ - MI_CMD_CAUGHT_ERROR, /* The MI command has already displayed its completion message. Main loop will not display a completion message but will display the completion prompt. */ diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 33ba1be9ff..9d7a06c956 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -61,8 +61,7 @@ enum enum captured_mi_execute_command_actions { EXECUTE_COMMAND_DISPLAY_PROMPT, - EXECUTE_COMMAND_SUPRESS_PROMPT, - EXECUTE_COMMAND_DISPLAY_ERROR + EXECUTE_COMMAND_SUPRESS_PROMPT }; /* This structure is used to pass information from captured_mi_execute_command @@ -233,12 +232,12 @@ mi_cmd_thread_select (char *command, char **argv, int argc) return MI_CMD_ERROR; } else - rc = gdb_thread_select (uiout, argv[0]); + rc = gdb_thread_select (uiout, argv[0], &mi_error_message); /* RC is enum gdb_rc if it is successful (>=0) enum return_reason if not (<0). */ if ((int) rc < 0 && (enum return_reason) rc == RETURN_ERROR) - return MI_CMD_CAUGHT_ERROR; + return MI_CMD_ERROR; else if ((int) rc >= 0 && rc == GDB_RC_FAIL) return MI_CMD_ERROR; else @@ -256,10 +255,10 @@ mi_cmd_thread_list_ids (char *command, char **argv, int argc) return MI_CMD_ERROR; } else - rc = gdb_list_thread_ids (uiout); + rc = gdb_list_thread_ids (uiout, &mi_error_message); if (rc == GDB_RC_FAIL) - return MI_CMD_CAUGHT_ERROR; + return MI_CMD_ERROR; else return MI_CMD_DONE; } @@ -1091,12 +1090,6 @@ captured_mi_execute_command (struct ui_out *uiout, void *data) } mi_out_rewind (uiout); } - else if (args->rc == MI_CMD_CAUGHT_ERROR) - { - mi_out_rewind (uiout); - args->action = EXECUTE_COMMAND_DISPLAY_ERROR; - return; - } else mi_out_rewind (uiout); } @@ -1171,8 +1164,7 @@ mi_execute_command (char *cmd, int from_tty) mi_parse_free (command); return; } - if (args.action == EXECUTE_COMMAND_DISPLAY_ERROR - || result.reason < 0) + if (result.reason < 0) { char *msg = result.message; struct cleanup *cleanup = make_cleanup (xfree, msg); diff --git a/gdb/thread.c b/gdb/thread.c index 8a749011ac..d201b431bd 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -282,10 +282,10 @@ do_captured_list_thread_ids (struct ui_out *uiout, void *arg) /* Official gdblib interface function to get a list of thread ids and the total number. */ enum gdb_rc -gdb_list_thread_ids (struct ui_out *uiout) +gdb_list_thread_ids (struct ui_out *uiout, char **error_message) { - return catch_exceptions (uiout, do_captured_list_thread_ids, NULL, - NULL, RETURN_MASK_ALL); + return catch_exceptions_with_msg (uiout, do_captured_list_thread_ids, NULL, + NULL, error_message, RETURN_MASK_ALL); } /* Load infrun state for the thread PID. */ @@ -635,7 +635,7 @@ thread_command (char *tidstr, int from_tty) return; } - gdb_thread_select (uiout, tidstr); + gdb_thread_select (uiout, tidstr, NULL); } static int @@ -667,10 +667,10 @@ do_captured_thread_select (struct ui_out *uiout, void *tidstr) } enum gdb_rc -gdb_thread_select (struct ui_out *uiout, char *tidstr) +gdb_thread_select (struct ui_out *uiout, char *tidstr, char **error_message) { - return catch_exceptions (uiout, do_captured_thread_select, tidstr, - NULL, RETURN_MASK_ALL); + return catch_exceptions_with_msg (uiout, do_captured_thread_select, tidstr, + NULL, error_message, RETURN_MASK_ALL); } /* Commands with a prefix of `thread'. */