aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2020-02-22test test 12 12users/simark/testSimon Marchi1-0/+2
2020-02-22gdb: update gnulib importSimon Marchi366-4254/+6031
This is mostly to get this commit from gnulib: e22cd2677a4b7beacbf30b93bb0559f7b89f96ce Add ‘extern "C"’ to count-one-bits.h etc. ... which fixes this compilation problem I observed with clang++: CXXLD gdb arch/arm-get-next-pcs.o:arm-get-next-pcs.c:function thumb_get_next_pcs_raw(arm_get_next_pcs*): error: undefined reference to 'count_one_bits(unsigned int)' <more such undefined references> I built-tested on GNU/Linux x86-64 (gcc-9 and clang-9) as well as with the x86_64-w64-mingw32-gcc cross-compiler. gnulib/ChangeLog: * update-gnulib.sh (GNULIB_COMMIT_SHA1): Bump to e22cd2677a4b7beacbf30b93bb0559f7b89f96ce. * Makefile.in, config.in, configure, import/*: Re-generate.
2020-02-23Automatic date update in version.inGDB Administrator1-1/+1
2020-02-22Make dwarf2_compile_expr_to_ax staticTom Tromey3-21/+6
I noticed that dwarf2_compile_expr_to_ax can be static. Nothing outside of loc.c calls it. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * dwarf2/loc.h (dwarf2_compile_expr_to_ax): Don't declare. * dwarf2/loc.c (dwarf2_compile_expr_to_ax): Now static.
2020-02-22Fix cast in TUI_DISASM_WINTom Tromey2-1/+6
I noticed that the TUI_DISASM_WIN macro cast the disassembly window to a base type, rather than its correct type. This patch fixes this oversight. 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-data.h (TUI_DISASM_WIN): Cast to tui_disasm_window. Change-Id: Ied3dbac9ef3dc48ceb9e0850fe4ada3c316dd769
2020-02-22Add "usage" text to all TUI command helpTom Tromey5-5/+18
This adds "usage" text to the help for all all the TUI commands. In some cases the usage is borderline, but I tend to think being complete is preferable. 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-win.c (_initialize_tui_win): Add usage text. * tui/tui-stack.c (_initialize_tui_stack): Add usage text. * tui/tui-regs.c (_initialize_tui_regs): Add usage text. * tui/tui.c (_initialize_tui): Add usage text. Change-Id: I727f7a7cfc03efa248ef98f30a18be393819e30b
2020-02-22Use error_no_arg in TUITom Tromey2-90/+77
This changes a couple of TUI commands to use error_no_arg. The commands are also simplified a bit, and changed to use other gdb CLI utility functions like skip_to_space. This lets us removes a couple of defines that don't interact properly with gettext. 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_set_focus_command) (tui_set_win_height_command): Use error_no_arg. (_initialize_tui_win): Update help text. (FOCUS_USAGE, WIN_HEIGHT_USAGE): Don't define. Change-Id: I2bf95c2e5cfe1472d068388fa39f0cf07591b76c
2020-02-22Make some tui_source_window_base members "protected"Tom Tromey8-100/+151
This renames a few members of tui_source_window_base, and makes them "protected". 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (extract_display_start_addr): Rewrite. * tui/tui-disasm.h (struct tui_disasm_window) <display_start_addr>: Declare. * tui/tui-source.h (struct tui_source_window) <display_start_addr>: Declare. * tui/tui-winsource.h (struct tui_source_window_base) <show_source_line, display_start_addr>: New methods. <m_horizontal_offset, m_start_line_or_addr, m_gdbarch, m_content>: Rename and move to protected section. * tui/tui-winsource.c (tui_source_window_base::update_source_window) (tui_source_window_base::do_erase_source_content): Update. (tui_source_window_base::show_source_line): Now a method. (tui_source_window_base::show_source_content) (tui_source_window_base::tui_source_window_base) (tui_source_window_base::rerender) (tui_source_window_base::refill) (tui_source_window_base::do_scroll_horizontal) (tui_source_window_base::set_is_exec_point_at) (tui_source_window_base::update_breakpoint_info) (tui_source_window_base::update_exec_info): Update. * tui/tui-source.c (tui_source_window::set_contents) (tui_source_window::showing_source_p) (tui_source_window::do_scroll_vertical) (tui_source_window::location_matches_p) (tui_source_window::line_is_displayed): Update. (tui_source_window::display_start_addr): New method. * tui/tui-disasm.c (tui_disasm_window::set_contents) (tui_disasm_window::do_scroll_vertical) (tui_disasm_window::location_matches_p): Update. (tui_disasm_window::display_start_addr): New method. Change-Id: I74d72b9da5f458664427db643a108634690c6e19
2020-02-22Allow TUI windows in PythonTom Tromey13-4/+783
This patch adds support for writing new TUI windows in Python. 2020-02-22 Tom Tromey <tom@tromey.com> * NEWS: Add entry for gdb.register_window_type. * tui/tui-layout.h (window_factory): New typedef. (tui_register_window): Declare. * tui/tui-layout.c (saved_tui_windows): New global. (tui_apply_current_layout): Use it. (tui_register_window): New function. * python/python.c (do_start_initialization): Call gdbpy_initialize_tui. (python_GdbMethods): Add "register_window_type" function. * python/python-internal.h (gdbpy_register_tui_window) (gdbpy_initialize_tui): Declare. * python/py-tui.c: New file. * Makefile.in (SUBDIR_PYTHON_SRCS): Add py-tui.c. gdb/doc/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * python.texi (Python API): Add menu item. (TUI Windows In Python): New node. gdb/testsuite/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * gdb.python/tui-window.exp: New file. * gdb.python/tui-window.py: New file. Change-Id: I85fbfb923a1840450a00a7dce113a05d7f048baa
2020-02-22Remove the TUI annotation hackTom Tromey2-25/+15
do_tui_putc has some code to remove annotations from gdb output. This was added in 2001, see commit a198b876bbcb. However, I think this code is not needed. It seems very unlikely to enable both annotations and the TUI, and in any case I think this is something that should not be supported. So, this patch removes this code. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-io.c (do_tui_putc): Don't omit annotations. Change-Id: I05728110365a362d37c9821df9c8779316100bb8
2020-02-22Remove tui_set_win_with_focusTom Tromey4-19/+16
I noticed that the TUI had two functions with similar names: tui_set_win_focus_to and tui_set_win_with_focus. However, one was just an implementation detail of the latter. So, this patch removes tui_set_win_with_focus entirely, to avoid any temptation to call it. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_set_win_focus_to): Move to tui-data.c. * tui/tui-data.h (tui_set_win_with_focus): Don't declare. * tui/tui-data.c (tui_set_win_with_focus): Remove. (tui_set_win_focus_to): Move from tui-win.c. Change-Id: Idffddab773436bdf80d55480906d76b292981ef2
2020-02-22Change how TUI windows are instantiatedTom Tromey2-32/+77
This adds a new global that maps from window names to window constructor functions, and then changes tui_get_window_by_name and validate_window_name to use it. This is another step toward user-defined window types. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (make_standard_window, get_locator_window): New functions. (known_window_types): New global. (tui_get_window_by_name): Reimplement. (initialize_known_windows): New function. (validate_window_name): Rewrite. (_initialize_tui_layout): Call initialize_known_windows. Change-Id: I9037aac550299b9d945899220a30c2d3af9dd0de
2020-02-22TUI windows do not need to store their typeTom Tromey11-43/+39
TUI windows no longer need to store their type -- there's only a single spot that uses this information, and it can be changed to use dynamic_cast. (It could be cleaned up even more, by using a virtual method, but I haven't done so.) This patch removes the "type" field from tui_gen_win_info, and this in turn allows removing a couple of enumerator constants. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui.h (enum tui_win_type) <LOCATOR_WIN, DATA_ITEM_WIN>: Remove constants. * tui/tui-winsource.h (struct tui_source_window_base) <tui_source_window_base>: Remove parameter. * tui/tui-winsource.c (tui_source_window_base::tui_source_window_base): Remove parameter. (tui_source_window_base::refill): Update. * tui/tui-stack.h (struct tui_locator_window) <tui_locator_window>: Update. * tui/tui-source.h (struct tui_source_window) <tui_source_window>: Default the constructor. * tui/tui-regs.h (struct tui_data_item_window) <tui_data_item_window>: Default the constructor. (struct tui_data_window) <tui_data_window>: Likewise. * tui/tui-disasm.h (struct tui_disasm_window) <tui_disasm_window>: Default the constructor. * tui/tui-data.h (struct tui_gen_win_info) <tui_gen_win_info>: Default the constructor. <type>: Remove. (struct tui_win_info) <tui_win_info>: Default the constructor. * tui/tui-data.c (tui_win_info::tui_win_info): Remove. * tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>: Default the constructor. Change-Id: I594cd07d2e0bba71ad594a6fb263904ce2febcd6
2020-02-22Remove tui_delete_invisible_windows and tui_make_all_invisibleTom Tromey7-52/+48
tui_delete_invisible_windows is only needed after applying a layout, and tui_make_all_invisible is only needed before applying a layout. This patch removes these functions, in favor of doing this management directly in tui_apply_current_layout. This is needed so that the lifetimes of non-built-in windows will be properly managed. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-wingeneral.h (tui_make_all_invisible): Don't declare. * tui/tui-wingeneral.c (tui_make_all_invisible): Remove. * tui/tui-win.c (tui_resize_all): Don't call tui_delete_invisible_windows. * tui/tui-layout.c (tui_apply_current_layout): Delete windows when done. (tui_set_layout): Update. (tui_add_win_to_layout): Don't call tui_delete_invisible_windows. * tui/tui-data.h (tui_delete_invisible_windows): Don't declare. * tui/tui-data.c (tui_delete_invisible_windows): Remove. Change-Id: Ia3603b021dcb7ec31700a4a32640cd09b00b8f3b
2020-02-22Handle ambiguity in tui_partial_win_by_nameTom Tromey2-2/+16
This changes tui_partial_win_by_name to correctly handle an ambiguous name prefix. This will be important once the user can register new window types. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-win.c (tui_partial_win_by_name): Handle ambiguity correctly. Change-Id: I59aaacd697eeab649164183457ef722dae58d60d
2020-02-22Reimplement tui_next_win and tui_prev_winTom Tromey2-42/+17
This reimplements tui_next_win and tui_prev_win. Now they account for the possibility of windows not on tui_win_list. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement. Change-Id: Ifcd402f76fe0a16e0fe9275a185d550279c01660
2020-02-22Change TUI window iterationTom Tromey4-76/+47
This changes the TUI to track all the instantiated windows in a new global vector. After this, iteration over TUI windows is done by simply iterating over this vector. This approach makes it simpler to define new window types. In particular, a subsequent patch will add the ability to define a TUI window from Python. Note that this series will not remove tui_win_list. This will continue to exist in parallel, only because it was simpler to leave this alone. Perhaps it could still be removed in the future. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-winsource.h (struct tui_source_window_iterator) <inner_iterator>: New etytypedef. <tui_source_window_iterator>: Take "end" parameter. <tui_source_window_iterator>: Take iterator. <operator*, advance>: Update. <m_iter>: Change type. <m_end>: New field. (struct tui_source_windows) <begin, end>: Update. * tui/tui-layout.c (tui_windows): New global. (tui_apply_current_layout): Clear tui_windows. (tui_layout_window::apply): Update tui_windows. * tui/tui-data.h (tui_windows): Declare. (all_tui_windows): Now inline function. (class tui_window_iterator, struct all_tui_windows): Remove. Change-Id: I6ab77976d6326f427178f725434f8f82046e0bbf
2020-02-22Add horizontal splitting to TUI layoutTom Tromey10-63/+207
This changes the TUI layout engine to add horizontal splitting. Now, windows can be side-by-side. A horizontal split is defined using the "-horizontal" parameter to "tui new-layout". This also adds the first "winheight" test to the test suite. One open question is whether we want a new "winwidth" command, now that horizontal layouts are possible. This is easily done using the generic layout code. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> PR tui/17850: * tui/tui-win.c (tui_gen_win_info::max_width): New method. * tui/tui-layout.h (class tui_layout_base) <get_sizes>: Add "height" argument. (class tui_layout_window) <get_sizes>: Likewise. (class tui_layout_split) <tui_layout_split>: Add "vertical" argument. <get_sizes>: Add "height" argument. <m_vertical>: New field. * tui/tui-layout.c (tui_layout_split::clone): Update. (tui_layout_split::get_sizes): Add "height" argument. (tui_layout_split::adjust_size, tui_layout_split::apply): Update. (tui_new_layout_command): Parse "-horizontal". (_initialize_tui_layout): Update help string. (tui_layout_split::specification): Add "-horizontal" when needed. * tui/tui-layout.c (tui_layout_window::get_sizes): Add "height" argument. * tui/tui-data.h (struct tui_gen_win_info) <max_width, min_width>: New methods. gdb/doc/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> PR tui/17850: * gdb.texinfo (TUI Commands): Document horizontal layouts. gdb/testsuite/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> PR tui/17850: * gdb.tui/new-layout.exp: Add horizontal layout and winheight tests. Change-Id: I38b35e504f34698578af86686be03c0fefd954ae
2020-02-22Change return type of tui_layout_base::adjust_sizeTom Tromey3-12/+34
This changes tui_layout_base::adjust_size to return a new enum type. I broke this out into a separate patch because it simplifies a subsequent patch. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-layout.h (enum tui_adjust_result): New. (class tui_layout_base) <adjust_size>: Return tui_adjust_result. (class tui_layout_window) <adjust_size>: Return tui_adjust_result. Rewrite. (class tui_layout_split) <adjust_size>: Return tui_adjust_result. * tui/tui-layout.c (tui_layout_split::adjust_size): Update. Change-Id: I821b48ab06a9b9485875e147bd08a3bc46b900a0
2020-02-22Allow TUI sub-layouts in "new-layout" commandTom Tromey5-24/+100
The new TUI layout engine has support for "sub-layouts" -- this is a layout that includes another layout as a child. A sub-layout is treated as a unit when allocating space. There's not a very strong reason to use sub-layouts currently. This patch exists to introduce the idea, and to simplify the subsequent patch that adds horizontal layouts -- where sub-layouts are needed. Because this patch won't go in on its own, I chose to defer documenting this change until the subsequent horizontal layout patch. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-layout.h (class tui_layout_split) <add_split>: Change parameter and return types. (class tui_layout_base) <specification>: Add "depth". (class tui_layout_window) <specification>: Add "depth". (class tui_layout_split) <specification>: Add "depth". * tui/tui-layout.c (tui_layout_split::add_split): Change parameter and return types. (tui_new_layout_command): Parse sub-layouts. (_initialize_tui_layout): Update help string. (tui_layout_window::specification): Add "depth". (add_layout_command): Update. gdb/testsuite/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * gdb.tui/new-layout.exp: Add sub-layout tests. Change-Id: Iddf52d067a552c168b8a67f29caf7ac86404b10c
2020-02-22Add the "tui new-layout" commandTom Tromey8-6/+225
This adds a new command, "tui new-layout". This command can be used to define a new TUI window layout. The command is used like: (gdb) tui new-layout name src 1 regs 1 status 0 cmd 1 The first argument is the name of the layout. In this example, it is "name", so the new layout could be seen by "layout name". Subsequent arguments come in pairs, where the first item in a pair is the name of a window, and the second item in a pair is the window's weight. A weight is just an integer -- a window's allocated size is proportional to the total of the weights given. So, in the above example, all windows will have the same size (the status windows's weight does not matter, because it has fixed height). gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * NEWS: Add "tui new-layout" item. * tui/tui-layout.c (add_layout_command): Return cmd_list_element. Add new-layout command to help text. (validate_window_name): New function. (tui_new_layout_command): New function. (_initialize_tui_layout): Register "new-layout". (tui_layout_window::specification): New method. (tui_layout_window::specification): New method. * tui/tui-layout.h (class tui_layout_base) <specification>: New method. (class tui_layout_window) <specification>: New method. (class tui_layout_split) <specification>: New method. gdb/doc/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * gdb.texinfo (TUI Overview): Mention user layouts. (TUI Commands): Document "tui new-layout". gdb/testsuite/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * gdb.tui/new-layout.exp: New file. Change-Id: Id7c3ace20ab1e8924f8f4ad788f40210f58a5c05
2020-02-22Remove hard-coded TUI layoutsTom Tromey6-292/+268
This changes the TUI so that the available layouts are no longer completely hard-coded. "enum tui_layout_type" is removed, and then all the fallout from this is fixed up. This patch also reimplements the "layout" command to be a prefix command. The concrete layouts are simply sub-commands now. This provides completion and correct abbreviation behavior for free. Finally, this also changes the name of the locator window to "status". This matches the documentation and will be exposed to the user in a subsequent patch. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_enable): Call tui_set_initial_layout. * tui/tui-win.c (window_name_completer): Update comment. * tui/tui-layout.h (class tui_layout_base) <replace_window>: Declare method. (class tui_layout_window) <replace_window>: Likewise. (class tui_layout_split) <replace_window>: Likewise. (tui_set_layout): Don't declare. (tui_set_initial_layout): Declare function. * tui/tui-layout.c (layouts, applied_skeleton, src_regs_layout) (asm_regs_layout): New globals. (tui_current_layout, show_layout): Remove. (tui_set_layout, tui_add_win_to_layout): Rewrite. (find_layout, tui_apply_layout): New function. (layout_completer): Remove. (tui_next_layout): Reimplement. (tui_next_layout_command): New function. (tui_set_initial_layout, tui_prev_layout_command): New functions. (tui_regs_layout): Reimplement. (tui_regs_layout_command): New function. (extract_display_start_addr): Rewrite. (next_layout, prev_layout): Remove. (tui_layout_window::replace_window): New method. (tui_layout_split::replace_window): New method. (destroy_layout): New function. (layout_list): New global. (add_layout_command): New function. (initialize_layouts): Update. (tui_layout_command): New function. (_initialize_tui_layout): Install "layout" commands. * tui/tui-data.h (enum tui_layout_type): Remove. (tui_current_layout): Don't declare. Change-Id: I9b5f7ab3ce838d6b340b8c373ef649a8e0a74b73
2020-02-22Reimplement "tui reg" commandTom Tromey4-16/+19
This reimplements the low-level layout function that is used by the "tui reg" command. Now it simply calls into the existing "layout" command, though this will be changed again in a subsequent patch. The rationale for this patch is that it makes it simpler to remove "enum tui_layout_type". gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-regs.c (tui_reg_layout): Remove. (tui_reg_command): Use tui_regs_layout. * tui/tui-layout.h (tui_reg_command): Declare. * tui/tui-layout.c (tui_reg_command): New function. Change-Id: I0ca6884e2967005e7d3fbf5f13a0ac8f9c3298cf
2020-02-22Reimplement TUI "C-x 1" bindingTom Tromey4-21/+73
The TUI "C-x 1" key binding removes TUI windows, based on the current layout. With user-defined layouts, this is no longer easy to do. This patch changes "C-x 1" to simply delete windows, leaving just the focus window, the locator, and the command window. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_rl_delete_other_windows): Call tui_remove_some_windows. * tui/tui-layout.h (class tui_layout_base) <remove_windows>: Declare method. (class tui_layout_window) <remove_windows>: New method. (class tui_layout_split) <remove_windows>: Declare. (tui_remove_some_windows): Declare. * tui/tui-layout.c (tui_remove_some_windows): New function. (tui_layout_split::remove_windows): New method. Change-Id: If186f9c3f263913e963b965204481d1b4385c6d4
2020-02-22Simplify TUI C-x 2 bindingTom Tromey4-36/+18
The TUI "C-x 2" binding tries to switch to a different layout based on the current layout. Once user-defined layouts are available, this won't really make sense. I wasn't entirely sure how to handle this. This patch changes the binding to simply cycle through the existing layouts. I considered this a reasonable, though not ideal, compromise. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_rl_change_windows): Call tui_next_layout. * tui/tui-layout.h (tui_next_layout): Declare. * tui/tui-layout.c (tui_next_layout): New function. Change-Id: Ic101f0e3831a4235a048b3090ef60f025f7449bb
2020-02-22Fix latent display bug in tui_data_windowTom Tromey2-1/+6
tui_data_window creates new curses windows, but does not pass in coordinates relative to the data window's origin. This means that the data window could only ever be displayed as the topmost window in a layout. This is not a currently problem, because all the existing layouts do this; but a subsequent patch will add user-defined layouts, which could do otherwise. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-regs.c (tui_data_window::display_registers_from): Use correct coordinates. Change-Id: I5101f2b2869557b87381ebdeebd9b7fd28687831
2020-02-22Simplify tui_add_win_to_layoutTom Tromey3-15/+15
tui_add_win_to_layout is only ever called for the source or assembly windows. This simplifies the function by removing the DATA_WIN case. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-layout.h (tui_add_win_to_layout): Add comment. * tui/tui-layout.c (tui_add_win_to_layout): Add assert. Remove DATA_WIN case. Change-Id: Idfca902c6c90153acc5d19af4c33aa74bc3caf31
2020-02-22Use TUI_DISASM_WIN instead of tui_win_list arrayTom Tromey2-2/+7
This is a minor cleanup to change tui_get_low_disassembly_address to use TUI_DISASM_WIN, rather than the tui_win_list array. This is more in line with what the rest of the TUI code does. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * tui/tui-disasm.c (tui_get_low_disassembly_address): Use TUI_DISASM_WIN, not tui_win_list. Change-Id: I999335ee3f63a4b570e84f320236b78f2bd5b780
2020-02-22Style field names in "print"Tom Tromey16-32/+190
This changes gdb to use the "variable" style when printing field names. I've added new tests for C and Rust, but not other languages. I chose "variable" because that seemed most straightforward. However, another option would be to introduce a new "field" style. Similarly, this patch uses the variable style for enumerator constants -- but again, a new style could be used if that's preferred. gdb/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * valprint.c (generic_val_print_enum_1) (val_print_type_code_flags): Style member names. * rust-lang.c (val_print_struct, rust_print_enum) (rust_print_struct_def, rust_internal_print_type): Style member names. * p-valprint.c (pascal_object_print_value_fields): Style member names. Only call fprintf_symbol_filtered for static members. * m2-typeprint.c (m2_record_fields, m2_enum): Style member names. * f-valprint.c (f_val_print): Style member names. * f-typeprint.c (f_type_print_base): Style member names. * cp-valprint.c (cp_print_value_fields): Style member names. Only call fprintf_symbol_filtered for static members. (cp_print_class_member): Style member names. * c-typeprint.c (c_print_type_1, c_type_print_base_1): Style member names. * ada-valprint.c (ada_print_scalar): Style enum names. (ada_val_print_enum): Likewise. * ada-typeprint.c (print_enum_type): Style enum names. gdb/testsuite/ChangeLog 2020-02-22 Tom Tromey <tom@tromey.com> * gdb.rust/rust-style.rs: New file. * gdb.rust/rust-style.exp: New file. * gdb.base/style.exp: Test structure printing. * gdb.base/style.c (struct some_struct): New type. (enum etype): New type. (struct_value): New global. Change-Id: I070e1293c6cc830c9ea916af8243410aa384e944
2020-02-22PR25585, PHDR segment not covered by LOAD segmentAlan Modra4-1/+23
I closed this bug as invalid, but I think it is worth mentioning in NEWS that older linkers didn't check PT_PHDR very well. The patch also allows people to force an output file with --noinhibit-exec after the error. bfd/ PR 25585 * elf.c (assign_file_positions_for_load_sections): Continue linking on "PHDR segment not covered by LOAD segment" errors. ld/ PR 25585 * NEWS: Mention better "PHDR segment not covered by LOAD segment" checking.
2020-02-21Add a mostlyclean target to gdbserverTom Tromey2-1/+5
I noticed gdbserver's Makefile doesn't have a mostlyclean target. I use this sometimes, so this patch adds it. Adding it as a synonym of "clean" seemed to make sense, given the contents of that rule. gdbserver/ChangeLog 2020-02-21 Tom Tromey <tom@tromey.com> * Makefile.in (mostlyclean): New target.
2020-02-22Automatic date update in version.inGDB Administrator1-1/+1
2020-02-21Update partial_symtab commentTom Tromey2-2/+5
The introductory comment for partial_symtab has been mildly incorrect since the partial symtab code was changed to allocate partial symtabs with "new". This patch removes the incorrect text. gdb/ChangeLog 2020-02-21 Tom Tromey <tom@tromey.com> * psympriv.h (struct partial_symtab): Update comment.
2020-02-21[gdb/testsuite] Fix gdb.go/methods.expTom de Vries2-10/+74
With gccgo-6/7, we have: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo XFAIL: gdb.go/methods.exp: going to first breakpoint \ (the program exited) FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar XFAIL: gdb.go/methods.exp: going to second breakpoint \ (the program is no longer running) ... And with gccgo-8/9/10, we have: ... PASS: gdb.go/methods.exp: setting breakpoint 1 XFAIL: gdb.go/methods.exp: going to first breakpoint FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar XFAIL: gdb.go/methods.exp: going to second breakpoint \ (the program exited) ... The first test passes and fails with different messages: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo ... or: ... PASS: gdb.go/methods.exp: setting breakpoint 1 ... Fix this by removing the explicit pass call and using the message argument for gdb_breakpoint, for both breakpoint locations. The setup of the xfails is non-specific: ... setup_xfail "*-*-*" ;# mangling issues IIRC ... so let's start with removing these. The first FAIL with gccgo-6: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo ... is due an incorrect DW_AT_name attribute: ... # <554> DW_AT_name : main.Foo.N6_main.T ... Fix this by recognizing the incorrect attribute, and xfailing the test. Furthermore, if setting the breakpoint fails, there's not much point in trying to continue to the breakpoint: ... FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo FAIL: gdb.go/methods.exp: going to first breakpoint (the program exited) ... Fix this by skipping the second test if the first one fails, also for the second breakpoint. With gccgo-10, we manage to set the first breakpoint, but continuing to breakpoint test fails: ... PASS: gdb.go/methods.exp: setting breakpoint 1 FAIL: gdb.go/methods.exp: going to first breakpoint ... This is due to an incorrect regexp, requiring a colon in front of the breakpoint location. Fix this for both breakpoints. Setting the second breakpoint fails: ... FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar ... presumably because the breakpoint location "(*main.T).Bar" does not follow the naming convention explained at https://golang.org/doc/gdb#Naming. Fix this by updating the breakpoint location to "main.(*T).Bar". Still this test fails, for gccgo-6/7 because of an incorrect DW_AT_name attribute: ... # <529> DW_AT_name : main.Bar.pN6_main.T ... and for gccgo-8/9/10 because of incorrect DW_AT_name/DW_AT_linkage_name attributes (filed as gcc PR93866): ... # <6e5> DW_AT_name : main.Bar..1main.T # <6ec> DW_AT_linkage_name: main.T.Bar .. Add xfails for both of these. All in all, now we have with gccgo-6/7: ... XFAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo XFAIL: gdb.go/methods.exp: setting breakpoint at main.(*T).Bar ... and with gccgo-8/9/10, we have: ... PASS: gdb.go/methods.exp: setting breakpoint at main.T.Foo PASS: gdb.go/methods.exp: going to first breakpoint XFAIL: gdb.go/methods.exp: setting breakpoint at main.(*T).Bar ... Tested on x86_64-linux with gccgo-6/7/8/9/10. gdb/testsuite/ChangeLog: 2020-02-21 Tom de Vries <tdevries@suse.de> PR go/18926 * lib/gdb.exp (bp_location2/bp_location2_regexp): Fix. Remove blanket xfails. Use message argument for gdb_breakpoint. Make continuing to breakpoint test conditional on setting breakpoint. Fix continuing to breakpoint regexp. Add xfails for gccgo-6/7 DW_AT_name attribute. Add xfail for GCC PR93866.
2020-02-21Fix two more mips-tdep.h declarationsTom Tromey2-2/+7
My earlier patch to fix a declaration mismatch in mips-tdep.h missed a couple of spots. Basically, I sent it too soon. This patch fixes a couple more mismatches between a declaration (using bfd_vma) and the definition (using CORE_ADDR). gdb/ChangeLog 2020-02-21 Tom Tromey <tromey@adacore.com> * mips-tdep.h (mips_pc_is_mips16, mips_pc_is_micromips): Parameter type is CORE_ADDR.
2020-02-21[gdb] Fix cc-with-dwz regressionTom de Vries2-1/+8
I noticed a regression with board cc-with-dwz: ... FAIL: gdb.cp/m-static.exp: static const int initialized elsewhere FAIL: gdb.cp/m-static.exp: info variable everywhere ... The problem started with commit 0494dbecdf "Consolidate partial symtab dependency reading". The commit replaces the dwarf2_psymtab::expand_psymtab specific reading of dependencies, which contains a "dependencies[i]->user == NULL" test, with a generic partial_symtab::read_dependencies call, which does not test the user field. This patch fixes the regression by adding back the test, in the generic partial_symtab::read_dependencies. Build and reg-tested on x86_64-linux. Tested natively, as well as with boards cc-with-dwz and cc-with-dwz-m. The patch fixes all 33 regressions with cc-with-dwz, and all 2929 regression with cc-with-dwz-m. gdb/ChangeLog: 2020-02-21 Tom de Vries <tdevries@suse.de> PR gdb/25534 * psymtab.c (partial_symtab::read_dependencies): Don't read dependency if dependencies[i]->user != NULL.
2020-02-21gdb/testsuite: Add test for case where gdb_demangle returns NULLAndrew Burgess3-0/+130
This adds a test for the commit: commit 4f180d5396741eb65badba70cf5077b7d48f8641 Date: Fri Feb 21 08:19:21 2020 -0700 Check for null result from gdb_demangle gdb/testsuite/ChangeLog: * gdb.dwarf2/cpp-linkage-name.c: New file. * gdb.dwarf2/cpp-linkage-name.exp: New file.
2020-02-21Check for null result from gdb_demangleAli Tamur via gdb-patches2-0/+6
I am sending this patch on behalf of kmoy@google.com, who discovered the bug and wrote the fix. gdb_demangle can return null for strings that don't properly demangle. The null check was mistakenly removed in commit 43816ebc335. Without this check, GDB aborts when loading symbols from some binaries. gdb/ChangeLog 2020-02-21 Ali Tamur <tamur@google.com> * dwarf2/read.c (dwarf2_name): Add null check.
2020-02-21Fuzzers whining about mach-o supportAlan Modra2-31/+122
It's very easy to make bfd/mach-o.c allocate huge amounts of memory with fuzzed binaries. This make it a little harder. The patch also fixes a number of places where an attempt to detect overflow of multiplication was done with code like if (x * 4 < x) /* overflow case */ That of course doesn't work. There are plenty of values of x that overflow x * 4 but (x * 4) mod 2^n is greater than x. For example with 16-bit types, 0x6000 * 4 = 0x18000 mod 2^16 = 0x8000. * mach-o.c (bfd_mach_o_canonicalize_relocs): Fix ineffective overflow check. (bfd_mach_o_canonicalize_reloc): Likewise. (bfd_mach_o_canonicalize_dynamic_reloc): Likewise. Sanity check counts and offsets against file size. (bfd_mach_o_build_dysymtab): Fix ineffective overflow check. (bfd_mach_o_mangle_sections): Remove unnecessary overflow check. (bfd_mach_o_read_symtab_symbols): Sanity check count and offset against file size. Delete symbol table error message. (bfd_mach_o_read_dysymtab): Sanity check counts and offsets against file size. (bfd_mach_o_read_symtab): Likewise. (bfd_mach_o_read_command): Pass file size. (bfd_mach_o_scan): Sanity check command count against file size.
2020-02-21Fix typo in gdb/testsuite/ChangeLogShahab Vahedi1-1/+1
The date of my last patch's entry in gdb/testsuite/ChangeLog was wrong. This fixes it.
2020-02-21gdb/testsuite: Regenerate the testglue if it is not inShahab Vahedi2-2/+17
For running the DejaGnu tests, some esoteric configurations may require a testglue. This, for instance, is true about testing ARC targets which uses its own DejaGnu board and a simulator which does not support returning the program's exit code. Therefore, for those tests that use "gdb_compile", a "gdb_tg.o" file is compiled and linked into the final executable. There are tests that invoke "gdb_compile" from different directories. Let's take a look at an example test: gdb.base/fullname.exp. The purpose of this test is to build the executable from different directories (absolute vs. relative vs. other) and then check if gdb can handle setting breakpoints accordingly. When "gdb_compile" generates the "gdb_tg.o", it does not do it again for the same test. Although this might seem efficient, it can lead to problems when changing directories before the next compile: gdb compile failed, arc-elf32-gcc: error: gdb_tg.o: No such file or directory This patch checks if the wrapper file ("gdb_tg.o") is still in reach and if it is not, it will stimulate the regeneration of the wrapper. It is worth mentioning that GCC's DejaGnu tests handle these scenarios as well and they seem to be more efficient in doing so by saving the library paths and manipulating them if necessary [1]. However, for GDB tests, that require less compilations, I think the proposed solution should be fine compared to a more full fledged solution from GCC. The glue file in our case is only 2 KiB. Last but not least, I ran the x86_64 tests on an x86_64 host and found no regression. [1] Avid coders may look for "set_ld_library_path_env_vars" in gcc/testsuite/lib/target-libpath.exp. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_wrapper_init): Reset "gdb_wrapper_initialized" to 0 if "wrapper_file" does not exist.
2020-02-20Fix latent bug in dwarf2_find_containing_comp_unitTom Tromey2-11/+91
dwarf2_find_containing_comp_unit has this in its binary search: if (mid_cu->is_dwz > offset_in_dwz || (mid_cu->is_dwz == offset_in_dwz && mid_cu->sect_off + mid_cu->length >= sect_off)) high = mid; The intent here is to determine whether SECT_OFF appears in or before MID_CU. I believe this has an off-by-one error, and that the check should use ">" rather than ">=". If the two side are equal, then SECT_OFF actually appears at the start of the next CU. I've had this patch kicking around for ages but I forget how I found the problem. gdb/ChangeLog 2020-02-20 Tom Tromey <tom@tromey.com> * dwarf2/read.c (dwarf2_find_containing_comp_unit): Use ">", not ">=", in binary search. (dwarf2_find_containing_comp_unit): New overload. (run_test): New self-test. (_initialize_dwarf2_read): Register new test.
2020-02-20RISC-V: Support the read-only CSR checking.Nelson Chu8-0/+543
CSRRW and CSRRWI always write CSR. CSRRS, CSRRC, CSRRSI and CSRRCI write CSR when RS1 isn't zero. The CSR is read only if the [11:10] bits of CSR address is 0x3. The read-only CSR can not be written by the CSR instructions. gas/ * config/tc-riscv.c (riscv_ip): New boolean insn_with_csr to indicate we are assembling instruction with CSR. Call riscv_csr_read_only_check after parsing all arguments. (enum csr_insn_type): New enum is used to classify the CSR instruction. (riscv_csr_insn_type, riscv_csr_read_only_check): New functions. These are used to check if we write a read-only CSR by the CSR instruction. * testsuite/gas/riscv/priv-reg-fail-read-only-01.s: New testcase. Test all CSR for the read-only CSR checking. * testsuite/gas/riscv/priv-reg-fail-read-only-01.d: Likewise. * testsuite/gas/riscv/priv-reg-fail-read-only-01.l: Likewise. * testsuite/gas/riscv/priv-reg-fail-read-only-02.s: New testcase. Test all CSR instructions for the read-only CSR checking. * testsuite/gas/riscv/priv-reg-fail-read-only-02.d: Likewise. * testsuite/gas/riscv/priv-reg-fail-read-only-02.l: Likewise.
2020-02-20RISC-V: Disable the CSR checking by default.Nelson Chu5-3/+50
Add new .option `csr-check/no-csr-check` and GAS option `-mcsr-check /-mno-csr-check` to enbale/disable the CSR checking. Disable the CSR checking by default. gas/ * config/tc-riscv.c: Add new .option and GAS options to enbale/disable the CSR checking. We disable the CSR checking by default. (reg_lookup_internal): Check the `riscv_opts.csr_check` before we doing the CSR checking. * doc/c-riscv.texi: Add description for the new .option and assembler options. * testsuite/gas/riscv/priv-reg-fail-fext.d: Add `-mcsr-check` to enable the CSR checking. * testsuite/gas/riscv/priv-reg-fail-rv32-only.d: Likewise.
2020-02-20RISC-V: Support the ISA-dependent CSR checking.Nelson Chu19-325/+480
According to the riscv privilege spec, some CSR are only valid when rv32 or the specific extension is set. We extend the DECLARE_CSR and DECLARE_CSR_ALIAS to record more informaton we need, and then check whether the CSR is valid according to these information. We report warning message when the CSR is invalid, so we have a choice between error and warning by --fatal-warnings option. Also, a --no-warn/-W option is used to turn the warnings off, if people don't want the warnings. gas/ * config/tc-riscv.c (enum riscv_csr_class): New enum. Used to decide whether or not this CSR is legal in the current ISA string. (struct riscv_csr_extra): New structure to hold all extra information of CSR. (riscv_init_csr_hash): New function. According to the DECLARE_CSR and DECLARE_CSR_ALIAS, insert CSR extra information into csr_extra_hash. Call hash_reg_name to insert CSR address into reg_names_hash. (md_begin): Call riscv_init_csr_hashes for each DECLARE_CSR. (reg_csr_lookup_internal, riscv_csr_class_check): New functions. Decide whether the CSR is valid according to the csr_extra_hash. (init_opcode_hash): Update 'if (hash_error != NULL)' as hash_error is not a boolean. This is same as riscv_init_csr_hash, so keep the consistent usage. * testsuite/gas/riscv/csr-dw-regnums.d: Add -march=rv32if option. * testsuite/gas/riscv/priv-reg.d: Add f-ext by -march option. * testsuite/gas/riscv/priv-reg-fail-fext.d: New testcase. The source file is `priv-reg.s`, and the ISA is rv32i without f-ext, so the f-ext CSR are not allowed. * testsuite/gas/riscv/priv-reg-fail-fext.l: Likewise. * testsuite/gas/riscv/priv-reg-fail-rv32-only.d: New testcase. The source file is `priv-reg.s`, and the ISA is rv64if, so the rv32-only CSR are not allowed. * testsuite/gas/riscv/priv-reg-fail-rv32-only.l: Likewise. include/ * opcode/riscv-opc.h: Extend DECLARE_CSR and DECLARE_CSR_ALIAS to record riscv_csr_class. opcodes/ * riscv-dis.c (print_insn_args): Updated since the DECLARE_CSR is changed. gdb/ * riscv-tdep.c: Updated since the DECLARE_CSR is changed. * riscv-tdep.h: Likewise. * features/riscv/rebuild-csr-xml.sh: Generate the 64bit-csr.xml without rv32-only CSR. * features/riscv/64bit-csr.xml: Regernated. binutils/ * dwarf.c: Updated since the DECLARE_CSR is changed.
2020-02-21pdp11 reloc processingAlan Modra2-13/+22
This allows pdp11 to handle 32-bit fixups that can be applied by gas, and improves the error message emitted when the required reloc isn't available. * config/tc-pdp11.c (md_apply_fix): Handle BFD_RELOC_32. (tc_gen_reloc): Only give a BAD_CASE assertion on pcrel relocs.
2020-02-21PR25569, PDP11 ld -s clobbers last data byteAlan Modra5-242/+264
This patch fixes an ancient wart in aout support, in that text and data section sizes are rounded up for alignment rather that just the corresponding header sizes. Changing section sizes could conceivably result in buffer overflows if section contents were held in memory. Also, keeping the original section sizes allows this PR to be fixed nicely. bfd/ PR 25569 * aoutx.h (adjust_o_magic, adjust_z_magic, adjust_n_magic): Use "text", "data" and "bss" section pointer vars. Don't update section size, just exec header sizes. (adjust_sizes_and_vmas): Don't update text section size. Set initial exec header a_text. Print exec headers sizes. * pdp11.c (adjust_o_magic, adjust_z_magic, adjust_n_magic), (adjust_sizes_and_vmas): Similarly. Formatting. (final_link): Correct final file extension. gas/ PR 25569 * config/obj-aout.c (obj_aout_frob_file_before_fix): Don't loop on section size adjustment, instead perform another write if exec header size is larger than section size.
2020-02-21Automatic date update in version.inGDB Administrator1-1/+1
2020-02-20Make '{putchar,fputc}_unfiltered' use 'fputs_unfiltered'Sergio Durigan Junior2-8/+25
There is currently a regression when using '{putchar,fputc}_unfiltered' with 'puts_unfiltered' which was introduced by one of the commits that reworked the unfiltered print code. The regression makes it impossible to use '{putchar,fputc}_unfiltered' with 'puts_unfiltered', because the former writes directly to the ui_file stream using 'stream->write', while the latter uses a buffered mechanism (see 'wrap_buffer') and delays the printing. If you do a quick & dirty hack on e.g. top.c:show_gdb_datadir: @@ -2088,6 +2088,13 @@ static void show_gdb_datadir (struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value) { + putchar_unfiltered ('\n'); + puts_unfiltered ("TEST"); + putchar_unfiltered ('>'); + puts_unfiltered ("PUTS"); + putchar_unfiltered ('\n'); rebuild GDB and invoke the "show data-directory" command, you will see: (gdb) show data-directory > TESTPUTSGDB's data directory is "/usr/local/share/gdb". Note how the '>' was printed before the output, and "TEST" and "PUTS" were printed together. My first attempt to fix this was to always call 'flush_wrap_buffer' at the end of 'fputs_maybe_filtered', since it seemed to me that the function should always print what was requested. But I wasn't sure this was the right thing to do, so I talked to Tom on IRC and he gave me another, simpler idea: make '{putchar,fputc}_unfiltered' call into the already existing 'fputs_unfiltered' function. This patch implements the idea. I regtested it on the Buildbot, and no regressions were detected. gdb/ChangeLog: 2020-02-20 Sergio Durigan Junior <sergiodj@redhat.com> Tom Tromey <tom@tromey.com> * utils.c (fputs_maybe_filtered): Call 'stream->puts' instead of 'fputc_unfiltered'. (putchar_unfiltered): Call 'fputc_unfiltered'. (fputc_unfiltered): Call 'fputs_unfiltered'.
2020-02-20[gdb/testsuite] Fix hello.go xpassTom de Vries5-11/+83
With gdb.go/hello.go, we run into an xpass: ... Thread 1 "hello" hit Breakpoint 1, main.main () at hello.go:7^M 7 func main () {^M (gdb) print st^M $1 = 0x0 ""^M (gdb) XPASS: gdb.go/hello.exp: starting string check ... The xfail is setup as follows: ... \# This used to print "", i.e., the local "st" initialized as "". setup_xfail "*-*-*" gdb_test "print st" \ ".* = $hex \"\"" \ "starting string check" ... It's not clear what gccgo/gc PR this xfail refers to. It's also not clear why the empty string is both: - listed as reason for xfail, and - used in the pass pattern. Furthermore, there's a comment in the hello.go testcase: ... st := "Hello, world!" // this intentionally shadows the global "st" ... while there's no global st variable present, only a variable myst: ... var myst = "Shall we?" ... Fix this by splitting up the test-case in two test-cases, hello.{go,exp} and global-local-var-shadow.{go,exp}. In hello.exp we no longer attempt to print st before its declaration. In hello.go we remove the myst variable as well the comment related to shadowing. In global-local-var-shadow.go, we rename myst to st, such that the comment related to shadowing is correct. In global-local-var-shadow.exp we attempt to print the value of st before the local definition, which should print the value of the global definition, and xfail this with reference to GCC PR93844. Tested on x86_64-linux, with gccgo 10. gdb/testsuite/ChangeLog: 2020-02-20 Tom de Vries <tdevries@suse.de> PR go/17018 * gdb.go/hello.exp: Copy ... * gdb.go/global-local-var-shadow.exp: ... here. New file. Expect print of st to print value of global definition. Add xfail for GCC PR93844. * gdb.go/hello.exp: Remove printing of st before definition. * gdb.go/hello.go: Copy ... * gdb.go/global-local-var-shadow.go: ... here. New test. Rename myst to st. * gdb.go/hello.go: Remove myst. Remove comment about shadowing.