2005-01-13 Andrew Cagney <cagney@gnu.org>
authorAndrew Cagney <cagney@redhat.com>
Thu, 13 Jan 2005 22:08:27 +0000 (22:08 +0000)
committerAndrew Cagney <cagney@redhat.com>
Thu, 13 Jan 2005 22:08:27 +0000 (22:08 +0000)
* 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.

gdb/ChangeLog
gdb/breakpoint.c
gdb/gdb.h
gdb/mi/mi-cmd-break.c
gdb/mi/mi-cmds.h
gdb/mi/mi-main.c
gdb/thread.c

index e89769a553488dbbe6aca3d18545e7823cf56085..509545149e32969eb48dbe5162071fc96c4b18fd 100644 (file)
@@ -1,5 +1,30 @@
 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,
        eliminate call to error_last_message.
        (captured_mi_execute_command): Change return type to void.
index b05bf4ec34b39284fbaca125b4c4798765a60e67..822f4b76fa19d58f9a879de20c2ca5e2ee7adeb5 100644 (file)
@@ -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);
 }
 
 
index 6a2eaa0ca124e0269be891839426749f2b953bf8..0dd49e3d9bf5afe0555849df2fc1b29bed17338a 100644 (file)
--- 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
index 528cd3c9d3ef14d717615fa3f19c1da54b11823d..6406084e84183c7a13e66ff2e1ffdcb03aaaea49 100644 (file)
@@ -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;
 }
index f9a08d9d30df03d475415095db1dfa569792e2e9..81662bfefcb6f89bbadf850c23a88f374ce936a6 100644 (file)
@@ -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. */
index 33ba1be9ff9b44bd2e0e7cb57c59e98f4ce1e9e2..9d7a06c9563d4e069a49419348b3e950d231307a 100644 (file)
@@ -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);
index 8a749011ac1c904fe26ff773d28d42200f93f87d..d201b431bde961b38dda91be490e8a63e1e17949 100644 (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
    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'.  */