aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2019-12-01Allow using less horizontal space in TUI source windowTom Tromey10-11/+102
The source window currently uses a field width of 6 for line numbers, and it further aligns to the next tab stop. This seemed a bit wasteful of horizontal space to me, so I changed that in an earlier patch. However, that change wasn't universally popular. This patch instead adds the option to use less horizontal space in the TUI source window. gdb/ChangeLog 2019-12-01 Tom Tromey <tom@tromey.com> * tui/tui-winsource.h (tui_copy_source_line): Add "ndigits" parameter. * tui/tui-winsource.c (tui_copy_source_line): Add "ndigits" parameter. * tui/tui-win.h (compact_source): Declare. * tui/tui-win.c (compact_source): New global. (tui_set_compact_source, tui_show_compact_source): New functions. (_initialize_tui_win): Add "compact-source" setting. * tui/tui-source.c (tui_source_window::set_contents): Handle compact_source setting. * tui/tui-disasm.c (tui_disasm_window::set_contents): Update. * NEWS: Document new setting. gdb/doc/ChangeLog 2019-12-01 Tom Tromey <tom@tromey.com> * gdb.texinfo (TUI Configuration): Document new setting. Change-Id: I46ce9a68b12c9c79332d510f9c14b3c84b7efadd
2019-11-30Correctly compute length of DW_TAG_variant_part unionTom Tromey2-3/+13
Currently, gdb internally transforms DW_TAG_variant_part into a union (with some special attbributes). When doing so, it computes the length of this union from the length of the fields. However, this computation didn't include the offset of these fields, resulting in the length being too short. This is not a problem given the way the code currently works. However, I have a patch series to switch gdb to value-based printing, where this does have an impact. Tested on x86-64 Fedora 28; and, considering that this only affects Rust, I am checking it in. gdb/ChangeLog 2019-11-30 Tom Tromey <tom@tromey.com> * dwarf2read.c (dwarf2_add_field): Include field offset when computing variant part length. Change-Id: I25d84fc237eb3c1e7f11f6eaf35ffe198efde6cc
2019-12-01Automatic date update in version.inGDB Administrator1-1/+1
2019-11-30Document define-prefix command and the use of . in command names.Philippe Waroquiers4-2/+61
gdb/ChangeLog 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> * NEWS: Mention define-prefix. Tell that command names can now contain a . character. gdb/doc/ChangeLog 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.texinfo (Define): Indicate that user-defined prefix can be used in 'define' command. Document 'define-prefix' command.
2019-11-30Allow . character as part of command names.Philippe Waroquiers10-25/+76
This patch adds . as an allowed character for user defined commands. Combined with 'define-prefix', this allows to e.g. define a set of Valgrind specific user command corresponding to the Valgrind monitor commands (such as check_memory, v.info, v.set, ...). gdb/ChangeLog 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> * command.h (valid_cmd_char_p): Declare. * cli/cli-decode.c (valid_cmd_char_p): New function factorizing the check of valid command char. (find_command_name_length, valid_user_defined_cmd_name_p): Use valid_cmd_char_p. * cli/cli-script.c (validate_comname): Likewise. * completer.c (gdb_completer_command_word_break_characters): Do not remove . from the word break char, update comments. (complete_line_internal_1): Use valid_cmd_char_p. * guile/scm-cmd.c (gdbscm_parse_command_name): Likewise. * python/py-cmd.c (gdbpy_parse_command_name): Likewise. gdb/testsuite/ChangeLog 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/define.exp: Test . in command names. * gdb.base/setshow.exp: Update test, as . is now part of command name.
2019-11-30Test define-prefix.Philippe Waroquiers2-0/+168
Adds a test testing the new define-prefix command. 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> * gdb.base/define-prefix.exp: New file.
2019-11-30Implement user defined prefix.Philippe Waroquiers3-16/+135
This patch adds the new 'define-prefix' command that creates (or mark an existing user defined command) as a prefix command. This approach was preferred compared to add a -prefix option to 'define' command : with define-prefix, a command can be defined and afterwards marked as a prefix. Also, it is easier to define a 'prefix' only command in one operation. This patch also adds completers for the 'define' and 'document' commands. This makes it easier for the user to type the prefixes for 'define' and type the documented command name for 'document'. gdb/ChangeLog 2019-11-30 Philippe Waroquiers <philippe.waroquiers@skynet.be> * cli/cli-script.c (do_define_command): Ensure a redefined prefix command is kept as a prefix command. (define_prefix_command): New function. (show_user_1): Report user defined prefixes. (_initialize_cli_script): Create the new 'define-prefix' command. Add completers for 'define' and 'document'. * top.c (execute_command): If command is a user-defined prefix only command, report the list of commands for this prefix command.
2019-11-30Automatic date update in version.inGDB Administrator1-1/+1
2019-11-29gdb: improve debug output of function overload resolutionTankut Baris Aktemur2-3/+12
Function overload resolution prints debug output if turned on via the 'set debug overload' command. The output includes the badness vector (BV). For each function, this vector contains a badness value of the length of parameters as its first element. So, BV[0] does not correspond to a parameter. The badness values of parameters start with BV[1]. A badness value is a pair; it contains a rank and a subrank. Printing both fields provides useful information. Improve printing the badness vector along these lines. gdb/ChangeLog: 2019-11-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * valops.c (find_oload_champ): Improve debug output. Change-Id: I771017e7afbbaf4809e2238a9b23274f55c61f55
2019-11-29gdb: fix segfault in overload resolution debug outputTankut Baris Aktemur2-23/+30
A segfault occurs if overload resolution debug mode is turned on via the 'set debug overload' command. E.g.: ~~~ $ gdb ./a.out ... (gdb) start ... (gdb) set debug overload 1 (gdb) print foo(5) -- Arg is int [8], parm is double [9] Overloaded function instance (null) # of parms 1 Segmentation fault $ ~~~ The problem is, GDB tries to print the badness vector after it has been std::move'd. Fix the problem by printing the vector before it is moved. gdb/ChangeLog: 2019-11-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com> * valops.c (find_oload_champ): Print part of debug messages before the badness vector is std::move'd. Change-Id: Ia623f9637e82ec332bfeac23eb6b0f2ffdcdde27
2019-11-29Automatic date update in version.inGDB Administrator1-1/+1
2019-11-28Fix creal_internal_fn commentTom Tromey2-1/+5
I noticed that the comment before creal_internal_fn refers to $_cimag, but should refer to $_creal. gdb/ChangeLog 2019-11-28 Tom Tromey <tom@tromey.com> * value.c (creal_internal_fn): Fix comment. Change-Id: I5665aceb4be5aae7014e914cfb39db184c65d5ea
2019-11-28Make two range_bounds bitfields unsignedTom Tromey2-2/+7
While debugging gdb, I noticed that the bitfields in a range_bounds were signed, causing the values of these fields to be -1. I think this is odd; and while we haven't yet committed to boolean bitfields, I think it is a small improvement to change these types to unsigned. gdb/ChangeLog 2019-11-28 Tom Tromey <tom@tromey.com> * gdbtypes.h (struct range_bounds) <flag_upper_bound_is_count, flag_bound_evaluated>: Now unsigned. Change-Id: Ia377fd931594bbf8653180d4dcb4e60354d90139
2019-11-28Remove unused declaratoin from guileTom Tromey2-2/+5
guile-internal.h declares a function that is never defined. This removes the declaration. gdb/ChangeLog 2019-11-28 Tom Tromey <tom@tromey.com> * guile/guile-internal.h (vlscm_scm_from_value_unsafe): Don't declare. Change-Id: I2dca228534bc1325d2d4bb319c31328121edecc4
2019-11-28jit: minor improvement to debug loggingMihails Strasuns2-1/+11
gdb/ChangeLog: 2019-11-28 Mihails Strasuns <mihails.strasuns@intel.com> * jit.c (jit_bfd_try_read_symtab): Fix printed function name in the debug output. * jit.c (jit_unregister_code): Add debug print to match `jit_register_code`. Change-Id: Ie66064f3aaa1c74facfc025c8d87f3a057869779
2019-11-28gdb/testsuite: Fix minor bug in skip_btrace*tests procsAndrew Burgess2-2/+8
The two guard functions skip_btrace_tests and skip_btrace_pt_tests have a minor bug, if the check function fails to compile then surely we should skip the btrace tests - currently we return 0 to indicate don't skip. gdb/testsuite/ChangeLog: * lib/gdb.exp (skip_btrace_tests): Return 1 if the test fails to compile. (skip_btrace_pt_tests): Likewise. Change-Id: I6dfc04b4adcf5b9424fb542ece7ddbe751bee301
2019-11-28gas/riscv: Produce version 3 DWARF CIE by defaultAndrew Burgess8-10/+61
The flag controlling the default DWARF CIE version to produce now starts with the value -1. This can be modified with the command line flag as before, but after command line flag processing, in md_after_parse_args targets can, if the global still has the value -1, override this value. This gives a target specific default. If a CIE version is not select either by command line flag, or a target specific default, then some new code in dwarf2_init now select a global default. This remains as version 1 to match previous behaviour. This RISC-V has a target specific default of version provided, this make the return column uleb128, which means we can use all DWARF registers include CSRs. I chose to switch to version 3 rather than version 4 as this is most similar to the global default (version 1). Switching to version 4 adds additional columns to the CIE header. gas/ChangeLog: * as.c (flag_dwarf_cie_version): Change initial value to -1, and update comment. * config/tc-riscv.c (riscv_after_parse_args): Set flag_dwarf_cie_version if it has not already been set. * dwarf2dbg.c (dwarf2_init): Initialise flag_dwarf_cie_version if needed. * testsuite/gas/riscv/default-cie-version.d: New file. * testsuite/gas/riscv/default-cie-version.s: New file. ld/ChangeLog: * testsuite/ld-elf/eh5.d: Accept version 3 DWARF CIE. Change-Id: Ibbfe8f0979fba480bf0a359978b09d2b3055555e
2019-11-28gas: Check for overflow on return column in version 1 CIE DWARFAndrew Burgess5-1/+36
In version 1 of DWARF CIE format, the return register column is just a single byte. For targets with large numbers of DWARF registers, any use of a register with a high number for the return column will (currently) silently overflow giving incorrect DWARF. This commit adds an error when the overflow occurs. gas/ChangeLog: * dw2gencfi.c (output_cie): Error on return column overflow. * testsuite/gas/riscv/cie-rtn-col-1.d: New file. * testsuite/gas/riscv/cie-rtn-col-3.d: New file. * testsuite/gas/riscv/cie-rtn-col.s: New file. Change-Id: I1809f739ba7771737ec012807f0260e1a3ed5e64
2019-11-28binutils/gas/riscv: Add DWARF register numbers for CSRsAndrew Burgess6-3/+574
This commit gives DWARF register numbers to the RISC-V CSRs inline with the RISC-V ELF specification here: https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md The CSRs are defined being numbered from 4096 to 8191. This adds support to the assembler, required in order to reference CSRs in, for example .cfi directives. I have then extended dwarf.c in order to support printing CSR names in the dumped DWARF output. As the CSR name space is quite large and only sparsely populated, I have provided a new function to perform RISC-V DWARF register name lookup which uses a switch statement rather than the table base approach that other architectures use. Any CSR that does not have a known name will return a name based on 'csr%d' with the %d being replaced by the offset of the CSR from 4096. gas/ChangeLog: * config/tc-riscv.c (tc_riscv_regname_to_dw2regnum): Lookup CSR names too. * testsuite/gas/riscv/csr-dw-regnums.d: New file. * testsuite/gas/riscv/csr-dw-regnums.s: New file. binutils/ChangeLog: * dwarf.c (regname_internal_riscv): New function. (init_dwarf_regnames_riscv): Use new function. Change-Id: I3f70bc24fa8b3c75744e6775eeeb87db70c7ecfb
2019-11-28binutils: Make DWARF register name lookup be via a function pointerAndrew Burgess2-8/+51
Add a layer of indirection for DWARF register name lookup by introducing a function pointer. Right now all targets use the same table based implementation that they always have, however, this will change in a later commit. binutils/ChangeLog: * dwarf.c (typedef dwarf_regname_lookup_ftype): New typedef. (dwarf_regnames_lookup_func): New static global. (init_dwarf_regnames_i386): Set dwarf_regnames_lookup_func. (init_dwarf_regnames_iamcu): Likewise. (init_dwarf_regnames_x86_64): Likewise. (init_dwarf_regnames_aarch64): Likewise. (init_dwarf_regnames_s390): Likewise. (init_dwarf_regnames_riscv): Likewise. (init_dwarf_regnames_by_elf_machine_code): Reset dwarf_regnames_lookup_func to NULL. (init_dwarf_regnames_by_bfd_arch_and_mach): Likewise. (regname_internal_by_table_only): New function. (regname): Make use of dwarf_regnames_lookup_func. Change-Id: Ibbff61c0abea32927f35c9e478793039ab8bb57d
2019-11-28binutils: Make some functions static in dwarf.cAndrew Burgess3-12/+21
The architecture specific register name initialisation routines no longer need to be externally visible, so make them static. binutils/ChangeLog: * dwarf.c (init_dwarf_regnames_i386): Make static. (init_dwarf_regnames_iamcu): Make static. (init_dwarf_regnames_x86_64): Make static. (init_dwarf_regnames_aarch64): Make static. (init_dwarf_regnames_s390): Make static. (init_dwarf_regnames_riscv): Make static. * dwarf.h (init_dwarf_regnames_i386): Delete declaration. (init_dwarf_regnames_iamcu): Delete declaration. (init_dwarf_regnames_x86_64): Delete declaration. (init_dwarf_regnames_aarch64): Delete declaration. (init_dwarf_regnames_s390): Delete declaration. (init_dwarf_regnames_riscv): Delete declaration. Change-Id: I9e350f76f98f46e9e3dd88d502f2a2a83e44cb36
2019-11-28binutils: Add a new function to initialise DWARF register name stateAndrew Burgess4-36/+63
Adds a new API function init_dwarf_regnames_by_bfd_arch_and_mach to initialise the register name state from a BFD architecture and machine type. There should be no user visible changes after this commit. binutils/ChangeLog: * dwarf.c (init_dwarf_regnames_by_bfd_arch_and_mach): New function. * dwarf.h (init_dwarf_regnames_by_bfd_arch_and_mach): Declare. * objdump.c (dump_dwarf): Call new function instead of calling specific initialization routines. Restrucure so that eh_addr_size is still calculated correctly. Change-Id: I346d665d2079a18ec4d04bd41893d0e9dc05e4b3
2019-11-28binutils: Rename init_dwarf_regnamesAndrew Burgess4-3/+11
As part of a process to change how dwarf.c figures out the correct name for a register I wanted to clean up how we initialise the register name tracking state. As part of this I rename init_dwarf_regnames to init_dwarf_regnames_by_elf_machine_code, later commits will add a different entry point to initialise the register name state. There should be no user visible changes after this commit. binutils/ChangeLog: * dwarf.c (init_dwarf_regnames): Renamed to... (init_dwarf_regnames_by_elf_machine_code): ...this. * dwarf.h (init_dwarf_regnames): Renamed to... (init_dwarf_regnames_by_elf_machine_code): ...this. * readelf.c (process_file_header): Update call to use new name. Change-Id: Ic8d2ef5fb62a8590ecd8cbb7e6258e11c6263594
2019-11-28binutils: Be more forgiving of targets with large numbers of registersAndrew Burgess2-2/+8
Currently if a target has a large ( > 1024 ) number of registers then we get a warning when dumping the DWARF whenever a register over the 1024 limit is referenced, this occurs in dwarf.c:frame_need_space. This check was initially introduced to guard against corrupted DWARF referencing stupidly large numbers of registers. The frame_need_space function already has a check in place so that, if a target specifies a set of known DWARF register names then we must only reference a register within this set, it is only after this check that we check for the 1024 limit. What this means is that if a target DOES NOT define a set of known register names and if we reference more than 1024 registers frame_need_space will give a warning. If a target DOES define a set of known registers and there are more than 1024 defined registers, and we try to reference a register beyond 1024 we will again get an error. This second case feels wrong to me. My thinking is that if a target defines a set of registers then it is not unreasonable to assume the tools can cope with that number of registers. And so, if the target defines 2000 named DWARF registers, frame_need_space should allow access to all of these registers. If a target does not define a set of named registers then the 1024 limit should remain. This is pretty arbitrary, but we do need to have some limit in place I think, so for now that seems as good as any. This is an entirely theoretical fix - there are no targets that define such large numbers of registers, but while experimenting with adding support for RISC-V CSRs I ran into this issue and felt like it was a good improvement. binutils/ChangeLog: * dwarf.c (frame_need_space): Compare dwarf_regnames_count against 0, and only warn about large numbers of registers if the number is more than the dwarf_regnames_count. Change-Id: Ifac1a999ff0677676e81ee373c4c044b6a700827
2019-11-28gas/riscv: Remove unneeded structureAndrew Burgess2-7/+6
We build a hash table of all register classes and numbers. The hash key is the register name and the hash value is the class and number encoded into a single value, which is of type 'void *'. When we pull the values out of the hash we cast them to be a pointer to a structure, however, we never access the fields of that structure, we just decode the register class and number from the pointer value itself. This commit removes the structure and treats the encoded class and number as a 'void *' during hash lookup. gas/ChangeLog: * config/tc-riscv.c (struct regname): Delete. (hash_reg_names): Handle value as 'void *'. Change-Id: Ie7d8f46ca3798f56f4af94395279de684f87f9cc
2019-11-28Automatic date update in version.inGDB Administrator1-1/+1
2019-11-27Add missing ChangeLog entry for the previous commitChristian Biesinger1-0/+4
Change-Id: Ibc5788e1879ece9cac637d5c99f92ff4084c8ba1
2019-11-27Add a NEWS entry for multithreaded symbol loadingChristian Biesinger1-1/+5
Just to let people know that this is available and how to use it. Also updates the description of the setting to say the default is 0. gdb/ChangeLog: 2019-11-26 Christian Biesinger <cbiesinger@google.com> * NEWS: Mention the new multithreaded symbol loading. Change-Id: I263add6aae03b523f0870ad4d1e972eada4b382a
2019-11-27Turn off threaded minsym demangling by defaultChristian Biesinger4-4/+33
Per discussion on gdb-patches with Joel, this patch turns off multihreaded symbol loading by default. It can be turned on using: maint set worker-threads unlimited To keep the behavior as close as possible to the old code, it still calls symbol_set_names in the old place if n_worker_threads is 0. gdb/ChangeLog: 2019-11-27 Christian Biesinger <cbiesinger@google.com> * maint.c (n_worker_threads): Default to 0. (worker_threads_disabled): New function. * maint.h (worker_threads_disabled): New function. * minsyms.c (minimal_symbol_reader::record_full): Call symbol_set_names here if worker_threads_disabled () is true. (minimal_symbol_reader::install): Skip all threading if worker_threads_disabled () is true. Change-Id: I92ba4f6bbf07363189666327cad452d6b9c8e01d
2019-11-27Compute msymbol hash codes in parallelChristian Biesinger2-15/+41
This is for the msymbol_hash and msymbol_demangled_hash hashtables in objfile_per_bfd_storage. This basically computes those hash codes together with the demangled symbol name in the background, before it inserts the symbols in the hash table. gdb/ChangeLog: 2019-11-27 Christian Biesinger <cbiesinger@google.com> * minsyms.c (add_minsym_to_hash_table): Use a previously computed hash code if possible. (add_minsym_to_demangled_hash_table): Likewise. (minimal_symbol_reader::install): Compute the hash codes for msymbol on the background thread. * symtab.h (struct minimal_symbol) <hash_value, demangled_hash_value>: Add these fields. Change-Id: Ifaa3346e9998f05743bff9e2eaad3f83b954d071
2019-11-27Precompute hash value for symbol_set_namesChristian Biesinger4-6/+42
We can also compute the hash for the mangled name on a background thread so make this function even faster (about a 7% speedup). gdb/ChangeLog: 2019-11-27 Christian Biesinger <cbiesinger@google.com> * minsyms.c (minimal_symbol_reader::install): Also compute the hash of the mangled name on the background thread. * symtab.c (symbol_set_names): Allow passing in the hash of the linkage_name. * symtab.h (symbol_set_names): Likewise. Change-Id: I044449e7eb60cffc1c43efd3412f2b485bd9faac
2019-11-27gdb/testsuite: Fix race condition compiling fortran testAndrew Burgess2-1/+6
The Fortran test gdb.fortran/info-modules compiles the files info-types.f90 and info-types-2.f90 in that order. Unfortunately info-types.f90 makes use of a module defined in info-types-2.f90. This currently doesn't cause a problem if you run all of the Fortran tests as the info-types.exp test already compiles info-types-2.f90 and so the module description file 'mod2.mod' will be created, and can then be found by info-modules.exp during its compile. If however you try to run just info-modules.exp in a clean build directory, the test will fail to compile. Fix this by compiling the source files in the reverse order so that the module is compiled first, then the test program that uses the module. gdb/testsuite/ChangeLog: * gdb.fortran/info-modules.exp: Compile source files in correct order. Change-Id: Ic3a1eded0486f6264ebe3066cf1beafbd2534a91
2019-11-27Test case for BZ 25065Kevin Buettner3-0/+218
Running a GDB with the fix for BZ 25065 should cause these new tests to all pass. When run against a GDB without the fix, there will be 2 unresolved testcases. This is what I see in the gdb.sum file when I try it using a GDB without the fix: ERROR: GDB process no longer exists UNRESOLVED: gdb.dwarf2/imported-unit.exp: ptype main::Foo ERROR: Couldn't send ptype main::foo to GDB. UNRESOLVED: gdb.dwarf2/imported-unit.exp: ptype main::foo These are "unresolved" versus outright failures due to the fact that GDB dies (segfaults) during the running of the test. gdb/testsuite/ChangeLog: * gdb.dwarf2/imported-unit.exp: New file. * gdb.dwarf2/imported-unit.c: New file. Change-Id: I073fe69b81bd258951615f752df8e95b6e33a271
2019-11-27Fix BZ 25065 - Ensure that physnames are computed for inherited DIEsKevin Buettner2-0/+8
This is a fix for BZ 25065. GDB segfaults when running either gdb.cp/subtypes.exp or gdb.cp/local.exp in conjunction with using the -flto compiler/linker flag. A much simpler program, which was used to help create the test for this fix, is: -- doit.cc -- int main() { class Foo { public: int doit () { return 0; } }; Foo foo; return foo.doit (); } -- end doit.cc -- gcc -o doit -flto -g doit.cc gdb -q doit Reading symbols from doit... (gdb) ptype main::Foo type = class Foo { Segmentation fault (core dumped) The segfault occurs due to a NULL physname in c_type_print_base_struct_union in c-typeprint.c. Specifically, calling is_constructor_name() eventually causes the SIGSEGV is this code in c-typeprint.c: const char *physname = TYPE_FN_FIELD_PHYSNAME (f, j); int is_full_physname_constructor = TYPE_FN_FIELD_CONSTRUCTOR (f, j) || is_constructor_name (physname) || is_destructor_name (physname) || method_name[0] == '~'; However, looking at compute_delayed_physnames(), we see that the TYPE_FN_FIELD_PHYSNAME field should never be NULL. This field will be set to "" for NULL physnames: physname = dwarf2_physname (mi.name, mi.die, cu); TYPE_FN_FIELD_PHYSNAME (fn_flp->fn_fields, mi.index) = physname ? physname : ""; For this particular case, it turns out that compute_delayed_physnames wasn't being called, which left TYPE_FN_FIELD_PHYSNAME set to the NULL value that it started with when that data structure was allocated. The place to fix it, I think, is towards the end of inherit_abstract_dies(). My first attempt at fix caused the origin CU's method_list (which is simply the list of methods whose physnames still need to be computed) to be added to the CU which is doing the inheriting. One drawback with this approach is that compute_delayed_physnames is (eventually) called with a CU that's different than the CU in which the methods were found. It's not clear whether this will cause problems or not. A safer approach, which is what I ultimately settled on, is to call compute_delayed_physnames() from inherit_abstract_dies(). One potential drawback is that all needed types might not be known at that point. However, in my testing, I haven't seen a problem along these lines. gdb/ChangeLog: * dwarf2read.c (inherit_abstract_dies): Ensure that delayed physnames are computed for inherited DIEs. Change-Id: I6c6ffe96b301a9daab9f653956b89e3a33fa9445
2019-11-27Remove some unnecessary backslashesTom Tromey3-3/+9
I found a couple of unnecessary backslashes in gdb. This removes them. Offhand, I wonder whether this abstract_to_concrete thing could be done some other way? This seems possibly expensive. Anyway, tested by rebuilding. I'm going to check this in as obvious. gdb/ChangeLog 2019-11-27 Tom Tromey <tromey@adacore.com> * dwarf2read.h (struct dwarf2_per_objfile): Remove unnecessary backslashes. * cp-support.c: Remove unnecessary backslashes. Change-Id: I956c91ae24407eeafec8a731545b45f5222e6a9d
2019-11-27Replace SYMBOL_SET_LINKAGE_NAME with a member functionChristian Biesinger7-25/+37
Easier to read, shorter, and will later make it possible to make the name field private. gdb/ChangeLog: 2019-11-27 Christian Biesinger <cbiesinger@google.com> * ada-exp.y (write_ambiguous_var): Replace SYMBOL_SET_LINKAGE_NAME with sym->set_linkage_name. * coffread.c (coff_read_enum_type): Likewise. * mdebugread.c (parse_symbol): Likewise. * stabsread.c (patch_block_stabs): Likewise. (define_symbol): Likewise. (read_enum_type): Likewise. (common_block_end): Likewise. * symtab.h (struct general_symbol_info) <set_linkage_name>: New function. (SYMBOL_SET_LINKAGE_NAME): Remove. * xcoffread.c (process_xcoff_symbol): Replace SYMBOL_SET_LINKAGE_NAME with sym->set_linkage_name. Change-Id: I174a0542c014f1b035070068076308bb8ae79abb
2019-11-27gdb/mi: Add -symbol-info-modules commandAndrew Burgess11-0/+286
Add '-symbol-info-modules', an MI version of the CLI 'info modules' command. gdb/ChangeLog: * mi/mi-cmds.c (mi_cmds): Add 'symbol-info-modules' entry. * mi/mi-cmds.h (mi_cmd_symbol_info_modules): Declare. * mi/mi-symbol-cmds.c (mi_cmd_symbol_info_modules): New function. * NEWS: Mention new MI command. gdb/testsuite/ChangeLog: * gdb.mi/mi-fortran-modules-2.f90: New file. * gdb.mi/mi-fortran-modules.exp: New file. * gdb.mi/mi-fortran-modules.f90: New file. gdb/doc/ChangeLog: * doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command -symbol-info-modules. Change-Id: Ibc618010d1d5f36ae8a8baba4fb9d9d724e62b0f
2019-11-27gdb/mi: Add new commands -symbol-info-{functions,variables,types}Andrew Burgess11-6/+730
Add new MI commands -symbol-info-functions, -symbol-info-variables, and -symbol-info-types which correspond to the CLI commands 'info functions', 'info variables', and 'info types' respectively. gdb/ChangeLog: * mi/mi-cmds.c (mi_cmds): Add '-symbol-info-functions', '-symbol-info-types', and '-symbol-info-variables'. * mi/mi-cmds.h (mi_cmd_symbol_info_functions): Declare. (mi_cmd_symbol_info_types): Declare. (mi_cmd_symbol_info_variables): Declare. * mi/mi-symbol-cmds.c: Add 'source.h' and 'mi-getopt.h' includes. (output_debug_symbol): New function. (output_nondebug_symbol): New function. (mi_symbol_info): New function. (mi_info_functions_or_variables): New function. (mi_cmd_symbol_info_functions): New function. (mi_cmd_symbol_info_types): New function. (mi_cmd_symbol_info_variables): New function. * NEWS: Mention new commands. gdb/testsuite/ChangeLog: * gdb.mi/mi-sym-info-1.c: New file. * gdb.mi/mi-sym-info-2.c: New file. * gdb.mi/mi-sym-info.exp: New file. gdb/doc/ChangeLog: * doc/gdb.texinfo (GDB/MI Symbol Query): Document new MI command -symbol-info-functions, -symbol-info-types, and -symbol-info-variables. Change-Id: Ic2fc6a6750bbce91cdde2344791014e5ef45642d
2019-11-27gdb: Split print_symbol_info into two partsAndrew Burgess3-34/+72
Split the function print_symbol_info into two parts, the new worker core returns a string, which print_symbol_info then prints. This will be useful in a later commit when some new MI commands will be added which will use the worker core to fill some MI output fields. There should be no user visible changes after this commit. gdb/ChangeLog: * symtab.c (symbol_to_info_string): New function, most content moved from print_symbol_info, but updated to return a std::string. (print_symbol_info): Update to use symbol_to_info_string and print returned string. * symtab.h (symbol_to_info_string): Declare new function. Change-Id: I6454ce43cacb61d32fbadb9e3655e70823085777
2019-11-27gdb: Introduce global_symbol_searcherAndrew Burgess4-128/+161
Introduce a new class to wrap up the parameters needed for the function search_symbols, which has now become a member function of this new class. The motivation is that search_symbols already takes a lot of parameters, and a future commit is going to add even more. This commit hopefully makes collecting the state required for a search easier. As part of this conversion the list of filenames in which to search has been converted to a std::vector. There should be no user visible changes after this commit. gdb/ChangeLog: * python/python.c (gdbpy_rbreak): Convert to using global_symbol_searcher. * symtab.c (file_matches): Convert return type to bool, change file list to std::vector, update header comment. (search_symbols): Rename to... (global_symbol_searcher::search): ...this and update now its a member function of global_symbol_searcher. Take account of the changes to file_matches. (symtab_symbol_info): Convert to using global_symbol_searcher. (rbreak_command): Likewise. (search_module_symbols): Likewise. * symtab.h (enum symbol_search): Update comment. (search_symbols): Remove declaration. (class global_symbol_searcher): New class. Change-Id: I488ab292a892d9e9e84775c632c5f198b6ad3710
2019-11-27PR23652, Use symbols from debug bfd for _bfd_elf_find_function properlyAlan Modra6-10/+34
There were a number of problems with the previous patch. Firstly, _bfd_dwarf2_stash_syms didn't do anything when the original file had dynamic symbols, and secondly, info found by the symbol search didn't make it out of _bfd_elf_find_nearest_line except in the case of DWARF functions without external linkage. PR 23652 * dwarf2.c (_bfd_dwarf2_stash_syms): Break out of loop on finding matching section. (_bfd_dwarf2_find_nearest_line): Return an int, with value 2 when returning info from the symbol table. Do the _bfd_elf_find_function search also when !found. Call _bfd_dwarf2_stash_syms regardless of symbols. * elf64-alpha.c (elf64_alpha_find_nearest_line): Accept dwarf2 result of 1 only. * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Likewise. * libbfd-in.h (_bfd_dwarf2_find_nearest_line): Update prototype. * libbfd.h: Regenerate.
2019-11-27PR23652, Use symbols from debug bfd for _bfd_elf_find_functionAlan Modra6-253/+147
Sometimes DWARF info for a function is incomplete, and the function can be retrieved by examining symbols. However, when separate debug files are used it may be that the original file is completely stripped of symbols. This patch teaches BFD to look at symbols from the debug file in that case. The patch also removes arm_elf_find_function, instead implementing elf_backend_maybe_function_sym. arm_elf_find_function was written before the generic _bfd_elf_find_function called maybe_function_sym. aarch64 copied arm, so that file gets the same treatment. There is some chance this will speed up arm and aarch64 lookup of function/line. PR 23652 * dwarf2.c (_bfd_dwarf2_stash_syms): New function. (_bfd_dwarf2_find_nearest_line): Use it here, passing syms to _bfd_elf_find_function. Call _bfd_elf_find_function in cases where _bfd_elf_find_nearest_line would do so. * elf.c (_bfd_elf_find_nearest_line): Omit _bfd_elf_find_function for dwarf2. * elfxx-mips.c (_bfd_mips_elf_find_nearest_line): Similarly. Tidy. * elf32-arm.c (elf32_arm_maybe_function_sym): New function. (elf_backend_maybe_function_sym): Define. (arm_elf_find_function, elf32_arm_find_nearest_line): Delete. (bfd_elf32_find_nearest_line): Don't define. * elfnn-aarch64.c (elfNN_aarch64_maybe_function_sym): New function. (elf_backend_maybe_function_sym): Define. (aarch64_elf_find_function, elfNN_aarch64_find_nearest_line): Delete. (bfd_elfNN_find_nearest_line): Don't define.
2019-11-27Correct R_SH_IND12W handlingAlan Modra3-17/+20
Using bfd_vma for insn is to avoid having to worry about sign propagation in expressions involving insn and sym_value when bfd_vma is not the same as unsigned long. * elf32-sh.c (sh_reloc): Use a bfd_vma insn. (sh_reloc <R_SH_IND12W>): Divide calculated relocation value by two before applying to insn. Correct overflow test. * coff-sh.c (sh_reloc): Likewise.
2019-11-27Automatic date update in version.inGDB Administrator1-1/+1
2019-11-26Fix mingw build of gdbTom Tromey2-2/+7
Christian pointed out on irc that the threading series broke the build on mingw. This patch fixes the problem, by moving the initialization of gdb_demangle_attempt_core_dump into the appropriate #if. gdb/ChangeLog 2019-11-26 Tom Tromey <tromey@adacore.com> * cp-support.c (_initialize_cp_support): Conditionally initialize gdb_demangle_attempt_core_dump. Change-Id: I9ace0bea75a51f317ea933b607f6b5a94d651eea
2019-11-26Let commands free "name"Tom Tromey6-20/+32
This adds a "name_allocated" field to cmd_list_element, so that commands can own their "name" when necessary. Then, this changes a few spots in gdb that currently free the name by hand to instead use this facility. gdb/ChangeLog 2019-11-26 Tom Tromey <tom@tromey.com> * python/py-function.c (fnpy_init): Update. * value.h (add_internal_function): Adjust declaration. * value.c (function_destroyer): Remove. (do_add_internal_function): Don't set destroyer or copy name. (add_internal_function): Take unique_xmalloc_ptr<char> for name. Set name_allocated. * python/py-cmd.c (cmdpy_destroyer): Don't free "name". (cmdpy_init): Set name_allocated. * cli/cli-decode.h (struct cmd_list_element) <name_allocated>: New member. (~cmd_list_element): Free "name" if needed. Change-Id: Ie1435cea5bbf4bd92056125f112917c607cbb761
2019-11-26Add add_internal_function overloadTom Tromey4-13/+54
add_internal_function sets a command destroyer that frees the doc string. However, many callers do not pass in an allocated doc string. This adds a new overload to clearly differentiate the two cases, fixing the latent bug. gdb/ChangeLog 2019-11-26 Tom Tromey <tom@tromey.com> * value.h (add_internal_function): Add new overload. Move documentation from value.h. * value.c (do_add_internal_function): New function. (add_internal_function): Use it. Add new overload. (function_destroyer): Don't free doc. * python/py-function.c (fnpy_init): Update. Change-Id: I3f6df925bc6b3e1bccbad9eeebc487b908bb5a2a
2019-11-26Use cmd_list_element::doc_allocated for Python commandsTom Tromey2-3/+7
Python commands manage their "doc" string manually, but cmd_list_element already has doc_allocated to handle this case. This changes the Python code to use the existing facility. gdb/ChangeLog 2019-11-26 Tom Tromey <tom@tromey.com> * python/py-cmd.c (cmdpy_destroyer): Don't free "doc". (cmdpy_init): Set "doc_allocated". Change-Id: I0014edc117b051bba1f4db267687d231e7fe9b56
2019-11-26Set names of worker threadsTom Tromey8-9/+45
This adds some configury so that gdb can set the names of worker threads. This makes them show up more nicely when debugging gdb itself. 2019-11-26 Tom Tromey <tom@tromey.com> * gdbsupport/thread-pool.c (thread_pool::set_thread_count): Set name of worker thread. * gdbsupport/common.m4 (GDB_AC_COMMON): Check for pthread_setname_np. * configure, config.in: Rebuild. gdb/gdbserver/ChangeLog 2019-11-26 Tom Tromey <tom@tromey.com> * configure, config.in: Rebuild. Change-Id: I60473d65ae9ae14d8c56ddde39684240c16aaf35
2019-11-26Use run_on_main_thread in gdb.post_eventTom Tromey2-72/+71
This changes gdb.post_event to use the new run_on_main_thread function. This is somewhat tricky because the Python GIL must be held while manipulating reference counts. 2019-11-26 Tom Tromey <tom@tromey.com> * python/python.c (class gdbpy_gil): New. (struct gdbpy_event): Add constructor, destructor, operator(). (gdbpy_post_event): Use run_on_main_thread. (gdbpy_initialize_events): Remove. (do_start_initialization): Update. Change-Id: Ie4431e60f328dae48bd96b6c6a8e875e70bda1de