#include "mi-common.h"
#include "language.h"
#include "valprint.h"
-#include "inferior.h"
#include "osdata.h"
#include "common/gdb_splay_tree.h"
#include "tracepoint.h"
#include "common/byte-vector.h"
#include <ctype.h>
-#include "run-time-clock.h"
+#include "common/run-time-clock.h"
#include <chrono>
#include "progspace-and-thread.h"
#include "common/rsp-low.h"
/* Print a gdb exception to the MI output stream. */
static void
-mi_print_exception (const char *token, struct gdb_exception exception)
+mi_print_exception (const char *token, const struct gdb_exception &exception)
{
struct mi_interp *mi = (struct mi_interp *) current_interpreter ();
if (exception.message == NULL)
fputs_unfiltered ("unknown error", mi->raw_stdout);
else
- fputstr_unfiltered (exception.message, '"', mi->raw_stdout);
+ fputstr_unfiltered (exception.what (), '"', mi->raw_stdout);
fputs_unfiltered ("\"", mi->raw_stdout);
switch (exception.error)
target_log_command (cmd);
- TRY
+ try
{
command = mi_parse (cmd, &token);
}
- CATCH (exception, RETURN_MASK_ALL)
+ catch (const gdb_exception &exception)
{
mi_print_exception (token, exception);
xfree (token);
}
- END_CATCH
if (command != NULL)
{
timestamp (command->cmd_start);
}
- TRY
+ try
{
captured_mi_execute_command (current_uiout, command.get ());
}
- CATCH (result, RETURN_MASK_ALL)
+ catch (const gdb_exception &result)
{
/* Like in start_event_loop, enable input and force display
of the prompt. Otherwise, any command that calls
mi_print_exception (command->token, result);
mi_out_rewind (current_uiout);
}
- END_CATCH
bpstat_do_actions ();
which means uiout may not be correct. Fix it for the duration
of this function. */
- std::unique_ptr<ui_out> uiout;
-
- if (current_interp_named_p (INTERP_MI)
- || current_interp_named_p (INTERP_MI2))
- uiout.reset (mi_out_new (2));
- else if (current_interp_named_p (INTERP_MI1))
- uiout.reset (mi_out_new (1));
- else if (current_interp_named_p (INTERP_MI3))
- uiout.reset (mi_out_new (3));
- else
+ std::unique_ptr<ui_out> uiout (mi_out_new (current_interpreter ()->name ()));
+ if (uiout == nullptr)
return;
scoped_restore save_uiout
}
}
+/* Whether to use the fixed output when printing information about a
+ multi-location breakpoint (see PR 9659). */
+
+static bool fix_multi_location_breakpoint_output = false;
+
+/* See mi/mi-main.h. */
+
+void
+mi_cmd_fix_multi_location_breakpoint_output (const char *command, char **argv,
+ int argc)
+{
+ fix_multi_location_breakpoint_output = true;
+}
+
+/* See mi/mi-main.h. */
+
+bool
+mi_multi_location_breakpoint_output_fixed (ui_out *uiout)
+{
+ mi_ui_out *mi_uiout = dynamic_cast<mi_ui_out *> (uiout);
+
+ if (mi_uiout == nullptr)
+ return false;
+
+ return mi_uiout->version () >= 3 || fix_multi_location_breakpoint_output;
+}
+
void
_initialize_mi_main (void)
{