From 1367480341749b1498a6c5e7a7b79c7a4ab4ed34 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Fri, 10 May 2019 17:22:09 -0400 Subject: [PATCH] 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) : New enumerator. --- gdb/ChangeLog | 19 +++++++++++++++++++ gdb/breakpoint.c | 8 +++++++- gdb/breakpoint.h | 5 +++++ gdb/mi/mi-main.c | 20 +------------------- gdb/mi/mi-main.h | 8 -------- gdb/mi/mi-out.c | 4 +++- gdb/ui-out.h | 7 ++++--- 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 + * 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) + : New enumerator. + +2019-05-10 Simon Marchi + * contrib/cc-with-tweaks.sh: Validate dwz's work. 2019-05-10 Tom Tromey 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 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 (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); -- 2.7.4