aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite
AgeCommit message (Collapse)AuthorFilesLines
2019-01-24AArch64 AAPCS: Ignore static membersAlan Hayward3-6/+221
Static members in C++ structs are global data and therefore not part of the list of struct members considered for passing in registers. Note the corresponding code in GCC (from which the GDB AAPCS code is based) does not have any static member checks due to the static members not being part of the struct type at that point. Extend gdb.base/infcall-nested-structs.exp to test structs with static members when compiled for C++. XFAIL more cases for x86_64 (see gdb/24104). For completeness, ensure some test cases have both empty structures and static members. Also fixes gdb.dwarf2/dw2-cp-infcall-ref-static.exp. gdb/ChangeLog: * aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check for static members. (pass_in_v_vfp_candidate): Likewise. gdb/testsuite/ChangeLog: * gdb.base/infcall-nested-structs.c (struct struct_static_02_01): New structure. (struct struct_static_02_02): Likewise. (struct struct_static_02_03): Likewise. (struct struct_static_02_04): Likewise. (struct struct_static_04_01): Likewise. (struct struct_static_04_02): Likewise. (struct struct_static_04_03): Likewise. (struct struct_static_04_04): Likewise. (struct struct_static_06_01): Likewise. (struct struct_static_06_02): Likewise. (struct struct_static_06_03): Likewise. (struct struct_static_06_04): Likewise. (cmp_struct_static_02_01): Likewise. (cmp_struct_static_02_02): Likewise. (cmp_struct_static_02_03): Likewise. (cmp_struct_static_02_04): Likewise. (cmp_struct_static_04_01): Likewise. (cmp_struct_static_04_02): Likewise. (cmp_struct_static_04_03): Likewise. (cmp_struct_static_04_04): Likewise. (cmp_struct_static_06_01): Likewise. (cmp_struct_static_06_02): Likewise. (cmp_struct_static_06_03): Likewise. (cmp_struct_static_06_04): Likewise. (call_all): Test new structs. * gdb.base/infcall-nested-structs.exp: Likewise.
2019-01-21AArch64 AAPCS: Empty structs have non zero size in C++Alan Hayward2-13/+48
When gdb.base/infcall-nested-structs.c is complied as C++, the compiler will not pass structs containing empty structs via float arguments. This is because structs in C++ have a minimum size of 1, causing padding in the struct once compiled. The AAPCS does not allow structs with padding to be passed in float arguments. Add padding checks to AArch64 and add C++ compile variant to the test. Some of the tests fail on X86_64. This has been raised as bug gdb/24104. gdb/ChangeLog: * aarch64-tdep.c (aapcs_is_vfp_call_or_return_candidate_1): Check for padding. gdb/testsuite/ChangeLog: * gdb.base/infcall-nested-structs.exp: Test C++ in addition to C.
2019-01-21Testsuite: Ensure stack protection is off for GCCAlan Hayward5-3/+124
Using -fstack-protector-strong will cause GDB to break on the wrong line when placing a breakpoint on a function. This is due to inadequate dwarf line numbering, and is being tracked by the GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88432 GCC (and Clang) provided by Debian/Ubuntu default to stack protector being enabled. Ensure that when running the GDB testsuite, stack protector is always turned off for GCC 4.1.0 (when stack protector was added) and above. Ensure that this does not cause infinite recursion due to test_compiler_info having to compile a file itself. Add a test to explicitly test breakpoints with various levels of stack protection on both GCC and Clang, with xfail for the known errors. Restore change in ovldbreak.exp which worked around the issue. gdb/testsuite/ChangeLog: 2019-01-18 Alan Hayward <alan.hayward@arm.com> * gdb.base/stack-protector.c: New test. * gdb.base/stack-protector.exp: New file. * gdb.cp/ovldbreak.exp: Only allow a single break line. * lib/gdb.exp (get_compiler_info): Use getting_compiler_info option. (gdb_compile): Remove stack protector for GCC and prevent recursion.
2019-01-16Introduce dwarf2_cu::get_builderKeith Seitz2-0/+218
This patch is an attempt to deal with a variety of bugs reported where GDB segfaults attempting to access a dwarf2_cu's builder. In certain circumstances, this builder can be NULL. This is especially common when inheriting DIEs via inlined subroutines in other CUs. The test case demonstrates one such situation reported by users. See gdb/23773, rhbz1638798, and dups for other concrete examples. The approach taken here is to save the ancestor CU into the dwarf2_cu of all CUs with DIEs that are "imported." This can happen whenever follow_die_offset and friends are called. This essentially introduces a chain of CUs that caused the importation of a DIE from a CU. Whenever a builder is requested of a CU that has none, the ancestors are searched for the first one with a builder. A design side effect of this is that the builder can now only be accessed by getter and setter methods because the builder itself is private. The bulk of the patch is relatively mindless text conversion from "cu->builder" to "cu->get_builder ()". I've included one test which was derived from one (of the many) bugs reported on the issue in both sourceware and Fedora bugzillas. gdb/ChangeLog: PR gdb/23773 * dwarf2read.c (dwarf2_cu) <ancestor>: New field. <builder>: Rename to .. <m_builder>: ... this and make private. (dwarf2_cu::get_builder): New method. Change all users of `builder' to use this method. (dwarf2_start_symtab): Move to ... (dwarf2_cu::start_symtab): ... here. Update all callers (setup_type_unit_groups): Move to ... (dwarf2_cu::setup_type_unit_groups): ... here. Update all callers. (dwarf2_cu::reset_builder): New method. (process_full_compunit, process_full_type_unit): Use dwarf2_cu::reset_builder. (follow_die_offset): Record the ancestor CU if it is different from the followed DIE's CU. (follow_die_sig_1): Likewise. gdb/testsuite/ChangeLog: PR gdb/23773 * gdb.dwarf2/inlined_subroutine-inheritance.exp: New file.
2019-01-14[PowerPC] Aliases for vector registersPedro Franco de Carvalho5-2/+137
This patch defines pseudo-registers "v0" through "v31" as aliases that map to the corresponding raw "vr0" through "vr31" vector registers for Power. The motivation behind this is that although GDB defines these registers as "vrX", the disassembler prints them as "vX", e.g. as the operands in instructions such as "vaddubm v2,v1,v1". This can be confusing to users trying to print out the values of the operands while inspecting the disassembled code. The new aliases are made not to belong to any register group, to avoid duplicated values in "info register vector" and "info register all". The arch-specific rs6000_pseudo_register_reggroup_p function had previously been removed since the other pseudo-registers could have their groups inferred by their type. It restored with this patch to handle the aliases. Membership for the other pseudo-registers is still determined using the default function. A new tests checks that GDB prints the expected values of vector registers after they are filled by the inferior, by using both the raw names and the aliases. Two other existing tests are modified to also test the aliases. gdb/ChangeLog: 2019-01-14 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * ppc-tdep.h (struct gdbarch_tdep) <ppc_v0_alias_regnum>: New field. * rs6000-tdep.c: Include reggroups.h. (IS_V_ALIAS_PSEUDOREG): Define. (rs6000_register_name): Return names for the "vX" aliases. (rs6000_pseudo_register_type): Return type for the "vX" aliases. (rs6000_pseudo_register_reggroup_p): Restore. Handle "vX" aliases. Call default_register_reggroup_p for all other pseudo-registers. (v_alias_pseudo_register_read, v_alias_pseudo_register_write): New functions. (rs6000_pseudo_register_read, rs6000_pseudo_register_write): Handle "vX" aliases. (v_alias_pseudo_register_collect): New function. (rs6000_ax_pseudo_register_collect): Handle "vX" aliases. (rs6000_gdbarch_init): Initialize "vX" aliases as pseudo-registers. Restore registration of rs6000_pseudo_register_reggroup_p with set_tdesc_pseudo_register_reggroup_p. gdb/testsuite/ChangeLog: 2019-01-14 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * gdb.arch/vsx-regs.exp: Add tests that use the vector register aliases. * gdb.arch/altivec-regs.exp: Likewise. Fix indentation of two tests. * gdb.arch/powerpc-vector-regs.c: New file. * gdb.arch/powerpc-vector-regs.exp: New file. gdb/doc/ChangeLog: 2019-01-14 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * gdb.texinfo (PowerPC Features): Document the alias pseudo-registers for the org.gnu.gdb.power.altivec feature.
2019-01-14[PowerPC] Fix "info vector" test in gdb.arch/altivec-regs.expPedro Franco de Carvalho2-38/+10
This patch fixes one of the tests in gdb.arch/altivec-regs.exp that was passing an incorrect list to gdb_expect_list, which always matched. gdb/testsuite/ChangeLog: 2019-01-14 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * gdb.arch/altivec-regs.exp: Fix the list passed to gdb_expect_list when testing "info vector".
2019-01-12gdb/testsuite: Don't allow paths to appear in test nameAndrew Burgess2-0/+5
Having paths in the test names makes it harder to compare results between two runs in different directories. Give the test a name so that the path doesn't appear. gdb/ChangeLog: * gdb.base/style.exp: Don't include path in testname.
2019-01-10gdb/23712: Test case for multidictionaryKeith Seitz2-0/+163
This is a test derived from one of the reproducers in symtab/23010. The DIE tree used here is typical of compilations with LTO, where an artificial parent DIE of language C99 imports DIEs of other languages. gdb/testsuite/ChangeLog: PR gdb/23712 PR symtab/23010 * gdb.dwarf2/multidictionary.exp: New file.
2019-01-09gdb: Remove support for old mangling schemesSimon Marchi2-1416/+12
An upcoming sync with gcc's libiberty [1] will remove support for old mangling schemes (GNU v2, Lucid, ARM, HP and EDG). It will remove the cplus_demangle_opname function, so we need to get rid of its usages in GDB (it's a GNU v2 specific function). I think the changes are mostly relatively obvious, some hacks that were necessary to support overloaded operators with GNU v2 mangling are not needed anymore. The change in stabsread.c is perhaps less obvious. I think we could get rid of more code in that region that is specific to old mangling schemes, but I chose to do only the minimal changes required to remove the cplus_demangle_opname uses. There is also a detailed comment just above that explaining how GNU v2 and v3 mangled symbols are handled, I decided to leave it as-is, since I wasn't sure which part to remove, change or leave there. [1] The commit "Remove support for demangling GCC 2.x era mangling schemes.", specifically. gdb/ChangeLog: * gdbtypes.c (check_stub_method_group): Remove handling of old mangling schemes. * linespec.c (find_methods): Likewise. * stabsread.c (read_member_functions): Likewise. * valops.c (search_struct_method): Likewise. (value_struct_elt_for_reference): Likewise. * NEWS: Mention this change. gdb/testsuite/ChangeLog: * gdb.cp/demangle.exp (test_gnu_style_demangling): Rename to... (test_gnuv3_style_demangling): ... this. (test_lucid_style_demangling): Remove. (test_arm_style_demangling): Remove. (test_hp_style_demangling): Remove. (do_tests): Remove calls to the above. gdb/doc/ChangeLog: * gdb.texinfo (Print Settings): Remove mention of specific demangle-style values, just refer to the in-process help.
2019-01-09gdb/testsuite: Remove interactive prompt case from mi_gdb_testAndrew Burgess2-5/+5
I noticed that when running this test: make check-gdb RUNTESTFLAGS="--target_board=native-gdbserver gdb.mi/mi-break.exp" I would occasionally see some UNRESOLVED test results like this: (gdb) PASS: gdb.mi/mi-break.exp: mi-mode=separate: breakpoint at main Expecting: ^(kill[ ]+)?(.*[ ]+[(]gdb[)] [ ]*) kill &"kill\n" ~"Kill the program being debugged? (y or n) [answered Y; input not from terminal]\n" =thread-group-exited,id="i1" ERROR: Got interactive prompt. UNRESOLVED: gdb.mi/mi-break.exp: mi-mode=separate: The problem appears to be that the expect buffer fills up to include the '(y or n)' prompt without including the following lines. The pattern supplied by the outer test script is looking for the following lines. As the following lines are not present then expect matches on the interactive prompt case rather than the case for the user supplied pattern. The problem with this is that we are not really at an interactive prompt, GDB is providing an answer for us and then moving on. When I examine a successful run of the test the output from GDB is identical, the only difference is where expect happens to buffer the output from GDB. This patch remove all special handling of the interactive prompt case. This means that if we ever break GDB and start seeing an unexpected interactive prompt then tests will rely on a timeout to fail, instead of having dedicated interactive prompt detection, but this solves the problem that an auto-answered prompt looks very similar to an interactive prompt. With this patch in place I can now leave the following loop running indefinitely, where before it would fail usually after ~10 iterations. while make check-gdb RUNTESTFLAGS="--target_board=native-gdbserver gdb.mi/mi-break.exp"; \ do /bin/true; \ done gdb/testsuite/ChangeLog: * lib/mi-support.exp (mi_gdb_test): Remove interactive prompt case.
2019-01-06Fix crash in "finish"Tom Tromey2-0/+107
PR gdb/28155 notes a crash in "finish" that occurs with a particular source file compiled by clang. The bug is the typical gdb problem of a missing call to check_typedef. clang emits a function whose return type is a typedef to void. get_return_value asserts that the return type is not void, but the callers were not using check_typedef first. gdb/ChangeLog 2019-01-06 Tom Tromey <tom@tromey.com> PR gdb/28155: * python/py-finishbreakpoint.c (bpfinishpy_init): Use check_typedef. * infcmd.c (finish_command_fsm_should_stop): Use check_typedef. (print_return_value): Likewise. gdb/testsuite/ChangeLog 2019-01-06 Tom Tromey <tom@tromey.com> PR gdb/28155: * gdb.dwarf2/typedef-void-finish.exp: New file.
2019-01-01Update copyright year range in all GDB files.Joel Brobecker3472-3472/+3472
This commit applies all changes made after running the gdb/copyright.py script. Note that one file was flagged by the script, due to an invalid copyright header (gdb/unittests/basic_string_view/element_access/char/empty.cc). As the file was copied from GCC's libstdc++-v3 testsuite, this commit leaves this file untouched for the time being; a patch to fix the header was sent to gcc-patches first. gdb/ChangeLog: Update copyright year range in all GDB files.
2018-12-28Fix a crash in jit.cTom Tromey4-0/+109
A user at Mozilla pointed out a crash in jit.c. In his situation, an inferior using the JIT API exec'd an executable that did not use it. This caused an assertion failure when jit.c:free_objfile_data called delete_breakpoint with NULL. This patch fixes the problem in the obvious way. New test case included. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * jit.c (free_objfile_data): Only delete breakpoint if non-null. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> Simon Marchi <simark@simark.ca> * gdb.base/jit-exec.exp: New file. * gdb.base/jit-exec.c: New file. * gdb.base/jit-execd.c: New file.
2018-12-28Style addressesTom Tromey2-1/+5
This changes gdb to style addresses. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * ui-out.h (enum class ui_out_style_kind) <ADDRESS>: New constant. * ui-out.c (ui_out::field_core_addr): Add styling. * stack.c (print_frame): Add styling. * printcmd.c (print_address): Add styling. (print_address_demangle, info_address_command): Likewise. * cli/cli-style.h (address_style): Declare. * cli/cli-style.c (address_style): New global. (_initialize_cli_style): Register new commands. * cli-out.c (cli_ui_out::do_field_string): Update. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Update test to check for address styling.
2018-12-28Style the "Reading symbols" messageTom Tromey2-0/+9
The "Reading symbols" message does not use ui-out (perhaps it should?), so this styles it using the low-level API. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * symfile.c (symbol_file_add_with_addrs): Style file name. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for styling of "Reading symbols" message.
2018-12-28Style the gdb welcome messageTom Tromey2-0/+10
This changes gdb to style the welcome message that is shown by default. The styling is only done interactively. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * top.c (print_gdb_version): Style gdb version number. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for version number styling.
2018-12-28Style print_address_symbolicTom Tromey2-0/+6
print_address_symbolic does not use ui-out, so it did not style function names. This patch changes it to use the low-level style code directly. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * printcmd.c (print_address_symbolic): Style function name. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for print_address_symbolic.
2018-12-28Style locations when setting a breakpointTom Tromey2-1/+8
say_where does not use ui-out, so function and file names printed by it were not styled. This patch changes say_where to use the low-level style code directly. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * breakpoint.c (say_where): Style file name. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for breakpoint setting.
2018-12-28Style variable namesTom Tromey2-1/+6
This adds style support for variable names. For the time being, this is only done in backtraces, not in ptype or print; those places do not use ui-out and so would need ad hoc changes. This also adds styling to the names printed for local variables in "backtrace full". This code does not use ui-out, so the styling is done using the low-level API. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * ui-out.h (enum class ui_out_style_kind) <VARIABLE>: New global. * stack.c (print_frame_arg): Style name. * printcmd.c (print_variable_and_value): Style variable name. * cli/cli-style.h (variable_name_style): Declare. * cli/cli-style.c (variable_name_style): New global. (_initialize_cli_style): Update. * cli-out.c (cli_ui_out::do_field_string): Update. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: Add test for variable names.
2018-12-28Add output styles to gdbTom Tromey3-0/+66
This adds some output styling to the CLI. A style is currently a foreground color, a background color, and an intensity (dim or bold). (This list could be expanded depending on terminal capabilities.) A style can be applied while printing. For ui-out, this is done by passing the style constant as an argument. For low-level cases, fprintf_styled and fputs_styled are provided. Users can control the style via a number of new set/show commands. In the interest of not typing many nearly-identical documentation strings, I automated this. On the down side, this is not very i18n-friendly. I've chose some default colors to use. I think it would be good to enable this by default, so that when users start the new gdb, they will see the new feature. Stylizing is done if TERM is set and is not "dumb". This could be improved when the TUI is available by using the curses has_colors call. That is, the lowest layer could call this without committing to using curses everywhere; see my other patch for TUI colorizing. I considered adding a new "set_style" method to ui_file. However, because the implementation had to interact with the pager code, I didn't take this approach. But, one idea might be to put the isatty check there and then have it defer to the lower layers. gdb/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * utils.h (set_output_style, fprintf_styled) (fputs_styled): Declare. * utils.c (applied_style, desired_style): New globals. (emit_style_escape, set_output_style): New function. (prompt_for_continue): Emit style escapes. (fputs_maybe_filtered): Likewise. (fputs_styled, fprintf_styled): New functions. * ui-out.h (enum class ui_out_style_kind): New. (class ui_out) <field_string, field_stream, do_field_string>: Add style parameter. * ui-out.c (ui_out::field_stream, ui_out::field_string): Add style parameter. * tui/tui-out.h (class tui_ui_out) <do_field_string>: Add style parameter. * tui/tui-out.c (tui_ui_out::do_field_string): Add style parameter. (tui_ui_out::do_field_string): Update. * tracepoint.c (print_one_static_tracepoint_marker): Style output. * stack.c (print_frame_info, print_frame): Style output. * source.c (print_source_lines_base): Style output. * skip.c (info_skip_command): Style output. * record-btrace.c (btrace_call_history_src_line): Style output. (btrace_call_history): Likewise. * python/py-framefilter.c (py_print_frame): Style output. * mi/mi-out.h (class mi_ui_out) <do_field_string>: Add style parameter. * mi/mi-out.c (mi_ui_out::do_table_header) (mi_ui_out::do_field_int): Update. (mi_ui_out::do_field_string): Update. * disasm.c (gdb_pretty_print_disassembler::pretty_print_insn): Style output. * cli/cli-style.h: New file. * cli/cli-style.c: New file. * cli-out.h (class cli_ui_out) <do_field_string>: Add style parameter. * cli-out.c (cli_ui_out::do_table_header) (cli_ui_out::do_field_int, cli_ui_out::do_field_skip): Update. (cli_ui_out::do_field_string): Add style parameter. Style the output. * breakpoint.c (print_breakpoint_location): Style output. (update_static_tracepoint): Likewise. * Makefile.in (SUBDIR_CLI_SRCS): Add cli-style.c. (HFILES_NO_SRCDIR): Add cli-style.h. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * gdb.base/style.exp: New file. * gdb.base/style.c: New file.
2018-12-28Change gdb test suite's TERM settingTom Tromey3-49/+59
This changes the gdb test suite to set TERM to "dumb" by default. This setting disables terminal styling, so that the existing tests do not need to be updated. gdb/testsuite/ChangeLog 2018-12-28 Tom Tromey <tom@tromey.com> * lib/gdb.exp (gdb_init): Set the TERM environment variable to "dumb". * gdb.base/readline.exp (operate_and_get_next): Save and restore the TERM environment variable.
2018-12-27Translate PyExc_KeyboardInterrupt to gdb "quit"Tom Tromey2-0/+45
A while back I typed "info pretty-printers" with a large number of printers installed, and I typed "q" to stop the pagination. I noticed that gdb printed a Python exception in this case. It seems to me that, instead, quitting pagination (or control-c'ing a Python command generally) should be handled the same way that gdb normally handles a quit. This patch implements this idea by changing gdbpy_handle_exception to treat PyExc_KeyboardInterrupt specially. gdb/ChangeLog 2018-12-27 Tom Tromey <tom@tromey.com> * python/py-utils.c (gdbpy_handle_exception): Translate PyExc_KeyboardInterrupt to quit. gdb/testsuite/ChangeLog 2018-12-27 Tom Tromey <tom@tromey.com> * gdb.python/py-cmd.exp (test_python_inline_or_multiline): Add pagination test.
2018-12-27Fix gdb.ada/fun_renaming.exp by using more unique names.Philippe Waroquiers4-14/+16
The test fails due to conflict between var 'next' and s-pooloc.adb next: (gdb) print next(1) Multiple matches for next [0] cancel [1] pack.next (integer) return integer at /bd/home/philippe/gdb/git/binutils-gdb/gdb/testsuite/gdb.ada/fun_renaming/pack.adb:19 [2] system.pool_local.next (system.address) return system.pool_local.acc_address at s-pooloc.adb:151 > FAIL: gdb.ada/fun_renaming.exp: print next(1) (timeout) Fix by making the names and renamings more unique. gdb/testsuite/ChangeLog 2018-12-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.ada/fun_renaming/pack.ads (Next): Rename to Fun_Rename_Test_Next. (Renamed_Next): Rename to Renamed_Fun_Rename_Test_Next. gdb.ada/fun_renaming/pack.adb (Next): Rename to Fun_Rename_Test_Next. gdb.ada/fun_renaming/fun_renaming.adb (N): Rename to Fun_Rename_Test_N. gdb.ada/fun_renaming.exp: Update accordingly.
2018-12-27Fix gdb.ada/assign_arr.exp by using more unique names.Philippe Waroquiers3-3/+3
The test fails (timeout) due to conflict between var 'input' and s-ststop.adb 'input': (gdb) print input.u2 := (0.25,0.5,0.75) Multiple matches for input [0] cancel [1] system.strings.stream_ops.storage_array_ops.input (access ada.streams.root_stream_type; system.strings.stream_ops.io_kind; natural) return system.storage_elements.storage_array at s-ststop.adb:127 [2] system.strings.stream_ops.stream_element_array_ops.input (access ada.streams.root_stream_type; system.strings.stream_ops.io_kind; natural) return ada.streams.stream_element_array at s-ststop.adb:127 [3] system.strings.stream_ops.string_ops.input (access ada.streams.root_stream_type; system.strings.stream_ops.io_kind; natural) return string at s-ststop.adb:127 [4] system.strings.stream_ops.wide_string_ops.input (access ada.streams.root_stream_type; system.strings.stream_ops.io_kind; natural) return wide_string at s-ststop.adb:127 [5] system.strings.stream_ops.wide_wide_string_ops.input (access ada.streams.root_stream_type; system.strings.stream_ops.io_kind; natural) return wide_wide_string at s-ststop.adb:127 [6] target_wrapper.input at /bd/home/philippe/gdb/git/info_t/gdb/testsuite/gdb.ada/assign_arr/target_wrapper.ads:24 > FAIL: gdb.ada/assign_arr.exp: print input.u2 := (0.25,0.5,0.75) (timeout) gdb/testsuite/ChangeLog 2018-12-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.ada/assign_arr/target_wrapper.ads (Input): Rename to Assign_Arr_Input. main_p324_051.adb: Update accordingly. gdb.ada/assign_arr.exp: Likewise.
2018-12-27Improve gdb.ada/rename_subscript_param.exp by using more unique names.Philippe Waroquiers2-6/+6
With old compilers, the test fails because no debug info is generated for 'B' and GDB finds some 'b' in atnat.h: (gdb) print b Multiple matches for b [0] cancel [1] b at ../sysdeps/ieee754/dbl-64/atnat.h:106 [2] b at ../sysdeps/ieee754/dbl-64/atnat.h:106 [3] b at ../sysdeps/ieee754/dbl-64/atnat.h:106 > FAIL: gdb.ada/rename_subscript_param.exp: print b before changing its value (timeout) Avoid the timeout by renaming 'b' to rename_subscript_param_b. Also, change 'before' to 'after' in the gdb_test message that prints the value after changing it. The test still fails with old compilers that do not properly generate debug info for this renaming: (gdb) print rename_subscript_param_b No definition of "rename_subscript_param_b" in current context. (gdb) FAIL: gdb.ada/rename_subscript_param.exp: print rename_subscript_param_b before changing its value Note: if the compiler would generate the correct debug info, the test should succeed with the name B. However, waiting for this fix, changing the name ensures that the test fails directly, instead of causing a timeout. 2018-12-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> PR ada/23381 * gdb.ada/rename_subscript_param/pkg.adb (B): Rename to Rename_Subscript_Param_B. All users updated. gdb.ada/rename_subscript_param.exp: Test names made unique. Note that PR ada/23381 is only fully fixed when using a recent compiler.
2018-12-27Fix gdb.ada/packed_array_assign.exp by using more unique names.Philippe Waroquiers2-5/+7
The test gdb.ada/packed_array_assign fails due to conflict between component 'w' and system.dim.mks.w: (gdb) print pra := ((x => 2, y => 0, w => 17), pr, (x => 7, y => 1, w => 23)) Unknown component name: system.dim.mks.w. (gdb) FAIL: gdb.ada/packed_array_assign.exp: print pra := ((x => 2, y => 0, w => 17), pr, (x => 7, y => 1, w => 23)) Also, depending on the compiler version, the component w might be reordered and placed before components x and y. So, change the component order in the source, so that both an old compiler (GNATMAKE 6.3.0, gcc (Debian 6.3.0-18+deb9u1) 6.3.0 20170516) and a new compiler (GNATMAKE Pro 20.0w (20181210-82), based on gcc 8.2.1) produce the same component order (checked by using -gnatR3s). So, update to test the new (more unique) names in the source order. 2018-12-26 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.ada/packed_array_assign/aggregates.ads (Packed_Rec): Rename components to Packed_Array_Assign_[X|Y|W]. Place component Packed_Array_Assign_W as first component, to ensure old and new compilers have the same representation. All users updated.
2018-12-24gdb: Allow struct fields named doubleAndrew Burgess3-0/+169
The 64-bit RISC-V target currently models the floating point registers as having the following type: union riscv_double { builtin_type_ieee_single float; builtin_type_ieee_double double; } Notice the choice of names for the fields of this struct, possibly not ideal choices, as these are not valid field names in C. However, this type is only ever defined within GDB (or in the target description), and no restriction seems to exist on the field names in that case. The problem though is that currently: (gdb) info registers $ft0 ft0 {float = 0, double = 0} (raw 0x0000000000000000) (gdb) p $ft0.float $1 = 0 (gdb) p $ft0.double A syntax error in expression, near `double'. We can access the 'float' field, but not the 'double' field. This is because the string 'double' is handled differently to the string 'float' in c-exp.y. In both cases the string '$ft0' is parsed as a VARIABLE expression. In the 'float' case, the string 'float' becomes a generic NAME token in 'lex_one_token', which then allows the rule "exp '.' name" to match and the field name lookup to occur. The 'double' case is different. In order to allow parsing of the type string 'long double', the 'double' string becomes the token DOUBLE_KEYWORD. At this point there's no rule to match "exp '.' DOUBLE_KEYWORD", so we can never lookup the field named 'double'. We could rename the fields for RISC-V, and maybe that would be the best solution. However, its not hard to allow for fields named 'double', which is what this patch does. A new case is added to the 'field_name' rule to match the DOUBLE_KEYWORD, and create a suitable 'struct stoken'. With this done the "exp '.' field_name" pattern can now match, and we can lookup the double field. With this patch in place I now see this behaviour: (gdb) info registers $ft0 ft0 {float = 0, double = 0} (raw 0x0000000000000000) (gdb) p $ft0.float $1 = 0 (gdb) p $ft0.double $2 = 0 I've gone ahead and handled INT_KEYWORD, LONG, SHORT, SIGNED_KEYWORD, and UNSIGNED as well within field_name. I've added a new test for this functionality. This change was tested on x86-64 GNU/Linux with no regressions. gdb/ChangeLog: * c-exp.y (field_name): Allow DOUBLE_KEYWORD, INT_KEYWORD, LONG, SHORT, SIGNED_KEYWORD, and UNSIGNED tokens to act as a field names. (typename_stoken): New function. gdb/testsuite/ChangeLog: * gdb.dwarf2/dw2-unusual-field-names.c: New file. * gdb.dwarf2/dw2-unusual-field-names.exp: New file.
2018-12-24Fix gdb.ada bp_fun_addr failure due to conflict between fun 'a' and ↵Philippe Waroquiers3-7/+13
s-dimmks.ads 'A'. The test fails (timeout) due to: (gdb) PASS: gdb.ada/bp_fun_addr.exp: break *a'address run Starting program: /bd/home/philippe/gdb/git/build_info_t/gdb/testsuite/outputs/gdb.ada/bp_fun_addr/a Multiple matches for a [0] cancel [1] a at /bd/home/philippe/gdb/git/info_t/gdb/testsuite/gdb.ada/bp_fun_addr/a.adb:18 [2] system.dim.mks.a at s-dimmks.ads:115 > FAIL: gdb.ada/bp_fun_addr.exp: run until breakpoint at a'address (timeout) testcase /home/philippe/gdb/git/build_info_t/gdb/testsuite/../../../info_t/gdb/testsuite/gdb.ada/bp_fun_addr.exp completed in 10 seconds Fix this by using a fun name that has more chances to be unique. 2018-12-24 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.ada/bp_fun_addr/a.adb (a): Rename to bp_fun_addr. Filename a.adb changed to bp_fun_addr.adb. gdb.ada/bp_fun_addr.exp: Update test accordingly.
2018-12-21Fix various tests to use -no-pie linker flag when neededJan Vrany9-7/+38
Various tests use test code written in i386 / x86_64 assembly that cannot be used to create PIE executables. Therefore compilation of test programs failed on systems where the compiler default is to create PIE executable. The solution is to use -no-pie linker flag, however, such flag may not (is not) supported by all compilers GDB needs to support (e.g. gcc 4.8). To handle this, introduce a new flag to gdb_compile - nopie - which inserts -no-pie linker flag where supported and is no-op where it is not. By default, -no-pie flag is inserted since most modern compiler do support it.
2018-12-21gdb: Fix "info os <unknown>" commandPaul Marechal2-0/+8
Running `info os someUnknownOsType` is crashing when gdb is built with -D_GLIBCXX_DEBUG: /usr/include/c++/5/debug/vector:439:error: attempt to access an element in an empty container. In target_read_stralloc from target.c, the call to target_read_alloc_1 can return an empty vector, we then call vector::back on this vector, which is invalid. This commit adds a check for emptiness before trying to call vector::back on it. It also adds test to check for `info os <unknown>` to return the proper error message. This is a regression in gdb 8.2 and this patch restores the behavior of previous versions. gdb/ChangeLog: PR gdb/23974 * target.c (target_read_stralloc): Check for empty vector. gdb/testsuite/ChangeLog: PR gdb/23974 * gdb.base/info-os.exp: Check return for unknown "info os" type.
2018-12-20Ensure deterministic result order in gdb.ada/info_auto_lang.expPhilippe Waroquiers2-17/+26
standard_ada_testfile, standard_test_file and the explicit csrcfile assignment in info_auto_lang.exp all gives similar pathnames prefix for a source, such as /home/philippe/gdb/git/build_binutils-gdb/gdb/testsuite/../../../binutils-gdb/gdb/testsuite/gdb.<something>. Note that the above pathnames contain ../ which appears when a relative pathname is used to call configure. In any case, the gnat compiler normalizes Ada sources path when compiling. So, the 'Ada' .o object are referencing a pathname such as /home/philippe/gdb/git/binutils-gdb/gdb/testsuite/gdb.ada/info_auto_lang/proc_in_ada.adb, while the 'C' .o object still references the not normalized pathname. As the results of 'info functions | ...' are sorted by pathname first, the order of the results depends on the comparison between different directories, leading to results that can change depending on these directories. => Ensure the result order is always the same, by normalising the C source file, which makes the results independent of the way configure is launched. Tested by running the testcase in 2 different builds, that without normalize were giving different results. Note: such 'set csrcfile' is used in 4 other tests mixing Ada and C. After discussion, it was deemed sufficient to just normalize the pathname for this test. gdb/testsuite/ChangeLog 2018-12-20 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.ada/info_auto_lang.exp: Normalize some_c source file. Update order of results accordingly.
2018-12-12gdb: Update test pattern to deal with native-extended-gdbserverAndrew Burgess2-2/+25
When running the test gdb.base/annota1.exp with: make check-gdb RUNTESTFLAGS="--target_board=native-extended-gdbserver gdb.base/annota1.exp" I would see a failure due to some unexpected lines in GDB's output. The extra lines (when compared with a native run) were about file transfer from the remote back to GDB. This commit extends the regexp for this test to allow for these extra lines, and also splits the rather long regexp up into a list of parts. With this change in place I see no failures for gdb.base/annota1.exp when using the native-extended-gdbserver target board, nor with a native run on X86-64/Linux. gdb/testsuite/ChangeLog: * gdb.base/annota1.exp: Update a test regexp.
2018-12-11gdb/riscv: Update test to handle targets without an fpuAndrew Burgess2-1/+13
The FPU is optional on RISC-V. The gdb.base/float.exp test currently assumes that an fpu is always available on RISC-V. Update the test so that this is not the case. gdb/testsuite/ChangeLog: * gdb.base/float.exp: Handle RISC-V targets without an FPU.
2018-12-09Fix tid-reuse sometimes blocks for a very long (infinite?) time.Philippe Waroquiers2-7/+31
A failure that seems to cause a long/infinite time is the following: For a not clear reason, tid-reuse.c spawner thread sometimes gets an error: tid-reuse: /bd/home/philippe/gdb/git/build_moreaa/gdb/testsuite/../../../moreaa/gdb/testsuite/gdb.threads/tid-reuse.c:58: spawner_thread_func: Assertion `rc == 0' failed. which causes a SIGABRT to be trapped by gdb, and tid-reuse does not reach the after_count breakpoint: Thread 2 "tid-reuse" received signal SIGABRT, Aborted. [Switching to Thread 0x7ffff7518700 (LWP 10368)] __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) FAIL: gdb.threads/tid-reuse.exp: continue to breakpoint: after_count After that, tid-reuse.exp gets the value of reuse_time, but this one kept its initial value of -1 (as unsigned) : print reuse_time $1 = 4294967295 (gdb) PASS: gdb.threads/tid-reuse.exp: get reuse_time tid-reuse then dies, and the .exp script continues (with some FAIL) till it executes: set timeout [expr $reuse_time * 2] leading to the error: (gdb) ERROR: integer value too large to represent as non-long integer while executing "expect { -i exp8 -timeout 8589934590 -re ".*A problem internal to GDB has been detected" { fail "$message (GDB internal error)" gdb_intern..." ("uplevel" body line 1) invoked from within "uplevel $body" ARITH IOVERFLOW {integer value too large to represent as non-long integer} integer value too large to represent as non-long integer ERROR: GDB process no longer exists and then everything blocks. This last 'GDB process no longer exists' is strange, as I still see the gdb when this all blocks, e.g. philippe 16058 31085 0 20:30 pts/15 00:00:00 /bin/bash -c rootme=`pwd`; export rootme; srcdir=../../../binutils-gdb/gdb/testsuite ; export srcdir ; EXPECT=`if [ philippe 16386 16058 0 20:30 pts/15 00:00:00 expect -- /usr/share/dejagnu/runtest.exp --status GDB_PARALLEL=yes --outdir=outputs/gdb.threads/tid-reuse gdb.thre philippe 24848 16386 0 20:30 pts/20 00:00:00 /bd/home/philippe/gdb/git/build_binutils-gdb/gdb/testsuite/../../gdb/gdb -nw -nx -data-directory /bd/home/philip This patch gives a default value of 60, so that if ever something wrong happens in tid-reuse, then the value retrieved by the .exp script stays in a reasonable range. Simon verified the patch by: "I replaced the pthread_create call with the value 1 to simulate a failure, and the test succeeds to fail quickly with your patch applied. Without your patch, I get the infinite hang that you describe." Compared to V1: As suggested by Pedro, this version checks the pthread calls return code (in particular of pthread_create) and reports the failure reason, instead of just aborting. gdb/testsuite/ChangeLog 2018-12-09 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.threads/tid-reuse.c (REUSE_TIME_CAP): Declare as 60. (reuse_time): Initialize to REUSE_TIME_CAP. (check_rc): New function. (main): Use REUSE_TIME_CAP instead of hardcoded 60. Check pthread_create rc. (spawner_thread_func): Check pthread_create and pthread_join rc.
2018-12-08Merge forward-search/reverse-search, use gdb::def_vector, remove limitPedro Alves2-2/+21
Back in: commit 85ae1317add94adef4817927e89cff80b92813dd Author: Stan Shebs <shebs@codesourcery.com> AuthorDate: Thu Dec 8 02:27:47 1994 +0000 * source.c: Various cosmetic changes. (forward_search_command): Handle very long source lines correctly. a buffer with a hard limit was converted to a heap buffer: @@ -1228,15 +1284,26 @@ forward_search_command (regex, from_tty) stream = fdopen (desc, FOPEN_RT); clearerr (stream); while (1) { -/* FIXME!!! We walk right off the end of buf if we get a long line!!! */ - char buf[4096]; /* Should be reasonable??? */ - register char *p = buf; + static char *buf = NULL; + register char *p; + int cursize, newsize; + + cursize = 256; + buf = xmalloc (cursize); + p = buf; However, reverse_search_command has the exact same problem, and that wasn't fixed. We still have that "we walk right off" comment... Recently, the xmalloc above was replaced with a xrealloc, because as can be seen above, that 'buf' variable above was a static local, otherwise we'd be leaking. This commit replaces that and the associated manual buffer growing with a gdb::def_vector<char>. I don't think there's much point in reusing the buffer across command invocations. While doing this, I realized that reverse_search_command is almost identical to forward_search_command. So this commit factors out a common helper function instead of duplicating a lot of code. There are some tests for "forward-search" in gdb.base/list.exp, but since they use the "search" alias, they were a bit harder to find than expected. That's now fixed, both by testing both variants, and by adding some commentary. Also, there are no tests for the "reverse-search" command, so this commit adds some for that too. gdb/ChangeLog: 2018-12-08 Pedro Alves <palves@redhat.com> * source.c (forward_search_command): Rename to ... (search_command_helper): ... this. Add 'forward' parameter. Tweak to use a gdb::def_vector<char> instead of a xrealloc'ed buffer. Handle backward searches too. (forward_search_command, reverse_search_command): Reimplement by calling search_command_helper. gdb/testsuite/ChangeLog: 2018-12-08 Pedro Alves <palves@redhat.com> * gdb.base/list.exp (test_forward_search): Rename to ... (test_forward_reverse_search): ... this. Also test reverse-search and the forward-search alias.
2018-12-05gdb/testsuite/sim: Remove redundant setting of timeoutAndrew Burgess2-10/+9
In the config/sim.exp file two functions are defined. Both of these functions define local timeout variables and then call gdb_expect, which (through a call to get_largest_timeout) will find the local definition of timeout. However, both of these functions set the local timeout to some arbitrary value and print a log message for this "new" timeout just before returning. As in both cases, the timeout is a local variable, this final setting of the timeout has no effect and can be removed. As having log messages about the timeout being adjusted could cause confusion I've removed all logging related to timeouts in this function, timeouts are adjusted throughout the testsuite without any logging, there doesn't seem to be any good reason why these functions should get their own logging. With the logging gone there seems to be little need to a local timeout variable at all, and so I've folded the local timeout directly into the call to gdb_expect. gdb/testsuite/ChangeLog: * config/sim.exp (gdb_target_sim): Remove redundant adjustment of local timeout variable before return, and remove all local timeout variable entirely. (gdb_load): Likewise.
2018-12-01[gdb/testsuite] Add gdb-caching-proc.exp testcaseTom de Vries2-0/+116
When caching a proc using gdb_caching_proc, it will become less likely to be executed, and consequently it's going to be harder to detect that the proc is racy. OTOH, in general the proc is easy to rerun. So, add a test-case to run all uncached gdb_caching_procs a number of times and detect inconsistent results. The purpose of caching is to reduce runtime, so rerunning is somewhat counter-productive in that aspect, but it's better than uncached, because the number of reruns is constant-bounded, and the increase in runtime is bound to this test-case, and can be disabled on slow targets. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2018-12-01 Tom de Vries <tdevries@suse.de> * gdb.base/gdb-caching-proc.exp: New file.
2018-11-25Implement timestamp'ed output on "make check"Sergio Durigan Junior4-8/+94
It is unfortunately not uncommon to have tests hanging on some of the BuildBot workers. For example, the ppc64be/ppc64le+gdbserver builders are especially in a bad state when it comes to testing GDB/gdbserver, and we can have builds that take an absurd amount of time to finish (almost 1 week for one single build, for example). It may be hard to diagnose these failures, because sometimes we don't have access to the faulty systems, and other times we're just too busy to wait and check which test is actually hanging. During one of our conversations about the topic, someone proposed that it would be a good idea to have a timestamp put together with stdout output, so that we can come back later and examine which tests are taking too long to complete. Here's my proposal to do this. The very first thing I tried to do was to use "ts(1)" to achieve this feature, and it obviously worked, but the problem is that I'm afraid "ts(1)" may not be widely available on every system we support. Therefore, I decided to implement a *very* simple version of "ts(1)", in Python 3, which basically does the same thing: iterate over the stdin lines, and prepend a timestamp onto them. As for testsuite/Makefile.in, the user can now specify two new variables to enable timestamp'ed output: TS (which enables the output), and TS_FORMAT (optional, used to specify another timestamp format according to "strftime"). Here's an example of how the output looks like: ... [Nov 22 17:07:19] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/call-strs.exp ... [Nov 22 17:07:19] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/step-over-no-symbols.exp ... [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/all-architectures-6.exp ... [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/hashline3.exp ... [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/max-value-size.exp ... [Nov 22 17:07:20] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/quit-live.exp ... [Nov 22 17:07:46] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/paginate-bg-execution.exp ... [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/gcore-buffer-overflow.exp ... [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/gcore-relro.exp ... [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/watchpoint-delete.exp ... [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/breakpoint-in-ro-region.exp ... [Nov 22 17:07:56] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/vla-sideeffect.exp ... [Nov 22 17:07:57] [1234] Running binutils-gdb/gdb/testsuite/gdb.base/unload.exp ... ... (What, gdb.base/quit-live.exp is taking 26 seconds to complete?!) Output to stderr is not timestamp'ed, but I don't think that will be a problem for us. If it is, we can revisit the solution and extend it. gdb/testsuite/ChangeLog: 2018-11-25 Sergio Durigan Junior <sergiodj@redhat.com> * Makefile.in (TIMESTAMP): New variable. (check-single): Add $(TIMESTAMP) to the end of $(DO_RUNTEST) command. (check-single-racy): Likewise. (check/%.exp): Likewise. (check-racy/%.exp): Likewise. (workers/%.worker): Likewise. (build-perf): Likewise. (check-perf): Likewise. * README: Describe new "TS" and "TS_FORMAT" variables. * print-ts.py: New file.
2018-11-21Make command-repeat work after gdb.executeBenno Fünfstück2-0/+7
Since commit 56bcdbea2bed ("Let gdb.execute handle multi-line commands") command repetition after using the `gdb.execute` Python function fails (the previous command is not repeated anymore). This happens because read_command_lines_1 sets dont_repeat, but the call to prevent_dont_repeat in execute_gdb_command is later. The fix is to move the call to prevent_dont_repeat to the beginning of the function. Tested on my laptop (ArchLinux-x86_64). gdb/ChangeLog: PR python/23714 * gdb/python/python.c (execute_gdb_command): Call prevent_dont_repeat earlier to avoid affecting dont_repeat. gdb/testuite/ChangeLog: PR python/23714 * gdb.python/python.exp: Test command repetition after gdb.execute.
2018-11-20gdb: Respect field width and alignment for 'fmt' fields in CLI outputAndrew Burgess2-0/+41
Currently the method 'cli_ui_out::do_field_fmt' has this comment: /* This is the only field function that does not align. */ The reality is even slightly worse, the 'fmt' field type doesn't respect either the field alignment or the field width. In at least one place in GDB we attempt to work around this lack of respect for field width by adding additional padding manually. But, as is often the case, this is leading to knock on problems. Conside the output for 'info breakpoints' when a breakpoint has multiple locations. This example is taken from the testsuite, from test gdb.opt/inline-break.exp: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x00000000004004ae in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64 1.2 y 0x0000000000400682 in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64 The miss-alignment of the fields shown here is exactly as GDB currently produces. With this patch 'fmt' style fields are now first written into a temporary buffer, and then written out as a 'string' field. The result is that the field width, and alignment should now be respected. With this patch in place the output from GDB now looks like this: (gdb) info breakpoints Num Type Disp Enb Address What 1 breakpoint keep y <MULTIPLE> 1.1 y 0x00000000004004ae in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64 1.2 y 0x0000000000400682 in func4b at /src/gdb/testsuite/gdb.opt/inline-break.c:64 This patch has been tested on x86-64/Linux with no regressions, however, the testsuite doesn't always spot broken output formatting or alignment. I have also audited all uses of 'fmt' fields that I could find, and I don't think there are any other places that specifically try to work around the lack of width/alignment, however, I could have missed something. gdb/ChangeLog: * breakpoint.c (print_one_breakpoint_location): Reduce whitespace, and remove insertion of extra spaces in GDB's output. * cli-out.c (cli_ui_out::do_field_fmt): Update header comment. Layout field into a temporary buffer, and then output it as a string field. gdb/testsuite/ChangeLog: * gdb.opt/inline-break.exp: Add test that info breakpoint output is correctly aligned.
2018-11-20Add a test to verify info [functions|variables|types]|rbreak respect ↵Philippe Waroquiers5-0/+238
language_mode. 2018-11-20 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.ada/info_auto_lang.exp: New testcase. * gdb.ada/info_auto_lang/global_pack.ads: New file. * gdb.ada/info_auto_lang/proc_in_ada.adb: New file. * gdb.ada/info_auto_lang/some_c.c: New file.
2018-11-20Use scoped_switch_to_sym_language_if_auto in symtab.c to switch language.Philippe Waroquiers2-1/+8
Use scoped_switch_to_sym_language_if_auto in treg_matches_sym_type_name to replace the local logic that was doing the same as the new class scoped_switch_to_sym_language_if_auto. Use scoped_switch_to_sym_language_if_auto inside print_symbol_info, so that symbol information is printed in the symbol language when language mode is auto. This modifies the behaviour of the test dw2-case-insensitive.exp, as the function FUNC_lang is now printed with the Fortran syntax (as declared in the .S file). gdb/ChangeLog 2018-11-20 Philippe Waroquiers <philippe.waroquiers@skynet.be> * symtab.c (treg_matches_sym_type_name): Use scoped_switch_to_sym_language_if_auto instead of local logic. (print_symbol_info): Use scoped_switch_to_sym_language_if_auto to switch to SYM language when language mode is auto. gdb/testsuite/ChangeLog 2018-11-20 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.dwarf2/dw2-case-insensitive.exp: Update due to auto switch to FUNC_lang language syntax.
2018-11-20Test case for 'info variables|functions' with minimal symbols.Philippe Waroquiers3-0/+72
2018-11-20 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/info_minsym.c: New file. * gdb.base/info_minsym.exp: New file.
2018-11-19Handle TYPE_CODE_PTR when printing Rust typesTom Tromey3-8/+15
This changes the Rust type printers to handle TYPE_CODE_PTR. The current approach is not ideal, because currently the code can't distinguish between mut and const, or between pointers and references. (These are debuginfo deficiencies, for which there are rustc bugs on file.) Meanwhile, this at least clears up the case seen in PR rust/23625. Tested on x86-64 Fedora 28. The nightly compiler gives the best results, but I regression-tested with stable and beta as well. gdb/ChangeLog 2018-11-16 Tom Tromey <tom@tromey.com> PR rust/23625: * rust-lang.c (rust_internal_print_type): Handle TYPE_CODE_PTR. gdb/testsuite/ChangeLog 2018-11-19 Tom Tromey <tom@tromey.com> PR rust/23625: * gdb.rust/simple.exp: Add ptype test. Update expected output. * gdb.rust/expr.exp: Update expected output. Change one test.
2018-11-19Fix gdb.rust/simple.rs for more recent compilersTom Tromey2-1/+5
gdb.rust/simple.exp will fail when run with a recent version of rustc. This patch fixes the test case so that it will continue to run. Tested on x86-64 Fedora 28. I also temporarily backed out the rust-lang.c from commit 098b2108a2b61531c0bc8ea16854f773083a95d7, and verified that this updated test still would have provoked the original bug. gdb/testsuite/ChangeLog 2018-11-19 Tom Tromey <tom@tromey.com> * gdb.rust/simple.rs: Don't initialize empty_enum_value.
2018-11-19gdb.base/warning.exp tweaksPedro Alves2-5/+11
#1- Check that the warning is emitted. #2- Avoid overriding INTERNAL_GDBFLAGS, as per documentated in gdb/testsuite/README: ~~~ The testsuite does not override a value provided by the user. ~~~ We don't actually need to tweak INTERNAL_GDBFLAGS, we just need to append out -data-directory to GDBFLAGS, because each passed -data-directory option leads to a call to the warning: $ ./gdb -data-directory=foo -data-directory=bar Warning: foo: No such file or directory. Warning: bar: No such file or directory. [...] gdb/ChangeLog 2018-11-19 Pedro Alves <palves@redhat.com> * gdb.base/warning.exp: Don't override INTERNAL_FLAGS. Use gdb_spawn_with_cmdline_opts instead of gdb_start. Check that we see the expected warning.
2018-11-16Aarch64: Fix segfault when casting dummy callsAlan Hayward4-0/+172
The following will segfault on aarch64 if foo is in another object, was compiled as c++ and has no debug symbols: (gdb) p (int)foo() This is because aarch64_push_dummy_call determines the return type of the function and then does not check for null pointer. A null pointer for the return type means the call has no debug information. For the code to get here, then the call must have been cast, otherwise we'd error out sooner. In the case of a no-debug-info call cast, the return type is the type the user had cast the call to, but we do not have that information available here. However, aarch64_push_dummy_call only requires the return type in order to calculate lang_struct_return. This information is available in the return_method enum. The fix is to simply use this instead. Adds testcase to check calls across objects, with all combinations of c, c++, debug and no debug. gdb/ChangeLog: PR gdb/22736: * aarch64-tdep.c (aarch64_push_dummy_call): Remove lang_struct_return code. gdb/testsuite/ChangeLog: PR gdb/22736: * gdb.cp/infcall-nodebug-lib.c: New test. * gdb.cp/infcall-nodebug-main.c: New test. * gdb.cp/infcall-nodebug.exp: New file.
2018-11-12Add completer for skip numbersSimon Marchi2-0/+41
Add completer to various commands that accept skip numbers: - skip enable - skip disable - skip delete - info skip These commands also accept ranges, the completer works for that but is not very smart. It will suggest invalid ranges, for example when doing "2-<TAB>" it will suggest "1", which would not result in a valid range. Also, it will keep suggesting when doing "1-2-<TAB>", even though it's an invalid syntax. A future idea would be to make a re-usable and well-tested completer for numbers and ranges. I think it could at least be re-used for breakpoint and thread numbers (for example with the "enable breakpoints" command). gdb/ChangeLog: * skip.c (complete_skip_number): New function. (_initialize_step_skip): Add completers to some skip commands. gdb/testsuite/ChangeLog: * gdb.base/skip.exp: Add standard_testfile. Add "skip delete" completer tests.
2018-11-09[gdb/symtab] Fix language of duplicate static minimal symbolTom de Vries4-0/+81
Consider a test-case with source files msym.c: ... static int foo (void) { return 1; } ... and msym_main.c: ... static int foo (void) { return 2; } int main (void) { return 0; } .. compiled as c++ with minimal symbols: ... $ g++ msym_main.c msym.c ... With objdump -x we find the two foo symbols prefixed with their corresponding files in the symbol table: ... 0000000000000000 l df *ABS* 0000000000000000 msym_main.c 00000000004004c7 l F .text 000000000000000b _ZL3foov 0000000000000000 l df *ABS* 0000000000000000 msym.c 00000000004004dd l F .text 000000000000000b _ZL3foov ... However, when we use gdb to print info on foo, both foos are listed, but we get one symbol mangled and one symbol demangled: ... $ gdb ./a.out -batch -ex "info func foo" All functions matching regular expression "foo": Non-debugging symbols: 0x00000000004004c7 foo() 0x00000000004004dd _ZL3foov ... During minimal symbol reading symbol_set_names is called for each symbol. First, it's called with foo from msym.c, an entry is created in per_bfd->demangled_names_hash and symbol_find_demangled_name is called, which has the side effect of setting the language of the symbol to language_cplus. Then, it's called with foo from msym_main.c. Since per_bfd->demangled_names_hash already has an entry for that name, symbol_find_demangled_name is not called, and the language of the symbol remains language_auto. Fix this by doing the symbol_find_demangled_name call unconditionally. Build and reg-tested on x86_64-linux. gdb/ChangeLog: 2018-11-09 Tom de Vries <tdevries@suse.de> * symtab.c (symbol_set_names): Call symbol_find_demangled_name unconditionally, to set the language of the symbol. Manage freeing returned pointer using gdb::unique_xmalloc_ptr. gdb/testsuite/ChangeLog: 2018-11-09 Tom de Vries <tdevries@suse.de> * gdb.base/msym-lang.c: New test. * gdb.base/msym-lang.exp: New file. * gdb.base/msym-lang-main.c: New test.
2018-11-08Avoid crash when calling warning too earlyTom Tromey2-0/+42
I noticed that if you pass the name of an existing file (not a directory) as the argument to --data-directory, gdb will crash: $ ./gdb -nx --data-directory ./gdb ../../binutils-gdb/gdb/target.c:590:56: runtime error: member call on null pointer of type 'struct target_ops' This was later reported as PR gdb/23838. This happens because warning ends up calling target_supports_terminal_ours, which calls current_top_target, which returns nullptr this early. This fixes the problem by handling this case specially in target_supports_terminal_ours. I also changed target_supports_terminal_ours to return bool. gdb/ChangeLog 2018-11-08 Tom Tromey <tom@tromey.com> PR gdb/23555: PR gdb/23838: * target.h (target_supports_terminal_ours): Return bool. * target.c (target_supports_terminal_ours): Handle case where current_top_target returns nullptr. Return bool. gdb/testsuite/ChangeLog 2018-11-08 Tom Tromey <tom@tromey.com> PR gdb/23555: PR gdb/23838: * gdb.base/warning.exp: New file.