aboutsummaryrefslogtreecommitdiff
path: root/gdb
AgeCommit message (Collapse)AuthorFilesLines
2019-12-21Fix disabling of solib probes when LD_AUDITingGeorge Barrett2-1/+26
The SVR4 solib event handler determines whether an event is related to a non-base link namespace by comparing the event's debug struct address to the debug struct address of the initial program image. However, this can fail when using LD_AUDIT as audit libraries are loaded before the loader has initialised the initial program image's debug struct. When the event handler fails to find the debug struct, the probe-based debugger interface is disabled and a warning is flagged to the user. This commit adds a fallback test to help determine whether an event is for a foreign link namespace when the debug struct isn't available. gdb/ChangeLog: 2019-12-15 George Barrett <bob@bob131.so> * solib-svr4.c (svr4_handle_solib_event): Add fallback link namespace test for when the debug struct isn't available.
2019-12-21Fix whitespace in last change in top.cEli Zaretskii1-1/+1
2019-12-21Include xxHash support status in GDB configuration reportEli Zaretskii2-8/+21
gdb/ChangeLog 2019-12-21 Eli Zaretskii <eliz@gnu.org> * top.c (print_gdb_configuration): Print "--with-xxhash" or "--without-xxhash" according to HAVE_LIBXXHASH.
2019-12-20Address Tom Tromey's comments on the CTF reader.Weimin Pan2-75/+75
* Use the type-safe registry for ctf_file_key; * Drop "typedef" when defining "struct ctf_context"; * Use ANOFFSET with SECT_OFF_TEXT to get the text base address; gdb/ChangeLog 2019-12-20 Weimin Pan <weimin.pan@oracle.com> * ctfread.c (ctf_file_key): Change type to objfile_key. (struct ctf_context): Remove typedef. (get_objfile_text_range): Use ANOFFSET to get text base.
2019-12-20sym-info-cmds.exp: add yet another missing quote in test nameSimon Marchi2-1/+6
In my previous commit, I missed this other spot that is missing a quote... gdb/testsuite/ChangeLog: * lib/sym-info-cmds.exp (GDBInfoSymbols::check_no_entry): Add (another) quote in test name.
2019-12-20sym-info-cmds.exp: add missing quote in test nameSimon Marchi2-1/+6
gdb/testsuite/ChangeLog: * lib/sym-info-cmds.exp (GDBInfoModuleSymbols::check_no_entry): Add quote in test name.
2019-12-20Use enum bitfield for the calling_convention attribute of a subroutineTankut Baris Aktemur3-4/+42
This is a refactoring. Instead of a plain unsigned value, use an enum bitfield. gdb/ChangeLog: 2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * dwarf2read.c (is_valid_DW_AT_calling_convention_for_subroutine): New function. (read_subroutine_type): Validate the parsed DW_AT_calling_convention value before assigning it to a subroutine's calling_convention attribute. * gdbtypes.h (struct func_type) <calling_convention>: Use an enum bitfield as its type, instead of plain unsigned. Change-Id: Ibc6b2f71e885cbc5c3c9d49734f7125acbfd1bcd
2019-12-20testsuite, cp: increase the coverage of testing pass-by-ref argumentsTankut Baris Aktemur5-86/+799
Extend testcases for GDB's infcall of call-by-value functions that take aggregate values as parameters. In particular, existing test has been substantially extended with class definitions whose definitions of copy constructor, destructor, and move constructor functions are a combination of (1) explicitly defined by the user, (2) defaulted inside the class declaration, (3) defaulted outside the class declaration, (4) deleted (5) not defined in the source. For each combination, a small and a large class is generated as well as a derived class and a container class. Additionally, the following manually-written cases are provided: - a dynamic class (i.e. class with a virtual method) - classes that contain an array field - a class whose copy ctor is inlined - a class whose destructor is deleted - classes with multiple copy and/or move ctors Test cases check whether GDB makes the right decision to pass an object by value or implicitly by reference, whether really a copy of the argument is passed, and whether the copy constructor and destructor of the clone of the argument are invoked properly. The input program pass-by-ref.cc is generated in the test's output directory. The input program pass-by-ref-2.cc is manually-written. Tests have been verified on the X86_64 architecture with GCC 7.4.0, 8.2.0, and 9.2.1. gdb/testsuite/ChangeLog: 2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * gdb.cp/pass-by-ref.cc: Delete. Generated in the output directory instead. * gdb.cp/pass-by-ref.exp: Extend with more cases. * gdb.cp/pass-by-ref-2.cc: New file. * gdb.cp/pass-by-ref-2.exp: New file. Change-Id: Ie8ab1f260c6ad5ee4eb34b2c1597ce24af04abb6
2019-12-20infcall: handle pass-by-reference arguments appropriatelyTankut Baris Aktemur2-3/+132
If an aggregate argument is implicitly pass-by-reference, allocate a temporary object on the stack, initialize it via the copy constructor (if exists) or trivially by memcpy'ing. Pass the reference of the temporary to the callee function. After the callee returns, invoke the destructor of the temporary. gdb/ChangeLog: 2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> PR gdb/25054 * infcall.c (call_function_by_hand_dummy): Update the argument- passing section for call-by-value parameters. (struct destructor_info): New struct. (call_destructors): New auxiliary function. Change-Id: I18fa5d0df814dfa0defe9e862a88a6dbf1d99d01
2019-12-20infcall, c++: collect more pass-by-reference informationTankut Baris Aktemur2-51/+248
Walk through a given type to collect information about whether the type is copy constructible, destructible, trivially copyable, trivially copy constructible, trivially destructible. The previous algorithm returned only a boolean result about whether the type is trivially copyable. This patch computes more info. Additionally, it utilizes DWARF attributes that were previously not taken into account; namely, DW_AT_deleted, DW_AT_defaulted, and DW_AT_calling_convention. gdb/ChangeLog: 2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * gnu-v3-abi.c (enum definition_style): New enum type. (get_def_style): New function. (is_user_provided_def): New function. (is_implicit_def): New function. (is_copy_or_move_constructor_type): New function. (is_copy_constructor_type): New function. (is_move_constructor_type): New function. (gnuv3_pass_by_reference): Collect language_pass_by_ref_info for a given type. Change-Id: Ic05bd98a962d07ec3c1ad041f709687eabda3bb9
2019-12-20infcall, c++: allow more info to be computed for pass-by-reference valuesTankut Baris Aktemur9-40/+131
In C++, call-by-value arguments that cannot be trivially copied are implicitly passed by reference. When making an infcall, GDB needs to find out if an argument is pass-by-reference or not, so that the correct semantics can be followed. This patch enriches the information computed by the language ops for pass-by-reference arguments. Instead of a plain binary result, the computed information now includes whether the argument is - copy constructible - destructible - trivially copyable - trivially copy constructible - trivially destructible This information is stored in a struct named 'language_pass_by_ref_info'. This patch paves the way for GDB's infcall mechanism to call the copy ctor and the destructor of a pass-by-ref argument appropriately. gdb/ChangeLog: 2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * language.h (struct language_pass_by_ref_info): New struct. (struct language_defn)<la_pass_by_reference>: Change the signature to return a language_pass_by_ref_info instead of an int. (language_pass_by_reference): Ditto. (default_pass_by_reference): Ditto. Adjust the users listed below. * arch-utils.c (default_return_in_first_hidden_param_p): Update. * cp-abi.c (cp_pass_by_reference): Update. * cp-abi.h (cp_pass_by_reference): Update declaration. (struct cp_abi_ops)<pass_by_reference>: Update. * gnu-v3-abi.c (gnuv3_pass_by_reference): Update. * infcall.c (call_function_by_hand_dummy): Update. * language.c (language_pass_by_reference): Update. (default_pass_by_reference): Update. * tic6x-tdep.c (tic6x_return_value): Update. Change-Id: Ib1c1f87f2490a5737c469f7b7185ddc7f6a164cb
2019-12-20gdb: recognize new DWARF attributes: defaulted, deleted, calling conv.Tankut Baris Aktemur4-1/+111
Extend GDB's internal representation of types to include the DW_AT_calling_convention, DW_AT_defaulted, and DW_AT_deleted attributes that were introduced in DWARF5. These attributes will be helpful in a future patch about infcall'ing functions with call-by-value parameters. GDB will use the attributes to decide whether the type of a call-by-value parameter is implicitly pass-by-reference. gdb/ChangeLog: 2019-12-20 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * dwarf2read.c (dwarf2_add_member_fn): Read the DW_AT_defaulted and DW_AT_deleted attributes of a function. (read_structure_type): Read the DW_AT_calling_convention attribute of a type. (is_valid_DW_AT_defaulted): New function. (is_valid_DW_AT_calling_convention_for_type): New function. * gdbtypes.h: Include dwarf2.h. (struct fn_field)<defaulted>: New field to store the DW_AT_defaulted attribute. (struct fn_field)<is_deleted>: New field to store the DW_AT_deleted attribute. (struct cplus_struct_type)<calling_convention>: New field to store the DW_AT_calling_convention attribute. (TYPE_FN_FIELD_DEFAULTED): New macro. (TYPE_FN_FIELD_DELETED): New macro. (TYPE_CPLUS_CALLING_CONVENTION): New macro. * gdbtypes.c (dump_fn_fieldlists): Update for the changes made to the .h file. (print_cplus_stuff): Likewise. Change-Id: I54192f363115b78ec7435a8563b73fcace420765
2019-12-20Don't call tui_show_source from tui_ui_outTom Tromey4-18/+8
This removes the call to tui_show_source from tui_ui_out. This always seemed like a hack, and now that the TUI is using the proper observers, it seems not to be needed. The rest of the logic remains, unfortunately, because it is needed to suppress some gdb output in the TUI case. We could probably find a nicer way to do this (maybe a ui_out_flag), but I haven't attempted this. This was the last caller of tui_show_source, so this is removed as well. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_show_source): Remove. * tui/tui.h (tui_show_source): Don't declare. * tui/tui-out.c (tui_ui_out::do_field_string): Don't call tui_show_source. Change-Id: Id71098e597ee4ebfef0429562baa45f537bd2c2b
2019-12-20Change tui_show_frame_info to return boolTom Tromey4-11/+16
This changes tui_show_frame_info to return bool. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-stack.h (tui_show_frame_info): Return bool. * tui/tui-stack.c (tui_show_frame_info): Return bool. * tui/tui-hooks.c (tui_refresh_frame_and_register_information): Update. Change-Id: Id1374f04f919c30a9f50c1beeb70cbc10b9a8f3b
2019-12-20Fix "list" command in the TUITom Tromey4-44/+106
PR tui/18932 notes that "list" no longer works in the TUI. At some point in the past, it switched the TUI source window to show the specified source; but now this source briefly flashes before the TUI reverts to showing the current stack frame's source. This patch fixes this bug by introducing a new observer that notices when the user selected context has changed. Then, the existing before-prompt observer is updated to request the correct update: either one based on the current stack frame, or one based on the user's source symtab_and_line. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> PR tui/18932: * tui/tui-hooks.c (tui_refresh_frame_and_register_information): Rename parameters. Handle the not-from-stack-frame case. (from_stack, from_source_symtab): New globals. (tui_before_prompt, tui_normal_stop): Update. (tui_context_changed, tui_symtab_changed): New functions. (tui_attach_detach_observers): Attach new observers. gdb/testsuite/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * gdb.tui/list-before.exp: New file. Change-Id: I62013825f6c1afdd568a1c7a8c019b0c881131af
2019-12-20Add observable to watch current source symtabTom Tromey4-37/+89
This patch adds an observable, so that a later patch can change the TUI to notice when the user has selected a new source symtab, say via "list". gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * source.c (struct current_source_location) <set, symtab, line>: New methods. <m_symtab, m_line>: Rename. Now private. (get_current_source_symtab_and_line) (set_default_source_symtab_and_line) (set_current_source_symtab_and_line) (clear_current_source_symtab_and_line, select_source_symtab) (info_source_command, print_source_lines_base) (info_line_command, search_command_helper): Update. * observable.h (current_source_symtab_and_line_changed): Declare observable. * observable.c (current_source_symtab_and_line_changed): Define observable. Change-Id: I3c0f6b40f2df84b590bdf5b5ec5ccd8423bb7f22
2019-12-20Use bool in tui_before_promptTom Tromey2-3/+8
This changes tui_before_prompt to take a bool rather than an int. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-hooks.c (tui_before_prompt): Change parameter to bool. (tui_before_prompt, tui_normal_stop): Update. Change-Id: I9c7f2b764748fe19621851dc4fed4775a6db211a
2019-12-20Don't call set_current_source_symtab_and_line from TUITom Tromey2-7/+6
update_source_window_as_is calls set_current_source_symtab_and_line, but I don't think there is any reason it should be doing this. This patch removes the call. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is): Don't call set_current_source_symtab_and_line. Change-Id: I1152fc7c78150974bd3d555b8568a6f88b65dbe6
2019-12-20Change set_locator_info to take a symtab_and_lineTom Tromey3-38/+32
This changes set_locator_info to take a symtab_and_line, rather than the individual components. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-stack.h (struct tui_locator_window) <set_locator_info>: Take a symtab_and_line. * tui/tui-stack.c (tui_locator_window::set_locator_info): Take a symtab_and_line. (tui_show_frame_info): Update. Change-Id: Icb58d67e6c5bdc034eede9e5bbe8c1d1e633fbb5
2019-12-20Remove a call to update_exec_infoTom Tromey2-4/+6
tui_show_frame_info calls update_exec_info after calling erase_source_content, but there's no need to do this, as erase_source_content already clears the exec info. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-stack.c (tui_show_frame_info): Don't call update_exec_info. Change-Id: I63d658561028ac1bc0a0a2b7ac17da1b9c6134fe
2019-12-20Display "main" on initial TUI startupTom Tromey4-1/+11
I noticed that even when there's a symbol file, "tui enable" won't show "main" by default. I think it should, and this patch fixes this. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_enable): Call tui_display_main. gdb/testsuite/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * gdb.tui/list.exp: Check for source on initial listing. Change-Id: Ic7bfc930e1179f5b61111e30a2dae46a98b00064
2019-12-20Reimplement tui_get_begin_asm_addressTom Tromey2-14/+22
tui_get_begin_asm_address looks for the inferior's "main" to display it. I think this is incorrect in two ways. First, it should probably instead use the user's most recent source context, if one has been set. Second, it uses a hard-coded list of "main" names, but gdb already has a better approach to handling this. This patch fixes both of these problems. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-disasm.c (tui_get_begin_asm_address): Use get_current_source_symtab_and_line, and main_name. Change-Id: I77dc13d49148e8dec5aa3eeb357ce3968a68d0bd
2019-12-20Simplify tui_update_source_windows_with_lineTom Tromey4-31/+17
This changes tui_update_source_windows_with_line to take a symtab_and_line, rather than separate parameters, and then updates the caller. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_show_source): Update. * tui/tui-winsource.h (tui_update_source_windows_with_line): Update. * tui/tui-winsource.c (tui_update_source_windows_with_line): Take a symtab_symbol_info, not a separate symtab and line. Simplify. Change-Id: I8803a0a6fd2938ceee859aea53a57ce582f3e80d
2019-12-20Simplify tui_update_source_windows_with_addrTom Tromey2-13/+9
After the previous changes, tui_update_source_windows_with_addr simply updates each source-like window separately, passing the same data to each. So, it can be simplified by using a loop instead. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_update_source_windows_with_addr): Simplify. Change-Id: Id2ba6b3145ec005dbed1b1115118bd1ef4efb842
2019-12-20Use symtab_and_line when updating TUI windowsTom Tromey7-81/+88
This changes a few TUI source window methods to take a symtab_and_line rather than separate symtab and tui_line_or_address parameters. A symtab_and_line already incorporates the same information, so this seemed simpler. Also, it helps avoid the problem that the source and disassembly windows need different information -- both forms are present in the SAL. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.h (struct tui_source_window_base) <set_contents, update_source_window_as_is, update_source_window>: Take a sal, not a separate symtab and tui_line_or_address. * tui/tui-winsource.c (tui_source_window_base::update_source_window) (tui_source_window_base::update_source_window_as_is): Take a sal, not a separate symtab and tui_line_or_address. (tui_update_source_windows_with_addr) (tui_update_source_windows_with_line) (tui_source_window_base::rerender) (tui_source_window_base::refill): Update. * tui/tui-source.h (struct tui_source_window) <set_contents>: Take a sal, not a separate symtab and tui_line_or_address. * tui/tui-source.c (tui_source_window::set_contents): Take a sal, not a separate symtab and tui_line_or_address. (tui_source_window::maybe_update): Update. * tui/tui-disasm.h (struct tui_disasm_window) <set_contents>: Take a sal, not a separate symtab and tui_line_or_address. * tui/tui-disasm.c (tui_disasm_window::set_contents): Take a sal, not a separate symtab and tui_line_or_address. (tui_disasm_window::do_scroll_vertical) (tui_disasm_window::maybe_update): Update. Change-Id: I6974a03589930a0f910c657ef50b7f6f7397c87d
2019-12-20Use start_line_or_addr in TUI windowsTom Tromey4-4/+13
A few spots in the TUI source and disassembly windows referred to content[0], where start_line_or_addr is equivalent. This patch makes this substitution. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_source_window_base::refill): Use start_line_or_addr. * tui/tui-source.c (tui_source_window::do_scroll_vertical): Use start_line_or_addr. * tui/tui-disasm.c (tui_disasm_window::do_scroll_vertical): Use start_line_or_addr. Change-Id: I1fa807321cd7ad88b3cc5e41cc50f4d4e2d46271
2019-12-20Change tui_source_window_base::set_contents to return boolTom Tromey7-89/+95
This changes tui_source_window_base::set_contents to return bool, rather than tui_status. It also changes one implementation of set_contents to use early returns rather than a variable, which IMO makes it easier to follow. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.h (struct tui_source_window_base) <set_contents>: Return bool. * tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is): Update. * tui/tui-source.h (struct tui_source_window) <set_contents>: Return bool. * tui/tui-source.c (tui_source_window::set_contents): Return bool. Simplify. * tui/tui-disasm.h (struct tui_disasm_window) <set_contents>: Return bool. * tui/tui-disasm.c (tui_disasm_window::set_contents): Return bool. Change-Id: I8c5212400cd7aadf35760c22d5344cd3b9435674
2019-12-20Remove tui_source_window::show_symtab_sourceTom Tromey4-17/+11
tui_source_window::show_symtab_source is identical to update_source_window, so remove the former. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_update_source_windows_with_addr) (tui_update_source_windows_with_line): Call update_source_window. * tui/tui-source.h (struct tui_source_window) <show_symtab_source>: Don't declare. * tui/tui-source.c (tui_source_window::show_symtab_source): Remove. Change-Id: I41781df2126e8bafad46d058532d52602a288e06
2019-12-20Remove tui_show_disassemTom Tromey4-19/+16
tui_show_disassem is just a wrapper for the update_source_window method, and it only has a single caller. This removes the function and inlines the logic into that caller. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_update_source_windows_with_addr): Call update_source_window directly. * tui/tui-disasm.h (tui_show_disassem): Don't declare. * tui/tui-disasm.c (tui_show_disassem): Remove. Change-Id: I7ae7a3309f64a4a949c07a80c46e1664c7f12913
2019-12-20Remove some unnecessary focus switchesTom Tromey3-12/+6
A couple of lower-level utility functions can change the TUI focus. This seems incorrect to me -- focus switches should only be done either by explicit user request, or ass a side effect of changing the layout. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_source_window_base::update_source_window_as_is): Don't switch focus. * tui/tui-disasm.c (tui_show_disassem): Don't switch focus. Change-Id: I0a5bb8a407cf8d52e2fd23b0598eb9bce56b1251
2019-12-20Simplify tui_source_window_base::maybe_update methodTom Tromey7-25/+35
tui_source_window_base::maybe_update takes a symtab_and_line, plus a separate line number and PC. Because a symtab_and_line already holds a line number and a PC, it is possible to remove these extra parameters. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.h (struct tui_source_window_base) <maybe_update>: Remove line_no and addr parameters. * tui/tui-stack.c (tui_show_frame_info): Set PC on sal. Update. * tui/tui-source.h (struct tui_source_window) <maybe_update>: Update. * tui/tui-source.c (tui_source_window::maybe_update): Remove line_no and addr parameters. * tui/tui-disasm.h (struct tui_disasm_window) <maybe_update>: Update. * tui/tui-disasm.c (tui_disasm_window::maybe_update): Remove line_no and addr parameters. Change-Id: I33d8e1a669a179544edb4197f5f7c5429dfc368e
2019-12-20Remove some TUI assertsTom Tromey2-6/+5
This removes a few asserts from the TUI. These asserts aren't useful, because they simply check an invariant that's already ensured by the type system. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_source_window_base::set_is_exec_point_at) (tui_source_window_base::update_breakpoint_info): Remove asserts. Change-Id: I807e1e9bdb0cfa475e70375ceca3a5d4f2eb8d0b
2019-12-20Remove tui_show_disassem_and_update_sourceTom Tromey4-37/+12
tui_show_disassem_and_update_source only has a single caller. This patch simplifies that caller, by having it call tui_show_disassem, and then removes tui_show_disassem_and_update_source. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_update_source_windows_with_addr): Call tui_show_disassem. * tui/tui-disasm.h (tui_show_disassem_and_update_source): Don't declare. * tui/tui-disasm.c (tui_show_disassem_and_update_source): Remove. Change-Id: I7554eca8e259f3539ea7710f2ff369b4a630dd9d
2019-12-20Remove parameters from tui_show_sourceTom Tromey4-4/+10
tui_show_source does not need its parameters, so this removes them. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui.h (tui_show_source): Remove parameters. * tui/tui.c (tui_show_source): Remove parameters. * tui/tui-out.c (tui_ui_out::do_field_string): Update. Change-Id: I7cbcf20175b459c269549f1832d4fb844cc573db
2019-12-20Change tui_update_locator_fullname to take a symtabTom Tromey6-13/+21
This changes tui_update_locator_fullname to take a symtab. This somewhat consolidates the "??" handling. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> * tui/tui.c (tui_show_source): Update. * tui/tui-winsource.c (tui_display_main): Update. * tui/tui-stack.h (tui_update_locator_fullname): Change parameter to symtab. * tui/tui-stack.c (tui_update_locator_fullname): Change parameter to symtab. * tui/tui-disasm.c (tui_show_disassem_and_update_source): Update. Change-Id: Ic61749517b44ac68561d829ff81f16976b830dec
2019-12-20Make isearch change readline prompt in TUITom Tromey2-10/+8
PR tui/23619 points out that isearch changes the prompt in the CLI gdb (and in Bash) -- but not in the TUI. This turns out to be easily fixed by removing tui_rl_saved_prompt and instead using the prompt that readline computes. This is stored in rl_display_prompt, which according to git was added in readline 6.2. gdb/ChangeLog 2019-12-20 Tom Tromey <tom@tromey.com> PR tui/23619: * tui/tui-io.c (tui_rl_saved_prompt): Remove. (tui_redisplay_readline): Use rl_display_prompt. (tui_prep_terminal): Update. Change-Id: Iae97e9776a5540bbe52c73b05e4707941d9cd11a
2019-12-19Consistently quote variables used with "test"Christian Biesinger7-72/+83
This ensures that empty variables and variables with spaces are handled correctly. Code was inconsistent on whether the constant string (e.g. yes/no) should also be quoted; I tried to be consistent with surrounding code. This fixes the error Eli reported during configure with mingw (though that was not fatal). gdb/ChangeLog: 2019-12-19 Christian Biesinger <cbiesinger@google.com> * configure: Regenerate. * configure.ac: Quote variable arguments of test. * gdbsupport/common.m4: Likewise. gdb/gdbserver/ChangeLog: 2019-12-19 Christian Biesinger <cbiesinger@google.com> * configure: Regenerate. * configure.ac: Quote variable arguments of test. Change-Id: I220e78b52c7db88b9dd058eda604635b03464fac
2019-12-19Fix build with GNU Make 3.81Bernd Edlinger2-4/+8
GNU Make 3.81 is apparently confused when the same source file is processed by a pattern rule and an explicit rule at the same time with different output file. The pattern %.o: ../%.c and alloc-ipa.o: ../alloc.c both have the source ../alloc.c but two independent object files alloc.o and alloc-ipa.o, so while building gdbserver I see the following message: make[4]: Circular alloc-ipa.o <- ../alloc.c dependency dropped. CXX alloc-ipa.o g++: warning: '-x c++' after last input file has no effect g++: fatal error: no input files compilation terminated. In the make debug output I see the pattern is first correct: alloc-ipa.o: ../alloc.c | config.h build-gnulib-gdbserver/import/string.h $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< $(POSTCOMPILE) But after the "Circular" dependency is dropped, the pattern is changed to: alloc-ipa.o: | config.h build-gnulib-gdbserver/import/string.h $(IPAGENT_COMPILE) $(WARN_CFLAGS_NO_FORMAT) $< $(POSTCOMPILE) So indeed now $< is empty, and the build step fails. This happens only when alloc.o needs to be built, when alloc.o was already built, the build succeeds, but it takes often several attempts until the build succeeds. By rewriting the alloc-ipa.c: ../alloc.c rule into a pattern rule, the problem goes away. While already at it, this patch removes also the $(WARN_CFLAGS_NO_FORMAT) from the build rule, which is just a copy/paste thing that is not necessary for alloc.c at all.
2019-12-19Make the literal argument to pow a double, not an integerChristian Biesinger2-2/+9
Since pow takes doubles, pass 2.0 instead of 2 to pow (). Conveniently, this fixes the ambiguous call to pow on Solaris 11 with gcc 5.5 (gcc211 on the compile farm), which has a "using std::pow" directive in a system header, which brings in float/double/long double overloads. Fixes the build on Solaris with enable-targets=all. gdb/ChangeLog: 2019-12-19 Christian Biesinger <cbiesinger@google.com> * score-tdep.c (score7_analyze_prologue): Pass 2.0 instead of 2 to pow (). Change-Id: Ib18e7e4749ddcbff0727b72a31198f8cb84d1993
2019-12-19Cast the log10 argument to double to disambiguate itChristian Biesinger2-1/+8
On Solaris 11 with gcc 5.5.0 (gcc211 on the compile farm), math.h has a using std::log10; directive. This is unfortunate because std::log10 has overloads for float/double/long double. To disambiguate this call, cast the argument to double to fix the build. gdb/ChangeLog: 2019-12-19 Christian Biesinger <cbiesinger@google.com> * tui/tui-source.c (tui_source_window::set_contents): Cast argument of log10 to double to fix Solaris 11 with gcc 5.5. Change-Id: I6c0c52e9c172b529c899a435d430e5916aeef69f
2019-12-19Rename "sun" variable to avoid conflicts on SolarisChristian Biesinger2-4/+9
A Solaris system header has a #define for "sun". This renames that variable to avoid the conflict, fixing a build error with --enable-targets=all on Solaris. gdb/ChangeLog: 2019-12-19 Christian Biesinger <cbiesinger@google.com> * fbsd-tdep.c (fbsd_info_proc_files_entry): Rename local var "sun" to "saddr_un". Change-Id: I07a5cd801db1e28ccab8a473ebad74d7afe017c2
2019-12-19Fix comment in field_kindTom Tromey2-3/+7
Christian pointed out that the new comment in field_kind is un-grammatical. This fixes it. gdb/ChangeLog 2019-12-19 Tom Tromey <tromey@adacore.com> * ui-out.h (enum class field_kind): Fix comment. Change-Id: I6608ff18e29f1af98a0ff77012afe28b3d4602f4
2019-12-19Handle CRLF when reading XML on WindowsTom Tromey4-5/+22
xml-support.c uses FOPEN_RT, but then reads the entire contents of the file and verifies that the number of bytes read matches the length. This can fail on Windows, where the read will translate line terminators. This patch fixes the bug by changing xml-support.c to use FOPEN_RB. This works because expat correctly handles \r\n line terminators. gdb/ChangeLog 2019-12-11 Tom Tromey <tromey@adacore.com> * xml-support.c (xml_fetch_content_from_file): Use FOPEN_RB. gdb/testsuite/ChangeLog 2019-12-11 Tom Tromey <tromey@adacore.com> * gdb.xml/tdesc-arch.exp (set_arch): Add "trans_mode" parameter. Add crlf test. Change-Id: I548438f33eed284dde1de8babf755eaa1a40319d
2019-12-18Update gdb.base/default.exp for GDB 10Simon Marchi2-1/+5
Now that the version number in master has been bumped to 10, I get this failure: FAIL: gdb.base/default.exp: show convenience ($_gdb_major = 9 not found) Update the test accordingly. gdb/testsuite/ChangeLog: * gdb.base/default.exp: Update value of $_gdb_major.
2019-12-18Fix pthread_setname_np build errorTom Tromey2-1/+9
My earlier patch to fix the pthread_setname_np build error on macOS was incorrect. While the macOS man page claims that pthread_setname_np returns void, in <pthread.h> it is actually declared returning "int". I knew this earlier, but must have made some mistake when preparing the patch for submission (perhaps when removing the templates?). This patch re-fixes the bug. I'm also applying it to the 9.1 branch. Tested by building on macOS High Sierra. gdb/ChangeLog 2019-12-18 Tom Tromey <tromey@adacore.com> PR build/25268: * gdbsupport/thread-pool.c (set_thread_name): Expect "int" return type on macOS. Add comment. Change-Id: Ib09da6ac33958a0d843f65df2a528112356e7de6
2019-12-18Fix indentation (and clang warning) in c-lang.cSimon Marchi2-5/+10
I see this warning when building with clang: CXX c-lang.o /home/smarchi/src/binutils-gdb/gdb/c-lang.c:314:7: error: misleading indentation; statement is not part of the previous 'if' [-Werror,-Wmisleading-indentation] *length = i * width; ^ /home/smarchi/src/binutils-gdb/gdb/c-lang.c:308:4: note: previous statement is here if (extract_unsigned_integer (contents + i * width, ^ It took me a while to notice that some lines in that area have a spurious space before the tabs, at the beginning of the ling. I'm not sure how clang translates that to misleading indentation, but making the indentation correct gets rid of the error. There are many more instances of this in the code base (`grep -P '^ \t' *.c`), if others think it's a good idea, it would be pretty easy to fix them all up in one shot. gdb/ChangeLog: * c-lang.c (c_get_string, asm_language_defn): Remove space before tab.
2019-12-18Fix build failure on macOSTom Tromey3-6/+18
PR build/25250 notes that the gdb 9 pre-release fails to build on macOS, due to a name clash between field_kind::STRING and the STRING token in ada-exp.y. I am not sure (I couldn't reproduce this myself), but presumably this is due to differences caused by the version of bison in use there. This patch works around the problem by renaming the field_kind enumerator. I chose to rename this one because it is used in relatively few places -- it's just an implementation detail of the style code. This version also renames field_kind::SIGNED for consistency. Let me know what you think. I intend to check this in on the gdb 9 branch as well. gdb/ChangeLog 2019-12-18 Tom Tromey <tromey@adacore.com> PR build/25250: * ui-out.c (ui_out::vmessage): Update. * ui-out.h (enum class field_kind) <FIELD_STRING, FIELD_SIGNED>: Rename. (string_field): Update. (signed_field): Update. Change-Id: Iae9f36f1b793e22c61fee0de2ab2d508668ee7e4
2019-12-18Fix -Wmisleading-indentation warning in top.cSimon Marchi2-3/+26
When building top.c with this clang (daily build from apt.llvm.org): $ clang++-10 --version clang version 10.0.0-+20191211091425+f99297176cd-1~exp1~20191211082036.1372 I get: /home/smarchi/src/binutils-gdb/gdb/top.c:1549:5: error: misleading indentation; statement is not part of the previous 'if' [-Werror,-Wmisleading-indentation] fprintf_filtered (stream, _("\n\ ^ /home/smarchi/src/binutils-gdb/gdb/top.c:1543:3: note: previous statement is here if (SYSTEM_GDBINIT_DIR[0]) ^ This looks like a legitimate warning, the fprintf_filtered is too much indented. Fix it, and at the same time add a bit of whitespace to make this function easier to read. gdb/ChangeLog: * top.c (print_gdb_configuration): Adjust indentation.
2019-12-17Add missing include to bsd-kvm.c for gdb_abspathChristian Biesinger2-0/+5
Commit ff8577f64987a898e1dc5eb6afb66a404fb7bb16 added a call to gdb_abspath in bsd-kvm.c, but doesn't include its header file. This commit fixes that. gdb/ChangeLog: 2019-12-17 Christian Biesinger <cbiesinger@google.com> * bsd-kvm.c: Include gdbsupport/pathstuff.h. Change-Id: I647c3620d8ae978ae27c38dbe0b3347a97c5bfc2
2019-12-17Add virtual destructor to tui_layout_baseSimon Marchi2-0/+7
I stumbled on some ASan failures when using the TUI, when tearing down a TUI layout. The simplest way to trigger it is to run: $ ./gdb --data-directory=data-directory -batch -ex "layout next" The ASan report is: ================================================================= ==2829136==ERROR: AddressSanitizer: new-delete-type-mismatch on 0x608000009a20 in thread T0: object passed to delete has wrong type: size of the allocated type: 88 bytes; size of the deallocated type: 24 bytes. #0 0x7f470fe2507e in operator delete(void*, unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:177 #1 0x55f88c75700d in std::default_delete<tui_layout_base>::operator()(tui_layout_base*) const /usr/include/c++/9.2.0/bits/unique_ptr.h:81 #2 0x55f88c756328 in std::unique_ptr<tui_layout_base, std::default_delete<tui_layout_base> >::~unique_ptr() /usr/include/c++/9.2.0/bits/unique_ptr.h:284 #3 0x7f470ee536a6 in __run_exit_handlers (/usr/lib/libc.so.6+0x3e6a6) #4 0x7f470ee5385d in __GI_exit (/usr/lib/libc.so.6+0x3e85d) #5 0x55f88c69f2ac in quit_force(int*, int) /home/simark/src/binutils-gdb/gdb/top.c:1766 #6 0x55f88becc29a in captured_main_1 /home/simark/src/binutils-gdb/gdb/main.c:1183 #7 0x55f88becc814 in captured_main /home/simark/src/binutils-gdb/gdb/main.c:1192 #8 0x55f88becc8a9 in gdb_main(captured_main_args*) /home/simark/src/binutils-gdb/gdb/main.c:1217 #9 0x55f88b3159cd in main /home/simark/src/binutils-gdb/gdb/gdb.c:32 #10 0x7f470ee3c152 in __libc_start_main (/usr/lib/libc.so.6+0x27152) #11 0x55f88b31579d in _start (/home/simark/build/binutils-gdb/gdb/gdb+0x11fb79d) 0x608000009a20 is located 0 bytes inside of 88-byte region [0x608000009a20,0x608000009a78) allocated by thread T0 here: #0 0x7f470fe238f8 in operator new(unsigned long) /build/gcc/src/gcc/libsanitizer/asan/asan_new_delete.cc:104 #1 0x55f88c750906 in tui_layout_split::clone() const /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:515 #2 0x55f88c74e60e in show_layout /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:90 #3 0x55f88c74e7db in tui_set_layout(tui_layout_type) /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:116 #4 0x55f88c782f4f in tui_enable() /home/simark/src/binutils-gdb/gdb/tui/tui.c:481 #5 0x55f88c74eeb2 in tui_layout_command /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:286 #6 0x55f88b6f969b in do_const_cfunc /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:107 #7 0x55f88b701859 in cmd_func(cmd_list_element*, char const*, int) /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:1952 #8 0x55f88c69b455 in execute_command(char const*, int) /home/simark/src/binutils-gdb/gdb/top.c:652 #9 0x55f88bec9026 in catch_command_errors /home/simark/src/binutils-gdb/gdb/main.c:400 #10 0x55f88becc1f2 in captured_main_1 /home/simark/src/binutils-gdb/gdb/main.c:1167 #11 0x55f88becc814 in captured_main /home/simark/src/binutils-gdb/gdb/main.c:1192 #12 0x55f88becc8a9 in gdb_main(captured_main_args*) /home/simark/src/binutils-gdb/gdb/main.c:1217 #13 0x55f88b3159cd in main /home/simark/src/binutils-gdb/gdb/gdb.c:32 #14 0x7f470ee3c152 in __libc_start_main (/usr/lib/libc.so.6+0x27152) The problem is that the tui_layout_base is missing a virtual destructor. We allocate a derived object (tui_layout_split), but delete it through a tui_layout_base pointer. Since the tui_layout_base destructor is not virtual, the derived (tui_layout_split) destructor is not called, only the base destructor. That code is not in gdb-9-branch, so I don't think this patch is relevant for the stable branch. Note that this is caught as a diagnostic with clang: In file included from /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:22: In file included from /home/simark/src/binutils-gdb/gdb/defs.h:28: In file included from /home/simark/src/binutils-gdb/gdb/gdbsupport/common-defs.h:133: In file included from /home/simark/src/binutils-gdb/gdb/gdbsupport/common-exceptions.h:25: In file included from /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/memory:80: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/unique_ptr.h:81:2: error: delete called on 'tui_layout_base' that is abstract but has non-virtual destructor [-Werror,-Wdelete-abstract-non-virtual-dtor] delete __ptr; ^ /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../include/c++/9.2.0/bits/unique_ptr.h:284:4: note: in instantiation of member function 'std::default_delete<tui_layout_base>::operator()' requested here get_deleter()(std::move(__ptr)); ^ /home/simark/src/binutils-gdb/gdb/tui/tui-layout.c:54:41: note: in instantiation of member function 'std::unique_ptr<tui_layout_base, std::default_delete<tui_layout_base> >::~unique_ptr' requested here static std::unique_ptr<tui_layout_base> applied_layout; ^ 1 error generated. GCC has the similar -Wdelete-non-virtual-dtor, enabled by -Wall, but it doesn't show up because warnings are inhibited for system headers, where std::unique_ptr is defined. There is a bug about it here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58876 gdb/ChangeLog: * tui/tui-layout.h (class tui_layout_base): Add virtual destructor.