aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-02-11gdb/testsuite: remove old commentAndrew Burgess2-5/+4
In commit: commit e92c8eb86dcef673652644694c832c504cf9a9a9 Date: Tue Feb 9 15:46:13 2021 +0000 gdb/fortran: add parser support for lbound and ubound When I created the test gdb/testsuite/gdb.fortran/lbound-ubound.exp, I copied the script from a different file and failed to delete the test description comment at the top (even though I added a new description). Fixed in this commit. gdb/testsuite/ChangeLog: * gdb.fortran/lbound-ubound.exp: Remove old comment.
2021-02-11gdb: change 'maint info section' to use command optionsAndrew Burgess7-107/+213
The 'maintenance info sections' command currently takes a list of filters on the command line. It can also accept the magic string 'ALLOBJ' which acts more like a command line flag, telling the command to print information about all objfiles. The manual has this to say about the options and filters: ... In addition, 'maint info sections' provides the following command options (which may be arbitrarily combined): ... Implying (to me at least) that I can do this: (gdb) maint info sections ALLOBJ READONLY to list all the read-only sections from all currently loaded object files. Unfortunately, this doesn't work. The READONLY filter will work, but ALLOBJ will not be detected correctly. It would be fairly simple to fix the ALLOBJ detection. However, I dislike this mixing of command options (ALLOBJ) with command data (the filters, e.g. READONLY, etc). As this is a maintenance command, so not really intended for end users, I think we can be a little more aggressive in "fixing" the option parsing. So that's what I do in this commit. The ALLOBJ mechanism is replaced with a real command option (-all-objects). The rest of the command operates just as before. The example above would now become: (gdb) maint info sections -all-objects READONLY The manual has been updated, and I added a NEWS entry to document the change. gdb/ChangeLog: * NEWS: Mention changes to 'maint info sections'. * maint.c (match_substring): Return a bool, fix whitespace issue. (struct single_bfd_flag_info): New struct. (bfd_flag_info): New static global. (match_bfd_flags): Return a bool, use bfd_flag_info. (print_bfd_flags): Use bfd_flag_info. (maint_print_section_info): Delete trailing whitespace. (struct maint_info_sections_opts): New struct. (maint_info_sections_option_defs): New static global. (maint_info_sections_completer): New function. (maintenance_info_sections): Use option parsing mechanism. (_initialize_maint_cmds): Register command completer. gdb/doc/ChangeLog: * gdb.texinfo (Files): Update documentation for 'maint info sections'. gdb/testsuite/ChangeLog: * gdb.base/maint-info-sections.exp: Update expected output, and add additional tests. Again.
2021-02-11gdb: 'maint info sections' - handle the no executable caseAndrew Burgess4-63/+105
The 'maint info sections' command is split into two blocks or work, first if there's an executable then the sections from the executable, and optionally all other loaded object files are printed. Then all the sections from any core file are printed. I ran into a situation where (for various reasons) I wasn't using a main executable. Instead I connected to a remote target and used add-symbol-file. This allowed me to debug an image that was already loaded on the remote system. Unfortunately, when I tried to use 'maint info sections' I saw nothing. The reason is that the loop over all object files is hidden behind a check that we have a main executable. This commit removes this check and merges together some duplicate code. I also (I think) made the output of this command cleaner. Here is the original output of 'maint info sections': Exec file: `/tmp/hello.x', file type elf64-x86-64. [0] 0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS [1] 0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS ... And my modified output: Exec file: `/home/andrew/tmp/hello.x', file type elf64-x86-64. [0] 0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS [1] 0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS ... The forced newline after 'Exec file: ' has been removed. This is now a wrap point (in case the filename is very long). Here is the original output of 'maint info sections ALLOBJ': Exec file: `/tmp/hello.x', file type elf64-x86-64. Object file: /tmp/hello.x [0] 0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS [1] 0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS ... Object file: /lib64/ld-linux-x86-64.so.2 [0] 0x7ffff7fd12a8->0x7ffff7fd12c8 at 0x000002a8: .note.gnu.property ALLOC LOAD READONLY DATA HAS_CONTENTS [1] 0x7ffff7fd12c8->0x7ffff7fd12ec at 0x000002c8: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS ... And my modified output: Exec file: `/tmp/hello.x', file type elf64-x86-64. [0] 0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS [1] 0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS ... Object file: `/lib64/ld-linux-x86-64.so.2', file type elf64-x86-64. [0] 0x7ffff7fd12a8->0x7ffff7fd12c8 at 0x000002a8: .note.gnu.property ALLOC LOAD READONLY DATA HAS_CONTENTS [1] 0x7ffff7fd12c8->0x7ffff7fd12ec at 0x000002c8: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS ... The executable now only gets a single header line. The header line for the additional object files is no longer indented as it was before, and the line is laid out in a similar style to the main executable line (with quotes and file type information). And of course, the biggest change. If GDB is started with no executable, but then the user does 'add-symbol-file ....' followed by 'maint info sections ALLOBJ', previously they got nothing, now they get: Object file: `/tmp/hello.x', file type elf64-x86-64. [0] 0x004002a8->0x004002c4 at 0x000002a8: .interp ALLOC LOAD READONLY DATA HAS_CONTENTS [1] 0x004002c4->0x004002e8 at 0x000002c4: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS ... gdb/ChangeLog: * maint.c (print_bfd_section_info_maybe_relocated): Delete, functionality merged into... (maint_print_all_sections): ...this new function. (maintenance_info_sections): Make use of maint_print_all_sections, allow all objects to be printed even where there's no executable. gdb/testsuite/ChangeLog: * gdb.base/maint-info-sections.exp: Update expected output, and add additional tests.
2021-02-11gdb/testsuite: split 'maint info sections' tests to a new fileAndrew Burgess3-87/+135
The next couple of patches are going to add more tests for the 'maint info sections' command. Rather than try to jam these tests into the already quite long gdb.base/maint.c, this commit moves all of the tests for 'maint info sections' into a new file. I've updated the tests to make use of some newer testsuite constructs, like -wrap and $gdb_test_name for gdb_test_multiple, but otherwise the tests should not have changed with this commit. gdb/testsuite/ChangeLog: * gdb.base/maint-info-sections.exp: New file, content is moved from gdb.base/maint.exp and cleaned up to use latest testsuite techniques. * gdb.base/maint.exp: Tests moved out to gdb.base/maint-info-sections.exp.
2021-02-11gdb: add obj_section function to bound_minimal_symbolAndrew Burgess6-4/+22
Add a new obj_section function to bound_minimal_symbol, this just calls obj_section on the contained minimal_symbol passing in the contained objfile. This allows some minor code simplification in a few places. There should be no user visible changes after this commit. gdb/ChangeLog: * breakpoint.c (resolve_sal_pc): Make use of bound_minimal_symbol::obj_section. * maint.c (maintenance_translate_address): Likewise. * minsyms.c (minimal_symbol_upper_bound): Likewise. * minsyms.h (struct bound_minimal_symbol) <obj_section>: New member function. * printcmd.c (info_address_command): Make use of bound_minimal_symbol::obj_section.
2021-02-11PR27294, avr OOMAlan Modra2-8/+15
PR 27294 * elf32-avr.c (avr_elf32_load_records_from_section): Use bfd_malloc_and_get_section. Use bfd_byte* vars and remove then unnecessary casts.
2021-02-11PR27290, PR27293, PR27295, various avr objdump fixesAlan Modra2-24/+56
Adds missing sanity checks for avr device info note, to avoid potential buffer overflows. Uses bfd_malloc_and_get_section for sanity checking section size. PR 27290 PR 27293 PR 27295 * od-elf32_avr.c (elf32_avr_get_note_section_contents): Formatting. Use bfd_malloc_and_get_section. (elf32_avr_get_note_desc): Formatting. Return descsz. Sanity check namesz. Return NULL if descsz is too small. Ensure string table is terminated. (elf32_avr_get_device_info): Formatting. Add note_size param. Sanity check note. (elf32_avr_dump_mem_usage): Adjust to suit.
2021-02-11PR27291, integer overflow in bfd_get_section_contentsAlan Modra2-4/+9
Makes the code a little more elegant too. Note that the unsigned overflow reported here is well defined so this patch doesn't fix any real problem. PR 27291 * section.c (bfd_get_section_contents): Avoid possible overflow when range checking offset and count. (bfd_set_section_contents): Likewise.
2021-02-10gdb: adjust comment in gdb.multi/multi-target.exp.tclSimon Marchi1-1/+1
I wanted to make this change before pushing the last patch but forgot to amend before pushing. Change-Id: I8e1f03ee0131c1e75973718e7835b39580a06054
2021-02-11Automatic date update in version.inGDB Administrator1-1/+1
2021-02-10gdb/testsuite: use "set sysroot" in gdb.multi/multi-target.exp.tclSimon Marchi2-1/+12
The multi-target tests involve some inferiors using remote targets. By default, GDB uses target: as the sysroot, which makes it read loaded libraries and their debug info through GDBserver. This makes the tests run slower than necessary. Pass `-ex "set sysroot"` when launching GDB in these tests, so that GDB always reads from its local file system. On a system where I don't have debug info for libc, that reduces run time for $ make check TESTS="gdb.multi/multi-target-*.exp" from 1:15 to 0:45. On this other system where debug info is installed though, it reduces it from 13:00 to 1:45. gdb/testsuite/ChangeLog: * gdb.multi/multi-target.exp.tcl (setup): Add "set sysroot" to GDBFLAGS. Change-Id: I9d24f3def843472d35dfb5667c12d70ae1d7e984
2021-02-11gdb: Remove arm-symbianelf supportAlan Modra17-170/+29
Since it has gone from bfd/. * arm-symbian-tdep.c: Delete. * NEWS: Mention arm-symbian removal. * Makefile.in: Remove arm-symbian-tdep entries. * configure.tgt: Remove arm*-*-symbianelf*. * doc/gdb.texinfo: Remove mention of SymbianOS. * osabi.c (gdb_osabi_names): Remove "Symbian". * osabi.h (enum gdb_osabi): Remove GDB_OSABI_SYMBIAN. * testsuite/gdb.base/ending-run.exp: Remove E32Main handling. * testsuite/gdb.ada/catch_ex_std.exp: Remove arm*-*-symbianelf* handling. * testsuite/gdb.base/dup-sect.exp: Likewise. * testsuite/gdb.base/long_long.exp: Likewise. * testsuite/gdb.base/solib-weak.exp: Likewise. * testsuite/gdb.guile/scm-section-script.exp: Likewise. * testsuite/gdb.python/py-section-script.exp: Likewise. * testsuite/lib/dwarf.exp: Likewise. * testsuite/lib/gdb.exp: Likewise.
2021-02-11Re: Remove arm-symbianelfAlan Modra4-0/+12
gas/ * NEWS: Mention arm-symbianelf removal. ld/ * NEWS: Mention arm-symbianelf removal.
2021-02-10[binutils] Handle absolute DW_AT_dwo_nameTom de Vries2-2/+10
With an exec: ... $ pwd /home/vries/tmp $ gcc /home/vries/tmp/src/hello.c -gsplit-dwarf -c \ -o /home/vries/tmp/obj/hello.o ... I get: ... $ readelf -w obj/hello.o > READELF readelf: Warning: Unable to load dwo file: \ /home/vries/tmp//home/vries/tmp/obj/hello.dwo ... The dwo file name is listed here: ... <20> DW_AT_GNU_dwo_name: /home/vries/tmp/obj/hello.dwo <24> DW_AT_comp_dir : /home/vries/tmp ... The standard states about the DW_AT_dwo_name attribute: ... value is a null-terminated string containing the full or relative path name (relative to the value of the DW_AT_comp_dir attribute, see below) of the object file that contains the full compilation unit. ... So, readelf shouldn't try to prefix an absolute path with DW_AT_comp_dir. Fix this in load_dwo_file by handling the absolute path case. binutils/ChangeLog: 2021-02-10 Tom de Vries <tdevries@suse.de> PR binutils/27391 * dwarf.c (load_dwo_file): Handle case that name is absolute path.
2021-02-10gdb/fortran: add parser support for lbound and uboundAndrew Burgess7-0/+524
Add support for the LBOUND and UBOUND built in functions to the Fortran expression parser. Both support taking one or two arguments. A single argument, which must be an array, returns an array containing all of the lower or upper bound data. When passed two arguments, the second argument is the dimension being asked about. In this case the result is a scalar containing the lower or upper bound just for that dimension. Some examples of usage taken from the new test: # Given: # integer, dimension (-8:-1,-10:-2) :: neg_array # (gdb) p lbound (neg_array) $1 = (-8, -10) (gdb) p lbound (neg_array, 1) $3 = -8 (gdb) p lbound (neg_array, 2) $5 = -10 gdb/ChangeLog: * f-exp.y (UNOP_OR_BINOP_INTRINSIC): New token. (exp): New pattern using UNOP_OR_BINOP_INTRINSIC. (one_or_two_args): New pattern. (f77_keywords): Add lbound and ubound. * f-lang.c (fortran_bounds_all_dims): New function. (fortran_bounds_for_dimension): New function. (evaluate_subexp_f): Handle FORTRAN_LBOUND and FORTRAN_UBOUND. (operator_length_f): Likewise. (print_subexp_f): Likewise. (dump_subexp_body_f): Likewise. (operator_check_f): Likewise. * std-operator.def (FORTRAN_LBOUND): Define. (FORTRAN_UBOUND): Define. gdb/testsuite/ChangeLog: * gdb.fortran/lbound-ubound.F90: New file. * gdb.fortran/lbound-ubound.exp: New file.
2021-02-10libctf: add missing header in BFD ELF checkNick Alcock3-0/+7
Without this, GCC warns: In file included from conftest.c:36: ../../libctf/../bfd/elf-bfd.h: In function 'bfd_section_is_ctf': ../../libctf/../bfd/elf-bfd.h:3089:10: warning: implicit declaration of function 'strncmp' [-Wimplicit-function-declaration] 3089 | return strncmp (name, ".ctf", 4) == 0 && (name[4] == 0 || name[4] == '.'); | ^~~~~~~ ../../libctf/../bfd/elf-bfd.h:3089:33: warning: 'strncmp' argument 3 type is 'int' where 'long unsigned int' is expected in a call to built-in function declared without prototype [-Wbuiltin-declaration-mismatch] 3089 | return strncmp (name, ".ctf", 4) == 0 && (name[4] == 0 || name[4] == '.'); | ^ <built-in>: note: built-in 'strncmp' declared here These warnings do not currently throw off the result of the configure check, but it's better to squash them anyway. libctf/ChangeLog 2021-02-03 Nick Alcock <nick.alcock@oracle.com> * configure.ac (ac_cv_libctf_bfd_elf): Include string.h. * configure: Regenerated.
2021-02-10libctf: require a Tcl capable of try/catch to run testsNick Alcock5-38/+138
The run_native_host_cmd implementation in testsuite/lib/ctf-lib.exp uses try/catch, which are new in Tcl 8.6. Require a Tcl that knows that try exists, as suggested by Jan Beulich. libctf/ChangeLog 2021-02-03 Nick Alcock <nick.alcock@oracle.com> * configure.ac (EXPECT): Check for, in order to define... (TCL_TRY): ... this, if Tcl supports try/catch. * Makefile.am (TCL_TRY): Run the testsuite only if set. * configure: Regenerated. * Makefile.in: Likewise.
2021-02-10bfd, opcodes, libctf: support --with-included-gettextNick Alcock11-33/+74
Right now, these libraries hardwire -L../intl -lintl on a few fixed platforms, which works fine on those platforms but on other platforms leads to shared libraries that lack libintl_* symbols when configured --with-included-gettext, and/or static libraries that contain libintl as *another* static library. If we instead use the LIBINTL variable defined in ../intl/config.intl, this gives us the right thing on all three classes of platform (gettext in libc, gettext in system libintl, gettext in ../intl/libintl.a).. This also means we can rip out some Darwin-specific machinery from configure.ac and also simplify the Cygwin side. This also means that the libctf testsuite (and other places that include libbfd, libopcodes or libctf) don't need to grow libintl dependencies just on account of those libraries (though they still need such dependencies if they themselves use gettext machinery). bfd/ChangeLog 2021-02-03 Nick Alcock <nick.alcock@oracle.com> * configure.ac (SHARED_LIBADD): Remove explicit -lintl population in favour of LIBINTL. * configure: Regenerated. libctf/ChangeLog 2021-02-02 Nick Alcock <nick.alcock@oracle.com> * configure.ac (CTF_LIBADD): Remove explicit -lintl population in favour of LIBINTL. * Makefile.am (libctf_nobfd_la_LIBADD): No longer explicitly include $(LIBINTL). (check-DEJAGNU): Pass down to tests as well. * configure: Regenerated. * Makefile.in: Likewise. opcodes/ChangeLog 2021-02-04 Nick Alcock <nick.alcock@oracle.com> * configure.ac (SHARED_LIBADD): Remove explicit -lintl population in favour of LIBINTL. * configure: Regenerated.
2021-02-10intl: turn LIBINTL into -L / -l formNick Alcock3-4/+7
This variable currently refers directly, not to a .la file, but to an .a file. This produces wrong results when building into a library on some platforms: so convert it to the general form "-L${top_builddir}../intl -lintl ..." ... so that both libtool and non-libtool builds will always do the right thing for both static and shared links. intl/ChangeLog 2021-02-04 Nick Alcock <nick.alcock@oracle.com> * configure.ac (LIBINTL): Transform into -L/-lintl form. * configure: Regenerate.
2021-02-10intl: always picifyNick Alcock5-1/+102
libintl is included in several shared libraries (at least libinproctrace.so and libctf.so): unconditionally picify with code borrowed from libiberty configure. (It's not performance-critical, so don't bother making separate PIC and non-PIC libraries like libiberty does.) intl/ChangeLog 2021-02-02 Nick Alcock <nick.alcock@oracle.com> * aclocal.m4: include picflag.m4. * configure.ac (PICFLAG): Add and substitute. * Makefile.in (PICFLAG): New. (COMPILE): Use it. * configure: Regenerate.
2021-02-10intl: Unbreak intl build with bison 3 when no regeneration is needed [PR92008]Jakub Jelinek9-17/+35
As Iain reported, my change broke the case when one has bison >= 3, but make decides there is no reason to regenerate plural.c, unfortunately that seems to be a scenario I haven't tested. The problem is that the pregenerated plural.c has been generated with bison 1.35, but when config.h says HAVE_BISON3, the code assumes it is the bison3 variant. What used to work fine is when one has bison >= 3 and plural.c has been regenerated (e.g. do touch intl/plural.y and it will work), or when one doesn't have any bison (then nothing is regenerated, but HAVE_BISON3 isn't defined either), or when one has bison < 3 and doesn't need to regenerate, or when one has bison < 3 and it is regenerated. The following patch fixes this, by killing the HAVE_BISON3 macro from config.h, and instead remembering the fact whether plural.c has been created with bison < 3 or bison >= 3 in a separate new plural-config.h header. The way this works: - user doesn't have bison - user has bison >= 3, but intl/{plural-config.h,plural.c} aren't older than intl/plural.y - user has bison < 3, but intl/{plural-config.h,plural.c} aren't older than intl/plural.y pregenerated !USE_BISON3 plural.c and plural-config.h from source dir is used, nothing in the objdir - user has bison >= 3 and intl/plural.y is newer Makefile generates plural.c and USE_BISON3 plural-config.h in the objdir, which is then used in preference to srcdir copies - user has bison < 3 and intl/plural.y is newer Makefile generates plural.c and !USE_BISON3 plural-config.h in the objdir, which is then used in preference to srcdir copies I have tested all these cases and make all-yes worked in all the cases. If one uses the unsupported ./configure where srcdir == objdir, I guess (though haven't tested) that it should still work, just it would be nice if such people didn't try to check in the plural{.c,-config.h} they have regenerated. What doesn't work, but didn't work before either (just tested gcc-9 branch too) is when one doesn't have bison and plural.y is newer than plural.c. Don't do that ;) intl/ChangeLog 2020-04-16 Jakub Jelinek <jakub@redhat.com> PR bootstrap/92008 * configure.ac: Remove HAVE_BISON3 AC_DEFINE. * Makefile.in (HEADERS): Add plural-config.h. (.y.c): Also create plural-config.h. (dcigettext.o loadmsgcat.o plural.o plural-exp.o): Also depend on plural-config.h. (plural-config.h): Depend on plural.c. * plural-exp.h: Include plural-config.h. Use USE_BISON3 instead of HAVE_BISON3. * plural.y: Use USE_BISON3 instead of HAVE_BISON3. * configure: Regenerated. * plural.c: Regenerated. * config.h.in: Regenerated. * plural-config.h: Generated.
2021-02-10intl: Allow building both with old bison and bison >= 3 [PR92008]Jakub Jelinek8-23/+150
bison 3 apparently made a backwards incompatible change, dropped YYLEX_PARAM/YYPARSE_PARAM support and instead needs %param or %lex-param and %parse-param. Furthermore, there is no easy way to conditionalize on bison version in the *.y files. While e.g. glibc bumped bison requirement and just has the bison 3 compatible version, Richi said there are still systems with older bison where we want to build gcc. So, this patch instead determines during configure bison version, and depending on that when building plural.c (if building it at all) tweaks what is passed over to bison if needed. Tested with both bison 3 and bison 1.35, in each case with reconfiguring intl and building with make all-yes (as in my setup intl isn't normally used). intl/ChangeLog 2020-04-16 Jakub Jelinek <jakub@redhat.com> PR bootstrap/92008 * configure.ac: Add check for bison >= 3, AC_DEFINE HAVE_BISON3 and AC_SUBST BISON3_YES and BISON3_NO. * Makefile.in (.y.c): Prefix $(YACC) invocation with @BISON3_NO@, add @BISON3_YES@ prefixed rule to adjust the *.y source using sed and adjust output afterwards. * plural-exp.h (PLURAL_PARSE): If HAVE_BISON3 is defined, use struct parse_args * type for arg instead of void *. * plural.y: Add magic /* BISON3 ... */ comments with bison >= 3 directives. (YYLEX_PARAM, YYPARSE_PARAM): Don't define if HAVE_BISON3 is defined. (yylex, yyerror): Adjust prototypes and definitions if HAVE_BISON3 is defined. * plural.c: Regenerated. * config.h.in: Regenerated. * configure: Regenerated.
2021-02-10gdb: delete SYMBOL_SECTION and MSYMBOL_SECTION macrosAndrew Burgess15-39/+86
Delete two more symbol/section related macros. This time it's SYMBOL_SECTION and MSYMBOL_SECTION. As with general_symbol_info::m_name it is not currently possible to make general_symbol_info::m_section private as general_symbol_info must remain a POD type. But other than failing to make the new m_section private, this change does what you'd expect, adds a get and set member function and updates all users to use the new functions instead of the previous wrapper macros. There should be no user visible change after this commit. gdb/ChangeLog: * coff-pe-read.c (add_pe_forwarded_sym): Make use of section_index and set_section_index member functions where appropriate. * coffread.c (coff_symtab_read): Likewise. (process_coff_symbol): Likewise. * ctfread.c (set_symbol_address): Likewise. * dwarf2/read.c (add_partial_symbol): Likewise. (var_decode_location): Likewise. * language.c: Likewise. * minsyms.c (minimal_symbol_reader::record_full): Likewise. (compact_minimal_symbols): Likewise. (minimal_symbol_upper_bound): Likewise. * objfiles.c (relocate_one_symbol): Likewise. * psympriv.h (partial_symbol::obj_section): Likewise. (partial_symbol::address): Likewise. * psymtab.c (partial_symtab::add_psymbol): Likewise. * stabsread.c (scan_file_globals): Likewise. * symmisc.c (dump_msymbols): Likewise. * symtab.c (general_symbol_info::obj_section): Likewise. (fixup_section): Likewise. (get_msymbol_address): Likewise. * symtab.h (general_symbol_info::section): Rename to... (general_symbol_info::m_section): ...this. (general_symbol_info::set_section_index): New member function. (general_symbol_info::section_index): Likewise. (SYMBOL_SECTION): Delete. (MSYMBOL_VALUE_ADDRESS): Make use of section_index and set_section_index member functions where appropriate. (MSYMBOL_SECTION): Delete. (symbol::symbol): Update to initialize 'm_section'. * xcoffread.c (read_xcoff_symtab): Make use of set_section_index. (process_xcoff_symbol): Likewise.
2021-02-10gdb: Delete SYMBOL_OBJ_SECTION and MSYMBOL_OBJ_SECTIONAndrew Burgess12-43/+73
Replace the two macros SYMBOL_OBJ_SECTION and MSYMBOL_OBJ_SECTION with a member function on general_symbol_info. There should be no user visible change after this commit. gdb/ChangeLog: * breakpoint.c (resolve_sal_pc): Replace SYMBOL_OBJ_SECTION and MSYMBOL_OBJ_SECTION. * findvar.c (language_defn::read_var_value): Likewise. * infcmd.c (jump_command): Likewise. * linespec.c (minsym_found): Likewise. * maint.c (maintenance_translate_address): Likewise. * minsyms.c (lookup_minimal_symbol_by_pc_section): Likewise. (minimal_symbol_upper_bound): Likewise. * parse.c (find_minsym_type_and_address): Likewise. (operator_check_standard): Likewise. * printcmd.c (info_address_command): Likewise. * symmisc.c (dump_msymbols): Likewise. (print_symbol): Likewise. * symtab.c (general_symbol_info::obj_section): Define new function. (fixup_symbol_section): Replace SYMBOL_OBJ_SECTION. (find_pc_sect_compunit_symtab): Likewise. (find_function_start_sal): Likewise. (skip_prologue_sal): Replace SYMBOL_OBJ_SECTION and MSYMBOL_OBJ_SECTION. * symtab.h (struct general_symbol_info) <obj_section>: Declare new function. (SYMBOL_OBJ_SECTION): Delete. (MSYMBOL_OBJ_SECTION): Delete.
2021-02-10[binutils] Handle presence of both .debug_ranges and .debug_rnglistsTom de Vries2-1/+22
With exec: ... $ g++ src/gdb/testsuite/gdb.cp/cpexprs.cc -gdwarf-5 -fdebug-types-section ... I run into: ... $ readelf -w a.out > READELF readelf: Error: Invalid range list entry type 126 readelf: Error: Invalid range list entry type 60 ... The executable contains both a .debug_rnglists section (for CU cpexprs.cc) and a .debug_ranges section (for other CUs, like crti.S). But when executing display_debug_ranges for say, section .debug_rnglists it also tries to use the range list references related to section .debug_ranges. Fix this by filtering out the .debug_range references when handling .debug_rnglists and vice versa. binutils/ChangeLog: 2021-02-10 Tom de Vries <tdevries@suse.de> PR binutils/27371 * dwarf.c (display_debug_ranges): Filter range lists according to section.
2021-02-10[gdb/testsuite] Fix tcl ERROR in gdb_load_no_complaintsTom de Vries2-3/+5
In commit cf2b2075299 "[gdb/symtab] Fix element type modification in read_array_type" I factored out new proc with_complaints out of proc gdb_load_no_complaints, but when fixing a rebase conflict pre-commit I made a mistake in gdb_load_no_complaints that is now causing: ... ERROR: tcl error sourcing dw2-ranges-psym.exp. ERROR: can't read "save": no such variable while executing "gdb_test_no_output "set complaints $save" """ (procedure "gdb_load_no_complaints" line 14) invoked from within "gdb_load_no_complaints $binfile" ... Fix this by removing the offending line. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-02-10 Tom de Vries <tdevries@suse.de> * lib/gdb.exp (gdb_load_no_complaints): Remove unnecessary "Restore saved setting of complaints".
2021-02-10Remove debugging code accidentally included with the fix for PR 27384Nick Clifton2-2/+5
* listing.c (buffer_line): Remove debugging code accidentally included with the fix for PR 27384.
2021-02-09Fix typo in stap_parse_argument_conditionallyTom Tromey2-1/+5
This fixes a typo in an error message in stap_parse_argument_conditionally. gdb/ChangeLog 2021-02-09 Tom Tromey <tom@tromey.com> * stap-probe.c (stap_parse_argument_conditionally): Fix typo.
2021-02-10Automatic date update in version.inGDB Administrator1-1/+1
2021-02-09[gdb/symtab] Fix element type modification in read_array_typeTom de Vries5-10/+72
When running test-case gdb.fortran/function-calls.exp with target board unix/gdb:debug_flags=-gdwarf-5, I run into: ... (gdb) PASS: gdb.fortran/function-calls.exp: \ p derived_types_and_module_calls::pass_cart(c) p derived_types_and_module_calls::pass_cart_nd(c_nd)^M ^M Program received signal SIGSEGV, Segmentation fault.^M 0x0000000000400f73 in derived_types_and_module_calls::pass_cart_nd \ (c=<error reading variable: Cannot access memory at address 0xc>) at \ function-calls.f90:130^M 130 pass_cart_nd = ubound(c%d,1,4)^M The program being debugged was signaled while in a function called from GDB.^M GDB has restored the context to what it was before the call.^M To change this behavior use "set unwindonsignal off".^M Evaluation of the expression containing the function^M (derived_types_and_module_calls::pass_cart_nd) will be abandoned.^M (gdb) FAIL: gdb.fortran/function-calls.exp: p ... The problem originates in read_array_type, when reading a DW_TAG_array_type with a dwarf-5 DW_TAG_generic_subrange child. This is not supported, and the fallout of this is that rather than constructing a new array type, the code proceeds to modify the element type. Fix this conservatively by issuing a complaint and bailing out in read_array_type when not being able to construct an array type, such that we have: ... (gdb) maint expand-symtabs function-calls.f90^M During symbol reading: unable to find array range \ - DIE at 0xe1e [in module function-calls]^M During symbol reading: unable to find array range \ - DIE at 0xe1e [in module function-calls]^M (gdb) KFAIL: gdb.fortran/function-calls.exp: no complaints in srcfile \ (PRMS: symtab/27388) ... Tested on x86_64-linux. gdb/ChangeLog: 2021-02-09 Tom de Vries <tdevries@suse.de> PR symtab/27341 * dwarf2/read.c (read_array_type): Return NULL when not being able to construct an array type. Add assert to ensure that element_type is not being modified. gdb/testsuite/ChangeLog: 2021-02-09 Tom de Vries <tdevries@suse.de> PR symtab/27341 * lib/gdb.exp (with_complaints): New proc, factored out of ... (gdb_load_no_complaints): ... here. * gdb.fortran/function-calls.exp: Add test-case.
2021-02-09gdb: revert "gdb: unify parts of the Linux and FreeBSD core dumping code"Andrew Burgess5-170/+288
This reverts commit 82a1fd3a4935fe665cf08bc6820942c4a091184c. It was pointed out: https://sourceware.org/pipermail/gdb-patches/2021-February/175750.html that commit 82a1fd3a4935 caused GDB to have an unconditional dependency on ELF specific parts of BFD. What this means is that if GDB and BFD are built for a non-elf target then there will be undefined symbol references within GDB. The right solution isn't immediately obvious. So rather than rush a fix in I'm reverting this commit for now, and will bring it back once I have a good solution. gdb/ChangeLog: * gcore.c (struct gcore_collect_regset_section_cb_data): Delete. (gcore_collect_regset_section_cb): Delete. (gcore_collect_thread_registers): Delete. (gcore_build_thread_register_notes): Delete. (gcore_find_signalled_thread): Delete. * gcore.h: Remove 'gdbsupport/gdb_signals.h' include and delete 'gdbarch' and 'thread_info' declarations. (gcore_build_thread_register_notes): Delete declaration. (gcore_find_signalled_thread): Likewise. * fbsd-tdep.c: Remove 'gcore.h' include. (struct fbsd_collect_regset_section_cb_data): New struct. (fbsd_collect_regset_section_cb): New function. (fbsd_collect_thread_registers): New function. (struct fbsd_corefile_thread_data): New struct. (fbsd_corefile_thread): New function. (fbsd_make_corefile_notes): Call FreeBSD specific code. * linux-tdep.c: Remove 'gcore.h' include. (struct linux_collect_regset_section_cb_data): New struct. (linux_collect_regset_section_cb): New function. (linux_collect_thread_registers): New function. (linux_corefile_thread): Call Linux specific code. (find_signalled_thread): New function. (linux_make_corefile_notes): Call find_signalled_thread.
2021-02-09[testsuite] Don't use 'testfile' before 'standard_testfile'.Hafiz Abid Qadeer5-8/+16
While running tests on arm-none-eabi, I noticed following errors in some gdb.threads tests. ERROR: can't read "testfile": no such variable These were being caused by ${testfile} being used before 'standard_testfile' which sets it. This patch just moves standard_testfile before the use. 2021-02-09 Abid Qadeer <abidh@codesourcery.com> gdb/testsuite/ChangeLog: * gdb.threads/signal-command-handle-nopass.exp: Call 'standard_testfile' before using 'testfile'. * gdb.threads/signal-command-multiple-signals-pending.exp: Likewise. * gdb.threads/signal-delivered-right-thread.exp: Likewise * gdb.threads/signal-sigtrap.exp: Likewise
2021-02-09Avoid crash from coerce_unspec_val_to_typeTom Tromey4-7/+15
With a certain Ada program, ada-lang.c:coerce_unspec_val_to_type can cause a crash. This function may copy a value, and in the particular case in the crash, the new value's type is smaller than the original type. This causes coerce_unspec_val_to_type to create a lazy value -- but the original value is also not_lval, so later, when the value is un-lazied, gdb asserts. As with the previous patch, we believe there is a compiler bug here, but it is difficult to reproduce, so we're not completely certain. In the particular case we saw, the original value has record type, and the record holds some variable-length arrays. This leads to the type's length being 0. At the same time, the value is optimized out. This patch changes coerce_unspec_val_to_type to handle an optimized-out value correctly. It also slightly restructures this code to avoid a crash should a not_lval value wind up here. This is a purely defensive change. This change also made it clear that value_contents_copy_raw can now be made static, so that is also done. gdb/ChangeLog 2021-02-09 Tom Tromey <tromey@adacore.com> * ada-lang.c (coerce_unspec_val_to_type): Avoid making lazy not_lval value. * value.c (value_contents_copy_raw): Now static. * value.h (value_contents_copy_raw): Don't declare.
2021-02-09Avoid crash in resolve_dynamic_structTom Tromey2-4/+9
resolve_dynamic_struct says: gdb_assert (type->num_fields () > 0); However, a certain Ada program has a structure with no fields but with a dynamic size, causing this assertion to fire. It is difficult to be certain, but we think this is a compiler bug. However, in the meantime this assertion does not seem to be checking any kind of internal consistency; so this patch removes it. gdb/ChangeLog 2021-02-09 Tom Tromey <tromey@adacore.com> * gdbtypes.c (resolve_dynamic_struct): Handle structure with no fields.
2021-02-09[binutils] Handle DW_FORM_ref_sig8 in get_type_abbrev_from_formTom de Vries2-0/+6
When compiling an exec like this: ... $ gcc -fdebug-types-section hello.c -gdwarf-5 ... we run into: ... $ readelf -w a.out > READELF readelf: Warning: Unexpected form 20 encountered whilst finding \ abbreviation for type ... Fix this by handling DW_FORM_ref_sig8 conservatively in get_type_abbrev_from_form. binutils/ChangeLog: 2021-02-09 Tom de Vries <tdevries@suse.de> PR binutils/27370 * dwarf.c (get_type_abbrev_from_form): Handle DW_FORM_ref_sig8.
2021-02-09Add a sanity check of files include by .incbin.Nick Clifton6-0/+27
PR 27381 * read.c (s_incbin): Check that the file to be included is a regular, non-directory file. * testsuite/gas/all/pr27381.s: New test source file. * testsuite/gas/all/pr27381.d: New test control file. * testsuite/gas/all/pr27381.err: Expected error output for the new test. * testsuite/gas/all/gas.exp: Run the new test.
2021-02-09[binutils] Handle DW_UT_skeleton/split_compile in process_debug_infoTom de Vries2-1/+23
With this exec: ... $ gcc -gsplit-dwarf hello.c -gdwarf-5 ... we run into: ... $ readelf -w a.out > READELF readelf: Warning: CU at offset c7 contains corrupt or unsupported unit type: 4. readelf: Warning: CU at offset c7 contains corrupt or unsupported unit type: 4. ... Fix this by handling DW_UT_skeleton and DW_UT_split_compile in process_debug_info. Note that this just adds the parsing of DWO_id, but not yet any printing of it. Tested on x86_64-linux. binutils/ChangeLog: 2021-02-09 Tom de Vries <tdevries@suse.de> PR binutils/27386 * dwarf.c (process_debug_info): Handling DW_UT_skeleton and DW_UT_split_compile.
2021-02-09Remove arm-symbianelfAlan Modra40-1242/+456
* configure.ac: Delete arm*-*-symbianelf* entry. * configure: Regenerate. bfd/ * config.bfd (arm*-*-symbianelf*): Move from obsolete to removed. * configure.ac: Delete symbian entries. * elf-bfd.h (enum elf_target_os): Delete is_symbian. * elf32-arm.c: Remove symbian support. Formatting. * targets.c: Delete symbian entries. * configure: Regenerate. binutils/ * testsuite/lib/binutils-common.exp (supports_gnu_osabi): Remove symbianelf. gas/ * Makefile.am (TARG_ENV_HFILES): Remove config/te-symbian.h. * config/tc-arm.c (elf32_arm_target_format): Remove TE_SYMBIAN support. * config/te-symbian.h: Delete. * configure.tgt: Remove arm-*-symbianelf*. * testsuite/gas/arm/arch4t-eabi.d: Don't mention symbianelf in target selection. * testsuite/gas/arm/arch4t.d: Likewise. * testsuite/gas/arm/got_prel.d: Likewise. * testsuite/gas/arm/mapdir.d: Likewise. * testsuite/gas/arm/mapmisc.d: Likewise. * testsuite/gas/arm/mapsecs.d: Likewise. * testsuite/gas/arm/mapshort-eabi.d: Likewise. * testsuite/gas/arm/thumb-eabi.d: Likewise. * testsuite/gas/arm/thumb.d: Likewise. * testsuite/gas/arm/thumbrel.d: Likewise. * Makefile.in: Regenerate. * po/POTFILES.in: Regenerate. ld/ * Makefile.am (ALL_EMULATION_SOURCES): Remove earmsymbian.c. Don't include symbian dep file. * configure.tgt: Remove arm*-*-symbianelf* entry. * emulparams/armsymbian.sh: Delete. * ld.texi: Don't mention symbian. * scripttempl/armbpabi.sc: Delete. * testsuite/ld-arm/symbian-seg1.d: Delete. * testsuite/ld-arm/symbian-seg1.s: Delete. * testsuite/ld-arm/arm-elf.exp: Don't run symbian-seg1. * Makefile.in: Regenerate. * po/BLD-POTFILES.in: Regenerate.
2021-02-09Prevent a bad .Psize expression from triggering a memory access violation.Nick Clifton6-1/+44
PR 27384 * listing.c (listing_psize): Check the result of the width expression before assigning it to paper_width. * testsuite/gas/all/pr27384.s: New test source file. * testsuite/gas/all/pr27384.d: New test control file. * testsuite/gas/all/pr27384.err: Expected errors from new test. * testsuite/gas/all/gas.exp: Run the new test.
2021-02-09Add a test for PR 27355 - where corrupt assembler .file directives could ↵Nick Clifton5-0/+21
trigger a segmentation fault. PR 27355 * testsuite/gas/elf/pr27355.s: New test source file. * testsuite/gas/elf/pr27355.d: New test control file. * testsuite/gas/elf/pr27355.err: Expected errors from new test. * testsuite/gas/elf/elf.exp: Run the new test.
2021-02-09Automatic date update in version.inGDB Administrator1-1/+1
2021-02-08opcodes: tic54x: namespace exported variablesMike Frysinger7-26/+69
The tic54x exports some fairly generic variable names that can conflict with programs that use them, so put proper tic54x_ prefixes on all of them.
2021-02-08Build gdb.base/gnu-ifunc.exp with lazy bindingLuis Machado2-0/+8
The test expects the ifunc resolver to run lazily, at a later stage. Depending on the distro and toolchain configuration, this is not the case. Some configurations use non-lazy binding and thus the ifunc resolver resolves all the ifunc references very early in the process startup, before main. Ubuntu is one such case. It has switched its toolchains to pass -Wl,z,now by default, since 16.04. This wasn't a problem before 20.04 (at least for aarch64) because the toolchains did not support ifunc's. Forcing lazy binding makes the test run as expected, as opposed to the 80 or so failures it showed before the change. Tested on aarch64-linux/x86_64-linux Ubuntu 20.04. gdb/testsuite: 2021-02-08 Luis Machado <luis.machado@linaro.org> * gdb.base/gnu-ifunc.exp (build): Pass -Wl,z,lazy.
2021-02-08Fix an illegal memory access when parsing a corrupt assembler file.Nick Clifton2-2/+16
PR 27355 * dwarf2dbg.c (allocate_filename_to_slot): Allocate the dirs array if it has not already been created.
2021-02-08[gdb/testsuite] Use DW_FORM_ref_addr in gdb.dwarf2/enqueued-cu-base-addr.expTom de Vries2-1/+5
When running test-case gdb.dwarf2/enqueued-cu-base-addr.exp with target board cc-with-dwz, I get: ... gdb compile failed, dwz: enqueued-cu-base-addr: \ Couldn't find DIE at [100] referenced by DW_AT_type from DIE at [d8] ... At 0xd8 we have DIE: ... <1><d8>: Abbrev Number: 3 (DW_TAG_variable) <d9> DW_AT_name : foo <dd> DW_AT_type : <0x100> <e1> DW_AT_const_value : 1 ... referring to: ... <1><100>: Abbrev Number: 3 (DW_TAG_base_type) <101> DW_AT_byte_size : 4 <102> DW_AT_encoding : 5 (signed) <103> DW_AT_name : int ... The reference is inter-CU, but the used abbrev uses DW_FORM_ref4: ... 3 DW_TAG_variable [no children] DW_AT_name DW_FORM_string DW_AT_type DW_FORM_ref4 DW_AT_const_value DW_FORM_sdata DW_AT value: 0 DW_FORM value: 0 ... which is for intra-CU references. Fix this by using a '%' instead of a ':' label prefix in the dwarf assembly. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-02-08 Tom de Vries <tdevries@suse.de> * gdb.dwarf2/enqueued-cu-base-addr.exp: Fix inter-CU reference.
2021-02-08gdb: Do not interrupt atomic sequences for ARCShahab Vahedi2-1/+82
When stepping over thread-lock related codes (in uClibc), the inferior process gets stuck and never manages to enter the critical section: ------8<------- 1 size_t fwrite(const void * __restrict ptr, size_t size, 2 size_t nmemb, register FILE * __restrict stream) 3 { 4 size_t retval; 5 __STDIO_AUTO_THREADLOCK_VAR; 6 7 > __STDIO_AUTO_THREADLOCK(stream); 8 9 retval = fwrite_unlocked(ptr, size, nmemb, stream); 10 11 __STDIO_AUTO_THREADUNLOCK(stream); 12 13 return retval; 14 } ------>8------- Here, we are at line 7. Using the "next" command leads no where. However, setting a breakpoint on line 9 and issuing "continue" works. Looking at the assembly instructions reveals that we're dealing with the critical section entry code [1] that should never be interrupted, in this case by the debugger's implicit breakpoints: ------8<------- ... 1 add_s r0,r13,0x38 2 mov_s r3,1 3 llock r2,[r0] <-. 4 brne.nt r2,0,14 --. | 5 scond r3,[r0] | | 6 bne -10 --|--' 7 brne_s r2,0,84 <-' ... ------>8------- Lines 3 until 5 (inclusive) are supposed to be executed atomically. Therefore, GDB should never (implicitly) insert a breakpoint on lines 4 and 5, else the program will try to acquire the lock again by jumping back to line 3 and gets stuck in an infinite loop. The solution is to make GDB aware of these patterns so it inserts breakpoints after the sequence -- line 6 in this example. [1] https://cgit.uclibc-ng.org/cgi/cgit/uclibc-ng.git/tree/libc/sysdeps/linux/arc/bits/atomic.h#n46 ------8<------- ({ \ __typeof(oldval) prev; \ \ __asm__ __volatile__( \ "1: llock %0, [%1] \n" \ " brne %0, %2, 2f \n" \ " scond %3, [%1] \n" \ " bnz 1b \n" \ "2: \n" \ : "=&r"(prev) \ : "r"(mem), "ir"(oldval), \ "r"(newval) /* can't be "ir". scond can't take limm for "b" */\ : "cc", "memory"); \ \ prev; \ }) ------>8------- "llock" (Load Locked) loads the 32-bit word pointed by the source operand. If the load is completed without any interruption or exception, the physical address is remembered, in Lock Physical Address (LPA), and the Lock Flag (LF) is set to 1. LF is a non-architecturally visible flag and is cleared whenever an interrupt or exception takes place. LF is also cleared (atomically) whenever another process writes to the LPA. "scond" (Store Conditional) will write to the destination address if and only if the LF is set to 1. When finished, with or without a write, it atomically copies the LF value to ZF (Zero Flag). These two instructions together provide the mechanism for entering a critical section. The code snippet above comes from uClibc: ----------------------- v3 (after Tom's remarks[2]): handle_atomic_sequence() - no need to initialize the std::vector with "{}" - fix typo in comments: "conditial" -> "conditional" - add braces to the body of "if" condition because of the comment line arc_linux_software_single_step() - make the performance slightly more efficient by moving a few variables after the likely "return" point. v2 (after Simon's remarks[3]): - handle_atomic_sequence() gets a copy of an instruction instead of a reference. - handle_atomic_sequence() asserts if the given instruction is an llock. [2] https://sourceware.org/pipermail/gdb-patches/2021-February/175805.html [3] https://sourceware.org/pipermail/gdb-patches/2021-January/175487.html gdb/ChangeLog: PR tdep/27369 * arc-linux-tdep.c (handle_atomic_sequence): New. (arc_linux_software_single_step): Call handle_atomic_sequence().
2021-02-08gdb: return true in TuiWindow.is_valid only if TUI is enabledAndrew Burgess11-15/+394
If the user implements a TUI window in Python, and this window responds to GDB events and then redraws its window contents then there is currently an edge case which can lead to problems. The Python API documentation suggests that calling methods like erase or write on a TUI window (from Python code) will raise an exception if the window is not valid. And the description for is_valid says: This method returns True when this window is valid. When the user changes the TUI layout, windows no longer visible in the new layout will be destroyed. At this point, the gdb.TuiWindow will no longer be valid, and methods (and attributes) other than is_valid will throw an exception. From this I, as a user, would expect that if I did 'tui disable' to switch back to CLI mode, then the window would no longer be valid. However, this is not the case. When the TUI is disabled the windows in the TUI are not deleted, they are simply hidden. As such, currently, the is_valid method continues to return true. This means that if the users Python code does something like: def event_handler (e): global tui_window_object if tui_window_object->is_valid (): tui_window_object->erase () tui_window_object->write ("Hello World") gdb.events.stop.connect (event_handler) Then when a stop event arrives GDB will try to draw the TUI window, even when the TUI is disabled. This exposes two bugs. First, is_valid should be returning false in this case, second, if the user forgot to add the is_valid call, then I believe the erase and write calls should be throwing an exception (when the TUI is disabled). The solution to both of these issues is I think bound together, as it depends on having a working 'is_valid' check. There's a rogue assert added into tui-layout.c as part of this commit. While working on this commit I managed to break GDB such that TUI_CMD_WIN was nullptr, this was causing GDB to abort. I'm leaving the assert in as it might help people catch issues in the future. This patch is inspired by the work done here: https://sourceware.org/pipermail/gdb-patches/2020-December/174338.html gdb/ChangeLog: * python/py-tui.c (gdbpy_tui_window) <is_valid>: New member function. (REQUIRE_WINDOW): Call is_valid member function. (REQUIRE_WINDOW_FOR_SETTER): New define. (gdbpy_tui_is_valid): Call is_valid member function. (gdbpy_tui_set_title): Call REQUIRE_WINDOW_FOR_SETTER instead. * tui/tui-data.h (struct tui_win_info) <is_visible>: Check tui_active too. * tui/tui-layout.c (tui_apply_current_layout): Add an assert. * tui/tui.c (tui_enable): Move setting of tui_active earlier in the function. gdb/doc/ChangeLog: * python.texinfo (TUI Windows In Python): Extend description of TuiWindow.is_valid. gdb/testsuite/ChangeLog: * gdb.python/tui-window-disabled.c: New file. * gdb.python/tui-window-disabled.exp: New file. * gdb.python/tui-window-disabled.py: New file.
2021-02-08gdb/python: don't allow the user to delete window title attributesAndrew Burgess5-2/+29
There's a bug in the python tui API. If the user tries to delete the window title attribute then this will trigger undefined behaviour in GDB due to a missing nullptr check. gdb/ChangeLog: * python/py-tui.c (gdbpy_tui_set_title): Check that the new value for the title is not nullptr. gdb/testsuite/ChangeLog: * gdb.python/tui-window.exp: Add new tests. * gdb.python/tui-window.py (TestWindow) <__init__>: Store TestWindow object into global the_window. <remote_title>: New method. (delete_window_title): New function.
2021-02-08gdb/tui: don't add windows to global list from tui_layout:window::applyAndrew Burgess5-15/+56
This commit was inspired by this mailing list patch: https://sourceware.org/pipermail/gdb-patches/2021-January/174713.html Currently, calling tui_layout_window::apply will add the window from the layout object to the global tui_windows list. Unfortunately, when the user runs the 'winheight' command, this calls tui_adjust_window_height, which calls the tui_layout_base::adjust_size function, which can then call tui_layout_base::apply. The consequence of this is that when the user does 'winheight' duplicate copies of a window can be added to the global tui_windows list. The original patch fixed this by changing the apply function to only update the global list some of the time. This patch takes a different approach. The apply function no longer updates the global tui_windows list. Instead a new virtual function is added to tui_layout_base which is used to gather all the currently applied windows into a vector. Finally tui_apply_current_layout is updated to make use of this new function to update the tui_windows list. The benefits I see in this approach are, (a) the apply function now no longer touches global state, this solves the immediate problem, and (b) now that tui_windows is updated directly in the function tui_apply_current_layout, we can drop the saved_tui_windows global. gdb/ChangeLog: * tui-layout.c (saved_tui_windows): Delete. (tui_apply_current_layout): Don't make use of saved_tui_windows, call new get_windows member function instead. (tui_get_window_by_name): Check in tui_windows. (tui_layout_window::apply): Don't add to tui_windows. * tui-layout.h (tui_layout_base::get_windows): New member function. (tui_layout_window::get_windows): Likewise. (tui_layout_split::get_windows): Likewise. gdb/testsuite/ChangeLog: * gdb.tui/winheight.exp: Add more tests.
2021-02-08gdb/tui: restore delete of window objectsAndrew Burgess2-0/+6
In commit: commit f237f998d1168139d599c550d54169cd8f94052d Date: Mon Jan 25 18:43:19 2021 +0000 gdb/tui: remove special handling of locator/status window I accidentally remove a call to delete the tui window objects. Now every time GDB changes tui layout it is leaking windows. gdb/ChangeLog: * tui/tui-layout.c (tui_apply_current_layout): Restore the delete of the window objects.