2005-01-13 Andrew Cagney <cagney@gnu.org>

* 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.
This commit is contained in:
Andrew Cagney 2005-01-13 22:08:27 +00:00
parent f30f06b84e
commit ce43223b29
7 changed files with 63 additions and 42 deletions

View File

@ -1,5 +1,30 @@
2005-01-13 Andrew Cagney <cagney@gnu.org> 2005-01-13 Andrew Cagney <cagney@gnu.org>
* 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, * mi/mi-main.c (mi_execute_command): Use catch_exception,
eliminate call to error_last_message. eliminate call to error_last_message.
(captured_mi_execute_command): Change return type to void. (captured_mi_execute_command): Change return type to void.

View File

@ -3603,14 +3603,14 @@ do_captured_breakpoint_query (struct ui_out *uiout, void *data)
} }
enum gdb_rc 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; struct captured_breakpoint_query_args args;
args.bnum = bnum; args.bnum = bnum;
/* For the moment we don't trust print_one_breakpoint() to not throw /* For the moment we don't trust print_one_breakpoint() to not throw
an error. */ an error. */
return catch_exceptions (uiout, do_captured_breakpoint_query, &args, return catch_exceptions_with_msg (uiout, do_captured_breakpoint_query, &args,
NULL, RETURN_MASK_ALL); NULL, error_message, RETURN_MASK_ALL);
} }
/* Return non-zero if B is user settable (breakpoints, watchpoints, /* Return non-zero if B is user settable (breakpoints, watchpoints,
@ -5334,7 +5334,7 @@ struct captured_breakpoint_args
}; };
static int static int
do_captured_breakpoint (void *data) do_captured_breakpoint (struct ui_out *uiout, void *data)
{ {
struct captured_breakpoint_args *args = data; struct captured_breakpoint_args *args = data;
struct symtabs_and_lines sals; struct symtabs_and_lines sals;
@ -5432,7 +5432,8 @@ do_captured_breakpoint (void *data)
enum gdb_rc enum gdb_rc
gdb_breakpoint (char *address, char *condition, gdb_breakpoint (char *address, char *condition,
int hardwareflag, int tempflag, int hardwareflag, int tempflag,
int thread, int ignore_count) int thread, int ignore_count,
char **error_message)
{ {
struct captured_breakpoint_args args; struct captured_breakpoint_args args;
args.address = address; args.address = address;
@ -5441,8 +5442,8 @@ gdb_breakpoint (char *address, char *condition,
args.tempflag = tempflag; args.tempflag = tempflag;
args.thread = thread; args.thread = thread;
args.ignore_count = ignore_count; args.ignore_count = ignore_count;
return catch_errors (do_captured_breakpoint, &args, return catch_exceptions_with_msg (uiout, do_captured_breakpoint, &args,
NULL, RETURN_MASK_ALL); NULL, error_message, RETURN_MASK_ALL);
} }

View File

@ -29,8 +29,9 @@ struct ui_out;
enum gdb_rc { enum gdb_rc {
/* The operation failed. The failure message can be fetched by /* The operation failed. The failure message can be fetched by
calling ``char *error_last_message(void)''. The value is calling ``char *error_last_message(void)''. The value is
determined by the catch_errors() interface. */ 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 / /* NOTE: Since ``defs.h:catch_errors()'' does not return an error /
internal / quit indication it is not possible to return that internal / quit indication it is not possible to return that
here. */ here. */
@ -46,17 +47,21 @@ enum gdb_rc {
/* Print the specified breakpoint on GDB_STDOUT. (Eventually this /* Print the specified breakpoint on GDB_STDOUT. (Eventually this
function will ``print'' the object on ``output''). */ 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). */ /* Create a breakpoint at ADDRESS (a GDB source and line). */
enum gdb_rc gdb_breakpoint (char *address, char *condition, enum gdb_rc gdb_breakpoint (char *address, char *condition,
int hardwareflag, int tempflag, int hardwareflag, int tempflag,
int thread, int ignore_count); int thread, int ignore_count,
char **error_message);
/* Switch thread and print notification. */ /* 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. */ /* 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 #endif

View File

@ -39,7 +39,7 @@ enum
static void static void
breakpoint_notify (int b) 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: case REG_BP:
rc = gdb_breakpoint (address, condition, rc = gdb_breakpoint (address, condition,
0 /*hardwareflag */ , temp_p, 0 /*hardwareflag */ , temp_p,
thread, ignore_count); thread, ignore_count,
&mi_error_message);
break; break;
case HW_BP: case HW_BP:
rc = gdb_breakpoint (address, condition, rc = gdb_breakpoint (address, condition,
1 /*hardwareflag */ , temp_p, 1 /*hardwareflag */ , temp_p,
thread, ignore_count); thread, ignore_count,
&mi_error_message);
break; break;
#if 0 #if 0
case REGEXP_BP: case REGEXP_BP:
@ -163,7 +165,7 @@ mi_cmd_break_insert (char *command, char **argv, int argc)
deprecated_set_gdb_event_hooks (old_hooks); deprecated_set_gdb_event_hooks (old_hooks);
if (rc == GDB_RC_FAIL) if (rc == GDB_RC_FAIL)
return MI_CMD_CAUGHT_ERROR; return MI_CMD_ERROR;
else else
return MI_CMD_DONE; return MI_CMD_DONE;
} }

