aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2021-07-12Automatic date update in version.inGDB Administrator1-1/+1
2021-07-11Automatic date update in version.inGDB Administrator1-1/+1
2021-07-10Tidy commit 49910fd88dcdAlan Modra2-6/+8
Pointer range checking is UB if the values compared are outside the underlying array elements (plus one). * dwarf2.c (read_address): Remove accidental commit. (read_ranges): Compare offset rather than pointers.
2021-07-10PR28069, assertion fail in dwarf.c:display_discr_listAlan Modra3-21/+26
We shouldn't be asserting on anything to do with leb128 values, or reporting file and line numbers when something unexpected happens. leb128 data is of indeterminate length, perfect for fuzzer mayhem. It would only make sense to assert or report dwarf.c/readelf.c source lines if the code had already sized and sanity checked the leb128 values. After removing the assertions, the testcase then gave: <37> DW_AT_discr_list : 5 byte block: 0 0 0 0 0 (label 0, label 0, label 0, label 0, <corrupt> readelf: Warning: corrupt discr_list - unrecognized discriminant byte 0x5 <3d> DW_AT_encoding : 0 (void) <3e> DW_AT_identifier_case: 0 (case_sensitive) <3f> DW_AT_virtuality : 0 (none) <40> DW_AT_decimal_sign: 5 (trailing separate) So the DW_AT_discr_list was showing more data than just the 5 byte block. That happened due to "end" pointing a long way past the end of block, and uvalue decrementing past zero on one of the leb128 bytes. PR 28069 * dwarf.c (display_discr_list): Remove assertions. Delete "end" parameter, use initial "data" pointer as the end. Formatting. Don't count down bytes as they are read. (read_and_display_attr_value): Adjust display_discr_list call. (read_and_print_leb128): Don't pass __FILE__ and __LINE__ to report_leb_status. * dwarf.h (report_leb_status): Don't report file and line numbers. Delete file and lnum parameters, (READ_ULEB, READ_SLEB): Adjust.
2021-07-10Automatic date update in version.inGDB Administrator1-1/+1
2021-07-09ld/NEWS: Clarify -z [no]indirect-extern-accessH.J. Lu1-2/+2
-z [no]indirect-extern-access are only for x86 ELF linker.
2021-07-08elf: Limits 2 GNU_PROPERTY_1_NEEDED tests to Linux/x86H.J. Lu2-10/+2
Run property-1_needed-1b.d and property-1_needed-1c.d, which pass -z [no]indirect-extern-access to linker, only run for Linux/x86 targets. * testsuite/ld-elf/property-1_needed-1b.d: Only run for Linux/x86 targets. * testsuite/ld-elf/property-1_needed-1c.d: Likewise.
2021-07-08elf: Add GNU_PROPERTY_1_NEEDED checkH.J. Lu33-23/+1078
If GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS is set on any input relocatable files: 1. Don't generate copy relocations. 2. Turn off extern_protected_data since it implies GNU_PROPERTY_NO_COPY_ON_PROTECTED. 3. Treate reference to protected symbols with indirect external access as local. 4. Set GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS on output. 5. When generating executable, clear this bit when there are non-GOT or non-PLT relocations in input relocatable files without the bit set. 6. Add -z [no]indirect-extern-access to control indirect external access. bfd/ * elf-bfd (elf_obj_tdata): Add has_indirect_extern_access. (elf_has_indirect_extern_access): New. * elf-properties.c (_bfd_elf_parse_gnu_properties): Set elf_has_indirect_extern_access and elf_has_no_copy_on_protected when seeing GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS. (elf_write_gnu_propertie): Add an argument to pass link_info. Set needed_1_p for GNU_PROPERTY_1_NEEDED in memory. (_bfd_elf_link_setup_gnu_properties): Handle GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS for -z indirect-extern-access. Set nocopyreloc to true and extern_protected_data to false for indirect external access. (_bfd_elf_convert_gnu_properties): Updated. * elf32-i386.c (elf_i386_check_relocs): Set non_got_ref_without_indirect_extern_access on legacy non-GOT or non-PLT references. * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. * elflink.c (_bfd_elf_symbol_refs_local_p): Return true for STV_PROTECTED symbols with indirect external access. * elfxx-x86.c (_bfd_x86_elf_adjust_dynamic_symbol): Clear indirect_extern_access for legacy non-GOT/non-PLT references. * elfxx-x86.h (elf_x86_link_hash_entry): Add non_got_ref_without_indirect_extern_access. include/ * bfdlink.h (bfd_link_info): Add indirect_extern_access and needed_1_p. Change nocopyreloc to int. ld/ * NEWS: Mention -z [no]indirect-extern-access * ld.texi: Document -z [no]indirect-extern-access * ldmain.c (main): Initialize link_info.indirect_extern_access to -1. * emulparams/extern_protected_data.sh: Support -z [no]indirect-extern-access. * testsuite/ld-elf/indirect-extern-access-1.rd: New file * testsuite/ld-elf/indirect-extern-access-1a.c: Likewise. * testsuite/ld-elf/indirect-extern-access-1b.c: Likewise. * testsuite/ld-elf/indirect-extern-access-2.rd: Likewise. * testsuite/ld-elf/indirect-extern-access-2a.c: Likewise. * testsuite/ld-elf/indirect-extern-access-2b.c: Likewise. * testsuite/ld-elf/indirect-extern-access-3.rd: Likewise. * testsuite/ld-elf/indirect-extern-access.S: Likewise. * testsuite/ld-elf/property-1_needed-1b.d: Likewise. * testsuite/ld-elf/property-1_needed-1c.d: Likewise. * testsuite/ld-x86-64/indirect-extern-access.rd: Likewise. * testsuite/ld-x86-64/protected-data-1.h: Likewise. * testsuite/ld-x86-64/protected-data-1a.c: Likewise. * testsuite/ld-x86-64/protected-data-1b.c: Likewise. * testsuite/ld-x86-64/protected-data-2a.S: Likewise. * testsuite/ld-x86-64/protected-data-2b.S: Likewise. * testsuite/ld-x86-64/protected-func-2a.S: Likewise. * testsuite/ld-x86-64/protected-func-2b.S: Likewise. * testsuite/ld-x86-64/protected-func-2c.c: Likewise. * testsuite/ld-elf/linux-x86.exp: Run test with GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS. * testsuite/ld-x86-64/x86-64.exp: Run tests for protected function and data with indirect external access.
2021-07-08elf: Add GNU_PROPERTY_1_NEEDEDH.J. Lu4-0/+78
Add GNU_PROPERTY_1_NEEDED: #define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO to indicate the needed properties by the object file. Add GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS: #define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) to indicate that the object file requires canonical function pointers and cannot be used with copy relocation. binutils/ * readelf.c (decode_1_needed): New. (print_gnu_property_note): Handle GNU_PROPERTY_1_NEEDED. include/ * elf/common.h (GNU_PROPERTY_1_NEEDED): New. (GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS): Likewise. ld/ * testsuite/ld-elf/property-1_needed-1a.d: New file. * testsuite/ld-elf/property-1_needed-1.s: Likewise.
2021-07-09Automatic date update in version.inGDB Administrator1-1/+1
2021-07-09Remove unused parameter in maybe_software_singlestepLancelot SIX1-8/+7
While working around, I noticed that the last parameter of maybe_software_singlestep is never used. This path removes it. Built on x86_64-linux-gnu and riscv64-linux-gnu. gdb/ChangeLog: * infrun.c (maybe_software_singlestep): Remove unused PC parameter. (resume_1): Update calls to maybe_software_singlestep.
2021-07-08x86-64: Disallow PC reloc against weak undefined symbols in PIEH.J. Lu2-12/+6
Disallow PC relocations against weak undefined symbols in PIE since they can lead to non-zero address at run-time. bfd/ PR ld/21782 * elf64-x86-64.c (elf_x86_64_relocate_section): Disallow PC relocations against weak undefined symbols in PIE. ld/ PR ld/21782 * testsuite/ld-x86-64/pie3.d: Expect linker error.
2021-07-08ld: Limit cache size and add --max-cache-size=SIZEH.J. Lu17-26/+158
When link_info.keep_memory is true, linker caches the relocation information and symbol tables of input files in memory. When there are many input files with many relocations, we may run out of memory. Add --max-cache-size=SIZE to set the maximum cache size. bfd/ PR ld/18028 * bfd.c (bfd): Add alloc_size. * elf-bfd.h (_bfd_elf_link_info_read_relocs): New. * elf32-i386.c (elf_i386_check_relocs): Use _bfd_link_keep_memory. Update cache_size. * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise. * elflink.c (_bfd_elf_link_read_relocs): Renamed to ... (_bfd_elf_link_info_read_relocs): This. Update cache_size. (_bfd_elf_link_read_relocs): New. (_bfd_elf_link_check_relocs): Call _bfd_elf_link_info_read_relocs instead of _bfd_elf_link_read_relocs. (elf_link_add_object_symbols): Likewise. (elf_link_input_bfd): Likewise. (init_reloc_cookie_rels): Likewise. (init_reloc_cookie): Update cache_size. Call _bfd_elf_link_info_read_relocs instead of _bfd_elf_link_read_relocs. (link_info_ok): New. (elf_gc_smash_unused_vtentry_relocs): Updated. Call _bfd_elf_link_info_read_relocs instead of _bfd_elf_link_read_relocs. (bfd_elf_gc_sections): Use link_info_ok. Pass &link_info_ok to elf_gc_smash_unused_vtentry_relocs. * libbfd-in.h (_bfd_link_keep_memory): New. * linker.c (_bfd_link_keep_memory): New. * opncls.c (bfd_alloc): Update alloc_size. * bfd-in2.h: Regenerated. * libbfd.h: Likewise. include/ PR ld/18028 * bfdlink.h (bfd_link_info): Add cache_size and max_cache_size. ld/ PR ld/18028 * NEWS: Mention --max-cache-size=SIZE. * ld.texi: Document --max-cache-size=SIZE. * ldlex.h (option_values): Add OPTION_MAX_CACHE_SIZE. * ldmain.c: (main): Set link_info.max_cache_size to -1. * lexsup.c (ld_options): Add --max-cache-size=SIZE. (parse_args): Support OPTION_MAX_CACHE_SIZE. * testsuite/ld-bootstrap/bootstrap.exp: Add test for --max-cache-size=-1.
2021-07-08gdb: don't set Linux-specific displaced stepping methods in s390_gdbarch_initSimon Marchi2-5/+1
According to bug 28056, running an s390x binary gives: (gdb) run Starting program: /usr/bin/ls /home/ubuntu/tmp/gdb-11.0.90.20210705/gdb/linux-tdep.c:2550: internal-error: displaced_step_prepare_status linux_displaced_step_prepare(gdbarch*, thread_info*, CORE_ADDR&): Assertion `gdbarch_data->num_disp_step_buffers > 0' failed. This is because the s390 architecture registers some Linux-specific displaced stepping callbacks in the OS-agnostic s390_gdbarch_init: set_gdbarch_displaced_step_prepare (gdbarch, linux_displaced_step_prepare); set_gdbarch_displaced_step_finish (gdbarch, linux_displaced_step_finish); set_gdbarch_displaced_step_restore_all_in_ptid (gdbarch, linux_displaced_step_restore_all_in_ptid); But then the Linux-specific s390_linux_init_abi_any passes num_disp_step_buffers=0 to linux_init_abi: linux_init_abi (info, gdbarch, 0); The problem happens when linux_displaced_step_prepare is called for the first time. It tries to allocate the displaced stepping buffers, but sees that the number of displaced stepping buffers for that architecture is 0, which is unexpected / invalid. s390_gdbarch_init should not register the linux_* callbacks, that is expected to be done by linux_init_abi. If debugging a bare-metal s390 program, or an s390 program on another OS GDB doesn't know about, we wouldn't want to use them. We would either register no callbacks, if displaced stepping isn't supported, or register a different set of callbacks if we wanted to support displaced stepping in those cases. The commit that refactored the displaced stepping machinery and introduced these set_gdbarch_displaced_step_* calls is 187b041e2514 ("gdb: move displaced stepping logic to gdbarch, allow starting concurrent displaced steps"). However, even before that, s390_gdbarch_init did: set_gdbarch_displaced_step_location (gdbarch, linux_displaced_step_location); ... which already seemed wrong. The Linux-specific callback was used even for non-Linux system. Maybe that was on purpose, because it would also happen to work in some other non-Linux case, or maybe it was simply a mistake. I'll assume that this was a small mistake when s390-tdep.{h,c} where factored out of s390-linux-tdep.c, in d6e589456475 ("s390: Split up s390-linux-tdep.c into two files"). Fix this by removing the setting of these displaced step callbacks from s390_gdbarch_init. Instead, pass num_disp_step_buffers=1 to linux_init_abi, in s390_linux_init_abi_any. Doing so will cause linux_init_abi to register these same callbacks. It will also mean that when debugging a bare-metal s390 executable or an executable on another OS that GDB doesn't know about, gdbarch_displaced_step_prepare won't be set, so displaced stepping won't be used. This patch will need to be merged in the gdb-11-branch, since this is a GDB 11 regression, so here's the ChangeLog entry: gdb/ChangeLog: * s390-linux-tdep.c (s390_linux_init_abi_any): Pass 1 (number of displaced stepping buffers to linux_init_abi. * s390-tdep.c (s390_gdbarch_init): Don't set the Linux-specific displaced-stepping gdbarch callbacks. Change-Id: Ieab2f8990c78fde845ce7378d6fd4ee2833800d5 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28056
2021-07-08gdb/Makefile.in: remove testsuite from SUBDIRSSimon Marchi1-1/+1
When distclean-ing a configured / built gdb directory, like so: $ ./configure && make all-gdb && make distclean The distclean operation fails with: Missing testsuite/Makefile If we look at the SUBDIRS variable in the generated gdb/Makefile, testsuite is there twice: SUBDIRS = doc testsuite data-directory testsuite So we try distclean-ing the testsuite directory twice. The second time, gdb/testsuite/Makefile doesn't exist, so it fails. The first "testsuite" comes from the @subdirs@ replacement, because of the `AC_CONFIG_SUBDIRS` macro in gdb/configure.ac. The second one is hard-coded in gdb/Makefile.in: SUBDIRS = doc @subdirs@ data-directory testsuite The hard-coded was added by: bdbbcd577460 ("Always build 'all' in gdb/testsuite") which came after `testsuite` was removed from @subdirs@ by: f99d1d37496f ("Remove gdb/testsuite/configure") My commit a100a94530eb ("gdb/testsuite: restore configure script") should have removed the hard-coded `testsuite`, since it added it back as a "subdir", but I missed it because I only looked f99d1d37496f to write my patch. Fix this by removing the hard-coded one. This patch should be pushed to both master and gdb-11-branch, hence the ChangeLog entry: gdb/ChangeLog: * Makefile.in (SUBDIRS): Remove testsuite. Change-Id: I63e5590b1a08673c646510b3ecc74600eae9f92d
2021-07-08Updated Portuguese translation for the BFD sub-directoryNick Clifton2-1423/+1540
2021-07-08[gdb/testsuite] Fix gdb.guile/scm-breakpoint.exp with guile 3.0Tom de Vries1-3/+3
When running test-case gdb.guile/scm-breakpoint.exp on openSUSE Tumbleweed with guile 3.0, I run into: ... (gdb) guile (define cp (make-breakpoint "syscall" #:type BP_CATCHPOINT))^M ERROR: In procedure make-breakpoint:^M In procedure gdbscm_make_breakpoint: unsupported breakpoint type in \ position 3: "BP_CATCHPOINT"^M Error while executing Scheme code.^M (gdb) FAIL: gdb.guile/scm-breakpoint.exp: test_catchpoints: \ create a catchpoint via the api ... The same test passes on openSUSE Leap 15.2 with guile 2.0, where the second line of the error message starts with the same prefix as the first: ... ERROR: In procedure gdbscm_make_breakpoint: unsupported breakpoint type in \ position 3: "BP_CATCHPOINT"^M ... I observe the same difference in many other tests, f.i.: ... (gdb) gu (print (value-add i '()))^M ERROR: In procedure value-add:^M In procedure gdbscm_value_add: Wrong type argument in position 2: ()^M Error while executing Scheme code.^M (gdb) PASS: gdb.guile/scm-math.exp: catch error in guile type conversion ... but it doesn't cause FAILs anywhere else. Fix this by updating the regexp to make the "ERROR: " prefix optional. Tested on x86_64-linux, with both guile 2.0 and 3.0. gdb/testsuite/ChangeLog: 2021-07-07 Tom de Vries <tdevries@suse.de> * gdb.guile/scm-breakpoint.exp: Make additional "ERROR: " prefix in exception printing optional.
2021-07-08sim: erc32: use libsim.a for common objectsMike Frysinger1-2/+2
We're starting to move more objects to the common build that sis did not need before, so linking them is causing problems (when common objects end up needing symbols from non-common objects). Switch it to the libsim.a archive which will allow the link to pull out only what it needs.
2021-07-08Automatic date update in version.inGDB Administrator1-1/+1
2021-07-07Remove an accidental change to elfcode.h included as part of commit 6e0dfbf420.Nick Clifton2-3/+7
PR 27659 * elfcode.h (elf_swap_symbol_out): Revert accidental change that removed an abort if the shndx pointer is NULL.
2021-07-07ld: Check archive only for archive memberH.J. Lu2-13/+16
Since plugin_maybe_claim calls bfd_close on the original input BFD if it isn't an archive member, pass NULL to bfd_plugin_close_file_descriptor to indicate that the BFD isn't an archive member. bfd/ PR ld/18028 * plugin.c (bfd_plugin_close_file_descriptor): Check archive only of abfd != NULL. (try_claim): Pass NULL to bfd_plugin_close_file_descriptor if it isn't an archive member. ld/ PR ld/18028 * plugin.c (plugin_input_file): Add comments for abfd and ibfd. (plugin_object_p): Set input->ibfd to NULL if it isn't an archive member.
2021-07-07Add changelog entries for last commitAndreas Krebbel2-0/+9
2021-07-07IBM Z: Add another arch14 instructionAndreas Krebbel3-0/+4
opcodes/ * opcodes/s390-opc.txt: Add qpaci. gas/ * testsuite/gas/s390/zarch-arch14.d: Add qpaci. * testsuite/gas/s390/zarch-arch14.s: Add qpaci.
2021-07-07Fix Solaris gprof build with --disable-nlsRainer Orth2-0/+16
gprof fails to compile on Solaris 10 and 11.3 with --disable-nls: In file included from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/gprof.h:33, from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/basic_blocks.c:24: /usr/include/libintl.h:45:14: error: expected identifier or '(' before 'const' 45 | extern char *dcgettext(const char *, const char *, const int); | ^~~~~~~~~ /usr/include/libintl.h:46:14: error: expected identifier or '(' before 'const' 46 | extern char *dgettext(const char *, const char *); | ^~~~~~~~ /usr/include/libintl.h:47:14: error: expected identifier or '(' before 'const' 47 | extern char *gettext(const char *); | ^~~~~~~ /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:33: error: expected identifier or '(' before 'do' 165 | # define textdomain(Domainname) do {} while (0) | ^~ /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:39: error: expected identifier or '(' before 'while' 165 | # define textdomain(Domainname) do {} while (0) | ^~~~~ /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:46: error: expected identifier or '(' before 'do' 166 | # define bindtextdomain(Domainname, Dirname) do {} while (0) | ^~ /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:52: error: expected identifier or '(' before 'while' 166 | # define bindtextdomain(Domainname, Dirname) do {} while (0) | ^~~~~ /usr/include/libintl.h:55:14: error: expected identifier or '(' before 'unsigned' 55 | extern char *dcngettext(const char *, const char *, | ^~~~~~~~~~ /usr/include/libintl.h:57:14: error: expected identifier or '(' before 'unsigned' 57 | extern char *dngettext(const char *, const char *, | ^~~~~~~~~ /usr/include/libintl.h:59:14: error: expected identifier or '(' before 'unsigned' 59 | extern char *ngettext(const char *, const char *, unsigned long int); | ^~~~~~~~ This is a known issue already partially fixed in binutils/sysdep.h. For gprof, the same fix needs to be applied in bfd/sysdep.h, as the following patch does. Tested on i386-pc-solaris2.10 and i386-pc-solaris2.11. 2021-07-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> bfd: * sysdep.h [!ENABLE_NLS]: Prevent inclusion of <libintl.h> on Solaris.
2021-07-07Check for strnlen declaration to fix Solaris 10 buildRainer Orth8-2/+40
binutils currently fails to compile on Solaris 10: /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_debug_link_info_1': /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: implicit declaration of function 'strnlen' [-Werror=implicit-function-declaration] 1231 | crc_offset = strnlen (name, size) + 1; | ^~~~~~~ /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror] /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_alt_debug_link_info': /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1319:20: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror] 1319 | buildid_offset = strnlen (name, size) + 1; | ^~~~~~~ and in a couple of other places. The platform lacks strnlen, and while libiberty.h can provide a fallback declaration, the necessary configure test isn't run. Fixed with the following patch. Tested on i386-pc-solaris2.10. 2021-07-06 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> bfd: * configure.ac: Check for strnlen declaration. * configure, config.in: Regenerate. binutils: * configure.ac: Check for strnlen declaration. * configure, config.in: Regenerate.
2021-07-07Fix problems translating messages when a percentage sign appears at the end ↵Nick Clifton11-400/+476
of a string. PR 28051 gas * config/tc-i386.c (offset_in_range): Reformat error messages in order to fix problems when translating. (md_assemble): Likewise. * messages.c (as_internal_value_out_of_range): Likewise. * read.c (emit_expr_with_reloc): Likewise. * testsuite/gas/all/overflow.l Change expected output format. * po/gas.pot: Regenerate. bfd * coff-rs6000.c (xcoff_reloc_type_tls): Reformat error messages in order to fix problems when translating. * cofflink.c (_bfd_coff_write_global_sym): Likewise. * elfnn-aarch64.c (_bfd_aarch64_erratum_843419_branch_to_stub): Likewise. * po/bfd.pot: Regenerate.
2021-07-07Automatic date update in version.inGDB Administrator1-1/+1
2021-07-06gdb: introduce iterator_range, remove next_adapterSimon Marchi16-172/+124
I was always a bit confused by next_adapter, because it kind of mixes the element type and the iterator type. In reality, it is not much more than a class that wraps two iterators (begin and end). However, it assumes that: - you can construct the begin iterator by passing a pointer to the first element of the iterable - you can default-construct iterator to make the end iterator I think that by generalizing it a little bit, we can re-use it at more places. Rename it to "iterator_range". I think it describes a bit better: it's a range made by wrapping a begin and end iterator. Move it to its own file, since it's not related to next_iterator anymore. iterator_range has two constructors. The variadic one, where arguments are forwarded to construct the underlying begin iterator. The end iterator is constructed through default construction. This is a generalization of what we have today. There is another constructor which receives already constructed begin and end iterators, useful if the end iterator can't be obtained by default-construction. Or, if you wanted to make a range that does not end at the end of the container, you could pass any iterator as the "end". This generalization allows removing some "range" classes, like all_inferiors_range. These classes existed only to pass some arguments when constructing the begin iterator. With iterator_range, those same arguments are passed to the iterator_range constructed and then forwarded to the constructed begin iterator. There is a small functional difference in how iterator_range works compared to next_adapter. next_adapter stored the pointer it received as argument and constructeur an iterator in the `begin` method. iterator_range constructs the begin iterator and stores it as a member. Its `begin` method returns a copy of that iterator. With just iterator_range, uses of next_adapter<foo> would be replaced with: using foo_iterator = next_iterator<foo>; using foo_range = iterator_range<foo_iterator>; However, I added a `next_range` wrapper as a direct replacement for next_adapter<foo>. IMO, next_range is a slightly better name than next_adapter. The rest of the changes are applications of this new class. gdbsupport/ChangeLog: * next-iterator.h (class next_adapter): Remove. * iterator-range.h: New. gdb/ChangeLog: * breakpoint.h (bp_locations_range): Remove. (bp_location_range): New. (struct breakpoint) <locations>: Adjust type. (breakpoint_range): Use iterator_range. (tracepoint_range): Use iterator_range. * breakpoint.c (breakpoint::locations): Adjust return type. * gdb_bfd.h (gdb_bfd_section_range): Use iterator_range. * gdbthread.h (all_threads_safe): Pass argument to all_threads_safe_range. * inferior-iter.h (all_inferiors_range): Use iterator_range. (all_inferiors_safe_range): Use iterator_range. (all_non_exited_inferiors_range): Use iterator_range. * inferior.h (all_inferiors, all_non_exited_inferiors): Pass inferior_list as argument. * objfiles.h (struct objfile) <compunits_range>: Remove. <compunits>: Return compunit_symtab_range. * progspace.h (unwrapping_objfile_iterator) <unwrapping_objfile_iterator>: Take parameter by value. (unwrapping_objfile_range): Use iterator_range. (struct program_space) <objfiles_range>: Define with "using". <objfiles>: Adjust. <objfiles_safe_range>: Define with "using". <objfiles_safe>: Adjust. <solibs>: Return so_list_range, define here. * progspace.c (program_space::solibs): Remove. * psymtab.h (class psymtab_storage) <partial_symtab_iterator>: New. <partial_symtab_range>: Use iterator_range. * solist.h (so_list_range): New. * symtab.h (compunit_symtab_range): New. (symtab_range): New. (compunit_filetabs): Change to a function. * thread-iter.h (inf_threads_range, inf_non_exited_threads_range, safe_inf_threads_range, all_threads_safe_range): Use iterator_range. * top.h (ui_range): New. (all_uis): Use ui_range. Change-Id: Ib7a9d2a3547f45f01aa1c6b24536ba159db9b854
2021-07-06gdb/testsuite: restore configure scriptSimon Marchi6-121/+4957
Commit f99d1d37496f ("Remove gdb/testsuite/configure") removed gdb/testsuite/configure, as anything gdb/testsuite/configure did could be done by gdb/configure. There is however one use case that popped up when this changed propagated to downstream consumers, to run the testsuite on an already built GDB. In the workflow of ROCm-GDB at AMD, a GDB package is built in a CI job. This GDB package is then tested on different machines / hardware configurations as part of other CI jobs. To achieve this, those CI jobs only configure the testsuite directory and run "make check" with an appropriate board file. In light of this use case, the way I see it is that gdb/testsuite could be considered its own project. It could be stored in a completely different repo if we want to, it just happens to be stored inside gdb/. Since the only downside of having gdb/testsuite/configure is that it takes a few more seconds to run, but on the other hand it's quite useful for some people, I propose re-adding it. In a sense, this is revert of f99d1d37496f, but it's not a direct git-revert, as some things have changed since. gdb/ChangeLog: * configure.ac: Remove things that were moved from testsuite/configure.ac. * configure: Re-generate. gdb/testsuite/ChangeLog: * configure.ac: Restore. * configure: Re-generate. * aclocal.m4: Re-generate. * Makefile.in (distclean): Add config.status. (Makefile): Adjust paths. (lib/pdtrace): Adjust paths. (config.status): Add. Change-Id: Ic38c79485e1835712d9c99649c9dfb59667254f1
2021-07-06Rename gdb/ChangeLog to gdb/ChangeLog-2021Joel Brobecker2-0/+1
Now that ChangeLog entries are no longer used for GDB patches, this commit renames the file gdb/ChangeLog to gdb/ChangeLog-2021, similar to what we would do in the context of the "Start of New Year" procedure. The purpose of this change is to avoid people merging ChangeLog entries by mistake when applying existing commits that they are currently working on.
2021-07-06sim: ppc: add missing empty targetsDan Streetman1-0/+12
These are copied from sim/common/Make-common.in. On ppc the build fails without at least the 'info' target, e.g.: Making info in ppc make[4]: Entering directory '/<<BUILDDIR>>/gdb-10.2.2974.g5b45e89f56d+21.10.20210510155809/build/default/sim/ppc' make[4]: *** No rule to make target 'info'. Stop.
2021-07-06PR 28053: Fix spelling mistakes: usupported -> unsupported and relocatation ↵Yuri Chornoivan3-3/+3
-> relocation.
2021-07-06elf/riscv: Fix relaxation with aliases [PR28021]Michael Matz7-1/+124
the fix for PR22756 only changed behaviour for hidden aliases, but the same situation exists for non-hidden aliases: sym_hashes[] can contain multiple entries pointing to the same symbol structure leading to relaxation adjustment to be applied twice. Fix this by testing for duplicates for everything that looks like it has a version. PR ld/28021 bfd/ * elfnn-riscv.c (riscv_relax_delete_bytes): Check for any versioning. ld/ * testsuite/ld-riscv-elf/relax-twice.ver: New. * testsuite/ld-riscv-elf/relax-twice-1.s: New. * testsuite/ld-riscv-elf/relax-twice-2.s: New. * testsuite/ld-riscv-elf/ld-riscv-elf.exp (run_relax_twice_test): New, and call it.
2021-07-06Update gdb performance testsuite to be compatible with Python 3.8Pedro Alves2-16/+40
Running "make check-perf" on a system with Python 3.8 (e.g., Ubuntu 20.04) runs into this Python problem: Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/perftest.py", line 65, in run self.execute_test() File "<string>", line 35, in execute_test File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 45, in measure m.start(id) File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 102, in start self.start_time = time.clock() AttributeError: module 'time' has no attribute 'clock' Error while executing Python code. (gdb) FAIL: gdb.perf/single-step.exp: python SingleStep(1000).run() ... many times over. The problem is that the testsuite is using time.clock(), deprecated in Python 3.3 and finaly removed in Python 3.8. The guidelines say to use time.perf_counter() or time.process_time() instead depending on requirements. Looking at the current description of those functions, at: https://docs.python.org/3.10/library/time.html we have: time.perf_counter() -> float Return the value (in fractional seconds) of a performance counter, i.e. a clock with the highest available resolution to measure a short duration. It does include time elapsed during sleep and is system-wide. (...) time.process_time() -> float Return the value (in fractional seconds) of the sum of the system and user CPU time of the current process. It does not include time elapsed during sleep. It is process-wide by definition. (...) I'm thinking that it's just best to record both instead of picking one. So this patch replaces the MeasurementCpuTime measurement class with two new classes -- MeasurementPerfCounter and MeasurementProcessTime. Correspondingly, this changes the reports in testsuite/perftest.log -- we have two new "perf_counter" and "process_time" measurements and the "cpu_time" measurement is gone. I don't suppose breaking backward compatibility here is a big problem. I suspect no one is really tracking long term performance using the perf testsuite today. And if they are, it shouldn't be hard to adjust. For backward compatility, with Python < 3.3, both perf_counter and process_time use the old time.clock. gdb/testsuite/ChangeLog: yyyy-mm-dd Qingchuan Shi <qingchuan.shi@amd.com> Pedro Alves <pedro@palves.net> * gdb.perf/lib/perftest/perftest.py: Import sys. (time.perf_counter, time.process_time): Map to time.clock on Python < 3.3. (MeasurementCpuTime): Delete, replaced by... (MeasurementPerfCounter, MeasurementProcessTime): .. these two new classes. * gdb.perf/lib/perftest/perftest.py: Import MeasurementPerfCounter and MeasurementProcessTime instead of MeasurementCpuTime. (TestCaseWithBasicMeasurements): Use MeasurementPerfCounter and MeasurementProcessTime instead of MeasurementCpuTime. Co-authored-by: Qingchuan Shi <qingchuan.shi@amd.com> Change-Id: Ia850c05d5ce57d2dada70ba5b0061f566444aa2b
2021-07-06gdb.perf/: FAIL on Python errors, avoid "ERROR: internal buffer is full"Pedro Alves8-17/+32
Currently, if you run make check-perf on a system with Python 3.8, tests seen to PASS, but they actually test a lot less than intended, due to: PerfTest::assemble, run ... python BackTrace(64).run() Traceback (most recent call last): File "<string>", line 1, in <module> File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/perftest.py", line 65, in run self.execute_test() File "<string>", line 49, in execute_test File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 45, in measure m.start(id) File "/home/pedro/rocm/gdb/src/gdb/testsuite/gdb.perf/lib/perftest/measure.py", line 102, in start self.start_time = time.clock() AttributeError: module 'time' has no attribute 'clock' Error while executing Python code. (gdb) PASS: gdb.perf/backtrace.exp: python BackTrace(64).run() And then, after fixing the above Python compatibility issues (which will be a separate patch), I get 86 instances of overflowing expect's buffer, like: ERROR: internal buffer is full. UNRESOLVED: gdb.perf/single-step.exp: python SingleStep(1000).run() This patch fixes both problems by adding & using a gdb_test_python_run routine that: - checks for Python errors - consumes output line by line gdb/testsuite/ChangeLog: yyyy-mm-dd Pedro Alves <pedro@palves.net> * gdb.perf/backtrace.exp: Use gdb_test_python_run. * gdb.perf/disassemble.exp: Use gdb_test_python_run. * gdb.perf/single-step.exp: Use gdb_test_python_run. * gdb.perf/skip-command.exp: Use gdb_test_python_run. * gdb.perf/skip-prologue.exp: Use gdb_test_python_run. * gdb.perf/solib.exp: Use gdb_test_python_run. * gdb.perf/template-breakpoints.exp: Use gdb_test_python_run. * lib/perftest.exp (gdb_test_python_run): New. Change-Id: I007af36f164b3f4cda41033616eaaa4e268dfd2f
2021-07-06[gdb/testsuite] Remove read1 timeout factor from gdb.base/info-macros.expTom de Vries3-136/+81
At the moment some check-read1 timeouts are handled like this in gdb.base/info-macros.exp: ... gdb_test_multiple_with_read1_timeout_factor 10 "$test" $testname { -re "$r1$r2$r3" { pass $testname } -re ".*#define TWO.*\r\n$gdb_prompt" { fail $testname } -re ".*#define THREE.*\r\n$gdb_prompt" { fail $testname } -re ".*#define FOUR.*\r\n$gdb_prompt" { fail $testname } } ... which is not ideal. We could use gdb_test_lines, but it currently doesn't support verifying the absence of regexps, which is done using the clauses above calling fail. Fix this by using gdb_test_lines and adding a -re-not syntax to gdb_test_lines, such that we can do: ... gdb_test_lines $test $testname $r1.*$r2 \ -re-not "#define TWO" \ -re-not "#define THREE" \ -re-not "#define FOUR" ... Tested on x86_64-linux, whith make targets check and check-read1. Also observed that check-read1 execution time is reduced from 6m35s to 13s. gdb/testsuite/ChangeLog: 2021-07-06 Tom de Vries <tdevries@suse.de> * gdb.base/info-macros.exp: Replace use of gdb_test_multiple_with_read1_timeout_factor with gdb_test_lines. (gdb_test_multiple_with_read1_timeout_factor): Remove. * lib/gdb.exp (gdb_test_lines): Add handling or -re-not <regexp>.
2021-07-06RISC-V: Fix the build broken with -Werror.Nelson Chu1-2/+1
ChangeLog: bfd/ * elfnn-riscv.c(riscv_elf_additional_program_headers): Removed the unused variable s. (riscv_elf_modify_segment_map): Added ATTRIBUTE_UNUSED for the unused parameter info.
2021-07-06[gdb/symtab] Fix skipping of import of C++ CUTom de Vries6-7/+60
Tom Tromey observed that when changing the language in gdb.dwarf2/imported-unit-bp.exp from c to c++, the test failed. This is due to this code in process_imported_unit_die: ... /* We're importing a C++ compilation unit with tag DW_TAG_compile_unit into another compilation unit, at root level. Regard this as a hint, and ignore it. */ if (die->parent && die->parent->parent == NULL && per_cu->unit_type == DW_UT_compile && per_cu->lang == language_cplus) return; ... which should have a partial symtabs counterpart. Add the missing counterpart in process_psymtab_comp_unit. Tested on x86_64-linux (openSUSE Leap 15.2), no regressions for config: - using default gcc version 7.5.0 (with 5 unexpected FAILs) - gcc 10.3.0 and target board unix/-flto/-O0/-flto-partition=none/-ffat-lto-objects (with 1000 unexpected FAILs) gdb/ChangeLog: 2021-07-06 Tom de Vries <tdevries@suse.de> * dwarf2/read.c (scan_partial_symbols): Skip top-level imports of c++ CU. * testsuite/gdb.dwarf2/imported-unit-bp.exp: Moved to ... * testsuite/gdb.dwarf2/imported-unit-bp.exp.tcl: ... here. * testsuite/gdb.dwarf2/imported-unit-bp-c++.exp: New test. * testsuite/gdb.dwarf2/imported-unit-bp-c.exp: New test. * testsuite/gdb.dwarf2/imported-unit.exp: Update.
2021-07-06RISC-V: Add PT_RISCV_ATTRIBUTES and add it to PHDR.Kito Cheng7-2/+112
We added PT_RISCV_ATTRIBUTES to program header to make .riscv.attribute easier to find in dynamic loader or kernel. Ref: https://github.com/riscv/riscv-elf-psabi-doc/pull/71 ChangeLog: bfd/ * elfnn-riscv.c(RISCV_ATTRIBUTES_SECTION_NAME): New. (riscv_elf_additional_program_headers): Ditto. (riscv_elf_modify_segment_map): Ditto. (elf_backend_additional_program_headers): Ditto. (elf_backend_modify_segment_map): Ditto. (elf_backend_obj_attrs_section): Use RISCV_ATTRIBUTES_SECTION_NAME rather than string literal. binutils/ * readelf.c(get_riscv_segment_type): New. (get_segment_type): Handle EM_RISCV. include/ * elf/riscv.h (PT_RISCV_ATTRIBUTES): New. * testsuite/ld-elf/orphan-region.ld: Discard .riscv.attributes section for simplify testcase. * testsuite/ld-riscv-elf/attr-phdr.d: New. * testsuite/ld-riscv-elf/attr-phdr.s: Ditto. * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Add attr-phdr to testcase.
2021-07-06Re: PR28055, segfault in bpf special reloc functionAlan Modra2-1/+6
PR 28055 * elf64-bpf.c (bpf_elf_generic_reloc): Add missing ATTRIBUTE_UNUSED.
2021-07-06Automatic date update in version.inGDB Administrator1-1/+1
2021-07-05Simplify debug_names index writingTom Tromey1-83/+10
This changes the .debug_names writer to find the TU indices in the main loop over all CUs and TUs. (An earlier patch applied this same treatment to the .gdb_index writer.)
2021-07-05Simplify gdb_index writingTom Tromey1-60/+24
write_gdbindex writes the CUs first, then walks the signatured type hash table to write out the TUs. However, now that CUs and TUs are unified in the DWARF reader, it's simpler to handle both of these in the same loop.
2021-07-05Minor cleanup to addrmap_index_data::previous_validTom Tromey1-4/+4
This changes addrmap_index_data::previous_valid to a bool, and initializes it inline.
2021-07-05Fix oddity in write_gdbindexTom Tromey1-1/+1
My recent patch to unify CUs and TUs introduced an oddity in write_gdbindex. Here, we pass 'i' to recursively_write_psymbols, but we must instead pass 'counter', to handle the situation where a TU is mixed in with the CUs. I am not sure a test case for this is possible. I think it can only happen when using DWARF 5, where a TU appears in .debug_info. However, this situation is already not handled correctly by .gdb_index. I filed a bug about this.
2021-07-05Fix warning in symtab.cTom Tromey1-0/+2
The compiler gives this warning when building symtab.c: ../../binutils-gdb/gdb/symtab.c:4247:28: warning: 'to_match' may be used uninitialized in this function [-Wmaybe-uninitialized] This patch fixes the warning by adding a gdb_assert_not_reached.
2021-07-05ld: Cache and reuse the IR archive file descriptorH.J. Lu9-39/+122
Linker plugin_object_p opens the IR archive for each IR archive member. For GCC plugin, plugin_object_p closes the archive file descriptor. But for LLVM plugin, the archive file descriptor remains open. If there are 3000 IR archive members, there are 3000 file descriptors for them. We can run out of file descriptors petty easily. 1. Add archive_plugin_fd and archive_plugin_fd_open_count to bfd so that we can cache and reuse the IR archive file descriptor for all IR archive members in the archive. 2. Add bfd_plugin_close_file_descriptor to properly close the IR archive file descriptor. bfd/ PR ld/28040 * archive.c (_bfd_archive_close_and_cleanup): Close the archive plugin file descriptor if needed. * bfd.c (bfd): Add archive_plugin_fd and archive_plugin_fd_open_count. * opncls.c (_bfd_new_bfd): Initialize to -1. * plugin.c (bfd_plugin_open_input): Cache and reuse the archive plugin file descriptor. (bfd_plugin_close_file_descriptor): New function. (try_claim): Call bfd_plugin_close_file_descriptor. * plugin.h (bfd_plugin_close_file_descriptor): New. * bfd-in2.h: Regenerated. ld/ PR ld/28040 * plugin.c (plugin_input_file): Add ibfd. (release_plugin_file_descriptor): New function. (release_input_file): Call release_plugin_file_descriptor to close input->fd. (plugin_object_p): Call release_plugin_file_descriptor to close input->fd. Also call release_plugin_file_descriptor if not claimed. * testsuite/config/default.exp (RANLIB): New. * testsuite/ld-plugin/lto.exp: Run ranlib test.
2021-07-05Restore the libiberty component of commit ↵Nick Clifton4-2/+156
50ad1254d5030d0804cbf89c758359ae202e8d55. This commit has not yet been applied to the master sources in the gcc repository. It was submitted here: https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574405.html The commit allows options to be set for the AR and RANLIB programs used when building libiberty, which in turn allows building with LTO enabled.
2021-07-05Updated translations (mainly Ukranian and French) triggered by creation of ↵Nick Clifton15-16789/+18674
2.37 branch.
2021-07-05[gdb/testsuite] Fix fail in gdb.fortran/ptype-on-functions.exp with gcc-7Tom de Vries2-1/+13
Since commit 05b85772061 "gdb/fortran: Add type info of formal parameter for clang" I see: ... (gdb) ptype say_string^M type = void (character*(*), integer(kind=4))^M (gdb) FAIL: gdb.fortran/ptype-on-functions.exp: ptype say_string ... The part of the commit causing the fail is: ... gdb_test "ptype say_string" \ - "type = void \\(character\\*\\(\\*\\), integer\\(kind=\\d+\\)\\)" + "type = void \\(character\[^,\]+, $integer8\\)" ... which fails to take into account that for gcc-7 and before, the type for string length of a string argument is int, not size_t. Fix this by allowing both $integer8 and $integer4. Tested on x86_64-linux, with gcc-7 and gcc-10. gdb/testsuite/ChangeLog: 2021-07-05 Tom de Vries <tdevries@suse.de> * gdb.fortran/ptype-on-functions.exp: Allow both $integer8 and $integer4 for size of string length.