aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@efficios.com>2019-05-10 17:22:09 -0400
committerSimon Marchi <simon.marchi@efficios.com>2019-05-10 17:22:09 -0400
commit1367480341749b1498a6c5e7a7b79c7a4ab4ed34 (patch)
tree9ab9cbcfabab084d71008197cdb25ff945fe140b
parenta9eac7f9b45e92b83db476d167e5ff26607a8b47 (diff)
downloadbinutils-1367480341749b1498a6c5e7a7b79c7a4ab4ed34.zip
binutils-1367480341749b1498a6c5e7a7b79c7a4ab4ed34.tar.gz
binutils-1367480341749b1498a6c5e7a7b79c7a4ab4ed34.tar.bz2
Fix GDB build when using --disable-gdbmi
Since commit b4be1b064860 ("Fix MI output for multi-location breakpoints") we get this error when building with --disable-gdbmi: CXXLD gdb /home/smarchi/src/binutils-gdb/gdb/breakpoint.c:6358: error: undefined reference to 'mi_multi_location_breakpoint_output_fixed(ui_out*)' This is due to breakpoint.c using a function defined in mi/mi-main.c, even though mi/mi-main.c isn't included in the build. To fix it, use the flags feature of ui_out. mi_ui_out has the new fix_multi_location_breakpoint_output flag set for versions >= 3. Also, move the global variable fix_multi_location_breakpoint_output to breakpoint.c, so it can be read there even when we build without MI. I renamed it to fix_multi_location_breakpoint_output_globally so it doesn't clash with the new enumerator. gdb/ChangeLog: * breakpoint.h (fix_multi_location_breakpoint_output_globally): New variable declaration. * breakpoint.c (fix_multi_location_breakpoint_output_globally): New variable. (print_one_breakpoint): Use ui_out::test_flags and new global variable to compute use_fixed_output. * mi/mi-main.h (mi_multi_location_breakpoint_output_fixed): Remove. * mi/mi-main.c (fix_multi_location_breakpoint_output): Remove. (mi_multi_location_breakpoint_output_fixed): Remove. (mi_cmd_fix_multi_location_breakpoint_output): Adjust to set the new variable. * mi/mi-out.c (mi_ui_out::mi_ui_out): Set fix_multi_location_breakpoint_output flag if version >= 3. * ui-out.h (enum ui_out_flag) <fix_multi_location_breakpoint_output>: New enumerator.
-rw-r--r--gdb/ChangeLog19
-rw-r--r--gdb/breakpoint.c8
-rw-r--r--gdb/breakpoint.h5
-rw-r--r--gdb/mi/mi-main.c20
-rw-r--r--gdb/mi/mi-main.h8
-rw-r--r--gdb/mi/mi-out.c4
-rw-r--r--gdb/ui-out.h7
7 files changed, 39 insertions, 32 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4da4096..9492412 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,24 @@
2019-05-10 Simon Marchi <simon.marchi@efficios.com>
+ * breakpoint.h (fix_multi_location_breakpoint_output_globally):
+ New variable declaration.
+ * breakpoint.c (fix_multi_location_breakpoint_output_globally):
+ New variable.
+ (print_one_breakpoint): Use ui_out::test_flags and new global
+ variable to compute use_fixed_output.
+ * mi/mi-main.h (mi_multi_location_breakpoint_output_fixed):
+ Remove.
+ * mi/mi-main.c (fix_multi_location_breakpoint_output): Remove.
+ (mi_multi_location_breakpoint_output_fixed): Remove.
+ (mi_cmd_fix_multi_location_breakpoint_output): Adjust to set the
+ new variable.
+ * mi/mi-out.c (mi_ui_out::mi_ui_out): Set
+ fix_multi_location_breakpoint_output flag if version >= 3.
+ * ui-out.h (enum ui_out_flag)
+ <fix_multi_location_breakpoint_output>: New enumerator.
+
+2019-05-10 Simon Marchi <simon.marchi@efficios.com>
+
* contrib/cc-with-tweaks.sh: Validate dwz's work.
2019-05-10 Tom Tromey <tromey@adacore.com>
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index 35da97b..054bb1b 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -6337,13 +6337,19 @@ print_one_breakpoint_location (struct breakpoint *b,
}
}
+/* See breakpoint.h. */
+
+bool fix_multi_location_breakpoint_output_globally = false;
+
static void
print_one_breakpoint (struct breakpoint *b,
struct bp_location **last_loc,
int allflag)
{
struct ui_out *uiout = current_uiout;
- bool use_fixed_output = mi_multi_location_breakpoint_output_fixed (uiout);
+ bool use_fixed_output
+ = (uiout->test_flags (fix_multi_location_breakpoint_output)
+ || fix_multi_location_breakpoint_output_globally);
gdb::optional<ui_out_emit_tuple> bkpt_tuple_emitter (gdb::in_place, uiout, "bkpt");
print_one_breakpoint_location (b, NULL, 0, last_loc, allflag);
diff --git a/gdb/breakpoint.h b/gdb/breakpoint.h
index a91e3e3..3646ea6 100644
--- a/gdb/breakpoint.h
+++ b/gdb/breakpoint.h
@@ -1670,4 +1670,9 @@ extern void print_breakpoint (breakpoint *bp);
/* Command element for the 'commands' command. */
extern cmd_list_element *commands_cmd_element;
+/* Whether to use the fixed output when printing information about a
+ multi-location breakpoint (see PR 9659). */
+
+extern bool fix_multi_location_breakpoint_output_globally;
+
#endif /* !defined (BREAKPOINT_H) */
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 2b9883c..01786c3 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -2699,31 +2699,13 @@ mi_cmd_trace_frame_collected (const char *command, char **argv, int argc)
}
}
-/* 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;
+ fix_multi_location_breakpoint_output_globally = true;
}
void
diff --git a/gdb/mi/mi-main.h b/gdb/mi/mi-main.h
index 72c4e59..1986228 100644
--- a/gdb/mi/mi-main.h
+++ b/gdb/mi/mi-main.h
@@ -59,12 +59,4 @@ extern struct mi_suppress_notification mi_suppress_notification;
extern void mi_cmd_fix_multi_location_breakpoint_output (const char *command,
char **argv, int argc);
-/* Return whether -break-list, -break-insert, =breakpoint-created and
- =breakpoint-modified should use the "fixed" output format (see PR
- 9659).
-
- Return false if UIOUT is not an MI UI. */
-
-extern bool mi_multi_location_breakpoint_output_fixed (ui_out *uiout);
-
#endif /* MI_MI_MAIN_H */
diff --git a/gdb/mi/mi-out.c b/gdb/mi/mi-out.c
index e485bee..d8bee0f 100644
--- a/gdb/mi/mi-out.c
+++ b/gdb/mi/mi-out.c
@@ -280,7 +280,9 @@ mi_ui_out::version ()
/* Constructor for an `mi_out_data' object. */
mi_ui_out::mi_ui_out (int mi_version)
-: m_suppress_field_separator (false),
+: ui_out (mi_version >= 3
+ ? fix_multi_location_breakpoint_output : (ui_out_flag) 0),
+ m_suppress_field_separator (false),
m_suppress_output (false),
m_mi_version (mi_version)
{
diff --git a/gdb/ui-out.h b/gdb/ui-out.h
index 8d18306..9eba70e 100644
--- a/gdb/ui-out.h
+++ b/gdb/ui-out.h
@@ -49,9 +49,10 @@ enum ui_align
/* flags enum */
enum ui_out_flag
- {
- ui_source_list = (1 << 0),
- };
+{
+ ui_source_list = (1 << 0),
+ fix_multi_location_breakpoint_output = (1 << 1),
+};
DEF_ENUM_FLAGS_TYPE (ui_out_flag, ui_out_flags);