View File

@ -38,10 +38,6 @@ enum mi_cmd_result
asprintf'd into the mi_error_message buffer. The main loop will asprintf'd into the mi_error_message buffer. The main loop will
display the error message and the completion prompt. */ display the error message and the completion prompt. */
MI_CMD_ERROR, 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. /* The MI command has already displayed its completion message.
Main loop will not display a completion message but will display Main loop will not display a completion message but will display
the completion prompt. */ the completion prompt. */

View File

@ -61,8 +61,7 @@ enum
enum captured_mi_execute_command_actions enum captured_mi_execute_command_actions
{ {
EXECUTE_COMMAND_DISPLAY_PROMPT, EXECUTE_COMMAND_DISPLAY_PROMPT,
EXECUTE_COMMAND_SUPRESS_PROMPT, EXECUTE_COMMAND_SUPRESS_PROMPT
EXECUTE_COMMAND_DISPLAY_ERROR
}; };
/* This structure is used to pass information from captured_mi_execute_command /* 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; return MI_CMD_ERROR;
} }
else 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) /* RC is enum gdb_rc if it is successful (>=0)
enum return_reason if not (<0). */ enum return_reason if not (<0). */
if ((int) rc < 0 && (enum return_reason) rc == RETURN_ERROR) 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) else if ((int) rc >= 0 && rc == GDB_RC_FAIL)
return MI_CMD_ERROR; return MI_CMD_ERROR;
else else
@ -256,10 +255,10 @@ mi_cmd_thread_list_ids (char *command, char **argv, int argc)
return MI_CMD_ERROR; return MI_CMD_ERROR;
} }
else else
rc = gdb_list_thread_ids (uiout); rc = gdb_list_thread_ids (uiout, &mi_error_message);
if (rc == GDB_RC_FAIL) if (rc == GDB_RC_FAIL)
return MI_CMD_CAUGHT_ERROR; return MI_CMD_ERROR;
else else
return MI_CMD_DONE; return MI_CMD_DONE;
} }
@ -1091,12 +1090,6 @@ captured_mi_execute_command (struct ui_out *uiout, void *data)
} }
mi_out_rewind (uiout); mi_out_rewind (uiout);
} }
else if (args->rc == MI_CMD_CAUGHT_ERROR)
{
mi_out_rewind (uiout);
args->action = EXECUTE_COMMAND_DISPLAY_ERROR;
return;
}
else else
mi_out_rewind (uiout); mi_out_rewind (uiout);
} }
@ -1171,8 +1164,7 @@ mi_execute_command (char *cmd, int from_tty)
mi_parse_free (command); mi_parse_free (command);
return; return;
} }
if (args.action == EXECUTE_COMMAND_DISPLAY_ERROR if (result.reason < 0)
|| result.reason < 0)
{ {
char *msg = result.message; char *msg = result.message;
struct cleanup *cleanup = make_cleanup (xfree, msg); struct cleanup *cleanup = make_cleanup (xfree, msg);

View File

@ -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 /* Official gdblib interface function to get a list of thread ids and
the total number. */ the total number. */
enum gdb_rc 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, return catch_exceptions_with_msg (uiout, do_captured_list_thread_ids, NULL,
NULL, RETURN_MASK_ALL); NULL, error_message, RETURN_MASK_ALL);
} }
/* Load infrun state for the thread PID. */ /* Load infrun state for the thread PID. */
@ -635,7 +635,7 @@ thread_command (char *tidstr, int from_tty)
return; return;
} }
gdb_thread_select (uiout, tidstr); gdb_thread_select (uiout, tidstr, NULL);
} }
static int static int
@ -667,10 +667,10 @@ do_captured_thread_select (struct ui_out *uiout, void *tidstr)
} }
enum gdb_rc 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, return catch_exceptions_with_msg (uiout, do_captured_thread_select, tidstr,
NULL, RETURN_MASK_ALL); NULL, error_message, RETURN_MASK_ALL);
} }
/* Commands with a prefix of `thread'. */ /* Commands with a prefix of `thread'. */