summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2022-08-05 11:07:32 +0100
committerNick Clifton <nickc@redhat.com>2022-08-05 11:07:32 +0100
commit3f7314c5d5cb8ffc050cebf149b7c2e16ad5a2b9 (patch)
tree881f361c5989c4ab2bf1f5bd4e37d481d677b829
parent68566b8621b066d6fbf8fbbf2e267282667b9d76 (diff)
This is the 2.39 release
-rw-r--r--ChangeLog.git68733
1 files changed, 68733 insertions, 0 deletions
diff --git a/ChangeLog.git b/ChangeLog.git
new file mode 100644
index 0000000000..5d2aa151b7
--- /dev/null
+++ b/ChangeLog.git
@@ -0,0 +1,68733 @@
+2022-08-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-08-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-08-03 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ gprofng: fix bug 29410 - Argument "&nbsp;0." isn't numeric in numeric gt (>)
+ gprofng/Changelog:
+ 2022-08-02 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ PR gprofng/29410
+ * gp-display-html/gp-display-html.in: Remove non-breaking spaces.
+
+2022-08-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-08-02 Matthew Malcomson <hardenedapple@gmail.com>
+
+ ld: aarch64: Update test linker scripts relocs.ld and relocs-ilp32.ld
+ The updates are to ensure that the .data section exists. This means
+ that we always have a data section. That means that we don't create a
+ RWX segment and avoid the corresponding warning.
+
+ We get this warning when testing aarch64-none-elf with -mcmodel=tiny.
+ N.b. this changes quite a few testcases from fail to pass.
+
+2022-08-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-08-01 Alan Modra <amodra@gmail.com>
+
+ libctf: Avoid use of uninitialised variables
+ * ctf-link.c (ctf_link_add_ctf_internal): Don't free uninitialised
+ pointers.
+
+ (cherry picked from commit 9ea6fffe1ebec9bd1929c708e044b765eabea258)
+
+2022-08-01 Alan Modra <amodra@gmail.com>
+
+ PR29348, BFD_VMA_FMT wrong
+ There is a problem with my commit 0e3c1eebb2, which replaced
+ bfd_uint64_t with uint64_t: Some hosts typedef int64_t to long long
+ even when long is the same size as long long. That confuses the code
+ choosing one of "l", "ll", or "I64" for BFD_VMA_FMT, and results in
+ warnings.
+
+ Write a direct configure test for the printf int64_t style instead.
+ This removes the last use of BFD_HOST_64BIT_LONG, so delete that.
+ Note that the changes to configure.com are pure guesswork.
+
+ PR 29348
+ * bfd-in.h (BFD_HOST_64BIT_LONG): Don't define.
+ (BFD_VMA_FMT): Define using BFD_INT64_FMT when 64-bit.
+ (bfd_vma, bfd_signed_vma): Move comments to 64-bit typedefs.
+ * configure.ac (BFD_HOST_64BIT_LONG): Delete.
+ (BFD_INT64_FMT): New config test.
+ * configure.com: Update similarly.
+ * Makefile.in: Regenerate.
+ * bfd-in2.h: Regenerate.
+ * configure: Regenerate.
+
+ (cherry picked from commit 1a5178fe284547ef2abd8ae66588c9999d61c524)
+
+2022-08-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-29 Nick Clifton <nickc@redhat.com>
+
+ Stop the linker from complaining about unrecognized DW_FORM_rnglistx and DW_FORM_loclistx attribute formats.
+ PR 29424
+ * dwarf2.c (read_attribute_value): Handle DW_FORM_rnglistx and
+ DW_FORM_loclistx.
+
+2022-07-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ ld: Extend ac_default_ld_warn_rwx_segments to all SPARC targets [PR29411]
+ As discussed in PR ld/29411, the ld warning
+
+ [...] has a LOAD segment with RWX permissions
+
+ needs to be disabled on all SPARC targets, not just Solaris/SPARC: the
+ .plt section is required to be RWX by the 32-bit SPARC ELF psABI and the
+ 64-bit SPARC Compliance Definition 2.4.1. Given that ld only supports
+ SPARC ELF targets, this patch implements this.
+
+ Tested on sparc64-unknown-linux-gnu and sparc-sun-solaris2.11.
+
+ 2022-07-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ ld:
+ PR ld/29411
+ * configure.tgt (ac_default_ld_warn_rwx_segments): Extend to all
+ sparc targets. Expand comment.
+
+2022-07-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-27 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: check for the makeinfo version
+ gprofng/ChangeLog
+ 2022-07-25 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29368
+ * configure.ac: Check for the makeinfo version.
+ * configure: Rebuild.
+
+2022-07-26 Nick Clifton <nickc@redhat.com>
+
+ Stop the linker from complaining about RWX segments on sparc-solaris targets.
+ PR 29411
+ * configure.tgt (ac_default_ld_warn_rwx_segments): Disable for
+ sparc-solaris configurations.
+
+2022-07-26 Alan Modra <amodra@gmail.com>
+
+ PowerPC32 ld test fails with --enable-targets=all
+ Three pppc32 ld tests fail when spu support is included in the linker
+ due to this snippet in ld/emulparams/elf32ppc.sh.
+
+ if grep -q 'ld_elf32_spu_emulation' ldemul-list.h; then
+ DATA_START_SYMBOLS="${RELOCATING+*crt1.o(.data .data.* .gnu.linkonce.d.*)
+ PROVIDE (__spe_handle = .);
+ *(.data.spehandle)
+ . += 4 * (DEFINED (__spe_handle) || . != 0);}"
+ fi
+
+ * testsuite/ld-powerpc/tlsexe32.r: Pass with .data section present.
+ * testsuite/ld-powerpc/tlsexe32no.r: Likewise.
+ * testsuite/ld-powerpc/tlsso32.r: Likewise.
+
+ (cherry picked from commit c138af95731c630a78329fd86076992f82099957)
+
+2022-07-26 Nick Clifton <nickc@redhat.com>
+
+ Updated translations for various sub-directories
+
+2022-07-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-25 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ gprofng: fix bug 29356 - Execution fails if gprofng is not included in PATH
+ gprofng/Changelog:
+ 2022-07-22 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ PR gprofng/29356
+ * gp-display-html/gp-display-html.in: fixed a problem to execute
+ gp-display-text in case gprofng is not included in the search
+ path.
+
+2022-07-25 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ gprofng: fix bug 29392 - Unexpected line format in summary file
+ gprofng/Changelog:
+ 2022-07-22 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ PR gprofng/29392
+ * gp-display-html/gp-display-html.in: modified a regex, plus the
+ code to handle the results; renamed a variable to improve the
+ consistency in naming.
+
+2022-07-25 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ gprofng: fix bug 29353 - Fix a lay-out issue in the html disassembly files
+ gprofng/Changelog:
+ 2022-07-22 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ PR gprofng/29353
+ * gp-display-html/gp-display-html.in: fixed a problem in the
+ generation of html for the disassembly where instructions
+ without arguments were not handled correctly.
+
+2022-07-25 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ gprofng: fix bug 29352 - Fix the message Hexadecimal number > 0xffffffff non-portable
+ gprofng/Changelog:
+ 2022-07-22 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ PR gprofng/29352
+ * gp-display-html/gp-display-html.in: the hex subroutine from
+ the bigint module is now used.
+
+2022-07-25 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ gprofng: fix bug 29351 - Move dynamic loading of modules to a later stage
+ gprofng/Changelog:
+ 2022-07-22 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ PR gprofng/29351
+ * gp-display-html/gp-display-html.in: the dynamic loading of
+ modules occurred too early, resulting in the generation of the
+ man page to fail in case a module is missing; the loading part is
+ now done somewhat later in the execution to avoid this problem.
+
+2022-07-25 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Disallow invalid relocations against protected symbols
+ Since glibc 2.36 will issue warnings for copy relocation against
+ protected symbols and non-canonical reference to canonical protected
+ functions, change the linker to always disallow such relocations.
+
+ bfd/
+
+ * elf32-i386.c (elf_i386_scan_relocs): Remove check for
+ elf_has_indirect_extern_access.
+ * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
+ (elf_x86_64_relocate_section): Remove check for
+ elf_has_no_copy_on_protected.
+ * elfxx-x86.c (elf_x86_allocate_dynrelocs): Check for building
+ executable instead of elf_has_no_copy_on_protected.
+ (_bfd_x86_elf_adjust_dynamic_symbol): Disallow copy relocation
+ against non-copyable protected symbol.
+ * elfxx-x86.h (SYMBOL_NO_COPYRELOC): Remove check for
+ elf_has_no_copy_on_protected.
+
+ ld/
+
+ * testsuite/ld-i386/i386.exp: Expect linker error for PR ld/17709
+ test.
+ * testsuite/ld-i386/pr17709.rd: Removed.
+ * testsuite/ld-i386/pr17709.err: New file.
+ * testsuite/ld-x86-64/pr17709.rd: Removed.
+ * testsuite/ld-x86-64/pr17709.err: New file.
+ * testsuite/ld-x86-64/pr28875-func.err: Updated.
+ * testsuite/ld-x86-64/x86-64.exp: Expect linker error for PR
+ ld/17709 test. Add tests for function pointer against protected
+ function.
+
+ (cherry picked from commit f638657759f5b9b4eb31a1aa6b9fe6e6fb01f4a0)
+
+2022-07-25 Fangrui Song <i@maskray.me>
+
+ x86: Make protected symbols local for -shared
+ Call _bfd_elf_symbol_refs_local_p with local_protected==true. This has
+ 2 noticeable effects for -shared:
+
+ * GOT-generating relocations referencing a protected data symbol no
+ longer lead to a GLOB_DAT (similar to a hidden symbol).
+ * Direct access relocations (e.g. R_X86_64_PC32) no longer has the
+ confusing diagnostic below.
+
+ __attribute__((visibility("protected"))) void *foo() {
+ return (void *)foo;
+ }
+
+ // gcc -fpic -shared -fuse-ld=bfd
+ relocation R_X86_64_PC32 against protected symbol `foo' can not be used when making a shared object
+
+ The new behavior matches arm, aarch64 (commit
+ 83c325007c5599fa9b60b8d5f7b84842160e1d1b), and powerpc ports, and other
+ linkers: gold and ld.lld.
+
+ Note: if some code tries to use direct access relocations to take the
+ address of foo, the pointer equality will break, but the error should be
+ reported on the executable link, not on the innocent shared object link.
+ glibc 2.36 will give a warning at relocation resolving time.
+
+ With this change, `#define elf_backend_extern_protected_data 1` is no
+ longer effective. Just remove it.
+
+ Remove the test "Run protected-func-1 without PIE" since -fno-pic
+ address taken operation in the executable doesn't work with protected
+ symbol in a shared object by default. Similarly, remove
+ protected-data-1a and protected-data-1b. protected-data-1b can be made
+ working by removing HAVE_LD_PIE_COPYRELOC from GCC
+ (https://sourceware.org/pipermail/gcc-patches/2022-June/596678.html).
+
+ (cherry picked from commit d19a265487eda186b6977d9d15648cda9fad3298)
+
+2022-07-25 Alan Modra <amodra@gmail.com>
+
+ Re: PowerPC64 .branch_lt address
+ On seeing PR29369 my suspicion was naturally on a recent powerpc64
+ change, commit 0ab80031430e. Without a reproducer, I spent time
+ wondering what could have gone wrong, and while I doubt this patch
+ would have fixed the PR, there are some improvements that can be made
+ to cater for user silliness.
+
+ I also noticed that when -z relro -z now sections are created out of
+ order, with .got before .plt in the section headers but .got is laid
+ out at a higher address. That's due to the address expression for
+ .branch_lt referencing SIZEOF(.got) and so calling init_os (which
+ creates a bfd section) for .got before the .plt section is created.
+ Fix that by ignoring SIZEOF in exp_init_os. Unlike ADDR and LOADADDR
+ which need to reference section vma and lma respectively, SIZEOF can
+ and does cope with a missing bfd section by returning zero for its
+ size, which of course is correct.
+
+ PR 29369
+ * ldlang.c (exp_init_os): Don't create a bfd section for SIZEOF.
+ * emulparams/elf64ppc.sh (OTHER_RELRO_SECTIONS_2): Revise
+ .branch_lt address to take into account possible user sections
+ with alignment larger than 8 bytes.
+
+ (cherry picked from commit 5d471bd907be60e9858b22cdf4fd10ddc0f6ee1a)
+
+2022-07-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-22 H.J. Lu <hjl.tools@gmail.com>
+
+ i386: Don't allow GOTOFF relocation against IFUNC symbol for PIC
+ We can't use the PLT entry as the function address for PIC since the PIC
+ register may not be set up properly for indirect call.
+
+ bfd/
+
+ PR ld/27998
+ * elf32-i386.c (elf_i386_relocate_section): Don't allow GOTOFF
+ relocation against IFUNC symbol for PIC.
+
+ ld/
+
+ PR ld/27998
+ * testsuite/ld-i386/pr27998a.d: Replace -shared with -e bar.
+ * testsuite/ld-i386/pr27998b.d: Expect a linker error.
+ * testsuite/ld-ifunc/ifunc-2-i386-now.d: Updated.
+ * testsuite/ld-ifunc/ifunc-2-local-i386-now.d: Likewise.
+ * testsuite/ld-ifunc/ifunc-2-i386.s: Replace @GOTOFF with @GOT.
+ * testsuite/ld-ifunc/ifunc-2-local-i386.s: Likewise.
+
+ (cherry picked from commit 8f29211c3f0a6335c17e0a90396c146facf6dba4)
+
+2022-07-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-21 Peter Bergner <bergner@linux.ibm.com>
+
+ PowerPC: Create new MMA instruction masks and use them
+ The MMA instructions use XX3_MASK|3<<21 as an instruction mask, but that
+ misses the RC bit/bit 31, so if we disassemble a .long that represents an
+ MMA instruction except that it also has bit 31 set, we will erroneously
+ disassemble it to that MMA instruction. We create new masks defines that
+ contain bit 31 so that doesn't happen anymore.
+
+ opcodes/
+ * ppc-opc.c (XACC_MASK, XX3ACC_MASK): New defines.
+ (P_GER_MASK, xxmfacc, xxmtacc, xxsetaccz, xvi8ger4pp, xvi8ger4,
+ xvf16ger2pp, xvf16ger2, xvf32gerpp, xvf32ger, xvi4ger8pp, xvi4ger8,
+ xvi16ger2spp, xvi16ger2s, xvbf16ger2pp, xvbf16ger2, xvf64gerpp,
+ xvf64ger, xvi16ger2, xvf16ger2np, xvf32gernp, xvi8ger4spp, xvi16ger2pp,
+ xvbf16ger2np, xvf64gernp, xvf16ger2pn, xvf32gerpn, xvbf16ger2pn,
+ xvf64gerpn, xvf16ger2nn, xvf32gernn, xvbf16ger2nn, xvf64gernn: Use them.
+
+ (cherry picked from commit 0a246853439422e12a0ccb9191be638aab3987eb)
+
+2022-07-21 Jan Beulich <jbeulich@suse.com>
+
+ x86: replace wrong attributes on VCVTDQ2PH{X,Y}
+ A standalone (without SAE) StaticRounding attribute is meaningless, and
+ indeed all other similar insns have ATTSyntax there instead. I can only
+ assume this was some strange copy-and-paste mistake.
+
+ (cherry picked from commit ea09fe92596fbb2a5da4595459bfe8b23789ec8d)
+
+2022-07-21 Jan Beulich <jbeulich@suse.com>
+
+ x86/Intel: correct AVX512F scatter insn element sizes
+ I clearly screwed up in 6ff00b5e12e7 ("x86/Intel: correct permitted
+ operand sizes for AVX512 scatter/gather") giving all AVX512F scatter
+ insns Dword element size. Update testcases (also their gather parts),
+ utilizing that there previously were two identical lines each (for no
+ apparent reason).
+
+ (cherry picked from commit 987e8a90fa6541d57b42fef95fae0a7da5a2c9bc)
+
+2022-07-21 Alan Modra <amodra@gmail.com>
+
+ PR29390, DW_CFA_AARCH64_negate_ra_state vs. DW_CFA_GNU_window_save
+ PR 29390
+ binutils/
+ * dwarf.c (is_aarch64, DW_CFA_GNU_window_save_name): New.
+ (display_debug_frames): Use them.
+ (init_dwarf_regnames_aarch64): Set is_aarch64.
+ (init_dwarf_regnames_by_elf_machine_code): Clear is_aarch64.
+ (init_dwarf_regnames_by_bfd_arch_and_mach): Likewise.
+ gas/
+ * testsuite/gas/aarch64/pac_ab_key.d: Adjust expected output.
+ * testsuite/gas/aarch64/pac_negate_ra_state.d: Likewise.
+
+ (cherry picked from commit e4e340a3ff2ccc825f4a40abf947cdf32b3fdbbf)
+
+2022-07-21 Alan Modra <amodra@gmail.com>
+
+ PR29337, readelf CU/TU mixup in .gdb_index
+ Commit 244e19c79111 changed a number of variables in display_gdb_index
+ to count entries rather than words.
+
+ PR 29337
+ * dwarf.c (display_gdb_index): Correct use of cu_list_elements.
+
+ (cherry picked from commit e82295b23d0e52b0dadffb8c0d0b99462cd20fa8)
+
+2022-07-21 Alan Modra <amodra@gmail.com>
+
+ PowerPC64: fix build error on 32-bit hosts
+ elf64-ppc.c:11673:33: error: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘bfd_vma’ {aka ‘long long unsigned int’} [-Werror=format=]
+ 11673 | fprintf (stderr, "offset = %#lx:", stub_entry->stub_offset);
+ | ~~~^ ~~~~~~~~~~~~~~~~~~~~~~~
+ | | |
+ | | bfd_vma {aka long long unsigned int}
+ | long unsigned int
+ | %#llx
+
+ * elf64-ppc.c (dump_stub): Use BFD_VMA_FMT.
+
+ (cherry picked from commit 590207aa6ece509eabbc7a51aab87e5d9bcfc869)
+
+2022-07-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-19 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Properly check invalid relocation against protected symbol
+ Only check invalid relocation against protected symbol defined in shared
+ object.
+
+ bfd/
+
+ PR ld/29377
+ * elf32-i386.c (elf_i386_scan_relocs): Only check invalid
+ relocation against protected symbol defined in shared object.
+ * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
+
+ ld/
+
+ PR ld/29377
+ * testsuite/ld-elf/linux-x86.exp: Run PR ld/29377 tests.
+ * testsuite/ld-elf/pr29377a.c: New file.
+ * testsuite/ld-elf/pr29377b.c: Likewise.
+
+ (cherry picked from commit bd0736124c20950ac353f01e5029b7cb5d8a7010)
+
+ ld: Pass -nostdlib to compiler with -r
+
+ Pass -nostdlib to compiler with -r to avoid unnecessary .o file and
+ libraries.
+
+ PR ld/29377
+ * testsuite/ld-elf/linux-x86.exp: Pass -nostdlib with -r.
+
+ (cherry picked from commit 76e4fa70e79ee959c0e11eaacd4cf863291b1ddb)
+
+2022-07-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-18 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: link libgprofng.so against -lpthread
+ gprofng/ChangeLog
+ 2022-07-15 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29364
+ * src/Makefile.am (libgprofng_la_LIBADD): Add -lpthread.
+ * src/Makefile.in: Rebuild.
+
+2022-07-18 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix regression in build and a race condition in autoreconf
+ gprofng/ChangeLog
+ 2022-07-14 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29338
+ * libcollector/configure.ac (AC_CONFIG_HEADERS): Fix a race condition.
+ * libcollector/configure: Rebuild.
+ * libcollector/Makefile.in: Rebuild.
+ * common/config.h.in: Rebuild.
+ * common/lib-config.h.in: Created by autoreconf.
+
+2022-07-18 Jan Beulich <jbeulich@suse.com>
+
+ x86: correct VMOVSH attributes
+ Both forms were missing VexW0 (thus allowing Evex.W=1 to be encoded by
+ suitable means, which would cause #UD). The memory operand form further
+ was using the wrong Masking value, thus allowing zeroing-masking to be
+ encoded for the store form (which would again cause #UD).
+
+ (cherry picked from commit 7e864bf71d55626dce94df26ebaf11f65b4d7b65)
+
+2022-07-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-12 Alan Modra <amodra@gmail.com>
+
+ PR29355, ld segfaults with -r/-q and custom-named section .rela*
+ The bug testcase uses an output section named .rel or .rela which has
+ input .data sections mapped to it. The input .data section has
+ relocations. When counting output relocations SHT_REL and SHT_RELA
+ section reloc_count is ignored, with the justification that reloc
+ sections themselves can't have relocations and some backends use
+ reloc_count in reloc sections. However, the test wrongly used the
+ output section type (which normally would match input section type).
+ Fix that. Note that it is arguably wrong for ld to leave the output
+ .rel/.rela section type as SHT_REL/SHT_RELA when non-empty non-reloc
+ sections are written to it, but I'm not going to change that since it
+ might be useful to hand-craft relocs in a data section that is then
+ written to a SHT_REL/SHT_RELA output section.
+
+ PR 29355
+ * elflink.c (bfd_elf_final_link): Use input section type rather
+ than output section type to determine whether to exclude using
+ reloc_count from that section.
+
+ (cherry picked from commit 35c5dcc666082f0edf6dd559e46b98d0e7986a2e)
+
+2022-07-12 Alan Modra <amodra@gmail.com>
+
+ ppc gas: don't leak ppc_hash memory
+ * config/tc-ppc.c (insn_obstack): New.
+ (insn_calloc): New function.
+ (ppc_setup_opcodes): Use insn_obstack for ppc_hash.
+
+ (cherry picked from commit a887be69963c40ced36e319e5fb14b3de4b6658b)
+ Without ppc_md_end since the infrastructure to call that late isn't
+ available on the branch, and without the multiply overflow check.
+
+2022-07-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-08 Andrew Burgess <aburgess@redhat.com>
+
+ libopcodes/s390: add support for disassembler styling
+ This commit adds disassembler style to the libopcodes s390
+ disassembler. This conversion was pretty straight forward, I just
+ converted the fprintf_func calls to fprintf_styled_func calls and
+ added an appropriate style.
+
+ For testing the new styling I just assembled then disassembled the
+ source files in gas/testsuite/gas/s390 and manually checked that the
+ styling looked reasonable.
+
+ If the user does not request styled output from objdump, then there
+ should be no change in the disassembler output after this commit.
+
+2022-07-08 Nick Clifton <nickc@redhat.com>
+
+ Update version number
+
+ Add markers for 2.39 branch
+
+2022-07-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-07 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix regression in testing for not yet installed version
+ gprofng/ChangeLog
+ 2022-07-07 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * src/Settings.cc (Settings::read_rc): Read environment variable
+ GPROFNG_SYSCONFDIR.
+ * testsuite/lib/Makefile.skel: Export GPROFNG_SYSCONFDIR.
+ * testsuite/gprofng.display/display.exp: Shorten the list of tests.
+
+2022-07-07 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix {rs6000_nat_target,aix_thread_target}::wait to not use inferior_ptid
+ Trying to run a simple program (empty main) on AIX, I get:
+
+ (gdb) run
+ Starting program: /scratch/simark/build/gdb/a.out
+ Child process unexpectedly missing: There are no child processes..
+ ../../src/binutils-gdb/gdb/inferior.c:304: internal-error: find_inferior_pid: Assertion `pid != 0' failed.
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ ----- Backtrace -----
+ 0x10ef12a8 gdb_internal_backtrace_1()
+ ../../src/binutils-gdb/gdb/bt-utils.c:122
+ 0x10ef1470 gdb_internal_backtrace()
+ ../../src/binutils-gdb/gdb/bt-utils.c:168
+ 0x1004d368 internal_vproblem(internal_problem*, char const*, int, char const*, char*)
+ ../../src/binutils-gdb/gdb/utils.c:396
+ 0x1004d8a8 internal_verror(char const*, int, char const*, char*)
+ ../../src/binutils-gdb/gdb/utils.c:476
+ 0x1004c424 internal_error(char const*, int, char const*, ...)
+ ../../src/binutils-gdb/gdbsupport/errors.cc:55
+ 0x102ab344 find_inferior_pid(process_stratum_target*, int)
+ ../../src/binutils-gdb/gdb/inferior.c:304
+ 0x102ab4a4 find_inferior_ptid(process_stratum_target*, ptid_t)
+ ../../src/binutils-gdb/gdb/inferior.c:318
+ 0x1061bae8 find_thread_ptid(process_stratum_target*, ptid_t)
+ ../../src/binutils-gdb/gdb/thread.c:519
+ 0x10319e98 handle_inferior_event(execution_control_state*)
+ ../../src/binutils-gdb/gdb/infrun.c:5532
+ 0x10315544 fetch_inferior_event()
+ ../../src/binutils-gdb/gdb/infrun.c:4221
+ 0x10952e34 inferior_event_handler(inferior_event_type)
+ ../../src/binutils-gdb/gdb/inf-loop.c:41
+ 0x1032640c infrun_async_inferior_event_handler(void*)
+ ../../src/binutils-gdb/gdb/infrun.c:9548
+ 0x10673188 check_async_event_handlers()
+ ../../src/binutils-gdb/gdb/async-event.c:335
+ 0x1066fce4 gdb_do_one_event()
+ ../../src/binutils-gdb/gdbsupport/event-loop.cc:214
+ 0x10001a94 start_event_loop()
+ ../../src/binutils-gdb/gdb/main.c:411
+ 0x10001ca0 captured_command_loop()
+ ../../src/binutils-gdb/gdb/main.c:471
+ 0x10003d74 captured_main(void*)
+ ../../src/binutils-gdb/gdb/main.c:1329
+ 0x10003e48 gdb_main(captured_main_args*)
+ ../../src/binutils-gdb/gdb/main.c:1344
+ 0x10000744 main
+ ../../src/binutils-gdb/gdb/gdb.c:32
+ ---------------------
+ ../../src/binutils-gdb/gdb/inferior.c:304: internal-error: find_inferior_pid: Assertion `pid != 0' failed.
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Quit this debugging session? (y or n)
+
+ This is due to some bit-rot in the AIX port, still relying on the entry
+ value of inferior_ptid in the wait methods.
+
+ Problem #1 is in rs6000_nat_target::wait, here:
+
+ /* Ignore terminated detached child processes. */
+ if (!WIFSTOPPED (status) && pid != inferior_ptid.pid ())
+ pid = -1;
+
+ At this point, waitpid has returned an "exited" status for some pid, so
+ pid is non-zero. Since inferior_ptid is set to null_ptid on entry, the
+ pid returned by wait is not equal to `inferior_ptid.pid ()`, so we reset
+ pid to -1 and go to waiting again. Since there are not more children to
+ wait for, waitpid then returns -1 so we get here:
+
+ if (pid == -1)
+ {
+ gdb_printf (gdb_stderr,
+ _("Child process unexpectedly missing: %s.\n"),
+ safe_strerror (save_errno));
+
+ /* Claim it exited with unknown signal. */
+ ourstatus->set_signalled (GDB_SIGNAL_UNKNOWN);
+ return inferior_ptid;
+ }
+
+ We therefore return a "signalled" status with a null_ptid (again,
+ inferior_ptid is null_ptid). This confuses infrun, because if the
+ target returns a "signalled" status, it should be coupled with a ptid
+ for an inferior that exists.
+
+ So, the first step is to fix the snippets above to not use
+ inferior_ptid. In the first snippet, use find_inferior_pid to see if
+ we know the event process. If there is no inferior with that pid, we
+ assume it's a detached child process to we ignore the event. That
+ should be enough to fix the problem, because it should make it so we
+ won't go into the second snippet. But still, fix the second snippet to
+ return an "ignore" status. This is copied from inf_ptrace_target::wait,
+ which is where rs6000_nat_target::wait appears to be copied from in the
+ first place.
+
+ These changes, are not sufficient, as the aix_thread_target, which sits
+ on top of rs6000_nat_target, also relies on inferior_ptid.
+ aix_thread_target::wait, by calling pd_update, assumes that
+ rs6000_nat_target has set inferior_ptid to the appropriate value (the
+ ptid of the event thread), but that's not the case. pd_update
+ returns inferior_ptid - null_ptid - and therefore
+ aix_thread_target::wait returns null_ptid too, and we still hit the
+ assert shown above.
+
+ Fix this by changing pd_activate, pd_update, sync_threadlists and
+ get_signaled_thread to all avoid using inferior_ptid. Instead, they
+ accept as a parameter the pid of the process we are working on.
+
+ With this patch, I am able to run the program to completion:
+
+ (gdb) r
+ Starting program: /scratch/simark/build/gdb/a.out
+ [Inferior 1 (process 11010794) exited normally]
+
+ As well as break on main:
+
+ (gdb) b main
+ Breakpoint 1 at 0x1000036c
+ (gdb) r
+ Starting program: /scratch/simark/build/gdb/a.out
+
+ Breakpoint 1, 0x1000036c in main ()
+ (gdb) c
+ Continuing.
+ [Inferior 1 (process 26083688) exited normally]
+
+ Change-Id: I7c2613bbefe487d75fa1a0c0994423471d961ee9
+
+2022-07-07 Pedro Alves <pedro@palves.net>
+
+ Fix pedantically invalid DWARF in gdb.trace/unavailable-dwarf-piece.exp
+ The DWARF spec says:
+
+ Any debugging information entry representing the declaration of an object,
+ module, subprogram or type may have DW_AT_decl_file, DW_AT_decl_line and
+ DW_AT_decl_column attributes, each of whose value is an unsigned integer
+ ^^^^^^^^
+ constant.
+
+ Grepping around the DWARF-assembler-based testcases, I noticed that
+ gdb.trace/unavailable-dwarf-piece.exp emits decl_line with
+ DW_FORM_sdata, a signed integer form. This commit tweaks it to use
+ DW_FORM_udata instead.
+
+ Unsurprisingly, this:
+
+ $ make check \
+ TESTS="gdb.trace/unavailable-dwarf-piece.exp" \
+ RUNTESTFLAGS="--target_board=native-gdbserver"
+
+ ... still passes cleanly for me after this change.
+
+ I've noticed this because current llvm-dwarfdump crashed on an
+ ROCm-internal DWARF-assembler-based testcase that incorrectly used
+ signed forms for DW_AT_decl_file/DW_AT_decl_line.
+
+ The older llvm-dwarfdump found on Ubuntu 20.04 (LLVM 10) reads the
+ line numbers with signed forms as "0" instead of crashing. Here's the
+ before/after fix for gdb.trace/unavailable-dwarf-piece.exp with that
+ llvm-dwarfdump version:
+
+ $ diff -up before.txt after.txt
+ --- before.txt 2022-07-07 13:21:28.387690334 +0100
+ +++ after.txt 2022-07-07 13:21:39.379801092 +0100
+ @@ -18,7 +18,7 @@
+ DW_AT_name ("s")
+ DW_AT_byte_size (3)
+ DW_AT_decl_file (0)
+ - DW_AT_decl_line (0)
+ + DW_AT_decl_line (1)
+
+ 0x0000002f: DW_TAG_member
+ DW_AT_name ("a")
+ @@ -41,7 +41,7 @@
+ DW_AT_name ("t")
+ DW_AT_byte_size (3)
+ DW_AT_decl_file (0)
+ - DW_AT_decl_line (0)
+ + DW_AT_decl_line (1)
+
+ 0x00000054: DW_TAG_member
+ DW_AT_name ("a")
+
+ Change-Id: I5c866946356da421ff944019d0eca2607b2b738f
+
+2022-07-07 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Fix typos in code comments
+ "it’s" should be "it's".
+
+2022-07-07 Maciej W. Rozycki <macro@embecosm.com>
+
+ GDB/testsuite: Add coverage for `print -elements' command
+ We currently have no coverage for the `print -elements ...' command (or
+ `p -elements ...' in the shortened form), so add a couple of test cases
+ mimicking ones using corresponding `set print elements ...' values.
+
+2022-07-07 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Implement the push_dummy_call gdbarch method
+ According to "Procedure Calling Convention" in "LoongArch ELF ABI
+ specification" [1], implement the push_dummy_call gdbarch method
+ as clear as possible.
+
+ [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_procedure_calling_convention
+
+2022-07-07 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Added Zfhmin and Zhinxmin.
+ This commit adds Zfhmin and Zhinxmin extensions (subsets of Zfh and
+ Zhinx extensions, respectively). In the process supporting Zfhmin and
+ Zhinxmin extension, this commit also changes how instructions are
+ categorized considering Zfhmin, Zhinx and Zhinxmin extensions.
+
+ Detailed changes,
+
+ * From INSN_CLASS_ZFH to INSN_CLASS_ZFHMIN:
+
+ flh, fsh, fmv.x.h and fmv.h.x.
+
+ * From INSN_CLASS_ZFH to INSN_CLASS_ZFH_OR_ZHINX:
+
+ fmv.h.
+
+ * From INSN_CLASS_ZFH_OR_ZHINX to INSN_CLASS_ZFH_OR_ZHINX:
+
+ fneg.h, fabs.h, fsgnj.h, fsgnjn.h, fsgnjx.h,
+ fadd.h, fsub.h, fmul.h, fdiv.h, fsqrt.h, fmin.h, fmax.h,
+ fmadd.h, fnmadd.h, fmsub.h, fnmsub.h,
+ fcvt.w.h, fcvt.wu.h, fcvt.h.w, fcvt.h.wu,
+ fcvt.l.h, fcvt.lu.h, fcvt.h.l, fcvt.h.lu,
+ feq.h, flt.h, fle.h, fgt.h, fge.h,
+ fclass.h.
+
+ * From INSN_CLASS_ZFH_OR_ZHINX to INSN_CLASS_ZFHMIN_OR_ZHINXMIN:
+
+ fcvt.s.h and fcvt.h.s.
+
+ * From INSN_CLASS_D_AND_ZFH_INX to INSN_CLASS_ZFHMIN_AND_D:
+
+ fcvt.d.h and fcvt.h.d.
+
+ * From INSN_CLASS_Q_AND_ZFH_INX to INSN_CLASS_ZFHMIN_AND_Q:
+
+ fcvt.q.h and fcvt.h.q.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_implicit_subsets): Change implicit
+ subsets. Zfh->Zicsr is not needed and Zfh->F is replaced with
+ Zfh->Zfhmin and Zfhmin->F. Zhinx->Zicsr is not needed and
+ Zhinx->Zfinx is replaced with Zhinx->Zhinxmin and
+ Zhinxmin->Zfinx.
+ (riscv_supported_std_z_ext): Added zfhmin and zhinxmin.
+ (riscv_multi_subset_supports): Rewrite handling for new
+ instruction classes.
+ (riscv_multi_subset_supports_ext): Updated.
+ (riscv_parse_check_conflicts): Change error message to include
+ zfh and zfhmin extensions.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail.s: New complex
+ error handling test.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-1.d: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-1.l: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-2.d: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-2.l: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-3.d: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-3.l: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-4.d: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-4.l: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-5.d: Likewise.
+ * testsuite/gas/riscv/zfhmin-d-insn-class-fail-5.l: Likewise.
+ * testsuite/gas/riscv/zhinx.d: Renamed from fp-zhinx-insns.d
+ and refactored.
+ * testsuite/gas/riscv/zhinx.s: Likewise.
+
+ include/ChangeLog:
+
+ * opcode/riscv.h (enum riscv_insn_class): Removed INSN_CLASS_ZFH,
+ INSN_CLASS_D_AND_ZFH_INX and INSN_CLASS_Q_AND_ZFH_INX. Added
+ INSN_CLASS_ZFHMIN, INSN_CLASS_ZFHMIN_OR_ZHINXMIN,
+ INSN_CLASS_ZFHMIN_AND_D and INSN_CLASS_ZFHMIN_AND_Q.
+
+ opcodes/ChangeLog:
+
+ * riscv-opc.c (riscv_opcodes): Change instruction classes for
+ Zfh and Zfhmin instructions. Fix `fcvt.h.lu' instruction
+ (two operand variant) mask.
+
+2022-07-07 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: adjust GPROFNG_VARIANT
+ GPROFNG_VARIANT depends on compiler options, not on $(host).
+
+ gprofng/ChangeLog
+ 2022-07-06 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29116
+ * libcollector/configure.ac: Adjust GPROFNG_VARIANT.
+ * libcollector/configure: Rebuild.
+
+2022-07-07 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Fix disassembling Zfinx with -M numeric
+ This commit fixes floating point operand register names from ABI ones
+ to dynamically set ones.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/zfinx-dis-numeric.s: Test new behavior of
+ Zfinx extension and -M numeric disassembler option.
+ * testsuite/gas/riscv/zfinx-dis-numeric.d: Likewise.
+
+ opcodes/ChangeLog:
+
+ * riscv-dis.c (riscv_disassemble_insn): Use dynamically set GPR
+ names to disassemble Zfinx instructions.
+
+2022-07-07 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Fix requirement handling on Zhinx+{D,Q}
+ This commit fixes how instructions are masked on Zhinx+Z{d,q}inx.
+ fcvt.h.d and fcvt.d.h require ((D&&Zfh)||(Zdinx&&Zhinx)) and
+ fcvt.h.q and fcvt.q.h require ((Q&&Zfh)||(Zqinx&&Zhinx)).
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_multi_subset_supports): Fix feature gate
+ on INSN_CLASS_{D,Q}_AND_ZFH_INX.
+ (riscv_multi_subset_supports_ext): Fix feature gate diagnostics
+ on INSN_CLASS_{D,Q}_AND_ZFH_INX.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/fp-zhinx-insns.d: Add Zqinx to -march
+ for proper testing.
+
+2022-07-07 Alan Modra <amodra@gmail.com>
+
+ PR29320, 'struct obstack' declared inside parameter list
+ PR 29320
+ * frags.h: Move declaration of struct obstack..
+ * as.h: ..to here.
+
+2022-07-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-06 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ gprofng: implement a functional gp-display-html
+ This patch enables the first support for the "gprofng display html" command.
+ This command works for C/C++ applications on x86_64. Using one or more gprofng
+ experiment directories as input, a new directory with html files is created.
+ Through the index.html file in this directory, the performance results may be
+ viewed in a browser.
+
+ gprofng/Changelog:
+ 2022-06-28 Ruud van der Pas <ruud.vanderpas@oracle.com>
+
+ * gp-display-html/gp-display-html.in: implement first support for x86_64 and C/C++
+
+2022-07-06 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Copy p_align of PT_GNU_STACK for stack alignment
+ commit 74e315dbfe5200c473b226e937935fb8ce391489
+ Author: H.J. Lu <hjl.tools@gmail.com>
+ Date: Mon Dec 13 19:46:04 2021 -0800
+
+ elf: Set p_align to the minimum page size if possible
+
+ may ignore p_align of PT_GNU_STACK when copying ELF program header if
+ the maximum page size is larger than p_align of PT_LOAD segments. Copy
+ p_align of PT_GNU_STACK since p_align of PT_GNU_STACK describes stack
+ alignment, not page size,
+
+ PR binutils/29319
+ * elf.c (copy_elf_program_header): Copy p_align of PT_GNU_STACK
+ for stack alignment.
+
+2022-07-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: make D attribute usable for XOP and FMA4 insns
+ This once again allows to reduce redundancy in (and size of) the opcode
+ table.
+
+ Don't go as far as also making D work on the two 5-operand XOP insns:
+ This would significantly complicate the code, as there the first
+ (immediate) operand would need special treatment in several places.
+
+ Note that the .s suffix isn't being enabled to have any effect, for
+ being deprecated. Whereas neither {load} nor {store} pseudo prefixes
+ make sense here, as the respective operands are inputs (loads) only
+ anyway, regardless of order. Hence there is (as before) no way for the
+ programmer to request the alternative encoding to be used for register-
+ only insns.
+
+ Note further that it is always the first original template which is
+ retained (and altered), to make sure the same encoding as before is
+ used for register-only insns. This has the slightly odd (but pre-
+ existing) effect of XOP register-only insns having XOP.W clear, but FMA4
+ ones having VEX.W set.
+
+2022-07-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: fold two switch() statements in match_template()
+ I don't see why two of them were introduced (very long ago) using
+ similar fall-through logic.
+
+2022-07-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: fix 3-operand insn reverse-matching
+ The middle operand would have gone entirely unchecked, allowing e.g.
+
+ vmovss %xmm0, %esp, %xmm2
+
+ to assemble successfully, or e.g.
+
+ vmovss %xmm0, $4, %xmm2
+
+ causing an internal error. Alongside dealing with this also drop a
+ related comment, which hasn't been applicable anymore since the
+ introduction of 3-operand patterns with D set (and which perhaps never
+ had been logical to be there, as reverse-matched insns don't make it
+ there in the first place).
+
+2022-07-06 Bhuvanendra Kumar N <Bhuvanendra.KumarN@amd.com>
+
+ Descriptive DWARF operations dump support for DW_AT_rank
+ DW_AT_rank is a dwarf-5 feature.
+
+2022-07-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: introduce a state stack for .arch
+ When using just slightly non-trivial combinations of .arch, it can be
+ quite useful to be able to go back to prior state without needing to
+ re-invoke perhaps many earlier directives and without needing to invoke
+ perhaps many "negative" ones. Like some other architectures allow
+ saving (pushing) and restoring (popping) present/prior state.
+
+ For now require the same .code<N> to be in effect for ".arch pop" that
+ was in effect for the corresponding ".arch push".
+
+ Also change the global "no_cond_jump_promotion" to be bool, to match the
+ new struct field.
+
+2022-07-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: generalize disabling of sub-architectures
+ I never really understood upon what basis ".arch .no*" options were made
+ available. Let's not have any "criteria" at all, and simply allow
+ disabling of all of them. Then we also have all data for a sub-arch in
+ a single place, as we now only need a single table.
+
+2022-07-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: permit "default" with .arch
+ So far there was no way to reset the architecture to that assembly would
+ start with in the absence of any overrides (command line or directives).
+ Note that for Intel MCU "default" is merely an alias of "iamcu".
+
+ While there also zap a stray @item from the doc section, as noticed
+ when inspecting the generated output (which still has some quirks, but
+ those aren't easy to address without re-flowing almost the entire
+ section).
+
+2022-07-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: don't leak sub-architecture accumulated strings
+ While it may not be necessary in i386_target_format() (but then setting
+ the variable to NULL also wouldn't be necessary), at least in the other
+ cases strings may already have accumulated.
+
+2022-07-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-05 Tom de Vries <tdevries@suse.de>
+
+ [gdb/exp] Fix internal error when printing C++ pointer-to-member
+ When running the test-case included with this patch, we run into:
+ ...
+ (gdb) print ptm^M
+ $1 = gdb/gdbtypes.h:695: internal-error: loc_bitpos: \
+ Assertion `m_loc_kind == FIELD_LOC_KIND_BITPOS' failed.^M
+ ...
+ while printing a c++ pointer-to-member.
+
+ Fix this by skipping static fields in cp_find_class_member, such that we have:
+ ...
+ (gdb) print ptm^M
+ $1 = &A::i^M
+ ...
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29294
+
+2022-07-05 Tom Tromey <tromey@adacore.com>
+
+ Add gdb.Objfile.is_file attribute
+ Sometimes an objfile comes from memory and not from a file. It can be
+ useful to be able to check this from Python, so this patch adds a new
+ "is_file" attribute.
+
+2022-07-05 Tom Tromey <tromey@adacore.com>
+
+ Make 'import gdb.events' work
+ Pierre-Marie noticed that, while gdb.events is a Python module, it
+ can't be imported. This patch changes how this module is created, so
+ that it can be imported, while also ensuring that the module is always
+ visible, just as it was in the past.
+
+ This new approach required one non-obvious change -- when running
+ gdb.base/warning.exp, where --data-directory is intentionally not
+ found, the event registries can now be nullptr. Consequently, this
+ patch probably also requires
+
+ https://sourceware.org/pipermail/gdb-patches/2022-June/189796.html
+
+ Note that this patch obsoletes
+
+ https://sourceware.org/pipermail/gdb-patches/2022-June/189797.html
+
+2022-07-05 Xi Ruoyao <xry111@xry111.site>
+
+ gdb: LoongArch: add orig_a0 into register set
+ The basic support for LoongArch has been merged into the upstream Linux
+ kernel since 5.19-rc1 on June 5, 2022. This commit adds orig_a0 which
+ is added into struct user_pt_regs [1] to match the upstream kernel, and
+ then the upstream GDB will work with the upstream kernel.
+
+ Note that orig_a0 was added into struct user_pt_regs in the development
+ cycle for merging LoongArch port into the upstream Linux kernel, so
+ earlier kernels (notably, the product kernel with version 4.19 used in
+ distros like UOS and Loongnix) don't have it. Inspect
+ arch/loongarch/include/uapi/asm/ptrace.h in the kernel tree to make sure.
+ To build upstream GDB for a kernel lacking orig_a0, it's necessary to
+ revert this commit locally.
+
+ [1]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/loongarch/include/uapi/asm/ptrace.h#n24
+
+2022-07-05 Bhuvanendra Kumar N <Bhuvanendra.KumarN@amd.com>
+
+ Support for location and range lists for split-dwarf and dwarf-5.
+ Adding support for location and range lists for split-dwarf and dwarf-5.
+ Following issues are taken care.
+ 1. Display of the index values for DW_FORM_loclistx and DW_FORM_rnglistx.
+ 2. Display of .debug_loclists.dwo and .debug_rnglists.dwo sections.
+
+ * dwarf.c(read_and_display_attr_value): Handle DW_FORM_loclistx
+ and DW_FORM_rnglistx for .dwo files.
+ (process_debug_info): Load .debug_loclists.dwo and
+ .debug_rnglists.dwo if exists.
+ (load_separate_debug_files): Load .debug_loclists and
+ .debug_rnglists if exists.
+ Include 2 entries in debug_displays table.
+ * dwarf.h (enum dwarf_section_display_enum): Include 2 entries.
+
+2022-07-05 Jan Beulich <jbeulich@suse.com>
+
+ x86: introduce fake processor type to mark sub-arch entries in cpu_arch[]
+ This is in preparation of dropping the leading . from the strings.
+
+ While there also move PROCESSOR_GENERIC{32,64} from the middle of AMD
+ entries to near the top.
+
+2022-07-05 Jan Beulich <jbeulich@suse.com>
+
+ x86: macro-ize cpu_arch[] entries
+ Putting individual elements behind macros, besides (imo) improving
+ readability, will make subsequent (and likely also future) changes less
+ intrusive.
+
+ Utilize this right away to pack the table a little more tightly, by
+ converting "skip" to bool and putting it earlier in a group of bitfields
+ together with "len".
+
+2022-07-05 Jan Beulich <jbeulich@suse.com>
+
+ x86: de-duplicate sub-architecture strings accumulation
+ Introduce a helper function to replace 4 instances of similar code. Use
+ reconcat() to cover the previously explicit free().
+
+2022-07-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-04 Nick Clifton <nickc@redhat.com>
+
+ Fix snafu in rust demangler recursion limit code
+
+2022-07-04 Alan Modra <amodra@gmail.com>
+
+ alloc gas seginfo on notes obstack
+ Lots of memory used in gas should go on this obstack. The patch also
+ frees all the gas obstacks on exit, which isn't a completely trivial
+ task.
+
+ * subsegs.c (alloc_seginfo): New function.
+ (subseg_change, subseg_get): Use it.
+ (subsegs_end): New function.
+ * as.h (subsegs_end): Declare.
+ * output-file.c: Include subsegs.h
+ (stash_frchain_obs): New function.
+ (output_file_close): Save obstacks attached to output bfd before
+ closing. Call subsegs_end with the array of obstacks.
+
+2022-07-04 Alan Modra <amodra@gmail.com>
+
+ objcopy: bfd_alloc orelocation
+ This fixes an inconsequential objcopy memory leak. I'd normally
+ ignore reports of leaks like this one, that are merely one block or
+ fewer per section processed, since objcopy soon exits and frees all
+ memory. However I thought it worth providing support for allocating
+ memory on a bfd objalloc in objcopy and other utils.
+
+ PR 29233
+ * bucomm.c (bfd_xalloc): New function.
+ * bucomm.h (bfd_xalloc): Declare.
+ * objcopy.c (copy_relocations_in_section): Use it to allocate
+ array of reloc pointers. Rewrite code stripping relocs to do
+ without extra memory allocation.
+
+2022-07-04 Nick Clifton <nickc@redhat.com>
+
+ Synchronize libbierty sources with gcc.
+
+2022-07-04 Bhuvanendra Kumar N <Bhuvanendra.KumarN@amd.com>
+
+ Modified changes for split-dwarf and dwarf-5.
+ * dwarf.c(process_debug_info): Include DW_TAG_skeleton_unit.
+ (display_debug_str_offsets): While dumping .debug_str_offsets.dwo,
+ pass proper str_offsets_base to fetch_indexed_string().
+ (load_separate_debug_files): Skip DWO ID dump for dwarf-5.
+
+2022-07-04 Marcus Nilsson <brainbomb@gmail.com>
+
+ opcodes/avr: Implement style support in the disassembler
+ * disassemble.c: (disassemble_init_for_target): Set
+ created_styled_output for AVR based targets.
+ * avr-dis.c: (print_insn_avr): Use fprintf_styled_ftype
+ instead of fprintf_ftype throughout.
+ (avr_operand): Pass in and fill disassembler_style when
+ parsing operands.
+
+2022-07-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Add get/set functions for per_cu->lang/unit_type
+ The dwarf2_per_cu_data fields lang and unit_type both have a dont-know
+ initial value (respectively language_unknown and (dwarf_unit_type)0), which
+ allows us to add certain checks, f.i. checking that that a field is not read
+ before written.
+
+ Add get/set member functions for the two fields as a convenient location to
+ add such checks, make the fields private to enforce using the member
+ functions, and add the m_ prefix.
+
+ Tested on x86_64-linux.
+
+2022-07-04 Jan Beulich <jbeulich@suse.com>
+
+ gas/testsuite: properly exclude aout in all/weakref1u
+ Use the (wider) predicate rather than a triplet. This eliminates the sole
+ i386-msdos failure in the testsuite.
+
+2022-07-04 Jan Beulich <jbeulich@suse.com>
+
+ x86: fold Disp32S and Disp32
+ The only case where 64-bit code uses non-sign-extended (can also be
+ considered zero-extended) displacements is when an address size override
+ is in place for a memory operand (i.e. particularly excluding
+ displacements of direct branches, which - if at all - are controlled by
+ operand size, and then are still sign-extended, just from 16 bits).
+ Hence the distinction in templates is unnecessary, allowing code to be
+ simplified in a number of places. The only place where logic becomes
+ more complicated is when signed-ness of relocations is determined in
+ output_disp().
+
+ The other caveat is that Disp64 cannot be specified anymore in an insn
+ template at the same time as Disp32. Unlike for non-64-bit mode,
+ templates don't specify displacements for both possible addressing
+ modes; the necessary adjustment to the expected ones has already been
+ done in match_template() anyway (but of course the logic there needs
+ tweaking now). Hence the single template so far doing so is split.
+
+2022-07-04 Jan Beulich <jbeulich@suse.com>
+
+ x86: restore masking of displacement kinds
+ Commit 7d5e4556a375 rendered the check near the end of what is now
+ i386_finalize_displacement() entirely dead for AT&T mode, since for
+ operands involving a displacement .unspecified will always be set. But
+ the logic there is bogus anyway - Intel syntax operand size specifiers
+ are of no interest there either. The only thing which matters in the
+ "displacement only" determination is .baseindex.
+
+ Of course when masking displacement kinds we should not at the same time
+ also mask off other attributes.
+
+ Furthermore the type mask returned by lex_got() also needs to be
+ adjusted: The only case where we want Disp32 (rather than Disp32S) is
+ when dealing with 32-bit addressing mode in 64-bit code.
+
+2022-07-04 Jan Beulich <jbeulich@suse.com>
+
+ x86-64: improve handling of branches to absolute addresses
+ There are two related problems here: The use of "addr32" on a direct
+ branch would, besides causing a warning, result in operands to be
+ permitted which mistakenly are refused without "addr32". Plus at some
+ point not too long ago I'm afraid it may have been me who regressed the
+ relocation addends emitted for such branches. Correct both problems,
+ adding a testcase to guard against regressing this again.
+
+2022-07-04 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Update Zihintpause extension version
+ Because ratified Zihintpause extension has a version number of 2.0
+ (not 1.0), we should update the number.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_supported_std_z_ext): Update version
+ number of Zihintpause extension.
+
+2022-07-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix data race on per_cu->dwarf_version
+ When building gdb with -fsanitize=thread and gcc 12, and running test-case
+ gdb.dwarf2/dwz.exp, we run into a data race between thread T2 and the main
+ thread in the same write:
+ ...
+ Write of size 1 at 0x7b200000300c:^M
+ #0 cutu_reader::cutu_reader(dwarf2_per_cu_data*, dwarf2_per_objfile*, \
+ abbrev_table*, dwarf2_cu*, bool, abbrev_cache*) gdb/dwarf2/read.c:6252 \
+ (gdb+0x82f3b3)^M
+ ...
+ which is here:
+ ...
+ this_cu->dwarf_version = cu->header.version;
+ ...
+
+ Both writes are called from the parallel for in dwarf2_build_psymtabs_hard,
+ this one directly:
+ ...
+ #1 process_psymtab_comp_unit gdb/dwarf2/read.c:6774 (gdb+0x8304d7)^M
+ #2 operator() gdb/dwarf2/read.c:7098 (gdb+0x8317be)^M
+ #3 operator() gdbsupport/parallel-for.h:163 (gdb+0x872380)^M
+ ...
+ and this via the PU import:
+ ...
+ #1 cooked_indexer::ensure_cu_exists(cutu_reader*, dwarf2_per_objfile*, \
+ sect_offset, bool, bool) gdb/dwarf2/read.c:17964 (gdb+0x85c43b)^M
+ #2 cooked_indexer::index_imported_unit(cutu_reader*, unsigned char const*, \
+ abbrev_info const*) gdb/dwarf2/read.c:18248 (gdb+0x85d8ff)^M
+ #3 cooked_indexer::index_dies(cutu_reader*, unsigned char const*, \
+ cooked_index_entry const*, bool) gdb/dwarf2/read.c:18302 (gdb+0x85dcdb)^M
+ #4 cooked_indexer::make_index(cutu_reader*) gdb/dwarf2/read.c:18443 \
+ (gdb+0x85e68a)^M
+ #5 process_psymtab_comp_unit gdb/dwarf2/read.c:6812 (gdb+0x830879)^M
+ #6 operator() gdb/dwarf2/read.c:7098 (gdb+0x8317be)^M
+ #7 operator() gdbsupport/parallel-for.h:171 (gdb+0x8723e2)^M
+ ...
+
+ Fix this by setting the field earlier, in read_comp_units_from_section.
+
+ The write in cutu_reader::cutu_reader() is still needed, in case
+ read_comp_units_from_section is not used (run the test-case with say, target
+ board cc-with-gdb-index).
+
+ Make the write conditional, such that it doesn't trigger if the field is
+ already set by read_comp_units_from_section. Instead, verify that the
+ field already has the value that we're trying to set it to.
+
+ Move this logic into into a member function set_version (in analogy to the
+ already present member function version) to make sure it's used consistenly,
+ and make the field private in order to enforce access through the member
+ functions, and rename it to m_dwarf_version.
+
+ While we're at it, make sure that the version is set before read, to avoid
+ say returning true for "per_cu.version () < 5" if "per_cu.version () == 0".
+
+ Tested on x86_64-linux.
+
+2022-07-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/early-init-file.exp with -fsanitize=thread
+ When building gdb with -fsanitize=thread, I run into:
+ ...
+ FAIL: gdb.base/early-init-file.exp: check startup version string has style \
+ version
+ ...
+ due to this:
+ ...
+ warning: Found custom handler for signal 7 (Bus error) preinstalled.^M
+ warning: Found custom handler for signal 8 (Floating point exception) \
+ preinstalled.^M
+ warning: Found custom handler for signal 11 (Segmentation fault) \
+ preinstalled.^M
+ Some signal dispositions inherited from the environment (SIG_DFL/SIG_IGN)^M
+ won't be propagated to spawned programs.^M
+ ...
+ appearing before the "GNU gdb (GDB) $version" line.
+
+ This is similar to the problem fixed by commit f0bbba7886f
+ ("gdb.debuginfod/fetch_src_and_symbols.exp: fix when GDB is built with
+ AddressSanitizer").
+
+ In that commit, the problem was fixed by starting gdb with -quiet, but using
+ that would mean the "GNU gdb (GDB) $version" line that we're trying to check
+ would disappear.
+
+ Fix this instead by updating the regexp to allow the message.
+
+ Tested on x86_64-linux.
+
+2022-07-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-07-01 Maciej W. Rozycki <macro@embecosm.com>
+
+ GDB/doc: Remove indentation from `print -elements' completion example
+ Remove indentation from the text of the manual after the example here:
+
+ " Completion will in some cases guide you with a suggestion of what
+ kind of argument an option expects. For example:
+
+ (gdb) print -elements <TAB><TAB>
+ NUMBER unlimited
+
+ Here, the option expects a number (e.g., '100'), not literal
+ 'NUMBER'. Such metasyntactical arguments are always presented in
+ uppercase."
+
+ as this is a continuation of the same paragraph.
+
+2022-07-01 Maciej W. Rozycki <macro@embecosm.com>
+
+ GDB/doc: Remove extraneous spaces from completion examples
+ Completion results are usually different when the operation is applied
+ to a word that is or is not followed by a space. In some cases they are
+ equivalent, however a space would not be produced if completion was used
+ earlier on in the word processed.
+
+ However in the manual we have completion examples given using a space
+ that actually prevents the example from working. E.g.:
+
+ (gdb) info bre <TAB>
+
+ (nothing) and:
+
+ (gdb) info bre <TAB><TAB>
+ Display all 200 possibilities? (y or n)
+
+ as it now goes on to propose the entire symbol table, while:
+
+ (gdb) info bre<TAB>
+ (gdb) info breakpoints
+
+ does the right thing, but is not what is shown in the manual.
+
+ In other cases an extraneous space is used that does not correspond to
+ the actual completion pattern shown, which gives an impression of
+ sloppiness.
+
+ Remove extraneous spaces then from completion examples as appropriate.
+
+2022-07-01 Nick Clifton <nickc@redhat.com>
+
+ Add newline to the end of the rnglists displsy.
+
+2022-07-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-30 Maciej W. Rozycki <macro@embecosm.com>
+
+ GDB: Add `NUMBER' completion to `set' integer commands
+ Fix a completion consistency issue with `set' commands accepting integer
+ values and the special `unlimited' keyword:
+
+ (gdb) complete print -elements
+ print -elements NUMBER
+ print -elements unlimited
+ (gdb)
+
+ vs:
+
+ (gdb) complete set print elements
+ set print elements unlimited
+ (gdb)
+
+ (there is a space entered at the end of both commands, not shown here)
+ which also means if you strike <Tab> with `set print elements ' input,
+ it will, annoyingly, complete to `set print elements unlimited' right
+ away rather than showing a choice between `NUMBER' and `unlimited'.
+
+ Add `NUMBER' then as an available completion for such `set' commands:
+
+ (gdb) complete set print elements
+ set print elements NUMBER
+ set print elements unlimited
+ (gdb)
+
+ Adjust the testsuite accordingly. Also document the feature in the
+ Completion section of the manual in addition to the Command Options
+ section already there.
+
+2022-06-30 Bruno Larsen <blarsen@redhat.com>
+
+ gdb/testsuite: Expand gdb.cp/mb-ctor.exp to test dynamic allocation
+ When testing GDB's ability to stop in constructors, gdb.cp/mb-ctor.exp
+ only tested objects allocated on the stack. This commit adds a couple of
+ dynamic allocations and tests if GDB can stop in it as well.
+
+2022-06-30 Nick Clifton <nickc@redhat.com>
+
+ Fix implementation of readelf's -wE and -wN options,
+ * dwarf.c (dwarf_select_sections_by_name): If the entry's value is
+ zero then clear the corresponding variable.
+ (dwarf_select_sections_by_letters): Likewise.
+ * testsuite/binutils-all/debuginfo.exp: Expect -WE and -wE
+ debuginfod tests to fail.
+
+2022-06-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Block SIGTERM in worker threads
+ With gdb build with gcc-12 and -fsanitize=thread, and test-case
+ gdb.base/gdb-sigterm.exp, I run into:
+ ...
+ WARNING: ThreadSanitizer: data race (pid=9722)^M
+ Write of size 4 at 0x00000325bc68 by thread T1:^M
+ #0 handle_sigterm(int) src/gdb/event-top.c:1211 (gdb+0x8ec01f)^M
+ ...
+ Previous read of size 4 at 0x00000325bc68 by main thread:^M
+ [failed to restore the stack]^M
+ ^M
+ Location is global 'sync_quit_force_run' of size 4 at \
+ 0x00000325bc68 (gdb+0x325bc68)^M
+ ...
+ SUMMARY: ThreadSanitizer: data race gdb/event-top.c:1211 in \
+ handle_sigterm(int)^M
+ ...
+ and 3 more data races involving handle_sigterm and locations:
+ - active_ext_lang
+ - quit_flag
+ - heap block of size 40
+ (XNEW (async_signal_handler) in create_async_signal_handler)
+
+ This was reported in PR29297.
+
+ The testcase executes a "kill -TERM $gdb_pid", which generates a
+ process-directed signal.
+
+ A process-directed signal can be delivered to any thread, and what we see
+ here is the fallout of the signal being delivered to a worker thread rather
+ than the main thread.
+
+ Fix this by blocking SIGTERM in the worker threads.
+
+ [ I have not been able to reproduce this after it occurred for the first time,
+ so unfortunately I cannot confirm that the patch fixes the problem. ]
+
+ Tested on x86_64-linux, with and without -fsanitize=thread.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29297
+
+2022-06-30 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: fix column widths in MI compatibility table
+ In passing I noticed that the column headings for the table of MI
+ compatibility and breaking changes, were overlapping, at least when
+ the PDF is generated on my machine.
+
+ I propose giving slightly more space to the two version number
+ columns, this prevents the headers overlapping for me.
+
+2022-06-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-29 Pedro Alves <pedro@palves.net>
+
+ Fix GDBserver regression due to change to avoid reading shell registers
+ Simon reported that the recent change to make GDB and GDBserver avoid
+ reading shell registers caused a GDBserver regression, caught with
+ ASan while running gdb.server/non-existing-program.exp:
+
+ $ /home/smarchi/build/binutils-gdb/gdb/testsuite/../../gdb/../gdbserver/gdbserver stdio non-existing-program
+ =================================================================
+ ==127719==ERROR: AddressSanitizer: heap-use-after-free on address 0x60f0000000e9 at pc 0x55bcbfa301f4 bp 0x7ffd238a7320 sp 0x7ffd238a7310
+ WRITE of size 1 at 0x60f0000000e9 thread T0
+ #0 0x55bcbfa301f3 in scoped_restore_tmpl<bool>::~scoped_restore_tmpl() /home/smarchi/src/binutils-gdb/gdbserver/../gdbsupport/scoped_restore.h:86
+ #1 0x55bcbfa2ffe9 in post_fork_inferior(int, char const*) /home/smarchi/src/binutils-gdb/gdbserver/fork-child.cc:120
+ #2 0x55bcbf9c9199 in linux_process_target::create_inferior(char const*, std::__debug::vector<char*, std::allocator<char*> > const&) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:991
+ #3 0x55bcbf954549 in captured_main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3941
+ #4 0x55bcbf9552f0 in main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4084
+ #5 0x7ff9d663b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2)
+ #6 0x55bcbf8ef2bd in _start (/home/smarchi/build/binutils-gdb/gdbserver/gdbserver+0x1352bd)
+
+ 0x60f0000000e9 is located 169 bytes inside of 176-byte region [0x60f000000040,0x60f0000000f0)
+ freed by thread T0 here:
+ #0 0x7ff9d6c6f0c7 in operator delete(void*) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:160
+ #1 0x55bcbf910d00 in remove_process(process_info*) /home/smarchi/src/binutils-gdb/gdbserver/inferiors.cc:164
+ #2 0x55bcbf9c4ac7 in linux_process_target::remove_linux_process(process_info*) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:454
+ #3 0x55bcbf9cdaa6 in linux_process_target::mourn(process_info*) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:1599
+ #4 0x55bcbf988dc4 in target_mourn_inferior(ptid_t) /home/smarchi/src/binutils-gdb/gdbserver/target.cc:205
+ #5 0x55bcbfa32020 in startup_inferior(process_stratum_target*, int, int, target_waitstatus*, ptid_t*) /home/smarchi/src/binutils-gdb/gdbserver/../gdb/nat/fork-inferior.c:515
+ #6 0x55bcbfa2fdeb in post_fork_inferior(int, char const*) /home/smarchi/src/binutils-gdb/gdbserver/fork-child.cc:111
+ #7 0x55bcbf9c9199 in linux_process_target::create_inferior(char const*, std::__debug::vector<char*, std::allocator<char*> > const&) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:991
+ #8 0x55bcbf954549 in captured_main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3941
+ #9 0x55bcbf9552f0 in main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4084
+ #10 0x7ff9d663b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2)
+
+ previously allocated by thread T0 here:
+ #0 0x7ff9d6c6e5a7 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99
+ #1 0x55bcbf910ad0 in add_process(int, int) /home/smarchi/src/binutils-gdb/gdbserver/inferiors.cc:144
+ #2 0x55bcbf9c477d in linux_process_target::add_linux_process_no_mem_file(int, int) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:425
+ #3 0x55bcbf9c8f4c in linux_process_target::create_inferior(char const*, std::__debug::vector<char*, std::allocator<char*> > const&) /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:985
+ #4 0x55bcbf954549 in captured_main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:3941
+ #5 0x55bcbf9552f0 in main /home/smarchi/src/binutils-gdb/gdbserver/server.cc:4084
+ #6 0x7ff9d663b0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2)
+
+ Above we see that in the non-existing-program case, the process gets
+ deleted before the starting_up flag gets restored to false.
+
+ This happens because startup_inferior calls target_mourn_inferior
+ before throwing an error, and in GDBserver, unlike in GDB, mourning
+ deletes the process.
+
+ Fix this by not using a scoped_restore to manage the starting_up flag,
+ since we should only clear it when startup_inferior doesn't throw.
+
+ Change-Id: I67325d6f81c64de4e89e20e4ec4556f57eac7f6c
+
+2022-06-29 Maciej W. Rozycki <macro@embecosm.com>
+
+ GDB/testsuite: Tighten `set print elements' error check
+ Match the whole error message expected to be given rather than omitting
+ the part about the "unlimited" keyword. There's no point in omitting
+ the missing part first, and second with an upcoming change the part in
+ parentheses will no longer be a fixed string, so doing a full match will
+ ensure the algorithm correctly builds the message expected here. Also
+ avoid any wildcard matches.
+
+2022-06-29 Maciej W. Rozycki <macro@embecosm.com>
+
+ GDB: Remove extraneous full stops from `set' command error messages
+ With errors given for bad commands such as `set annotate' or `set width'
+ we produce an extraneous full stop within parentheses:
+
+ (gdb) set annotate
+ Argument required (integer to set it to.).
+ (gdb) set width
+ Argument required (integer to set it to, or "unlimited".).
+ (gdb)
+
+ This is grammatically incorrect, so remove the full stop and adjust the
+ testsuite accordingly.
+
+2022-06-29 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: improve description of --data-disassemble opcodes output
+ Extend the description of the MI command --data-disassemble.
+ Specifically, expand the description of the 'opcodes' field to explain
+ how the bytes are formatted.
+
+2022-06-29 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Only stack S16..S31 when FPU registers are secure
+ The FPCCR.TS bit is used to identify if FPU registers are considered
+ non-secure or secure. If they are secure, then callee saved registers
+ (S16 to S31) are stacked on exception entry or otherwise skipped.
+
+2022-06-29 Andrew Burgess <aburgess@redhat.com>
+
+ opcodes/aarch64: split off creation of comment text in disassembler
+ The function aarch64_print_operand (aarch64-opc.c) is responsible for
+ converting an instruction operand into the textual representation of
+ that operand.
+
+ In some cases, a comment is included in the operand representation,
+ though this (currently) only happens for the last operand of the
+ instruction.
+
+ In a future commit I would like to enable the new libopcodes styling
+ for AArch64, this will allow objdump and GDB[1] to syntax highlight
+ the disassembler output, however, having operands and comments
+ combined in a single string like this makes such styling harder.
+
+ In this commit, I propose to extend aarch64_print_operand to take a
+ second buffer. Any comments for the instruction are written into this
+ extra buffer. The two callers of aarch64_print_operand are then
+ updated to pass an extra buffer, and print any resulting comment.
+
+ In this commit no styling is added, that will come later. However, I
+ have adjusted the output slightly. Before this commit some comments
+ would be separated from the instruction operands with a tab character,
+ while in other cases the comment was separated with two single spaces.
+
+ After this commit I use a single tab character in all cases. This
+ means a few test cases needed updated. If people would prefer me to
+ move everyone to use the two spaces, then just let me know. Or maybe
+ there was a good reason why we used a mix of styles, I could probably
+ figure out a way to maintain the old output exactly if that is
+ critical.
+
+ Other than that, there should be no user visible changes after this
+ commit.
+
+ [1] GDB patches have not been merged yet, but have been posted to the
+ GDB mailing list:
+ https://sourceware.org/pipermail/gdb-patches/2022-June/190142.html
+
+2022-06-29 Carl Love <cel@us.ibm.com>
+ Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: fix gdb.base/break-idempotent.exp on ppc
+ When running the gdb.base/break-idempotent.exp test on ppc, I was
+ seeing some test failures (or rather errors), that looked like this:
+
+ (gdb) watch local
+ Hardware watchpoint 2: local
+
+ has_hw_wp_support: Hardware watchpoint detected
+ ERROR: no fileid for gcc2-power8
+ ERROR: Couldn't send delete breakpoints to GDB.
+ ERROR OCCURED: can't read "gdb_spawn_id": no such variable
+ while executing
+ "expect {
+ -i 1000 -timeout 100
+ -re ".*A problem internal to GDB has been detected" {
+ fail "$message (GDB internal error)"
+ gdb_internal_erro..."
+ ("uplevel" body line 1)
+ invoked from within
+
+ What happens is that in break-idempotent.exp we basically do this:
+
+ if {[prepare_for_testing "failed to prepare" $binfile $srcfile $opts]} {
+ continue
+ }
+
+ # ....
+
+ if {![skip_hw_watchpoint_tests]} {
+ test_break $always_inserted "watch"
+ }
+
+ The problem with this is that skip_hw_watchpoint_tests, includes this:
+
+ if { [istarget "i?86-*-*"]
+ || [istarget "x86_64-*-*"]
+ || [istarget "ia64-*-*"]
+ || [istarget "arm*-*-*"]
+ || [istarget "aarch64*-*-*"]
+ || ([istarget "powerpc*-*-linux*"] && [has_hw_wp_support])
+ || [istarget "s390*-*-*"] } {
+ return 0
+ }
+
+ For powerpc only we call has_hw_wp_support. This is a caching proc
+ that runs a test within GDB to detect if we have hardware watchpoint
+ support or not.
+
+ Unfortunately, to run this test we restart GDB, and when the test has
+ completed, we exit GDB. This means that in break-idempotent.exp, when
+ we call skip_hw_watchpoint_tests for the first time on powerpc, GDB
+ will unexpectedly be exited. When we later call delete_breakpoints we
+ see the errors I reported above.
+
+ The fix is to call skip_hw_watchpoint_tests early, before we start GDB
+ as part of the break-idempotent.exp script, and store the result in a
+ variable, we can then check this variable in the script as needed.
+
+ After this change break-idempotent.exp runs fine on powerpc.
+
+2022-06-29 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop stray NoRex64 from XBEGIN
+ Presumably this being there was a result of taking CALL as a reference
+ when adding the RTM insns. But with No_qSuf the attribute has no effect.
+
+2022-06-29 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix build when BUILD_MAN is false
+ gprofng/ChangeLog
+ 2022-06-28 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29131
+ * gp-display-html/Makefile.am: Set man_MANS only when BUILD_MAN is true.
+ * src/Makefile.am: Likewise.
+ * gp-display-html/Makefile.in: Rebuild.
+ * src/Makefile.in: Rebuild.
+
+2022-06-29 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: use $(sysconfdir) instead $(prefix)/etc
+ gprofng/ChangeLog
+ 2022-06-28 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29191
+ * src/Makefile.am: Use $(sysconfdir) instead $(prefix)/etc.
+ * src/Settings.cc: Likewise.
+ * src/Makefile.in: Rebuild.
+
+2022-06-29 Alan Modra <amodra@gmail.com>
+
+ Re: ld/x86: skip p_align-1 tests with unsuitable compiler
+ commit d0e0f9c87a3e results "ERROR: i586-linux-cc does not exist" if
+ cross-building an i586-linux target without a target compiler
+ installed.
+
+ * testsuite/ld-elf/linux-x86.exp (compiler_honours_aligned): New.
+ Use it after first testing check_compiler_available.
+
+2022-06-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-28 Pedro Alves <pedro@palves.net>
+
+ gdb+gdbserver/Linux: avoid reading registers while going through shell
+ For every stop, Linux GDB and GDBserver save the stopped thread's PC,
+ in lwp->stop_pc. This is done in save_stop_reason, in both
+ gdb/linux-nat.c and gdbserver/linux-low.cc. However, while we're
+ going through the shell after "run", in startup_inferior, we shouldn't
+ be reading registers, as we haven't yet determined the target's
+ architecture -- the shell's architecture may not even be the same as
+ the final inferior's.
+
+ In gdb/linux-nat.c, lwp->stop_pc is only needed when the thread has
+ stopped for a breakpoint, and since when going through the shell, no
+ breakpoint is going to hit, we could simply teach save_stop_reason to
+ only record the stop pc when the thread stopped for a breakpoint.
+
+ However, in gdbserver/linux-low.cc, lwp->stop_pc is used in more cases
+ than breakpoint hits (e.g., it's used in tracepoints & the
+ "while-stepping" feature).
+
+ So to avoid GDB vs GDBserver divergence, we apply the same approach to
+ both implementations.
+
+ We set a flag in the inferior (process in GDBserver) whenever it is
+ being nursed through the shell, and when that flag is set,
+ save_stop_reason bails out early. While going through the shell,
+ we'll only ever get process exits (normal or signalled), random
+ signals, and exec events, so nothing is lost.
+
+ Change-Id: If0f01831514d3a74d17efd102875de7d2c6401ad
+
+2022-06-28 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix gdb build with -fsanitize=thread and gcc 7
+ When building gdb with system gcc 7.5.0, I run into:
+ ...
+ gdb/ia64-tdep.c: In function ‘int is_float_or_hfa_type_recurse(type*, type**)’:
+ gdb/ia64-tdep.c:3362:1: error: control reaches end of non-void function \
+ [-Werror=return-type]
+ ...
+
+ This is due to PR gcc/81275 - "-fsanitize=thread produce incorrect
+ -Wreturn-type warning", which has been fixed in gcc-8.
+
+ Work around this by moving the default return outside the switch.
+
+ Tested on x86_64-linux.
+
+2022-06-28 Clément Chigot <chigot@adacore.com>
+
+ bfd: handle codepage when opening files on MinGW
+ Even if MS docs say that CP_UTF8 should always be used on newer
+ applications, forcing it might produce undefined filename if the
+ encoding isn't UTF-8.
+ MinGW seems to call ___lc_codepage_func() in order to retrieve the
+ current thread codepage.
+
+ bfd/ChangeLog:
+
+ * bfdio.c (_bfd_real_fopen): Retrieve codepage with
+ ___lc_codepage_func() on MinGW.
+
+2022-06-28 Clément Chigot <chigot@adacore.com>
+
+ windres: add quotes around preprocessor cmd if needed
+ This patch ensures that the gcc binary called by windres is quoted if
+ needed. Otherwise, errors can occur if the gcc is under a folder having
+ a name containing a space (eg "Program Files").
+
+ binutils/
+ * resrc.c (DEFAULT_PREPROCESSOR): Split into...
+ (DEFAULT_PREPROCESSOR_CMD): that...
+ (DEFAULT_PREPROCESSOR_ARGS): and that.
+ (look_for_default): Add quotes around the command if needed.
+ (read_rc_file): Adapt to new defines.
+
+2022-06-28 Nick Clifton <nickc@redhat.com>
+
+ Fix the display of the idnex values for DW_FORM_loclistx and DW_FORM_rnglistx. Correct the display of .debug.loclists sections.
+ PR 29267
+ * dwarf.c (display_debug_rnglists): New function, broken out of..
+ (display_debug_ranges): ... here.
+ (read_and_display_attr_value): Correct calculation of index
+ displayed for DW_FORM_loclistx and DW_FORM_rnglistx.
+ * testsuite/binutils-all/x86-64/pr26808.dump: Update expected
+ output.
+
+2022-06-28 Jan Beulich <jbeulich@suse.com>
+
+ ld/x86: skip p_align-1 tests with unsuitable compiler
+ When the compiler doesn't properly arrange for foo's alignment, there's
+ no point even trying these tests. Report the situation as a single
+ "unsupported" test.
+
+2022-06-28 Alan Modra <amodra@gmail.com>
+
+ PowerPC64: align plt_branch stubs
+ plt_branch stubs are similar to plt_call stubs in that they branch
+ via bctr. Align them too.
+
+ bfd/
+ * elf64-ppc.c (ppc_size_one_stub): Align plt_branch stubs as for
+ plt_call stubs.
+ ld/
+ * testsuite/ld-powerpc/elfv2exe.d: Adjust for plt_branch changes.
+ * testsuite/ld-powerpc/notoc.d: Likewise.
+ * testsuite/ld-powerpc/notoc.wf: Likewise.
+ * testsuite/ld-powerpc/notoc3.d: Likewise.
+ * testsuite/ld-powerpc/pr23937.d: Likewise.
+
+2022-06-28 Alan Modra <amodra@gmail.com>
+
+ PowerPC64: plt_stub_pad
+ * elf64-ppc.c (plt_stub_pad): Simplify parameters and untangle
+ from plt_stub_size.
+ (ppc_size_one_stub): Call plt_stub_size before plt_stub_pad to
+ provide size. Recalculate size if it might change.
+
+2022-06-28 Alan Modra <amodra@gmail.com>
+
+ PowerPC64: Tidy stub type changes
+ It made sense before I started using separate fields for main type and
+ sub type to add a difference in main type to the type (thus keeping
+ sub type unchanged). Not so much now.
+
+ * elf64-ppc.c (ppc_merge_stub): Simplify stub type change.
+ (ppc_size_one_stub): Likewise.
+
+2022-06-28 Jiangshuai Li <jiangshuai_li@c-sky.com>
+
+ gdb:csky add pseudo regs for float and vector regs
+ In the existing CSKY architecture, there are at most 32 floating
+ and 16 vector registers. Float registers's count can be configured
+ as 16 or 32. In the future, the vector registers's count may be
+ extended to 32.
+
+ The bit width of floating-point register is 64bits, and the bit
+ width of vector register is 128bit.
+
+ Special points: in fr0~fr15 and vr0~vr15, each FRx is the lower
+ 64 bits of the corresponding VRx.
+
+ Here, we will split each floating-point and vector register to
+ 32bits wide, add the corresponding pseudo registers, and finally
+ use them for the dwarf registers.
+
+ There are 128 pseudo registers in total, s0~s127, including:
+ 1. s0 and s1 correspond to fr0, s4 and s5 correspond to fr1, and so on.
+ Every two separated pseudo registers correspond to a float register.
+ 2. s0, s1, s2 and s3 correspond to vr0; s4, s5, s6 and s7 correspond to vr1,
+ and so on. Every four pseudo registers corresponds to a vector register.
+
+ Therefore, in s64~s127, there are general registers that are not actually
+ used. This part is to prepare for the expansion of vector registers to 32
+
+ Therefore, in s64~s127, half of the registers are actually unused. This
+ part is to prepare for the expansion of the vector register to 32.
+
+2022-06-28 Pekka Seppänen <pexu@sourceware.mail.kapsi.fi>
+
+ PR29293, elfnn-aarch64.c: def_protected member unintialized
+ PR 29293
+ * elfnn-aarch64.c (elfNN_aarch64_link_hash_newfunc): Init def_protected.
+
+2022-06-28 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Add 'Sstc' extension and its CSRs
+ This commit adds "stimecmp / vstimecmp" Extension (Sstc) and its CSRs.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_supported_std_s_ext): Add 'Sstc'
+ extension to valid 'S' extension list.
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c (enum riscv_csr_class): Add CSR classes for
+ 'Sstc' extension. (riscv_csr_address): Add handling for new CSR
+ classes.
+ * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
+ * testsuite/gas/riscv/csr.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+
+ include/ChangeLog:
+
+ * opcode/riscv-opc.h (CSR_STIMECMP, CSR_STIMECMPH,
+ CSR_VSTIMECMP, CSR_VSTIMECMPH): New CSR macros.
+
+2022-06-28 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Add 'Sscofpmf' extension with its CSRs
+ This commit adds Count Overflow and Mode-Based Filtering Extension
+ (Sscofpmf) and its CSRs.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_supported_std_s_ext): Add 'Sscofpmf'
+ extension to valid 'S' extension list.
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c (enum riscv_csr_class): Add CSR classes for
+ 'Sscofpmf' extension. (riscv_csr_address): Add handling for new
+ CSR classes.
+ * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
+ * testsuite/gas/riscv/csr.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+
+ include/ChangeLog:
+
+ * opcode/riscv-opc.h (CSR_SCOUNTOVF, CSR_MHPMEVENT3H,
+ CSR_MHPMEVENT4H, CSR_MHPMEVENT5H, CSR_MHPMEVENT6H,
+ CSR_MHPMEVENT7H, CSR_MHPMEVENT8H, CSR_MHPMEVENT9H,
+ CSR_MHPMEVENT10H, CSR_MHPMEVENT11H, CSR_MHPMEVENT12H,
+ CSR_MHPMEVENT13H, CSR_MHPMEVENT14H, CSR_MHPMEVENT15H,
+ CSR_MHPMEVENT16H, CSR_MHPMEVENT17H, CSR_MHPMEVENT18H,
+ CSR_MHPMEVENT19H, CSR_MHPMEVENT20H, CSR_MHPMEVENT21H,
+ CSR_MHPMEVENT22H, CSR_MHPMEVENT23H, CSR_MHPMEVENT24H,
+ CSR_MHPMEVENT25H, CSR_MHPMEVENT26H, CSR_MHPMEVENT27H,
+ CSR_MHPMEVENT28H, CSR_MHPMEVENT29H, CSR_MHPMEVENT30H,
+ CSR_MHPMEVENT31H): New CSR macros.
+
+2022-06-28 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Add 'Smstateen' extension and its CSRs
+ This commit adds State Enable Extension (Smstateen) and its CSRs.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_supported_std_s_ext): Add 'Smstateen'
+ extension to valid 'S' extension list.
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c (enum riscv_csr_class): Add CSR classes for
+ 'Smstateen' extension. (riscv_csr_address): Add handling for
+ new CSR classes.
+ * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
+ * testsuite/gas/riscv/csr.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+
+ include/ChangeLog:
+
+ * opcode/riscv-opc.h (CSR_MSTATEEN0, CSR_MSTATEEN1,
+ CSR_MSTATEEN2, CSR_MSTATEEN3, CSR_SSTATEEN0, CSR_SSTATEEN1,
+ CSR_SSTATEEN2, CSR_SSTATEEN3, CSR_HSTATEEN0, CSR_HSTATEEN1,
+ CSR_HSTATEEN2, CSR_HSTATEEN3, CSR_MSTATEEN0H, CSR_MSTATEEN1H,
+ CSR_MSTATEEN2H, CSR_MSTATEEN3H, CSR_HSTATEEN0H, CSR_HSTATEEN1H,
+ CSR_HSTATEEN2H, CSR_HSTATEEN3H): New CSR macros.
+
+2022-06-28 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Add new CSR feature gate handling (RV32,H)
+ To support feature gate like Smstateen && H, this commit adds certain
+ CSR feature gate handling. It also changes how RV32-only CSRs are
+ handled for cleanliness.
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c (riscv_csr_address): Add CSR feature gate
+ handling for H. Change handling on RV32.
+
+2022-06-28 Alan Modra <amodra@gmail.com>
+
+ Re: Disable execstack and rwx segments warnings for MIPS targets.
+ PR 29263
+ * configure.ac: Fix typo.
+ * testsuite/ld-elf/elf.exp: Add mips to targets that need
+ --warn-execstack to pass first pr29072 test.
+
+2022-06-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-27 Bruno Larsen <blarsen@redhat.com>
+
+ gdb/testsuite: update bug numbers from Gnats to bugzilla
+ Some tests link to outdated bug numbers when an XFAIL or a KFAIL happen.
+
+ gdb.base/macscp.exp was referencing bug number 555, and the bug 7660
+ mentions that it used to be 555 on the Gnats system and seems to relate
+ to the issue at hand.
+
+ gdb.base/annota1.exp was referencing bug number 1270, and bug 8375
+ mentions being number 1270 on Gnats, and mentions annota1 specifically,
+ so it seemed pretty obvious.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix build breaker with --enable-shared
+ When building gdb with --enable-shared, I run into:
+ ...
+ ld: build/zlib/libz.a(libz_a-inffast.o): relocation R_X86_64_32S against \
+ `.rodata' can not be used when making a shared object; recompile with -fPIC
+ ld: build/zlib/libz.a(libz_a-inflate.o): warning: relocation against \
+ `inflateResetKeep' in read-only section `.text'
+ collect2: error: ld returned 1 exit status
+ make[3]: *** [libbfd.la] Error 1
+ ...
+
+ This is a regression since commit a08bdb159bb ("[gdb/build] Fix gdbserver
+ build with -fsanitize=thread").
+
+ The problem is that a single case statement in configure is shared to handle
+ special requirements for both the host libiberty and host zlib, which has the
+ effect that only one is handled.
+
+ Fix this by handling libiberty and zlib each in its own case statement.
+
+ Build on x86_64-linux, with and without --enable-shared.
+
+ ChangeLog:
+
+ 2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ * configure.ac: Set extra_host_libiberty_configure_flags and
+ extra_host_zlib_configure_flags in separate case statements.
+ * configure: Regenerate.
+
+2022-06-27 Pedro Alves <pedro@palves.net>
+
+ Make GDBserver abort on internal error in development mode
+ Currently, if GDBserver hits some internal assertion, it exits with
+ error status, instead of aborting. This makes it harder to debug
+ GDBserver, as you can't just debug a core file if GDBserver fails an
+ assertion. I've had to hack the code to make GDBserver abort to debug
+ something several times before.
+
+ I believe the reason it exits instead of aborting, is to prevent
+ potentially littering the filesystem of smaller embedded targets with
+ core files. I think I recall Daniel Jacobowitz once saying that many
+ years ago, but I can't be sure. Anyhow, that seems reasonable to me.
+
+ Since we nowadays have a distinction between development and release
+ modes, I propose to make GDBserver abort on internal error if in
+ development mode, while keeping the status quo when in release mode.
+
+ Thus, after this patch, in development mode, you get:
+
+ $ ../gdbserver/gdbserver
+ ../../src/gdbserver/server.cc:3711: A problem internal to GDBserver has been detected.
+ captured_main: Assertion `0' failed.
+ Aborted (core dumped)
+ $
+
+ while in release mode, you'll continue to get:
+
+ $ ../gdbserver/gdbserver
+ ../../src/gdbserver/server.cc:3711: A problem internal to GDBserver has been detected.
+ captured_main: Assertion `0' failed.
+ $ echo $?
+ 1
+
+ I do not think that this requires a separate configure switch.
+
+ A "--target_board=native-extended-gdbserver" run on Ubuntu 20.04 ends
+ up with:
+
+ === gdb Summary ===
+
+ # of unexpected core files 29
+ ...
+
+ for me, of which 8 are GDBserver core dumps, 7 more than without this
+ patch.
+
+ Change-Id: I6861e08ad71f65a0332c91ec95ca001d130b0e9d
+
+2022-06-27 Nick Clifton <nickc@redhat.com>
+
+ Replace a run-time assertion failure with a warning message when parsing corrupt DWARF data.
+ PR 29289
+ * dwarf.c (display_debug_names): Replace assert with a warning
+ message.
+
+ Fix NULL pointer indirection when parsing corrupt DWARF data.
+ PR 29290
+ * dwarf.c (read_and_display_attr_value): Check that debug_info_p
+ is set before dereferencing it.
+
+ Have gold's File_read::do_read() function check the start parameter
+ PR 23765
+ * fileread.cc (File_read::do_read): Check start parameter before
+ computing number of bytes to read.
+
+2022-06-27 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Unwind Non-Secure callbacks from Secure
+ Without this changeset, the unwinding doesn't take into account
+ Non-Secure to Secure stack unwinding enablement status and
+ doesn't choose the proper SP to do the unwinding.
+
+ This patch only unwinds the stack when Non-Secure to Secure
+ unwinding is enabled, previous SP is set w/r to the current mode
+ (Handler -> msp_s, Thread -> psp_s) and then the Secure stack is
+ unwound. Ensure thumb bit is set in PSR when needed. Also, drop
+ thumb bit from PC if set.
+
+2022-06-27 Nick Clifton <nickc@redhat.com>
+
+ Stop bogus warnings about DWARF indexed string offsets being too big.
+ * dwarf.c (fetch_indexed_string): Do not use length of first table
+ in string section as the length of every table in the section.
+ * testsuite/binutils-all/pr26112.r: Update expected output.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle older python in gdb.python/py-send-packet.py
+ With python 3.4, I run into:
+ ...
+ Traceback (most recent call last):^M
+ File "<string>", line 1, in <module>^M
+ File
+ "outputs/gdb.python/py-send-packet/py-send-packet.py", line 128, in \
+ run_set_global_var_test^M
+ res = conn.send_packet(b"X%x,4:\x02\x02\x02\x02" % addr)^M
+ TypeError: Could not convert Python object: b'X%x,4:\x02\x02\x02\x02'.^M
+ Error while executing Python code.^M
+ ...
+ while with python 3.6 this works fine.
+
+ The type of addr is <class 'gdb.Value'>, so the first thing to try is whether
+ changing it into a string works:
+ ...
+ addr_str = "%x" % addr
+ res = conn.send_packet(b"X%s,4:\x02\x02\x02\x02" % addr_str)
+ ...
+ which gets us the more detailed:
+ ...
+ TypeError: unsupported operand type(s) for %: 'bytes' and 'str'
+ ...
+
+ Fix this by avoiding the '%' operator in the byte literal, and use instead:
+ ...
+ def xpacket_header (addr):
+ return ("X%x,4:" % addr).encode('ascii')
+ ...
+ res = conn.send_packet(xpacket_header(addr) + b"\x02\x02\x02\x02")
+ ...
+
+ Tested on x86_64-linux, with python 3.4 and 3.6, and a backported version was
+ tested on the gdb-12-branch in combination with python 2.7.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.reverse/i387-env-reverse.exp for -pie
+ When running test-case gdb.reverse/i387-env-reverse.exp for x86_64-linux with
+ target board unix/-m32/-fPIE/-pie, we run into:
+ ...
+ (gdb) PASS: gdb.reverse/i387-env-reverse.exp: push st0
+ info register eax^M
+ eax 0x56550000 1448411136^M
+ (gdb) FAIL: gdb.reverse/i387-env-reverse.exp: verify eax == 0x8040000
+ ...
+
+ The problem is that the tested instruction (fstsw) only sets $ax, not $eax.
+
+ Fix this by verifying $ax instead of $eax.
+
+ Tested on x86_64-linux with target boards unix/-m32 and unix/-m32/-fPIE/-pie.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Enable some test-cases for x86_64 -m32
+ When trying to run test-case gdb.reverse/i387-env-reverse.exp for x86_64-linux
+ with target board unix/-m32, it's skipped.
+
+ Fix this by using is_x86_like_target instead of istarget "i?86-*linux*".
+
+ This exposes a number of duplicates, fix those by making the test names unique.
+
+ Likewise in a couple of other test-cases.
+
+ Tested on x86_64-linux with target boards unix/-m32.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Workaround unnecessary .s file with gfortran 4.8
+ After running test-case gdb.fortran/namelist.exp with gfortran 4.8.5, I'm left
+ with:
+ ...
+ $ git sti
+ On branch master
+ Your branch is up to date with 'origin/master'.
+
+ Untracked files:
+ (use "git add <file>..." to include in what will be committed)
+ gdb/testsuite/lib/compiler.s
+
+ nothing added to commit but untracked files present (use "git add" to track)
+ ...
+
+ We're running into PR gcc/60447, which was fixed in gcc 4.9.0.
+
+ Workaround this by first copying the source file to the temp dir, such that
+ the .s file is left there instead:
+ ...
+ $ ls build/gdb/testsuite/temp/<runtest pid>/
+ compiler.c compiler.F90 compiler.s
+ ...
+
+ Tested on x86_64-linux.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Skip gdb.fortran/namelist.exp for gfortran 4.8
+ The test-case gdb.fortran/namelist.exp uses a gfortran feature (emitting
+ DW_TAG_namelist in the debug info) that has been supported since gfortran 4.9,
+ see PR gcc/37132.
+
+ Skip the test for gfortran 4.8 and earlier. Do this using gcc_major_version,
+ and update it to be able to handle "gcc_major_version {gfortran-*} f90".
+
+ Tested on x86_64-linux, with gfortran 4.8.5, 7.5.0, and 12.1.1.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix parsing of .debug_str_offsets header
+ When running test-case gdb.dwarf2/fission-mix.exp with target board dwarf64
+ and gcc-12 (defaulting to DWARF5), I run into:
+ ...
+ (gdb) break func2^M
+ Offset from DW_FORM_GNU_str_index or DW_FORM_strx pointing outside of \
+ .debug_str.dwo section in CU at offset 0x0 [in module fission-mix]^M
+ (gdb) FAIL: gdb.dwarf2/fission-mix.exp: break func2
+ ...
+
+ The .debug_str_offsets section has version 5, so as per the standard it has
+ it's own header, with initial length and version:
+ ...
+ Contents of the .debug_str_offsets.dwo section (loaded from fission-mix2.dwo):
+
+ Length: 0x1c
+ Version: 0x5
+ Index Offset [String]
+ 0 0 build/gdb/testsuite
+ 1 33 GNU C17
+ 2 8f src/gdb/testsuite/gdb.dwarf2/fission-mix-2.c
+ ...
+
+ But when trying to read the string offset at index 0 in the table (which
+ is 0), we start reading at offset 8, which points in the header, at the last
+ 4 bytes of the initial length (it's 12 bytes because of 64-bit dwarf), as well
+ at the 2-byte version field and 2 bytes of padding, so we get:
+ ...
+ (gdb) p /x str_offset
+ $1 = 0x500000000
+ ...
+ which indeed is an offset that doesn't fit in the .debug_str section.
+
+ The offset 8 is based on reader->cu->header.addr_size:
+ ...
+ static const char *
+ read_dwo_str_index (const struct die_reader_specs *reader, ULONGEST str_index)
+ {
+ ULONGEST str_offsets_base = reader->cu->header.version >= 5
+ ? reader->cu->header.addr_size : 0;
+ ...
+ which doesn't in look in agreement with the standard.
+
+ Note that this happens to give the right answer for 32-bit dwarf and
+ addr_size == 8, because then we have header size ==
+ (initial length (4) + version (2) + padding (2)) == 8.
+
+ Conversely, for 32-bit dwarf and addr_size == 4 (target board unix/-m32)
+ we run into a similar problem. It just happens to not trigger the warning,
+ instead we get the wrong strings, like "func2" for DW_AT_producer and
+ "build/gdb/testsuite" for DW_AT_name of the DW_TAG_compile_unit DIE.
+
+ Fix this by parsing the .debug_str_offsets header in read_dwo_str_index.
+
+ Add a FIXME that we should not parse this for every call.
+
+ Tested on x86_64-linux.
+
+2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix gdbserver build with -fsanitize=thread
+ [ Copied from gcc commit 153689603fd ("[gdb/build] Fix gdbserver build with
+ -fsanitize=thread"). ]
+
+ When building gdbserver with -fsanitize=thread (added to CFLAGS/CXXFLAGS) we
+ run into:
+ ...
+ ld: ../libiberty/libiberty.a(safe-ctype.o): warning: relocation against \
+ `__tsan_init' in read-only section `.text'
+ ld: ../libiberty/libiberty.a(safe-ctype.o): relocation R_X86_64_PC32 \
+ against symbol `__tsan_init' can not be used when making a shared object; \
+ recompile with -fPIC
+ ld: final link failed: bad value
+ collect2: error: ld returned 1 exit status
+ make[1]: *** [libinproctrace.so] Error 1
+ ...
+ which looks similar to what is described in commit 78e49486944 ("[gdb/build]
+ Fix gdbserver build with -fsanitize=address").
+
+ The gdbserver component builds a shared library libinproctrace.so, which uses
+ libiberty and therefore requires the pic variant. The gdbserver Makefile is
+ setup to use this variant, if available, but it's not there.
+
+ Fix this by listing gdbserver in the toplevel configure alongside libcc1, as a
+ component that needs the libiberty pic variant, setting:
+ ...
+ extra_host_libiberty_configure_flags=--enable-shared
+ ...
+
+ Tested on x86_64-linux.
+
+ ChangeLog:
+
+ 2022-06-27 Tom de Vries <tdevries@suse.de>
+
+ * configure.ac: Build libiberty pic variant for gdbserver.
+ * configure: Regenerate.
+
+2022-06-27 Nick Clifton <nickc@redhat.com>
+
+ Disable execstack and rwx segments warnings for MIPS targets.
+ PR 29263
+ * configure.ac: Move HPPA specific code from here...
+ * configure.tgt: ... to here. Add similar code for MIPS.
+ Move code for CRIS, MIPS and HPPA to block at start of file.
+ * configure: Regenerate.
+
+2022-06-27 Jan Beulich <jbeulich@suse.com>
+
+ bfd: prune config.bfd's setting of targ_archs
+ The final "match all" case can take care of a few explicit entries:
+ Purge those. Also move s12z* into proper position (the table is
+ otherwise sorted, after all).
+
+2022-06-27 Jan Beulich <jbeulich@suse.com>
+
+ drop XC16x bits
+ Commit 04f096fb9e25 ("Move the xc16x target to the obsolete list") moved
+ the architecture from the "obsolete but still available" to the
+ "obsolete / support removed" list in config.bfd, making the architecture
+ impossible to enable (except maybe via "enable everything" options").
+
+ Note that I didn't touch */po/*.po{,t} on the assumption that these
+ would be updated by some (half)automatic means.
+
+2022-06-27 Bhuvanendra Kumar N <Bhuvanendra.KumarN@amd.com>
+
+ Fix location list offset address dump under DW_AT_location (dwarf-5)
+ For clang compiled objects with dwarf-5, location list offset address dump
+ under DW_AT_location is corrected, where DW_FORM_loclistx is used. While
+ dumping the location list offset, the address dumped is wrong where it was
+ refering to .debug_addr instead of .debug_loclists
+
+ * dwarf.c (fetch_indexed_value): Add base_address as parameter and
+ use it to access the section offset.
+ (read_and_display_attr_value): Handle DW_FORM_loclistx form separately.
+ Pass loclists_base to fetch_indexed_value().
+
+2022-06-27 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 .branch_lt address
+ .branch_lt is really an extension of .plt, as is .iplt. We'd like all
+ of the PLT sections to be fixed relative to .TOC. after stub sizing,
+ because changes in offset to PLT entries might mean a change in stub
+ sizes. When -z relro, the relro layout does this by laying out
+ sections from the end of the relro segment. So for example, a change
+ in .eh_frame (which happens after stub sizing) will keep the same GOT
+ to PLT offset when -z relro. Not so when -z norelro, because then the
+ usual forward layout of section is done and .got is more aligned than
+ .branch_lt.
+
+ * emulparams/elf64ppc.sh: Set .branch_lt address fixed relative
+ to .got.
+ * testsuite/ld-powerpc/elfv2exe.d: Adjust to suit.
+
+2022-06-27 Alan Modra <amodra@gmail.com>
+
+ -z relro relaxation and ld script SIZEOF
+ A number of targets use assignments like:
+ . = DATA_SEGMENT_RELRO_END (SIZEOF (.got.plt) >= 12 ? 12 : 0, .);
+ (from i386) in linker scripts to put the end of the relro segment past
+ the header in .got.plt. Examination of testcases like those edited by
+ this patch instead sees the end of the relro segment being placed at
+ the start of .got.plt. For the i386 pie1 test:
+
+ [ 9] .got.plt PROGBITS 00002000 001000 00000c 04 WA 0 0 4
+
+ GNU_RELRO 0x000f90 0x00001f90 0x00001f90 0x00070 0x00070 R 0x1
+
+ A map file shows:
+
+ .dynamic 0x0000000000001f90 0x70
+ *(.dynamic)
+ .dynamic 0x0000000000001f90 0x70 tmpdir/pie1.o
+ 0x0000000000001f90 _DYNAMIC
+
+ .got 0x0000000000002000 0x0
+ *(.got)
+ .got 0x0000000000002000 0x0 tmpdir/pie1.o
+ *(.igot)
+ 0x0000000000002ff4 . = DATA_SEGMENT_RELRO_END (., (SIZEOF (.got.plt) >= 0xc)?0xc:0x0)
+
+ .got.plt 0x0000000000002000 0xc
+ *(.got.plt)
+ .got.plt 0x0000000000002000 0xc tmpdir/pie1.o
+ 0x0000000000002000 _GLOBAL_OFFSET_TABLE_
+
+ The DATA_SEGMENT_RELRO_END value in the map file is weird too. All of
+ this is triggered by SIZEOF (.got.plt) being evaluated wrongly as
+ zero. Fix it by taking into account the action of
+ lang_reset_memory_regions during relaxation.
+
+ * ldexp.c (fold_name <SIZEOF>): Use rawsize if size has been reset.
+ * ldlang.c (lang_size_sections_1): Don't reset processed_vma here.
+ * testsuite/ld-i386/pie1.d: Adjust to suit.
+ * testsuite/ld-x86-64/pr20830a.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a.d: Likewise.
+ * testsuite/ld-x86-64/pr21038b.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c.d: Likewise.
+
+2022-06-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-25 Fangrui Song <i@maskray.me>
+
+ arm: Define elf_backend_extern_protected_data to 0 [PR 18705]
+ Similar to commit 4fb55bf6a9606eb7b626c30a9f4e71d6c2d4fbb2 for aarch64.
+
+ Commit b68a20d6675f1360ea4db50a9835c073675b9889 changed ld to produce
+ R_ARM_GLOB_DAT but that defeated the purpose of protected visibility
+ as an optimization. Restore the previous behavior (which matches
+ ld.lld) by defining elf_backend_extern_protected_data to 0.
+
+2022-06-25 Tom Tromey <tom@tromey.com>
+
+ Fix corrupt DWARF in dw2-double-set-die-type
+ The dw2-double-set-die-type.exp test case caused an AddressSanitizer
+ failure in the new DWARF scanner.
+
+ The immediate cause was bad DWARF in the test -- in particular, the
+ the sibling attribute here:
+
+ <2><181>: Abbrev Number: 33 (DW_TAG_subprogram)
+ <182> DW_AT_external : 1
+ <183> DW_AT_name : address
+ <18b> DW_AT_type : <0x171>
+ <18f> DW_AT_declaration : 1
+ <190> DW_AT_sibling : <0x1a1>
+ ...
+ <1><1a1>: Abbrev Number: 23 (DW_TAG_pointer_type)
+ <1a2> DW_AT_byte_size : 4
+ <1a3> DW_AT_type : <0x1a7>
+
+ ...points to a "sibling" DIE that is at a different child depth.
+
+ Because this test case doesn't really require sibling attributes, this
+ patch fixes the problem by removing them from the test.
+
+ Note that gdb is not generally robust against malformed DWARF.
+ Detecting and compensating for this problem would probably be
+ expensive and, IMO, is better left to some (still hypothetical) DWARF
+ linter.
+
+2022-06-25 Tom Tromey <tom@tromey.com>
+
+ Fix end of CU calculation in cooked_indexer::index_dies
+ cooked_indexer::index_dies incorrect computes the end of the current
+ CU in the .debug_info. This isn't readily testable without writing
+ intentionally corrupt DWARF, but it's apparent through observation: it
+ is currently based on 'info_ptr', which does not always point to the
+ start of the CU. This patch fixes the expression. Tested on x86-64
+ Fedora 34.
+
+2022-06-25 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Implement loongarch_linux_syscall_next_pc()
+ When FRAME is at a syscall instruction, return the PC of the next
+ instruction to be executed.
+
+ gdb: LoongArch: Define register numbers and clean up code
+ This commit defines register numbers of various important registers,
+ we can use them directly in the related code, and also clean up some
+ code to make them more clear and readable.
+
+2022-06-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-24 Pedro Alves <pedro@palves.net>
+
+ Eliminate TUI/CLI observers duplication
+ For historical reasons, the CLI and the TUI observers are basically
+ exact duplicates, except for the downcast:
+
+ cli:
+ struct cli_interp *cli = as_cli_interp (interp);
+ tui:
+ struct interp *tui = as_tui_interp (interp);
+
+ and how they get at the interpreter's ui_out:
+
+ cli:
+ cli->cli_uiout
+ tui:
+ tui->interp_ui_out ()
+
+ Since interp_ui_out() is a virtual method that also works for the CLI
+ interpreter, and, both the CLI and the TUI interpreters inherit from
+ the same base class (cli_interp_base), we can convert the CLI
+ observers to cast to cli_interp_base instead and use interp_ui_out()
+ too. With that, the CLI observers will work for the TUI interpreter
+ as well. This lets us completely eliminate the TUI observers. That's
+ what this commit does.
+
+ Change-Id: Iaf6cf12dfa200ed3ab203a895a72b69dfedbd6e0
+
+2022-06-24 Pedro Alves <pedro@palves.net>
+
+ Revert "Delete delete_thread_silent"
+ Turns out we'll be gaining a new use of this function very soon, the
+ incoming AMDGPU port needs it. Let's add it back, as it isn't really
+ hurting anything.
+
+ This reverts commit 39b8a8090ed7e8967ceca3655aa5f3a2ae91219d.
+
+2022-06-24 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Update the value of active sp when base sp changes
+ For Arm Cortex-M33 with security extensions, there are 4 different
+ stacks pointers (msp_s, msp_ns, psp_s, psp_ns).
+ When plain "sp" is updated during unwinding of the stack, the active
+ stack pointer of the 4 stack pointers needs to be kept in sync.
+
+2022-06-24 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: remove unneeded calls to get_compiler_info
+ It is not necessary to call get_compiler_info before calling
+ test_compiler_info, and, after recent commits that removed setting up
+ the gcc_compiled, true, and false globals from get_compiler_info,
+ there is now no longer any need for any test script to call
+ get_compiler_info directly.
+
+ As a result every call to get_compiler_info outside of lib/gdb.exp is
+ redundant, and this commit removes them all.
+
+ There should be no change in what is tested after this commit.
+
+2022-06-24 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: remove global gcc_compiled from gdb.exp
+ After this commit the gcc_compiled global is no longer exported from
+ lib/gdb.exp. In theory we could switch over all uses of gcc_compiled
+ to instead call test_compiler_info directly, however, I have instead
+ added a new proc to gdb.exp: 'is_c_compiler_gcc'. I've then updated
+ the testsuite to call this proc instead of using the global.
+
+ Having a new proc specifically for this task means that we have a
+ single consistent pattern for detecting gcc. By wrapping this logic
+ within a proc that calls test_compiler_info, rather than using the
+ global, means that test scripts don't need to call get_compiler_info
+ before they read the global, simply calling the new proc does
+ everything in one go.
+
+ As a result I've been able to remove the get_compiler_info calls from
+ all the test scripts that I've touched in this commit.
+
+ In some of the tests e.g. gdb.dwarf2/*.exp, the $gcc_compiled flag was
+ being checked at the top of the script to decide if the whole script
+ should be skipped or not. In these cases I've called the new proc
+ directly and removed all uses of gcc_compiled.
+
+ In other cases, e.g. most of the gdb.base scripts, there were many
+ uses of gcc_compiled. In these cases I set a new global gcc_compiled
+ near the top of the script, and leave the rest of the script
+ unchanged.
+
+ There should be no changes in what is tested after this commit.
+
+2022-06-24 Pedro Alves <pedro@palves.net>
+
+ Include count of unexpected core files in gdb.sum summary
+ If GDB, GDBserver, a testcase program, Valgrind, etc. unexpectedly
+ crash while running the GDB testsuite, and you've setup your machine
+ such that core files are dumped in the current directory instead of
+ being shoved somewhere by abrt, apport, or similar (as you should for
+ proper GDB testing), you'll end up with an unexpected core file in the
+ $build/gdb/testsuite/ directory.
+
+ It can happen that GDB, GDBserver, etc. even crashes _after_ gdb_exit,
+ during teardown, and thus such a crash won't be noticed by looking at
+ the gdb.sum file at all. This commit aims at improving that, by
+ including a new "unexpected core files" line in the testrun summary.
+
+ For example, here's what I get on x86-64 Ubuntu 20.04, with this
+ patch:
+
+ === gdb Summary ===
+
+ # of unexpected core files 12 << new info
+ # of expected passes 107557
+ # of unexpected failures 35
+ # of expected failures 77
+ # of unknown successes 2
+ # of known failures 114
+ # of untested testcases 31
+ # of unsupported tests 139
+
+ I have my core pattern setup like this:
+
+ $ cat /proc/sys/kernel/core_pattern
+ core.%e.%p.%h.%t
+
+ That's:
+
+ %e: executable filename
+ %p: pid
+ %h: hostname
+ %t: UNIX time of dump
+
+ and so I get these core files:
+
+ $ ls -1 testsuite/core.*
+ testsuite/core.connect-with-no.216191.nelson.1656002431
+ testsuite/core.connect-with-no.217729.nelson.1656002431
+ testsuite/core.gdb.194247.nelson.1656002423
+ testsuite/core.gdb.226014.nelson.1656002435
+ testsuite/core.gdb.232078.nelson.1656002438
+ testsuite/core.gdb.352268.nelson.1656002441
+ testsuite/core.gdb.4152093.nelson.1656002337
+ testsuite/core.gdb.4154515.nelson.1656002338
+ testsuite/core.gdb.4156668.nelson.1656002339
+ testsuite/core.gdb.4158871.nelson.1656002341
+ testsuite/core.gdb.468495.nelson.1656002444
+ testsuite/core.vgdb.4192247.nelson.1656002366
+
+ where we can see that GDB crashed a number of times, but also
+ Valgrind's vgdb, and a couple testcase programs. Neither of which is
+ good.
+
+ If your core_pattern is just "core" (but why??), then I guess that you
+ may end up with just a single core file in testsuite/. Still, that is
+ one core file too many.
+
+ Above, we see a couple cores for "connect-with-no", which are the
+ result of gdb.server/connect-with-no-symbol-file.exp. This is a case
+ mentioned above -- while the program crashed, that happens during
+ testcase teardown, and it goes unnoticed (without this commit) by
+ gdb.sum results. Vis:
+
+ $ make check TESTS="gdb.server/connect-with-no-symbol-file.exp"
+ ...
+ === gdb Summary ===
+
+ # of unexpected core files 2
+ # of expected passes 8
+
+ ...
+ $
+
+ The tests fully passed, but still the testcase program crashed
+ somehow:
+
+ $ ls -1 testsuite/core.*
+ testsuite/core.connect-with-no.941561.nelson.1656003317
+ testsuite/core.connect-with-no.941682.nelson.1656003317
+
+ Against --target_board=native-extended-gdbserver it's even worse. I
+ get:
+
+ # of unexpected core files 26
+
+ and note that when GDBserver hits an assertion failure, it exits with
+ error, instead of crashing with SIGABRT. I think that should be
+ changed, at least on development builds, but that would be for another
+ patch. After such patch, I suspect the number of unexpected cores
+ will be higher, as there are likely teardown GDBserver assertions that
+ we're not noticing.
+
+ I decided to put this new info in the "gdb Summary" section, as that's
+ a place people already are used to looking at, either when looking at
+ the tail of gdb.sum, or when diffing gdb.sum files, and we've already
+ extended this section before, to include the count of DUPLICATE and
+ PATH problems, so there's precedent.
+
+ Implementation-wise, the new line is appended after DejaGnu is
+ finished, with a shell script that is invoked by the Makefile. It is
+ done this way so that serial and parallel testing work the same way.
+ My initial cut at an implementation was in TCL, straight in
+ testsuite/lib/check-test-names.exp, where DUPLICATES and PATH are
+ handled, like so:
+
+ @@ -148,6 +159,10 @@ namespace eval ::CheckTestNames {
+ $counts(paths,$which)
+ maybe_show_count "# of duplicate test names\t" \
+ $counts(duplicates,$which)
+ +
+ + set cores [glob -nocomplain -directory $::objdir core*]
+ + maybe_show_count "# of unexpected core files\t" \
+ + [llength $cores]
+ }
+
+ But that would only work for serial testing, as in parallel testing,
+ the final gdb.sum is generated by aggregating the results of all the
+ individual gdb.sum files, and dg-extract-results.sh doesn't know about
+ our new summary line. And I don't think that dg-extract-results.sh
+ should be taught about it, since the count of core files is not
+ something that we want to count many times, once per testcase, and
+ then add up the subcounts at the end. Every time we count the core
+ files, we're already counting the final count.
+
+ I considered using the Tcl implementation in serial mode, and the
+ script approach for parallel testing, but that has the obvious
+ downside of implementing and maintaining the same thing twice. In the
+ end, I settled on the script approach for serial mode too, which
+ requires making the "check-single" rule print the tail end of the
+ gdb.sum file, with a side effect being that if you look at the
+ terminal after a run (instead of at the gdb.sum file), you'll see the
+ "gdb Summary" section twice, once without the unexpected core lines
+ printed, and then another with. IMO, this isn't an issue; when
+ testing in parallel mode, if you look at the terminal after "make -jN
+ check", you'll also see multiple "gdb Summary" sections printed.
+
+ Change-Id: I190b8d41856d49ad143854b6e3e6ccd7caa04491
+
+2022-06-24 Pedro Alves <pedro@palves.net>
+
+ Improve core file path detection & put cores in output dir
+ After a testrun, I noticed that I have some kernel-produced cores for
+ testcase programs, under build/gdb/testsuite/, which shouldn't be
+ there:
+
+ $ ls -1 testsuite/core.*
+ testsuite/core.annota1.1274351.nelson.1656004407
+ testsuite/core.annota3.1288474.nelson.1656004414
+ testsuite/core.exitsignal.1240674.nelson.1656004391
+
+ I have my core pattern setup like this:
+
+ $ cat /proc/sys/kernel/core_pattern
+ core.%e.%p.%h.%t
+
+ That's:
+
+ %e: executable filename
+ %p: pid
+ %h: hostname
+ %t: UNIX time of dump
+
+ so it's easy to tell which program produced the core from the core
+ file name.
+
+ From above, we can tell that the corresponding testcases are
+ gdb.base/annota1.exp, gdb.base/annota3.exp and
+ gdb.base/exitsignal.exp.
+
+ At least gdb.base/annota1.exp and gdb.base/annota3.exp have code in
+ them to delete the core file. However, that isn't working for me,
+ because said code only looks for cores named exactly either "core" or
+ "core.PID", and my core_pattern doesn't match that.
+
+ Another issue I noticed, is that I have not been running
+ gdb.base/bigcore.exp, for a similar reason. I get:
+
+ Program terminated with signal SIGABRT, Aborted.
+ The program no longer exists.
+ (gdb) PASS: gdb.base/bigcore.exp: signal SIGABRT
+ UNTESTED: gdb.base/bigcore.exp: can't generate a core file
+
+ But I actually have a core file under the testcase's output dir:
+
+ $ find . -name "core.*"
+ ./testsuite/outputs/gdb.base/bigcore/core.bigcore.2306705.nelson.1656005213
+ $
+
+ This commit fixes these things, by adding a find_core_file routine
+ that searches core files in a way that works with my core pattern as
+ well. This then also adds a convenience remove_core routine as a
+ wrapper around find_core_file that removes the found core file.
+
+ In addition, it changes some testcases that expect to have their
+ program dump core, to switch the inferior's cwd to the testcase's
+ output dir, so that the core is dumped there instead of in
+ build/gdb/testsuite/. Some testcases were already doing that, but not
+ all. The idea is that any core file dumped in build/gdb/testsuite/ is
+ an unexpected core file. The next patch will add a count of such
+ unexpected core files to gdb.sum.
+
+ Another change is that the directory changing is now done with "set
+ cwd" instead of with "cd". "set cwd" only affects the inferior cwd,
+ while "cd" affects GDB's cwd too. By using "set cwd" instead of "cd",
+ if GDB dumps core in these testcases, the GDB core dump will still end
+ up in build/gdb/testsuite/, and can thus be detected as an unexpected
+ core.
+
+ Change-Id: I45068f21ffd4814350aaa8a3cc65cad5e3107607
+
+2022-06-24 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make use of RAII in run_inferior_call
+ In passing I noticed that there are three local variables in
+ run_inferior_call that are used to save, and then restore some state,
+ I think these could all be replaced with a RAII style scoped_restore
+ instead.
+
+ Of the three locals that I've changed, the only one that I believe is
+ now restored in a different location is ui::async, before this commit
+ the async field was restored after a call to either delete_file_handle
+ or ui_register_input_event_handler, and after this commit, the field
+ is restored before these calls. However, I don't believe that either
+ of these functions depend on the value of the async field, so I
+ believe the commit is fine.
+
+ Tested on x86-64/Linux passes with no regressions.
+
+2022-06-24 Pedro Alves <pedro@palves.net>
+
+ Delete delete_thread_silent
+ delete_thread_silent is no longer used anywhere. Delete it.
+
+ Change-Id: Iafcec12339861d5ab2e29c14d7b1f884c9e11c0f
+
+2022-06-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-23 Tom Tromey <tromey@adacore.com>
+
+ Don't declare cli_set_logging
+ cli_set_logging is declared but not defined. It's probably a leftover
+ from whenever interpreters were changed to use inheritance. This
+ patch removes the declaration. Tested by grep and rebuilding.
+
+ Use PyBool_FromLong
+ I noticed a few spots that were explicitly creating new references to
+ Py_True or Py_False. It's simpler here to use PyBool_FromLong, so
+ this patch changes all the places I found.
+
+2022-06-23 Alan Modra <amodra@gmail.com>
+
+ PowerPC64: fix assertion in ppc_build_one_stub with -Os code
+ save_res stubs aren't written in ppc_build_one_stub, their offsets
+ (which are zero) should not be checked.
+
+ * elf64-ppc.c (ppc_build_one_stub): Don't check save_res offsets.
+
+2022-06-23 Alan Modra <amodra@gmail.com>
+
+ Re: PowerPC64: stub debug dump
+ Let's show the current stub as well as the previous one. Of interest
+ is the current offset and a new field, id. Check that the build
+ hash table traversal is in the same order as sizing traversal too.
+
+ * elf64-ppc.c (struct ppc_stub_hash_entry): Add id.
+ (struct ppc_link_hash_table): Add stub_id.
+ (stub_hash_newfunc): Init id and symtype.
+ (dump_stub): New function, extracted from..
+ (dump_previous_stub): ..here. Deleted.
+ (ppc_build_one_stub): Sanity check stub id as well as offset.
+ Show current stub as well as previous.
+ (ppc_size_one_stub): Set stub id.
+ (ppc64_elf_size_stubs): Init stub_id before traversal.
+ (ppc64_elf_build_stubs): Likewise.
+
+2022-06-23 Fangrui Song <maskray@google.com>
+
+ aarch64: Allow PC-relative relocations against protected STT_FUNC for -shared
+ __attribute__((visibility("protected"))) void *foo() {
+ return (void *)foo;
+ }
+
+ gcc -fpic -shared -fuse-ld=bfd fails with the confusing diagnostic:
+
+ relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `foo' which may bind externally can not be used when making a shared object; recompile with -fPIC
+
+ Call _bfd_elf_symbol_refs_local_p with local_protected==true to suppress
+ the error. The new behavior matches gold and ld.lld.
+
+ Note: if some code tries to use direct access relocations to take the
+ address of foo (likely due to -fno-pic), the pointer equality will
+ break, but the error should be reported on the executable link, not on
+ the innocent shared object link. glibc 2.36 will give a warning at
+ relocation resolving time.
+
+2022-06-23 Fangrui Song <maskray@google.com>
+
+ aarch64: Define elf_backend_extern_protected_data to 0 [PR 18705]
+ Follow-up to commit 90b7a5df152a64d2bea20beb438e8b81049a5c30
+ ("aarch64: Disallow copy relocations on protected data").
+
+ Commit 32f573bcb3aaa1c9defcad79dbb5851fcc02ae2d changed ld to produce
+ R_AARCH64_GLOB_DAT but that defeated the purpose of protected visibility
+ as an optimization. Restore the previous behavior (which matches
+ ld.lld) by defining elf_backend_extern_protected_data to 0.
+
+2022-06-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-22 Tom Tromey <tromey@adacore.com>
+
+ Use std::string for interpreter_p
+ The global interpreter_p is a manually-managed 'char *'. This patch
+ changes it to be a std::string instead, and removes some erroneous
+ comments.
+
+ Move mi_interpreter to mi-interp.h
+ I noticed that touching interps.h caused a lot of recompilation. I
+ tracked this down to mi-common.h including this file. This patch
+ moves the MI interpreter to mi-interp.h, which cuts down on
+ recompilation when modifying interps.h.
+
+ Use unique_xmalloc_ptr in interp
+ This changes interp::m_name to be a unique_xmalloc_ptr, removing some
+ manual memory management. It also cleans up the initialization of the
+ 'inited' member, and moves the 'private:' and 'public:' keywords to
+ their proper spots.
+
+2022-06-22 Fangrui Song <i@maskray.me>
+
+ aarch64: Disallow copy relocations on protected data
+ If an executable has copy relocations for extern protected data, that
+ can only work if the shared object containing the definition is built
+ with assumptions (a) the compiler emits GOT-generating relocations (b)
+ the linker produces R_*_GLOB_DAT instead of R_*_RELATIVE. Otherwise the
+ shared object uses its own definition directly and the executable
+ accesses a stale copy. Note: the GOT relocations defeat the purpose of
+ protected visibility as an optimization, and it turns out this never
+ worked perfectly.
+
+ glibc 2.36 will warn on copy relocations on protected data. Let's
+ produce a warning at link time, matching ld.lld which has been used on
+ many aarch64 OSes.
+
+ Note: x86 requires GNU_PROPERTY_NO_COPY_ON_PROTECTED to have the error.
+ This is to largely due to GCC 5's "x86-64: Optimize access to globals in
+ PIE with copy reloc" which started to use direct access relocations for
+ external data symbols in -fpie mode.
+
+ GCC's aarch64 port does not have the change. Nowadays with most builds
+ switching to -fpie/-fpic, aarch64 mostly doesn't need to worry about
+ copy relocations. So for aarch64 we simply don't check
+ GNU_PROPERTY_NO_COPY_ON_PROTECTED.
+
+2022-06-22 Kumar N, Bhuvanendra <Kavitha.Natarajan@amd.com>
+
+ Binutils support for split-dwarf and dwarf-5
+ * dwarf.c (fetch_indexed_string): Added new parameter
+ str_offsets_base to calculate the string offset.
+ (read_and_display_attr_value): Read DW_AT_str_offsets_base
+ attribute.
+ (process_debug_info): While allocating memory and initializing
+ debug_information, do it for do_debug_info also, if its true.
+ (load_separate_debug_files): Load .debug_str_offsets if exists.
+ * dwarf.h (struct debug_info): Add str_offsets_base field.
+
+2022-06-22 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Reorder the prefixed extensions which are out of order.
+ This patch has been pending for almost a year... However, I noticed that
+ llvm can already re-order the extensions, even if they are out of orders.
+ Not really sure if they can also re-order the single letter extensions,
+ but at least we can do this for the multi-letter extensions in binutils.
+
+ bfd/
+ * elfxx-riscv.c (riscv_parse_prefixed_ext): Removed the code which are
+ used to check the prefixed extension orders.
+ gas/
+ * testsuite/gas/riscv/march-fail-order-x-z.d: Removed since we will help
+ tp reorder the prefixed extensions for now.
+ * testsuite/gas/riscv/march-fail-order-x-z.l: Likewise.
+ * testsuite/gas/riscv/march-fail-order-x.d: Likewise.
+ * testsuite/gas/riscv/march-fail-order-x.l: Likewise.
+ * testsuite/gas/riscv/march-fail-order-z.d: Likewise.
+ * testsuite/gas/riscv/march-fail-order-z.l: Likewise.
+
+2022-06-22 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Use single h extension to control hypervisor CSRs and instructions.
+ According to the picture 28.1 in the current ISA spec, h is no larger the
+ multi-letter extension, it is a single extension after v. Therefore, this
+ patch fix the implementation, and use the single h to control hypervisor
+ CSRs and instructions, which we promised to do before.
+
+ bfd/
+ * elfxx-riscv.c (riscv_supported_std_ext): Added h with version 1.0 after v.
+ (riscv_supported_std_h_ext): Removed.
+ (riscv_all_supported_ext): Updated since riscv_supported_std_h_ext is removed.
+ (riscv_prefix_ext_class): Removed RV_ISA_CLASS_H.
+ (parse_config): Updated since riscv_prefix_ext_class is removed.
+ (riscv_recognized_prefixed_ext): Likewise.
+ (riscv_get_default_ext_version): Likewise.
+ (riscv_multi_subset_supports): Handle INSN_CLASS_H for hypervisor instructions.
+ (riscv_multi_subset_supports_ext): Likewise.
+ gas/
+ * config/tc-riscv.c (riscv_csr_class): Added CSR_CLASS_H and CSR_CLASS_H_32 for
+ hypervisor CSRs.
+ (riscv_csr_address): Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.d: Updated since hypervisor CSRs are
+ controlled by single h extension for now.
+ * testsuite/gas/riscv/csr-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+ * testsuite/gas/riscv/h-ext-32.d: Added h to architecture string.
+ * testsuite/gas/riscv/h-ext-64.d: Likewise.
+ * testsuite/gas/riscv/march-fail-single-prefix-h: Removed since h is no
+ longer multi-letter extension.
+ * testsuite/gas/riscv/march-fail-unknown-h.d: Likewise.
+ include/
+ * opcode/riscv-opc.h: Control hypervisor CSRs by h extension, rather than
+ the privileged spec verisons.
+ * opcode/riscv.h (riscv_insn_class): Added INSN_CLASS_H.
+ opcodes/
+ * riscv-opc.c (riscv_opcodes): Control hypervisor instructions by h extension.
+
+2022-06-22 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Add 'H' to canonical extension ordering
+ This commit adds 'H' to canonical extension ordering based on current
+ consensus (not officially ratified as a new ISA specification manual
+ but discussion for software compatibility is made).
+
+ bfd/ChangeLog
+
+ * elfxx-riscv.c (riscv_ext_canonical_order): Add 'H' for
+ canonical extension ordering based on current consensus.
+
+2022-06-22 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Prepare i18n for required ISA extensions
+ Some strings returned by the riscv_multi_subset_supports_ext function
+ contain not just extension names but words like "and" and "or".
+ This commit wraps such strings with the gettext macro (_) for
+ internationalization in the future.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_multi_subset_supports_ext): Wrap some
+ strings with the gettext macro to prepare future i18n.
+
+2022-06-22 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Fix inconsistent error message (range)
+ This commit fixes inconsistent error message format involving compressed
+ funct<n> fields. In specific, funct6 had an error message with range
+ 0..2^<n> ("0..64") unlike other funct<n> fields with 0..2^<n>-1
+ (e.g. funct4 with "0..15").
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c (riscv_ip): Fix inconsistent error message.
+
+2022-06-22 Marcus Nilsson <brainbomb@gmail.com>
+
+ readelf: replace xmalloc with malloc in slurp_relr_relocs
+ Using xmalloc makes the null check redundant since failing allocation
+ will exit the program. Instead use malloc and let the error be
+ conveyed up the call chain.
+
+2022-06-22 Alan Modra <amodra@gmail.com>
+
+ PowerPC64: stub debug dump
+ powerpc64le-linux-ld is failing the assertion in ppc_build_one_stub,
+ again apparently, which means a stub will overwrite the tail of a
+ previous stub. The difficulty with debugging these issues is that
+ it's not a problem with the stub that triggers the assertion, but the
+ previous stub in that section. This patch keeps track of the last
+ stub and adds a debug dump. Hopefully that will help.
+
+ * elf64-ppc.c (enum _ppc64_sec_type): Add sec_stub.
+ (struct _ppc64_elf_section_data): Add u.last_ent.
+ (dump_previous_stub): New function.
+ (ppc_build_one_stub): Keep track of previous stub, and dump it
+ when finding an overlapping stub.
+
+2022-06-22 Alan Modra <amodra@gmail.com>
+
+ PR29270, DW_FORM_udata signed output
+ PR 29270
+ * dwarf.c (read_and_display_attr_value): Output DW_FORM_udata
+ as unsigned.
+
+2022-06-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-21 Nick Alcock <nick.alcock@oracle.com>
+
+ ld: regenerate configure after recent misgeneration
+ Things work again after this.
+
+ ld/ChangeLog:
+
+ * configure: Regenerate.
+
+2022-06-21 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: tests: prune warnings from compiler output
+ We were failing to call prune_warnings appropriately, leading to
+ false-positive test failures on some platforms (observed on
+ sparclinux).
+
+ libctf/ChangeLog:
+
+ * testsuite/lib/ctf-lib.exp: Prune warnings from compiler and
+ linker output.
+ * testsuite/libctf-regression/libctf-repeat-cu.exp: Likewise,
+ and ar output too.
+
+2022-06-21 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: avoid mingw warning
+ A missing paren led to an intended cast to avoid dependence on the size
+ of size_t in one argument of ctf_err_warn applying to the wrong type by
+ mistake.
+
+ libctf/ChangeLog:
+
+ * ctf-serialize.c (ctf_write_mem): Fix cast.
+
+2022-06-21 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: fix linking together multiple objects derived from the same source
+ Right now, if you compile the same .c input repeatedly with CTF enabled
+ and different compilation flags, then arrange to link all of these
+ together, then things misbehave in various ways. libctf may conflate
+ either inputs (if the .o files have the same name, say if they are
+ stored in different .a archives), or per-CU outputs when conflicting
+ types are found: the latter can lead to entirely spurious errors when
+ it tries to produce multiple per-CU outputs with the same name
+ (discarding all but the last, but then looking for types in the earlier
+ ones which have just been thrown away).
+
+ Fixing this is multi-pronged. Both inputs and outputs need to be
+ differentiated in the hashtables libctf keeps them in: inputs with the
+ same cuname and filename need to be considered distinct as long as they
+ have different associated CTF dicts, and per-CU outputs need to be
+ considered distinct as long as they have different associated input
+ dicts. Right now there is nothing tying the two together other than the
+ CU name: fix this by introducing a new field in the ctf_dict_t named
+ ctf_link_in_out, which (for input dicts) points to the associated per-CU
+ output dict (if any), and for output dicts points to the associated
+ input dict. At creation time the name used is completely arbitrary:
+ it's only important that it be distinct if CTF dicts are distinct. So,
+ when a clash is found, adjust the CU name by sticking the number of
+ elements in the input on the end. At output time, the CU name will
+ appear in the linked object, so it matters a little more that it look
+ slightly less ugly: in conflicting cases, append an incrementing
+ integer, starting at 0.
+
+ This naming scheme is not very helpful, but it's hard to see what else
+ we can do. The input .o name may be the same. The input .a name is not
+ even visible to ctf_link, and even *that* might be the same, because
+ .a's can contain many members with the same name, all of which
+ participate in the link. All we really know is that the two have
+ distinct dictionaries with distinct types in them, and at least this way
+ they are all represented, any any symbols, variables etc referring to
+ those types are accurately stored.
+
+ (As a side-effect this also fixes a use-after-free and double-free when
+ errors are found during variable or symbol emission.)
+
+ Use the opportunity to prevent a couple of sources of problems, to wit
+ changing the active CU mappings when a link has already been done
+ (no effect on ld, which doesn't use CU mappings at all), and causing
+ multiple consecutive ctf_link's to have the same net effect as just
+ doing the last one (no effect on ld, which only ever does one
+ ctf_link) rather than having the links be a sort of half-incremental
+ not-really-intended mess.
+
+ libctf/ChangeLog:
+
+ PR libctf/29242
+ * ctf-impl.h (struct ctf_dict) [ctf_link_in_out]: New.
+ * ctf-dedup.c (ctf_dedup_emit_type): Set it.
+ * ctf-link.c (ctf_link_add_ctf_internal): Set the input
+ CU name uniquely when clashes are found.
+ (ctf_link_add): Document what repeated additions do.
+ (ctf_new_per_cu_name): New, come up with a consistent
+ name for a new per-CU dict.
+ (ctf_link_deduplicating): Use it.
+ (ctf_create_per_cu): Use it, and ctf_link_in_out, and set
+ ctf_link_in_out properly. Don't overwrite per-CU dicts with
+ per-CU dicts relating to different inputs.
+ (ctf_link_add_cu_mapping): Prevent per-CU mappings being set up
+ if we already have per-CU outputs.
+ (ctf_link_one_variable): Adjust ctf_link_per_cu call.
+ (ctf_link_deduplicating_one_symtypetab): Likewise.
+ (ctf_link_empty_outputs): New, delete all the ctf_link_outputs
+ and blank out ctf_link_in_out on the corresponding inputs.
+ (ctf_link): Clarify the effect of multiple ctf_link calls.
+ Empty ctf_link_outputs if it already exists rather than
+ having the old output leak into the new link. Fix a variable
+ name.
+ * testsuite/config/default.exp (AR): Add.
+ (OBJDUMP): Likewise.
+ * testsuite/libctf-regression/libctf-repeat-cu.exp: New test.
+ * testsuite/libctf-regression/libctf-repeat-cu*: Main program,
+ library, and expected results for the test.
+
+2022-06-21 Kevin Buettner <kevinb@redhat.com>
+
+ Document how GDB searches for files when using -s, -e, and -se options
+ GDB's documentation of the 'file' command says:
+
+ If you do not specify a directory and the file is not found in the
+ GDB working directory, GDB uses the environment variable PATH as a
+ list of directories to search, just as the shell does when looking
+ for a program to run.
+
+ The same is true for files specified via commandline options -s, -e,
+ and -se.
+
+ This commit adds a cross reference to the file command for these options.
+
+2022-06-21 Nick Clifton <nickc@redhat.com>
+
+ Binutils support for dwarf-5 (location and range lists related)
+ * dwarf.h (struct debug_info): Add rnglists_base field.
+ * dwarf.c (read_and_display_attr_value): Read attribute DW_AT_rnglists_base.
+ (display_debug_rnglists_list): While handling DW_RLE_base_addressx,
+ DW_RLE_startx_endx, DW_RLE_startx_length items, pass the proper parameter
+ value to fetch_indexed_addr(), i.e. fetch the proper entry in .debug_addr section.
+ (display_debug_ranges): Add rnglists_base to the .debug_rnglists base address.
+ (load_separate_debug_files): Load .debug_addr section, if exists.
+
+ Default to disabling the linker warnings about execstack and RWX segments if the target is the HPPA architecture.
+ PR 29263
+ * configure.ac (ac_default_ld_warn_execstack): Default to 'no' for
+ HPPA targets.
+ (ac_default_ld_warn_rwx_segments): Likewise.
+ * configure: Regenerate.
+ * testsuite/ld-elf/elf.exp: Add the --warn-execstack command line
+ option to the command line when running execstack tests for the
+ HPPA target.
+
+2022-06-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-20 Tom Tromey <tromey@adacore.com>
+
+ Move finish_print out of value_print_options
+ 'finish_print' does not really belong in value_print_options -- this
+ is consulted only when deciding whether or not to print a value, and
+ never during the course of printing. This patch removes it from the
+ structure and makes it a static global in infcmd.c instead.
+
+ Tested on x86-64 Fedora 34.
+
+2022-06-20 Alan Modra <amodra@gmail.com>
+
+ PR29262, memory leak in pr_function_type
+ PR 29262
+ * prdbg.c (pr_function_type): Free "s" on failure path.
+
+ PR29261, memory leak in parse_stab_struct_fields
+ PR 29261
+ * stabs.c (parse_stab_struct_fields): Free "fields" on failure path.
+
+2022-06-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-18 Tom Tromey <tom@tromey.com>
+
+ Fix assertion failure in copy_type
+ PR exp/20630 points out a simple way to cause an assertion failure in
+ copy_type -- but this was found in the wild a few times as well.
+
+ copy_type only works for objfile-owned types, but there isn't a deep
+ reason for this. This patch fixes the bug by updating copy_type to
+ work for any sort of type.
+
+ Better would perhaps be to finally implement type GC, but I still
+ haven't attempted this.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20630
+
+2022-06-18 Tomoaki Kawada <kawada@kmckk.co.jp>
+
+ Fix the sorting algorithm for reloc entries
+ The optimized insertion sort algorithm in `elf_link_adjust_relocs`
+ incorrectly assembled "runs" from unsorted entries and inserted them to an
+ already-sorted prefix, breaking the loop invariants of insertion sort.
+ This commit updates the run assembly loop to break upon encountering a
+ non-monotonic change in the sort key.
+
+ PR 29259
+ bfd/
+ * elflink.c (elf_link_adjust_relocs): Ensure run being inserted
+ is sorted.
+ ld/
+ * testsuite/ld-elf/pr29259.d,
+ * testsuite/ld-elf/pr29259.s,
+ * testsuite/ld-elf/pr29259.t: New test.
+
+2022-06-18 Enze Li <enze.li@hotmail.com>
+
+ gdb/python: Export nibbles to python layer
+ This patch makes it possible to allow Value.format_string() to return
+ nibbles output.
+
+ When we set the parameter of nibbles to True, we can achieve the
+ displaying binary values in groups of every four bits.
+
+ Here's an example:
+ (gdb) py print (gdb.Value (1230).format_string (format='t', nibbles=True))
+ 0100 1100 1110
+ (gdb)
+
+ Note that the parameter nibbles is only useful if format='t' is also used.
+
+ This patch also includes update to the relevant testcase and
+ documentation.
+
+ Tested on x86_64 openSUSE Tumbleweed.
+
+2022-06-18 Enze Li <enze.li@hotmail.com>
+
+ gdb/doc: Documentation for the new print command
+ Document the new command "print nibbles" and add a NEWS entry.
+
+2022-06-18 Enze Li <enze.li@hotmail.com>
+
+ gdb: Add new 'print nibbles' feature
+ Make an introduction of a new print setting that can be set by 'set
+ print nibbles [on|off]'. The default value if OFF, which can be changed
+ by user manually. Of course, 'show print nibbles' is also included in
+ the patch.
+
+ The new feature displays binary values by group, with four bits per
+ group. The motivation for this work is to enhance the readability of
+ binary values.
+
+ Here's a GDB session before this patch is applied.
+ (gdb) print var_a
+ $1 = 1230
+ (gdb) print/t var_a
+ $2 = 10011001110
+
+ With this patch applied, we can use the new print setting to display the
+ new form of the binary values.
+ (gdb) print var_a
+ $1 = 1230
+ (gdb) print/t var_a
+ $2 = 10011001110
+ (gdb) set print nibbles on
+ (gdb) print/t var_a
+ $3 = 0100 1100 1110
+
+ Tested on x86_64 openSUSE Tumbleweed.
+
+2022-06-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-17 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: NEWS: Move LoongArch gdbserver to the correct section
+ commit e5ab6af52d38 ("gdbserver: Add LoongArch/Linux support")
+ was merged into the master since GDB 12, so we should put the
+ news in the "Changes since GDB 12" section.
+
+ Thanks Tom Tromey for your correction [1], sorry for that.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-June/190122.html
+
+2022-06-17 Alan Modra <amodra@gmail.com>
+
+ PR29256, memory leak in obj_elf_section_name
+ When handling section names in quotes obj_elf_section_name calls
+ demand_copy_C_string, which puts the name on the gas notes obstack.
+ Such strings aren't usually freed, since obstack_free frees all more
+ recently allocated objects as well as its arg. When handling
+ non-quoted names, obj_elf_section_name mallocs the name. Due to the
+ mix of allocation strategies it isn't possible for callers to free
+ names, if that was desirable. Partially fix this by always creating
+ names on the obstack, which is more efficient anyway. (You still
+ can't obstack_free on error paths due to the xtensa
+ tc_canonicalize_section_name.) Also remove a couple of cases where
+ the name is dup'd for no good reason as far as I know.
+
+ PR 29256
+ * config/obj-elf.c (obj_elf_section_name): Create name on notes
+ obstack.
+ (obj_elf_attach_to_group): Don't strdup group name.
+ (obj_elf_section): Likewise.
+ (obj_elf_vendor_attribute): Use xmemdup0 rather than xstrndup.
+
+2022-06-17 Alan Modra <amodra@gmail.com>
+
+ PR29255, memory leak in make_tempdir
+ PR 29255
+ * bucomm.c (make_tempdir, make_tempname): Free template on all
+ failure paths.
+
+ PR29254, memory leak in stab_demangle_v3_arg
+ PR 29254
+ * stabs.c (stab_demangle_v3_arg): Free dt on failure path.
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ Fix GDB build with GCC 4.8 & 4.9
+ With gcc 4.8/4.9, we run into this build failure (and other similar
+ ones):
+
+ /home/palves/gdb/binutils-gdb/src/gdb/location.h:224:59: error: could not convert ‘{0, LINE_OFFSET_UNKNOWN}’ from ‘<brace-enclosed initializer list>’ to ‘line_offset’
+ struct line_offset line_offset = {0, LINE_OFFSET_UNKNOWN};
+ ^
+
+ The issue is that at around the GCC 4.8/4.9 era, a default member
+ initializer prevented the struct from being an aggregate, so you
+ cannot use aggregate initialization on them. That rule changed after
+ GCC 4.9 and GCC 5 & later uses new rules.
+
+ Fix this by not using aggregate initialization for struct line_offset.
+ The default member initization already leaves line_offset as {0,
+ LINE_OFFSET_UNKNOWN}, so initialization to those values can just go
+ away. The remaining cases are of the form {0, LINE_OFFSET_NONE}, and
+ those cases can be better rewritten to delay setting the sign field
+ until we know we have a valid offset.
+
+ Change-Id: I0506ea4a83c5fa2f15e159569db68b3b0a7509b4
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ Convert set_location_spec_string to a method
+ This converts set_location_spec_string to a method of location_spec,
+ and makes the location_spec::as_string field protected, renaming it to
+ m_as_string along the way.
+
+ Change-Id: Iccfb1654e9fa7808d0512df89e775f9eacaeb9e0
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ Convert location_spec_to_string to a method
+ This converts location_spec_to_string to a method of location_spec,
+ simplifying the code using it, as it no longer has to use
+ std::unique_ptr::get().
+
+ Change-Id: I621bdad8ea084470a2724163f614578caf8f2dd5
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ Convert location_spec_type to a method
+ This converts location_spec_type to location_spec::type().
+
+ Change-Id: Iff4cbfafb1cf3d22adfa142ff939b4a148e52273
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ Convert location_spec_empty_p to a method
+ This converts location_spec_empty_p to a method of location_spec,
+ simplifying users, as they no longer have to use
+ std::unique_ptr::get().
+
+ Change-Id: I83381a729896f12e1c5a1b4d6d4c2eb1eb6582ff
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ Eliminate copy_location_spec
+ copy_location_spec is just a wrapper around location_spec::clone(), so
+ remove it and call clone() directly. This simplifies users, as they
+ no longer have to use std::unique_ptr::get().
+
+ Change-Id: I8ce8658589460b98888283b306b315a5b8f73976
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ Eliminate the two-level data structures behind location_specs
+ Currently, there's the location_spec hierarchy, and then some
+ location_spec subclasses have their own struct type holding all their
+ data fields.
+
+ I.e., there is this:
+
+ location_spec
+ explicit_location_spec
+ linespec_location_spec
+ address_location_spec
+ probe_location_spec
+
+ and then these separate types:
+
+ explicit_location
+ linespec_location
+
+ where:
+
+ explicit_location_spec
+ has-a explicit_location
+ linespec_location_spec
+ has-a linespec_location
+
+ This patch eliminates explicit_location and linespec_location,
+ inlining their members in the corresponding location_spec type.
+
+ The location_spec subclasses were the ones currently defined in
+ location.c, so they are moved to the header. Since the definitions of
+ the classes are now visible, we no longer need location_spec_deleter.
+
+ Some constructors that are used for cloning location_specs, like:
+
+ explicit explicit_location_spec (const struct explicit_location *loc)
+
+ ... were converted to proper copy ctors.
+
+ In the process, initialize_explicit_location is eliminated, and some
+ functions that returned the "data type behind a locspec", like
+ get_linespec_location are converted to downcast functions, like
+ as_linespec_location_spec.
+
+ Change-Id: Ia31ccef9382b25a52b00fa878c8df9b8cf2a6c5a
+
+2022-06-17 Pedro Alves <pedro@palves.net>
+
+ event_location -> location_spec
+ Currently, GDB internally uses the term "location" for both the
+ location specification the user input (linespec, explicit location, or
+ an address location), and for actual resolved locations, like the
+ breakpoint locations, or the result of decoding a location spec to
+ SaLs. This is expecially confusing in the breakpoints module, as
+ struct breakpoint has these two fields:
+
+ breakpoint::location;
+ breakpoint::loc;
+
+ "location" is the location spec, and "loc" is the resolved locations.
+
+ And then, we have a method called "locations()", which returns the
+ resolved locations as range...
+
+ The location spec type is presently called event_location:
+
+ /* Location we used to set the breakpoint. */
+ event_location_up location;
+
+ and it is described like this:
+
+ /* The base class for all an event locations used to set a stop event
+ in the inferior. */
+
+ struct event_location
+ {
+
+ and even that is incorrect... Location specs are used for finding
+ actual locations in the program in scenarios that have nothing to do
+ with stop events. E.g., "list" works with location specs.
+
+ To clean all this confusion up, this patch renames "event_location" to
+ "location_spec" throughout, and then all the variables that hold a
+ location spec, they are renamed to include "spec" in their name, like
+ e.g., "location" -> "locspec". Similarly, functions that work with
+ location specs, and currently have just "location" in their name are
+ renamed to include "spec" in their name too.
+
+ Change-Id: I5814124798aa2b2003e79496e78f95c74e5eddca
+
+2022-06-17 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix build with -Werror=format-truncation
+ gprofng/ChangeLog
+ 2022-06-16 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * configure.ac: Remove -Wno-format-truncation.
+ * src/Makefile.am: Likewise.
+ * configure: Rebuild.
+ * src/Makefile.in: Rebuild.
+ * common/hwctable.c: Fix -Werror=format-truncation errors.
+ * src/ipc.cc: Likewise.
+ * src/parse.cc: Likewise.
+
+2022-06-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-16 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix have_mpx test
+ When testing on openSUSE Leap 15.4 I ran into this FAIL:
+ ...
+ FAIL: gdb.arch/i386-mpx-map.exp: NULL address of the pointer
+ ...
+ and likewise for all the other mpx tests.
+
+ The problem is that have_mpx is supposed to return 0, but it doesn't because
+ it tries to match this output:
+ ...
+ builtin_spawn -ignore SIGHUP temp/20294/have_mpx-2-20294.x^M
+ No MPX support^M
+ No MPX support^M
+ ...
+ using:
+ ...
+ && ![string equal $output "No MPX support\r\n"]]
+ ...
+
+ Fix this by matching using a regexp instead.
+
+ Tested on x86_64-linux.
+
+2022-06-16 Alan Modra <amodra@gmail.com>
+
+ use of uninitialised value in input_file_open
+ Triggered by a file containing just "#N" or "#A". fgets when hitting
+ EOF before reading anything returns NULL and does not write to buf.
+ strchr (buf, '\n') then is reading from uninitialised memory.
+
+ * input-file.c (input_file_open): Don't assume buf contains
+ zero string terminator when fgets returns NULL.
+
+2022-06-16 Alan Modra <amodra@gmail.com>
+
+ Always free matching vector from bfd_check_format_matches
+ At least one place calling list_matching_formats failed to free the
+ "matching" vector from bfd_check_format_matches afterwards. Fix that
+ by calling free inside list_matching_formats.
+
+ binutils/
+ * bucomm.c (list_matching_formats): Free arg.
+ * addr2line.c (process_file): Adjust to suit.
+ * ar.c (open_inarch, ranlib_touch): Likewise.
+ * coffdump.c (main): Likewise.
+ * nm.c (display_archive, display_file): Likewise.
+ * objcopy.c (copy_file): Likewise.
+ * objdump.c (display_object_bfd): Likewise.
+ * size.c (display_bfd): Likewise.
+ * srconv.c (main): Likewise.
+ ld/
+ * ldlang.c (load_symbols): Free "matching".
+
+2022-06-16 Alan Modra <amodra@gmail.com>
+
+ Revert "Revert "Fix fbsd core matching""
+ This reverts commit 476288fa2bddecf0f0e13dee826a076309bf01fe.
+
+2022-06-16 Alan Modra <amodra@gmail.com>
+
+ Restore readelf -wF
+ Commit 94585d6d4495 resulted in readelf -wF failing with
+ Unrecognized debug letter option 'F'
+
+ binutils/
+ * dwarf.c (debug_dump_long_opts): Add letter.
+ (debug_option_table): New, replacing..
+ (opts_table, letter_table): ..these.
+ (dwarf_select_sections_by_names): Adjust to suit. Set
+ do_debug_frames outside of loop.
+ (dwarf_select_sections_by_letters): Similarly.
+ gas/
+ * testsuite/gas/i386/ehinterp.d: Use readelf -wF.
+
+2022-06-16 Alan Modra <amodra@gmail.com>
+
+ PR29250, readelf erases CIE initial register state
+ PR 29250
+ binutils/
+ * dwarf.c (display_debug_frames): Set col_type[reg] on sizing
+ pass over FDE to cie->col_type[reg] if CIE specifies reg.
+ Handle DW_CFA_restore and DW_CFA_restore_extended on second
+ pass using the same logic. Remove unnecessary casts. Don't
+ call frame_need_space on second pass over FDE.
+ gas/
+ * testsuite/gas/i386/ehinterp.d,
+ * testsuite/gas/i386/ehinterp.s: New test.
+ * testsuite/gas/i386/i386.exp: Run it.
+
+2022-06-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-15 Sergei Trofimovich <siarheit@google.com>
+
+ sim: fix BFD_VMA format arguments on 32-bit hosts [PR gdb/29184]
+ Noticed format mismatch when attempted to build gdb on i686-linux-gnu
+ in --enable-64-bit-bfd mode:
+
+ sim/../../sim/cris/sim-if.c:576:28:
+ error: format '%lx' expects argument of type 'long unsigned int',
+ but argument 4 has type 'bfd_size_type' {aka 'long long unsigned int'} [-Werror=format=]
+ 576 | sim_do_commandf (sd, "memory region 0x%" BFD_VMA_FMT "x,0x%lx",
+ | ^~~~~~~~~~~~~~~~~~~
+ 577 | interp_load_addr, interpsiz);
+ | ~~~~~~~~~
+ | |
+ | bfd_size_type {aka long long unsigned int}
+
+ While at it fixed format string for time-related types.
+
+2022-06-15 Tom Tromey <tromey@adacore.com>
+
+ Check for listeners in emit_exiting_event
+ I noticed that emit_exiting_event does not check whether there are any
+ listeners before creating the event object. All other event emitters
+ do this, so this patch updates this one as well.
+
+2022-06-15 Tom Tromey <tom@tromey.com>
+
+ Add to documentation of Python 'dont_repeat' method
+ PR python/28533 points out that the Python 'dont_repeat' documentation
+ is a bit ambiguous about when the method ought to be called. This
+ patch spells it out.
+
+2022-06-15 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Make sp alias for one of the other stack pointers
+ For Cortex-M targets, SP register is never detached from msp or
+ psp, it always has the same value as one of them. Let GDB treat
+ ARM_SP_REGNUM as an alias similar to what is done in hardware.
+
+2022-06-15 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Track msp and psp
+ For Arm Cortex-M33 with security extensions, there are 4 different
+ stack pointers (msp_s, msp_ns, psp_s, psp_ns). To be compatible
+ with earlier Cortex-M derivates, the msp and psp registers are
+ aliases for one of the 4 real stack pointer registers.
+
+ These are the combinations that exist:
+ sp -> msp -> msp_s
+ sp -> msp -> msp_ns
+ sp -> psp -> psp_s
+ sp -> psp -> psp_ns
+
+ This means that when the GDB client is to show the value of "msp",
+ the value should always be equal to either "msp_s" or "msp_ns".
+ Same goes for "psp".
+
+ To add a bit more context; GDB does not really use the register msp
+ (or psp) internally, but they are part of the set of registers which
+ are provided by the target.xml file. As a result, they will be part
+ of the set of registers printed by the "info r" command.
+
+ Without this particular patch, GDB will hit the assert in the bottom
+ of arm_cache_get_sp_register function.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29121
+
+2022-06-15 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Fetch initial sp value prior to compare
+ For Arm Cortex-M33 with security extensions, there are 4 different
+ stack pointers (msp_s, msp_ns, psp_s, psp_ns). In order to
+ identify the active one, compare the values of the different
+ stacks. The value of the initial sp register needs to be fetched to
+ perform this comparison.
+
+2022-06-15 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: unify two dis_asm_read_memory functions in disasm.c
+ After the recent restructuring of the disassembler code, GDB has ended
+ up with two identical class static functions, both called
+ dis_asm_read_memory, with identical implementations.
+
+ My first thought was to move these out of their respective classes,
+ and just make them global functions, then I'd only need a single
+ copy.
+
+ And maybe that's the right way to go. But I disliked that by doing
+ that I loose the encapsulation of the method with the corresponding
+ disassembler class.
+
+ So, instead, I placed the static method into its own class, and had
+ both the gdb_non_printing_memory_disassembler and gdb_disassembler
+ classes inherit from this new class as an additional base-class.
+
+ In terms of code generated, I don't think there's any significant
+ difference with this approach, but I think this better reflects how
+ the function is closely tied to the disassembler.
+
+ There should be no user visible changes after this commit.
+
+2022-06-15 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: refactor the non-printing disassemblers
+ This commit started from an observation I made while working on some
+ other disassembler patches, that is, that the function
+ gdb_buffered_insn_length, is broken ... sort of.
+
+ I noticed that the gdb_buffered_insn_length function doesn't set up
+ the application data field if the disassemble_info structure.
+
+ Further, I noticed that some architectures, for example, ARM, require
+ that the application_data field be set, see gdb_print_insn_arm in
+ arm-tdep.c.
+
+ And so, if we ever use gdb_buffered_insn_length for ARM, then GDB will
+ likely crash. Which is why I said only "sort of" broken. Right now
+ we don't use gdb_buffered_insn_length with ARM, so maybe it isn't
+ broken yet?
+
+ Anyway to prove to myself that there was a problem here I extended the
+ disassembler self tests in disasm-selftests.c to include a test of
+ gdb_buffered_insn_length. As I run the test for all architectures, I
+ do indeed see GDB crash for ARM.
+
+ To fix this we need gdb_buffered_insn_length to create a disassembler
+ that inherits from gdb_disassemble_info, but we also need this new
+ disassembler to not print anything.
+
+ And so, I introduce a new gdb_non_printing_disassembler class, this is
+ a disassembler that doesn't print anything to the output stream.
+
+ I then observed that both ARC and S12Z also create non-printing
+ disassemblers, but these are slightly different. While the
+ disassembler in gdb_non_printing_disassembler reads the instruction
+ from a buffer, the ARC and S12Z disassemblers read from target memory
+ using target_read_code.
+
+ And so, I further split gdb_non_printing_disassembler into two
+ sub-classes, gdb_non_printing_memory_disassembler and
+ gdb_non_printing_buffer_disassembler.
+
+ The new selftests now pass, but otherwise, there should be no user
+ visible changes after this commit.
+
+2022-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: implement the print_insn extension language hook
+ This commit extends the Python API to include disassembler support.
+
+ The motivation for this commit was to provide an API by which the user
+ could write Python scripts that would augment the output of the
+ disassembler.
+
+ To achieve this I have followed the model of the existing libopcodes
+ disassembler, that is, instructions are disassembled one by one. This
+ does restrict the type of things that it is possible to do from a
+ Python script, i.e. all additional output has to fit on a single line,
+ but this was all I needed, and creating something more complex would,
+ I think, require greater changes to how GDB's internal disassembler
+ operates.
+
+ The disassembler API is contained in the new gdb.disassembler module,
+ which defines the following classes:
+
+ DisassembleInfo
+
+ Similar to libopcodes disassemble_info structure, has read-only
+ properties: address, architecture, and progspace. And has methods:
+ __init__, read_memory, and is_valid.
+
+ Each time GDB wants an instruction disassembled, an instance of
+ this class is passed to a user written disassembler function, by
+ reading the properties, and calling the methods (and other support
+ methods in the gdb.disassembler module) the user can perform and
+ return the disassembly.
+
+ Disassembler
+
+ This is a base-class which user written disassemblers should
+ inherit from. This base class provides base implementations of
+ __init__ and __call__ which the user written disassembler should
+ override.
+
+ DisassemblerResult
+
+ This class can be used to hold the result of a call to the
+ disassembler, it's really just a wrapper around a string (the text
+ of the disassembled instruction) and a length (in bytes). The user
+ can return an instance of this class from Disassembler.__call__ to
+ represent the newly disassembled instruction.
+
+ The gdb.disassembler module also provides the following functions:
+
+ register_disassembler
+
+ This function registers an instance of a Disassembler sub-class
+ as a disassembler, either for one specific architecture, or, as a
+ global disassembler for all architectures.
+
+ builtin_disassemble
+
+ This provides access to GDB's builtin disassembler. A common
+ use case that I see is augmenting the existing disassembler output.
+ The user code can call this function to have GDB disassemble the
+ instruction in the normal way. The user gets back a
+ DisassemblerResult object, which they can then read in order to
+ augment the disassembler output in any way they wish.
+
+ This function also provides a mechanism to intercept the
+ disassemblers reads of memory, thus the user can adjust what GDB
+ sees when it is disassembling.
+
+ The included documentation provides a more detailed description of the
+ API.
+
+ There is also a new CLI command added:
+
+ maint info python-disassemblers
+
+ This command is defined in the Python gdb.disassemblers module, and
+ can be used to list the currently registered Python disassemblers.
+
+2022-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: add extension language print_insn hook
+ This commit is setup for the next commit.
+
+ In the next commit I will add a Python API to intercept the print_insn
+ calls within GDB, each print_insn call is responsible for
+ disassembling, and printing one instruction. After the next commit it
+ will be possible for a user to write Python code that either wraps
+ around the existing disassembler, or even, in extreme situations,
+ entirely replaces the existing disassembler.
+
+ This commit does not add any new Python API.
+
+ What this commit does is put the extension language framework in place
+ for a print_insn hook. There's a new callback added to 'struct
+ extension_language_ops', which is then filled in with nullptr for Python
+ and Guile.
+
+ Finally, in the disassembler, the code is restructured so that the new
+ extension language function ext_lang_print_insn is called before we
+ delegate to gdbarch_print_insn.
+
+ After this, the next commit can focus entirely on providing a Python
+ implementation of the new print_insn callback.
+
+ There should be no user visible change after this commit.
+
+2022-06-15 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: add new base class to gdb_disassembler
+ The motivation for this change is an upcoming Python disassembler API
+ that I would like to add. As part of that change I need to create a
+ new disassembler like class that contains a disassemble_info and a
+ gdbarch. The management of these two objects is identical to how we
+ manage these objects within gdb_disassembler, so it might be tempting
+ for my new class to inherit from gdb_disassembler.
+
+ The problem however, is that gdb_disassembler has a tight connection
+ between its constructor, and its print_insn method. In the
+ constructor the ui_file* that is passed in is replaced with a member
+ variable string_file*, and then in print_insn, the contents of the
+ member variable string_file are printed to the original ui_file*.
+
+ What this means is that the gdb_disassembler class has a tight
+ coupling between its constructor and print_insn; the class just isn't
+ intended to be used in a situation where print_insn is not going to be
+ called, which is how my (upcoming) sub-class would need to operate.
+
+ My solution then, is to separate out the management of the
+ disassemble_info and gdbarch into a new gdb_disassemble_info class,
+ and make this class a parent of gdb_disassembler.
+
+ In arm-tdep.c and mips-tdep.c, where we used to cast the
+ disassemble_info->application_data to a gdb_disassembler, we can now
+ cast to a gdb_disassemble_info as we only need to access the gdbarch
+ information.
+
+ Now, my new Python disassembler sub-class will still want to print
+ things to an output stream, and so we will want access to the
+ dis_asm_fprintf functionality for printing.
+
+ However, rather than move this printing code into the
+ gdb_disassemble_info base class, I have added yet another level of
+ hierarchy, a gdb_printing_disassembler, thus the class structure is
+ now:
+
+ struct gdb_disassemble_info {};
+ struct gdb_printing_disassembler : public gdb_disassemble_info {};
+ struct gdb_disassembler : public gdb_printing_disassembler {};
+
+ In a later commit my new Python disassembler will inherit from
+ gdb_printing_disassembler.
+
+ The reason for adding the additional layer to the class hierarchy is
+ that in yet another commit I intend to rewrite the function
+ gdb_buffered_insn_length, and to do this I will be creating yet more
+ disassembler like classes, however, these will not print anything,
+ thus I will add a gdb_non_printing_disassembler class that also
+ inherits from gdb_disassemble_info. Knowing that that change is
+ coming, I've gone with the above class hierarchy now.
+
+ There should be no user visible changes after this commit.
+
+2022-06-15 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: convert gdbpy_err_fetch to use gdbpy_ref
+ Convert the gdbpy_err_fetch class to make use of gdbpy_ref, this
+ removes the need for manual reference count management, and allows the
+ destructor to be removed.
+
+ There should be no functional change after this commit.
+
+ I think this cleanup is worth doing on its own, however, in a later
+ commit I will want to copy instances of gdbpy_err_fetch, and switching
+ to using gdbpy_ref means that I can rely on the default copy
+ constructor, without having to add one that handles the reference
+ counts, so this is good preparation for that upcoming change.
+
+2022-06-15 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop print_operand_value()'s "hex" parameter
+ For quite some time all callers have been passing 1 / true. While there
+ fold the final oappend_with_style() calls.
+
+2022-06-15 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix build for gcc < 11
+ When building trunk on openSUSE Leap 15.3 with system gcc 7.5.0, I run into:
+ ...
+ In file included from ../bfd/bfd.h:46:0,
+ from gdb/defs.h:37,
+ from gdb/debuginfod-support.c:19:
+ gdb/debuginfod-support.c: In function ‘bool debuginfod_is_enabled()’:
+ gdb/../include/diagnostics.h:42:3: error: unknown option after \
+ ‘#pragma GCC diagnostic’ kind [-Werror=pragmas]
+ _Pragma (DIAGNOSTIC_STRINGIFY (GCC diagnostic ignored option))
+ ^
+ gdb/../include/diagnostics.h:80:3: note: in expansion of macro \
+ ‘DIAGNOSTIC_IGNORE’
+ DIAGNOSTIC_IGNORE ("-Wstringop-overread")
+ ^~~~~~~~~~~~~~~~~
+ gdb/debuginfod-support.c:201:4: note: in expansion of macro \
+ ‘DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD’
+ DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD
+ ^
+ ...
+
+ The problem is that the warning -Wstringop-overread has been introduced for
+ gcc 11, and we can only tell gcc to ignore if it knows about it.
+
+ Fix this by guarding the DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD definition in
+ diagnostics.c with '#if __GNUC__ >= 11'.
+
+ Tested on x86_64-linux, by completing a build.
+
+2022-06-15 Alan Modra <amodra@gmail.com>
+
+ PR29230, segv in lookup_symbol_in_variable_table
+ The PR23230 testcase uses indexed strings without specifying
+ SW_AT_str_offsets_base. In this case we left u.str with garbage (from
+ u.val) which then led to a segfault when attempting to access the
+ string. Fix that by clearing u.str. The patch also adds missing
+ sanity checks in the recently committed read_indexed_address and
+ read_indexed_string functions.
+
+ PR 29230
+ * dwarf2.c (read_indexed_address): Return uint64_t. Sanity check idx.
+ (read_indexed_string): Use uint64_t for str_offset. Sanity check idx.
+ (read_attribute_value): Clear u.str for indexed string forms when
+ DW_AT_str_offsets_base is not yet read or missing.
+
+2022-06-15 Mark Wielaard <mark@klomp.org>
+
+ gdb: Always suppress stringop-overread warning in debuginfod-support.c
+ Just like on s390x with g++ 11.2.1 and ppc64le with g++ 11.3.1 g++ 11
+ on hppa produces a spurious warning for stringop-overread in
+ debuginfod_is_enabled for url_view. Just always suppress it on all
+ arches.
+
+ https://sourceware.org/bugzilla/show_bug.cgi?id=29198
+
+ gdb/ChangeLog:
+
+ * debuginfod-support.c (debuginfod_is_enabled): Always use
+ DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD.
+
+2022-06-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-14 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng docs: provide help for <rate> == <interval>
+ The help message from 'gprofng collect app -h', in
+ the section on <rate> == <interval>, had a dangling
+ reference to a non-existent manpage. Provide basic
+ info, including reasons for caution.
+
+ gprofng docs: mention HTML / PDF in the gprofng README
+ The HTML and PDF formats are described in the gprofng tutorial (info
+ topic "Other Document Formats"). In addition, describe them in the
+ README because: they are important; they are easily searchable; and the
+ README is primarily oriented to the person who is installing gprofng,
+ who may differ from the person who follows a user tutorial.
+
+2022-06-14 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix build with -Werror=format-security
+ gprofng/ChangeLog
+ 2022-06-13 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/28968
+ * src/src/Hist_data.cc (print_row): Make param const.
+ * src/src/Hist_data.h (print_row): Likewise.
+ * src/src/Print.h: Remove unused functions and variables.
+ * src/Print.cc: Fix -Werror=format-security errors.
+ * src/parse.cc: Likewise.
+
+2022-06-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle unordered dict in gdb.python/py-mi-cmd.exp
+ When running test-case gdb.python/py-mi-cmd.exp on openSUSE Leap 42.3 with
+ python 3.4, I occasionally run into:
+ ...
+ Expecting: ^(-pycmd dct[^M
+ ]+)?(\^done,result={hello="world",times="42"}[^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ -pycmd dct^M
+ ^done,result={times="42",hello="world"}^M
+ (gdb) ^M
+ FAIL: gdb.python/py-mi-cmd.exp: -pycmd dct (unexpected output)
+ ...
+
+ The problem is that the data type used here in py-mi-cmd.py:
+ ...
+ elif argv[0] == "dct":
+ return {"result": {"hello": "world", "times": 42}}
+ ...
+ is a dictionary, and only starting version 3.6 are dictionaries insertion
+ ordered, so using PyDict_Next in serialize_mi_result doesn't guarantee a
+ fixed order.
+
+ Fix this by allowing the alternative order.
+
+ Tested on x86_64-linux.
+
+2022-06-14 Tom Tromey <tromey@adacore.com>
+
+ Implement lazy FPU initialization for ravenscar
+ Some ravenscar runtimes implement lazy FPU handling. On these
+ runtimes, the FPU is only initialized when a task tries to use it.
+ Furthermore, the FP registers aren't automatically saved on a task
+ switch -- instead, the save is deferred until the new task tries to
+ use the FPU. Furthermore, each task's context area has a flag
+ indicating whether the FPU has been initialized for this task.
+
+ This patch teaches GDB to understand this implementation. When
+ fetching or storing registers, GDB now checks to see whether the live
+ FP registers should be used. If not, the task's saved FP registers
+ will be used if the task has caused FPU initialization.
+
+ Currently only AArch64 uses this code. bb-runtimes implements this
+ for ARM as well, but GDB doesn't yet have an arm-ravenscar-thread.c.
+
+2022-06-14 Tom Tromey <tromey@adacore.com>
+
+ Reimplement ravenscar registers using tables
+ Currently, the ravenscar-thread implementation for each architecture
+ is written by hand. However, these are actually written by
+ copy-paste. It seems better to switch to a table-driven approach.
+
+ The previous code also fetched all registers whenever any register was
+ requested. This is corrected in the new implementation.
+
+2022-06-14 Tom Tromey <tromey@adacore.com>
+
+ Fix bugs in aarch64-ravenscar-thread.c
+ We found a few bugs in aarch64-ravenscar-thread.c.
+
+ First, some of the register offsets were incorrect. The "bb-runtimes"
+ file for this runtime had the wrong offsets in comments, which GDB
+ took to be correct. However, those comments didn't account for
+ alignment. This patch adjusts the offsets.
+
+ Next, the "FPU Saved field" is not a register -- it is an
+ implementation detail of the runtime. This is removed.
+
+ Finally, I think the FP registers are actually named V0-V31, and the
+ "Q" names are pseudo-registers. This patch fixes the comment.
+
+2022-06-14 Tom Tromey <tromey@adacore.com>
+
+ Allow 'interrupt -a' in all-stop mode
+ PR gdb/17160 points out that "interrupt -a" errors in all-stop mode,
+ but there's no good reason for this. This patch removes the error.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17160
+
+2022-06-14 Youling Tang <tangyouling@loongson.cn>
+
+ gdbserver: Add LoongArch/Linux support
+ Implement LoongArch/Linux support, including XML target description
+ handling based on features determined, GPR regset support, and software
+ breakpoint handling.
+
+ In the Linux kernel code of LoongArch, ptrace implements PTRACE_POKEUSR
+ and PTRACE_PEEKUSR in the arch_ptrace function, so srv_linux_usrregs is
+ set to yes.
+
+ With this patch on LoongArch:
+
+ $ make check-gdb TESTS="gdb.server/server-connect.exp"
+ [...]
+ # of expected passes 18
+ [...]
+
+2022-06-14 Tom de Vries <tdevries@suse.de>
+
+ Revert "Fix fbsd core matching"
+ This reverts commit a7e29f797cecd5a2f73c27838b09eae1f1b6c657.
+
+ I accidentally pushed this, so revert.
+
+2022-06-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix regexp in gdb.ada/mi_var_access.exp
+ With gcc-12 and target board unix/-m32, we run into:
+ ...
+ (gdb) ^M
+ Expecting: ^(-var-create A_String_Access \* A_String_Access[^M
+ ]+)?(\^done,name="A_String_Access",numchild="1",.*[^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ -var-create A_String_Access * A_String_Access^M
+ ^error,msg="Value out of range."^M
+ (gdb) ^M
+ FAIL: gdb.ada/mi_var_access.exp: Create varobj (unexpected output)
+ ...
+
+ What happens is easier to understand if we take things out of the mi context:
+ ...
+ $ gdb -q -batch \
+ outputs/gdb.ada/mi_var_access/mi_access \
+ -ex "b mi_access.adb:19" \
+ -ex run \
+ -ex "p A_String_Access"
+ ...
+ Breakpoint 1, mi_access () at mi_access.adb:19
+ 19 A_String : String (3 .. 5) := "345"; -- STOP
+ $1 = (pck.string_access) <error reading variable: Value out of range.>
+ ...
+ while with target board unix we have instead:
+ ...
+ $1 = (pck.string_access) 0x431b40 <ada_main.sec_default_sized_stacks>
+ ...
+
+ The var-create command samples the value of the variable at a location where
+ the variable is not yet initialized, and with target board unix we
+ accidentally hit a valid address, but with target board unix/-m32 that's not
+ the case.
+
+ Fix the FAIL by accepting the error message.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28464
+
+2022-06-14 Alan Modra <amodra@gmail.com>
+
+ Fix fbsd core matching
+ On Thu, Jun 09, 2022 at 08:59:37AM -0700, John Baldwin wrote:
+ > On 6/9/22 1:58 AM, Tom de Vries via Gdb-patches wrote:
+ > > Hi,
+ > >
+ > > With an --enable-targets=all build and target board unix/-m32 I run into a
+ > > FAIL in test-case gdb.base/corefile.exp:
+ > > ...
+ > > (gdb) file outputs/gdb.base/corefile/corefile^M
+ > > Reading symbols from outputs/gdb.base/corefile/corefile...^M
+ > > (gdb) core-file outputs/gdb.base/corefile/corefile.core^M
+ > > warning: core file may not match specified executable file.^M
+ > > [New LWP 12011]^M
+ > > Core was generated by `outputs/gdb.base/corefile/co'.^M
+ > > Program terminated with signal SIGABRT, Aborted.^M
+ > > (gdb) FAIL: gdb.base/corefile.exp: core-file warning-free
+ > > ...
+ > >
+ > > The warning is there because of this mismatch between core and exec:
+ > > ...
+ > > (gdb) p core_bfd->xvec
+ > > $3 = (const struct bfd_target *) 0x20112a0 <i386_elf32_fbsd_vec>
+ > > (gdb) p exec_bfd->xvec
+ > > $4 = (const struct bfd_target *) 0x2010b00 <i386_elf32_vec>
+ > > ...
+ > >
+ > > In the exec case, the detected architecture is i386_elf32_vec because this bit
+ > > of code in elfcode.h:elf_object_p():
+ > > ...
+ > > if (ebd->elf_machine_code != EM_NONE
+ > > && i_ehdrp->e_ident[EI_OSABI] != ebd->elf_osabi
+ > > && ebd->elf_osabi != ELFOSABI_NONE)
+ > > goto got_wrong_format_error;
+ > > ...
+ > > prevents i386_elf32_fbsd from matching.
+ > >
+ > > Fix the core matching by copying that code to elfcore.h:elf_core_file_p().
+ > >
+ > > Tested on x86_64-linux.
+ > >
+ > > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29227
+ > >
+ > > Any comments?
+
+ Looks good.
+
+ > Looking at elfcore.h, it seems to have not gotten changes made to elfcode.h over
+ > time and is a bit rotted. I suspect that all of changes made in commit 0aabe54e6222
+ > that added these lines in elfcode.h (along with several other changes) need to
+ > be applied to this function in elfcore.h, not just adding these lines.
+
+ Yes, the commit 0aabe54e6222 changes likely should go in too. I'm a
+ little wary of adding all the sanity checks to elf_core_file_p since
+ that might result in some core files not being recognised at all. For
+ example, despite the FIXME I'd guess leaving out the EI_VERSION check
+ was deliberate. The following seems reasonable to me. Please test.
+
+2022-06-14 Kavitha Natarajan <kavitha.natarajan@amd.com>
+
+ Debug support for global alias variable
+ Starting with (future) Clang 15 (since
+ https://reviews.llvm.org/D120989), Clang emits the DWARF information
+ of global alias variables as DW_TAG_imported_declaration. However,
+ GDB does not handle it. It incorrectly always reads this tag as
+ C++/Fortran imported declaration (type alias, namespace alias and
+ Fortran module). This commit adds support to handle this tag as an
+ alias variable.
+
+ This change fixes the failures in the gdb.base/symbol-alias.exp
+ testcase with current git Clang. This testcase is also updated to
+ test nested (recursive) aliases.
+
+2022-06-14 Alan Modra <amodra@gmail.com>
+
+ BFD_RELOC_MIPS_16
+ MIPS should not be using BFD_RELOC_16 for its R_MIPS_16 relocation,
+ since R_MIPS_16 specifies a 16-bit field in a 32-bit word.
+ BFD_RELOC_16, emitted by generic code to handle fixups on 16-bit data
+ directives, expects fixups to operate on the whole of a 16-bit word.
+
+ This patch corrects the problem by using BFD_RELOC_MIPS_16, a new bfd
+ reloc that is used to generate R_MIPS_16. BFD_RELOC_16 is handled in
+ md_apply_fix for cases where the fixup can be applied at assembly
+ time. Like BFD_RELOC_8, BFD_RELOC_16 now has no corresponding object
+ file relocation, and thus .half, .hword, .short and .dc.w must be
+ resolved at assembly time. BFD_RELOC_MIPS_REL16 is removed by this
+ patch since it isn't used.
+
+ PR 3243
+ PR 26542
+ * reloc.c (BFD_RELOC_MIPS_16): Rename from BFD_RELOC_MIPS_REL16.
+ * elf32-mips.c (mips_reloc_map): Map BFD_RELOC_MIPS_16 to R_MIPS_16.
+ * elf64-mips.c (mips_reloc_map): Likewise, delete BFD_RELOC_MIPS_REL16.
+ * elfn32-mips.c (mips_reloc_map): Likewise.
+ * libbfd.h: Regenerate.
+ * bfd-in2.h: Regenerate.
+ gas/
+ * config/tc-mips.c (append_insn): Handle BFD_RELOC_MIPS_16.
+ (macro_build): Likewise.
+ (mips_percent_op <%half>): Generate BFD_RELOC_MIPS_16.
+ (md_apply_fix): Handle BFD_RELOC_16 and BFD_RELOC_MIPS_16 when fx_done.
+ ld/
+ * testsuite/ld-mips-elf/reloc-local-overflow.d,
+ * testsuite/ld-mips-elf/reloc-local-overflow.s: Rewrite.
+
+2022-06-14 Alan Modra <amodra@gmail.com>
+
+ Correct R_MIPS_16 n32 howto
+ If the howto is actually used, an all-zero dst_mask will result in
+ unchanged section contents on attempting to apply R_MIPS_16.
+
+ * elfn32-mips.c (elf_mips_howto_table_rela <R_MIPS_16>): Correct
+ dst_mask.
+
+2022-06-14 Alan Modra <amodra@gmail.com>
+
+ asan: applying zero offset to NULL pointer
+ * dwarf.c (fetch_indexed_string): Move initialisation of "curr"
+ and "end" after checking for missing section.
+
+2022-06-14 Alan Modra <amodra@gmail.com>
+
+ gas dwarf2dbg.c tidy
+ Make it a little more obvious that remap_debug_filename returns an
+ allocated string (that should be freed) by returning a char * rather
+ than const char *. Free a few missed cases in dwarf2dbg.c, and free
+ other memory allocated in dwarf2dbg.c. Also remove static
+ initialisation of variables and initialise in dwarf2_init instead,
+ in order to ensure gas state is saner for oss-fuzz.
+
+ * remap.c (remap_debug_filename): Remove const from return.
+ * as.h (remap_debug_filename): Update prototype.
+ * config/obj-elf.c (obj_elf_ident): Simplify free of
+ remap_debug_filename output.
+ * stabs.c (stabs_generate_asm_file): Likewise.
+ * dwarf2dbg.c (dirs, dirs_in_use, dirs_allocated, current): Don't
+ initialise statically..
+ (dwarf2_init): ..do so here, along with most other static vars.
+ (assign_file_to_slot): Don't set files_allocated until we
+ succeed in allocating memory.
+ (purge_generated_debug): Add bool param, free more stuff if true.
+ (dwarf2_directive_filename): Adjust purge_generated_debug call.
+ (process_entries): Don't free line_entry here..
+ (dwarf2_cleanup): ..do so here instead, new function.
+ (dwarf2_finish): Call dwarf2_cleanup. When chaining together
+ subseg line entries, unhook entries from old subseg list.
+ (dwarf2_directive_loc): Free remap_debug_filename string.
+ (out_dir_and_file_list): Likewise.
+ (out_debug_str): Likewise.
+
+2022-06-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.reverse/test_ioctl_TCSETSW.exp with libc debuginfo
+ When running test-case gdb.reverse/test_ioctl_TCSETSW.exp with glibc debuginfo
+ installed, I run into:
+ ...
+ (gdb) PASS: gdb.reverse/test_ioctl_TCSETSW.exp: at TCSETSW call
+ step^M
+ __tcsetattr (fd=0, optional_actions=1, termios_p=0x7fffffffcf50) at \
+ ../sysdeps/unix/sysv/linux/tcsetattr.c:45^M
+ 45 {^M
+ (gdb) FAIL: gdb.reverse/test_ioctl_TCSETSW.exp: handle TCSETSW
+ ...
+
+ The problem is that the step is expected to step over the call to tcsetattr,
+ but due to glibc debuginfo being installed, we step into the call.
+
+ Fix this by using next instead of step.
+
+ Tested on x86_64-linux.
+
+2022-06-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Avoid warnings in cooked_{read,write}_test for m68hc11
+ With --enable-targets=all we have:
+ ...
+ $ gdb -q -batch -ex "maint selftest"
+ ...
+ Running selftest regcache::cooked_read_test::m68hc11.
+ warning: No frame soft register found in the symbol table.
+ Stack backtrace will not work.
+ Running selftest regcache::cooked_read_test::m68hc12.
+ warning: No frame soft register found in the symbol table.
+ Stack backtrace will not work.
+ Running selftest regcache::cooked_read_test::m68hc12:HCS12.
+ warning: No frame soft register found in the symbol table.
+ Stack backtrace will not work.
+ ...
+
+ Likewise for regcache::cooked_write_test.
+
+ The warning has no use in the selftest context.
+
+ Fix this by skipping the specific selftests.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29224
+
+2022-06-13 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Deal with atomic sequence
+ We can't put a breakpoint in the middle of a ll/sc atomic sequence,
+ so look for the end of the sequence and put the breakpoint there.
+
+2022-06-13 Sam James <sam@gentoo.org>
+
+ gdb: don't use bashism in configure test
+ Results in configure output like:
+ ```
+ checking for X... no
+ /var/tmp/portage/sys-devel/gdb-12.1/work/gdb-12.1/gdb/configure: 18837: test: yes: unexpected operator
+ checking whether to use babeltrace... auto
+ ```
+
+ ... when /bin/sh is provided by a POSIX-compliant shell, like dash,
+ instead of bash.
+
+2022-06-13 Jiangshuai Li <jiangshuai_li@c-sky.com>
+
+ gdb:csky add support target-descriptions for CSKY arch
+ Registers in CSKY architecture included:
+ 1. 32 gprs
+ 2. 16 ars (alternative gprs used for quick interrupt)
+ 3. hi, lo, pc
+ 4. fr0~fr31, fcsr, fid, fesr
+ 5. vr0~vr15
+ 6. ((32 banks) * 32) cr regs (max 32 banks, 32 control regs a bank)
+
+ For register names:
+ Except over control registers, other registers, like gprs, hi, lo ...
+ are fixed names. Among the 32*32 control registers, some used registers
+ will have fixed names, others will have a default name "cpxcry". 'x'
+ refers to bank, y refers index in the bank(a control register in bank
+ 4 with index 14 will has a default name cp4cr14).
+
+ For register numbers in GDB:
+ We assign a fixed number to each register in GDB, like:
+ r0~r31 with 0~31
+ hi, lo with 36, 37
+ fpu/vpu with 40~71
+ ...
+ described in function csky_get_supported_register_by_index().
+
+ Function csky_get_supported_tdesc_registers_count():
+ To calculate the total number of registers that GDB can analyze,
+ including those with fixed names and those with default register names.
+
+ Function csky_get_supported_register_by_index():
+ To find a supported struct csky_supported_tdesc_register, return a
+ struct include name with regnum via index.
+
+ Arrays csky_supported_tdesc_feature_names[]:
+ Include all supported feature names in tdesc-xmls.
+
+ We use the information described above to load the register description
+ file of the target from the stub. When loading, do a little check that
+ whether the register description file contains SP, LR and PC.
+
+2022-06-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle quotes in gdb_py_module_available
+ On openSUSE Leap 42.3 with python 3.4, I run into:
+ ...
+ (gdb) python import pygments^M
+ Traceback (most recent call last):^M
+ File "<string>", line 1, in <module>^M
+ ImportError: No module named 'pygments'^M
+ Error while executing Python code.^M
+ (gdb) FAIL: gdb.base/style.exp: python import pygments
+ ERROR: unexpected output from python import
+ ...
+ because gdb_py_module_available doesn't handle the single quotes around the
+ module name in the ImportError.
+
+ Fix this by allowing the single quotes.
+
+ Tested on x86_64-linux.
+
+2022-06-13 Jan Beulich <jbeulich@suse.com>
+
+ x86: fix incorrect indirection
+ Commit 384e201e5aec ("x86: properly initialize struct instr_info
+ instance(s)") was based on an improperly refreshed patch. Correct the
+ oversight.
+
+2022-06-13 Jan Beulich <jbeulich@suse.com>
+
+ x86: replace global scratch buffer
+ With its movement to the stack, and with the subsequent desire to
+ initialize the entire instr_info instances, this has become doubly
+ inefficient. Individual users have better knowledge of how big a buffer
+ they need, and in a number of cases going through an intermediate buffer
+ can be avoided altogether.
+
+ Having got confirmation that it wasn't intentional to print memory
+ operand displacements with inconsistent style, print_displacement() is
+ now using dis_style_address_offset consistently (eliminating the need
+ for callers to pass in a style).
+
+ While touching print_operand_value() also convert its "hex" parameter to
+ bool. And while altering (and moving) oappend_immediate(), fold
+ oappend_maybe_intel_with_style() into its only remaining caller. Finally
+ where doing adjustments, use snprintf() in favor of sprintf().
+
+2022-06-13 Jan Beulich <jbeulich@suse.com>
+
+ x86: avoid string copy when swapping Vex.W controlled operands
+ Now that op_out[] is an array of pointers, there's no need anymore to
+ copy strings. Simply swap the pointers.
+
+2022-06-13 Jan Beulich <jbeulich@suse.com>
+
+ x86: shrink prefix related disassembler state fields
+ By changing the values used for "artificial" prefix values,
+ all_prefixes[] can be shrunk to array of unsigned char. All that
+ additionally needs adjusting is the printing of possible apparently
+ standalone prefixes when recovering from longjmp(): Simply check
+ whether any prefixes were successfully decoded, to avoid converting
+ opcode bytes matching the "artificial" values to prefix mnemonics.
+
+ Similarly by re-arranging the bits assigned to PREFIX_* mask values
+ we can fit all segment register masks in a byte and hence shrink
+ active_seg_prefix to unsigned char.
+
+ Somewhat similarly with last_*_prefix representing offsets into the
+ opcode being disassembled, signed char is sufficient to hold all possible
+ values.
+
+2022-06-13 Jan Beulich <jbeulich@suse.com>
+
+ x86: properly initialize struct instr_info instance(s)
+ Commit 39fb369834a3 ("opcodes: Make i386-dis.c thread-safe") introduced
+ a lot of uninitialized data. Alan has in particular observed ubsan
+ taking issue with the loop inverting the order of operands, where
+ op_riprel[] - an array of bool - can hold values other than 0 or 1.
+
+ Move instantiation of struct instr_info into print_insn() (thus having
+ just a single central point), and make use of C99 dedicated initializers
+ to fill fields right in the initializer where possible. This way all
+ fields not explicitly initialized will be zero-filled, which in turn
+ allows dropping of some other explicit initialization later in the
+ function or in ckprefix(). Additionally this removes a lot of
+ indirection, as all "ins->info" uses can simply become "info".
+
+ Make one further arrangement though, to limit the amount of data needing
+ (zero)initializing on every invocation: Convert the op_out structure
+ member to just an array of pointers, with the actual arrays living
+ inside print_insn() (and, as befoe, having just their 1st char filled
+ with nul).
+
+ While there, instead of adjusting print_insn()'s forward declaration,
+ arrange for no such declaration to be needed in the first place.
+
+2022-06-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-12 Tom Tromey <tom@tromey.com>
+
+ Fix self-test failure in addrmap
+ Mark pointed out that my recent addrmap C++-ficiation changes caused a
+ regression in the self-tests. This patch fixes the problem by
+ updating this test not to allocate the mutable addrmap on an obstack.
+
+ Remove psymtab_addrmap
+ While working on addrmaps, I noticed that psymtab_addrmap is no longer
+ needed now. It was introduced in ancient times as an optimization for
+ DWARF, but no other symbol reader was ever updated to use it. Now
+ that DWARF does not use psymtabs, it can be deleted.
+
+ Use malloc for mutable addrmaps
+ Mutable addrmaps currently require an obstack. This was probably done
+ to avoid having to call splay_tree_delete, but examination of the code
+ shows that all mutable obstacks have a limited lifetime -- now it's
+ simple to treat them as ordinary C++ objects, in some cases
+ stack-allocating them, and have a destructor to make the needed call.
+ This patch implements this change.
+
+ Remove addrmap::create_fixed
+ addrmap::create_fixed is just a simple wrapper for 'new', so remove it
+ in favor of uses of 'new'.
+
+ Remove addrmap_create_mutable
+ This removes addrmap_create_mutable in favor of using 'new' at the
+ spots where the addrmap is created.
+
+ Remove addrmap wrapper functions
+ This removes the various addrmap wrapper functions in favor of simple
+ method calls on the objects themselves.
+
+ Move addrmap classes to addrmap.h
+ This moves the addrmap class definitions to addrmap.h. This is safe
+ to do now that the contents are private.
+
+ Privacy for addrmap_mutable
+ This changes addrmap_mutable so that its data members are private.
+
+ Privacy for addrmap_fixed
+ This changes addrmap_fixed so that its data members are private.
+ It also makes struct addrmap_transition private as well.
+
+ Use inheritance for addrmap
+ This is a simply C++-ification of the basics of addrmap: it uses
+ virtual methods rather than a table of function pointers, and it
+ changes the concrete implementations to be subclasses.
+
+2022-06-12 Jon Turney <jon.turney@dronecode.org.uk>
+
+ Trivial fixes to Cygwin build after 8fea1a81
+ * Remove a stray semicolon
+ * Restore dropped nullptr program argument in use of create_process() under CYGWIN
+
+ Simplify __USEWIDE
+ Prior to c6ca3dab dropping support for Cygwin 1.5, __USEWIDE was not
+ defined for Cygwin 1.5. After that, it's always defined if __CYGWIN__
+ is, so remove __USEWIDE conditionals inside __CYGWIN__ conditionals.
+
+ Simplify cygwin_buf_t
+ Prior to c6ca3dab dropping support for Cygwin 1.5, cygwin_buf_t was
+ defined as char for Cygwin 1.5. After that, it's always wchar_t, so
+ just use that.
+
+2022-06-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-10 Tom Tromey <tom@tromey.com>
+
+ Fix warning-avoidance initialization in xcoffread.c
+ With the registry rewrite series, on Fedora 34, I started seeing this
+ error in xcoffread.c:
+
+ ../../binutils-gdb/gdb/xcoffread.c: In function ‘void read_xcoff_symtab(objfile*, legacy_psymtab*)’:
+ ../../binutils-gdb/gdb/xcoffread.c:948:25: error: ‘main_aux’ is used uninitialized [-Werror=uninitialized]
+ 948 | union internal_auxent fcn_aux_saved = main_aux;
+ | ^~~~~~~~~~~~~
+ ../../binutils-gdb/gdb/xcoffread.c:933:25: note: ‘main_aux’ declared here
+ 933 | union internal_auxent main_aux;
+ | ^~~~~~~~
+
+ I don't know why this error started suddenly... that seems weird,
+ because it's not obviously related to the changes I made.
+
+ Looking into it, it seems this line was intended to avoid a similar
+ warning -- but since 'main_aux' is uninitialized at the point where it
+ is used, this fix was incomplete.
+
+ This patch avoids the warning by initializing using "{}". I'm
+ checking this in.
+
+2022-06-10 Carl Love <cel@us.ibm.com>
+
+ Fix comparison of unsigned long int to int in record_linux_system_call.
+ The if statement in case gdb_sys_ioctl in function
+ record_linux_system_call in file gdb/linux-record.c is as follows:
+
+ if (tmpulongest == tdep->ioctl_FIOCLEX
+ || tmpulongest == tdep->ioctl_FIONCLEX
+ ....
+ || tmpulongest == tdep->ioctl_TCSETSW
+ ...
+ }
+
+ The PowerPC ioctl value for ioctl_TCSETW is 0x802c7415. The variable
+ ioctl_TCSETW is defined in gdb/linux-record.h as an int. The TCSETW value
+ has the MSB set to one so it is a negative integer. The comparison of the
+ unsigned long value tmpulongest to a negative integer value for
+ ioctl_TCSETSW fails.
+
+ This patch changes the declarations for the ioctl_* values in struct
+ linux_record_tdep to unsigned long to fix the comparisons between
+ tmpulongest and the tdep->ioctl_* values.
+
+ An additional test gdb.reverse/test_ioctl_TCSETSW.exp is added to verify
+ the gdb record_linux_system_call() if statement for the ioctl TCSETSW
+ succeeds.
+
+ This patch has been tested on Power 10 and Intel with no test failures.
+
+2022-06-10 Carl Love <cel@us.ibm.com>
+
+ PowerPC, correct the gdb ioctl values for TCGETS, TCSETS, TCSETSW and TCSETSF.
+ Some of the ioctl numbers are based on the size of kernel termios structure.
+ Currently the PowerPC GDB definitions are "hard coded" into the ioctl
+ number.
+
+ The current PowerPC values for TCGETS, TCSETS, TCSETSW and TCSETSF are
+ defined in gdb/ppc-linux-tdep.c as:
+
+ record_tdep->ioctl_TCGETS = 0x403c7413;
+ record_tdep->ioctl_TCSETS = 0x803c7414;
+ record_tdep->ioctl_TCSETSW = 0x803c7415;
+ record_tdep->ioctl_TCSETSF = 0x803c7416;
+
+ Where the termios structure size is in hex digits [5:4] as 0x3c.
+
+ The definition for the PowerPC termios structure is given in:
+ arch/powerpc/include/uapi/asm/termbits.h
+
+ The size of the termios data structure in this file is 0x2c not 0x3c.
+
+ This patch changes the hex digits for the size of the PowerPC termios size
+ in the ioctl values for TCGETS, TCSETS, TCSETSW and TCSETSF to 0x2c.
+ This patch also changes the hard coding to generate the number based on a
+ it easier to update the ioctl numbers.
+
+2022-06-10 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: remove definition of true/false from gdb_compiler_info
+ Since pretty much forever the get_compiler_info function has included
+ these lines:
+
+ # Most compilers will evaluate comparisons and other boolean
+ # operations to 0 or 1.
+ uplevel \#0 { set true 1 }
+ uplevel \#0 { set false 0 }
+
+ These define global variables true (to 1) and false (to 0).
+
+ It seems odd to me that these globals are defined in
+ get_compiler_info, I guess maybe the original thinking was that if a
+ compiler had different true/false values then we would detect it there
+ and define true/false differently.
+
+ I don't think we should be bundling this logic into get_compiler_info,
+ it seems weird to me that in order to use $true/$false a user needs to
+ first call get_compiler_info.
+
+ It would be better I think if each test script that wants these
+ variables just defined them itself, if in the future we did need
+ different true/false values based on compiler version then we'd just
+ do:
+
+ if { [test_compiler_info "some_pattern"] } {
+ # Defined true/false one way...
+ } else {
+ # Defined true/false another way...
+ }
+
+ But given the current true/false definitions have been in place since
+ at least 1999, I suspect this will not be needed any time soon.
+
+ Given that the definitions of true/false are so simple, right now my
+ suggestion is just to define them in each test script that wants
+ them (there's not that many). If we ever did need more complex logic
+ then we can always add a function in gdb.exp that sets up these
+ globals, but that seems overkill for now.
+
+ There should be no change in what is tested after this commit.
+
+2022-06-10 Luis Machado <luis.machado@arm.com>
+
+ Document the ARM_CC_FOR_TARGET testsuite variable
+ This variable is useful when exercising AArch64 multi-arch support (debugging
+ 32-bit AArch32 executables).
+
+ Unfortunately it isn't well documented. This patch adds information about it
+ and explains how to use it.
+
+2022-06-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix XPASS with gcc-12 in gdb.base/vla-struct-fields.exp
+ With gcc-12, I get for test-case gdb.base/vla-struct-fields.exp:
+ ...
+ (gdb) print inner_vla_struct_object_size == sizeof(inner_vla_struct_object)^M
+ $7 = 1^M
+ (gdb) XPASS: gdb.base/vla-struct-fields.exp: size of inner_vla_struct_object
+ ...
+
+ Fix this by limiting the xfailing to gcc-11 and earlier. Also, limit the
+ xfailing to the equality test.
+
+ Tested on x86_64-linux.
+
+2022-06-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix timeout in gdb.ada/ghost.exp
+ On openSUSE Tumbleweed with gcc-12, I run into a timeout:
+ ...
+ (gdb) print value^M
+ Multiple matches for value^M
+ [0] cancel^M
+ [1] ada.strings.maps.value (<ref> ada.strings.maps.character_mapping; \
+ character) return character at a-strmap.adb:599^M
+ [2] pck.value at src/gdb/testsuite/gdb.ada/ghost/pck.ads:17^M
+ [3] system.object_reader.value (<ref> system.object_reader.object_symbol) \
+ return system.object_reader.uint64 at s-objrea.adb:2279^M
+ [4] system.traceback.symbolic.value (system.address) return string at \
+ s-trasym.adb:200^M
+ > FAIL: gdb.ada/ghost.exp: print value (timeout)
+ print ghost_value^M
+ Argument must be choice number^M
+ (gdb) FAIL: gdb.ada/ghost.exp: print ghost_value
+ ...
+
+ Fix this by prefixing value (as well as the other printed values) with the
+ package name:
+ ...
+ (gdb) print pck.value^M
+ ...
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29055
+
+2022-06-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-09 Tom Tromey <tromey@adacore.com>
+
+ Minor fix to Python breakpoint event documentation
+ I noticed that the Python event documentation referred to the event's
+ "breakpoint" field as a function, whereas it is actually an attribute.
+ This patch fixes the error.
+
+2022-06-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/aarch64: fix 32-bit arm compatibility
+ GDB's ability to run 32-bit ARM processes on an AArch64 native target
+ is currently broken. The test gdb.multi/multi-arch.exp currently
+ fails with a timeout.
+
+ The cause of these problems is the following three functions:
+
+ aarch64_linux_nat_target::thread_architecture
+ aarch64_linux_nat_target::fetch_registers
+ aarch64_linux_nat_target::store_registers
+
+ What has happened, over time, is that these functions have been
+ modified, forgetting that any particular thread (running on the native
+ target) might be an ARM thread, or might be an AArch64 thread.
+
+ The problems always start with a line similar to this:
+
+ aarch64_gdbarch_tdep *tdep
+ = (aarch64_gdbarch_tdep *) gdbarch_tdep (inf->gdbarch);
+
+ The problem with this line is that if 'inf->gdbarch' is an ARM
+ architecture, then gdbarch_tdep will return a pointer to an
+ arm_gdbarch_tdep object, not an aarch64_gdbarch_tdep object. The
+ result of the above cast will, as a consequence, be undefined.
+
+ In aarch64_linux_nat_target::thread_architecture, after the undefined
+ cast we then proceed to make use of TDEP, like this:
+
+ if (vq == tdep->vq)
+ return inf->gdbarch;
+
+ Obviously at this point the result is undefined, but, if this check
+ returns false we then proceed with this code:
+
+ struct gdbarch_info info;
+ info.bfd_arch_info = bfd_lookup_arch (bfd_arch_aarch64, bfd_mach_aarch64);
+ info.id = (int *) (vq == 0 ? -1 : vq);
+ return gdbarch_find_by_info (info);
+
+ As a consequence we will return an AArch64 gdbarch object for our ARM
+ thread! Things go downhill from there on.
+
+ There are similar problems, with similar undefined behaviour, in the
+ fetch_registers and store_registers functions.
+
+ The solution is to make use of a check like this:
+
+ if (gdbarch_bfd_arch_info (inf->gdbarch)->bits_per_word == 32)
+
+ If the word size is 32 then we know we have an ARM architecture. We
+ just need to make sure that we perform this check before trying to
+ read the tdep field.
+
+ In aarch64_linux_nat_target::thread_architecture a little reordering,
+ and the addition of the above check allows us to easily avoid the
+ undefined behaviour.
+
+ For fetch_registers and store_registers I made the decision to split
+ each of the functions into two new helper functions, and so
+ aarch64_linux_nat_target::fetch_registers now calls to either
+ aarch64_fetch_registers or aarch32_fetch_registers, and there's a
+ similar change for store_registers.
+
+ One thing I had to decide was whether to place the new aarch32_*
+ functions into the aarch32-linux-nat.c file. In the end I decided to
+ NOT place the functions there, but instead leave them in
+ aarch64-linux-nat.c, my reasoning was this:
+
+ The existing functions in that file are shared from arm-linux-nat.c
+ and aarch64-linux-nat.c, this generic code to support 32-bit ARM
+ debugging from either native target.
+
+ In contrast, the two new aarch32 functions I have added _only_ make
+ sense when debugging on an AArch64 native target. These function
+ shouldn't be called from arm-linux-nat.c at all, and so, if we places
+ the functions into aarch32-linux-nat.c, the functions would be built
+ into a 32-bit ARM GDB, but never used.
+
+ With that said, there's no technical reason why they couldn't go in
+ aarch32-linux-nat.c, so if that is preferred I'm happy to move them.
+
+ After this commit the gdb.multi/multi-arch.exp passes.
+
+2022-06-09 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Document and fix exception stack offsets
+ Add a description of exception entry context stacking and fix next
+ frame offset (at 0xA8 relative to R0 location) as well as FPU
+ registers ones (starting at 0x68 relative to R0).
+
+ gdb/arm: Simplify logic for updating addresses
+ Small performance improvement by fetching previous SP value only
+ once before the loop and reuse it to avoid fetching at every
+ iteration.
+
+2022-06-09 Pedro Alves <pedro@palves.net>
+
+ Fix ARM_CC_FOR_TARGET handling
+ The previous patch that introduced the arm_cc_for_target procedure
+ moved the ARM_CC_FOR_TARGET global check to that procedure, but forgot
+ to tell tcl that ARM_CC_FOR_TARGET is a global. As a result,
+ specifying ARM_CC_FOR_TARGET on the command line actually does
+ nothing. This fixes it.
+
+ Change-Id: I4e33b7633fa665e2f7b8f8c9592a949d74a19153
+
+2022-06-09 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb/arm: Terminate unwinding when LR is 0xffffffff
+ ARMv7-M Architecture Reference "A2.3.1 Arm core registers" states
+ that LR is set to 0xffffffff on reset.
+
+ ARMv8-M Architecture Reference "B3.3 Registers" states that LR is set
+ to 0xffffffff on warm reset if Main Extension is implemented,
+ otherwise the value is unknown.
+
+2022-06-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: solve problems with compiler_info caching
+ After this commit:
+
+ commit 44d469c5f85a4243462b8966722dafa62b602bf5
+ Date: Tue May 31 16:43:44 2022 +0200
+
+ gdb/testsuite: add Fortran compiler identification to GDB
+
+ Some regressions were noticed:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-May/189673.html
+
+ The problem is associated with how compiler_info variable is cached
+ between calls to get_compiler_info.
+
+ Even before the above commit, get_compiler_info supported two
+ language, C and C++. Calling get_compiler_info would set the global
+ compiler_info based on the language passed as an argument to
+ get_compiler_info, and, in theory, compiler_info would not be updated
+ for the rest of the dejagnu run.
+
+ This obviously is slightly broken behaviour. If the first call to
+ get_compiler_info was for the C++ language then compiler_info would be
+ set based on the C++ compiler in use, while if the first call to
+ get_compiler_info was for the C language then compiler_info would be
+ set based on the C compiler.
+
+ This probably wasn't very noticable, assuming a GCC based test
+ environment then in most cases the C and C++ compiler would be the
+ same version.
+
+ However, if the user starting playing with CC_FOR_TARGET or
+ CXX_FOR_TARGET, then they might not get the behaviour they expect.
+
+ Except, to make matters worse, most of the time, the user probably
+ would get the behaviour they expected .... except when they didn't!
+ I'll explain:
+
+ In gdb.exp we try to avoid global variables leaking between test
+ scripts, this is done with the help of the two procs
+ gdb_setup_known_globals and gdb_cleanup_globals. All known globals
+ are recorded before a test script starts, and then, when the test
+ script ends, any new globals are deleted.
+
+ Normally, compiler_info is only set as a result of a test script
+ calling get_compiler_info or test_compiler_info. This means that the
+ compiler_info global will not exist when the test script starts, but
+ will exist when the test script end, and so, the compiler_info
+ variable is deleted at the end of each test.
+
+ This means that, in reality, the compiler_info is recalculated once
+ for each test script, hence, if a test script just checks on the C
+ compiler, or just checks on the C++ compiler, then compiler_info will
+ be correct and the user will get the behaviour they expect.
+
+ However, if a single test script tries to check both the C and C++
+ compiler versions then this will not work (even before the above
+ commit).
+
+ The situation is made worse be the behaviour or the load_lib proc.
+ This proc (provided by dejagnu) will only load each library once.
+ This means that if a library defines a global, then this global would
+ normally be deleted at the end of the first test script that includes
+ the library.
+
+ As future attempts to load the library will not actually reload it,
+ then the global will not be redefined and would be missing for later
+ test scripts that also tried to load that library.
+
+ To work around this issue we override load_lib in gdb.exp, this new
+ version adds all globals from the newly loaded library to the list of
+ globals that should be preserved (not deleted).
+
+ And this is where things get interesting for us. The library
+ trace-support.exp includes calls, at the file scope, to things like
+ is_amd64_regs_target, which cause get_compiler_info to be called.
+ This means that after loading the library the compiler_info global is
+ defined.
+
+ Our override of load_lib then decides that this new global has to be
+ preserved, and adds it to the gdb_persistent_globals array.
+
+ From that point on compiler_info will never be recomputed!
+
+ This commit addresses all the caching problems by doing the following:
+
+ Change the compiler_info global into compiler_info_cache global. This
+ new global is an array, the keys of this array will be each of the
+ supported languages, and the values will be the compiler version for
+ that language.
+
+ Now, when we call get_compiler_info, if the compiler information for
+ the specific language has not been computed, then we do that, and add
+ it to the cache.
+
+ Next, compiler_info_cache is defined by calling
+ gdb_persistent_global. This automatically adds the global to the list
+ of persistent globals. Now the cache will not be deleted at the end
+ of each test script.
+
+ This means that, for a single test run, we will compute the compiler
+ version just once for each language, this result will then be cached
+ between test scripts.
+
+ Finally, the legacy 'gcc_compiled' flag is now only set when we call
+ get_compiler_info with the language 'c'. Without making this change
+ the value of 'gcc_compiled' would change each time a new language is
+ passed to get_compiler_info. If the last language was e.g. Fortran,
+ then gcc_compiled might be left false.
+
+2022-06-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: handle errors better in test_compiler_info
+ Now that get_compiler_info might actually fail (if the language is not
+ handled), then we should try to handle this failure better in
+ test_compiler_info.
+
+ After this commit, if get_compiler_info fails then we will return a
+ suitable result depending on how the user called test_compiler_info.
+
+ If the user does something like:
+
+ set version [test_compiler_info "" "unknown-language"]
+
+ Then test_compiler_info will return an empty string. My assumption is
+ that the user will be trying to match 'version' against something, and
+ the empty string hopefully will not match.
+
+ If the user does something like:
+
+ if { [test_compiler_info "some_pattern" "unknown-language"] } {
+ ....
+ }
+
+ Then test_compiler_info will return false which seems the obvious
+ choice.
+
+ There should be no change in the test results after this commit.
+
+2022-06-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: make 'c' default language for get/test compiler info
+ This commit is a minor cleanup for the two functions (in gdb.exp)
+ get_compiler_info and test_compiler_info.
+
+ Instead of using the empty string as the default language, and just
+ "knowing" that this means the C language. Make this explicit. The
+ language argument now defaults to "c" if not specified, and the if
+ chain in get_compiler_info that checks the language not explicitly
+ handles "c" and gives an error for unknown languages.
+
+ This is a good thing, now that the API appears to take a language, if
+ somebody does:
+
+ test_compiler_info "xxxx" "rust"
+
+ to check the version of the rust compiler then we will now give an
+ error rather than just using the C compiler and leaving the user
+ having to figure out why they are not getting the results they
+ expect.
+
+ After a little grepping, I think the only place we were explicitly
+ passing the empty string to either get_compiler_info or
+ test_compiler_info was in gdb_compile_shlib_1, this is now changed to
+ pass "c" as the default language.
+
+ There should be no changes to the test results after this commit.
+
+2022-06-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: remove get_compiler_info calls from gdb.exp and dwarf.exp
+ We don't need to call get_compiler_info before calling
+ test_compiler_info; test_compiler_info includes a call to
+ get_compiler_info.
+
+ This commit cleans up lib/gdb.exp and lib/dwarf.exp a little by
+ removing some unneeded calls to get_compiler_info. We could do the
+ same cleanup throughout the testsuite, but I'm leaving that for
+ another day.
+
+ There should be no change in the test results after this commit.
+
+2022-06-09 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: use test_compiler_info in gcc_major_version
+ The procedure gcc_major_version was earlier using the global variable
+ compiler_info to retrieve gcc's major version. This is discouraged and
+ (as can be read in a comment in compiler.c) compiler_info should be
+ local to get_compiler_info and test_compiler_info.
+
+ The preferred way of getting the compiler string is via calling
+ test_compiler_info without arguments. Gcc_major_version was changed to
+ do that.
+
+2022-06-09 Yvan Roux <yvan.roux@foss.st.com>
+
+ gdb: add Yvan Roux to gdb/MAINTAINERS
+
+2022-06-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: resolve duplicate test names in gdb.threads/tls.exp
+ While running the gdb.threads/tls.exp test with a GDB configured
+ without Python, I noticed some duplicate test names.
+
+ This is caused by a call to skip_python_tests that is within a proc
+ that is called multiple times by the test script. Each call to
+ skip_python_tests results in a call to 'unsupported', and this causes
+ the duplicate test names.
+
+ After this commit we now call skip_python_tests just once and place
+ the result into a variable. Now, instead of calling skip_python_tests
+ multiple times, we just check the variable.
+
+ There should be no change in what is tested after this commit.
+
+2022-06-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: resolve duplicate test name in gnu_vector.exp
+ While testing on AArch64 I spotted a duplicate test name in the
+ gdb.base/gnu_vector.exp test.
+
+ This commit adds a 'with_test_prefix' to resolve the duplicate.
+
+ While I was in the area I updated a 'gdb_test_multiple' call to make
+ use of $gdb_test_name.
+
+ There should be no change in what is tested after this commit.
+
+2022-06-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-08 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make throw_perror_with_name static
+ The throw_perror_with_name function is not used outside of utils.c
+ right now. And as perror_with_name is just a wrapper around
+ throw_perror_with_name, then any future calls would be to
+ perror_with_name.
+
+ Lets make throw_perror_with_name static.
+
+ There should be no user visible changes after this commit.
+
+2022-06-08 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: remove trailing '.' from perror_with_name calls
+ I ran into this error while working on AArch64 GDB:
+
+ Unable to fetch VFP registers.: Invalid argument.
+
+ Notice the '.:' in the middle of this error message.
+
+ This is because of this call in aarch64-linux-nat.c:
+
+ perror_with_name (_("Unable to fetch VFP registers."));
+
+ The perror_with_name function take a string, and adds ': <message>' to
+ the end the string, so I don't think the string that we pass to
+ perror_with_name should end in '.'.
+
+ This commit removes all of the trailing '.' characters from
+ perror_with_name calls, which give more readable error messages.
+
+ I don't believe that any of these errors are tested in the
+ testsuite (after a little grepping).
+
+2022-06-08 Tom Tromey <tom@tromey.com>
+
+ Move CU queue to dwarf2_per_objfile
+ The CU queue is a member of dwarf2_per_bfd, but it is only used when
+ expanding CUs. Also, the dwarf2_per_objfile destructor checks the
+ queue -- however, if the per-BFD object is destroyed first, this will
+ not work. This was pointed out Lancelot as fallout from the patch to
+ rewrite the registry system.
+
+ This patch avoids this problem by moving the queue to the per-objfile
+ object.
+
+2022-06-08 Tom Tromey <tom@tromey.com>
+
+ Change allocation of m_dwarf2_cus
+ m_dwarf2_cus manually manages the 'dwarf2_cu' pointers it owns. This
+ patch simplifies the code by changing it to use unique_ptr.
+
+2022-06-08 Andrew Burgess <aburgess@redhat.com>
+
+ libopcodes: extend the styling within the i386 disassembler
+ The i386 disassembler is pretty complex. Most disassembly is done
+ indirectly; operands are built into buffers within a struct instr_info
+ instance, before finally being printed later in the disassembly
+ process.
+
+ Sometimes the operand buffers are built in a different order to the
+ order in which they will eventually be printed.
+
+ Each operand can contain multiple components, e.g. multiple registers,
+ immediates, other textual elements (commas, brackets, etc).
+
+ When looking for how to apply styling I guess the ideal solution would
+ be to move away from the operands being a single string that is built
+ up, and instead have each operand be a list of "parts", where each
+ part is some text and a style. Then, when we eventually print the
+ operand we would loop over the parts and print each part with the
+ correct style.
+
+ But it feels like a huge amount of work to move from where we are
+ now to that potentially ideal solution. Plus, the above solution
+ would be pretty complex.
+
+ So, instead I propose a .... different solution here, one that works
+ with the existing infrastructure.
+
+ As each operand is built up, piece be piece, we pass through style
+ information. This style information is then encoded into the operand
+ buffer (see below for details). After this the code can continue to
+ operate as it does right now in order to manage the set of operand
+ buffers.
+
+ Then, as each operand is printed we can split the operand buffer into
+ chunks at the style marker boundaries, with each chunk being printed
+ with the correct style.
+
+ For encoding the style information I use a single character, currently
+ \002, followed by the style encoded as a single hex digit, followed
+ again by the \002 character.
+
+ This of course relies on there not being more than 16 styles, but that
+ is currently true, and hopefully will remain true for the foreseeable
+ future.
+
+ The other major concern that has arisen around this work is whether
+ the escape character could ever be encountered in output naturally
+ generated by the disassembler. If this did happen then the escape
+ characters would be stripped from the output, and the wrong styling
+ would be applied.
+
+ However, I don't believe that this is currently a problem.
+ Disassembler content comes from a number of sources. First there's
+ content that copied directly from the i386-dis.c file, this is things
+ like register names, and other syntax elements (brackets, commas,
+ etc). We can easily check that the i386-dis.c file doesn't contain
+ our special character.
+
+ The next source of content are immediate operands. The text for these
+ operands is generated by calls into libc. By selecting a
+ non-printable character we can be confident that this is not something
+ that libc will generate as part of an immediate representation.
+
+ The other output that appears to be from the disassembler is operands
+ that contain addresses and (possibly) symbol names. It is quite
+ possible that a symbol name might contain any special character we
+ could imagine, so is this a problem?
+
+ I don't think it is, we don't actually print address and symbol
+ operands through the disassembler, instead, the disassembler calls
+ back to the user (objdump, gdb, etc) to print the address and symbol
+ on its behalf. This content is printed directly to the output stream,
+ it does not pass through the i386 disassembler output buffers. As a
+ result, we never check this particular output for styling escape
+ characters.
+
+ In some (not very scientific) benchmarking on my machine,
+ disassembling a reasonably large (142M) shared library, I'm not seeing
+ any significant slow down in disassembler speed with this change.
+
+ Most instructions are now being fully syntax highlighted when I
+ disassemble using the --disassembler-color=extended-color option. I'm
+ sure that there are probably still a few corner cases that need fixing
+ up, but we can come back to them later I think.
+
+ When disassembler syntax highlighting is not being used, then there
+ should be no user visible changes after this commit.
+
+2022-06-08 Carl Love <cel@us.ibm.com>
+
+ Fix gdb.arch/powerpc-power7.exp isel disassembly output.
+ The following commit changes the output format for the isel instruction on
+ PowerPC.
+
+ commit dd4832bf3efc1bd1797a6b9188260692b8b0db52 Introduces error in test
+ Author: Dmitry Selyutin <ghostmansd@gmail.com>
+ Date: Tue May 24 13:46:35 2022 +0000
+
+ opcodes: introduce BC field; fix isel
+
+ Per Power ISA Version 3.1B 3.3.12, isel uses BC field rather than CRB
+ field present in binutils sources. Also, per 1.6.2, BC has the same
+ semantics as BA and BB fields, so this should keep the same flags and
+ mask, only with the different offset.
+
+ opcodes/
+ * ppc-opc.c
+ (BC): Define new field, with the same definition as CRB field,
+ but with the PPC_OPERAND_CR_BIT flag present.
+ gas/
+ * testsuite/gas/ppc/476.d: Update.
+ * testsuite/gas/ppc/a2.d: Update.
+ * testsuite/gas/ppc/e500.d: Update.
+ * testsuite/gas/ppc/power7.d: Update.
+ <snip>
+ --- a/gas/testsuite/gas/ppc/476.d
+ +++ b/gas/testsuite/gas/ppc/476.d
+ @@ -209,7 +209,7 @@ Disassembly of section \.text:
+ .*: (7c 20 07 8c|8c 07 20 7c) ici 1
+ .*: (7c 03 27 cc|cc 27 03 7c) icread r3,r4
+ .*: (50 83 65 36|36 65 83 50) rlwimi r3,r4,12,20,27
+ -.*: (7c 43 27 1e|1e 27 43 7c) isel r2,r3,r4,28
+ +.*: (7c 43 27 1e|1e 27 43 7c) isel r2,r3,r4,4\*cr7\+lt
+
+ The above change breaks the gdb regression test gdb.arch/powerpc-power7.exp
+ on Power 7, Power 8, Power 9 and Power 10.
+
+ This patch updates the regression test gdb.arch/powerpc-power7.exp with
+ the new expected output for the isel instruction.
+
+ The patch has been tested on Power 7 and Power 10 to verify the patch fixes
+ the test.
+
+2022-06-08 Pedro Alves <pedro@palves.net>
+
+ aarch64: Add fallback if ARM_CC_FOR_TARGET not set
+ On Aarch64, you can set ARM_CC_FOR_TARGET to point to the 32-bit
+ compiler to use when testing gdb.multi/multi-arch.exp and
+ gdb.multi/multi-arch-exec.exp. If you don't set it, then those
+ testcases don't run.
+
+ I guess that approximately nobody remembers to set ARM_CC_FOR_TARGET.
+
+ This commit adds a fallback. If ARM_CC_FOR_TARGET is not set, and
+ testing for Linux, try arm-linux-gnueabi-gcc,
+ arm-none-linux-gnueabi-gcc, arm-linux-gnueabihf-gcc as 32-bit
+ compilers, making sure that the produced executable runs on the target
+ machine before claiming that the compiler produces useful executables.
+
+ Change-Id: Iefe5865d5fc84b4032eaff7f4c5c61582bf75c39
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ Don't encode reloc.size
+ I expect the encoded reloc.size field originally came from aout
+ r_length ecoding, but somehow went wrong for 64-bit relocs (which
+ should have been encoded as 3). Toss all that out, just use a byte
+ size instead. The changes outside of reloc.c in this patch should
+ make the code independent of how reloc.size is encoded.
+
+ * reloc.c (struct reloc_howto_struct): Increase size field by
+ one bit. Comment.
+ (HOWTO_RSIZE): Don't encode size.
+ (bfd_get_reloc_size): Adjust, and make it an inline function.
+ (read_reloc, write_reloc): Adjust.
+ * bfd-in2.h: Regenerate.
+ * aout-ns32k.c: Include libbfd.h.
+ (put_reloc): Don't use howto->size directly. Calculate r_length
+ using bfd_log2 and bfd_get_reloc_size.
+ * aoutx.h (swap_std_reloc_out): Likewise.
+ (aout_link_reloc_link_order): Likewise.
+ * i386lynx.c (swap_std_reloc_out
+ * mach-o-i386.c (bfd_mach_o_i386_swap_reloc_out
+ * pdp11.c (aout_link_reloc_link_order
+ * coff-arm.c (coff_arm_reloc): Don't use howto->size directly,
+ use bfd_get_reloc_size instead and adjust switch cases.
+ * coff-i386.c (coff_i386_reloc): Similarly.
+ * coff-x86_64.c (coff_amd64_reloc): Likewise.
+ * cpu-ns32k.c (do_ns32k_reloc): Likewise.
+ * elf32-arc.c (arc_do_relocation): Likewise.
+ * elf32-arm.c (elf32_arm_final_link_relocate): Likewise.
+ * elf32-bfin.c (bfin_bfd_reloc): Likewise.
+ * elf32-cr16.c (cr16_elf_final_link_relocate): Likewise.
+ * elf32-cris.c (cris_elf_pcrel_reloc): Likewise.
+ * elf32-crx.c (crx_elf_final_link_relocate): Likewise.
+ * elf32-csky.c (csky_elf_relocate_section): Likewise.
+ * elf32-d10v.c (extract_rel_addend, insert_rel_addend): Likewise.
+ * elf32-i386.c (elf_i386_relocate_section): Likewise.
+ * elf32-m32r.c (m32r_elf_generic_reloc): Likewise.
+ * elf32-nds32.c (nds32_elf_generic_reloc): Likewise.
+ * syms.c (_bfd_stab_section_find_nearest_line): Likewise.
+ * coff-rs6000.c (xcoff_ppc_relocate_section): Adjust howto.size.
+ * coff64-rs6000.c (xcoff64_ppc_relocate_section): Likewise.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ bfin reloc offset checks
+ These all ought to use bfd_reloc_offset_in_range. In particular, replace
+ the check using howto->size + 1u.
+
+ * elf32-bfin.c (bfin_pcrel24_reloc): Use bfd_reloc_offset_in_range.
+ (bfin_imm16_reloc, bfin_byte4_reloc, bfin_bfd_reloc),
+ (bfin_final_link_relocate): Likewise.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ Revert reloc howto nits
+ The "HOWTO size encoding" patch put 1 as the HOWTO size arg for
+ numerous howtos that are unused, describe dynamic relocs, are markers,
+ or otherwise are special purpose reloc howtos that don't care about
+ the size. The idea was to ensure no howto changed by inspecting
+ object files. Revert those changes, making them zero size.
+
+ * coff-alpha.c: Give special purpose reloc howtos a size of zero.
+ * coff-mcore.c, * elf-hppa.h, * elf-m10300.c, * elf32-arm.c,
+ * elf32-csky.c, * elf32-m32c.c, * elf32-m68k.c, * elf32-mep.c,
+ * elf32-mips.c, * elf32-ppc.c, * elf32-rx.c, * elf32-s390.c,
+ * elf32-spu.c, * elf32-tic6x.c, * elf32-tilepro.c, *elf32-vax.c,
+ * elf32-xtensa.c, * elf64-alpha.c, * elf64-mips.c,
+ * elf64-mmix.c, * elf64-ppc.c, * elf64-s390.c, * elfn32-mips.c,
+ * elfxx-loongarch.c, * elfxx-riscv.c, * elfxx-sparc.c,
+ * elfxx-tilegx.c, * som.c, * vms-alpha.c: Likewise.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ HOWTO size encoding
+ This changes the HOWTO macro to encode the howto.size field from a
+ value given in bytes. This of course requires editing all target
+ uses of HOWTO, a major pain, but makes it a little nicer to specify
+ new target HOWTOs. Object files before/after this patch are
+ unchanged in .data and .rodata.
+
+ bfd/
+ * reloc.c (HOWTO_RSIZE): Encode size in bytes.
+ (EMPTY_HOWTO): Adjust to keep it all zero.
+ * aout-ns32k.c, * aoutx.h, * coff-alpha.c, * coff-arm.c,
+ * coff-i386.c, * coff-mcore.c, * coff-mips.c, * coff-rs6000.c,
+ * coff-sh.c, * coff-tic30.c, * coff-tic4x.c, * coff-tic54x.c,
+ * coff-x86_64.c, * coff-z80.c, * coff-z8k.c, * coff64-rs6000.c,
+ * elf-hppa.h, * elf-m10200.c, * elf-m10300.c, * elf32-arc.c,
+ * elf32-arm.c, * elf32-avr.c, * elf32-bfin.c, * elf32-cr16.c,
+ * elf32-cris.c, * elf32-crx.c, * elf32-csky.c, * elf32-d10v.c,
+ * elf32-d30v.c, * elf32-dlx.c, * elf32-epiphany.c,
+ * elf32-fr30.c, * elf32-frv.c, * elf32-ft32.c, * elf32-gen.c,
+ * elf32-h8300.c, * elf32-i386.c, * elf32-ip2k.c, * elf32-iq2000.c,
+ * elf32-lm32.c, * elf32-m32c.c, * elf32-m32r.c, * elf32-m68hc11.c,
+ * elf32-m68hc12.c, * elf32-m68k.c, * elf32-mcore.c, * elf32-mep.c,
+ * elf32-metag.c, * elf32-microblaze.c, * elf32-mips.c,
+ * elf32-moxie.c, * elf32-msp430.c, * elf32-mt.c, * elf32-nds32.c,
+ * elf32-nios2.c, * elf32-or1k.c, * elf32-pj.c, * elf32-ppc.c,
+ * elf32-pru.c, * elf32-rl78.c, * elf32-rx.c, * elf32-s12z.c,
+ * elf32-s390.c, * elf32-score.c, * elf32-score7.c,
+ * elf32-sh-relocs.h, * elf32-spu.c, * elf32-tic6x.c,
+ * elf32-tilepro.c, * elf32-v850.c, * elf32-vax.c,
+ * elf32-visium.c, * elf32-wasm32.c, * elf32-xc16x.c,
+ * elf32-xgate.c, * elf32-xstormy16.c, * elf32-xtensa.c,
+ * elf32-z80.c, * elf64-alpha.c, * elf64-bpf.c, * elf64-gen.c,
+ * elf64-mips.c, * elf64-mmix.c, * elf64-nfp.c, * elf64-ppc.c,
+ * elf64-s390.c, * elf64-x86-64.c, * elfn32-mips.c,
+ * elfnn-aarch64.c, * elfxx-ia64.c, * elfxx-loongarch.c,
+ * elfxx-mips.c, * elfxx-riscv.c, * elfxx-sparc.c,
+ * elfxx-tilegx.c, * mach-o-aarch64.c, * mach-o-arm.c,
+ * mach-o-i386.c, * mach-o-x86-64.c, * pdp11.c, * reloc.c,
+ * som.c, * vms-alpha.c: Adjust all uses of HOWTO.
+ * bfd-in2.h: Regenerate.
+ include/
+ * elf/arc-reloc.def: Adjust all uses of HOWTO.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ HOWTO_RSIZE
+ Define a helper macro for HOWTO.
+
+ * reloc.c (HOWTO_RSIZE): Define.
+ (HOWTO): Use it.
+ * bfd-in2.h: Regenerate.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ elf64-nfp reloc fix
+ These are all dummy howtos, there is no reason one of them should
+ have partial_inplace true.
+
+ * elf64-nfp.c (elf_nfp_howto_table <R_NFP_IMMED_LO16_I_B>): Don't
+ set partial_inplace.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ coff-z80 reloc howto fixes
+ Mostly cosmetic unless attempting to link coff-z80 into another output
+ format.
+
+ * coff-z80.c (howto_table <R_IMM24, R_WORD0, R_WORD1>): Correct size.
+ (extra_case): Use bfd_{get,put}_24 when applying R_IMM24.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ NONE reloc fixes
+ Make them all zero size standard do-nothing howtos.
+
+ * elf32-csky.c (csky_elf_howto_table <R_CKCORE_NONE>): Correct howto.
+ * elf32-ft32.c (ft32_elf_howto_table <R_FT32_NONE>): Likewise.
+ * elf32-gen.c (dummy): Likewise.
+ * elf32-nds32.c (none_howto): Likewise.
+ * elf32-nios2.c (elf_nios2_r2_howto_table_rel <R_NIOS2_NONE>):
+ Likewise.
+ * elf32-pru.c (elf_pru_howto_table_rel <R_PRU_NONE>): Likewise.
+ * elf32-v850.c (v800_elf_howto_table <R_V810_NONE>): Likewise.
+ * elf64-gen.c (dummy): Likewise.
+ * elfn32-mips.c (elf_mips_howto_table_rela <R_MIPS_NONE): Likewise.
+ * elfxx-mips.c (none_howto): Likewise.
+ * reloc.c (none_howto): Likewise.
+
+2022-06-08 Alan Modra <amodra@gmail.com>
+
+ asan: double free sb_kill
+ oss-fuzz hits a flaky crash with a double-free. I think this is due
+ to gas static state not being reinitialised between testcases, a bug
+ with oss-fuzz not gas. Anyway, this patch should avoid the problem.
+
+ * input-scrub.c (input_scrub_push): Move init of sb_index..
+ (input_scrub_reinit): ..to here.
+
+2022-06-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-07 Tom Tromey <tromey@adacore.com>
+
+ Use subclasses of windows_process_info
+ This changes windows_process_info to use virtual methods for its
+ callbacks, and then changes the two clients of this code to subclass
+ this class to implement the methods.
+
+ I considered using CRTP here, but that would require making the new
+ structures visible to the compilation of of nat/windows-nat.c. This
+ seemed like a bit of a pain, so I didn't do it.
+
+ This change then lets us change all the per-inferior globals to be
+ members of the new subclass. Note that there can still only be a
+ single inferior -- currently there's a single global of the new type.
+ This is just another step toward possibly implementing multi-inferior
+ for Windows.
+
+ It's possible this could be cleaned up further... ideally I'd like to
+ move more of the data into the base class. However, because gdb
+ supports Cygwin and gdbserver does not, and because I don't have a way
+ to build or test Cygwin, larger refactorings are difficult.
+
+2022-06-07 Tom Tromey <tromey@adacore.com>
+
+ Turn some windows-nat.c static functions into methods
+ This patch turns some windows-nat.c static functions into methods on
+ windows_nat_target. This avoids having to reference the
+ windows_nat_target singleton in some more spots -- a minor code
+ cleanup.
+
+ Allow ASLR to be disabled on Windows
+ On Windows, it is possible to disable ASLR when creating a process.
+ This patch adds code to do this, and hooks it up to gdb's existing
+ disable-randomization feature. Because the Windows documentation
+ cautions that this isn't available on all versions of Windows, the
+ CreateProcess wrapper function is updated to make the attempt, and
+ then fall back to the current approach if it fails.
+
+ Introduce wrapper for CreateProcess
+ This is a small refactoring that introduces a wrapper for the Windows
+ CreateProcess function. This is done to make the next patch a bit
+ simpler.
+
+2022-06-07 Enze Li <enze.li@hotmail.com>
+
+ Update my email address in gdb/MAINTAINERS
+
+2022-06-07 Tom Tromey <tromey@adacore.com>
+
+ Constify solib_name_from_address
+ I noticed that solib_name_from_address returned a non-const string,
+ but it's more appropriate to return const. This patch implements
+ this. Tested by rebuilding.
+
+2022-06-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/rust] Add missing _() for error call
+ In commit 1390b65a1b9 ("[gdb/rust] Fix literal truncation") I forgot to add
+ _() around a string using in an error call.
+
+ Fix this by adding the missing _().
+
+ Tested on x86_64-linux.
+
+2022-06-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Allow frv::fr300 in selftests
+ In skip_arch in gdb/selftest-arch.c we skip architecture fr300 because of
+ PR20946, but the PR has been fixed by commit 0ae60c3ef45 ("Prevent an abort in
+ the FRV disassembler if the target bfd name is unknown.") in Januari 2017.
+
+ Remove the skipping of frv::fr300.
+
+ Tested on x86_64-linux.
+
+2022-06-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-06 Tom Tromey <tromey@adacore.com>
+
+ Consolidate "Python API" sections in NEWS
+ I noticed that the gdb NEWS file had two "Python API" sections in
+ "Changes since GDB 12". This patch consolidates the two. I chose to
+ preserve the second one, first because it is longer, and second
+ because I felt that user command changes should come before API
+ changes.
+
+ Simplify varobj "change" logic
+ varobj used to store 'print_value' as a C string, where NULL was a
+ valid value, and so it had logic to handle this situation. However,
+ at some point this was changed to be a std::string, and so the code
+ can be simplified in this spot.
+
+2022-06-06 Tom Tromey <tromey@adacore.com>
+
+ Remove "-break-insert -r" tests
+ PR mi/14270 points out that mi-break.exp has some tests for an
+ unimplemented "-r" switch for "-break-insert". This switch was never
+ implemented, and is not documented -- though it is mentioned in a
+ comment in the documentation. This patch removes the test and the doc
+ comment.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=14270
+
+2022-06-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Name arch selftests more clearly
+ When running some all archs selftest I get:
+ ...
+ $ gdb -q -batch -ex "maint selftest unpack_field_as_long"
+ Running selftest unpack_field_as_long::A6.
+ ...
+
+ By now I know that A6 is an arc architecture, but for others that's less
+ clear.
+
+ Fix this by using unpack_field_as_long::arc::A6 instead.
+
+ This then introduces redundant names like arm::arm, so try to avoid those,
+ though I'm not entirely convinced that that's worth the trouble.
+
+ This introduces the following new names:
+ ...
+ +Running selftest unpack_field_as_long::am33_2::am33-2.
+ +Running selftest unpack_field_as_long::arc::A6.
+ +Running selftest unpack_field_as_long::arc::A7.
+ +Running selftest unpack_field_as_long::arc::EM.
+ +Running selftest unpack_field_as_long::arc::HS.
+ +Running selftest unpack_field_as_long::arm::ep9312.
+ +Running selftest unpack_field_as_long::arm::iwmmxt.
+ +Running selftest unpack_field_as_long::arm::iwmmxt2.
+ +Running selftest unpack_field_as_long::arm::xscale.
+ +Running selftest unpack_field_as_long::bpf::xbpf.
+ +Running selftest unpack_field_as_long::frv::fr400.
+ +Running selftest unpack_field_as_long::frv::fr450.
+ +Running selftest unpack_field_as_long::frv::fr500.
+ +Running selftest unpack_field_as_long::frv::fr550.
+ +Running selftest unpack_field_as_long::frv::simple.
+ +Running selftest unpack_field_as_long::frv::tomcat.
+ +Running selftest unpack_field_as_long::iq2000::iq10.
+ +Running selftest unpack_field_as_long::m32c::m16c.
+ +Running selftest unpack_field_as_long::mep::c5.
+ +Running selftest unpack_field_as_long::mep::h1.
+ +Running selftest unpack_field_as_long::nds32::n1.
+ +Running selftest unpack_field_as_long::nds32::n1h.
+ +Running selftest unpack_field_as_long::nds32::n1h_v2.
+ +Running selftest unpack_field_as_long::nds32::n1h_v3.
+ +Running selftest unpack_field_as_long::nds32::n1h_v3m.
+ +Running selftest unpack_field_as_long::z80::ez80-adl.
+ +Running selftest unpack_field_as_long::z80::ez80-z80.
+ +Running selftest unpack_field_as_long::z80::gbz80.
+ +Running selftest unpack_field_as_long::z80::r800.
+ +Running selftest unpack_field_as_long::z80::z180.
+ ...
+
+ Tested on x86_64-linux.
+
+2022-06-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Enable some more print_one_insn selftests
+ In print_one_insn_test we have this cluster of skipped tests:
+ ...
+ case bfd_arch_ia64:
+ case bfd_arch_mep:
+ case bfd_arch_mips:
+ case bfd_arch_tic6x:
+ case bfd_arch_xtensa:
+ return;
+ ...
+
+ Enable some of these, and document in more detail why they're enabled or
+ skipped.
+
+ Likewise, document bfd_arch_or1k because it's an odd case.
+
+ Tested on x86_64-linux.
+
+2022-06-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Fix maint selftest -v print_one_insn
+ When running the print_one_insn selftests with -v, I get:
+ ...
+ $ gdb -q -batch -ex "maint selftest -v print_one_insn"
+ Running selftest print_one_insn::A6.
+ .shor 0x783eRunning selftest print_one_insn::A7.
+ trap_s 0x1Running selftest print_one_insn::ARC600.
+ .shor 0x783eRunning selftest print_one_insn::ARC601.
+ Running selftest print_one_insn::ARC700.
+ trap_s 0x1Running selftest print_one_insn::ARCv2.
+ trap_s 0x1Running selftest print_one_insn::EM.
+ trap_s 0x1Running selftest print_one_insn::HS.
+ trap_s 0x1Running selftest print_one_insn::Loongarch32.
+ ...
+
+ The insn is written to gdb_stdout, and there is code in the selftest to add a
+ newline after the insn, which writes to stream().
+
+ The stream() ui_file points into a string buffer, which the disassembler uses
+ before writing to gdb_stdout, so writing into it after the disassembler has
+ finished has no effect.
+
+ Fix this by using gdb_stdlog and debug_printf (which is what the unit test
+ infrastructure itself uses) instead, such that we have:
+ ...
+ Running selftest print_one_insn::A6.
+ .shor 0x783e
+ Running selftest print_one_insn::A7.
+ trap_s 0x1
+ Running selftest print_one_insn::ARC600.
+ .shor 0x783e
+ Running selftest print_one_insn::ARC601.
+ Running selftest print_one_insn::ARC700.
+ trap_s 0x1
+ Running selftest print_one_insn::ARCv2.
+ trap_s 0x1
+ Running selftest print_one_insn::Loongarch32.
+ ...
+
+ Note: I've also removed the printing of arch_name, which would give
+ us otherwise the redundant:
+ ...
+ Running selftest print_one_insn::A6.
+ arc .shor 0x783e
+ Running selftest print_one_insn::A7.
+ arc trap_s 0x1
+ ...
+
+ Tested on x86_64-linux.
+
+2022-06-06 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: add missing skip_python_tests call in py-doc-reformat.exp
+ In commit:
+
+ commit 51e8dbe1fbe7d8955589703140ca5eba7b4f1bd7
+ Date: Mon May 16 19:26:54 2022 +0100
+
+ gdb/python: improve formatting of help text for user defined commands
+
+ the test that was added (gdb.python/py-doc-reformat.exp) was missing a
+ call to skip_python_tests. As a result, this test would fail for any
+ GDB built within Python support.
+
+ This commit adds a call to skip_python_tests.
+
+2022-06-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-05 Tom Tromey <tom@tromey.com>
+
+ Remove obsolete Python 2 comment
+ I found a comment that referred to Python 2, but that is now obsolete
+ -- the code it refers to is gone. I'm checking in this patch to
+ remove the comment.
+
+ There's a similar comment elsewhere, but I plan to remove that one in
+ another patch I'm going to submit shortly.
+
+2022-06-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-04 Alan Modra <amodra@gmail.com>
+
+ asan: null dereference in coff_count_linenumbers
+ * coffgen.c (coff_count_linenumbers): Don't segfault when asymbol
+ the_bfd is NULL.
+
+ asan: uninitialised write in bfd_mach_o_write_contents
+ * mach-o.c (bfd_mach_o_write_contents): Always set
+ bfd_mach_o_dyld_info_command *_off fields.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/ada] Fix literal truncation
+ Make sure we error out on overflow instead of truncating in all cases.
+
+ Tested on x86_64-linux, with a build with --enable-targets=all.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/m2] Fix UB and literal truncation
+ Rewrite parse_number to use ULONGEST instead of LONGEST, to fix UB errors as
+ mentioned in PR29163.
+
+ Furthermore, make sure we error out on overflow instead of truncating in all
+ cases.
+
+ Tested on x86_64-linux, with a build with --enable-targets=all.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29163
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/rust] Fix literal truncation
+ Make sure we error out on overflow instead of truncating in all cases.
+
+ I've used as overflow string: "Integer literal is too large", based
+ on what I found at
+ <rust-lang/rust>/src/test/ui/parser/int-literal-too-large-span.rs
+ but perhaps someone has a better idea.
+
+ Tested on x86_64-linux, with a build with --enable-targets=all.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/pascal] Fix literal truncation
+ Make sure we error out on overflow instead of truncating in all cases.
+
+ The current implementation of parse_number contains a comment about PR16377,
+ but that's related to C-like languages. In absence of information of whether
+ the same fix is needed for pascal, take the conservative approach and keep
+ behaviour for decimals unchanged.
+
+ Tested on x86_64-linux, with a build with --enable-targets=all.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/go] Fix literal truncation
+ Make sure we error out on overflow instead of truncating in all cases.
+
+ The current implementation of parse_number contains a comment about PR16377,
+ but that's related to C-like languages. In absence of information of whether
+ the same fix is needed for go, take the conservative approach and keep
+ behaviour for decimals unchanged.
+
+ Tested on x86_64-linux, with a build with --enable-targets=all.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/fortran] Fix literal truncation
+ As mentioned in commit 5b758627a18 ("Make gdb.base/parse_number.exp test all
+ architectures"):
+ ...
+ There might be a bug that 32-bit fortran truncates 64-bit values to
+ 32-bit, given "p/x 0xffffffffffffffff" returns "0xffffffff".
+ ...
+
+ More concretely, we have:
+ ...
+ $ for arch in i386:x86-64 i386; do \
+ gdb -q -batch -ex "set arch $arch" -ex "set lang fortran" \
+ -ex "p /x 0xffffffffffffffff"; \
+ done
+ The target architecture is set to "i386:x86-64".
+ $1 = 0xffffffffffffffff
+ The target architecture is set to "i386".
+ $1 = 0xffffffff
+ ...
+
+ Fix this by adding a range check in parse_number in gdb/f-exp.y.
+
+ Furthermore, make sure we error out on overflow instead of truncating in all
+ other cases.
+
+ Tested on x86_64-linux.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/c] Fix type of 2147483648 and literal truncation
+ [ Assuming arch i386:x86-64, sizeof (int) == 4,
+ sizeof (long) == sizeof (long long) == 8. ]
+
+ Currently we have (decimal for 0x80000000):
+ ...
+ (gdb) ptype 2147483648
+ type = unsigned int
+ ...
+
+ According to C language rules, unsigned types cannot be used for decimal
+ constants, so the type should be long instead (reported in PR16377).
+
+ Fix this by making sure the type of 2147483648 is long.
+
+ The next interesting case is (decimal for 0x8000000000000000):
+ ...
+ (gdb) ptype 9223372036854775808
+ type = unsigned long
+ ...
+
+ According to the same rules, unsigned long is incorrect.
+
+ Current gcc uses __int128 as type, which is allowed, but we don't have that
+ available in gdb, so the strict response here would be erroring out with
+ overflow.
+
+ Older gcc without __int128 support, as well as clang use an unsigned type, but with
+ a warning. Interestingly, clang uses "unsigned long long" while gcc uses
+ "unsigned long", which seems the better choice.
+
+ Given that the compilers allow this as a convience, do the same in gdb
+ and keep type "unsigned long", and make this explicit in parser and test-case.
+
+ Furthermore, make sure we error out on overflow instead of truncating in all
+ cases.
+
+ Tested on x86_64-linux with --enable-targets=all.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16377
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Test more values in gdb.base/parse_numbers.exp
+ Currently we only test value 0xffffffffffffffff in test-case
+ gdb.base/parse_numbers.exp.
+
+ Test more interesting values, both in decimal and hex format, as well as
+ negative decimals for language modula-2.
+
+ This results in an increase in total tests from 15572 to 847448 (55 times
+ more tests).
+
+ Balance out the increase in runtime by reducing the number of architectures
+ tested: only test one architecture per sizeof longlong/long/int/short
+ combination, while keeping the possibility intact to run with all
+ architectures (through setting a variable in the test-case)
+
+ Results in slight reduction of total tests: 15572 -> 13853.
+
+ Document interesting cases in the expected results:
+ - wrapping from unsigned to signed
+ - truncation
+ - PR16377: using unsigned types to represent decimal constants in C
+
+ Running the test-case with a gdb build with -fsanitize=undefined, we trigger
+ two UB errors in the modula-2 parser, filed as PR29163.
+
+ Tested on x86_64-linux with --enable-targets=all.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix ERROR in gdb.ctf/funcreturn.exp
+ On openSUSE Tumbleweed (with gcc-12, enabling ctf tests) I run into:
+ ...
+ ERROR: tcl error sourcing src/gdb/testsuite/gdb.ctf/funcreturn.exp.
+ ERROR: tcl error code NONE
+ ERROR: Unexpected arguments: \
+ {print v_double_func} \
+ {[0-9]+ = {double \(\)} 0x[0-9a-z]+.*} \
+ {print double function} \
+ }
+ ...
+
+ The problem is a curly brace as fourth argument to gdb_test, which errors out
+ due to recently introduced more strict argument checking in gdb_test.
+
+ Fix the error by removing the brace.
+
+ Though this fixes the error for me, due to PR29160 I get only FAILs, so I can't
+ claim proper testing on x86_64-linux.
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.threads/manythreads.exp with check-read1
+ When running test-case gdb.threads/manythreads.exp with check-read1, I ran
+ into this hard-to-reproduce FAIL:
+ ...
+ [New Thread 0x7ffff7318700 (LWP 31125)]^M
+ [Thread 0x7ffff7321700 (LWP 31124) exited]^M
+ [New T^C^M
+ ^M
+ Thread 769 "manythreads" received signal SIGINT, Interrupt.^M
+ [Switching to Thread 0x7ffff6d66700 (LWP 31287)]^M
+ 0x00007ffff7586a81 in clone () from /lib64/libc.so.6^M
+ (gdb) FAIL: gdb.threads/manythreads.exp: stop threads 1
+ ...
+
+ The matching in the failing gdb_test_multiple is done in an intricate way,
+ trying to pass on some order and fail on another order.
+
+ Fix this by rewriting the regexps to match one line at most, and detecting
+ invalid order by setting and checking state variables.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29177
+
+2022-06-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Fix warning in print_one_insn::ez80-adl
+ When running selftest print_one_insn::ez80-adl we run into this warning:
+ ...
+ Running selftest print_one_insn::ez80-adl.
+ warning: Unable to determine inferior's software breakpoint type: couldn't
+ find `_break_handler' function in inferior. Will be used default software \
+ breakpoint instruction RST 0x08.
+ ...
+
+ Fix this by explicitly handling bfd_arch_z80 in print_one_insn_test.
+
+ Tested on x86_64-linux.
+
+2022-06-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-03 Tom Tromey <tromey@adacore.com>
+
+ Use bool for evregpy_no_listeners_p
+ I noticed that evregpy_no_listeners_p should return a bool. This
+ patch makes this change. I'm checking it in.
+
+2022-06-03 Alan Modra <amodra@gmail.com>
+
+ asan: heap buffer overflow in _bfd_mips_elf_section_from_shdr
+ * elfxx-mips.c (_bfd_mips_elf_section_from_shdr): Sanity check
+ intopt.size and remaining bytes in section for reginfo.
+
+2022-06-03 Alan Modra <amodra@gmail.com>
+
+ Re: ubsan: undefined shift in frag_align_code
+ This one needs the same fix too.
+
+ * config/tc-i386.h (MAX_MEM_FOR_RS_ALIGN_CODE): Avoid signed
+ integer overflow.
+
+2022-06-03 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Fix warning in foreach_arch selftests
+ When running the selftests, I run into:
+ ...
+ $ gdb -q -batch -ex "maint selftest"
+ ...
+ Running selftest execute_cfa_program::aarch64:ilp32.
+ warning: A handler for the OS ABI "GNU/Linux" is not built into this
+ configuration of GDB. Attempting to continue with the default aarch64:ilp32
+ settings.
+ ...
+ and likewise for execute_cfa_program::i8086 and
+ execute_cfa_program::ia64-elf32.
+
+ The warning can easily be reproduced outside the selftests by doing:
+ ...
+ $ gdb -q -batch -ex "set arch aarch64:ilp32"
+ ...
+ and can be prevented by first doing "set osabi none".
+
+ Fix the warning by setting osabi to none while doing selftests that iterate
+ over all architectures.
+
+ This causes a regression in the print_one_insn selftests for the ARC
+ architecture.
+
+ The problem is pre-existing, and can be demonstrated (already without this
+ patch) using:
+ ...
+ $ gdb -q -batch -ex "set osabi none" -ex "maint selftest print_one_insn::A6"
+ Running selftest print_one_insn::A6.
+ Self test failed: Cannot access memory at address 0x0
+ Ran 1 unit tests, 1 failed
+ $
+ ...
+
+ For ARC, we use the generic case in print_one_insn_test, containing this code:
+ ...
+ int kind = gdbarch_breakpoint_kind_from_pc (gdbarch, &pc);
+ ...
+ insn = gdbarch_sw_breakpoint_from_kind (gdbarch, kind, &bplen);
+ ...
+
+ The problem is that with osabi linux we trigger:
+ ...
+ static int
+ arc_linux_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
+ {
+ return trap_size;
+ }
+ ...
+ but with osabi none:
+ ...
+ arc_breakpoint_kind_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr)
+ {
+ size_t length_with_limm = gdb_insn_length (gdbarch, *pcptr);
+ ...
+ which needs access to memory, and will consequently fail.
+
+ Fix this in print_one_insn_test, in the default case, by iterating over
+ supported osabi's to makes sure we trigger arc_linux_breakpoint_kind_from_pc
+ which will give us a usable instruction to disassemble.
+
+ Tested on x86_64-linux.
+
+2022-06-03 Tom de Vries <tdevries@suse.de>
+
+ Revert "[gdb] Fix warning in foreach_arch selftests"
+ This reverts commit fc18b1c5afd ("[gdb] Fix warning in foreach_arch
+ selftests").
+
+ The commit introduced regressions for an --enable-targets=all build:
+ ...
+ Running selftest print_one_insn::A6.^M
+ Self test failed: Cannot access memory at address 0x0^M
+ ...
+ and while investigating those I realized that the commit fc18b1c5afd
+ complicates things by trying to set the current osabi.
+
+ So, revert the patch in preparation for a simpler solution.
+
+ Tested on x86_64-linux.
+
+2022-06-03 Jan Beulich <jbeulich@suse.com>
+
+ x86: exclude certain ISA extensions from v3/v4 ISA
+ Like TBM and LWP, XOP and FMA4 also shouldn't be included in v3.
+
+ Like AVX512-4VNNIW, AVX512-4FMAPS also shouldn't be included in v4.
+
+2022-06-03 Roland McGrath <mcgrathr@google.com>
+
+ gdb: LoongArch: Remove nonportable #include
+ Don't use gregset.h in *-tdep.c since it's not usable on
+ hosts that don't have <sys/procfs.h>. It's not needed by
+ this file, and should only be needed by *-nat.c files.
+
+2022-06-03 Alan Modra <amodra@gmail.com>
+
+ Re: asan: mips_gprel_reloc segfault
+ Similarly for the elf mips support.
+
+ * elf32-mips.c (mips_elf_final_gp): Don't segfault on symbols
+ in any of the bfd_is_const_section sections.
+ * elf64-mips.c (mips_elf64_final_gp): Likewise.
+ * elfn32-mips.c (mips_elf_final_gp): Likewise.
+
+2022-06-03 Alan Modra <amodra@gmail.com>
+
+ asan: mips_gprel_reloc segfault
+ Not just the undefined section has a NULL owner, the absolute section
+ has too. Which means we can't find output_bfd for __gp. Also, may as
+ well test directly for output_bfd == NULL.
+
+ * coff-mips.c (mips_gprel_reloc): Don't segfault on any of
+ bfd_is_const_section sections.
+
+2022-06-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Detect change instead of init in gdb.mi/mi-var-block.exp
+ On openSUSE Tumbleweed with target board unix/-m32, I run into:
+ ...
+ PASS: gdb.mi/mi-var-block.exp: step at do_block_test 2
+ Expecting: ^(-var-update \*[^M
+ ]+)?(\^done,changelist=\[{name="foo",in_scope="true",type_changed="false",has_more="0"},
+ {name="cb",in_scope="true",type_changed="false",has_more="0"}\][^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ -var-update *^M
+ ^done,changelist=[{name="foo",in_scope="true",type_changed="false",has_more="0"}]^M
+ (gdb) ^M
+ FAIL: gdb.mi/mi-var-block.exp: update all vars: cb foo changed (unexpected output)
+ ...
+
+ The problem is that the test-case attempts to detect a change in the cb
+ variable caused by this initialization:
+ ...
+ void
+ do_block_tests ()
+ {
+ int cb = 12;
+ ...
+ but that only works if the stack location happens to be unequal to 12 before
+ the initialization.
+
+ Fix this by first initializing to 0, and then changing the value to 12:
+ ...
+ - int cb = 12;
+ + int cb = 0;
+ + cb = 12;
+ ...
+ and detecting that change.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29195
+
+2022-06-02 Eli Zaretskii <eliz@gnu.org>
+
+ Rearrange and slightly reword the "Location Specification" section
+ This rearranges and changes the wording of the "Location
+ Specification" section of the GDB manual in minor ways.
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warning for "main"
+ "main" is redeclared with a different type in maint.c. I think this
+ might have come from my first gdb patch, many many years ago. While I
+ wonder if this profiling code is actually useful at all any more, in
+ the meantime it's simple to fix the declaration.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warnings for "struct coff_symbol"
+ "struct coff_symbol" is defined in multiple .c files, causing ODR
+ warnings. This patch renames just the xcoffread.c type.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warnings for "struct insn_decode_record_t"
+ "struct insn_decode_record_t" is defined in multiple .c files, causing
+ ODR warnings. This patch renames the types, and removes the use of
+ "typedef" here -- this is a C-ism that's no longer needed.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warnings for "struct insn_info"
+ "struct insn_info" is defined in multiple .c files, causing ODR
+ warnings. This patch renames the type in z80-tdep.c, leaving the
+ other one alone.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warnings from overlay constants
+ Some overlay-related constants are duplicated in z80-tdep.c, causing
+ ODR warnings. This patch renames just the z80-specific ones.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warning for "enum string_repr_result"
+ "enum string_repr_result" is defined in multiple .c files, causing ODR
+ warnings. This patch renames the types.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warning for "struct find_targ_sec_arg"
+ "struct find_targ_sec_arg" is defined in multiple .c files, causing
+ ODR warnings. This patch renames the types.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warning for "struct stack_item"
+ "struct stack_item" is defined in multiple .c files, causing ODR
+ warnings. This patch renames these types.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warning for "struct instruction_type"
+ "struct instruction_type" is defined in multiple .c files, causing an
+ ODR warning. This patch renames the types.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warning for struct ext_link_map
+ This renames the solib-dsbt.c copy of "struct ext_link_map" to avoid
+ an ODR warning.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warning for struct field_info
+ This renames one of the instance of "struct field_info" to avoid an
+ ODR warning.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warnings for struct nextfield
+ "struct nextfield" is defined in multiple places in GDB. This patch
+ renames just the stabs one, leaving the DWARF one untouched.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ ODR warnings for struct symloc
+ "struct symloc" is defined in multiple spots in gdb, causing ODR
+ warnings. This patch renames these.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tom Tromey <tromey@adacore.com>
+
+ Fix ODR warning in observable.h
+ observable.h triggers an ODR warning because this line:
+
+ extern observable<struct target_ops */* target */> target_changed;
+
+ ... may be the only declaration of "struct target_ops" in scope
+ (depending on the particular .c file) -- and this declares it in a
+ namespace, resulting in confusion.
+
+ This patch fixes the problem by adding a forward declaration.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22395
+
+2022-06-02 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Implement the software_single_step gdbarch method
+ When execute the following command on LoongArch:
+
+ make check-gdb TESTS="gdb.base/branch-to-self.exp"
+
+ there exist the following failed testcases:
+
+ FAIL: gdb.base/branch-to-self.exp: single-step: si (timeout)
+ FAIL: gdb.base/branch-to-self.exp: break-cond: side=host: continue to breakpoint: continue to break (timeout)
+ FAIL: gdb.base/branch-to-self.exp: break-cond: side=host: p counter (timeout)
+
+ Implement the software_single_step gdbarch method to decode the current
+ branch instruction and determine the address of the next instruction on
+ LoongArch to fix the above failed testcases.
+
+2022-06-02 Ilya Leoshkevich <iii@linux.ibm.com>
+
+ gdb: Do not add empty sections to the section map
+ From: Ulrich Weigand <ulrich.weigand@de.ibm.com>
+
+ build_objfile_section_table () creates four synthetic sections per
+ objfile, which are collected by update_section_map () and passed to
+ std::sort (). When there are a lot of objfiles, for example, when
+ debugging JITs, the presence of these sections slows down the sorting
+ significantly.
+
+ The output of update_section_map () is used by find_pc_section (),
+ which can never return any of these sections: their size is 0, so they
+ cannot be accepted by bsearch_cmp ().
+
+ Filter them (and all the other empty sections) out in
+ insert_section_p (), which is used only by update_section_map ().
+
+2022-06-02 Jon Turney <jon.turney@dronecode.org.uk>
+
+ Fix a new warning on Cygwin
+ > ../../gdb/windows-nat.c: In function ‘windows_solib* windows_make_so(const char*, LPVOID)’:
+ > ../../gdb/windows-nat.c:714:12: error: declaration of ‘char name [512]’ shadows a parameter [-Werror=shadow=compatible-local]
+ > 714 | char name[SO_NAME_MAX_PATH_SIZE];
+ > | ^~~~
+ > ../../gdb/windows-nat.c:655:30: note: shadowed declaration is here
+ > 655 | windows_make_so (const char *name, LPVOID load_addr)
+ > | ~~~~~~~~~~~~^~~~
+
+ Fix Cygwin build after 85b25bd9
+ Fix Cygwin build after 85b25bd9 ("Simplify windows-nat.c solib handling").
+
+ Fix Cygwin build after 0578e87f
+ Fix Cygwin build after 0578e87f ("Remove some globals from
+ nat/windows-nat.c"). Update code under ifdef __CYGWIN__ for globals
+ moved to members of struct windows_process_info.
+
+ Fix Cygwin build after fcab5839
+ Fix Cygwin build after fcab5839 ("Implement pid_to_exec_file for Windows
+ in gdbserver"). That change moves code from gdb/windows-nat.c to
+ gdb/nat/windows-nat.c, but doesn't add the required typedefs and
+ includes for parts of that code under ifdef __CYGWIN__.
+
+2022-06-02 Alan Modra <amodra@gmail.com>
+
+ Re: ubsan: signed integer overflow in atof_generic
+ Oops.
+
+ * atof-generic.c: Include limits.h.
+
+2022-06-02 Alan Modra <amodra@gmail.com>
+
+ ubsan: signed integer overflow in atof_generic
+ Fix the signed overflows by using unsigned variables and detect
+ overflow at BUG! comment.
+
+ * atof-generic.c (atof_generic): Avoid signed integer overflow.
+ Return ERROR_EXPONENT_OVERFLOW if exponent overflows a long.
+
+2022-06-02 Alan Modra <amodra@gmail.com>
+
+ asan: uninit write _bfd_ecoff_write_object_contents
+ * ecoff.c (_bfd_ecoff_write_object_contents): zalloc reloc_buff.
+
+ asan: null deref in coff_write_relocs
+ * coffcode.h (coff_write_relocs): Don't deref NULL howto.
+
+ ubsan: undefined shift in frag_align_code
+ * frags.c (MAX_MEM_FOR_RS_ALIGN_CODE): Avoid signed integer
+ overflow.
+
+2022-06-02 Alan Modra <amodra@gmail.com>
+
+ gas read_a_source_file #APP processing
+ This fixes some horrible code using do_scrub_chars. What we had ran
+ text through do_scrub_chars twice, directly in read_a_source_file and
+ again via the input_scrub_include_sb call. That's silly, and since
+ do_scrub_chars is a state machine, possibly wrong. More silliness is
+ evident in the temporary malloc'd buffer for do_scrub_chars output,
+ which should have been written directly to sbuf.
+
+ So, get rid of the do_scrub_chars call and support functions, leaving
+ scrubbing to input_scrub_include_sb. I did wonder about #NO_APP
+ overlapping input_scrub_next_buffer buffers, but that should only
+ happen if the string starts in one file and finishes in another.
+
+ * read.c (scrub_string, scrub_string_end): Delete.
+ (scrub_from_string): Delete.
+ (read_a_source_file): Rewrite #APP processing.
+
+2022-06-02 Alan Modra <amodra@gmail.com>
+
+ sb_scrub_and_add_sb not draining input string buffer
+ It is possible for sb_scrub_and_add_sb to not consume all of the input
+ string buffer. If this happens for reasons explained in the comment,
+ do_scrub_chars can leave pointers to the string buffer for the next
+ call. This patch fixes that by ensuring the input is drained. Note
+ that the behaviour for an empty string buffer is also changed,
+ avoiding another do_scrub_chars bug where empty input and single char
+ sized output buffers could result in a write past the end of the
+ output.
+
+ sb.c (sb_scrub_and_add_sb): Loop until all of input sb is
+ consumed.
+
+2022-06-02 Alan Modra <amodra@gmail.com>
+
+ asan: heap buffer overflow in dwarf2_directive_filename
+ Seen with .file 4294967289 "xxx.c"
+
+ * dwarf2dbg.c (assign_file_to_slot): Catch more cases of integer
+ overflow. Make param i an unsigned int.
+
+2022-06-02 Alan Modra <amodra@gmail.com>
+
+ asan: NULL deref in scan_unit_for_symbols
+ Since commit b43771b045 it has been possible to look up addresses
+ that match a unit with errors, since ranges are added to a trie while
+ the unit is being parsed. On error, parse_comp_unit leaves
+ first_child_die_ptr NULL which results in a NULL info_ptr being passed
+ to scan_unit_for_symbols. Fix this by setting unit->error.
+
+ Also wrap some overlong lines, and fix some formatting errors.
+
+ * dwarf2.c: Formatting.
+ (parse_comp_unit): Set unit->error on err_exit path.
+
+2022-06-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Fix warning in foreach_arch selftests
+ When running the selftests, I run into:
+ ...
+ $ gdb -q -batch -ex "maint selftest"
+ ...
+ Running selftest execute_cfa_program::aarch64:ilp32.
+ warning: A handler for the OS ABI "GNU/Linux" is not built into this
+ configuration of GDB. Attempting to continue with the default aarch64:ilp32
+ settings.
+ ...
+ and likewise for execute_cfa_program::i8086 and
+ execute_cfa_program::ia64-elf32.
+
+ The warning can easily be reproduced outside the selftests by doing:
+ ...
+ $ gdb -q -batch -ex "set arch aarch64:ilp32"
+ ...
+ and can be prevented by first doing "set osabi none".
+
+ Fix the warning by setting osabi to none while doing selftests that iterate
+ over all architectures.
+
+ Tested on x86_64-linux.
+
+2022-06-01 Tom Tromey <tromey@adacore.com>
+
+ Add gdb.current_language and gdb.Frame.language
+ This adds the gdb.current_language function, which can be used to find
+ the current language without (1) ever having the value "auto" or (2)
+ having to parse the output of "show language".
+
+ It also adds the gdb.Frame.language, which can be used to find the
+ language of a given frame. This is normally preferable if one has a
+ Frame object handy.
+
+2022-06-01 Yvan Roux <yvan.roux@foss.st.com>
+
+ [arm] Don't use special treatment for PC
+ In an exception frame the PC register is extracted from the stack
+ just like other base registers, so there is no need for a special
+ treatment.
+
+ [arm] Add support for FPU registers in prologue unwinder
+ The prologue unwinder had support for FPU registers, but only to
+ calculate the correct offset on the stack, the values were not saved.
+
+2022-06-01 Yvan Roux <yvan.roux@foss.st.com>
+
+ [arm] d0..d15 are 64-bit each, not 32-bit
+ When unwinding the stack, the floating point registers d0 to d15
+ need to be handled as double words, not words.
+
+ Only the first 8 registers have been confirmed fixed with this patch
+ on a STM32F407-DISC0 board, but the upper 8 registers on Cortex-M33
+ should be handled in the same way.
+
+ The test consisted of running a program compiled with float-abi=hard.
+ In the main function, a function taking a double as an argument was
+ called. After the function call, a hardware timer was used to
+ trigger an interrupt.
+
+ In the debug session, a breakpoint was set in the function called
+ from main to verify the content of the registers using "info float"
+ and another breakpoint in the interrupt handler was used to check
+ the same registers using "info float" on frame 2 (the frame just
+ before the dummy frame created for the signal handler in gdb).
+
+2022-06-01 Yvan Roux <yvan.roux@foss.st.com>
+
+ [arm] Cleanup: use hex for offsets
+ Changed offset from decimal to hex to match architecture reference
+ manual terminology and keep coherency with the rest of the code.
+
+2022-06-01 Jiangshuai Li <jiangshuai_li@c-sky.com>
+
+ gdb:csky save fpu and vdsp info to struct csky_gdbarch_tdep
+ First, add three variables fpu_abi, fpu_hardfp and vdsp_version
+ to csky_gdbarch_tdep. They will be initialized from info.abfd in
+ cskg_gdbarch_init.
+
+ Now, they are just used to find a candidate among the list of pre-declared
+ architectures
+
+ Later, they will be used in gdbarch_return_value and gdbarch_push_dummy_call
+ for funtions described below:
+ fpu_abi: to check if the bfd is using VAL_CSKY_FPU_ABI_HARD or
+ VAL_CSKY_FPU_ABI_SOFT
+ fpu_hardfp: to check if the bfd is using VAL_CSKY_FPU_HARDFP_SINGLE
+ or VAL_CSKY_FPU_HARDFP_DOUBLE
+ vdsp_version: to check if a function is returned with CSKY_VRET_REGNUM
+
+2022-06-01 Alan Modra <amodra@gmail.com>
+
+ Re: use libiberty xmalloc in bfd/doc/chew.c
+ We can't use libiberty.a in chew. libiberty is a host library, chew
+ a build program. Partly revert commit 7273d78f3f7a, instead define
+ local versions of the libiberty functions. ansidecl.h also isn't
+ needed.
+
+ * doc/chew.c: Don't include libiberty.h or ansidecl.h.
+ (xmalloc, xrealloc, xstrdup): New functions.
+ * doc/local.mk (LIBIBERTY): Don't define or use.
+ * Makefile.in: Regenerate.
+
+2022-06-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-06-01 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Properly handle IFUNC function pointer reference
+ Update
+
+ commit 68c4956b1401de70173848a6bdf620cb42fa9358
+ Author: H.J. Lu <hjl.tools@gmail.com>
+ Date: Tue Apr 26 09:08:54 2022 -0700
+
+ x86: Properly handle function pointer reference
+
+ to properly handle IFUNC function pointer reference. Since IFUNC symbol
+ value is only known at run-time, set pointer_equality_needed for IFUNC
+ function pointer reference in PDE so that it will be resolved to its PLT
+ entry directly.
+
+ bfd/
+
+ PR ld/29216
+ * elf32-i386.c (elf_i386_scan_relocs): Set pointer_equality_needed
+ for IFUNC function pointer reference in PDE.
+ * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
+
+ ld/
+
+ PR ld/29216
+ * testsuite/ld-ifunc/ifunc.exp: Run PR ld/29216 test.
+ * testsuite/ld-ifunc/pr29216.c: New file.
+
+2022-05-31 H.J. Lu <hjl.tools@gmail.com>
+
+ i386: Ajdust more tests for opcodes/i386: remove trailing whitespace
+ This fixes:
+
+ FAIL: Build ifunc-1a with -z ibtplt
+ FAIL: Build ifunc-1a with PIE -z ibtplt
+ FAIL: Build libno-plt-1b.so
+ FAIL: No PLT (dynamic 1a)
+ FAIL: No PLT (dynamic 1b)
+ FAIL: No PLT (dynamic 1c)
+ FAIL: No PLT (static 1d)
+ FAIL: No PLT (PIE 1e)
+ FAIL: No PLT (PIE 1f)
+ FAIL: No PLT (PIE 1g)
+ FAIL: No PLT (dynamic 1h)
+ FAIL: No PLT (dynamic 1i)
+ FAIL: No PLT (static 1j)
+
+ * ld-i386/libno-plt-1b.dd: Remove trailing whitespaces.
+ * ld-i386/no-plt-1a.dd: Likewise.
+ * ld-i386/no-plt-1b.dd: Likewise.
+ * ld-i386/no-plt-1c.dd: Likewise.
+ * ld-i386/no-plt-1d.dd: Likewise.
+ * ld-i386/no-plt-1e.dd: Likewise.
+ * ld-i386/no-plt-1f.dd: Likewise.
+ * ld-i386/no-plt-1g.dd: Likewise.
+ * ld-i386/no-plt-1h.dd: Likewise.
+ * ld-i386/no-plt-1i.dd: Likewise.
+ * ld-i386/no-plt-1j.dd: Likewise.
+ * ld-i386/plt-main-ibt.dd: Likewise.
+ * ld-i386/plt-pie-ibt.dd: Likewise.
+
+2022-05-31 Tom Tromey <tom@tromey.com>
+
+ Use unique_ptr for objfiles
+ A while back, I changed objfiles to be held via a shared_ptr. The
+ idea at the time was that this was a step toward writing to the index
+ cache in the background, and this would let gdb keep a reference alive
+ to do so. However, since then we've rewritten the DWARF reader, and
+ the new index can do this without requiring a shared pointer -- in
+ fact there are patches pending to implement this.
+
+ This patch switches objfile management to unique_ptr, which makes more
+ sense now.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: fixup common-block.exp for intel compilers
+ The order in which the variables in info common and info locals are
+ displayed is compiler (and dwarf) dependent. While all symbols should
+ be displayed the order is not fixed.
+
+ I added a gdb_test_multiple that lets ifx and ifort pass in cases where
+ only the order differs.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb, testsuite, fortran: fixup mixed-lang-stack for Intel/LLVM compilers
+ When value-printing a pointer within GDB by default GDB will look for
+ defined symbols residing at the address of the pointer. For the given
+ test the Intel/LLVM compiler stacks both display a symbol associated
+ with a printed pointer while the gnu stack does not. This leads to
+ failures in the test when running the test with CC_FOR_TARGET='clang'
+ CXX_FOR_TARGET='clang' F90_FOR_TARGET='flang'"
+
+ (gdb) b 37
+ (gdb) r
+ (gdb) f 6
+ (gdb) info args
+ a = 1
+ b = 2
+ c = 3
+ d = 4 + 5i
+ f = 0x419ed0 "abcdef"
+ g = 0x4041a0 <.BSS4>
+
+ or CC_FOR_TARGET='icx' CXX_FOR_TARGET='icpx' F90_FOR_TARGET='ifx'"
+
+ (gdb) b 37
+ (gdb) r
+ (gdb) f 6
+ (gdb) info args
+ a = 1
+ b = 2
+ c = 3
+ d = 4 + 5i
+ f = 0x52eee0 "abcdef"
+ g = 0x4ca210 <mixed_func_1a_$OBJ>
+
+ For the compiled binary the Intel/LLVM compilers both decide to move the
+ local variable g into the .bss section of their executable. The gnu
+ stack will keep the variable locally on the stack and not define a
+ symbol for it.
+
+ Since the behavior for Intel/LLVM is actually expected I adapted the
+ testcase at this point to be a bit more allowing for other outputs.
+ I added the optional "<SYMBOLNAME>" to the regex testing for g.
+
+ The given changes reduce the test fails for Intel/LLVM stack by 4 each.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb, testsuite, fortran: fix double free in mixed-lang-stack.exp
+ While testing mixed-lang-stack I realized that valgrind actually
+ complained about a double free in the test.
+
+ All done
+ ==2503051==
+ ==2503051== HEAP SUMMARY:
+ ==2503051== in use at exit: 0 bytes in 0 blocks
+ ==2503051== total heap usage: 26 allocs, 27 frees, 87,343 bytes allocated
+ ==2503051==
+ ==2503051== All heap blocks were freed -- no leaks are possible
+ ==2503051==
+ ==2503051== For lists of detected and suppressed errors, rerun with: -s
+ ==2503051== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
+
+ Reason for this is that in mixed-lang-stack.cpp in mixed_func_1f an
+ object "derived_type obj" goes on the stack which is then passed-by-value
+ (so copied) to mixed_func_1g. The default copy-ctor will be called but,
+ since derived_type contains a heap allocated string and the copy
+ constructor is not implemented it will only be able to shallow copy the
+ object. Right after each of the functions the object gets freed - on the
+ other hand the d'tor of derived_type actually is implemented and calls
+ free on the heap allocated string which leads to a double free. Instead
+ of obeying the rule of 3/5 I just got rid of all that since it does not
+ serve the test. The string is now just a const char* = ".." object
+ member.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ testsuite, fortran: allow additional completions in module.exp
+ For ifort, ifx, and flang the tests "complete modm" and "complete
+ modmany" fail. This is because all three emit additional completion
+ suggestions. These additional suggestions have their origin in symbols
+ emitted by the compilers which can also be completed from the respective
+ incomplete word (modm or modmany). For this specific example gfortran
+ does not emit any additional symbols.
+
+ For example, in this test the linkage name for var_a in ifx is
+ "modmany_mp_var_a_" while gfortran uses "__modmany_MOD_var_a" instead.
+ Since modmany_mp_var_a can be completed from modm and also modmany they
+ will get displayed, while gfortran's symbol starts with "__" and thus will
+ be ignored (it cannot be a completion of a word starting with "m").
+
+ Similar things happen in flang and ifort. Some example output is shown
+ below:
+
+ FLANG
+ (gdb) complete p modm
+ p modmany
+ p modmany::var_a
+ p modmany::var_b
+ p modmany::var_c
+ p modmany::var_i
+ p modmany_
+
+ IFX/IFORT
+ (gdb) complete p modm
+ p modmany
+ p modmany._
+ p modmany::var_a
+ p modmany::var_b
+ p modmany::var_c
+ p modmany::var_i
+ p modmany_mp_var_a_
+ p modmany_mp_var_b_
+ p modmany_mp_var_c_
+ p modmany_mp_var_i_
+
+ GFORTRAN
+ (gdb) complete p modm
+ p modmany
+ p modmany::var_a
+ p modmany::var_b
+ p modmany::var_c
+ p modmany::var_i
+
+ I want to emphasize: for Fortran (and also C/C++) the complete command
+ does not actually check whether its suggestions make sense - all it does
+ is look for any symbol (in the minimal symbols, partial symbols etc.)
+ that a given substring can be completed to (meaning that the given substring
+ is the beginning of the symbol). One can easily produce a similar
+ output for the gfortran compiled executable. For this look at the
+ slightly modified "complete p mod" in gfortran:
+
+ (gdb) complete p mod
+ p mod1
+ p mod1::var_const
+ ...
+ p mod_1.c
+ p modcounter
+ p mode_t
+ p modf
+ ...
+ p modify_ldt
+ p modmany
+ p modmany::var_a
+ p modmany::var_b
+ p modmany::var_c
+ p modmany::var_i
+ p module
+ p module.f90
+ p module_entry
+ p moduse
+ p moduse::var_x
+ p moduse::var_y
+
+ Many of the displayed symbols do not actually work with print:
+
+ (gdb) p mode_t
+ Attempt to use a type name as an expression
+ (gdb) p mod_1.c
+ No symbol "mod_1" in current context.
+ (gdb)
+
+ I think that in the given test the output for gfortran only looks nice
+ "by chance" rather than is actually expected. Expected is any output
+ that also contains the completions
+
+ p modmany
+
+ p modmany::var_a
+ p modmany::var_b
+ p modmany::var_c
+ p modmany::var_i
+
+ while anythings else can be displayed as well (depending on the
+ compiler and its emitted symbols).
+
+ This, I'd consider all three outputs as valid and expected - one is just
+ somewhat lucky that gfortran does not produce any additional symbols that
+ got matched.
+
+ The given patch improves test performance for all three compilers
+ by allowing additional suggested completions inbetween and after
+ the two given blocks in the test. I did not allow additional print
+ within the modmany_list block since the output is ordered alphabetically
+ and there should normally not appear any additional symbols there.
+
+ For flang/ifx/ifort I each see 2 failures less (which are exactly the two
+ complete tests).
+
+ As a side note and since I mentioned C++ in the beginning: I also tried
+ the gdb.cp/completion.exp. The output seems a bit more reasonable,
+ mainly since C++ actually has a demangler in place and linkage symbols
+ do not appear in the output of complete. Still, with a poor enough
+ to-be-completed string one can easily produce similar results:
+
+ (gdb) complete p t
+ ...
+ p typeinfo name for void
+ p typeinfo name for void const*
+ p typeinfo name for void*
+ p typeinfo name for wchar_t
+ p typeinfo name for wchar_t const*
+ p typeinfo name for wchar_t*
+ p t *** List may be truncated, max-completions reached. ***
+ (gdb) p typeinfo name for void*
+ No symbol "typeinfo" in current context.
+ (gdb) complete p B
+ p BACK_SLASH
+ p BUF_FIRST
+ p BUF_LAST
+ ...
+ p Base
+ p Base::Base()
+ p Base::get_foo()
+ p bad_key_err
+ p buf
+ p buffer
+ p buffer_size
+ p buflen
+ p bufsize
+ p build_charclass.isra
+ (gdb) p bad_key_err
+ No symbol "bad_key_err" in current context.
+
+ (compiled with gcc/g++ and breaking at main).
+
+ This patch is only about making the referenced test more 'fair' for the
+ other compilers. Generally, I find the behavior of complete a bit
+ confusing and maybe one wants to change this at some point but this
+ would be a bigger task.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ testsuite, fortran: fix info-types for intel compilers
+ This info-types.exp test case had a few issues that this patch fixes.
+
+ First, the emitted symbol character(kind=1)/character*1 (different
+ compilers use different naming converntions here) which is checkedin the
+ test is not actually expected given the test program. There is no
+ variable of that type in the test. Still, gfortran emits it for every
+ Fortran program there is. The reason is the way gfortran handles Fortran's
+ named main program. It generates a wrapper around the Fortran program
+ that is quite similar to a C main function. This C-like wrapper has
+ argc and argv arguments for command line argument passing and the argv
+ pointer type has a base type character(kind=1) DIE emitted at CU scope.
+
+ Given the program
+
+ program prog
+ end program prog
+
+ the degbug info gfortran emits looks somewhat like
+
+ <0><c>: Abbrev Number: 3 (DW_TAG_compile_unit)
+ ...
+ <1><2f>: Abbrev Number: 4 (DW_TAG_subprogram)
+ <30> DW_AT_external : 1
+ <30> DW_AT_name : (indirect string, ...): main
+ ...
+ <2><51>: Abbrev Number: 1 (DW_TAG_formal_parameter)
+ <52> DW_AT_name : (indirect string, ...): argc
+ ...
+ <2><5d>: Abbrev Number: 1 (DW_TAG_formal_parameter)
+ <5e> DW_AT_name : (indirect string, ...): argv
+ ...
+ <62> DW_AT_type : <0x77>
+ ...
+ <2><6a>: Abbrev Number: 0
+ ...
+ <1><77>: Abbrev Number: 6 (DW_TAG_pointer_type)
+ <78> DW_AT_byte_size : 8
+ <79> DW_AT_type : <0x7d>
+ <1><7d>: Abbrev Number: 2 (DW_TAG_base_type)
+ <7e> DW_AT_byte_size : 1
+ <7f> DW_AT_encoding : 8 (unsigned char)
+ <80> DW_AT_name : (indirect string, ...): character(kind=1)
+ <1><84>: Abbrev Number: 7 (DW_TAG_subprogram)
+ <85> DW_AT_name : (indirect string, ...): prog
+ ...
+
+ Ifx and flang do not emit any debug info for a wrapper main method so
+ the type is missing here. There was the possibility of actually adding
+ a character*1 type variable to the Fortran executable, but both, ifx and
+ gfortran chose to emit this variable's type as a DW_TAG_string_type of
+ length one (instead of a character(kind=1), or whatever the respective
+ compiler naming convention is). While string types are printed as
+ character*LENGHT in the fortran language part (e.g. when issuing a
+ 'ptype') they do not generate any symbols inside GDB. In read.c it says
+
+ /* These dies have a type, but processing them does not create
+ a symbol or recurse to process the children. Therefore we can
+ read them on-demand through read_type_die. */
+
+ So they did not add any output to 'info types'. Only flang did emit a
+ character type here.
+ As adding a type would have a) not solved the problem for ifx and would
+ have b) somehow hidden the curious behavior of gfortran, instead, the
+ check for this character type was chagened to optional with the
+ check_optional_entry to allow for the symbols's absence and to allow
+ flang and ifx to pass this test as well.
+
+ Second, the line checked for s1 was hardcoded as 37 in the test. Given
+ that the type is actually defined on line 41 (which is what is emitted by
+ ifx) it even seems wrong. The line check for s1 was changed to actually
+ check for 41 and a gfortran bug has been filed here
+
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105454
+
+ The test is now marked as xfail for gfortran.
+
+ Third, the whole test of checking for the 'Type s1' in info types seemed
+ questionable. The type s1 is declared iside the scope of the Fortran
+ program info_types_test. Its DIE however is emitted as a child of the
+ whole compilation unit making it visible outside of the program's scope.
+ The 'info types' command checks for types stored in the GLOBAL_BLOCK,
+ or STATIC_BLOCKm wgucm according to block.h
+
+ The GLOBAL_BLOCK contains all the symbols defined in this compilation
+ whose scope is the entire program linked together.
+ The STATIC_BLOCK contains all the symbols whose scope is the
+ entire compilation excluding other separate compilations.
+
+ so for gfortran, the type shows up in the output of 'info types'. For
+ flang and ifx on the other hand this is not the case. The two compilers
+ emit the type (correctly) as a child of the Fortran program, thus not
+ adding it to either, the GLOBAL_BLOCK nor the LOCAL_BLOCK. A bug has
+ been opened for the gfortran scoping issue:
+
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105454
+
+ While the most correct change might have been removing the check for s1,
+ the change made here was to only check for this type in case of gfortran
+ being used as the compiler, as this check also covers the declaration
+ line issue mentioned above. A comment was added to maybe remove this
+ check once the scoping issue is resolved (and it starts to fail with
+ newer gfortran versions). The one used to test these changes was 13.0.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ testsuite/lib: add check_optional_entry for GDBInfoSymbols
+ There was already a similar functionality for the GDBInfoModuleSymbols.
+ This just extends the GDBInfoSymbols. We will use this feature in a
+ later commit to make a testcase less GNU specific and more flexible for
+ other compilers.
+
+ Namely, in gdb.fortran/info-types.exp currenlty
+ GDBInfoSymbols::check_entry is used to verify and test the output of the
+ info symbols command. The test, however was written with gfortran as a
+ basis and some of the tests are not fair with e.g. ifx and ifort as
+ they test for symbols that are not actually required to be emitted. The
+ lines
+ GDBInfoSymbols::check_entry "${srcfile}" "" "${character1}"
+ and
+ GDBInfoSymbols::check_entry "${srcfile}" "37" "Type s1;"
+
+ check for types that are either not used in the source file (character1)
+ or should not be emitted by the compiler at global scope (s1) thus no
+ appearing in the info symbols command. In order to fix this we will
+ later use the newly introduced check_optional_entry over check_entry.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ testsuite, fortran: Add '-debug-parameters all' when using ifx/ifort
+ In order for ifx and ifort to emit all debug entries, even for unused
+ parameters in modules we have to define the '-debug-parameters all' flag.
+
+ This commit adds it to the ifx-*/ifort-* specific flags in gdb.exp.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ testsuite, fortran: add compiler dependent types to dynamic-ptype-whatis
+ The test was earlier not using the compiler dependent type print system
+ in fortran.exp. I changed this. It should generally improve the test
+ performance for different compilers. For ifx and gfortran I do not see
+ any failures.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ testsuite, fortran: add required external keyword
+ Currenlty, ifx/ifort cannot compile the given executable as it is not
+ valid Fortran. It is missing the external keyword on the
+ no_arg_subroutine. Gfortran compiles the example but this is actually
+ a bug and there is an open gcc ticket for this here:
+
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=50377
+
+ Adding the keyword does not change the gfortran compiling of the example.
+ It will, however, prevent a future fail once 50377 has been addressed.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: disable charset.exp for intel compilers
+ The test specifically tests for the Fortran CHARACTER(KIND=4) which is
+ not available in ifx/ifort.
+
+ Since the other characters are also printed elsewhere, we disable this
+ test for the unsupported compilers.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: rename intel next gen c/cpp compilers
+ The name for icx and icpx in the testsuite was earlier set to 'intel-*'
+ by the compiler identification. This commit changes this to 'icx-*'.
+
+ Note, that currently these names are not used within the testsuite so no
+ tests have to be adapted here.
+
+2022-05-31 Cristian Sandu <cristian.sandu@intel.com>
+ Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: add Fortran compiler identification to GDB
+ This commit adds a separate Fortran compiler identification mechanism to
+ the testsuite, similar to the existing one for C/C++. Before this
+ change, the options and version for the Fortran compiler specified when
+ running the testsuite with F90_FOR_TARGET set, was detected via its
+ respective C compiler. So running the testsuite as
+
+ make check TEST=gdb.fortran/*.exp CC_FOR_TARGET=gcc F90_FOR_TARGET=ifx
+
+ or even
+
+ make check TEST=gdb.fortran/*.exp F90_FOR_TARGET=ifx
+
+ would use the gcc compiler inside the procedures get_compiler_info and
+ test_compiler_info to identify compiler flags and the compiler version.
+ This could sometimes lead to unpredictable outputs. It also limited
+ testsuite execution to combinations where C and Fortran compiler would
+ come from the same family of compiers (gcc/gfortran, icc/ifort, icx/ifx,
+ clang/flang ..). This commit enables GDB to detect C and Fortran
+ compilers independently of each other.
+
+ As most/nearly all Fortran compilers have a mechanism for preprocessing
+ files in a C like fashion we added the exact same meachnism that already
+ existed for C/CXX. We let GDB preprocess a file with the compilers
+ Fortran preprocessor and evaluate the preprocessor defined macros in that
+ file.
+
+ This enables GDB to properly run heterogeneous combinations of C and
+ Fortran compilers such as
+
+ CC_FOR_TARGET='gcc' and F90_FOR_TARGET='ifort'
+
+ or enables one to run the testsuite without specifying a C compiler as in
+
+ make check TESTS=gdb.fortran/*.exp F90_FOR_TARGET='ifx'
+ make check TESTS=gdb.fortran/*.exp F90_FOR_TARGET='flang'
+
+ On the other hand this also requires one to always specify a
+ identification mechanism for Fortran compilers in the compiler.F90 file.
+
+ We added identification for GFORTRAN, FLANG (CLASSIC and LLVM) IFX,
+ IFORT, and ARMFLANG for now.
+
+ Classic and LLVM flang were each tested with their latest releases on
+ their respective release pages. Both get recognized by the new compiler
+ identification and we introduced the two names flang-classic and
+ flang-llvm to distinguish the two. While LLVM flang is not quite mature
+ enough yet for running the testsuite we still thought it would be a good
+ idea to include it already. For this we added a case for the fortran_main
+ procedure. LLVM flang uses 'MAIN__' as opposed to classic flang which
+ uses 'MAIN_' here.
+
+ We did not have the possibility to test ARMFLANG - the versioning scheme
+ here was extracted from its latest online documentation.
+
+ We changed the test_compiler_info procedure to take another optional
+ argument, the language string, which will be passed though to the
+ get_compiler_info procedure. Passing 'f90' or 'c++' here will then
+ trigger the C++/Fortran compiler identification within
+ get_compiler_info. The latter procedure was extended to also handle
+ the 'f90' argument (similarly to the already existing 'c++' one).
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: move getting_compiler_info to front of gdb_compile
+ The procedure gdb_compile queries its options via
+
+ [lsearch -exact $options getting_compiler_info]
+
+ to check whether or not it was called in with the option
+ getting_compiler_info. If it was called with this option it would
+ preprocess some test input to try and figure out the actual compiler
+ version of the compiler used. While doing this we cannot again try to
+ figure out the current compiler version via the 'getting_compiler_info'
+ option as this would cause infinite recursion. As some parts of the
+ procedure do recursively test for the compiler version to e.g. set
+ certain flags, at several places gdb_compile there are checks for the
+ getting_compiler_info option needed.
+
+ In the procedure, there was already a variable 'getting_compiler_info'
+ which was set to the result of the 'lsearch' query and used instead of
+ again and again looking for getting_compiler_info in the procedure
+ options. But, this variable was actually set too late within the code.
+ This lead to a mixture of querying 'getting_compiler_info' or
+ doing an lserach on the options passed to the procedure.
+
+ I found this inconsistent and instead moved the variable
+ getting_compiler_info to the front of the procedure. It is set to true
+ or false depending on whether or not the argument is found in the
+ procedure's options (just as before) and queried instead of doing an
+ lsearch on the procedure options in the rest of the procedure.
+
+2022-05-31 Felix Willgerodt <felix.willgerodt@intel.com>
+ Abdul Basit Ijaz <abdul.b.ijaz@intel.com>
+ Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: Fix fortran types for Intel compilers.
+ Newer Intel compilers emit their dwarf type name in a slightly different
+ format. Therefore, this needs adjustment to make more tests pass in the
+ Fortran testsuite.
+
+2022-05-31 Abdul Basit Ijaz <abdul.b.ijaz@intel.com>
+
+ gdb/testsuite: Use -module option for Intel Fortran compilers
+ The '-J' option is not supported in Intel compilers (ifx and ifort).
+ The Intel version of the flag is '-module' which serves the same purpose.
+
+2022-05-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: remove F77_FOR_TARGET support
+ The last uses of the F77_FOR_TARGET via passing f77 to GDB's compile
+ procedure were removed in this commit
+
+ commit 0ecee54cfd04a60e7ca61ae07c72b20e21390257
+ Author: Tom Tromey <tromey@redhat.com>
+ Date: Wed Jun 29 17:50:47 2011 +0000
+
+ over 10 years ago. The last .f files in the testsuite by now are all
+ being compiled by passing 'f90' to the GDB compile, thus only actually
+ using F90_FOR_TARGET (array-element.f, block-data.f, subarray.f).
+ Gfortran in this case is backwards compatible with most f77 code as
+ claimed on gcc.gnu.org/fortran.
+
+ The reason we'd like to get rid of this now is, that we'll be
+ implementing a Fortran compiler identification mechanism, similar to the
+ C/Cpp existing ones. It would be using the Fortran preprocessor macro
+ defines to identify the Fortran compiler version at hand. We found it
+ inconsequent to only implement this for f90 but, on the other hand, f77
+ seems deprecated. So, with this commit we remove the remaining lines for
+ its support.
+
+2022-05-31 Pedro Alves <pedro@palves.net>
+
+ Improve clear command's documentation
+ Co-Authored-By: Eli Zaretskii <eliz@gnu.org>
+
+ Change-Id: I9440052fd28f795d6f7c93a4576beadd21f28885
+
+2022-05-31 Pedro Alves <pedro@palves.net>
+
+ Clarify why we unit test matching symbol names with 0xff characters
+ In the name matching unit tests in gdb/dwarf2/read.c, explain better
+ why we test symbols with \377 / 0xff characters (Latin1 'ÿ').
+
+ Change-Id: I517f13adfff2e4d3cd783fec1d744e2b26e18b8e
+
+2022-05-31 Pedro Alves <pedro@palves.net>
+
+ Improve break-range's documentation
+ Change-Id: Iac26e1d2e7d8dc8a7d9516e6bdcc5c3fc4af45c8
+
+ Explicitly mention yet-unloaded shared libraries in location spec examples
+ Change-Id: I05639ddb3bf620c7297b57ed286adc3aa926b7b6
+
+2022-05-31 Alan Modra <amodra@gmail.com>
+
+ sparc64 segfault in finish_dynamic_symbol
+ SYMBOL_REFERENCES_LOCAL can return true for undefined symbols. This
+ can result in a segfault when running sparc64 ld/testsuite/ld-vsb
+ tests that expect a failure.
+
+ * elfxx-sparc.c (_bfd_sparc_elf_finish_dynamic_symbol): Don't
+ access u.def.section on non-default visibility undefined symbol.
+
+2022-05-31 Alan Modra <amodra@gmail.com>
+
+ ia64 gas: Remove unnecessary init
+ The whole struct is cleared by alloc_record.
+
+ * config/tc-ia64.c (output_prologue, output_prologue_gr): Don't
+ zero r.record.r.mask.
+
+2022-05-31 Alan Modra <amodra@gmail.com>
+
+ v850_elf_set_note prototype
+ v850_elf_set_note is declared using an unsigned int note param in
+ elf32-v850.h but defined with enum c850_notes note in elf32-v850.c.
+ Current mainline gcc is warning about this. Huh.
+
+ * elf32-v850.c (v850_elf_set_note): Make "note" param an
+ unsigned int.
+
+2022-05-31 Alan Modra <amodra@gmail.com>
+
+ Import libiberty from gcc
+ PR 29200
+ include/
+ * ansidecl.h,
+ * demangle.h: Import from gcc.
+ libiberty/
+ * cp-demangle.c,
+ * testsuite/demangle-expected: Import from gcc.
+
+2022-05-31 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: resolve duplicate test name in gdb.trace/signal.exp
+ Spotted a duplicate test name in gdb.trace/signal.exp, resolved in
+ this commit by making use of 'with_test_prefix'.
+
+2022-05-31 Alan Modra <amodra@gmail.com>
+
+ Ajdust more tests for opcodes/i386: remove trailing whitespace
+ git commit 202be274a4 also missed adjusting a few testsuite files.
+ This fixes
+ i686-vxworks +FAIL: VxWorks shared library test 1
+ i686-vxworks +FAIL: VxWorks executable test 1 (dynamic)
+
+2022-05-31 Alan Modra <amodra@gmail.com>
+
+ Trailing spaces in objdump -r header
+ git commit 202be274a4 went a little wild in removing trailing spaces
+ in gas/testsuite/gas/i386/{secidx.d,secrel.d}, causing
+ x86_64-w64-mingw32 +FAIL: i386 secrel reloc
+ x86_64-w64-mingw32 +FAIL: i386 secidx reloc
+
+ I could have just replaced the trailing space, but let's fix the
+ objdump output instead. Touches lots of testsuite files.
+
+2022-05-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-30 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: fix gdb.trace/signal.exp on x86
+ Patch
+
+ 202be274a41a ("opcodes/i386: remove trailing whitespace from insns with zero operands")
+
+ causes this regression:
+
+ FAIL: gdb.trace/signal.exp: find syscall insn in kill
+
+ It's because the test still expects to match a whitespace after the
+ instruction, which the patch mentioned above removed. Remove the
+ whitespaces for the regexp.
+
+ Change-Id: Ie194273cc942bfd91332d4035f6eec55b7d3a428
+
+2022-05-30 Pedro Alves <pedro@palves.net>
+
+ gdb/manual: Introduce location specs
+ The current "Specify Location" section of the GDB manual starts with:
+
+ "Several @value{GDBN} commands accept arguments that specify a location
+ of your program's code."
+
+ And then, such commands are documented as taking a "location"
+ argument. For example, here's a representative subset:
+
+ @item break @var{location}
+ @item clear @var{location}
+ @item until @var{location}
+ @item list @var{location}
+ @item edit @var{location}
+ @itemx info line @var{location}
+ @item info macros @var{location}
+ @item trace @var{location}
+ @item info scope @var{location}
+ @item maint agent @r{[}-at @var{location}@r{,}@r{]} @var{expression}
+
+ The issue here is that "location" isn't really correct for most of
+ these commands. Instead, the "location" argument is really a
+ placeholder that represent an umbrella term for all of the
+ "linespecs", "explicit location", and "address location" input
+ formats. GDB parses these and then finds the actual code locations
+ (plural) in the program that match. For example, a "location"
+ specified like "-function func" will actually match all the code
+ locations in the program that correspond to the address/file/lineno of
+ all the functions named "func" in all the loaded programs and shared
+ libraries of all the inferiors. A location specified like "-function
+ func -label lab" matches all the addresses of C labels named "lab" in
+ all functions named "func". Etc.
+
+ This means that several of the commands that claim they accept a
+ "location", actually end up working with multiple locations, and the
+ manual doesn't explain that all that well. In some cases, the command
+ will work with all the resolved locations. In other cases, the
+ command aborts with an error if the location specification resolves to
+ multiple locations in the program. In other cases, GDB just
+ arbitrarily and silently picks whatever is the first resolved code
+ location (which sounds like should be improved).
+
+ To clarify this, I propose we use the term "Location Specification",
+ with shorthand "locaction spec", when we're talking about the user
+ input, the argument or arguments that is/are passed to commands to
+ instruct GDB how to find locations of interest. This is distinct from
+ the actual code locations in the program, which are what GDB finds
+ based on the user-specified location spec. Then use "location
+ specification or the shorter "location spec" thoughout instead of
+ "location" when we're talking about the user input.
+
+ Thus, this commit does the following:
+
+ - renames the "Specify Location" section of the manual to "Location
+ Specifications".
+
+ - It then introduces the term "Location Specification", with
+ corresponding shorthand "location spec", as something distinct from
+ an actual code location in the program. It explains what a concrete
+ code location is. It explains that a location specification may be
+ incomplete, and that may match multiple code locations in the
+ program, or no code location at all. It gives examples. Some
+ pre-existing examples were moved from the "Set Breaks" section, and
+ a few new ones that didn't exist yet were added. I think it is
+ better to have these centralized in this "Location Specification"
+ section, since all the other commands that accept a location spec
+ have an xref that points there.
+
+ - Goes through the manual, and where "@var{location}" was used for a
+ command argument, updated it to say "@var{locspec}" instead. At the
+ same time, tweaks the description of the affected commands to
+ describe what happens when the location spec resolves to more than
+ one location. Most commands just did not say anything about that.
+
+ One command -- "maint agent -at @var{location}" -- currently says it
+ accepts a "location", suggesting it can accept address and explicit
+ locations too, but that's incorrect. In reality, it only accepts
+ linespecs, so fix it accordingly.
+
+ One MI command -- "-trace-find line" -- currently says it accepts a
+ "line specification", but it can accept address and explicit
+ locations too, so fix it accordingly.
+
+ Special thanks goes to Eli Zaretskii for reviews and rewording
+ suggestions.
+
+ Change-Id: Ic42ad8565e79ca67bfebb22cbb4794ea816fd08b
+
+2022-05-30 Luis Machado <luis.machado@arm.com>
+
+ Move 64-bit BFD files from ALL_TARGET_OBS to ALL_64_TARGET_OBS
+ Doing a 32-bit build with "--enable-targets=all --disable-sim" fails to link
+ properly.
+
+ --
+
+ loongarch-tdep.o: In function `loongarch_gdbarch_init':
+ binutils-gdb/gdb/loongarch-tdep.c:443: undefined reference to `loongarch_r_normal_name'
+ loongarch-tdep.o: In function `loongarch_fetch_instruction':
+ binutils-gdb/gdb/loongarch-tdep.c:37: undefined reference to `loongarch_insn_length'
+ loongarch-tdep.o: In function `loongarch_scan_prologue(gdbarch*, unsigned long long, unsigned long long, frame_info*, trad_frame_cache*) [clone .isra.4]':
+ binutils-gdb/gdb/loongarch-tdep.c:87: undefined reference to `loongarch_insn_length'
+ binutils-gdb/gdb/loongarch-tdep.c:88: undefined reference to `loongarch_decode_imm'
+ binutils-gdb/gdb/loongarch-tdep.c:89: undefined reference to `loongarch_decode_imm'
+ binutils-gdb/gdb/loongarch-tdep.c:90: undefined reference to `loongarch_decode_imm'
+ binutils-gdb/gdb/loongarch-tdep.c:91: undefined reference to `loongarch_decode_imm'
+ binutils-gdb/gdb/loongarch-tdep.c:92: undefined reference to `loongarch_decode_imm'
+
+ --
+
+ Given the list of 64-bit BFD files in
+ opcodes/Makefile.am:TARGET64_LIBOPCODES_CFILES, it looks like GDB's
+ ALL_TARGET_OBS list is including files that should be included in
+ ALL_64_TARGET_OBS instead.
+
+ This patch accomplishes this and enables a 32-bit build with
+ "--enable-targets=all --disable-sim" to complete.
+
+ Moving the bpf, tilegx and loongarch files to the correct list means GDB can
+ find the correct disassembler function instead of finding a null pointer.
+
+ We still need the "--disable-sim" switch (or "--enable-64-bit-bfd") to
+ make a 32-bit build with "--enable-targets=all" complete correctly
+
+2022-05-30 Luis Machado <luis.machado@arm.com>
+
+ Fix failing test for armeb-gnu-eabi
+ The following test fails on the armeb-gnu-eabi target:
+
+ FAIL: Unwind information for Armv8.1-M.Mainline PACBTI extension
+
+ This patch adjusts the expected output for big endian.
+
+2022-05-30 Alan Modra <amodra@gmail.com>
+
+ Use a union to avoid casts in bfd/doc/chew.c
+ This fixes -Wpedantic warnings in chew.c. Conversion between function
+ and object pointers is not guaranteed. They can even be different
+ sizes, not that we're likely to encounter build machines like that
+ nowadays.
+
+ PR 29194
+ * doc/chew.c (pcu): New union typedef.
+ (dict_type, pc): Use it here. Adjust uses of pc.
+ (add_to_definition): Make "word" param a pcu. Adjust all uses
+ of function.
+ (stinst_type): Delete.
+
+2022-05-30 Alan Modra <amodra@gmail.com>
+
+ use libiberty xmalloc in bfd/doc/chew.c
+ Catch out of memory.
+
+ * doc/chew.c: Include libibery.h.
+ (init_string_with_size, nextword): Replace malloc with xmalloc.
+ (newentry, add_to_definition): Likewise.
+ (catchar, catbuf): Replace realloc with xrealloc.
+ (add_intrinsic): Replace strdup with xstrdup.
+ * doc/local.mk (LIBIBERTY): Define.
+ (chew): Link against libiberty.
+ * Makefile.in: Regenerate.
+
+2022-05-30 Alan Modra <amodra@gmail.com>
+
+ Update K&R functions in bfd/doc/chew.c
+ * doc/chew.c: Update function definitions to ISO C, remove
+ now unnecessary prototypes.
+
+2022-05-30 Alan Modra <amodra@gmail.com>
+
+ Reorganise bfd/doc/chew.c a little
+ This also removes some unused variables, and deletes support for the
+ "var" keyword which isn't used and was broken. (No means to set
+ variables, and add_var used push_number inconsistent with its use
+ elsewhere.)
+
+ * doc/chew.c: Move typedefs before variables, variables before
+ functions.
+ (die): Move earlier.
+ (word_type, sstack, ssp): Delete.
+ (dict_type): Delete var field.
+ (add_var): Delete.
+ (compile): Remove "var" support.
+
+2022-05-30 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Add zhinx extension supports.
+ The zhinx extension is a sub-extension in zfinx, corresponding to
+ zfh extension but use GPRs instead of FPRs.
+
+ This patch expanded the zfh insn class define, since zfh and zhinx
+ use the same opcodes, thanks for Nelson's works.
+
+ changelog in V2: Add missing classes of 'zfh' and 'zhinx' in
+ "riscv_multi_subset_supports_ext".
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_multi_subset_supports): New extensions.
+ (riscv_multi_subset_supports_ext): New extensions.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/fp-zhinx-insns.d: New test.
+ * testsuite/gas/riscv/fp-zhinx-insns.s: New test.
+
+ include/ChangeLog:
+
+ * opcode/riscv.h (enum riscv_insn_class): New INSN classes.
+
+ opcodes/ChangeLog:
+
+ * riscv-opc.c: Modify INSN_CLASS.
+
+2022-05-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-28 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: improve formatting of help text for user defined commands
+ Consider this command defined in Python (in the file test-cmd.py):
+
+ class test_cmd (gdb.Command):
+ """
+ This is the first line.
+ Indented second line.
+ This is the third line.
+ """
+
+ def __init__ (self):
+ super ().__init__ ("test-cmd", gdb.COMMAND_OBSCURE)
+
+ def invoke (self, arg, from_tty):
+ print ("In test-cmd")
+
+ test_cmd()
+
+ Now, within a GDB session:
+
+ (gdb) source test-cmd.py
+ (gdb) help test-cmd
+
+ This is the first line.
+ Indented second line.
+ This is the third line.
+
+ (gdb)
+
+ I think there's three things wrong here:
+
+ 1. The leading blank line,
+ 2. The trailing blank line, and
+ 3. Every line is indented from the left edge slightly.
+
+ The problem of course, is that GDB is using the Python doc string
+ verbatim as its help text. While the user has formatted the help text
+ so that it appears clear within the .py file, this means that the text
+ appear less well formatted when displayed in the "help" output.
+
+ The same problem can be observed for gdb.Parameter objects in their
+ set/show output.
+
+ In this commit I aim to improve the "help" output for commands and
+ parameters.
+
+ To do this I have added gdbpy_fix_doc_string_indentation, a new
+ function that rewrites the doc string text following the following
+ rules:
+
+ 1. Leading blank lines are removed,
+ 2. Trailing blank lines are removed, and
+ 3. Leading whitespace is removed in a "smart" way such that the
+ relative indentation of lines is retained.
+
+ With this commit in place the above example now looks like this:
+
+ (gdb) source ~/tmp/test-cmd.py
+ (gdb) help test-cmd
+ This is the first line.
+ Indented second line.
+ This is the third line.
+ (gdb)
+
+ Which I think is much neater. Notice that the indentation of the
+ second line is retained. Any blank lines within the help text (not
+ leading or trailing) will be retained.
+
+ I've added a NEWS entry to note that there has been a change in
+ behaviour, but I didn't update the manual. The existing manual is
+ suitably vague about how the doc string is used, so I think the new
+ behaviour is covered just as well by the existing text.
+
+2022-05-28 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: use gdb::unique_xmalloc_ptr<char> for docs in cmdpy_init
+ Make use of gdb::unique_xmalloc_ptr<char> to hold the documentation
+ string in cmdpy_init (when creating a custom GDB command in Python).
+ I think this is all pretty straight forward, the only slight weirdness
+ is the removal of the call to free toward the end of this function.
+
+ Prior to this commit, if an exception was thrown after the GDB command
+ was created then we would (I think) end up freeing the documentation
+ string even though the command would remain registered with GDB, which
+ would surely lead to undefined behaviour.
+
+ After this commit we release the doc string at the point that we hand
+ it over to the command creation routines. If we throw _after_ the
+ command has been created within GDB then the doc string will be left
+ live. If we throw during the command creation itself (either from
+ add_prefix_cmd or add_cmd) then it is up to those functions to free
+ the doc string (I suspect we don't, but I think in general the
+ commands are pretty bad at cleaning up after themselves, so I don't
+ think this is a huge problem).
+
+2022-05-28 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix build with -mx32
+ gprofng/ChangeLog
+ 2022-05-27 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/28983
+ PR gprofng/29143
+ * src/Experiment.cc (write_header): Fix argument for ctime.
+ Fix -Wformat= warnings.
+ * src/Dbe.cc: Likewise.
+ * src/DwarfLib.h: Fix [-Wsign-compare] warnings.
+ * src/Experiment.h: Likewise.
+ * src/ipc.cc: Fix -Wformat= warnings.
+
+2022-05-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-27 Tom Tromey <tom@tromey.com>
+
+ Fix crash with "maint print arc"
+ Luis noticed that "maint print arc" would crash, because the command
+ handler did not find "show" in the command name, violating an
+ invariant. This patch fixes the bug by changing the registration to
+ use add_basic_prefix_cmd instead.
+
+2022-05-27 Andrew Burgess <aburgess@redhat.com>
+
+ opcodes/i386: remove trailing whitespace from insns with zero operands
+ While working on another patch[1] I had need to touch this code in
+ i386-dis.c:
+
+ ins->obufp = ins->mnemonicendp;
+ for (i = strlen (ins->obuf) + prefix_length; i < 6; i++)
+ oappend (ins, " ");
+ oappend (ins, " ");
+ (*ins->info->fprintf_styled_func)
+ (ins->info->stream, dis_style_mnemonic, "%s", ins->obuf);
+
+ What this code does is add whitespace after the instruction mnemonic
+ and before the instruction operands.
+
+ The problem I ran into when working on this code can be seen by
+ assembling this input file:
+
+ .text
+ nop
+ retq
+
+ Now, when I disassemble, here's the output. I've replaced trailing
+ whitespace with '_' so that the issue is clearer:
+
+ Disassembly of section .text:
+
+ 0000000000000000 <.text>:
+ 0: 90 nop
+ 1: c3 retq___
+
+ Notice that there's no trailing whitespace after 'nop', but there are
+ three spaces after 'retq'!
+
+ What happens is that instruction mnemonics are emitted into a buffer
+ instr_info::obuf, then instr_info::mnemonicendp is setup to point to
+ the '\0' character at the end of the mnemonic.
+
+ When we emit the whitespace, this is then added starting at the
+ mnemonicendp position. Lets consider 'retq', first the buffer is
+ setup like this:
+
+ 'r' 'e' 't' 'q' '\0'
+
+ Then we add whitespace characters at the '\0', converting the buffer
+ to this:
+
+ 'r' 'e' 't' 'q' ' ' ' ' ' ' '\0'
+
+ However, 'nop' is actually an alias for 'xchg %rax,%rax', so,
+ initially, the buffer is setup like this:
+
+ 'x' 'c' 'h' 'g' '\0'
+
+ Then in NOP_Fixup we spot that we have an instruction that is an alias
+ for 'nop', and adjust the buffer to this:
+
+ 'n' 'o' 'p' '\0' '\0'
+
+ The second '\0' is left over from the original buffer contents.
+ However, when we rewrite the buffer, we don't afjust mnemonicendp,
+ which still points at the second '\0' character.
+
+ Now, when we insert whitespace we get:
+
+ 'n' 'o' 'p' '\0' ' ' ' ' ' ' ' ' '\0'
+
+ Notice the whitespace is inserted after the first '\0', so, when we
+ print the buffer, the whitespace is not printed.
+
+ The fix for this is pretty easy, I can change NOP_Fixup to adjust
+ mnemonicendp, but now a bunch of tests start failing, we now produce
+ whitespace after the 'nop', which the tests don't expect.
+
+ So, I could update the tests to expect the whitespace....
+
+ ...except I'm not a fan of trailing whitespace, so I'd really rather
+ not.
+
+ Turns out, I can pretty easily update the whitespace emitting code to
+ spot instructions that have zero operands and just not emit any
+ whitespace in this case. So this is what I've done.
+
+ I've left in the fix for NOP_Fixup, I think updating mnemonicendp is
+ probably a good thing, though this is not really required any more.
+
+ I've then updated all the tests that I saw failing to adjust the
+ expected patterns to account for the change in whitespace.
+
+ [1] https://sourceware.org/pipermail/binutils/2022-April/120610.html
+
+2022-05-27 Alan Modra <amodra@gmail.com>
+
+ Replace bfd_hostptr_t with uintptr_t
+ bfd_hostptr_t is defined as a type large enough to hold either a long
+ or a pointer. It mostly appears in the coff backend code in casts.
+ include/coff/internal.h struct internal_syment and union
+ internal_auxent have the only uses in data structures, where
+ comparison with include/coff/external.h and other code reveals that
+ the type only needs to be large enough for a 32-bit integer or a
+ pointer. That should mean replacing with uintptr_t is OK.
+
+ Remove much of BFD_HOST configury
+ This patch removes the definition of bfd_uint64_t and bfd_int64_t as
+ well as most BFD_HOST_* which are now unused.
+
+ Remove use of bfd_uint64_t and similar
+ Requiring C99 means that uses of bfd_uint64_t can be replaced with
+ uint64_t, and similarly for bfd_int64_t, BFD_HOST_U_64_BIT, and
+ BFD_HOST_64_BIT. This patch does that, removes #ifdef BFD_HOST_*
+ and tidies a few places that print 64-bit values.
+
+2022-05-27 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix build with --disable-shared
+ gprofng/ChangeLog
+ 2022-05-26 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * libcollector/configure.ac: Use AC_MSG_WARN instead of AC_MSG_ERROR
+ * libcollector/configure: Rebuild.
+
+2022-05-27 Jan Beulich <jbeulich@suse.com>
+
+ x86/Intel: allow MASM representation of embedded rounding / SAE
+ MASM doesn't support the separate operand form; the modifier belongs
+ after the instruction instead. Accept this form alongside the original
+ (now legacy) one. Short of having access to a MASM version to actually
+ check in how far "after the instruction" is a precise statement in their
+ documentation, allow both that and the SDM mandated form where the
+ modifier is on the last register operand (with a possible immediate
+ operand following).
+
+ Sadly the split out function, at least for the time being, needs to cast
+ away constness at some point, as the two callers disagree in this
+ regard.
+
+ Adjust some, but not all of the testcases.
+
+2022-05-27 Jan Beulich <jbeulich@suse.com>
+
+ x86: re-work AVX512 embedded rounding / SAE
+ As a preparatory step to allowing proper non-operand forms of specifying
+ embedded rounding / SAE, convert the internal representation to non-
+ operand form. While retaining properties (and in a few cases perhaps
+ providing more meaningful diagnostics), this means doing away with a few
+ hundred standalone templates, thus - as a nice side effect - reducing
+ memory consumption / cache occupancy.
+
+ x86/Intel: adjust representation of embedded rounding / SAE
+ MASM doesn't consider {sae} and alike a separate operand; it is attached
+ to the last register operand instead, just like spelled out by the SDM.
+ Make the disassembler follow this first, before also adjusting the
+ assembler (such that it'll be easy to see that the assembler change
+ doesn't alter generated code).
+
+2022-05-27 Jan Beulich <jbeulich@suse.com>
+
+ x86/Intel: allow MASM representation of embedded broadcast
+ MASM doesn't support the {1to<n>} form; DWORD BCST (paralleling
+ DWORD PTR) and alike are to be used there instead. Accept these forms
+ alongside the original (now legacy) ones.
+
+ Acceptance of the original {1to<n>} operand suffix is retained both for
+ backwards compatibility and to disambiguate VFPCLASSP{S,D,H} and vector
+ conversions with shrinking element sizes. I have no insight (yet) into
+ how MASM expects those to be disambiguated.
+
+ Adjust some, but not all of the testcases.
+
+2022-05-27 Jan Beulich <jbeulich@suse.com>
+
+ x86/Intel: adjust representation of embedded broadcast
+ MASM doesn't support the {1to<n>} form; DWORD BCST (paralleling
+ DWORD PTR) and alike are to be used there instead. Make the disassembler
+ follow this first, before also adjusting the assembler (such that it'll
+ be easy to see that the assembler change doesn't alter generated code).
+
+ For VFPCLASSP{S,D,H} and vector conversions with shrinking element sizes
+ the original {1to<n>} operand suffix is retained, to disambiguate
+ output. I have no insight (yet) into how MASM expects those to be
+ disambiguated.
+
+2022-05-27 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fix build with -mx32
+ gprofng/ChangeLog
+ 2022-05-26 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/28983
+ * libcollector/libcol_util.h (__collector_getsp, __collector_getfp,
+ __collector_getpc): Adapt for build with -mx32
+ * libcollector/heaptrace.c: Fix -Wpointer-to-int-cast warnings.
+ * libcollector/hwprofile.h: Likewise.
+ * libcollector/mmaptrace.c: Likewise.
+ * libcollector/synctrace.c: Likewise.
+ * libcollector/unwind.c: Likewise.
+
+2022-05-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-27 Hans-Peter Nilsson <hp@axis.com>
+
+ ld: cris*-elf: Default to --no-warn-rwx-segment
+ ld:
+ configure.tgt (cris-*-*, crisv32-*-* sans *-aout and *-linux): Unless
+ specified through the --enable-* -option, default to
+ --no-warn-rwx-segment.
+
+ Change-Id: I846bcd3e6762da807b17215a9fe337461ea0d710
+
+2022-05-27 Hans-Peter Nilsson <hp@axis.com>
+
+ cris: bfd: Correct default to no execstack
+ In the now-historical CRIS glibc port, the default stack permission
+ was no-exec as in "#define DEFAULT_STACK_PERMS (PF_R|PF_W)", and the
+ gcc port only emits the executable-stack marker when needed; when
+ emitting code needing it. In other words, the binutils setting
+ mismatches. It doesn't matter much, except being confusing and
+ defaulting to "off" is more sane.
+
+ ld:
+
+ * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): Switch to 0
+ for cris*-*-*.
+
+ bfd:
+ * elf32-cris.c (elf_backend_default_execstack): Define to 0.
+
+ Change-Id: I52f37598f119b19111c7a6546c00a627fca0f396
+
+2022-05-26 John Baldwin <jhb@FreeBSD.org>
+
+ aarch64-fbsd-nat: Move definition of debug_regs_probed under HAVE_DBREG.
+ This fixes the build on older FreeBSD systems without support for
+ hardware breakpoints/watchpoints.
+
+2022-05-26 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Change psymbol_functions::require_partial_symbols to partial_symbols
+ The previous patch ensured that partial symbols are read before calling
+ most of the quick_function's methods.
+
+ The psymbol_functions class has the require_partial_symbols method which
+ serves this exact purpose, and does not need to do it anymore.
+
+ This patch renames this method to partial_symbols and makes it an accessor
+ which asserts that partial symbols have been read at this point.
+
+ Regression tested on x86_64-linux.
+
+2022-05-26 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Require psymtab before calling quick_functions in objfile
+ The recent DWARF indexer rewrite introduced a regression when debugging
+ a forking program.
+
+ Here is a way to reproduce the issue (there might be other ways, but one
+ is enough and this one mimics the situation we encountered). Consider a
+ program which forks, and the child loads a shared library and calls a
+ function in this shared library:
+
+ if (fork () == 0)
+ {
+ void *solib = dlopen (some_solib, RTLD_NOW);
+ void (*foo) () = dlsym (some_solib, "foo");
+ foo ();
+ }
+
+ Suppose that this program is compiled without debug info, but the shared
+ library it loads has debug info enabled.
+
+ When debugging such program with the following options:
+
+ - set detach-on-fork off
+ - set follow-fork-mode child
+
+ we see something like:
+
+ (gdb) b foo
+ Function "foo" not defined.
+ Make breakpoint pending on future shared library load? (y or [n]) y
+ Breakpoint 1 (foo) pending.
+ (gdb) run
+ Starting program: a.out
+ [Attaching after process 19720 fork to child process 19723]
+ [New inferior 2 (process 19723)]
+ [Switching to process 19723]
+
+ Thread 2.1 "a.out" hit Breakpoint 1, 0x00007ffff7fc3101 in foo () from .../libfoo.so
+ (gdb) list
+
+ Fatal signal: Segmentation fault
+ ----- Backtrace -----
+ 0x55a278f77d76 gdb_internal_backtrace_1
+ ../../gdb/bt-utils.c:122
+ 0x55a278f77f83 _Z22gdb_internal_backtracev
+ ../../gdb/bt-utils.c:168
+ 0x55a27940b83b handle_fatal_signal
+ ../../gdb/event-top.c:914
+ 0x55a27940bbb1 handle_sigsegv
+ ../../gdb/event-top.c:987
+ 0x7effec0343bf ???
+ /build/glibc-sMfBJT/glibc-2.31/nptl/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0
+ 0x55a27924c9d3 _ZNKSt15__uniq_ptr_implI18dwarf2_per_cu_data26dwarf2_per_cu_data_deleterE6_M_ptrEv
+ /usr/include/c++/9/bits/unique_ptr.h:154
+ 0x55a279248bc9 _ZNKSt10unique_ptrI18dwarf2_per_cu_data26dwarf2_per_cu_data_deleterE3getEv
+ /usr/include/c++/9/bits/unique_ptr.h:361
+ 0x55a2792ae718 _ZN27dwarf2_base_index_functions23find_last_source_symtabEP7objfile
+ ../../gdb/dwarf2/read.c:3164
+ 0x55a279afb93e _ZN7objfile23find_last_source_symtabEv
+ ../../gdb/symfile-debug.c:139
+ 0x55a279aa3040 _Z20select_source_symtabP6symtab
+ ../../gdb/source.c:365
+ 0x55a279aa22a1 _Z34set_default_source_symtab_and_linev
+ ../../gdb/source.c:268
+ 0x55a27903c44c list_command
+ ../../gdb/cli/cli-cmds.c:1185
+ 0x55a279051233 do_simple_func
+ ../../gdb/cli/cli-decode.c:95
+ 0x55a27905f221 _Z8cmd_funcP16cmd_list_elementPKci
+ ../../gdb/cli/cli-decode.c:2514
+ 0x55a279c3b0ba _Z15execute_commandPKci
+ ../../gdb/top.c:660
+ 0x55a27940a6c3 _Z15command_handlerPKc
+ ../../gdb/event-top.c:598
+ 0x55a27940b032 _Z20command_line_handlerOSt10unique_ptrIcN3gdb13xfree_deleterIcEEE
+ ../../gdb/event-top.c:797
+ 0x55a279caf401 tui_command_line_handler
+ ../../gdb/tui/tui-interp.c:278
+ 0x55a279409098 gdb_rl_callback_handler
+ ../../gdb/event-top.c:230
+ 0x55a279ed5df2 rl_callback_read_char
+ ../../../readline/readline/callback.c:281
+ 0x55a279408bd8 gdb_rl_callback_read_char_wrapper_noexcept
+ ../../gdb/event-top.c:188
+ 0x55a279408de7 gdb_rl_callback_read_char_wrapper
+ ../../gdb/event-top.c:205
+ 0x55a27940a061 _Z19stdin_event_handleriPv
+ ../../gdb/event-top.c:525
+ 0x55a27a23771e handle_file_event
+ ../../gdbsupport/event-loop.cc:574
+ 0x55a27a237f5f gdb_wait_for_event
+ ../../gdbsupport/event-loop.cc:700
+ 0x55a27a235d81 _Z16gdb_do_one_eventv
+ ../../gdbsupport/event-loop.cc:237
+ 0x55a2796c2ef0 start_event_loop
+ ../../gdb/main.c:418
+ 0x55a2796c3217 captured_command_loop
+ ../../gdb/main.c:478
+ 0x55a2796c717b captured_main
+ ../../gdb/main.c:1340
+ 0x55a2796c7217 _Z8gdb_mainP18captured_main_args
+ ../../gdb/main.c:1355
+ 0x55a278d0b381 main
+ ../../gdb/gdb.c:32
+ ---------------------
+ A fatal error internal to GDB has been detected, further
+ debugging is not possible. GDB will now terminate.
+
+ This is a bug, please report it. For instructions, see:
+ <https://www.gnu.org/software/gdb/bugs/>.
+
+ The first issue observed is in the message printed when hitting the
+ breakpoint. It says that there was a break in the .so file as if there
+ was no debug info associated with it, but there is. Later, if we try to
+ display the source where the execution stopped, we have a segfault.
+
+ Note that not having the debug info on the main binary is not strictly
+ required to encounter some issues, it only is to encounter the segfault.
+ If the main binary has debug information, GDB shows some source form the
+ main binary, unrelated to where we stopped.
+
+ The core of the issue is that GDB never loads the psymtab for the
+ library. It is not loaded when we first see the .so because in case of
+ detach-on-fork off, follow-fork-mode child, infrun.c sets
+ child_inf->symfile_flags = SYMFILE_NO_READ to delay the psymtab loading
+ as much as possible. If we compare to what was done to handle this
+ before the new indexer was activated, the psymatb construction for the
+ shared library was done under
+ psymbol_functions::expand_symtabs_matching:
+
+ bool
+ psymbol_functions::expand_symtabs_matching (...)
+ {
+ for (partial_symtab *ps : require_partial_symbols (objfile))
+ ...
+ }
+
+ The new indexer's expand_symtabs_matching callback does not have a call
+ to the objfile's require_partial_symbols, so if the partial symbol table
+ is not loaded at this point, there is no mechanism to fix this.
+
+ Instead of requiring each implementation of the quick_functions to check
+ that partial symbols have been read, I think it is safer to enforce this
+ when calling the quick functions. The general pattern for calling the
+ quick functions is:
+
+ for (auto *iter : qf)
+ iter->the_actual_method_call (...)
+
+ This patch proposes to wrap the access of the `qf` field with an accessor
+ which ensures that partial symbols have been read before iterating:
+ qf_require_partial_symbols. All calls to quick functions are updated
+ except:
+
+ - quick_functions::dump
+ - quick_functions::read_partial_symbols (from
+ objfile::require_partial_symbols)
+ - quick_functions::can_lazily_read_symbols and quick_functions::has_symbols
+ (from objfile::has_partial_symbols)
+
+ Regression tested on x86_64-gnu-linux.
+
+ Change-Id: I39a13a937fdbaae613a5cf68864b021000554546
+
+2022-05-26 Tom Tromey <tom@tromey.com>
+
+ Fix crash in new DWARF indexer
+ PR gdb/29128 points out a crash in the new DWARF index code. This
+ happens if the aranges for a CU claims a PC, but the symtab that is
+ created during CU expansion does not actually contain the PC. This
+ can only occur due to bad debuginfo, but at the same time, gdb should
+ not crash.
+
+ This patch fixes the bug and further merges some code into
+ dwarf2_base_index_functions. This merger helps prevent the same issue
+ from arising from the other index implementations.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29128
+
+2022-05-26 Tom Tromey <tromey@adacore.com>
+
+ Finalize each cooked index separately
+ After DWARF has been scanned, the cooked index code does a
+ "finalization" step in a worker thread. This step combines all the
+ index entries into a single master list, canonicalizes C++ names, and
+ splits Ada names to synthesize package names.
+
+ While this step is run in the background, gdb will wait for the
+ results in some situations, and it turns out that this step can be
+ slow. This is PR symtab/29105.
+
+ This can be sped up by parallelizing, at a small memory cost. Now
+ each index is finalized on its own, in a worker thread. The cost
+ comes from name canonicalization: if a given non-canonical name is
+ referred to by multiple indices, there will be N canonical copies (one
+ per index) rather than just one.
+
+ This requires changing the users of the index to iterate over multiple
+ results. However, this is easily done by introducing a new "chained
+ range" class.
+
+ When run on gdb itself, the memory cost seems rather low -- on my
+ current machine, "maint space 1" reports no change due to the patch.
+
+ For performance testing, using "maint time 1" and "file" will not show
+ correct results. That approach measures "time to next prompt", but
+ because the patch only affects background work, this shouldn't (and
+ doesn't) change. Instead, a simple way to make gdb wait for the
+ results is to set a breakpoint.
+
+ Before:
+
+ $ /bin/time -f%e ~/gdb/install/bin/gdb -nx -q -batch \
+ -ex 'break main' /tmp/gdb
+ Breakpoint 1 at 0x43ec30: file ../../binutils-gdb/gdb/gdb.c, line 28.
+ 2.00
+
+ After:
+
+ $ /bin/time -f%e ./gdb/gdb -nx -q -batch \
+ -ex 'break main' /tmp/gdb
+ Breakpoint 1 at 0x43ec30: file ../../binutils-gdb/gdb/gdb.c, line 28.
+ 0.65
+
+ Regression tested on x86-64 Fedora 34.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29105
+
+2022-05-26 Alan Modra <amodra@gmail.com>
+
+ bit-rot in target before_parse function
+ Copy initialisation over from the elf.em before_parse. Commit
+ ba951afb999 2022-05-03 changed behaviour on arm and score regarding
+ exec stack. This patch restores the previous behaviour.
+
+ * emultempl/aarch64elf.em (before_parse): Init separate_code,
+ warn_execstack, no_warn_rwx_segments and default_execstack.
+ * emultempl/armelf.em (before_parse): Likewise.
+ * emultempl/scoreelf.em (before_parse): Likewise.
+ * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): Return
+ true for arm and nacl.
+
+2022-05-26 Richard Earnshaw <rearnsha@arm.com>
+
+ arm: avoid use of GNU builtin function in s_arm_unwind_save_mixed
+ Whilst reviewing Luis' proposed change to s_arm_unwind_save_mixed
+ yesterday I noticed that we were making use of __builting_clzl
+ directly within the main function, which is not guaranteed to be
+ portable. Whilst studying the code further, I also realized that it
+ could be rewritten without using it and also reworked to remove a lot
+ of unnecessary iterations steps. So this patch does that (and also
+ removes the source of the warning that Luis was trying to fix).
+ Finally, with the rewrite we can also simplify the caller of this
+ routine as the new version can handle all the cases directly.
+
+ * config/tc-arm.c (s_arm_unwind_save_mixed): Rewrite without
+ using __builtin_clzl.
+ (s_arm_unwind_save): Simplify logic for simple/mixed register saves.
+
+2022-05-26 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/linux-nat: xfer_memory_partial return E_IO on error
+ When accessing /proc/PID/mem, if pread64/pwrite64/read/write encounters
+ an error and return -1, linux_proc_xfer_memory_partial return
+ TARGET_XFER_EOF.
+
+ I think it should return TARGET_XFER_E_IO in this case. TARGET_XFER_EOF
+ is returned when pread64/pwrite64/read/frite returns 0, which indicates
+ that the address space is gone and the whole process has exited or
+ execed.
+
+ This patch makes this change.
+
+ Regression tested on x86_64-linux-gnu.
+
+ Change-Id: I6030412459663b8d7933483fdda22a6c2c5d7221
+
+2022-05-26 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/testsuite: prefer gdb_test in gdb.dwarf2/calling-convention
+ Since ed01945057c "Make gdb_test's question non-optional if specified",
+ if the question and response parameters are given to gdb_test, the
+ framework enforces that GDB asks the question. Before this patch, tests
+ needed to use gdb_test_multiple to enforce this.
+
+ This patch updates the gdb.dwarf2/calling-convention.exp testcase to use
+ gdb_test to check that GDB asks a question. This replaces the more
+ complicated gdb_test_multiple based implementation.
+
+ Tested on x86_64-gnu-linux.
+
+ Change-Id: I7216e822ca68f2727e0450970097d74c27c432fe
+
+2022-05-26 Potharla, Rupesh <Rupesh.Potharla@amd.com>
+
+ bfd: Add Support for DW_FORM_strx* and DW_FORM_addrx*
+
+2022-05-26 Luca Boccassi <bluca@debian.org>
+
+ ld: add --package-metadata
+ Generate a .note.package FDO package metadata ELF note, following
+ the spec: https://systemd.io/ELF_PACKAGE_METADATA/
+
+ If the jansson library is available at build time (and it is explicitly
+ enabled), link ld to it, and use it to validate that the input is
+ correct JSON, to avoid writing garbage to the file. The
+ configure option --enable-jansson has to be used to explicitly enable
+ it (error out when not found). This allows bootstrappers (or others who
+ are not interested) to seamlessly skip it without issues.
+
+2022-05-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-26 Natarajan, Kavitha <Kavitha.Natarajan@amd.com>
+
+ Re: Add bionutils support for DWARF v5's DW_OP_addrx
+ Testsuite files belonging to commit 3ac9da49378c.
+
+2022-05-25 Pedro Alves <pedro@palves.net>
+
+ Show enabled locations with disabled breakpoint parent as "y-"
+ Currently, breakpoint locations that are enabled while their parent
+ breakpoint is disabled are displayed with "y" in the Enb colum of
+ "info breakpoints":
+
+ (gdb) info breakpoints
+ Num Type Disp Enb Address What
+ 1 breakpoint keep n <MULTIPLE>
+ 1.1 y 0x00000000000011b6 in ...
+ 1.2 y 0x00000000000011c2 in ...
+ 1.3 n 0x00000000000011ce in ...
+
+ Such locations won't trigger a break, so to avoid confusion, show "y-"
+ instead. For example:
+
+ (gdb) info breakpoints
+ Num Type Disp Enb Address What
+ 1 breakpoint keep n <MULTIPLE>
+ 1.1 y- 0x00000000000011b6 in ...
+ 1.2 y- 0x00000000000011c2 in ...
+ 1.3 n 0x00000000000011ce in ...
+
+ The "-" sign is inspired on how the TUI represents breakpoints on the
+ left side of the source window, with "b-" for a disabled breakpoint.
+
+ Change-Id: I9952313743c51bf21b4b380c72360ef7d4396a09
+
+2022-05-25 Natarajan, Kavitha <Kavitha.Natarajan@amd.com>
+
+ Add bionutils support for DWARF v5's DW_OP_addrx.
+
+2022-05-25 Pedro Alves <pedro@palves.net>
+
+ gdb: Fix DUPLICATE and PATH regressions throughout
+ The previous patch to add -prompt/-lbl to gdb_test introduced a
+ regression: Before, you could specify an explicit empty message to
+ indicate you didn't want to PASS, like so:
+
+ gdb_test COMMAND PATTERN ""
+
+ After said patch, gdb_test no longer distinguishes
+ no-message-specified vs empty-message, so tests that previously would
+ be silent on PASS, now started emitting PASS messages based on
+ COMMAND. This in turn introduced a number of PATH/DUPLICATE
+ violations in the testsuite.
+
+ This commit fixes all the regressions I could see.
+
+ This patch uses the new -nopass feature introduced in the previous
+ commit, but tries to avoid it if possible. Most of the patch fixes
+ DUPLICATE issues the usual way, of using with_test_prefix or explicit
+ unique messages.
+
+ See previous commit's log for more info.
+
+ In addition to looking for DUPLICATEs, I also looked for cases where
+ we would now end up with an empty message in gdb.sum, due to a
+ gdb_test being passed both no message and empty command. E.g., this
+ in gdb.ada/bp_reset.exp:
+
+ gdb_run_cmd
+ gdb_test "" "Breakpoint $decimal, foo\\.nested_sub \\(\\).*"
+
+ was resulting in this in gdb.sum:
+
+ PASS: gdb.ada/bp_reset.exp:
+
+ I fixed such cases by passing an explicit message. We may want to
+ make such cases error out.
+
+ Tested on x86_64 GNU/Linux, native and native-extended-gdbserver. I
+ see zero PATH cases now. I get zero DUPLICATEs with native testing
+ now. I still see some DUPLICATEs with native-extended-gdbserver, but
+ those were preexisting, unrelated to the gdb_test change.
+
+ Change-Id: I5375f23f073493e0672190a0ec2e847938a580b2
+
+2022-05-25 Pedro Alves <pedro@palves.net>
+
+ Add -nopass option to gdb_test/gdb_test_multiple
+ The previous patch to add -prompt/-lbl to gdb_test introduced a
+ regression: Before, you could specify an explicit empty message to
+ indicate you didn't want to PASS, like so:
+
+ gdb_test COMMAND PATTERN ""
+
+ After said patch, gdb_test no longer distinguishes
+ no-message-specified vs empty-message, so tests that previously would
+ be silent on PASS, now started emitting PASS messages based on
+ COMMAND. This in turn introduced a number of PATH/DUPLICATE
+ violations in the testsuite.
+
+ I think that not issuing a PASS should be restricted to only a few
+ cases -- namely in shared routines exported by gdb.exp, which happen
+ to use gdb_test internally. In tests that iterate an unknown number
+ of tests exercising some racy scenario. In the latter case, if we
+ emit PASSes for each iteration, we run into the situation where
+ different testsuite runs emit a different number of PASSes.
+
+ Thus, this patch preserves the current behavior, and, instead, adds a
+ new "-nopass" option to gdb_test and gdb_test_no_output. Compared to
+ the old way of supressing PASS with an empty message, this has the
+ advantage that you can specify a FAIL message that is distinct from
+ the command string, and, it's also more explicit.
+
+ Change-Id: I5375f23f073493e0672190a0ec2e847938a580b2
+
+2022-05-25 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Fix RV32Q conflict
+ This commit makes RV32 + 'Q' extension (version 2.2 or later) not
+ conflicting since this combination is no longer prohibited by the
+ specification.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_parse_check_conflicts): Remove conflict
+ detection that prohibits RV32Q on 'Q' version 2.2 or later.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/march-fail-rv32iq.d: Removed.
+ * testsuite/gas/riscv/march-fail-rv32iq.l: Likewise.
+ * testsuite/gas/riscv/march-fail-rv32iq2p0.d: New test
+ showing RV32IQ fails on 'Q' extension version 2.0.
+ * testsuite/gas/riscv/march-fail-rv32iq2p0.l: Likewise.
+ * testsuite/gas/riscv/march-fail-rv32iq2.d: Likewise.
+ * testsuite/gas/riscv/march-fail-rv32iq-isa-2p2.d: New test
+ showing RV32IQ fails on ISA specification version 2.2.
+ * testsuite/gas/riscv/march-ok-rv32iq2p2.d: New test
+ showing RV32IQ succesds on 'Q' extension version 2.2.
+ * testsuite/gas/riscv/march-ok-rv32iq-isa-20190608.d: New test
+ showing RV32IQ succesds on ISA specification 20190608.
+
+2022-05-25 Dmitry Selyutin <ghostmansd@gmail.com>
+
+ opcodes: introduce BC field; fix isel
+ Per Power ISA Version 3.1B 3.3.12, isel uses BC field rather than CRB
+ field present in binutils sources. Also, per 1.6.2, BC has the same
+ semantics as BA and BB fields, so this should keep the same flags and
+ mask, only with the different offset.
+
+ opcodes/
+ * ppc-opc.c
+ (BC): Define new field, with the same definition as CRB field,
+ but with the PPC_OPERAND_CR_BIT flag present.
+ gas/
+ * testsuite/gas/ppc/476.d: Update.
+ * testsuite/gas/ppc/a2.d: Update.
+ * testsuite/gas/ppc/e500.d: Update.
+ * testsuite/gas/ppc/power7.d: Update.
+
+2022-05-25 Dmitry Selyutin <ghostmansd@gmail.com>
+
+ ppc: extend opindex to 16 bits
+ With the upcoming SVP64 extension[0] to PowerPC architecture, it became
+ evident that PowerPC operand indices no longer fit 8 bits. This patch
+ switches the underlying type to uint16_t, also introducing a special
+ typedef so that any future extension goes even smoother.
+
+ [0] https://libre-soc.org
+
+ include/
+ * opcode/ppc.h (ppc_opindex_t): New typedef.
+ (struct powerpc_opcode): Use it.
+ (PPC_OPINDEX_MAX): Define.
+ gas/
+ * write.h (struct fix): Increase size of fx_pcrel_adjust.
+ Reorganise.
+ * config/tc-ppc.c (insn_validate): Use ppc_opindex_t for operands.
+ (md_assemble): Likewise.
+ (md_apply_fix): Likewise. Mask fx_pcrel_adjust with PPC_OPINDEX_MAX.
+ (ppc_setup_opcodes): Adjust opcode index assertion.
+ opcodes/
+ * ppc-dis.c (skip_optional_operands): Use ppc_opindex_t for
+ operand pointer.
+ (lookup_powerpc, lookup_prefix, lookup_vle, lookup_spe2): Likewise.
+ (print_insn_powerpc): Likewise.
+
+2022-05-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.opt/clobbered-registers-O2.exp with clang
+ When running test-case gdb.opt/clobbered-registers-O2.exp with clang 12.0.1, I
+ get:
+ ...
+ (gdb) run ^M
+ Starting program: clobbered-registers-O2 ^M
+ ^M
+ Program received signal SIGSEGV, Segmentation fault.^M
+ gen_movsd (operand0=<optimized out>, operand1=<optimized out>) at \
+ clobbered-registers-O2.c:31^M
+ 31 return *start_sequence(operand0, operand1);^M
+ (gdb) FAIL: gdb.opt/clobbered-registers-O2.exp: runto: run to start_sequence
+ ...
+
+ The problem is that the breakpoint in start_sequence doesn't trigger, because:
+ - the call to start_sequence in gen_movsd is optimized away, despite the
+ __attribute__((noinline)), so the actual function start_sequence doesn't get
+ called, and
+ - the debug info doesn't contain inlined function info, so there's only one
+ breakpoint location.
+
+ Adding noclone and noipa alongside the noinline attribute doesn't fix this.
+
+ Adding the clang-specific attribute optnone in start_sequence does, but since
+ it inhibits all optimization, that's not a preferred solution in a gdb.opt
+ test-case, and it would work only for clang and not other compilers that
+ possibly have the same issue.
+
+ Fix this by moving functions start_sequence and gen_movsd into their own
+ files, as a way of trying harder to enforce noinline/noipa/noclone.
+
+ Tested on x86_64-linux.
+
+2022-05-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.opt/clobbered-registers-O2.exp with gcc-12
+ When running test-case gdb.opt/clobbered-registers-O2.exp with gcc-12, I run
+ into:
+ ...
+ (gdb) PASS: gdb.opt/clobbered-registers-O2.exp: backtracing
+ print operand0^M
+ $1 = (unsigned int *) 0x7fffffffd070^M
+ (gdb) print *operand0^M
+ $2 = 4195541^M
+ (gdb) FAIL: gdb.opt/clobbered-registers-O2.exp: print operand0
+ ...
+
+ The problem is that starting gcc-12, the assignments to x and y in main are
+ optimized away:
+ ...
+ int main(void)
+ {
+ unsigned x, y;
+
+ x = 13;
+ y = 14;
+ return (int)gen_movsd (&x, &y);
+ ...
+
+ Fix this by making x and y volatile.
+
+ Note that the test-case intends to check the handling of debug info for
+ optimized code in function gen_movsd, so inhibiting optimization in main
+ doesn't interfere with that.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29161
+
+2022-05-24 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Define LOONGARCH_LINUX_NUM_GREGSET as 45
+ LOONGARCH_LINUX_NUM_GREGSET should be defined as 45 (32 + 1 + 1 + 11)
+ due to reserved 11 for extension in glibc, otherwise when execute:
+
+ make check-gdb TESTS="gdb.base/corefile.exp"
+
+ there exists the following failed testcase:
+
+ (gdb) core-file /home/loongson/build.git/gdb/testsuite/outputs/gdb.base/corefile/corefile.core
+ [New LWP 7742]
+ warning: Unexpected size of section `.reg/7742' in core file.
+ Core was generated by `/home/loongson/build.git/gdb/testsuite/outputs/gdb.base/corefile/corefile'.
+ Program terminated with signal SIGABRT, Aborted.
+ warning: Unexpected size of section `.reg/7742' in core file.
+ #0 0x000000fff76f4e24 in raise () from /lib/loongarch64-linux-gnu/libc.so.6
+ (gdb) FAIL: gdb.base/corefile.exp: core-file warning-free
+
+2022-05-24 Christophe Lyon <christophe.lyon@arm.com>
+
+ AArch64: add support for DFP (Decimal Floating point)
+ This small patch adds support for TYPE_CODE_DECFLOAT in
+ aapcs_is_vfp_call_or_return_candidate_1 and pass_in_v_vfp_candidate,
+ so that GDB for AArch64 knows how to pass DFP parameters and how to
+ read DFP results when calling a function.
+
+ Tested on aarch64-linux-gnu, with a GCC with DFP support in the PATH,
+ all of GDB's DFP tests pass.
+
+2022-05-24 Christophe Lyon <christophe.lyon@arm.com>
+
+ Merge config/ changes from GCC, to enable DFP on AArch64
+ 2022-04-28 Christophe Lyon <christophe.lyon@arm.com>
+
+ config/
+ * dfp.m4 (enable_decimal_float): Enable BID for AArch64.
+
+ libdecnumber/
+ * configure: Regenerate.
+
+2022-05-24 Alan Modra <amodra@gmail.com>
+
+ PR29171, invalid read causing SIGSEGV
+ The fix here is to pass "section" down to read_and_display_attr_value.
+ The test in read_and_display_attr_value is a little bit of hardening.
+
+ PR 29171
+ * dwarf.c (display_debug_macro, display_debug_names): Pass section
+ to read_and_display_attr_value2.
+ (read_and_display_attr_value): Don't attempt to check for .dwo
+ section name when section is NULL.
+
+2022-05-24 Alan Modra <amodra@gmail.com>
+
+ PR29170, divide by zero displaying fuzzed .debug_names
+ PR 29170
+ * dwarf.c (display_debug_names): Don't attempt to display bucket
+ clashes when bucket count is zero.
+
+ PR29169, invalid read displaying fuzzed .gdb_index
+ PR 29169
+ * dwarf.c (display_gdb_index): Combine sanity checks. Calculate
+ element counts, not word counts.
+
+2022-05-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-23 John Baldwin <jhb@FreeBSD.org>
+
+ Tweak the std::hash<> specialization for aarch64_features.
+ Move the specialization into an explicit std namespace to workaround a
+ bug in older compilers. GCC 6.4.1 at least fails to compile the previous
+ version with the following error:
+
+ gdb/arch/aarch64.h:48:13: error: specialization of 'template<class _Tp> struct std::hash' in different namespace [-fpermissive]
+
+ struct std::hash<aarch64_features>
+
+2022-05-23 John Baldwin <jhb@FreeBSD.org>
+
+ Fix loongarch_iterate_over_regset_sections for non-native targets.
+ Define a constant for the number of registers stored in a register set
+ and use this with register_size to compute the size of the
+ general-purpose register set in core dumps.
+
+ This also fixes the build on hosts such as FreeBSD that do not define
+ an elf_gregset_t type.
+
+2022-05-23 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Implement the iterate_over_regset_sections gdbarch method
+ When execute the following command on LoongArch:
+
+ make check-gdb TESTS="gdb.base/auxv.exp"
+
+ there exist the following unsupported and failed testcases:
+
+ UNSUPPORTED: gdb.base/auxv.exp: gcore
+ FAIL: gdb.base/auxv.exp: load core file for info auxv on native core dump
+ FAIL: gdb.base/auxv.exp: info auxv on native core dump
+ FAIL: gdb.base/auxv.exp: matching auxv data from live and core
+ UNSUPPORTED: gdb.base/auxv.exp: info auxv on gcore-created dump
+ UNSUPPORTED: gdb.base/auxv.exp: matching auxv data from live and gcore
+
+ we can see the following messages in gdb/testsuite/gdb.log:
+
+ gcore /home/loongson/build.git/gdb/testsuite/outputs/gdb.base/auxv/auxv.gcore
+ Target does not support core file generation.
+ (gdb) UNSUPPORTED: gdb.base/auxv.exp: gcore
+
+ In order to fix the above issues, implement the iterate_over_regset_sections
+ gdbarch method to iterate over core file register note sections on LoongArch.
+
+ By the way, with this patch, the failed testcases in gdb.base/corefile.exp
+ and gdb.base/gcore.exp can also be fixed.
+
+2022-05-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix -prompt handling in gdb_test
+ With check-read1 I run into:
+ ...
+ [infrun] maybe_set_commit_resumed_all_targets: not requesting
+ commit-resumed for target native, no resumed threads^M
+ (gdb) FAIL: gdb.base/ui-redirect.exp: debugging: continue
+ [infrun] fetch_inferior_event: exit^M
+ ...
+
+ The problem is that proc gdb_test doesn't pass down the -prompt option to proc
+ gdb_test_multiple, due to a typo making this lappend without effect:
+ ...
+ set opts {}
+ lappend "-prompt $prompt"
+ ...
+
+ Fix this by actually appending to opts.
+
+ Tested on x86_64-linux.
+
+2022-05-23 Tom de Vries <tdevries@suse.de>
+
+ [gdbsupport] Fix UB in print-utils.cc:int_string
+ When building gdb with -fsanitize=undefined, I run into:
+ ...
+ (gdb) PASS: gdb.ada/access_to_packed_array.exp: set logging enabled on
+ maint print symbols^M
+ print-utils.cc:281:29:runtime error: negation of -9223372036854775808 cannot \
+ be represented in type 'long int'; cast to an unsigned type to negate this \
+ value to itself
+ (gdb) FAIL: gdb.ada/access_to_packed_array.exp: maint print symbols
+ ...
+
+ By running in a debug session, we find that this happens during printing of:
+ ...
+ typedef system.storage_elements.storage_offset: \
+ range -9223372036854775808 .. 9223372036854775807;
+ ...
+ Possibly, an ada test-case could be created that exercises this in isolation.
+
+ The problem is here in int_string, where we negate a val with type LONGEST:
+ ...
+ return decimal2str ("-", -val, width);
+ ...
+
+ Fix this by, as recommend, using "-(ULONGEST)val" instead.
+
+ Tested on x86_64-linux.
+
+2022-05-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/exp] Fix UB in scalar_binop
+ When building gdb with -fsanitize=undefined, I run into:
+ ...
+ $ gdb -q -batch -ex "p -(-0x7fffffffffffffff - 1)"
+ src/gdb/valarith.c:1385:10: runtime error: signed integer overflow: \
+ 0 - -9223372036854775808 cannot be represented in type 'long int'
+ $1 = -9223372036854775808
+ ...
+
+ Fix this by performing the substraction in scalar_binop using unsigned types.
+
+ Tested on x86_64-linux.
+
+2022-05-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/ada] Fix gdb.ada/dynamic-iface.exp with gcc 7
+ This test in test-case gdb.ada/dynamic-iface.exp passes with gcc 8:
+ ...
+ (gdb) print obj^M
+ $1 = (n => 3, a => "ABC", value => 93)^M
+ (gdb) PASS: gdb.ada/dynamic-iface.exp: print local as interface
+ ...
+ but fails with gcc 7:
+ ...
+ (gdb) print obj^M
+ $1 = ()^M
+ (gdb) FAIL: gdb.ada/dynamic-iface.exp: print local as interface
+ ...
+
+ More concretely, we have trouble finding the type of obj. With gcc 8:
+ ...
+ $ gdb -q -batch main -ex "b concrete.adb:20" -ex run -ex "ptype obj"
+ ...
+ type = <ref> new concrete.intermediate with record
+ value: integer;
+ end record
+ ...
+ and with gcc 7:
+ ...
+ type = <ref> tagged record null; end record
+ ...
+
+ The translation from tagged type to "full view" type happens in
+ ada_tag_value_at_base_address, where we hit this code:
+ ...
+ /* Storage_Offset'Last is used to indicate that a dynamic offset to
+ top is used. In this situation the offset is stored just after
+ the tag, in the object itself. */
+ if (offset_to_top == last)
+ {
+ struct value *tem = value_addr (tag);
+ tem = value_ptradd (tem, 1);
+ tem = value_cast (ptr_type, tem);
+ offset_to_top = value_as_long (value_ind (tem));
+ }
+ ...
+ resulting in an offset_to_top for gcc 8:
+ ...
+ (gdb) p offset_to_top
+ $1 = -16
+ ...
+ and for gcc 7:
+ ...
+ (gdb) p offset_to_top
+ $1 = 16
+ ...
+
+ The difference is expected, it bisects to gcc commit d0567dc0dbf ("[multiple
+ changes]") which mentions this change.
+
+ There's some code right after the code quoted above that deals with this
+ change:
+ ...
+ else if (offset_to_top > 0)
+ {
+ /* OFFSET_TO_TOP used to be a positive value to be subtracted
+ from the base address. This was however incompatible with
+ C++ dispatch table: C++ uses a *negative* value to *add*
+ to the base address. Ada's convention has therefore been
+ changed in GNAT 19.0w 20171023: since then, C++ and Ada
+ use the same convention. Here, we support both cases by
+ checking the sign of OFFSET_TO_TOP. */
+ offset_to_top = -offset_to_top;
+ }
+ ...
+ but it's not activated because of the 'else'.
+
+ Fix this by removing the 'else'.
+
+ Tested on x86_64-linux, with gcc 7.5.0.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29057
+
+2022-05-23 Mark Harmstone <mark@harmstone.com>
+
+ ld: use definitions in generate_reloc rather than raw literals
+
+2022-05-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Skip language auto in gdb.base/parse_number.exp
+ In test-case gdb.base/parse_number.exp, we skip architecture auto in the
+ $supported_archs loop, to prevent duplicate testing.
+
+ Likewise, skip language auto and its alias local in the $::all_languages
+ loop. This reduces the number of tests from 17744 to 15572.
+
+ Tested on x86_64-linux, with a build with --enable-targets=all.
+
+2022-05-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-22 Alok Kumar Sharma <AlokKumar.Sharma@amd.com>
+
+ Accept functions with DW_AT_linkage_name present
+ Currently GDB is not able to debug (Binary generated with Clang) variables
+ present in shared/private clause of OpenMP Task construct. Please note that
+ LLVM debugger LLDB is able to debug.
+
+ In case of OpenMP, compilers generate artificial functions which are not
+ present in actual program. This is done to apply parallelism to block of
+ code.
+
+ For non-artifical functions, DW_AT_name attribute should contains the name
+ exactly as present in actual program.
+ (Ref# http://wiki.dwarfstd.org/index.php?title=Best_Practices)
+ Since artificial functions are not present in actual program they not having
+ DW_AT_name and having DW_AT_linkage_name instead should be fine.
+
+ Currently GDB is invalidating any function not havnig DW_AT_name which is why
+ it is not able to debug OpenMP (Clang).
+
+ It should be fair to fallback to check DW_AT_linkage_name in case DW_AT_name
+ is absent.
+
+2022-05-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Rename base_breakpoint -> code_breakpoint
+ Even after the previous patches reworking the inheritance of several
+ breakpoint types, the present breakpoint hierarchy looks a bit
+ surprising, as we have "breakpoint" as the superclass, and then
+ "base_breakpoint" inherits from "breakpoint". Like so, simplified:
+
+ breakpoint
+ base_breakpoint
+ ordinary_breakpoint
+ internal_breakpoint
+ momentary_breakpoint
+ ada_catchpoint
+ exception_catchpoint
+ tracepoint
+ watchpoint
+ catchpoint
+ exec_catchpoint
+ ...
+
+ The surprising part to me is having "base_breakpoint" being a subclass
+ of "breakpoint". I'm just refering to naming here -- I mean, you'd
+ expect that it would be the top level baseclass that would be called
+ "base".
+
+ Just flipping the names of breakpoint and base_breakpoint around
+ wouldn't be super great for us, IMO, given we think of every type of
+ *point as a breakpoint at the user visible level. E.g., "info
+ breakpoints" shows watchpoints, tracepoints, etc. So it makes to call
+ the top level class breakpoint.
+
+ Instead, I propose renaming base_breakpoint to code_breakpoint. The
+ previous patches made sure that all code breakpoints inherit from
+ base_breakpoint, so it's fitting. Also, "code breakpoint" contrasts
+ nicely with a watchpoint also being typically known as a "data
+ breakpoint".
+
+ After this commit, the resulting hierarchy looks like:
+
+ breakpoint
+ code_breakpoint
+ ordinary_breakpoint
+ internal_breakpoint
+ momentary_breakpoint
+ ada_catchpoint
+ exception_catchpoint
+ tracepoint
+ watchpoint
+ catchpoint
+ exec_catchpoint
+ ...
+
+ ... which makes a lot more sense to me.
+
+ I've left this patch as last in the series in case people want to
+ bikeshed on the naming.
+
+ "code" has a nice property that it's exactly as many letters as
+ "base", so this patch didn't require any reindentation. :-)
+
+ Change-Id: Id8dc06683a69fad80d88e674f65e826d6a4e3f66
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Test "set multiple-symbols on" creating multiple breakpoints
+ To look for code paths that lead to create_breakpoints_sal creating
+ multiple breakpoints, I ran the whole testsuite with this hack:
+
+ --- a/gdb/breakpoint.c
+ +++ b/gdb/breakpoint.c
+ @@ -8377,8 +8377,7 @@ create_breakpoints_sal (struct gdbarch *gdbarch,
+ int from_tty,
+ int enabled, int internal, unsigned flags)
+ {
+ - if (canonical->pre_expanded)
+ - gdb_assert (canonical->lsals.size () == 1);
+ + gdb_assert (canonical->lsals.size () == 1);
+
+ surprisingly, the assert never failed...
+
+ The way to get to create_breakpoints_sal with multiple lsals is to use
+ "set multiple-symbols ask" and then select multiple options from the
+ menu, like so:
+
+ (gdb) set multiple-symbols ask
+ (gdb) b overload1arg
+ [0] cancel
+ [1] all
+ [2] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg()
+ [3] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(char)
+ [4] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(double)
+ [5] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(float)
+ [6] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(int)
+ [7] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(long)
+ [8] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(short)
+ [9] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(signed char)
+ [10] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned char)
+ [11] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned int)
+ [12] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned long)
+ [13] /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc:foo::overload1arg(unsigned short)
+ > 2-3
+ Breakpoint 2 at 0x1532: file /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc, line 107.
+ Breakpoint 3 at 0x154b: file /home/pedro/gdb/binutils-gdb/src/gdb/testsuite/gdb.cp/ovldbreak.cc, line 110.
+ warning: Multiple breakpoints were set.
+ Use the "delete" command to delete unwanted breakpoints.
+
+ ... which would trigger the assert.
+
+ This commit makes gdb.cp/ovldbreak.exp test this scenario. It does
+ that by making set_bp_overloaded take a list of expected created
+ breakpoints rather than just one breakpoint. It converts the
+ procedure to use gdb_test_multiple instead of send_gdb/gdb_expect
+ along the way.
+
+ Change-Id: Id87d1e08feb6670440d926f5344e5081f5e37c8e
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Make sure momentary breakpoints are always thread-specific
+ This adds a new ctor to momentary_breakpoints with a few parameters
+ that are always necessary for momentary breakpoints.
+
+ In particular, I noticed that set_std_terminate_breakpoint doesn't
+ make the breakpoint be thread specific, which looks like a bug to me.
+
+ The point of that breakpoint is to intercept std::terminate calls that
+ happen as result of the called thread throwing an exception that won't
+ be caught by the dummy frame. If some other thread calls
+ std::terminate, IMO, it's no different from some other thread calling
+ exit/_exit, for example.
+
+ Change-Id: Ifc5ff4a6d6e58b8c4854d00b86725382d38a1a02
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Momentary breakpoints should have no breakpoint number
+ Momentary breakpoints have no breakpoint number, their breakpoint
+ number should be always 0, to avoid constantly incrementing (or
+ decrementing) the internal breakpoint count.
+
+ Indeed, set_momentary_breakpoint installs the created breakpoint
+ without a number.
+
+ However, momentary_breakpoint_from_master incorrectly gives an
+ internal breakpoint number to the new breakpoint. This commit fixes
+ that.
+
+ Change-Id: Iedcae5432cdf232db9e9a6e1a646d358abd34f95
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Add/tweak intro comments of struct breakpoint and several subclasses
+ This tweaks the intro comments of the following classes:
+
+ internal_breakpoint
+ momentary_breakpoint
+ breakpoint
+ base_breakpoint
+ watchpoint
+ catchpoint
+
+ Change-Id: If6b31f51ebbb81705fbe5b8435f60ab2c88a98c8
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Move add_location(sal) to base_breakpoint
+ After the previous patches, only base_breakpoint subclasses use
+ add_location(sal), so we can move it to base_breakpoint (a.k.a. base
+ class for code breakpoints).
+
+ This requires a few casts here and there, but always at spots where
+ you can see from context what the breakpoint's type actually is.
+
+ I inlined new_single_step_breakpoint into its only caller exactly for
+ this reason.
+
+ I did try to propagate more use of base_breakpoint to avoid casts, but
+ that turned out unwieldy for this patch.
+
+ Change-Id: I49d959322b0fdce5a88a216bb44730fc5dd7c6f8
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Move common bits of catchpoint/exception_catchpoint to breakpoint's ctor
+ Move common bits of catchpoint and exception_catchpoint to
+ breakpoint's ctor, to avoid duplicating code.
+
+ Change-Id: I3a115180f4d496426522f1d89a3875026aea3cf2
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Make catchpoint inherit breakpoint, eliminate init_raw_breakpoint
+ struct catchpoint's ctor currently calls init_raw_breakpoint, which is
+ a bit weird, as that ctor-like function takes a sal argument, but
+ catchpoints don't have code locations.
+
+ Instead, make struct catchpoint's ctor add the catchpoint's dummy
+ location using add_dummy_location.
+
+ init_raw_breakpoint uses add_location under the hood, and with a dummy
+ sal it would ultimately use the breakpoint's gdbarch for the
+ location's gdbarch, so replace the references to loc->gdbarch (which
+ is now NULL) in syscall_catchpoint to references to the catchpoint's
+ gdbarch.
+
+ struct catchpoint's ctor was the last user of init_raw_breakpoint, so
+ this commit eliminates the latter.
+
+ Since catchpoint locations aren't code locations, make struct
+ catchpoint inherit struct breakpoint instead of base_breakpoint. This
+ let's us delete the tracepoint::re_set override too.
+
+ Change-Id: Ib428bf71efb09fdaf399c56e4372b0f41d9c5869
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Make breakpoint_address_bits look at the location kind
+ Software watchpoints allocate a special dummy location using
+ software_watchpoint_add_no_memory_location, and then
+ breakpoint_address_bits checks whether the location is that special
+ location to decide whether the location has a meaninful address to
+ print.
+
+ Introduce a new bp_loc_software_watchpoint location kind, and make
+ breakpoint_address_bits use bl_address_is_meaningful instead, which
+ returns false for bp_loc_other, which is in accordance with we
+ document for bp_location::address:
+
+ /* (... snip ...) Valid for all types except
+ bp_loc_other. */
+ CORE_ADDR address = 0;
+
+ Rename software_watchpoint_add_no_memory_location to
+ add_dummy_location, and simplify it. This will be used by catchpoints
+ too in a following patch.
+
+ Note that neither "info breakpoints" nor "maint info breakpoints"
+ actually prints the addresses of watchpoints, but I think it would be
+ useful to do so in "maint info breakpoints". This approach let's us
+ implement that in the future.
+
+ Change-Id: I50e398f66ef618c31ffa662da755eaba6295aed7
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Make exception_catchpoint inherit base_breakpoint instead of catchpoint
+ exception_catchpoint is really a code breakpoint, with locations set
+ by sals, re-set like other code breakpoints, etc., so make it inherit
+ base_breakpoint.
+
+ This adds a bit of duplicated code to exception_catchpoint's ctor
+ (copied from struct catchpoint's ctor), but it will be eliminated in a
+ following patch.
+
+ Change-Id: I9fbb2927491120e9744a4f5e5cb5e6870ca07009
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Refactor momentary breakpoints, eliminate set_raw_breakpoint{,_without_location}
+ This commit makes set_momentary_breakpoint allocate the breakpoint
+ type without relying on set_raw_breakpoint, and similarly,
+ momentary_breakpoint_from_master not rely on
+ set_raw_breakpoint_without_location. This will let us convert
+ init_raw_breakpoint to a ctor in a following patch.
+
+ The comment about set_raw_breakpoint being used in gdbtk sources is
+ stale. gdbtk no longer uses it.
+
+ Change-Id: Ibbf77731e4b22e18ccebc1b5799bbec0aff28c8a
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Refactor set_internal_breakpoint / internal_breakpoint ctor
+ This moves initialization of internal_breakpoint's breakpoint fields
+ to internal_breakpoint's ctor, and stops using
+ new_breakpoint_from_type for internal_breakpoint breakpoints.
+
+ Change-Id: I898ed0565f47cb00e4429f1c6446e6f9a385a78d
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Convert init_ada_exception_catchpoint to a ctor
+ Currently, init_ada_exception_catchpoint is defined in breakpoint.c, I
+ presume so it can call the static describe_other_breakpoints function.
+ I think this is a dependency inversion.
+ init_ada_exception_catchpoint, being code specific to Ada catchpoints,
+ should be in ada-lang.c, and describe_other_breakpoints, a core
+ function, should be exported.
+
+ And then, we can convert init_ada_exception_catchpoint to an
+ ada_catchpoint ctor.
+
+ Change-Id: I07695572dabc5a75d3d3740fd9b95db1529406a1
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Make ada_catchpoint_location's owner ctor parameter be ada_catchpoint
+ This commit changes ada_catchpoint_location's ctor from:
+
+ ada_catchpoint_location (breakpoint *owner)
+
+ to:
+
+ ada_catchpoint_location (ada_catchpoint *owner)
+
+ just to make the code better document intention.
+
+ To do this, we need to move the ada_catchpoint_location type's
+ definition to after ada_catchpoint is defined, otherwise the compiler
+ doesn't know that ada_catchpoint is convertible to struct breakpoint.
+
+ Change-Id: Id908b2e38bde30b262381e00c5637adb9bf0129d
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ init_breakpoint_sal -> base_breakpoint::base_breakpoint
+ This converts init_breakpoint_sal to a base_breakpoint constructor.
+
+ It removes a use of init_raw_breakpoint.
+
+ To avoid manually adding a bunch of parameters to
+ new_breakpoint_from_type, and manually passing them down to the
+ constructors of a number of different base_breakpoint subclasses, make
+ new_breakpoint_from_type a variable template function.
+
+ Change-Id: I4cc24133ac4c292f547289ec782fc78e5bbe2510
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Remove "internal" parameter from a couple functions
+ None of init_breakpoint_sal, create_breakpoint_sal, and
+ strace_marker_create_breakpoints_sal make use of their "internal"
+ parameter, so remove it.
+
+ Change-Id: I943f3bb44717ade7a7b7547edf8f3ff3c37da435
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ More breakpoint_ops parameter elimination
+ Remove breakpoint_ops parameters from a few functions that don't need
+ it.
+
+ Change-Id: Ifcf5e1cc688184acbf5e19b8ea60138ebe63cf28
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Make a few functions work with base_breakpoint instead of breakpoint
+ This makes tracepoints inherit from base_breakpoint, since their
+ locations are code locations. If we do that, then we can eliminate
+ tracepoint::re_set and tracepoint::decode_location, as they are doing
+ the same as the base_breakpoint implementations.
+
+ With this, all breakpoint types created by new_breakpoint_from_type
+ are code breakpoints, i.e., base_breakpoint subclasses, and thus we
+ can make it return a base_breakpoint pointer.
+
+ Finally, init_breakpoint_sal can take a base_breakpoint pointer as
+ "self" pointer too. This will let us convert this function to a
+ base_breakpoint ctor in a following patch.
+
+ Change-Id: I3a4073ff1a4c865f525588095c18dc42b744cb54
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ ranged_breakpoint: move initialization to ctor
+ Move initialization of ranged_breakpoint's fields to its ctor.
+
+ Change-Id: If7b842861f3cc6a429ea329d45598b5852283ba3
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ ranged_breakpoint: use install_breakpoint
+ This commit replaces a chunk of code in break_range_command by an
+ equivalent call to install_breakpoint.
+
+ Change-Id: I31c06cabd36f5be91740aab029265f678aa78e35
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ ranged_breakpoint: don't use init_raw_breakpoint
+ ranged_breakpoint's ctor already sets the breakpoint's type to
+ bp_hardware_breakpoint.
+
+ Since this is a "regular" breakpoint, b->pspace should remain NULL.
+
+ Thus, the only thing init_raw_breakpoint is needed for, is to add the
+ breakpoint's location. Do that directly.
+
+ Change-Id: I1505de94c3919881c2b300437e2c0da9b05f76bd
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ Make structs breakpoint/base_breakpoint/catchpoint be abstract
+ You should never instanciate these types directly.
+
+ Change-Id: I8086c74c415eadbd44924bb0ef20f34b5b97ee6f
+
+2022-05-20 Pedro Alves <pedro@palves.net>
+
+ add_location_to_breakpoint -> breakpoint::add_location
+ Make add_location_to_breakpoint be a method of struct breakpoint.
+
+ A patch later in the series will move this to base_breakpoint, but for
+ now, it needs to be here.
+
+ Change-Id: I5bdc2ec1a7c2d66f26f51bf6f6adc8384a90b129
+
+2022-05-20 Carl Love <cel@us.ibm.com>
+
+ PowerPC: Make test gdb.arch/powerpc-power10.exp Endian independent.
+ The .quad statement stores the 64-bit hex value in Endian order. When used
+ to store a 64-bit prefix instructions on Big Endian (BE) systems, the .quad
+ statement stores the 32-bit suffix followed by the 32-bit prefix rather
+ than the expected order of prefix word followed by the suffix word. GDB
+ fetches 32-bits at a time when disassembling instructions. The disassembly
+ on BE gets messed up since GDB fetches the suffix first and interprets it
+ as a word instruction not a prefixed instruction. When gdb fetches the
+ prefix part of the instruction, following the initial suffix word, gdb
+ associates the prefix word incorrectly with the following 32-bits as the
+ suffix for the instruction when in fact it is the following instruction.
+
+ For example on BE we have two prefixed instructions stored using the
+ .quad statement as follows:
+
+ addr word GDB action
+ ---------------------------------------------
+ 1 suffix inst A <- GDB interprets as a word instruction
+ 2 prefix inst A <- GDB uses this prefix with
+
+ 3 suffix inst B <- this suffix rather than the suffix at addr 1.
+ 4 prefix inst B
+
+ This patch changes the .quad statement into two .longs to explicitly store
+ the prefix followed by the suffix of the instruction.
+
+ The patch rearranges the instructions to put all of the word instructions
+ together followed by the prefix instructions for clarity.
+
+ The patch has been tested on Power 10 and Power 7 BE and LE to verify
+ the change works as expected.
+
+2022-05-20 Tom Tromey <tromey@adacore.com>
+
+ Remove obsolete text from documentation
+ The documentation says that -enable-pretty-printing is experimental in
+ 7.0 and may change -- that's long enough ago that I think we can say
+ that this text is no longer correct or useful.
+
+2022-05-20 Nick Clifton <nickc@redhat.com>
+
+ Stop readekf and objdump from aggressively following links.
+ * dwarf.c (dwarf_select_sections_by_names): Return zero if no
+ sections were selected.
+ (dwarf_select_sections_by_letters): Likewise.
+ * dwarf.h: (dwarf_select_sections_by_names): Update prototype.
+ (dwarf_select_sections_by_letters): Update prototype.
+ * objdump.c (might_need_separate_debug_info): New function.
+ (dump_bfd): Call new function before attempting to load separate
+ debug info files.
+ (main): Do not enable dwarf section dumping for -WK or -WN.
+ * readelf.c (parse_args): Do not enable dwarf section dumping for
+ -wK or -wN.
+ (might_need_separate_debug_info): New function.
+ (process_object): Call new function before attempting to load
+ separate debug info files.
+ * testsuite/binutils-all/debuginfo.exp: Expect -WE and -wE
+ debuginfod tests to pass.
+ * testsuite/binutils-all/objdump.Wk: Add extra regexps.
+ * testsuite/binutils-all/readelf.k: Add extra regexps.
+
+2022-05-20 Jia-Wei Chen <jiawei@iscas.ac.cn>
+
+ RISC-V: Update zfinx implement with zicsr.
+ Update zfinx implement with zicsr, fix missing fcsr use by zfinx.
+ add zicsr imply by zfinx.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c: New imply.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/csr-insns-pseudo-zfinx.d: New test.
+
+ opcodes/ChangeLog:
+
+ * riscv-opc.c: Update insn class.
+
+2022-05-20 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Remove RV128-only fmv instructions
+ As fmv.x.q and fmv.q.x instructions are RV128-only (not RV64-only),
+ it should be removed until RV128 support for GNU Binutils is required
+ again.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/fmv.x.q-rv64-fail.d: New failure test.
+ * testsuite/gas/riscv/fmv.x.q-rv64-fail.l: Likewise.
+ * testsuite/gas/riscv/fmv.x.q-rv64-fail.s: Likewise.
+
+ include/ChangeLog:
+
+ * opcode/riscv-opc.h (MATCH_FMV_X_Q, MASK_FMV_X_Q,
+ MATCH_FMV_Q_X, MASK_FMV_Q_X): Remove RV128-only instructions.
+
+ opcodes/ChangeLog:
+
+ * riscv-opc.c (riscv_opcodes): Remove RV128-only instructions.
+
+2022-05-20 Aditya Vidyadhar Kamath <ADITYA.VIDYADHAR.KAMATH@ibm.com>
+
+ Fix non-pointer type compilation error in aix-thread.c
+ In aix-thread.c we use ms->value_address () to get the symbol address.
+ This triggers the following compiler error...
+
+ base operand of '->' has non-pointer type 'bound_minimal_symbol'
+
+ ... because ms is not a pointer.
+
+ This commit fixes this error by using ms.value_address () instead.
+
+2022-05-20 Steinar H. Gunderson <sesse@google.com>
+
+ add a trie to map quickly from address range to compilation unit
+ When using perf to profile large binaries, _bfd_dwarf2_find_nearest_line()
+ becomes a hotspot, as perf wants to get line number information
+ (for inline-detection purposes) for each and every sample. In Chromium
+ in particular (the content_shell binary), this entails going through
+ 475k address ranges, which takes a long time when done repeatedly.
+
+ Add a radix-256 trie over the address space to quickly map address to
+ compilation unit spaces; for content_shell, which is 1.6 GB when some
+ (but not full) debug information turned is on, we go from 6 ms to
+ 0.006 ms (6 µs) for each lookup from address to compilation unit, a 1000x
+ speedup.
+
+ There is a modest RAM increase of 180 MB in this binary (the existing
+ linked list over ranges uses about 10 MB, and the entire perf job uses
+ between 2–3 GB for a medium-size profile); for smaller binaries with few
+ ranges, there should be hardly any extra RAM usage at all.
+
+2022-05-20 Alan Modra <amodra@gmail.com>
+
+ Tidy warn-execstack handling
+ Make ld and bfd values consistent by swapping values 0 and 2 in
+ link_info.warn_execstack. This has the benefit of making the value an
+ "extended" boolean, with 0 meaning no warning, 1 meaning warn, other
+ values a conditional warning.
+
+ Yes, this patch introduces fails on arm/aarch64. Not a problem with
+ this patch but an arm/aarch64 before_parse problem.
+
+ bfd/
+ * elflink.c (bfd_elf_size_dynamic_sections): Adjust
+ warn_execstack test.
+ include/
+ * bfdlink.h (warn_execstack): Swap 0 and 2 meaning.
+ ld/
+ * configure.ac (DEFAULT_LD_WARN_EXECSTACK): Use values of 0,
+ 1, 2 consistent with link_info.warn_execstack.
+ * ld.texi: Typo fixes.
+ * lexsup.c (parse_args): Adjust setting of link_info.warn_execstack.
+ (elf_static_list_options): Adjust help message conditions.
+ * configure: Regenerate.
+
+2022-05-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-19 Srinath Parvathaneni <srinath.parvathaneni@arm.com>
+
+ arm: Fix system register fpcxt_ns and fpcxt_s naming convention.
+ The current assembler accepts system registers FPCXTNS and FPCXTS for Armv8.1-M
+ Mainline Instructions VSTR, VLDR, VMRS and VMSR.
+ Assembler should be also allowing FPCXT_NS, fpcxt_ns, fpcxtns, FPCXT_S, fpcxt_s
+ and fpcxts. This patch fixes the issue.
+
+2022-05-19 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: use @value{GDBP} in 'info pretty-printer' example
+ Update the 'info pretty-printer' example in the manual to make use of
+ @value{GDBP} instead of hard-coding '(gdb)'.
+
+2022-05-19 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: make use of group/end group in 'info pretty-printers' example
+ The 'info pretty-printers' example is pretty long and consists of many
+ commands and their output.
+
+ Currently, when the pdf manual is generated this example spans a
+ page-break, with the page-break falling part way through some example
+ output from GDB.
+
+ This commit breaks up the example using @group .... @end group, within
+ each group is a single GDB command and all its output.
+
+ Now, when the pdf manual is created, the page-break is placed after
+ the output of one GDB command, and before the subsequent command, this
+ looks much nicer.
+
+2022-05-19 Nikolaos Chatzikonstantinou <nchatz314@gmail.com>
+
+ gdb/doc: fix inconsistent info pretty-printer example
+ The example for 'info pretty-printer' in the manual passes an
+ object-regexp in some cases, but presents output as though no
+ object-regexp was passed.
+
+ This commit fixes the two mistakes, in one case, fixing the output to
+ filter based on object-regexp, and in the other, to remove the
+ object-regexp from the command and leave all the output.
+
+2022-05-19 Nick Clifton <nickc@redhat.com>
+
+ Fix potentially uninitialised variables in the Windows tools
+
+2022-05-19 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: Support displaced stepping on LoongArch
+ When execute the following command on LoongArch:
+
+ make check-gdb TESTS="gdb.base/async-shell.exp"
+
+ we can see the following message in gdb/testsuite/gdb.sum:
+
+ UNSUPPORTED: gdb.base/async-shell.exp: displaced stepping
+
+ modify support_displaced_stepping to support displaced stepping
+ on LoongArch.
+
+ With this patch:
+
+ PASS: gdb.base/async-shell.exp: run &
+ PASS: gdb.base/async-shell.exp: shell echo foo
+ PASS: gdb.base/async-shell.exp: interrupt
+ PASS: gdb.base/async-shell.exp: process stopped
+
+ I did the following tests that use support_displaced_stepping
+ with this patch on LoongArch, there is no failed testcases.
+
+ loongson@linux:~/gdb.git$ grep -r support_displaced_stepping gdb/testsuite/gdb.*
+ gdb/testsuite/gdb.arch/disp-step-insn-reloc.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.base/step-over-no-symbols.exp: if { $displaced != "off" && ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.base/moribund-step.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.base/async-shell.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.base/inferior-died.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.base/step-over-syscall.exp: if {$displaced == "on" && ![support_displaced_stepping]} {
+ gdb/testsuite/gdb.mi/mi-watch-nonstop.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.mi/mi-ns-stale-regcache.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.mi/mi-nonstop.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.mi/mi-nsmoribund.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.mi/mi-nsintrall.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.mi/mi-nsthrexec.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.mi/mi-nonstop-exit.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.multi/watchpoint-multi.exp:if [support_displaced_stepping] {
+ gdb/testsuite/gdb.python/py-evthreads.exp:if { ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.threads/step-over-lands-on-breakpoint.exp: if { $displaced != "off" && ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.threads/interrupt-while-step-over.exp: if { ${displaced-stepping} != "off" && ![support_displaced_stepping] } {
+ gdb/testsuite/gdb.threads/step-over-trips-on-watchpoint.exp: if { $displaced != "off" && ![support_displaced_stepping] } {
+
+2022-05-19 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: fix path_join crash with -std=c++17 and -D_GLIBCXX_DEBUG
+ When building GDB with -std=c++17 and -D_GLIBCXX_DEBUG=1, I get:
+
+ $ ./gdb -nx --data-directory=data-directory -q -ex "maint selftest path_join"
+ /usr/include/c++/11.2.0/string_view:233: constexpr const value_type& std::basic_string_view<_CharT, _Traits>::operator[](std::basic_string_view<_CharT, _Traits>::size_type) const [with _CharT = char; _Traits = std::char_traits<char>; std::basic_string_view<_CharT, _Traits>::const_reference = const char&; std::basic_string_view<_CharT, _Traits>::size_type = long unsigned int]: Assertion '__pos < this->_M_len' failed.
+
+ The problem is that we're passing an empty string_view to
+ IS_ABSOLUTE_PATH. IS_ABSOLUTE_PATH accesses [0] on that string_view,
+ which is out-of-bounds.
+
+ The reason this is not seen with -std less than c++17 is that our local
+ copy of string_view (used with C++ < 17) does not have the assert in
+ operator[], as that wouldn't work in a constexpr method:
+
+ https://gitlab.com/gnutools/binutils-gdb/-/blob/5890af36e5112bcbb8d7555e63570f68466e6944/gdbsupport/gdb_string_view.h#L180
+
+ IS_ABSOLUTE_PATH is normally used with null-terminated string. It's
+ fine to pass an empty null-terminated string to IS_ABSOLUTE_PATH,
+ because index 0 in such a string is valid. But not with an empty
+ string_view.
+
+ Fix that by avoiding the "call" to IS_ABSOLUTE_PATH if the string_view
+ is empty.
+
+ Change-Id: Idf4df961b63f513b3389235e93814c02b89ea32e
+
+2022-05-19 Jan Beulich <jbeulich@suse.com>
+
+ Arm64: force emission of ILP32-dependent relocs
+ Like the placeholder types added in 04dfe7aa5217 ("Arm64: follow-on to
+ PR gas/27217 fix"), these are also placeholders which are subsequently
+ resolved (albeit later, hence this being a separate issue). As for the
+ resolved types 1 is returned, these pseudo-relocs should also have 1
+ returned to force retaining of the [eventual] relocations. This is also
+ spelled out individually for each of them in md_apply_fix().
+
+2022-05-19 Jan Beulich <jbeulich@suse.com>
+
+ COFF: use hash for string table also when copying / stripping
+ Otherwise the string table may grow and hence e.g. change a final binary
+ (observed with PE/COFF ones) even if really there's no change. Doing so
+ in fact reduces the overall amount of code, and in particular the number
+ of places which need to remain in sync.
+
+ Afaics there's no real equivalent to the "traditional_format" field used
+ when linking, so hashing is always enabled when copying / stripping.
+
+2022-05-19 Jan Beulich <jbeulich@suse.com>
+
+ COFF/PE: keep linker version during objcopy / strip
+ Neither of the tools is really a linker, so whatever was originally
+ recorded should be retained rather than being overwritten by these
+ tools' versions.
+
+ COFF/PE: don't leave zero timestamp after objcopy / strip
+ Fill the timestamp field suitably for _bfd_XXi_only_swap_filehdr_out().
+ Instead of re-arranging the present if(), fold this logic with that of
+ copying the optional header.
+
+2022-05-19 Jan Beulich <jbeulich@suse.com>
+
+ COFF: make objcopy / strip honor --keep-file-symbols
+ So far this option had no effect when used together with e.g.
+ --strip-debug. Set BSF_FILE on these symbols to change that.
+
+ While altering this also join two adjacent blocks of case labeled
+ statements with identical code.
+
+2022-05-19 Jan Beulich <jbeulich@suse.com>
+
+ don't over-align file positions of PE executable sections
+ When a sufficiently small alignment was specified via --file-alignment,
+ individual section alignment shouldn't affect placement within the file.
+ This involves first of all clearing D_PAGED for images when section and
+ file alignment together don't permit paging of the image. The involved
+ comparison against COFF_PAGE_SIZE in turn helped point out (through a
+ compiler warning) that 'page_size' should be of unsigned type (as in
+ particular FileAlignment is). This yet in turn pointed out a dubious
+ error condition (which is being deleted).
+
+ For the D_PAGED case I think the enforced file alignment may still be
+ too high, but I'm wary of changing that logic without knowing of
+ possible corner cases.
+
+ Furthermore file positions in PE should be independent of the alignment
+ recorded in section headers anyway. Otherwise there are e.g. anomalies
+ following commit 6f8f6017a0c4 ("PR27567, Linking PE files adds alignment
+ section flags to executables") in that linking would use information a
+ subsequent processing step (e.g. stripping) wouldn't have available
+ anymore, and hence a binary could change in that 2nd step for no actual
+ reason. (Similarly stripping a binary linked with a linker pre-dating
+ that commit would change the binary again when stripping it a 2nd time.)
+
+2022-05-19 Yvan Roux <yvan.roux@foss.st.com>
+
+ _bfd_real_fopen should not use ccs parameter on Windows
+ PR 25713
+ * bfdio.c (_bfd_real_fopen): Delete ccs string.
+
+2022-05-19 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Fix canonical extension order (K and J)
+ This commit fixes canonical extension order to follow the RISC-V ISA
+ Manual draft-20210402-1271737 or later.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_recognized_prefixed_ext): Fix "K" extension
+ prefix to be placed before "J".
+
+2022-05-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-18 John Baldwin <jhb@FreeBSD.org>
+
+ Use aarch64_features to describe register features in target descriptions.
+ Replace the sve bool member of aarch64_features with a vq member that
+ holds the vector quotient. It is zero if SVE is not present.
+
+ Add std::hash<> specialization and operator== so that aarch64_features
+ can be used as a key with std::unordered_map<>.
+
+ Change the various functions that create or lookup aarch64 target
+ descriptions to accept a const aarch64_features object rather than a
+ growing number of arguments.
+
+ Replace the multi-dimension tdesc_aarch64_list arrays used to cache
+ target descriptions with unordered_maps indexed by aarch64_feature.
+
+2022-05-18 Jan Beulich <jbeulich@suse.com>
+
+ Arm64: follow-on to PR gas/27217 fix
+ PR gas/27217
+
+ Prior to trying to address PR gas/28888 I noticed anomalies in how
+ certain insns would / wouldn't be affected in similar ways.
+
+ Commit eac4eb8ecb26 ("Fix a problem assembling AArch64 sources when a
+ relocation is generated against a symbol that has a defined value") had
+ two copy-and-paste mistakes, passing the wrong type to
+ aarch64_force_reloc().
+
+ It further failed to add placeholder relocation types to that function's
+ block of case labels leading to a return of 1. While not of interest for
+ aarch64_force_relocation() (these placeholders are resolved right in
+ parse_operands()), calls to aarch64_force_reloc() happen before that
+ resolution would take place.
+
+2022-05-18 Nick Clifton <nickc@redhat.com>
+
+ Fix compile time warning building gold with Clang-14.
+ * int_encoding.cc (get_length_as_unsigned_LEB_128): Remove
+ current_length variable.
+
+2022-05-18 Victor Do Nascimento <victor.donascimento@arm.com>
+
+ oops - forgot changelog entry for the previous delta.
+
+ arm: Add unwind support for mixed register lists
+ * config/tc-arm.c (parse_reg_list): Add handling of mixed register
+ types.
+ (reg_names): Enumerate pseudoregister according to mapped physical
+ register number.
+ (s_arm_unwind_save_pseudo): Modify function signature.
+ (s_arm_unwind_save_core): Likewise.
+ (s_arm_unwind_save_mixed): New function.
+ (s_arm_unwind_save): Generate register list mask to pass to nested
+ functions.
+ * testsuite/gas/arm/unwind-pacbti-m.s: Expand test for mixed
+ register type lists.
+ * testsuite/gas/arm/unwind-pacbti-m.d: Likewise.
+ * testsuite/gas/arm/unwind-pacbti-m-readelf.d: Likewise.
+
+2022-05-18 Carl Love <cel@us.ibm.com>
+
+ PowerPC: bp-permanent.exp, kill-after-signal fix
+ Fix changes that didn't make it into commit:
+ dd9cd55e990bcc9f8448cac38d242d53974b3604.
+
+ Fix missing -wrap on gdb_test_multiple in gdb.base/kill-after-signal.exp
+ that is causing regression test on x86_64-linux with taskset -c 0.
+
+2022-05-18 Yichao Yu <yyc1992@gmail.com>
+
+ [AArch64] Return the regnum for PC (32) on aarch64
+ This will allow the unwind info to explicitly specify a different value
+ for the return address from the link register.
+ Such usage, although uncommon, is valid and useful for signal frames.
+ It is also supported by aadwarf64 from ARM (Note 9 in [1]).
+
+ Ref https://sourceware.org/pipermail/gdb/2022-May/050091.html
+
+ [1] https://github.com/ARM-software/abi-aa/blob/2022Q1/aadwarf64/aadwarf64.rst#dwarf-register-names
+
+2022-05-18 Jan Beulich <jbeulich@suse.com>
+
+ x86: shrink op_riprel
+ It is only ever initialized from a boolean, so it as well as related
+ variables' types can simply be bool and there's no masking to 32 bits
+ needed in set_op().
+
+2022-05-18 Nick Clifton <nickc@redhat.com>
+
+ Add a --no-weak option to nm.
+ PR 29135
+ * nm.c (non_weak): New variable.
+ (filter_symbols): When non-weak is true, ignore weak symbols.
+ (long_options): Add --no-weak.
+ (usage): Mention --no-weak.
+ (main): Handle -W/--no-weak.
+ * doc/binutils.texi: Document new feature.
+ * NEWS: Mention the new feature.
+ * testsuite/binutils-all/nm.exp: Add test of new feature.
+ * testsuite/binutils-all/no-weak.s: New test source file.
+
+2022-05-18 Pedro Alves <pedro@palves.net>
+
+ Support -prompt and -lbl in gdb_test
+ This teaches gdb_test to forward the -prompt and -lbl options to
+ gdb_test_multiple.
+
+ The option parsing is done with parse_args.
+
+ As a cleanup, instead of using llength and lindex to get at the
+ positional arguments, use lassign, and check whether the corresponding
+ variable is empty.
+
+ Convert gdb.base/ui-redirect.exp and gdb.xml/tdesc-reload.exp to use
+ gdb_test -prompt/-lbl instead of gdb_test_multiple as examples.
+
+ Change-Id: I243e1296d32c05a421ccef30b63d43a89eaeb4a0
+
+2022-05-18 Luis Machado <luis.machado@arm.com>
+
+ Remove unused DWARF PAUTH registers
+ The AARCH64_DWARF_PAUTH_DMASK and AARCH64_DWARF_PAUTH_CMASK DWARF registers
+ never made their way into the aadwarf64. The following patch removes these
+ constants and their use.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26295
+
+2022-05-18 Luis Machado <luis.machado@arm.com>
+
+ Rename PAUTH_RA_STATE to RA_SIGN_STATE
+ The aadwarf64 [1] names this register RA_SIGN_STATE, so update the code to use
+ the same name.
+
+ [1] https://github.com/ARM-software/abi-aa/blob/main/aadwarf64/aadwarf64.rst
+
+2022-05-18 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Simplify unknown lang testing in gdb.base/parse_number.exp
+ Move testing of language unknown out of the $supported_archs loop in
+ gdb.base/parse_number.exp. This reduces total amount of tests from 18466 to
+ 17744.
+
+ Tested on x86_64-linux.
+
+2022-05-18 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use hex_for_lang in gdb.base/parse_number.exp
+ In gdb.base/parse_number.exp, add a new proc hex_for_lang that formats a hex
+ number appropriately for a given language.
+
+ Tested on x86_64-linux.
+
+2022-05-18 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Add gdb/syscalls/update-linux-from-src.sh
+ Add a new script gdb/syscalls/update-linux-from-src.sh, that can be used to
+ generate *-linux.xml.in files from linux kernel sources, like so:
+ ...
+ $ ./update-linux-from-src.sh ~/upstream/linux-stable.git
+ Skipping aarch64-linux.xml.in, no syscall.tbl
+ Generating amd64-linux.xml.in
+ Skipping arm-linux.xml.in, use arm-linux.py instead
+ Skipping bfin-linux.xml.in, no longer supported
+ Generating i386-linux.xml.in
+ Generating mips-n32-linux.xml.in
+ Generating mips-n64-linux.xml.in
+ Generating mips-o32-linux.xml.in
+ Generating ppc64-linux.xml.in
+ Generating ppc-linux.xml.in
+ Generating s390-linux.xml.in
+ Generating s390x-linux.xml.in
+ Generating sparc64-linux.xml.in
+ Generating sparc-linux.xml.in
+ ...
+
+ Update *-linux.xml.in and *-linux.xml using linux kernel tag v5.18-rc6.
+
+2022-05-18 Tamar Christina <tamar.christina@arm.com>
+
+ AArch64: Enable FP16 by default for Armv9-A.
+ In Armv9-A SVE is mandatory, and for SVE FP16 is mandatory. This fixes a disconnect
+ between GCC and binutils where GCC has FP16 on by default and gas doesn't.
+
+ include/ChangeLog:
+
+ 2022-05-16 Tamar Christina <tamar.christina@arm.com>
+
+ * opcode/aarch64.h (AARCH64_ARCH_V9_FEATURES): Add AARCH64_FEATURE_F16.
+
+2022-05-18 Jan Beulich <jbeulich@suse.com>
+
+ gas: avoid octal numbers being accepted when processing .linefile
+ Compilers would put decimal numbers there, so I think we should treat
+ finding octal numbers the same as finding bignums - ignore them as
+ actually being comments of some very specific form.
+
+2022-05-18 Jan Beulich <jbeulich@suse.com>
+
+ gas: avoid bignum related errors when processing .linefile
+ Any construct which to the scrubber looks like a C preprocessor
+ line/file "directive" is converted to .linefile, but the amount of
+ checking the scrubber does is minimal (albeit it does let through only
+ decimal digits for the line part of the contruct). Since the scrubber
+ conversion is further tied to # being a line comment character, anything
+ which upon closer inspection turns out not to be a line/file "directive"
+ is supposed to be treated as a comment, i.e. ignored. Therefore we
+ cannot use get_absolute_expression(), as this may raise errors. Open-
+ code the function instead, treating everything not resulting in
+ O_constant as a comment as well.
+
+ Furthermore also bounds-check the parsed value. This bounds check tries
+ to avoid implementation defined behavior (which may be the raising of an
+ implementation defined signal), but for now makes the assumption that
+ int has less than 64 bits. The way bfd_signed_vma (which is what offsetT
+ aliases) is defined in bfd.h for the BFD64 case I cannot really see a
+ clean way of avoiding this assumption. Omitting the #ifdef, otoh, would
+ risk "condition is always false" warnings by compilers.
+
+ Convert get_linefile_number() to return bool at this occasion as well.
+
+2022-05-18 Jan Beulich <jbeulich@suse.com>
+
+ gas: fold do_repeat{,_with_expander}()
+ do_repeat_with_expander() already deals with the "no expander" case
+ quite fine, so there's really little point having two functions. What it
+ lacks compared with do_repeat() is a call to sb_build(), which can
+ simply be moved (and the then redundant sb_new() be avoided). Along with
+ this moving also flip if the main if()'s condition such that the "no
+ expander" case is handled first.
+
+ gas: don't ignore .linefile inside false conditionals
+ When assembling code previously pre-processed by a C compiler, long
+ enough comments may have been collapsed into "# <line> <file>"
+ constructs. If we skip these, line numbers (and possibly even file
+ names) will be off / wrong in both diagnostics and debug info.
+
+ gas: simplify ignore_input()
+ First of all convert to switch(), in preparation of adding another
+ directive here which may not be ignored. While doing so drop dead code:
+ A string the first two characters of which do not match "if" also wont
+ match "ifdef" or "ifndef".
+
+ gas: tweak .irp and alike file/line handling for M68K/MRI
+ In commit 2ee1792bec22 ("gas: further adjust file/line handling for .irp
+ and alike") I neglected the need to omit the leading . in M68K/MRI mode.
+
+2022-05-18 Xi Ruoyao <xry111@mengyan1223.wang>
+
+ gold: don't invoke IA32 syscall in x86_64 assembly testcase
+ pr17704a_test.s is a x86_64 assembly file, but it invokes IA32 exit
+ syscall with "int 0x80". This causes a segfault on kernels with
+ CONFIG_IA32_EMULATION disabled.
+
+ gold/
+
+ * testsuite/pr17704a_test.s (_start): Invoke x86_64 exit syscall
+ instead of its IA32 counterpart.
+
+2022-05-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-17 Nikolaos Chatzikonstantinou <nchatz314@gmail.com>
+
+ Fix typo in info page
+
+2022-05-17 Pedro Alves <pedro@palves.net>
+
+ Fix gdb.python/py-connection.exp with remote targets
+ After the patch to make gdb_test's question non-optional when
+ specified, gdb.python/py-connection.exp started failing like so:
+
+ $ make check TESTS="gdb.python/py-connection.exp" RUNTESTFLAGS="--target_board=native-gdbserver"
+ (gdb) PASS: gdb.python/py-connection.exp: info connections while the connection is still around
+ disconnect^M
+ Ending remote debugging.^M
+ (gdb) FAIL: gdb.python/py-connection.exp: kill the inferior
+
+ The problem is that "disconnect" when debugging with the native target
+ asks the user whether to kill the program, while with remote targets,
+ it doesn't.
+
+ Fix it by explicitly killing before disconnecting.
+
+ Tested with --target_board unix, native-gdbserver, and native-extended-gdbserver.
+
+ Change-Id: Icd85015c76deb84b71894715d43853c1087eba0b
+
+2022-05-17 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ gdb, btrace: Throw an error for empty recordings when replaying starts.
+ This makes record_btrace_start_replaying() more consistent, as it already
+ errors out e.g. on a recording with only gaps.
+
+2022-05-17 Pedro Alves <pedro@palves.net>
+
+ Make gdb_test's question non-optional if specified
+ gdb_test supports handling scenarios where GDB asks a question before
+ finishing handling some command. The full prototype of gdb_test is:
+
+ # gdb_test COMMAND PATTERN MESSAGE QUESTION RESPONSE
+
+ However, QUESTION is a question that GDB _may_ ask, not one that GDB
+ _must_ ask:
+
+ # QUESTION is a question GDB may ask in response to COMMAND, like
+ # "are you sure?"
+ # RESPONSE is the response to send if QUESTION appears.
+
+ If GDB doesn't raise the question, the test still passes.
+
+ I think that this is a misfeature. If GDB regresses and stops asking
+ a question, the testsuite won't notice. So I think that if a QUESTION
+ is specified, gdb_test should ensure it comes out of GDB.
+
+ Running the testsuite exposed a number of tests that pass
+ QUESTION/RESPONSE to GDB, but no question comes out. The previous
+ commits fixed them all, so this commit changes gdb_test's behavior.
+
+ A related issue is that gdb_test doesn't enforce that if you specify
+ QUESTION, that you also specify RESPONSE. I.e., you should pass 1, 2,
+ 3, or 5 arguments to gdb_test, but never 4, or more than 5. Making
+ gdb_test detect bogus arguments actually regressed some testcases,
+ also all fixed in previous commits.
+
+ Change-Id: I47c39c9034e6a6841129312037a5ca4c5811f0db
+
+2022-05-17 Pedro Alves <pedro@palves.net>
+
+ gdb.base/skip.exp: Don't abuse gdb_test's question support
+ gdb.base/skip.exp abuses gdb_test's support for answering a GDB
+ question to do this:
+
+ # With gcc 9.2.0 we jump once back to main before entering foo here.
+ # If that happens try to step a second time.
+ gdb_test "step" "foo \\(\\) at.*" "step 3" \
+ "main \\(\\) at .*\r\n$gdb_prompt " "step"
+
+ After a patch later in this series, gdb_test will FAIL if GDB does NOT
+ issue the question, so this test would start failing on older GCCs.
+
+ Switch to using gdb_test_multiple instead. There are three spots in
+ the file that have the same pattern, and they're actually in a
+ sequence of commands that is repeated those 3 times. Factor all that
+ out to a procedure.
+
+ I don't have gcc 9.2 handy, but I do have gcc 6.5, and that one is
+ affected as well, so update the comment.
+
+ Change-Id: If0a7e3cdf5191b4eec95ce0c8845c3a4d801c39e
+
+2022-05-17 Pedro Alves <pedro@palves.net>
+
+ Avoid having to unload file in gdb.server/connect-with-no-symbol-file.exp
+ gdb.server/connect-with-no-symbol-file.exp's connect_no_symbol_file
+ does:
+
+ gdb_test "file" ".*" "discard symbol table" \
+ {Discard symbol table from `.*'\? \(y or n\) } "y"
+
+ A following patch will make gdb_test expect the question out of GDB if
+ one is passed down as argument to gdb_test. With that, this test
+ starts failing. This is because connect_no_symbol_file is called in a
+ loop, and the first time around, there's a loaded file, so "file" asks
+ the "Discard symbol table ... ?" question, while in the following
+ iterations there's no file, so there's no question.
+
+ Fix this by not loading a file into GDB in the first place.
+
+ Change-Id: I810c036b57842c4c5b47faf340466b0d446d1abc
+
+2022-05-17 Pedro Alves <pedro@palves.net>
+
+ Fix bogus gdb_test invocations
+ A following patch will make gdb_test error out if bogus arguments are
+ passed, which exposed bugs in a few testcases:
+
+ - gdb.python/py-parameter.exp, passing a spurious "1" as extra
+ parameter, resulting in:
+
+ ERROR: Unexpected arguments: {set test-file-param bar.txt} {The name of the file has been changed to bar.txt} {set new file parameter} 1
+
+ - gdb.python/py-xmethods.exp, a missing test message, resulting in
+ the next gdb_test being interpreted as message, question and
+ response! With the enforcing patch, this was caught with:
+
+ ERROR: Unexpected arguments: {p g.mul<char>('a')} {From Python G<>::mul.*} gdb_test {p g_ptr->mul<char>('a')} {From Python G<>::mul.*} {after: g_ptr->mul<char>('a')}
+
+ - gdb.base/pointers.exp, missing a quote.
+
+ Change-Id: I66f2db4412025a64121db7347dfb0b48240d46d4
+
+2022-05-17 Pedro Alves <pedro@palves.net>
+
+ gdb.base/scope.exp: Remove bogus gdb_test questions
+ This test is abusing the QUESTION/RESPONSE feature to send an
+ alternative command to GDB if the first command fails. Like so:
+
+ gdb_test "print 'scope0.c'::filelocal" \
+ "\\\$$decimal = 1" "print 'scope0.c'::filelocal at main" \
+ "No symbol \"scope0.c\" in current context.*" \
+ "print '$srcdir/$subdir/scope0.c'::filelocal"
+
+ So if 'scope0.c' doesn't work, we try again with
+ '$srcdir/$subdir/scope0.c'. I strongly suspect this is really an
+ obsolete test. I think that if '$srcdir/$subdir/scope0.c' works, then
+ 'scope0.c' should have worked too, thus I'd think that if we pass due
+ to the question path, then it's a bug. So just remove the question
+ part passed to gdb_test.
+
+ Change-Id: I2acc99285f1d519284051b49693b5441fbdfe3cd
+
+2022-05-17 Pedro Alves <pedro@palves.net>
+
+ Remove gdb_test questions that GDB doesn't ask
+ Change-Id: Ib2616dc883e9dc9ee100f6c86d83a921a0113c16
+
+2022-05-17 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Added half-precision floating-point v1.0 instructions.
+ bfd/
+ * elfxx-riscv.c (riscv_implicit_subsets): Added implicit f
+ and zicsr for zfh.
+ (riscv_supported_std_z_ext): Added default v1.0 version for zfh.
+ (riscv_multi_subset_supports): Handle INSN_CLASS_ZFH,
+ INSN_CLASS_D_AND_ZFH and INSN_CLASS_Q_AND_ZFH.
+ gas/
+ * config/tc-riscv.c (FLT_CHARS): Added "hH".
+ (macro): Expand Pseudo M_FLH and M_FSH.
+ (riscv_pseudo_table): Added .float16 directive.
+ * testsuite/gas/riscv/float16-be.d: New testcase for .float16.
+ * testsuite/gas/riscv/float16-le.d: Likewise.
+ * testsuite/gas/riscv/float16.s: Likewise.
+ * testsuite/gas/riscv/fp-zfh-insns.d: New testcase for zfh.
+ * testsuite/gas/riscv/fp-zfh-insns.s: Likewise.
+ include/
+ * opcode/riscv-opc.h: Added MASK and MATCH encodings for zfh.
+ * opcode/riscv.h: Added INSN_CLASS and pseudo macros for zfh.
+ opcodes/
+ * riscv-opc.c (riscv_opcodes): Added zfh instructions.
+
+2022-05-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-16 Ilya Leoshkevich <iii@linux.ibm.com>
+
+ IBM zSystems: Fix left-shifting negative PCRel32 values (PR gas/29152)
+ s390_insert_operand ()'s val, min and max are encoded PCRel32 values
+ and need to be left-shifted by 1 before being shown to the user.
+ Left-shifting negative values is undefined behavior in C, but the
+ current code does not try to prevent it, causing UBSan to complain.
+
+ Fix by casting the values to their unsigned equivalents before
+ shifting.
+
+2022-05-16 Pedro Alves <pedro@palves.net>
+
+ Reindent gdbsupport/event-loop.cc:handle_file_event
+ The handle_file_event function has a few unnecessary {} lexical
+ blocks, presumably because they were originally if blocks, and the
+ conditions were removed, or something along those lines.
+
+ Remove the unnecessary blocks, and reindent.
+
+ Change-Id: Iaecbe5c9f4940a80b81dbbc42e51ce506f6aafb2
+
+2022-05-16 Pedro Alves <pedro@palves.net>
+
+ gdbsupport/event-loop.cc: simplify !HAVE_POLL paths
+ gdbsupport/event-loop.cc throughout handles the case of use_poll being
+ true on a system where HAVE_POLL is not defined, by calling
+ internal_error if that situation ever happens.
+
+ Simplify this by moving the "use_poll" global itself under HAVE_POLL,
+ so that it's way more unlikely to ever end up in such a situation.
+ Then, move the code that checks the value of use_poll under HAVE_POLL
+ too, and remove the internal_error calls. Like, from:
+
+ if (use_poll)
+ {
+ #ifdef HAVE_POLL
+ // poll code
+ #else
+ internal_error (....);
+ #endif /* HAVE_POLL */
+ }
+ else
+ {
+ // select code
+ }
+
+ to
+
+ #ifdef HAVE_POLL
+ if (use_poll)
+ {
+ // poll code
+ }
+ else
+ #endif /* HAVE_POLL */
+ {
+ // select code
+ }
+
+ While at it, make use_poll be a bool. The current code is using
+ unsigned char most probably to save space, but I don't think it really
+ matters here.
+
+ Co-Authored-By: Youling Tang <tangyouling@loongson.cn>
+ Change-Id: I0dd74fdd4d393ccd057906df4cd75e8e83c1cdb4
+
+2022-05-16 Eli Zaretskii <eliz@gnu.org>
+
+ gdb: Fix typo in last change in gdb.texinfo
+
+ gdb: Document the 'metadata' styling in GDB displays.
+ The 'metadata' styling was never documented in the GDB manual.
+ This fills that gap.
+
+2022-05-16 Tom Tromey <tromey@adacore.com>
+
+ Fix Ada exception regression on Windows
+ The breakpoint c++-ification series introduced another bug in Ada --
+ it caused "catch exception" and related commands to fail on Windows.
+ The problem is that the re_set method calls the wrong superclass
+ method, so the breakpoint doesn't get correctly re-set when the
+ runtime offsets change. This patch fixes the problem.
+
+2022-05-16 Bruno Larsen <blarsen@redhat.com>
+
+ gdb/testsuite: fix "continue outside of loop" TCL errors
+ Many test cases had a few lines in the beginning that look like:
+
+ if { condition } {
+ continue
+ }
+
+ Where conditions varied, but were mostly in the form of ![runto_main] or
+ [skip_*_tests], making it quite clear that this code block was supposed
+ to finish the test if it entered the code block. This generates TCL
+ errors, as most of these tests are not inside loops. All cases on which
+ this was an obvious mistake are changed in this patch.
+
+2022-05-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-13 Tom Tromey <tromey@adacore.com>
+
+ Remove unused field cooked_index::m_start
+ cooked_index::m_start is unused and can be removed. I think this was
+ a leftover from a previous approach in the index finalization code,
+ and then when rewriting it I forgot to remove it.
+
+ Tested by rebuilding.
+
+2022-05-13 Tom Tromey <tromey@adacore.com>
+
+ Implement pid_to_exec_file for Windows in gdbserver
+ I noticed that gdbserver did not implement pid_to_exec_file for
+ Windows, while gdb did implement it. This patch moves the code to
+ nat/windows-nat.c, so that it can be shared. This makes the gdbserver
+ implementation trivial.
+
+ Remove windows_process_info::id
+ I noticed that windows_process_info::id is only used by gdbserver, and
+ not really necessary. This patch removes it.
+
+ Constify target_pid_to_exec_file
+ This changes target_pid_to_exec_file and target_ops::pid_to_exec_file
+ to return a "const char *". I couldn't build many of these targets,
+ but did examine the code by hand -- also, as this only affects the
+ return type, it's normally pretty safe. This brings gdb and gdbserver
+ a bit closer, and allows for the removal of a const_cast as well.
+
+ Put corefile-run.core into test subdirectory
+ I noticed that corefile-run.core ends up in the 'runtest' directory.
+ It's better, when at all possible, for test files to end up in the
+ test's designated subdirectory. This patch makes this change.
+
+2022-05-13 Tom Tromey <tromey@adacore.com>
+
+ Do not double-read minimal symbols for PE COFF
+ This changes coffread.c to avoid re-reading minimal symbols when
+ possible. This only works when there are no COFF symbols to be read,
+ but at least for my mingw builds of gdb, this seems to be the case.
+
+ Tested using the AdaCore internal test suite on Windows. I also did
+ some local builds to ensure that no warnings crept in.
+
+2022-05-13 Pedro Alves <pedro@palves.net>
+
+ Fix "gdb --write" with core files
+ If you load a core file into GDB with the --write option, or "set
+ write on" (equivalent), and then poke memory expecting it to patch the
+ core binary, you'll notice something odd -- the write seems to
+ succeed, but in reality, it doesn't. The value you wrote doesn't
+ persist. Like so:
+
+ $ gdb -q --write -c testsuite/outputs/gdb.base/patch/gcore.test
+ [New LWP 615986]
+ Core was generated by `/home/pedro/gdb/build/gdb/testsuite/outputs/gdb.base/patch/patch'.
+ Program terminated with signal SIGTRAP, Trace/breakpoint trap.
+ #0 0x0000555555555131 in ?? ()
+ (gdb) p *(unsigned char *)0x0000555555555131 = 1
+ $1 = 1 '\001'
+ (gdb) p *(unsigned char *)0x0000555555555131
+ $2 = 185 '\271'
+ (gdb)
+
+ Diffing hexdumps of before/after patching, reveals that a "0x1" was
+ actually written somewhere in the file. The problem is that the "0x1"
+ was written at the wrong offset in the file...
+
+ That happens because _bfd_elf_set_section_contents does this to seek
+ to the section's offset:
+
+ pos = hdr->sh_offset + offset;
+ if (bfd_seek (abfd, pos, SEEK_SET) != 0
+ || bfd_bwrite (location, count, abfd) != count)
+ return false;
+
+ ... and 'hdr->sh_offset' is zero, so we seek to just OFFSET, which is
+ incorrect. The reason 'hdr->sh_offset' is zero is that
+ kernel-generated core files normally don't even have a section header
+ table (gdb-generated ones do, but that's more an accident than a
+ feature), and indeed elf_core_file_p doesn't even try to read sections
+ at all:
+
+ /* Core files are simply standard ELF formatted files that partition
+ the file using the execution view of the file (program header table)
+ rather than the linking view. In fact, there is no section header
+ table in a core file.
+
+ The process status information (including the contents of the general
+ register set) and the floating point register set are stored in a
+ segment of type PT_NOTE. We handcraft a couple of extra bfd sections
+ that allow standard bfd access to the general registers (.reg) and the
+ floating point registers (.reg2). */
+
+ bfd_cleanup
+ elf_core_file_p (bfd *abfd)
+
+ Changing _bfd_elf_set_section_contents from:
+
+ pos = hdr->sh_offset + offset;
+
+ to:
+
+ pos = section->filepos + offset;
+
+ fixes it. If we do that however, the tail end of
+ _bfd_elf_set_section_contents ends up as a copy of
+ _bfd_generic_set_section_contents, so just call the latter, thus
+ eliminating some duplicate code.
+
+ New GDB testcase included, which exercises both patching an executable
+ and patching a core file. Patching an executable already works
+ without this fix, because in that case BFD reads in the sections
+ table. Still, we had no testcase for that yet. In fact, we have no
+ "set write on" testcases at all, this is the first one.
+
+ Tested on x86-64 GNU/Linux, gdb, ld, binutils, and gas.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18227
+ Change-Id: I0f49f58b48aabab2e269f2959b8fd8a7fe36fdce
+
+2022-05-13 Alan Modra <amodra@gmail.com>
+
+ Import libiberty from gcc
+
+ sim: remove use of PTR
+ PTR will soon disappear from ansidecl.h. Remove uses in sim. Where
+ a PTR cast is used in assignment or function args to a void* I've
+ simply removed the unnecessary (in C) cast rather than replacing with
+ (void *).
+
+2022-05-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-13 Alan Modra <amodra@gmail.com>
+
+ gdb: remove use of PTR
+ PTR will disappear from ansidecl.h and libiberty on the next import
+ from gcc. Remove current uses in gdb.
+
+2022-05-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.cp/break-f-std-string.cc with older gcc
+ When running test-case gdb.cp/break-f-std-string.exp on openSUSE Leap 15.3
+ with system gcc 7.5.0, I run into:
+ ...
+ (gdb) whatis /r std::string^M
+ No symbol "string" in namespace "std".^M
+ (gdb) FAIL: gdb.cp/break-f-std-string.exp: _GLIBCXX_USE_CXX11_ABI=1: \
+ whatis /r std::string
+ ...
+ The same for gcc 8.2.1, but it passes with gcc 9.3.1.
+
+ At source level (as we can observe in the .ii file with -save-temps) we have
+ indeed:
+ ...
+ namespace std {
+ namespace __cxx11 {
+ typedef basic_string<char> string;
+ }
+ }
+ ...
+ while with gcc 9.3.1, we have instead:
+ ...
+ namespace std {
+ namespace __cxx11 {
+ ...
+ }
+ typedef basic_string<char> string;
+ }
+ ...
+ due to gcc commit 33b43b0d8cd ("Define std::string and related typedefs
+ outside __cxx11 namespace").
+
+ Fix this by adding the missing typedef for gcc version 5 (the first version to
+ have the dual abi) to 8 (the last version missing aforementioned gcc commit).
+
+ Tested on x86_64-linux, with:
+ - system gcc 7.5.0
+ - gcc 4.8.5, 8.2.1, 9.3.1, 10.3.0, 11.2.1
+ - clang 8.0.1, 12.0.1
+
+2022-05-12 Alan Modra <amodra@gmail.com>
+
+ Fix an illegal memory access when creating DLLs.
+ PR 29006
+ * pe-dll.c (dll_name): Delete, replacing with..
+ (dll_filename): ..this, moved earlier in file.
+ (generate_edata): Delete parameters. Don't set up dll_name here..
+ (pe_process_import_defs): ..instead set up dll_filename and
+ dll_symname here before returning.
+ (dll_symname_len): Delete write-only variable.
+ (pe_dll_generate_implib): Don't set up dll_symname here.
+
+2022-05-12 Mark Wielaard <mark@klomp.org>
+
+ gdb: Workaround stringop-overread warning in debuginfod-support.c on powerpc64
+ Just like on s390x with g++ 11.2.1, ppc64le with g++ 11.3.1 produces a
+ spurious warning for stringop-overread in debuginfod_is_enabled
+ for url_view. Also suppress it on powerpc64.
+
+ gdb/ChangeLog:
+
+ * debuginfod-support.c (debuginfod_is_enabled): Use
+ DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD on powerpc64.
+
+2022-05-12 Luis Machado <luis.machado@arm.com>
+
+ Make gdb.ada/float-bits.exp more generic
+ There are assumptions in the test about the long double format
+ being used. While the results are OK for i387 128-bit long doubles, it
+ is not correct for IEEE quad 128-bit long doubles.
+
+ Also, depending on the target (64-bit/32-bit), long doubles may not
+ be available at all. And it may be the case that the compiler for a 64-bit
+ target doesn't support 128-bit long doubles, but GDB might still support it
+ internally.
+
+ Lastly, not every long double format has invalid values. Some formats
+ consider all values as valid floating point numbers.
+
+ These divergences cause the following FAIL's on aarch64/arm:
+
+ FAIL: gdb.ada/float-bits.exp: print val_long_double
+ FAIL: gdb.ada/float-bits.exp: print val_long_double after assignment
+
+ With the above in mind, extend the test a little so it behaves well on
+ different architectures and so it works with different long double
+ formats.
+
+ Main changes:
+
+ - Use long double values appropriate for the long double format.
+ - Test long double assignment to compiler-generated long
+ double variables.
+ - Test long double assignment to GDB internal variables.
+
+ Tested on x86_64 (16 PASS), i686 (16 PASS), aarch64 (12 PASS) and arm (9 PASS).
+
+2022-05-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Improve gdb/syscalls/update-linux.sh
+ Fix two things in update-linux.sh:
+ - remove use of unnecessary tmp file
+ - inline gen-header.py into update-linux.sh
+
+ Tested on x86_64-linux.
+
+2022-05-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/dw2-out-of-range-end-of-seq.exp on aarch64
+ On aarch64-linux, with test-case gdb.dwarf2/dw2-out-of-range-end-of-seq.exp I
+ run into:
+ ...
+ (gdb) run ^M
+ Starting program: dw2-out-of-range-end-of-seq ^M
+ ^M
+ Program received signal SIGILL, Illegal instruction.^M
+ main () at src/gdb/testsuite/gdb.dwarf2/main.c:1^M
+ 1 /* This testcase is part of GDB, the GNU debugger.^M
+ (gdb) FAIL: gdb.dwarf2/dw2-out-of-range-end-of-seq.exp: runto: run to main
+ ...
+
+ There are two problems here:
+ - the test-case contains a hardcoded "DW_LNS_advance_pc 1" which causes the
+ breakpoint pointing in the middle of an insn
+ - the FAIL triggers on aarch64-linux, but not on x86_64-linux, because the
+ test-case uses 'main_label' as the address of the first and only valid entry
+ in the line table, and:
+ - on aarch64-linux, there's no prologue, so main_label and main coincide,
+ while
+ - on x86_64-linux, there's a prologue, so main_label is different from main.
+
+ Fix these problems by:
+ - eliminating the use of "DW_LNS_advance_pc 1", and using
+ "DW_LNE_set_address $main_end" instead, and
+ - eliminating the use of main_label, using "DW_LNE_set_address $main_start"
+ instead.
+
+ Tested on both x86_64-linux and aarch64-linux.
+
+2022-05-12 Alan Modra <amodra@gmail.com>
+
+ cgen: increase buffer for hash_insn_list
+ As was done for hash_insn_array in commit d3d1cc7b13b4.
+
+ * cgen-dis.c (hash_insn_list): Increase size of buf. Assert
+ size is large enough.
+
+2022-05-12 Alan Modra <amodra@gmail.com>
+
+ PR29142, segv in ar with empty archive and libdeps specified
+ PR 29142
+ * ar.c (main): Properly handle libdeps for zero file_count.
+
+2022-05-12 Alan Modra <amodra@gmail.com>
+
+ Re: IBM zSystems: Accept (. - 0x100000000) PCRel32 operands
+ The new test failed on s390-linux due to bfd_sprintf_vma trimming
+ output to 32 bits for 32-bit targets. The test was faulty anyway,
+ expecting zero as the min end of the range is plainly wrong, but
+ that's what you get if you cast min to int.
+
+ * config/tc-s390.c (s390_insert_operand): Print range error using
+ PRId64.
+ * testsuite/gas/s390/zarch-z900-err.l: Correct expected output.
+
+2022-05-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/catch-syscall.exp with --with-expat=no
+ When doing a gdb build with --with-expat=no, I run into:
+ ...
+ (gdb) PASS: gdb.base/catch-syscall.exp: determine pipe syscall: \
+ continue to breakpoint: before pipe call
+ catch syscall pipe^M
+ Unknown syscall name 'pipe'.^M
+ (gdb) PASS: gdb.base/catch-syscall.exp: determine pipe syscall: \
+ catch syscall pipe
+ catch syscall pipe2^M
+ Unknown syscall name 'pipe2'.^M
+ (gdb) PASS: gdb.base/catch-syscall.exp: determine pipe syscall: \
+ catch syscall pipe2
+ continue^M
+ Continuing.^M
+ [Detaching after vfork from child process 18538]^M
+ [Inferior 1 (process 18537) exited normally]^M
+ (gdb) FAIL: gdb.base/catch-syscall.exp: determine pipe syscall: continue
+ ...
+
+ This is a regression since recent commit 5463a15c18b ("[gdb/testsuite] Handle
+ pipe2 syscall in gdb.base/catch-syscall.exp").
+
+ Fix this by using pipe/pipe2 syscall numbers instead.
+
+ Tested on x86_64-linux.
+
+2022-05-11 Nick Clifton <nickc@redhat.com>
+
+ nm: use -U as an alias for --defines-only, in line with llvm-nm
+
+2022-05-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/catch-syscall.exp without --enable-targets
+ When doing a gdb build without --enable-targets, I run into:
+ ...
+ (gdb) UNSUPPORTED: gdb.base/catch-syscall.exp: multiple targets: \
+ s390:31-bit vs s390:64-bit: set architecture s390:64-bit
+ delete breakpoints^M
+ (gdb) info breakpoints^M
+ No breakpoints or watchpoints.^M
+ (gdb) break -qualified main^M
+ No symbol table is loaded. Use the "file" command.^M
+ Make breakpoint pending on future shared library load? (y or [n]) n^M
+ (gdb) FAIL: gdb.base/catch-syscall.exp: gdb_breakpoint: set breakpoint at main
+ ...
+
+ The problem is that due to recent commit e21d8399303 ("[gdb/testsuite] Remove
+ target limits in gdb.base/catch-syscall.exp") "clean_restart $binfile" no
+ longer is called at the end of test_catch_syscall_multi_arch.
+
+ Fix this by moving "clean_restart $binfile" back to
+ test_catch_syscall_multi_arch.
+
+ Tested on x86_64-linux.
+
+2022-05-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/maint.exp on powerpc64le
+ On powerpc64le-linux, I ran into:
+ ...
+ FAIL: gdb.base/maint.exp: maint print objfiles: symtabs
+ ...
+
+ The problem is that:
+ - the "Cooked index in use" line occurs twice in the gdb output:
+ - once for exec maint, and
+ - once for "Object file system-supplied DSO".
+ - the matching of the second "Cooked index in use" also consumes
+ the "Symtabs:" string, and consequently the corresponding
+ clause does not trigger and $symtabs remains 0.
+
+ Fix this by limiting the output of the command to the exec.
+
+ Tested on x86_64-linux and powerpcle-linux.
+
+2022-05-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Update syscalls/{ppc64,ppc}-linux.xml
+ Regenerate syscalls/{ppc64,ppc}-linux.xml on a system with 5.14 kernel.
+
+2022-05-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Remove target limits in gdb.base/catch-syscall.exp
+ In test-case gdb.base/catch-syscall.exp, proc test_catch_syscall_multi_arch we
+ test for supported targets using istarget, like so:
+ ...
+ if { [istarget "i*86-*-*"] || [istarget "x86_64-*-*"] } {
+ ...
+ } elseif { [istarget "powerpc-*-linux*"] \
+ || [istarget "powerpc64*-linux*"] } {
+ ...
+ ...
+ but the tests excercised there can all be executed if gdb is configured with
+ --enable-targets=all.
+
+ Rewrite the proc to iterate over all cases, and check if the test is supported
+ by trying "set arch $arch1" and "set arch $arch2".
+
+ Tested on x86_64-linux, with:
+ - a gdb build with --enable-targets=all, and
+ - a gdb build build with my usual --enable-targets setting (too long to
+ include here) which means the sparc vs sparc:v9 case is unsupported.
+
+2022-05-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/record] Handle statx system call
+ When running test-case gdb.reverse/fstatat-reverse.exp with target board
+ unix/-m32 on openSUSE Tumbleweed, I run into:
+ ...
+ (gdb) PASS: gdb.reverse/fstatat-reverse.exp: set breakpoint at marker2
+ continue^M
+ Continuing.^M
+ Process record and replay target doesn't support syscall number 383^M
+ Process record: failed to record execution log.^M
+ ^M
+ Program stopped.^M
+ 0xf7fc5555 in __kernel_vsyscall ()^M
+ (gdb) FAIL: gdb.reverse/fstatat-reverse.exp: continue to breakpoint: marker2
+ ...
+
+ The problems is that while with native we're trying to record these syscalls
+ (showing strace output):
+ ...
+ openat(AT_FDCWD, "/", O_RDONLY|O_PATH) = 3
+ newfstatat(3, ".", {st_mode=S_IFDIR|0755, st_size=146, ...}, 0) = 0
+ ...
+ with unix/-m32 we have instead:
+ ...
+ openat(AT_FDCWD, "/", O_RDONLY|O_PATH) = 3
+ statx(3, ".", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT, STATX_BASIC_STATS, \
+ {stx_mask=STATX_ALL|STATX_MNT_ID, stx_attributes=STATX_ATTR_MOUNT_ROOT, \
+ stx_mode=S_IFDIR|0755, stx_size=146, ...}) = 0
+ ...
+ and statx is not supported.
+
+ Fix this by adding support for recording syscall statx.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28461
+
+2022-05-11 Alan Modra <amodra@gmail.com>
+
+ opcodes cgen: remove use of PTR
+ Note that opcodes is regenerated with cgen commit d1dd5fcc38e reverted,
+ due to failure of bpf to compile with that patch applied.
+
+ .../opcodes/bpf-opc.c:57:11: error: conversion from ‘long unsigned int’ to ‘unsigned int’ changes value from ‘18446744073709486335’ to ‘4294902015’ [-Werror=overflow]
+ 57 | 64, 64, 0xffffffffffff00ff, { { F (F_IMM32) }, { F (F_OFFSET16) }, { F (F_SRCLE) }, { F (F_OP_CODE) }, { F (F_DSTLE) }, { F (F_OP_SRC) }, { F (F_OP_CLASS) }, { 0 } }
+ plus other similar errors.
+
+ cpu/
+ * mep.opc (print_tpreg, print_spreg): Delete unnecessary
+ forward declarations. Replace PTR with void *.
+ * mt.opc (print_dollarhex, print_pcrel): Delete forward decls.
+ opcodes/
+ * bpf-desc.c, * bpf-dis.c, * cris-desc.c,
+ * epiphany-desc.c, * epiphany-dis.c,
+ * fr30-desc.c, * fr30-dis.c, * frv-desc.c, * frv-dis.c,
+ * ip2k-desc.c, * ip2k-dis.c, * iq2000-desc.c, * iq2000-dis.c,
+ * lm32-desc.c, * lm32-dis.c, * m32c-desc.c, * m32c-dis.c,
+ * m32r-desc.c, * m32r-dis.c, * mep-desc.c, * mep-dis.c,
+ * mt-desc.c, * mt-dis.c, * or1k-desc.c, * or1k-dis.c,
+ * xc16x-desc.c, * xc16x-dis.c,
+ * xstormy16-desc.c, * xstormy16-dis.c: Regenerate.
+
+2022-05-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-10 Youling Tang <tangyouling@loongson.cn>
+
+ gdb: mips: Fix large-frame.exp test case failure
+ $ objdump -d outputs/gdb.base/large-frame/large-frame-O2
+ 0000000120000b20 <func>:
+ 120000b20: 67bdbff0 daddiu sp,sp,-16400
+ 120000b24: ffbc4000 sd gp,16384(sp)
+ 120000b28: 3c1c0002 lui gp,0x2
+ 120000b2c: 679c8210 daddiu gp,gp,-32240
+ 120000b30: 0399e02d daddu gp,gp,t9
+ 120000b34: df998058 ld t9,-32680(gp)
+ 120000b38: ffbf4008 sd ra,16392(sp)
+ 120000b3c: 0411ffd8 bal 120000aa0 <blah>
+ ...
+
+ The disassembly of the above func function shows that we may use
+ instructions such as daddiu/daddu, so add "daddiu $gp,$gp,n",
+ "daddu $gp,$gp,$t9" and "daddu $gp,$t9,$gp" to the mips32_scan_prologue
+ function to fix the large-frame.exp test case.
+
+ Before applying the patch:
+
+ backtrace
+ #0 blah (a=0xfffffee220) at .../gdb/testsuite/gdb.base/large-frame-1.c:24
+ #1 0x0000000120000b44 in func ()
+ Backtrace stopped: frame did not save the PC
+ (gdb) FAIL: gdb.base/large-frame.exp: optimize=-O2: backtrace
+
+ # of expected passes 5
+ # of unexpected failures 1
+
+ After applying the patch:
+
+ # of expected passes 6
+
+2022-05-10 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Use GDB style to check readbuf and writebuf
+ The GDB style is to write 'if (readbuf != nullptr)', and the same for
+ writebuf.
+
+2022-05-10 Tom Tromey <tromey@adacore.com>
+
+ Fix --disable-threading build
+ PR build/29110 points out that GDB fails to build on mingw when the
+ "win32" thread model is in use. It turns out that the Fedora cross
+ tools using the "posix" thread model, which somehow manages to support
+ std::future, whereas the win32 model does not.
+
+ While looking into this, I found that the configuring with
+ --disable-threading will also cause a build failure.
+
+ This patch fixes this build by introducing a compatibility wrapper for
+ std::future.
+
+ I am not able to test the win32 thread model build, but I'm going to
+ ask the reporter to try this patch.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29110
+
+2022-05-10 Pedro Alves <pedro@palves.net>
+
+ Fix "b f(std::string)" when current language is C
+ If you try to set a breakpoint at a function such as "b
+ f(std::string)", and the current language is C, the breakpoint fails
+ to be set, like so:
+
+ (gdb) set language c
+ break f(std::string)
+ Function "f(std::string)" not defined.
+ Make breakpoint pending on future shared library load? (y or [n]) n
+ (gdb)
+
+ The problem is that the code in GDB that expands the std::string
+ typedef hits this in c-typeprint.c:
+
+ /* If we have "typedef struct foo {. . .} bar;" do we want to
+ print it as "struct foo" or as "bar"? Pick the latter for
+ C++, because C++ folk tend to expect things like "class5
+ *foo" rather than "struct class5 *foo". We rather
+ arbitrarily choose to make language_minimal work in a C-like
+ way. */
+ if (language == language_c || language == language_minimal)
+ {
+ if (type->code () == TYPE_CODE_UNION)
+ gdb_printf (stream, "union ");
+ else if (type->code () == TYPE_CODE_STRUCT)
+ {
+ if (type->is_declared_class ())
+ gdb_printf (stream, "class ");
+ else
+ gdb_printf (stream, "struct ");
+ }
+ else if (type->code () == TYPE_CODE_ENUM)
+ gdb_printf (stream, "enum ");
+ }
+
+ I.e., std::string is expanded to "class std::..." instead of just
+ "std::...", and then the "f(class std::..." symbol doesn't exist.
+
+ Fix this by making cp-support.c:inspect_type print the expanded
+ typedef type using the language of the symbol whose type we're
+ expanding the typedefs for -- in the example in question, the
+ "std::string" typedef symbol, which is a C++ symbol.
+
+ Use type_print_raw_options as it seems to me that in this scenario we
+ always want raw types, to match the real symbol names.
+
+ Adjust the gdb.cp/break-f-std-string.exp testcase to try setting a
+ breakpoint at "f(std::string)" in both C and C++.
+
+ Change-Id: Ib54fab4cf0fd307bfd55bf1dd5056830096a653b
+
+2022-05-10 Pedro Alves <pedro@palves.net>
+
+ Always pass an explicit language down to c_type_print
+ The next patch will want to do language->print_type(type, ...), to
+ print a type in a given language, avoiding a dependency on the current
+ language. That doesn't work correctly currently, however, because
+ most language implementations of language_defn::print_type call
+ c_print_type without passing down the language. There are two
+ overloads of c_print_type, one that takes a language, and one that
+ does not. The one that does not uses the current language, defeating
+ the point of calling language->print_type()...
+
+ This commit removes the c_print_type overload that does not take a
+ language, and adjusts the codebase throughout to always pass down a
+ language. In most places, there's already an enum language handy.
+ language_defn::print_type implementations naturally pass down
+ this->la_language. In a couple spots, like in ada-typeprint.c and
+ rust-lang.c there's no enum language handy, but the code is written
+ for a specific language, so we just hardcode the language.
+
+ In gnuv3_print_method_ptr, I wasn't sure whether we could hardcode C++
+ here, and we don't have an enum language handy, so I made it use the
+ current language, just like today. Can always be improved later.
+
+ Change-Id: Ib54fab4cf0fd307bfd55bf1dd5056830096a653b
+
+2022-05-10 Pedro Alves <pedro@palves.net>
+
+ Fix "b f(std::string)", always use DMGL_VERBOSE
+ Currently, on any remotely modern GNU/Linux system,
+ gdb.cp/no-dmgl-verbose.exp fails like so:
+
+ break 'f(std::string)'
+ Function "f(std::string)" not defined.
+ (gdb) FAIL: gdb.cp/no-dmgl-verbose.exp: gdb_breakpoint: set breakpoint at 'f(std::string)'
+ break 'f(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
+ Function "f(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)" not defined.
+ (gdb) PASS: gdb.cp/no-dmgl-verbose.exp: DMGL_VERBOSE-demangled f(std::string) is not defined
+
+ This testcase was added back in 2011, here:
+
+ [patch] Remove DMGL_VERBOSE
+ https://sourceware.org/pipermail/gdb-patches/2011-June/083081.html
+
+ Back then, the testcase would pass cleanly. It turns out that the
+ reason it fails today is that the testcase is exercising something in
+ GDB that only makes sense if the program is built for the pre-C++11
+ libstc++ ABI. Back then the C++11 ABI didn't exist yet, but nowadays,
+ you need to compile with -D_GLIBCXX_USE_CXX11_ABI=0 to use the old
+ ABI. See "Dual ABI" in the libstdc++ manual, at
+ <https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html>.
+
+ If we tweak the gdb.cp/no-dmgl-verbose.exp testcase to force the old
+ ABI with -D_GLIBCXX_USE_CXX11_ABI=0, then it passes cleanly.
+
+ So why is it that setting a breakpoint at "f(std::string)" fails with
+ modern ABI, but passes with old ABI?
+
+ This is where libiberty demangler's DMGL_VERBOSE option comes in. The
+ Itanium ABI mangling scheme has a shorthand form for std::string (and
+ some other types). See
+ <https://itanium-cxx-abi.github.io/cxx-abi/abi.html>:
+
+ "In addition, the following catalog of abbreviations of the form "Sx" are used:
+
+ <substitution> ::= St # ::std::
+ <substitution> ::= Sa # ::std::allocator
+ <substitution> ::= Sb # ::std::basic_string
+ <substitution> ::= Ss # ::std::basic_string < char,
+ ::std::char_traits<char>,
+ ::std::allocator<char> >
+ <substitution> ::= Si # ::std::basic_istream<char, std::char_traits<char> >
+ <substitution> ::= So # ::std::basic_ostream<char, std::char_traits<char> >
+ <substitution> ::= Sd # ::std::basic_iostream<char, std::char_traits<char> >
+ "
+
+ When the libiberty demangler encounters such a abbreviation, by
+ default, it expands it to the user-friendly typedef "std::string",
+ "std::iostream", etc.. If OTOH DMGL_VERBOSE is specified, the
+ abbreviation is expanded to the underlying, non-typedefed fullname
+ "std::basic_string<char, std::char_traits<char>, std::allocator<char> >"
+ etc. as documented in the Itanium ABI, and pasted above. You can see
+ the standard abbreviations/substitutions in
+ libiberty/cp-demangle.c:standard_subs.
+
+ Back before Jan's patch in 2011, there were parts of GDB that used
+ DMGL_VERBOSE, and others that did not, leading to mismatches. The
+ solution back then was to stop using DMGL_VERBOSE throughout.
+
+ GDB has code in place to let users set a breakpoint at a function with
+ typedefs in its parameters, like "b f(uint32_t)". Demangled function
+ names as they appear in the symbol tables almost (more on this is in a
+ bit) never have typedefs in them, so when processing "b f(uint32_t)"
+ GDB first replaces "uint32_t" for its underlying type, and then sets a
+ breakpoint on the resulting prototype, in this case "f(unsigned int)".
+
+ Now, if DMGL_VERBOSE is _not_ used, then the demangler demangles the
+ mangled name of a function such as "void f(std::string)" that was
+ mangled using the standard abbreviations mentioned above really as:
+
+ "void f(std::string)".
+
+ For example, the mangled name of "void f(std::string)" if you compile
+ with old pre-C++11 ABI is "_Z1fSs". That uses the abbreviation "Ss",
+ so if you demangle that without DMGL_VERBOSE, you get:
+
+ $ echo "_Z1fSs" | c++filt --no-verbose
+ f(std::string)
+
+ while with DMGL_VERBOSE you'd get:
+
+ $ echo "_Z1fSs" | c++filt
+ f(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)
+
+ If, when the user sets a breakpoint at "f(std::string)", GDB would
+ replace the std::string typedef for its underlying type using the same
+ mechanism I mentioned for the "f(uint32_t)" example above, then GDB
+ would really try to set a breakpoint at "f(std::basic_string<char,
+ std::char_traits<char>, std::allocator<char> >)", and that would fail,
+ as the function symbol GDB knows about for that function, given no
+ DMGL_VERBOSE, is "f(std::string)".
+
+ For this reason, the code that expands typedefs in function parameter
+ names has an exception for std::string (and other standard
+ abbreviation types), such that "std::string" is never
+ typedef-expanded.
+
+ And here lies the problem when you try to do "b f(std::string)" with a
+ program compiled with the C++11 ABI. In that case, std::string
+ expands to a different underlying type, like so:
+
+ f(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
+
+ and this symbol naturally mangles differently, as:
+
+ _Z1fNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
+
+ and then because this doesn't use the shorthand mangling abbreviation
+ for "std::string" anymore, it always demangles as:
+
+ f(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
+
+ Now, when using the C++11 ABI, and you set a breakpoint at
+ "f(std::string)", GDB's typedefs-in-parameters expansion code hits the
+ exception for "std::string" and doesn't expand it, so the breakpoint
+ fails to be inserted, because the symbol that exists is really the
+
+ f(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)
+
+ one, not "f(std::string)".
+
+ So to fix things for C++11 ABI, clearly we need to remove the
+ "std::string" exception from the typedef-in-parameters expansion
+ logic. If we do just that, then "b f(std::string)" starts working
+ with the C++11 ABI.
+
+ However, if we do _just_ that, and nothing else, then we break
+ pre-C++11 ABI...
+
+ The solution is then to in addition switch GDB to always use
+ DMGL_VERBOSE. If we do this, then pre-C++11 ABI symbols works the
+ same as C++11 ABI symbols overall -- the demangler expands the
+ standard abbreviation for "std::string" as "std::basic_string<char,
+ std::char_traits<char>, std::allocator<char> >" and letting GDB expand
+ the "std::string" typedef (etc.) too is no longer a problem.
+
+ To avoid getting in the situation where some parts of GDB use
+ DMGL_VERBOSE and others not, this patch adds wrappers around the
+ demangler's entry points that GDB uses, and makes those force
+ DMGL_VERBOSE.
+
+ The point of the gdb.cp/no-dmgl-verbose.exp testcase was to try to
+ ensure that DMGL_VERBOSE doesn't creep back in:
+
+ gdb_test {break 'f(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'} \
+ {Function ".*" not defined\.} \
+ "DMGL_VERBOSE-demangled f(std::string) is not defined"
+
+ This obviously no longer makes sense to have, since we now depend on
+ DMGL_VERBOSE. So the patch replaces gdb.cp/no-dmgl-verbose.exp with a
+ new gdb.cp/break-f-std-string.exp testcase whose purpose is to make
+ sure that setting a breakpoint at "f(std::string)" works. It
+ exercises both pre-C++11 ABI and C++11 ABI.
+
+ Change-Id: Ib54fab4cf0fd307bfd55bf1dd5056830096a653b
+
+2022-05-10 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: fix testsuite regressions for unix/-m32 board
+ This commit fixes two regressions introduced by
+ 891e4190ba705373eec7b374209478215fff5401.
+
+ Reason for the failures was, that on a 32 bit machine the maximum
+ array length as well as the maximum allocatable memory for arrays
+ (in bytes) both seem to be limited by the maximum value of a 4
+ byte (signed) Fortran integer. This lead to compiler errors/unexpected
+ behavior when compiling/running the test with the -m32 board. This
+ behavior is compiler dependent and can differ for different compiler
+ implementations, but generally, it seemed like a good idea to simply
+ avoid such situations.
+
+ The affected tests check for GDB's overflow behavior when using KIND
+ parameters with GDB implemented Fortran intrinsic functions. If these
+ KIND parameters are too small to fit the actual intrinsic function's
+ result, an overflow is expected. This was done for 1, 2, and 4
+ byte overflows. The last one caused problems, as it tried to allocate
+ arrays of length/byte-size bigger than the 4 byte signed integers which
+ would then be used with the LBOUND/UBOUND/SIZE intrinsics.
+
+ The tests were adapted to only execute the 4 byte overflow tests when
+ running on targets with 64 bit. For this, the compiled tests evaluate the
+ byte size of a C_NULL_PTR via C_SIZEOF, both defined in the ISO_C_BINDING
+ module. The ISO_C_BINDING constant C_NULL_PTR is a Fortran 2003, the
+ C_SIZEOF a Fortran 2008 extension. Both have been implemented in their
+ respective compilers for while (e.g. C_SIZEOF is available since
+ gfortran 4.6). If this byte size evaluates to less than 8 we skip the
+ 4 byte overflow tests in the compiled tests of size.f90 and
+ lbound-ubound.f90. Similarly, in the lbound-ubound.exp testsfile we skip
+ the 4 byte overflow tests if the procedure is_64_target evaluates to false.
+
+ In size.f90, additionally, the to-be-allocated amount of bytes did not
+ fit into 4 byte signed integers for some of the arrays, as it was
+ approximately 4 times the maximum size of a 4 byte signed integer. We
+ adapted the dimensions of the arrays in question as the meaningfulness
+ of the test does not suffer from this.
+
+ With this patch both test run fine with the unix/-m32 board and
+ gcc/gfortran (9.4) as well as the standard board file.
+
+ We also thought about completely removing the affected test from the
+ testsuite. We decided against this as the 32 bit identification comes
+ with Fortran 2008 and removing tests would have decreased coverage.
+
+ A last change that happened with this patch was due to gfortran's and
+ ifx's type resolution when assigning big constants to Fortran Integer*8
+ variables. Before the above changes this happened in a parameter
+ statement. Here, both compilers happily accepted a line like
+
+ integer*8, parameter :: var = 2147483647 + 5.
+
+ After this change the assignment is not done as a parameter
+ anymore, as this triggered compile time overflow errors. Instead,
+ the assignment is done dynamically, depending on the kind of machine one
+ is on. Sadly, just changing this line to
+
+ integer*8 :: var
+ var = 2147483647 + 5
+
+ does not work with ifx (or flang for that matter, they behave similarly
+ here). It will create an integer overflow in the addition as ifx deduces
+ the type the additon is done in as Integer*4. So var will actually
+ contain the value -2147483644 after this. The lines
+
+ integer*8 :: var
+ var = 2147483652
+
+ on the other hand fail to compile with gfortran (9.4.0) as the compiler
+ identifies an Integer overflow here. Finally, to make this work with
+ all three compilers an additional parameter has been introduced
+
+ integer*8, parameter :: helper = 2147483647
+ integer*8 :: var
+ var = helper + 5.
+
+ This works on all 3 compilers as expected.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29053
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29054
+
+2022-05-10 Pedro Alves <pedro@palves.net>
+
+ Move non-dependent gdb::observers::observable::visit_state outside template
+ The other day, while looking at the symbols that end up in a GDB
+ index, I noticed that the gdb::observers::observable::visit_state enum
+ class appears a number of times:
+
+ $ grep VISIT gdb-index-symbol-names.txt
+ gdb::observers::observable<bpstat*, int>::visit_state::NOT_VISITED
+ gdb::observers::observable<bpstat*, int>::visit_state::VISITED
+ gdb::observers::observable<bpstat*, int>::visit_state::VISITING
+ gdb::observers::observable<breakpoint*>::visit_state::NOT_VISITED
+ gdb::observers::observable<breakpoint*>::visit_state::VISITED
+ gdb::observers::observable<breakpoint*>::visit_state::VISITING
+ gdb::observers::observable<char const*, char const*>::visit_state::NOT_VISITED
+ gdb::observers::observable<char const*, char const*>::visit_state::VISITED
+ gdb::observers::observable<char const*, char const*>::visit_state::VISITING
+ gdb::observers::observable<char const*>::visit_state::NOT_VISITED
+ gdb::observers::observable<char const*>::visit_state::VISITED
+ gdb::observers::observable<char const*>::visit_state::VISITING
+ gdb::observers::observable<enum_flags<user_selected_what_flag> >::visit_state::NOT_VISITED
+ gdb::observers::observable<enum_flags<user_selected_what_flag> >::visit_state::VISITED
+ gdb::observers::observable<enum_flags<user_selected_what_flag> >::visit_state::VISITING
+ gdb::observers::observable<frame_info*, int>::visit_state::NOT_VISITED
+ gdb::observers::observable<frame_info*, int>::visit_state::VISITED
+ gdb::observers::observable<frame_info*, int>::visit_state::VISITING
+ gdb::observers::observable<gdbarch*>::visit_state::NOT_VISITED
+ gdb::observers::observable<gdbarch*>::visit_state::VISITED
+ gdb::observers::observable<gdbarch*>::visit_state::VISITING
+ gdb::observers::observable<gdb_signal>::visit_state::NOT_VISITED
+ gdb::observers::observable<gdb_signal>::visit_state::VISITED
+ gdb::observers::observable<gdb_signal>::visit_state::VISITING
+ [... snip ...]
+
+ $ grep VISIT gdb-index-symbol-names.txt | wc -l
+ 72
+
+ enum class visit_state is defined inside the class template
+ observable, but it doesn't have to be, as it does not depend on the
+ template parameters. This commit moves it out, so that only one such
+ type exists. This reduces the size of a -O0 -g3 build for me by
+ around 0.6%, like so:
+
+ $ du -b gdb.before gdb.after
+ 164685280 gdb.before
+ 163707424 gdb.fixed
+
+ and codesize by some 0.5%.
+
+ Change-Id: I405f4ef27b8358fdd22158245b145d849b45658e
+
+2022-05-10 Nick Clifton <nickc@redhat.com>
+
+ Fix compiling binutils/resbin.c with Clang version 14
+
+2022-05-10 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: include percentages in default metrics list
+ gprofng/ChangeLog
+ 2022-05-09 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * src/gprofng.rc: Include percentages in default metrics list.
+
+2022-05-10 Alan Modra <amodra@gmail.com>
+
+ gprof: remove use of PTR
+ * basic_blocks.c: Replace uses of PTR with void * throughout.
+ * cg_arcs.c: Likewise.
+ * cg_print.c: Likewise.
+ * hist.c: Likewise.
+ * source.h: Likewise.
+ * symtab.c: Likewise.
+
+ gas: remove use of PTR
+ * config/obj-evax.c (evax_symbol_new_hook): Don't cast to PTR.
+
+2022-05-10 Alan Modra <amodra@gmail.com>
+
+ opcodes: remove use of PTR
+ The non-cgen parts of opcodes.
+
+ * cr16-dis.c (print_arg): Replace PTR with void *.
+ * crx-dis.c (print_arg): Likewise.
+ * rl78-dis.c (print_insn_rl78_common): Don't use PTR cast.
+ * rx-dis.c (print_insn_rx): Likewise.
+ * visium-dis.c (print_insn_visium): Likewise.
+ * z8k-dis.c (print_insn_z8k): Likewise.
+
+2022-05-10 Alan Modra <amodra@gmail.com>
+
+ bfd: remove use of PTR
+ * coffcode.h (coff_write_object_contents): Don't cast to PTR.
+ * elf32-csky.c (csky_elf_link_hash_traverse): Remove use of PTR
+ and PARAMS.
+ (csky_allocate_dynrelocs): Don't use PTR cast.
+ * elf32-nios2.c (adjust_dynrelocs, allocate_dynrelocs): Replace
+ PTR with void *.
+ * elf32-visium.c (visium_elf_howto_parity_reloc): Likewise.
+ * elfxx-ia64.c (ia64_elf_reloc): Likewise.
+ * plugin.c (bfd_plugin_bfd_print_private_bfd_data): Likewise.
+
+ include: remove use of PTR
+ * hashtab.h (HTAB_EMPTY_ENTRY): Replace PTR with void *.
+ (HTAB_DELETED_ENTRY): Likewise.
+
+2022-05-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-09 Ilya Leoshkevich <iii@linux.ibm.com>
+
+ IBM zSystems: Accept (. - 0x100000000) PCRel32 operands
+ as does not accept instructions like brasl %r0,.-0x100000000, because
+ of two problems with the generic overflow check:
+
+ 1. PCRel32 operands are signed, but are treated as unsigned.
+
+ 2. The allowed range for these operands is [-(1 << 32), (1 << 32) - 1],
+ and not [-(1 << 31), (1 << 31) - 1].
+
+ Fix both by disabling the generic overflow check - it's not needed,
+ because s390_insert_operand () performs its own.
+
+ gas/
+
+ * config/tc-s390.c (md_gather_operands): Set fx_no_overflow.
+ * testsuite/gas/s390/s390.exp: Add zarch-z900-err.
+ * testsuite/gas/s390/esa-z900.d: New test.
+ * testsuite/gas/s390/esa-z900.s: New test.
+ * testsuite/gas/s390/zarch-z900-err.l: New test.
+ * testsuite/gas/s390/zarch-z900-err.s: New test.
+
+2022-05-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: fix occasional failure in gdb.mi/mi-multi-commands.exp
+ In bug PR gdb/29036, another failure was reported for the test
+ gdb.mi/mi-multi-commands.exp. This test sends two commands to GDB as
+ a single write, and then checks that both commands are executed.
+
+ The problem that was encountered here is that the output of the first
+ command, which looks like this:
+
+ ^done,value="\"FIRST COMMAND\""
+
+ Is actually produced in parts, first the '^done' is printed, then the
+ ',value="\"FIRST COMMAND\"" is printed.
+
+ What was happening is that some characters from the second command
+ were being echoed after the '^done' had been printed, but before the
+ value part had been printed. To avoid this issue I've relaxed the
+ pattern that checks for the first command a little. With this fix in
+ place the occasional failure in this test is no longer showing up.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29036
+
+2022-05-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Update syscalls/{amd64,i386}-linux.xml
+ - Add a script syscalls/gen-header.py, based on syscalls/arm-linux.py.
+ - Add a script syscalls/update-linux.sh (alongside update-freebsd.sh and
+ update-netbsd.sh).
+ - Use syscalls/update-linux.sh to update syscalls/{amd64,i386}-linux.xml.in.
+ - Regenerate syscalls/{amd64,i386}-linux.xml using syscalls/Makefile.
+
+ In gdb/syscalls/i386-linux.xml.in, updating has the following notable effect:
+ ...
+ - <syscall name="madvise1" number="220"/>
+ - <syscall name="getdents64" number="221"/>
+ - <syscall name="fcntl64" number="222"/>
+ + <syscall name="getdents64" number="220"/>
+ + <syscall name="fcntl64" number="221"/>
+ ...
+
+ I've verified in ./arch/x86/entry/syscalls/syscall_32.tbl that the numbers are
+ correct.
+
+ Tested on x86_64-linux.
+
+2022-05-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Add gdb/syscalls/Makefile
+ Add a Makefile in gdb/syscalls that can be used to translate
+ gdb/syscalls/*.xml.in into gdb/syscalls/*.xml.
+
+ Calling make reveals that bfin-linux.xml is missing, so add it.
+
+ Tested on x86_64-linux.
+
+2022-05-09 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Implement the return_value gdbarch method
+ When execute the following command on LoongArch:
+
+ make check-gdb TESTS="gdb.base/async.exp"
+
+ there exist the following failed testcases:
+
+ FAIL: gdb.base/async.exp: finish& (timeout)
+ FAIL: gdb.base/async.exp: jump& (timeout)
+ FAIL: gdb.base/async.exp: until& (timeout)
+ FAIL: gdb.base/async.exp: set exec-done-display off (GDB internal error)
+
+ we can see the following messages in gdb/testsuite/gdb.log:
+
+ finish&
+ Run till exit from #0 foo () at /home/loongson/gdb.git/gdb/testsuite/gdb.base/async.c:9
+ (gdb) /home/loongson/gdb.git/gdb/gdbarch.c:2646: internal-error: gdbarch_return_value: Assertion `gdbarch->return_value != NULL' failed.
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+
+ In order to fix the above failed testcases, implement the return_value
+ gdbarch method on LoongArch.
+
+2022-05-09 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: fix for gdb.base/eof-exit.exp test failures
+ This fix relates to PR gdb/29032, this makes the test more stable by
+ ensuring that the Ctrl-D is only sent once the prompt has been
+ displayed. This issue was also discussed on the mailing list here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-April/187670.html
+
+ The problem identified in the bug report is that sometimes the Ctrl-D
+ (that the test sends to GDB) arrives while GDB is processing a
+ command. When this happens the Ctrl-D is handled differently than if
+ the Ctrl-D is sent while GDB is waiting for input at a prompt.
+
+ The original intent of the test was that the Ctrl-D be sent while GDB
+ was waiting at a prompt, and that is the case the occurs most often,
+ but, when the Ctrl-D arrives during command processing, then GDB will
+ ignore the Ctrl-D, and the test will fail.
+
+ This commit ensures the Ctrl-D is always sent while GDB is waiting at
+ a prompt, which makes this test stable.
+
+ But, that still leaves an open question, what should happen when the
+ Ctrl-D arrives while GDB is processing a command? This commit doesn't
+ attempt to answer that question, which is while bug PR gdb/29032 will
+ not be closed once this commit is merged.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29032
+
+2022-05-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Make btrace maintainer entry more clear
+ Do:
+ ...
+ -record btrace <name> <email>
+ +record
+ + btrace <name> <email>
+ ...
+ to clarify that the listed maintainer is only maintainer of the btrace part of
+ record.
+
+2022-05-09 Martin Liska <mliska@suse.cz>
+
+ ansidecl.h: sync from GCC
+ include/ChangeLog:
+
+ * ansidecl.h: Sync from GCC.
+
+2022-05-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Support catch syscall pipe2 for i386
+ With test-case gdb.base/catch-syscall.exp and target board unix/-m32, we run
+ into:
+ ...
+ (gdb) catch syscall pipe2^M
+ Unknown syscall name 'pipe2'.^M
+ (gdb) FAIL: gdb.base/catch-syscall.exp: determine pipe syscall: catch syscall pipe2
+ ...
+
+ Fix this by:
+ - adding a pipe2 entry in gdb/syscalls/i386-linux.xml.in, and
+ - regenerating gdb/syscalls/i386-linux.xml using
+ "xsltproc --output i386-linux.xml apply-defaults.xsl i386-linux.xml.in".
+
+ Tested on x86_64-linux with native and unix/-m32.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29056
+
+2022-05-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle pipe2 syscall in gdb.base/catch-syscall.exp
+ When running test-case gdb.reverse/pipe-reverse.exp on openSUSE Tumbleweed,
+ I run into:
+ ...
+ (gdb) continue^M
+ Continuing.^M
+ ^M
+ Catchpoint 2 (returned from syscall pipe2), in pipe () from /lib64/libc.so.6^M
+ (gdb) FAIL: gdb.base/catch-syscall.exp: without arguments: \
+ syscall pipe has returned
+ ...
+
+ The current glibc on Tumbleweed is 2.35, which contains commit
+ "linux: Implement pipe in terms of __NR_pipe2", and consequently syscall pipe2
+ is used instead of syscall pipe.
+
+ Fix this by detecting whether syscall pipe or pipe2 is used before running the
+ tests.
+
+ Tested on x86_64-linux, specifically on:
+ - openSUSE Tumbleweed (with glibc 2.35), and
+ - openSUSE Leap 15.3 (with glibc 2.31).
+
+ On openSUSE Tumbleweed + target board unix/-m32, this exposes:
+ ...
+ (gdb) catch syscall pipe2^M
+ Unknown syscall name 'pipe2'.^M
+ ...
+ which will be fixed in a folllow-up patch.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29056
+
+2022-05-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Handle pipe2 syscall for amd64
+ When running test-case gdb.reverse/pipe-reverse.exp on openSUSE Tumbleweed,
+ I run into:
+ ...
+ (gdb) continue^M
+ Continuing.^M
+ Process record and replay target doesn't support syscall number 293^M
+ Process record: failed to record execution log.^M
+ ^M
+ Program stopped.^M
+ 0x00007ffff7daabdb in pipe () from /lib64/libc.so.6^M
+ (gdb) FAIL: gdb.reverse/pipe-reverse.exp: continue to breakpoint: marker2
+ ...
+
+ The current glibc on Tumbleweed is 2.35, which contains commit
+ "linux: Implement pipe in terms of __NR_pipe2", and consequently syscall pipe2
+ is used in stead of syscall pipe.
+
+ There is already support added for syscall pipe2 for aarch64 (which only has
+ syscall pipe2, not syscall pipe), so enable the same for amd64, by:
+ - adding amd64_sys_pipe2 in enum amd64_syscall
+ - translating amd64_sys_pipe2 to gdb_sys_pipe2 in amd64_canonicalize_syscall
+
+ Tested on x86_64-linux, specifically on:
+ - openSUSE Tumbleweed (with glibc 2.35), and
+ - openSUSE Leap 15.3 (with glibc 2.31).
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29056
+
+2022-05-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.tui/scroll.exp with read1
+ When running test-case gdb.tui/scroll.exp, I get:
+ ...
+ Box Dump (80 x 8) @ (0, 0):
+ 0 $17 = 16
+ 1 (gdb) p 17
+ 2 $18 = 17
+ 3 (gdb) p 18
+ 4 $19 = 18
+ 5 (gdb) p 19
+ 6 $20 = 19
+ 7 (gdb)
+ PASS: gdb.tui/scroll.exp: check cmd window in flip layout
+ ...
+ but with check-read1 I get instead:
+ ...
+ Box Dump (80 x 8) @ (0, 0):
+ 0 (gdb) 15
+ 1 (gdb) p 16
+ 2 $17 = 16
+ 3 (gdb) p 17
+ 4 $18 = 17
+ 5 (gdb) p 18
+ 6 $19 = 18
+ 7 (gdb) p 19
+ FAIL: gdb.tui/scroll.exp: check cmd window in flip layout
+ ...
+
+ The "p 19" command is handled by Term::command, which sends the command and then
+ does Term::wait_for "^$gdb_prompt [string_to_regexp $cmd]", which:
+ - matches the line with "(gdb) p 19", and
+ - tries to match the following prompt "(gdb) "
+
+ The problem is that scrolling results in reissuing output before the "(gdb) p
+ 19", and the second matching triggers on that. Consequently, wait_for no
+ longer translates gdb output into screen actions, and the screen does not
+ reflect the result of "p 19".
+
+ Fix this by using a new proc wait_for_region_contents, which in contrast to
+ wait_for can handle a multi-line regexp.
+
+ Tested on x86_64-linux with make targets check and check-read1.
+
+2022-05-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.cp/casts.exp with -m32
+ When running test-case gdb.cp/casts.exp with target board unix/-m32, I run
+ into:
+ ...
+ (gdb) print (unsigned long long) &gd == gd_value^M
+ $31 = false^M
+ (gdb) FAIL: gdb.cp/casts.exp: print (unsigned long long) &gd == gd_value
+ ...
+
+ With some additional printing, we can see in more detail why the comparison
+ fails:
+ ...
+ (gdb) print /x &gd^M
+ $31 = 0xffffc5c8^M
+ (gdb) PASS: gdb.cp/casts.exp: print /x &gd
+ print /x (unsigned long long)&gd^M
+ $32 = 0xffffc5c8^M
+ (gdb) PASS: gdb.cp/casts.exp: print /x (unsigned long long)&gd
+ print /x gd_value^M
+ $33 = 0xffffffffffffc5c8^M
+ (gdb) PASS: gdb.cp/casts.exp: print /x gd_value
+ print (unsigned long long) &gd == gd_value^M
+ $34 = false^M
+ (gdb) FAIL: gdb.cp/casts.exp: print (unsigned long long) &gd == gd_value
+ ...
+
+ The gd_value is set by this assignment:
+ ...
+ unsigned long long gd_value = (unsigned long long) &gd;
+ ...
+
+ The problem here is directly casting from a pointer to a non-pointer-sized
+ integer.
+
+ Fix this by adding an intermediate cast to std::uintptr_t.
+
+ Tested on x86_64-linux with native and target board unix/-m32.
+
+2022-05-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle init errors in gdb.mi/user-selected-context-sync.exp
+ In OBS, on aarch64-linux, with a gdb 11.1 based package, I run into:
+ ...
+ (gdb) builtin_spawn -pty^M
+ new-ui mi /dev/pts/5^M
+ New UI allocated^M
+ (gdb) =thread-group-added,id="i1"^M
+ (gdb) ERROR: MI channel failed
+ warning: Error detected on fd 11^M
+ thread 1.1^M
+ Unknown thread 1.1.^M
+ (gdb) UNRESOLVED: gdb.mi/user-selected-context-sync.exp: mode=non-stop: \
+ test_cli_inferior: reset selection to thread 1.1
+ ...
+ with many more UNRESOLVED following.
+
+ The ERROR is a common problem, filed as
+ https://sourceware.org/bugzilla/show_bug.cgi?id=28561 .
+
+ But the many UNRESOLVEDs are due to not checking whether the setup as done in
+ the test_setup function succeeds or not.
+
+ Fix this by:
+ - making test_setup return an error upon failure
+ - handling test_setup error at the call site
+ - adding a "setup done" pass/fail to be turned into an unresolved
+ in case of error during setup.
+
+ Tested on x86_64-linux, by manually triggering the error in
+ mi_gdb_start_separate_mi_tty.
+
+2022-05-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.ada/catch_ex_std.exp with remote-gdbserver-on-localhost
+ When running test-case gdb.ada/catch_ex_std.exp on target board
+ remote-gdbserver-on-localhost, I run into:
+ ...
+ (gdb) continue^M
+ Continuing.^M
+ [Inferior 1 (process 15656) exited with code 0177]^M
+ (gdb) FAIL: gdb.ada/catch_ex_std.exp: runto: run to main
+ Remote debugging from host ::1, port 49780^M
+ /home/vries/foo: error while loading shared libraries: libsome_package.so: \
+ cannot open shared object file: No such file or directory^M
+ ...
+
+ Fix this by adding the usual shared-library + remote-target helper
+ "gdb_load_shlib $sofile".
+
+ Tested on x86_64-linux with native and target board
+ remote-gdbserver-on-localhost.
+
+2022-05-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.threads/fork-plus-threads.exp with check-readmore
+ When running test-case gdb.threads/fork-plus-threads.exp with check-readmore,
+ I run into:
+ ...
+ [Inferior 11 (process 7029) exited normally]^M
+ [Inferior 1 (process 6956) exited normally]^M
+ FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: \
+ inferior 1 exited (timeout)
+ ...
+
+ The problem is that the regexp consuming the "Inferior exited normally"
+ messages:
+ - consumes more than one of those messages at a time, but
+ - counts only one of those messages.
+
+ Fix this by adopting a line-by-line approach, which deals with those messages
+ one at a time.
+
+ Tested on x86_64-linux with native, check-read1 and check-readmore.
+
+2022-05-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-07 Tom Tromey <tom@tromey.com>
+
+ Fix "catch syscall"
+ Simon pointed out that some recent patches of mine broke "catch
+ syscall". Apparently I forgot to finish the conversion of this code
+ when removing init_catchpoint. This patch completes the conversion
+ and fixes the bug.
+
+2022-05-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/readline: fix extra 'quit' message problem
+ After these two commits:
+
+ commit 4fb7bc4b147fd30b781ea2dad533956d0362295a
+ Date: Mon Mar 7 13:49:21 2022 +0000
+
+ readline: back-port changes needed to properly detect EOF
+
+ commit 91395d97d905c31ac38513e4aaedecb3b25e818f
+ Date: Tue Feb 15 17:28:03 2022 +0000
+
+ gdb: handle bracketed-paste-mode and EOF correctly
+
+ It was observed that, if a previous command is selected at the
+ readline prompt using the up arrow key, then when the command is
+ accepted (by pressing return) an unexpected 'quit' message will be
+ printed by GDB. Here's an example session:
+
+ (gdb) p 123
+ $1 = 123
+ (gdb) p 123
+ quit
+ $2 = 123
+ (gdb)
+
+ In this session the second 'p 123' was entered not by typing 'p 123',
+ but by pressing the up arrow key to select the previous command. It
+ is important that the up arrow key is used, typing Ctrl-p will not
+ trigger the bug.
+
+ The problem here appears to be readline's EOF detection when handling
+ multi-character input sequences. I have raised this issue on the
+ readline mailing list here:
+
+ https://lists.gnu.org/archive/html/bug-readline/2022-04/msg00012.html
+
+ a solution has been proposed here:
+
+ https://lists.gnu.org/archive/html/bug-readline/2022-04/msg00016.html
+
+ This patch includes a test for this issue as well as a back-port of
+ (the important bits of) readline commit:
+
+ commit 2ef9cec8c48ab1ae3a16b1874a49bd1f58eaaca1
+ Date: Wed May 4 11:18:04 2022 -0400
+
+ fix for setting RL_STATE_EOF in callback mode
+
+ That commit also includes some updates to the readline documentation
+ and tests that I have not included in this commit.
+
+ With this commit in place the unexpected 'quit' messages are resolved.
+
+2022-05-07 Alan Modra <amodra@gmail.com>
+
+ Fix multiple ubsan warnings in i386-dis.c
+ Commit 39fb369834a3 "opcodes: Make i386-dis.c thread-safe" introduced
+ a number of casts to bfd_signed_vma that cause undefined behaviour
+ with a 32-bit libbfd. Revert those changes.
+
+ * i386-dis.c (OP_E_memory): Do not cast disp to bfd_signed_vma
+ for negation.
+ (get32, get32s): Don't use bfd_signed_vma here.
+
+2022-05-07 Alan Modra <amodra@gmail.com>
+
+ Re: Fix new linker testsuite failures due to rwx segment test problems
+ Fix it some more.
+
+ bfd/
+ * elfnn-loongarch.c: Remove commented out elf_backend_* defines.
+ ld/
+ * testsuite/ld-elf/elf.exp (target_defaults_to_execstack): Match
+ arm*. Delete loongarch.
+
+2022-05-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-07 Carl Love <cel@us.ibm.com>
+
+ PowerPC fix for gdb.server/sysroot.exp
+ On PowerPC, the stop in the printf function is of the form:
+
+ Breakpoint 2, 0x00007ffff7c6ab08 in printf@@GLIBC_2.17 () from /lib64/libc.so.6
+
+ On other architectures the output looks like:
+
+ Breakpoint 2, 0x0000007fb7ea29ac in printf () from /lib/aarch64-linux-gnu/libc.so.6
+
+ The following patch modifies the printf test by matchine any character
+ starting immediately after the printf. The test now works for PowerPC
+ output as well as the output from other architectures.
+
+ The test has been run on a Power 10 system and and Intel x86_64 system.
+
+2022-05-06 Nick Clifton <nickc@redhat.com>
+
+ Fix new linker testsuite failures due to rwx segment test problems
+
+2022-05-06 Tom Tromey <tom@tromey.com>
+
+ Introduce catchpoint class
+ This introduces a catchpoint class that is used as the base class for
+ all catchpoints. init_catchpoint is rewritten to be a constructor
+ instead.
+
+ This changes the hierarchy a little -- some catchpoints now inherit
+ from base_breakpoint whereas previously they did not. This isn't a
+ problem, as long as re_set is redefined in catchpoint.
+
+2022-05-06 Tom Tromey <tom@tromey.com>
+
+ Add initializers to tracepoint
+ This adds some initializers to tracepoint. I think right now these
+ may not be needed, due to obscure rules about zero initialization.
+ However, this will change in the next patch, and anyway it is clearer
+ to be explicit.
+
+ Remove init_raw_breakpoint_without_location
+ This removes init_raw_breakpoint_without_location, replacing it with a
+ constructor on 'breakpoint' itself. The subclasses and callers are
+ all updated.
+
+ Disable copying for breakpoint
+ It seems to me that breakpoint should use DISABLE_COPY_AND_ASSIGN.
+ This patch does this.
+
+ Add constructor to exception_catchpoint
+ This adds a constructor to exception_catchpoint and simplifies the
+ caller.
+
+ Add constructor to syscall_catchpoint
+ This adds a constructor to syscall_catchpoint and simplifies the
+ caller.
+
+ Add constructor to signal_catchpoint
+ This adds a constructor to signal_catchpoint and simplifies the
+ caller.
+
+ Add constructor to solib_catchpoint
+ This adds a constructor to solib_catchpoint and simplifies the caller.
+
+ Add constructor to fork_catchpoint
+ This adds a constructor to fork_catchpoint and simplifies the caller.
+
+ Remove unnecessary line from catch_exec_command_1
+ catch_exec_command_1 clears the new catchpoint's "exec_pathname"
+ field, but this is already done by virtue of calling "new".
+
+ Constify breakpoint::print_recreate
+ This constifies breakpoint::print_recreate.
+
+ Constify breakpoint::print_mention
+ This constifies breakpoint::print_mention.
+
+ Constify breakpoint::print_one
+ This constifies breakpoint::print_one.
+
+ Constify breakpoint::print_it
+ This constifies breakpoint::print_it. Doing this pointed out some
+ code in ada-lang.c that can be simplified a little as well.
+
+ Move works_in_software_mode to watchpoint
+ works_in_software_mode is only useful for watchpoints. This patch
+ moves it from breakpoint to watchpoint, and changes it to return bool.
+
+ Boolify breakpoint::explains_signal
+ This changes breakpoint::explains_signal to return bool.
+
+ Remove breakpoint::ops
+ The breakpoint::ops field is set but never used. This removes it.
+
+ Change print_recreate_thread to a method
+ This changes print_recreate_thread to be a method on breakpoint. This
+ function is only used as a helper by print_recreate methods, so I
+ thought this transformation made sense.
+
+2022-05-06 Carl Love <cel@us.ibm.com>
+
+ PowerPC: bp-permanent.exp, kill-after-signal fix
+ The break point after the stepi on Intel is the entry point of the user
+ signal handler function test_signal_handler. The code at the break point
+ looks like:
+
+ 0x<hex address> <test_signal_handler>: endbr64
+
+ On PowerPC with a Linux 5.9 kernel or latter, the address where gdb stops
+ after the stepi is in the vdso code inserted by the kernel. The code at the
+ breakpoint looks like:
+
+ 0x<hex address> <__kernel_start_sigtramp_rt64>: bctrl
+
+ This is different from other architectures. As discussed below, recent
+ kernel changes involving the vdso for PowerPC have been made changes to the
+ signal handler code flow. PowerPC is now stopping in function
+ __kernel_start_sigtramp_rt64. PowerPC now requires an additional stepi to
+ reach the user signal handler unlike other architectures.
+
+ The bp-permanent.exp and kill-after-signal tests run fine on PowerPC with an
+ kernel that is older than Linux 5.9.
+
+ The PowerPC 64 signal handler was updated by the Linux kernel 5.9-rc1:
+
+ commit id: 0138ba5783ae0dcc799ad401a1e8ac8333790df9
+ powerpc/64/signal: Balance return predictor stack in signal trampoline
+
+ An additional change to the PowerPC 64 signal handler was made in Linux
+ kernel version 5.11-rc7 :
+
+ commit id: 24321ac668e452a4942598533d267805f291fdc9
+ powerpc/64/signal: Fix regression in __kernel_sigtramp_rt64() semantics
+
+ The first kernel change, puts code into the user space signal handler (in
+ the vdso) as a performance optimization to prevent the call/return stack
+ from getting out of balance. The patch ensures that the entire
+ user/kernel/vdso cycle is balanced with the addition of the "brctl"
+ instruction.
+
+ The second patch, fixes the semantics of __kernel_sigtramp_rt64(). A new
+ symbol is introduced to serve as the jump target from the kernel to the
+ trampoline which now consists of two parts.
+
+ The above changes for PowerPC signal handler, causes gdb to stop in the
+ kernel code not the user signal handler as expected. The kernel dispatches
+ to the vdso code which in turn calls into the signal handler. PowerPC is
+ special in that the kernel is using a vdso instruction (bctrl) to enter the
+ signal handler.
+
+ I do not have access to a system with the first patch but not the second. I did
+ test on Power 9 with the Linux 5.15.0-27-generic kernel. Both tests fail on
+ this Power 9 system. The two tests also fail on Power 10 with the Linux
+ 5.14.0-70.9.1.el9_0.ppc64le kernel.
+
+ The following patch fixes the issue by checking if gdb stopped at "signal
+ handler called". If gdb stopped there, the tests verifies gdb is in the kernel
+ function __kernel_start_sigtramp_rt64 then does an additional stepi to reach the
+ user signal handler. With the patch below, the tests run without errors on both
+ the Power 9 and Power 10 systems with out any failures.
+
+2022-05-06 Alan Modra <amodra@gmail.com>
+
+ bfd targmatch.h makefile rule
+ I hit this just now with a make -j build after touching config.bfd.
+ mv: cannot stat 'targmatch.new': No such file or directory
+ make[2]: *** [Makefile:2336: targmatch.h] Error 1
+ make[2]: *** Waiting for unfinished jobs....
+
+ Fix that by not removing the target of the rule, a practice that seems
+ likely to cause parallel running of the rule recipe. The bug goes
+ back to 1997, the initial c0734708814c commit.
+
+ * Makefile.am (targmatch.h): rm the temp file, not targmatch.h.
+ * Makefile.in: Regenerate.
+
+2022-05-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/locexpr-data-member-location.exp with nopie
+ When running test-case gdb.dwarf2/locexpr-data-member-location.exp with
+ target board unix/-fno-PIE/-no-pie/-m32 I run into:
+ ...
+ (gdb) step^M
+ 26 return 0;^M
+ (gdb) FAIL: gdb.dwarf2/locexpr-data-member-location.exp: step into foo
+ ...
+
+ The problem is that the test-case tries to mimic some gdb_compile_shlib
+ behaviour using:
+ ...
+ set flags {additional_flags=-fpic debug}
+ get_func_info foo $flags
+ ...
+ but this doesn't work with the target board setting, because we end up doing:
+ ...
+ gcc locexpr-data-member-location-lib.c -fpic -g -lm -fno-PIE -no-pie -m32 \
+ -o func_addr23029.x
+ ...
+ while gdb_compile_shlib properly filters out the -fno-PIE -no-pie.
+
+ Consequently, the address for foo determined by get_func_info doesn't match
+ the actual address of foo.
+
+ Fix this by printing the address of foo using the result of gdb_compile_shlib.
+
+2022-05-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use gdb::function_view for gdbarch_iterate_over_objfiles_in_search_order callback
+ A rather straightforward patch to change an instance of callback +
+ void pointer to gdb::function_view, allowing pasing lambdas that
+ capture, and eliminating the need for the untyped pointer.
+
+ Change-Id: I73ed644e7849945265a2c763f79f5456695b0037
+
+2022-05-05 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: use $host instead $target
+ By mistake, $target was used instead of $host to configure the gprogng build.
+
+ gprofng/ChangeLog
+ 2022-04-28 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29113
+ PR gprofng/29116
+ * configure.ac: Use $host instead $target.
+ * libcollector/configure.ac: Likewise.
+ * configure: Rebuild.
+ * libcollector/configure: Rebuild.
+
+2022-05-05 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: make regcache's cooked_write_test selftest work with native-extended-gdbserver board
+ Running
+
+ $ make check TESTS="gdb.gdb/unittest.exp" RUNTESTFLAGS="--target_board=native-extended-gdbserver"
+
+ I get some failures:
+
+ Running selftest regcache::cooked_write_test::i386.^M
+ Self test failed: target already pushed^M
+ Running selftest regcache::cooked_write_test::i386:intel.^M
+ Self test failed: target already pushed^M
+ Running selftest regcache::cooked_write_test::i386:x64-32.^M
+ Self test failed: target already pushed^M
+ Running selftest regcache::cooked_write_test::i386:x64-32:intel.^M
+ Self test failed: target already pushed^M
+ Running selftest regcache::cooked_write_test::i386:x86-64.^M
+ Self test failed: target already pushed^M
+ Running selftest regcache::cooked_write_test::i386:x86-64:intel.^M
+ Self test failed: target already pushed^M
+ Running selftest regcache::cooked_write_test::i8086.^M
+ Self test failed: target already pushed^M
+
+ This is because the native-extended-gdbserver automatically connects GDB
+ to a GDBserver on startup, and therefore pushes a remote target on the
+ initial inferior. cooked_write_test is currently written in a way that
+ errors out if the current inferior has a process_stratum_target pushed.
+
+ Rewrite it to use scoped_mock_context, so it doesn't depend on the
+ current inferior (the current one upon entering the function).
+
+ Change-Id: I0357f989eacbdecc4bf88b043754451b476052ad
+
+2022-05-05 Luis Machado <luis.machado@arm.com>
+
+ Move TILE-Gx files to TARGET64_LIBOPCODES_CFILES
+ TILE-Gx is a 64-bit core, so we should include those files in the
+ TARGET64_LIBOPCODES_CFILES as opposed to TARGET32_LIBOPCODES_CFILES.
+
+ Don't define ARCH_cris for BFD64
+ I believe it is a mistake to define ARCH_cris when BFD64 is defined. It is
+ a 32-bit architecture, so should be placed outside of the BFD64 block.
+
+2022-05-05 Xi Ruoyao <xry111@mengyan1223.wang>
+
+ loongarch: Don't check ABI flags if no code section
+ Various packages (glib and gtk4 for example) produces data-only objects
+ using `ld -r -b binary` or `objcopy`, with no elf header flags set. But
+ these files also have no code sections, so they should be compatible
+ with all ABIs.
+
+ bfd/
+ * elfnn-loongarch.c (elfNN_loongarch_merge_private_bfd_data):
+ Skip ABI checks if the input has no code sections.
+
+ Reported-by: Wu Xiaotian <yetist@gmail.com>
+ Suggested-by: Wang Xuerui <i@xen0n.name>
+
+2022-05-05 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ IBM zSystems: mgrk, mg first operand requires register pair
+ opcodes/
+
+ * s390-opc.c (INSTR_RRF_R0RER): New instruction type.
+ (MASK_RRF_R0RER): Define mask for new instruction type.
+ * s390-opc.txt: Use RRF_R0RER for mgrk and RXY_RERRD for mg.
+
+2022-05-05 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Check NULL pointer before setting ref_real
+ PR ld/29086
+ * linker.c (bfd_wrapped_link_hash_lookup): Check NULL pointer
+ before setting ref_real.
+
+2022-05-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-05 H.J. Lu <hjl.tools@gmail.com>
+
+ LTO: Handle __real_SYM reference in IR
+ When an IR symbol SYM is referenced in IR via __real_SYM, its resolution
+ should be LDPR_PREVAILING_DEF, not PREVAILING_DEF_IRONLY, since LTO
+ doesn't know that __real_SYM should be resolved by SYM.
+
+ bfd/
+
+ PR ld/29086
+ * linker.c (bfd_wrapped_link_hash_lookup): Mark SYM is referenced
+ via __real_SYM.
+
+ include/
+
+ PR ld/29086
+ * bfdlink.h (bfd_link_hash_entry): Add ref_real.
+
+ ld/
+
+ PR ld/29086
+ * plugin.c (get_symbols): Resolve SYM definition to
+ LDPR_PREVAILING_DEF for __real_SYM reference.
+ * testsuite/ld-plugin/lto.exp: Run PR ld/29086 test.
+ * testsuite/ld-plugin/pr29086.c: New file.
+
+2022-05-04 Alan Modra <amodra@gmail.com>
+
+ cris bfd config
+ cris support will be built into a 32-bit bfd if using --enable-targets=all
+ on a 32-bit host, so we may as well make targmatch.h include cris.
+
+ * config.bfd (cris): Remove #idef BFD64.
+
+2022-05-04 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 check_relocs
+ Tidy the dynamic reloc handling code in check_relocs, removing
+ leftover comments and code from when check_relocs was called as each
+ object file was read in.
+
+ * elf64-ppc.c (ppc64_elf_check_relocs): Tidy dynamic reloc
+ handling code.
+ (dec_dynrel_count): Do the same here.
+
+2022-05-04 Tom Tromey <tromey@adacore.com>
+
+ Fix crash when creating index from index
+ My patches yesterday to unify the DWARF index base classes had a bug
+ -- namely, I did the wholesale dynamic_cast-to-static_cast too hastily
+ and introduced a crash. This can be seen by trying to add an index to
+ a file that has an index, or by running a test like gdb-index-cxx.exp
+ using the cc-with-debug-names.exp target board.
+
+ This patch fixes the crash by introducing a new virtual method and
+ removing some of the static casts.
+
+2022-05-04 Luis Machado <luis.machado@arm.com>
+
+ Fix build failure for aarch64 gdbserver
+ We're missing an argument.
+
+2022-05-04 Mark Wielaard <mark@klomp.org>
+
+ gdb: Workaround stringop-overread warning in debuginfod-support.c on s390x
+ For some reason g++ 11.2.1 on s390x produces a spurious warning for
+ stringop-overread in debuginfod_is_enabled for url_view. Add a new
+ DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD macro to suppress this warning.
+
+ include/ChangeLog:
+
+ * diagnostics.h (DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD): New
+ macro.
+
+ gdb/ChangeLog:
+
+ * debuginfod-support.c (debuginfod_is_enabled): Use
+ DIAGNOSTIC_IGNORE_STRINGOP_OVERREAD on s390x.
+
+2022-05-04 Pedro Alves <pedro@palves.net>
+
+ Fix GDBserver Aarch64 Linux regression
+ Luis noticed that the recent changes to gdbserver to make it track
+ process and threads independently regressed a few gdb.multi/*.exp
+ tests for aarch64-linux.
+
+ We started seeing the following internal error for
+ gdb.multi/multi-target-continue.exp for example:
+
+ Starting program: binutils-gdb/gdb/testsuite/outputs/gdb.multi/multi-target-continue/multi-target-continue ^M
+ Error in re-setting breakpoint 2: Remote connection closed^M
+ ../../../repos/binutils-gdb/gdb/thread.c:85: internal-error: inferior_thread: Assertion `current_thread_ != nullptr' failed.^M
+ A problem internal to GDB has been detected,^M
+ further debugging may prove unreliable.
+
+ A backtrace looks like:
+
+ #0 thread_regcache_data (thread=thread@entry=0x0) at ../../../repos/binutils-gdb/gdbserver/inferiors.cc:120
+ #1 0x0000aaaaaaabf0e8 in get_thread_regcache (thread=0x0, fetch=fetch@entry=0) at ../../../repos/binutils-gdb/gdbserver/regcache.cc:31
+ #2 0x0000aaaaaaad785c in is_64bit_tdesc () at ../../../repos/binutils-gdb/gdbserver/linux-aarch64-low.cc:194
+ #3 0x0000aaaaaaad8a48 in aarch64_target::sw_breakpoint_from_kind (this=<optimized out>, kind=4, size=0xffffffffef04) at ../../../repos/binutils-gdb/gdbserver/linux-aarch64-low.cc:3226
+ #4 0x0000aaaaaaabe220 in bp_size (bp=0xaaaaaab6f3d0) at ../../../repos/binutils-gdb/gdbserver/mem-break.cc:226
+ #5 check_mem_read (mem_addr=187649984471104, buf=buf@entry=0xaaaaaab625d0 "\006", mem_len=mem_len@entry=56) at ../../../repos/binutils-gdb/gdbserver/mem-break.cc:1862
+ #6 0x0000aaaaaaacc660 in read_inferior_memory (memaddr=<optimized out>, myaddr=0xaaaaaab625d0 "\006", len=56) at ../../../repos/binutils-gdb/gdbserver/target.cc:93
+ #7 0x0000aaaaaaac3d9c in gdb_read_memory (len=56, myaddr=0xaaaaaab625d0 "\006", memaddr=187649984471104) at ../../../repos/binutils-gdb/gdbserver/server.cc:1071
+ #8 gdb_read_memory (memaddr=187649984471104, myaddr=0xaaaaaab625d0 "\006", len=56) at ../../../repos/binutils-gdb/gdbserver/server.cc:1048
+ #9 0x0000aaaaaaac82a4 in process_serial_event () at ../../../repos/binutils-gdb/gdbserver/server.cc:4307
+ #10 handle_serial_event (err=<optimized out>, client_data=<optimized out>) at ../../../repos/binutils-gdb/gdbserver/server.cc:4520
+ #11 0x0000aaaaaaafbcd0 in gdb_wait_for_event (block=block@entry=1) at ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:700
+ #12 0x0000aaaaaaafc0b0 in gdb_wait_for_event (block=1) at ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:596
+ #13 gdb_do_one_event () at ../../../repos/binutils-gdb/gdbsupport/event-loop.cc:237
+ #14 0x0000aaaaaaacacb0 in start_event_loop () at ../../../repos/binutils-gdb/gdbserver/server.cc:3518
+ #15 captured_main (argc=4, argv=<optimized out>) at ../../../repos/binutils-gdb/gdbserver/server.cc:3998
+ #16 0x0000aaaaaaab66dc in main (argc=<optimized out>, argv=<optimized out>) at ../../../repos/binutils-gdb/gdbserver/server.cc:4084
+
+ This sequence of functions is invoked due to a series of conditions:
+
+ 1 - The probe-based breakpoint mechanism failed (for some reason) so ...
+
+ 2 - ... gdbserver has to know what type of architecture it is dealing
+ with so it can pick the right breakpoint kind, so it wants to
+ check if we have a 64-bit target.
+
+ 3 - To determine the size of a register, we currently fetch the
+ current thread's register cache, and the current thread pointer
+ is now nullptr.
+
+ In #3, the current thread is nullptr because gdb_read_memory clears it
+ on purpose, via set_desired_process, exactly to expose code relying on
+ the current thread when it shouldn't. It was always possible to end
+ up in this situation (when the current thread exits), but it was
+ harder to reproduce before.
+
+ This commit fixes it by tweaking is_64bit_tdesc to look at the current
+ process's tdesc instead of the current thread's tdesc.
+
+ Note that the thread's tdesc is itself filled from the process's
+ tdesc, so this should be equivalent:
+
+ struct regcache *
+ get_thread_regcache (struct thread_info *thread, int fetch)
+ {
+ struct regcache *regcache;
+
+ regcache = thread_regcache_data (thread);
+
+ ...
+ if (regcache == NULL)
+ {
+ struct process_info *proc = get_thread_process (thread);
+
+ gdb_assert (proc->tdesc != NULL);
+
+ regcache = new_register_cache (proc->tdesc);
+ set_thread_regcache_data (thread, regcache);
+ }
+ ...
+
+ Change-Id: Ibc809d7345e70a2f058b522bdc5cdbdca97e2cdc
+
+2022-05-04 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/remote: send qSymbol to all inferiors on startup
+ start_remote_1 calls remote_check_symbols after things are set up to
+ give the remote side a chance to look up symbols. One call to
+ remote_check_symbols sets the "general thread", if needed, and sends one
+ qSymbol packet. However, a remote target could have more than one
+ process on initial connection, and this would send a qSymbol for only
+ one of these processes.
+
+ Change it to iterate on all the target's inferiors and send a qSymbol
+ packet for each one.
+
+ I tested this by changing gdbserver to spawn two processes on startup:
+
+ diff --git a/gdbserver/server.cc b/gdbserver/server.cc
+ index 33c42714e72..9b682e9f85f 100644
+ --- a/gdbserver/server.cc
+ +++ b/gdbserver/server.cc
+ @@ -3939,6 +3939,7 @@ captured_main (int argc, char *argv[])
+
+ /* Wait till we are at first instruction in program. */
+ target_create_inferior (program_path.get (), program_args);
+ + target_create_inferior (program_path.get (), program_args);
+
+ /* We are now (hopefully) stopped at the first instruction of
+ the target process. This assumes that the target process was
+
+ Instead of hacking GDBserver, it should also be possible to test this by
+ starting manually two inferiors on an "extended-remote" connection,
+ disconnecting from GDBserver (with the disconnect command), and
+ re-connecting.
+
+ I was able to see qSymbol being sent for each inferior:
+
+ [remote] Sending packet: $Hgp828dc.828dc#1f
+ [remote] Packet received: OK
+ [remote] Sending packet: $qSymbol::#5b
+ [remote] Packet received: qSymbol:6764625f6167656e745f6764625f74705f686561705f627566666572
+ [remote] Sending packet: $qSymbol::6764625f6167656e745f6764625f74705f686561705f627566666572#1e
+ [remote] Packet received: qSymbol:6e70746c5f76657273696f6e
+ [remote] Sending packet: $qSymbol::6e70746c5f76657273696f6e#4d
+ [remote] Packet received: OK
+ [remote] Sending packet: $Hgp828dd.828dd#21
+ [remote] Packet received: OK
+ [remote] Sending packet: $qSymbol::#5b
+ [remote] Packet received: qSymbol:6764625f6167656e745f6764625f74705f686561705f627566666572
+ [remote] Sending packet: $qSymbol::6764625f6167656e745f6764625f74705f686561705f627566666572#1e
+ [remote] Packet received: qSymbol:6e70746c5f76657273696f6e
+ [remote] Sending packet: $qSymbol::6e70746c5f76657273696f6e#4d
+ [remote] Packet received: OK
+
+ Note that there would probably be more work to be done to fully support
+ this scenario, more things that need to be done for each discovered
+ inferior instead of just for one.
+
+ Change-Id: I21c4ecf6367391e2e389b560f0b4bd906cf6472f
+
+2022-05-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/remote: iterate on pspace inferiors in remote_new_objfile
+ Commit 152a17495663 ("gdb: prune inferiors at end of
+ fetch_inferior_event, fix intermittent failure of
+ gdb.threads/fork-plus-threads.exp") broke some tests with the
+ native-gdbserver board, such as:
+
+ (gdb) PASS: gdb.base/step-over-syscall.exp: detach-on-fork=off: follow-fork=child: break cond on target : vfork: break marker
+ continue^M
+ Continuing.^M
+ terminate called after throwing an instance of 'gdb_exception_error'^M
+
+ I can manually reproduce the issue by running (just the commands that
+ the test does as a one liner):
+
+ $ ./gdb -q --data-directory=data-directory \
+ testsuite/outputs/gdb.base/step-over-syscall/step-over-vfork \
+ -ex "tar rem | ../gdbserver/gdbserver - testsuite/outputs/gdb.base/step-over-syscall/step-over-vfork" \
+ -ex "b main" \
+ -ex c \
+ -ex "d 1" \
+ -ex "set displaced-stepping off" \
+ -ex "b *0x7ffff7d7ac5a if main == 0" \
+ -ex "set detach-on-fork off" \
+ -ex "set follow-fork-mode child" \
+ -ex c \
+ -ex "inferior 1" \
+ -ex "b marker" \
+ -ex c
+
+ ... where 0x7ffff7d7ac5a is the exact address of the vfork syscall
+ (which can be found by looking at gdb.log).
+
+ The important part of the above is that a vfork syscall creates inferior
+ 2, then inferior 2 executes until exit, then we switch back to inferior
+ 1 and try to resume it.
+
+ The uncaught exception happens here:
+
+ #4 0x00005596969d81a9 in error (fmt=0x559692da9e40 "Cannot execute this command while the target is running.\nUse the \"interrupt\" command to stop the target\nand then try again.")
+ at /home/simark/src/binutils-gdb/gdbsupport/errors.cc:43
+ #5 0x0000559695af6f66 in remote_target::putpkt_binary (this=0x617000038080, buf=0x559692da4380 "qSymbol::", cnt=9) at /home/simark/src/binutils-gdb/gdb/remote.c:9560
+ #6 0x0000559695af6aaf in remote_target::putpkt (this=0x617000038080, buf=0x559692da4380 "qSymbol::") at /home/simark/src/binutils-gdb/gdb/remote.c:9518
+ #7 0x0000559695ab50dc in remote_target::remote_check_symbols (this=0x617000038080) at /home/simark/src/binutils-gdb/gdb/remote.c:5141
+ #8 0x0000559695b3cccf in remote_new_objfile (objfile=0x0) at /home/simark/src/binutils-gdb/gdb/remote.c:14600
+ #9 0x0000559693bc52a9 in std::__invoke_impl<void, void (*&)(objfile*), objfile*> (__f=@0x61b0000167f8: 0x559695b3cb1d <remote_new_objfile(objfile*)>) at /usr/include/c++/11.2.0/bits/invoke.h:61
+ #10 0x0000559693bb2848 in std::__invoke_r<void, void (*&)(objfile*), objfile*> (__fn=@0x61b0000167f8: 0x559695b3cb1d <remote_new_objfile(objfile*)>) at /usr/include/c++/11.2.0/bits/invoke.h:111
+ #11 0x0000559693b8dddf in std::_Function_handler<void (objfile*), void (*)(objfile*)>::_M_invoke(std::_Any_data const&, objfile*&&) (__functor=..., __args#0=@0x7ffe0bae0590: 0x0) at /usr/include/c++/11.2.0/bits/std_function.h:291
+ #12 0x00005596956374b2 in std::function<void (objfile*)>::operator()(objfile*) const (this=0x61b0000167f8, __args#0=0x0) at /usr/include/c++/11.2.0/bits/std_function.h:560
+ #13 0x0000559695633c64 in gdb::observers::observable<objfile*>::notify (this=0x55969ef5c480 <gdb::observers::new_objfile>, args#0=0x0) at /home/simark/src/binutils-gdb/gdb/../gdbsupport/observable.h:150
+ #14 0x0000559695df6cc2 in clear_symtab_users (add_flags=...) at /home/simark/src/binutils-gdb/gdb/symfile.c:2873
+ #15 0x000055969574c263 in program_space::~program_space (this=0x6120000c8a40, __in_chrg=<optimized out>) at /home/simark/src/binutils-gdb/gdb/progspace.c:154
+ #16 0x0000559694fc086b in delete_inferior (inf=0x61700003bf80) at /home/simark/src/binutils-gdb/gdb/inferior.c:205
+ #17 0x0000559694fc341f in prune_inferiors () at /home/simark/src/binutils-gdb/gdb/inferior.c:390
+ #18 0x0000559695017ada in fetch_inferior_event () at /home/simark/src/binutils-gdb/gdb/infrun.c:4293
+ #19 0x0000559694f629e6 in inferior_event_handler (event_type=INF_REG_EVENT) at /home/simark/src/binutils-gdb/gdb/inf-loop.c:41
+ #20 0x0000559695b3b0e3 in remote_async_serial_handler (scb=0x6250001ef100, context=0x6170000380a8) at /home/simark/src/binutils-gdb/gdb/remote.c:14466
+ #21 0x0000559695c59eb7 in run_async_handler_and_reschedule (scb=0x6250001ef100) at /home/simark/src/binutils-gdb/gdb/ser-base.c:138
+ #22 0x0000559695c5a42a in fd_event (error=0, context=0x6250001ef100) at /home/simark/src/binutils-gdb/gdb/ser-base.c:189
+ #23 0x00005596969d9ebf in handle_file_event (file_ptr=0x60700005af40, ready_mask=1) at /home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:574
+ #24 0x00005596969da7fa in gdb_wait_for_event (block=0) at /home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:700
+ #25 0x00005596969d8539 in gdb_do_one_event () at /home/simark/src/binutils-gdb/gdbsupport/event-loop.cc:212
+
+ If I enable "set debug infrun" just before the last continue, we see:
+
+ (gdb) continue
+ Continuing.
+ [infrun] clear_proceed_status_thread: 965604.965604.0
+ [infrun] proceed: enter
+ [infrun] proceed: addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT
+ [infrun] scoped_disable_commit_resumed: reason=proceeding
+ [infrun] start_step_over: enter
+ [infrun] start_step_over: stealing global queue of threads to step, length = 0
+ [infrun] operator(): step-over queue now empty
+ [infrun] start_step_over: exit
+ [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [965604.965604.0] at 0x7ffff7d7ac5c
+ [infrun] do_target_resume: resume_ptid=965604.0.0, step=0, sig=GDB_SIGNAL_0
+ [infrun] prepare_to_wait: prepare_to_wait
+ [infrun] reset: reason=proceeding
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote
+ [infrun] proceed: exit
+ [infrun] fetch_inferior_event: enter
+ [infrun] scoped_disable_commit_resumed: reason=handling event
+ [infrun] do_target_wait: Found 2 inferiors, starting at #1
+ [infrun] random_pending_event_thread: None found.
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: 965604.965604.0 [Thread 965604.965604],
+ [infrun] print_target_wait_results: status->kind = VFORK_DONE
+ [infrun] handle_inferior_event: status->kind = VFORK_DONE
+ [infrun] context_switch: Switching context from 0.0.0 to 965604.965604.0
+ [infrun] handle_vfork_done: not waiting for a vfork-done event
+ [infrun] start_step_over: enter
+ [infrun] start_step_over: stealing global queue of threads to step, length = 0
+ [infrun] operator(): step-over queue now empty
+ [infrun] start_step_over: exit
+ [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [965604.965604.0] at 0x7ffff7d7ac5c
+ [infrun] do_target_resume: resume_ptid=965604.0.0, step=0, sig=GDB_SIGNAL_0
+ [infrun] prepare_to_wait: prepare_to_wait
+ [infrun] reset: reason=handling event
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote
+ terminate called after throwing an instance of 'gdb_exception_error'
+
+ What happens is:
+
+ - After doing the "continue" on inferior 1, the remote target gives us
+ a VFORK_DONE event. The core ignores it and resumes inferior 1.
+ - Since prune_inferiors is now called after each handled event, in
+ fetch_inferior_event, it is called after we handled that VFORK_DONE
+ event and resumed inferior 1.
+ - Inferior 2 is pruned, which (see backtrace above) causes its program
+ space to be deleted, which clears the symtabs for that program space,
+ which calls the new_objfile observable and remote_new_objfile
+ observer (with a nullptr objfile, to indicate that the previously
+ loaded symbols have been discarded), which calls
+ remote_check_symbols.
+
+ remote_check_symbols is the function that sends the qSymbol packet, to
+ let the remote side ask for symbol addresses. The problem is that the
+ remote target is working in all-stop / sync mode and is currently
+ resumed. It has sent a vCont packet to resume the target and is waiting
+ for a stop reply. It can't send any packets in the mean time. That
+ causes the exception to be thrown.
+
+ This wasn't a problem before, when prune_inferiors was called in
+ normal_stop, because it was always called at a time the target was not
+ resumed.
+
+ An important observation here is that the new_objfile observable is
+ invoked for a change in inferior 2's program space (inferior 2's program
+ space is the current program space). Inferior 2 isn't bound to any
+ process on the remote side (it has exited, that's why it's being
+ pruned). It doesn't make sense to try to send a qSymbol packet for a
+ process that doesn't exist on the remote side. remote_check_symbols
+ actually attempts to avoid that:
+
+ /* The remote side has no concept of inferiors that aren't running
+ yet, it only knows about running processes. If we're connected
+ but our current inferior is not running, we should not invite the
+ remote target to request symbol lookups related to its
+ (unrelated) current process. */
+ if (!target_has_execution ())
+ return;
+
+ The problem here is that while inferior 2's program space is the current
+ program space, inferior 1 is the current inferior. So the check above
+ passes, since inferior has execution. We therefore try to send a
+ qSymbol packet for inferior 1 in reaction to a change in inferior 2's
+ program space, that's wrong.
+
+ This exposes a conceptual flaw in remote_new_objfile. The "new_objfile"
+ event concerns a specific program space, which can concern multiple
+ inferiors, as inferiors can share a program space. We shouldn't
+ consider the current inferior at all, but instead all inferiors bound to
+ the affected program space. Especially since the current inferior can
+ be unrelated to the current program space at that point.
+
+ To be clear, we are in this state because ~program_space sets itself as
+ the current program space, but there is no more inferior having that
+ program space to switch to, inferior 2 has already been unlinked.
+
+ To fix this, make remote_new_objfile iterate on all inferiors bound to
+ the affected program space. Remove the target_has_execution check from
+ remote_check_symbols, replace it with an assert. All callers must
+ ensure that the current inferior has execution before calling it.
+
+ Change-Id: Ica643145bcc03115248290fd310cadab8ec8371c
+
+2022-05-04 Jan Beulich <jbeulich@suse.com>
+
+ Dwarf: rename yet another instance of "index"
+ As before, on sufficiently old glibc this conflicts with a global
+ identifier in the library headers. While there also zap the unusual
+ padding by blanks.
+
+2022-05-04 Martin Liska <mliska@suse.cz>
+
+ LTO plugin: sync header file with GCC
+ include/ChangeLog:
+
+ * plugin-api.h (enum ld_plugin_tag): Sync with GCC.
+
+2022-05-04 Alan Modra <amodra@gmail.com>
+
+ PowerPC32 treatment of absolute symbols
+ As already done for PowerPC64, fix dynamic relocs for absolute symbols.
+ The patch also tidies the dynamic reloc handling code in check_relocs,
+ removing leftover comments and code from when check_relocs was called
+ as each object file was read in.
+
+ bfd/
+ * elf32-ppc.c (ppc_elf_check_relocs): Set isym and ifunc earlier.
+ Rearrange tests for dynamic relocs, handling absolute symbols.
+ (allocate_dynrelocs): Don't allocate dynamic relocs for locally
+ defined absolute symbols.
+ (ppc_elf_size_dynamic_sections): Similarly.
+ (ppc_elf_relocate_section): Similarly.
+ ld/
+ * testsuite/ld-powerpc/abs32-pie.d,
+ * testsuite/ld-powerpc/abs32-pie.r,
+ * testsuite/ld-powerpc/abs32-reloc.s,
+ * testsuite/ld-powerpc/abs32-shared.d,
+ * testsuite/ld-powerpc/abs32-shared.r,
+ * testsuite/ld-powerpc/abs32-static.d,
+ * testsuite/ld-powerpc/abs32-static.r: New tests.
+ * testsuite/ld-powerpc/powerpc.exp: Run them.
+
+2022-05-04 John Baldwin <jhb@FreeBSD.org>
+
+ gdbserver: Fix build after adding tls feature to arm tdesc.
+
+2022-05-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-04 John Baldwin <jhb@FreeBSD.org>
+
+ NEWS: Add a note for TLS support on FreeBSD/arm and FreeBSD/Aarch64.
+
+ Read the tpidr register from NT_ARM_TLS on Linux.
+
+ gdbserver: Read the tpidr register from NT_ARM_TLS on Linux.
+
+ Read the tpidr register from NT_ARM_TLS core dump notes on Linux Aarch64.
+
+ Fetch the NT_ARM_TLS register set for native FreeBSD/Aarch64 processes.
+ This permits resolving TLS variables.
+
+ Support TLS variables on FreeBSD/Aarch64.
+ Derive the pointer to the DTV array from the tpidr register.
+
+ Read the tpidr register from NT_ARM_TLS core dump notes on FreeBSD/Aarch64.
+
+ Add an aarch64-tls feature which includes the tpidr register.
+
+ Fetch the NT_ARM_TLS register set for native FreeBSD/arm processes.
+ This permits resolving TLS variables.
+
+ Support TLS variables on FreeBSD/arm.
+ Derive the pointer to the DTV array from the tpidruro register.
+
+ Read the tpidruro register from NT_ARM_TLS core dump notes on FreeBSD/arm.
+
+ Add an arm-tls feature which includes the tpidruro register from CP15.
+
+ fbsd-nat: Add helper routines for register sets using PT_[G]SETREGSET.
+ FreeBSD's kernel has recently added PT_GETREGSET and PT_SETREGSET
+ operations to fetch a register set named by an ELF note type. These
+ helper routines provide helpers to check for a register set's
+ existence, fetch registers for a register set, and store registers to
+ a register set.
+
+2022-05-03 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Regenerate aclocal.m4 with automake 1.15.1
+ * aclocal.m4: Regenerate with automake 1.15.1.
+
+2022-05-03 Pedro Alves <pedro@palves.net>
+
+ gdbserver: track current process as well as current thread
+ The recent commit 421490af33bf ("gdbserver/linux: Access memory even
+ if threads are running") caused a regression in
+ gdb.threads/access-mem-running-thread-exit.exp with gdbserver, which I
+ somehow missed. Like so:
+
+ (gdb) print global_var
+ Cannot access memory at address 0x555555558010
+ (gdb) FAIL: gdb.threads/access-mem-running-thread-exit.exp: non-stop: access mem (print global_var after writing, inf=2, iter=1)
+
+ The problem starts with GDB telling GDBserver to select a thread, via
+ the Hg packet, which GDBserver complies with, then that thread exits,
+ and GDB, without knowing the thread is gone, tries to write to memory,
+ through the context of the previously selected Hg thread.
+
+ GDBserver's GDB-facing memory access routines, gdb_read_memory and
+ gdb_write_memory, call set_desired_thread to make GDBserver re-select
+ the thread that GDB has selected with the Hg packet. Since the thread
+ is gone, set_desired_thread returns false, and the memory access
+ fails.
+
+ Now, to access memory, it doesn't really matter which thread is
+ selected. All we should need is the target process. Even if the
+ thread that GDB previously selected is gone, and GDB does not yet know
+ about that exit, it shouldn't matter, GDBserver should still know
+ which process that thread belonged to.
+
+ Fix this by making GDBserver track the current process separately,
+ like GDB also does. Add a new set_desired_process routine that is
+ similar to set_desired_thread, but just sets the current process,
+ leaving the current thread as NULL. Use it in the GDB-facing memory
+ read and write routines, to avoid failing if the selected thread is
+ gone, but the process is still around.
+
+ Change-Id: I4ff97cb6f42558efbed224b30d5c71f6112d44cd
+
+2022-05-03 Pedro Alves <pedro@palves.net>
+
+ Fix gdb.threads/access-mem-running-thread-exit.exp w/ native-extended-gdbserver
+ When testing gdb.threads/access-mem-running-thread-exit.exp with
+ --target_board=native-extended-gdbserver, we get:
+
+ Running gdb.threads/access-mem-running-thread-exit.exp ...
+ FAIL: gdb.threads/access-mem-running-thread-exit.exp: non-stop: second inferior: runto: run to main
+ WARNING: Timed out waiting for EOF in server after monitor exit
+
+ === gdb Summary ===
+
+ # of expected passes 3
+ # of unexpected failures 1
+ # of unsupported tests 1
+
+ The problem is that the testcase spawns a second inferior with
+ -no-connection, and then runto_main does "run", which fails like so:
+
+ (gdb) run
+ Don't know how to run. Try "help target".
+ (gdb) FAIL: gdb.threads/access-mem-running-thread-exit.exp: non-stop: second inferior: runto: run to main
+
+ That "run" above failed because native-extended-gdbserver forces "set
+ auto-connect-native-target off", to prevent testcases from mistakenly
+ running programs with the native target, which would exactly be the
+ case here.
+
+ Fix this by letting the second inferior share the first inferior's
+ connection everywhere except on targets that do reload on run (e.g.,
+ --target_board=native-gdbserver).
+
+ Change-Id: Ib57105a238cbc69c57220e71261219fa55d329ed
+
+2022-05-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add some additional thread status debug output
+ While working on this patch:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-January/185109.html
+
+ I found it really useful to print the executing/resumed status of all
+ threads (or all threads in a particular inferior) at various
+ places (e.g. when a new inferior is started, when GDB attaches, etc).
+
+ This debug was originally part of the above patch, but I wanted to
+ rewrite this as a separate patch and move the code into a new function
+ in infrun.h, which is what this patch does.
+
+ Unless 'set debug infrun on' is in effect, then there should be no
+ user visible changes after this commit.
+
+2022-05-03 Nick Clifton <nickc@redhat.com>
+
+ Add a linker warning when creating potentially dangerous executable segments. Add tests, options to disabke and configure switches to choose defaults.
+
+ Fix potential arithmetic overflow in the linker's plugin handling code.
+ PR 29101
+ * libdep_plugin.c (get_libdeps): Check for overflow when computing
+ amount of memory to allocate.
+
+2022-05-03 Andrew Burgess <aburgess@redhat.com>
+
+ objdump: fix styled printing of addresses
+ Previous work to add styled disassembler output missed a case in
+ objdump_print_addr, which is fixed in this commit.
+
+2022-05-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: small cleanup in mi-break-qualified.exp
+ It is not necessary to pass an empty string to mi_gdb_start, passing
+ the empty string is equivalent to passing no arguments, which is what
+ we do everywhere else (that we don't need to specify an actual
+ argument).
+
+ The only place we use 'mi_gdb_start ""' is in
+ gdb.mi/mi-break-qualified.exp, so in this commit I just replace that
+ with a call to 'mi_gdb_start' - just for consistency.
+
+ There should be no change in what is tested after this commit.
+
+2022-05-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: change mi_gdb_start to take a list of flags
+ After this previous commit I was thinking about the API of
+ mi_gdb_start. I felt that the idea of passing flags as separate
+ arguments and using 'args' to gather these into a list, though clever,
+ was not an intuitive API.
+
+ In this commit I modify mi_gdb_start so that it expects a single
+ argument, which should be a list of flags. Thus, where we previously
+ would have said:
+
+ mi_gdb_start separate-mi-tty separate-inferior-tty
+
+ We would now say:
+
+ mi_gdb_start { separate-mi-tty separate-inferior-tty }
+
+ However, it turns out we never actually call mi_gdb_start passing two
+ arguments in this way at all. We do in some places do this:
+
+ mi_gdb_start separate-inferior-tty
+
+ But that's fine, a single string like this works equally well as a
+ single item list, so this will not need updating.
+
+ There is also one place where we do this:
+
+ eval mi_gdb_start $start_ops
+
+ where $start_ops is a list that might contains 0, 1, or 2 items. The
+ eval here is used to expand the $start_ops list so mi_gdb_start sees
+ the list contents as separate arguments. In this case we just need to
+ drop the use of eval.
+
+ I think that the new API is more intuitive, but others might
+ disagree, in which case I can drop this change.
+
+ There should be no change in what is tested after this commit.
+
+2022-05-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: fix mi-exec-run.exp with native-extended-gdbserver board
+ When running with the native-extended-gdbserver board, I currently see
+ one failure in gdb.mi/mi-exec-run.exp:
+
+ FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=0: breakpoint hit reported on console (timeout)
+
+ In this test the MI interface should be started in a separate tty,
+ which means we should have a CLI tty and an MI tty, however, this is
+ not happening. Instead GDB is just started in MI mode and there is no
+ CLI tty.
+
+ The test script tries to switch between the CLI an MI terminals and
+ look for some expected output on each, however, as there is no CLI
+ terminal the expected output never arrives, and the test times out.
+
+ It turns out that this is not a GDB problem, rather, this is an issue
+ with argument passing within the test script.
+
+ The proc default_mi_gdb_start expects to take a set of flags (strings)
+ as arguments, each of flag is expected to be a separate argument. The
+ default_mi_gdb_start proc collects all its arguments into a list using
+ the special 'args' parameter name, and then iterates over this list to
+ see which flags were passed.
+
+ In mi_gdb_start, which forwards to default_mi_gdb_start, the arguments
+ are also gathered into the 'args' parameter list, but are then
+ expanded back to be separate arguments using the eval trick, i.e.:
+
+ proc mi_gdb_start { args } {
+ return [eval default_mi_gdb_start $args]
+ }
+
+ This ensures that when we arrive in default_mi_gdb_start each flag is
+ a separate argument, rather than appearing as a single list containing
+ all arguments.
+
+ When using the native-extended-gdbserver board however, the file
+ boards/native-extended-gdbserver.exp is loaded, and this file replaces
+ the default mi_gdb_start with its own version.
+
+ This new mi_gdb_start also gathers the arguments into an 'args' list,
+ but forgets to expand the arguments out using the eval trick.
+
+ As a result, when using the native-extended-gdbserver board, by the
+ time we get to default_mi_gdb_start, we end up with the args list
+ containing a single item, which is a list containing all the arguments
+ the user passed.
+
+ What this means is that if the user passes two arguments, then, in
+ default_mi_gdb_start, instead of seeing two separate arguments, we see
+ a single argument made by concatenating the two arguments together.
+
+ The only place this is a problem is in the test mi-exec-run.exp,
+ which (as far as I can see) is the only test where we might try to
+ pass both arguments at the same time. Currently we think we passed
+ both arguments to mi_gdb_start, but mi_gdb_start behaves as if no
+ arguments were passed.
+
+ This commit fixes the problem by making use of the eval trick within
+ the native-extended-gdbserver version of mi_gdb_start. After this,
+ the FAIL listed at the top of this message is resolved.
+
+2022-05-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: fix failures in gdb.mi/mi-exec-run.exp with native-extended-gdbserver
+ When running the gdb.mi/mi-exec-run.exp test using the
+ native-extended-gdbserver I see failures like this:
+
+ FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=main: mi=main: force-fail=1: run failure detected
+ FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=main: mi=separate: force-fail=1: run failure detected
+ FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=1: run failure detected
+
+ There's a race condition here, so you might see a slightly different
+ set of failures, but I always see some from the 'run failure detected'
+ test.
+
+ NOTE: I also see an additional test failure:
+
+ FAIL: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=0: breakpoint hit reported on console (timeout)
+
+ but that is a completely different issue, and is not being addressed
+ in this commit.
+
+ The problem for the 'run failure detected' test is that we end up
+ in gdb_expect looking for output from two spawn-ids, one from
+ gdbserver, and one from gdb. We're looking for one output pattern
+ from each spawn-id, and for the test to pass we need to see both
+ patterns.
+
+ Now, if gdb exits then this is a test failure (this would indicate gdb
+ crashing, which is bad), so we have an eof pattern associated with
+ the gdb spawn-id.
+
+ However, in this particular test we expect gdbserver to fail to
+ execute the binary (the test binary is set non-executable), and so we
+ get an error message from gdbserver (which matches the pattern), and
+ then gdbserver exits, this is expected.
+
+ The problem is that after spotting the pattern from gdbserver, we
+ often see the eof from gdbserver before we see the pattern from gdb.
+ If this happens then we drop out of the gdb_expect without ever seeing
+ the pattern from gdb, and fail the test.
+
+ In this commit, I place the spawn-id of gdbserver into a global
+ variable, and then use this global variable as the -i option within
+ the gdb_expect.
+
+ Now, once we have seen the expected pattern on the gdbserver spawn-id,
+ the global variable is cleared. After this the gdb_expect no longer
+ checks the gdbserver spawn-id for additional output, and so never sees
+ the eof event. This leaves the gdb_expect running, which allows the
+ pattern from gdb to be seen, and for the test to pass.
+
+ I now see no failures relating to 'run failure detected'.
+
+2022-05-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.cp/align.exp with gcc 12.1 / 11.3
+ Starting with gcc 12.1 / gcc 11.3, for test-case gdb.cp/align.exp we run into:
+ ...
+ align.cc:29:23: error: invalid application of 'alignof' to a void type^M
+ 29 | unsigned a_void = alignof (void);^M
+ | ^~~~~~~~~~~~~~^M
+ ...
+
+ Fix this by using __alignof__ instead.
+
+ Tested on x86_64-linux, with gcc 7.5.0, gcc 12.1 and clang 12.0.1.
+
+2022-05-02 Aaron Merey <amerey@redhat.com>
+
+ gdb/debuginfod: Whitespace-only URL should disable debuginfod
+ Currently debuginfod is disabled when the string of server URLs
+ is unset or set to be the empty string (via the $DEBUGINFOD_URLS
+ environment variable or the 'set debuginfod urls' gdb command).
+
+ Extend this functionality so that a whitespace-only URL also disables
+ debuginfod.
+
+ Modify a testcase to verify that a whitespace-only URL disables
+ debuginfod.
+
+2022-05-02 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove type_wanted parameter from a few functions
+ The type_wanted value, passed down to the create_sals_from_location
+ callback, is never used. Remove it.
+
+ Change-Id: Ic363ee13f6af593a3e875ff7fe46de130cdc190c
+
+2022-05-02 Simon Marchi <simon.marchi@efficios.com>
+
+ gnulib: update to bd11400942d6
+ Update the gnulib import to fixes these issues:
+
+ - GDB build with clang + glibc < 2.33.
+
+ https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=d6a07b4dc21b3118727743142c678858df442853
+ https://lists.gnu.org/archive/html/bug-gnulib/2022-04/msg00072.html
+
+ With glibc < 2.33, gnulib (since relatively recently) enables a
+ replacement for free (see gnulib/import/m4/free.m4). In that path,
+ clang shows this error:
+
+ make[2]: Entering directory '/home/smarchi/build/binutils-gdb-clang/gdbsupport'
+ CXX agent.o
+ In file included from /home/smarchi/src/binutils-gdb/gdbsupport/agent.cc:20:
+ In file included from /home/smarchi/src/binutils-gdb/gdbsupport/common-defs.h:95:
+ ../gnulib/import/string.h:636:19: error: exception specification in declaration does not match previous declaration
+ _GL_EXTERN_C void free (void *) throw ();
+ ^
+ ../gnulib/import/stdlib.h:737:17: note: expanded from macro 'free'
+ # define free rpl_free
+ ^
+ ../gnulib/import/stdlib.h:739:1: note: previous declaration is here
+ _GL_FUNCDECL_RPL (free, void, (void *ptr));
+ ^
+ ../gnulib/import/sys/select.h:251:23: note: expanded from macro '_GL_FUNCDECL_RPL'
+ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+ ^
+ <scratch space>:139:1: note: expanded from here
+ rpl_free
+ ^
+
+ The gnulib commit mentioned fixes the exception specification of `free`.
+
+ - GDB build on RHEL 7:
+
+ CC libgnu_a-openat-proc.o
+ In file included from /usr/include/string.h:633,
+ from ./string.h:41,
+ from ../../../binutils-gdb/gnulib/import/openat-proc.c:30:
+ ./string.h:1105:1: error: expected identifier or '(' before '__extension__'
+ 1105 | _GL_FUNCDECL_SYS (strndup, char *,
+ | ^~~~~~~~~~~~~~~~
+
+ https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=84863a1c4dc8cca8fb0f6f670f67779cdd2d543b
+ https://lists.gnu.org/archive/html/bug-gnulib/2022-04/msg00075.html
+
+ Change-Id: Ibd51302feece6f385d0c53e0d08921b5d95e2776
+
+2022-05-02 Tom Tromey <tromey@adacore.com>
+
+ Fix Ada catchpoint regression
+ The breakpoint C++-ification series introduced a regression for Ada
+ catchpoints. Specifically, commit 2b5ab5b8 ("Convert base breakpoints
+ to vtable ops") caused these to start failing. I didn't notice this
+ because testing Ada using a Linux distro compiler requires installing
+ the GNAT debuginfo, which I hadn't done.
+
+ This patch fixes the problem. I'm checking it in.
+
+2022-05-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-05-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.multi/attach-no-multi-process.exp with check-readmore
+ When running test-case gdb.multi/attach-no-multi-process.exp with
+ check-readmore, I get:
+ ...
+ (gdb) attach 13411^M
+ Attaching to Remote target^M
+ No unwaited-for children left.^M
+ (gdb) Reading symbols from attach-no-multi-process...^M
+ Reading symbols from /lib64/libm.so.6...^M
+ (No debugging symbols found in /lib64/libm.so.6)^M
+ Reading symbols from /lib64/libc.so.6...^M
+ (No debugging symbols found in /lib64/libc.so.6)^M
+ Reading symbols from /lib64/ld-linux-x86-64.so.2...^M
+ (No debugging symbols found in /lib64/ld-linux-x86-64.so.2)^M
+ 0x00007f5df1fffc8a in clock_nanosleep@GLIBC_2.2.5 () from /lib64/libc.so.6^M
+ FAIL: gdb.multi/attach-no-multi-process.exp: target_non_stop=off: \
+ attach to the program via remote (timeout)
+ ...
+
+ The problem is that the attach output is matched using gdb_test, which uses
+ the '$gdb_prompt $' regexp, and this does not handle the case that '(gdb) ' is
+ not the last available output.
+
+ Fix this by using a gdb_test_multiple instead with a '$gdb_prompt ' regexp, so
+ without the '$' anchor.
+
+ Tested on x86_64-linux with native, check-read1 and check-readmore.
+
+2022-05-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-30 Thomas Hebb <tommyhebb@gmail.com>
+
+ opcodes: don't assume ELF in riscv, csky, rl78, mep disassemblers
+ Currently, the get_disassembler() implementations for riscv, csky, and
+ rl78--and mep_print_insn() for mep--access ELF variants of union fields
+ without first checking that the bfd actually represents an ELF. This
+ causes undefined behavior and crashes when disassembling non-ELF files
+ (the "binary" BFD, for example). Fix that.
+
+2022-04-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Remove create_breakpoints_sal_default
+ create_breakpoints_sal_default is just a simple wrapper, so remove it.
+
+ Remove allocate_bp_location
+ allocate_bp_location is just a small wrapper for a method call, so
+ inline it everywhere.
+
+ Constify breakpoint_ops
+ Now that all breakpoint_ops are statically initialized, they can all
+ be made const.
+
+ Remove breakpoint ops initialization
+ initialize_breakpoint_ops does not do much any more, so remove it in
+ favor of statically-initialize objects.
+
+ Remove vtable_breakpoint_ops
+ There's no need to have vtable_breakpoint_ops any more, so remove it
+ in favor of base_breakpoint_ops.
+
+ Remove most fields from breakpoint_ops
+ At this point, all implementations of breakpoints use the vtable. So,
+ we can now remove most function pointers from breakpoint_ops and
+ switch to using methods directly in the callers. Only the two "static
+ virtual" methods remain in breakpoint_ops.
+
+ Remove breakpoint_ops from init_catchpoint
+ init_catchpoint is only ever passed a single breakpoint_ops pointer,
+ so remove the parameter.
+
+ Remove breakpoint_ops from init_ada_exception_breakpoint
+ init_ada_exception_breakpoint is only ever passed a single
+ breakpoint_ops structure, so remove the parameter.
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Merge probe and ordinary tracepoints
+ Right now, probe tracepoints are handled by a separate ops object.
+ However, they differ only in a small way from ordinary tracepoints,
+ and furthermore can be distinguished by their event location.
+
+ This patch merges the two cases, just as was done for breakpoints.
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Merge probe and ordinary breakpoints
+ Right now, probe breakpoints are handled by a separate ops object.
+ However, they differ only in a small way from ordinary breakpoints,
+ and furthermore can be distinguished by their "probe" object.
+
+ This patch merges the two cases. This avoids having to introduce a
+ new bp_ constant (which can be quite subtle to do correctly) and a new
+ subclass.
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Remove bkpt_base_breakpoint_ops
+ An earlier patch removed the last use of bkpt_base_breakpoint_ops, so
+ remove the object entirely.
+
+ Convert static marker tracepoints to vtable ops
+ This converts static marker tracepoints to use vtable_breakpoint_ops.
+
+ Add bp_static_marker_tracepoint
+ Because the actual construction of a breakpoint is buried deep in
+ create_breakpoint, at present it's necessary to have a new bp_
+ enumerator constant any time a new subclass is needed. Static marker
+ tracepoints are one such case, so this patch introduces
+ bp_static_marker_tracepoint and updates various spots to recognize it.
+
+ Convert ranged breakpoints to vtable ops
+ This converts ranged breakpoints to use vtable_breakpoint_ops. This
+ requires introducing a new ranged_breakpoint type, but this is
+ relatively simple because ranged breakpoints can only be created by
+ break_range_command.
+
+ Convert dprintf to vtable ops
+ This converts dprintf to use vtable_breakpoint_ops.
+
+ Convert Ada catchpoints to vtable ops
+ This converts Ada catchpoints to use vtable_breakpoint_ops.
+
+ Convert ordinary breakpoints to vtable ops
+ This converts "ordinary" breakpoint to use vtable_breakpoint_ops.
+ Recall that an ordinary breakpoint is both the kind normally created
+ by users, and also a base class used by other classes.
+
+ Change inheritance of dprintf
+ The dprintf breakpoint ops is mostly a copy of bpkt_breakpoint_ops,
+ except it's written out explicitly -- and, importantly, there's
+ nothing that bpkt_breakpoint_ops overrides that dprintf does not.
+ This changes dprintf to simply inherit directly, and updates struct
+ dprintf_breakpoint to reflect the change as well.
+
+ Convert momentary breakpoints to vtable ops
+ This converts momentary breakpoints to use vtable_breakpoint_ops.
+
+ Convert internal breakpoints to vtable ops
+ This converts internal breakpoints to use vtable_breakpoint_ops.
+
+ Convert break-catch-throw to vtable ops
+ This converts break-catch-throw.c to use vtable_breakpoint_ops.
+
+ Convert base breakpoints to vtable ops
+ This converts base breakpoints to use vtable_breakpoint_ops.
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Add some new subclasses of breakpoint
+ This adds a few new subclasses of breakpoint. The inheritance
+ hierarchy is chosen to reflect what's already present in
+ initialize_breakpoint_ops -- it mirrors the way that the _ops
+ structures are filled in.
+
+ This patch also changes new_breakpoint_from_type to create the correct
+ sublcass based on bptype. This is important due to the somewhat
+ inverted way in which create_breakpoint works; and in particular later
+ patches will change some of these entries.
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Convert tracepoints to vtable ops
+ This converts tracepoints to use vtable_breakpoint_ops.
+
+ Convert watchpoints to vtable ops
+ This converts watchpoints and masked watchpoints. to use
+ vtable_breakpoint_ops. For masked watchpoints, a new subclass must be
+ introduced, and watch_command_1 is changed to create one.
+
+ Convert break-catch-load to vtable ops
+ This converts break-catch-load.c to use vtable_breakpoint_ops.
+
+ Convert break-catch-fork to vtable ops
+ This converts break-catch-fork.c to use vtable_breakpoint_ops.
+
+ Convert break-catch-exec to vtable ops
+ This converts break-catch-exec.c to use vtable_breakpoint_ops.
+
+ Convert break-catch-syscall to vtable ops
+ This converts break-catch-syscall.c to use vtable_breakpoint_ops.
+
+ Convert break-catch-sig to use vtable ops
+ This converts break-catch-sig.c to use vtable_breakpoint_ops.
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Add a vtable-based breakpoint ops
+ This adds methods to struct breakpoint. Each method has a similar
+ signature to a corresponding function in breakpoint_ops, with the
+ exceptions of create_sals_from_location and create_breakpoints_sal,
+ which can't be virtual methods on breakpoint -- they are only used
+ during the construction of breakpoints.
+
+ Then, this adds a new vtable_breakpoint_ops structure and populates it
+ with functions that simply forward a call from breakpoint_ops to the
+ corresponding virtual method. These are all done with lambdas,
+ because they are just a stepping stone -- by the end of the series,
+ this structure will be deleted.
+
+2022-04-29 Tom Tromey <tom@tromey.com>
+
+ Return bool from breakpoint_ops::print_one
+ This changes breakpoint_ops::print_one to return bool, and updates all
+ the implementations and the caller. The caller is changed so that a
+ NULL check is no longer needed -- something that will be impossible
+ with a real method.
+
+ Delete some unnecessary wrapper functions
+ This patch deletes a few unnecessary wrapper functions from
+ breakpoint.c.
+
+ Add an assertion to clone_momentary_breakpoint
+ This adds an assertion to clone_momentary_breakpoint. This will
+ eventually be removed, but in the meantime is is useful for helping
+ convince oneself that momentary breakpoints will always use
+ momentary_breakpoint_ops. This understanding will help when cleaning
+ up the code later.
+
+ Boolify print_solib_event
+ Change print_solib_event to accept a bool parameter and update the
+ callers.
+
+ Move "catch load" to a new file
+ The "catch load" code is reasonably self-contained, and so this patch
+ moves it out of breakpoint.c and into a new file, break-catch-load.c.
+ One function from breakpoint.c, print_solib_event, now has to be
+ exposed, but this seems pretty reasonable.
+
+2022-04-29 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: assertion in gprofng/src/Expression.cc:139
+ gprofng/ChangeLog
+ 2022-04-28 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29102
+ * src/Expression.h: Remove fixupValues.
+ * src/Expression.cc (Expression::copy): Fix a bug.
+
+2022-04-29 Tom Tromey <tromey@adacore.com>
+
+ De-duplicate .gdb_index
+ This de-duplicates variables and types in .gdb_index, making the new
+ index closer to what gdb generated before the new DWARF scanner
+ series. Spot-checking the resulting index for gdb itself, it seems
+ that the new scanner picks up some extra symbols not detected by the
+ old one. I tested both the new and old versions of gdb on both new
+ and old versions of the index, and startup time in all cases is
+ roughly the same (it's worth noting that, for gdb itself, the index no
+ longer provides any benefit over the DWARF scanner). So, I think this
+ fixes the size issue with the new index writer.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-04-29 Tom Tromey <tromey@adacore.com>
+
+ Fix .debug_names regression with new indexer
+ At AdaCore, we run the internal gdb test suite in several modes,
+ including one using the .debug_names index. This caught a regression
+ caused by the new DWARF indexer.
+
+ First, the psymtabs-based .debug_names generator was completely wrong.
+ However, to avoid making the rewrite series even bigger (fixing the
+ writer will also require rewriting the .debug_names reader), it
+ attempted to preserve the weirdness.
+
+ However, this was not done properly. For example the old writer did
+ this:
+
+ - case STRUCT_DOMAIN:
+ - return DW_TAG_structure_type;
+
+ The new code, instead, simply preserves the actual DWARF tag -- but
+ this makes future lookups fail, because the .debug_names reader only
+ looks for DW_TAG_structure_type.
+
+ This patch attempts to revert to the old behavior in the writer.
+
+2022-04-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/infrun: make fetch_inferior_event restore thread if exited or signalled
+ Commit 152a1749566 ("gdb: prune inferiors at end of
+ fetch_inferior_event, fix intermittent failure of
+ gdb.threads/fork-plus-threads.exp") introduced some follow-fork-related
+ test failures, such as:
+
+ info inferiors^M
+ Num Description Connection Executable ^M
+ * 1 process 634972 1 (native) /home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork ^M
+ 2 process 634975 1 (native) /home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork ^M
+ (gdb) PASS: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: info inferiors
+ inferior 2^M
+ [Switching to inferior 2 [process 634975] (/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork)]^M
+ [Switching to thread 2.1 (Thread 0x7ffff7c9a740 (LWP 634975))]^M
+ #0 0x00007ffff7d7abf7 in _Fork () from /usr/lib/libc.so.6^M
+ (gdb) PASS: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: inferior 2
+ continue^M
+ Continuing.^M
+ [Inferior 2 (process 634975) exited normally]^M
+ [Switching to Thread 0x7ffff7c9a740 (LWP 634972)]^M
+ (gdb) PASS: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: continue until exit at continue unfollowed inferior to end
+ break callee^M
+ Breakpoint 2 at 0x555555555160: file /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c, line 9.^M
+ (gdb) FAIL: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: break callee
+
+ What happens here is:
+
+ - inferior 2 is selected
+ - we continue, leading to inferior 2's exit
+ - we set breakpoint, expect 2 locations, but only one location is
+ resolved
+
+ Reading between the lines, we understand that inferior 2 got pruned,
+ when it shouldn't have been.
+
+ The issue can be reproduced by hand with:
+
+ $ ./gdb -q --data-directory=data-directory testsuite/outputs/gdb.base/foll-fork/foll-fork -ex "set detach-on-fork off" -ex start -ex "next 2" -ex "inferior 2" -ex "set debug infrun"
+ ...
+ Temporary breakpoint 1, main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:14
+ 14 int v = 5;
+ [New inferior 2 (process 637627)]
+ [Thread debugging using libthread_db enabled]
+ Using host libthread_db library "/usr/lib/../lib/libthread_db.so.1".
+ 17 if (pid == 0) /* set breakpoint here */
+ [Switching to inferior 2 [process 637627] (/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork)]
+ [Switching to thread 2.1 (Thread 0x7ffff7c9a740 (LWP 637627))]
+ #0 0x00007ffff7d7abf7 in _Fork () from /usr/lib/libc.so.6
+ (gdb) continue
+ Continuing.
+ [infrun] clear_proceed_status_thread: 637627.637627.0
+ [infrun] proceed: enter
+ [infrun] proceed: addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT
+ [infrun] scoped_disable_commit_resumed: reason=proceeding
+ [infrun] start_step_over: enter
+ [infrun] start_step_over: stealing global queue of threads to step, length = 0
+ [infrun] operator(): step-over queue now empty
+ [infrun] start_step_over: exit
+ [infrun] proceed: start: resuming threads, all-stop-on-top-of-non-stop
+ [infrun] proceed: resuming 637627.637627.0
+ [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [637627.637627.0] at 0x7ffff7d7abf7
+ [infrun] do_target_resume: resume_ptid=637627.637627.0, step=0, sig=GDB_SIGNAL_0
+ [infrun] infrun_async: enable=1
+ [infrun] prepare_to_wait: prepare_to_wait
+ [infrun] proceed: end: resuming threads, all-stop-on-top-of-non-stop
+ [infrun] reset: reason=proceeding
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target native
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target native
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target native
+ [infrun] proceed: exit
+ [infrun] fetch_inferior_event: enter
+ [infrun] scoped_disable_commit_resumed: reason=handling event
+ [infrun] do_target_wait: Found 2 inferiors, starting at #1
+ [infrun] random_pending_event_thread: None found.
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: 637627.637627.0 [process 637627],
+ [infrun] print_target_wait_results: status->kind = EXITED, exit_status = 0
+ [infrun] handle_inferior_event: status->kind = EXITED, exit_status = 0
+ [Inferior 2 (process 637627) exited normally]
+ [infrun] stop_waiting: stop_waiting
+ [infrun] stop_all_threads: start: reason=presenting stop to user in all-stop, inf=-1
+ [infrun] stop_all_threads: pass=0, iterations=0
+ [infrun] stop_all_threads: 637624.637624.0 not executing
+ [infrun] stop_all_threads: pass=1, iterations=1
+ [infrun] stop_all_threads: 637624.637624.0 not executing
+ [infrun] stop_all_threads: done
+ [infrun] stop_all_threads: end: reason=presenting stop to user in all-stop, inf=-1
+ [Switching to Thread 0x7ffff7c9a740 (LWP 637624)]
+ [infrun] infrun_async: enable=0
+ [infrun] reset: reason=handling event
+ [infrun] maybe_set_commit_resumed_all_targets: not requesting commit-resumed for target native, no resumed threads
+ (gdb) [infrun] fetch_inferior_event: exit
+ (gdb) info inferiors
+ Num Description Connection Executable
+ * 1 process 637624 1 (native) /home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.base/foll-fork/foll-fork
+ (gdb) i th
+ Id Target Id Frame
+ * 1 Thread 0x7ffff7c9a740 (LWP 637624) "foll-fork" main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:17
+
+ After handling the EXITED event for inferior 2, inferior 2 should have
+ stayed the current inferior, which should have prevented it from getting
+ pruned. When debugging, we find that when getting at the
+ prune_inferiors call, the current inferior is inferior 1. Further
+ debugging shows that prior to the call to
+ clean_up_just_stopped_threads_fsms, the current inferior is inferior 2,
+ and after, it's inferior 1. Then, back in fetch_inferior_event, the
+ restore_thread object is disabled, due to:
+
+ /* If we got a TARGET_WAITKIND_NO_RESUMED event, then the
+ previously selected thread is gone. We have two
+ choices - switch to no thread selected, or restore the
+ previously selected thread (now exited). We chose the
+ later, just because that's what GDB used to do. After
+ this, "info threads" says "The current thread <Thread
+ ID 2> has terminated." instead of "No thread
+ selected.". */
+ if (!non_stop
+ && cmd_done
+ && ecs->ws.kind () != TARGET_WAITKIND_NO_RESUMED)
+ restore_thread.dont_restore ();
+
+ So in the end, inferior 1 stays current, and inferior 2 gets wrongfully
+ pruned.
+
+ I'd say clean_up_just_stopped_threads_fsms is the culprit here. It
+ actually attempts to restore the event_thread to be current at the end,
+ after the loop (I presume the current thread on entry is always supposed
+ to be the event thread). But in this case, the event is of kind EXITED,
+ and ecs->event_thread is not set, so the current inferior isn't
+ restored.
+
+ Fix that by using scoped_restore_current_thread. If there is no current
+ thread, scoped_restore_current_thread will still restore the current
+ inferior, and that's what we want.
+
+ Random note: the thread_info object for inferior 2's thread is never
+ freed. It is held (by refcount) by the restore_thread object in
+ fetch_inferior_event, while the inferior's thread list gets cleared, in
+ the exit event processing. When the refcount reaches 0 (when the
+ restore_thread object is destroyed), there's nothing that actually
+ deletes the thread_info object. And I think that nothing in GDB points
+ to it anymore, so it leaks. I don't want to fix that in this patch, but
+ thought it would be good to mention it, in case somebody has an idea for
+ how to fix that.
+
+ Change-Id: Ibc7df543e2c46aad5f3b9250b28c3fb5912be4e8
+
+2022-04-29 Pedro Alves <pedro@palves.net>
+
+ Slightly tweak and clarify target_resume's interface
+ The current target_resume interface is a bit odd & non-intuitive.
+ I've found myself explaining it a couple times the recent past, while
+ reviewing patches that assumed STEP/SIGNAL always applied to the
+ passed in PTID. It goes like this today:
+
+ - if the passed in PTID is a thread, then the step/signal request is
+ for that thread.
+
+ - otherwise, if PTID is a wildcard (all threads or all threads of
+ process), the step/signal request is for inferior_ptid, and PTID
+ indicates which set of threads run free.
+
+ Because GDB always switches the current thread to "leader" thread
+ being resumed/stepped/signalled, we can simplify this a bit to:
+
+ - step/signal are always for inferior_ptid.
+
+ - PTID indicates the set of threads that run free.
+
+ Still not ideal, but it's a minimal change and at least there are no
+ special cases this way.
+
+ That's what this patch does. It renames the PTID parameter to
+ SCOPE_PTID, adds some assertions to target_resume, and tweaks
+ target_resume's description. In addition, it also renames PTID to
+ SCOPE_PTID in the remote and linux-nat targets, and simplifies their
+ implementation a little bit. Other targets could do the same, but
+ they don't have to.
+
+ Change-Id: I02a2ec2ab3a3e9b191de1e9a84f55c17cab7daaf
+
+2022-04-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-28 Tom Tromey <tromey@adacore.com>
+
+ Fix libinproctrace.so build on PPC
+ The recent gnulib import caused a build failure of libinproctrace.so
+ on PPC:
+
+ alloc.c:(.text+0x20): undefined reference to `rpl_malloc'
+ alloc.c:(.text+0x70): undefined reference to `rpl_realloc'
+
+ This patch fixes the problem using the same workaround that was
+ previously used for free.
+
+2022-04-28 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Properly handle function pointer reference
+ Update
+
+ commit ebb191adac4ab45498dec0bfaac62f0a33537ba4
+ Author: H.J. Lu <hjl.tools@gmail.com>
+ Date: Wed Feb 9 15:51:22 2022 -0800
+
+ x86: Disallow invalid relocation against protected symbol
+
+ to allow function pointer reference and make sure that PLT entry isn't
+ used for function reference due to function pointer reference.
+
+ bfd/
+
+ PR ld/29087
+ * elf32-i386.c (elf_i386_scan_relocs): Don't set
+ pointer_equality_needed nor check non-canonical reference for
+ function pointer reference.
+ * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
+
+ ld/
+
+ PR ld/29087
+ * testsuite/ld-x86-64/x86-64.exp: Run PR ld/29087 tests.
+ * testsuite/ld-x86-64/protected-func-3.c: New file.
+
+2022-04-28 Tom Tromey <tom@tromey.com>
+
+ Check OBJF_NOT_FILENAME in DWARF index code
+ The DWARF index code currently uses 'stat' to see if an objfile
+ represents a real file. However, I think it's more correct to check
+ OBJF_NOT_FILENAME instead.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-04-28 Tom Tromey <tromey@adacore.com>
+
+ Remove "typedef enum ..."
+ I noticed a few spots in GDB that use "typedef enum". However, in C++
+ this isn't as useful, as the tag is automatically entered as a
+ typedef. This patch removes most uses of "typedef enum" -- the
+ exceptions being in some nat-* code I can't compile, and
+ glibc_thread_db.h, which I think is more or less a copy of some C code
+ from elsewhere.
+
+ Tested by rebuilding.
+
+2022-04-28 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: fix nullptr dereference in block::ranges()
+ This commit:
+
+ commit f5cb8afdd297dd68273d98a10fbfd350dff918d8
+ Date: Sun Feb 6 22:27:53 2022 -0500
+
+ gdb: remove BLOCK_RANGES macro
+
+ introduces a potential nullptr dereference in block::ranges, this is
+ breaking most tests, e.g. gdb.base/break.exp is failing for me.
+
+ In the above patch BLOCK_CONTIGUOUS_P is changed from this:
+
+ #define BLOCK_CONTIGUOUS_P(bl) (BLOCK_RANGES (bl) == nullptr \
+ || BLOCK_NRANGES (bl) <= 1)
+
+ to this:
+
+ #define BLOCK_CONTIGUOUS_P(bl) ((bl)->ranges ().size () == 0 \
+ || (bl)->ranges ().size () == 1)
+
+ So, before the commit we checked for the block ranges being nullptr,
+ but afterwards we just call block::ranges() in all cases.
+
+ The problem is that block::ranges() looks like this:
+
+ /* Return a view on this block's ranges. */
+ gdb::array_view<blockrange> ranges ()
+ { return gdb::make_array_view (m_ranges->range, m_ranges->nranges); }
+
+ where m_ranges is:
+
+ struct blockranges *m_ranges;
+
+ And so, we see that the nullptr check has been lost, and we might end
+ up dereferencing a nullptr.
+
+ My proposed fix is to move the nullptr check into block::ranges, and
+ return an explicit empty array_view if m_ranges is nullptr.
+
+ After this, everything seems fine again.
+
+2022-04-28 Stefan Liebler <stli@linux.ibm.com>
+
+ s390: Add DT_JMPREL pointing to .rela.[i]plt with static-pie
+ In static-pie case, there are IRELATIVE-relocs in
+ .rela.iplt (htab->irelplt), which will later be grouped
+ to .rela.plt. On s390, the IRELATIVE relocations are
+ always located in .rela.iplt - even for non-static case.
+ Ensure that DT_JMPREL, DT_PLTRELA, DT_PLTRELASZ is added
+ to the dynamic section even if htab->srelplt->size == 0.
+ See _bfd_elf_add_dynamic_tags in bfd/elflink.c.
+
+ bfd/
+ elf64-s390.c (elf_s390_size_dynamic_sections):
+ Enforce DT_JMPREL via htab->elf.dt_jmprel_required.
+
+2022-04-28 Stefan Liebler <stli@linux.ibm.com>
+
+ s390: Avoid dynamic TLS relocs in PIE
+ No dynamic relocs are needed for TLS defined in an executable, the
+ TP relative offset is known at link time.
+
+ Fixes
+ FAIL: Build pr22263-1
+
+ bfd/
+ PR ld/22263
+ * elf64-s390.c (elf_s390_tls_transition): Use bfd_link_dll
+ instead of bfd_link_pic for TLS.
+ (elf_s390_check_relocs): Likewise.
+ (allocate_dynrelocs): Likewise.
+ (elf_s390_relocate_section): Likewise.
+
+2022-04-28 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: impose an ordering on conflicting types
+ When two types conflict and they are not types which can have forwards
+ (say, two arrays of different sizes with the same name in two different
+ TUs) the CTF deduplicator uses a popularity contest to decide what to
+ do: the type cited by the most other types ends up put into the shared
+ dict, while the others are relegated to per-CU child dicts.
+
+ This works well as long as one type *is* most popular -- but what if
+ there is a tie? If several types have the same popularity count,
+ we end up picking the first we run across and promoting it, and
+ unfortunately since we are working over a dynhash in essentially
+ arbitrary order, this means we promote a random one. So multiple
+ runs of ld with the same inputs can produce different outputs!
+ All the outputs are valid, but this is still undesirable.
+
+ Adjust things to use the same strategy used to sort types on the output:
+ when there is a tie, always put the type that appears in a CU that
+ appeared earlier on the link line (and if there is somehow still a tie,
+ which should be impossible, pick the type with the lowest type ID).
+
+ Add a testcase -- and since this emerged when trying out extern arrays,
+ check that those work as well (this requires a newer GCC, but since all
+ GCCs that can emit CTF at all are unreleased this is probably OK as
+ well).
+
+ Fix up one testcase that has slight type ordering changes as a result
+ of this change.
+
+ libctf/ChangeLog:
+
+ * ctf-dedup.c (ctf_dedup_detect_name_ambiguity): Use
+ cd_output_first_gid to break ties.
+
+ ld/ChangeLog:
+
+ * testsuite/ld-ctf/array-conflicted-ordering.d: New test, using...
+ * testsuite/ld-ctf/array-char-conflicting-1.c: ... this...
+ * testsuite/ld-ctf/array-char-conflicting-2.c: ... and this.
+ * testsuite/ld-ctf/array-extern.d: New test, using...
+ * testsuite/ld-ctf/array-extern.c: ... this.
+ * testsuite/ld-ctf/conflicting-typedefs.d: Adjust for ordering
+ changes.
+
+2022-04-28 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: add a comment explaining how to use ctf_*open
+ Specifically, tell users what to pass to those functions that accept raw
+ section content, since it's fairly involved and easy to get wrong.
+ (.dynsym / .dynstr when CTF_F_DYNSTR is set, otherwise .symtab / .strtab).
+
+ include/ChangeLog:
+
+ * ctf-api.h (ctf_*open): Improve comment.
+
+2022-04-28 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: test suite problems
+ gprofng/ChangeLog
+ 2022-04-27 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29065
+ * testsuite/lib/Makefile.skel: Search parent dir for libs too.
+
+2022-04-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove BLOCKVECTOR_MAP macro
+ Replace with equivalent methods.
+
+ Change-Id: I4e56c76dfc363c1447686fb29c4212ea18b4dba0
+
+2022-04-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: constify addrmap_find
+ addrmap_find shouldn't need to modify the addrmap, so constify the
+ addrmap parameter. This helps for the following patch, where getting
+ the map of a const blockvector will return a const addrmap.
+
+ Change-Id: If670e425ed013724a3a77aab7961db50366dccb2
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCKVECTOR_BLOCK and BLOCKVECTOR_NBLOCKS macros
+ Replace with calls to blockvector::blocks, and the appropriate method
+ call on the returned array_view.
+
+ Change-Id: I04d1f39603e4d4c21c96822421431d9a029d8ddd
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_ENTRY_PC macro
+ Replace with equivalent method.
+
+ Change-Id: I0e033095e7358799930775e61028b48246971a7d
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_CONTIGUOUS_P macro
+ Replace with an equivalent method.
+
+ Change-Id: I60fd3be7b4c2601c2a74328f635fa48ed80eb7f5
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_RANGE macro
+ Replace with access through the block::ranges method.
+
+ Change-Id: I50f3ed433b997c9f354e49bc6583f540ae4b6121
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_NRANGES macro
+ Replace with range for loops.
+
+ Change-Id: Icbe04f9b6f9e6ddae2e15b2409c61f7a336bc3e3
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_RANGES macro
+ Replace with an equivalent method on struct block.
+
+ Change-Id: I6dcf13e9464ba8a08ade85c89e7329c300fd6c2a
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_RANGE_{START,END} macros
+ Replace with equivalent methods on blockrange.
+
+ Change-Id: I20fd8f624e0129782c36768291891e7582d77c74
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_NAMESPACE macro
+ Replace with equivalent methods.
+
+ Change-Id: If86b8cbdfb0f52e22c929614cd53e73358bab76a
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_MULTIDICT macro
+ Replace with equivalent methods.
+
+ Change-Id: If9a239c511a664f2a59fecb6d1cd579881b23dc2
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_SUPERBLOCK macro
+ Replace with equivalent methods.
+
+ Change-Id: I334a319909a50b5cc5570a45c38c70e10dc00630
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_FUNCTION macro
+ Replace with equivalent methods.
+
+ Change-Id: I31ec00f5bf85335c8b23d306ca0fe0b84d489101
+
+2022-04-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove BLOCK_{START,END} macros
+ Replace with equivalent methods.
+
+ Change-Id: I10a6c8a2a86462d9d4a6a6409a3f07a6bea66310
+
+2022-04-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-27 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Disable 2 tests with large memory requirement
+ gas/
+
+ * testsuite/gas/i386/i386.exp: Disable rept.
+
+ ld/
+
+ * testsuite/ld-x86-64/x86-64.exp: Disable pr17618.
+
+2022-04-27 Pedro Alves <pedro@palves.net>
+
+ Make gdb.base/parse_number.exp test all architectures
+ There are some subtle differences between architectures, like the size
+ of a "long" type, and this isn't currently accounted for in
+ gdb.base/parse_number.exp.
+
+ For example, on aarch64 a long type is 8 bytes, whereas a long type is
+ 4 bytes for x86_64. This causes the following FAIL's:
+
+ FAIL: gdb.base/parse_number.exp: lang=asm: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=auto: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=c: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=c++: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=fortran: p/x 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=fortran: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=go: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=local: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=minimal: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=objective-c: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=opencl: ptype 0xffffffffffffffff
+ FAIL: gdb.base/parse_number.exp: lang=pascal: ptype 0xffffffffffffffff
+
+ There are some fortran-specific divergences as well, where 32-bit
+ architectures show "unsigned int" for both 32-bit and 64-bit integers
+ and 64-bit architectures show "unsigned int" and "unsigned long" for
+ 32-bit and 64-bit integers.
+
+ There might be a bug that 32-bit fortran truncates 64-bit values to
+ 32-bit, given "p/x 0xffffffffffffffff" returns "0xffffffff".
+
+ Here's what we get for aarch64:
+
+ (gdb) ptype 0xffffffff
+ type = unsigned int
+ (gdb) ptype 0xffffffffffffffff
+ type = unsigned long
+ (gdb) p sizeof (0xffffffff)
+ $1 = 4
+ (gdb) p sizeof (0xffffffffffffffff)
+ quit
+ $2 = 8
+ (gdb) ptype 0xffffffff
+ type = unsigned int
+ (gdb) ptype 0xffffffffffffffff
+ type = unsigned long
+
+ And for arm:
+
+ (gdb) ptype 0xffffffff
+ type = unsigned int
+ (gdb) ptype 0xffffffffffffffff
+ quit
+ type = unsigned long long
+ (gdb) p sizeof (0xffffffff)
+ quit
+ $1 = 4
+ (gdb) p sizeof (0xffffffffffffffff)
+ quit
+ $2 = 8
+ (gdb) ptype 0xffffffff
+ type = unsigned int
+ (gdb) ptype 0xffffffffffffffff
+ type = unsigned long
+
+ This patch...
+
+ * Makes the testcase iterate over all architectures, thus covering all
+ the different combinations of types/sizes every time.
+
+ * Adjusts the expected values and types based on the sizes of long
+ long, long and int.
+
+ A particularly curious architecture is s12z, which has 32-bit long
+ long, and thus no way to represent 64-bit integers in C-like
+ languages.
+
+ Co-Authored-By: Luis Machado <luis.machado@arm.com>
+ Change-Id: Ifc0ccd33e7fd3c7585112ff6bebe7d266136768b
+
+2022-04-27 Tom Tromey <tromey@adacore.com>
+
+ Fix gdbserver build for x86-64 Windows
+ I broke the gdbserver build on x86-64 Windows a little while back.
+ Previously, I could not build this configuration, but today I found
+ out that if I configure with:
+
+ --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32
+
+ using the Fedora 34 tools, it will in fact build. I'm not certain,
+ but maybe the gnulib update helped with this.
+
+ This patch fixes the build. I'm checking it in.
+
+2022-04-27 John Baldwin <jhb@FreeBSD.org>
+
+ Create pseudo sections for NT_ARM_TLS notes on FreeBSD.
+ bfd/ChangeLog:
+
+ * elf.c (elfcore_grok_freebsd_note): Handle NT_ARM_TLS notes.
+
+2022-04-27 Christophe Lyon <christophe.lyon@arm.com>
+
+ gdb/arm: Extend arm_m_addr_is_magic to support FNC_RETURN, add unwind-secure-frames command
+ This patch makes use of the support for several stack pointers
+ introduced by the previous patch to switch between them as needed
+ during unwinding.
+
+ It introduces a new 'unwind-secure-frames' arm command to enable/disable
+ mode switching during unwinding. It is enabled by default.
+
+ It has been tested using an STM32L5 board (with cortex-m33) and the
+ sample applications shipped with the STM32Cube development
+ environment: GTZC_TZSC_MPCBB_TrustZone in
+ STM32CubeL5/Projects/NUCLEO-L552ZE-Q/Examples/GTZC.
+
+ The test consisted in setting breakpoints in various places and check
+ that the backtrace is correct: SecureFault_Callback (Non-secure mode),
+ __gnu_cmse_nonsecure_call (before and after the vpush instruction),
+ SecureFault_Handler (Secure mode).
+
+ This implies that we tested only some parts of this patch (only MSP*
+ were used), but remaining parts seem reasonable.
+
+2022-04-27 Christophe Lyon <christophe.lyon@arm.com>
+
+ gdb/arm: Add support for multiple stack pointers on Cortex-M
+ Armv8-M architecture with Security extension features four stack pointers
+ to handle Secure and Non-secure modes.
+
+ This patch adds support to switch between them as needed during
+ unwinding, and replaces all updates of cache->prev_sp with calls to
+ arm_cache_set_prev_sp.
+
+2022-04-27 Christophe Lyon <christophe.lyon@arm.com>
+
+ gdb/arm: Introduce arm_cache_init
+ This patch is a preparation for the rest of the series and adds two
+ arm_cache_init helper functions. It updates every place that updates
+ cache->saved_regs to call the helper instead.
+
+ gdb/arm: Define MSP and PSP registers for M-Profile
+ This patch removes the hardcoded access to PSP in
+ arm_m_exception_cache() and relies on the definition with the XML
+ descriptions.
+
+2022-04-27 Christophe Lyon <christophe.lyon@arm.com>
+
+ gdb/arm: Fix prologue analysis to support vpush
+ While working on adding support for Non-secure/Secure modes unwinding,
+ I noticed that the prologue analysis lacked support for vpush, which
+ is used for instance in the CMSE stub routine.
+
+ This patch updates thumb_analyze_prologue accordingly, adding support
+ for vpush of D-registers.
+
+2022-04-27 Enze Li <lienze2010@hotmail.com>
+
+ gdb/testsuite: fix FAIL in gdb.base/clear_non_user_bp.exp
+ Tom and Simon feedback that there is a test failing in this commit:
+
+ commit a5c69b1e49bae4d0dcb20f324cebb310c63495c6
+ Date: Sun Apr 17 15:09:46 2022 +0800
+
+ gdb: fix using clear command to delete non-user breakpoints(PR cli/7161)
+
+ Then, I reproduced the same fail with Ubuntu 20.04 as Simon said, and I
+ fixed the nit in this patch. The root of the problem is not correctly
+ matching the presentation of internal breakpoints.
+
+ In addition, as Pedro pointed out, the original testcase is not portable
+ in some methods, so this patch fixes this issue and some other
+ improvements.
+
+ Tested on x86_64 ubuntu 20.04.4 and openSUSE Tumbleweed(VERSION_ID="20220425").
+
+2022-04-27 Jan Beulich <jbeulich@suse.com>
+
+ x86: VFPCLASSSH is Evex.LLIG
+ This also was mistakenly flagged as Evex.128.
+
+2022-04-27 Nick Clifton <nickc@redhat.com>
+
+ Fix potential buffer overruns when creating DLLs.
+ PR 29006
+ * pe-dll.c (make_head): Use asprintf to allocate and populate a
+ buffer containing the temporary name.
+ (make_tail, make_one, make_singleton_name_thunk): Likewise.
+ (make_import_fixup_mark, make_import_fixup_entry): Likewise.
+ (make_runtime_pseudo_reloc): Likewise.
+ (pe_create_runtime_relocator_reference): Likewise.
+
+2022-04-27 Alan Modra <amodra@gmail.com>
+
+ Revert pr29072 lto test changes
+ Revert commit 65daf5bed6 testsuite changes in ld-plugin/. -z isn't
+ supported for non-ELF targets, and isn't needed since we now prune the
+ exec stack warning (commit 333cd559ba).
+
+ PR 29072
+
+2022-04-27 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: use with_cwd where possible
+ I learned about with_cwd today. I spotted a few spots that could use
+ it, to make the code more robust.
+
+ Change-Id: Ia23664cb827f25e79d31948e0c006a8dc61c33e1
+
+2022-04-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-26 Carl Love <cel@us.ibm.com>
+
+ GDB PowerPC record test cases for ISA 2.06 and ISA 3.1
+ This patch adds PowerPC specific tests to verify recording of various
+ instructions. The first test case checks the ISA 2.06 lxvd2x instruction.
+ The second test case tests several of the ISA 3.01 instructions. Specifically,
+ it checks the word and prefixed instructions and some of the Matrix
+ Multiply Assist (MMA) instructions.
+
+ The patch has been run on both Power 10 and Power 9 to verify the ISA
+ 2.06 test case runs on both platforms without errors. The ISA 3.1 test
+ runs without errors on Power 10 and is skipped as expected on Power 9.
+
+2022-04-26 Carl Love <cel@us.ibm.com>
+
+ Add recording support for the ISA 3.1 PowerPC instructions.
+ This patch adds support for the PowerPC ISA 3.1 instructions to the PowerPC
+ gdb instruction recording routines. Case statement entries are added to a
+ number of the existing routines for recording the 32-bit word instructions.
+ A few new functions were added to handle the new word instructions. The 64-bit
+ prefix instructions are all handled by a set of new routines. The function
+ ppc_process_prefix_instruction() is the primary function to handle the
+ prefixed instructions. It calls additional functions to handle specific
+ sets of prefixed instructions. These new functions are:
+ ppc_process_record_prefix_vsx_d_form(),
+ ppc_process_record_prefix_store_vsx_ds_form(),
+ ppc_process_record_prefix_op34(),
+ ppc_process_record_prefix_op33(),
+ ppc_process_record_prefix_op32(),
+ ppc_process_record_prefix_store(),
+ ppc_process_record_prefix_op59_XX3(),
+ ppc_process_record_prefix_op42().
+
+2022-04-26 Tom Tromey <tromey@adacore.com>
+
+ Handle encoding failures in Windows thread names
+ Internally at AdaCore, we noticed that the new Windows thread name
+ code could fail. First, it might return a zero-length string, but in
+ gdb conventions it should return nullptr instead. Second, an encoding
+ failure could wind up showing replacement characters to the user; this
+ is confusing and not useful; it's better to recognize such errors and
+ simply discard the name. This patch makes both of these changes.
+
+2022-04-26 H.J. Lu <hjl.tools@gmail.com>
+
+ i386: Pass -z noexecstack to linker tests
+ PR ld/29072
+ * testsuite/ld-i386/i386.exp: Pass -z noexecstack to gotpc1
+ and property-6.
+
+2022-04-26 John Baldwin <jhb@FreeBSD.org>
+
+ bsd-kvm: Fix build after recent changes to path handling functions.
+ Convert bsd_kvm_corefile and the local filename in bsd_kvm_open to
+ std::string rather than simple char * pointers freed by xfree.
+
+2022-04-26 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make some random Python files Python 3-compatible
+ I noticed that these files failed to format with Black, because they use
+ print without parenthesis (which isn't Python 3 compatible).
+
+ I don't know if these files are still relevant, but the change is
+ trivial, so here it is.
+
+ Change-Id: I116445c2b463486016f824d32effffc915b60766
+
+2022-04-26 Carl Love <cel@us.ibm.com>
+
+ PowerPC: Update expected floating point output for gdb.arch/altivec-regs.exp and gdb.arch/vsx-regs.exp
+ The format for printing the floating point values was changed by commit:
+
+ commit 56262a931b7ca8ee3ec9104bc7e9e0b40cf3d64e
+ Author: Tom Tromey <tromey@adacore.com>
+ Date: Thu Feb 17 13:43:59 2022 -0700
+
+ Change how "print/x" displays floating-point value
+
+ Currently, "print/x" will display a floating-point value by first
+ casting it to an integer type. This yields weird results like:
+
+ (gdb) print/x 1.5
+ $1 = 0x1
+ ...
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16242
+
+ The above change results in 417 regression test failures since the expected
+ Power vector register output no longer match.
+
+ This patch updates the expected Altivec floating point register prints to
+ the hexadecimal format for both big endian and little endian systems. The
+ patch also fixes a formatting isue with the decimal_vector expected value
+ assign statements.
+
+ The expected VSX vector_register1, vector_register1_vr, vector_register2,
+ vector_register2_vr variables are updated to include the new float128 entry.
+ Additionally, the comment in the vsx expect file about the initialization
+ of the vs registers is updated.
+
+ The patch has been tested on Power 10, Power 8 LE and Power 8 BE.
+
+2022-04-26 John Baldwin <jhb@FreeBSD.org>
+
+ gdbsupport/pathstuff.h: #include <array> explicitly for std::array<>
+ This fixes build breakage using clang with libc++ on FreeBSD where
+ std::array<> is not yet declared when used by the path_join variadic
+ function template.
+
+2022-04-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-25 Tom Tromey <tromey@adacore.com>
+
+ Do not put linkage names into .gdb_index
+ This changes the .gdb_index writer to skip linkage names. This was
+ always done historically (though somewhat implicitly).
+
+2022-04-25 Nick Clifton <nickc@redhat.com>
+
+ Emit a note warning the user that creating an executable stack because of a missing .note.GNU-stack section is deprecated.
+ PR 29072
+ bfd * elflink.c (bfd_elf_size_dynamic_sections): Display a note to the
+ user that the current ehaviour of creating an executable stack
+ because of a missing .note.GNU-stack section is deprecated and
+ will be changed in a future release.
+
+ binutils* testsuite/lib/binutils-common.exp (prune_warnings_extra): Filter
+ out notes about the executable stacjk behaviour beign deprecated.
+
+ ld * testsuite/ld-elf/pr29072.b.warn: Update to include the note
+ about the linker's behaviour being depreccated.
+
+2022-04-25 rupothar <rupesh.potharla@amd.com>
+
+ gdb/fortran: Support for assumed rank zero
+ If a variable is passed to function in FORTRAN as an argument the
+ variable is treated as an array with rank zero. GDB currently does
+ not support the case for assumed rank 0. This patch provides support
+ for assumed rank 0 and updates the testcase as well.
+
+ Without patch:
+ Breakpoint 1, arank::sub1 (a=<error reading variable:
+ failed to resolve dynamic array rank>) at assumedrank.f90:11
+ 11 PRINT *, RANK(a)
+ (gdb) p a
+ failed to resolve dynamic array rank
+ (gdb) p rank(a)
+ failed to resolve dynamic array rank
+
+ With patch:
+ Breakpoint 1, arank::sub1 (a=0) at assumedrank.f90:11
+ 11 PRINT *, RANK(a)
+ (gdb) p a
+ $1 = 0
+ (gdb) p rank(a)
+ $2 = 0
+
+2022-04-25 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/infrun: assert !step_over_info_valid_p in restart_threads
+ While working in gdb/infrun.c:restart_threads, I was wondering what are
+ the preconditions to call the function. It seems to me that
+ !step_over_info_valid_p should be a precondition (i.e. if we are doing
+ an inline step over breakpoint, we do not want to resume non stepping
+ threads as one of them might miss the breakpoint which is temporally
+ disabled).
+
+ To convince myself that this is true, I have added an assertion to
+ enforce this, and got one regression in the testsuite:
+
+ FAIL: gdb.base/step-over-syscall.exp: vfork: displaced=off: single step over vfork (GDB internal error)
+
+ This call to restart_threads originates from handle_vfork_done which
+ does not check if a step over is active when restarting other threads:
+
+ if (target_is_non_stop_p ())
+ {
+ scoped_restore_current_thread restore_thread;
+
+ insert_breakpoints ();
+ restart_threads (event_thread, event_thread->inf);
+ start_step_over ();
+ }
+
+ In this patch, I propose to:
+ - Call start_step_over before restart_threads. If a step over is already
+ in progress (as it is the case in the failing testcase),
+ start_step_over return immediately, and there is no point in restarting
+ all threads just to stop them right away for a step over breakpoint.
+ - Only call restart_threads if no step over is in progress at this
+ point.
+
+ In this patch, I also propose to keep the assertion in restart_threads
+ to help enforce this precondition, and state it explicitly.
+
+ I have also checked all other places which call restart_threads, and
+ they all seem to check that there is no step over currently active
+ before doing the call.
+
+ As for infrun-related things, I am never completely sure I did not miss
+ something. So as usual, all feedback and thoughts are very welcome.
+
+ Tested on x86_64-linux-gnu.
+
+ Change-Id: If5f5f98ec4cf9aaeaabb5e3aa88ae6ffd70d4f37
+
+2022-04-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-24 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: move setbuf calls out of gdb_readline_no_editing_callback
+ After this commit:
+
+ commit d08cbc5d3203118da5583296e49273cf82378042
+ Date: Wed Dec 22 12:57:44 2021 +0000
+
+ gdb: unbuffer all input streams when not using readline
+
+ Issues were reported with some MS-Windows hosts, see the thread
+ starting here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-March/187004.html
+
+ Filed in bugzilla as: PR mi/29002
+
+ The problem seems to be that calling setbuf on terminal file handles
+ is not always acceptable, see this mail for more details:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-April/187310.html
+
+ This commit does two things, first moving the setbuf calls out of
+ gdb_readline_no_editing_callback so that we don't end up calling
+ setbuf so often.
+
+ Then, for MS-Windows hosts, we don't call setbuf for terminals, this
+ appears to resolve the issues that have been reported.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29002
+
+2022-04-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-22 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: handle_no_resumed: only update thread list of event target
+ When running:
+
+ $ make check TESTS="gdb.multi/multi-re-run.exp" RUNTESTFLAGS="--target_board=native-gdbserver"
+
+ I get:
+
+ target remote localhost:2347^M
+ Remote debugging using localhost:2347^M
+ Reading symbols from /lib64/ld-linux-x86-64.so.2...^M
+ Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/ld-2.31.so...^M
+ 0x00007ffff7fd0100 in _start () from /lib64/ld-linux-x86-64.so.2^M
+ (gdb) continue^M
+ Continuing.^M
+ Cannot execute this command while the target is running.^M
+ Use the "interrupt" command to stop the target^M
+ and then try again.^M
+ (gdb) FAIL: gdb.multi/multi-re-run.exp: re_run_inf=1: iter=1: runto: run to all_started
+
+ The test does:
+
+ - Connect to a remote target with inferior 2, continue and stop on the
+ all_started function
+ - Connect to a separate remote target / GDBserver instance with inferior 1,
+ continue and (expect to) stop on the all_started function
+
+ The failure seen above happens when trying to continue inferior 1.
+
+ What happens is:
+
+ - GDB tells inferior 1's remote target to continue
+ - We go into fetch_inferior_event, try to get an event at random from
+ the targets
+ - do_target_wait happens to pick inferior 2's target
+ - That target return TARGET_WAITKIND_NO_RESUMED, which makes sense:
+ inferior 2 is stopped, that target has no resumed thread
+ - handle_no_resumed tries to update the thread list of all targets:
+
+ for (auto *target : all_non_exited_process_targets ())
+ {
+ switch_to_target_no_thread (target);
+ update_thread_list ();
+ }
+
+ - When trying to update the thread list of inferior 1's target, it hits
+ the "Cannot execute this command while the target is running" error.
+ This target is working in "remote all-stop" mode, and it is currently
+ waiting for a stop reply, so it can't send packets to update the
+ thread list at this time.
+
+ To handle the problem described in the comment in handle_no_resumed, I
+ don't think it is necessary to update the thread list of all targets,
+ but only the event target. That comment describes a kind of race
+ condition where some target reports a breakpoint hit for a thread and
+ then its last remaining resumed thread exits, so sends a "no resumed"
+ event. If we ended up resuming the thread that hit a breakpoint, we
+ want to ignore the "no resumed" and carry on.
+
+ But I don't really see why we need to update the thread list on the
+ other targets. I can't really articulate this, it's more a gut feeling,
+ maybe I just fail to imagine the situation where this is needed. But
+ here is the patch anyway, so we can discuss it. The patch changes
+ handle_no_resumed to only update the thread list of the event target.
+ This fixes the test run shown above.
+
+ The way I originally tried to fix this was to make
+ remote_target::update_thread_list return early if the target is
+ currently awaiting a stop reply, since there's no way it can update the
+ thread list at that time. But that felt more like papering over the
+ problem. I then thought that we probably shouldn't be asking the target
+ to update the thread list unnecessarily.
+
+ Change-Id: Ide3df22b4f556478e155ad1c67ad4b4fe7c26a58
+
+2022-04-22 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver/linux: free process_info_private and arch_process_info when failing to attach
+ Running
+
+ $ ../gdbserver/gdbserver --once --attach :1234 539436
+
+ with ASan while /proc/sys/kernel/yama/ptrace_scope is set to 1 (prevents
+ attaching) shows that we fail to free some platform-specific objects
+ tied to the process_info (process_info_private and arch_process_info):
+
+ Direct leak of 32 byte(s) in 1 object(s) allocated from:
+ #0 0x7f6b558b3fb9 in __interceptor_calloc /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:154
+ #1 0x562eaf15d04a in xcalloc /home/simark/src/binutils-gdb/gdbserver/../gdb/alloc.c:100
+ #2 0x562eaf251548 in xcnew<process_info_private> /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/poison.h:122
+ #3 0x562eaf22810c in linux_process_target::add_linux_process_no_mem_file(int, int) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:426
+ #4 0x562eaf22d33f in linux_process_target::attach(unsigned long) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:1132
+ #5 0x562eaf1a7222 in attach_inferior /home/simark/src/binutils-gdb/gdbserver/server.cc:308
+ #6 0x562eaf1c1016 in captured_main /home/simark/src/binutils-gdb/gdbserver/server.cc:3949
+ #7 0x562eaf1c1d60 in main /home/simark/src/binutils-gdb/gdbserver/server.cc:4084
+ #8 0x7f6b552f630f in __libc_start_call_main (/usr/lib/libc.so.6+0x2d30f)
+
+ Indirect leak of 56 byte(s) in 1 object(s) allocated from:
+ #0 0x7f6b558b3fb9 in __interceptor_calloc /usr/src/debug/gcc/libsanitizer/asan/asan_malloc_linux.cpp:154
+ #1 0x562eaf15d04a in xcalloc /home/simark/src/binutils-gdb/gdbserver/../gdb/alloc.c:100
+ #2 0x562eaf2a0d79 in xcnew<arch_process_info> /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/poison.h:122
+ #3 0x562eaf295e2c in x86_target::low_new_process() /home/simark/src/binutils-gdb/gdbserver/linux-x86-low.cc:723
+ #4 0x562eaf22819b in linux_process_target::add_linux_process_no_mem_file(int, int) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:428
+ #5 0x562eaf22d33f in linux_process_target::attach(unsigned long) /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:1132
+ #6 0x562eaf1a7222 in attach_inferior /home/simark/src/binutils-gdb/gdbserver/server.cc:308
+ #7 0x562eaf1c1016 in captured_main /home/simark/src/binutils-gdb/gdbserver/server.cc:3949
+ #8 0x562eaf1c1d60 in main /home/simark/src/binutils-gdb/gdbserver/server.cc:4084
+ #9 0x7f6b552f630f in __libc_start_call_main (/usr/lib/libc.so.6+0x2d30f)
+
+ Those objects are deleted by linux_process_target::mourn, but that is
+ not called if we fail to attach, we only call remove_process. I
+ initially fixed this by making linux_process_target::attach call
+ linux_process_target::mourn on failure (before calling error). But this
+ isn't done anywhere else (including in GDB) so it would just be
+ confusing to do things differently here.
+
+ Instead, add a linux_process_target::remove_linux_process helper method
+ (which calls remove_process), and call that instead of remove_process in
+ the Linux target. Move the free-ing of the extra data from the mourn
+ method to that new method.
+
+ Change-Id: I277059a69d5f08087a7f3ef0b8f1792a1fcf7a85
+
+2022-04-22 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: handle bracketed-paste-mode and EOF correctly
+ This commit replaces an earlier commit that worked around the issues
+ reported in bug PR gdb/28833.
+
+ The previous commit just implemented a work around in order to avoid
+ the worst results of the bug, but was not a complete solution. The
+ full solution was considered too risky to merge close to branching GDB
+ 12. This improved fix has been applied after GDB 12 branched. See
+ this thread for more details:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-March/186391.html
+
+ This commit replaces this earlier commit:
+
+ commit 74a159a420d4b466cc81061c16d444568e36740c
+ Date: Fri Mar 11 14:44:03 2022 +0000
+
+ gdb: work around prompt corruption caused by bracketed-paste-mode
+
+ Please read that commit for a full description of the bug, and why is
+ occurs.
+
+ In this commit I extend GDB to use readline's rl_deprep_term_function
+ hook to call a new function gdb_rl_deprep_term_function. From this
+ new function we can now print the 'quit' message, this replaces the
+ old printing of 'quit' in command_line_handler. Of course, we only
+ print 'quit' in gdb_rl_deprep_term_function when we are handling EOF,
+ but thanks to the previous commit (to readline) we now know when this
+ is.
+
+ There are two aspects of this commit that are worth further
+ discussion, the first is in the new gdb_rl_deprep_term_function
+ function. In here I have used a scoped_restore_tmpl to disable the
+ readline global variable rl_eof_found.
+
+ The reason for this is that, in rl_deprep_terminal, readline will
+ print an extra '\n' character before printing the escape sequence to
+ leave bracketed paste mode. You might then think that in the
+ gdb_rl_deprep_term_function function, we could simply print "quit" and
+ rely on rl_deprep_terminal to print the trailing '\n'. However,
+ rl_deprep_terminal only prints the '\n' when bracketed paste mode is
+ on. If the user has turned this feature off, no '\n' is printed.
+ This means that in gdb_rl_deprep_term_function we need to print
+ "quit" when bracketed paste mode is on, and "quit\n" when bracketed
+ paste mode is off.
+
+ We could absolutely do that, no problem, but given we know how
+ rl_deprep_terminal is implemented, it's easier (I think) to just
+ temporarily clear rl_eof_found, this prevents the '\n' being printed
+ from rl_deprep_terminal, and so in gdb_rl_deprep_term_function, we can
+ now always print "quit\n" and this works for all cases.
+
+ The second issue that should be discussed is backwards compatibility
+ with older versions of readline. GDB can be built against the system
+ readline, which might be older than the version contained within GDB's
+ tree. If this is the case then the system readline might not contain
+ the fixes needed to support correctly printing the 'quit' string.
+
+ To handle this situation I have retained the existing code in
+ command_line_handler for printing 'quit', however, this code is only
+ used now if the version of readline we are using doesn't not include
+ the required fixes. And so, if a user is using an older version of
+ readline, and they have bracketed paste mode on, then they will see
+ the 'quit' sting printed on the line below the prompt, like this:
+
+ (gdb)
+ quit
+
+ I think this is the best we can do when someone builds GDB against an
+ older version of readline.
+
+ Using a newer version of readline, or the patched version of readline
+ that is in-tree, will now give a result like this in all cases:
+
+ (gdb) quit
+
+ Which is what we want.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833
+
+2022-04-22 Andrew Burgess <aburgess@redhat.com>
+
+ readline: back-port changes needed to properly detect EOF
+ This commit is a partial back-port of this upstream readline commit:
+
+ commit 002d31aa5f5929eb32d0e0e2e8b8d35d99e59961
+ Author: Chet Ramey <chet.ramey@case.edu>
+ Date: Thu Mar 3 11:11:47 2022 -0500
+
+ add rl_eof_found to public API; fix pointer aliasing problems \
+ with history-search-backward; fix a display problem with \
+ runs of invisible characters at the end of a physical \
+ screen line
+
+ I have only pulled in the parts of this commit that relate to the new
+ rl_eof_found global, and the RL_STATE_EOF state flag. These changes
+ are needed in order to fix PR cli/28833, and are discussed in this
+ thread to the bug-readline mailing list:
+
+ https://lists.gnu.org/archive/html/bug-readline/2022-02/msg00021.html
+
+ The above commit is not yet in any official readline release, but my
+ hope is that now it has been merged into the readline tree it should
+ be safe enough to back port this fix to GDB's tree.
+
+ At some point in the future we will inevitably want to roll forward
+ the version of readline that we maintain in the binutils-gdb
+ repository. When that day comes the changes in this commit can be
+ replaced with the latest upstream readline code, as I have not changed
+ the meaning of this code at all from what is in upstream readline.
+
+ This commit alone does not fix the PR cli/28833 issue, for that see
+ the next commit, which changes GDB itself.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833
+
+2022-04-22 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: improved EOF handling when using readline 7
+ In this commit:
+
+ commit a6b413d24ccc5d76179bab866834e11fd6fec294
+ Date: Fri Mar 11 14:44:03 2022 +0000
+
+ gdb: work around prompt corruption caused by bracketed-paste-mode
+
+ a change was made to GDB to work around bug PR gdb/28833. The
+ consequence of this work around is that, when bracketed paste mode is
+ enabled in readline, and GDB is quit by sending EOF, then the output
+ will look like this:
+
+ (gdb)
+ quit
+
+ The ideal output, which is what we get when bracketed paste mode is
+ off, is this:
+
+ (gdb) quit
+
+ The reason we need to make this change is explained in the original
+ commit referenced above. What isn't mentioned in the above commit, is
+ that the change that motivated this work around was only added in
+ readline 8, older versions of readline don't require the change.
+
+ In later commits in this series I will add a fix to GDB's in-tree copy
+ of readline (this fix is back-ported from upstream readline), and then
+ I will change GDB so that, when using the (patched) in-tree readline,
+ we can have the ideal output in all cases.
+
+ However, GDB can be built against the system readline. When this is
+ done, and the system readline is version 8, then we will still have to
+ use the work around (two line) style output.
+
+ But, if GDB is built against the system readline, and the system
+ readline is an older version 7 readline, then there's no reason why we
+ can't have the ideal output, after all, readline 7 doesn't include the
+ change that we need to work around.
+
+ This commit changes GDB so that, when using readline 7 we get the
+ ideal output in all cases. This change is trivial (a simple check
+ against the readline version number) so I think this should be fine to
+ include.
+
+ For testing this commit, you need to configure GDB including the
+ '--with-system-readline' flag, and build GDB on a system that uses
+ readline 7, for example 'Ubuntu 18.04'. Then run the test
+ 'gdb.base/eof-exit.exp', you should expect everything to PASS.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833
+
+2022-04-22 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: prune inferiors at end of fetch_inferior_event, fix intermittent failure of gdb.threads/fork-plus-threads.exp
+ This test sometimes fail like this:
+
+ info threads^M
+ Id Target Id Frame ^M
+ 11.12 process 2270719 Couldn't get registers: No such process.^M
+ (gdb) FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: no threads left
+ [Inferior 11 (process 2270719) exited normally]^M
+ info inferiors^M
+ Num Description Connection Executable ^M
+ * 1 <null> /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/fork-plus-threads/fork-plus-threads ^M
+ 11 <null> /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/fork-plus-threads/fork-plus-threads ^M
+ (gdb) FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: only inferior 1 left (the program exited)
+
+ I can get it to fail quite reliably by pinning it to a core:
+
+ $ taskset -c 5 make check TESTS="gdb.threads/fork-plus-threads.exp"
+
+ The previous attempt at fixing this was:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-October/182846.html
+
+ What we see is part due to a possible unfortunate ordering of events
+ given by the kernel, and what could be considered a bug in GDB.
+
+ The test program makes a number of forks, waits them all, then exits.
+ Most of the time, GDB will get and process the exit event for inferior 1
+ after the exit events of all the children. But this is not guaranteed.
+ After the last child exits and is waited by the parent, the parent can
+ exit quickly, such that GDB collects from the kernel the exit events for
+ the parent and that child at the same time. It then chooses one event
+ at random, which can be the event for the parent. This will result in
+ the parent appearing to exit before its child. There's not much we can
+ do about it, so I think we have to adjust the test to cope.
+
+ After expect has seen the "exited normally" notification for inferior 1,
+ it immediately does an "info thread" that it expects to come back empty.
+ But at this point, GDB might not have processed inferior 11's (the last
+ child) exit event, so it will look like there is still a thread. Of
+ course that thread is dead, we just don't know it yet. But that makes
+ the "no thread" test fail. If the test waited just a bit more for the
+ "exited normally" notification for inferior 11, then the list of threads
+ would be empty.
+
+ So, first change, make the test collect all the "exited normally"
+ notifications for all inferiors before proceeding, that should ensure we
+ see an empty thread list. That would fix the first FAIL above.
+
+ However, we would still have the second FAIL, as we expect inferior 11
+ to not be there, it should have been deleted automatically. Inferior 11
+ is normally deleted when prune_inferiors is called. That is called by
+ normal_stop, which is only called by fetch_inferior_event only if the
+ event thread completed an execution command FSM (thread_fsm). But the
+ FSM for the continue command completed when inferior 1 exited. At that
+ point inferior 11 was not prunable, as it still had a thread. When
+ inferior 11 exits, prune_inferiors is not called.
+
+ I think that can be considered a GDB bug. From the user point of view,
+ there's no reason why in one case inferior 11 would be deleted and not
+ in the other case.
+
+ This patch makes the somewhat naive change to call prune_inferiors in
+ fetch_inferior_event, so that it is called in this case. It is placed
+ at this particular point in the function so that it is called after the
+ user inferior / thread selection is restored. If it was called before
+ that, inferior 11 wouldn't be pruned, because it would still be the
+ current inferior.
+
+ Change-Id: I48a15d118f30b1c72c528a9f805ed4974170484a
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26272
+
+2022-04-22 Tom Tromey <tromey@adacore.com>
+
+ Un-break the coff-pe-read.c build
+ This fixes a build breakage in my recent coff-pe-read.c change.
+
+ I'm sorry about this. I don't understand how it happened, because I
+ definitely built and tested the series on Windows, and I didn't change
+ it before pushing. Something must have gone wrong on the Windows
+ build, but I don't know what. I'll investigate and and re-test to be
+ sure.
+
+2022-04-22 Tom Tromey <tromey@adacore.com>
+
+ More const use and alloca avoidance in coff-pe-read.c
+ This changes another function in coff-pe-read.c to use 'const' more,
+ and to avoid the use of alloca by instead using std::string.
+
+ Use std::string in coff-pe-read.c
+ coff-pe-read.c uses xsnprintf and alloca, but using std::string is
+ better, and just as easy. In general I think alloca is something to
+ be avoided, and unbounded uses especially so.
+
+ Remove a const-removing cast from coff-pe-read.c
+ coff-pe-read.c casts away const at one spot, but this is easily
+ replaced by calling bfd_get_filename directly in a couple of debugging
+ prints.
+
+ Simplify BFD section iteration in coff-pe-read.c
+ coff-pe-read.c iterates over BFD sections using bfd_map_over_sections,
+ but it's much simpler to use a for-each loop. This allows for the
+ removal of helper functions and types.
+
+2022-04-22 Tom Tromey <tromey@adacore.com>
+
+ Fix method naming bug in new DWARF indexer
+ Pedro pointed out that gdb-add-index is much slower with the new DWARF
+ indexer. He also noticed that, in some cases, the generated
+ .gdb_index would have the wrong fully-qualified name for a method.
+
+ I tracked this down to a bug in the indexer. If a type could have
+ methods but was marked as a declaration, the indexer was ignoring it.
+ However, this meant that the internal map to find the qualified name
+ was not updated for this container.
+
+2022-04-22 Christoph Muellner <cmuellner@gcc.gnu.org>
+
+ RISC-V: Add missing DECLARE_INSNs for Zicbo{m,p,z}
+ The recently added support for the Zicbo{m,p,z} extensions did not
+ include DECLARE_INSN() declarations for the instructions.
+ These declarations are needed by GDB's instruction detection code.
+ This patch adds them.
+
+2022-04-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-21 Carl Love <cel@us.ibm.com>
+
+ Fix for gdb.base/solib-search.exp test.
+ The variable right_lib_flags is not being set correctly to define RIGHT.
+ The value RIGHT is needed to force the address of the library functions
+ lib1_func3 and lib2_func4 to occur at different address in the wrong and
+ right libraries.
+
+ With RIGHT defined correctly, functions lib1_func3 and lib2_func4 occur
+ at different addresses the test runs correctly on Powerpc.
+
+ The test needs the lib2 addresses to be different in the right and
+ wrong cases. That is the point of introducing function lib2_spacer
+ with the ifdef RIGHT compiler directive.
+
+ On Intel, the ARRAY_SIZE of 1 versus 8192 is sufficient to get the
+ dynamic linker to move the addresses of the library. You can also get
+ the same effect on PowerPC but you must use a value much larger than
+ 8192.
+
+ The key thing is that the test was not properly setting RIGHT to
+ defined to get the lib2_spacer function on Intel and Powerpc.
+
+ Without the patch, we have the Intel backtrace for the bad libraries:
+
+ backtrace
+ #0 break_here () at /home/ ... /gdb/testsuite/gdb.base/solib-search.c:30
+ #1 0x00007ffff7fae156 in ?? ()
+ #2 0x00007fffffffc150 in ?? ()
+ #3 0x00007ffff7fbb156 in ?? ()
+ #4 0x00007fffffffc160 in ?? ()
+ #5 0x00007ffff7fae146 in ?? ()
+ #6 0x00007fffffffc170 in ?? ()
+ #7 0x00007ffff7fbb146 in ?? ()
+ #8 0x00007fffffffc180 in ?? ()
+ #9 0x0000555555555156 in main () at /home/ ... /binutils-gdb/gdb/testsuite/gdb.base/solib-search.c:23
+ Backtrace stopped: previous frame inner to this frame (corrupt stack?)
+ (gdb) PASS: gdb.base/solib-search.exp: backtrace (with wrong libs) (data collection)
+
+ The backtrace on Intel with the good libraries is:
+
+ backtrace
+ #0 break_here () at /.../binutils-gdb/gdb/testsuite/gdb.base/solib-search.c:30
+ #1 0x00007ffff7fae156 in lib2_func4 () at /.../binutils-gdb/gdb/testsuite/gdb.base/solib-search-lib2.c:49
+ #2 0x00007ffff7fbb156 in lib1_func3 () at /.../gdb.base/solib-search-lib1.c:49
+ #3 0x00007ffff7fae146 in lib2_func2 () at /.../testsuite/gdb.base/solib-search-lib2.c:30
+ #4 0x00007ffff7fbb146 in lib1_func1 () at /.../gdb.base/solib-search-lib1.c:30
+ #5 0x0000555555555156 in main () at /...solib-search.c:23
+ (gdb) PASS: gdb.base/solib-search.exp: backtrace (with right libs) (data collection)
+ PASS: gdb.base/solib-search.exp: backtrace (with right libs)
+
+ In one case the backtrace is correct and the other it
+ is wrong on Intel. This is due to the fact that the ARRAY_SIZE caused
+ the dynamic linker to move the library function addresses around. I
+ believe it has to do with the default size of the data and code
+ sections used by the dynamic linker.
+
+ So without the patch the backtrace on PowerPC looks like:
+
+ backtrace
+ #0 break_here () at /.../solib-search.c:30
+ #1 0x00007ffff7f007f4 in lib2_func4 () at /.../solib-search-lib2.c:49
+ #2 0x00007ffff7f307f4 in lib1_func3 () at /.../solib-search-lib1.c:49
+ #3 0x00007ffff7f007ac in lib2_func2 () at /.../solib-search-lib2.c:30
+ #4 0x00007ffff7f307ac in lib1_func1 () at /.../solib-search-lib1.c:30
+ #5 0x000000001000074c in main () at /.../solib-search.c:23
+
+ for both the good and bad libraries.
+
+ The patch fixes defining RIGHT in solib-search-lib1.c and solib-search-
+ lib2.c. Note, without the patch the lib1_spacer and lib2_spacer
+ functions do not show up in the object dump of the Intel or Powerpc
+ libraries as it should. The patch fixes that by making sure RIGHT gets
+ defined.
+
+ Now with the patch the backtrace for the bad library on PowerPC looks
+ like:
+
+ backtrace
+ #0 break_here () at /.../solib-search.c:30
+ #1 0x00007ffff7f0083c in __glink_PLTresolve () from /.../solib-search-lib2.so
+ Backtrace stopped: frame did not save the PC
+
+ And the backtrace for the good libraries on PowerPC looks like:
+
+ backtrace
+ #0 break_here () at /.../solib-search.c:30
+ #1 0x00007ffff7f0083c in lib2_func4 () at /.../solib-search-lib2.c:49
+ #2 0x00007ffff7f3083c in lib1_func3 () at /.../solib-search-lib1.c:49
+ #3 0x00007ffff7f007cc in lib2_func2 () at /.../solib-search-lib2.c:30
+ #4 0x00007ffff7f307cc in lib1_func1 () at /.../solib-search-lib1.c:30
+ #5 0x000000001000074c in main () at /.../solib-search.c:23
+ (gdb) PASS: gdb.base/solib-search.exp: backtrace (with right libs) (data collection)
+ PASS: gdb.base/solib-search.exp: backtrace (with right libs)
+
+ The issue then is on Power where the ARRAY_SIZE of 1 versus 8192 is not
+ sufficient to cause the dymanic linker to allocate the libraries at
+ different addresses. I don't claim to understand the specifics of how
+ the dynamic linker works and what the default size is for the data and
+ code sections are. My guess is by default PowerPC allocates a larger
+ data size by default, which is large enough to hold array[8192]. The
+ default size of the data section allocated by the dynamic linker on
+ Intel is not large enough to hold array[8192] thus causing the code
+ section on Intel to have to move when the large array is defined.
+
+ Note on PowerPC, if you make ARRAY_SIZE big enough, then you will cause
+ the library addresses to occur at different addresses as the larger
+ data section forces the code section to a different address. That was
+ actually my original fix for the program until I spoke with Doug Evans
+ who originally wrote the test. Doug noticed that RIGHT was not getting
+ defined as he originally intended in the test.
+
+ With the patch to fix the definition of RIGHT, PowerPC has a bad and a
+ good backtrace because the address of lib1_func3 and lib2_func4 both
+ move because lib1_spacer and lib2_spacer are now defined
+ before lib1_func3 and lib2_func4.
+
+ Without the patch, the lib1_spacer and lib2_spacer function doesn't show
+ up in the binary for the correct or incorrect library on Intel or PowerPC.
+ With the patch, RIGHT gets defined as originally intended for the test on
+ both architectures and lib1_spacer and lib2_spacer function show up in the
+ binaries on both architectures changing the other function addresses as
+ intended thus causing the test work as intended on PowerPC.
+
+2022-04-21 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/dwarf: remove line_header::header_length field
+ This can be a local in dwarf_decode_line_header.
+
+ Change-Id: I2ecf4616d1a3197bd1e81ded9f999a2da9a685af
+
+2022-04-21 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/dwarf: remove line_header::total_length field
+ This doesn' have to be a field, it can simply be a local variable in
+ dwarf_decode_line_header. Name the local variable "unit_length", since
+ that's what the field in called in DWARF 4 and 5. It's always easier to
+ follow the code with the standard on the side when we use the same
+ terminology.
+
+ Change-Id: I3ad1022afd9410b193ea11b9b5437686c1e4e633
+
+2022-04-21 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: fix "set temporary breakpoint" DUPLICATEs
+ Commit c67f4e538 ("gdb/testsuite: make gdb.ada/mi_prot.exp stop at
+ expected location") introduced some DUPLICATEs in MI tests using
+ mi_continue_to_line, for example:
+
+ DUPLICATE: gdb.ada/mi_ref_changeable.exp: mi_continue_to_line: set temporary breakpoint
+
+ These test names were previously differentiated by the location passed
+ to mi_continue_to_line. Since the location can contain a path, that
+ commit removed the location from the test name, in favor of a hardcoded
+ string "set temporary breakpoint", hence removing the differentiator.
+
+ mi_continue_to_line receives a "test" parameter, containing a test
+ name. Add a "with_test_prefix" with that name, so that all tests
+ recorded during mi_continue_to_line have this in their name.
+
+ mi_continue_to_line passes that "test" string to mi_get_stop_line, that
+ is a bit superfluous. mi_get_stop_line only uses that string in case of
+ failures (it doesn't record a pass if everything goes fine). Since it's
+ not crucial, just remove it, and adjust all callers.
+
+ Adjust three gdb.mi/mi-var-*.exp tests to use prefixes to differentiate
+ the multiple calls to mi_run_inline_test (which calls
+ mi_continue_to_line).
+
+ Change-Id: I511c6caa70499f8657b1cde37d71068d74d56a74
+
+2022-04-21 Tom Tromey <tromey@adacore.com>
+
+ Always use dwarf2_initialize_objfile
+ Internally we noticed that some tests would fail like so on Windows:
+
+ warning: Section .debug_aranges in [...] has duplicate debug_info_offset 0x0, ignoring .debug_aranges.
+
+ Debugging showed that, in fact, a second CU was being created at this
+ offset. We tracked this down to the fact that, while the ELF reader
+ is careful to re-use the per-BFD data, other readers are not, and
+ could re-read the DWARF data multiple times.
+
+ However, since the change to allow an objfile to have multiple "quick
+ symbol" implementations, there's no reason for this approach -- it's
+ safe and easy for all symbol readers to reuse the per-BFD data when
+ reading DWARF.
+
+ This patch implements this idea, simplifying dwarf2_build_psymtabs and
+ making it private, and then switching to dwarf2_initialize_objfile as
+ the sole way to start the DWARF reader.
+
+ Note that, while I think the call to dwarf2_build_frame_info in
+ machoread.c is also obsolete, I haven't attempted to remove it here.
+
+2022-04-21 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: fix 'remote show FOO-packet' aliases
+ The following behaviour was observed in GDB:
+
+ (gdb) show remote X-packet
+ Support for the `p' packet is auto-detected, currently unknown.
+
+ Note the message mentions the 'p' packet. This is a regression since
+ this commit:
+
+ commit 8579fd136a614985bd27f20539c7bb7c5a51287d
+ Date: Mon Nov 8 14:58:46 2021 +0000
+
+ gdb/gdbsupport: make xstrprintf and xstrvprintf return a unique_ptr
+
+ Before this commit the behaviour was:
+
+ (gdb) show remote X-packet
+ Support for the `X' packet is auto-detected, currently unknown.
+
+ The problem was caused by a failed attempt to ensure that some
+ allocated strings were deleted when GDB exits. The code in the above
+ commit attempted to make use of 'static' to solve this problem,
+ however, the solution was just wrong.
+
+ In this new commit I instead allocate a static vector into which all
+ the allocated strings are stored, this ensures the strings are
+ released when GDB exits (which makes output from tools like valgrind
+ cleaner), but each string within the vector can be unique, which fixes
+ the regression.
+
+2022-04-21 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbsupport: add path_join function
+ In this review [1], Eli pointed out that we should be careful when
+ concatenating file names to avoid duplicated slashes. On Windows, a
+ double slash at the beginning of a file path has a special meaning. So
+ naively concatenating "/" and "foo/bar" would give "//foo/bar", which
+ would not give the desired results. We already have a few spots doing:
+
+ if (first_path ends with a slash)
+ path = first_path + second_path
+ else
+ path = first_path + slash + second_path
+
+ In general, I think it's nice to avoid superfluous slashes in file
+ paths, since they might end up visible to the user and look a bit
+ unprofessional.
+
+ Introduce the path_join function that can be used to join multiple path
+ components together (along with unit tests).
+
+ I initially wanted to make it possible to join two absolute paths, to
+ support the use case of prepending a sysroot path to a target file path,
+ or the prepending the debug-file-directory to a target file path. But
+ the code in solib_find_1 shows that it is more complex than this anyway
+ (for example, when the right hand side is a Windows path with a drive
+ letter). So I don't think we need to support that case in path_join.
+ That also keeps the implementation simpler.
+
+ Change a few spots to use path_join to show how it can be used. I
+ believe that all the spots I changed are guarded by some checks that
+ ensure the right hand side operand is not an absolute path.
+
+ Regression-tested on Ubuntu 18.04. Built-tested on Windows, and I also
+ ran the new unit-test there.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-April/187559.html
+
+ Change-Id: I0df889f7e3f644e045f42ff429277b732eb6c752
+
+2022-04-21 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb_spawn_attach_cmdline: use unsupported instead of untested
+ In a previous commit (b750766ac96: gdb/testsuite: Introduce and use
+ gdb_spawn_attach_cmdline), if gdb_spawn_attach_cmdline cannot have GDB
+ attach to the process because of ptrace restrictions (operation not
+ permitted), the proc issues UNTESTED. This should really be
+ UNSUPPORTED, as it is done in gdb_attach.
+
+ This patch fixes this oversight.
+
+ Change-Id: Ib87e33b9230f3fa7a85e06220ef4c63814b71f7d
+
+2022-04-21 Enze Li <lienze2010@hotmail.com>
+
+ gdb/testsuite: add binary testcases to py-format-string.exp
+ We currently only test decimal and hexadecimal for the
+ gdb.Value.format_string() interface, this patch adds testcases for
+ binary format.
+
+ Tested on x86_64 openSUSE Tumbleweed(VERSION_ID="20220413").
+
+2022-04-21 Pedro Alves <pedro@palves.net>
+
+ gdb.debuginfod/fetch_src_and_symbols.exp: Fix "notice empty URL" test
+ The gdb_test_multiple pattern for the "notice empty URL" test in
+ gdb.debuginfod/fetch_src_and_symbols.exp misses expecting the prompt.
+ Fix it by using -re -wrap.
+
+ Also, by using "confirm off", the message GDB prints if Debuginfod
+ downloading is available doesn't contain "Enable debuginfod" any
+ longer. E.g.:
+
+ ~~~
+ (gdb) file testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols
+ Reading symbols from testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols...
+
+ This GDB supports auto-downloading debuginfo from the following URLs:
+ <http://localhost:123>
+ Enable debuginfod for this session? (y or [n])
+ ~~~
+
+ ~~~
+ (gdb) with confirm off -- file testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols
+ Reading symbols from testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols...
+
+ This GDB supports auto-downloading debuginfo from the following URLs:
+ <http://127.0.0.1:8000>
+ <127.0.0.1:8000>
+ Debuginfod has been disabled.
+ To make this setting permanent, add 'set debuginfod enabled off' to .gdbinit.
+ (No debugging symbols found in testsuite/outputs/gdb.debuginfod/fetch_src_and_symbols/fetch_src_and_symbols)
+ (gdb)
+ ~~~
+
+ I handled that correctly in the other tests that use test_urls, but
+ had forgotten to update the "notice empty URL" one.
+
+ Change-Id: I00040c83466e1494b3875574eb009c571a1504bf
+
+2022-04-21 Alan Modra <amodra@gmail.com>
+
+ prune .note.GNU-stack warning from testsuite
+ binutils/
+ * testsuite/lib/binutils-common.exp (prune_warnings_extra): Remove
+ .note.GNU-stack warning.
+ (run_dump_test): Call prune_warnings for ld and objcopy output.
+ ld/
+ * testsuite/ld-elf/elf.exp: Disable prune_warnings_extra temporarily
+ around test for absent .note.GNU-stack
+ * testsuite/ld-cris/globsymw2.s,
+ * testsuite/ld-cris/warn3.d: Modify "is not implemented" message
+ to avoid dejagnu prune_warnings.
+
+ ld testsuite xcoff XPASS
+ * testsuite/ld-scripts/defined5.d: Don't xfail xcoff targets.
+
+ Delete unused COFF gas macro
+ * config/obj-coff.h (sy_obj): Don't define.
+ (OBJ_SYMFIELD_TYPE): Revise comments.
+
+2022-04-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-20 Aaron Merey <amerey@redhat.com>
+
+ gdb/debuginfod: Prevent out_of_range exception
+ Trailing whitespace in the string of debuginfod URLs causes an
+ out_of_range exception during the printing of URLs for the first
+ use notice.
+
+ To fix this, stop printing URLs when the substring to be printed
+ consists only of whitespace.
+
+ Also add first use notice testcases.
+
+ Co-Authored-By: Pedro Alves <pedro@palves.net>
+
+2022-04-20 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/testsuite: Introduce and use gdb_spawn_attach_cmdline
+ Following a7e6a19e87f3d719ea23c65b580a6d9bca4ccab3 "gdb: testsuite: add
+ new gdb_attach to check "attach" command", this commit proposes to
+ introduce the gdb_spawn_attach_cmdline helper and use it in
+ gdb.base/attach.exp.
+
+ This helper starts GDB and adds the "--pid=$PID" argument.
+
+ Also note that both the original and new implementation use
+ gdb_spawn_with_cmdline_opts, which in the end uses default_gdb_spawn.
+ This makes sure that we use $INTERNAL_GDBFLAGS, which by default already
+ contain "-iex \"set height 0\" -iex \"set width 0\"". To avoid
+ repetition of those arguments, gdb_spawn_attach_cmdline does not repeat
+ those arguments.
+
+ To maintain a behavior similat to what gdb.base/attach.exp used to do,
+ gdb_spawn_attach_cmdline keeps the -quiet flag.
+
+ Tested on x86_64-gnu-linux
+
+ Change-Id: I1fdcdb71c86d9c5d34bb28fc86fac68bcec37358
+
+2022-04-20 Tom Tromey <tom@tromey.com>
+
+ Replace symbol_symtab with symbol::symtab
+ This turns symbol_symtab into a method on symbol. It also replaces
+ symbol_set_symtab with a method.
+
+ Replace symbol_arch with symbol::arch
+ This turns symbol_arch into a method on symbol.
+
+ Replace symbol_objfile with symbol::objfile
+ This turns symbol_objfile into a method on symbol.
+
+ Remove symbol::aclass_index
+ Symbols have an aclass_index method, but this isn't needed, because
+ the aclass index isn't useful outside of the symbol implementation.
+
+ Use array_view for symbol_impls
+ It seemed to me that using array_view for symbol_impls would give a
+ bit more error checking, at least when gdb is built in libstdc++ debug
+ mode.
+
+ Add accessors for symbol's artificial field
+ For a series I'm experimenting with, it was handy to hide a symbol's
+ "artificial" field behind accessors. This patch is the result.
+
+ Unify the DWARF index holders
+ The dwarf2_per_bfd object has a separate field for each possible kind
+ of index. Until an earlier patch in this series, two of these were
+ even derived from a common base class, but still had separate slots.
+ This patch unifies all the index fields using the common base class
+ that was introduced earlier in this series. This makes it more
+ obvious that only a single index can be active at a time, and also
+ removes some code from dwarf2_initialize_objfile.
+
+ Add an ad hoc version check to dwarf_scanner_base
+ Some generic code in the DWARF reader has a special case for older
+ versions of .gdb_index. This patch adds an ad hoc version check
+ method so that these spots can work without specific knowledge of
+ which index is in use.
+
+ Simplify version check in dw2_symtab_iter_next
+ This simplifies the index versio check in dw2_symtab_iter_next, by
+ passing a reference to the index object to this function. This avoids
+ an indirection via the per_bfd object.
+
+ Introduce and use dwarf_scanner_base
+ This introduces dwarf_scanner_base, a base class for all the index
+ readers in the DWARF code. Then, it changes both mapped_index_base
+ and cooked_index_vector to derive from this new base class.
+
+ Introduce readnow_functions
+ This introduces readnow_functions, a new subclass of
+ dwarf2_base_index_functions, and changes the DWARF reader to use it.
+ This lets us drop the "index is NULL" hack from the gdb index code.
+
+ Remove some "OBJF_READNOW" code from dwarf2_debug_names_index
+ The dwarf2_debug_names_index code treats a NULL debug_names_table as
+ if it were from OBJF_READNOW. However, this trick is only done for
+ gdb_index, never for debug_names -- see dwarf2_initialize_objfile.
+
+ Let mapped index classes create the quick_symbol_functions object
+ This changes the mapped index classes to create the
+ quick_symbol_functions objects. This is a step toward having a more
+ abstract interface to mapped indices.
+
+ Give mapped_index_base a virtual destructor
+ This changes mapped_index_base to have a virtual destructor, so it can
+ be destroyed via its base class.
+
+ Move mapped_index_base to new header file
+ This moves mapped_index_base and the helper struct name_component to a
+ new header file in gdb/dwarf2/.
+
+2022-04-20 Jan Beulich <jbeulich@suse.com>
+
+ x86: reject all invalid SAE variants
+ So far an SAE-only specifier was accepted for static-rounding insns,
+ while SAE-only insns didn't accept static rounding specifiers. If
+ anything it would make sense the other way around, allowing SAE-only
+ insns to have the (ignored) rounding mode specified individually rather
+ than globally via -mevexrcig=. But for now make things match the SDM.
+
+2022-04-20 Alan Modra <amodra@gmail.com>
+
+ Re: xcoff: implement linker relaxation
+ * xcofflink.c (xcoff_stub_csect_name): Increase buffer size.
+ (xcoff_stub_get_csect_in_range, xcoff_build_one_stub): Whitespace.
+ (bfd_xcoff_size_stubs): Cast PRIx64 arg to required type.
+ Don't use freed stub_name.
+
+ Revert "as: Reject unknown -gXXX option" testsuite
+ This reverts the test committed as part of 6ea673e2d6.
+
+2022-04-20 Cl?ment Chigot <clement.chigot@atos.net>
+
+ xcoff: implement linker relaxation
+ bfd/ChangeLog:
+
+ * coff-rs6000.c (xcoff_reloc_type_noop): Add info argument.
+ (xcoff_reloc_type_fail): Likewise.
+ (xcoff_reloc_type_pos): Likewise.
+ (xcoff_reloc_type_neg): Likewise.
+ (xcoff_reloc_type_rel): Likewise.
+ (xcoff_reloc_type_toc): Likewise.
+ (xcoff_reloc_type_ba): Likewise.
+ (xcoff_reloc_type_crel): Likewise.
+ (xcoff_reloc_type_tls): Likewise.
+ (xcoff_reloc_type_br): Add stub handler.
+ (xcoff_ppc_relocate_section): Add info to
+ xcoff_calculate_relocation.
+ (xcoff_stub_indirect_call_code): New constant.
+ (xcoff_stub_shared_call_code): Likewise.
+ (bfd_xcoff_backend_data): Add stub code fields.
+ (bfd_pmac_xcoff_backend_data): Likewise.
+ * coff64-rs6000.c (xcoff64_reloc_type_br): Add stub handler.
+ (xcoff64_ppc_relocate_section): Add info to
+ xcoff64_calculate_relocation.
+ (xcoff64_stub_indirect_call_code): New constant.
+ (xcoff64_stub_shared_call_code): Likewise.
+ (bfd_xcoff_backend_data): Add stub code fields.
+ (bfd_xcoff_aix5_backend_data): Likewise.
+ * libxcoff.h (struct xcoff_backend_data_rec): Add stub fields.
+ (bfd_xcoff_stub_indirect_call_code): New define.
+ (bfd_xcoff_stub_indirect_call_size): New define.
+ (bfd_xcoff_stub_shared_call_code): New define.
+ (bfd_xcoff_stub_shared_call_size): New define.
+ (xcoff_reloc_function): Add info argument.
+ (enum xcoff_stub_type): New enum.
+ (struct xcoff_stub_hash_entry): New structure.
+ * xcofflink.c (struct xcoff_link_hash_table): Add stub hash
+ table and params fields.
+ (xcoff_stub_hash_entry): New define.
+ (xcoff_stub_hash_lookup): New define.
+ (stub_hash_newfunc): New function.
+ (_bfd_xcoff_bfd_link_hash_table_free): Free the new stub hash
+ table.
+ (_bfd_xcoff_bfd_link_hash_table_create): Create the new stub
+ hash table.
+ (xcoff_link_add_symbols): Save rawsize for XTY_SD.
+ (bfd_xcoff_link_init): New function.
+ (xcoff_stub_csect_name): New function.
+ (xcoff_stub_get_csect_in_range): New function.
+ (xcoff_stub_name): New function.
+ (bfd_xcoff_get_stub_entry): New function.
+ (bfd_xcoff_type_of_stub): New function.
+ (xcoff_add_stub): New function.
+ (xcoff_build_one_stub): New function.
+ (bfd_xcoff_size_stubs): New function.
+ (bfd_xcoff_build_stubs): New function.
+ (xcoff_stub_create_relocations): New function.
+ (xcoff_link_input_bfd): Adapt relocations to stub.
+ (xcoff_write_global_symbol): Adapt to new TOC entries generated
+ for stubs.
+ (_bfd_xcoff_bfd_final_link): Handle stub file.
+ * xcofflink.h (struct bfd_xcoff_link_params): New structure.
+
+ ld/ChangeLog:
+
+ * emultempl/aix.em (params): New variable.
+ (stub_file): New variable.
+ (xcoff_add_stub_section): New function.
+ (xcoff_layout_sections_again): New function
+ (hook_in_stub): New function.
+ (_after_allocation): Add stub creation.
+ (_create_output_section_statements): Allocate stub file and
+ pass params to backend.
+
+2022-04-20 Cl?ment Chigot <clement.chigot@atos.net>
+
+ Stubs (added in a later patch) will generate new .loader symbols, once the allocations have been done. Thus, the .loader section cannot be layout before that.
+ bfd/ChangeLog:
+
+ * coff-rs6000.c (_bfd_xcoff_put_ldsymbol_name): Write len in
+ ldinfo->strings instead of directly in the output_bfd.
+ * coff64-rs6000.c (_bfd_xcoff64_put_ldsymbol_name): Likewise.
+ * xcofflink.c (struct xcoff_link_hash_table): Remove ldrel_count
+ field. Add ldinfo field.
+ (xcoff_mark_symbol): Adjust to new ldinfo field.
+ (xcoff_mark): Likewise.
+ (bfd_xcoff_link_count_reloc): Likewise.
+ (xcoff_build_loader_section): Split into two functions: one that
+ build the loader section (this function) and one that only size
+ it...
+ (xcoff_size_loader_section): ... (this function).
+ (bfd_xcoff_size_dynamic_sections): Adapt to new ldinfo field.
+ Move the part where the dynamic sections are build to ...
+ (bfd_xcoff_build_dynamic_sections): ... this function.
+ * xcofflink.h: Add bfd_xcoff_build_dynamic_sections prototype.
+
+ include/ChangeLog:
+
+ * coff/xcoff.h (struct xcoff_loader_info): Add ldrel_count and
+ libpath fields.
+
+ ld/ChangeLog:
+
+ * emultempl/aix.em (_after_allocation): New function.
+
+2022-04-20 Tom Tromey <tom@tromey.com>
+
+ Use symbol_symtab accessor in compile-object-load.c
+ I noticed that compile-object-load.c directly references owner.symtab
+ of a symbol. However, I think it's better for all users to call
+ symbol_symtab. This patch makes this change.
+
+2022-04-20 Nick Clifton <nickc@redhat.com>
+
+ Add linker warning for when it creates an executable stack.
+ PR 29072
+
+2022-04-20 Tom Tromey <tom@tromey.com>
+
+ Micro-optimize cooked_index_entry::full_name
+ I noticed that cooked_index_entry::full_name can return the canonical
+ string when there is no parent entry.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-04-20 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Implement loongarch_scan_prologue()
+ If can't determine prologue from the symbol table, need to examine
+ instructions. Implement loongarch_scan_prologue() to analyze the
+ function prologue from START_PC to LIMIT_PC, return the address of
+ the first instruction past the prologue.
+
+2022-04-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-19 H.J. Lu <hjl.tools@gmail.com>
+
+ as: Reject unknown -gXXX option
+ * as.c (parse_args): Reject unknown -gXXX option.
+ * testsuite/gas/all/empty.s: New file.
+ * testsuite/gas/all/pr29067.d: Likewise.
+ * testsuite/gas/all/pr29067.err: Likewise.
+ * testsuite/gas/all/gas.exp: Run pr29067.
+
+2022-04-19 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/selftest-arch: Make register_test_foreach_arch generate arch tests lazily
+ The register_test_foreach_arch is used to instantiate a given selftest
+ for all architectures supported by GDB. It is used in many _initialize_*
+ functions (under initialize_all_files, called by gdb_init).
+
+ Because the call is done during GDB's initialization, and because there
+ is no guaranty about the order in which all the _initialize_* functions
+ are executed, when register_test_foreach_arch is called, GDB is not
+ fully initialized. Specifically, when a particular initialize function
+ is executed, only the architectures registered at that point are listed
+ by gdbarch_printable_names.
+
+ As a consequence, the list of selftest effectively executed depends on
+ the order the _initialize_* functions are called. This can be observed
+ with the following:
+
+ $ ./gdb/gdb \
+ -data-directory ./gdb/data-directory \
+ -quiet -batch -ex "maint selftest" 2>&1 \
+ | grep -E "Ran [0-9]+ unit tests"
+ Ran 145 unit tests, 0 failed
+ $ GDB_REVERSE_INIT_FUNCTIONS=1 ./gdb/gdb \
+ -data-directory ./gdb/data-directory \
+ -quiet -batch -ex "maint selftest" 2>&1 \
+ | grep -E "Ran [0-9]+ unit tests"
+ Ran 82 unit tests, 0 failed
+
+ To fix this, make register_test_foreach_arch register a lazy selftest
+ generator. This way when the test generator is eventually executed, all
+ architectures are registered and we do not have a dependency on the
+ order the initialize functions are executed in.
+
+ Tested on x86_64-linux
+
+ Change-Id: I88eefebf7d372ad672f42d3a103e89354bc8a925
+
+2022-04-19 Lancelot SIX <lancelot.six@amd.com>
+
+ gdbsupport/selftest: Allow lazy registration
+ This patch adds a way to delay the registration of tests until the
+ latest possible moment. This is intended for situations where GDB needs
+ to be fully initialized in order to decide if a particular selftest can
+ be executed or not.
+
+ This mechanism will be used in the next patch.
+
+ Change-Id: I7f6b061f4c0a6832226c7080ab4e3a2523e1b0b0
+
+2022-04-19 Lancelot SIX <lancelot.six@amd.com>
+
+ gdbsupport/selftest: Replace for_each_selftest with an iterator_range
+ Remove the callback-based selftests::for_each_selftest function and use
+ an iterator_range instead.
+
+ Also use this iterator range in run_tests so all iterations over the
+ selftests are done in a consistent way. This will become useful in a
+ later commit.
+
+ Change-Id: I0b3a5349a7987fbcb0071f11c394e353df986583
+
+2022-04-19 Jan Beulich <jbeulich@suse.com>
+
+ x86: don't mistake ordinary immediates for SAE / rounding control
+ The way SAE templates are constructed was always puzzling me (including
+ the need for separate templates in the first place), and expressing the
+ extzra attribute via Imm8 actually has a bad effect: Ordinary immediates
+ would also be accepted, leading to an extra byte being added after the
+ instruction (i.e. generating bad code). Before re-working this (in
+ particular to accept proper Intel syntax there), fix the immediate issue
+ by adding the so far missing check.
+
+ x86: VCMPSH is Evex.LLIG
+ These were mistakenly flagged as Evex.128. Getting the LLIG status right
+ for insns allowing for SAE is a prereq for planned further work.
+
+ x86: drop stray CheckRegSize from VFPCLASSPH
+ Like VFPCLASSP{S,D} it has only a single operand allowing multiple
+ sizes, hence there are no pairs of operands to check for consistent
+ size.
+
+ x86/Intel: test non-legacy VCVT{,U}SI2SH insn forms
+ For an unclear reason corresponding AVX512F tests were apparently not
+ cloned or used as reference here, and instead the bogus legacy forms of
+ the insns (with the embedded rounding specifier not last) were used.
+
+2022-04-19 Jan Beulich <jbeulich@suse.com>
+
+ x86: correct and simplify NOP disassembly
+ It's not just REX.W which is ignored with opcode 0x90. The same goes for
+ REX.R and REX.X as well as empty REX. None of these are forms of
+ "xchg %eax,%eax" (which would mean zero-extending %eax to %rax), so they
+ also shouldn't be disassembled this way.
+
+ While there simplify things: A single hook function suffices, thus
+ making it unnecessary to keep two expressions in sync. And checking
+ ins->address_mode for mode_64bit also is unnecessary, as "rex" can be
+ non-zero only in that case anyway.
+
+2022-04-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-18 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite/dwarf: don't automatically add directory and file entry for DWARF 5
+ To support DWARF 5 in the DWARF assembler line tables, we currently copy
+ the first user-provided directory and the first user-provided files and
+ make them elements at indices 0 in the directory and file name tables.
+ That was a sufficient behavior at the time (see commit 44fda089397a
+ ("[gdb/testsuite] Support .debug_line v5 in dwarf assembler")), but in
+ the following patches, I would need to have finer grained control on
+ what is generated exactly. For example, I'd like to generate a DWARF 5 line
+ table with just a single file and a single directory.
+
+ Get rid of this behavior, and implement what is suggested in
+ 44fda089397a: make include_dir return the directory index that can be
+ used to refer to that directory entry (based on the DWARF version), and
+ use it afterwards.
+
+ Adjust dw2-lines.exp and dw2-prologue-end.exp accordingly. Their produced
+ DWARF5 binaries will change a bit, in that they will now have a single
+ directory and file, where they had two before. But it doesn't change
+ the expected GDB behavior.
+
+ Change-Id: I5459b16ac9b7f28c34c9693c35c9afd2ebb3aa3b
+
+2022-04-18 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: use gdb_tilde_expand instead of gdb_tilde_expand_up in source_script_with_search
+ Since this is the latest use of gdb_tilde_expand_up, remove it.
+
+ Change-Id: I964c812ce55fe087876abf91e7a3577ad79c0425
+
+2022-04-18 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbsupport: make gdb_realpath_keepfile return an std::string
+ I'm trying to switch these functions to use std::string instead of char
+ arrays, as much as possible. Some callers benefit from it (can avoid
+ doing a copy of the result), while others suffer (have to make one more
+ copy).
+
+ Change-Id: I793aab17baaef8345488f4c40b9094e2695425bc
+
+2022-04-18 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbsupport: make gdb_abspath return an std::string
+ I'm trying to switch these functions to use std::string instead of char
+ arrays, as much as possible. Some callers benefit from it (can avoid
+ doing a copy of the result), while others suffer (have to make one more
+ copy).
+
+ Change-Id: Iced49b8ee2f189744c5072a3b217aab5af17a993
+
+2022-04-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: call gdb_tilde_expand instead of gdb_tilde_expand_up in source_script_with_search
+ This removes a use of gdb_tilde_expand_up, which is removed later in
+ this series.
+
+ Change-Id: I5887d526cea987103e4ca24514a982b0a28e992a
+
+2022-04-18 Tom Tromey <tromey@adacore.com>
+
+ Update gnulib
+ This updates gnulib to a relatively recent commit. Most of this was
+ done by the gnulib import script; the only change I made was to
+ update-gnulib.sh.
+
+ Tested on x86-64 Fedora 34. I also did a mingw cross build.
+
+2022-04-18 Tom Tromey <tom@tromey.com>
+
+ Fix C++ cast of derived class to base class
+ PR c++/28907 points out that casting from a derived class to a base
+ class fails in some situations. The problem turned out to be a
+ missing use of value_embedded_offset. One peculiarity here is that,
+ if you managed to construct a pointer-to-derived with an embedded
+ offset of 0, the cast would work -- for example, one of the two new
+ tests here passes without the patch.
+
+ This embedded offset stuff is an endless source of bugs. I wonder if
+ it's possible to get rid of it somehow.
+
+ Regression tested on x86-64 Fedora 34.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28907
+
+2022-04-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: make gdb.ada/mi_prot.exp stop at expected location
+ This test attempts to run until the line marked "STOP", which is at
+ prot.adb:34. It first runs until the "main" symbol, then tries to place
+ a breakpoint by line at line 34, without specifying the source file. When looking at the logs:
+
+ -break-insert -t 34^M
+ ^done,bkpt={number="2",type="breakpoint",disp="del",enabled="y",addr="0x0000555555558a6c",func="adafinal",file="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_pro t/b~prot.adb",fullname="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_prot/b~prot.adb",line="44",thread-groups=["i1"],times="0",original-location="/home/simark/b uild/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_prot/b~prot.adb:34"}^M
+ ... continues ...
+ *stopped,reason="breakpoint-hit",disp="del",bkptno="2",frame={addr="0x0000555555558a6c",func="adafinal",args=[],file="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/ mi_prot/b~prot.adb",fullname="/home/simark/build/binutils-gdb-one-target/gdb/testsuite/outputs/gdb.ada/mi_prot/b~prot.adb",line="44",arch="i386:x86-64"},thread-id="1",stopped-threads="all",co re="8"^M
+
+ ... we see that the breakpoint is placed in some generated file, not in
+ the test source file as we expect. The problem is that "b main" in Ada
+ does not place a breakpoint on the "Ada main", but on some symbol in a
+ generated source file. So when stopped at the "main" symbol, we are not
+ stopped in the file that contains the STOP marker at line 34.
+
+ The test passes anyway today, so it doesn't seem to matter that we are
+ stopped at an unexpected location. But it starts failing with this
+ patch [1], because b~prot.adb:34 happens to be between two functions, so
+ the breakpoint doesn't resolve.
+
+ Fix this by placing the breakpoint at "$srcfile:$line", which works
+ regardless of what is the current source file.
+
+ However, this ends up introducing a path in the test name. Modify
+ mi_tbreak and mi_continue_to_line to avoid that.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-April/187686.html
+
+ Change-Id: I742e2a9993046dcb5e30c64fe2ad920a363baf75
+
+2022-04-18 Vignesh Balasubramanian <Vignesh.Balasubrmanian@amd.com>
+
+ gdb/testsuite: add text_segment option to gdb_compile
+ LLVM's lld linker doesn't have the "-Ttext-segment" option, but
+ "--image-base" can be used instead.
+
+ To centralize the logic of checking which option is supported, add the
+ text_segment option to gdb_compile. Change tests that are currently
+ using -Ttext-segment to use that new option instead.
+
+ This patch fixes only compilation error, for example:
+
+ Before:
+
+ $ make check TESTS="gdb.base/jit-elf.exp" RUNTESTFLAGS="CC_FOR_TARGET=clang LDFLAGS_FOR_TARGET=-fuse-ld=ld"
+ Running /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jit-elf.exp ...
+ gdb compile failed, clang-13: warning: -Xlinker -Ttext-segment=0x7000000: 'linker' input unused [-Wunused-command-line-argument]
+
+ After:
+
+ $ make check TESTS="gdb.base/jit-elf.exp" RUNTESTFLAGS="CC_FOR_TARGET=clang LDFLAGS_FOR_TARGET=-fuse-ld=ld"
+ Running /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/jit-elf.exp ...
+ FAIL: gdb.base/jit-elf.exp: one_jit_test-1: continue to breakpoint: break here 1
+ FAIL: gdb.base/jit-elf.exp: one_jit_test-1: continue to breakpoint: break here 2
+ FAIL: gdb.base/jit-elf.exp: one_jit_test-2: continue to breakpoint: break here 1
+ FAIL: gdb.base/jit-elf.exp: one_jit_test-2: info function ^jit_function
+ FAIL: gdb.base/jit-elf.exp: one_jit_test-2: continue to breakpoint: break here 2
+ FAIL: gdb.base/jit-elf.exp: attach: one_jit_test-2: continue to breakpoint: break here 1
+ FAIL: gdb.base/jit-elf.exp: attach: one_jit_test-2: break here 1: attach
+ FAIL: gdb.base/jit-elf.exp: PIE: one_jit_test-1: continue to breakpoint: break here 1
+ FAIL: gdb.base/jit-elf.exp: PIE: one_jit_test-1: continue to breakpoint: break here 2
+
+ === gdb Summary ===
+
+ # of expected passes 26
+ # of unexpected failures 9
+
+ Change-Id: I3678c5c9bbfc2f80671698e28a038e6b3d14e635
+
+2022-04-18 Enze Li <lienze2010@hotmail.com>
+
+ gdb: fix using clear command to delete non-user breakpoints(PR cli/7161)
+ The clear command shouldn't delete momentary and internal breakpoints,
+ nor internal breakpoints created via Python's gdb.Breakpoint.
+
+ This patch fixes this issue and adds a testcase.
+
+ Regression tested on x86_64 openSUSE Tumbleweed(VERSION_ID="20220413").
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7161
+
+2022-04-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-16 Tom Tromey <tom@tromey.com>
+
+ Add comments to dwarf2/abbrev-cache.h
+ This patch started when I noticed that the unordered_set include
+ wasn't needed in abbrev-cache.h. (That was probably leftover from
+ some earlier implementation of the class.) Then, I noticed that the
+ class itself was under-commented. This patch fixes both issues.
+
+2022-04-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Return void from gdb_putc
+ I don't think it's very useful to return the character from gdb_putc,
+ so this patch changes it to return void.
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Handle "set height 1"
+ PR cli/17151 points out that "set height 1" has pathological behavior
+ in gdb. What I see is that gdb will endlessly print the pagination
+ prompt. This patch takes a simple and expedient approach to a fix:
+ pretend that the height is really 2.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17151
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Allow word wrapping even when paging is disabled
+ PR cli/20741 points out that when pagination is disabled, this also
+ disabled word wrapping. However, the manual documents that these
+ settings are separate -- if you intend to disable the wrapping, you
+ must use "set width unlimited".
+
+ This patch fixes the bug by letting the pagination-disabled case fall
+ through to the code that also handles word-wrapping.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20741
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Implement value_print for Rust
+ This adds an implementation of the value_print method to Rust. As
+ described in PR rust/22254, this removes a bit of weird-looking output
+ from some "print"s -- because c_value_print is bypassed. I don't have
+ a test for the bug that inspired this patch, because I only know how
+ to reproduce it when using a relatively old Rust compiler. However,
+ the new "cast-printing" code in value_print is required, because
+ omitting this causes some existing tests to fail.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=22254
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Reimplement Rust slice printing
+ The current nightly Rust compiler (aka 1.61) added better DWARF
+ representation for unsized types. Fixing this is PR rust/21466; but
+ the code is actually the same as what is required to make slice
+ printing more useful, which is PR rust/23871. This patch implements
+ this. I tested this against various Rust compilers: 1.48, current
+ stable, current beta, and current nightly.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=21466
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23871
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Remove some dead code from the Rust value printer
+ This removes a bit of dead code from the Rust value printer. This
+ code wasn't always dead -- it fixed a real bug, and a test case was
+ added for it. However, once val_print was removed, it became
+ unnecessary.
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Match rustc beta versions
+ The rust_compiler_version proc extracts the Rust compiler version from
+ the "rustc --version" output. For a beta compiler, the output looks
+ like:
+
+ rustc 1.60.0-beta.6 (7bccde197 2022-03-22)
+
+ This patch slightly relaxes the regexp -- removing a space -- so that
+ this can be understood by this proc.
+
+2022-04-15 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.ada/float-bits.exp with -m32
+ With test-case gdb.ada/float-bits.exp and native we get:
+ ...
+ (gdb) print 16llf#7FFFF7FF4054A56FA5B99019A5C8#^M
+ $9 = 5.0e+25^M
+ (gdb) PASS: gdb.ada/float-bits.exp: print 16llf#7FFFF7FF4054A56FA5B99019A5C8#
+ ...
+ but with target board unix/-m32 we have instead:
+ ...
+ (gdb) print 16llf#7FFFF7FF4054A56FA5B99019A5C8#^M
+ Cannot export value 2596145952482202326224873165792712 as 96-bits \
+ unsigned integer (must be between 0 and 79228162514264337593543950335)^M
+ (gdb) FAIL: gdb.ada/float-bits.exp: print 16llf#7FFFF7FF4054A56FA5B99019A5C8#
+ ...
+
+ Fix this by testing whether 16llf is supported by doing ptype long_long_float
+ which gets us either:
+ ...
+ type = <16-byte float>^M
+ ...
+ or:
+ ...
+ type = <12-byte float>^M
+ ...
+
+ Tested on x86_64-linux with native and unix/-m32.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29041
+
+2022-04-15 Tom Tromey <tom@tromey.com>
+
+ Remove WITH_SIM define
+ Since score-tdep.c was removed, the WITH_SIM define is not used in
+ gdb. This patch removes it.
+
+ Note that re-running autoheader shows a separate change that was
+ missed. I've kept it in this patch to avoid extra work.
+
+2022-04-15 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.go/methods.exp with check-readmore
+ When running test-case gdb.go/methods.exp with make check we have:
+ ...
+ (gdb) break main.T.Foo^M
+ Function "main.T.Foo" not defined.^M
+ Make breakpoint pending on future shared library load? (y or [n]) n^M
+ (gdb) XFAIL: gdb.go/methods.exp: gdb_breakpoint: set breakpoint at main.T.Foo
+ ...
+ but with make check-readmore the XFAIL fails to trigger:
+ ...
+ (gdb) break main.T.Foo^M
+ Function "main.T.Foo" not defined.^M
+ Make breakpoint pending on future shared library load? (y or [n]) n^M
+ (gdb) FAIL: gdb.go/methods.exp: gdb_breakpoint: set breakpoint at main.T.Foo
+ ...
+
+ This happens because this gdb_test_multiple "maintenance print symbols"
+ regexp:
+ ...
+ -re "\r\n$gdb_prompt $" {
+ ...
+ matches the entire command output.
+
+ Fix this by adding the missing ^ at the regexp start.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29064
+
+2022-04-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-14 Pedro Alves <pedro@palves.net>
+
+ gdbserver: Eliminate prepare_to_access_memory
+ Given:
+
+ - The prepare_to_access_memory machinery was added for non-stop mode.
+
+ - Only Linux supports non-stop.
+
+ - Linux no longer needs the prepare_to_access_memory machinery. In
+ fact, after the previous patch,
+ linux_process_target::prepare_to_access_memory became a nop.
+
+ Thus, prepare_to_access_memory can go away, simplifying core GDBserver
+ code.
+
+ Change-Id: I93ac8bfe66bd61c3d1c4a0e7d419335163120ecf
+
+2022-04-14 Pedro Alves <pedro@palves.net>
+
+ gdbserver/linux: Access memory even if threads are running
+ Similarly to how the native Linux target was changed
+ and subsequently reworked in these commits:
+
+ 05c06f318fd9 Linux: Access memory even if threads are running
+ 8a89ddbda2ec Avoid /proc/pid/mem races (PR 28065)
+
+ ... teach GDBserver to access memory even when the current thread is
+ running, by always accessing memory via /proc/PID/mem.
+
+ The existing comment:
+
+ /* Neither ptrace nor /proc/PID/mem allow accessing memory through a
+ running LWP. */
+
+ ... is incorrect for /proc/PID/mem does allow that.
+
+ Actually, from GDB's perspective, GDBserver could already access
+ memory while threads were running, but at the expense of pausing all
+ threads for the duration of the memory access, via
+ prepare_to_access_memory. This new implementation does not require
+ pausing any thread, thus
+ linux_process_target::prepare_to_access_memory /
+ linux_process_target::done_accessing_memory become nops. A subsequent
+ patch will remove the whole prepare_to_access_memory infrastructure
+ completely.
+
+ The GDBserver linux-low.cc implementation is simpler than GDB's
+ linux-nat.c's, because GDBserver always adds the unfollowed vfork/fork
+ children to the process list immediately when the fork/vfork event is
+ seen out of ptrace. I.e., there's no need to keep the file descriptor
+ stored on a side map, we can store it directly in the process
+ structure.
+
+ Change-Id: I0abfd782ceaa4ddce8d3e5f3e2dfc5928862ef61
+
+2022-04-14 Pedro Alves <pedro@palves.net>
+
+ gdbserver: special case target_write_memory len==0
+ The next patch in this series adds a common helper routine for both
+ memory reads and writes, like this:
+
+ static int
+ proc_xfer_memory (CORE_ADDR memaddr, unsigned char *readbuf,
+ const gdb_byte *writebuf, int len)
+ {
+ gdb_assert ((readbuf == nullptr) != (writebuf == nullptr));
+ ...
+ }
+
+ int
+ linux_process_target::read_memory (CORE_ADDR memaddr,
+ unsigned char *myaddr, int len)
+ {
+ return proc_xfer_memory (memaddr, myaddr, nullptr, len);
+ }
+
+ linux_process_target::write_memory (CORE_ADDR memaddr,
+ const unsigned char *myaddr, int len)
+ {
+ return proc_xfer_memory (memaddr, nullptr, myaddr, len);
+ }
+
+ Surprisingly, the assertion fails. That happens because it can happen
+ that target_write_memory is called with LEN==0, due to this in
+ gdb/remote.c:
+
+ /* Determine whether the remote target supports binary downloading.
+ This is accomplished by sending a no-op memory write of zero length
+ to the target at the specified address. (...) */
+
+ void
+ remote_target::check_binary_download (CORE_ADDR addr)
+ {
+ ...
+ p = rs->buf.data ();
+ *p++ = 'X';
+ p += hexnumstr (p, (ULONGEST) addr);
+ *p++ = ',';
+ p += hexnumstr (p, (ULONGEST) 0);
+ *p++ = ':';
+ *p = '\0';
+
+ In this scenario, in gdbserver's target_write_memory, the "myaddr"
+ argument of the_target->write_memory is passed the data() of a local
+ gdb::byte_vector (which is a specialized std::vector). It's valid for
+ std::vector::data() to return NULL when the vector is empty.
+
+ This commit adds an early return to target_write_memory to avoid
+ target backends having to care about this. For good measure, do the
+ same on the read side, in read_inferior_memory.
+
+ Change-Id: Iac8f04fcf99014c624ef4036bd318ca1771ad491
+
+2022-04-14 Pedro Alves <pedro@palves.net>
+
+ gdbserver/qXfer::threads, prepare_to_access_memory=>target_pause_all
+ handle_qxfer_threads_proper needs to pause all threads even if the
+ target can read memory when threads are running, so use
+ target_pause_all instead, which is what the Linux implementation of
+ prepare_to_access_memory uses. (Only Linux implements this hook.)
+
+ A following patch will make the Linux backend be able to access memory
+ when threads are running, and thus will also make
+ prepare_to_access_memory do nothing, which would cause testsuite
+ regressions without this change.
+
+ Change-Id: I127fec7246b7c45b60dfa7341e781606bf54b5da
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Ignore 0,0 entries in .debug_aranges
+ When running the internal AdaCore test suite against the new DWARF
+ indexer, I found one regression on RISC-V. The test in question uses
+ --gc-sections, and winds up with an entry in the middle of a
+ .debug_aranges that has both address and length of 0. In this
+ scenario, gdb assumes the entries are terminated and then proceeds to
+ reject the section because it reads a subsequent entry as if it were a
+ header.
+
+ It seems to me that, because each header describes the size of each
+ .debug_aranges CU, it's better to simply ignore 0,0 entries and simply
+ read to the end. That is what this patch does.
+
+ I've patched an existing test to provide a regression test for this.
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Use GetThreadDescription on Windows
+ Windows 10 introduced SetThreadDescription and GetThreadDescription, a
+ simpler way to set a thread's name. This changes gdb and gdbserver to
+ use this convention when it is available.
+
+ This is part of PR win32/29050.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29050
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Set the worker thread name on Windows
+ This patch is a bit different from the rest of the series, in that it
+ is a change to gdb's behavior on the host. It changes gdb's thread
+ pool to try to set the thread name on Windows, if SetThreadDescription
+ is available.
+
+ This is part of PR win32/29050.
+
+ This patch isn't likely to be useful to many people in the short term,
+ because the Windows port of the libstdc++ thread code is not upstream.
+ (AdaCore uses it, and sent it upstream, but it did not land, I don't
+ know why.) However, if that patch does ever go in, or presumably if
+ you build using some other C++ runtime library, then this will be
+ useful.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29050
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Implement thread_name for gdbserver
+ This changes gdbserver to implement thread_name method.
+
+ Share handle_ms_vc_exception with gdbserver
+ Currently, gdb's native Windows target implements the exception-based
+ approach for setting thread names, but gdbserver does not. This patch
+ moves handle_ms_vc_exception to the shared nat/windows-nat.c code, as
+ preparation for adding this support to gdbserver.
+
+ Move target_read_string to target/target.c
+ This moves the two overloads of target_read_string to a new file,
+ target/target.c, and updates both gdb and gdbserver to build this.
+
+ Remove the byte order parameter to target_read_string
+ target_read_string takes a byte order parameter, but only uses this to
+ check whether a given character is zero. This is readily done without
+ requiring the parameter, so remove it.
+
+ Rename read_string
+ This renames read_string to be an overload of target_read_string.
+ This makes it more consistent for the eventual merger with gdbserver.
+
+ Don't call QUIT in read_string
+ read_string does not need to call QUIT, because target_read_memory
+ already does. This change is needed to make string-reading usable by
+ gdbserver.
+
+ Fix possible Cygwin build problem
+ I noticed that nat/windows-nat.c checks __USEWIDE, but nothing sets it
+ there -- I forgot to copy over the definition when making this file.
+ This patch tries to fix the problem. I don't have a Cygwin setup, so
+ I don't know whether this is sufficient, but it's probably necessary.
+
+2022-04-14 Lancelot SIX <lancelot.six@amd.com>
+ Pedro Alves <pedro@palves.net>
+
+ gdb/testsuite: Fix race in gdb.dwarf2/calling-convention.exp
+ Pedro Alves warned me that there is a race in
+ gdb.dwarf2/calling-convention.exp making the test sometimes fail on his
+ setup. This can be reliably reproduced using :
+
+ make check-read1 TESTS="gdb.dwarf2/calling-convention.exp"
+
+ The relevant part of the gdb.log file is:
+
+ return 35
+ Function 'foo' does not follow the target calling convention.
+ If you continue, setting the return value will probably lead to unpredictable behaviors.
+ Make foo return now? (y or n) PASS: gdb.dwarf2/calling-convention.exp: return 35
+ n
+ Not confirmed
+ (gdb) FAIL: gdb.dwarf2/calling-convention.exp: finish
+
+ The issue is that when doing the test for "return 35", the DejaGnu test
+ sends "n" (to tell GDB not to perform the return action) but never
+ consumes the "Not confirmed" acknowledgment sent by GDB. Later, when
+ trying to do the next test, DejaGnu tries to match the leftover output
+ from the "return" test. As this output is not expected, the test fails.
+
+ Fix by using gdb_test to send the "n" answer and match the confirmation
+ and consume all output to the prompt.
+
+ Also do minor adjustments to the main regex:
+ - Remove the leading ".*" which is not required.
+ - Ensure that the "?" from the question is properly escaped.
+
+ Tested on x86_64-gnu-linux, using
+
+ - make check TESTS="gdb.dwarf2/calling-convention.exp"
+ - make check-read1 TESTS="gdb.dwarf2/calling-convention.exp"
+ - make check-readmore TESTS="gdb.dwarf2/calling-convention.exp"
+
+ Change-Id: I42858b13db2cbd623c5c1739de65ad423e0c0938
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Silence -Wmaybe-uninitialized warning from target_waitstatus
+ Currently, one use of target_waitstatus yields a warning:
+
+ target/waitstatus.h: In function 'void stop_all_threads()':
+ target/waitstatus.h:175:13: warning: 'ws.target_waitstatus::m_value' may be used uninitialized in this function [-Wmaybe-uninitialized]
+ 175 | m_value = other.m_value;
+ | ~~~~~~~~^~~~~~~~~~~~~~~
+
+ This patch silences the warning. I tried the "volatile member"
+ approach that was used for gdb::optional, but that didn't work, so
+ this patch simply initializes the member.
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Fix regression on Windows with WOW64
+ Internally at AdaCore, we recently started testing a 64-bit gdb
+ debugging 32-bit processes. This failed with gdb head, but not with
+ gdb 11.
+
+ The tests fail like this:
+
+ Starting program: [...].exe
+ warning: Could not load shared library symbols for WOW64_IMAGE_SECTION.
+ Do you need "set solib-search-path" or "set sysroot"?
+ warning: Could not load shared library symbols for WOW64_IMAGE_SECTION.
+ Do you need "set solib-search-path" or "set sysroot"?
+ warning: Could not load shared library symbols for NOT_AN_IMAGE.
+ Do you need "set solib-search-path" or "set sysroot"?
+ warning: Could not load shared library symbols for NOT_AN_IMAGE.
+ Do you need "set solib-search-path" or "set sysroot"?
+
+ After some debugging and bisecting, to my surprise the bug was
+ introduced by commit 183be222 ("gdb, gdbserver: make target_waitstatus
+ safe").
+
+ The problem occurs in handle_exception. Previously the code did:
+
+ - ourstatus->kind = TARGET_WAITKIND_STOPPED;
+ [...]
+ case EXCEPTION_BREAKPOINT:
+ [...]
+ - ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
+ [...]
+ /* FALLTHROUGH */
+ case STATUS_WX86_BREAKPOINT:
+ DEBUG_EXCEPTION_SIMPLE ("EXCEPTION_BREAKPOINT");
+ - ourstatus->value.sig = GDB_SIGNAL_TRAP;
+ [...]
+ - last_sig = ourstatus->value.sig;
+
+ However, in the new code, the fallthrough case does:
+
+ + ourstatus->set_stopped (GDB_SIGNAL_TRAP);
+
+ ... which changes the 'kind' in 'ourstatus' after falling through.
+
+ This patch rearranges the 'last_sig' setting to more closely match
+ what was done before (this is probably not strictly needed but also
+ seemed harmless), and removes the fall-through in the
+ 'ignore_first_breakpoint' case when __x86_64__ is defined.
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Reorganize Python events documentation
+ This slightly reorganizes the Python events documentation. It hoists
+ the "ThreadEvent" text out of the list of events, where it seemed to
+ be misplaced. It tidies the formatting a little bit (adding some
+ vertical space for easier reading in info), fixes a typo, adds some
+ missing commas, and fixes an incorrect reference to NewInferiorEvent.
+
+2022-04-14 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove move constructor and move assignment operator from cooked_index
+ Building with clang++-14, I see:
+
+ CXX dwarf2/cooked-index.o
+ In file included from /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.c:21:
+ /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:172:12: error: explicitly defaulted move constructor is implicitly deleted [-Werror,-Wdefaulted-function-deleted]
+ explicit cooked_index (cooked_index &&other) = default;
+ ^
+ /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:225:16: note: move constructor of 'cooked_index' is implicitly deleted because field 'm_storage' has a deleted move constructor
+ auto_obstack m_storage;
+ ^
+ /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/gdb_obstack.h:128:28: note: 'auto_obstack' has been explicitly marked deleted here
+ DISABLE_COPY_AND_ASSIGN (auto_obstack);
+ ^
+ In file included from /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.c:21:
+ /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:174:17: error: explicitly defaulted move assignment operator is implicitly deleted [-Werror,-Wdefaulted-function-deleted]
+ cooked_index &operator= (cooked_index &&other) = default;
+ ^
+ /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.h:225:16: note: move assignment operator of 'cooked_index' is implicitly deleted because field 'm_storage' has a deleted move assignment operator
+ auto_obstack m_storage;
+ ^
+ /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/gdb_obstack.h:128:3: note: 'operator=' has been explicitly marked deleted here
+ DISABLE_COPY_AND_ASSIGN (auto_obstack);
+ ^
+ /home/smarchi/src/binutils-gdb/gdb/../include/ansidecl.h:425:8: note: expanded from macro 'DISABLE_COPY_AND_ASSIGN'
+ void operator= (const TYPE &) = delete
+ ^
+
+ We explicitly make cooked_index have a default move constructor and
+ move assignment operator. But it doesn't actually happen because
+ cooked_index has a field of type auto_obstack, which isn't movable.
+ We don't actually need cooked_index to be movable at the moment, so
+ remove those lines.
+
+ Change-Id: Ifc1fe3d7d67e3ae1a14363d6c1869936fe80b0a2
+
+2022-04-14 Tom Tromey <tromey@adacore.com>
+
+ Let std::thread check pass even without pthreads
+ Currently, the configure check for std::thread relies on pthreads
+ existing. However, this means that if std::thread is implemented for
+ a non-pthreads host, then the check will yield the wrong answer. This
+ happened in AdaCore internal builds. Here, we have this GCC patch:
+
+ https://gcc.gnu.org/legacy-ml/gcc-patches/2019-06/msg01840.html
+
+ ... which adds mingw support to GCC's gthreads implementation, and
+ also to std::thread.
+
+ This configure change fixes this problem and enables threading for
+ gdb.
+
+2022-04-14 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: fix build errors in gdbsupport/thread-pool.h used with old gcc
+ When I build gdb with gcc 8.3, there exist the following build errors,
+ rename the typedef to task_t to fix them.
+
+ CXX thread-pool.o
+ In file included from /home/loongson/gdb.git/gdbsupport/thread-pool.cc:21:
+ /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h: In member function ‘std::future<void> gdb::thread_pool::post_task(std::function<void()>&&)’:
+ /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:69:44: error: declaration of ‘task’ shadows a previous local [-Werror=shadow=local]
+ std::packaged_task<void ()> task (std::move (func));
+ ^~~~
+ /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:102:39: note: shadowed declaration is here
+ typedef std::packaged_task<void ()> task;
+ ^~~~
+ /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h: In member function ‘std::future<_Res> gdb::thread_pool::post_task(std::function<T()>&&)’:
+ /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:80:41: error: declaration of ‘task’ shadows a previous local [-Werror=shadow=local]
+ std::packaged_task<T ()> task (std::move (func));
+ ^~~~
+ /home/loongson/gdb.git/gdbsupport/../gdbsupport/thread-pool.h:102:39: note: shadowed declaration is here
+ typedef std::packaged_task<void ()> task;
+ ^~~~
+
+2022-04-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Detect 'No MPX support'
+ On openSUSE Leap 15.3, mpx support has been disabled for m32, so I run into:
+ ...
+ (gdb) run ^M
+ Starting program: outputs/gdb.arch/i386-mpx/i386-mpx ^M
+ [Thread debugging using libthread_db enabled]^M
+ Using host libthread_db library "/lib64/libthread_db.so.1".^M
+ No MPX support^M
+ ...
+ and eventually into all sort of fails in this and other mpx test-cases.
+
+ Fix this by detecting the "No MPX support" message in have_mpx.
+
+ Tested on x86_64-linux with target boards unix and unix/-m32.
+
+2022-04-14 Sergei Trofimovich <siarheit@google.com>
+
+ M68K: avoid quadratic slowdlow in label alignment check
+ Before the change tc-m68k maintained a list of seen labels.
+ Alignment check traversed label list to resolve symbol to label.
+ This caused quadratic slowdown as each symbol was checked against
+ each label. Worst affected files are the ones built with debugging
+ enabled as DWARF generates many labels.
+
+ The change embeds auxiliary label information right into symbol using
+ TC_SYMFIELD_TYPE.
+
+ Before the change test from PR 29058 did not finish in 10 minutes. After
+ the change it finishes in 2 seconds.
+
+ gas/ChangeLog:
+
+ PR 29058
+ * config/tc-m68k.h (TC_SYMFIELD_TYPE): define as m68k_tc_sy.
+ * config/tc-m68k.c (m68k_frob_label): Use TC_SYMFIELD_TYPE to
+ store label information.
+
+2022-04-14 caiyinyu <caiyinyu@loongson.cn>
+
+ ld:LoongArch: Fix glibc fail: tst-audit25a/b.
+ bfd/
+
+ * elfnn-loongarch.c: Add new func elf_loongarch64_hash_symbol.
+
+2022-04-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-13 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: add ATTRIBUTE_PRINTF to complaint_interceptor::issue_complaint
+ Fix this error when building with clang++-14:
+
+ CXX complaints.o
+ /home/smarchi/src/binutils-gdb/gdb/complaints.c:130:65: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
+ g_complaint_interceptor->m_complaints.insert (string_vprintf (fmt, args));
+ ^~~
+
+ Change-Id: I0ef11f970510eb8638d1651fa0d5eeecd6a9d31a
+
+2022-04-13 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix clang build failure in msymbol_is_mips
+ Building with clang++-14, I see:
+
+ CXX mips-tdep.o
+ /home/smarchi/src/binutils-gdb/gdb/mips-tdep.c:453:12: error: use of bitwise '|' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
+ return !(MSYMBOL_TARGET_FLAG_MIPS16 (msym)
+ ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ /home/smarchi/src/binutils-gdb/gdb/mips-tdep.h:54:2: note: expanded from macro 'MSYMBOL_TARGET_FLAG_MIPS16'
+ (sym)->target_flag_1 ()
+ ^
+ /home/smarchi/src/binutils-gdb/gdb/mips-tdep.c:453:12: note: cast one or both operands to int to silence this warning
+ /home/smarchi/src/binutils-gdb/gdb/mips-tdep.h:54:2: note: expanded from macro 'MSYMBOL_TARGET_FLAG_MIPS16'
+ (sym)->target_flag_1 ()
+ ^
+
+ That's since commit e165fcef1e7 ("gdb: remove MSYMBOL_TARGET_FLAG_{1,2}
+ macros"). Fix this by using the boolean || rather than the bitwise |,
+ since the new methods return bool values. No change in behavior
+ expected.
+
+ Change-Id: Ia82664135aa25db64c29c92f5c1141859d345bf7
+
+2022-04-13 Alexander von Gluck IV <kallisti5@unixzen.com>
+
+ binutils: enable PE on 32bit haiku build
+ * config.bfd (x86-haiku): Add i386_pei_vec as a selectable format.
+
+2022-04-13 Pedro Alves <pedro@palves.net>
+
+ Make intrusive_list_node's next/prev private
+ Tromey noticed that intrusive_list_node leaves its data members
+ public, which seems sub-optimal.
+
+ This commit makes intrusive_list_node's data fields private.
+ intrusive_list_iterator, intrusive_list_reverse_iterator, and
+ intrusive_list do need to access the fields, so they are made friends.
+
+ Change-Id: Ia8b306b40344cc218d423c8dfb8355207a612ac5
+
+2022-04-13 Pedro Alves <pedro@palves.net>
+
+ Tidy gdb.base/parse_number.exp
+ Now that Ada is able to parse & print 0xffffffffffffffff (2^64-1) in
+ hex, move it to the else branch like most other languages.
+
+ Change-Id: Ib305f6bb2b6b230a1190ea783b245b865821094c
+
+2022-04-13 Alan Modra <amodra@gmail.com>
+
+ ubsan: member access within null pointer of union
+ Add some nonsense to cover "undefined behaviour".
+
+ * ldlang.c (section_for_dot): Avoid UB.
+
+2022-04-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-12 Tom Tromey <tromey@adacore.com>
+
+ Fix bug in Ada number lexing
+ On irc, Pedro pointed out that Ada couldn't properly handle
+ 0xffffffffffffffff. This used to work, but is a regression due to
+ some patches I wrote in the Ada lexer. This patch fixes the bug.
+
+2022-04-12 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix "passing NULL to memcpy" UBsan error in dwarf2/cooked-index.c
+ Reading a simple file compiled with :
+
+ $ gcc -DONE=1 -gdwarf-4 -g3 test.c
+ $ gcc --version
+ gcc (Ubuntu 9.4.0-1ubuntu1~20.04) 9.4.0
+
+ I get:
+
+ Reading symbols from /tmp/cwd/a.out...
+ /home/smarchi/src/binutils-gdb/gdb/dwarf2/cooked-index.c:332:11: runtime error: null pointer passed as argument 2, which is declared to never be null
+
+ It looks like even if the size is 0 (the size of the `entries` vector is
+ 0), we shouldn't be passing a NULL pointer to memcpy. And
+ `entries.data ()` returns NULL.
+
+ Fix that by using std::vector::insert to insert the items of entries
+ into m_entries. I haven't checked, but it should essentially compile
+ down to a memcpy, since the vector elements are trivially copyiable.
+
+ Change-Id: I75f1c901e9b522e42e89eb5936e2c70d68eb21e5
+
+2022-04-12 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: change subfile::line_vector to an std::vector
+ Change this field to an std::vector to facilitate memory management.
+ Since the linetable_entry array is copied into the symtab resulting from
+ the subfile, it is possible to change it without changing how symtab
+ stores the linetable entries (which would be a much larger change).
+
+ There is a small change in buildsym_compunit::record_line to avoid
+ accessing a now invalid linetable_entry. Before this patch, we keep a
+ pointer to the last linetable entry, pop it from the vector, and then
+ read last->line. It works with the manually-maintained array, but since
+ we now use std::vector::pop_back, I am afraid that it could be flagged
+ as an invalid access by the various static / dynamic analysis tools to
+ access the linetable_entry object after popping it from the vector.
+ Instead, record just the line number in an optional and use it.
+
+ There are substantial changes in xcoffread.c that simplify the code, but
+ I can't test them. I was hesitant to do this change because of that,
+ but I decided to send it anyway. I don't think that an almost dead
+ platform should hold back improving the code in the common parts of GDB.
+
+ The changes in xcoffread.c are:
+
+ - Make arrange_linetable "arrange" the linetable passed as a parameter,
+ instead of returning possibly a new one, possibly the same one.
+ - In the "Process main file's line numbers.", I'm not too sure what
+ happens. We get the lintable from "main_subfile", "arrange" it, but
+ then assign the result to the current subfile, obtained with
+ get_current_subfile. I assume that the current subfile is also the
+ main one, so now I just call arrange_linetable on the main subfile's
+ line table.
+ - Remove that weird "Useless if!!!" FIXME comment. It's been there
+ forever, but the "if" is still there, so I guess the "if" can stay
+ there.
+
+ Change-Id: I11799006fd85189e8cf5bd3a168f8f38c2c27a80
+
+2022-04-12 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: use std::vector for temporary linetable_entry array in arrange_linetable
+ Reduce manual memory management and make the code a bit easier to read.
+ This helps me a bit in the following patch.
+
+ I don't have a way to test this, it's best-effort.
+
+ Change-Id: I64af9cd756311deabc6cd95e701dfb21234a40a5
+
+2022-04-12 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: change subfile::name and buildsym_compunit::m_comp_dir to strings
+ Change subfile::name to be a string, for easier memory management.
+ Change buildsym_compunit::m_comp_dir as well, since we move one in to
+ the other at some point in patch_subfile_names, so it's easier to do
+ both at the same time. There are various NULL checks for both fields
+ currently, replace them with empty checks, I think it ends up
+ equivalent.
+
+ I can't test the change in xcoffread.c, it's best-effort.
+
+ Change-Id: I62b5fb08b2089e096768a090627ac7617e90a016
+
+2022-04-12 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: allocate subfile with new
+ Allocate struct subfile with new, initialize its fields instead of
+ memset-ing it to 0. Use a unique_ptr for the window after a subfile has
+ been allocated but before it is linked in the buildsym_compunit's list
+ of subfile (and therefore owned by the buildsym_compunit.
+
+ I can't test the change in xcoffread.c, it's best-effort. I couldn't
+ find where subfiles are freed in that file, I assume they were
+ intentionally (or not) leaked.
+
+ Change-Id: Ib3b6877de31b7e65bc466682f08dbf5840225f24
+
+2022-04-12 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: use decltype instead of typeof in dwarf2/read.c
+ When building with -std=c++11, I get:
+
+ CXX dwarf2/read.o
+ /home/smarchi/src/binutils-gdb/gdb/dwarf2/read.c: In function ‘void dwarf2_build_psymtabs_hard(dwarf2_per_objfile*)’:
+ /home/smarchi/src/binutils-gdb/gdb/dwarf2/read.c:7130:23: error: expected type-specifier before ‘typeof’
+ 7130 | using iter_type = typeof (per_bfd->all_comp_units.begin ());
+ | ^~~~~~
+
+ This is because typeof is a GNU extension. Use C++'s decltype keyword
+ instead.
+
+ Change-Id: Ieca2e8d25e50f71dc6c615a405a972a54de3ef14
+
+2022-04-12 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbsupport: use result_of_t instead of result_of in parallel-for.h
+ When building with -std=c++11, I get:
+
+ In file included from /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:22: /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/parallel-for.h:134:10: error: ‘result_of_t’ is not a member of ‘std’; did you mean ‘result_of’?
+ 134 | std::result_of_t<RangeFunction (RandomIt, RandomIt)>
+ | ^~~~~~~~~~~
+ | result_of
+
+ This is because result_of_t has been introduced in C++14. Use the
+ equivalent result_of<...>::type instead.
+
+ result_of and result_of_t have been removed in C++20 though, so I think
+ we'll need some patches eventually to make the code use invoke_result
+ instead, depending on the C++ version.
+
+ Change-Id: I4817f361c0ebcdd4b32976898fc368bb302b61b9
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Remove dwarf2_per_cu_data::v
+ Now that the psymtab reader has been removed, the
+ dwarf2_per_cu_data::v union is no longer needed. Instead, we can
+ simply move the members from dwarf2_per_cu_quick_data into
+ dwarf2_per_cu_data and remove the "quick" object entirely.
+
+ Delete DWARF psymtab code
+ This removes the DWARF psymtab reader.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Enable the new DWARF indexer
+ This patch finally enables the new indexer. It is left until this
+ point in the series to avoid any regressions; in particular, it has to
+ come after the changes to the DWARF index writer to avoid this
+ problem.
+
+ However, if you experiment with the series, this patch can be moved
+ anywhere from the patch to wire in the new reader to this point.
+ Moving this patch around is how I got separate numbers for the
+ parallelization and background finalization patches.
+
+ In the ongoing performance example, this reduces the time from the
+ baseline of 1.598869 to 0.903534.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Adapt .debug_names writer to new DWARF scanner
+ This updates the .debug_names writer to work with the new DWARF
+ scanner.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Adapt .gdb_index writer to new DWARF scanner
+ This updates the .gdb_index writer to work with the new DWARF scanner.
+ The .debug_names writer is deferred to another patch, to make review
+ simpler.
+
+ This introduces a small hack to psyms_seen_size, but is
+ inconsequential because this function will be deleted in a subsequent
+ patch.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Genericize addrmap handling in the DWARF index writer
+ This updates the DWARF index writing code to make the addrmap-writing
+ a bit more generic. Now, it can handle multiple maps, and it can work
+ using the maps generated by the new indexer.
+
+ Note that the new addrmap_index_data::using_index field will be
+ deleted in a future patch, when the rest of the DWARF psymtab code is
+ removed.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Change parameters to write_address_map
+ To support the removal of partial symtabs from the DWARF index writer,
+ this makes a small change to have write_address_map accept the address
+ map as a parameter, rather than assuming it always comes from the
+ per-BFD object.
+
+ Change the key type in psym_index_map
+ In order to change the DWARF index writer to avoid partial symtabs,
+ this patch changes the key type in psym_index_map (and renames that
+ type as well). Using the dwarf2_per_cu_data as the key makes it
+ simpler to reuse this code with the new indexer.
+
+ Rename write_psymtabs_to_index
+ We'll be removing all the psymtab code from the DWARF reader. As a
+ preparatory step, this renames write_psymtabs_to_index to avoid the
+ "psymtab" name.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ "Finalize" the DWARF index in the background
+ After scanning the CUs, the DWARF indexer merges all the data into a
+ single vector, canonicalizing C++ names as it proceeds. While not
+ necessarily single-threaded, this process is currently done in just
+ one thread, to keep memory costs lower.
+
+ However, this work is all done without reference to any data outside
+ of the indexes. This patch improves the apparent performance of GDB
+ by moving it to the background. All uses of the index are then made
+ to wait for this process to complete.
+
+ In our ongoing example, this reduces the scanning time on gdb itself
+ to 0.173937 (wall). Recall that before this patch, the time was
+ 0.668923; and psymbol reader does this in 1.598869. That is, at the
+ end of this series, we see about a 10x speedup.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Parallelize DWARF indexing
+ This parallelizes the new DWARF indexer. The indexer's storage was
+ designed so that each storage object and each indexer is fully
+ independent. This setup makes it simple to scan different CUs
+ independently.
+
+ This patch creates a new cooked index storage object per thread, and
+ then scans a subset of all the CUs in each such thread, using gdb's
+ existing thread pool.
+
+ In the ongoing "gdb gdb" example, this patch reduces the wall time
+ down to 0.668923, from 0.903534. (Note that the 0.903534 is the time
+ for the new index -- that is, when the "enable the new index" patch is
+ rebased to before this one. However, in the final series, that patch
+ appears toward the end. Hopefully this isn't too confusing.)
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Pre-read DWARF section data
+ Because BFD is not thread-safe, we need to be sure that any section
+ data that is needed is read before trying to do any DWARF indexing in
+ the background.
+
+ This patch takes a simple approach to this -- it pre-reads the
+ "info"-related sections. This is done for the main file, but also any
+ auxiliary files as well, such as the DWO file.
+
+ This patch could be perhaps enhanced by removing some now-redundant
+ calls to dwarf2_section_info::read.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Introduce thread-safe handling for complaints
+ This introduces a new class that can be used to make the "complaint"
+ code thread-safe. Instantiating the class installs a new handler that
+ collects complaints, and then prints them all when the object is
+ destroyed.
+
+ This approach requires some locks. I couldn't think of a better way
+ to handle this, though, because the I/O system is not thread-safe.
+
+ It seemed to me that only GDB developers are likely to enable
+ complaints, and because the complaint macro handle this case already
+ (before any locks are required), I reasoned that any performance
+ degradation that would result here would be fine.
+
+ As an aside about complaints -- are they useful at all? I just ignore
+ them, myself, since mostly they seem to indicate compiler problems
+ that can't be solved in the GDB world anyway. I'd personally prefer
+ them to be in a separate tool, like a hypothetical 'dwarflint'.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Wire in the new DWARF indexer
+ This wires the new DWARF indexer into the existing reader code. That
+ is, this patch makes the modification necessary to enable the new
+ indexer. It is not actually enabled by this patch -- that will be
+ done later.
+
+ I did a bit of performance testing for this patch and a few others. I
+ copied my built gdb to /tmp, so that each test would be done on the
+ same executable. Then, each time, I did:
+
+ $ ./gdb -nx
+ (gdb) maint time 1
+ (gdb) file /tmp/gdb
+
+ This patch is the baseline and on one machine came in at 1.598869 wall
+ time.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Implement quick_symbol_functions for cooked DWARF index
+ This implements quick_symbol_functions for the cooked DWARF index.
+ This is the code that interfaces between the new index and the rest of
+ gdb. Cooked indexes still aren't created by anything.
+
+ For the most part this is straightforward. It shares some concepts
+ with the existing DWARF indices. However, because names are stored
+ pre-split in the cooked index, name lookup here is necessarily
+ different; see expand_symtabs_matching for the gory details.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ The new DWARF indexer
+ This patch adds the code to index DWARF. This is just the scanner; it
+ reads the DWARF and constructs the index, but nothing calls it yet.
+
+ The indexer is split into two parts: a storage object and an indexer
+ object. This is done to support the parallelization of this code -- a
+ future patch will create a single storage object per thread.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Introduce the new DWARF index class
+ This patch introduces the new DWARF index class. It is called
+ "cooked" to contrast against a "raw" index, which is mapped from disk
+ without extra effort.
+
+ Nothing constructs a cooked index yet. The essential idea here is
+ that index entries are created via the "add" method; then when all the
+ entries have been read, they are "finalize"d -- name canonicalization
+ is performed and the entries are added to a sorted vector.
+
+ Entries use the DWARF name (DW_AT_name) or linkage name, not the full
+ name as is done for partial symbols.
+
+ These two facets -- the short name and the deferred canonicalization
+ -- help improve the performance of this approach. This will become
+ clear in later patches, when parallelization is added.
+
+ Some special code is needed for Ada, because GNAT only emits mangled
+ ("encoded", in the Ada lingo) names, and so we reconstruct the
+ hierarchical structure after the fact. This is also done in the
+ finalization phase.
+
+ One other aspect worth noting is that the way the "main" function is
+ found is different in the new code. Currently gdb will notice
+ DW_AT_main_subprogram, but won't recognize "main" during reading --
+ this is done later, via explicit symbol lookup. This is done
+ differently in the new code so that finalization can be done in the
+ background without then requiring a synchronization to look up the
+ symbol.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Update skip_one_die for new abbrev properties
+ This updates skip_one_die to speed it up in the cases where either
+ sibling_offset or size_if_constant are set.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Statically examine abbrev properties
+ The new DIE scanner works more or less along the lines indicated by
+ the text for the .debug_names section, disregarding the bugs in the
+ specification.
+
+ While working on this, I noticed that whether a DIE is interesting is
+ a static property of the DIE's abbrev. It also turns out that many
+ abbrevs imply a static size for the DIE data, and additionally that
+ for many abbrevs, the sibling offset is stored at a constant offset
+ from the start of the DIE.
+
+ This patch changes the abbrev reader to analyze each abbrev and stash
+ the results on the abbrev. These combine to speed up the new indexer.
+ If the "interesting" flag is false, GDB knows to skip the DIE
+ immediately. If the sibling offset is statically known, skipping can
+ be done without reading any attributes; and in some other cases, the
+ DIE can be skipped using simple arithmetic.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Introduce DWARF abbrev cache
+ The replacement for the DWARF psymbol reader works in a somewhat
+ different way. The current reader reads and stores all the DIEs that
+ might be interesting. Then, if it is missing a DIE, it re-scans the
+ CU and reads them all. This approach is used for both intra- and
+ inter-CU references.
+
+ I instrumented the partial DIE hash to see how frequently it was used:
+
+ [ 0] -> 1538165
+ [ 1] -> 4912
+ [ 2] -> 96102
+ [ 3] -> 175
+ [ 4] -> 244
+
+ That is, most DIEs are never used, and some are looked up twice -- but
+ this is just an artifact of the implementation of
+ partial_die_info::fixup, which may do two lookups.
+
+ Based on this, the new implementation doesn't try to store any DIEs,
+ but instead just re-scans them on demand. In order to do this,
+ though, it is convenient to have a cache of DWARF abbrevs. This way,
+ if a second CU is needed to resolve an inter-CU reference, the abbrevs
+ for that CU need only be computed a single time.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Add "fullname" handling to file_and_directory
+ This changes the file_and_directory object to be able to compute and
+ cache the "fullname" in the same way that is done by other code, like
+ the psymtab reader.
+
+ Specialize std::hash for gdb_exception
+ This adds a std::hash specialization for gdb_exception. This lets us
+ store these objects in a hash table, which is used later in this
+ series to de-duplicate the exception output from multiple threads.
+
+ Return vector of results from parallel_for_each
+ This changes gdb::parallel_for_each to return a vector of the results.
+ However, if the passed-in function returns void, the return type
+ remains 'void'. This functionality is used later, to parallelize the
+ new indexer.
+
+ Add batching parameter to parallel_for_each
+ parallel_for_each currently requires each thread to process at least
+ 10 elements. However, when indexing, it's fine for a thread to handle
+ just a single CU. This patch parameterizes this, and updates the one
+ user.
+
+ Refactor build_type_psymtabs_reader
+ The new DWARF scanner needs to save the entire cutu_reader object, not
+ just parts of it. In order to make this possible, this patch
+ refactors build_type_psymtabs_reader. This change is done separately
+ because it is easy to review in isolation and it helps make the later
+ patches smaller.
+
+ Add new overload of dwarf5_djb_hash
+ This adds a new overload of dwarf5_djb_hash. This is used in
+ subsequent patches.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Add name splitting
+ The new DWARF index code works by keeping names pre-split. That is,
+ rather than storing a symbol name like "a::b::c", the names "a", "b",
+ and "c" will be stored separately.
+
+ This patch introduces some helper code to split a full name into its
+ components.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Let skip_one_die not skip children
+ This patch adds an option to skip_one_die that causes it not to skip
+ child DIEs. This is needed in the new scanner.
+
+ Allow ada_decode not to decode operators
+ The new DWARF scanner records names as they appear in DWARF. However,
+ because Ada is unusual, it also decodes the Ada names to synthesize
+ package components for them. In order for this to work out properly,
+ gdb also needs a mode where ada_decode can be instructed not to decode
+ Ada operator names. That is what this patch implements.
+
+ Refactor dwarf2_get_pc_bounds
+ This changes dwarf2_get_pc_bounds so that it does not directly access
+ a psymtab or psymtabs_addrmap. Instead, both the addrmap and the
+ desired payload are passed as parameters. This makes it suitable to
+ be used by the new indexer.
+
+ Add dwarf2_per_cu_data::addresses_seen
+ This adds a new member to dwarf2_per_cu_data that indicates whether
+ addresses have been seen for this CU. This is then set by the
+ .debug_aranges reader. The idea here is to detect when a CU does not
+ have address information, so that the new indexer will know to do
+ extra scanning in that case.
+
+ Fix latent bug in read_addrmap_from_aranges
+ Tom de Vries found a failure that we tracked down to a latent bug in
+ read_addrmap_from_aranges (previously create_addrmap_from_aranges).
+ The bug is that this code can erroneously reject .debug_aranges when
+ dwz is in use, due to CUs at duplicate offsets. Because aranges can't
+ refer to a CU coming from the dwz file, the fix is to simply skip such
+ CUs in the loop.
+
+ Split create_addrmap_from_aranges
+ This patch splits create_addrmap_from_aranges into a wrapper function
+ and a worker function. The worker function is then used in a later
+ patch.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Allow thread-pool.h to work without threads
+ thread-pool.h requires CXX_STD_THREAD in order to even be included.
+ However, there's no deep reason for this, and during review we found
+ that one patch in the new DWARF indexer series unconditionally
+ requires the thread pool.
+
+ Because the thread pool already allows a task to be run in the calling
+ thread (for example if it is configured to have no threads in the
+ pool), it seemed straightforward to make this code ok to use when host
+ threads aren't available at all.
+
+ This patch implements this idea. I built it on a thread-less host
+ (mingw, before my recent configure patch) and verified that the result
+ builds.
+
+ After the thread-pool change, parallel-for.h no longer needs any
+ CXX_STD_THREAD checks at all, so this patch removes these as well.
+
+2022-04-12 Nick Clifton <nickc@redhat.com>
+
+ Rebase the zlib sources to the 1.2.12 release
+
+2022-04-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/stap-probe.exp with read1
+ When running test-case gdb.base/stap-probe.exp with make target check-read1, I
+ run into this and similar:
+ ...
+ FAIL: gdb.base/stap-probe.exp: without semaphore, not optimized: \
+ info probes stap (timeout)
+ ...
+
+ Fix this by using gdb_test_lines instead of gdb_test.
+
+ Tested on x86_64-linux.
+
+2022-04-12 Tom Tromey <tom@tromey.com>
+
+ Add C++ "save gdb-index" test
+ I found a bug in the new DWARF reader series, related to the handling
+ of enumerator names. This bug caused a crash, so this patch adds a
+ regression test for this particular case. I'm checking this in.
+
+2022-04-12 Tom Tromey <tromey@adacore.com>
+
+ Remove "Ada Settings" node from the manual
+ A while back, I sent a patch to unify the Ada varsize-limit setting
+ with the more generic max-value-size:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-September/182004.html
+
+ However, it turns out I somehow neglected to send part of the patch.
+ Internally, I also removed the "Ada Settings" node from the manual, as
+ it only documents the obsolete setting.
+
+ This patch removes this text.
+
+2022-04-12 Tom Tromey <tromey@adacore.com>
+
+ Require GNAT debug info for some Ada tests
+ A few Ada tests require some debug info in the GNAT runtime. When run
+ without this info, these tests can't pass. This patch changes these
+ tests to detect this situation and stop with "untested".
+
+2022-04-12 Nick Clifton <nickc@redhat.com>
+
+ Stop strip from removing debuglink sections.
+ PR 28992
+ * objcopy.c (is_strip_section_1): Do not delete debuglink sections
+ when stripping debug information.
+
+2022-04-12 Jan Beulich <jbeulich@suse.com>
+
+ gas: new_logical_line{,_flags}() can return "void"
+ With the sole user of the return value gone, convert the return type to
+ void. This in turn allows simplifying another construct, by moving it
+ slightly later in the function.
+
+ gas: drop .appfile and .appline
+ These were used originally to represent "# <line> <file>" constructs
+ inserted by (typically) compilers when pre-processing. Quite some time
+ ago they were replaced by .linefile though. Since the original
+ directives were never documented, we ought to be able to remove support
+ for them. As a result in a number of case function parameter aren't used
+ anymore and can hence be dropped.
+
+2022-04-12 Jan Beulich <jbeulich@suse.com>
+
+ gas: further adjust file/line handling for .macro
+ Commit 7992631e8c0b ("gas/Dwarf: improve debug info generation from .irp
+ and alike blocks"), while dealing okay with actual assembly source files
+ not using .file/.line and alike outside but not inside of .macro, has
+ undue effects when the logical file/line pair was already overridden:
+ Line numbers would continuously increment while processing the expanded
+ macro, while the goal of the PR gas/16908 workaround is to keep the
+ expansion associated with the line invoking the macro. However, as soon
+ as enough state was overridden _inside_ the macro to cause as_where() to
+ no longer fall back top as_where_physical(), honor this by resuming the
+ bumping of the logical line number.
+
+ Note that from_sb_is_expansion's initializer was 1 for an unknown
+ reason. While renaming the variable and changing its type, also change
+ the initializer to "expanding_none", which would have been "0" in the
+ original code. Originally the initializer value itself wasn't ever used
+ anyway (requiring sb_index != -1), as it necessarily had changed in
+ input_scrub_include_sb() alongside setting sb_index to other than -1.
+
+ Strictly speaking input_scrub_insert_line() perhaps shouldn't use
+ expanding_none, yet none of the other enumerators fit there either. And
+ then strictly speaking that function probably shouldn't exist in the
+ first place. It's used only by tic54x.
+
+2022-04-12 Jan Beulich <jbeulich@suse.com>
+
+ gas: further adjust file/line handling for .irp and alike
+ Commit 7992631e8c0b ("gas/Dwarf: improve debug info generation from .irp
+ and alike blocks"), while dealing okay with actual assembly source files
+ not using .file/.line and alike outside but not inside of .irp et al,
+ has undue effects when the logical file/line pair was already
+ overridden: Line numbers would continuously increment upon every
+ iteration, thus potentially getting far off. Furthermore it left it to
+ the user to actually insert .file/.line inside such constructs. Note
+ though that before aforementioned change things weren't pretty either:
+ Diagnostics (and debug info) would be associated with the directive
+ terminating the iteration construct, rather than with the actual lines.
+
+ Handle this automatically by simply latching the present line and then
+ re-instating coordinates first thing on every iteration; note that the
+ file can't change from what was previously pushed on the scrubber's
+ state stack, and hence can be taken from there by using a new flavor of
+ .linefile (which is far better memory-footprint-wise than recording the
+ full path in the inserted directive). (This then leaves undisturbed any
+ file/line control occurring in the body of the construct, as these will
+ only be seen and processed afterwards.)
+
+2022-04-12 Jan Beulich <jbeulich@suse.com>
+
+ x86: make {disp16} work similarly to {disp32}
+ In a few places {disp32} was handled specially when really {disp16}
+ wants handling just the same.
+
+2022-04-12 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng doesn't build with gcc 5.5
+ gprofng/ChangeLog
+ 2022-04-07 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/29026
+ * configure.ac: Check version of bison.
+ * src/Makefile.am (QLParser.yy): Run bison
+ * src/QLParser.yy: Adapted for bison 3.04 or later.
+ * src/DbeSession.cc: make some params const.
+ * src/DbeSession.h: Likewise.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+ * src/Makefile.in: Regenerate.
+ * src/QLParser.tab.cc: Deleted.
+ * src/QLParser.tab.hh: Deleted.
+ * doc/Makefile.in: Regenerate.
+ * gp-display-html/Makefile.in: Regenerate.
+ * libcollector/configure: Regenerate.
+
+2022-04-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-11 John Baldwin <jhb@FreeBSD.org>
+
+ i386-fbsd-nat: Remove two unused variables.
+ Earlier versions of the change in
+ 1285ce8629b37f800bf21731ee7c7a8b1b8d0233 used this variable, but not
+ the final version that landed.
+
+2022-04-11 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove MSYMBOL_TARGET_FLAG_{1,2} macros
+ Replace with equivalent getter/setter macros.
+
+ Change-Id: I1042564dd47347337374762bd64ec31b5c573ee2
+
+2022-04-11 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove minimal symbol size macros
+ Remove MSYMBOL_HAS_SIZE, MSYMBOL_SIZE and SET_MSYMBOL_SIZE, replace them
+ with equivalent methods.
+
+ Change-Id: I6ee1cf82df37e58dff52ea6568ceb4649c7d7538
+
+2022-04-11 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove MSYMBOL_TYPE macro
+ Add a getter and a setter for a minimal symbol's type. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: I89900df5ffa5687133fe1a16b2e0d4684e67a77d
+
+2022-04-11 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove symbol value macros
+ Remove all macros related to getting and setting some symbol value:
+
+ #define SYMBOL_VALUE(symbol) (symbol)->value.ivalue
+ #define SYMBOL_VALUE_ADDRESS(symbol) \
+ #define SET_SYMBOL_VALUE_ADDRESS(symbol, new_value) \
+ #define SYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes
+ #define SYMBOL_VALUE_COMMON_BLOCK(symbol) (symbol)->value.common_block
+ #define SYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
+ #define SYMBOL_VALUE_CHAIN(symbol) (symbol)->value.chain
+ #define MSYMBOL_VALUE(symbol) (symbol)->value.ivalue
+ #define MSYMBOL_VALUE_RAW_ADDRESS(symbol) ((symbol)->value.address + 0)
+ #define MSYMBOL_VALUE_ADDRESS(objfile, symbol) \
+ #define BMSYMBOL_VALUE_ADDRESS(symbol) \
+ #define SET_MSYMBOL_VALUE_ADDRESS(symbol, new_value) \
+ #define MSYMBOL_VALUE_BYTES(symbol) (symbol)->value.bytes
+ #define MSYMBOL_BLOCK_VALUE(symbol) (symbol)->value.block
+
+ Replace them with equivalent methods on the appropriate objects.
+
+ Change-Id: Iafdab3b8eefc6dc2fd895aa955bf64fafc59ed50
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/doc: add section about Fortran intrinsic functions and types
+ The earlier version of this document had no sections about the
+ available Fortran intrinsic functions or the Fortran builtin types.
+
+ I added two sections 'Fortran intrinsics' and 'Fortran types' to
+ document the available Fortran language features. The subsection
+ 'Fortran Defaults' has been integrated into the Fortran subsection.
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran/testsuite: add complex from integers test
+ When working on the files I noted that there was no actual test for a
+ COMPLEX built from two INTEGERS. I added that now for completion.
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: rewrite intrinsic handling and add some missing overloads
+ The operators FLOOR, CEILING, CMPLX, LBOUND, UBOUND, and SIZE accept
+ (some only with Fortran 2003) the optional parameter KIND. This
+ parameter determines the kind of the associated return value. So far,
+ implementation of this kind parameter has been missing in GDB.
+ Additionally, the one argument overload for the CMPLX intrinsic function
+ was not yet available.
+
+ This patch adds overloads for all above mentioned functions to the
+ Fortran intrinsics handling in GDB.
+
+ It re-writes the intrinsic function handling section to use the helper
+ methods wrap_unop_intrinsic/wrap_binop_intrinsic/wrap_triop_intrinsic.
+ These methods define the action taken when a Fortran intrinsic function
+ is called with a certain amount of arguments (1/2/3). The helper methods
+ fortran_wrap2_kind and fortran_wrap3_kind have been added as equivalents
+ to the existing wrap and wrap2 methods.
+
+ After adding more overloads to the intrinsics handling, some of the
+ operation names were no longer accurate. E.g. UNOP_FORTRAN_CEILING
+ has been renamed to FORTRAN_CEILING as it is no longer a purely unary
+ intrinsic function. This patch also introduces intrinsic functions with
+ one, two, or three arguments to the Fortran parser and the
+ UNOP_OR_BINOP_OR_TERNOP_INTRINSIC token has been added.
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: rename f77_keywords to f_keywords
+ Rename f77_keywords to f_keywords since some of the introduced keywords
+ in the array are f90 only.
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: Change GDB print for fortran default types
+ Currently, when asking GDB to print the type of a Fortran default type
+ such as INTEGER or REAL, GDB will return the default name of that type,
+ e.g. "integer"/"real":
+
+ (gdb) ptype integer
+ type = integer
+ (gdb) ptype real
+ type = real
+
+ For LOGICAL and COMPLEX it would return the actual underlying types
+
+ (gdb) ptype logical
+ type = logical*4
+ (gdb) ptype complex
+ type = complex*4
+
+ Similarly, GDB would print the default integer type for the underlying
+ default type:
+
+ (gdb) ptype integer*4
+ type = integer
+ (gdb) ptype real*4
+ type = real
+ (gdb) ptype logical
+ type = logical*4
+ (gdb) ptype complex*4
+ type = complex*4
+
+ This is inconsistent and a bit confusing. Both options somehow indicate
+ what the internal underlying type for the default type is - but I think
+ the logical/complex version is a bit clearer.
+
+ Consider again:
+
+ (gdb) ptype integer
+ type = integer
+
+ This indicates to a user that the type of "integer" is Fortran's default
+ integer type. Without examining "ptype integer*4" I would expect, that
+ any variable declared integer in the actual code would also fit into a
+ GDB integer. But, since we cannot adapt out internal types to the
+ compiler flags used at compile time of a debugged binary, this might be
+ wrong. Consider debugging Fortran code compiled with GNU and e.g. the
+ "-fdefault-integer-8" flag. In this case the gfortran default integer
+ would be integer*8 while GDB internally still would use a builtin_integer,
+ so an integer of the size of an integer*4 type. On the other hand having
+ GDB print
+
+ (gdb) ptype integer
+ type = integer*4
+
+ makes this clearer. I would still be tempted to fit a variable declared
+ integer in the code into a GDB integer - but at least ptype would
+ directly tell me what is going on. Note, that when debugging a binary
+ compiled with "-fdefault-integer-8" a user will always see the actual
+ underlying type of any variable declared "integer" in the Fortran code.
+ So having the code
+
+ program test
+ integer :: a = 5
+ print *, a ! breakpt
+ end program test
+
+ will, when breaking at breakpt print
+
+ (gdb) ptype var
+ type = integer(kind=4)
+
+ or
+
+ (gdb) ptype var
+ type = integer(kind=8)
+
+ depending on the compiler flag.
+
+ This patch changes the outputs for the REAL and INTEGER default types to
+ actually print the internally used type over the default type name.
+
+ The new behavior for the above examples is:
+
+ (gdb) ptype integer
+ type = integer*4
+ (gdb) ptype integer*4
+ type = integer*4
+
+ Existing testcases have been adapted to reflect the new behavior.
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: clean-up Fortran intrinsic types
+ The currently implemented intrinsic type handling for Fortran missed some
+ tokens and their parsing. While still not all Fortran type kinds are
+ implemented this patch at least makes the currently handled types
+ consistent. As an example for what this patch does, consider the
+ intrinsic type INTEGER. GDB implemented the handling of the
+ keywords "integer" and "integer_2" but missed "integer_4" and "integer_8"
+ even though their corresponding internal types were already available as
+ the Fortran builtin types builtin_integer and builtin_integer_s8.
+ Similar problems applied to LOGICAL, REAL, and COMPLEX. This patch adds
+ all missing tokens and their parsing. Whenever a section containing the
+ type handling was touched, it also was reordered to be in a more easy to
+ grasp order. All INTEGER/REAL/LOGICAL/COMPLEX types were grouped
+ together and ordered ascending in their size making a missing one more
+ easy to spot.
+
+ Before this change GDB would print the following when tyring to use the
+ INTEGER keywords:
+
+ (gdb) set language fortran
+ (gdb) ptype integer*1
+ unsupported kind 1 for type integer
+ (gdb) ptype integer_1
+ No symbol table is loaded. Use the "file" command.
+ (gdb) ptype integer*2
+ type = integer*2
+ (gdb) ptype integer_2
+ type = integer*2
+ (gdb) ptype integer*4
+ type = integer
+ (gdb) ptype integer_4
+ No symbol table is loaded. Use the "file" command.
+ (gdb) ptype integer*8
+ type = integer*8
+ (gdb) ptype integer_8
+ No symbol table is loaded. Use the "file" command.
+ (gdb) ptype integer
+ type = integer
+
+ With this patch all keywords are available and the GDB prints:
+
+ (gdb) set language fortran
+ (gdb) ptype integer*1
+ type = integer*1
+ (gdb) ptype integer_1
+ type = integer*1
+ (gdb) ptype integer*2
+ type = integer*2
+ (gdb) ptype integer_2
+ type = integer*2
+ (gdb) ptype integer*4
+ type = integer*4
+ (gdb) ptype integer_4
+ type = integer*4
+ (gdb) ptype integer*8
+ type = integer*8
+ (gdb) ptype integer_8
+ type = integer*8
+ (gdb) ptype integer
+ type = integer
+
+ The described changes have been applied to INTEGER, REAL, COMPLEX,
+ and LOGICAL. Existing testcases have been adapted to reflect the
+ new behavior. Tests for formerly missing types have been added.
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: change default logical type to builtin_logical
+ According to the Fortran standard, logical is of the size of a
+ 'single numeric storage unit' (just like real and integer). For
+ gfortran, flang and ifx/ifort this storage unit (or the default
+ logical type) is of size kind 4, actually occupying 4 bytes of
+ storage, and so the default type for logical expressions in
+ Fortran should probably also be Logical*4 and not Logical*2. I
+ adapted GDB's behavior to be in line with
+ gfortran/ifort/ifx/flang.
+
+ gdb/fortran: reformat build_fortran_types in f-lang.c
+ Add a few newlines after the type definitions and remove some
+ unnecessary linebreaks.
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: fix complex type in Fortran builtin types
+ Before this patch things like
+
+ (gdb) ptype complex*8
+ complex*16
+ (gdb) ptype complex*4
+ complex*8
+
+ were possible in GDB, which seems confusing for a user. The reason
+ is a mixup in the implementation of the Fortran COMPLEX type. In
+ Fortran the "*X" after a type would normally (I don't think this
+ is language required) specify the type's size in memory. For the
+ COMPLEX type the kind parameters usually (at least for GNU, Intel, Flang)
+ specify not the size of the whole type but the size of the individual
+ two REALs used to form the COMPLEX. Thus, a COMPLEX*4 will usually
+ consist of two REAL*4s. Internally this type was represented by a
+ builtin_complex_s8 - but here I think the s8 actually meant the raw
+ size of the type. This is confusing and I renamed the types (e.g.
+ builting_complex_s8 became builtin_complex_s4 according to its most
+ common useage) and their printed names to their language equivalent.
+ Additionally, I added the default COMPLEX type "COMPLEX" being the same
+ as a COMPLEX*4 (as is normally the case) and removed the latter. I added
+ a few tests for this new behavior as well.
+
+ The new behavior is
+
+ (gdb) ptype complex*8
+ complex*8
+ (gdb) ptype complex*4
+ complex*4
+
+2022-04-11 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/f-lang: remove hidden ^L characters
+
+ gdb/f-lang: add Integer*1 to Fortran builtin types
+ Add builtin_integer_s1 of size TARGET_CHAR_BIT to Fortran builtin types.
+
+2022-04-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/annota1.exp with pie
+ Since commit 359efc2d894 ("[gdb/testsuite] Make gdb.base/annota1.exp more
+ robust") we see this fail with target board unix/-fPIE/-pie:
+ ...
+ FAIL: gdb.base/annota1.exp: run until main breakpoint (timeout)
+ ...
+
+ The problem is that the commit makes the number and order of matched
+ annotations fixed, while between target boards unix and unix/-fPIE/-pie there
+ is a difference:
+ ...
+ \032\032post-prompt
+ Starting program: outputs/gdb.base/annota1/annota1
+
+ +\032\032breakpoints-invalid
+ +
+ \032\032starting
+
+ \032\032frames-invalid
+ ...
+
+ Fix this by optionally matching the additional annotation.
+
+ Tested on x86_64-linux.
+
+2022-04-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/dw2-lines.exp for m32 pie
+ As reported in PR29043, when running test-case gdb.dwarf2/dw2-lines.exp with
+ target board unix/-m32/-fPIE/-pie, we run into:
+ ...
+ Breakpoint 2, 0x56555540 in bar ()^M
+ (gdb) PASS: gdb.dwarf2/dw2-lines.exp: cv=2: cdw=32: lv=2: ldw=32: \
+ continue to breakpoint: foo \(1\)
+ next^M
+ Single stepping until exit from function bar,^M
+ which has no line number information.^M
+ 0x56555587 in main ()^M
+ (gdb) FAIL: gdb.dwarf2/dw2-lines.exp: cv=2: cdw=32: lv=2: ldw=32: \
+ next to foo (2)
+ ...
+
+ The problem is that the bar breakpoint ends up at an unexpected location
+ because:
+ - the synthetic debug info is incomplete and doesn't provide line info
+ for the prologue part of the function, so consequently gdb uses the i386
+ port prologue skipper to get past the prologue
+ - the i386 port prologue skipper doesn't get past a get_pc_thunk call.
+
+ Work around this in the test-case by breaking on bar_label instead.
+
+ Tested on x86_64-linux with target boards unix, unix/-m32, unix/-fPIE/-pie and
+ unix/-m32/-fPIE/-pie.
+
+2022-04-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-09 Tom Tromey <tom@tromey.com>
+
+ Remove MSYMBOL_VALUE_CHAIN
+ I noticed that MSYMBOL_VALUE_CHAIN is unused, so this patch removes it.
+
+2022-04-09 Alan Modra <amodra@gmail.com>
+
+ Rearrange struct bfd_section a little
+ For better packing on 64-bit hosts.
+
+ * section.c (struct bfd_section): Move next and prev field earlier.
+ Move alignment_power later.
+ (BFD_FAKE_SECTION): Adjust to suit.
+ * bfd-in2.h: Regenerate.
+
+2022-04-09 Alan Modra <amodra@gmail.com>
+
+ Don't run pr27228 test for hppa
+ As the comment says, hppa doesn't support use of BFD_RELOC_* in
+ .reloc directives. Using xfail can result in a spurious XPASS result
+ as BFD_RELOC values change.
+
+ * testsuite/gas/elf/pr27228.d: Change xfail to notarget for hppa.
+
+2022-04-09 Alan Modra <amodra@gmail.com>
+
+ Correct nds32 readelf reloc numbers
+ * readelf.c (is_32bit_abs_reloc, is_16bit_abs_reloc): Comment fixes.
+ (is_none_reloc): Correct nds32 reloc numbers.
+
+2022-04-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-08 Fangrui Song <i@maskray.me>
+
+ gas: Port "copy st_size only if unset" to aarch64 and riscv
+ And disable the new test gas/elf/size.s for alpha which uses its own
+ .set, for hppa*-*-hpux* which does not allow .size before declaration.
+
+2022-04-08 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: fprintf_styled_func not inizialized for disassembler
+ gprofng/ChangeLog
+ 2022-04-07 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * libcollector/unwind.c: inizialize fprintf_styled_func.
+ * src/Disasm.cc: Likewise.
+
+2022-04-08 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: zlib handling
+ gprofng/ChangeLog
+ 2022-04-06 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * configure.ac: Add AM_ZLIB.
+ * src/Makefile.am: Add $(ZLIBINC) and $(ZLIB).
+ * gprofng/src/DbeSession.h: Likewise.
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * gp-display-html/Makefile.in: Regenerate.
+ * src/Makefile.in: Regenerate.
+
+2022-04-08 Pedro Alves <pedro@palves.net>
+
+ gdb: Avoid undefined shifts, fix Go shifts
+ I noticed that a build of GDB with GCC + --enable-ubsan, testing
+ against GDBserver showed this GDB crash:
+
+ (gdb) PASS: gdb.trace/trace-condition.exp: trace: 0x00abababcdcdcdcd << 46 == 0x7373400000000000: advance to trace begin
+ tstart
+ ../../src/gdb/valarith.c:1365:15: runtime error: left shift of 48320975398096333 by 46 places cannot be represented in type 'long int'
+ ERROR: GDB process no longer exists
+ GDB process exited with wait status 269549 exp9 0 1
+ UNRESOLVED: gdb.trace/trace-condition.exp: trace: 0x00abababcdcdcdcd << 46 == 0x7373400000000000: start trace experiment
+
+ The problem is that, "0x00abababcdcdcdcd << 46" is an undefined signed
+ left shift, because the result is not representable in the type of the
+ lhs, which is signed. This actually became defined in C++20, and if
+ you compile with "g++ -std=c++20 -Wall", you'll see that GCC no longer
+ warns about it, while it warns if you specify prior language versions.
+
+ While at it, there are a couple other situations that are undefined
+ (and are still undefined in C++20) and result in GDB dying: shifting
+ by a negative ammount, or by >= than the bit size of the promoted lhs.
+ For the latter, GDB shifts using (U)LONGEST internally, so you have to
+ shift by >= 64 bits to see it:
+
+ $ gdb --batch -q -ex "p 1 << -1"
+ ../../src/gdb/valarith.c:1365:15: runtime error: shift exponent -1 is negative
+ $ # gdb exited
+
+ $ gdb --batch -q -ex "p 1 << 64"
+ ../../src/gdb/valarith.c:1365:15: runtime error: shift exponent 64 is too large for 64-bit type 'long int'
+ $ # gdb exited
+
+ Also, right shifting a negative value is implementation-defined
+ (before C++20, after which it is defined). For this, I chose to
+ change nothing in GDB other than adding tests, as I don't really know
+ whether we need to do anything. AFAIK, most implementations do an
+ arithmetic right shift, and it may be we don't support any host or
+ target that behaves differently. Plus, this becomes defined in C++20
+ exactly as arithmetic right shift.
+
+ Compilers don't error out on such shifts, at best they warn, so I
+ think GDB should just continue doing the shifts anyhow too.
+
+ Thus:
+
+ - Adjust scalar_binop to avoid the undefined paths, either by adding
+ explicit result paths, or by casting the lhs of the left shift to
+ unsigned, as appropriate.
+
+ For the shifts by a too-large count, I made the result be what you'd
+ get if you split the large count in a series of smaller shifts.
+ Thus:
+
+ Left shift, positive or negative lhs:
+
+ V << 64
+ => V << 16 << 16 << 16 << 16
+ => 0
+
+ Right shift, positive lhs:
+
+ Vpos >> 64
+ => Vpos >> 16 >> 16 >> 16 >> 16
+ => 0
+
+ Right shift, negative lhs:
+
+ Vneg >> 64
+ => Vneg >> 16 >> 16 >> 16 >> 16
+ => -1
+
+ This is actually Go's semantics (the compiler really emits
+ instructions to make it so that you get 0 or -1 if you have a
+ too-large shift). So for that language GDB does the shift and
+ nothing else. For other C-like languages where such a shift is
+ undefined, GDB warns in addition to performing the shift.
+
+ For shift by a negative count, for Go, this is a hard error. For
+ other languages, since their compilers only warn, I made GDB warn
+ too. The semantics I chose (we're free to pick them since this is
+ undefined behavior) is as-if you had shifted by the count cast to
+ unsigned, thus as if you had shifted by a too-large count, thus the
+ same as the previous scenario illustrated above.
+
+ Examples:
+
+ (gdb) set language go
+ (gdb) p 1 << 100
+ $1 = 0
+ (gdb) p -1 << 100
+ $2 = 0
+ (gdb) p 1 >> 100
+ $3 = 0
+ (gdb) p -1 >> 100
+ $4 = -1
+ (gdb) p -2 >> 100
+ $5 = -1
+ (gdb) p 1 << -1
+ left shift count is negative
+
+ (gdb) set language c
+ (gdb) p -2 >> 100
+ warning: right shift count >= width of type
+ $6 = -1
+ (gdb) p -2 << 100
+ warning: left shift count >= width of type
+ $7 = 0
+ (gdb) p 1 << -1
+ warning: left shift count is negative
+ $8 = 0
+ (gdb) p -1 >> -1
+ warning: right shift count is negative
+ $9 = -1
+
+ - The warnings' texts are the same as what GCC prints.
+
+ - Add comprehensive tests in a new gdb.base/bitshift.exp testcase, so
+ that we exercise all these scenarios.
+
+ Change-Id: I8bcd5fa02de3114b7ababc03e65702d86ec8d45d
+
+2022-04-08 Pedro Alves <pedro@palves.net>
+
+ Fix undefined behavior in the Fortran, Go and Pascal number parsers
+ This commit ports these two fixes to the C parser:
+
+ commit ebf13736b42af47c9907b5157c8e80c78dbe00e1
+ CommitDate: Thu Sep 4 21:46:28 2014 +0100
+
+ parse_number("0") reads uninitialized memory
+
+ commit 20562150d8a894bc91657c843ee88c508188e32e
+ CommitDate: Wed Oct 3 15:19:06 2018 -0600
+
+ Avoid undefined behavior in parse_number
+
+ ... to the Fortran, Go, and Fortran number parsers, fixing the same
+ problems there.
+
+ Also add a new testcase that exercises printing 0xffffffffffffffff
+ (max 64-bit) in all languages, which crashes a GDB built with UBsan
+ without the fix.
+
+ I moved get_set_option_choices out of all-architectures.exp.tcl to
+ common code to be able to extract all the supported languages. I did
+ a tweak to it to generalize it a bit -- you now have to pass down the
+ "set" part of the command as well. This is so that the proc can be
+ used with "maintenance set" commands as well in future.
+
+ Change-Id: I8e8f2fdc1e8407f63d923c26fd55d98148b9e16a
+
+2022-04-08 Nick Clifton <nickc@redhat.com>
+
+ Debug info for function in Windows PE binary on wrong instruction
+ PR 29038
+ * coffgen.c (coff_find_nearest_line_with_names): Fix typo
+ retrieving saved bias.
+
+2022-04-08 Simon Marchi <simon.marchi@efficios.com>
+
+ Pass PKG_CONFIG_PATH down from top-level Makefile
+ [Sending to binutils, gdb-patches and gcc-patches, since it touches the
+ top-level Makefile/configure]
+
+ I have my debuginfod library installed in a non-standard location
+ (/opt/debuginfod), which requires me to set
+ PKG_CONFIG_PATH=/opt/debuginfod/lib/pkg-config. If I just set it during
+ configure:
+
+ $ PKG_CONFIG_PATH=/opt/debuginfod/lib/pkg-config ./configure --with-debuginfod
+ $ make
+
+ or
+
+ $ ./configure --with-debuginfod PKG_CONFIG_PATH=/opt/debuginfod/lib/pkg-config
+ $ make
+
+ Then PKG_CONFIG_PATH is only present (and ignored) during the top-level
+ configure. When running make (which runs gdb's and binutils'
+ configure), PKG_CONFIG_PATH is not set, which results in their configure
+ script not finding the library:
+
+ checking for libdebuginfod >= 0.179... no
+ configure: error: "--with-debuginfod was given, but libdebuginfod is missing or unusable."
+
+ Change the top-level configure/Makefile system to capture the value
+ passed when configuring the top-level and pass it down to
+ subdirectories (similar to CFLAGS, LDFLAGS, etc).
+
+ I don't know much about the top-level build system, so I really don't
+ know if I did this correctly. The changes are:
+
+ - Use AC_SUBST(PKG_CONFIG_PATH) in configure.ac, so that
+ @PKG_CONFIG_PATH@ gets replaced with the actual PKG_CONFIG_PATH value
+ in config files (i.e. Makefile)
+ - Add a PKG_CONFIG_PATH Makefile variable in Makefile.tpl, initialized
+ to @PKG_CONFIG_PATH@
+ - Add PKG_CONFIG_PATH to HOST_EXPORTS in Makefile.tpl, which are the
+ variables set when running the sub-configures
+
+ I initially added PKG_CONFIG_PATH to flags_to_pass, in Makefile.def, but
+ I don't think it's needed. AFAIU, this defines the flags to pass down
+ when calling "make" in subdirectories. We only need PKG_CONFIG_PATH to
+ be passed down during configure. After that, it's captured in
+ gdb/config.status, so even if a "make" causes a re-configure later
+ (because gdb/configure has changed, for example), the PKG_CONFIG_PATH
+ value will be remembered.
+
+ ChangeLog:
+
+ * configure.ac: Add AC_SUBST(PKG_CONFIG_PATH).
+ * configure: Re-generate.
+ * Makefile.tpl (HOST_EXPORTS): Pass PKG_CONFIG_PATH.
+ (PKG_CONFIG_PATH): New.
+ * Makefile.in: Re-generate.
+
+ Change-Id: I91138dfca41c43b05e53e445f62e4b27882536bf
+
+2022-04-08 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: use nopie in gdb.dwarf2/dw2-inline-param.exp
+ I see this failure:
+
+ (gdb) run ^M
+ Starting program: /home/smarchi/build/binutils-gdb/gdb/testsuite/outputs/gdb.dwarf2/dw2-inline-param/dw2-inline-param ^M
+ Warning:^M
+ Cannot insert breakpoint 1.^M
+ Cannot access memory at address 0x113b^M
+ ^M
+ (gdb) FAIL: gdb.dwarf2/dw2-inline-param.exp: runto: run to *0x113b
+
+ The test loads the binary in GDB, grabs the address of a symbol, strips
+ the binary, reloads it in GDB, runs the program, and then tries to place
+ a breakpoint at that address. The problem is that the binary is built
+ as position independent, so the address GDB grabs in the first place
+ isn't where the code ends up after running.
+
+ Fix this by linking the binary as non-position-independent. The
+ alternative would be to compute the relocated address where to place the
+ breakpoint, but that's not very straightforward, unfortunately.
+
+ I was confused for a while, I was trying to load the binary in GDB
+ manually to get the symbol address, but GDB was telling me the symbol
+ could not be found. Meanwhile, it clearly worked in gdb.log. The thing
+ is that GDB strips the binary in-place, so we don't have access to the
+ intermediary binary with symbols. Change the test to output the
+ stripped binary to a separate file instead.
+
+ Change-Id: I66c56293df71b1ff49cf748d6784bd0e935211ba
+
+2022-04-08 Alan Modra <amodra@gmail.com>
+
+ gdb maintainer commit rights
+ Formalise what ought to be obvious. The top level of the binutils-gdb
+ repository isn't owned by binutils.
+
+ * MAINTAINERS: Spelling fix. GDB global maintainer rights.
+
+2022-04-08 Bernhard Heckel <bernhard.heckel@intel.com>
+ Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: print fortran extended types with ptype
+ Add the print of the base-class of an extended type to the output of
+ ptype. This requires the Fortran compiler to emit DW_AT_inheritance
+ for the extended type.
+
+2022-04-08 Bernhard Heckel <bernhard.heckel@intel.com>
+ Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/fortran: add support for accessing fields of extended types
+ Fortran 2003 supports type extension. This patch allows access
+ to inherited members by using their fully qualified name as described
+ in the Fortran standard.
+
+ In doing so the patch also fixes a bug in GDB when trying to access the
+ members of a base class in a derived class via the derived class' base
+ class member.
+
+ This patch fixes PR22497 and PR26373 on GDB side.
+
+ Using the example Fortran program from PR22497
+
+ program mvce
+ implicit none
+
+ type :: my_type
+ integer :: my_int
+ end type my_type
+
+ type, extends(my_type) :: extended_type
+ end type extended_type
+
+ type(my_type) :: foo
+ type(extended_type) :: bar
+
+ foo%my_int = 0
+ bar%my_int = 1
+
+ print*, foo, bar
+
+ end program mvce
+
+ and running this with GDB and setting a BP at 17:
+
+ Before:
+ (gdb) p bar%my_type
+ A syntax error in expression, near `my_type'.
+ (gdb) p bar%my_int
+ There is no member named my_int.
+ (gdb) p bar%my_type%my_int
+ A syntax error in expression, near `my_type%my_int'.
+ (gdb) p bar
+ $1 = ( my_type = ( my_int = 1 ) )
+
+ After:
+ (gdb) p bar%my_type
+ $1 = ( my_int = 1 )
+ (gdb) p bar%my_int
+ $2 = 1 # this line requires DW_TAG_inheritance to work
+ (gdb) p bar%my_type%my_int
+ $3 = 1
+ (gdb) p bar
+ $4 = ( my_type = ( my_int = 1 ) )
+
+ In the above example "p bar%my_int" requires the compiler to emit
+ information about the inheritance relationship between extended_type
+ and my_type which gfortran and flang currently do not de. The
+ respective issue gcc/49475 has been put as kfail.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26373
+ https://sourceware.org/bugzilla/show_bug.cgi?id=22497
+
+2022-04-08 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb: add Nils-Christian Kempke to gdb/MAINTAINERS
+
+2022-04-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: change file_file_name to return an std::string
+ Straightforward change, return an std::string instead of a
+ gdb::unique_xmalloc_ptr<char>. No behavior change expected.
+
+ Change-Id: Ia5e94c94221c35f978bb1b7bdffbff7209e0520e
+
+2022-04-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/fortran: fix fetching assumed rank array content
+ Commit:
+
+ commit df7a7bdd9766adebc6b117c31bc617d81c1efd43
+ Date: Thu Mar 17 18:56:23 2022 +0000
+
+ gdb: add support for Fortran's ASSUMED RANK arrays
+
+ Added support for Fortran assumed rank arrays. Unfortunately, this
+ commit contained a bug that means though GDB can correctly calculate
+ the rank of an assumed rank array, GDB can't fetch the contents of an
+ assumed rank array.
+
+ The history of this patch can be seen on the mailing list here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-January/185306.html
+
+ The patches that were finally committed can be found here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-March/186906.html
+
+ The original patches did support fetching the array contents, it was
+ only the later series that introduced the regression.
+
+ The problem is that when calculating the array rank the result is a
+ count of the number of ranks, i.e. this is a 1 based result, 1, 2, 3,
+ etc.
+
+ In contrast, when computing the details of any particular rank the
+ value passed to the DWARF expression evaluator should be a 0 based
+ rank offset, i.e. a 0 based number, 0, 1, 2, etc.
+
+ In the patches that were originally merged, this was not the case, and
+ we were passing the 1 based rank number to the expression evaluator,
+ e.g. passing 1 when we should pass 0, 2 when we should pass 1, etc.
+ As a result the DWARF expression evaluator was reading the
+ wrong (undefined) memory, and returning garbage results.
+
+ In this commit I have extended the test case to cover checking the
+ array contents, I've then ensured we make use of the correct rank
+ value, and extended some comments, and added or adjusted some asserts
+ as appropriate.
+
+2022-04-07 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: add "macros" option to gdb_compile
+ Make gdb_compile handle a new "macros" option, which makes it pass the
+ appropriate flag to make the compiler include macro information in the
+ debug info. This will help simplify tests using macros, reduce
+ redundant code, and make it easier to add support for a new compiler.
+
+ Right now it only handles clang specially (using -fdebug-macro) and
+ falls back to -g3 otherwise (which works for gcc). Other compilers can
+ be added as needed.
+
+ There are some tests that are currently skipped if the compiler is nor
+ gcc nor clang. After this patch, the tests will attempt to run (the -g3
+ fall back will be used). That gives a chance to people using other
+ compilers to notice something is wrong and maybe add support for their
+ compiler. If it is needed to support a compiler that doesn't have a way
+ to include macro information, then we can always introduce a
+ "skip_macro_tests" that can be used to skip over them.
+
+ Change-Id: I50cd6ab1bfbb478c1005486408e214b551364c9b
+
+2022-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove subfile::buildsym_compunit field
+ It is only set, never used.
+
+ Change-Id: Ia46ed2f9da243b0ccfc4588c1b57be2a0f3939de
+
+2022-04-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Make gdb.base/annota1.exp more robust
+ On openSUSE Tumbleweed I run into:
+ ...
+ FAIL: gdb.base/annota1.exp: run until main breakpoint (timeout)
+ ...
+
+ The problem is that the libthread_db message occurs at a location where it's
+ not expected:
+ ...
+ Starting program: outputs/gdb.base/annota1/annota1 ^M
+ ^M
+ ^Z^Zstarting^M
+ ^M
+ ^Z^Zframes-invalid^M
+ [Thread debugging using libthread_db enabled]^M
+ Using host libthread_db library "/lib64/libthread_db.so.1".^M
+ ^M
+ ^Z^Zbreakpoints-invalid^M
+ ^M
+ ...
+
+ Fix this by making the matching more robust:
+ - rewrite the regexp such that each annotation is on a single line,
+ starting with \r\n\032\032 and ending with \r\n
+ - add a regexp variable optional_re, that matches all possible optional
+ output, and use it as a separator in the first part of the regexp
+
+ Tested on x86_64-linux.
+
+2022-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite/dwarf: simplify line number program syntax
+ By calling `uplevel $body` in the program proc (a pattern we use at many
+ places), we can get rid of curly braces around each line number program
+ directive. That seems like a nice small improvement to me.
+
+ Change-Id: Ib327edcbffbd4c23a08614adee56c12ea25ebc0b
+
+2022-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite/dwarf: remove two unused variables
+ These variables seem to be unused, remove them.
+
+ Change-Id: I7d613d9d35735930ee78b2c348943c73a702afbb
+
+2022-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove symtab::pspace
+ Same idea as previous patch, but for symtab::pspace.
+
+ Change-Id: I1023abe622bea75ef648c6a97a01b53775d4104d
+
+2022-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove symtab::objfile
+ Same idea as previous patch, but for symtab::objfile. I find
+ it clearer without this wrapper, as it shows that the objfile is
+ common to all symtabs of a given compunit. Otherwise, you could think
+ that each symtab (of a given compunit) can have a specific objfile.
+
+ Change-Id: Ifc0dbc7ec31a06eefa2787c921196949d5a6fcc6
+
+2022-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove symtab::blockvector
+ symtab::blockvector is a wrapper around compunit_symtab::blockvector.
+ It is a bit misleadnig, as it gives the impression that a symtab has a
+ blockvector. Remove it, change all users to fetch the blockvector
+ through the compunit instead.
+
+ Change-Id: Ibd062cd7926112a60d52899dff9224591cbdeebf
+
+2022-04-07 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove symtab::dirname
+ I think the symtab::dirname method is bogus, or at least very
+ misleading. It makes you think that it returns the directory that was
+ used to find that symtab's file during compilation (i.e. the directory
+ the file refers to in the DWARF line header file table), or the
+ directory part of the symtab's filename maybe. In fact, it returns the
+ compilation unit's directory, which is the CWD of the compiler, at
+ compilation time. At least for DWARF, if the symtab's filename is
+ relative, it will be relative to that directory. But if the symtab's
+ filename is absolute, then the directory returned by symtab::dirname has
+ nothing to do with the symtab's filename.
+
+ Remove symtab::dirname to avoid this confusion, change all users to
+ fetch the same information through the compunit. At least, it will be
+ clear that this is a compunit property, not a symtab property.
+
+ Change-Id: I2894c3bf3789d7359a676db3c58be2c10763f5f0
+
+2022-04-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: make gdb_breakpoint and runto take a linespec
+ Change gdb_breakpoint to accept a linespec, not just a function. In
+ fact, no behavior changes are necessary, this only changes the parameter
+ name and documentation. Change runto as well, since the two are so
+ close (runto forwards all its arguments to gdb_breakpoint).
+
+ I wrote this for a downstrean GDB port, but thought it could be
+ useful upstream, eventually, even though not callers take advantage of
+ it yet.
+
+ Change-Id: I08175fd444d5a60df90fd9985e1b5dfd87c027cc
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: update comments throughout reggroups.{c,h} files
+ This commit updates the comments in the gdb/reggroups.{c,h} files.
+ Fill in some missing comments, correct a few comments that were not
+ clear, and where we had comments duplicated between .c and .h files,
+ update the .c to reference the .h.
+
+ No user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: move struct reggroup into reggroups.h header
+ Move 'struct reggroup' into the reggroups.h header. Remove the
+ reggroup_name and reggroup_type accessor functions, and just use the
+ name/type member functions within 'struct reggroup', update all uses
+ of these removed functions.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: convert reggroup to a C++ class with constructor, etc
+ Convert the 'struct reggroup' into a real class, with a constructor
+ and getter methods.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make the pre-defined register groups const
+ Convert the 7 global, pre-defined, register groups const, and fix the
+ fall out (a minor tweak required in riscv-tdep.c).
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: more 'const' in gdb/reggroups.{c,h}
+ Convert the reggroup_new and reggroup_gdbarch_new functions to return
+ a 'const regggroup *', and fix up all the fallout.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: remove reggroup_next and reggroup_prev
+ Add a new function gdbarch_reggroups that returns a reference to a
+ vector containing all the reggroups for an architecture.
+
+ Make use of this function throughout GDB instead of the existing
+ reggroup_next and reggroup_prev functions.
+
+ Finally, delete the reggroup_next and reggroup_prev functions.
+
+ Most of these changes are pretty straight forward, using range based
+ for loops instead of the old style look using reggroup_next. There
+ are two places where the changes are less straight forward.
+
+ In gdb/python/py-registers.c, the register group iterator needed to
+ change slightly. As the iterator is tightly coupled to the gdbarch, I
+ just fetch the register group vector from the gdbarch when needed, and
+ use an index counter to find the next item from the vector when
+ needed.
+
+ In gdb/tui/tui-regs.c the tui_reg_next and tui_reg_prev functions are
+ just wrappers around reggroup_next and reggroup_prev respectively.
+ I've just inlined the logic of the old functions into the tui
+ functions. As the tui function had its own special twist (wrap around
+ behaviour) I think this is OK.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: convert reggroups to use a std::vector
+ Replace manual linked list with a std::vector. This commit doesn't
+ change the reggroup_next and reggroup_prev API, but that will change
+ in a later commit.
+
+ This commit is focused on the minimal changes needed to manage the
+ reggroups using a std::vector, without changing the API exposed by the
+ reggroup.c file.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: always add the default register groups
+ There's a set of 7 default register groups. If we don't add any
+ gdbarch specific register groups during gdbarch initialisation, then
+ when we iterate over the register groups using reggroup_next and
+ reggroup_prev we will make use of these 7 default groups. See the use
+ of default_groups in gdb/reggroups.c for details on this.
+
+ However, if the gdbarch adds its own groups during gdbarch
+ initialisation, then these groups will be used in preference to the
+ default groups.
+
+ A problem arises though if the particular architecture makes use of
+ the target description mechanism. If the default target
+ description(s) (i.e. those internal to GDB that are used when the user
+ doesn't provide their own) don't mention any additional register
+ groups then the default register groups will be used.
+
+ But if the target description does mention additional groups then the
+ default groups are not used, and instead, the groups from the target
+ description are used.
+
+ The problem with this is that what usually happens is that the target
+ description will mention additional groups, e.g. groups for special
+ registers. Most architectures that use target descriptions work
+ around this by adding all (or most) of the default register groups in
+ all cases. See i386_add_reggroups, aarch64_add_reggroups,
+ riscv_add_reggroups, xtensa_add_reggroups, and others.
+
+ In this patch, my suggestion is that we should just add the default
+ register groups for every architecture, always. This change is in
+ gdb/reggroups.c.
+
+ All the remaining changes are me updating the various architectures to
+ not add the default groups themselves.
+
+ So, where will this change be visible to the user? I think the
+ following commands will possibly change:
+
+ * info registers / info all-registers:
+
+ The user can provide a register group to these commands. For example,
+ on csky, we previously never added the 'vector' group. Now, as a
+ default group, this will be available, but (presumably) will not
+ contain any registers. I don't think this is necessarily a bad
+ thing, there's something to be said for having some consistent
+ defaults available. There are other architectures that didn't add
+ all 7 of the defaults, which will now have gained additional groups.
+
+ * maint print reggroups
+
+ This prints the set of all available groups. As a maintenance
+ command I'm less concerned with the output changing here.
+ Obviously, for the architectures that didn't previously add all the
+ defaults, this list just got bigger.
+
+ * maint print register-groups
+
+ This prints all the registers, and the groups they are in. If the
+ defaults were not previously being added then a register (obviously)
+ can't appear in one of the default groups. Now the groups are
+ available then registers might be in more groups than previously.
+ However, this is again a maintenance command, so I'm less concerned
+ about this changing.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: fix 'tui reg next/prev' command when data window is hidden
+ Start GDB like:
+
+ $ gdb -q executable
+ (gdb) start
+ (gdb) layout src
+ ... tui windows are now displayed ...
+ (gdb) tui reg next
+
+ At this point the data (register) window should be displayed, but will
+ contain the message 'Register Values Unavailable', and at the console
+ you'll see the message "unknown register group 'next'".
+
+ The same happens with 'tui reg prev' (but the error message is
+ slightly different).
+
+ At this point you can continue to use 'tui reg next' and/or 'tui reg
+ prev' and you'll keep getting the error message.
+
+ The problem is that when the data (register) window is first
+ displayed, it's current register group is nullptr. As a consequence
+ tui_reg_next and tui_reg_prev (tui/tui-regs.c) will always just return
+ nullptr, which triggers an error in tui_reg_command.
+
+ In this commit I change tui_reg_next and tui_reg_prev so that they
+ instead return the first and last register group respectively if the
+ current register group is nullptr.
+
+ So, after this, using 'tui reg next' will (in the above case) show the
+ first register group, while 'tui reg prev' will display the last
+ register group.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: avoid theoretical bug with 'tui reg' command
+ While looking at the 'tui reg' command as part of another patch, I
+ spotted a theoretical bug.
+
+ The 'tui reg' command takes the name of a register group, but also
+ handles partial register group matches, though the partial match has to
+ be unique. The current command logic goes:
+
+ With the code as currently written, if a target description named a
+ register group either 'prev' or 'next' then GDB would see this as an
+ ambiguous register name, and refuse to switch groups.
+
+ Naming a register group 'prev' or 'next' seems pretty unlikely, but,
+ by adding a single else block we can prevent this problem.
+
+ Now, if there's a 'prev' or 'next' register group, the user will not
+ be able to select the group directly, the 'prev' and 'next' names will
+ always iterate through the available groups instead. But at least the
+ user could select their groups by iteration, rather than direct
+ selection.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: have reggroup_find return a const
+ Update reggroup_find to return a const reggroup *.
+
+ There are other function in gdb/reggroup.{c,h} files that could
+ benefit from returning const, these will be updated in later commits.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: use 'const reggroup *' in python/py-registers.c file
+ Convert uses of 'struct reggroup *' in python/py-registers.c to be
+ 'const'.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: switch to using 'const reggroup *' in tui-regs.{c,h}
+ Make uses of 'reggroup *' const throughout tui-regs.{c,h}.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make gdbarch_register_reggroup_p take a const reggroup *
+ Change gdbarch_register_reggroup_p to take a 'const struct reggroup *'
+ argument. This requires a change to the gdb/gdbarch-components.py
+ script, regeneration of gdbarch.{c,h}, and then updates to all the
+ architectures that implement this method.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add some const in gdb/reggroups.c
+ This commit makes the 'struct reggroup *' argument const for the
+ following functions:
+
+ reggroup_next
+ reggroup_prev
+ reggroup_name
+ reggroup_type
+
+ There are other places that could benefit from const in the
+ reggroup.{c,h} files, but these will be changing in further commits.
+
+ There should be no user visible changes after this commit.
+
+2022-04-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: don't try to use readline before it's initialized
+ While working on a different patch, I triggered an assertion from the
+ initialize_current_architecture code, specifically from one of
+ the *_gdbarch_init functions in a *-tdep.c file. This exposes a
+ couple of issues with GDB.
+
+ This is easy enough to reproduce by adding 'gdb_assert (false)' into a
+ suitable function. For example, I added a line into i386_gdbarch_init
+ and can see the following issue.
+
+ I start GDB and immediately hit the assert, the output is as you'd
+ expect, except for the very last line:
+
+ $ ./gdb/gdb --data-directory ./gdb/data-directory/
+ ../../src.dev-1/gdb/i386-tdep.c:8455: internal-error: i386_gdbarch_init: Assertion `false' failed.
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ ----- Backtrace -----
+ ... snip ...
+ ---------------------
+ ../../src.dev-1/gdb/i386-tdep.c:8455: internal-error: i386_gdbarch_init: Assertion `false' failed.
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Quit this debugging session? (y or n) ../../src.dev-1/gdb/ser-event.c:212:16: runtime error: member access within null pointer of type 'struct serial'
+
+ Something goes wrong when we try to query the user. Note, I
+ configured GDB with --enable-ubsan, I suspect that without this the
+ above "error" would actually just be a crash.
+
+ The backtrace from ser-event.c:212 looks like this:
+
+ (gdb) bt 10
+ #0 serial_event_clear (event=0x675c020) at ../../src/gdb/ser-event.c:212
+ #1 0x0000000000769456 in invoke_async_signal_handlers () at ../../src/gdb/async-event.c:211
+ #2 0x000000000295049b in gdb_do_one_event () at ../../src/gdbsupport/event-loop.cc:194
+ #3 0x0000000001f015f8 in gdb_readline_wrapper (
+ prompt=0x67135c0 "../../src/gdb/i386-tdep.c:8455: internal-error: i386_gdbarch_init: Assertion `false' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit this debugg"...)
+ at ../../src/gdb/top.c:1141
+ #4 0x0000000002118b64 in defaulted_query(const char *, char, typedef __va_list_tag __va_list_tag *) (
+ ctlstr=0x2e4eb68 "%s\nQuit this debugging session? ", defchar=0 '\000', args=0x7fffffffa6e0)
+ at ../../src/gdb/utils.c:934
+ #5 0x0000000002118f72 in query (ctlstr=0x2e4eb68 "%s\nQuit this debugging session? ")
+ at ../../src/gdb/utils.c:1026
+ #6 0x00000000021170f6 in internal_vproblem(internal_problem *, const char *, int, const char *, typedef __va_list_tag __va_list_tag *) (problem=0x6107bc0 <internal_error_problem>, file=0x2b976c8 "../../src/gdb/i386-tdep.c",
+ line=8455, fmt=0x2b96d7f "%s: Assertion `%s' failed.", ap=0x7fffffffa8e8) at ../../src/gdb/utils.c:417
+ #7 0x00000000021175a0 in internal_verror (file=0x2b976c8 "../../src/gdb/i386-tdep.c", line=8455,
+ fmt=0x2b96d7f "%s: Assertion `%s' failed.", ap=0x7fffffffa8e8) at ../../src/gdb/utils.c:485
+ #8 0x00000000029503b3 in internal_error (file=0x2b976c8 "../../src/gdb/i386-tdep.c", line=8455,
+ fmt=0x2b96d7f "%s: Assertion `%s' failed.") at ../../src/gdbsupport/errors.cc:55
+ #9 0x000000000122d5b6 in i386_gdbarch_init (info=..., arches=0x0) at ../../src/gdb/i386-tdep.c:8455
+ (More stack frames follow...)
+
+ It turns out that the problem is that the async event handler
+ mechanism has been invoked, but this has not yet been initialized.
+
+ If we look at gdb_init (in gdb/top.c) we can indeed see the call to
+ gdb_init_signals is after the call to initialize_current_architecture.
+
+ If I reorder the calls, moving gdb_init_signals earlier, then the
+ initial error is resolved, however, things are still broken. I now
+ see the same "Quit this debugging session? (y or n)" prompt, but when
+ I provide an answer and press return GDB immediately crashes.
+
+ So what's going on now? The next problem is that the call_readline
+ field within the current_ui structure is not initialized, and this
+ callback is invoked to process the reply I entered.
+
+ The problem is that call_readline is setup as a result of calling
+ set_top_level_interpreter, which is called from captured_main_1.
+ Unfortunately, set_top_level_interpreter is called after gdb_init is
+ called.
+
+ I wondered how to solve this problem for a while, however, I don't
+ know if there's an easy "just reorder some lines" solution here.
+ Looking through captured_main_1 there seems to be a bunch of
+ dependencies between printing various things, parsing config files,
+ and setting up the interpreter. I'm sure there is a solution hiding
+ in there somewhere.... I'm just not sure I want to spend any longer
+ looking for it.
+
+ So.
+
+ I propose a simpler solution, more of a hack/work-around. In utils.c
+ we already have a function filtered_printing_initialized, this is
+ checked in a few places within internal_vproblem. In some of these
+ cases the call gates whether or not GDB will query the user.
+
+ My proposal is to add a new readline_initialized function, which
+ checks if the current_ui has had readline initialized yet. If this is
+ not the case then we should not attempt to query the user.
+
+ After this change GDB prints the error message, the backtrace, and
+ then aborts (including dumping core). This actually seems pretty sane
+ as, if GDB has not yet made it through the initialization then it
+ doesn't make much sense to allow the user to say "no, I don't want to
+ quit the debug session" (I think).
+
+2022-04-07 Luis Machado <luis.machado@arm.com>
+
+ Recognize the NT_ARM_SYSTEM_CALL register set
+ Update binutils to recognize the NT_ARM_SYSTEM_CALL set that is dumped by
+ Linux to core files.
+
+2022-04-07 Mark Harmstone <mark@harmstone.com>
+
+ Add support for COFF secidx relocations
+ bfd * coff-i386.c (in_reloc_p): Add R_SECTION.
+ (howto_table): Add R_SECTION.
+ (coff_pe_i386_relocation_section): Add support for R_SECTION.
+ (coff_i386_reloc_type_lookup): Add support for
+ BFD_RELOC_16_SECCIDX.
+ * coff-x86_64.c (in_reloc_p): Add R_SECTION.
+ (howto_table): Add R_SECTION.
+ (coff_pe_amd64_relocation_section): Add support for R_SECTION.
+ (coff_amd64_reloc_type_lookup): Add support for
+ BFD_RELOC_16_SECCIDX.
+ * reloc.c: Add BFD_RELOC_16_SECIDX.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+
+ gas * config/tc-i386.c (pe_directive_secidx): New function.
+ (md_pseudo_table): Add support for secidx.
+ (x86_cons_fix_new): Likewise.
+ (tc_gen_reloc): Likewise.
+ * expr.c (op_rank): Add O_secidx.
+ * expr.h (operatorT): Likewise.
+ * symbols.c (resolve_symbol_value): Add support for O_secidx.
+ * testsuite/gas/i386/secidx.s: New test source file.
+ * testsuite/gas/i386/secidx.d: New test driver file.
+ * testsuite/gas/i386/i386.exp: Run new test.
+
+ include * coff/i386.h: Define R_SECTION.
+ * coff/x86_64.h: Likewise.
+
+ ld * testsuite/ld-pe/secidx1.s: New test source file.
+ * testsuite/ld-pe/secidx2.s: New test source file.
+ * testsuite/ld-pe/secidx.d: New test driver file.
+ * testsuite/ld-pe/secidx_64.d: New test driver file.
+ * testsuite/ld-pe/pe.exp: Add new tests.
+
+2022-04-07 Jan Beulich <jbeulich@suse.com>
+
+ gas/Dwarf: record functions
+ To help tools like addr2line looking up function names, in particular
+ when dealing with e.g. PE/COFF binaries (linked from ELF objects), where
+ there's no ELF symbol table to fall back to, emit minimalistic
+ information for functions marked as such and having their size
+ specified.
+
+ Notes regarding the restriction to (pure) ELF:
+ - I realize this is a layering violation; I don't see how to deal with
+ that in a better way.
+ - S_GET_SIZE(), when OBJ_MAYBE_ELF is defined, looks wrong: Unlike
+ S_SET_SIZE() it does not check whether the hook is NULL.
+ - symbol_get_obj(), when OBJ_MAYBE_ELF is defined, looks unusable, as
+ its return type can only ever be one object format's type (and this
+ may then not be ELF's).
+
+ The new testcases are limited to x86 because I wanted to include the
+ case where function size can't be determined yet at the time Dwarf2 info
+ is generated. As .nops gains support by further targets, they could also
+ be added here then (with, as necessary, expecations suitably relaxed to
+ cover for insn size differences).
+
+2022-04-07 Jan Beulich <jbeulich@suse.com>
+
+ Arm64: arrange for line number emission for .inst
+ Just like insns encoded the more conventional way these should have line
+ number info associated with them.
+
+ Arm32: arrange for line number emission for .inst
+ Just like insns encoded the more conventional way these should have line
+ number info associated with them.
+
+ RISC-V: add testcase to check line number emission for .insn
+ Since no such test looks to exist, derive one from insn.s.
+
+2022-04-07 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ IBM zSystems: Add support for z16 as CPU name.
+ So far z16 was identified as arch14. After the machine has been
+ announced we can now add the real name.
+
+ gas/ChangeLog:
+
+ * config/tc-s390.c (s390_parse_cpu): Add z16 as alternate CPU
+ name.
+ * doc/as.texi: Add z16 and arch14 to CPU string list.
+ * doc/c-s390.texi: Add z16 to CPU string list.
+
+ opcodes/ChangeLog:
+
+ * s390-mkopc.c (main): Enable z16 as CPU string in the opcode
+ table.
+
+2022-04-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-06 Youling Tang <tangyouling@loongson.cn>
+
+ gdb: mips: Fix the handling of complex type of function return value
+ $ objdump -d outputs/gdb.base/varargs/varargs
+ 00000001200012e8 <find_max_float_real>:
+ ...
+ 1200013b8: c7c10000 lwc1 $f1,0(s8)
+ 1200013bc: c7c00004 lwc1 $f0,4(s8)
+ 1200013c0: 46000886 mov.s $f2,$f1
+ 1200013c4: 46000046 mov.s $f1,$f0
+ 1200013c8: 46001006 mov.s $f0,$f2
+ 1200013cc: 46000886 mov.s $f2,$f1
+ 1200013d0: 03c0e825 move sp,s8
+ 1200013d4: dfbe0038 ld s8,56(sp)
+ 1200013d8: 67bd0080 daddiu sp,sp,128
+ 1200013dc: 03e00008 jr ra
+ 1200013e0: 00000000 nop
+
+ From the above disassembly, we can see that when the return value of the
+ function is a complex type and len <= 2 * MIPS64_REGSIZE, the return value
+ will be passed through $f0 and $f2, so fix the corresponding processing
+ in mips_n32n64_return_value().
+
+ $ make check RUNTESTFLAGS='GDB=../gdb gdb.base/varargs.exp --outdir=test'
+
+ Before applying the patch:
+ FAIL: gdb.base/varargs.exp: print find_max_float_real(4, fc1, fc2, fc3, fc4)
+ FAIL: gdb.base/varargs.exp: print find_max_double_real(4, dc1, dc2, dc3, dc4)
+
+ # of expected passes 9
+ # of unexpected failures 2
+
+ After applying the patch:
+ # of expected passes 11
+
+ This also fixes:
+ FAIL: gdb.base/callfuncs.exp: call inferior func with struct - returns float _Complex
+
+ Co-Authored-By: Maciej W. Rozycki <macro@orcam.me.uk>
+
+2022-04-06 Tom Tromey <tom@tromey.com>
+
+ Use new and delete in jit.c
+ This changes jit.c to use new and delete, rather than XCNEW. This
+ simplifies the code a little. This was useful for another patch I'm
+ working on, and I thought it would make sense to send it separately.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-04-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: don't copy entirely optimized out values in value_copy
+ Bug 28980 shows that trying to value_copy an entirely optimized out
+ value causes an internal error. The original bug report involves MI and
+ some Python pretty printer, and is quite difficult to reproduce, but
+ another easy way to reproduce (that is believed to be equivalent) was
+ proposed:
+
+ $ ./gdb -q -nx --data-directory=data-directory -ex "py print(gdb.Value(gdb.Value(5).type.optimized_out()))"
+ /home/smarchi/src/binutils-gdb/gdb/value.c:1731: internal-error: value_copy: Assertion `arg->contents != nullptr' failed.
+
+ This is caused by 5f8ab46bc691 ("gdb: constify parameter of
+ value_copy"). It added an assertion that the contents buffer is
+ allocated if the value is not lazy:
+
+ if (!value_lazy (val))
+ {
+ gdb_assert (arg->contents != nullptr);
+
+ This was based on the comment on value::contents, which suggest that
+ this is the case:
+
+ /* Actual contents of the value. Target byte-order. NULL or not
+ valid if lazy is nonzero. */
+ gdb::unique_xmalloc_ptr<gdb_byte> contents;
+
+ However, it turns out that it can also be nullptr also if the value is
+ entirely optimized out, for example on exit of
+ allocate_optimized_out_value. That function creates a lazy value, marks
+ the entire value as optimized out, and then clears the lazy flag. But
+ contents remains nullptr.
+
+ This wasn't a problem for value_copy before, because it was calling
+ value_contents_all_raw on the input value, which caused contents to be
+ allocated before doing the copy. This means that the input value to
+ value_copy did not have its contents allocated on entry, but had it
+ allocated on exit. The result value had it allocated on exit. And that
+ we copied bytes for an entirely optimized out value (i.e. meaningless
+ bytes).
+
+ From here I see two choices:
+
+ 1. respect the documented invariant that contents is nullptr only and
+ only if the value is lazy, which means making
+ allocate_optimized_out_value allocate contents
+ 2. extend the cases where contents can be nullptr to also include
+ values that are entirely optimized out (note that you could still
+ have some entirely optimized out values that do have contents
+ allocated, it depends on how they were created) and adjust
+ value_copy accordingly
+
+ Choice #1 is safe, but less efficient: it's not very useful to allocate
+ a buffer for an entirely optimized out value. It's even a bit less
+ efficient than what we had initially, because values coming out of
+ allocate_optimized_out_value would now always get their contents
+ allocated.
+
+ Choice #2 would be more efficient than what we had before: giving an
+ optimized out value without allocated contents to value_copy would
+ result in an optimized out value without allocated contents (and the
+ input value would still be without allocated contents on exit). But
+ it's more risky, since it's difficult to ensure that all users of the
+ contents (through the various_contents* accessors) are all fine with
+ that new invariant.
+
+ In this patch, I opt for choice #2, since I think it is a better
+ direction than choice #1. #1 would be a pessimization, and if we go
+ this way, I doubt that it will ever be revisited, it will just stay that
+ way forever.
+
+ Add a selftest to test this. I initially started to write it as a
+ Python test (since the reproducer is in Python), but a selftest is more
+ straightforward.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28980
+ Change-Id: I6e2f5c0ea804fafa041fcc4345d47064b5900ed7
+
+2022-04-06 Jeff Law <jeffreyalaw@gmail.com>
+
+ Fix for v850e divq instruction
+ This is the last of the correctness fixes I've been carrying around for the
+ v850.
+
+ Like the other recent fixes, this is another case where we haven't been as
+ careful as we should WRT host vs target types. For the divq instruction
+ both operands are 32 bit types. Yet in the simulator code we convert them
+ from unsigned int to signed long by assignment. So 0xfffffffb (aka -5)
+ turns into 4294967291 and naturally that changes the result of our division.
+
+ The fix is simple, insert a cast to int32_t to force interpretation as a
+ signed value.
+
+ Testcase for the simulator is included. It has a trivial dependency on the
+ bins patch.
+
+2022-04-06 Jeff Law <jeffreyalaw@gmail.com>
+
+ Fix "bins" simulation for v850e3v5
+ I've been carrying this for a few years. One test in the GCC testsuite is
+ failing due to a bug in the handling of the v850e3v5 instruction "bins".
+
+ When the "bins" instruction specifies a 32bit bitfield size, the simulator
+ exhibits undefined behavior by trying to shift a 32 bit quantity by 32 bits.
+ In the case of a 32 bit shift, we know what the resultant mask should be. So
+ we can just set it.
+
+ That seemed better than using 1UL for the constant (on a 32bit host unsigned
+ long might still just be 32 bits) or needlessly forcing everything to
+ long long types.
+
+ Thankfully the case where this shows up is only bins <src>, 0, 32, <dest>
+ which would normally be encoded as a simple move.
+
+ * testsuite/v850/allinsns.exp: Add v850e3v5.
+ * testsuite/v850/bins.cgs: New test.
+ * v850/simops.c (v850_bins): Avoid undefined behavior on left shift.
+
+2022-04-06 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: prepend tramp frame unwinder for signal
+ Implement the "init" method of struct tramp_frame to prepend tramp
+ frame unwinder for signal on LoongArch.
+
+ With this patch, the following failed testcases can be fixed:
+
+ FAIL: gdb.base/annota1.exp: backtrace @ signal handler (timeout)
+ FAIL: gdb.base/annota3.exp: backtrace @ signal handler (pattern 2)
+
+2022-04-06 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make interp_add static
+ Since this commit:
+
+ commit 8322445e0584be846f5873b9aab257dc9fbda05d
+ Date: Tue Jun 21 01:11:45 2016 +0100
+
+ Introduce interpreter factories
+
+ Interpreters should be registered with GDB, not by calling interp_add,
+ but with a call to interp_factory_register. I've checked the insight
+ source, and it too has moved over to using interp_factory_register.
+
+ In this commit I make interp_add static within interps.c.
+
+ There should be no user visible change after this commit.
+
+2022-04-06 Nick Clifton <nickc@redhat.com>
+
+ Add code to display the contents of .debug_loclists sections which contain offset entry tables.
+ PR 28981
+ * dwarf.c (fetch_indexed_value): Rename to fecth_indexed_addr and
+ return the address, rather than a string.
+ (fetch_indexed_value): New function - returns a value indexed by a
+ DW_FORM_loclistx or DW_FORM_rnglistx form.
+ (read_and_display_attr_value): Add support for DW_FORM_loclistx
+ and DW_FORM_rnglistx.
+ (process_debug_info): Load the loclists and rnglists sections.
+ (display_loclists_list): Add support for DW_LLE_base_addressx,
+ DW_LLE_startx_endx, DW_LLE_startx_length and
+ DW_LLE_default_location.
+ (display_offset_entry_loclists): New function. Displays a
+ .debug_loclists section that contains offset entry tables.
+ (display_debug_loc): Call the new function.
+ (display_debug_rnglists_list): Add support for
+ DW_RLE_base_addressx, DW_RLE_startx_endx and DW_RLE_startx_length.
+ (display_debug_ranges): Display the contents of the section's
+ header.
+ * dwarf.h (struct debug_info): Add loclists_base field.
+ * testsuite/binutils-all/dw5.W: Update expected output.
+ * testsuite/binutils-all/x86-64/pr26808.dump: Likewise.
+
+2022-04-06 Luis Machado <luis.machado@linaro.org>
+
+ Enable ARMv8.1-m PACBTI support
+ This set of changes enable support for the ARMv8.1-m PACBTI extensions [1].
+
+ The goal of the PACBTI extensions is similar in scope to that of a-profile
+ PAC/BTI (aarch64 only), but the underlying implementation is different.
+
+ One important difference is that the pointer authentication code is stored
+ in a separate register, thus we don't need to mask/unmask the return address
+ from a function in order to produce a correct backtrace.
+
+ The patch introduces the following modifications:
+
+ - Extend the prologue analyser for 32-bit ARM to handle some instructions
+ from ARMv8.1-m PACBTI: pac, aut, pacg, autg and bti. Also keep track of
+ return address signing/authentication instructions.
+
+ - Adds code to identify object file attributes that indicate the presence of
+ ARMv8.1-m PACBTI (Tag_PAC_extension, Tag_BTI_extension, Tag_PACRET_use and
+ Tag_BTI_use).
+
+ - Adds support for DWARF pseudo-register RA_AUTH_CODE, as described in the
+ aadwarf32 [2].
+
+ - Extends the dwarf unwinder to track the value of RA_AUTH_CODE.
+
+ - Decorates backtraces with the "[PAC]" identifier when a frame has signed
+ the return address.
+
+ - Makes GDB aware of a new XML feature "org.gnu.gdb.arm.m-profile-pacbti". This
+ feature is not included as an XML file on GDB's side because it is only
+ supported for bare metal targets.
+
+ - Additional documentation.
+
+ [1] https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/armv8-1-m-pointer-authentication-and-branch-target-identification-extension
+ [2] https://github.com/ARM-software/abi-aa/blob/main/aadwarf32/aadwarf32.rst
+
+2022-04-06 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: move gdb_disassembly_flag into a new disasm-flags.h file
+ While working on the disassembler I was getting frustrated. Every
+ time I touched disasm.h it seemed like every file in GDB would need to
+ be rebuilt. Surely the disassembler can't be required by that many
+ parts of GDB, right?
+
+ Turns out that disasm.h is included in target.h, so pretty much every
+ file was being rebuilt!
+
+ The only thing from disasm.h that target.h needed is the
+ gdb_disassembly_flag enum, as this is part of the target_ops api.
+
+ In this commit I move gdb_disassembly_flag into its own file. This is
+ then included in target.h and disasm.h, after which, the number of
+ files that depend on disasm.h is much reduced.
+
+ I also audited all the other includes of disasm.h and found that the
+ includes in mep-tdep.c and python/py-registers.c are no longer needed,
+ so I've removed these.
+
+ Now, after changing disasm.h, GDB rebuilds much quicker.
+
+ There should be no user visible changes after this commit.
+
+2022-04-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-05 Tom Tromey <tom@tromey.com>
+
+ Introduce wrapped_file
+ Simon pointed out that timestamped_file probably needed to implement a
+ few more methods. This patch introduces a new file-wrapping file that
+ forwards most of its calls, making it simpler to implement new such
+ files. It also converts timestamped_file and pager_file to use it.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-04-05 Tom Tromey <tromey@adacore.com>
+
+ Don't call init_thread_list in windows-nat.c
+ I don't think there's any need to call init_thread_list in
+ windows-nat.c. This patch removes it. I tested this using the
+ internal AdaCore test suite on Windows, which FWIW does include some
+ multi-threaded inferiors.
+
+2022-04-05 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: fix intermittent failure in gdb.base/vfork-follow-parent.exp
+ Tom de Vries reported some failures in this test:
+
+ continue
+ Continuing.
+ [New inferior 2 (process 14967)]
+
+ Thread 1.1 "vfork-follow-pa" hit Breakpoint 2, break_parent () at /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base/vfork-follow-parent.c:23
+ 23 }
+ (gdb) FAIL: gdb.base/vfork-follow-parent.exp: resolution_method=schedule-multiple: continue to end of inferior 2
+ inferior 1
+ [Switching to inferior 1 [process 14961] (/home/vries/gdb_versions/devel/build/gdb/testsuite/outputs/gdb.base/vfork-follow-parent/vfork-follow-parent)]
+ [Switching to thread 1.1 (process 14961)]
+ #0 break_parent () at /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base/vfork-follow-parent.c:23
+ 23 }
+ (gdb) PASS: gdb.base/vfork-follow-parent.exp: resolution_method=schedule-multiple: inferior 1
+ continue
+ Continuing.
+ [Inferior 2 (process 14967) exited normally]
+ (gdb) FAIL: gdb.base/vfork-follow-parent.exp: resolution_method=schedule-multiple: continue to break_parent (the program exited)
+
+ Here, we continue both the vfork parent and child, since
+ schedule-multiple is on. The child exits, which un-freezes the parent
+ and makes an exit event available to GDB. We expect GDB to consume this
+ exit event and present it to the user. Here, we see that GDB shows the
+ parent hitting a breakpoint before showing the child exit.
+
+ Because of the vfork, we know that chronologically, the child exiting
+ must have happend before the parent hitting a breakpoint. However,
+ scheduling being what it is, it is possible for the parent to un-freeze
+ and exit quickly, such that when GDB pulls events out of the kernel,
+ exit events for both processes are available. And then, GDB may chose
+ at random to return the one for the parent first. This is what I
+ imagine what causes the failure shown above.
+
+ We could change the test to expect both possible outcomes, but I wanted
+ to avoid complicating the .exp file that way. Instead, add a variable
+ that the parent loops on that we set only after we confirmed the exit of
+ the child. That should ensure that the order is always the same.
+
+ Note that I wasn't able to reproduce the failure, so I can't tell if
+ this fix really fixes the problem.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29021
+ Change-Id: Ibc8e527e0e00dac54b22021fe4d9d8ab0f3b28ad
+
+2022-04-05 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: fix intermittent failures in gdb.mi/mi-cmd-user-context.exp
+ I got failures like this once on a CI:
+
+ frame^M
+ &"frame\n"^M
+ ~"#0 child_sub_function () at /home/jenkins/workspace/binutils-gdb_master_build/arch/amd64/target_board/unix/src/binutils-gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:33\n"^M
+ ~"33\t dummy = !dummy; /* thread loop line */\n"^M
+ ^done^M
+ (gdb) ^M
+ FAIL: gdb.mi/mi-cmd-user-context.exp: frame 1 (unexpected output)
+
+ The problem is that the test expects the following regexp:
+
+ ".*#0 0x.*"
+
+ And that typically works, when the output of the frame command looks
+ like:
+
+ #0 0x00005555555551bb in child_sub_function () at ...
+
+ Note the lack of hexadecimal address in the failing case. Whether or
+ not the hexadecimal address is printed (roughly) depends on whether the
+ current PC is at the beginning of a line. So depending on where thread
+ 2 was when GDB stopped it (after thread 1 hit its breakpoint), we can
+ get either output. Adjust the regexps to not expect an hexadecimal
+ prefix (0x) but a function name instead (either child_sub_function or
+ child_function). That one is always printed, and is also a good check
+ that we are in the frame we expect.
+
+ Note that for test "frame 5", we are showing a pthread frame (on my
+ system), so the function name is internal to pthread, not something we
+ can rely on. In that case, it's almost certain that we are not at the
+ beginning of a line, or that we don't have debug info, so I think it's
+ fine to expect the hex prefix.
+
+ And for test "frame 6", it's ok to _not_ expect a hex prefix (what the
+ test currently does), since we are showing thread 1, which has hit a
+ breakpoint placed at the beginning of a line.
+
+ When testing this, Tom de Vries pointed out that the current test code
+ doesn't ensure that the child threads are in child_sub_function when
+ they are stopped. If the scheduler chooses so, it is possible for the
+ child threads to be still in the pthread_barrier_wait or child_function
+ functions when they get stopped. So that would be another racy failure
+ waiting to happen.
+
+ The only way I can think of to ensure the child threads are in the
+ child_sub_function function when they get stopped is to synchronize the
+ threads using some variables instead of pthread_barrier_wait. So,
+ replace the barrier with an array of flags (one per child thread). Each
+ child thread flips its flag in child_sub_function to allow the main
+ thread to make progress and eventually hit the breakpoint.
+
+ I copied user-selected-context-sync.c to a new mi-cmd-user-context.c and
+ made modifications to that, to avoid interfering with
+ user-selected-context-sync.exp.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29025
+ Change-Id: I919673bbf9927158beb0e8b7e9e980b8d65eca90
+
+2022-04-05 Luis Machado <luis.machado@arm.com>
+
+ Fix qRcmd error code parsing
+ Someone at IRC spotted a bug in qRcmd handling. This looks like an oversight
+ or it is that way for historical reasons.
+
+ The code in gdb/remote.c:remote_target::rcmd uses isdigit instead of
+ isxdigit. One could argue that we are expecting decimal numbers, but further
+ below we use fromhex ().
+
+ Update the function to use isxdigit instead and also update the documentation.
+
+ I see there are lots of other cases of undocumented number format for error
+ messages, mostly described as NN instead of nn. For now I'll just update
+ this particular function.
+
+2022-04-05 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: resume ongoing step after handling fork or vfork
+ The test introduced by this patch would fail in this configuration, with
+ the native-gdbserver or native-extended-gdbserver boards:
+
+ FAIL: gdb.threads/next-fork-other-thread.exp: fork_func=fork: target-non-stop=auto: non-stop=off: displaced-stepping=auto: i=2: next to for loop
+
+ The problem is that the step operation is forgotten when handling the
+ fork/vfork. With "debug infrun" and "debug remote", it looks like this
+ (some lines omitted for brevity). We do the next:
+
+ [infrun] proceed: enter
+ [infrun] proceed: addr=0xffffffffffffffff, signal=GDB_SIGNAL_DEFAULT
+ [infrun] resume_1: step=1, signal=GDB_SIGNAL_0, trap_expected=0, current thread [4154304.4154304.0] at 0x5555555553bf
+ [infrun] do_target_resume: resume_ptid=4154304.0.0, step=1, sig=GDB_SIGNAL_0
+ [remote] Sending packet: $vCont;r5555555553bf,5555555553c4:p3f63c0.3f63c0;c:p3f63c0.-1#cd
+ [infrun] proceed: exit
+
+ We then handle a fork event:
+
+ [infrun] fetch_inferior_event: enter
+ [remote] wait: enter
+ [remote] Packet received: T05fork:p3f63ee.3f63ee;06:0100000000000000;07:b08e59f6ff7f0000;10:bf60e8f7ff7f0000;thread:p3f63c0.3f63c6;core:17;
+ [remote] wait: exit
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: 4154304.4154310.0 [Thread 4154304.4154310],
+ [infrun] print_target_wait_results: status->kind = FORKED, child_ptid = 4154350.4154350.0
+ [infrun] handle_inferior_event: status->kind = FORKED, child_ptid = 4154350.4154350.0
+ [remote] Sending packet: $D;3f63ee#4b
+ [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [4154304.4154310.0] at 0x7ffff7e860bf
+ [infrun] do_target_resume: resume_ptid=4154304.0.0, step=0, sig=GDB_SIGNAL_0
+ [remote] Sending packet: $vCont;c:p3f63c0.-1#73
+ [infrun] fetch_inferior_event: exit
+
+ In the first snippet, we resume the stepping thread with the range-stepping (r)
+ vCont command. But after handling the fork (detaching the fork child), we
+ resumed the whole process freely. The stepping thread, which was paused by
+ GDBserver while reporting the fork event, was therefore resumed freely, instead
+ of confined to the addresses of the stepped line. Note that since this
+ is a "next", it could be that we have entered a function, installed a
+ step-resume breakpoint, and it's ok to continue freely the stepping
+ thread, but that's not the case here. The two snippets shown above were
+ next to each other in the logs.
+
+ For the fork case, we can resume stepping right after handling the
+ event.
+
+ However, for the vfork case, where we are waiting for the
+ external child process to exec or exit, we only resume the thread that
+ called vfork, and keep the others stopped (see patch "gdb: fix handling of
+ vfork by multi-threaded program" prior in this series). So we can't
+ resume the stepping thread right now. Instead, do it after handling the
+ vfork-done event.
+
+ Change-Id: I92539c970397ce880110e039fe92b87480f816bd
+
+2022-04-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/remote: remove_new_fork_children don't access target_waitstatus::child_ptid if kind == TARGET_WAITKIND_THREAD_EXITED
+ Following the previous patch, running
+ gdb.threads/forking-threads-plus-breakpoints.exp continuously eventually
+ gives me an internal error.
+
+ gdb/target/waitstatus.h:372: internal-error: child_ptid: Assertion `m_kind == TARGET_WAITKIND_FORKED || m_kind == TARGET_WAITKIND_VFORKED' failed.^M
+ FAIL: gdb.threads/forking-threads-plus-breakpoint.exp: cond_bp_target=0: detach_on_fork=on: displaced=off: inferior 1 exited (GDB internal error)
+
+ The backtrace is:
+
+ 0x55925b679c85 internal_error(char const*, int, char const*, ...)
+ /home/simark/src/binutils-gdb/gdbsupport/errors.cc:55
+ 0x559258deadd2 target_waitstatus::child_ptid() const
+ /home/simark/src/binutils-gdb/gdb/target/waitstatus.h:372
+ 0x55925a7cbac9 remote_target::remove_new_fork_children(threads_listing_context*)
+ /home/simark/src/binutils-gdb/gdb/remote.c:7311
+ 0x55925a79dfdb remote_target::update_thread_list()
+ /home/simark/src/binutils-gdb/gdb/remote.c:3981
+ 0x55925ad79b83 target_update_thread_list()
+ /home/simark/src/binutils-gdb/gdb/target.c:3793
+ 0x55925addbb15 update_thread_list()
+ /home/simark/src/binutils-gdb/gdb/thread.c:2031
+ 0x559259d64838 stop_all_threads(char const*, inferior*)
+ /home/simark/src/binutils-gdb/gdb/infrun.c:5104
+ 0x559259d88b45 keep_going_pass_signal
+ /home/simark/src/binutils-gdb/gdb/infrun.c:8215
+ 0x559259d8951b keep_going
+ /home/simark/src/binutils-gdb/gdb/infrun.c:8251
+ 0x559259d78835 process_event_stop_test
+ /home/simark/src/binutils-gdb/gdb/infrun.c:6858
+ 0x559259d750e9 handle_signal_stop
+ /home/simark/src/binutils-gdb/gdb/infrun.c:6580
+ 0x559259d6c07b handle_inferior_event
+ /home/simark/src/binutils-gdb/gdb/infrun.c:5832
+ 0x559259d57db8 fetch_inferior_event()
+ /home/simark/src/binutils-gdb/gdb/infrun.c:4222
+
+ Indeed, the code accesses target_waitstatus::child_ptid when the kind
+ is TARGET_WAITKIND_THREAD_EXITED, which is not right. A
+ TARGET_WAITKIND_THREAD_EXITED event does not have a child_ptid value
+ associated, it has an exit status, which we are not interested in. The
+ intent is to remove from the thread list the thread that has exited.
+ Its ptid is found in the stop reply event, get it from there.
+
+ Change-Id: Icb298cbb80b8779fdf0c660dde9a5314d5591535
+
+2022-04-05 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbserver: report correct status in thread stop race condition
+ The test introduced by the following patch would sometimes fail in this
+ configuration:
+
+ FAIL: gdb.threads/next-fork-other-thread.exp: fork_func=vfork: target-non-stop=on: non-stop=off: displaced-stepping=auto: i=14: next to for loop
+
+ The test has multiple threads constantly forking or vforking while the
+ main thread keep doing "next"s.
+
+ (After writing the commit message, I realized this also fixes a similar
+ failure in gdb.threads/forking-threads-plus-breakpoint.exp with the
+ native-gdbserver and native-extended-gdbserver boards.)
+
+ As stop_all_threads is called, because the main thread finished its
+ "next", it inevitably happens at some point that we ask the remote
+ target to stop a thread and wait() reports that this thread stopped with
+ a fork or vfork event, instead of the SIGSTOP we sent to try to stop it.
+
+ While running this test, I attached to GDBserver and stopped at
+ linux-low.cc:3626. We can see that the status pulled from the kernel
+ for 2742805 is indeed a vfork event:
+
+ (gdb) p/x w
+ $3 = 0x2057f
+ (gdb) p WIFSTOPPED(w)
+ $4 = true
+ (gdb) p WSTOPSIG(w)
+ $5 = 5
+ (gdb) p/x (w >> 8) & (PTRACE_EVENT_VFORK << 8)
+ $6 = 0x200
+
+ However, the statement at line 3626 overrides that:
+
+ ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w)));
+
+ OURSTATUS becomes "stopped by a SIGTRAP". The information about the
+ fork or vfork is lost.
+
+ It's then all downhill from there, stop_all_threads eventually asks for
+ a thread list update. That thread list includes the child of that
+ forgotten fork or vfork, the remote target goes "oh cool, a new process,
+ let's attach to it!", when in fact that vfork child's destiny was to be
+ detached.
+
+ My reverse-engineered understanding of the code around there is that the
+ if/else between lines 3562 and 3583 (in the original code) makes sure
+ OURSTATUS is always initialized (not "ignore"). Either the details are
+ already in event_child->waitstatus (in the case of fork/vfork, for
+ example), in which case we just copy event_child->waitstatus to
+ ourstatus. Or, if the event is a plain "stopped by a signal" or a
+ syscall event, OURSTATUS is set to "stopped", but without a signal
+ number. Lines 3601 to 3629 (in the original code) serve to fill in that
+ last bit of information.
+
+ The problem is that when `w` holds the vfork status, the code wrongfully
+ takes this branch, because WSTOPSIG(w) returns SIGTRAP:
+
+ else if (current_thread->last_resume_kind == resume_stop
+ && WSTOPSIG (w) != SIGSTOP)
+
+ The intent of this branch is, for example, when we sent SIGSTOP to try
+ to stop a thread, but wait() reports that it stopped with another signal
+ (that it must have received from somewhere else simultaneously), say
+ SIGWINCH. In that case, we want to report the SIGWINCH. But in our
+ fork/vfork case, we don't want to take this branch, as the thread didn't
+ really stop because it received a signal. For the non "stopped by a
+ signal" and non "syscall signal" cases, we would ideally skip over all
+ that snippet that fills in the signal or syscall number.
+
+ The fix I propose is to move this snipppet of the else branch of the
+ if/else above. In addition to moving the code, the last two "else if"
+ branches:
+
+ else if (current_thread->last_resume_kind == resume_stop
+ && WSTOPSIG (w) != SIGSTOP)
+ {
+ /* A thread that has been requested to stop by GDB with vCont;t,
+ but, it stopped for other reasons. */
+ ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w)));
+ }
+ else if (ourstatus->kind () == TARGET_WAITKIND_STOPPED)
+ ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w)));
+
+ are changed into a single else:
+
+ else
+ ourstatus->set_stopped (gdb_signal_from_host (WSTOPSIG (w)));
+
+ This is the default path we take if:
+
+ - W is not a syscall status
+ - W does not represent a SIGSTOP that have sent to stop the thread and
+ therefore want to suppress it
+
+ Change-Id: If2dc1f0537a549c293f7fa3c53efd00e3e194e79
+
+2022-04-05 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix handling of vfork by multi-threaded program (follow-fork-mode=parent, detach-on-fork=on)
+ There is a problem with how GDB handles a vfork happening in a
+ multi-threaded program. This problem was reported to me by somebody not
+ using vfork directly, but using system(3) in a multi-threaded program,
+ which may be implemented using vfork.
+
+ This patch only deals about the follow-fork-mode=parent,
+ detach-on-fork=on case, because it would be too much to chew at once to
+ fix the bugs in the other cases as well (I tried).
+
+ The problem
+ -----------
+
+ When a program vforks, the parent thread is suspended by the kernel
+ until the child process exits or execs. Specifically, in a
+ multi-threaded program, only the thread that called vfork is suspended,
+ other threads keep running freely. This is documented in the vfork(2)
+ man page ("Caveats" section).
+
+ Let's suppose GDB is handling a vfork and the user's desire is to detach
+ from the child. Before detaching the child, GDB must remove the software
+ breakpoints inserted in the shared parent/child address space, in case
+ there's a breakpoint in the path the child is going to take before
+ exec'ing or exit'ing (unlikely, but possible). Otherwise the child could
+ hit a breakpoint instruction while running outside the control of GDB,
+ which would make it crash. GDB must also avoid re-inserting breakpoints
+ in the parent as long as it didn't receive the "vfork done" event (that
+ is, when the child has exited or execed): since the address space is
+ shared with the child, that would re-insert breakpoints in the child
+ process also. So what GDB does is:
+
+ 1. Receive "vfork" event for the parent
+ 2. Remove breakpoints from the (shared) address space and set
+ program_space::breakpoints_not_allowed to avoid re-inserting them
+ 3. Detach from the child thread
+ 4. Resume the parent
+ 5. Wait for and receive "vfork done" event for the parent
+ 6. Clean program_space::breakpoints_not_allowed and re-insert
+ breakpoints
+ 7. Resume the parent
+
+ Resuming the parent at step 4 is necessary in order for the kernel to
+ report the "vfork done" event. The kernel won't report a ptrace event
+ for a thread that is ptrace-stopped. But the theory behind this is that
+ between steps 4 and 5, the parent won't actually do any progress even
+ though it is ptrace-resumed, because the kernel keeps it suspended,
+ waiting for the child to exec or exit. So it doesn't matter for that
+ thread if breakpoints are not inserted.
+
+ The problem is when the program is multi-threaded. In step 4, GDB
+ resumes all threads of the parent. The thread that did the vfork stays
+ suspended by the kernel, so that's fine. But other threads are running
+ freely while breakpoints are removed, which is a problem because they
+ could miss a breakpoint that they should have hit.
+
+ The problem is present with all-stop and non-stop targets. The only
+ difference is that with an all-stop targets, the other threads are
+ stopped by the target when it reports the vfork event and are resumed by
+ the target when GDB resumes the parent. With a non-stop target, the
+ other threads are simply never stopped.
+
+ The fix
+ -------
+
+ There many combinations of settings to consider (all-stop/non-stop,
+ target-non-stop on/off, follow-fork-mode parent/child, detach-on-fork
+ on/off, schedule-multiple on/off), but for this patch I restrict the
+ scope to follow-fork-mode=parent, detach-on-fork=on. That's the
+ "default" case, where we detach the child and keep debugging the
+ parent. I tried to fix them all, but it's just too much to do at once.
+ The code paths and behaviors for when we don't detach the child are
+ completely different.
+
+ The guiding principle for this patch is that all threads of the vforking
+ inferior should be stopped as long as breakpoints are removed. This is
+ similar to handling in-line step-overs, in a way.
+
+ For non-stop targets (the default on Linux native), this is what
+ happens:
+
+ - In follow_fork, we call stop_all_threads to stop all threads of the
+ inferior
+ - In follow_fork_inferior, we record the vfork parent thread in
+ inferior::thread_waiting_for_vfork_done
+ - Back in handle_inferior_event, we call keep_going, which resumes only
+ the event thread (this is already the case, with a non-stop target).
+ This is the thread that will be waiting for vfork-done.
+ - When we get the vfork-done event, we go in the (new) handle_vfork_done
+ function to restart the previously stopped threads.
+
+ In the same scenario, but with an all-stop target:
+
+ - In follow_fork, no need to stop all threads of the inferior, the
+ target has stopped all threads of all its inferiors before returning
+ the event.
+ - In follow_fork_inferior, we record the vfork parent thread in
+ inferior::thread_waiting_for_vfork_done.
+ - Back in handle_inferior_event, we also call keep_going. However, we
+ only want to resume the event thread here, not all inferior threads.
+ In internal_resume_ptid (called by resume_1), we therefore now check
+ whether one of the inferiors we are about to resume has
+ thread_waiting_for_vfork_done set. If so, we only resume that
+ thread.
+
+ Note that when resuming multiple inferiors, one vforking and one not
+ non-vforking, we could resume the vforking thread from the vforking
+ inferior plus all threads from the non-vforking inferior. However,
+ this is not implemented, it would require more work.
+ - When we get the vfork-done event, the existing call to keep_going
+ naturally resumes all threads.
+
+ Testing-wise, add a test that tries to make the main thread hit a
+ breakpoint while a secondary thread calls vfork. Without the fix, the
+ main thread keeps going while breakpoints are removed, resulting in a
+ missed breakpoint and the program exiting.
+
+ Change-Id: I20eb78e17ca91f93c19c2b89a7e12c382ee814a1
+
+2022-04-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/infrun: add logging statement to do_target_resume
+ This helped me, it shows which ptid we actually call target_resume with.
+
+ Change-Id: I2dfd771e83df8c25f39371a13e3e91dc7882b73d
+
+2022-04-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/infrun: add inferior parameters to stop_all_threads and restart_threads
+ A following patch will want to stop all threads of a given inferior (as
+ opposed to all threads of all inferiors) while handling a vfork, and
+ restart them after. To help with this, add inferior parameters to
+ stop_all_threads and restart_threads. This is done as a separate patch
+ to make sure this doesn't cause regressions on its own, and to keep the
+ following patches more concise.
+
+ No visible changes are expected here, since all calls sites pass
+ nullptr, which should keep the existing behavior.
+
+ Change-Id: I4d9ba886ce842042075b4e346cfa64bbe2580dbf
+
+2022-04-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: replace inferior::waiting_for_vfork_done with inferior::thread_waiting_for_vfork_done
+ The inferior::waiting_for_vfork_done flag indicates that some thread in
+ that inferior is waiting for a vfork-done event. Subsequent patches
+ will need to know which thread precisely is waiting for that event.
+
+ Replace the boolean flag (waiting_for_vfork_done) with a thread_info
+ pointer (thread_waiting_for_vfork_done).
+
+ I think there is a latent buglet in that waiting_for_vfork_done is
+ currently not reset on inferior exec or exit. I could imagine that if a
+ thread in the parent process calls exec or exit while another thread of
+ the parent process is waiting for its vfork child to exec or exit, we
+ could end up with inferior::waiting_for_vfork_done without a thread
+ actually waiting for a vfork-done event anymore. And since that flag is
+ checked in resume_1, things could misbehave there.
+
+ Since the new field points to a thread_info object, and those are
+ destroyed on exec or exit, it could be worse now since we could try to
+ access freed memory, if thread_waiting_for_vfork_done were to point to a
+ stale thread_info. To avoid this, clear the field in
+ infrun_inferior_exit and infrun_inferior_execd.
+
+ Change-Id: I31b847278613a49ba03fc4915f74d9ceb228fdce
+
+2022-04-05 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: make timestamped_file implement write_async_safe
+ Trying to use "set debug linux-nat 1", I get an internal error:
+
+ /home/smarchi/src/binutils-gdb/gdb/ui-file.h:70: internal-error: write_async_safe: write_async_safe
+
+ The problem is that timestamped_file doesn't implement write_async_safe,
+ which linux-nat's sigchld_handler uses. Implement it.
+
+ Change-Id: I830981010c6119f13ae673605ed015cced0f5ee8
+
+2022-04-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-04 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: fix timeout in server-pipe.exp test
+ I noticed that the gdb.server/server-pipe.exp test would sometimes
+ timeout when my machine was more heavily loaded. Turns out the test
+ is reading all the shared libraries over GDB's remote protocol, which
+ can be slow.
+
+ We avoid this in other tests by setting the sysroot in GDBFLAGS,
+ something which is missing from the gdb.server/server-pipe.exp test.
+
+ Fix the timeouts by setting sysroot in GDBFLAGS, after this the shared
+ libraries are no longer copied over the remote protocol, and I no
+ longer see the test timeout.
+
+2022-04-04 John Baldwin <jhb@FreeBSD.org>
+
+ Handle TLS variable lookups when using separate debug files.
+ Commit df22c1e5d53c38f38bce6072bb46de240f9e0e2b handled the case that
+ a separate debug file was passed as the objfile for a shared library
+ to svr4_fetch_objfile_link_map. However, a separate debug file can
+ also be passed for TLS variables in the main executable. In addition,
+ frv_fetch_objfile_link_map also expects to be passed the original
+ objfile rather than a separate debug file, so pull the code to resolve
+ a separate debug file to the main objfile up into
+ target_translate_tls_address.
+
+2022-04-04 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Add maint set ignore-prologue-end-flag
+ The previous patch added support for the DWARF prologue-end flag in line
+ table. This flag can be used by DWARF producers to indicate where to
+ place breakpoints past a function prologue. However, this takes
+ precedence over prologue analyzers. So if we have to debug a program
+ with erroneous debug information, the overall debugging experience will
+ be degraded.
+
+ This commit proposes to add a maintenance command to instruct GDB to
+ ignore the prologue_end flag.
+
+ Tested on x86_64-gnu-linux.
+
+ Change-Id: Idda6d1b96ba887f4af555b43d9923261b9cc6f82
+
+2022-04-04 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Add support for DW_LNS_set_prologue_end in line-table
+ Add support for DW_LNS_set_prologue_end when building line-tables. This
+ attribute can be set by the compiler to indicate that an instruction is
+ an adequate place to set a breakpoint just after the prologue of a
+ function.
+
+ The compiler might set multiple prologue_end, but considering how
+ current skip_prologue_using_sal works, this commit modifies it to accept
+ the first instruction with this marker (if any) to be the place where a
+ breakpoint should be placed to be at the end of the prologue.
+
+ The need for this support came from a problematic usecase generated by
+ hipcc (i.e. clang). The problem is as follows: There's a function
+ (lets call it foo) which covers PC from 0xa800 to 0xa950. The body of
+ foo begins with a call to an inlined function, covering from 0xa800 to
+ 0xa94c. The issue is that when placing a breakpoint at 'foo', GDB
+ inserts the breakpoint at 0xa818. The 0x18 offset is what GDB thinks is
+ foo's first address past the prologue.
+
+ Later, when hitting the breakpoint, GDB reports the stop within the
+ inlined function because the PC falls in its range while the user
+ expects to stop in FOO.
+
+ Looking at the line-table for this location, we have:
+
+ INDEX LINE ADDRESS IS-STMT
+ [...]
+ 14 293 0x000000000000a66c Y
+ 15 END 0x000000000000a6e0 Y
+ 16 287 0x000000000000a800 Y
+ 17 END 0x000000000000a818 Y
+ 18 287 0x000000000000a824 Y
+ [...]
+
+ For comparison, let's look at llvm-dwarfdump's output for this CU:
+
+ Address Line Column File ISA Discriminator Flags
+ ------------------ ------ ------ ------ --- ------------- -------------
+ [...]
+ 0x000000000000a66c 293 12 2 0 0 is_stmt
+ 0x000000000000a6e0 96 43 82 0 0 is_stmt
+ 0x000000000000a6f8 102 18 82 0 0 is_stmt
+ 0x000000000000a70c 102 24 82 0 0
+ 0x000000000000a710 102 18 82 0 0
+ 0x000000000000a72c 101 16 82 0 0 is_stmt
+ 0x000000000000a73c 2915 50 83 0 0 is_stmt
+ 0x000000000000a74c 110 1 1 0 0 is_stmt
+ 0x000000000000a750 110 1 1 0 0 is_stmt end_sequence
+ 0x000000000000a800 107 0 1 0 0 is_stmt
+ 0x000000000000a800 287 12 2 0 0 is_stmt prologue_end
+ 0x000000000000a818 114 59 81 0 0 is_stmt
+ 0x000000000000a824 287 12 2 0 0 is_stmt
+ 0x000000000000a828 100 58 82 0 0 is_stmt
+ [...]
+
+ The main difference we are interested in here is that llvm-dwarfdump's
+ output tells us that 0xa800 is an adequate place to place a breakpoint
+ past a function prologue. Since we know that foo covers from 0xa800 to
+ 0xa94c, 0xa800 is the address at which the breakpoint should be placed
+ if the user wants to break in foo.
+
+ This commit proposes to add support for the prologue_end flag in the
+ line-program processing.
+
+ The processing of this prologue_end flag is made in skip_prologue_sal,
+ before it calls gdbarch_skip_prologue_noexcept. The intent is that if
+ the compiler gave information on where the prologue ends, we should use
+ this information and not try to rely on architecture dependent logic to
+ guess it.
+
+ The testsuite have been executed using this patch on GNU/Linux x86_64.
+ Testcases have been compiled with both gcc/g++ (verison 9.4.0) and
+ clang/clang++ (version 10.0.0) since at the time of writing GCC does not
+ set the prologue_end marker. Tests done with GCC 11.2.0 (not over the
+ entire testsuite) show that it does not emit this flag either.
+
+ No regression have been observed with GCC or Clang. Note that when
+ using Clang, this patch fixes a failure in
+ gdb.opt/inline-small-func.exp.
+
+ Change-Id: I720449a8a9b2e1fb45b54c6095d3b1e9da9152f8
+
+2022-04-04 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/buildsym: Line record use a record flag
+ Currently when recording a line entry (with
+ buildsym_compunit::record_line), a boolean argument argument is used to
+ indicate that the is_stmt flag should be set for this particular record.
+ As a later commit will add support for new flags, instead of adding a
+ parameter to record_line for each possible flag, transform the current
+ is_stmt parameter into a enum flag. This flags parameter will allow
+ greater flexibility in future commits.
+
+ This enum flags type is not propagated into the linetable_entry type as
+ this would require a lot of changes across the codebase for no practical
+ gain (it currently uses a bitfield where each interesting flag only
+ occupy 1 bit in the structure).
+
+ Tested on x86_64-linux, no regression observed.
+
+ Change-Id: I5d061fa67bdb34918742505ff983d37453839d6a
+
+2022-04-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make timestamped_file implement can_emit_style_escape
+ In our AMDGPU downstream port, we use styling in some logging output.
+ We noticed it stopped working after the gdb_printf changes. Making
+ timestamped_file implement can_emit_style_escape (returning the value of
+ the stream it wraps) fixes it. To show that it works, modify some
+ logging statements in auto-load.c to output style filenames. You can
+ see it in action by setting "set debug auto-load 1" and running a
+ program. We can incrementally add styling to other debug statements
+ throughout GDB, as needed.
+
+ Change-Id: I78a2fd1e078f80f2263251cf6bc53b3a9de9c17a
+
+2022-04-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove assertion in psymbol_functions::expand_symtabs_matching
+ psymtab_to_symtab is documented as possibly returning nullptr, if the
+ primary symtab of the partial symtab has no symbols. However,
+ psymbol_functions::expand_symtabs_matching asserts that the result of
+ psymtab_to_symtab as non-nullptr.
+
+ I caught this assert by trying the CTF symbol reader on a library I
+ built with -gctf:
+
+ $ ./gdb --data-directory=data-directory /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0
+ ...
+ Reading symbols from /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0...
+ (gdb) maintenance expand-symtabs
+ /home/simark/src/binutils-gdb/gdb/psymtab.c:1142: internal-error: expand_symtabs_matching: Assertion `symtab != nullptr' failed.
+
+ The "symtab" in question is:
+
+ $ readelf --ctf=.ctf /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0
+ ...
+ CTF archive member: /home/simark/src/babeltrace/src/lib/graph/component-descriptor-set.c:
+
+ Header:
+ Magic number: 0xdff2
+ Version: 4 (CTF_VERSION_3)
+ Flags: 0xe (CTF_F_NEWFUNCINFO, CTF_F_IDXSORTED, CTF_F_DYNSTR)
+ Parent name: .ctf
+ Compilation unit name: /home/simark/src/babeltrace/src/lib/graph/component-descriptor-set.c
+ Type section: 0x0 -- 0x13 (0x14 bytes)
+ String section: 0x14 -- 0x5f (0x4c bytes)
+
+ Labels:
+
+ Data objects:
+
+ Function objects:
+
+ Variables:
+
+ Types:
+ 0x80000001: (kind 5) bt_bool (*) (const bt_value *) (aligned at 0x8)
+
+ Strings:
+ 0x0:
+ 0x1: .ctf
+ 0x6: /home/simark/src/babeltrace/src/lib/graph/component-descriptor-set.c
+
+ It contains a single type, and it is skipped by ctf_add_type_cb, because
+ an identical type was already seen earlier in this objfile. As a
+ result, no compunit_symtab is created.
+
+ Change psymbol_functions::expand_symtabs_matching to expect that
+ psymtab_to_symtab can return nullptr.
+
+ Another possibility would be to make the CTF symbol reader always create
+ a compunit_symtab, even if there are no symbols in it (like the DWARF
+ parser does), but so far I don't see any advantage in doing so.
+
+ Change-Id: Ic43c38202c838a5eb87630ed1fd61d33528164f4
+
+2022-04-04 Andrew Burgess <aburgess@redhat.com>
+
+ sim: fixes for libopcodes styled disassembler
+ In commit:
+
+ commit 60a3da00bd5407f07d64dff82a4dae98230dfaac
+ Date: Sat Jan 22 11:38:18 2022 +0000
+
+ objdump/opcodes: add syntax highlighting to disassembler output
+
+ I broke several sim/ targets by forgetting to update their uses of the
+ libopcodes disassembler to take account of the new styled printing.
+
+ These should all be fixed by this commit.
+
+ I've not tried to add actual styled output to the simulator traces,
+ instead, the styled print routines just ignore the style and print the
+ output unstyled.
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Remove some globals from nat/windows-nat.c
+ nat/windows-nat.c has a number of globals that it uses to communicate
+ with its clients (gdb and gdbserver). However, if we ever want the
+ Windows ports to be multi-inferior, globals won't work.
+
+ This patch takes a step toward that by moving most nat/windows-nat.c
+ globals into a new struct windows_process_info. Many functions are
+ converted to be methods on this object.
+
+ A couple of globals remain, as they are needed to truly be global due
+ to the way that the Windows debugging APIs work.
+
+ The clients still have a global for the current process. That is,
+ this patch is a step toward the end goal, but doesn't implement the
+ goal itself.
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Remove windows_thread_info destructor
+ windows_thread_info declares and defines a destructor, but this
+ doesn't need to be explicit.
+
+ Use unique_ptr in the Windows thread list
+ windows-nat.c uses some manual memory management when manipulating the
+ thread_list global. Changing this to use unique_ptr simplifies the
+ code, in particular windows_init_thread_list. (Note that, while I
+ think the the call to init_thread_list in there is wrong, I haven't
+ removed it in this patch.)
+
+ Use auto_obstack in windows-nat.c
+ One spot in windows-nat.c can use auto_obstack, removing some manual
+ memory management.
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Simplify windows-nat.c solib handling
+ Currently windows-nat.c uses struct so_list to record its local idea
+ of which shared libraries have been loaded. However, many fields in
+ this are not needed, and furthermore I found this quite confusing at
+ first -- Windows actually uses solib-target and so the use of so_list
+ here is weird.
+
+ This patch simplifies this code by changing it to use a std::vector
+ and a new type that holds exactly what's needed for the Windows code.
+
+2022-04-04 Pedro Alves <pedro@palves.net>
+
+ Avoid undefined behavior in gdbscm_make_breakpoint
+ Running gdb.guile/scm-breakpoint.exp against an --enable-ubsan build,
+ we see:
+
+ UNRESOLVED: gdb.guile/scm-breakpoint.exp: test_watchpoints: create a breakpoint with an invalid type number
+ ...
+ guile (define wp2 (make-breakpoint "result" #:wp-class WP_WRITE #:type 999))
+ ../../src/gdb/guile/scm-breakpoint.c:377:11: runtime error: load of value 999, which is not a valid value for type 'bptype'
+ ERROR: GDB process no longer exists
+
+ Fix this by parsing the user/guile input as plain int, and cast to
+ internal type only after we know we have a number that would be valid.
+
+ Change-Id: I03578d07db00be01b610a8f5ce72e5521aea6a4b
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Add context-sensitive field name completion to Ada parser
+ This updates the Ada expression parser to implement context-sensitive
+ field name completion. This is PR ada/28727.
+
+ This is somewhat complicated due to some choices in the Ada lexer --
+ it chooses to represent a sequence of "."-separated identifiers as a
+ single token, so the parser must partially recreate the completer's
+ logic to find the completion word boundaries.
+
+ Despite the minor warts in this patch, though, it is a decent
+ improvement. It's possible that the DWARF reader rewrite will help
+ fix the package completion problem pointed out in this patch as well.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28727
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Consolidate single-char tokens in ada-lex.l
+ There are two rules in ada-lex.l that match single-character tokens.
+ This merges them.
+
+ Also, this removes '.' from the list of such tokens. '.' is not used
+ in any production in ada-exp.y, and removing it here helps the
+ subsequent completion patches.
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Remove the Ada DOT_ALL token
+ The Ada parser has a DOT_ALL token to represent ".all", and another
+ token to represent other ".<identifier>" forms. However, for
+ completion it is a bit more convenient to unify these cases, so this
+ patch removes DOT_ALL.
+
+ Refactor ada-lex.l:processId
+ processId in ada-lex.l is a bit funny -- it uses an "if" and a
+ "switch", and a nested loop. This patch cleans it up a bit, changing
+ it to use a boolean flag and a simpler "if".
+
+ Implement completion for Ada attributes
+ This adds a completer for Ada attributes. Some work in the lexer is
+ required in order to match end-of-input correctly, as flex does not
+ have a general-purpose way of doing this. (The approach taken here is
+ recommended in the flex manual.)
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Refactor expression completion
+ This refactors the gdb expression completion code to make it easier to
+ add more types of completers.
+
+ In the old approach, just two kinds of completers were supported:
+ field names for some sub-expression, or tag names (like "enum
+ something"). The data for each kind was combined in single structure,
+ "expr_completion_state", and handled explicitly by
+ complete_expression.
+
+ In the new approach, the parser state just holds an object that is
+ responsible for implementing completion. This way, new completion
+ types can be added by subclassing this base object.
+
+ The structop completer is moved into structop_base_operation, and new
+ objects are defined for use by the completion code. This moves much
+ of the logic of expression completion out of completer.c as well.
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Enable "set debug parser" for Ada
+ I noticed that "set debug parser 1" did not affect Ada parsing. This
+ patch fixes the problem.
+
+ Because this is rarely useful, and pretty much only for maintainers, I
+ didn't write a test case.
+
+2022-04-04 Tom Tromey <tromey@adacore.com>
+
+ Fix bug in Ada attributes lexing
+ The Ada lexer allows whitespace between the apostrophe and the
+ attribute text, but processAttribute does not handle this. This patch
+ fixes the problem and introduces a regression test.
+
+ Remove null sentinel from 'attributes'
+ In a subsequent patch, it's handy if the 'attributes' array in
+ ada-lex.l does not have a NULL sentinel at the end. In C++, this is
+ easy to avoid.
+
+ Handle ghost entities in symbol lookup
+ Normally, SPARK ghost entities are removed from the executable.
+ However, with -gnata, they will be preserved. In this situation, it's
+ handy to be able to inspect them. This patch allows this by removing
+ the "___ghost_" prefix in the appropriate places.
+
+2022-04-04 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: rename start_symtab/end_symtab to start_compunit_symtab/end_compunit_symtab
+ It's a bit confusing because we have both "compunit_symtab" and "symtab"
+ types, and many methods and functions containing "start_symtab" or
+ "end_symtab", which actually deal with compunit_symtabs. I believe this
+ comes from the time before compunit_symtab was introduced, where
+ symtab did the job of both.
+
+ Rename everything I found containing start_symtab or end_symtab to use
+ start_compunit_symtab or end_compunit_symtab.
+
+ Change-Id: If3849b156f6433640173085ad479b6a0b085ade2
+
+2022-04-04 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove some unused buildsym-legacy functions
+ Pretty much self-explanatory.
+
+ Change-Id: I5b658d017cd891ecdd1df61075eacb0f44316935
+
+2022-04-04 Fangrui Song <i@maskray.me>
+
+ gas: copy st_size only if unset
+ For
+ ```
+ .size foo1, 1
+ foo1:
+
+ .set bar1, foo1
+ .size bar1, 2
+ .size bar2, 2
+ .set bar2, foo1
+
+ .set bar3, foo2
+ .size bar3, 2
+ .size bar4, 2
+ .set bar4, foo2
+
+ .size foo2, 1
+ foo2:
+ ```
+
+ bar1's size is 2 while bar2, bar3, bar4's is 1. The behavior of bar1 makes sense
+ (generally directives on the new symbol should win) and is relied upon by glibc
+ stdio-common/errlist.c:
+
+ ```
+ .hidden _sys_errlist_internal
+ .globl _sys_errlist_internal
+ .type _sys_errlist_internal, @object
+ .size _sys_errlist_internal, 1072
+ _sys_errlist_internal:
+
+ .globl __GLIBC_2_1_sys_errlist
+ .set __GLIBC_2_1_sys_errlist, _sys_errlist_internal
+ .type __GLIBC_2_1_sys_errlist, %object
+ .size __GLIBC_2_1_sys_errlist, 125 * (64 / 8)
+
+ // glibc expects that .size __GLIBC_2_1_sys_errlist, 125 * (64 / 8) wins.
+ ```
+
+ The behavior of bar2/bar3/bar4 seems brittle. To avoid the reordering of the two
+ code blocks which will result in the bar3 situation, glibc compiles errlist.c
+ with gcc -fno-toplevel-reorder (previously -fno-unit-at-a-time).
+
+ To fix the inconsistency and improve robustness, make bar2/bar3/bar4 match bar1,
+ removing the directive order sensitivity.
+
+ There is a pity that `.size dest, 0` is indistinguishable from the case where
+ dest is unset, but the compromise seems fine.
+
+ PR gas/29012
+ * config/obj-elf.c (elf_copy_symbol_attributes): don't copy if src's size
+ has been set.
+ * testsuite/gas/elf/elf.exp: New test.
+ * testsuite/gas/elf/size.d: New file.
+ * testsuite/gas/elf/size.s: Likewise.
+
+2022-04-04 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: remove use of vfprintf_filtered
+ Commit:
+
+ commit 60a3da00bd5407f07d64dff82a4dae98230dfaac
+ Date: Sat Jan 22 11:38:18 2022 +0000
+
+ objdump/opcodes: add syntax highlighting to disassembler output
+
+ Introduced a new use of vfprintf_filtered, which has been deprecated.
+ This commit replaces this with gdb_vprintf instead.
+
+2022-04-04 Andrew Burgess <aburgess@redhat.com>
+
+ opcodes/i386: partially implement disassembler style support
+ This commit adds partial support for disassembler styling in the i386
+ disassembler.
+
+ The i386 disassembler collects the instruction arguments into an array
+ of strings, and then loops over the array printing the arguments out
+ later on. The problem is that by the time we print the arguments out
+ it's not obvious what the type of each argument is.
+
+ Obviously this can be fixed, but I'd like to not do that as part of
+ this commit, rather, I'd prefer to keep this commit as small as
+ possible to get the basic infrastructure in place, then we can improve
+ on this, to add additional styling, in later commits.
+
+ For now then, I think this commit should correctly style mnemonics,
+ some immediates, and comments. Everything else will be printed as
+ plain text, which will include most instruction arguments, unless the
+ argument is printed as a symbol, by calling the print_address_func
+ callback.
+
+ Ignoring colours, there should be no other user visible changes in the
+ output of the disassembler in either objdump or gdb.
+
+ opcodes/ChangeLog:
+
+ * disassembler.c (disassemble_init_for_target): Set
+ created_styled_output for i386 based targets.
+ * i386-dis.c: Changed throughout to use fprintf_styled_func
+ instead of fprintf_func.
+
+2022-04-04 Andrew Burgess <aburgess@redhat.com>
+
+ opcodes/riscv: implement style support in the disassembler
+ Update the RISC-V disassembler to supply style information. This
+ allows objdump to apply syntax highlighting to the disassembler
+ output (when the appropriate command line flag is used).
+
+ Ignoring colours, there should be no other user visible changes in the
+ output of the disassembler in either objdump or gdb.
+
+ opcodes/ChangeLog:
+
+ * disassembler.c (disassemble_init_for_target): Set
+ created_styled_output for riscv.
+ * riscv-dis.c: Changed throughout to use fprintf_styled_func
+ instead of fprintf_func.
+
+2022-04-04 Andrew Burgess <aburgess@redhat.com>
+
+ objdump/opcodes: add syntax highlighting to disassembler output
+ This commit adds the _option_ of having disassembler output syntax
+ highlighted in objdump. This option is _off_ by default. The new
+ command line options are:
+
+ --disassembler-color=off # The default.
+ --disassembler-color=color
+ --disassembler-color=extended-color
+
+ I have implemented two colour modes, using the same option names as we
+ use of --visualize-jumps, a basic 8-color mode ("color"), and an
+ extended 8bit color mode ("extended-color").
+
+ The syntax highlighting requires that each targets disassembler be
+ updated; each time the disassembler produces some output we now pass
+ through an additional parameter indicating what style should be
+ applied to the text.
+
+ As updating all target disassemblers is a large task, the old API is
+ maintained. And so, a user of the disassembler (i.e. objdump, gdb)
+ must provide two functions, the current non-styled print function, and
+ a new, styled print function.
+
+ I don't currently have a plan for converting every single target
+ disassembler, my hope is that interested folk will update the
+ disassemblers they are interested in. But it is possible some might
+ never get updated.
+
+ In this initial series I intend to convert the RISC-V disassembler
+ completely, and also do a partial conversion of the x86 disassembler.
+ Hopefully having the x86 disassembler at least partial converted will
+ allow more people to try this out easily and provide feedback.
+
+ In this commit I have focused on objdump. The changes to GDB at this
+ point are the bare minimum required to get things compiling, GDB makes
+ no use of the styling information to provide any colors, that will
+ come later, if this commit is accepted.
+
+ This first commit in the series doesn't convert any target
+ disassemblers at all (the next two commits will update some targets),
+ so after this commit, the only color you will see in the disassembler
+ output, is that produced from objdump itself, e.g. from
+ objdump_print_addr_with_sym, where we print an address and a symbol
+ name, these are now printed with styling information, and so will have
+ colors applied (if the option is on).
+
+ Finally, my ability to pick "good" colors is ... well, terrible. I'm
+ in no way committed to the colors I've picked here, so I encourage
+ people to suggest new colors, or wait for this commit to land, and
+ then patch the choice of colors.
+
+ I do have an idea about using possibly an environment variable to
+ allow the objdump colors to be customised, but I haven't done anything
+ like that in this commit, the color choices are just fixed in the code
+ for now.
+
+ binutils/ChangeLog:
+
+ * NEWS: Mention new feature.
+ * doc/binutils.texi (objdump): Describe --disassembler-color
+ option.
+ * objdump.c (disassembler_color): New global.
+ (disassembler_extended_color): Likewise.
+ (disassembler_in_comment): Likewise.
+ (usage): Mention --disassembler-color option.
+ (long_options): Add --disassembler-color option.
+ (objdump_print_value): Use fprintf_styled_func instead of
+ fprintf_func.
+ (objdump_print_symname): Likewise.
+ (objdump_print_addr_with_sym): Likewise.
+ (objdump_color_for_disassembler_style): New function.
+ (objdump_styled_sprintf): New function.
+ (fprintf_styled): New function.
+ (disassemble_jumps): Use disassemble_set_printf, and reset
+ disassembler_in_comment.
+ (null_styled_print): New function.
+ (disassemble_bytes): Use disassemble_set_printf, and reset
+ disassembler_in_comment.
+ (disassemble_data): Update init_disassemble_info call.
+ (main): Handle --disassembler-color option.
+
+ include/ChangeLog:
+
+ * dis-asm.h (enum disassembler_style): New enum.
+ (struct disassemble_info): Add fprintf_styled_func field, and
+ created_styled_output field.
+ (disassemble_set_printf): Declare.
+ (init_disassemble_info): Add additional parameter.
+ (INIT_DISASSEMBLE_INFO): Add additional parameter.
+
+ opcodes/ChangeLog:
+
+ * dis-init.c (init_disassemble_info): Take extra parameter,
+ initialize the new fprintf_styled_func and created_styled_output
+ fields.
+ * disassembler.c (disassemble_set_printf): New function definition.
+
+2022-04-04 Tom Tromey <tom@tromey.com>
+
+ Remove more Python 2 code
+ I found another more place that still had a workaround for Python 2.
+ This patch removes it.
+
+2022-04-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix KPASS in gdb.ada/arrayptr.exp
+ On openSUSE Leap 15.3 I run into:
+ ...
+ KPASS: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr.all \
+ (PRMS minimal encodings)
+ KPASS: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr(3) \
+ (PRMS minimal encodings)
+ KPASS: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr.all(3) \
+ (PRMS minimal encodings)
+ ...
+
+ The test-case KFAILs some tests. However, the analysis in the corresponding
+ PR talks of a compiler problem, so it should use XFAILs instead.
+
+ The KFAILs are setup for pre-gcc-12, but apparantly the fix has been
+ backported to system compiler 7.5.0, hence the KPASS.
+
+ Fix this by:
+ - using an XFAIL instead of a KFAIL
+ - matching the specific gdb output that corresponds to the XFAILs
+ (reproduced on Fedora 34).
+
+ Tested on x86_64-linux, specifically openSUSE Leap 15.3 and Fedora 34.
+
+2022-04-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-03 rupothar <rupesh.potharla@amd.com>
+
+ gdb: add support for Fortran's ASSUMED RANK arrays
+ This patch adds a new dynamic property DYN_PROP_RANK, this property is
+ read from the DW_AT_rank attribute and stored within the type just
+ like other dynamic properties.
+
+ As arrays with dynamic ranks make use of a single
+ DW_TAG_generic_subrange to represent all ranks of the array, support
+ for this tag has been added to dwarf2/read.c.
+
+ The final piece of this puzzle is to add support in gdbtypes.c so that
+ we can resolve an array type with dynamic rank. To do this the
+ existing resolve_dynamic_array_or_string function is split into two,
+ there's a new resolve_dynamic_array_or_string_1 core that is
+ responsible for resolving each rank of the array, while the now outer
+ resolve_dynamic_array_or_string is responsible for figuring out the
+ array rank (which might require resolving a dynamic property) and then
+ calling the inner core.
+
+ The resolve_dynamic_range function now takes a rank, which is passed
+ on to the dwarf expression evaluator. This rank will only be used in
+ the case where the array itself has dynamic rank, but we now pass the
+ rank in all cases, this should be harmless if the rank is not needed.
+
+ The only small nit is that resolve_dynamic_type_internal actually
+ handles resolving dynamic ranges itself, which now obviously requires
+ us to pass a rank value. But what rank value to use? In the end I
+ just passed '1' through here as a sane default, my thinking is that if
+ we are in resolve_dynamic_type_internal to resolve a range, then the
+ range isn't part of an array with dynamic rank, and so the range
+ should actually be using the rank value at all.
+
+ An alternative approach would be to make the rank value a
+ gdb::optional, however, this ends up adding a bunch of complexity to
+ the code (e.g. having to conditionally build the array to pass to
+ dwarf2_evaluate_property, and handling the 'rank - 1' in
+ resolve_dynamic_array_or_string_1) so I haven't done that, but could,
+ if people think that would be a better approach.
+
+ Finally, support for assumed rank arrays was only fixed very recently
+ in gcc, so you'll need the latest gcc in order to run the tests for
+ this.
+
+ Here's an example test program:
+
+ PROGRAM arank
+ REAL :: a1(10)
+ CALL sub1(a1)
+
+ CONTAINS
+
+ SUBROUTINE sub1(a)
+ REAL :: a(..)
+ PRINT *, RANK(a)
+ END SUBROUTINE sub1
+ END PROGRAM arank
+
+ Compiler Version:
+ gcc (GCC) 12.0.0 20211122 (experimental)
+
+ Compilation command:
+ gfortran assumedrank.f90 -gdwarf-5 -o assumedrank
+
+ Without Patch:
+
+ gdb -q assumedrank
+ Reading symbols from assumedrank...
+ (gdb) break sub1
+ Breakpoint 1 at 0x4006ff: file assumedrank.f90, line 10.
+ (gdb) run
+ Starting program: /home/rupesh/STAGING-BUILD-2787/bin/assumedrank
+
+ Breakpoint 1, arank::sub1 (a=<unknown type in /home/rupesh/STAGING-BUILD-2787
+ /bin/assumedrank, CU 0x0, DIE 0xd5>) at assumedrank.f90:10
+ 10 PRINT *, RANK(a)
+ (gdb) print RANK(a)
+ 'a' has unknown type; cast it to its declared type
+
+ With patch:
+
+ gdb -q assumedrank
+ Reading symbols from assumedrank...
+ (gdb) break sub1
+ Breakpoint 1 at 0x4006ff: file assumedrank.f90, line 10.
+ (gdb) run
+ Starting program: /home/rupesh/STAGING-BUILD-2787/bin/assumedrank
+
+ Breakpoint 1, arank::sub1 (a=...) at assumedrank.f90:10
+ 10 PRINT *, RANK(a)
+ (gdb) print RANK(a)
+ $1 = 1
+ (gdb) ptype a
+ type = real(kind=4) (10)
+ (gdb)
+
+ Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/dwarf: pass an array of values to the dwarf evaluator
+ When we need to evaluate a DWARF expression in order to resolve some
+ dynamic property of a type we call the dwarf2_evaluate_property
+ function, which is declared in gdb/dwarf/loc.h and defined in
+ gdb/dwarf/loc.c.
+
+ Currently, this function takes (amongst other things) an argument of
+ type property_addr_info called addr_stack and a boolean called
+ push_initial_value. When push_initial_value then the top value of
+ addr_stack is pushed onto the dwarf expression evaluation stack before
+ the expression is evaluated.
+
+ So far this has worked fine, as the only two cases we needed to handle
+ are the case the DWARF expression doesn't require the object
+ address (what the top of addr_stack represents), and the case where
+ the DWARF expression does require the address.
+
+ In the next commit this is going to change. As we add support for
+ Fortran assumed rank arrays, we need to start resolving the dynamic
+ properties of arrays. To do this, we need to push the array rank onto
+ the dwarf expression evaluation stack before the expression is
+ evaluated.
+
+ This commit is a refactoring commit aimed at making it easier to
+ support Fortran assumed rank arrays. Instead of passing a boolean,
+ and using this to decide if we should push the object address or not,
+ we instead pass an array (view) of values that should be pushed to the
+ dwarf expression evaluation stack.
+
+ In the couple of places where we previously passed push_initial_value
+ as true (mostly this was defaulting to false), we now have to pass the
+ address from the addr_stack as an item in the array view.
+
+ In the next commit, when we want to handle passing the array rank,
+ this will easily be supported too.
+
+ There should be no user visible changes after this commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: small simplification in dwarf2_locexpr_baton_eval
+ While examining the dwarf expression evaluator, I noticed that in
+ dwarf2_locexpr_baton_eval, whenever push_initial_value is true, the
+ addr_stack will never be nullptr.
+
+ This allows for a small cleanup, replacing an if/then/else with an
+ assertion.
+
+ There should be no user visible changes after this commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: resolve some duplicate test names in gdb.base
+ This commit resolves all the duplicate test names that I see in the
+ script:
+
+ gdb.base/attach-pie-misread.exp
+
+ The duplicate names all come from a second call to
+ build_executable_own_libs, so in this commit I've places the second
+ call inside a with_test_prefix block.
+
+ While I was making this change I've also modified the value being
+ passed as the testname for the second build_executable_own_libs call.
+ Previously we used ${test}, however, I think this was likely a
+ mistake, the 'test' variable is setup for the previous test. I
+ suspect that ${testfile} is a better choice - especially now we have a
+ testname prefix.
+
+ As the testname is only used (after various calls) from within
+ build_executable_from_specs should the build fail, I don't think this
+ change really makes much difference though.
+
+ There should be no change in what is tested after this commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: resolve a duplicate test name in a gdb.mi test
+ Solve two duplicate test names in the test script:
+
+ gdb.mi/mi-catch-cpp-exceptions.exp
+
+ by moving the call to restart_for_test inside the with_test_prefix
+ block. There should be no difference in what is tested after this
+ commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/Makefile.in: move ALLDEPFILES earlier in Makefile.in
+ If I do 'make tags' in the gdb build directory, the tags target does
+ complete, but I see these warnings:
+
+ ../../src/gdb/arm.c: No such file or directory
+ ../../src/gdb/arm-get-next-pcs.c: No such file or directory
+ ../../src/gdb/arm-linux.c: No such file or directory
+
+ The reason for this is the ordering of build rules and make variables
+ in gdb/Makefile.in, specifically, the placement of the tags related
+ rules, and the ALLDEPFILES variable. The ordering is like this:
+
+ TAGFILES_NO_SRCDIR = .... $(ALLDEPFILES) ....
+
+ TAGS: $(TAGFILES_NO_SRCDIR) ....
+ # Recipe uses $(TAGFILES_NO_SRCDIR)
+
+ tags: TAGS
+
+ ALLDEPFILES = .....
+
+ When the TAGS rule is parsed TAGFILES_NO_SRCDIR is expanded, which
+ then expands ALLDEPFILES, which, at that point in the Makefile is
+ undefined, and so expands to the empty string. As a result TAGS does
+ not depend on any file listed in ALLDEPFILES.
+
+ However, when the TAGS recipe is invoked ALLDEPFILES is now defined.
+ As a result, all the files in ALLDEPFILES are passed to the etags
+ program.
+
+ The ALLDEPFILES references three files, arm.c, arm-get-next-pcs.c, and
+ arm-linux.c, which are actually in the gdb/arch/ directory, but, in
+ ALLDEPFILES these files don't include the arch/ prefix. As a result,
+ the etags program ends up looking for these files in the wrong
+ location.
+
+ As ALLDEPFILES is only used by the TAGS rule, this mistake was not
+ previously noticed (the TAGS rule itself was broken until a recent
+ commit).
+
+ In this commit I make two changes, first, I move ALLDEPFILES to be
+ defined before TAGFILES_NO_SRCDIR, this means that the TAGS rule will
+ depend on all the files in ALLDEPFILES. With this change the TAGS
+ rule now breaks complaining that there's no rule to build the 3 files
+ mentioned above.
+
+ Next, I have added all *.c files in gdb/arch/ to ALLDEPFILES,
+ including their arch/ prefix, and removed the incorrect (missing arch/
+ prefix) references.
+
+ With these two changes the TAGS (or tags if you prefer) target now
+ builds without any errors or warnings.
+
+2022-04-03 Reuben Thomas <rrt@sc3d.org>
+
+ gdb/Makefile.in: fix 'make tags' build target
+ The gdb_select.h file was moved to the gdbsupport directory long ago,
+ but a reference was accident left in gdb/Makefile.in (in the
+ HFILES_NO_SRCDIR variable), this commit removes that reference.
+
+ Before this commit, if I use 'make tags' here's what I see:
+
+ $ make tags
+ make: *** No rule to make target 'gdb_select.h', needed by 'TAGS'. Stop.
+
+ After this commit 'make tags' completes, but I still see these
+ warnings:
+
+ ../../src/gdb/arm.c: No such file or directory
+ ../../src/gdb/arm-get-next-pcs.c: No such file or directory
+ ../../src/gdb/arm-linux.c: No such file or directory
+
+ These are caused by a separate issue, and will be addressed in the
+ next commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/Makefile.in: remove SOURCES variable
+ The SOURCES variable was added to gdb/Makefile.in as part of commit:
+
+ commit fb40c20903110ed8af9701ce7c2635abd3770d52
+ Date: Wed Feb 23 00:25:43 2000 +0000
+
+ Add mi/ and testsuite/gdb.mi/ subdirectories.
+
+ But as far as I can tell was not used at the time it was added, and is
+ not used today.
+
+ Lets remove it.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: fair split of delta after a resize
+ Currently, in master gdb, when a tui window is changed in size, the
+ screen delta is mostly just added to the next available window. We
+ do take care to respect the min/max size, but in most cases, these
+ limits are just "the terminal size", and so, we end up placing the
+ whole delta on the next window.
+
+ Consider these steps in an 80 column, 24 line terminal:
+
+ (gdb) tui enable
+ (gdb) layout src
+ (gdb) layout split
+ (gdb) info win
+ Name Lines Columns Focus
+ src 8 80 (has focus)
+ asm 8 80
+ status 1 80
+ cmd 8 80
+ (gdb) winheight cmd +2
+ (gdb) info win
+ Name Lines Columns Focus
+ src 6 80 (has focus)
+ asm 8 80
+ status 1 80
+ cmd 10 80
+
+ Notice that initially, the windows were balanced, 8 lines each for the
+ major windows. Then, when the cmd window was adjusted, the extra two
+ lines were given to the asm window.
+
+ I think it would be nicer if the delta was spread more evenly over the
+ available windows. In the example above, after the adjustment the
+ layout now looks like:
+
+ (gdb) info win
+ Name Lines Columns Focus
+ src 7 80 (has focus)
+ asm 7 80
+ status 1 80
+ cmd 10 80
+
+ This is achieved within tui_layout_split::set_size, by just handing
+ out the delta in increments of 1 to each window (except for the window
+ the user adjusted), until there's no more delta left. Of course, we
+ continue to respect the min/max window sizes.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: relax restrictions on window max height and width
+ This commit removes some arbitrary adjustments made in
+ tui_cmd_window::max_height, tui_win_info::max_height, and
+ tui_win_info::max_width.
+
+ These member functions all subtract some constant from the theoretical
+ maximum height or width. I've looked back through the history a
+ little and can see no real reason why these adjustments should be
+ needed, with these adjustments removed all the existing tui tests
+ still pass.
+
+ However, retaining these restrictions causes some bugs, consider:
+
+ (gdb) tui new-layout hsrc {-horizontal src 1 cmd 1} 1
+
+ When this layout is selected with current master, gdb will leave a 4
+ line gap at the bottom of the terminal.
+
+ The problem is that the maximum height is restricted, for the cmd
+ window, to 4 less than the terminal height.
+
+ By removing this restriction gdb is able to size the windows to the
+ complete terminal height, and the layout is done correctly.
+
+ This 4 line restriction is also what prevents this layout from working
+ correctly:
+
+ (gdb) tui new-layout conly cmd 1
+
+ Previously, this layout would present a cmd window only, but there
+ would be a 4 line gap at the bottom of the terminal. This issue was
+ mentioned in an earlier commit in this series (when a different bug
+ was fixed), but with this commit, the above layout now correctly fills
+ the terminal. The associated test is updated.
+
+ After removing the adjustment in tui_cmd_window::max_height, the
+ implementation is now the same as the implementation in the parent
+ class tui_win_info, so I've completely removed the max_height call
+ from tui_cmd_window.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: some additional tests in gdb.tui/scroll.exp
+ This commit just adds an extra check of the src window size prior to
+ sending all the commands to gdb. We also set the cmd window height to
+ its existing height, this (obviously) shouldn't change the window
+ layout, which we check.
+
+ My main motivation was adding the initial window layout check, the
+ winheight and recheck are just extras. All of these test pass both
+ before and after this commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: support placing the cmd window into a horizontal layout
+ This commit allows the user to place the cmd window within horizontal
+ tui layouts. Consider this set of steps, carried out in an 80 columns
+ by 24 lines terminal, using current master gdb:
+
+ (gdb) tui new-layout hsrc { -horizontal src 1 cmd 1 } 1 status 1
+ (gdb) tui layout hsrc
+
+ What you end up with is a full width cmd window with the status bar
+ beneath. Where's the src window gone? We then try:
+
+ (gdb) info win
+ Name Lines Columns Focus
+ src 23 3 (has focus)
+ cmd 23 80
+ status 1 80
+ (gdb)
+
+ Something weird has gone on, gdb has overlapped the cmd window with
+ the src window. If we trigger the src window to redraw is content,
+ for example, 'list main', then we see corruption in the cmd window as
+ the src window overwrites it.
+
+ So, what's going on?
+
+ The problem is some code in tui_layout_split::apply, in tui-layout.c.
+ Within 'Step 1', there is a loop that calculates the min/max window
+ sizes for all windows within a tui_layout_split. However, there's a
+ special case for the cmd window.
+
+ This special case is trying to have the cmd window retain its current
+ size when a layout is re-applied, or a new layout is applied. This
+ makes sense, consider moving from the 'src' layout to the 'asm'
+ layout, this looks something like this (status window removed):
+
+ .-------. .-------.
+ | src | | asm |
+ |-------| ====> |-------|
+ | cmd | | cmd |
+ '-------' '-------'
+
+ If the user has gone to the effort of adjusting the cmd window size,
+ then, the thinking goes, we shouldn't reset the cmd window size when
+ switching layouts like this.
+
+ The problem though, is that when we do a switch more like this:
+
+ .-----------. .-----------.
+ | src | | | |
+ |-----------| ====> | asm | cmd |
+ | cmd | | | |
+ '-----------' '-----------'
+
+ Now retaining the cmd window width makes no sense; the new layout has
+ a completely different placement for the cmd window, instead of sizing
+ by height, we're now sizing by width. The existing code doesn't
+ understand this though, and tried to retain the full width for the cmd
+ window.
+
+ To solve this problem, I propose we introduce the idea of a layout
+ "fingerprint". The fingerprint tries to capture, in an abstract way,
+ where the cmd window lives within the layout.
+
+ Only when two layouts have the same fingerprint will we attempt to
+ retain the cmd window size.
+
+ The fingerprint for a layout is represented as a string, the string is
+ a series of 'V' or 'H' characters, ending with a single 'C'
+ character. The series of 'V' and 'H' characters represent the
+ vertical or horizontal layouts that must be passed through to find the
+ cmd window.
+
+ Here are a few examples:
+
+ # This layout is equivalent to the builtin 'src' layout.
+ # Fingerprint: VC
+ tui new-layout example1 src 2 status 0 cmd 1
+
+ # This layout is equivalent to the builtin 'split' layout.
+ # Fingerprint: VC
+ tui new-layout example2 src 1 asm 1 status 0 cmd 1
+
+ # This is the same layout that was given at the top.
+ # Fingerprint: VHC
+ tui new-layout hsrc { -horizontal src 1 cmd 1 } 1 status 1
+
+ And so, when switching between example1 and example2, gdb knows that
+ the cmd window is, basically, in the same sort of position within the
+ layout, and will retain the cmd window size.
+
+ In contrast, when switching to the hsrc layout, gdb understands that
+ the position of the cmd window is different, and does not try to
+ retain the cmd window size.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: allow cmd window to change size in tui_layout_split::apply
+ When we switch layouts we call the tui_layout_split::apply member
+ function to reapply the layout, and recalculate all the window sizes.
+
+ One special case is the cmd window, which we try to keep at its
+ existing size.
+
+ However, in some cases it is not appropriate to keep the cmd window at
+ its existing size. I will describe two such cases here, in one, we
+ want the cmd window to reduce in size, and in the other, we want the
+ cmd window to grow in size.
+
+ Try these steps in a 80 columns, by 24 lines terminal:
+
+ (gdb) tui enable
+ (gdb) layout src
+ (gdb) winheight cmd 20
+ (gdb) layout split
+
+ You should see that the status window is missing from the new layout,
+ and that the cmd window has been placed over the border of the asm
+ window. The 'info win' output is:
+
+ (gdb) info win
+ Name Lines Columns Focus
+ src 3 80 (has focus)
+ asm 3 80
+ status 1 80
+ cmd 20 80
+
+ Notice that gdb has assigned 27 lines of screen space, even with the
+ border overlap between the src and asm windows, this is still 2 lines
+ too many.
+
+ The problem here is that after switching layouts, gdb has forced the
+ cmd window to retain its 20 line height. Really, we want the cmd
+ window to reduce in height so that the src and asm windows can occupy
+ their minimum required space.
+
+ This commit allows this (details on how are below). After this
+ commit, in the above situation, we now see the status window displayed
+ correctly, and the 'info win' output is:
+
+ (gdb) info win
+ Name Lines Columns Focus
+ src 3 80 (has focus)
+ asm 3 80
+ status 1 80
+ cmd 18 80
+
+ The cmd window has been reduced in size by 2 lines so that everything
+ can fit on the screen.
+
+ The second example is one which was discussed in a recent commit,
+ consider this case (still in the 80 column, 24 line terminal):
+
+ (gdb) tui enable
+ (gdb) tui new-layout conly cmd 1
+ (gdb) layout conly
+ (gdb) info win
+ Name Lines Columns Focus
+ cmd 8 80 (has focus)
+ (gdb)
+
+ This layout only contains a cmd window, which we would expect to
+ occupy the entire terminal. But instead, the cmd window only occupies
+ the first 8 lines, and the rest of the terminal is unused!
+
+ The reason is, again, that the cmd window is keeping its previous
+ size (8 lines).
+
+ After this commit things are slightly different, the 'info win' output
+ is now:
+
+ (gdb) info win
+ Name Lines Columns Focus
+ cmd 20 80 (has focus)
+
+ Which is a little better, but why only 20 lines? Turns out there's
+ yet another bug hitting this case. That bug will be addressed in a
+ later commit, so, for now, we're accepting the 20 lines.
+
+ What this commit does is modify the phase of tui_layout_split::apply
+ that handles any left over space. Usually, in "Step 2", each
+ sub-layout has a size calculated. As the size is an integer, then,
+ when all sizes are calculated we may have some space left over.
+
+ This extra space is then distributed between all the windows fairly
+ until all the space is used up.
+
+ When we consider windows minimum size, or fixed size windows, then it
+ is possible that we might try to use more space than is available,
+ this was our first example above. The same code that added extra
+ space to the windows, can also be used to reclaim space (in the over
+ allocation case) to allow all windows to fit.
+
+ The problem then is the cmd window, which we often force to a fixed
+ size. Inside the loop that handles the allocation of excess space, if
+ we find that we have tried every window, and still have space either
+ left to give, or we need to claim back more space, then, if the cmd
+ window was changed to a fixed size, we can change the cmd window back
+ to a non-fixed-size window, and proceed to either give, or take space
+ from the cmd window as needed.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: fairer distribution of excess space during apply
+ When applying layouts gdb computes the size of each window (or rather,
+ each sub-layout within a layout) using integer arithmetic. As this
+ rounds down the results, then, when all sub-layouts are sized, there
+ is the possibility that we have some space left over.
+
+ Currently, this space is just assigned to an arbitrary sub-layout.
+
+ This can result in some unbalanced results. Consider this set of
+ steps with current master:
+
+ (gdb) tui enable
+ (gdb) layout regs
+ (gdb) info win
+ Name Lines Columns Focus
+ regs 7 80
+ src 9 80 (has focus)
+ status 1 80
+ cmd 8 80
+
+ Notice the weird split between the src and regs windows, the original
+ layout specification has these windows given equal weight. The
+ problem is that, with rounding, both the regs and src windows are
+ initially sized to 7, the extra 2 lines are then arbitrarily added to
+ the src window.
+
+ In this commit, rather than add all the extra space to one single
+ window, I instead hand out the extra space 1 line at a time, looping
+ over all the sub-layouts. We take care to respect the min/max sizes,
+ and so, we now get this result:
+
+ (gdb) tui enable
+ (gdb) layout regs
+ (gdb) info win
+ Name Lines Columns Focus
+ regs 8 80
+ src 8 80 (has focus)
+ status 1 80
+ cmd 8 80
+
+ This looks more natural to me.
+
+ This is obviously a change in behaviour, and so, lots of the existing
+ tests need to be updated to take this into account. None of the
+ changes are huge, it's just a line or two (or column for width) moved
+ between windows.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: avoid fp exception when applying layouts
+ Consider:
+
+ (gdb) tui enable
+ (gdb) layout src
+ (gdb) tui new-layout conly cmd 1
+ (gdb) layout conly
+
+ After this, with current master, gdb crashes with a floating-point
+ exception.
+
+ The problem is that in tui_layout_split::apply, when we switch from
+ 'src' to 'conly', we will try to retain the cmd window height. As
+ such, the cmd window will become a fixed size window, which decreases
+ the available_size, but doesn't count towards the total_weight.
+
+ As the cmd window is the only window, the total_weight stays at zero,
+ and, when we move into step 2, where we attempt to size the windows,
+ we perform a divide by zero, and crash.
+
+ After this commit we avoid the divide by zero, and just directly set
+ the window size based on the fixed size.
+
+ There is still a problem after this commit, when the conly layout is
+ selected the cmd window retains its original height, which will only
+ be part of the terminal. The rest of the terminal is left unused.
+ This issue will be addressed in a later commit, this commit is just
+ about the floating-point exception.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui/testsuite: refactor new-layout.exp test
+ This commit changes the gdb.tui/new-layout.exp test to make use of a
+ list of test descriptions, and a loop to check each description in
+ turn. There's no change to what is actually tested after this commit.
+
+ In future commits I plan to add additional tests to this file, and
+ this will be easier now that all I have to do is add a new test
+ description to the list.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: add left_boxed_p and right_boxed_p member functions
+ When I initially saw this code in tui_layout_split::apply, I assumed
+ that this must be a bug:
+
+ /* Two adjacent boxed windows will share a border, making a bit
+ more size available. */
+ if (i > 0
+ && m_splits[i - 1].layout->bottom_boxed_p ()
+ && m_splits[i].layout->top_boxed_p ())
+ ...
+
+ After all, the apply might be laying out a horizontal layout, right?
+ So checking bottom_boxed_p and top_boxed_p is clearly wrong.
+
+ Well, it turns on, that due to the implementations of these things,
+ bottom_boxed_p is equivalent to an imagined right_boxed_p, and
+ top_boxed_p is equivalent to an imagined left_boxed_p.
+
+ In this commit I've renamed both top_boxed_p and bottom_boxed_p to
+ first_edge_has_border_p and last_edge_has_border_p respectively, and
+ extended the comments in tui_layout_base to mention that these methods
+ handle both horizontal and vertical layouts.
+
+ Now, hopefully, the code shouldn't look like it only applies for
+ vertical layouts.
+
+ There should be no user visible changes after this commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: add a tui debugging flag
+ This commit adds 'set debug tui on|off' and 'show debug tui'. This
+ commit adds the control variable, and the printing macros in
+ tui/tui.h. I've then added some uses of these in tui.c and
+ tui-layout.c.
+
+ To help produce more useful debug output in tui-layout.c, I've added
+ some helper member functions in the class tui_layout_split, and also
+ moved the size_info struct out of tui_layout_split::apply into the
+ tui_layout_split class.
+
+ If tui debug is not turned on, then there should be no user visible
+ changes after this commit.
+
+ One thing to note is that, due to the way that the tui terminal is
+ often cleared, the only way I've found this useful is when I do:
+
+ (gdb) tui enable
+ (gdb) set logging file /path/to/file
+ (gdb) set logging debugredirect on
+ (gdb) set logging enable on
+
+ Additionally, gdb has some quirks when it comes to setting up logging
+ redirect and switching interpreters. Thus, the above only really
+ works if the logging is enabled after the tui is enabled, and disabled
+ again before the tui is disabled.
+
+ Enabling logging and switching interpreters can cause undefined
+ results, including crashes. This is an existing bug in gdb[1], and
+ has nothing directly to do with tui debug, but it is worth mentioning
+ here I think.
+
+ [1] https://sourceware.org/bugzilla/show_bug.cgi?id=28948
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: add new 'tui window width' command and 'winwidth' alias
+ This commit adds a new command 'tui window width', and an alias
+ 'winwidth'. This command is equivalent to the old 'winheight'
+ command (which was recently renamed 'tui window height').
+
+ Even though I recently moved the old tui commands under the tui
+ namespace, and I would strongly encourage all new tui commands to be
+ added as 'tui ....' only (users can create their own top-level aliases
+ if they want), I'm breaking that suggestion here, and adding a
+ 'winwidth' alias.
+
+ Given that we already have 'winheight' and have done for years, it
+ just didn't seem right to no have the matching 'winwidth'.
+
+ You might notice in the test that the window resizing doesn't quite
+ work right. I setup a horizontal layout, then grow and shrink the
+ windows. At the end of the test the windows should be back to their
+ original size...
+
+ ... they are not. This isn't my fault, honest! GDB's window resizing
+ is a little ... temperamental, and is prone to getting things slightly
+ wrong during resizes, off by 1 type things. This is true for height
+ resizing, as well as the new width resizing.
+
+ Later patches in this series will rework the resizing algorithm, which
+ should improve things in this area. For now, I'm happy that the width
+ resizing is as good as the height resizing, given the existing quirks.
+
+ For the docs side I include a paragraph that explains how multiple
+ windows are required before the width can be adjusted. For
+ completeness, I've added the same paragraph to the winheight
+ description. With the predefined layouts this extra paragraph is not
+ really needed for winheight, as there are always multiple windows on
+ the screen. However, with custom layouts, this might not be true, so
+ adding the paragraph seems like a good idea.
+
+ As for the changes in gdb itself, I've mostly just taken the existing
+ height adjustment code, changed the name to make it generic 'size'
+ adjustment, and added a boolean flag to indicate if we are adjusting
+ the width or the height.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: rename tui_layout_split:set_weights_from_heights
+ In a following commit I'm going to add the ability to change the width
+ of a tui window (when in a horizontal layout). As a result, some of
+ the places where we currently hard-code references to height need to
+ be changed to handle either height, or width, based on whether we are
+ in a vertical, or horizontal layout.
+
+ This commit renames set_weights_from_heights to
+ set_weights_from_sizes, and makes the function use either the height,
+ or width as appropriate.
+
+ Currently, the only place that we call this function is from the
+ tui_layout_split::set_height function, in a part of the code we will
+ only reach for vertical layouts, so the new code is not actually being
+ used, but, this small change will help make later patches smaller, so
+ I'm proposing this as a stand alone change.
+
+ There should be no user visible changes after this commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: rename tui_layout_base::adjust_size to ::set_height
+ Rename tui_layout_base::adjust_size to tui_layout_base::set_height,
+ the new name more accurately reflects what this member function does,
+ and makes it easier for a later commit to add a new
+ tui_layout_base::set_width member function.
+
+ There should be no user visible changes after this commit.
+
+2022-04-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: move some commands into the tui namespace
+ There are a lot of tui related commands that live in the top-level
+ command name space, e.g. layout, focus, refresh, winheight.
+
+ Having them at the top level means less typing for the user, which is
+ good, but, I think, makes command discovery harder.
+
+ In this commit, I propose moving all of the above mentioned commands
+ into the tui namespace, so 'layout' becomes 'tui layout', etc. But I
+ will then add aliases so that the old commands will still work,
+ e.g. I'll make 'layout' an alias for 'tui layout'.
+
+ The benefit I see in this work is that tui related commands can be
+ more easily discovered by typing 'tui ' and then tab-completing. Also
+ the "official" command is now a tui-sub-command, this is visible in,
+ for example, the help output, e.g.:
+
+ (gdb) help layout
+ tui layout, layout
+ Change the layout of windows.
+ Usage: tui layout prev | next | LAYOUT-NAME
+
+ List of tui layout subcommands:
+
+ tui layout asm -- Apply the "asm" layout.
+ tui layout next -- Apply the next TUI layout.
+ tui layout prev -- Apply the previous TUI layout.
+ tui layout regs -- Apply the TUI register layout.
+ tui layout split -- Apply the "split" layout.
+ tui layout src -- Apply the "src" layout.
+
+ Which I think is a good thing, it makes it clearer that this is a tui
+ command.
+
+ I've added a NEWS entry and updated the docs to mention the new and
+ old command names, with the new name being mentioned first.
+
+2022-04-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix gdb_print -> gdb_printf typo
+ This caused a build failure with !CXX_STD_THREAD.
+
+ Change-Id: I30f0c89c43a76f85c0db34809192644fa64a9d18
+
+2022-04-03 Alan Modra <amodra@gmail.com>
+
+ Move microblaze relax info to target specific data
+ Target specific data shouldn't be put in struct bfd_section.
+
+ * section.c (struct bfd_section): Delete relax and relax_count.
+ (BFD_FAKE_SECTION): Adjust to suit.
+ (struct relax_table): Move to..
+ * elf32-microblaze.c (struct relax_table): ..here.
+ (struct _microblaze_elf_section_data): New.
+ (microblaze_elf_section_data): Define.
+ (microblaze_elf_new_section_hook): New function.
+ (bfd_elf32_new_section_hook): Define.
+ (calc_fixup): Return a size_t. Adjust to suit new location of
+ relax and relax_count.
+ (microblaze_elf_relax_section): Adjust to suit new location of
+ relax and relax_count. Make some variables size_t.
+ * bfd-in2.h: Regenerate.
+
+2022-04-03 Alan Modra <amodra@gmail.com>
+
+ Revert commit 240d6706c6a2
+ PR 28592
+ PR 15994
+ PR 15935
+ * dwarf2.c (lookup_address_in_line_info_table): Return bool rather
+ than a range.
+ (comp_unit_find_nearest_line): Likewise. Return true if function
+ info found without line info.
+ (_bfd_dwarf2_find_nearest_line): Revert range handling code.
+
+ Regen bfd po/SRC-POTFILES.in
+
+2022-04-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-02 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: rename floatformats_ia64_quad to floatformats_ieee_quad
+ It is better to rename floatformats_ia64_quad to floatformats_ieee_quad
+ to reflect the reality, and then we can clean up the related code.
+
+ As Tom Tromey said [1]:
+
+ These files are maintained in gcc and then imported into the
+ binutils-gdb repository, so any changes to them will have to
+ be proposed there first.
+
+ the related changes have been merged into gcc master now [2], it is time
+ to do it for gdb.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186569.html
+ [2] https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=b2dff6b2d9d6
+
+2022-04-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ Remove unused variable.
+
+2022-04-01 Aaron Merey <amerey@redhat.com>
+
+ gdb/debuginfod-support.c: Always display debuginfod errors
+ Errors encountered when downloading files from debuginfod servers
+ are not displayed if debuginfod verbosity is set to 0 (via
+ 'set debuginfod verbose 0').
+
+ Tom recommended that these errors always be displayed, regardless
+ of the verbosity setting [1]. Fix this.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186350.html
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ Use I386_GSBASE_REGNUM in i386fbsd_get_thread_local_address.
+ 32-bit x86 arches always the I386_*BASE_REGNUM values. Only code that
+ needs to support both 64-bit and 32-bit arches needs to use
+ tdep->fsbase_regnum to compute a segment base register number.
+
+ FreeBSD/x86: Read segment base registers from NT_X86_SEGBASES.
+ FreeBSD kernels recently grew a new register core dump note containing
+ the base addresses of the %fs and %gs segments (corresponding to the
+ %fsbase and %gsbase registers). Parse this note to permit inspecting
+ TLS variables in core dumps. Native processes already supported TLS
+ via older ptrace() operations.
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ Use pseudosections for NT_FREEBSD_X86_SEGBASES core dump notes.
+ This includes adding pseudosections when reading a core dump as well
+ as support for writing out a core dump note from a pseudosection.
+
+ bfd/ChangeLog:
+
+ * elf-bfd.h (elfcore_write_x86_segbases): New.
+ * elf.c (elfcore_grok_freebsd_note): Add pseudosections for
+ NT_FREEBSD_X86_SEGBASES register notes.
+ (elfcore_write_x86_segbases): New.
+ (elfcore_write_register_note): Write NT_FREEBSD_X86_SEGBASES
+ register notes.
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ Recognize FreeBSD core dump note for x86 segment base registers.
+ This core dump note contains the value of the base address of the %fs
+ and %gs segments for both i386 and amd64 core dumps. It is primarily
+ useful in resolving the address of TLS variables in core dumps.
+
+ binutils/ChangeLog:
+
+ * readelf.c (get_freebsd_elfcore_note_type): Handle
+ NT_FREEBSD_X86_SEGBASES.
+
+ include/ChangeLog:
+
+ * elf/common.h (NT_FREEBSD_X86_SEGBASES): Define.
+
+2022-04-01 John Baldwin <jhb@FreeBSD.org>
+
+ elfcore_grok_freebsd_note: Remove checks of note->namesz.
+ This function is only called if the note name is "FreeBSD", so
+ checking the name size is unnecessary.
+
+ bfd/ChangeLog:
+
+ * elf.c (elfcore_grok_freebsd_note): Remove checks for namesz.
+
+2022-04-01 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testing/tui: add new _csi_{L,S,T}
+ This patch was original part of this series:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-March/186429.html
+ https://sourceware.org/pipermail/gdb-patches/2022-March/186433.html
+
+ I've pulled this out as it might be useful ahead of the bigger series
+ being merged.
+
+ This commit adds:
+
+ _csi_L - insert line
+ _csi_S - pan down
+ _csi_T - pan up
+
+2022-04-01 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Remove bfd_arch_l1om and bfd_arch_k1om
+ Remove bfd_arch_l1om and bfd_arch_k1om since L1OM/K1OM support has been
+ removed from gas, ld and opcodes.
+
+ bfd/
+
+ * Makefile.am (ALL_MACHINES): Remove cpu-l1om.lo and cpu-k1om.lo.
+ (ALL_MACHINES_CFILES): Remove cpu-l1om.c and cpu-k1om.c.
+ * archures.c (bfd_mach_l1om): Removed.
+ (bfd_mach_l1om_intel_syntax): Likewise.
+ (bfd_mach_k1om): Likewise.
+ (bfd_mach_k1om_intel_syntax): Likewise.
+ (bfd_k1om_arch): Likewise.
+ (bfd_l1om_arch): Likewise.
+ (bfd_archures_list): Remove bfd_k1om_arch and bfd_l1om_arch
+ references.
+ * config.bfd (targ_selvecs): Remove l1om_elf64_vec.
+ l1om_elf64_fbsd_vec, k1om_elf64_vec and k1om_elf64_fbsd_vec.
+ (targ_archs): Remove bfd_l1om_arch and bfd_k1om_arch.
+ * configure.ac (k1om_elf64_vec): Removed.
+ (k1om_elf64_fbsd_vec): Likewise.
+ (l1om_elf64_vec): Likewise.
+ (l1om_elf64_fbsd_vec): Likewise.
+ * cpu-k1om.c: Removed.
+ * cpu-l1om.c: Likewise.
+ * elf64-x86-64.c (elf64_l1om_elf_object_p): Removed.
+ (elf64_k1om_elf_object_p): Likewise.
+ (l1om_elf64_vec): Removed.
+ (l1om_elf64_fbsd_vec): Likewise.
+ (k1om_elf64_vec): Likewise.
+ (k1om_elf64_fbsd_vec): Likewise.
+ (ELF_TARGET_OS): Undefine.
+ * targets.c (_bfd_target_vector): Remove k1om_elf64_vec,
+ k1om_elf64_fbsd_vec, l1om_elf64_vec and l1om_elf64_fbsd_vec.
+ * Makefile.in: Regenerate.
+ * bfd-in2.h: Likewise.
+ * configure: Likewise.
+
+ opcodes/
+
+ * configure.ac: Remove bfd_arch_l1om/bfd_arch_k1om references.
+ * disassemble.c (disassembler): Likewise.
+ * configure: Regenerate.
+
+2022-04-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/ctf: pass partial symtab's filename to buildsym_compunit
+ I noticed that the CTF symbol reader passes the objfile's name to all
+ buildsym_compunit instances it creates. The result is that all
+ compunit_symtabs created have the same name, that of the objfile:
+
+ { objfile /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct objfile *) 0x613000005d00)
+ { ((struct compunit_symtab *) 0x621000286760)
+ debugformat ctf
+ producer (null)
+ name libbabeltrace2.so.0.0.0
+ dirname (null)
+ blockvector ((struct blockvector *) 0x6210003911d0)
+ user ((struct compunit_symtab *) (null))
+ { symtab /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct symtab *) 0x6210003911f0)
+ fullname (null)
+ linetable ((struct linetable *) 0x0)
+ }
+ }
+ { ((struct compunit_symtab *) 0x621000275c10)
+ debugformat ctf
+ producer (null)
+ name libbabeltrace2.so.0.0.0
+ dirname (null)
+ blockvector ((struct blockvector *) 0x621000286710)
+ user ((struct compunit_symtab *) (null))
+ { symtab /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct symtab *) 0x621000286730)
+ fullname (null)
+ linetable ((struct linetable *) 0x0)
+ }
+ }
+
+ Notice the two "name libbabeltrace2.so.0.0.0".
+
+ Change it to pass the partial_symtab's filename instead. The output
+ becomes:
+
+ { objfile /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct objfile *) 0x613000005d00)
+ { ((struct compunit_symtab *) 0x621000295610)
+ debugformat ctf
+ producer (null)
+ name libbabeltrace2.so.0.0.0
+ dirname (null)
+ blockvector ((struct blockvector *) 0x6210003a15d0)
+ user ((struct compunit_symtab *) (null))
+ { symtab /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0 ((struct symtab *) 0x6210003a15f0)
+ fullname (null)
+ linetable ((struct linetable *) 0x0)
+ }
+ }
+ { ((struct compunit_symtab *) 0x621000288700)
+ debugformat ctf
+ producer (null)
+ name current-thread.c
+ dirname (null)
+ blockvector ((struct blockvector *) 0x6210002955c0)
+ user ((struct compunit_symtab *) (null))
+ { symtab /home/simark/src/babeltrace/src/lib/current-thread.c ((struct symtab *) 0x6210002955e0)
+ fullname (null)
+ linetable ((struct linetable *) 0x0)
+ }
+ }
+
+ Note that the first compunit_symtab still has libbabeltrace2.so.0.0.0 as
+ its name. This is because the CTF symbol reader really creates a
+ partial symtab named like this. It appears to be because the debug info
+ contains information that has been factored out of all CUs and is at the
+ "top-level" of the objfile, outside any real CU. So it creates a
+ partial symtab and an artificial CU that's named after the objfile.
+
+ Change-Id: I576316bab2a3668adf87b4e6cebda900a8159b1b
+
+2022-04-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: print compunit_symtab name in "maint info symtabs"
+ I think it would make sense to print a compunit_symtab's name in "maint
+ info symtabs". If you are looking for a given CU in the list, that's
+ probably the field you will be looking at. As the doc of
+ compunit_symtab::name says, it is not meant to be a reliable file name,
+ it is for debugging purposes (and "maint info symtabs" exists for
+ debugging purposes).
+
+ Sample output with the new field:
+
+ (gdb) maintenance info symtabs
+ { objfile /home/simark/build/binutils-gdb-one-target/gdb/a.out ((struct objfile *) 0x613000005d00)
+ { ((struct compunit_symtab *) 0x621000131630)
+ debugformat DWARF 5
+ producer GNU C17 11.2.0 -mtune=generic -march=x86-64 -g3 -O0
+ name test.c
+ dirname /home/simark/build/binutils-gdb-one-target/gdb
+ blockvector ((struct blockvector *) 0x621000131d10)
+ user ((struct compunit_symtab *) (null))
+ { symtab test.c ((struct symtab *) 0x6210001316b0)
+ fullname (null)
+ linetable ((struct linetable *) 0x621000131d40)
+ }
+ { symtab /home/simark/build/binutils-gdb-one-target/gdb/test.h ((struct symtab *) 0x6210001316e0)
+ fullname (null)
+ linetable ((struct linetable *) 0x0)
+ }
+ { symtab /usr/include/stdc-predef.h ((struct symtab *) 0x621000131710)
+ fullname (null)
+ linetable ((struct linetable *) 0x0)
+ }
+ }
+ { ((struct compunit_symtab *) 0x6210001170a0)
+ debugformat DWARF 5
+ producer GNU C17 11.2.0 -mtune=generic -march=x86-64 -g3 -O0
+ name foo.c
+ dirname /home/simark/build/binutils-gdb-one-target/gdb
+ blockvector ((struct blockvector *) 0x621000131580)
+ user ((struct compunit_symtab *) (null))
+ { symtab foo.c ((struct symtab *) 0x621000117120)
+ fullname (null)
+ linetable ((struct linetable *) 0x6210001315b0)
+ }
+ { symtab /usr/include/stdc-predef.h ((struct symtab *) 0x621000117150)
+ fullname (null)
+ linetable ((struct linetable *) 0x0)
+ }
+ }
+ }
+
+ Change-Id: I17b87adfac2f6551cb5bda30d59f6c6882789211
+
+2022-04-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/ctf: don't create a buildsym_compunit when building partial symbols
+ I am trying to do some changes to buildsym_compunit, so I am auditing
+ the current uses. Something seems odd with this use of
+ buildsym_compunit (that this patch removes).
+
+ A buildsym_compunit is normally used when building a compunit_symtab.
+ That is, when expanding a partial symtab into a full compunit symtab.
+ In ctfread.c, a buildsym_compunit is created in ctf_start_archive, which
+ is only used when creating partial symtabs. At this moment, I don't
+ see how that's useful. ctf_start_archive creates a new
+ buildsym_compunit and starts a subfile. But that buildsym_compunit is
+ never used again. It's just overriden in ctf_start_symtab, which means
+ we leak the old buildsym_compunit, I suppose.
+
+ Remove ctf_start_archive completely. Add an assert in
+ ctf_start_symtab to verify that we are not overwriting an existing
+ buildsym_compunit (meaning we'd leak the existing one). This assert
+ triggers without the other part of the fix. When doing:
+
+ $ ./gdb --data-directory=data-directory /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0
+ ...
+ (gdb) maintenance expand-symtabs
+ /home/simark/src/binutils-gdb/gdb/ctfread.c:1255: internal-error: ctf_start_symtab: Assertion `!ccp->builder' failed.
+
+ Change-Id: I666d146454a019f08e7305f3a1c4a974d27b4592
+
+2022-04-01 Tom Tromey <tom@tromey.com>
+
+ Style URLs in GDB output
+ I noticed that GDB will display URLs in a few spots. This changes
+ them to be styled. Originally I thought I'd introduce a new "url"
+ style, but there aren't many places to use this, so I just reused
+ filename styling instead. This patch also changes the debuginfod URL
+ list to be printed one URL per line. I think this is probably a bit
+ easier to read.
+
+2022-04-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-31 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: initialize ctf_context::builder in create_partial_symtab
+ I built a random project with -gctf, in order to test the CTF support in
+ GDB. With my ASan/UBSan/etc-enabled build of GDB, I get:
+
+ $ ./gdb --data-directory=data-directory /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0
+ ...
+ Reading symbols from /tmp/babeltrace-ctf/src/lib/.libs/libbabeltrace2.so.0.0.0...
+ /home/simark/src/binutils-gdb/gdb/ctfread.c:1545:31: runtime error: member call on misaligned address 0xbebebebebebebebe for type 'struct buildsym_compunit', which requires 8 byte alignment
+ 0xbebebebebebebebe: note: pointer points here
+
+ The 0xbebebebebebebebe value is a sign that the ctf_context::builder
+ field is uninitialized. The problem probably goes under the radar if
+ the field happens to be zero-initialized, because ctf_start_archive
+ contains this code:
+
+ if (ccx->builder == nullptr)
+ {
+ ccx->builder = new buildsym_compunit (of,
+ of->original_name, nullptr, language_c, 0);
+
+ If the field was zero-initialized (by chance), this will create a new
+ buildsym_compunit. But if the field was purposely filled with random
+ bytes by one of the sanitizers, we won't create a buildsym_compunit here
+ and we'll continue with ccx->builder equal to 0xbebebebebebebebe.
+
+ Fix this the easy way by initializing ccx->builder where the other
+ ctf_context fields are initialized (yeah, this code could be made nicer
+ C++, but I am going for the obvious fix here).
+
+ With this patch, this passes cleanly on my system:
+
+ $ make check TESTS="gdb.ctf/*.exp" RUNTESTFLAGS="CC_FOR_TARGET=/opt/gcc/git/bin/gcc"
+ # of expected passes 40
+
+ ... where /opt/gcc/git/bin/gcc is a gcc with CTF support, given my
+ system gcc does not have it.
+
+ Change-Id: Idea1b0cf3e3708b72ecb16b1b60222439160f9b9
+
+2022-03-31 Tom Tromey <tromey@adacore.com>
+
+ Remove dbx mode
+ This patch removes gdb's dbx mode. Regression tested on x86-64 Fedora
+ 34.
+
+2022-03-31 H.J. Lu <hjl.tools@gmail.com>
+
+ gdb: Consolidate 32bit-pkeys.xml and 64bit-pkeys.xml
+ 1. Since 32bit-pkeys.xml and 64bit-pkeys.xml are identical, consolidate
+ them into a single keys.xml.
+ 2. Enable PKU for x32 to fix:
+
+ $ gdbserver :123456 x32-program
+ ...
+ .../gdbserver/regcache.cc:255: A problem internal to GDBserver has been detected
+ .
+ Unknown register pkru requested
+
+ on Tiger Lake.
+
+2022-03-31 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/linux-nat: remove check based on current_inferior in linux_handle_extended_wait
+ The check removed by this patch, using current_inferior, looks wrong.
+ When debugging multiple inferiors with the Linux native target and
+ linux_handle_extended_wait is called, there's no guarantee about which
+ is the current inferior. The vfork-done event we receive could be for
+ any inferior. If the vfork-done event is for a non-current inferior, we
+ end up wrongfully ignoring it. As a result, the core never processes a
+ TARGET_WAITKIND_VFORK_DONE event, program_space::breakpoints_not_allowed
+ is never cleared, and breakpoints are never reinserted. However,
+ because the Linux native target decided to ignore the event, it resumed
+ the thread - while breakpoints out. And that's bad.
+
+ The proposed fix is to remove this check. Always report vfork-done
+ events and let infrun's logic decide if it should be ignored. We don't
+ save much cycles by filtering the event here.
+
+ Add a test that replicates the situation described above. See comments
+ in the test for more details.
+
+ Change-Id: Ibe33c1716c3602e847be6c2093120696f2286fbf
+
+2022-03-31 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver/linux: set lwp !stopped when failing to resume
+ I see some failures, at least in gdb.multi/multi-re-run.exp and
+ gdb.threads/interrupted-hand-call.exp. Running `stress -C $(nproc)` at
+ the same time as the test makes those tests relatively frequent.
+
+ Let's take gdb.multi/multi-re-run.exp as an example. The failure looks
+ like this, an unexpected "no resumed":
+
+ continue
+ Continuing.
+ No unwaited-for children left.
+ (gdb) FAIL: gdb.multi/multi-re-run.exp: re_run_inf=2: iter=1: continue until exit
+
+ The situation is:
+
+ - Inferior 1 is stopped somewhere, it won't really play a role here.
+ - Inferior 2 has 2 threads, both stopped.
+ - We resume inferior 2, the leader thread is expected to exit, making
+ the process exit.
+
+ From GDB's perspective, a failing run looks like this:
+
+ [infrun] fetch_inferior_event: enter
+ [infrun] scoped_disable_commit_resumed: reason=handling event
+ [infrun] do_target_wait: Found 2 inferiors, starting at #1
+ [infrun] random_pending_event_thread: None found.
+ [remote] wait: enter
+ [remote] Packet received: T0506:20dcffffff7f0000;07:20dcffffff7f0000;10:9551555555550000;thread:pae4cd.ae4cd;core:e;
+ [remote] wait: exit
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: 713933.713933.0 [Thread 713933.713933],
+ [infrun] print_target_wait_results: status->kind = STOPPED, sig = GDB_SIGNAL_TRAP
+ [infrun] handle_inferior_event: status->kind = STOPPED, sig = GDB_SIGNAL_TRAP
+ [infrun] clear_step_over_info: clearing step over info
+ [infrun] context_switch: Switching context from 0.0.0 to 713933.713933.0
+ [infrun] handle_signal_stop: stop_pc=0x555555555195
+ [infrun] start_step_over: enter
+ [infrun] start_step_over: stealing global queue of threads to step, length = 0
+ [infrun] operator(): step-over queue now empty
+ [infrun] start_step_over: exit
+ [infrun] process_event_stop_test: no stepping, continue
+ [remote] Sending packet: $Z0,555555555194,1#8e
+ [remote] Packet received: OK
+ [infrun] resume_1: step=0, signal=GDB_SIGNAL_0, trap_expected=0, current thread [713933.713933.0] at 0x555555555195
+ [remote] Sending packet: $QPassSignals:e;10;14;17;1a;1b;1c;21;24;25;2c;4c;97;#0a
+ [remote] Packet received: OK
+ [remote] Sending packet: $vCont;c:pae4cd.-1#9f
+ [infrun] prepare_to_wait: prepare_to_wait
+ [infrun] reset: reason=handling event
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target extended-remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote
+ [infrun] fetch_inferior_event: exit
+ [infrun] fetch_inferior_event: enter
+ [infrun] scoped_disable_commit_resumed: reason=handling event
+ [infrun] do_target_wait: Found 2 inferiors, starting at #0
+ [infrun] random_pending_event_thread: None found.
+ [remote] wait: enter
+ [remote] Packet received: N
+ [remote] wait: exit
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: -1.0.0 [process -1],
+ [infrun] print_target_wait_results: status->kind = NO_RESUMED
+ [infrun] handle_inferior_event: status->kind = NO_RESUMED
+ [remote] Sending packet: $Hgp0.0#ad
+ [remote] Packet received: OK
+ [remote] Sending packet: $qXfer:threads:read::0,1000#92
+ [remote] Packet received: l<threads>\n<thread id="pae4cb.ae4cb" core="3" name="multi-re-run-1" handle="40c7c6f7ff7f0000"/>\n<thread id="pae4cb.ae4cc" core="2" name="multi-re-run-1" handle="40b6c6f7ff7f0000"/>\n<thread id="pae4cd.ae4ce" core="1" name="multi-re-run-2" handle="40b6c6f7ff7f0000"/>\n</threads>\n
+ [infrun] stop_waiting: stop_waiting
+ [remote] Sending packet: $qXfer:threads:read::0,1000#92
+ [remote] Packet received: l<threads>\n<thread id="pae4cb.ae4cb" core="3" name="multi-re-run-1" handle="40c7c6f7ff7f0000"/>\n<thread id="pae4cb.ae4cc" core="2" name="multi-re-run-1" handle="40b6c6f7ff7f0000"/>\n<thread id="pae4cd.ae4ce" core="1" name="multi-re-run-2" handle="40b6c6f7ff7f0000"/>\n</threads>\n
+ [infrun] infrun_async: enable=0
+ [infrun] reset: reason=handling event
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target extended-remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target extended-remote
+ [infrun] fetch_inferior_event: exit
+
+ We can see that we resume the inferior with vCont;c, but got NO_RESUMED.
+ When the test passes, we get an EXITED status to indicate the process
+ has exited.
+
+ From GDBserver's point of view, it looks like this. The logs contain
+ some logging I added and that are part of this patch.
+
+ [remote] getpkt: getpkt ("vCont;c:pae4cf.-1"); [no ack sent]
+ [threads] resume: enter
+ [threads] thread_needs_step_over: Need step over [LWP 713931]? Ignoring, should remain stopped
+ [threads] thread_needs_step_over: Need step over [LWP 713932]? Ignoring, should remain stopped
+ [threads] get_pc: pc is 0x555555555195
+ [threads] thread_needs_step_over: Need step over [LWP 713935]? No, no breakpoint found at 0x555555555195
+ [threads] get_pc: pc is 0x7ffff7d35a95
+ [threads] thread_needs_step_over: Need step over [LWP 713936]? No, no breakpoint found at 0x7ffff7d35a95
+ [threads] resume: Resuming, no pending status or step over needed
+ [threads] resume_one_thread: resuming LWP 713935
+ [threads] proceed_one_lwp: lwp 713935
+ [threads] resume_one_lwp_throw: continue from pc 0x555555555195
+ [threads] resume_one_lwp_throw: Resuming lwp 713935 (continue, signal 0, stop not expected)
+ [threads] resume_one_lwp_throw: NOW ptid=713935.713935.0 stopped=0 resumed=0
+ [threads] resume_one_thread: resuming LWP 713936
+ [threads] proceed_one_lwp: lwp 713936
+ [threads] resume_one_lwp_throw: continue from pc 0x7ffff7d35a95
+ [threads] resume_one_lwp_throw: Resuming lwp 713936 (continue, signal 0, stop not expected)
+ [threads] resume_one_lwp_throw: ptrace errno = 3 (No such process)
+ [threads] resume: exit
+ [threads] wait_1: enter
+ [threads] wait_1: [<all threads>]
+ [threads] wait_for_event_filtered: waitpid(-1, ...) returned 0, ERRNO-OK
+ [threads] resume_stopped_resumed_lwps: resuming stopped-resumed LWP LWP 713935.713936 at 7ffff7d35a95: step=0
+ [threads] resume_one_lwp_throw: continue from pc 0x7ffff7d35a95
+ [threads] resume_one_lwp_throw: Resuming lwp 713936 (continue, signal 0, stop not expected)
+ [threads] resume_one_lwp_throw: ptrace errno = 3 (No such process)
+ [threads] operator(): check_zombie_leaders: leader_pid=713931, leader_lp!=NULL=1, num_lwps=2, zombie=0
+ [threads] operator(): check_zombie_leaders: leader_pid=713935, leader_lp!=NULL=1, num_lwps=2, zombie=1
+ [threads] operator(): Thread group leader 713935 zombie (it exited, or another thread execd).
+ [threads] delete_lwp: deleting 713935
+ [threads] wait_for_event_filtered: exit (no unwaited-for LWP)
+ sigchld_handler
+ [threads] wait_1: ret = null_ptid, TARGET_WAITKIND_NO_RESUMED
+ [threads] wait_1: exit
+
+ What happens is:
+
+ - We resume the leader (713935) successfully.
+ - The leader exits.
+ - We resume the secondary thread (713936), we get ESRCH. This is
+ expected this the leader has exited.
+ - resume_one_lwp_throw throws, it's caught by resume_one_lwp.
+ - resume_one_lwp checks with check_ptrace_stopped_lwp_gone that the
+ failure can be explained by the LWP becoming zombie, and swallows the
+ error.
+ - Note that this means that the secondary lwp still has stopped==1.
+ - wait_1 is called, probably because linux_process_target::resume marks
+ the async pipe at the end.
+ - The exit event isn't ready yet, probably because the machine is under
+ load, so waitpid returns nothing.
+ - check_zombie_leaders detects that the leader is zombie and deletes
+ - We try to find a resumed (non-stopped) LWP to get an event from,
+ there's none since the leader (that was resumed) is now deleted, and
+ the secondary thread is still marked stopped.
+ wait_for_event_filtered returns -1, causing wait_1 to return
+ NO_RESUMED.
+
+ What I notice here is that there is some kind of race between the
+ availability of the process' exit notification and the call to wait_1
+ that results from marking the async pipe at the end of resume.
+
+ I think what we want from this wait_1 invocation is to keep waiting, as
+ we will eventually get thread exit notifications for both of our
+ threads.
+
+ The fix I came up with is to mark the secondary thread as !stopped (or
+ resumed) when we fail to resume it. This makes wait_1 see that there is
+ at least one resume lwp, so it won't return NO_RESUMED. I think this
+ makes sense to consider it resumed, because we are going to receive an
+ exit event for it. Here's the GDBserver logs with the fix applied:
+
+ [threads] resume: enter
+ [threads] thread_needs_step_over: Need step over [LWP 724595]? Ignoring, should remain stopped
+ [threads] thread_needs_step_over: Need step over [LWP 724596]? Ignoring, should remain stopped
+ [threads] get_pc: pc is 0x555555555195
+ [threads] thread_needs_step_over: Need step over [LWP 724597]? No, no breakpoint found at 0x555555555195
+ [threads] get_pc: pc is 0x7ffff7d35a95
+ [threads] thread_needs_step_over: Need step over [LWP 724598]? No, no breakpoint found at 0x7ffff7d35a95
+ [threads] resume: Resuming, no pending status or step over needed
+ [threads] resume_one_thread: resuming LWP 724597
+ [threads] proceed_one_lwp: lwp 724597
+ [threads] resume_one_lwp_throw: continue from pc 0x555555555195
+ [threads] resume_one_lwp_throw: Resuming lwp 724597 (continue, signal 0, stop not expected)
+ [threads] resume_one_lwp_throw: NOW ptid=724597.724597.0 stopped=0 resumed=0
+ [threads] resume_one_thread: resuming LWP 724598
+ [threads] proceed_one_lwp: lwp 724598
+ [threads] resume_one_lwp_throw: continue from pc 0x7ffff7d35a95
+ [threads] resume_one_lwp_throw: Resuming lwp 724598 (continue, signal 0, stop not expected)
+ [threads] resume_one_lwp_throw: ptrace errno = 3 (No such process)
+ [threads] resume: exit
+ [threads] wait_1: enter
+ [threads] wait_1: [<all threads>]
+ sigchld_handler
+ [threads] wait_for_event_filtered: waitpid(-1, ...) returned 0, ERRNO-OK
+ [threads] operator(): check_zombie_leaders: leader_pid=724595, leader_lp!=NULL=1, num_lwps=2, zombie=0
+ [threads] operator(): check_zombie_leaders: leader_pid=724597, leader_lp!=NULL=1, num_lwps=2, zombie=1
+ [threads] operator(): Thread group leader 724597 zombie (it exited, or another thread execd).
+ [threads] delete_lwp: deleting 724597
+ [threads] wait_for_event_filtered: sigsuspend'ing
+ sigchld_handler
+ [threads] wait_for_event_filtered: waitpid(-1, ...) returned 724598, ERRNO-OK
+ [threads] wait_for_event_filtered: waitpid 724598 received 0 (exited)
+ [threads] filter_event: 724598 exited
+ [threads] wait_for_event_filtered: waitpid(-1, ...) returned 724597, ERRNO-OK
+ [threads] wait_for_event_filtered: waitpid 724597 received 0 (exited)
+ [threads] wait_for_event_filtered: waitpid(-1, ...) returned 0, ERRNO-OK
+ sigchld_handler
+ [threads] wait_1: ret = LWP 724597.724598, exited with retcode 0
+ [threads] wait_1: exit
+
+ Change-Id: Idf0bdb4cb0313f1b49e4864071650cc83fb3c100
+
+2022-03-31 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite/tui: implement _csi_P proc
+ Since commit 3cd522938792 ("Change the pager to a ui_file"), I see these
+ errors when running gdb.tui/scroll.exp:
+
+ ERROR: invalid command name "_csi_P"
+ while executing
+ "::gdb_tcl_unknown _csi_P 2"
+ ("uplevel" body line 1)
+ invoked from within
+ "uplevel 1 ::gdb_tcl_unknown $args"
+ (procedure "::unknown" line 5)
+ invoked from within
+ "_csi_P 2"
+ ("eval" body line 1)
+ invoked from within
+ "eval _csi_$cmd $params"
+
+ It looks like GDB is emitting a CSI that it did not emit before, the
+ "Delete character" one:
+
+ https://vt100.net/docs/vt510-rm/DCH.html
+
+ Implement it.
+
+ Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
+ Change-Id: I5bf86b6104d51b0623a26a69df83d1ca9a4851b7
+
+2022-03-31 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix use of fprintf_filtered in top.c
+ A race condition in how patches were pushed causes this build failure:
+
+ CXX top.o
+ /home/simark/src/binutils-gdb/gdb/top.c: In function ‘void print_gdb_configuration(ui_file*)’:
+ /home/simark/src/binutils-gdb/gdb/top.c:1622:3: error: ‘fprintf_filtered’ was not declared in this scope; did you mean ‘printf_unfiltered’?
+ 1622 | fprintf_filtered (stream, _("\
+ | ^~~~~~~~~~~~~~~~
+
+ fprintf_filtered has been removed, gdb_printf must be used now. Fix
+ this.
+
+ Change-Id: I6a172ba0d53dab2e7cc43ed0ed2696c82925245b
+
+2022-03-31 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Relax check for RNG system registers
+ FEAT_RNG is an optional Armv8.5-A extension, but it can be backported
+ to earlier architectures as well. GAS previously made the RNG registers
+ conditional on having both armv8.5-a and +rng, but only +rng should be
+ required.
+
+ This seems to be the only feature that was handled like this.
+
+ opcodes/
+ * aarch64-opc.c (SR_RNG): Don't require V8_5.
+
+ gas/
+ * testsuite/gas/aarch64/rng-1.s, testsuite/gas/aarch64/rng-1.d: New
+ test.
+
+2022-03-31 Eli Zaretskii <eliz@gnu.org>
+
+ * gdb/top.c (print_gdb_configuration): Announce --enable-threading.
+ This includes the reporting of --enable/disable-threading as part of
+ the GDB configuration description.
+
+2022-03-31 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/infrun: add reason parameter to stop_all_threads
+ Add a "reason" parameter, only used to show in debug messages what is
+ the reason for stopping all threads. This helped me understand the
+ debug logs while adding some new uses of stop_all_threads, so I am
+ proposing to merge it.
+
+ Change-Id: I66c8c335ebf41836a7bc3d5fe1db92c195f65e55
+
+2022-03-31 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: update copyright years in gdb.base/vfork-follow-parent.*
+ I forgot to do this before pushing the previous commit.
+
+ Change-Id: Ia343f702e8357d0fd109e9ddd778973e91862805
+
+2022-03-31 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: test vfork + follow-fork-mode=parent + detach-on-fork=off
+ The particular behavior we have when using that combination of settings
+ doesn't seem tested at all (at least, I don't find it if I grep for "Can
+ not resume the parent process"). Add a simple test for that.
+
+ Change-Id: Ib9454a615abba661b42f1b15056df73ed1bcd4c5
+
+2022-03-31 Nick Clifton <nickc@redhat.com>
+
+ Accept the + character as part of filenames for MRI scripts.
+
+2022-03-31 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ Fix procfs.c compilation
+ procfs.c doesn't compile on Solaris:
+
+ /vol/src/gnu/gdb/hg/master/local/gdb/procfs.c: In member function ‘virtual bool procfs_target::info_proc(const char*, info_proc_what)’:
+ /vol/src/gnu/gdb/hg/master/local/gdb/procfs.c:3302:3: error: ‘gdb_argv’ was not declared in this scope
+ 3302 | gdb_argv built_argv (args);
+ | ^~~~~~~~
+ /vol/src/gnu/gdb/hg/master/local/gdb/procfs.c:3303:20: error: ‘built_argv’ was not declared in this scope; did you mean ‘buildargv’?
+ 3303 | for (char *arg : built_argv)
+ | ^~~~~~~~~~
+ | buildargv
+
+ Fixed by including "gdbsupport/buildargv.h".
+
+ Tested on amd64-pc-solaris2.11, sparcv9-sun-solaris2.11.
+
+2022-03-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: add tests for Term
+ While trying to review Andrew's patch here [1], I thought I spotted a
+ bug in the handling of a CSI, but I had no way to know for sure. So I
+ thought it would be useful to have unit tests for the handling of
+ control characters and control sequences of our toy terminal
+ implementation. It might help avoid chasing bugs in the GDB TUI when in
+ reality it's a problem with the testsuite's terminal implementation.
+
+ Add the gdb.tui/tuiterm.exp file to do that. All currently supported
+ control sequences and characters are tested, except _csi_m (the one that
+ handles colors and stuff). _csi_m should probably be tested too, but it
+ will require more work.
+
+ Fix a few issues that the tests spotted:
+
+ - backspace: according to [3] (table 4-1), a backspace when the cursor
+ is at the beginning of a line should have no effect. Our
+ implementation did wrap to the end of the previous line. Change our
+ implementation to match the doc (and the test).
+ - insert character: this control sequence is supposed to insert blank
+ characters, shifting all the rest of the line right. The current
+ implementation moves N characters right, but it overwrites the
+ characters on the right instead of shifting them. It also doesn't
+ insert blank characters at the cursor.
+ - Cursor down, forward, next line: off-by-one error when reaching the
+ end of the display.
+ - erase in display, line: off-by-one errors.
+ - vertical line position absolute: allowed setting the cursor outside
+ the display, when it should clamp it to the display size.
+
+ I found that this web page [2] gave some good clues on the expected
+ behavior of some control characters or sequences that some other pages
+ didn't.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186433.html
+ [2] https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
+ [3] https://vt100.net/docs/vt510-rm/chapter4.html#S4.3.3
+
+ Change-Id: Iab4141fdcfb7459d1b7c45cc63bd1fcb50a78d5d
+
+2022-03-30 Tom Tromey <tom@tromey.com>
+
+ Only allow QUIT on the main thread
+ Pedro pointed out that gdb worker threads should not react to quits.
+ While I don't think that the new DWARF reader can call QUIT from a
+ worker thread (and I don't think the existing minsym threading code
+ can either), it seems safest to address this before checking in the
+ new code. This patch arranges for the QUIT macro to only work on the
+ main thread.
+
+2022-03-30 Tom Tromey <tromey@adacore.com>
+
+ Use gdb_printf and gdb_vprintf in more places
+ Luis pointed out that I missed a spot in the gdb_printf conversion --
+ namely aarch64-nat.c. While looking at this, I found another spot in
+ darwin-nat.c that I also missed. I can't build either of these, but I
+ think this patch should fix the problems.
+
+ Consolidate definition of current_directory
+ I noticed that both gdbserver and gdb define current_directory.
+ However, as it is referenced by gdbsupport, it seemed better to define
+ it there as well. This patch also moves the declaration to
+ pathstuff.h. Tested by rebuilding.
+
+2022-03-30 Tom Tromey <tromey@adacore.com>
+
+ Decode "dynamic" interface types in Ada
+ In Ada, if a class implements an interface and has a dynamic
+ superclass, then the "offset to top" -- the offset that says how to
+ turn a pointer to the interface into a pointer to the whole object --
+ is stored in the object itself. This patch changes GDB to understand
+ this.
+
+ Because this only touches Ada code, and because Joel already reviewed
+ it internally, I am checking it in.
+
+2022-03-30 Jeff Law <jeffreyalaw@gmail.com>
+
+ Fix for MUL instruction on the v850
+ * sim/v850/simops.c (Multiply64): Properly test if we need to
+ negate either of the operands.
+
+ * sim/testsuite/v850/mul.cgs: New test.
+
+2022-03-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-29 Tom Tromey <tom@tromey.com>
+
+ Remove two unused hooks
+ I noticed that a couple of deprecated hooks aren't ever called, so
+ they can't really be used by Insight. This patch removes them
+ entirely. I checked the Insight sources, and these aren't mentioned
+ there, either.
+
+2022-03-29 Tom Tromey <tom@tromey.com>
+
+ Remove unnecessary calls to wrap_here and gdb_flush
+ Various spots in gdb currently know about the wrap buffer, and so are
+ careful to call wrap_here to be certain that all output has been
+ flushed.
+
+ Now that the pager is just an ordinary stream, this isn't needed, and
+ a simple call to gdb_flush is enough.
+
+ Similarly, there are places where gdb prints to gdb_stderr, but first
+ flushes gdb_stdout. stderr_file already flushes gdb_stdout, so these
+ aren't needed.
+
+2022-03-29 Tom Tromey <tom@tromey.com>
+
+ Minor comment updates in utils.h
+ This patch updates some comments in utils.h to more closely reflect
+ the new reality.
+
+ Remove vfprintf_styled
+ Nothing calls vfprintf_styled any more, so remove it.
+
+ Remove ui_out_flag::unfiltered_output
+ There is no longer any need for ui_out_flag::unfiltered_output --
+ nothing ever sets this flag. This used to be needed to make the
+ _unfiltered output work, but now only printf_unfiltered can be used,
+ and it uses the puts_unfiltered method. This patch removes the flag
+ and the dead code.
+
+ Rename fprintf_symbol_filtered
+ fprintf_symbol_filtered is misnamed, because whether filtering happens
+ is now up to the stream. This renames it to fprintf_symbol, which
+ isn't a great name (the first "f" doesn't mean much and the second one
+ is truly meaningless here), but "print_symbol" was already taken.
+
+ Rename puts_filtered_tabular
+ puts_filtered_tabular is now misnamed, because whether filtering
+ happens is now up to the stream. So, rename it. (This function is
+ pretty weird, and should probably be rewritten to avoid using the
+ chars_printed global, and moved into objc-lang.c. However, I haven't
+ done so.)
+
+ Rename print_spaces_filtered
+ print_spaces_filtered is now misnamed, because whether filtering
+ happens is up to the stream. So, rename it.
+
+ Unify gdb printf functions
+ Now that filtered and unfiltered output can be treated identically, we
+ can unify the printf family of functions. This is done under the name
+ "gdb_printf". Most of this patch was written by script.
+
+ Unify gdb putc functions
+ Now that filtered and unfiltered output can be treated identically, we
+ can unify the putc family of functions. This is done under the name
+ "gdb_putc". Most of this patch was written by script.
+
+ Unify gdb puts functions
+ Now that filtered and unfiltered output can be treated identically, we
+ can unify the puts family of functions. This is done under the name
+ "gdb_puts". Most of this patch was written by script.
+
+ Unify vprintf functions
+ Now that filtered and unfiltered output can be treated identically, we
+ can unify the vprintf family of functions: vprintf_filtered,
+ vprintf_unfiltered, vfprintf_filtered and vfprintf_unfiltered. (For
+ the gdb_stdout variants, recall that only printf_unfiltered gets truly
+ unfiltered output at this point.) This removes one such function and
+ renames the remaining two to "gdb_vprintf". All callers are updated.
+ Much of this patch was written by script.
+
+ Remove fputs_styled_unfiltered
+ fputs_styled_unfiltered is only called from cli_ui_out, so remove it.
+ This area will be further simplified in future patches.
+
+2022-03-29 Tom Tromey <tom@tromey.com>
+
+ Change the pager to a ui_file
+ This rewrites the output pager as a ui_file implementation.
+
+ A new header is introduced to declare the pager class. The
+ implementation remains in utils.c for the time being, because there
+ are some static globals there that must be used by this code. (This
+ could be cleaned up at some future date.)
+
+ I went through all the text output in gdb to ensure that this change
+ should be ok. There are a few cases:
+
+ * Any existing call to printf_unfiltered is required to be avoid the
+ pager. This is ensured directly in the implementation.
+
+ * All remaining calls to the f*_unfiltered functions -- the ones that
+ take an explicit ui_file -- either send to an unfiltered stream
+ (e.g., gdb_stderr), which is obviously ok; or conditionally send to
+ gdb_stdout
+
+ I investigated all such calls by searching for:
+
+ grep -e '\bf[a-z0-9_]*_unfiltered' *.[chyl] */*.[ch] | grep -v gdb_stdlog | grep -v gdb_stderr
+
+ This yields a number of candidates to check.
+
+ * The breakpoint _print_recreate family, and
+ save_trace_state_variables. These are used for "save" commands
+ and so are fine.
+
+ * Things printing to a temporary stream. Obviously ok.
+
+ * Disassembly selftests.
+
+ * print_gdb_help - this is non-obvious, but ok because paging isn't
+ yet enabled at this point during startup.
+
+ * serial.c - doens't use gdb_stdout
+
+ * The code in compile/. This is all printing to a file.
+
+ * DWARF DIE dumping - doesn't reference gdb_stdout.
+
+ * Calls to the _filtered form -- these are all clearly ok, because if
+ they are using gdb_stdout, then filtering will still apply; and if
+ not, then filtering never applied and still will not.
+
+ Therefore, at this point, there is no longer any distinction between
+ all the other _filtered and _unfiltered calls, and they can be
+ unified.
+
+ In this patch, take special note of the vfprintf_maybe_filtered and
+ ui_file::vprintf change. This is one instance of the above idea,
+ erasing the distinction between filtered and unfiltered -- in this
+ part of the change, the "unfiltered_output" flag is never passe to
+ cli_ui_out. Subsequent patches will go much further in this
+ direction.
+
+ Also note the can_emit_style_escape changes in ui-file.c. Checking
+ against gdb_stdout or gdb_stderr was always a bit of a hack; and now
+ it is no longer needed, because this is decision can be more fully
+ delegated to the particular ui_file implementation.
+
+ ui_file::can_page is removed, because this patch removed the only call
+ to it.
+
+ I think this is the main part of fixing PR cli/7234.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7234
+
+2022-03-29 Tom Tromey <tom@tromey.com>
+
+ Remove vfprintf_styled_no_gdbfmt
+ This removes vfprintf_styled_no_gdbfmt, inlining it at the sole point
+ of call.
+
+ Add style-escape methods to ui_file
+ This adds emit_style_escape and reset_style methods to ui_file. These
+ aren't used yet, but they will be once the pager is converted to be a
+ ui_file subclass.
+
+ Add puts_unfiltered method to ui_file
+ When the pager is rewritten as a ui_file, gdb will still need a way to
+ bypass the filtering. After examining a few approaches, I chose this
+ patch, which adds a puts_unfiltered method to ui_file. For most
+ implementations of ui_file, this will just delegate to puts. This
+ patch also switches printf_unfiltered to use the new method.
+
+ Only have one API for unfiltered output
+ At the end of this series, the use of unfiltered output will be very
+ restricted -- only places that definitely need it will use it. To
+ this end, I thought it would be good to reduce the number of
+ _unfiltered APIs that are exposed. This patch changes gdb so that
+ only printf_unfiltered exists. (After this patch, the f* variants
+ still exist as well, but those will be removed later.)
+
+2022-03-29 Tom Tromey <tom@tromey.com>
+
+ Remove some uses of printf_unfiltered
+ A number of spots call printf_unfiltered only because they are in code
+ that should not be interrupted by the pager. However, I believe these
+ cases are all handled by infrun's blanket ban on paging, and so can be
+ converted to the default (_filtered) API.
+
+ After this patch, I think all the remaining _unfiltered calls are ones
+ that really ought to be. A few -- namely in complete_command -- could
+ be replaced by a scoped assignment to pagination_enabled, but for the
+ remainder, the code seems simple enough like this.
+
+2022-03-29 Tom Tromey <tom@tromey.com>
+
+ Use unfiltered output in annotate.c
+ It seems to me that annotations should not be filtered. While it
+ might be weird for an annotation-based UI to use the pager, it's not,
+ I think, out of the question. This patch makes this change.
+
+2022-03-29 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+ Aleksandar Paunovic <aleksandar.paunovic@intel.com>
+
+ gdb/remote: use current_inferior in read_ptid if multi-process not supported
+ When parsing the ptid out of a reply package, if the multi-process
+ extensions are not supported, use current_inferior's pid as the pid of
+ the reported thread, instead of inferior_ptid. This is needed because
+ the inferior_ptid may be null_ptid although a legit context exists,
+ due to a prior context switch via switch_to_inferior_no_thread.
+
+ Below is a scenario that illustrates what could go wrong. First,
+ setup a multi-target scenario. This is needed, because in a
+ multi-target setting, the inferior_ptid is cleared out before waiting
+ on targets. The second inferior below sits on top of a remote target.
+ Multi-process packets are disabled.
+
+ $ # First, spawn a process with PID 26253 to attach to later.
+ $ gdb-up a.out
+ Reading symbols from a.out...
+ (gdb) maint set target-non-stop on
+ (gdb) set remote multiprocess-feature-packet off
+ (gdb) start
+ ...
+ (gdb) add-inferior -no-connection
+ [New inferior 2]
+ Added inferior 2
+ (gdb) inferior 2
+ [Switching to inferior 2 [<null>] (<noexec>)]
+ (gdb) target extended-remote | gdbserver --multi -
+ Remote debugging using | gdbserver --multi -
+ Remote debugging using stdio
+ (gdb) attach 26253
+ Attaching to Remote target
+ Attached; pid = 26253
+ [New Thread 26253]
+ [New inferior 3]
+ Reading /tmp/a.out from remote target...
+ ...
+ [New Thread 26253]
+ ...
+ Reading /usr/local/lib/debug/....debug from remote target...
+ >>> GDB seems to hang here.
+
+ After attaching to a process and reading some library files, GDB
+ seems to hang. One interesting thing to note is that
+
+ [New Thread 26253]
+
+ appears twice. We also see
+
+ [New inferior 3]
+
+ Running the same scenario with "debug infrun on" reveals more details.
+
+ ...
+ (gdb) attach 26253
+ [infrun] scoped_disable_commit_resumed: reason=attaching
+ Attaching to Remote target
+ Attached; pid = 26253
+ [New Thread 26253]
+ [infrun] infrun_async: enable=1
+ [infrun] attach_command: immediately after attach:
+ [infrun] attach_command: thread 26253.26253.0, executing = 1, resumed = 0, state = RUNNING
+ [infrun] clear_proceed_status_thread: 26253.26253.0
+ [infrun] reset: reason=attaching
+ [infrun] maybe_set_commit_resumed_all_targets: not requesting commit-resumed for target native, no resumed threads
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target extended-remote
+ [infrun] fetch_inferior_event: enter
+ [infrun] scoped_disable_commit_resumed: reason=handling event
+ [infrun] do_target_wait: Found 2 inferiors, starting at #1
+ [infrun] random_pending_event_thread: None found.
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [Thread 0], status) =
+ [infrun] print_target_wait_results: 26253.26253.0 [Thread 26253],
+ [infrun] print_target_wait_results: status->kind = STOPPED, sig = GDB_SIGNAL_0
+ [infrun] handle_inferior_event: status->kind = STOPPED, sig = GDB_SIGNAL_0
+ [infrun] start_step_over: enter
+ [infrun] start_step_over: stealing global queue of threads to step, length = 0
+ [infrun] operator(): step-over queue now empty
+ [infrun] start_step_over: exit
+ [infrun] context_switch: Switching context from 0.0.0 to 26253.26253.0
+ [infrun] handle_signal_stop: stop_pc=0x7f849d8cf151
+ [infrun] stop_waiting: stop_waiting
+ [infrun] stop_all_threads: starting
+ [infrun] stop_all_threads: pass=0, iterations=0
+ [New inferior 3]
+ Reading /tmp/a.out from remote target...
+ warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
+ Reading /tmp/a.out from remote target...
+ Reading symbols from target:/tmp/a.out...
+ [New Thread 26253]
+ [infrun] stop_all_threads: 4723.4723.0 not executing
+ [infrun] stop_all_threads: 26253.26253.0 not executing
+ [infrun] stop_all_threads: 42000.26253.0 executing, need stop
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [Thread 0], status) =
+ [infrun] print_target_wait_results: -1.0.0 [Thread 0],
+ [infrun] print_target_wait_results: status->kind = IGNORE
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [Thread 0], status) =
+ [infrun] print_target_wait_results: -1.0.0 [Thread 0],
+ [infrun] print_target_wait_results: status->kind = IGNORE
+
+ GDB tried to stop Thread 42000.26253.0, which does not exist, and we
+ are waiting for a stop event that will never happen. The PID in
+ '42000.26253.0', namely 42000, is the PID of magic_null_ptid.
+ It comes from gdb/remote.c:read_ptid:
+
+ /* Since the stub is not sending a process id, then default to
+ what's in inferior_ptid, unless it's null at this point. If so,
+ then since there's no way to know the pid of the reported
+ threads, use the magic number. */
+ if (inferior_ptid == null_ptid)
+ pid = magic_null_ptid.pid ();
+ else
+ pid = inferior_ptid.pid ();
+
+ if (obuf)
+ *obuf = pp;
+ return ptid_t (pid, tid);
+
+ Because multi-process was turned off, GDB did not parse an explicitly
+ specified PID. Furthermore, inferior_ptid == null_ptid, and
+ eventually GDB picked the PID from magic_null_ptid.
+
+ If target-non-stop is not turned on at the beginning, the same bug
+ reveals itself as a duplicated thread as shown below.
+
+ # Same setup as above, without 'maint set target-non-stop on'.
+ ...
+ (gdb) attach 26253
+ Attaching to Remote target
+ Attached; pid = 26253
+ [New inferior 3]
+ ...
+ [New Thread 26253]
+ ...
+ (gdb) info threads
+ Id Target Id Frame
+ 1.1 process 13517 "a.out" main () at test.c:3
+ * 2.1 Thread 26253 "a.out" 0x00007f12750c5151 in read () from target:/lib/x86_64-linux-gnu/libc.so.6
+ 3.1 Thread 26253 "a.out" Remote 'g' packet reply is too long (expected 560 bytes, got 2496 bytes): 00feffffffffffff000a3a75127f000051510c75127f0000000400000000000060d24ef6af5500000000000000000000680d000000000000b85b31e3fc7f0000c0283a75127f000000e55b75127f000010d04ef6af550000460200000000000060c73975127f0000a0d23975127f0000000a3a75127f0000000000000000000051510c75127f000046020000330000002b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f03000000000000ffff0000000000000000000000000000000000000000000080143a75127f000080143a75127f000040143a75127f000040143a75127f00007d0000007e0000007f00000080000000300c3a75127f0000300c3a75127f00000e000000000000000e0000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff0400000004000000040000000400000020143a75127f000020143a75127f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000801f0000000000000000000000e55b75127f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+ (gdb)
+
+ Fix the problem by preferring current_inferior()'s pid instead of
+ magic_null_ptid.
+
+ Regression-tested on X86-64 Linux.
+
+2022-03-29 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: fix test failure when building against readline v7
+ The test added in the commit:
+
+ commit a6b413d24ccc5d76179bab866834e11fd6fec294
+ Date: Fri Mar 11 14:44:03 2022 +0000
+
+ gdb: work around prompt corruption caused by bracketed-paste-mode
+
+ Was not written with readline 7 in mind, only readline 8+. Between
+ readline 7 and 8 the escape sequence used to disable bracketed paste
+ mode changed, an additional '\r' character was added to the end. In
+ fact, it was the addition of this '\r' character that triggered the
+ issue for which the above commit is part of the solution.
+
+ Anyway, the test tries to spot the case where the output from GDB is
+ not perfect, but does have the above work around applied. However,
+ the pattern in the test assumes that the problematic '\r' will be
+ present, and this is only true for readline 8+. With readline 7 the
+ test was failing.
+
+ In this commit I generalise the pattern a little so that the test will
+ still KFAIL with readline 7.
+
+ It's a little unfortunate that the test is KFAILing with readline 7,
+ as without the problematic '\r' there's actually no reason that GDB
+ couldn't "do the right thing" in this case, in which case, the test
+ would PASS, but that would require changes within GDB itself.
+
+ My preference then is that initially we patch the test to get it
+ KFAILing, then in a separate commit I can modify GDB so that it can
+ PASS with readline 7.
+
+2022-03-29 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: fix copy & paste error in gdb.python/py-format-address.exp
+ The test gdb.python/py-format-address.exp, added in commit:
+
+ commit 25209e2c6979c3838e14e099f0333609810db280
+ Date: Sat Oct 23 09:59:25 2021 +0100
+
+ gdb/python: add gdb.format_address function
+
+ included 3 copy & paste errors where the wrong address was used in the
+ expected output patterns.
+
+ The test compiles two almost identical test binaries (one function
+ changes its name, that's the only difference), two inferiors are
+ created, each inferior using one of the test binaries.
+
+ We then take the address of the name changing function in both
+ inferiors ('foo' in inferior 1 and 'bar' in inferior 2) and the tests
+ are carried out using these addresses.
+
+ What we're checking for is that symbols 'foo' and 'bar' show up in the
+ correct inferior, and that (as this test is for a Python API feature),
+ the user can have one inferior selected, but ask about the other
+ inferior, and see the correct symbol in the result.
+
+ The hope is that the two binaries will be laid out identically by the
+ compiler, and that 'foo' and 'bar' will be at the same address. This
+ is fine, unless the executable is compiled as PIE (position
+ independent executable), in which case there is a problem.
+
+ The problem is that though inferior 1 is set running, the inferior 2
+ never is. If the executables are compiled as PIE, then the address in
+ the inferior 2 will not have been resolved, while the address in the
+ inferior 1 will have been, and so the two addresses we use in the
+ tests will be different.
+
+ This issue was reported here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-March/186911.html
+
+ The first part of the fix is to use the correct address variable in
+ the expected output patterns, with this change the tests pass even
+ when the executables are compiled as PIE.
+
+ A second part of this fix is to pass the 'nopie' option when we
+ compile the tests, this should ensure that the address obtained in
+ inferior 2 is the same as the address from inferior 1, which makes the
+ test more useful.
+
+2022-03-29 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/mi: fix use after free of frame_info causing spurious notifications
+ In commit:
+
+ commit a2757c4ed693cef4ecc4dcdcb2518353eb6b3c3f
+ Date: Wed Mar 16 15:08:22 2022 +0000
+
+ gdb/mi: consistently notify user when GDB/MI client uses -thread-select
+
+ Changes were made to GDB to address some inconsistencies in when
+ notifications are sent from a MI terminal to a CLI terminal (when
+ multiple terminals are in use, see new-ui command).
+
+ Unfortunately, in order to track when the currently selected frame has
+ changed, that commit grabs a frame_info pointer before and after an MI
+ command has executed, and compares the pointers to see if the frame
+ has changed.
+
+ This is not safe.
+
+ If the frame cache is deleted for any reason then the frame_info
+ pointer captured before the command started, is no longer valid, and
+ any comparisons based on that pointer are undefined.
+
+ This was leading to random test failures for some folk, see:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-March/186867.html
+
+ This commit changes GDB so we no longer hold frame_info pointers, but
+ instead store the frame_id and frame_level, this is safe even when the
+ frame cache is flushed.
+
+2022-03-29 Jan Beulich <jbeulich@suse.com>
+
+ bfd/Dwarf2: gas doesn't mangle names
+ Include the language identifier emitted by gas in the set of ones where
+ no mangled names are expected. Even if there could be "hand-mangled"
+ names, gas doesn't emit DW_AT_linkage_name in the first place.
+
+ bfd/Dwarf2: make find-nearest-line returned function name consistent
+ Prior to entering the enclosing "else if()" the earlier associated if()
+ checks function->is_linkage and, if set, uses function->name. The
+ comment in patch context precedes (and explains) the setting
+ function->is_linkage. Yet with the flag set, we should then also return
+ the function name, just like said earlier if() would do when we came
+ here a 2nd time for the same "addr". And indeed passing the same address
+ twice on addr2line's command line would resolve the function for the 2nd
+ instance, but not for the 1st (if this code path is taken). (This,
+ obviously, is particularly relevant when there's no ELF symbol table in
+ the first place, like would be the case - naturally - in PE/COFF
+ binaries, for example.)
+
+ gas/Dwarf: special-case .linefile only for macros
+ Restrict the PR gas/16908 workaround to just macros, matching the
+ original intention as well as the comment there. For constructs like
+ .irp or .rept the reasoning doesn't apply, as there's no separate
+ "invocation" point which may be of interest to record (for, as said
+ there, short macros).
+
+2022-03-29 Jan Beulich <jbeulich@suse.com>
+
+ RISC-V: correct FCVT.Q.L[U]
+ While the spec isn't explicit about this, it pointing out the similarity
+ with the D extension ought to extend to the ignoring of a meaningless
+ rounding mode: "Note FCVT.D.W[U] always produces an exact result and is
+ unaffected by rounding mode." Hence the chosen encodings also ought to
+ match.
+
+ Note that to avoid breaking existing code the forms with a 3rd operand
+ are not removed, which means there continues to be a difference to
+ FCVT.D.W[U].
+
+2022-03-29 Mike Frysinger <vapier@gentoo.org>
+
+ sim: add arch/.gdbinit stub scripts
+ Make it easy to load the common gdbinit script even when running in
+ the arch/ subdir instead of the top-level sim dir.
+
+2022-03-29 Alan Modra <amodra@gmail.com>
+
+ asan: heap buffer overflow in pa_chk_field_selector
+ The buffer overflow showed up running the gas "all macro" test.
+
+ PR 29005
+ * config/tc-hppa.c (pa_chk_field_selector): Don't read past end
+ of line.
+
+2022-03-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-28 Tom Tromey <tom@tromey.com>
+
+ Add Rust parser check for end of expression
+ I noticed that "print 5," passed in Rust -- the parser wasn't checking
+ that the entire input was used. This patch fixes the problem. This
+ in turn pointed out another bug in the parser, namely that it didn't
+ lex the next token after handling a string token. This is also fixed
+ here.
+
+2022-03-28 Tom Tromey <tom@tromey.com>
+
+ Switch gdb_stdlog to use timestamped_file
+ Currently, timestamps for logging are done by looking for the use of
+ gdb_stdlog in vfprintf_unfiltered. This seems potentially buggy, in
+ that during logging or other redirects (like execute_fn_to_ui_file) we
+ might have gdb_stdout==gdb_stdlog and so, conceivably, wind up with
+ timestamps in a log when they were not desired.
+
+ It seems better, instead, for timestamps to be a property of the
+ ui_file itself.
+
+ This patch changes gdb to use the new timestamped_file for gdb_stdlog
+ where appropriate, and removes the special case from
+ vfprintf_unfiltered.
+
+ Note that this may somewhat change the output in some cases -- in
+ particular, when going through execute_fn_to_ui_file (or the _string
+ variant), timestamps won't be emitted. This could be fixed in those
+ functions, but it wasn't clear to me whether this is really desirable.
+
+ Note also that this changes the TUI to send gdb_stdlog to gdb_stderr.
+ I imagine that the previous use of gdb_stdout here was inadvertent.
+ (And in any case it probably doesn't matter.)
+
+2022-03-28 Tom Tromey <tom@tromey.com>
+
+ Add new timestamped_file class
+ This adds a "timestamped_file" subclass of ui_file. This class adds a
+ timestamp to its output when appropriate. That is, it follows the
+ rule already used in vfprintf_unfiltered of adding a timestamp at most
+ once per write.
+
+ The new class is not yet used.
+
+2022-03-28 Tom Tromey <tom@tromey.com>
+
+ Use unique_ptr in CLI logging code
+ This changes the CLI logging code to avoid manual memory management
+ (to the extent possible) by using unique_ptr in a couple of spots.
+ This will come in handy in a later patch.
+
+2022-03-28 Tom Tromey <tom@tromey.com>
+
+ Simplify the CLI set_logging logic
+ The CLI's set_logging logic seemed unnecessarily complicated to me.
+ This patch simplifies it, with an eye toward changing it to use RAII
+ objects in a subsequent patch.
+
+ I did not touch the corresponding MI code. That code seems incorrect
+ (nothing ever uses raw_stdlog, and nothing ever sets
+ saved_raw_stdlog). I didn't attempt to fix this, because I question
+ whether this is even useful for MI.
+
+2022-03-28 Tom Tromey <tromey@adacore.com>
+
+ Handle multiple addresses in call_site_target
+ A large customer program has a function that is partitioned into hot
+ and cold parts. A variable in a callee of this function is described
+ using DW_OP_GNU_entry_value, but gdb gets confused when trying to find
+ the caller. I tracked this down to dwarf2_get_pc_bounds interpreting
+ the function's changes so that the returned low PC is the "wrong"
+ function.
+
+ Intead, when processing DW_TAG_call_site, the low PC of each range in
+ DW_AT_ranges should be preserved in the call_site_target. This fixes
+ the variable lookup in the test case I have.
+
+ I didn't write a standalone test for this as it seemed excessively
+ complicated.
+
+2022-03-28 Tom Tromey <tromey@adacore.com>
+
+ Change call_site_target to iterate over addresses
+ In order to handle the case where a call site target might refer to
+ multiple addresses, we change the code to use a callback style. Any
+ spot using call_site_target::address now passes in a callback function
+ that may be called multiple times.
+
+2022-03-28 Tom Tromey <tromey@adacore.com>
+
+ Change call_site_find_chain_1 to work recursively
+ call_site_find_chain_1 has a comment claiming that recursive calls
+ would be too expensive. However, I doubt this is so expensive; and
+ furthermore the explicit state management approach here is difficult
+ both to understand and to modify. This patch changes this code to use
+ explicit recursion, so that a subsequent patch can generalize this
+ code without undue trauma.
+
+ Additionally, I think this patch detects a latent bug in the recursion
+ code. (It's hard for me to be completely certain.) The bug is that
+ when a new target_call_site is entered, the code does:
+
+ if (target_call_site)
+ {
+ if (addr_hash.insert (target_call_site->pc ()).second)
+ {
+ /* Successfully entered TARGET_CALL_SITE. */
+
+ chain.push_back (target_call_site);
+ break;
+ }
+ }
+
+ Here, if entering the target_call_site fails, then any tail_call_next
+ elements in this call site are not visited. However, if this code
+ does happen to enter a call site, then the tail_call_next elements
+ will be visited during backtracking. This applies when doing the
+ backtracking as well -- it will only continue through a given chain as
+ long as each element in the chain can successfully be visited.
+
+ I'd appreciate some review of this. If this behavior is intentional,
+ it can be added to the new implementation.
+
+2022-03-28 Tom Tromey <tromey@adacore.com>
+
+ Constify chain_candidate
+ While investigating this bug, I wasn't sure if chain_candidate might
+ update 'chain'. I changed it to accept a const reference, making it
+ clear that it cannot. This simplifies the code a tiny bit as well.
+
+ Make call_site_target members private
+ This makes the data members of call_site_target 'private'. This lets
+ us remove most of its public API. call_site_to_target_addr is changed
+ to be a method of this type. This is a preparatory refactoring for
+ the fix at the end of this series.
+
+ Change call_site_target to use custom type and enum
+ call_site_target reuses field_loc_kind and field_location. However,
+ it has never used the full range of the field_loc_kind enum. In a
+ subsequent patch, I plan to add a new 'kind' here, so it seemed best
+ to avoid this reuse and instead introduce new types here.
+
+2022-03-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-26 Tom Tromey <tom@tromey.com>
+
+ Remove an unused declaration from value.h
+ value.h has a declaration of value_print_array_elements that is
+ incorrect. In C, this would have been an error, but in C++ this is a
+ declaration of an overload that is neither defined nor used. This
+ patch removes the declaration.
+
+2022-03-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-25 Nick Alcock <nick.alcock@oracle.com>
+
+ libtool.m4: fix the NM="/nm/over/here -B/option/with/path" case
+ My previous nm patch handled all cases but one -- if the user set NM in
+ the environment to a path which contained an option, libtool's nm
+ detection tries to run nm against a copy of nm with the options in it:
+ e.g. if NM was set to "nm --blargle", and nm was found in /usr/bin, the
+ test would try to run "/usr/bin/nm --blargle /usr/bin/nm --blargle".
+ This is unlikely to be desirable: in this case we should run
+ "/usr/bin/nm --blargle /usr/bin/nm".
+
+ Furthermore, as part of this nm has to detect when the passed-in $NM
+ contains a path, and in that case avoid doing a path search itself.
+ This too was thrown off if an option contained something that looked
+ like a path, e.g. NM="nm -B../prev-gcc"; libtool then tries to run
+ "nm -B../prev-gcc nm" which rarely works well (and indeed it looks
+ to see whether that nm exists, finds it doesn't, and wrongly concludes
+ that nm -p or whatever does not work).
+
+ Fix all of these by clipping all options (defined as everything
+ including and after the first " -") before deciding whether nm
+ contains a path (but not using the clipped value for anything else),
+ and then removing all options from the path-modified nm before
+ looking to see whether that nm existed.
+
+ NM=my-nm now does a path search and runs e.g.
+ /usr/bin/my-nm -B /usr/bin/my-nm
+
+ NM=/usr/bin/my-nm now avoids a path search and runs e.g.
+ /usr/bin/my-nm -B /usr/bin/my-nm
+
+ NM="my-nm -p../wombat" now does a path search and runs e.g.
+ /usr/bin/my-nm -p../wombat -B /usr/bin/my-nm
+
+ NM="../prev-binutils/new-nm -B../prev-gcc" now avoids a path search:
+ ../prev-binutils/my-nm -B../prev-gcc -B ../prev-binutils/my-nm
+
+ This seems to be all combinations, including those used by GCC bootstrap
+ (which, before this commit, fails to bootstrap when configured
+ --with-build-config=bootstrap-lto, because the lto plugin is now using
+ --export-symbols-regex, which requires libtool to find a working nm,
+ while also using -B../prev-gcc to point at the lto plugin associated
+ with the GCC just built.)
+
+ Regenerate all affected configure scripts.
+
+ * libtool.m4 (LT_PATH_NM): Handle user-specified NM with
+ options, including options containing paths.
+
+2022-03-25 Alan Modra <amodra@gmail.com>
+
+ Re: gas/Dwarf: improve debug info generation from .irp and alike blocks
+ am33_2.0-linux is a mn10300 target.
+
+ * testsuite/gas/elf/dwarf-5-irp.d: xfail am33.
+
+2022-03-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-24 Aaron Merey <amerey@redhat.com>
+
+ Remove download size from debuginfod progress messages if unavailable
+ Currently debuginfod progress update messages include the size of
+ each download:
+
+ Downloading 7.5 MB separate debug info for /lib/libxyz.so.0
+
+ This value originates from the Content-Length HTTP header of the
+ transfer. However this header is not guaranteed to be present for
+ each download. This can happen when debuginfod servers compress files
+ on-the-fly at the time of transfer. In this case gdb wrongly prints
+ "-0.00 MB" as the size.
+
+ This patch removes download sizes from progress messages when they are
+ not available. It also removes usage of the progress bar until
+ a more thorough reworking of progress updating is implemented. [1]
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-February/185798.html
+
+2022-03-24 Reuben Thomas <rrt@sc3d.org>
+
+ sim: fix a comment typo in sim-load.c
+ Fix a typo where the documentation refers to a function parameter by the
+ wrong name.
+
+ Change-Id: I99494efe62cd4aa76fb78a0bd5da438d35740ebe
+
+2022-03-24 Reuben Thomas <rrt@sc3d.org>
+
+ sim: fix “alligned” typos
+ Change-Id: Ifd574e38524dd4f1cf0fc003e0c5c7499abc84a0
+
+2022-03-24 Jan Beulich <jbeulich@suse.com>
+
+ x86: mention dropped L1OM/K1OM support in ld/ as well
+ This amends e961c696dcb2 ("x86: drop L1OM/K1OM support from ld"). Also
+ remove the marker that I mistakenly added in c085ab00c7b2 ("x86: drop
+ L1OM/K1OM support from gas").
+
+2022-03-24 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: remove gdb.python/pretty-print-call-by-hand.exp
+ This test was added without a corresponding fix, with some setup_kfails.
+ However, it results in UNRESOLVED results when GDB is built with ASan.
+
+ ERROR: GDB process no longer exists
+ GDB process exited with wait status 1946871 exp7 0 1
+ UNRESOLVED: gdb.python/pretty-print-call-by-hand.exp: frame print: backtrace test (PRMS gdb/28856)
+
+ Remove the test from the tree, I'll attach it to the Bugzilla bug
+ instead [1].
+
+ [1] https://sourceware.org/bugzilla/show_bug.cgi?id=28856
+
+ Change-Id: Id95d8949fb8742874bd12aeac758aa4d7564d678
+
+2022-03-24 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop L1OM/K1OM support from ld
+ This was only rudimentary support anyway; none of the sub-architecture
+ specific insns were ever supported.
+
+ x86: drop L1OM special case from disassembler
+ There wasn't any real support anyway: None of the sub-architecture
+ specific insns were ever supported.
+
+2022-03-24 Jan Beulich <jbeulich@suse.com>
+
+ MAINTAINERS: add myself
+ I much appreciate Nick offering this role to me. Nevertheless there's
+ still a lot for me to learn here.
+
+ At this occasion also update my email address in the pre-existing, much
+ more narrow entry.
+
+2022-03-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-23 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: address test failures in gdb.mi/mi-multi-commands.exp
+ The gdb.mi/mi-multi-commands.exp test was added in commit:
+
+ commit d08cbc5d3203118da5583296e49273cf82378042
+ Date: Wed Dec 22 12:57:44 2021 +0000
+
+ gdb: unbuffer all input streams when not using readline
+
+ And then tweaked in commit:
+
+ commit 144459531dd68a1287905079aaa131b777a8cc82
+ Date: Mon Feb 7 20:35:58 2022 +0000
+
+ gdb/testsuite: relax pattern in new gdb.mi/mi-multi-commands.exp test
+
+ The second of these commits was intended to address periodic test
+ failures that I was seeing, and this change did fix some problems,
+ but, unfortunately, introduced other issues.
+
+ The problem is that the test relies on sending two commands to GDB in
+ a single write. As the characters that make these two commands arrive
+ they are echoed to GDB's console. However, there is a race between
+ how quickly the characters are echoed and how quickly GDB decides to
+ act on the incoming commands.
+
+ Usually, both commands are echoed in full before GDB acts on the first
+ command, but sometimes this is not the case, and GDB can execute the
+ first command before both commands are fully echoed to the console.
+ In this case, the output of the first command will be mixed in with
+ the echoing of the second command.
+
+ This mixing of the command echoing and the first command output is
+ what was causing failures in the original version of the test.
+
+ The second commit relaxed the expected output pattern a little, but
+ was still susceptible to failures, so this commit further relaxes the
+ pattern.
+
+ Now, we look for the first command output with no regard to what is
+ before, or after the command. Then we look for the first mi prompt to
+ indicate that the first command has completed.
+
+ I believe that this change should make the test more stable than it
+ was before.
+
+2022-03-23 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: add LIBCTF_WRITE_FOREIGN_ENDIAN debugging option
+ libctf has always handled endianness differences by detecting
+ foreign-endian CTF dicts on the input and endian-flipping them: dicts
+ are always written in native endianness. This makes endian-awareness
+ very low overhead, but it means that the foreign-endian code paths
+ almost never get routinely tested, since "make check" usually reads in
+ dicts ld has just written out: only a few corrupted-CTF tests are
+ actually in fixed endianness, and even they only test the foreign-
+ endian code paths when you run make check on a big-endian machine.
+ (And the fix is surely not to add more .s-based tests like that, because
+ they are a nightmare to maintain compared to the C-code-based ones.)
+
+ To improve on this, add a new environment variable,
+ LIBCTF_WRITE_FOREIGN_ENDIAN, which causes libctf to unconditionally
+ endian-flip at ctf_write time, so the output is always in the wrong
+ endianness. This then tests the foreign-endian read paths properly
+ at open time.
+
+ Make this easier by restructuring the writeout code in ctf-serialize.c,
+ which duplicates the maybe-gzip-and-write-out code three times (once
+ for ctf_write_mem, with thresholding, and once each for
+ ctf_compress_write and ctf_write just so those can avoid thresholding
+ and/or compression). Instead, have the latter two call the former
+ with thresholds of 0 or (size_t) -1, respectively.
+
+ The endian-flipping code itself gains a bit of complexity, because
+ one single endian-flipper (flip_types) was assuming the input to be
+ in foreign-endian form and assuming it could pull things out of the
+ input once they had been flipped and make sense of them. At the
+ cost of a few lines of duplicated initializations, teach it to
+ read before flipping if we're flipping to foreign-endianness instead
+ of away from it.
+
+ libctf/
+ * ctf-impl.h (ctf_flip_header): No longer static.
+ (ctf_flip): Likewise.
+ * ctf-open.c (flip_header): Rename to...
+ (ctf_flip_header): ... this, now it is not private to one file.
+ (flip_ctf): Rename...
+ (ctf_flip): ... this too. Add FOREIGN_ENDIAN arg.
+ (flip_types): Likewise. Use it.
+ (ctf_bufopen_internal): Adjust calls.
+ * ctf-serialize.c (ctf_write_mem): Add flip_endian path via
+ a newly-allocated bounce buffer.
+ (ctf_compress_write): Move below ctf_write_mem and reimplement
+ in terms of it.
+ (ctf_write): Likewise.
+ (ctf_gzwrite): Note that this obscure writeout function does not
+ support endian-flipping.
+
+2022-03-23 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf, ld: diagnose corrupted CTF header cth_strlen
+ The last section in a CTF dict is the string table, at an offset
+ represented by the cth_stroff header field. Its length is recorded in
+ the next field, cth_strlen, and the two added together are taken as the
+ size of the CTF dict. Upon opening a dict, we check that none of the
+ header offsets exceed this size, and we check when uncompressing a
+ compressed dict that the result of the uncompression is the same length:
+ but CTF dicts need not be compressed, and short ones are not.
+ Uncompressed dicts just use the ctf_size without checking it. This
+ field is thankfully almost unused: it is mostly used when reserializing
+ a dict, which can't be done to dicts read off disk since they're
+ read-only.
+
+ However, when opening an uncompressed foreign-endian dict we have to
+ copy it out of the mmaped region it is stored in so we can endian-
+ swap it, and we use ctf_size when doing that. When the cth_strlen is
+ corrupt, this can overrun.
+
+ Fix this by checking the ctf_size in all uncompressed cases, just as we
+ already do in the compressed case. Add a new test.
+
+ This came to light because various corrupted-CTF raw-asm tests had an
+ incorrect cth_strlen: fix all of them so they produce the expected
+ error again.
+
+ libctf/
+ PR libctf/28933
+ * ctf-open.c (ctf_bufopen_internal): Always check uncompressed
+ CTF dict sizes against the section size in case the cth_strlen is
+ corrupt.
+
+ ld/
+ PR libctf/28933
+ * testsuite/ld-ctf/diag-strlen-invalid.*: New test,
+ derived from diag-cttname-invalid.s.
+ * testsuite/ld-ctf/diag-cttname-invalid.s: Fix incorrect cth_strlen.
+ * testsuite/ld-ctf/diag-cttname-null.s: Likewise.
+ * testsuite/ld-ctf/diag-cuname.s: Likewise.
+ * testsuite/ld-ctf/diag-parlabel.s: Likewise.
+ * testsuite/ld-ctf/diag-parname.s: Likewise.
+
+2022-03-23 Nick Alcock <nick.alcock@oracle.com>
+
+ include, libctf, ld: extend variable section to contain functions too
+ The CTF variable section is an optional (usually-not-present) section in
+ the CTF dict which contains name -> type mappings corresponding to data
+ symbols that are present in the linker input but not in the output
+ symbol table: the idea is that programs that use their own symbol-
+ resolution mechanisms can use this section to look up the types of
+ symbols they have found using their own mechanism.
+
+ Because these removed symbols (mostly static variables, functions, etc)
+ all have names that are unlikely to appear in the ELF symtab and because
+ very few programs have their own symbol-resolution mechanisms, a special
+ linker flag (--ctf-variables) is needed to emit this section.
+
+ Historically, we emitted only removed data symbols into the variable
+ section. This seemed to make sense at the time, but in hindsight it
+ really doesn't: functions are symbols too, and a C program can look them
+ up just like any other type. So extend the variable section so that it
+ contains all static function symbols too (if it is emitted at all), with
+ types of kind CTF_K_FUNCTION.
+
+ This is a little fiddly. We relied on compiler assistance for data
+ symbols: the compiler simply emits all data symbols twice, once into the
+ symtypetab as an indexed symbol and once into the variable section.
+
+ Rather than wait for a suitably adjusted compiler that does the same for
+ function symbols, we can pluck unreported function symbols out of the
+ symtab and add them to the variable section ourselves. While we're at
+ it, we do the same with data symbols: this is redundant right now
+ because the compiler does it, but it costs very little time and lets the
+ compiler drop this kludge and save a little space in .o files.
+
+ include/
+ * ctf.h: Mention the new things we can see in the variable
+ section.
+
+ ld/
+ * testsuite/ld-ctf/data-func-conflicted-vars.d: New test.
+
+ libctf/
+ * ctf-link.c (ctf_link_deduplicating_variables): Duplicate
+ symbols into the variable section too.
+ * ctf-serialize.c (symtypetab_delete_nonstatic_vars): Rename
+ to...
+ (symtypetab_delete_nonstatics): ... this. Check the funchash
+ when pruning redundant variables.
+ (ctf_symtypetab_sect_sizes): Adjust accordingly.
+ * NEWS: Describe this change.
+
+2022-03-23 Nick Alcock <nick.alcock@oracle.com>
+
+ ld, testsuite: improve CTF-availability test
+ The test for -gctf support in the compiler is used to determine when to
+ run the ld-ctf tests and most of those in libctf. Unfortunately,
+ because it uses check_compiler_available and compile_one_cc, it will
+ fail whenever the compiler emits anything on stderr, even if it
+ actually does support CTF perfectly well.
+
+ So, instead, ask the compiler to emit assembler output and grep it for
+ references to ".ctf": this is highly unlikely to be present if the
+ compiler does not support CTF. (This will need adjusting when CTF grows
+ support for non-ELF platforms that don't dot-prepend their section
+ names, but right now the linker doesn't link CTF on any such platforms
+ in any case.)
+
+ With this in place we can do things like run all the libctf tests under
+ leak sanitizers etc even if those spray warnings on simple CTF
+ compilations, rather than being blocked from doing so just when we would
+ most like to.
+
+ ld/
+ * testsuite/lib/ld-lib.exp (check_ctf_available): detect CTF
+ even if a CTF-capable compiler emits warnings.
+
+2022-03-23 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/python: remove Python 2/3 compatibility macros
+ New in this version:
+
+ - Rebase on master, fix a few more issues that appeared.
+
+ python-internal.h contains a number of macros that helped make the code
+ work with both Python 2 and 3. Remove them and adjust the code to use
+ the Python 3 functions.
+
+ Change-Id: I99a3d80067fb2d65de4f69f6473ba6ffd16efb2d
+
+2022-03-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/python: remove Python 2 support
+ New in this version:
+
+ - Add a PY_MAJOR_VERSION check in configure.ac / AC_TRY_LIBPYTHON. If
+ the user passes --with-python=python2, this will cause a configure
+ failure saying that GDB only supports Python 3.
+
+ Support for Python 2 is a maintenance burden for any patches touching
+ Python support. Among others, the differences between Python 2 and 3
+ string and integer types are subtle. It requires a lot of effort and
+ thinking to get something that behaves correctly on both. And that's if
+ the author and reviewer of the patch even remember to test with Python
+ 2.
+
+ See this thread for an example:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-December/184260.html
+
+ So, remove Python 2 support. Update the documentation to state that GDB
+ can be built against Python 3 (as opposed to Python 2 or 3).
+
+ Update all the spots that use:
+
+ - sys.version_info
+ - IS_PY3K
+ - PY_MAJOR_VERSION
+ - gdb_py_is_py3k
+
+ ... to only keep the Python 3 portions and drop the use of some
+ now-removed compatibility macros.
+
+ I did not update the configure script more than just removing the
+ explicit references to Python 2. We could maybe do more there, like
+ check the Python version and reject it if that version is not
+ supported. Otherwise (with this patch), things will only fail at
+ compile time, so it won't really be clear to the user that they are
+ trying to use an unsupported Python version. But I'm a bit lost in the
+ configure code that checks for Python, so I kept that for later.
+
+ Change-Id: I75b0f79c148afbe3c07ac664cfa9cade052c0c62
+
+2022-03-23 Jan Beulich <jbeulich@suse.com>
+
+ x86: reject relocations involving registers
+ To prevent fatal or even internal errors, add a simple check to
+ i386_validate_fix(), rejecting relocations when their target symbol is
+ an equate of a register (or resolved to reg_section for any other
+ reason).
+
+ x86: improve resolution of register equates
+ Allow transitive (or recursive) equates to work in addition to direct
+ ones. The only requirements are that
+ - the equate being straight of a register, i.e. no expressions involved
+ (albeit I'm afraid something like "%eax + 0" will be viewed as %eax),
+ - at the point of use there's no forward ref left which cannot be
+ resolved, yet.
+
+ Revert "PR28977 tc-i386.c internal error in parse_register"
+ This reverts commit 5fac3f02edacfca458f7eeaaaa33a87e26e0e332,
+ which was superceeded / replaced by 4faaa10f3fab.
+
+2022-03-23 Jan Beulich <jbeulich@suse.com>
+
+ x86: don't attempt to resolve equates and alike from i386_parse_name()
+ PR gas/28977
+
+ Perhaps right from its introduction in 4d1bb7955a8b it was wrong for
+ i386_parse_name() to call parse_register(). This being a hook from the
+ expression parser, it shouldn't be resolving e.g. equated symbols.
+ That's relevant only for all other callers of parse_register().
+
+ To compensate, in Intel syntax mode check_register() needs calling;
+ perhaps not doing so was an oversight right when the function was
+ introduced. This is necessary in particular to force EVEX encoding when
+ VRex registers are used (but of course also to reject bad uses of
+ registers, i.e. fully matching what parse_register() needs it for).
+
+2022-03-23 Luis Machado <luis.machado@arm.com>
+
+ Update the list of recognized m-profile TAG_CPU_ARCH_*
+ Check 3 additional variants previously not recognized:
+
+ - TAG_CPU_ARCH_V7E_M
+ - TAG_CPU_ARCH_V8M_BASE
+ - TAG_CPU_ARCH_V8M_MAIN
+
+2022-03-23 Jan Beulich <jbeulich@suse.com>
+
+ gas/Dwarf5: re-use file 0 line string table entry when faking file 0
+ No need to emit the same string a 2nd time for file 1 in this case.
+
+ gas/Dwarf5: adjust .debug_line file 0 checking
+ First of all when a table entry has a NULL filename, the two inner if()s
+ are better done the other way around: The 2nd doesn't depend on what the
+ first does. This then renders redundant half of the conditions of the
+ other if() and clarifies that subsequently only entry 0 is dealt with
+ (indicating that part of the comment was wrong). Finally for there to be
+ a usable name in slot 1, files_in_use needs to be larger than 1 and slot
+ 1's (rather than slot 0's) name needs to be non-NULL.
+
+2022-03-23 Jan Beulich <jbeulich@suse.com>
+
+ gas/Dwarf5: drop dead code
+ Commit 3417bfca676f ("GAS: DWARF-5: Ensure that the 0'th entry in the
+ directory table contains the current... ") added a "dwarf_level < 5"
+ check to out_dir_and_file_list(). This rendered dead that branch of the
+ construct, due to the enclosing if()'s "DWARF2_LINE_VERSION >= 5".
+ Delete that code as well as the corresponding part of the comment.
+
+ While there also drop a redundant "dirs != NULL": "dirs" will always be
+ non-NULL when dirs_in_use is not zero.
+
+2022-03-23 Jan Beulich <jbeulich@suse.com>
+
+ gas/Dwarf: improve debug info generation from .irp and alike blocks
+ Tying the bumping of the logical line number to reading from the
+ original source file looks wrong: Upon finishing of the processing of an
+ sb the original values will be restored anyway. Yet without bumping the
+ line counter uses of .line inside e.g. an .irp construct won't have the
+ intended effect: Such uses may be necessary to ensure proper debug info
+ is emitted in particular when switching sections inside the .irp body,
+ as dwarf2_gen_line_info() would bail without doing anything when it
+ finds the line number unchanged from what it saw last.
+
+2022-03-23 Jan Beulich <jbeulich@suse.com>
+
+ ELF32: don't silently truncate relocation addends
+ At least x86-64's x32 sub-mode and RISC-V's 32-bit mode calculate
+ addends as 64-bit values, but store them in signed 32-bit fields when
+ generating the file without encountering any earlier error. When the
+ relocated field is a 64-bit one, the value resulting after processing
+ the relocation record when linking (or the latest when loading) may
+ thus be wrong due to the truncation.
+
+ With the code change in place, one x32 testcase actually triggers the
+ new diagnostic. That one case of too large a (negative) addend is being
+ adjusted alongside the addition of a new testcase to actually trigger
+ the new error. (Note that due to internal BFD behavior the relocation in
+ .data doesn't get processed anymore after the errors in .text.)
+
+ Note that in principle it is possible to express 64-bit relocations in
+ ELF32, but this would require .rel relocations, i.e. with the addend
+ stored in the 64-bit field being relocated. But I guess it would be a
+ lot of effort for little gain to actually support this.
+
+2022-03-23 Jan Beulich <jbeulich@suse.com>
+
+ gas: retain whitespace between strings
+ Macro arguments may be separated by commas or just whitespace. Macro
+ arguments may also be quoted (where one level of quotes is removed in
+ the course of determining the values for the respective formal
+ parameters). Furthermore this quote removal knows _two_ somewhat odd
+ escaping mechanisms: One, apparently in existence forever, is that a
+ pair of quotes counts as the escaping of a quote, with the pair being
+ transformed to a single quote in the course of quote removal. The other
+ (introduced by c06ae4f232e6) looks more usual on the surface in that it
+ deals with \" sequences, but it _retains_ the escaping \. Hence only the
+ former mechanism is suitable when the value to be used by the macro body
+ is to contain a quote. Yet this results in ambiguity of what "a""b" is
+ intended to mean; elsewhere (e.g. for .ascii) it represents two
+ successive string literals. However, in any event is the above different
+ from "a" "b": I don't think this can be viewed the same as "a""b" when
+ processing macro arguments.
+
+ Change the scrubber to retain such whitespace, by making the processing
+ of strings more similar to that of symbols. And indeed this appears to
+ make sense when taking into account that for quite a while gas has been
+ supporting quoted symbol names.
+
+ Taking a more general view, however, the change doesn't go quite far
+ enough. There are further cases where significant whitespace is removed
+ by the scrubber. The new testcase enumerates a few in its ".if 0"
+ section. I'm afraid the only way that I see to deal with this would be
+ to significantly simplify the scrubber, such that it wouldn't do much
+ more than collapse sequences of unquoted whitespace into a single blank.
+ To be honest problems in this area aren't really surprising when seeing
+ that there's hardly any checking of .macro use throughout the testsuite
+ (and in particular in the [relatively] generic tests under all/).
+
+2022-03-23 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ Only .so files are used in libcollector. Remove the other files.
+ * libcollector/Makefile.am (install-data-local): Remove the *.la
+ and *.a libraries.
+ * libcollector/Makefile.in: Regenerate.
+
+2022-03-23 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: use gdb_attach to fix jit-elf.exp
+ If /proc/sys/kernel/yama/ptrace_scope is 1, when execute the following
+ command without superuser:
+
+ make check-gdb TESTS="gdb.base/jit-elf.exp"
+
+ we can see the following messages in gdb/testsuite/gdb.log:
+
+ (gdb) attach 1650108
+ Attaching to program: /home/yangtiezhu/build/gdb/testsuite/outputs/gdb.base/jit-elf/jit-elf-main, process 1650108
+ ptrace: Operation not permitted.
+ (gdb) FAIL: gdb.base/jit-elf.exp: attach: one_jit_test-2: break here 1: attach
+
+ use gdb_attach to fix the above issue, at the same time, the clean_reattach
+ proc should return a value to indicate whether it worked, and the callers
+ should return early as well on failure.
+
+2022-03-23 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: use gdb_attach to fix attach-pie-noexec.exp
+ If /proc/sys/kernel/yama/ptrace_scope is 1, when execute the following
+ command without superuser:
+
+ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"
+
+ we can see the following messages in gdb/testsuite/gdb.log:
+
+ (gdb) attach 6500
+ Attaching to process 6500
+ ptrace: Operation not permitted.
+ (gdb) PASS: gdb.base/attach-pie-noexec.exp: attach
+
+ It is obviously wrong, the expected result should be UNSUPPORTED in such
+ a case.
+
+ With this patch, we can see "Operation not permitted" in the log info,
+ and then we can do the following processes to test:
+ (1) set ptrace_scope as 0
+ $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
+ $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"
+ (2) use sudo
+ $ sudo make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"
+
+2022-03-23 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: add new gdb_attach to check "attach" command
+ This commit adds new gdb_attach to centralize the failure checking of
+ "attach" command. Return 0 if attach failed, otherwise return 1.
+
+2022-03-23 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: remove attach test from can_spawn_for_attach
+ As Pedro Alves said, caching procs should not issue pass/fail [1],
+ this commit removes attach test from can_spawn_for_attach, at the
+ same time, use "verbose -log" instead of "unsupported" to get a
+ trace about why a test run doesn't support spawning for attach.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2022-March/186311.html
+
+2022-03-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ Add support for hardware breakpoints/watchpoints on FreeBSD/Aarch64.
+ This shares aarch64-nat.c and nat/aarch64-hw-point.c with the Linux
+ native target. Since FreeBSD writes all of the debug registers in one
+ ptrace op, use an unordered_set<> to track the "dirty" state for
+ threads rather than bitmasks of modified registers.
+
+ fbsd-nat: Add a low_prepare_to_resume virtual method.
+ This method can be overridden by architecture-specific targets to
+ perform additional work before a thread is resumed.
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Add a low_delete_thread virtual method.
+ This method can be overridden by architecture-specific targets to
+ perform additional work when a thread is deleted.
+
+ Note that this method is only invoked on systems supporting LWP
+ events, but the pending use case (aarch64 debug registers) is not
+ supported on older kernels that do not support LWP events.
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Add helper routine to fetch siginfo_t for a ptid.
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ aarch64: Add an aarch64_nat_target mixin class.
+ This class includes platform-independent target methods for hardware
+ breakpoints and watchpoints using routines from
+ nat/aarch64-hw-point.c.
+
+ stopped_data_address is not platform-independent since the FAR
+ register holding the address for a breakpoint hit must be fetched in a
+ platform-specific manner. However, aarch64_stopped_data_address is
+ provided as a helper routine which performs platform-independent
+ validation given the value of the FAR register.
+
+ For tracking the per-process debug register mirror state, use an
+ unordered_map indexed by pid as recently adopted in x86-nat.c rather
+ than a manual linked-list.
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ nat: Split out platform-independent aarch64 debug register support.
+ Move non-Linux-specific support for hardware break/watchpoints from
+ nat/aarch64-linux-hw-point.c to nat/aarch64-hw-point.c. Changes
+ beyond a simple split of the code are:
+
+ - aarch64_linux_region_ok_for_watchpoint and
+ aarch64_linux_any_set_debug_regs_state renamed to drop linux_ as
+ they are not platform specific.
+
+ - Platforms must implement the aarch64_notify_debug_reg_change
+ function which is invoked from the platform-independent code when a
+ debug register changes for a given debug register state. This does
+ not use the indirection of a 'low' structure as is done for x86.
+
+ - The handling for kernel_supports_any_contiguous_range is not
+ pristine. For non-Linux it is simply defined to true. Some uses of
+ this could perhaps be implemented as new 'low' routines for the
+ various places that check it instead?
+
+ - Pass down ptid into aarch64_handle_breakpoint and
+ aarch64_handle_watchpoint rather than using current_lwp_ptid which
+ is only defined on Linux. In addition, pass the ptid on to
+ aarch64_notify_debug_reg_change instead of the unused state
+ argument.
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ x86-fbsd-nat: Copy debug register state on fork.
+ Use the FreeBSD native target low_new_fork hook to copy the
+ per-process debug state from the parent to the child on fork.
+
+ fbsd-nat: Add a low_new_fork virtual method.
+ This method can be overridden by architecture-specific targets to
+ perform additional work when a new child process is forked.
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ Add an x86_fbsd_nat_target mixin class for FreeBSD x86 native targets.
+ This class implements debug register support common between the i386
+ and amd64 native targets.
+
+ While here, remove #ifdef's for HAVE_PT_GETDBREGS in FreeBSD-specific
+ code. The ptrace request has been present on FreeBSD x86
+ architectures since 4.0 (released in March 2000). The last FreeBSD
+ release without this support is 3.5 released in June 2000.
+
+2022-03-22 John Baldwin <jhb@FreeBSD.org>
+
+ x86-nat: Add x86_lookup_debug_reg_state.
+ This function returns nullptr if debug register state does not yet
+ exist for a given process rather than creating new state.
+
+ x86-nat: Use an unordered_map to store per-pid debug reg state.
+ This replaces a manual linked list which used O(n) lookup and removal.
+
+ Remove USE_SIGTRAP_SIGINFO condition for FreeBSD/x86 debug regs support.
+ For BSD x86 targets, stopped_by_hw_breakpoint doesn't check siginfo_t
+ but inspects the DR6 register directly via PT_GETDBREGS.
+
+2022-03-22 Tom Tromey <tom@tromey.com>
+
+ Remove two unused variables
+ I found a couple of spots that declare a symtab_and_line but don't
+ actually use it. I think this probably isn't detected as unused
+ because it has a constructor.
+
+2022-03-22 Steiner H Gunderson <steinar+sourceware@gunderson.no>
+
+ Fix return code in _bfd_dwarf2_find_nearest_line().
+ * dwarf2.c (_bfd_dwarf2_find_nearest_line): if a function name is
+ found, but no line number info, then return a result of 2.
+
+2022-03-22 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: add gdb.format_address function
+ Add a new function, gdb.format_address, which is a wrapper around
+ GDB's print_address function.
+
+ This method takes an address, and returns a string with the format:
+
+ ADDRESS <SYMBOL+OFFSET>
+
+ Where, ADDRESS is the original address, formatted as hexadecimal,
+ SYMBOL is a symbol with an address lower than ADDRESS, and OFFSET is
+ the offset from SYMBOL to ADDRESS in decimal.
+
+ If there's no SYMBOL suitably close to ADDRESS then the
+ <SYMBOL+OFFSET> part is not included.
+
+ This is useful if a user wants to write a Python script that
+ pretty-prints addresses, the user no longer needs to do manual symbol
+ lookup, or worry about correctly formatting addresses.
+
+ Additionally, there are some settings that effect how GDB picks
+ SYMBOL, and whether the file name and line number should be included
+ with the SYMBOL name, the gdb.format_address function ensures that the
+ users Python script also benefits from these settings.
+
+ The gdb.format_address by default selects SYMBOL from the current
+ inferiors program space, and address is formatted using the
+ architecture for the current inferior. However, a user can also
+ explicitly pass a program space and architecture like this:
+
+ gdb.format_address(ADDRESS, PROGRAM_SPACE, ARCHITECTURE)
+
+ In order to format an address for a different inferior.
+
+ Notes on the implementation:
+
+ In py-arch.c I extended arch_object_to_gdbarch to add an assertion for
+ the type of the PyObject being worked on. Prior to this commit all
+ uses of arch_object_to_gdbarch were guaranteed to pass this function a
+ gdb.Architecture object, but, with this commit, this might not be the
+ case.
+
+ So, with this commit I've made it a requirement that the PyObject be a
+ gdb.Architecture, and this is checked with the assert. And in order
+ that callers from other files can check if they have a
+ gdb.Architecture object, I've added the new function
+ gdbpy_is_architecture.
+
+ In py-progspace.c I've added two new function, the first
+ progspace_object_to_program_space, converts a PyObject of type
+ gdb.Progspace to the associated program_space pointer, and
+ gdbpy_is_progspace checks if a PyObject is a gdb.Progspace or not.
+
+2022-03-22 Luis Machado <luis.machado@arm.com>
+
+ Fix some stale header names from dwarf files
+ Some of these references were not updated when they were moved to a separate
+ directory.
+
+2022-03-22 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ Install gprofng libraries under $(pkglibdir)
+ gprofng/ChangeLog
+ 2022-03-21 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ PR gprofng/28972
+ * gprofng/libcollector/Makefile.am: Rename lib_LTLIBRARIES to
+ pkglib_LTLIBRARIES. Add install-data-local.
+ * gprofng/src/Makefile.am: Likewise.
+ * gprofng/src/envsets.cc (putenv_libcollector_ld_misc): New location of
+ the gprofng libraries.
+ * gprofng/configure.ac: Removed an unused GPROFNG_LIBDIR.
+ * gprofng/Makefile.am: Removed an unused GPROFNG_LIBDIR. Add
+ install-data-local.
+ * gprofng/configure: Regenerate.
+ * gprofng/Makefile.in: Likewise.
+ * gprofng/doc/Makefile.in: Likewise.
+ * gprofng/gp-display-htmllibcollector/Makefile.in: Likewise.
+ * gprofng/libcollector/Makefile.in: Likewise.
+ * gprofng/src/Makefile.in: Likewise.
+
+2022-03-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-21 Roland McGrath <mcgrathr@google.com>
+
+ gdb: Add missing #include in solib.h
+ The gdb_bfd_ref_ptr type is used in solib.h declarations.
+
+2022-03-21 Aaron Merey <amerey@redhat.com>
+
+ PR gdb/27570: missing support for debuginfod in core_target::build_file_mappings
+ Add debuginfod support to core_target::build_file_mappings and
+ locate_exec_from_corefile_build_id to enable the downloading of
+ missing executables and shared libraries referenced in core files.
+
+ Also add debuginfod support to solib_map_sections so that previously
+ downloaded shared libraries can be retrieved from the local debuginfod
+ cache.
+
+ When core file shared libraries are found locally, verify that their
+ build-ids match the corresponding build-ids found in the core file.
+ If there is a mismatch, attempt to query debuginfod for the correct
+ build and print a warning if unsuccessful:
+
+ warning: Build-id of /lib64/libc.so.6 does not match core file.
+
+ Also disable debuginfod when gcore invokes gdb. Debuginfo is not
+ needed for core file generation so debuginfod queries will slow down
+ gcore unnecessarily.
+
+2022-03-21 Aaron Merey <amerey@redhat.com>
+
+ gdb: Add soname to build-id mapping for core files
+ Since commit aa2d5a422 gdb has been able to read executable and shared
+ library build-ids within core files.
+
+ Expand this functionality so that each core file bfd maintains a map of
+ soname to build-id for each shared library referenced in the core file.
+
+ This feature may be used to verify that gdb has found the correct shared
+ libraries for core files and to facilitate downloading shared libaries via
+ debuginfod.
+
+2022-03-21 Pedro Alves <pedro@palves.net>
+
+ Watchpoint followed by catchpoint misreports watchpoint (PR gdb/28621)
+ If GDB reports a watchpoint hit, and then the next event is not
+ TARGET_WAITKIND_STOPPED, but instead some event for which there's a
+ catchpoint, such that GDB calls bpstat_stop_status, GDB mistakenly
+ thinks the watchpoint triggered. Vis, using foll-fork.c:
+
+ (gdb) awatch v
+ Hardware access (read/write) watchpoint 2: v
+ (gdb) catch fork
+ Catchpoint 3 (fork)
+ (gdb) c
+ Continuing.
+
+ Hardware access (read/write) watchpoint 2: v
+
+ Old value = 0
+ New value = 5
+ main () at gdb.base/foll-fork.c:16
+ 16 pid = fork ();
+ (gdb)
+ Continuing.
+
+ Hardware access (read/write) watchpoint 2: v <<<<
+ <<<< these lines are spurious
+ Value = 5 <<<<
+
+ Catchpoint 3 (forked process 1712369), arch_fork (ctid=0x7ffff7fa4810) at arch-fork.h:49
+ 49 arch-fork.h: No such file or directory.
+ (gdb)
+
+ The problem is that when we handle the fork event, nothing called
+ watchpoints_triggered before calling bpstat_stop_status. Thus, each
+ watchpoint's watchpoint_triggered field was still set to
+ watch_triggered_yes from the previous (real) watchpoint stop.
+ watchpoint_triggered is only current called in the handle_signal_stop
+ path, when handling TARGET_WAITKIND_STOPPED.
+
+ This fixes it by adding watchpoint_triggered calls in the other events
+ paths that call bpstat_stop_status. But instead of adding them
+ explicitly, it adds a new function bpstat_stop_status_nowatch that
+ wraps bpstat_stop_status and calls watchpoint_triggered, and then
+ replaces most calls to bpstat_stop_status with calls to
+ bpstat_stop_status_nowatch.
+
+ This required constifying watchpoints_triggered.
+
+ New test included, which fails without the fix.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28621
+
+ Change-Id: I282b38c2eee428d25319af3bc842f9feafed461c
+
+2022-03-21 Pedro Alves <pedro@palves.net>
+
+ gdbserver: Fixup previous patch
+ The previous prepare_resume_reply change missed updating the 'buf'
+ reference that overwrites the 'T', so if 'buf' was advanced, we'd
+ still overwrite the wrong character. This fixes it.
+
+ Change-Id: Ia8ce433366b85af4e268c1c49e7b447da3130a4d
+
+2022-03-21 Pedro Alves <pedro@palves.net>
+
+ gdbserver: Fix incorrect assertion
+ While playing with adding a new event kind, I noticed that
+ prepare_resume_reply TARGET_WAITKIND_FORKED, etc. advance 'buf', so if
+ we force-disable the T packet, we'd fail the *buf == 'T' assertion.
+
+ Fix it by tweaking the assertion to always look at the beginning of
+ the buffer.
+
+ Change-Id: I8c38e32353db115edcde418b3b1e8ba12343c22b
+
+2022-03-21 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: re-generate config.in
+ I'm getting this diff when running `autoreconf -vf`.
+
+ Change-Id: Id5f009d0f0481935c1ee9df5332cb4bf45fbd32d
+
+2022-03-21 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/x86: handle stap probe arguments in xmm registers
+ On x86 machines with xmm register, and with recent versions of
+ systemtap (and gcc?), it can occur that stap probe arguments will be
+ placed into xmm registers.
+
+ I notice this happening on a current Fedora Rawhide install with the
+ following package versions installed:
+
+ $ rpm -q glibc systemtap gcc
+ glibc-2.35.9000-10.fc37.x86_64
+ systemtap-4.7~pre16468670g9f253544-1.fc37.x86_64
+ gcc-12.0.1-0.12.fc37.x86_64
+
+ If I check the probe data in libc, I see this:
+
+ $ readelf -n /lib64/libc.so.6
+ ...
+ stapsdt 0x0000004d NT_STAPSDT (SystemTap probe descriptors)
+ Provider: libc
+ Name: pthread_start
+ Location: 0x0000000000090ac3, Base: 0x00000000001c65c4, Semaphore: 0x0000000000000000
+ Arguments: 8@%xmm1 8@1600(%rbx) 8@1608(%rbx)
+ stapsdt 0x00000050 NT_STAPSDT (SystemTap probe descriptors)
+ Provider: libc
+ Name: pthread_create
+ Location: 0x00000000000912f1, Base: 0x00000000001c65c4, Semaphore: 0x0000000000000000
+ Arguments: 8@%xmm1 8@%r13 8@8(%rsp) 8@16(%rsp)
+ ...
+
+ Notice that for both of these probes, the first argument is a uint64_t
+ stored in the xmm1 register.
+
+ Unfortunately, if I try to use this probe within GDB, then I can't
+ view the first argument. Here's an example session:
+
+ $ gdb $(which gdb)
+ (gdb) start
+ ...
+ (gdb) info probes stap libc pthread_create
+ ...
+ (gdb) break *0x00007ffff729e2f1 # Use address of probe.
+ (gdb) continue
+ ...
+ (gdb) p $_probe_arg0
+ Invalid cast.
+
+ What's going wrong? If I re-run my session, but this time use 'set
+ debug stap-expression 1', this is what I see:
+
+ (gdb) set debug stap-expression 1
+ (gdb) p $_probe_arg0
+ Operation: UNOP_CAST
+ Operation: OP_REGISTER
+ String: xmm1
+ Type: uint64_t
+ Operation: UNOP_CAST
+ Operation: OP_REGISTER
+ String: r13
+ Type: uint64_t
+ Operation: UNOP_CAST
+ Operation: UNOP_IND
+ Operation: UNOP_CAST
+ Operation: BINOP_ADD
+ Operation: OP_LONG
+ Type: long
+ Constant: 0x0000000000000008
+ Operation: OP_REGISTER
+ String: rsp
+ Type: uint64_t *
+ Type: uint64_t
+ Operation: UNOP_CAST
+ Operation: UNOP_IND
+ Operation: UNOP_CAST
+ Operation: BINOP_ADD
+ Operation: OP_LONG
+ Type: long
+ Constant: 0x0000000000000010
+ Operation: OP_REGISTER
+ String: rsp
+ Type: uint64_t *
+ Type: uint64_t
+ Invalid cast.
+ (gdb)
+
+ The important bit is this:
+
+ Operation: UNOP_CAST
+ Operation: OP_REGISTER
+ String: xmm1
+ Type: uint64_t
+
+ Which is where we cast the xmm1 register to uint64_t. And the final
+ piece of the puzzle is:
+
+ (gdb) ptype $xmm1
+ type = union vec128 {
+ v8bf16 v8_bfloat16;
+ v4f v4_float;
+ v2d v2_double;
+ v16i8 v16_int8;
+ v8i16 v8_int16;
+ v4i32 v4_int32;
+ v2i64 v2_int64;
+ uint128_t uint128;
+ }
+
+ So, we are attempting to cast a union type to a scalar type, which is
+ not supporting in C/C++, and as a consequence GDB's expression
+ evaluator throws an error when we attempt to do this.
+
+ The first approach I considered for solving this problem was to try
+ and make use of gdbarch_stap_adjust_register. We already have a
+ gdbarch method (gdbarch_stap_adjust_register) that allows us to tweak
+ the name of the register that we access. Currently only x86
+ architectures use this to transform things like ax to eax in some
+ cases.
+
+ I wondered, what if we change gdbarch_stap_adjust_register to do more
+ than just change the register names? What if this method instead
+ became gdbarch_stap_read_register. This new method would return a
+ operation_up, and would take the register name, and the type we are
+ trying to read from the register, and return the operation that
+ actually reads the register.
+
+ The default implementation of this method would just use
+ user_reg_map_name_to_regnum, and then create a register_operation,
+ like we already do in stap_parse_register_operand. But, for x86
+ architectures this method would fist possibly adjust the register
+ name, then do the default action to read the register. Finally, for
+ x86 this method would spot when we were accessing an xmm register,
+ and, based on the type being pulled from the register, would extract
+ the correct field from the union.
+
+ The benefit of this approach is that it would work with the expression
+ types that GDB currently supports. The draw back would be that this
+ approach would not be very generic. We'd need code to handle each
+ sub-field size with an xmm register. If other architectures started
+ using vector registers for probe arguments, those architectures would
+ have to create their own gdbarch_stap_read_register method. And
+ finally, the type of the xmm registers comes from the type defined in
+ the target description, there's a risk that GDB might end up
+ hard-coding the names of type sub-fields, then if a target uses a
+ different target description, with different field names for xmm
+ registers, the stap probes would stop working.
+
+ And so, based on all the above draw backs, I rejected this first
+ approach.
+
+ My second plan involves adding a new expression type to GDB called
+ unop_extract_operation. This new expression takes a value and a type,
+ during evaluation the value contents are fetched, and then a new value
+ is extracted from the value contents (based on type). This is similar
+ to the following C expression:
+
+ result_value = *((output_type *) &input_value);
+
+ Obviously we can't actually build this expression in this case, as the
+ input_value is in a register, but hopefully the above makes it clearer
+ what I'm trying to do.
+
+ The benefit of the new expression approach is that this code can be
+ shared across all architectures, and it doesn't care about sub-field
+ names within the union type.
+
+ The draw-backs that I see are potential future problems if arguments
+ are not stored within the least significant bytes of the register.
+ However if/when that becomes an issue we can adapt the
+ gdbarch_stap_read_register approach to allow architectures to control
+ how a value is extracted.
+
+ For testing, I've extended the existing gdb.base/stap-probe.exp test
+ to include a function that tries to force an argument into an xmm
+ register. Obviously, that will only work on a x86 target, so I've
+ guarded the new function with an appropriate GCC define. In the exp
+ script we use readelf to check if the probe exists, and is using the
+ xmm register.
+
+ If the probe doesn't exist then the associated tests are skipped.
+
+ If the probe exists, put isn't using the xmm register (which will
+ depend on systemtap/gcc versions), then again, the tests are skipped.
+
+ Otherwise, we can run the test. I think the cost of running readelf
+ is pretty low, so I don't feel too bad making all the non-xmm targets
+ running this step.
+
+ I found that on a Fedora 35 install, with these packages installed, I
+ was able to run this test and have the probe argument be placed in an
+ xmm register:
+
+ $ rpm -q systemtap gcc glibc
+ systemtap-4.6-4.fc35.x86_64
+ gcc-11.2.1-9.fc35.x86_64
+ glibc-2.34-7.fc35.x86_64
+
+ Finally, as this patch adds a new operation type, then I need to
+ consider how to generate an agent expression for the new operation
+ type.
+
+ I have kicked the can down the road a bit on this. In the function
+ stap_parse_register_operand, I only create a unop_extract_operation in
+ the case where the register type is non-scalar, this means that in
+ most cases I don't need to worry about generating an agent expression
+ at all.
+
+ In the xmm register case, when an unop_extract_operation will be
+ created, I have sketched out how the agent expression could be
+ handled, however, this code is currently not reached. When we try to
+ generate the agent expression to place the xmm register on the stack,
+ GDB hits this error:
+
+ (gdb) trace -probe-stap test:xmmreg
+ Tracepoint 1 at 0x401166
+ (gdb) actions
+ Enter actions for tracepoint 1, one per line.
+ End with a line saying just "end".
+ >collect $_probe_arg0
+ Value not scalar: cannot be an rvalue.
+
+ This is because GDB doesn't currently support placing non-scalar types
+ on the agent expression evaluation stack. Solving this is clearly
+ related to the original problem, but feels a bit like a second
+ problem. I'd like to get feedback on whether my approach to solving
+ the original problem is acceptable or not before I start looking at
+ how to handle xmm registers within agent expressions.
+
+2022-03-21 Steiner H Gunderson <steinar+sourceware@gunderson.no>
+
+ Reduce O(n2) performance overhead when parsing DWARF unit information.
+ PR 28978
+ * dwarf2.c (scan_unit_for_symbols): When performing second pass,
+ check to see if the function or variable being processed is the
+ same as the previous one.
+
+2022-03-21 Jan Beulich <jbeulich@suse.com>
+
+ x86: don't suppress overflow diagnostics in x32 mode
+ Unlike in 64-bit mode, where values wrap at the 64-bit boundary anyway,
+ there's no wrapping at the 32-bit boundary here, and hence overflow
+ detection shouldn't be suppressed just because rela relocations are
+ going to be used.
+
+ The extra check against NO_RELOC is actually a result of an ilp32 test
+ otherwise failing. But thinking about it, reporting overflows for
+ not-really-relocations (typically because of earlier errors) makes
+ little sense in general. Perhaps this should even be extended to non-
+ 64-bit modes.
+
+2022-03-21 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/testsuite: reformat gdb.python/pretty-print-call-by-hand.py
+ Run black on the file.
+
+ Change-Id: Ifb576137fb7158a0227173f61c1202f0695b3685
+
+2022-03-21 Bruno Larsen <blarsen@redhat.com>
+
+ [gdb/testsuite] test a function call by hand from pretty printer
+ The test case added here is testing the bug gdb/28856, where calling a
+ function by hand from a pretty printer makes GDB crash. There are 6
+ mechanisms to trigger this crash in the current test, using the commands
+ backtrace, up, down, finish, step and continue. Since the failure happens
+ because of use-after-free (more details below) the tests will always
+ have a chance of passing through sheer luck, but anecdotally they seem
+ to fail all of the time.
+
+ The reason GDB is crashing is a use-after-free problem. The above
+ mentioned functions save a pointer to the current frame's information,
+ then calls the pretty printer, and uses the saved pointer for different
+ reasons, depending on the function. The issue happens because
+ call_function_by_hand needs to reset the obstack to get the current
+ frame, invalidating the saved pointer.
+
+2022-03-21 Pedro Alves <pedro@palves.net>
+
+ gdb/testsuite: Installed-GDB testing & data-directory
+ In testsuite/README, we suggest that you can run the testsuite against
+ some other GDB binary by using:
+
+ make check RUNTESTFLAGS=GDB=/usr/bin/gdb
+
+ However, that example isn't fully correct, because with that command
+ line, the testsuite will still pass
+
+ -data-directory=[pwd]/../data-directory
+
+ to /usr/bin/gdb, like e.g.:
+
+ ...
+ builtin_spawn /usr/bin/gdb -nw -nx -data-directory /home/pedro/gdb/build/gdb/testsuite/../data-directory -iex set height 0 -iex set width 0
+ ...
+
+ while if you're testing an installed GDB (the system GDB being the
+ most usual scenario), then you should normally let it use its own
+ configured directory, not the just-built GDB's data directory.
+
+ This commit improves the status quo with the following two changes:
+
+ - if the user specifies GDB on the command line, then by default,
+ don't start GDB with the -data-directory command line option.
+ I.e., let the tested GDB use its own configured data directory.
+
+ - let the user override the data directory, via a new
+ GDB_DATA_DIRECTORY global. This replaces the existing
+ BUILD_DATA_DIRECTORY variable in testsuite/lib/gdb.exp, which
+ wasn't overridable, and was a bit misnamed for the new purpose.
+
+ So after this, the following commands I believe behave intuitively:
+
+ # Test the non-installed GDB in some build dir:
+
+ make check \
+ RUNTESTFLAGS="GDB=/path/to/other/build/gdb \
+ GDB_DATA_DIRECTORY=/path/to/other/build/gdb/data-directory"
+
+ # Test the GDB installed in some prefix:
+
+ make check \
+ RUNTESTFLAGS="GDB=/opt/gdb/bin/gdb"
+
+ # Test the built GDB with some alternative data directory, e.g., the
+ system GDB's data directory:
+
+ make check \
+ RUNTESTFLAGS="GDB_DATA_DIRECTORY=/usr/share/gdb"
+
+ Change-Id: Icdc21c85219155d9564a9900961997e6624b78fb
+
+2022-03-21 Nick Clifton <nickc@redhat.com>
+
+ z80 assembler: Fix new unexpected overflow warning in v2.37
+ PR 28791
+ * config/tc-z80.c (emit_data_val): Do not warn about overlarge
+ constants generated by bit manipulation operators.
+ * testsuite/gas/z80/pr28791.s: New test source file.
+ * testsuite/gas/z80/pr28791.d: New test driver file.
+
+2022-03-21 Andreas Schwab <schwab@linux-m68k.org>
+
+ Add support for readline 8.2
+ In readline 8.2 the type of rl_completer_word_break_characters changed to
+ include const.
+
+2022-03-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-20 Andreas Schwab <schwab@linux-m68k.org>
+
+ RISC-V: Fix misplaced @end table
+ Move the csr-check and arch items inside the table for the .option directive.
+
+2022-03-20 Alan Modra <amodra@gmail.com>
+
+ PR28979, internal error in demand_empty_rest_of_line
+ The change in read_a_source_file prevents the particular testcase in
+ the PR from triggering the assertion in demand_empty_rest_of_line.
+ I've also removed the assertion. Nothing much goes wrong with gas if
+ something else triggers it, so it's not worthy of an abort.
+
+ I've also changed my previous patch to ignore_rest_of_line to allow
+ that function to increment input_line_pointer past buffer_limit, like
+ demand_empty_rest_of_line: The two functions ought to behave the
+ same in that respect. Finally, demand_empty_rest_of_line gets a
+ little hardening to prevent accesses past buffer_limit plus one.
+
+ PR 28979
+ * read.c (read_a_source_file): Calculate known size for sbuf
+ rather than calling strlen.
+ (demand_empty_rest_of_line): Remove "know" check. Expand comment.
+ Don't dereference input_line_pointer when past buffer_limit.
+ (ignore_rest_of_line): Allow input_line_pointer to increment to
+ buffer_limit plus one. Expand comment.
+
+2022-03-20 Joel Brobecker <brobecker@adacore.com>
+
+ Update gdb/NEWS after GDB 12 branch creation.
+ This commit a new section for the next release branch, and renames
+ the section of the current branch, now that it has been cut.
+
+2022-03-20 Joel Brobecker <brobecker@adacore.com>
+
+ Bump version to 13.0.50.DATE-git.
+ Now that the GDB 12 branch has been created,
+ this commit bumps the version number in gdb/version.in to
+ 13.0.50.DATE-git
+
+ For the record, the GDB 12 branch was created
+ from commit 2be64de603f8b3ae359d2d3fbf5db0e79869f32b.
+
+ Also, as a result of the version bump, the following changes
+ have been made in gdb/testsuite:
+
+ * gdb.base/default.exp: Change $_gdb_major to 13.
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ ld:LoongArch: Add test cases to adapt to LoongArch32 and LoongArch64
+ ld/testsuite/ld-loongarch-elf
+
+ * ld-loongarch-elf.exp: Test LoongArch32 and LoongArch64 testcases respectively.
+ * jmp_op.d: Fix bug in test LoongArch32.
+ * disas-jirl-32.d: New test case for LoongArch32.
+ * disas-jirl-32.s: New test case for LoongArch32.
+ * disas-jirl.d: Skip test case LoongArch32.
+ * macro_op_32.d: New test case for LoongArch32.
+ * macro_op_32.s: New test case for LoongArch32.
+ * macro_op.d: Skip test case LoongArch32.
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ gas:LoongArch: Fix "make check" pr21884 fail in LoongArch32.
+ gas/config/
+ * tc-loongarch.c: Add function to select target mach.
+ * tc-loongarch.h: Define macro TARGET_MACH.
+
+ ld: loongarch: Skip unsupport test cases.
+ ld/testsuite/ld-elf/
+ * eh5.d Skip loongarch64 target.
+ * pr21884.d Skip loongarch* targets.
+ * pr26936.d Skip loongarch* targets.
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch: Fix LD check fails.
+ Some test cases about ifunc.
+
+ bfd/
+ * elfnn-loongarch.c
+ * elfxx-loongarch.h
+
+ === ld Summary ===
+ of expected passes 1430
+ of expected failures 11
+ of untested testcases 1
+ of unsupported tests 154
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch: Update ABI eflag in elf header.
+ Update LoongArch ABI eflag in elf header.
+ ilp32s 0x5
+ ilp32f 0x6
+ ilp32d 0x7
+ lp64s 0x1
+ lp64f 0x2
+ lp64d 0x3
+
+ bfd/
+ * elfnn-loongarch.c Check object flags while ld.
+
+ gas/
+ * tc-loongarch.c Write eflag to elf header.
+
+ include/elf
+ * loongarch.h Define ABI number.
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ gas:LoongArch: Fix wrong line number in .debug_line
+ The dwarf2_emit_insn() can create debuginfo of line. But it is called
+ too late in append_fixp_and_insn. It causes extra offs when debuginfo
+ of line sets address.
+
+ gas/config/
+ * tc-loongarch.c
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ gas:LoongArch: Fix segment error in compilation due to too long symbol name.
+ Change "char buffer[8192];" into "char *buffer =
+ (char *) malloc(1000 + 6 * len_str);" in function
+ loongarch_expand_macro_with_format_map.
+
+ gas/
+ * config/tc-loongarch.c
+
+ include/
+ * opcode/loongarch.h
+
+ opcodes/
+ * loongarch-coder.c
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch: Use functions instead of magic numbers.
+ Replace the magic numbers in gas(tc-loongarch.c) and
+ bfd(elfnn-loongarch.c) with the functions defined in
+ the howto table(elfxx-loongarch.c).
+
+ gas/
+ * config/tc-loongarch.c: use functions.
+
+ bfd/
+ * elfnn-loongarch.c: use functions.
+ * elfxx-loongarch.c: define functions.
+ * elfxx-loongarch.h
+
+2022-03-20 liuzhensong <liuzhensong@loongson.cn>
+
+ ubsan: loongarch : signed integer shift overflow.
+ opcodes/
+ * loongarch-coder.c :
+ int32_t ret = 0;
+ ret <<= sizeof (ret) * 8 - len;
+ ret >>= sizeof (ret) * 8 - len;
+ ...
+ Avoid ubsan warning.
+
+2022-03-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-19 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/python: remove gdb._mi_commands dict
+ The motivation for this patch is the fact that py-micmd.c doesn't build
+ with Python 2, due to PyDict_GetItemWithError being a Python 3-only
+ function:
+
+ CXX python/py-micmd.o
+ /home/smarchi/src/binutils-gdb/gdb/python/py-micmd.c: In function ‘int micmdpy_uninstall_command(micmdpy_object*)’:
+ /home/smarchi/src/binutils-gdb/gdb/python/py-micmd.c:430:20: error: ‘PyDict_GetItemWithError’ was not declared in this scope; did you mean ‘PyDict_GetItemString’?
+ 430 | PyObject *curr = PyDict_GetItemWithError (mi_cmd_dict.get (),
+ | ^~~~~~~~~~~~~~~~~~~~~~~
+ | PyDict_GetItemString
+
+ A first solution to fix this would be to try to replace
+ PyDict_GetItemWithError equivalent Python 2 code. But I looked at why
+ we are doing this in the first place: it is to maintain the
+ `gdb._mi_commands` Python dictionary that we use as a `name ->
+ gdb.MICommand object` map. Since the `gdb._mi_commands` dictionary is
+ never actually used in Python, it seems like a lot of trouble to use a
+ Python object for this.
+
+ My first idea was to replace it with a C++ map
+ (std::unordered_map<std::string, gdbpy_ref<micmdpy_object>>). While
+ implementing this, I realized we don't really need this map at all. The
+ mi_command_py objects registered in the main MI command table can own
+ their backing micmdpy_object (that's a gdb.MICommand, but seen from the
+ C++ code). To know whether an mi_command is an mi_command_py, we can
+ use a dynamic cast. Since there's one less data structure to maintain,
+ there are less chances of messing things up.
+
+ - Change mi_command_py::m_pyobj to a gdbpy_ref, the mi_command_py is
+ now what keeps the MICommand alive.
+ - Set micmdpy_object::mi_command in the constructor of mi_command_py.
+ If mi_command_py manages setting/clearing that field in
+ swap_python_object, I think it makes sense that it also takes care of
+ setting it initially.
+ - Move a bunch of checks from micmdpy_install_command to
+ swap_python_object, and make them gdb_asserts.
+ - In micmdpy_install_command, start by doing an mi_cmd_lookup. This is
+ needed to know whether there's a Python MI command already registered
+ with that name. But we can already tell if there's a non-Python
+ command registered with that name. Return an error if that happens,
+ rather than waiting for insert_mi_cmd_entry to fail. Change the
+ error message to "name is already in use" rather than "may already be
+ in use", since it's more precise.
+
+ I asked Andrew about the original intent of using a Python dictionary
+ object to hold the command objects. The reason was to make sure the
+ objects get destroyed when the Python runtime gets finalized, not later.
+ Holding the objects in global C++ data structures and not doing anything
+ more means that the held Python objects will be decref'd after the
+ Python interpreter has been finalized. That's not desirable. I tried
+ it and it indeed segfaults.
+
+ Handle this by adding a gdbpy_finalize_micommands function called in
+ finalize_python. This is the mirror of gdbpy_initialize_micommands
+ called in do_start_initialization. In there, delete all Python MI
+ commands. I think it makes sense to do it this way: if it was somehow
+ possible to unload Python support from GDB in the middle of a session
+ we'd want to unregister any Python MI command. Otherwise, these MI
+ commands would be backed with a stale PyObject or simply nothing.
+
+ Delete tests that were related to `gdb._mi_commands`.
+
+ Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
+ Change-Id: I060d5ebc7a096c67487998a8a4ca1e8e56f12cd3
+
+2022-03-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-18 Pedro Alves <pedro@palves.net>
+
+ Fix crash with stepi, no debug info, and "set debug infrun 1"
+ A stepi in a function without debug info with "set debug infrun 1"
+ crashes GDB since commit c8353d682f69 (gdb/infrun: some extra infrun
+ debug print statements), due to a reference to
+ "tp->current_symtab->filename" when tp->current_symtab is null.
+
+ This commit adds the missing null check. The output in this case
+ becomes:
+
+ [infrun] set_step_info: symtab = <null>, line = 0, step_frame_id = {stack=0x7fffffffd980,code=0x0000000000456c30,!special}, step_stack_frame_id = {stack=0x7fffffffd980,code=0x0000000000456c30,!special}
+
+ Change-Id: I5171a9d222bc7e15b9dba2feaba7d55c7acd99f8
+
+2022-03-18 Tom Tromey <tromey@adacore.com>
+
+ Implement gdbarch_stack_frame_destroyed_p for aarch64
+ The internal AdaCore testsuite has a test that checks that an
+ out-of-scope watchpoint is deleted. This fails on some aarch64
+ configurations, reporting an extra stop:
+
+ (gdb) continue
+ Continuing.
+
+ Thread 3 hit Watchpoint 2: result
+
+ Old value = 64
+ New value = 0
+ 0x0000000040021648 in pck.get_val (seed=0, off_by_one=false) at [...]/pck.adb:13
+ 13 end Get_Val;
+
+ I believe what is happening here is that the variable is stored at:
+
+ <efa> DW_AT_location : 2 byte block: 91 7c (DW_OP_fbreg: -4)
+
+ and the extra stop is reported just before a return, when the ldp
+ instruction is executed:
+
+ 0x0000000040021644 <+204>: ldp x29, x30, [sp], #48
+ 0x0000000040021648 <+208>: ret
+
+ This instruction modifies the frame base calculation, and so the test
+ picks up whatever memory is pointed to in the callee frame.
+
+ Implementing the gdbarch hook gdbarch_stack_frame_destroyed_p fixes
+ this problem.
+
+ As usual with this sort of patch, it has passed internal testing, but
+ I don't have a good way to try it with dejagnu. So, I don't know
+ whether some existing test covers this. I suspect there must be one,
+ but it's also worth noting that this test passes for aarch64 in some
+ configurations -- I don't know what causes one to fail and another to
+ succeed.
+
+2022-03-18 Nick Clifton <nickc@redhat.com>
+
+ Fix Build issues due to patch "gprofng: a new GNU profiler"
+ Find and fix more places where clock_gettime() and CLOCK_MONOTONIC_RAW are used.
+
+2022-03-18 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: run black to format some Python files
+ Seems like some leftovers from previous commits.
+
+ Change-Id: I7155ccdf7a4fef83bcb3d60320252c3628efdb83
+
+2022-03-18 Viorel Preoteasa <viorel.preoteasa@gmail.com>
+
+ Fix ld-arm bug in encoding of blx calls jumping from thumb to arm instructions
+ PR 28924
+ * elf32-arm.c (THM_MAX_FWD_BRANCH_OFFSET): Fix definition.
+ (THM2_MAX_FWD_BRANCH_OFFSET): Likewise.
+
+2022-03-18 Jan Beulich <jbeulich@suse.com>
+
+ x86: also fold remaining multi-vector-size shift insns
+ By slightly relaxing the checking in operand_type_register_match() we
+ can fold the vector shift insns with an XMM source as well. While
+ strictly speaking an overlap in just one size (see the code comment) is
+ not enough (both operands could have multiple sizes with just a single
+ common one), this is good enough for all templates we have, or which
+ could sensibly / usefully appear (within the scope of the present
+ operand matching model).
+
+ Tightening this a little would be possible, but would require broadcast
+ related information to be passed into the function.
+
+2022-03-18 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop stray CheckRegSize from VEXTRACT{F,I}32X4
+ They have only a single operand allowing multiple sizes, hence there are
+ no pairs of operands to check for consistent size.
+
+ x86: fold certain AVX2 templates into their AVX counterparts
+ Like for AVX512VL we can make the handling of operand sizes a little
+ more flexible to allow reducing the number of templates we have.
+
+2022-03-18 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Cache management instructions
+ This commit adds 'Zicbom' / 'Zicboz' instructions.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_multi_subset_supports): Add handling for
+ new instruction classes.
+
+ include/ChangeLog:
+
+ * opcode/riscv-opc.h (MATCH_CBO_CLEAN, MASK_CBO_CLEAN,
+ MATCH_CBO_FLUSH, MASK_CBO_FLUSH, MATCH_CBO_INVAL,
+ MASK_CBO_INVAL, MATCH_CBO_ZERO, MASK_CBO_ZERO): New macros.
+ * opcode/riscv.h (enum riscv_insn_class): Add new instruction
+ classes INSN_CLASS_ZICBOM and INSN_CLASS_ZICBOZ.
+
+ opcodes/ChangeLog:
+
+ * riscv-opc.c (riscv_opcodes): Add cache-block management
+ instructions.
+
+2022-03-18 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Prefetch hint instructions and operand set
+ This commit adds 'Zicbop' hint instructions.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_multi_subset_supports): Add handling for
+ new instruction class.
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c (riscv_ip): Add handling for new operand
+ type 'f' (32-byte aligned pseudo S-type immediate for prefetch
+ hints).
+ (validate_riscv_insn): Likewise.
+
+ include/ChangeLog:
+
+ * opcode/riscv-opc.h (MATCH_PREFETCH_I, MASK_PREFETCH_I,
+ MATCH_PREFETCH_R, MASK_PREFETCH_R, MATCH_PREFETCH_W,
+ MASK_PREFETCH_W): New macros.
+ * opcode/riscv.h (enum riscv_insn_class): Add new instruction
+ class INSN_CLASS_ZICBOP.
+
+ opcodes/ChangeLog:
+
+ * riscv-dis.c (print_insn_args): Add handling for new operand
+ type.
+ * riscv-opc.c (riscv_opcodes): Add prefetch hint instructions.
+
+2022-03-18 Alan Modra <amodra@gmail.com>
+
+ PR28977 tc-i386.c internal error in parse_register
+ PR 28977
+ * config/tc-i386.c (parse_register): Handle X_op not O_register
+ as for a non-reg_section symbol. Simplify array bounds check.
+
+2022-03-18 Alan Modra <amodra@gmail.com>
+
+ Tidy gas current_frame before exit
+ Releases some obstack memory on an error path.
+
+ * cond.c (cond_finish_check): Call cond_exit_macro.
+
+2022-03-18 Alan Modra <amodra@gmail.com>
+
+ ubsan: logical_input_line signed integer overflow
+ To avoid a completely useless fuzzing ubsan "bug" report, I decided to
+ make logical_input_line unsigned.
+
+ * input-scrub.c (logical_input_line): Make unsigned.
+ (struct input_save): Here too.
+ (input_scrub_reinit, input_scrub_close, bump_line_counters),
+ (as_where): Adjust to suit.
+
+2022-03-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-17 H.J. Lu <hjl.tools@gmail.com>
+
+ gprofng: Skip jsynprog with a broken javac
+ On CET enabled Linux/x86-64 machines, one can get
+
+ $ javac simple.java
+ Error: dl failure on line 894
+ Error: failed /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-6.fc35.x86_64/jre/lib/amd64/server/libjvm.so, because /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-6.fc35.x86_64/jre/lib/amd64/server/libjvm.so: rebuild shared object with SHSTK support enabled
+
+ Set GPROFNG_BROKEN_JAVAC to "yes" only with a broken javac and skip the
+ jsynprog test with a broken javac.
+
+ PR gprofng/28965
+ * Makefile.am (GPROFNG_BROKEN_JAVAC): New.
+ (check-DEJAGNU): Pass GPROFNG_BROKEN_JAVAC to runtest.
+ * configure.ac (GPROFNG_BROKEN_JAVAC): New AC_SUBST. Set to yes
+ with a broken javac.
+ * Makefile.in: Regenerate.
+ * configure: Likewise.
+ * testsuite/gprofng.display/display.exp: Skip jsynprog with a
+ broken javac.
+
+2022-03-17 John Baldwin <jhb@FreeBSD.org>
+
+ Remove fall throughs in core_target::xfer_partial.
+ The cases for TARGET_OBJECT_LIBRARIES and TARGET_OBJECT_LIBRARIES_AIX
+ can try to fetch different data objects (such as
+ TARGET_OBJECT_SIGNAL_INFO) if gdbarch methods for the requested data
+ aren't present. Return with TARGET_XFER_E_IO if the gdbarch method
+ isn't present instead.
+
+2022-03-17 Pedro Alves <pedro@palves.net>
+
+ gdb: Remove support for S+core
+ GCC removed support for score back in 2014 already. Back then, we
+ basically agreed about removing it from GDB too, but it ended up being
+ forgotten. See:
+
+ https://sourceware.org/pipermail/gdb/2014-October/044643.html
+
+ Following through this time around.
+
+ Change-Id: I5b25a1ff7bce7b150d6f90f4c34047fae4b1f8b4
+
+2022-03-17 Tom Tromey <tromey@adacore.com>
+
+ Add another test for Ada Wide_Wide_String
+ In an earlier patch, I had written that I wanted to add this test:
+
+ ptype Wide_Wide_String'("literal")
+
+ ... but that it failed with the distro GNAT. Further investigation
+ showed that it could be made to work by adding a function using
+ Wide_Wide_String to the program -- this caused the type to end up in
+ the debug info.
+
+ This patch adds the test. I'm checking this in.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ ubsan: Null dereference in parse_module
+ * vms-alpha.c (parse_module): Sanity check that DST__K_RTNBEG
+ has set module->func_table for DST__K_RTNEND. Check return
+ of bfd_zalloc.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ asan: Buffer overflow in evax_bfd_print_dst
+ With "name" a char*, the length at name[0] might be negative, escaping
+ buffer limit checks.
+
+ * vms-alpha.c (evax_bfd_print_dst): Make name an unsigned char*.
+ (evax_bfd_print_emh): Likewise.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ asan: Buffer overflow in som_set_reloc_info
+ * som.c (som_set_reloc_info): Add symcount parameter. Don't
+ access symbols past symcount. Don't access fixup past end_fixups.
+ (som_slurp_reloc_table): Adjust som_set_reloc_info calls.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ asan: use of uninitialized value in buffer_and_nest
+ More occurences of the same as commit d12b8d620c6a.
+
+ * macro.c (buffer_and_nest): Sanity check length in buffer
+ before calling strncasecmp.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ gprofng configure target tests
+ ${target} in configure.ac should be the canonical target, so that for
+ example, someone configuring with --target=x86_64-linux will match
+ x86_64-*-linux*.
+
+ * configure.ac: Invoke AC_CANONICAL_TARGET.
+ * libcollector/configure.ac: Likewise.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * doc/Makefile.in: Regenerate.
+ * gp-display-html/Makefile.in: Regenerate.
+ * libcollector/Makefile.in: Regenerate.
+ * libcollector/configure: Regenerate.
+ * src/Makefile.in: Regenerate.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ Re: asan: buffer overflow in peXXigen.c
+ In the process of fixing a buffer overflow in commit fe69d4fcf0194a,
+ I managed to introduce a fairly obvious NULL pointer dereference..
+
+ * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Don't
+ segfault on not finding section. Wrap overlong lines.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ asan: buffer overflows after calling ignore_rest_of_line
+ operand() is not a place that should be calling ignore_rest_of_line.
+ ignore_rest_of_line shouldn't increment input_line_pointer if already
+ at buffer limit.
+
+ * expr.c (operand): Don't call ignore_rest_of_line.
+ * read.c (s_mri_common): Likewise.
+ (ignore_rest_of_line): Don't increment input_line_pointer if
+ already at buffer_limit.
+
+2022-03-17 Alan Modra <amodra@gmail.com>
+
+ Re: bfd: add AMDGCN architecture
+ * po/SRC-POTFILES.in: Regenerate.
+
+2022-03-17 Jan Beulich <jbeulich@suse.com>
+
+ x86: don't accept base architectures as extensions
+ The -march= intentions are quite clear: A base architecture may be
+ followed by any number of extensions. Accepting a base architecture in
+ place of an extension will at best result in confusion, as the first of
+ the two (or more) items specified simply would not take effect, due to
+ being overridden by the later one(s).
+
+2022-03-17 Jan Beulich <jbeulich@suse.com>
+
+ x86: never set i386_cpu_flags' "unused" field
+ Setting this field risks cpu_flags_all_zero() mistakenly returning
+ "false" when the object passed in was e.g. the result of ANDing together
+ two objects which had the bit set, or ANDNing together an object with
+ the field set and one with the field clear.
+
+ While there also avoid setting CpuNo64: Like Cpu64 this is driven
+ differently anyway and hence shouldn't be set anywhere by default.
+
+ Note that the moving of the two items in i386-gen.c's cpu_flags[] is
+ only for documentation purposes (and slight reducing of overhead), as
+ the fields are sorted anyway upon program start.
+
+2022-03-17 Jan Beulich <jbeulich@suse.com>
+
+ x86: unify CPU flag on/off processing
+ There's no need for the arbitrary special "unknown" token: Simply
+ recognize the leading ~ and process everything else the same, merely
+ recording whether to set individual fields to 1 or 0.
+
+ While there exclude CpuIAMCU from CPU_UNKNOWN_FLAGS - CPU_IAMCU_FLAGS
+ override cpu_arch_flags anyway when -march=iamcu is passed, and there's
+ no reason to have the stray flag set even if no insn actually is keyed
+ to it.
+
+2022-03-17 Jan Beulich <jbeulich@suse.com>
+
+ x86: add another IAMCU testcase
+ Now that {L,K}1OM support is gone, and with it the brokenness in
+ check_cpu_arch_compatible(), put in place a test making sure that only
+ extensions can be enabled via .arch for IAMCU, and that the base
+ architecture cannot be changed.
+
+ x86: drop L1OM/K1OM support from gas
+ This was only rudimentary support anyway; none of the sub-architecture
+ specific insns were ever supported.
+
+ x86: assorted IAMCU CPU checking fixes
+ The checks done by check_cpu_arch_compatible() were halfway sensible
+ only at the time where only L1OM support was there. The purpose,
+ however, has always been to prevent bad uses of .arch (turning off the
+ base CPU "feature" flag) while at the same time permitting extensions to
+ be enabled / disabled. In order to achieve this (and to prevent
+ regressions when L1OM and K1OM support are removed)
+ - set CpuIAMCU in CPU_IAMCU_FLAGS,
+ - adjust the IAMCU check in the function itself (the other two similarly
+ broken checks aren't adjusted as they're slated to be removed anyway),
+ - avoid calling the function for extentions (which would never have the
+ base "feature" flag set),
+ - add a new testcase actually exercising ".arch iamcu" (which would also
+ regress with the planned removal).
+
+2022-03-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-16 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: work around prompt corruption caused by bracketed-paste-mode
+ In this commit:
+
+ commit b4f26d541aa7224b70d363932e816e6e1a857633
+ Date: Tue Mar 2 13:42:37 2021 -0700
+
+ Import GNU Readline 8.1
+
+ We imported readline 8.1 into GDB. As a consequence bug PR cli/28833
+ was reported. This bug spotted that, when the user terminated GDB by
+ sending EOF (usually bound to Ctrl+d), the last prompt would become
+ corrupted. Here's what happens, the user is sat at a prompt like
+ this:
+
+ (gdb)
+
+ And then the user sends EOF (Ctrl+d), we now see this:
+
+ quit)
+ ... gdb terminates, and we return to the shell ...
+
+ Notice the 'quit' was printed over the prompt.
+
+ This problem is a result of readline 8.1 enabling bracketed paste mode
+ by default. This problem is present in readline 8.0 too, but in that
+ version of readline bracketed paste mode is off by default, so a user
+ will not see the bug unless they specifically enable the feature.
+
+ Bracketed paste mode is available in readline 7.0 too, but the bug
+ is not present in this version of readline, see below for why.
+
+ What causes this problem is how readline disables bracketed paste
+ mode. Bracketed paste mode is a terminal feature that is enabled and
+ disabled by readline emitting a specific escape sequence. The problem
+ for GDB is that the escape sequence to disable bracketed paste mode
+ includes a '\r' character at the end, see this thread for more
+ details:
+
+ https://lists.gnu.org/archive/html/bug-bash/2018-01/msg00097.html
+
+ The change to add the '\r' character to the escape sequence used to
+ disable bracketed paste mode was introduced between readline 7.0 and
+ readline 8.0, this is why the bug would not occur when using older
+ versions of readline (note: I don't know if its even possible to build
+ GDB using readline 7.0. That really isn't important, I'm just
+ documenting the history of this issue).
+
+ So, the escape sequence to disable bracketed paste mode is emitted
+ from the readline function rl_deprep_terminal, this is called after
+ the user has entered a complete command and pressed return, or, if the
+ user sends EOF.
+
+ However, these two cases are slightly different. In the first case,
+ when the user has entered a command and pressed return, the cursor
+ will have moved to the next, empty, line, before readline emits the
+ escape sequence to leave bracketed paste mode. The final '\r'
+ character moves the cursor back to the beginning of this empty line,
+ which is harmless.
+
+ For the EOF case though, this is not what happens. Instead, the
+ escape sequence to leave bracketed paste mode is emitted on the same
+ line as the prompt. The final '\r' moves the cursor back to the start
+ of the prompt line. This leaves us ready to override the prompt.
+
+ It is worth noting, that this is not the intended behaviour of
+ readline, in rl_deprep_terminal, readline should emit a '\n' character
+ when EOF is seen. However, due to a bug in readline this does not
+ happen (the _rl_eof_found flag is never set). This is the first
+ readline bug that effects GDB.
+
+ GDB prints the 'quit' message from command_line_handler (in
+ event-top.c), this function is called (indirectly) from readline to
+ process the complete command line, but also in the EOF case (in which
+ case the command line is set to nullptr). As this is part of the
+ callback to process a complete command, this is called after readline
+ has disabled bracketed paste mode (by calling rl_deprep_terminal).
+
+ And so, when bracketed paste mode is in use, rl_deprep_terminal leaves
+ the cursor at the start of the prompt line (in the EOF case), and
+ command_line_handler then prints 'quit', which overwrites the prompt.
+
+ The solution to this problem is to print the 'quit' message earlier,
+ before rl_deprep_terminal is called. This is easy to do by using the
+ rl_deprep_term_function hook. It is this hook that usually calls
+ rl_deprep_terminal, however, if we replace this with a new function,
+ we can print the 'quit' string, and then call rl_deprep_terminal
+ ourselves. This allows the 'quit' to be printed before
+ rl_deprep_terminal is called.
+
+ The problem here is that there is no way in rl_deprep_terminal to know
+ if readline is processing EOF or not, and as a result, we don't know
+ when we should print 'quit'. This is the second readline bug that
+ effects GDB.
+
+ Both of these readline issues are discussed in this thread:
+
+ https://lists.gnu.org/archive/html/bug-readline/2022-02/msg00021.html
+
+ The result of that thread was that readline was patched to address
+ both of these issues.
+
+ Now it should be easy to backport the readline fix to GDB's in tree
+ copy of readline, and then change GDB to make use of these fixes to
+ correctly print the 'quit' string.
+
+ However, we are just about to branch GDB 12, and there is concern from
+ some that changing readline this close to a new release is a risky
+ idea, see this thread:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-March/186391.html
+
+ So, this commit doesn't change readline at all. Instead, this commit
+ is the smallest possible GDB change in order to avoid the prompt
+ corruption.
+
+ In this commit I change GDB to print the 'quit' string on the line
+ after the prompt, but only when bracketed paste mode is on. This
+ avoids the overwriting issue, the user sees this:
+
+ (gdb)
+ quit
+ ... gdb terminates, and returns to the shell ...
+
+ This isn't ideal, but is better than the existing behaviour. After
+ GDB 12 has branched, we can backport the readline fix, and apply a
+ real fix to GDB.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28833
+
+2022-03-16 Fangrui Song <i@maskray.me>
+
+ objcopy --weaken-symbol: apply to STB_GNU_UNIQUE symbols
+ PR binutils/28926
+ * objcopy.c (filter_symbols): Apply weaken to STB_GNU_UNIQUE symbols
+ * NEWS: Mention feature.
+ * testsuite/binutils-all/objcopy.exp (objcopy_test_symbol_manipulation): New test.
+ * testsuite/binutils-all/weaken-gnu-unique.s: New.
+
+2022-03-16 Tom Tromey <tromey@adacore.com>
+
+ Reimplement array concatenation for Ada and D
+ This started as a patch to implement string concatenation for Ada.
+ However, while working on this, I looked at how this code could
+ possibly be called. It turns out there are only two users of
+ concat_operation: Ada and D. So, in addition to implementing this for
+ Ada, this patch rewrites value_concat, removing the odd "concatenate
+ or repeat" semantics, which were completely unused. As Ada and D both
+ seem to represent strings using TYPE_CODE_ARRAY, this removes the
+ TYPE_CODE_STRING code from there as well.
+
+ Remove eval_op_concat
+ eval_op_concat has code to search for an operator overload of
+ BINOP_CONCAT. However, the operator overloading code is specific to
+ C++, which does not have this operator. And,
+ binop_types_user_defined_p rejects this case right at the start, and
+ value_x_binop does not handle this case. I think this code has been
+ dead for a very long time. This patch removes it and hoists the
+ remaining call into concatenation::evaluate, removing eval_op_concat
+ entirely.
+
+2022-03-16 Tom Tromey <tromey@adacore.com>
+
+ Ada support for wide strings
+ This adds some basic support for Wide_String and Wide_Wide_String to
+ the Ada expression evaluator. In particular, a string literal may be
+ converted to a wide or wide-wide string depending on context.
+
+ The patch updates an existing test case. Note that another test,
+ namely something like:
+
+ ptype Wide_Wide_String'("literal")
+
+ ... would be nice to add, but when tested against a distro GNAT, this
+ did not work (probably due to lack of debuginfo); so, I haven't
+ included it here.
+
+2022-03-16 Tom Tromey <tromey@adacore.com>
+
+ Remove eval_op_string
+ eval_op_string is only used in a single place -- the implementation of
+ string_operation. This patch turns it into the
+ string_operation::evaluate method, removing a bit of extraneous code.
+
+2022-03-16 Carl Love <cel@us.ibm.com>
+
+ Powerpc fix for gdb.base/ending-run.exp
+ The last two tests in gdb.base/ending-run.exp case fail on Powerpc when the
+ system does not have the needed glibc debug-info files loaded. In this
+ case, gdb is not able to determine where execution stopped. This behavior
+ looks as follows for the test case:
+
+ The next to the last test does a next command when the program is stopped
+ at the closing bracket for main. The message printed is:
+
+ 0x00007ffff7d01524 in ?? () from /lib/powerpc64le-linux-gnu/libc.so.6
+
+ which fails to match any of the test_multiple options.
+
+ The test then does another next command. On Powerpc, the
+ message printed it:
+
+ Cannot find bounds of current function
+
+ The test fails as the output does not match any of the options for the
+ gdb_test_multiple.
+
+ I checked the behavior on Powerpc to see if this is typical.
+ I ran gdb on the following simple program as shown below.
+
+ #include <stdio.h>
+ int
+ main(void)
+ {
+ printf("Hello, world!\n");
+ return 0;
+ }
+
+ gdb ./hello_world
+ <snip the gdb start info>
+
+ Type "apropos word" to search for commands related to "word"...
+ Reading symbols from ./hello_world...
+ (No debugging symbols found in ./hello_world)
+ (gdb) break main
+ Breakpoint 1 at 0x818
+ (gdb) r
+
+ Starting program: /home/carll/hello_world
+ [Thread debugging using libthread_db enabled]
+ Using host libthread_db library "/lib/powerpc64le-linux-gnu/libthread_db.so.1".
+
+ Breakpoint 1, 0x0000000100000818 in main ()
+ (gdb) n
+ Single stepping until exit from function main,
+ which has no line number information.
+ Hello, world!
+ 0x00007ffff7d01524 in ?? () from /lib/powerpc64le-linux-gnu/libc.so.6
+ (gdb) n
+ Cannot find bounds of current function
+
+ So it would seem that the messages seen from the test case are
+ "normal" output for Powerpc when the debug-info is not available.
+
+ The following patch adds the output from Powerpc as an option
+ to the gdb_test_multiple statement, identifying the output as the expected
+ output on Powerpc without the needed debug-info files installed.
+
+ The patch has been tested on a Power 10 system and an Intel
+ 64-bit system. No additional regression failures were seen on
+ either platform.
+
+2022-03-16 Martin Storsj? <martin@martin.st>
+
+ dlltool: Use the output name as basis for deterministic temp prefixes
+ PR 28885
+ * dlltool.c (main): use imp_name rather than dll_name when
+ generating a temporary file name.
+
+2022-03-16 Jan Vrany <jan.vrany@labware.com>
+ Andrew Burgess <aburgess@redhat.com>
+
+ gdb/mi: consistently notify user when GDB/MI client uses -thread-select
+ GDB notifies users about user selected thread changes somewhat
+ inconsistently as mentioned on gdb-patches mailing list here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-February/185989.html
+
+ Consider GDB debugging a multi-threaded inferior with both CLI and GDB/MI
+ interfaces connected to separate terminals.
+
+ Assuming inferior is stopped and thread 1 is selected, when a thread
+ 2 is selected using '-thread-select 2' command on GDB/MI terminal:
+
+ -thread-select 2
+ ^done,new-thread-id="2",frame={level="0",addr="0x00005555555551cd",func="child_sub_function",args=[],file="/home/jv/Projects/gdb/users_jv_patches/gdb/testsuite/gdb.mi/user-selected-context-sync.c",fullname="/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c",line="30",arch="i386:x86-64"}
+ (gdb)
+
+ and on CLI terminal we get the notification (as expected):
+
+ [Switching to thread 2 (Thread 0x7ffff7daa640 (LWP 389659))]
+ #0 child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30
+ 30 volatile int dummy = 0;
+
+ However, now that thread 2 is selected, if thread 1 is selected
+ using 'thread-select --thread 1 1' command on GDB/MI terminal
+ terminal:
+
+ -thread-select --thread 1 1
+ ^done,new-thread-id="1",frame={level="0",addr="0x0000555555555294",func="main",args=[],file="/home/jv/Projects/gdb/users_jv_patches/gdb/testsuite/gdb.mi/user-selected-context-sync.c",fullname="/home/jv/Projects/gdb/users_jv_patches/gdb/testsuite/gdb.mi/user-selected-context-sync.c",line="66",arch="i386:x86-64"}
+ (gdb)
+
+ but no notification is printed on CLI terminal, despite the fact
+ that user selected thread has changed.
+
+ The problem is that when `-thread-select --thread 1 1` is executed
+ then thread is switched to thread 1 before mi_cmd_thread_select () is
+ called, therefore the condition "inferior_ptid != previous_ptid"
+ there does not hold.
+
+ To address this problem, we have to move notification logic up to
+ mi_cmd_execute () where --thread option is processed and notify
+ user selected contents observers there if context changes.
+
+ However, this in itself breaks GDB/MI because it would cause context
+ notification to be sent on MI channel. This is because by the time
+ we notify, MI notification suppression is already restored (done in
+ mi_command::invoke(). Therefore we had to lift notification suppression
+ logic also up to mi_cmd_execute (). This change in made distinction
+ between mi_command::invoke() and mi_command::do_invoke() unnecessary
+ as all mi_command::invoke() did (after the change) was to call
+ do_invoke(). So this patches removes do_invoke() and moves the command
+ execution logic directly to invoke().
+
+ With this change, all gdb.mi tests pass, tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20631
+
+2022-03-16 H.J. Lu <hjl.tools@gmail.com>
+
+ gprofng: Use symver attribute if available
+ Use symver attribute if available, instead of asm statement, to support
+ LTO build.
+
+ PR gprof/28962
+ * libcollector/dispatcher.c (timer_create@@GLIBC_2.3.3): Use
+ SYMVER_ATTRIBUTE.
+ (timer_create@GLIBC_2.2): Likewise.
+ (timer_create@GLIBC_2.2.5): Likewise.
+ (pthread_create@@GLIBC_2.1): Likewise.
+ (pthread_create@GLIBC_2.0): Likewise.
+ * libcollector/iotrace.c (open64@@GLIBC_2.2): Likewise.
+ (open64@GLIBC_2.1): Likewise.
+ (fopen@@GLIBC_2.1): Likewise.
+ (fopen@GLIBC_2.0): Likewise.
+ (fclose@@GLIBC_2.1): Likewise.
+ (fclose@GLIBC_2.0): Likewise.
+ (fdopen@@GLIBC_2.1): Likewise.
+ (fdopen@GLIBC_2.0): Likewise.
+ (pread@@GLIBC_2.2): Likewise.
+ (pread@GLIBC_2.1): Likewise.
+ (pwrite@@GLIBC_2.2): Likewise.
+ (pwrite@GLIBC_2.1): Likewise.
+ (pwrite64@@GLIBC_2.2): Likewise.
+ (pwrite64@GLIBC_2.1): Likewise.
+ (fgetpos@@GLIBC_2.2): Likewise.
+ (fgetpos@GLIBC_2.0): Likewise.
+ (fgetpos64@@GLIBC_2.2): Likewise.
+ (fgetpos64@GLIBC_2.1): Likewise.
+ (fsetpos@@GLIBC_2.2): Likewise.
+ (fsetpos@GLIBC_2.0): Likewise.
+ (fsetpos64@@GLIBC_2.2): Likewise.
+ (fsetpos64@GLIBC_2.1): Likewise.
+ * libcollector/linetrace.c (posix_spawn@@GLIBC_2.15): Likewise.
+ (posix_spawn@GLIBC_2.2): Likewise.
+ (posix_spawn@GLIBC_2.2.5): Likewise.
+ (posix_spawnp@@GLIBC_2.15): Likewise.
+ (posix_spawnp@GLIBC_2.2): Likewise.
+ (posix_spawnp@GLIBC_2.2.5): Likewise.
+ (popen@@GLIBC_2.1): Likewise.
+ (popen@GLIBC_2.0): Likewise.
+ (_popen@@GLIBC_2.1): Likewise.
+ (_popen@GLIBC_2.0): Likewise.
+ * libcollector/mmaptrace.c (dlopen@@GLIBC_2.1): Likewise.
+ (dlopen@GLIBC_2.0): Likewise.
+ * libcollector/synctrace.c (pthread_cond_wait@@GLIBC_2.3.2):
+ Likewise.
+ (pthread_cond_wait@GLIBC_2.0): Likewise.
+ (pthread_cond_wait@GLIBC_2.2.5): Likewise.
+ (pthread_cond_wait@GLIBC_2.2): Likewise.
+ (pthread_cond_timedwait@@GLIBC_2.3.2): Likewise.
+ (pthread_cond_timedwait@GLIBC_2.0): Likewise.
+ (pthread_cond_timedwait@GLIBC_2.2.5): Likewise.
+ (pthread_cond_timedwait@GLIBC_2.2): Likewise.
+ (sem_wait@@GLIBC_2.1): Likewise.
+ (sem_wait@GLIBC_2.0): Likewise.
+ * src/collector_module.h (SYMVER_ATTRIBUTE): New.
+
+2022-03-16 H.J. Lu <hjl.tools@gmail.com>
+
+ gprofng: Don't hardcode -Wno-format-truncation/-Wno-switch
+ Use -Wno-format-truncation and -Wno-switch only if they are supported.
+
+ PR gprof/28969
+ * configure.ac (GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS): New
+ AC_SUBST for -Wno-format-truncation.
+ (GPROFNG_NO_SWITCH_CFLAGS): New AC_SUBST for -Wno-switch.
+ * Makefile.in: Regenerate.
+ * configure: Likewise.
+ * src/Makefile.am (AM_CFLAGS): Replace -Wno-format-truncation
+ and -Wno-switch with GPROFNG_NO_FORMAT_TRUNCATION_CFLAGS and
+ GPROFNG_NO_SWITCH_CFLAGS.
+ * src/Makefile.in: Regenerate.
+
+2022-03-16 H.J. Lu <hjl.tools@gmail.com>
+
+ gprofng: Don't hardcode -Wno-nonnull-compare
+ Use -Wno-nonnull-compare only if it is supported.
+
+ PR gprof/28969
+ * libcollector/Makefile.am (AM_CFLAGS): Replace
+ -Wno-nonnull-compare with GPROFNG_NO_NONNULL_COMPARE_CFLAGS.
+ * libcollector/configure.ac (GPROFNG_NO_NONNULL_COMPARE_CFLAGS):
+ New AC_SUBST for -Wno-nonnull-compare.
+ * libcollector/Makefile.in: Regenerate.
+ * libcollector/aclocal.m4: Likewise.
+ * libcollector/configure: Likewise.
+
+2022-03-16 H.J. Lu <hjl.tools@gmail.com>
+
+ gprofng: Define ATTRIBUTE_FALLTHROUGH
+ Define ATTRIBUTE_FALLTHROUGH to __attribute__ ((fallthrough)) only for
+ GCC 7 or above.
+
+ PR gprof/28969
+ * common/gp-defs.h (ATTRIBUTE_FALLTHROUGH): New.
+ * src/gp-collect-app.cc (collect::check_args): Replace
+ /* FALLTHROUGH */ with ATTRIBUTE_FALLTHROUGH.
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ binutils/readelf: handle AMDGPU relocation types
+ Make readelf recognize AMDGPU relocation types, as documented here:
+
+ https://llvm.org/docs/AMDGPUUsage.html#amdgpu-relocation-records
+
+ The user-visible change looks like:
+
+ -000000000004 000400000001 unrecognized: 1 0000000000000000 SCRATCH_RSRC_DWORD0
+ -00000000000c 000500000001 unrecognized: 1 0000000000000000 SCRATCH_RSRC_DWORD1
+ -000000000014 000600000007 unrecognized: 7 0000000000000000 global_var0
+ -00000000001c 000700000008 unrecognized: 8 0000000000000000 global_var1
+ -000000000024 000800000009 unrecognized: 9 0000000000000000 global_var2
+ -00000000002c 00090000000a unrecognized: a 0000000000000000 global_var3
+ -000000000034 000a0000000b unrecognized: b 0000000000000000 global_var4
+ +000000000004 000400000001 R_AMDGPU_ABS32_LO 0000000000000000 SCRATCH_RSRC_DWORD0
+ +00000000000c 000500000001 R_AMDGPU_ABS32_LO 0000000000000000 SCRATCH_RSRC_DWORD1
+ +000000000014 000600000007 R_AMDGPU_GOTPCREL 0000000000000000 global_var0
+ +00000000001c 000700000008 R_AMDGPU_GOTPCREL 0000000000000000 global_var1
+ +000000000024 000800000009 R_AMDGPU_GOTPCREL 0000000000000000 global_var2
+ +00000000002c 00090000000a R_AMDGPU_REL32_LO 0000000000000000 global_var3
+ +000000000034 000a0000000b R_AMDGPU_REL32_HI 0000000000000000 global_var4
+
+ binutils/ChangeLog:
+
+ * readelf.c (dump_relocations): Handle EM_AMDGPU.
+
+ include/ChangeLog:
+
+ * elf/amdgpu.h: Add relocation values.
+
+ Change-Id: I2ed4589f4cd37ea11ad2e0cb38d4b682271e1334
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ binutils/readelf: build against msgpack, dump NT_AMDGPU_METADATA note contents
+ The AMDGPU HSA OS ABI (code object v3 and above) defines the
+ NT_AMDGPU_METADATA ELF note [1]. The content is a msgpack object
+ describing, among other things, the kernels present in the code object
+ and how to call them.
+
+ I think it would be useful for readelf to be able to display the content
+ of those notes. msgpack is a structured format, a bit like JSON, except
+ not text-based. It is therefore possible to dump the contents in
+ human-readable form without knowledge of the specific layout of the
+ note.
+
+ Add configury to binutils to optionally check for the msgpack C library
+ [2]. Add There is a new --with{,out}-msgpack configure flag, and the actual
+ library lookup is done using pkg-config.
+
+ If msgpack support is enabled, dumping a NT_AMDGPU_METADATA note looks
+ like:
+
+ $ readelf --notes amdgpu-code-object
+ Displaying notes found in: .note
+ Owner Data size Description
+ AMDGPU 0x0000040d NT_AMDGPU_METADATA (code object metadata)
+ {
+ "amdhsa.kernels": [
+ {
+ ".args": [
+ {
+ ".address_space": "global",
+ ".name": "out.coerce",
+ ".offset": 0,
+ ".size": 8,
+ ".value_kind": "global_buffer",
+ },
+ <snip>
+
+ If msgpack support is disabled, dump the contents as hex, as is done
+ with notes that are not handled in a special way. This allows one to
+ decode the contents manually (maybe using a command-line msgpack
+ decoder) if really needed.
+
+ [1] https://llvm.org/docs/AMDGPUUsage.html#code-object-metadata
+ [2] https://github.com/msgpack/msgpack-c/tree/c_master
+
+ binutils/ChangeLog:
+
+ * Makefile.am (readelf_CFLAGS): New.
+ (readelf_LDADD): Add MSGPACK_LIBS.
+ * Makefile.in: Re-generate.
+ * config.in: Re-generate.
+ * configure: Re-generate.
+ * configure.ac: Add --with-msgpack flag and check for msgpack
+ using pkg-config.
+ * readelf.c: Include msgpack.h if HAVE_MSGPACK.
+ (print_note_contents_hex): New.
+ (print_indents): New.
+ (dump_msgpack_obj): New.
+ (dump_msgpack): New.
+ (print_amdgpu_note): New.
+ (process_note): Handle NT_AMDGPU_METADATA note contents.
+ Use print_note_contents_hex.
+
+ Change-Id: Ia60a654e620bc32dfdb1bccd845594e2af328b84
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ binutils/readelf: handle NT_AMDGPU_METADATA note name
+ Handle the NT_AMDGPU_METADATA note, which is described here:
+
+ https://llvm.org/docs/AMDGPUUsage.html#code-object-v3-note-records
+
+ As of this patch, just print out the name, not the contents, which is in
+ the msgpack format.
+
+ binutils/ChangeLog:
+
+ * readelf.c (get_amdgpu_elf_note_type): New.
+ (process_note): Handle "AMDGPU" notes.
+
+ include/ChangeLog:
+
+ * elf/amdgcn.h (NT_AMDGPU_METADATA): New.
+
+ Change-Id: Id2dba2e2aeaa55ef7464fb35aee9c7d5f96ddb23
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ binutils/readelf: decode AMDGPU-specific e_flags
+ Decode and print the AMDGPU-specific fields of e_flags, as documented
+ here:
+
+ https://llvm.org/docs/AMDGPUUsage.html#header
+
+ That is:
+
+ - The specific GPU model
+ - Whether the xnack and sramecc features are enabled
+
+ The result looks like:
+
+ - Flags: 0x52f
+ + Flags: 0x52f, gfx906, xnack any, sramecc any
+
+ The flags for the "HSA" OS ABI are properly versioned and documented on
+ that page. But the NONE, PAL and MESA3D OS ABIs are not well documented
+ nor versioned. Taking a peek at the LLVM source code, we see that they
+ encode their flags the same way as HSA v3. For example, for PAL:
+
+ https://github.com/llvm/llvm-project/blob/c8b614cd74a92d85936aed5ac7c642af75ffdc29/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp#L601
+
+ So for those other OS ABIs, we read them the same as HSA v3.
+
+ binutils/ChangeLog:
+
+ * readelf.c: Include elf/amdgcn.h.
+ (decode_AMDGPU_machine_flags): New.
+ (get_machine_flags): Handle flags for EM_AMDGPU machine type.
+
+ include/ChangeLog:
+
+ * elf/amdgcn.h: Add EF_AMDGPU_MACH_AMDGCN_* and
+ EF_AMDGPU_FEATURE_* defines.
+
+ Change-Id: Ib5b94df7cae0719a22cf4e4fd0629330e9485c12
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ binutils/readelf: handle AMDGPU OS ABIs
+ When the machine is EM_AMDGPU, handle the various OS ABIs described
+ here:
+
+ https://llvm.org/docs/AMDGPUUsage.html#header
+
+ For a binary with the HSA OS ABI, the change looks like:
+
+ - OS/ABI: <unknown: 40>
+ + OS/ABI: AMD HSA
+
+ binutils/ChangeLog:
+
+ * readelf.c (get_osabi_name): Handle EM_AMDGPU OS ABIs.
+
+ include/ChangeLog:
+
+ * elf/common.h (ELFOSABI_AMDGPU_PAL, ELFOSABI_AMDGPU_MESA3D):
+ New.
+
+ Change-Id: I383590c390f7dc2fe0f902f50038735626d71863
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ opcodes: handle bfd_amdgcn_arch in configure script
+ There isn't an actual opcodes implementation for the AMDGCN arch (yet),
+ this is just the bare minimum to get
+
+ $ ./configure --target=amdgcn-hsa-amdhsa --disable-gas
+ $ make all-binutils
+
+ working later in this series.
+
+ opcodes/ChangeLog:
+
+ * configure.ac: Handle bfd_amdgcn_arch.
+ * configure: Re-generate.
+
+ Change-Id: Ib7d7c5533a803ed8b2a293e9275f667ed781ce79
+
+2022-03-16 Simon Marchi <simon.marchi@efficios.com>
+
+ bfd: add AMDGCN architecture
+ Add support for the AMDGCN architecture to BFD.
+
+ This is the bare minimum to get
+
+ $ ./configure --target=amdgcn-hsa-amdhsa --disable-gas
+ $ make all-binutils
+
+ working later in this series.
+
+ The specific AMDGCN models added here are a bit arbitrary, based on
+ what we intend to initially support in GDB. This list will need to be
+ updated in the future anyway. The complete up-to-date list of existing
+ AMDGPU models can be found here:
+
+ https://llvm.org/docs/AMDGPUUsage.html#processors
+
+ The ELF format for this architecture is documented here:
+
+ https://llvm.org/docs/AMDGPUUsage.html#elf-code-object
+
+ The flags for the "HSA" OS ABI are properly versioned and documented on
+ that page. But the NONE, PAL and MESA3D OS ABIs are not well documented
+ nor versioned. Taking a peek at the LLVM source code, we see that they
+ encode their flags the same way as HSA v3. For example, for PAL:
+
+ https://github.com/llvm/llvm-project/blob/c8b614cd74a92d85936aed5ac7c642af75ffdc29/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUTargetStreamer.cpp#L601
+
+ So at least, we know that all AMDGPU objects (of which AMDGCN objects
+ are a subset of) at the time of writing encode the specific GPU model in
+ the EF_AMDGPU_MACH field of e_flags.
+
+ bfd/ChangeLog:
+
+ * Makefile.am (ALL_MACHINES, ALL_MACHINES_CFILES):
+ Add cpu-amdgcn.c.
+ (BFD64_BACKENDS): Add elf64-amdgcn.lo.
+ (BFD64_BACKENDS_CFILES): Add elf64-amdgcn.c.
+ * Makefile.in: Re-generate.
+ * cpu-amdgcn.c: New.
+ * elf64-amdgcn.c: New.
+ * archures.c (bfd_architecture): Add bfd_arch_amdgcn and related
+ mach defines.
+ (bfd_amdgcn_arch): New.
+ (bfd_archures_list): Add bfd_amdgcn_arch.
+ * bfd-in2.h: Re-generate.
+ * config.bfd: Handle amdgcn* target.
+ * configure.ac: Handle amdgcn_elf64_le_vec.
+ * configure: Re-generate.
+ * elf-bfd.h (elf_target_id): Add AMDGCN_ELF_DATA.
+ * targets.c (amdgcn_elf64_le_vec): New.
+ (_bfd_target_vector): Add amdgcn_elf64_le_vec.
+
+ include/ChangeLog:
+
+ * elf/amdgpu.h: New.
+ * elf/common.h (ELFOSABI_AMDGPU_HSA): Add.
+
+ Change-Id: I969f7b14960797e88891c308749a6e341eece5b2
+
+2022-03-16 Nick Clifton <nickc@redhat.com>
+
+ Updated Serbian (for binutils/) and Russian (for gprof/) translations
+
+2022-03-16 Pedro Alves <pedro@palves.net>
+
+ Make gdb.fortran/{array-slices,lbound-ubound} work against gdbserver
+ gdb.fortran/array-slices.exp and gdb.fortran/lbound-ubound.exp were
+ recently disabled unless testing with the native target, because they
+ rely on inferior I/O. However, when testing against gdbserver using
+ the native-gdbserver/native-extended-gdbserver boards, we do have
+ access to inferior I/O.
+
+ The right way to check whether the board can do I/O, is via checking
+ the gdb,noinferiorio board variable. Switch to using that.
+
+ And then, tweak the testcases to expect output to appear in
+ inferior_spawn_id, instead of gdb_spawn_id. When testing against the
+ native target, inferior_spawn_id is the same as gdb_spawn_id. When
+ testing against gdbserver, it maps to gdbserver_spawn_id.
+
+ This exposed a buglet in gdb.fortran/array-slices.f90's show_1d
+ subroutine -- it was missing printing newline at the end of the
+ "Expected GDB Output" text, leading to a test timeout. All other
+ subroutines end with advance=yes, except this one. Fix it by using
+ advance=yes here too.
+
+ Change-Id: I4640729f334431cfc24b0917e7d3977b677c6ca5
+
+2022-03-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-15 Alan Modra <amodra@gmail.com>
+
+ Delete PowerPC macro insn support
+ Let's hope this stays dead, but it's here as a patch separate from
+ those that removed use of powerpc_macros just in case it needs to be
+ resurrected.
+
+ include/
+ * opcode/ppc.h (struct powerpc_macro): Delete declaration.
+ (powerpc_macros, powerpc_num_macros): Likewise..
+ opcodes/
+ * ppc-opc.c (powerpc_macros, powerpc_num_macros): Delete.
+ gas/
+ * config/tc-ppc.c (ppc_macro): Delete function.
+ (ppc_macro_hash): Delete.
+ (ppc_setup_opcodes, md_assemble): Delete macro support.
+
+2022-03-15 Alan Modra <amodra@gmail.com>
+
+ PowerPC SPE/SPE2 aliases in powerpc_macros
+ * ppc-opc.c (powerpc_macros): Move "evsadd", "evssub", "evsabs",
+ "evsnabs", "evsneg", "evsmul", "evsdiv", "evscmpgt", "evsgmplt",
+ "evsgmpeq", "evscfui", "evscfsi", "evscfuf", "evscfsf", "evsctui",
+ "evsctsi", "evsctuf", "evsctsf", "evsctuiz", "evsctsiz",
+ "evststgt", "evststlt", "evststeq"..
+ (powerpc_opcodes): ..to here.
+ (powerpc_macros): Move "evdotphsssi", "evdotphsssia", "evdotpwsssi",
+ and "evdotpwsssia"..
+ (spe2_opcodes): ..to here.
+
+2022-03-15 Alan Modra <amodra@gmail.com>
+
+ PowerPC VLE extended instructions in powerpc_macros
+ This moves VLE insn out of the macro table. "e_slwi" and "e_srwi"
+ already exist in vle_opcodes as distinct instructions rather than
+ encodings of e_rlwinm.
+
+ opcodes/
+ * ppc-opc.c (vle_opcodes): Typo fix e_rlwinm operand.
+ Add "e_inslwi", "e_insrwi", "e_rotlwi", "e_rotrwi", "e_clrlwi",
+ "e_clrrwi", "e_extlwi", "e_extrwi", and "e_clrlslwi".
+ (powerpc_macros): Delete same. Delete "e_slwi" and "e_srwi" too.
+ gas/
+ * testsuite/gas/ppc/vle-simple-5.d: Update.
+
+2022-03-15 Alan Modra <amodra@gmail.com>
+
+ PowerPC32 extended instructions in powerpc_macros
+ As for PowerPC64, move instructions to the main opcode table.
+
+ opcodes/
+ * ppc-opc.c (insert_crwn, extract_crwn, insert_elwn, extract_elwn),
+ (insert_erwn, extract_erwn, insert_erwb, extract_erwb),
+ (insert_cslwn, extract_cslwb, insert_ilwb, extract_ilwn),
+ (insert_irwb, extract_irwn, insert_rrwn, extract_rrwn),
+ (insert_slwn, extract_slwn, insert_srwn, extract_srwn): New functions.
+ (CRWn, ELWn, ERWn, ERWb, CSLWb, CSLWn, ILWn, ILWb, IRWn, IRWb),
+ (RRWn, SLWn, SRWn): Define and add powerpc_operands entries.
+ (MMB_MASK, MME_MASK, MSHMB_MASK): Define.
+ (powerpc_opcodes): Add "inslwi", "insrwi", "rotrwi", "clrrwi",
+ "slwi", "srwi", "extlwi", "extrwi", "sli", "sri" and corresponding
+ record (ie. dot suffix) forms.
+ (powerpc_macros): Delete same.
+ gas/
+ * testsuite/gas/ppc/476.d: Update.
+ * testsuite/gas/ppc/simpshft.d: Update.
+
+2022-03-15 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 extended instructions in powerpc_macros
+ The extended instructions implemented in powerpc_macros aren't used by
+ the disassembler. That means instructions like "sldi r3,r3,2" appear
+ in disassembly as "rldicr r3,r3,2,61", which is annoying since many
+ other extended instructions are shown.
+
+ Note that some of the instructions moved out of the macro table to the
+ opcode table won't appear in disassembly, because they are aliases
+ rather than a subset of the underlying raw instruction. If enabled,
+ rotrdi, extrdi, extldi, clrlsldi, and insrdi would replace all
+ occurrences of rotldi, rldicl, rldicr, rldic and rldimi. (Or many
+ occurrences in the case of clrlsldi if n <= b was added to the extract
+ functions.)
+
+ The patch also fixes a small bug in opcode sanity checking.
+
+ include/
+ * opcode/ppc.h (PPC_OPSHIFT_SH6): Define.
+ opcodes/
+ * ppc-opc.c (insert_erdn, extract_erdn, insert_eldn, extract_eldn),
+ (insert_crdn, extract_crdn, insert_rrdn, extract_rrdn),
+ (insert_sldn, extract_sldn, insert_srdn, extract_srdn),
+ (insert_erdb, extract_erdb, insert_csldn, extract_csldb),
+ (insert_irdb, extract_irdn): New functions.
+ (ELDn, ERDn, ERDn, RRDn, SRDn, ERDb, CSLDn, CSLDb, IRDn, IRDb):
+ Define and add associated powerpc_operands entries.
+ (powerpc_opcodes): Add "rotrdi", "srdi", "extrdi", "clrrdi",
+ "sldi", "extldi", "clrlsldi", "insrdi" and corresponding record
+ (ie. dot suffix) forms.
+ (powerpc_macros): Delete same from here.
+ gas/
+ * config/tc-ppc.c (insn_validate): Don't modify value passed
+ to operand->insert for PPC_OPERAND_PLUS1 when calculating mask.
+ Handle PPC_OPSHIFT_SH6.
+ * testsuite/gas/ppc/prefix-reloc.d: Update.
+ * testsuite/gas/ppc/simpshft.d: Update.
+ ld/
+ * testsuite/ld-powerpc/elfv2so.d: Update.
+ * testsuite/ld-powerpc/notoc.d: Update.
+ * testsuite/ld-powerpc/notoc3.d: Update.
+ * testsuite/ld-powerpc/tlsdesc2.d: Update.
+ * testsuite/ld-powerpc/tlsget.d: Update.
+ * testsuite/ld-powerpc/tlsget2.d: Update.
+ * testsuite/ld-powerpc/tlsopt5.d: Update.
+ * testsuite/ld-powerpc/tlsopt6.d: Update.
+
+2022-03-15 Tom Tromey <tom@tromey.com>
+
+ Do not capture updated 'pc' in add_local_symbols
+ Simon pointed out that commit 13835d88 ("Use function view when
+ iterating over block symbols") caused a regression. The bug is that
+ the new closure captures 'pc' by reference, but later code updates
+ this variable -- but the earlier code did not update the callback
+ structure with the new value.
+
+ This patch restores the old behavior by using a new varible name in an
+ inner scope.
+
+2022-03-15 Jose E. Marchesi <jose.marchesi@oracle.com>
+
+ gprofng: avoid using `fallthrough' attributes
+ gprofng didn't build with gcc 6.3 due to the usage of __attribute__
+ ((fallthrough)). This patch uses /* FALLTHROUGH */ instead.
+
+ 2022-03-15 Jose E. Marchesi <jose.marchesi@oracle.com>
+
+ * gprofng/src/gp-collect-app.cc (collect::check_args): Use
+ fallthrough comment instead of attribute.
+
+2022-03-15 Tom Tromey <tromey@adacore.com>
+
+ Fix bug in dwarf-mode.el
+ I noticed that, occasionally, dwarf-mode would think that the objdump
+ subprocess was still running after it had clearly exited. I managed
+ to reliably reproduce this today and learned that a process sentinel
+ is not guaranteed to be run with the current buffer set to the process
+ buffer. This patch fixes the problem.
+
+ I've bumped the version number of dwarf-mode.el to make it easier to
+ install for users who already have an earlier one installed.
+
+ I'm checking this in.
+
+ 2022-03-15 Tom Tromey <tromey@adacore.com>
+
+ * dwarf-mode.el: Now 1.7.
+ (dwarf--sentinel): Switch to the process buffer.
+
+2022-03-15 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: rename a proc and fix a typo
+ Rename a proc in gdb.mi/user-selected-context-sync.exp, I think the
+ old name was most likely a typo. The old name
+ match_re_or_ensure_not_output seems (to me) to imply we're in some way
+ checking that the regexp was not output. But that's not what we are
+ doing, we're checking either for the regexp, or for no output, hence
+ the new name match_re_or_ensure_no_output.
+
+ Additionally, I found a definite typo in one of the comments that I've
+ also fixed.
+
+ I also updated some test names. These tests (probably due to copy &
+ paste errors) has 'on MI' on their name, when they were actually
+ checking CLI output. For these test I changed the name to use 'on
+ CLI'.
+
+ There should be no change in what is tested after this commit.
+
+2022-03-15 Nick Clifton <nickc@redhat.com>
+
+ gprofng: Add a configure test for clock_gettime and a use of the test in getthrtime.c
+
+2022-03-15 H.J. Lu <hjl.tools@gmail.com>
+
+ gprofng: Don't generate gprofng.info in source
+ Add info-in-builddir to AUTOMAKE_OPTIONS.
+
+ PR gprof/28967
+ * doc/Makefile.am (AUTOMAKE_OPTIONS): Add info-in-builddir.
+ * doc/Makefile.in: Regenerate.
+
+2022-03-15 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: fix failed testcases in gdb.base/align-c.exp
+ When execute the following command on LoongArch:
+
+ make check-gdb TESTS="gdb.base/align-c.exp"
+
+ there exist some failed testcases:
+
+ ...
+ FAIL: gdb.base/align-c.exp: print _Alignof(struct align_pair_long_double_x_float)
+ FAIL: gdb.base/align-c.exp: print _Alignof(struct align_pair_long_double_x_double)
+ FAIL: gdb.base/align-c.exp: print _Alignof(struct align_pair_long_double_x_long_double)
+ ...
+
+ According to LoongArch ELF ABI specification [1], set the target data types
+ of floating-point to fix the above failed testcases.
+
+ [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html
+
+2022-03-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-14 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python/mi: create MI commands using python
+ This commit allows a user to create custom MI commands using Python
+ similarly to what is possible for Python CLI commands.
+
+ A new subclass of mi_command is defined for Python MI commands,
+ mi_command_py. A new file, gdb/python/py-micmd.c contains the logic
+ for Python MI commands.
+
+ This commit is based on work linked too from this mailing list thread:
+
+ https://sourceware.org/pipermail/gdb/2021-November/049774.html
+
+ Which has also been previously posted to the mailing list here:
+
+ https://sourceware.org/pipermail/gdb-patches/2019-May/158010.html
+
+ And was recently reposted here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-January/185190.html
+
+ The version in this patch takes some core code from the previously
+ posted patches, but also has some significant differences, especially
+ after the feedback given here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-February/185767.html
+
+ A new MI command can be implemented in Python like this:
+
+ class echo_args(gdb.MICommand):
+ def invoke(self, args):
+ return { 'args': args }
+
+ echo_args("-echo-args")
+
+ The 'args' parameter (to the invoke method) is a list
+ containing (almost) all command line arguments passed to the MI
+ command (--thread and --frame are handled before the Python code is
+ called, and removed from the args list). This list can be empty if
+ the MI command was passed no arguments.
+
+ When used within gdb the above command produced output like this:
+
+ (gdb)
+ -echo-args a b c
+ ^done,args=["a","b","c"]
+ (gdb)
+
+ The 'invoke' method of the new command must return a dictionary. The
+ keys of this dictionary are then used as the field names in the mi
+ command output (e.g. 'args' in the above).
+
+ The values of the result returned by invoke can be dictionaries,
+ lists, iterators, or an object that can be converted to a string.
+ These are processed recursively to create the mi output. And so, this
+ is valid:
+
+ class new_command(gdb.MICommand):
+ def invoke(self,args):
+ return { 'result_one': { 'abc': 123, 'def': 'Hello' },
+ 'result_two': [ { 'a': 1, 'b': 2 },
+ { 'c': 3, 'd': 4 } ] }
+
+ Which produces output like:
+
+ (gdb)
+ -new-command
+ ^done,result_one={abc="123",def="Hello"},result_two=[{a="1",b="2"},{c="3",d="4"}]
+ (gdb)
+
+ I have required that the fields names used in mi result output must
+ match the regexp: "^[a-zA-Z][-_a-zA-Z0-9]*$" (without the quotes).
+ This restriction was never written down anywhere before, but seems
+ sensible to me, and we can always loosen this rule later if it proves
+ to be a problem. Much harder to try and add a restriction later, once
+ people are already using the API.
+
+ What follows are some details about how this implementation differs
+ from the original patch that was posted to the mailing list.
+
+ In this patch, I have changed how the lifetime of the Python
+ gdb.MICommand objects is managed. In the original patch, these object
+ were kept alive by an owned reference within the mi_command_py object.
+ As such, the Python object would not be deleted until the
+ mi_command_py object itself was deleted.
+
+ This caused a problem, the mi_command_py were held in the global mi
+ command table (in mi/mi-cmds.c), which, as a global, was not cleared
+ until program shutdown. By this point the Python interpreter has
+ already been shutdown. Attempting to delete the mi_command_py object
+ at this point was causing GDB to try and invoke Python code after
+ finalising the Python interpreter, and we would crash.
+
+ To work around this problem, the original patch added code in
+ python/python.c that would search the mi command table, and delete the
+ mi_command_py objects before the Python environment was finalised.
+
+ In contrast, in this patch, I have added a new global dictionary to
+ the gdb module, gdb._mi_commands. We already have several such global
+ data stores related to pretty printers, and frame unwinders.
+
+ The MICommand objects are placed into the new gdb.mi_commands
+ dictionary, and it is this reference that keeps the objects alive.
+ When GDB's Python interpreter is shut down gdb._mi_commands is deleted,
+ and any MICommand objects within it are deleted at this point.
+
+ This change avoids having to make the mi_cmd_table global, and walk
+ over it from within GDB's python related code.
+
+ This patch handles command redefinition entirely within GDB's python
+ code, though this does impose one small restriction which is not
+ present in the original code (detailed below), I don't think this is a
+ big issue. However, the original patch relied on being able to
+ finish executing the mi_command::do_invoke member function after the
+ mi_command object had been deleted. Though continuing to execute a
+ member function after an object is deleted is well defined, it is
+ also (IMHO) risky, its too easy for someone to later add a use of the
+ object without realising that the object might sometimes, have been
+ deleted. The new patch avoids this issue.
+
+ The one restriction that is added to avoid this, is that an MICommand
+ object can't be reinitialised with a different command name, so:
+
+ (gdb) python cmd = MyMICommand("-abc")
+ (gdb) python cmd.__init__("-def")
+ can't reinitialize object with a different command name
+
+ This feels like a pretty weird edge case, and I'm happy to live with
+ this restriction.
+
+ I have also changed how the memory is managed for the command name.
+ In the most recently posted patch series, the command name is moved
+ into a subclass of mi_command, the python mi_command_py, which
+ inherits from mi_command is then free to use a smart pointer to manage
+ the memory for the name.
+
+ In this patch, I leave the mi_command class unchanged, and instead
+ hold the memory for the name within the Python object, as the lifetime
+ of the Python object always exceeds the c++ object stored in the
+ mi_cmd_table. This adds a little more complexity in py-micmd.c, but
+ leaves the mi_command class nice and simple.
+
+ Next, this patch adds some extra functionality, there's a
+ MICommand.name read-only attribute containing the name of the command,
+ and a read-write MICommand.installed attribute that can be used to
+ install (make the command available for use) and uninstall (remove the
+ command from the mi_cmd_table so it can't be used) the command. This
+ attribute will be automatically updated if a second command replaces
+ an earlier command.
+
+ This patch adds additional error handling, and makes more use the
+ gdbpy_handle_exception function.
+
+ Co-Authored-By: Jan Vrany <jan.vrany@labware.com>
+
+2022-03-14 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/gdbarch: compare some fields against 0 verify_gdbarch
+ After the previous commit, which removes the predicate function
+ gdbarch_register_type_p, I noticed that the gdbarch->register_type
+ field was not checked at in the verify_gdbarch function.
+
+ More than not being checked, the field wasn't mentioned at all.
+
+ I find this strange, I would expect that every field would at least be
+ mentioned - we already generate comments for some fields saying that
+ this field is _not_ being checked, so the fact that this field isn't
+ being checked looks (to me), like this field is somehow slipping
+ through the cracks.
+
+ The comment at the top of gdbarch-components.py tries to explain how
+ the validation is done. I didn't understand this comment completely,
+ but, I think this final sentence:
+
+ "Otherwise, the check is done against 0 (really NULL for function
+ pointers, but same idea)."
+
+ Means that, if non of the other cases apply, then the field should be
+ checked against 0, with 0 indicating that the field is invalid (was
+ not set by the tdep code). However, this is clearly not being done.
+
+ Looking in gdbarch.py at the code to generate verify_gdbarch we do
+ find that there is a case that is not handled, the case where the
+ 'invalid' field is set true True, but non of the other cases apply.
+
+ In this commit I propose two changes:
+
+ 1. Handle the case where the 'invalid' field of a property is set to
+ True, this should perform a check for the field of gdbarch still
+ being set to 0, and
+
+ 2. If the if/else series that generates verify_gdbarch doesn't handle
+ a property then we should raise an exception. This means that if a
+ property is added which isn't handled, we should no longer silently
+ ignore it.
+
+ After doing this, I re-generated the gdbarch files and saw that the
+ following gdbarch fields now had new validation checks:
+
+ register_type
+ believe_pcc_promotion
+ register_to_value
+ value_to_register
+ frame_red_zone_size
+ displaced_step_restore_all_in_ptid
+ solib_symbols_extension
+
+ Looking at how these are currently set in the various -tdep.c files, I
+ believe the only one of these that is required to be set for all
+ architectures is the register_type field.
+
+ And so, for all of the other fields, I've changed the property
+ definition on gdbarch-components.py, setting the 'invalid' field to
+ False.
+
+ Now, after re-generation, the register_type field is checked against
+ 0, thus an architecture that doesn't set_gdbarch_register_type will
+ now fail during validation. For all the other fields we skip the
+ validation, in which case, it is find for an architecture to not set
+ this field.
+
+ My expectation is that there should be no user visible changes after
+ this commit. Certainly for all fields except register_type, all I've
+ really done is cause some extra comments to be generated, so I think
+ that's clearly fine.
+
+ For the register_type field, my claim is that any architecture that
+ didn't provide this would fail when creating its register cache, and I
+ couldn't spot an architecture that doesn't provide this hook. As
+ such, I think this change should be fine too.
+
+2022-03-14 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/gdbarch: remove the predicate function for gdbarch_register_type
+ I don't believe that the gdbarch_register_type_p predicate is called
+ anywhere in GDB, and the gdbarch_register_type function is called
+ without checking the gdbarch_register_type_p predicate function
+ everywhere it is used, for example in
+ init_regcache_descr (regcache.c).
+
+ My claim is that the gdbarch_register_type function is required for
+ every architecture, and GDB will not work if this function is not
+ supplied.
+
+ And so, in this commit, I remove the 'predicate=True' from
+ gdbarch-components.py for the 'register_type' field, and regenerate
+ the gdbarch files.
+
+ There should be no user visible changes after this commit.
+
+2022-03-14 Patrick Monnerat <patrick@monnerat.net>
+
+ Replace deprecated_target_wait_hook by observers
+ Commit b60cea7 (Make target_wait options use enum flags) broke
+ deprecated_target_wait_hook usage: there's a commit comment telling
+ this hook has not been converted.
+
+ Rather than trying to mend it, this patch replaces the hook by two
+ target_wait observers:
+
+ target_pre_wait (ptid_t ptid)
+ target_post_wait (ptid_t event_ptid)
+
+ Upon target_wait entry, target_pre_wait is notified with the ptid
+ passed to target_wait. Upon exit, target_post_wait is notified with
+ the event ptid returned by target_wait. Should an exception occur,
+ event_ptid is null_ptid.
+
+ This change benefits to Insight (out-of-tree): there's no real use of the
+ late hook in gdb itself.
+
+2022-03-14 Tom Tromey <tromey@adacore.com>
+
+ Correctly print subrange types in generic_value_print
+ I noticed that generic_value_print assumes that a subrange type is
+ always a subrange of an integer type. However, this isn't necessarily
+ the case. In Ada, for example, one has subranges of character and
+ enumeration types.
+
+ This code isn't often exercised, I think, because languages with real
+ subrange types tend to implement their own printers. However, it
+ still seemed worth fixing.
+
+2022-03-14 Luis Machado <luis.machado@arm.com>
+
+ [aarch64/arm] Properly extract the return value returned in memory
+ When running gdb.cp/non-trivial-retval.exp, the following shows up for
+ both aarch64-linux and armhf-linux:
+
+ Breakpoint 3, f1 (i1=23, i2=100) at src/gdb/testsuite/gdb.cp/non-trivial-retval.cc:35
+ 35 A a;
+ (gdb) finish
+ Run till exit from #0 f1 (i1=23, i2=100) at src/gdb/testsuite/gdb.cp/non-trivial-retval.cc:35
+ main () at /src/gdb/testsuite/gdb.cp/non-trivial-retval.cc:163
+ 163 B b = f2 (i1, i2);
+ Value returned is $6 = {a = -11952}
+ (gdb)
+
+ The return value should be {a = 123} instead. This happens because the
+ backends don't extract the return value from the correct location. GDB should
+ fetch a pointer to the memory location from X8 for aarch64 and r0 for armhf.
+
+ With the patch, gdb.cp/non-trivial-retval.exp has full passes on
+ aarch64-linux and armhf-linux on Ubuntu 20.04/18.04.
+
+ The problem only shows up with the "finish" command. The "call" command
+ works correctly and displays the correct return value.
+
+ This is also related to PR gdb/28681
+ (https://sourceware.org/bugzilla/show_bug.cgi?id=28681) and fixes FAIL's in
+ gdb.ada/mi_var_array.exp.
+
+ A new testcase is provided, and it exercises GDB's ability to "finish" a
+ function that returns a large struct (> 16 bytes) and display the
+ contents of this struct correctly. This has always been incorrect for
+ these backends, but no testcase exercised this particular scenario.
+
+2022-03-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-13 Alan Modra <amodra@gmail.com>
+
+ PR28959, obdump doesn't disassemble mftb instruction
+ Without a -M cpu option given, powerpc objdump defaults currently to
+ -Mpower10 but -Many is also given. Commit 1ff6a3b8e562 regressed
+ -Many disassembly of instructions that are encoded differently
+ depending on cpu, such as mftb which has pre- and post-power4
+ encodings.
+
+ PR 28959
+ * ppc-dis.c (lookup_powerpc): Revert 2021-05-28 change. Instead
+ only look at deprecated PPC_OPCODE_RAW bit when -Many.
+
+2022-03-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-12 Tom Tromey <tom@tromey.com>
+
+ Relax regexp in gdb.rust/unsized.exp
+ With nightly rustc, gdb.rust/unsized.exp fails:
+
+ (gdb) ptype *us
+ Structure has no component named operator*.
+
+ rustc changed to emit a bit more debug info for unsized types.
+ Because the original test is just to make sure that ptype of an
+ unsized array looks right, this patch relaxes the regexp and changes
+ the expression. I think this keeps the original test meaning, but
+ also works with nightly. I also tested stable and 1.48.
+
+2022-03-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-11 Tom Tromey <tromey@adacore.com>
+
+ Avoid crash with cross-linux core file
+ An internal test case creates a core file using gcore, then restarts
+ gdb with that core. When run with a cross-linux gdb (in this case,
+ x86-64 host with ppc64-linux target), the test fails:
+
+ | (gdb) core core
+ | [New LWP 18437]
+ | warning: `/lib64/libc.so.6': Shared library architecture unknown is not compatible with target architecture powerpc:common64.
+ | warning: Could not load shared library symbols for /lib64/ld64.so.1.
+ | Do you need "set solib-search-path" or "set sysroot"?
+ | ../../src/gdb/gdbarch.c:3388: internal-error: int gdbarch_elf_make_msymbol_special_p(gdbarch*): Assertion `gdbarch != NULL' failed.
+ | A problem internal to GDB has been detected,
+ | further debugging may prove unreliable.
+ | Quit this debugging session? (y or n) y
+
+ What's happening here is that the core file lists some shared
+ libraries. These aren't available via the solib search path, and so
+ gdb finds the local (x86-64) libraries. This is not ideal, but on the
+ other hand, it is what was asked for -- while the test does set
+ solib-search-path, it does not set the sysroot.
+
+ But, because gdb isn't configured to handle these libraries, it
+ crashes.
+
+ It seems to me that it's better to avoid the crash by having
+ solib_bfd_open fail in the case where a library is incompatible. That
+ is what this patch does. Now it looks like:
+
+ | [New LWP 15488]
+ | Error while mapping shared library sections:
+ | `/lib64/libc.so.6': Shared library architecture unknown is not compatible with target architecture powerpc:common64.
+
+ ... and does not crash gdb.
+
+ I don't have a good setup for testing this using dejagnu, so I don't
+ know whether an existing gdb test covers this scenario.
+
+2022-03-11 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: remove duplicates from gdb.base/stap-probe.exp
+ Remove the duplicate test names from gdb.base/stap-probe.exp, this is
+ done by actually passing a unique test name in a couple of
+ places (rather than using the command as the test name), and in
+ another couple of places, a test has a duplicate name due to a cut &
+ paste error, which I've fixed.
+
+ There's no change in what is actually being tested after this commit.
+
+2022-03-11 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ gprofng: a new GNU profiler
+ top-level
+ * Makefile.def: Add gprofng module.
+ * configure.ac: Add --enable-gprofng option.
+ * src-release.sh: Add gprofng.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * gprofng: New directory.
+
+ binutils
+ * MAINTAINERS: Add gprofng maintainer.
+ * README-how-to-make-a-release: Add gprofng.
+
+ include.
+ * collectorAPI.h: New file.
+ * libcollector.h: New file.
+ * libfcollector.h: New file.
+
+2022-03-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-10 Aaron Merey <amerey@redhat.com>
+
+ gdb/auto-load: Remove repeating "auto-load" from debug message
+ Remove "auto-load:" from a format string passed to auto_load_debug_printf.
+ It is unnecessary since this function will prefix the string with "[auto-load]"
+ when printing it.
+
+2022-03-10 Tom Tromey <tromey@adacore.com>
+
+ Change how "print/x" displays floating-point value
+ Currently, "print/x" will display a floating-point value by first
+ casting it to an integer type. This yields weird results like:
+
+ (gdb) print/x 1.5
+ $1 = 0x1
+
+ This has confused users multiple times -- see PR gdb/16242, where
+ there are several dups. I've also seen some confusion from this
+ internally at AdaCore.
+
+ The manual says:
+
+ 'x'
+ Regard the bits of the value as an integer, and print the integer
+ in hexadecimal.
+
+ ... which seems more useful. So, perhaps what happened is that this
+ was incorrectly implemented (or maybe correctly implemented and then
+ regressed, as there don't seem to be any tests).
+
+ This patch fixes the bug.
+
+ There was a previous discussion where we agreed to preserve the old
+ behavior:
+
+ https://sourceware.org/legacy-ml/gdb-patches/2017-06/msg00314.html
+
+ However, I think it makes more sense to follow the manual.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16242
+
+2022-03-10 Tom Tromey <tromey@adacore.com>
+
+ Simplify the ui-out progress API
+ I noticed that 'progress' is a method on ui-out, but it seems to me
+ that it would be better if the only API were via the progress_meter
+ class. This patch makes this change, changing progress to be a method
+ on the meter itself.
+
+2022-03-10 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/gdbarch: fix typo in gdbarch-components.py
+ Fixes a minor typo, in a comment, in the gdbarch-components.py script.
+
+ There should be no user visible changes after this commit.
+
+2022-03-10 Lancelot SIX <lancelot.six@amd.com>
+
+ Process exit status is leader exit status testcase
+ This adds a multi-threaded testcase that has all threads in the
+ process exit with a different exit code, and ensures that GDB reports
+ the thread group leader's exit status as the whole-process exit
+ status. Before this set of patches, this would randomly report the
+ exit code of some other thread, and thus fail.
+
+ Tested on Linux-x86_64, native and gdbserver.
+
+ Co-Authored-By: Pedro Alves <pedro@palves.net>
+ Change-Id: I30cba2ff4576fb01b5169cc72667f3268d919557
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ Re-add zombie leader on exit, gdbserver/linux
+ Same as the previous patch, but for GDBserver.
+
+ In summary, the current zombie leader detection code in linux-low.cc
+ has a race -- if a multi-threaded inferior exits just before
+ check_zombie_leaders finds that the leader is now zombie via checking
+ /proc/PID/status, check_zombie_leaders deletes the leader, assuming we
+ won't get an event for that exit (which we won't in some scenarios,
+ but not in this one), which is a false-positive scenario, where the
+ whole process is simply exiting. Later when we see the last LWP in
+ our list exit, we report that LWP's exit status as exit code, even
+ though for the (real) parent process, the exit code that counts is the
+ child's leader thread's exit code.
+
+ Like for GDB, the solution here is to:
+
+ - only report whole-process exit events for the leader.
+ - re-add the leader back to the LWP list when we finally see it
+ exit.
+
+ Change-Id: Id2d7bbb51a415534e1294fff1d555b7ecaa87f1d
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ Re-add zombie leader on exit, gdb/linux
+ The current zombie leader detection code in linux-nat.c has a race --
+ if a multi-threaded inferior exits just before check_zombie_leaders
+ finds that the leader is now zombie via checking /proc/PID/status,
+ check_zombie_leaders deletes the leader, assuming we won't get an
+ event for that exit (which we won't in some scenarios, but not in this
+ one). That might seem mostly harmless, but it has some downsides:
+
+ - later when we continue pulling events out of the kernel, we will
+ collect the exit event of the non-leader threads, and once we see
+ the last lwp in our list exit, we return _that_ lwp's exit code as
+ whole-process exit code to infrun, instead of the leader's exit
+ code.
+
+ - this can cause a hang in stop_all_threads in infrun.c. Say there
+ are 2 threads in the process. stop_all_threads stops each of those
+ threads, and then waits for two stop or exit events, one for each
+ thread. If the whole process exits, and check_zombie_leaders hits
+ the false-positive case, linux-nat.c will only return one event to
+ GDB (the whole-process exit returned when we see the last thread,
+ the non-leader thread, exit), making stop_all_threads hang forever
+ waiting for a second event that will never come.
+
+ However, in this false-positive scenario, where the whole process is
+ exiting, as opposed to just the leader (with pthread_exit(), for
+ example), we _will_ get an exit event shortly for the leader, after we
+ collect the exit event of all the other non-leader threads. Or put
+ another way, we _always_ get an event for the leader after we see it
+ become zombie.
+
+ I tried a number of approaches to fix this:
+
+ #1 - My first thought to address the race was to make GDB always
+ report the whole-process exit status for the leader thread, not for
+ whatever is the last lwp in the list. We _always_ get a final exit
+ (or exec) event for the leader, and when the race triggers, we're not
+ collecting it.
+
+ #2 - My second thought was to try to plug the race in the first place.
+
+ I thought of making GDB call waitpid/WNOHANG for all non-leader
+ threads immediately when the zombie leader is detected, assuming there
+ would be an exit event pending for each of them waiting to be
+ collected. Turns out that that doesn't work -- you can see the leader
+ become zombie _before_ the kernel kills all other threads. Waitpid in
+ that small time window returns 0, indicating no-event. Thankfully we
+ hit that race window all the time, which avoided trading one race for
+ another. Looking at the non-leader thread's status in /proc doesn't
+ help either, the threads are still in running state for a bit, for the
+ same reason.
+
+ #3 - My next attempt, which seemed promising, was to synchronously
+ stop and wait for the stop for each of the non-leader threads. For
+ the scenario in question, this will collect all the exit statuses of
+ the non-leader threads. Then, if we are left with only the zombie
+ leader in the lwp list, it means we either have a normal while-process
+ exit or an exec, in which case we should not delete the leader. If
+ _only_ the leader exited, like in gdb.threads/leader-exit.exp, then
+ after pausing threads, we will still have at least one live non-leader
+ thread in the list, and so we delete the leader lwp. I got this
+ working and polished, and it was only after staring at the kernel code
+ to convince myself that this would really work (and it would, for the
+ scenario I considered), that I realized I had failed to account for
+ one scenario -- if any non-leader thread is _already_ stopped when
+ some thread triggers a group exit, like e.g., if you have some threads
+ stopped and then resume just one thread with scheduler-locking or
+ non-stop, and that thread exits the process. I also played with
+ PTRACE_EVENT_EXIT, see if it would help in any way to plug the race,
+ and I couldn't find a way that it would result in any practical
+ difference compared to looking at /proc/PID/status, with respect to
+ having a race.
+
+ So I concluded that there's no way to plug the race, we just have to
+ deal with it. Which means, going back to approach #1. That is the
+ approach taken by this patch.
+
+ Change-Id: I6309fd4727da8c67951f9cea557724b77e8ee979
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ gdbserver: Reindent check_zombie_leaders
+ This fixes the indentation of
+ linux_process_target::check_zombie_leaders, which will help with
+ keeping its comments in sync with the gdb/linux-nat.c counterpart.
+
+ Change-Id: I37332343bd80423d934249e3de2d04feefad1891
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ gdbserver: Reorganize linux_process_target::filter_event
+ Reorganize linux-low.cc:linux_process_target::filter_event such that
+ all the handling for events for LWPs not in the LWP list is together.
+ This helps make a following patch clearer. The comments and debug
+ messages have also been tweaked to have them synchronized with the GDB
+ counterpart.
+
+ Change-Id: If9019635f63a846607cfda44b454b4254a404019
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ gdb: Reorganize linux_nat_filter_event
+ Reorganize linux-nat.c:linux_nat_filter_event such that all the
+ handling for events for LWPs not in the LWP list is together. This
+ helps make a following patch clearer. The comments and debug messages
+ have also been tweaked - the end goal is to have them synchronized
+ with the gdbserver counterpart.
+
+ Change-Id: I8586d8dcd76d8bd3795145e3056fc660e3b2cd22
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ Fix gdb.threads/current-lwp-dead.exp race
+ If we make GDB report the process EXIT event for the leader thread, as
+ will be done in a latter patch of this series, then
+ gdb.threads/current-lwp-dead.exp starts failing:
+
+ (gdb) break fn_return
+ Breakpoint 2 at 0x5555555551b5: file /home/pedro/rocm/gdb/build/gdb/testsuite/../../../src/gdb/testsuite/gdb.threads/current-lwp-dead.c, line 45.
+ (gdb) continue
+ Continuing.
+ [New LWP 2138466]
+ [Inferior 1 (process 2138459) exited normally]
+ (gdb) FAIL: gdb.threads/current-lwp-dead.exp: continue to breakpoint: fn_return (the program exited)
+
+ The inferior exit reported is actually correct. The main thread has
+ indeed exited, and that's the thread that has the right exit code to
+ report to the user, as that's the exit code that is reported to the
+ program's parent. In this case, GDB managed to collect the exit code
+ for the leader thread before reaping the other thread, because in
+ reality, the testcase isn't creating standard threads, it is using raw
+ clone, and the new clones are put in their own thread group.
+
+ Fix it by making the main "thread" not exit until the scenario we're
+ exercising plays out. Also, run the program to completion for
+ completeness.
+
+ The original program really wanted the leader thread to exit before
+ the fn_return function was reached -- it was important that the
+ current thread as pointed by inferior_ptid was gone when infrun got
+ the breakpoint event. I've tweaked the testcase to ensure that that
+ condition is still held, though it is no longer the main thread that
+ exits. This required a bit of synchronization between the threads,
+ which required using CLONE_VM unconditionally. The #ifdef guards were
+ added as a fix for
+ https://sourceware.org/bugzilla/show_bug.cgi?id=11214, though I don't
+ think they were necessary because the program is not using TLS. If it
+ turns out they were necessary, we can link the testcase with "-z now"
+ instead, which was mentioned as an alternative workaround in that
+ Bugzilla.
+
+ Change-Id: I7be2f0da4c2fe8f80a60bdde5e6c623d8bd5a0aa
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ Fix gdb.threads/clone-new-thread-event.exp race
+ If we make GDB report the process EXIT event for the leader thread,
+ instead of whatever is the last thread in the LWP list, as will be
+ done in a latter patch of this series, then
+ gdb.threads/current-lwp-dead.exp starts failing:
+
+ (gdb) FAIL: gdb.threads/clone-new-thread-event.exp: catch SIGUSR1 (the program exited)
+
+ This is a testcase race -- the main thread does not wait for the
+ spawned clone "thread" to finish before exiting, so the main program
+ may exit before the second thread is scheduled and reports its
+ SIGUSR1. With the change to make GDB report the EXIT for the leader,
+ the race is 100% reproducible by adding a sleep(), like so:
+
+ --- c/gdb/testsuite/gdb.threads/clone-new-thread-event.c
+ +++ w/gdb/testsuite/gdb.threads/clone-new-thread-event.c
+ @@ -51,6 +51,7 @@ local_gettid (void)
+ static int
+ fn (void *unused)
+ {
+ + sleep (1);
+ tkill (local_gettid (), SIGUSR1);
+ return 0;
+ }
+
+ Resulting in:
+
+ Breakpoint 1, main (argc=1, argv=0x7fffffffd418) at gdb.threads/clone-new-thread-event.c:65
+ 65 stack = malloc (STACK_SIZE);
+ (gdb) continue
+ Continuing.
+ [New LWP 3715562]
+ [Inferior 1 (process 3715555) exited normally]
+ (gdb) FAIL: gdb.threads/clone-new-thread-event.exp: catch SIGUSR1 (the program exited)
+
+ That inferior exit reported is actually correct. The main thread has
+ indeed exited, and that's the thread that has the right exit code to
+ report to the user, as that's the exit code that is reported to the
+ program's parent. In this case, GDB managed to collect the exit code
+ for the leader thread before reaping the other thread, because in
+ reality, the testcase isn't creating standard threads, it is using raw
+ clone, and the new clones are put in their own thread group.
+
+ Fix it by making the main thread wait for the child to exit. Also,
+ run the program to completion for completeness.
+
+ Change-Id: I315cd3dc2b9e860395dcab9658341ea868d7a6bf
+
+2022-03-10 Pedro Alves <pedro@palves.net>
+
+ Fix gdbserver/linux target_waitstatus logging assert
+ Turning on debug output in gdbserver leads to an assertion failure if
+ gdbserver reports a non-signal event:
+
+ [threads] wait_1: LWP 3273770: extended event with waitstatus status->kind = EXECD, execd_pathname = gdb.threads/non-ldr-exc-1/non-ldr-exc-1
+ [threads] wait_1: Hit a non-gdbserver trap event.
+ ../../src/gdbserver/../gdb/target/waitstatus.h:365: A problem internal to GDBserver has been detected.
+ sig: Assertion `m_kind == TARGET_WAITKIND_STOPPED || m_kind == TARGET_WAITKIND_SIGNALLED' failed.
+
+ Fix it in the obvious way, using target_waitstatus::to_string(),
+ resulting in, for example:
+
+ [threads] wait_1: ret = LWP 1542412.1542412, status->kind = STOPPED, sig = GDB_SIGNAL_TRAP
+
+ Change-Id: Ia4832f9b4fa39f4af67fcaf21fd4d909a285a645
+
+2022-03-10 Nick Clifton <nickc@redhat.com>
+
+ Add option to objdump/readelf to disable access to debuginfod servers.
+ * dwarf.c (use_debuginfod): New variable. Set to 1.
+ (load_separate_debug_info): Only call
+ debuginfod_fetch_separate_debug_info is use_debuginfod is true.
+ (dwarf_select_sections_by_names): Add do-not-use-debuginfod and
+ use-debuginfod options.
+ (dwarf_select_sections_by_letters): Add D and E options.
+ * dwarf.h (use_debuginfod): New extern.
+ * objdump.c (usage): Mention the new options.
+ * readelf.c (usage): Likewise.
+ * doc/binutils.texi: Document the new options.
+ * doc/debug-options.texi: Describe the new options.
+ * NEWS: Mention the new feature.
+ * testsuite/binutils-all/debuginfod.exp: Add tests of the new
+ options.
+
+2022-03-10 Alan Modra <amodra@gmail.com>
+
+ Re: ld: Add a before_plugin_all_symbols_read hook
+ * testsuite/ld-plugin/pr28849.d: Adjust for powerpc64 function
+ descriptors.
+
+2022-03-10 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Add a before_plugin_all_symbols_read hook
+ Add a before_plugin_all_symbols_read hook to load symbol references from
+ DT_NEEDED entries, included from --copy-dt-needed-entries, before reading
+ plugin symbols to properly resolve plugin symbol references.
+
+ bfd/
+
+ PR ld/28849
+ * elf-bfd.h (elf_link_hash_table): Add handling_dt_needed.
+ * elflink.c (_bfd_elf_merge_symbol): Don't set non_ir_ref_dynamic
+ before plugin 'all symbols read' hook is called.
+
+ ld/
+
+ PR ld/28849
+ * ldelf.c (ldelf_handle_dt_needed): New function.
+ (ldelf_before_plugin_all_symbols_read): Likewise.
+ (ldelf_after_open): Call ldelf_handle_dt_needed.
+ * ldelf.h (ldelf_before_plugin_all_symbols_read): New.
+ * ldemul.c (ldemul_before_plugin_all_symbols_read): Likewise.
+ * ldemul.h (ldemul_before_plugin_all_symbols_read): Likewise.
+ (ld_emulation_xfer_struct): Add before_plugin_all_symbols_read.
+ * ldlang.c (lang_process): Call
+ ldemul_before_plugin_all_symbols_read before calling
+ plugin_call_all_symbols_read.
+ * emultempl/elf.em
+ (gld${EMULATION_NAME}_before_plugin_all_symbols_read): New.
+ (LDEMUL_BEFORE_PLUGIN_ALL_SYMBOLS_READ): New.
+ * emultempl/emulation.em (ld_${EMULATION_NAME}_emulation):
+ Initialize the before_plugin_all_symbols_read field.
+ * testsuite/ld-plugin/lto.exp: Run PR ld/28849 tests.
+ * testsuite/ld-plugin/pr28849.d: New file.
+ * testsuite/ld-plugin/pr28849a.c: Likewise.
+ * testsuite/ld-plugin/pr28849b.c: Likewise.
+
+2022-03-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-09 Hans-Peter Nilsson <hp@axis.com>
+
+ toplevel: Makefile.def: Make configure-sim depend on all-readline
+ Without this, a "make all-sim" without the equivalent of
+ libreadline-dev installed on the build system, won't
+ properly pick up the in-tree readline build, and you'll see:
+
+ mkdir -p -- ./sim
+ Configuring in ./sim
+ configure: creating cache ./config.cache
+ checking build system type... x86_64-pc-linux-gnu
+ checking host system type... x86_64-pc-linux-gnu
+ checking target system type... cris-axis-elf
+ checking for x86_64-pc-linux-gnu-gcc... gcc
+ checking whether the C compiler works... yes
+ ...
+ checking for library containing tgetent... -ltermcap
+ checking for readline in -lreadline... no
+ configure: error: the required "readline" library is missing
+ make[1]: *** [Makefile:11188: configure-sim] Error 1
+ make[1]: Leaving directory '/home/hp/sim/b'
+
+ The sim dependency on readline is apparently (nominally)
+ valid as there's a readline call in sim/erc32/sis.c.
+
+ 2022-02-21 Hans-Peter Nilsson <hp@axis.com>
+
+ * Makefile.def (dependencies): Make configure-sim depend on
+ all-readline.
+
+2022-03-09 Maciej W. Rozycki <macro@embecosm.com>
+
+ GDB/testsuite: Fix a "displayed" typo in gdb.base/default.exp
+ Fix a typo, s/dislayed/displayed/ in default.exp at the top level.
+
+ GDB/testsuite: Remove a stray backslash from gdb.base/settings.exp
+ Remove a stray trailing backslash from `test-integer' in settings.exp.
+ It is harmless as only white space follows in the next line before the
+ closing brace, so it merely swallows the newline character, but it may
+ look confusing to the reader.
+
+2022-03-09 Christina Schimpe <christina.schimpe@intel.com> (tiny change)
+
+ * gdb/doc/gdb.texinfo (Requirements): Fix a typo.
+
+2022-03-09 Alan Modra <amodra@gmail.com>
+
+ Constant fold view increment expressions
+ The idea here is to replace expressions like v + 1 + 1 + 1 with v + 3.
+
+ * dwarf2dbg.c (set_or_check_view): Remove useless assertion.
+ Resolve multiple view increments.
+ * testsuite/gas/elf/dwarf2-18.d: Don't xfail mep.
+
+2022-03-09 Alan Modra <amodra@gmail.com>
+
+ Reduce duplicated symbol_clone_if_forward_ref work
+ * symbol.c (struct symbol_flags): Add forward_resolved.
+ (symbol_entry_find): Update needle initialisation.
+ (symbol_clone_if_forward_ref): Do no work when forward_resolved
+ is already set. Set forward_resolved.
+
+2022-03-09 Aaron Merey <amerey@redhat.com>
+
+ gdb: Try searching for auto-load script using .gnu_debuglink
+ If an auto-load script cannot be found and objfile is a separate
+ debuginfo whose filename does not match the name found in the parent
+ file's .gnu_debuglink section, then repeat the search using the
+ parent's filename where the last component is replaced with the
+ .gnu_debuglink name.
+
+ For example if the parent's filename is "/usr/lib/libxyz.so" and the
+ name in its .gnu_debuglink section is "libxyz.so.debug", then
+ if no auto-load script is otherwise found the search will be
+ repeated with the filename "/usr/lib/libxyz.so.debug".
+
+ This helps gdb locate auto-load scripts when debuginfo files do not have
+ the expected filename, such as when they are aquired from debuginfod.
+
+2022-03-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-08 Aaron Merey <amerey@redhat.com>
+
+ PR gdb/27876 - debuginfod-downloaded source files don't pass proper fullname across mi / (gdb)info source
+ Source files downloaded from debuginfod currently use their original DWARF
+ filename as their "fullname". This causes a mismatch between the fullname
+ and the actual location of the source file in the debuginfod client cache.
+
+ MI consumers such as VSCode will fail to open debuginfod-downloaded
+ source files due to this. Also 'info source' will fail to include the
+ true paths of these files.
+
+ To fix this, use the debuginfod cache path as the fullname for debuginfod-
+ downloaded source files.
+
+2022-03-08 Jan Vrany <jan.vrany@labware.com>
+
+ gdb/mi: preserve user selected thread and frame when invoking MI commands
+ Fix for PR gdb/20684. When invoking MI commands with --thread and/or
+ --frame, the user selected thread and frame was not preserved:
+
+ (gdb)
+ info thread
+ &"info thread\n"
+ ~" Id Target Id Frame \n"
+ ~"* 1 Thread 0x7ffff7c30740 (LWP 19302) \"user-selected-c\" main () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:60\n"
+ ~" 2 Thread 0x7ffff7c2f700 (LWP 19306) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n"
+ ~" 3 Thread 0x7ffff742e700 (LWP 19307) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n"
+ ^done
+ (gdb)
+ info frame
+ &"info frame\n"
+ ~"Stack level 0, frame at 0x7fffffffdf90:\n"
+ ~" rip = 0x555555555207 in main (/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:60); saved rip = 0x7ffff7c5709b\n"
+ ~" source language c.\n"
+ ~" Arglist at 0x7fffffffdf80, args: \n"
+ ~" Locals at 0x7fffffffdf80, Previous frame's sp is 0x7fffffffdf90\n"
+ ~" Saved registers:\n "
+ ~" rbp at 0x7fffffffdf80, rip at 0x7fffffffdf88\n"
+ ^done
+ (gdb)
+ -stack-info-depth --thread 3
+ ^done,depth="4"
+ (gdb)
+ info thread
+ &"info thread\n"
+ ~" Id Target Id Frame \n"
+ ~" 1 Thread 0x7ffff7c30740 (LWP 19302) \"user-selected-c\" main () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:60\n"
+ ~" 2 Thread 0x7ffff7c2f700 (LWP 19306) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n"
+ ~"* 3 Thread 0x7ffff742e700 (LWP 19307) \"user-selected-c\" child_sub_function () at /home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30\n"
+ ^done
+ (gdb)
+ info frame
+ &"info frame\n"
+ ~"Stack level 0, frame at 0x7ffff742dee0:\n"
+ ~" rip = 0x555555555169 in child_sub_function (/home/uuu/gdb/gdb/testsuite/gdb.mi/user-selected-context-sync.c:30); saved rip = 0x555555555188\n"
+ ~" called by frame at 0x7ffff742df00\n"
+ ~" source language c.\n"
+ ~" Arglist at 0x7ffff742ded0, args: \n"
+ ~" Locals at 0x7ffff742ded0, Previous frame's sp is 0x7ffff742dee0\n"
+ ~" Saved registers:\n "
+ ~" rbp at 0x7ffff742ded0, rip at 0x7ffff742ded8\n"
+ ^done
+ (gdb)
+
+ This caused problems for frontends that provide access to CLI because UI
+ may silently change the context for CLI commands (as demonstrated above).
+
+ This commit fixes the problem by restoring thread and frame in
+ mi_cmd_execute (). With this change, there are only two GDB/MI commands
+ that can change user selected context: -thread-select and -stack-select-frame.
+ This allows us to remove all and rather complicated logic of notifying
+ about user selected context change from mi_execute_command (), leaving it
+ to these two commands themselves to notify.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20684
+
+2022-03-08 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: announce upcoming removal of Python 2 support from gdb
+ As has been discussed here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-January/184910.html
+
+ Python 2 support will be removed from GDB after GDB 12 has branched.
+ This commit places an entry in the NEWS file to inform users of this
+ decision.
+
+2022-03-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: add new test for comparing char types in Python
+ There's an interesting property of the 'char' type in C and C++, the
+ three types 'char', 'unsigned char', and 'signed char', are all
+ considered distinct.
+
+ In contrast, and 'int' is signed by default, and so 'int' and 'signed
+ int' are considered the same type.
+
+ This commit adds a test to ensure that this edge case is visible to a
+ user from Python.
+
+ It is worth noting that for any particular compiler implementation (or
+ the flags a compiler was invoked with), a 'char' will be either signed
+ or unsigned; it has to be one or the other, and a user can access this
+ information by using the Type.is_signed property. However, for
+ something like function overload resolution, the 'char' type is
+ considered distinct from the signed and unsigned variants.
+
+ There's no change to GDB with this commit, this is just adding a new
+ test to guard some existing functionality.
+
+2022-03-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: add Type.is_signed property
+ Add a new read-only property, Type.is_signed, which is True for signed
+ types, and False otherwise.
+
+ This property should only be read on types for which Type.is_scalar is
+ true, attempting to read this property for non-scalar types will raise
+ a ValueError.
+
+ I chose 'is_signed' rather than 'is_unsigned' in order to match the
+ existing Architecture.integer_type method, which takes a 'signed'
+ parameter. As far as I could find, that was the only existing
+ signed/unsigned selector in the Python API, so it seemed reasonable to
+ stay consistent.
+
+2022-03-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: add Type.is_scalar property
+ Add a new read-only property which is True for scalar types,
+ otherwise, it's False.
+
+2022-03-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/mi: add --no-connection to MI -add-inferior command
+ Following on from the previous commit, where the -add-inferior command
+ now uses the same connection as the current inferior, this commit adds
+ a --no-connection option to -add-inferior.
+
+ This new option matches the existing option of the same name for the
+ CLI version of add-inferior; the new inferior is created with no
+ connection.
+
+ I've added a new 'connection' field to the MI output of -add-inferior,
+ which includes the connection number and short name. I haven't
+ included the longer description field, this is the MI after all. My
+ expectation would be that if the frontend wanted to display all the
+ connection details then this would be looked up from 'info
+ connection' (or the MI equivalent if/when such a command is added).
+
+ The existing -add-inferior tests are updated, as are the docs.
+
+2022-03-07 Umair Sair <umair_sair@hotmail.com>
+
+ gdb/mi: fix regression in mi -add-inferior command
+ Prior to the multi-target support commit:
+
+ commit 5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2
+ Date: Fri Jan 10 20:06:08 2020 +0000
+
+ Multi-target support
+
+ When a new inferior was added using the MI -add-inferior command, the
+ new inferior would be using the same target as all the other
+ inferiors. This makes sense, GDB only supported a single target stack
+ at a time.
+
+ After the above commit, each inferior has its own target stack.
+
+ To maintain backward compatibility, for the CLI add-inferior command,
+ when a new inferior is added the above commit has the new inferior
+ inherit a copy of the target stack from the current inferior.
+
+ Unfortunately, this same backward compatibility is missing for the MI.
+
+ This commit fixes this oversight.
+
+ Now, when the -add-inferior MI command is used, the new inferior will
+ inherit a copy of the target stack from the current inferior.
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Deprecate dbx mode
+ GDB has a dbx emulation mode that adds a few aliases and helper
+ commands. This mode is barely documented and is very superficial
+ besides. I suspect it is rarely used, and I would like to propose
+ deprecating it for GDB 12, and then removing it in GDB 13.
+
+2022-03-07 Pedro Alves <pedro@palves.net>
+
+ Remove unnecessary inferior lookup in infrun:handle_one
+ infrun.c:handle_one calls find_inferior_ptid unnecessarily, since we
+ already have a thread pointer handy, and the thread has a pointer to
+ the inferior. This commit removes the unnecessary lookup.
+
+ Change-Id: I2ae18601dd75346c6c91068e9a4f9a6484fb3339
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Fix bug in ada_print_floating
+ ada_print_floating rewrites a floating-point string representation to
+ conform to Ada syntax. However, if you managed to get a floating
+ point error, you might see:
+
+ (gdb) print whatever
+ $2 = <invalid float valu.0e>
+
+ What's happening here is that ada_print_floating doesn't recognize
+ this error case, and proceeds to modify the error text.
+
+ This patch fixes this problem.
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Implement real literal extension for Ada
+ Sometimes it is convenient to be able to specify the exact bits of a
+ floating-point literal. For example, you may want to set a
+ floating-point register to a denormalized value, or to a particular
+ NaN.
+
+ In C, you can do this by combining the "{}" cast with an array
+ literal, like:
+
+ (gdb) p {double}{0x576488BDD2AE9FFE}
+ $1 = 9.8765449999999996e+112
+
+ This patch adds a somewhat similar idea to Ada. It extends the lexer
+ to allow "l" and "f" suffixes in a based literal. The "f" indicates a
+ floating-point literal, and the "l"s control the size of the
+ floating-point type.
+
+ Note that this differs from Ada's based real literals. I believe
+ those can also be used to control the bits of a floating-point value,
+ but they are a bit more cumbersome to use (simplest is binary but
+ that's also very lengthy). Also, these aren't implemented in GDB.
+
+ I chose not to allow this extension to work with based integer
+ literals with exponents. That didn't seem very useful.
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Fix Ada integer literals with exponents
+ While working on another patch, I noticed that Ada integer literals
+ with exponents did not work. For example, with one form you get an
+ error:
+
+ (gdb) print 8e2
+ Invalid digit `e' in based literal
+
+ And with another form you get an incorrect value:
+
+ (gdb) print 16#8#e2
+ $2 = 8
+
+ This patch fixes the bugs and adds tests.
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Fix gdb.ada/arrayptr.exp results
+ PR ada/28115 points out that gdb.ada/arrayptr.exp works with GNAT 12,
+ but fails with minimal encodings in earlier versions.
+
+ This patch updates the test to try to report the results correctly. I
+ tried this with the Fedora 34 system gcc (GCC 11) and with a GCC 12
+ built from git trunk sometime relatively recently.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28115
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Handle non-ASCII identifiers in Ada
+ Ada allows non-ASCII identifiers, and GNAT supports several such
+ encodings. This patch adds the corresponding support to gdb.
+
+ GNAT encodes non-ASCII characters using special symbol names.
+
+ For character sets like Latin-1, where all characters are a single
+ byte, it uses a "U" followed by the hex for the character. So, for
+ example, thorn would be encoded as "Ufe" (0xFE being lower case
+ thorn).
+
+ For wider characters, despite what the manual says (it claims
+ Shift-JIS and EUC can be used), in practice recent versions only
+ support Unicode. Here, characters in the base plane are represented
+ using "Wxxxx" and characters outside the base plane using
+ "WWxxxxxxxx".
+
+ GNAT has some further quirks here. Ada is case-insensitive, and GNAT
+ emits symbols that have been case-folded. For characters in ASCII,
+ and for all characters in non-Unicode character sets, lower case is
+ used. For Unicode, however, characters that fit in a single byte are
+ converted to lower case, but all others are converted to upper case.
+
+ Furthermore, there is a bug in GNAT where two symbols that differ only
+ in the case of "Y WITH DIAERESIS" (and potentially others, I did not
+ check exhaustively) can be used in one program. I chose to omit
+ handling this case from gdb, on the theory that it is hard to figure
+ out the logic, and anyway if the bug is ever fixed, we'll regret
+ having a heuristic.
+
+ This patch introduces a new "ada source-charset" setting. It defaults
+ to Latin-1, as that is GNAT's default. This setting controls how "U"
+ characters are decoded -- W/WW are always handled as UTF-32.
+
+ The ada_tag_name_from_tsd change is needed because this function will
+ read memory from the inferior and interpret it -- and this caused an
+ encoding failure on PPC when running a test that tries to read
+ uninitialized memory.
+
+ This patch implements its own UTF-32-based case folder. This avoids
+ host platform quirks, and is relatively simple. A short Python
+ program to generate the case-folding table is included. It simply
+ relies on whatever version of Unicode is used by the host Python,
+ which seems basically acceptable.
+
+ Test cases for UTF-8, Latin-1, and Latin-3 are included. This
+ exercises most of the new code paths, aside from Y WITH DIAERESIS as
+ noted above.
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Define HOST_UTF32 in charset.h
+ rust-parse.c has a #define for the host-specific UTF-32 charset name.
+ A later patch needs the same thing, so this patch moves the definition
+ to charset.h for easier reuse.
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Let phex and phex_nz handle sizeof_l==1
+ Currently, neither phex nor phex_nz handle sizeof_l==1 -- they let
+ this case fall through to the default case. However, a subsequent
+ patch in this series needs this case to work correctly.
+
+ I looked at all calls to these functions that pass a 1 for the
+ sizeof_l parameter. The only such case seems to be correct with this
+ change.
+
+2022-03-07 Tom Tromey <tromey@adacore.com>
+
+ Don't pre-size result string in ada_decode
+ Currently, ada_decode pre-sizes the output string, filling it with 'X'
+ characters. However, it's a bit simpler and more flexible to let
+ std::string do the work here, and simply append characters to the
+ string as we go. This turns out to be useful for a subsequent patch.
+
+ Simplify a regular expression in ada-lex.l
+ ada-lex.l uses "%option case-insensitive", so there is no need for
+ regular expressions to match upper case.
+
+2022-03-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-06 Maciej W. Rozycki <macro@orcam.me.uk>
+
+ MIPS/opcodes: Fix alias annotation for branch instructions
+ Correct issues with INSN2_ALIAS annotation for branch instructions:
+
+ - regular MIPS BEQZ/L and BNEZ/L assembly instructions are idioms for
+ BEQ/L and BNE/L respectively with the `rs' operand equal to $0,
+
+ - microMIPS 32-bit BEQZ and BNEZ assembly instructions are idioms for
+ BEQ and BNE respectively with the `rt' operand equal to $0,
+
+ - regular MIPS BAL assembly instruction is an idiom for architecture
+ levels of up to the MIPSr5 ISA and a machine instruction on its own
+ from the MIPSr6 ISA up.
+
+ Add missing annotation to BEQZ/L and BNEZ/L accordingly then and add a
+ new entry for BAL for the MIPSr6 ISA, correcting a disassembly bug:
+
+ $ mips-linux-gnu-objdump -m mips:isa64r6 -M no-aliases -d bal.o
+
+ bal.o: file format elf32-tradlittlemips
+
+ Disassembly of section .text:
+
+ 00000000 <foo>:
+ 0: 04110000 0x4110000
+ ...
+ $
+
+ Add test cases accordingly.
+
+ Parts for regular MIPS BEQZ/L and BNEZ/L instructions from Sagar Patel.
+
+ 2022-03-06 Maciej W. Rozycki <macro@orcam.me.uk>
+
+ binutils/
+ * testsuite/binutils-all/mips/mips1-branch-alias.d: New test.
+ * testsuite/binutils-all/mips/mips1-branch-noalias.d: New test.
+ * testsuite/binutils-all/mips/mips2-branch-alias.d: New test.
+ * testsuite/binutils-all/mips/mips2-branch-noalias.d: New test.
+ * testsuite/binutils-all/mips/mips32r6-branch-alias.d: New test.
+ * testsuite/binutils-all/mips/mips32r6-branch-noalias.d: New
+ test.
+ * testsuite/binutils-all/mips/micromips-branch-alias.d: New
+ test.
+ * testsuite/binutils-all/mips/micromips-branch-noalias.d: New
+ test.
+ * testsuite/binutils-all/mips/mips-branch-alias.s: New test
+ source.
+ * testsuite/binutils-all/mips/micromips-branch-alias.s: New test
+ source.
+ * testsuite/binutils-all/mips/mips.exp: Run the new tests.
+
+ 2022-03-06 Sagar Patel <sagarmp@cs.unc.edu>
+ Maciej W. Rozycki <macro@orcam.me.uk>
+
+ opcodes/
+ * mips-opc.c (mips_builtin_opcodes): Fix INSN2_ALIAS annotation
+ for "bal", "beqz", "beqzl", "bnez" and "bnezl" instructions.
+ * micromips-opc.c (micromips_opcodes): Likewise for "beqz" and
+ "bnez" instructions.
+
+2022-03-06 Tom Tromey <tom@tromey.com>
+
+ Use function view when iterating over block symbols
+ This changes iterate_over_block_local_vars and
+ iterate_over_block_arg_vars to take a gdb::function_view rather than a
+ function pointer and a user-data. In one spot, this allows us to
+ remove a helper structure and helper function. In another spot, this
+ looked more complicated, so I changed the helper function to be an
+ "operator()" -- also a simplification, just not as big.
+
+2022-03-06 Tom Tromey <tom@tromey.com>
+
+ Simplify hppa-tdep.c use of objfile_key
+ I happened to notice a couple of unnecessary casts in hppa-tdep.c, and
+ then I saw that the use of objfile_key could be simplified -- removing
+ some code and using the default deleter rather than noop_deleter.
+
+ Tested by rebuilding. Let me know what you think.
+
+2022-03-06 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: constify parameter of value_copy
+ In a following patch, I have a const value I want to copy using a
+ value_copy. However, value_copy takes a non-const source value, at the
+ moment. Change the paramter to be const,
+
+ If the source value is not lazy, we currently call
+ value_contents_all_raw, which calls allocate_value_contents, to get a
+ view on the contents. They both take a non-const value, that's a
+ problem. My first attempt at solving it was to add a const version of
+ value_contents_all_raw, make allocate_value_contents take a const value,
+ and either:
+
+ - make value::contents mutable
+ - make allocate_value_contents cast away the const
+
+ The idea being that allocating the value contents buffer does modify the
+ value at the bit level, but logically that doesn't change its state.
+
+ That was getting a bit complicated, so what I ended up doing is make
+ value_copy not call value_contents_all_raw. We know at this point that
+ the value is not lazy, so value::contents must have been allocate
+ already.
+
+ Change-Id: I3741ab362bce14315f712ec24064ccc17e3578d4
+
+2022-03-06 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove internalvar_funcs::destroy
+ No kind of internal var uses it remove it. This makes the transition to
+ using a variant easier, since we don't need to think about where this
+ should be called (in a destructor or not), if it can throw, etc.
+
+ Change-Id: Iebbc867d1ce6716480450d9790410d6684cbe4dd
+
+2022-03-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-04 Tom Tromey <tromey@adacore.com>
+
+ Mark vDSO as not a file
+ The vDSO objfile is not a real file, so mark it as such. I noticed
+ this because, when playing with debuginfod, I saw:
+
+ Downloading 0.01 MB separate debug info for /tmp/system-supplied DSO at 0x7ffff7fc9000
+
+ That "/tmp" is wrong -- it's just gdb's cwd. This patch corrects the
+ problem, resulting in:
+
+ Downloading 0.01 MB separate debug info for system-supplied DSO at 0x7ffff7fc9000
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-03-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ binutils/readelf: fix indentation in process_dynamic_section
+ Clangd shows a warning about misleading indentation in this file, fix
+ it.
+
+ binutils/ChangeLog:
+
+ * readelf.c (process_dynamic_section): Fix indentation.
+
+ Change-Id: I43a7f4f4c75dd080af614222b980526f5debf297
+
+2022-03-04 Christina Schimpe <christina.schimpe@intel.com>
+
+ gdb: Use a typedef's scoped type name to identify local typedefs
+ GDB prints the wrong type for typedefs in case there is another typedef
+ available for the same raw type (gdb/16040). The reason is that the
+ current hashmap based substitution mechanism always compares the target
+ type of a typedef and not its scoped name.
+
+ The original output of GDB for a program like
+
+ ~~~~
+ namespace ns
+ {
+ typedef double scoped_double;
+ }
+
+ typedef double global_double;
+
+ class TypedefHolder
+ {
+ public:
+ double a;
+ ns::scoped_double b;
+ global_double c;
+
+ private:
+ typedef double class_double;
+ class_double d;
+
+ double method1(ns::scoped_double) { return 24.0; }
+ double method2(global_double) { return 24.0; }
+ };
+
+ int main()
+ {
+ TypedefHolder th;
+ return 0;
+ }
+ ~~~~
+
+ is
+ ~~~~
+
+ (gdb) b 27
+ Breakpoint 1 at 0x1131: file TypedefHolder.cc, line 27.
+ (gdb) r
+ Starting program: /tmp/typedefholder
+
+ Breakpoint 1, main () at TypedefHolder.cc:27
+ 27 return 0;
+ (gdb) ptype th
+ type = class TypedefHolder {
+ public:
+ class_double a;
+ class_double b;
+ class_double c;
+ private:
+ class_double d;
+
+ class_double method1(class_double);
+ class_double method2(class_double);
+
+ typedef double class_double;
+ }
+ ~~~~
+
+ Basically all attributes of a class which have the raw type "double" are
+ substituted by "class_double".
+
+ With the patch the output is the following
+
+ ~~~~
+ type = class TypedefHolder {
+ public:
+ double a;
+ ns::scoped_double b;
+ global_double c;
+ private:
+ class_double d;
+
+ double method1(ns::scoped_double);
+ double method2(global_double);
+
+ typedef double class_double;
+ }
+ ~~~~
+
+2022-03-04 Jan Beulich <jbeulich@suse.com>
+
+ RISC-V: make .insn actually work for 64-bit insns
+ Presently in this case, due to an undefined behavior shift, at least
+ with x86 cross builds I'm observing:
+
+ Error: value conflicts with instruction length `8,0x0000003f'
+
+ Eliminate the UB and extend the respective testcase.
+
+2022-03-04 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop redundant x86-64-code16-2 test
+ The code16-2 test is already meaningless enough as a gas test, identical
+ to this one, and is run uniformly for all ELF targets anyway.
+
+2022-03-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-03 Roland McGrath <mcgrathr@google.com>
+
+ Fix typo in last change.
+
+2022-03-03 Roland McGrath <mcgrathr@google.com>
+
+ Avoid conflict with gnulib open/close macros.
+ On some systems, the gnulib configuration will decide to define open
+ and/or close as macros to replace the POSIX C functions. This
+ interferes with using those names in C++ class or namespace scopes.
+
+ gdbsupport/
+ * event-pipe.cc (event_pipe::open): Renamed to ...
+ (event_pipe::open_pipe): ... this.
+ (event_pipe::close): Renamed to ...
+ (event_pipe::close_pipe): ... this.
+ * event-pipe.h (class event_pipe): Updated.
+ gdb/
+ * inf-ptrace.h (async_file_open, async_file_close): Updated.
+ gdbserver/
+ * gdbserver/linux-low.cc (linux_process_target::async): Likewise.
+
+2022-03-03 Alan Modra <amodra@gmail.com>
+
+ Adjust ld ctf test for 32-bit targets
+ powerpc-linux, and I suspect other 32-bit targets, report "aligned at
+ 0x4" for this test.
+
+ * testsuite/ld-ctf/nonrepresentable.d: Accept any alignment.
+
+2022-03-03 Luis Machado <luis.machado@arm.com>
+
+ Update my e-mail address in the MAINTAINERS file
+ Update the information accordingly.
+
+2022-03-03 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: fix failed testcases in gdb.base/gdb-caching-proc.exp
+ When execute the following command:
+
+ make check-gdb TESTS="gdb.base/gdb-caching-proc.exp"
+
+ we can see there exist some failed testcases:
+
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 0: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 1: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 2: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 3: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 4: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 5: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 6: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 7: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 8: can spawn for attach (got interactive prompt)
+ FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 9: can spawn for attach (got interactive prompt)
+
+ here are the detailed messages in gdb/testsuite/gdb.log:
+
+ attach 873776
+ A program is being debugged already. Kill it? (y or n) n
+ Not killed.
+ (gdb) FAIL: gdb.base/gdb-caching-proc.exp: can_spawn_for_attach: 0: can spawn for attach (got interactive prompt)
+
+ so handle the case "A program is being debugged already. Kill it" in
+ can_spawn_for_attach to fix the failed testcases.
+
+2022-03-03 Alan Modra <amodra@gmail.com>
+
+ comment typo fix
+
+2022-03-03 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 DT_RELR relative reloc addresses
+ Section addresses can change between ppc64_elf_size_stubs and
+ ppc64_elf_build_stubs due to .eh_frame editing. The idea of stashing
+ r_offset final addresses calculated in ppc64_elf_size_stubs for use by
+ ppc64_elf_build_stubs was never a good idea. Instead, we need to keep
+ section/offset pairs.
+
+ * elf64-ppc.c (struct ppc_link_hash_table): Delete relr_addr.
+ Add relr section/offset array.
+ (append_relr_off): Rewrite. Update all callers.
+ (sort_relr): New function.
+ (ppc64_elf_size_stubs): Adjust to suit new relative reloc stash.
+ (ppc64_elf_build_stubs): Likewise.
+
+2022-03-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-02 John Baldwin <jhb@FreeBSD.org>
+
+ configure: Stop checking for PT_GETXMMREGS.
+ This request is present on all modern *BSD/i386 systems (those
+ released since mid-2006), and the *BSD/i386 targets now assume it is
+ present unconditionally.
+
+ i386-bsd-nat: Assume PT_GETXMMREGS is present.
+ NetBSD has included PT_GETXMMREGS since 1.6 released in September
+ 2002. OpenBSD has included PT_GETXMMREGS since 3.8 released in
+ November 2005.
+
+ i386-fbsd-nat: Assume PT_GETXMMREGS is present.
+ PT_GETXMMREGS was first added in FreeBSD 6.0 released in November 2005.
+ The last FreeBSD release without support was 5.5 released in May 2006.
+
+2022-03-02 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-tdep: Implement the vsyscall_range gdbarch hook.
+ FreeBSD recently added a real vDSO in its shared page for the amd64
+ architecture. The vDSO is mapped at the address given by the
+ AT_KPRELOAD ELF auxiliary vector entry. To find the end of the
+ mapping range, parse the list of virtual map entries used by 'info
+ proc mappings' either from the NT_PROCSTAT_VMMAP core dump note, or
+ via the kinfo_getvmmap function for native targets (fetched from the
+ native target as the TARGET_OBJECT_FREEBSD_VMMAP object).
+
+ This silences warnings on recent FreeBSD/amd64 kernels due to not
+ finding symbols for the vdso:
+
+ warning: Could not load shared library symbols for [vdso].
+ Do you need "set solib-search-path" or "set sysroot"?
+
+2022-03-02 Tom Tromey <tromey@adacore.com>
+
+ Rewrite make-target-delegates in Python
+ I think gdb is probably better off having fewer languages involved
+ when generating code. 'sh' is unavoidable for build-time generation,
+ but for other things, let's use Python.
+
+ This rewrites make-target-delegates in Python. I've stuck pretty
+ closely to the original code in this rewrite, so it may look slightly
+ weird from a Python perspective.
+
+ The only output difference is that a copyright header is now
+ generated, using the code introduced in the previous patch.
+
+ make-target-delegates.py is simpler to invoke, as it knows the correct
+ input file to scan and it creates the output file itself.
+
+2022-03-02 Tom Tromey <tromey@adacore.com>
+
+ Move copyright code from gdbarch.py to new file
+ This moves the copyright code from gdbarch.py to a new Python source
+ file, gdbcopyright.py. The function in this file will find the
+ copyright dates by scanning the calling script. This will be reused
+ in a future patch.
+
+ This involved minor changes to the output of gdbarch.py. Also, I've
+ updated copyright.py to remove the reference to gdbarch.sh. We don't
+ need to mention gdbarch.py there, either.
+
+2022-03-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-03-01 Tom Tromey <tom@tromey.com>
+
+ Some "distclean" fixes in gdb
+ PR build/12440 points out that "make distclean" is broken in gdb.
+ Most of the breakage comes from other projects in the tree, but we can
+ fix some of the issues, which is what this patch does.
+
+ Note that the yacc output files, like c-exp.c, are left alone. In a
+ source distribution, these are included in the tarball, and if the
+ user builds in-tree, we would not want to remove them.
+
+ While that seems a bit obscure, it seems to me that "distclean" is
+ only really useful for in-tree builds anyway -- out-of-tree I simply
+ delete the entire build directory and start over.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=12440
+
+2022-03-01 Tom Tromey <tom@tromey.com>
+
+ Fix typo in the "alias" example
+ PR cli/17332, filed around 8 years ago, points out a typo in the docs
+ -- in one example, the command and its output are obviously out of
+ sync. This patch fixes it. I'm checking this in as obvious.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17332
+
+2022-03-01 Nick Clifton <nickc@redhat.com>
+
+ Fix a typo in the previous delta to bfdio.c.
+ PR 25713
+ * bfdio.c (_bfd_real_fopen): Fix typo.
+
+2022-03-01 Alan Modra <amodra@gmail.com>
+
+ Revert "Check thin archive element file size against archive header"
+ This reverts commit 48e3e6aec8a4f37d00ea6c0da3ab45e76490e3db.
+
+ PR 28929
+ * archive.c (_bfd_get_elt_at_filepos): Don't check thin archive
+ element file size.
+
+2022-03-01 Nick Clifton <nickc@redhat.com>
+
+ Fix linker tests to compile with gcc-12.
+ PR 21964
+ * testsuite/ld-elf/pr21964-1a.c: Fix array comparisons.
+ * testsuite/ld-elf/pr21964-1b.c: Likewise.
+ * testsuite/ld-elf/pr21964-1c.c: Likewise.
+ * testsuite/ld-elf/pr21964-2a.c: Likewise.
+ * testsuite/ld-elf/pr21964-2b.c: Likewise.
+ * testsuite/ld-elf/pr21964-3a.c: Likewise.
+
+ Prevent an assertion from being triggered when linking an ARM object file with incorrectly set build attributes.
+ PR 28848
+ PR 28859
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): If the first
+ input bfd has a Tag_ABI_HardFP_use set to 3 but does not also have
+ TAG_FP_arch set then reset the TAG_ABI_HardFP_use.
+
+2022-03-01 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: fix wrong expected result in attach-pie-noexec.exp
+ If /proc/sys/kernel/yama/ptrace_scope is 1, when execute the test case
+ gdb.base/attach-pie-noexec.exp without superuser, the gdb.log shows the
+ following info:
+
+ (gdb) attach 6500
+ Attaching to process 6500
+ ptrace: Operation not permitted.
+ (gdb) PASS: gdb.base/attach-pie-noexec.exp: attach
+
+ It is obviously wrong, the expected result should be UNSUPPORTED in such
+ a case.
+
+ It is better to make can_spawn_for_attach to return false for this case.
+ It would have to setup a small test program, compile it to exec, spawn it
+ and try to attach to it.
+
+ With this patch, we can see "Operation not permitted" in the log info,
+ and then we can do the following processes to test:
+ (1) set ptrace_scope as 0
+ $ echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
+ $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"
+ (2) use sudo
+ $ sudo make check-gdb TESTS="gdb.base/attach-pie-noexec.exp"
+
+ Additionally, handle the other cases when test with RUNTESTFLAGS=
+ "--target_board=native-extended-gdbserver".
+
+2022-03-01 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: print explicit test result in can_spawn_for_attach
+ In the current code, there is no test result when execute the following
+ commands:
+
+ $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" RUNTESTFLAGS="--target_board=remote-gdbserver-on-localhost"
+ $ make check-gdb TESTS="gdb.base/attach-pie-noexec.exp" RUNTESTFLAGS="--target_board=native-gdbserver"
+
+ It is better to print explicit test result in can_spawn_for_attach.
+
+2022-03-01 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: add Tiezhu Yang as LoongArch maintainer
+ The patch series "gdb: Add basic support for LoongArch" has been
+ merged into master, list Tiezhu Yang as LoongArch maintainer.
+
+2022-03-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-28 Keith Seitz <keiths@redhat.com>
+
+ Fix "spawn id XYZ not open" errors in gdb.mi/mi-exec-run.exp
+ Running mi-exec-run.exp on native-extended-gdbserver/-m{32,64}
+ causes several Tcl errors to appear. For example,
+
+ (gdb)
+ ERROR: : spawn id exp20 not open
+ while executing
+ "expect {
+ -i exp11 -timeout 10
+ -i "$inferior_spawn_id"
+ -re ".*Cannot exec.*Permission denied" {
+ set saw_perm_error 1
+ verbose -log "saw..."
+ ("uplevel" body line 1)
+ invoked from within
+ "uplevel $body" NONE : spawn id exp20 not open
+ UNRESOLVED: gdb.mi/mi-exec-run.exp: inferior-tty=separate: mi=separate: force-fail=1: run failure detected (eof)
+
+ This is happening because of the way this test is implemented:
+
+ while {1} {
+ gdb_expect {
+ -i "$inferior_spawn_id"
+ -re ".*Cannot exec.*Permission denied" {
+ set saw_perm_error 1
+ verbose -log "saw mi error"
+ }
+ -i "$gdb_spawn_id"
+ -re "\\^error,msg=\"During startup program exited with code 127" {
+ set saw_mi_error 1
+ verbose -log "saw mi error"
+ }
+ # and so on
+ }
+ }
+
+ The first time this loop is executed, `inferior_spawn_id' is valid. When the
+ first branch of the expect statement is reached, gdbserver has exited, closing
+ the spawn_id. Since we haven't seen the gdb-side error yet, the loop is executed
+ again. The first branch now refers to a non-existent spawn_id, leading to the error.
+
+ This can be fixed by using exp_continue to loop in expect instead of looping around
+ expect, which is the approach I have used[1]. Note I've had to update the expected
+ message for the "During startup..." error message when running with gdbserver.
+
+ One other small change I've made is to add a log entry which spills the values of
+ the two variables, saw_mi_error and saw_perm_error (and updated the log output
+ for the later). This should make the log output clearer about why the test failed.
+
+ With this patch installed, all the ERRORs disappear, leaving previously masked
+ FAILs (which I have not attempted to fix).
+
+ [1] Anyone know why this test doesn't simply use gdb_test_multiple? I can only
+ assume that it was intentionally written this way, and I've modified the code with
+ that assumption. I have tested a version using gdb_test_multiple, and that appears
+ to work fine, too, if that is preferred. [It still employs exp_continue to fix the
+ spawn_id errors.]
+
+2022-02-28 Tom Tromey <tromey@adacore.com>
+
+ Add more filename styling
+ I found a few spots where filename styling ought to be applied, but is
+ not.
+
+2022-02-28 Tom Tromey <tromey@adacore.com>
+
+ Fix maybe-uninitialized warning in py-infthread.c
+ I got this warning from py-infthread.c using the Fedora 34 system GCC:
+
+ ../../binutils-gdb/gdb/python/py-infthread.c:102:30: warning: ‘extra_info’ may be used uninitialized in this function [-Wmaybe-uninitialized]
+
+ I think this happens because GDB_PY_HANDLE_EXCEPTION expands to an
+ 'if' whose condition is always true -- but GCC can't know this. This
+ patch avoids the warning by adding a harmless initialization.
+
+2022-02-28 Tom Tromey <tromey@adacore.com>
+
+ Handle multi-byte bracket sequences in Ada lexer
+ As noted in an earlier patch, the Ada lexer does not handle multi-byte
+ bracket sequences. This patch adds support for these for character
+ literals. gdb does not generally seem to handle the Ada wide string
+ types, so for the time being these continue to be excluded -- but an
+ explicit error is added to make this more clear.
+
+2022-02-28 Tom Tromey <tromey@adacore.com>
+
+ Handle 'QWW' encoding case in Ada enums
+ In Ada, an enum can contain character literals. GNAT encodes these
+ values in a special way. For example, the Unicode character U+0178
+ would be represented as 'QW0178' in the DWARF:
+
+ <3><112f>: Abbrev Number: 2 (DW_TAG_enumerator)
+ <1130> DW_AT_name : (indirect string, offset: 0x19ff): QW0178
+ <1134> DW_AT_const_value : 2
+
+ gdb handles this reasonably well, but failed to handle the 'QWW'
+ encoding, which is used for characters outside the base plane.
+
+ Also, while working on this, I noticed that gdb will print the decimal
+ value for an enum character constant:
+
+ (gdb) print Char_X
+ $2 = 1 'x'
+
+ This is a nice feature, IMO, because in this situation the 'x' enum
+ constant does not have its usual decimal value -- it has the value
+ that's assigned based on the enumeration type.
+
+ However, gdb did not do this when it decided to print the constant
+ using the bracket notation:
+
+ (gdb) print Char_Thorn
+ $3 = ["de"]
+
+ This patch changes gdb to print the decimal value here as well, and to
+ put the bracket notation in single quotes -- otherwise gdb will be
+ printing something that it can't then read. Now it looks like:
+
+ (gdb) print Char_Thorn
+ $3 = 4 '["de"]'
+
+ Note that gdb can't read longer bracket notations, like the other ones
+ printed in this test case:
+
+ (gdb) print Char_King
+ $4 = 3 '["01fa00"]'
+
+ While I think this is a bug, I plan to fix it separately.
+
+ Finally, in the new test case, the copyright dates are chosen this way
+ because this all started as a copy of an existing test.
+
+2022-02-28 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: Add gdb.InferiorThread.details attribute
+ This adds a new read-only attribute gdb.InferiorThread.details, this
+ attribute contains a string, the results of target_extra_thread_info
+ for the thread, or None, if target_extra_thread_info returns nullptr.
+
+ As the string returned by target_extra_thread_info is unstructured,
+ this attribute is only really useful for echoing straight through to
+ the user, but, if a user wants to write a command that displays the
+ same, or a similar 'Thread Id' to the one seen in 'info threads', then
+ they need access to this string.
+
+ Given that the string produced by target_extra_thread_info varies by
+ target, there's only minimal testing of this attribute, I check that
+ the attribute can be accessed, and that the return value is either
+ None, or a string.
+
+2022-02-28 Keith Seitz <keiths@redhat.com>
+
+ Error when gdb_is_target_1 is called without running gdb instance
+ This is a snafu that I encountered while implementing the previous
+ patch, which attempted to use gdb_is_target_native. This proc and
+ gdb_is_target_remote both rely on gdb_is_target_1, which actually
+ cannot be called without gdb already running.
+
+ This patch adds appropriate warning comments to these procs and
+ causes gdb_is_target_1 to issue a Tcl error if it is called without a
+ gdb instance already running. This should prevent unwitting callers
+ from using this at the wrong time.
+
+2022-02-28 Keith Seitz <keiths@redhat.com>
+
+ Fix gdb.fortran "failed to extract expected results" errors
+ When running the gdb.fortran tests array-slices.exp and lbound-ubound.exp,
+ the test suite throws several ERRORs on native-gdbserver/-m{32,64},
+ and native-extended-gdbsever/-m{32,64}:
+
+ [on native-extended-gdbserver/-m64]
+ Running /home/keiths/work/gdb/branches/testsuite-errors/linux/gdb/testsuite/../../../src/gdb/testsuite/gdb.fortran/array-slices.exp ...
+ ERROR: failed to extract expected results
+ ERROR: failed to extract expected results
+ Running /home/keiths/work/gdb/branches/testsuite-errors/linux/gdb/testsuite/../../../src/gdb/testsuite/gdb.fortran/lbound-ubound.exp ...
+ ERROR: failed to extract expected results for lbound
+
+ This occurs because the tests require inferior I/O which we do not have
+ access to while using these targets.
+
+ This patch skips these tests when running on non-native targets.
+
+2022-02-28 Torbj?rn Svensson <torbjorn.svensson@st.com>
+
+ Further correct the handling of long pathnames on Windows hosts.
+ PR 25713
+ * bfdio.c (_bfd_real_fopen): Fix handling of parhs longer than 260
+ characters on Windows hosts.
+
+2022-02-28 Nick Clifton <nickc@redhat.com>
+
+ Clarify the wording of the error message when an obsolete configuration is encountered.
+ PR 28886
+ * config.bfd: Update error message for obsolete configurations.
+
+2022-02-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-26 Kevin Buettner <kevinb@redhat.com>
+
+ Handle recursive internal problem in gdb_internal_error_resync
+ I came across this problem when testing gdb.base/gdb-sigterm.exp
+ on a machine with a pre-release version of glib-2.34 installed:
+
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Quit this debugging session? (y or n) Recursive internal problem.
+ FAIL: gdb.base/gdb-sigterm.exp: expect eof #0 (GDB internal error)
+ Resyncing due to internal error.
+ ERROR: : spawn id exp11 not open
+ while executing
+ "expect {
+ -i exp11 -timeout 10
+ -re "Quit this debugging session\\? \\(y or n\\) $" {
+ send_gdb "n\n" answer
+ incr count
+ }
+ -re "Create..."
+ ("uplevel" body line 1)
+ invoked from within
+ "uplevel $body" NONE : spawn id exp11 not open
+ ERROR: Could not resync from internal error (timeout)
+ gdb.base/gdb-sigterm.exp: expect eof #0: stepped 9 times
+ UNRESOLVED: gdb.base/gdb-sigterm.exp: 50 SIGTERM passes
+
+ I don't have a problem with the latter ERROR nor the UNRESOLVED
+ messages. However the first ERROR regarding the exp11 spawn id
+ not being open is not especially useful.
+
+ This commit handles the "Recursive internal problem" case, avoiding
+ the problematic ERROR shown above.
+
+ With this commit in place, the log messages look like this instead:
+
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Quit this debugging session? (y or n) Recursive internal problem.
+ FAIL: gdb.base/gdb-sigterm.exp: expect eof #15 (GDB internal error)
+ Resyncing due to internal error.
+ ERROR: Could not resync from internal error (recursive internal problem)
+ gdb.base/gdb-sigterm.exp: expect eof #15: stepped 12 times
+ UNRESOLVED: gdb.base/gdb-sigterm.exp: 50 SIGTERM passes
+
+ gdb/testsuite/ChangeLog:
+
+ * lib/gdb.exp (gdb_internal_error_resync): Handle "Recursive
+ internal problem".
+
+2022-02-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-25 Aaron Merey <amerey@redhat.com>
+
+ gdb-add-index: disable debuginfod
+ gdb-add-index may trigger debuginfod's first-use notice. The notice
+ is misleading in this case. It instructs the user to modify .gdbinit
+ in order to permanently enable/disable debuginfod but gdb-add-index
+ invokes gdb with -nx which ignores .gdbinit.
+
+ Additionally debuginfod is not needed for gdb-add-index since the
+ symbol file is given as an argument and should already be present
+ locally.
+
+ Fix this by disabling debuginfod when gdb-add-index invokes gdb.
+
+2022-02-25 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add operator+= and operator+ overload for std::string
+ This commit adds operator+= and operator+ overloads for adding
+ gdb::unique_xmalloc_ptr<char> to a std::string. I could only find 3
+ places in GDB where this was useful right now, and these all make use
+ of operator+=.
+
+ I've also added a self test for gdb::unique_xmalloc_ptr<char>, which
+ makes use of both operator+= and operator+, so they are both getting
+ used/tested.
+
+ There should be no user visible changes after this commit, except when
+ running 'maint selftest', where the new self test is visible.
+
+2022-02-25 Tom Tromey <tromey@adacore.com>
+
+ Print MI prompt on interrupted command
+ Joel noticed that if the remote dies unexpectedly during a command --
+ you can simulate this by using "continue" and then killing gdbserver
+ -- then the CLI will print a new prompt, but MI will not. Later, we
+ found out that this was also filed in bugzilla as PR mi/23820.
+
+ The output looks something like this:
+
+ | (gdb)
+ | cont
+ | &"cont\n"
+ | ~"Continuing.\n"
+ | ^running
+ | *running,thread-id="all"
+ | (gdb)
+ | [... some output from GDB during program startup...]
+ | =thread-exited,id="1",group-id="i1"
+ | =thread-group-exited,id="i1"
+ | &"Remote connection closed\n"
+
+ Now, what about that "(gdb)" in the middle?
+
+ That prompt comes from this questionable code in
+ mi-interp.c:mi_on_resume_1:
+
+ /* This is what gdb used to do historically -- printing prompt
+ even if it cannot actually accept any input. This will be
+ surely removed for MI3, and may be removed even earlier. */
+ if (current_ui->prompt_state == PROMPT_BLOCKED)
+ fputs_unfiltered ("(gdb) \n", mi->raw_stdout);
+
+ ... which seems like something to remove. But maybe the intent here
+ is that this prompt is sufficient, and MI clients must be ready to
+ handle output coming after a prompt. On the other hand, if this code
+ *is* removed, then nothing would print a prompt in this scenario.
+
+ Anyway, the CLI and the TUI handle emitting the prompt here by hooking
+ into gdb::observers::command_error, but MI doesn't install an observer
+ here.
+
+ This patch adds the missing observer and arranges to show the MI
+ prompt. Regression tested on x86-64 Fedora 34.
+
+ It seems like this area could be improved a bit, by having
+ start_event_loop call the prompt-displaying code directly, rather than
+ indirecting through an observer. However, I haven't done this.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=23820
+
+2022-02-25 Andrew Burgess <aburgess@redhat.com>
+ Tom Tromey <tromey@adacore.com>
+
+ gdb/testsuite: fix list.exp test cases
+ PR testsuite/7142 -- old enough to have been converted from Gnats --
+ points out that test_list_filename_and_function in gdb.base/list.exp
+ has "fails" that are unmatched with passes. This patch cleans this up
+ a little.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7142
+
+2022-02-25 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Remove a loop in the ISA parser
+ Since commit e601909a3287bf541c6a7d82214bb387d2c76d82 ("RISC-V: Support
+ to parse the multi-letter prefix in the architecture string.") changed
+ so that all prefixed extensions are parsed in single
+ riscv_parse_prefixed_ext call, a "while" loop on riscv_parse_subset
+ is no longer required.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_parse_subset): Remove unnecessary loop.
+
+2022-02-25 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Fix mask for some fcvt instructions
+ This commit fixes incorrect uses of mask values in 'fcvt' instruction
+ family.
+
+ opcodes/ChangeLog:
+
+ * riscv-opc.c (riscv_opcodes): Fix incorrect uses of mask values
+ in 'fcvt' instruction family.
+
+2022-02-25 Keith Seitz <keiths@redhat.com>
+
+ Support template lookups in strncmp_iw_with_mode
+ This patch adds support for wild template parameter list matches, similar
+ to how ABI tags or function overloads are now handled.
+
+ With this patch, users will be able to "gloss over" the details of matching
+ template parameter lists. This is accomplished by adding (yet more) logic
+ to strncmp_iw_with_mode to skip parameter lists if none is explicitly given
+ by the user.
+
+ Here's a simple example using gdb.linespec/cpls-ops.exp:
+
+ Before
+ ------
+ (gdb) ptype test_op_call
+ type = struct test_op_call {
+ public:
+ void operator()(void);
+ void operator()(int);
+ void operator()(long);
+ void operator()<int>(int *);
+ }
+ (gdb) b test_op_call::operator()
+ Breakpoint 1 at 0x400583: test_op_call::operator(). (3 locations)
+ (gdb) i b
+ Num Type Disp Enb Address What
+ 1 breakpoint keep y <MULTIPLE>
+ 1.1 y 0x400583 in test_op_call::operator()(int)
+ at cpls-ops.cc:43
+ 1.2 y 0x40058e in test_op_call::operator()()
+ at cpls-ops.cc:47
+ 1.3 y 0x40059e in test_op_call::operator()(long)
+ at cpls-ops.cc:51
+
+ The breakpoint at test_op_call::operator()<int> was never set.
+
+ After
+ -----
+ (gdb) b test_op_call::operator()
+ Breakpoint 1 at 0x400583: test_op_call::operator(). (4 locations)
+ (gdb) i b
+ Num Type Disp Enb Address What
+ 1 breakpoint keep y <MULTIPLE>
+ 1.1 y 0x400583 in test_op_call::operator()(int)
+ at cpls-ops.cc:43
+ 1.2 y 0x40058e in test_op_call::operator()()
+ at cpls-ops.cc:47
+ 1.3 y 0x40059e in test_op_call::operator()(long)
+ at cpls-ops.cc:51
+ 1.4 y 0x4008d0 in test_op_call::operator()<int>(int*)
+ at cpls-ops.cc:57
+
+ Similar to how scope lookups work, passing "-qualified" to the break command
+ will cause a literal lookup of the symbol. In the example immediately above,
+ this will cause GDB to only find the three non-template functions.
+
+2022-02-25 Keith Seitz <keiths@redhat.com>
+
+ Unit tests for strncmp_iw_with_mode
+ This patch attempts to make a start at adding unit tests for
+ strncmp_iw_with_mode. While there is quite a bit of testing
+ of this function in other tests, these are currently end-to-end
+ tests.
+
+ This patch attempts to cover the basics of string matching, white
+ space, C++ ABI tags, and several other topics. However, one area
+ that is ostensibly missing is testing the `match_for_lcd' feature.
+ This is otherwise tested as part of our end-to-end DejaGNU-based
+ testing.
+
+2022-02-25 Keith Seitz <keiths@redhat.com>
+
+ Move find_toplevel_char to cp-support.[ch]
+ find_toplevel_char is being used more and more outside of linespec.c, so
+ this patch moves it into cp-support.[ch].
+
+2022-02-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-24 Tom Tromey <tom@tromey.com>
+ Andrew Burgess <aburgess@redhat.com>
+
+ Fix crash in Fortran code
+ PR fortran/28801 points out a gdb crash that can be provoked by
+ certain Fortran code. The bug is that f77_get_upperbound assumes the
+ property is either a constant or undefined, but in this case it is
+ PROP_LOCEXPR.
+
+ This patch fixes the crash by making this function (and the
+ lower-bound one as well) do the correct check before calling
+ 'const_val'.
+
+ Thanks to Andrew for writing the test case.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28801
+
+2022-02-24 John Baldwin <jhb@FreeBSD.org>
+
+ Revert "do_target_wait_1: Clear TARGET_WNOHANG if the target isn't async."
+ Commit 14b3360508b1 ("do_target_wait_1: Clear
+ TARGET_WNOHANG if the target isn't async.") broke some multi-target
+ tests, such as gdb.multi/multi-target-info-inferiors.exp. The symptom
+ is that execution just hangs at some point. What happens is:
+
+ 1. One remote inferior is started, and now sits stopped at a breakpoint.
+ It is not "async" at this point (but it "can async").
+
+ 2. We run a native inferior, the event loop gets woken up by the native
+ target's fd.
+
+ 3. In do_target_wait, we randomly choose an inferior to call target_wait
+ on first, it happens to be the remote inferior.
+
+ 4. Because the target is currently not "async", we clear
+ TARGET_WNOHANG, resulting in synchronous wait. We therefore block
+ here:
+
+ #0 0x00007fe9540dbb4d in select () from /usr/lib/libc.so.6
+ #1 0x000055fc7e821da7 in gdb_select (n=15, readfds=0x7ffdb77c1fb0, writefds=0x0, exceptfds=0x7ffdb77c2050, timeout=0x7ffdb77c1f90) at /home/simark/src/binutils-gdb/gdb/posix-hdep.c:31
+ #2 0x000055fc7ddef905 in interruptible_select (n=15, readfds=0x7ffdb77c1fb0, writefds=0x0, exceptfds=0x7ffdb77c2050, timeout=0x7ffdb77c1f90) at /home/simark/src/binutils-gdb/gdb/event-top.c:1134
+ #3 0x000055fc7eda58e4 in ser_base_wait_for (scb=0x6250002e4100, timeout=1) at /home/simark/src/binutils-gdb/gdb/ser-base.c:240
+ #4 0x000055fc7eda66ba in do_ser_base_readchar (scb=0x6250002e4100, timeout=-1) at /home/simark/src/binutils-gdb/gdb/ser-base.c:365
+ #5 0x000055fc7eda6ff6 in generic_readchar (scb=0x6250002e4100, timeout=-1, do_readchar=0x55fc7eda663c <do_ser_base_readchar(serial*, int)>) at /home/simark/src/binutils-gdb/gdb/ser-base.c:444
+ #6 0x000055fc7eda718a in ser_base_readchar (scb=0x6250002e4100, timeout=-1) at /home/simark/src/binutils-gdb/gdb/ser-base.c:471
+ #7 0x000055fc7edb1ecd in serial_readchar (scb=0x6250002e4100, timeout=-1) at /home/simark/src/binutils-gdb/gdb/serial.c:393
+ #8 0x000055fc7ec48b8f in remote_target::readchar (this=0x617000038780, timeout=-1) at /home/simark/src/binutils-gdb/gdb/remote.c:9446
+ #9 0x000055fc7ec4da82 in remote_target::getpkt_or_notif_sane_1 (this=0x617000038780, buf=0x6170000387a8, forever=1, expecting_notif=1, is_notif=0x7ffdb77c24f0) at /home/simark/src/binutils-gdb/gdb/remote.c:9928
+ #10 0x000055fc7ec4f045 in remote_target::getpkt_or_notif_sane (this=0x617000038780, buf=0x6170000387a8, forever=1, is_notif=0x7ffdb77c24f0) at /home/simark/src/binutils-gdb/gdb/remote.c:10037
+ #11 0x000055fc7ec354d4 in remote_target::wait_ns (this=0x617000038780, ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/remote.c:8147
+ #12 0x000055fc7ec38aa1 in remote_target::wait (this=0x617000038780, ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/remote.c:8337
+ #13 0x000055fc7f1409ce in target_wait (ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/target.c:2612
+ #14 0x000055fc7e19da98 in do_target_wait_1 (inf=0x617000038080, ptid=..., status=0x7ffdb77c33c8, options=...) at /home/simark/src/binutils-gdb/gdb/infrun.c:3636
+ #15 0x000055fc7e19e26b in operator() (__closure=0x7ffdb77c2f90, inf=0x617000038080) at /home/simark/src/binutils-gdb/gdb/infrun.c:3697
+ #16 0x000055fc7e19f0c4 in do_target_wait (ecs=0x7ffdb77c33a0, options=...) at /home/simark/src/binutils-gdb/gdb/infrun.c:3716
+ #17 0x000055fc7e1a31f7 in fetch_inferior_event () at /home/simark/src/binutils-gdb/gdb/infrun.c:4061
+
+ Before the aforementioned commit, we would not have cleared
+ TARGET_WNOHANG, the remote target's wait would have returned nothing,
+ and we would have consumed the native target's event.
+
+ After applying this revert, the testsuite state looks as good as before
+ for me on Ubuntu 20.04 amd64.
+
+ Change-Id: Ic17a1642935cabcc16c25cb6899d52e12c2f5c3f
+
+2022-02-24 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: use a range based for loop when iterating over an array
+ Make use of a range based for loop to iterate over a static global
+ array, removing the need to have a null entry at the end of the
+ array.
+
+ There should be no user visible changes after this commit.
+
+2022-02-24 Dominique Quatravaux <dominique.quatravaux@epfl.ch>
+ Louis-He <1726110778@qq.com>
+ Philippe Blain <levraiphilippeblain@gmail.com>
+
+ gdb/darwin: skip over WIFSTOPPED wait4 status
+ On modern Darwin's, there appears to be a new circumstance in which a
+ MACH_NOTIFY_DEAD_NAME message can be received, and which was not
+ previously accounted for: to signal the WIFSTOPPED condition in the
+ debuggee. In that case the debuggee is not dead yet (and in fact,
+ counting it as dead would cause a zombie leak - A process in such a
+ state reparents to PID 1, but cannot be killed).
+
+ - Read and ignore such messages (counting on the next exception message
+ to let us know of the inferior's new state again)
+ - Refactor logging so as to clearly distinguish between the
+ MACH_NOTIFY_DEAD_NAME cases (WIFEXITED, WIFSTOPPED, signal, or
+ something else), and warn in the last case
+
+ Change-Id: Ie86904a894e9bd154e6b674b1bfbfbaee7fde3e1
+
+2022-02-24 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/linux-tdep: move "Perms" column right
+ Commit 29ef4c0699e1 ("gdb/linux-tdep.c: Add Perms to the 'info proc
+ mappings' output") has broken test gdb.base/info-proc.exp on Linux,
+ because it changes the output of "info proc mappings" in a way that the
+ test does not expect (my bad for not testing before pushing).
+
+ I looked at how FreeBSD handles this, since I remembered it did show
+ permission flags. It looks like this:
+
+ Start Addr End Addr Size Offset Flags File
+ 0x200000 0x243000 0x43000 0x0 r-- CN-- /usr/local/bin/tmux
+
+ (I think that `Flags` and the flags not being aligned is not
+ intentional)
+
+ The test passes on FreeBSD, because the test looks for four hex numbers
+ in a row and ignores the rest:
+
+ ".*Mapped address spaces:.*${hex}${ws}${hex}${ws}${hex}${ws}${hex}.*"
+
+ I suggest fixing it on Linux by moving the flags column to the same
+ place as in the FreeBSD output. It makes things a bit more consistent
+ between OSes, and we don't have to touch the test.
+
+ At the same time, make use of the actual length of the permission's
+ string to specify the number of characters to print.
+
+ Before this patch, the output looks like:
+
+ Start Addr End Addr Perms Size Offset objfile
+ 0x55dd4b544000 0x55dd4b546000 r--p 0x2000 0x0 /usr/bin/sleep
+
+ and after, it looks like:
+
+ Start Addr End Addr Size Offset Perms objfile
+ 0x5622ae662000 0x5622ae664000 0x2000 0x0 r--p /usr/bin/sleep
+
+ Change-Id: If0fc167b010b25f97a3c54e2f491df4973ccde8f
+
+2022-02-24 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/linux-tdep: make read_mapping return a structure
+ Change read_mapping to return a structure instead of taking many output
+ parameters. Change the string + length output parameters (permissions
+ and device) to be gdb::string_view, since that's what string_view is
+ for (a non-NULL terminated view on a string). No changes in behavior
+ expected.
+
+ Change-Id: I86e627d84d3dda8c9b835592b0f4de8d90d12112
+
+2022-02-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-23 Tom Tromey <tromey@adacore.com>
+
+ Fix bug in C++ overload resolution
+ PR c++/28901 points out a bug in C++ overload resolution. When
+ comparing two overloads, one might be better than the other for
+ certain parameters -- but, if that one also has some invalid
+ conversion, then it should never be considered the better choice.
+ Instead, a valid-but-not-apparently-quite-as-good overload should be
+ preferred.
+
+ This patch fixes this problem by changing how overload comparisons are
+ done. I don't believe it should affect any currently valid overload
+ resolution; nor should it affect resolutions where all the choices are
+ equally invalid.
+
+2022-02-23 Dominik 'Disconnect3d' Czarnota <dominik.b.czarnota@gmail.com>
+
+ gdb/linux-tdep.c: Add Perms to the 'info proc mappings' output
+ Fixes #28914 and so it adds a 'Perms' (permissions) column to the
+ 'info proc mappings' command output. This will allow users to know
+ the memory pages permissions right away from GDB instead of having
+ to fetch them from the /proc/$pid/maps file (which is also what GDB
+ does internally, but it just did not print that column).
+
+ Below I am also showing how an example output looks like before and
+ after this commit in case someone wonders.
+
+ On i386 targets - before this commit:
+ ```
+ (gdb) info proc mappings
+ process 3461464
+ Mapped address spaces:
+
+ Start Addr End Addr Size Offset objfile
+ 0x56555000 0x56556000 0x1000 0x0 /home/dc/src/binutils-gdb/build/a.out
+ 0x56556000 0x56557000 0x1000 0x1000 /home/dc/src/binutils-gdb/build/a.out
+ 0x56557000 0x56558000 0x1000 0x2000 /home/dc/src/binutils-gdb/build/a.out
+ 0x56558000 0x5655a000 0x2000 0x2000 /home/dc/src/binutils-gdb/build/a.out
+ 0xf7fc4000 0xf7fc8000 0x4000 0x0 [vvar]
+ 0xf7fc8000 0xf7fca000 0x2000 0x0 [vdso]
+ 0xf7fca000 0xf7fcb000 0x1000 0x0 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xf7fcb000 0xf7fee000 0x23000 0x1000 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xf7fee000 0xf7ffb000 0xd000 0x24000 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xf7ffb000 0xf7ffe000 0x3000 0x30000 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xfffdc000 0xffffe000 0x22000 0x0 [stack]
+ (gdb)
+ ```
+
+ On i386 targets - after this commit:
+ ```
+ (gdb) info proc mappings
+ process 3461464
+ Mapped address spaces:
+
+ Start Addr End Addr Perms Size Offset objfile
+ 0x56555000 0x56556000 r--p 0x1000 0x0 /home/dc/src/binutils-gdb/build/a.out
+ 0x56556000 0x56557000 r-xp 0x1000 0x1000 /home/dc/src/binutils-gdb/build/a.out
+ 0x56557000 0x56558000 r--p 0x1000 0x2000 /home/dc/src/binutils-gdb/build/a.out
+ 0x56558000 0x5655a000 rw-p 0x2000 0x2000 /home/dc/src/binutils-gdb/build/a.out
+ 0xf7fc4000 0xf7fc8000 r--p 0x4000 0x0 [vvar]
+ 0xf7fc8000 0xf7fca000 r-xp 0x2000 0x0 [vdso]
+ 0xf7fca000 0xf7fcb000 r--p 0x1000 0x0 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xf7fcb000 0xf7fee000 r-xp 0x23000 0x1000 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xf7fee000 0xf7ffb000 r--p 0xd000 0x24000 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xf7ffb000 0xf7ffe000 rw-p 0x3000 0x30000 /usr/lib/i386-linux-gnu/ld-2.33.so
+ 0xfffdc000 0xffffe000 rw-p 0x22000 0x0 [stack]
+ (gdb)
+ ```
+
+ On amd64 targets - after this commit:
+ ```
+ (gdb) info proc mappings
+ process 3461869
+ Mapped address spaces:
+
+ Start Addr End Addr Perms Size Offset objfile
+ 0x555555554000 0x555555555000 r--p 0x1000 0x0 /home/dc/src/binutils-gdb/build/a.out
+ 0x555555555000 0x555555556000 r-xp 0x1000 0x1000 /home/dc/src/binutils-gdb/build/a.out
+ 0x555555556000 0x555555557000 r--p 0x1000 0x2000 /home/dc/src/binutils-gdb/build/a.out
+ 0x555555557000 0x555555559000 rw-p 0x2000 0x2000 /home/dc/src/binutils-gdb/build/a.out
+ 0x7ffff7fc3000 0x7ffff7fc7000 r--p 0x4000 0x0 [vvar]
+ 0x7ffff7fc7000 0x7ffff7fc9000 r-xp 0x2000 0x0 [vdso]
+ 0x7ffff7fc9000 0x7ffff7fca000 r--p 0x1000 0x0 /usr/lib/x86_64-linux-gnu/ld-2.33.so
+ 0x7ffff7fca000 0x7ffff7ff1000 r-xp 0x27000 0x1000 /usr/lib/x86_64-linux-gnu/ld-2.33.so
+ 0x7ffff7ff1000 0x7ffff7ffb000 r--p 0xa000 0x28000 /usr/lib/x86_64-linux-gnu/ld-2.33.so
+ 0x7ffff7ffb000 0x7ffff7fff000 rw-p 0x4000 0x31000 /usr/lib/x86_64-linux-gnu/ld-2.33.so
+ 0x7ffffffdd000 0x7ffffffff000 rw-p 0x22000 0x0 [stack]
+ 0xffffffffff600000 0xffffffffff601000 --xp 0x1000 0x0 [vsyscall]
+ (gdb)
+ ```
+
+ Change-Id: I4991f6cc758cd532eae3ae98c29d22e7bd9d9c36
+
+2022-02-23 Patrick O'Neill <patrick@rivosinc.com>
+
+ RISC-V: PR28733, add missing extension info to 'unrecognized opcode' error
+ Currently we report errors as "unrecognized opcode `fence.i'" when the
+ opcode isn't part of the selected extensions.
+ This patch expands that error message to include the missing extension
+ information. For example, now the error message would be "unrecognized
+ opcode `fence.i', extension `zifencei' required".
+ If the opcode is not a part of any extension, the error message reverts
+ to "unrecognized opcode `<op statement>'".
+
+
+ bfd/
+ pr 28733
+ * elfxx-riscv.c (riscv_multi_subset_supports_ext): New function,
+ used to return the extension string for each INSN_CLASS_*.
+ * elfxx-riscv.h: Added extern riscv_multi_subset_supports_ext.
+ gas/
+ pr 28733
+ * config/tc-riscv.c (struct riscv_ip_error): New structure,
+ contains information about errors that occur within the riscv_ip.
+ (riscv_ip): Use struct riscv_ip_error to report more detailed errors.
+ * testsuite/gas/riscv/c-fld-fsd-fail.l: Updated.
+ * testsuite/gas/riscv/march-imply-i2p1-01.: Likewise.
+
+2022-02-23 Patrick O'Neill <patrick@rivosinc.com>
+
+ RISC-V: PR28733, add missing extension info to 'invalid CSR' error
+ Currently we report errors as "invalid CSR 'fscr' for the current ISA"
+ when the instruction isn't valid.
+
+ This patch expands that error message to include the missing extension
+ information. For example, now the error message would be "invalid CSR
+ 'fscr' for the current ISA, CSR 'fscr' needs 'f' extension".
+
+
+ gas/
+ pr 28733
+ * config/tc-riscv.c (riscv_csr_address): Report more details
+ when the CSR is invalid.
+ * testsuite/gas/riscv/csr-version-1p10.l: Updated detailed errors.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+
+2022-02-23 Alan Modra <amodra@gmail.com>
+
+ binutils 2.38 vs. ppc32 linux kernel
+ Commit b25f942e18d6 made .machine more strict. Weaken it again.
+
+ * config/tc-ppc.c (ppc_machine): Treat an early .machine specially,
+ keeping sticky options to work around gcc bugs.
+
+2022-02-23 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Updated CSRs to privileged spec v1.12 and debug spec v1.0.
+ * Removed N extension CSRs,
+ ustatus, uie, utvec, uscratch, uepc, ucause, utval and uip.
+
+ * Removed two supervisor CSRs,
+ sedeleg and sideleg.
+
+ * Changed debug CSR address of scontext from 0x7aa to 0x5a8. We cannot support
+ different versions of debug specs for now, so only supporting the latest one is
+ the only way to move forward.
+
+ * Added debug CSRs,
+ mscontext (0x7aa), mcontrol6 (0x7a1, tdata1) and tmexttrigger ((0x7a1, tdata1).
+
+ * Regarded hcontext as a debug CSR.
+
+ include/
+ * opcode/riscv-opc.h: Updated CSRs to privileged spec v1.12 and
+ debug spec v1.0.
+ gas/
+ * testsuite/gas/riscv/csr.s: Updated CSRs to privileged spec v1.12
+ and debug spec v1.0.
+ * testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+ * testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
+ * testsuite/gas/riscv/csr-dw-regnums.s: Likewise.
+
+2022-02-23 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Add Privileged Architecture 1.12 CSRs
+ This commit adds,
+
+ * Most of CSRs as listed in the Privileged Architecture,
+ version 1.12 (except scontext and mscontext).
+
+ * Testcases for most CSRs added on the Privileged
+ Architecture, version 1.12 (except moved "scontext" and
+ new "mscontext").
+
+ include/ChangeLog:
+
+ * opcode/riscv-opc.h (CSR_SENVCFG, CSR_MCONFIGPTR, CSR_MENVCFG,
+ CSR_MSTATUSH, CSR_MENVCFGH, CSR_MTINST, CSR_MTVAL2, CSR_MSECCFG,
+ CSR_MSECCFGH, CSR_PMPCFG4, CSR_PMPCFG5, CSR_PMPCFG6,
+ CSR_PMPCFG7, CSR_PMPCFG8, CSR_PMPCFG9, CSR_PMPCFG10,
+ CSR_PMPCFG11, CSR_PMPCFG12, CSR_PMPCFG13, CSR_PMPCFG14,
+ CSR_PMPCFG15, CSR_PMPADDR16, CSR_PMPADDR17, CSR_PMPADDR18,
+ CSR_PMPADDR19, CSR_PMPADDR20, CSR_PMPADDR21, CSR_PMPADDR22,
+ CSR_PMPADDR23, CSR_PMPADDR24, CSR_PMPADDR25, CSR_PMPADDR26,
+ CSR_PMPADDR27, CSR_PMPADDR28, CSR_PMPADDR29, CSR_PMPADDR30,
+ CSR_PMPADDR31, CSR_PMPADDR32, CSR_PMPADDR33, CSR_PMPADDR34,
+ CSR_PMPADDR35, CSR_PMPADDR36, CSR_PMPADDR37, CSR_PMPADDR38,
+ CSR_PMPADDR39, CSR_PMPADDR40, CSR_PMPADDR41, CSR_PMPADDR42,
+ CSR_PMPADDR43, CSR_PMPADDR44, CSR_PMPADDR45, CSR_PMPADDR46,
+ CSR_PMPADDR47, CSR_PMPADDR48, CSR_PMPADDR49, CSR_PMPADDR50,
+ CSR_PMPADDR51, CSR_PMPADDR52, CSR_PMPADDR53, CSR_PMPADDR54,
+ CSR_PMPADDR55, CSR_PMPADDR56, CSR_PMPADDR57, CSR_PMPADDR58,
+ CSR_PMPADDR59, CSR_PMPADDR60, CSR_PMPADDR61, CSR_PMPADDR62,
+ CSR_PMPADDR63): New CSR macros.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/csr-dw-regnums.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
+ * testsuite/gas/riscv/csr.s: Add new CSRs.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+
+2022-02-23 Tsukasa OI <research_trasio@irq.a4lg.com>
+
+ RISC-V: Reorganize testcases for CFI directives
+ This commit reorganizes and adds some CSRs to csr-dw-regnums.[sd] to
+ make it test the same CSRs as csr.s.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/csr-dw-regnums.s: Reorganize and add
+ defined CSRs tested in csr.s.
+ * testsuite/gas/riscv/csr-dw-regnums.d: Likewise.
+
+2022-02-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ NEWS: Note that the FreeBSD async target supports async mode.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ inf-ptrace: Add an event_pipe to be used for async mode in subclasses.
+ Subclasses of inf_ptrace_target have to opt-in to using the event_pipe
+ by implementing the can_async_p and async methods. For subclasses
+ which do this, inf_ptrace_target provides is_async_p, async_wait_fd
+ and closes the pipe in the close target method.
+
+ inf_ptrace_target also provides wrapper routines around the event pipe
+ (async_file_open, async_file_close, async_file_flush, and
+ async_file_mark) for use in target methods such as async.
+ inf_ptrace_target also exports a static async_file_mark_if_open
+ function which can be used in SIGCHLD signal handlers.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ Enable async mode in the target in attach_cmd.
+ If the attach target supports async mode, enable it after the
+ attach target's ::attach method returns.
+
+ fbsd-nat: Return nullptr rather than failing ::thread_name.
+ ptrace on FreeBSD cannot be used against running processes and instead
+ fails with EBUSY. This meant that 'info threads' would fail if any of
+ the threads were running (for example when using schedule-multiple=on
+ in gdb.base/fork-running-state.exp). Instead of throwing errors, just
+ return nullptr as no thread name is better than causing info threads to
+ fail completely.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Various cleanups to the ::resume entry debug message.
+ Move the message from 'show debug fbsd-lwp' to 'show debug fbsd-nat'
+ since it is helpful for debugging async target support and not just
+ LWP support.
+
+ Use target_pid_to_str to format the ptid and log the step and signo
+ arguments.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Include ptrace operation in error messages.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Implement async target support.
+ This is a fairly simple version of async target support.
+
+ Synchronous mode still uses blocking waitpid() calls in
+ inf_ptrace::wait() unlike the Linux native target which always uses
+ WNOHANG and uses sigsuspend() for synchronous operation.
+
+ Asynchronous mode registers an event pipe with the core as a file
+ handle and writes to the pipe when SIGCHLD is raised. TARGET_WNOHANG
+ is handled by inf_ptrace::wait().
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ inf-ptrace: Support async targets in inf_ptrace_target::wait.
+ - Handle TARGET_WNOHANG by passing WNOHANG to waitpid and returning
+ TARGET_WAITKIND_IGNORE if there are no events to report.
+
+ - Handle a race in async mode where SIGCHLD might signal the event
+ pipe for an event that has already been reported. If the event was
+ the exit of the last child process, waitpid() will fail with ECHILD
+ rather than returning a pid of 0. For this case, return
+ TARGET_WAITKIND_NO_RESUMED.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ inf-ptrace: Return an IGNORE event if waitpid() fails.
+ Previously this returned a TARGET_WAITKIND_SIGNALLED event for
+ inferior_ptid. However, inferior_ptid is invalid during ::wait()
+ methods after the multi-target changes, so this was triggering an
+ assertion further up the stack.
+
+ do_target_wait_1: Clear TARGET_WNOHANG if the target isn't async.
+ Previously, TARGET_WNOHANG was cleared if a target supported async
+ mode even if async mode wasn't currently enabled. This change only
+ permits TARGET_WNOHANG if async mode is enabled.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ Don't enable async mode at the end of target ::resume methods.
+ Now that target_resume always enables async mode after target::resume
+ returns, these calls are redundant.
+
+ The other place that target resume methods are invoked outside of
+ target_resume are as the beneath target in record_full_wait_1. In
+ this case, async mode should already be enabled when supported by the
+ target before the resume method is invoked due to the following:
+
+ In general, targets which support async mode run as async until
+ ::wait returns TARGET_WAITKIND_NO_RESUMED to indicate that there are
+ no unwaited for children (either they have exited or are stopped).
+ When that occurs, the loop in wait_one disables async mode. Later
+ if a stopped child is resumed, async mode is re-enabled in
+ do_target_resume before waiting for the next event.
+
+ In the case of record_full_wait_1, this function is invoked from the
+ ::wait target method when fetching an event. If the underlying
+ target supports async mode, then an earlier call to do_target_resume
+ to resume the child reporting an event in the loop in
+ record_full_wait_1 would have already enabled async mode before
+ ::wait was invoked. In addition, nothing in the code executed in
+ the loop in record_full_wait_1 disables async mode. Async mode is
+ only disabled higher in the call stack in wait_one after ::wait
+ returns.
+
+ It is also true that async mode can be disabled by an
+ INF_EXEC_COMPLETE event passed to inferior_event_handle, but all of
+ the places that invoke that are in the gdb core which is "above" a
+ target ::wait method.
+
+ Note that there is an earlier call to enable async mode in
+ linux_nat_target::resume. That call also marks the async event pipe
+ to report an existing event after enabling async mode, so it needs to
+ stay.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ Enable async mode on supported targets in target_resume.
+ Enabling async mode above the target layer removes duplicate code in
+ ::resume methods of async-capable targets. Commit 5b6d1e4fa4f
+ ("Multi-target support") enabled async mode in do_target_resume after
+ target_resume returns which is a step in this direction. However,
+ other callers of target_resume such as target_continue do not enable
+ async mode. Rather than enabling async mode in each of the callers
+ after target_resume returns, enable async mode at the end of
+ target_resume.
+
+ gdbserver linux-low: Convert linux_event_pipe to the event_pipe class.
+ Use event_pipe from gdbsupport in place of the existing file
+ descriptor array.
+
+ gdb linux-nat: Convert linux_nat_event_pipe to the event_pipe class.
+ Use event_pipe from gdbsupport in place of the existing file
+ descriptor array.
+
+2022-02-22 John Baldwin <jhb@FreeBSD.org>
+
+ gdbsupport: Add an event-pipe class.
+ This pulls out the implementation of an event pipe used to implement
+ target async support in both linux-low.cc (gdbserver) and linux-nat.c
+ (gdb).
+
+ This will be used to replace the existing event pipe in linux-low.cc
+ and linux-nat.c in future commits.
+
+ Co-Authored-By: Lancelot SIX <lsix@lancelotsix.com>
+
+2022-02-22 Ruslan Kabatsayev <b7.10110111@gmail.com>
+
+ gdb: fix detection of compilation and linking flags for source-highlight
+ Currently there are two problems with the detection of
+ source-highlight via pkg-config in GDB's configure script:
+
+ 1. The LDFLAGS variable is used to pass the 'pkg-config --libs' output
+ to AC_LINK_IFELSE, which results in the "-L/some/path
+ -lsource-highlight" preceding the conftest.cpp, which can result in a
+ failure to find symbols referenced in conftest.cpp, if the linker is
+ using --as-needed by default.
+
+ 2. The CFLAGS variable is used to pass the 'pkg-config --cflags'
+ output to AC_LINK_IFELSE. However, as the current language is C++,
+ AC_LINK_IFELSE will actuall use CXXFLAGS, not CFLAGS, so any flags
+ returned from pkg-config will not be seen.
+
+ This patch fixes both of these mistakes, allowing GDB to correctly
+ configure and build using source-highlight installed into a custom
+ prefix, e.g. ~/opt/gdb-git (because the system version of
+ source-highlight is too old).
+
+2022-02-22 Philippe Blain <levraiphilippeblain@gmail.com>
+
+ gdb/testsuite/README: point to default value of INTERNAL_GDBFLAGS
+ The INTERNAL_GDBFLAGS runtest variable was updated in 55c3ad88013
+ ([gdb/testsuite] Prevent pagination in GDB_INTERNALFLAGS, 2020-10-26) to
+ disable pagination, and in aae1c79a03a (PR python/12227..., 2010-12-07)
+ to point to the data directory, but its default value mentioned in the
+ testsuite's README was not kept up to date.
+
+ To avoid it getting out of sync even more, point the reader to the
+ definition of the variable in lib/gdb.exp, and move the explanation of
+ the different flags there. Also adjust the example in the README
+ so it follows the flags added in 55c3ad88013.
+
+ Change-Id: I3533608a7d6ae5198af09c7dc7743bde24c19ed7
+
+2022-02-22 Kito Cheng <kito.cheng@sifive.com>
+
+ RISC-V: Maintain a string to hold the canonical order
+ Using dummy entry in riscv_supported_std_ext cause confusing and wrongly
+ support `b` and `k` extensions.
+
+ bfd/
+ * elfxx-riscv.c (riscv_supported_std_ext): Drop unsupported
+ extensions.
+ (riscv_ext_canonical_order): New.
+ (riscv_init_ext_order): Use riscv_ext_canonical_order rather
+ than riscv_supported_std_ext to compute canonical order.
+
+ V2 Changes:
+
+ - Use `*ext` rather than `*ext != NULL` for checking is reach end of
+ string.
+
+2022-02-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-21 Alan Modra <amodra@gmail.com>
+
+ Re: ld: Support customized output section type
+ "DO NOT EDIT!" says the comment at the top of bfd-in2.h. Move the new
+ type field where it belongs.
+
+ PR ld/28841
+ * section.c (struct bfd_section): Add type. Formatting.
+ (BFD_FAKE_SECTION): Formatting.
+ * bfd-in2.h: Regenerate.
+
+2022-02-21 Mike Frysinger <vapier@gentoo.org>
+
+ sim: gdbinit: hoist setup to common code
+ This was left in subdirs because of the dynamic cgen usage. However,
+ we can move this breakpoint call to runtime and let gdb detect whether
+ the symbol exists.
+
+2022-02-21 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: relax pattern in new gdb.mi/mi-multi-commands.exp test
+ I saw some failures in the test gdb.mi/mi-multi-commands.exp that I
+ added recently. This test was added in commit:
+
+ commit d08cbc5d3203118da5583296e49273cf82378042
+ Date: Wed Dec 22 12:57:44 2021 +0000
+
+ gdb: unbuffer all input streams when not using readline
+
+ The failures I see only occurred when my machine was very heavily
+ loaded.
+
+ In this test I send multiple commands from dejagnu to gdb with a
+ single send_gdb call. In a well behaving world what I want to happen
+ is that the gdb console sees both commands arrive and echos the text
+ of those commands. Then gdb starts processing the first command,
+ prints the result, and then processes the second command, and prints
+ the result.
+
+ However, what I saw in my loaded environment was that only after
+ sending the two commands, only the first command was echoed to gdb's
+ terminal. Then gdb started processing the first command, and started
+ to write the output. Now, mixed in with the first command output, the
+ second command was echoed to gdb's terminal. Finally, gdb would
+ finish printing the first command output, and would read and handle
+ the second command.
+
+ This mixing of command echoing with the first command output was
+ causing the test matching patterns to fail.
+
+ In this commit I change the command I use in the test from a CLI
+ command to an MI command, this reduces the number of lines of output
+ that come from the test, CLI commands sent through the MI interpreter
+ are echoed back like this:
+
+ (gdb)
+ set $a = "FIRST COMMAND"
+ &"set $a = \"FIRST COMMAND\"\n"
+ ^done
+ (gdb)
+
+ While this is not the case for true MI command:
+
+ (gdb)
+ -data-evaluate-expression $a
+ ^done,value="\"FIRST COMMAND\""
+ (gdb)
+
+ Less output makes for simpler patterns to match against.
+
+ Next, when sending two command to gdb I was previously trying to spot
+ the output of the first command followed by the prompt with nothing
+ between. This is not really needed, for the first command I can look
+ for just the ^done,value="\"FIRST COMMAND\"" string, then I can start
+ looking for the output of the second command.
+
+ So long as the second pattern matches up to the gdb prompt, then I can
+ be sure than nothing is left over in the expect buffer to muck up
+ later matches.
+
+ As to see the second command output gdb must have read in the second
+ command, the second command output never suffers from the corruption
+ that the first command output does.
+
+ Since making this change, I've not seen a failure in this test.
+
+2022-02-21 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: avoid nullptr access in dbxread.c from read_dbx_symtab
+ This fixes a GDB crash reported in bug pr/28900, related to reading in
+ some stabs debug information.
+
+ In this commit my goal is to stop GDB crashing. I am not trying to
+ ensure that GDB makes the best possible use of the available stabs
+ debug information. At this point I consider stabs a legacy debug
+ format, with only limited support in GDB.
+
+ So, the problem appears to be that, when reading in the stabs data, we
+ need to find a N_SO entry, this is the entry that defines the start of
+ a compilation unit (or at least the location of a corresponding source
+ file).
+
+ It is while handling an N_SO that GDB creates a psymtab to hold the
+ incoming debug information (symbols, etc).
+
+ The problem we hit in the bug is that we encounter some symbol
+ information (an N_PC entry) outside of an N_SO entry - that is we find
+ some symbol information that is not associated with any source file.
+
+ We already have some protection for this case, look (in
+ read_dbx_symtab) at the handling of N_PC entries of type 'F' and 'f',
+ if we have no psymtab (the pst variable is nullptr) then we issue a
+ complaint. However, for whatever reason, in both 'f' and 'F'
+ handling, there is one place where we assume that the pst
+ variable (the psymtab) is not nullptr. This is a mistake.
+
+ In this commit, I guard these two locations (in 'f' and 'F' handling)
+ so we no longer assume pst is not nullptr.
+
+ While I was at it, I audited all the other uses of pst in
+ read_dbx_symtab, and in every potentially dangerous case I added a
+ nullptr check, and issue a suitable complaint if pst is found to be
+ nullptr.
+
+ It might well be true that we could/should do something smarter if we
+ see a debug symbol outside of an N_SO entry, and if anyone wanted to
+ do that work, they're welcome too. But this commit is just about
+ preventing the nullptr access, and the subsequent GDB crash.
+
+ I don't have any tests for this change, I have no idea how to generate
+ weird stabs data for testing. The original binary from the bug report
+ now loads just fine without GDB crashing.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28900
+
+2022-02-21 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make use of std::string in dbxread.c and xcoffread.c
+ While taking a look through dbxread.c I spotted a couple of places
+ where making use of std::string would remove the need for manual
+ memory allocation and memcpy.
+
+ During review Simon pointed out that the same code exists in
+ xcoffread.c, so I've applied the same fix there too.
+
+ There should be no user visible changes after this commit.
+
+2022-02-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-20 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Only paginate for filtered output in fputs_maybe_filtered
+ A have had situation where a unfiltered output (done using
+ fputs_unfiltered) ended up triggering pagination. The backtrace for this was:
+
+ ...
+ #24 0x000055839377ee4e in check_async_event_handlers () at ../../gdb/async-event.c:335
+ #25 0x0000558394b67b57 in gdb_do_one_event () at ../../gdbsupport/event-loop.cc:216
+ #26 0x0000558394587454 in gdb_readline_wrapper (prompt=0x7ffd907712d0 "--Type <RET> for more, q to quit, c to continue without paging--") at ../../gdb/top.c:1148
+ #27 0x0000558394707270 in prompt_for_continue () at ../../gdb/utils.c:1438
+ #28 0x00005583947088b3 in fputs_maybe_filtered (linebuffer=0x60c0000f4000 " [...quite big message...]", stream=0x60300028e9d0, filter=0) at ../../gdb/utils.c:1752
+ #29 0x0000558394708e57 in fputs_unfiltered (linebuffer=0x60c0000f4000 " [...quite big message...]", stream=0x60300028e9d0) at ../../gdb/utils.c:1811
+ ...
+
+ This comes from what appears to be a oversight in fputs_maybe_filtered. This
+ function has a FILTER parameter which if true makes the function pause after
+ every screenful (i.e. triggers pagination).
+
+ The filter parameter is correctly used to guard the first place where
+ prompt_for_continue. There is a second place in the function which can call
+ prompt_for_continue, but is currently unguarded. I believe that this is an
+ oversight, this patch fixes that.
+
+ Tested on Linux-x86_64, no regression observed.
+
+ Change-Id: Iad8ffd50a87cf20077500878e2564b5a7dc81ece
+
+2022-02-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-19 Dominique Quatravaux <dominique.quatravaux@epfl.ch>
+
+ gdb/darwin: remove not-so-harmless spurious call to `wait4`
+ As seen in https://sourceware.org/bugzilla/show_bug.cgi?id=24069 this
+ code will typically wait4() a second time on the same process that was
+ already wait4()'d a few lines above. While this used to be
+ harmless/idempotent (when we assumed that the process already exited),
+ this now causes a deadlock in the WIFSTOPPED case.
+
+ The early (~2019) history of bug #24069 cautiously suggests to use
+ WNOHANG instead of outright deleting the call. However, tests on the
+ current version of Darwin (Big Sur) demonstrate that gdb runs just fine
+ without a redundant call to wait4(), as would be expected.
+ Notwithstanding the debatable value of conserving bug compatibility with
+ an OS release that is more than a decade old, there is scant evidence of
+ what that double-wait4() was supposed to achieve in the first place - A
+ cursory investigation with `git blame` pinpoints commits bb00b29d7802
+ and a80b95ba67e2 from the 2008-2009 era, but fails to answer the
+ "why" question conclusively.
+
+ Co-Authored-By: Philippe Blain <levraiphilippeblain@gmail.com>
+ Change-Id: Id4e4415d66d6ff6b3552b60d761693f17015e4a0
+
+2022-02-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-18 Tom Tromey <tromey@adacore.com>
+
+ Add constructor to bound_minimal_symbol
+ This adds a constructor to bound_minimal_symbol, to avoid a build
+ failure with clang that Simon pointed out.
+
+ I also took the opportunity to remove some redundant initializations,
+ and to change one use of push_back to emplace_back, as suggested by
+ Simon.
+
+2022-02-18 Roland McGrath <mcgrathr@google.com>
+
+ Fix typo in ld.texi
+ ld/
+ * ld.texi (Output Section Type): Fix typo in @code syntax.
+
+2022-02-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove newlines from some linux_nat_debug_printf calls
+ Change-Id: I80328fab7096221356864b5a4fb30858b48d2c10
+
+2022-02-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-17 Nick Clifton <nickc@redhat.com>
+
+ Updated Serbian translations for the bfd, gold, ld and opcodes directories
+
+2022-02-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-16 Fangrui Song <maskray@google.com>
+
+ ld: Support customized output section type
+ bfd/
+ PR ld/28841
+ * bfd-in2.h (struct bfd_section): Add type.
+ (discarded_section): Add field.
+ * elf.c (elf_fake_sections): Handle bfd_section::type.
+ * section.c (BFD_FAKE_SECTION): Add field.
+ * mri.c (mri_draw_tree): Update function call.
+
+ ld/
+ PR ld/28841
+ * ld.texi: Document new output section type.
+ * ldlex.l: Add new token TYPE.
+ * ldgram.y: Handle TYPE=exp.
+ * ldlang.h: Add type_section to list of section types.
+ * ldlang.c (lang_add_section): Handle type_section.
+ (map_input_to_output_sections): Handle type_section.
+ * testsuite/ld-scripts/output-section-types.t: Add tests.
+ * testsuite/ld-scripts/output-section-types.d: Update.
+
+2022-02-16 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: add a missing white space character
+ Just adds a missing space. There should be no user visible changes
+ after this commit.
+
+ gdb: convert callback_handler_installed from int to bool
+ Simple int to bool conversion on callback_handler_installed in
+ event-top.c. There should be no user visible changes after this
+ commit.
+
+2022-02-16 Alan Modra <amodra@gmail.com>
+
+ gas local label and dollar label handling
+ Much of the gas source and older BFD source use "long" for function
+ parameters and variables, when other types would be more appropriate.
+ This patch fixes one of those cases. Dollar labels and numeric local
+ labels do not need large numbers. Small positive itegers are usually
+ all that is required. Due to allowing longs, it was possible for
+ fb_label_name and dollar_label_name to overflow their buffers.
+
+ * symbols.c: Delete unnecessary forward declarations.
+ (dollar_labels, dollar_label_instances): Use unsigned int.
+ (dollar_label_defined, dollar_label_instance): Likewise.
+ (define_dollar_label): Likewise.
+ (fb_low_counter, fb_labels, fb_label_instances): Likewise.
+ (fb_label_instance_inc, fb_label_instance): Likewise.
+ (fb_label_count, fb_label_max): Make them size_t.
+ (dollar_label_name, fb_label_name): Rewrite using sprintf.
+ * symbols.h (dollar_label_defined): Update prototype.
+ (define_dollar_label, dollar_label_name): Likewise.
+ (fb_label_instance_inc, fb_label_name): Likewise.
+ * config/bfin-lex.l (yylex): Remove unnecessary casts.
+ * expr.c (integer_constant): Likewise.
+ * read.c (read_a_source_file): Limit numeric label range to int.
+
+2022-02-16 Alan Modra <amodra@gmail.com>
+
+ ubsan: s_app_line integer overflow
+ There are quite a few ubsan warnings in gas. This one disappears with
+ a code tidy.
+
+ * read.c (s_app_line): Rename 'l' to 'linenum'. Avoid ubsan
+ warning.
+
+2022-02-16 Alan Modra <amodra@gmail.com>
+
+ pe_ILF_make_a_symbol_reloc segfault
+ pei-aarch64-little apparently lacks support for BFD_RELOC_RVA.
+
+ * peicode.h (pe_ILF_make_a_symbol_reloc): Don't segfault on
+ NULL howto.
+
+2022-02-16 Alan Modra <amodra@gmail.com>
+
+ What to do when sh_addralign isn't a power of two
+ BFD generally doesn't handle anything but a power of two section
+ alignment, and ELF sh_addralign is required to be an integral power of
+ two (or zero) by the ELF spec. Of course this is ignored by fuzzers,
+ and because bfd_log2 rounds up, we can end up with alignment_power
+ being 32 on a 32-bit object or 64 on a 64-bit object. That then
+ triggers ubsan warnings in places like bfd_update_compression_header
+ where we want to convert from alignment_power back to an alignment.
+ I suppose we could reject object files that have non-compliant
+ sh_addralign, but I think it's also reasonable to use the greatest
+ power of two divisor of sh_addralign, ie. the rightmost 1 bit.
+
+ * elf.c (_bfd_elf_make_section_from_shdr): Use greatest power
+ of two divisor of sh_addralign.
+ (_bfd_elf_assign_file_position_for_section): Likewise.
+ (assign_file_positions_for_non_load_sections): Likewise.
+
+2022-02-16 Alan Modra <amodra@gmail.com>
+
+ asan: buffer overflow in vms-alpha.c
+ * vms-alpha.c (evax_bfd_print_dst): Sanity check another place
+ printing strings.
+
+ asan : use of uninitialized value in buffer_and_nest
+ * macro.c (buffer_and_nest): Don't read past end of string buffer.
+
+ asan: buffer overflow in peXXigen.c
+ * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Properly
+ sanity check DataDirectory[PE_DEBUG_DATA].Size.
+
+2022-02-16 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/common: Improve sim_dump_memory head comment
+ As requested by Mike.
+
+ * sim-memopt.c: Improve head comment.
+
+2022-02-16 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite/cris/c/stat3.c: Fix formatting nit
+ * c/stat3.c (main): Fix formatting nit.
+
+2022-02-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: cleanup the istarget * logic
+ Now that the multitarget testing has settled, clean up the cases where
+ istarget * is used. This ends up being mostly style unindenting.
+
+2022-02-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-15 H.J. Lu <hjl.tools@gmail.com>
+
+ i386: Update I386_NEED_DYNAMIC_RELOC_TYPE_P for DT_TEXTREL
+ Update I386_NEED_DYNAMIC_RELOC_TYPE_P to allow R_386_TLS_IE for relocation
+ in read-only section.
+
+ bfd/
+
+ PR ld/28894
+ * elfxx-x86.h (I386_NEED_DYNAMIC_RELOC_TYPE_P): Allow
+ R_386_TLS_IE.
+
+ ld/
+ PR ld/28894
+ * testsuite/ld-i386/i386.exp: Run pr28894.
+ * testsuite/ld-i386/pr28894.d: New file.
+ * testsuite/ld-i386/pr28894.s: Likewise.
+
+2022-02-15 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite: Default global_cc_os and global_cc_works properly
+ There was an omission on 3e6dc39ed7a8 "sim/testsuite: Set
+ global_cc_os also when no compiler is found"; global_cc_os
+ wasn't set for other than the primary target, which means
+ that the "unguarded" use of global_cc_os in
+ testsuite/cris/c/c.exp caused the dreaded "ERROR: can't read
+ "global_cc_os": no such variable" when e.g. configuring for
+ pru-elf and doing "make check-sim". Better initializing
+ both variables at the top to default values, rather than
+ adding another single 'set global_cc_os ""', to reduce the
+ risk of not setting them properly if or when that
+ if-statement-chain is made longer.
+
+ sim/testsuite:
+ * lib/sim-defs.exp (sim_init_toolchain): Default
+ global_cc_os and global_cc_works properly, before if-chain.
+
+2022-02-15 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Add has_sib to struct instr_info
+ Add has_sib to struct instr_info and use SIB info only if ins->has_sib
+ is true.
+
+ PR binutils/28892
+ * i386-dis.c (instr_info): Add has_sib.
+ (get_sib): Set has_sib.
+ (OP_E_memory): Replace havesib with ins->has_sib.
+ (OP_VEX): Use ins->sib.index only if ins->has_sib is true.
+
+2022-02-15 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Respect the DW_CC_nocall attribute
+ It is possible for a compiler to optimize a function in a such ways that
+ the function does not follow the calling convention of the target. In
+ such situation, the compiler can use the DW_AT_calling_convention
+ attribute with the value DW_CC_nocall to tell the debugger that it is
+ unsafe to call the function. The DWARF5 standard states, in 3.3.1.1:
+
+ > If the value of the calling convention attribute is the constant
+ > DW_CC_nocall, the subroutine does not obey standard calling
+ > conventions, and it may not be safe for the debugger to call this
+ > subroutine.
+
+ Non standard calling convention can affect GDB's assumptions in multiple
+ ways, including how arguments are passed to the function, how values are
+ returned, and so on. For this reason, it is unsafe for GDB to try to do
+ the following operations on a function with marked with DW_CC_nocall:
+
+ - call / print an expression requiring the function to be evaluated,
+ - inspect the value a function returns using the 'finish' command,
+ - force the value returned by a function using the 'return' command.
+
+ This patch ensures that if a command which relies on GDB's knowledge of
+ the target's calling convention is used on a function marked nocall, GDB
+ prints an appropriate message to the user and does not proceed with the
+ operation which is unreliable.
+
+ Note that it is still possible for someone to use a vendor specific
+ value for the DW_AT_calling_convention attribute for example to indicate
+ the use of an alternative calling convention. This commit does not
+ prevent this, and target dependent code can be adjusted if one wanted to
+ support multiple calling conventions.
+
+ Tested on x86_64-Linux, with no regression observed.
+
+ Change-Id: I72970dae68234cb83edbc0cf71aa3d6002a4a540
+
+2022-02-15 Lancelot SIX <lancelot.six@amd.com>
+ Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add a symbol* argument to get_return_value
+ Add an argument to the get_return_value function to indicate the symbol
+ of the function the debuggee is returning from. This will be used by
+ the following patch.
+
+ Since the function return type can be deduced from the symbol remove the
+ value_type argument which becomes redundant.
+
+ No user visible change after this patch.
+
+ Tested on x86_64-linux.
+
+ Change-Id: Idf1279f1f7199f5022738a6679e0fa63fbd22edc
+
+2022-02-15 H.J. Lu <hjl.tools@gmail.com>
+
+ x86-64: Use MAXPAGESIZE for the relro segment alignment
+ Adjust x86-64 linker tests after reverting
+
+ commit 31b4d3a16f200bf04db8439a63b72bba7af4e1be
+ Author: Alan Modra <amodra@gmail.com>
+ Date: Thu Feb 3 08:57:47 2022 +1030
+
+ PR28824, relro security issues, x86 keep COMMONPAGESIZE relro
+
+ to use MAXPAGESIZE for the end of the relro segment alignment, like other
+ ELF targets.
+
+ * testsuite/ld-x86-64/plt-main-bnd.dd: Updated.
+ * testsuite/ld-x86-64/plt-main-ibt-x32.dd: Likewise.
+ * testsuite/ld-x86-64/plt-main-ibt.dd: Likewise.
+ * testsuite/ld-x86-64/pr14207.d: Likewise.
+ * testsuite/ld-x86-64/pr18176.d: Likewise.
+ * testsuite/ld-x86-64/pr20830a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830a.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a.d: Likewise.
+ * testsuite/ld-x86-64/pr21038b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038b.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c.d: Likewise.
+
+2022-02-15 H.J. Lu <hjl.tools@gmail.com>
+
+ Revert "PR28824, relro security issues, x86 keep COMMONPAGESIZE relro"
+ This reverts commit 31b4d3a16f200bf04db8439a63b72bba7af4e1be.
+
+2022-02-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite/cris: If failing compilation, mark C tests as errors
+ ...when we know we have a working compiler. This will reduce
+ the risk of faulty edits by exposing them rather than hiding
+ them as "unresolved". It also harmonizes behavior with that of
+ run_sim_test.
+
+ * c/c.exp: Mark C tests failing compilation test errors.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite/cris: Remove faulty use of basename in C tests
+ Calls to basename were added here as part of commit
+ e1e1ae6e9b5e "sim: testsuite: fix objdir handling", but that
+ commit missed adding "#include <libgen.h>" or the equivalent
+ GNU extension, see basename(3). Fixing that shows a logical
+ error in the change to openpf1.c; the non-/-prefixed
+ code-path was changed instead of the "/"-prefixed code-path,
+ which is the one executed after that commit.
+
+ For "newlib" these tests failed linking after that commit.
+ Recent newlib has the (asm-renamed) GNU-extension-variant of
+ basename, but we're better off not using it at all.
+
+ Unfortunately, compilation failures for C tests run by the
+ machinery in c.exp are currently just marked "unresolved",
+ in contrast to C and assembler tests run by calling
+ run_sim_test.
+
+ The interaction of calling with the full program-path vs.
+ use of --sysroot exposes a consistency problem: when
+ --sysroot is used, argv[0] isn't the path by which the
+ program can find itself. It's undecided whether argv[0] for
+ the program running in the simulator should be edited
+ (related to the naked argument to the simulator before
+ passing on to the simulated program) to remove a leading
+ --sysroot. Either way, such a change would be out of scope
+ for this commit.
+
+ * c/stat3.c (mybasename): New macro. Use it instead of basename.
+ * c/openpf1.c: Correct basename-related change and update related
+ comment.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim: Add sim_dump_memory for debugging
+ Intended to be called from the debugger tool.
+
+ sim/common:
+ * sim-memopt.c (sim_dump_memory): New function.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim: Fix use of out-of-tree assembler and linker when testing
+ With commit 7a259895bb2d "sim: testsuite: expand arch specific
+ toolchain settings", trying to use out-of-tree ld and as at test-time
+ broke for the "primary target", like when testing a release-tarball.
+
+ Subsequent to that commit, all assembler tests without in-tree-built
+ tools FAIL, getting errors when trying to call
+ $(abs_builddir)/../gas/as-new. But, that isn't the actual culprint;
+ it's actually it's its immediate predecessor, commit 8996c21067373
+ "sim: testsuite: setup per-port toolchain settings for multitarget
+ build", which hardcodes in-tree-paths to those tools instead of
+ considering e.g. $(<X>_FOR_TARGET), the preferred overridable variable
+ for single-target builds, as set up by the toplevel Makefile.
+
+ This commit calls GCC_TARGET_TOOL (a deceptive name; gcc-specific
+ features aren't used) from toplev/config/acx.m4, somewhat like calls
+ in toplev/configure.ac but without the NCN_STRICT_CHECK_TARGET_TOOLS
+ step, for each X to find a value for $(<X>_FOR_TARGET). N.B.: in-tree
+ tools still override any ${target}-${tool} found in $PATH, i.e. only
+ previously broken builds are affected.
+
+ The variables $(<X>_FOR_TARGET) are usually overridden by the toplevel
+ Makefile to the same value or better, but has to be set here too, as
+ automake "wants" Makefiles to be self-contained (you get an error
+ pointing out that the variable may be empty). If it hadn't been for
+ that, SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET would not be needed.
+ This detail should only (positively) affect users invoking "make
+ check" in sim/ instead of "make check-sim" (or "make check") at the
+ toplevel. Now the output from "configure" matches the target tools
+ actually used by sim at test-time, for the "primary target".
+
+ Using $(CC) for "example-" targets CC_FOR_TARGET is not changed, as
+ that appears to be a deliberate special-case.
+
+ Note that all tools still have to be installed and present in
+ $PATH at configure-time to be properly used at test-time.
+
+ sim:
+ * m4/sim_ac_toolchain.m4 (SIM_AC_CHECK_TOOLCHAIN_FOR_PRIMARY_TARGET):
+ New defun.
+ (SIM_TOOLCHAIN_VARS): Call it using AC_REQUIRE, and use variables
+ AS_FOR_TARGET, LD_FOR_TARGET and CC_FOR_TARGET instead of hard-coded
+ values.
+ * Makefile.in, configure: Regenerate.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim cris: Unbreak --disable-sim-hardware builds
+ With --disable-sim-hardware (--enable-sim-hardware=no),
+ whose default was changed to --enable-sim-hardware(=yes) in
+ commit 34cf51120683, building for cris-elf fails as
+ sim_hw_parse then doesn't exist.
+
+ A cris-elf simulator configured for --enable-sim-hardware
+ (or the default after to the mentioned commit) runs about
+ 2.5x slower than one configured --disable-sim-hardware.
+ A further 2-5% performance regression was not investigated.
+
+ When sim_hw_parse doesn't exist, --cris-900000xx can't be
+ supported. The best action here is to remove it completely,
+ so its absence can be identified through --help, but
+ avoiding littering the code with "#if WITH_HW".
+
+ sim/cris:
+ * sim-if.c (cris_options) [WITH_HW]: Conditionalize
+ support of option --cris-900000xx.
+ (sim_open) [WITH_HW]: Conditionalize sim_hw_parse
+ call.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite/cris: As applicable, require simoption --cris-900000xx
+ Apply the new run_sim_test option "require" as in "#require
+ simoption --cris-900000xx" for all tests using that option.
+ This allows a clean test-suite-run for a build with
+ --disable-sim-hardware, where that option is not supported,
+ by skipping those tests as "untested".
+
+ sim/testsuite/cris:
+ * asm/io1.ms, asm/io2.ms, asm/io3.ms, asm/io6.ms,
+ asm/io7.ms: Call "#require: simoption --cris-900000xx".
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite: Support "requires: simoption <--name-of-option>"
+ Simulator features can be present or not, typically
+ depending on different-valued configure options, like
+ --enable-sim-hardware[=off|=on]. To avoid failures in
+ test-suite-runs when testing such configurations, a new
+ predicate is needed, as neither "target", "progos" nor
+ "mach" fits cleanly.
+
+ The immediate need was to check for presence of a simulator
+ option, but rather than a specialized "requires-simoption:"
+ predicate I thought I'd handle the general (parametrized)
+ need, so here's a generic predicate machinery and a (first)
+ predicate to use together with it; checking whether a
+ particular option is supported, by looking at "run --help"
+ output. This was inspired by the check_effective_target_
+ machinery in the gcc test-suite.
+
+ Multiple "requires: <requirement> <parameter>" form a list of
+ predicates (with parameters), to be used as a conjunction.
+
+ sim/testsuite:
+ * lib/sim-defs.exp (sim_check_requires_simoption): New function.
+ (run_sim_test): Support "requires: <requirement> <parameter>".
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite/cris/hw/rv-n-cris/irq1.ms: Disable due to randomness
+ For reasons that remain largely to be investigated (besides
+ the apparent lack of synchronization between two processes),
+ this test fails randomly, with two different sets of common
+ outputs. Curiously, that doesn't happen for the other
+ similar tests. There's a comment that mentions this, though
+ that doesn't make it a sustainable part of a test-suite.
+ (Known-blinking tests should be disabled until fixed.)
+
+ sim/testsuite/cris:
+ * hw/rv-n-cris/irq1.ms: Disable by use of a never-matched
+ "progos" value.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite/cris/c: Use -sim3 but only for newlib targets
+ Commit a39487c6685f "sim: cris: use -sim with C tests for cris-elf
+ targets" caused " -sim" to be appended to CFLAGS_FOR_TARGET for
+ cris*-*-elf, where testing had until then relied on
+ "RUNTESTFLAGS=--target_board=cris-sim" being passed when running "make
+ check-sim", adding the right options. While "-sim" happens to work,
+ the baseboard-file cris-sim.exp uses "-sim3" so for consistency use
+ that instead.
+
+ Then commit b42f20d2ac72 "sim: testsuite: drop most specific istarget
+ checks" caused " -sim" to be appended for *all* targets, which just
+ doesn't work. For example, for crisv32-linux-gnu, that's not a
+ recognized option and will cause a dejagnu error and further testing
+ in c.exp will be aborted.
+
+ While cris-sim.exp appends "-static" for *-linux-gnu, further changes
+ in the test-suite have caused "linux"-specific tests to break, so that
+ part will be tended to separately.
+
+ But, save and restore CFLAGS_FOR_TARGET around the modification and
+ use where needed, to not have the CRIS-specific modification affect a
+ continuing test-run (possibly for other targets).
+
+ sim/testsuite/cris:
+ * c/c.exp (CFLAGS_FOR_TARGET): Replace appended option " -sim"
+ with " -sim3", but do it conditionally for newlib targets. Save
+ and restore CFLAGS_FOR_TARGET in saved_CFLAGS_FOR_TARGET such
+ that it doesn't affect the value of CFLAGS_FOR_TARGET outside
+ c.exp.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite: Set global_cc_os also when no compiler is found
+ If we don't set this variable, it doesn't exist, and using "#progos:"
+ in an assembler-file will cause an error rather than just skipping the
+ test, viz:
+
+ Running /src/sim/testsuite/cris/hw/rv-n-cris/rvc.exp ...
+ ERROR: tcl error sourcing /src/sim/testsuite/cris/hw/rv-n-cris/rvc.exp.
+ ERROR: can't read "global_cc_os": no such variable
+ while executing
+ "if { $opts(progos) != "" && $opts(progos) != $global_cc_os } {
+ untested $subdir/$name
+ return
+ }"
+ (procedure "run_sim_test" line 102)
+
+ Neither the commit introducing progos, nor the top comment
+ in run_sim_test, mentions progos as intended only for C
+ tests, or that its use must be gated on $global_cc_works !=
+ 0, so (not) setting it in the no-working-compiler path seems
+ just overlooked.
+
+ Allowing it to be used for assembler tests makes it usable
+ for e.g. an always-false predicate and in expressions in
+ .exp files without gating on $global_cc_works != 0.
+
+ With this patch, global_cc_os is set to "", just as for "unknown OS".
+
+ sim/testsuite:
+ * lib/sim-defs.exp (sim_init_toolchain): Set global_cc_os also when
+ no working target C compiler is found.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim/testsuite/cris: Assembler testcase for PRIx32 usage bug
+ Several C test-cases exposed the bug, but let's have one for
+ people who test using just the assembler and linker.
+
+ * asm/endmem1.ms: New test.
+
+2022-02-14 Hans-Peter Nilsson <hp@axis.com>
+
+ sim cris: Correct PRIu32 to PRIx32
+ In 5ee0bc23a68f "sim: clean up bfd_vma printing" there was
+ an additional introduction of PRIx32 and PRIu32 but just in
+ sim/cris/sim-if.c. One type of bug was fixed in commit
+ d16ce6e4d581 "sim: cris: fix memory setup typos" but one
+ remained; the PRIu32 usage is wrong, as hex output is
+ desired; note the 0x prefix.
+
+ Without this fix, you'll see output like:
+ memory map 0:0x4000..0x5fff (8192 bytes) overlaps 0:0x0..0x16383 (91012 bytes)
+ program stopped with signal 6 (Aborted).
+ for some C programs, like some of the ones in the sim/cris/c
+ testsuite from where the example is taken (freopen2.c).
+
+ The bug behavior was with memory allocation. With an
+ attempt to allocate memory using the brk syscall such that
+ the room up to the next 8192-byte "page boundary" wasn't
+ sufficient, the simulator memory allocation machinery horked
+ on a consistency error when trying to allocate a memory
+ block to raise the "end of the data segment": there was
+ already memory allocated at that address.
+
+ Unfortunately, none of the programs in sim/cris/asm exposed
+ this bug at the time, but an assembler test-case is
+ committed after this fix.
+
+ sim/cris:
+ * sim-if.c (sim_open): Correct PRIu32 to PRIx32.
+
+2022-02-14 Sergei Trofimovich <siarheit@google.com>
+
+ microblaze: fix fsqrt collicion to build on glibc-2.35
+ * microblaze-opcm.h: Renamed 'fsqrt' to 'microblaze_fsqrt'.
+ * microblaze-opc.h: Follow 'fsqrt' rename.
+
+2022-02-14 Tom Tromey <tom@tromey.com>
+
+ Remove LA_PRINT_STRING
+ This removes the LA_PRINT_STRING macro, in favor of using ordinary
+ method calls.
+
+ Remove LA_PRINT_CHAR
+ This removes the LA_PRINT_CHAR macro, in favor of using ordinary
+ method calls.
+
+ Remove LA_PRINT_TYPE
+ This removes the LA_PRINT_TYPE macro, in favor of using ordinary
+ method calls.
+
+2022-02-14 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: move styling support to gdb.styling
+ This commit moves the two Python functions that are used for styling
+ into a new module, gdb.styling, there's then a small update in
+ python.c so GDB can find the functions in their new location.
+
+ The motivation for this change is purely to try and reduce the clutter
+ in the top-level gdb module, and encapsulate related functions into
+ modules. I did ponder documenting these functions as part of the
+ Python API, however, doing so would effectively "fix" the API, and I'm
+ still wondering if there's improvements that could be made, also, the
+ colorize function is only called in some cases now that GDB prefers
+ libsource-highlight, so it's not entirely sure how this would work as
+ part of a user facing API.
+
+ Still, despite these functions never having been part of a documented
+ API, it is possible that a user out there has overridden these to, in
+ some way, customize how GDB performs styling. Moving the function as
+ I propose in this patch could break things for that user, however,
+ fixing this breakage is trivial, and, as these functions were never
+ documented, I don't think we should be obliged to not break user code
+ that relies on them.
+
+2022-02-14 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: use python to colorize disassembler output
+ This commit adds styling support to the disassembler output, as such
+ two new commands are added to GDB:
+
+ set style disassembler enabled on|off
+ show style disassembler enabled
+
+ In this commit I make use of the Python Pygments package to provide
+ the styling. I did investigate making use of libsource-highlight,
+ however, I found the highlighting results to be inferior to those of
+ Pygments; only some mnemonics were highlighted, and highlighting of
+ register names such as r9d and r8d (on x86-64) was incorrect.
+
+ To enable disassembler highlighting via Pygments, I've added a new
+ extension language hook, which is then implemented for Python. This
+ hook is very similar to the existing hook for source code
+ colorization.
+
+ One possibly odd choice I made with the new hook is to pass a
+ gdb.Architecture through, even though this is currently unused. The
+ reason this argument is not used is that, currently, styling is
+ performed identically for all architectures.
+
+ However, even though the Python function used to perform styling of
+ disassembly output is not part of any documented API, I don't want
+ to close the door on a user overriding this function to provide
+ architecture specific styling. To do this, the user would inevitably
+ require access to the gdb.Architecture, and so I decided to add this
+ field now.
+
+ The styling is applied within gdb_disassembler::print_insn, to achieve
+ this, gdb_disassembler now writes its output into a temporary buffer,
+ styling is then applied to the contents of this buffer. Finally the
+ gdb_disassembler buffer is copied out to its final destination stream.
+
+ There's a new test to check that the disassembler output includes some
+ escape sequences, though I don't check for specific colours; the
+ precise colors will depend on which instructions are in the
+ disassembler output, and, I guess, how pygments is configured.
+
+ The only negative change with this commit is how we currently style
+ addresses in GDB.
+
+ Currently, when the disassembler wants to print an address, we call
+ back into GDB, and GDB prints the address value using the `address`
+ styling, and the symbol name using `function` styling. After this
+ commit, if pygments is used, then all disassembler styling is done
+ through pygments, and this include the address and symbol name parts
+ of the disassembler output.
+
+ I don't know how much of an issue this will be for people. There's
+ already some precedent for this in GDB when we look at source styling.
+ For example, function names in styled source listings are not styled
+ using the `function` style, but instead, either GNU Source Highlight,
+ or pygments gets to decide how the function name should be styled.
+
+ If the Python pygments library is not present then GDB will continue
+ to behave as it always has, the disassembler output is mostly
+ unstyled, but the address and symbols are styled using the `address`
+ and `function` styles, as they are today.
+
+ However, if the user does `set style disassembler enabled off`, then
+ all disassembler styling is switched off. This obviously covers the
+ use of pygments, but also includes the minimal styling done by GDB
+ when pygments is not available.
+
+2022-02-14 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Keep indirect symbol from IR if referenced from shared object
+ Don't change indirect symbol defined in IR to undefined if it is
+ referenced from shared object.
+
+ bfd/
+
+ PR ld/28879
+ * elflink.c (_bfd_elf_merge_symbol): Don't change indirect
+ symbol defined in IR to undefined if it is referenced from
+ shared object.
+
+ ld/
+
+ PR ld/28879
+ * testsuite/ld-plugin/lto.exp: Run PR ld/28879 tests.
+ * testsuite/ld-plugin/pr28879a.cc: New file.
+ * testsuite/ld-plugin/pr28879b.cc: Likewise.
+
+2022-02-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-13 Alan Modra <amodra@gmail.com>
+
+ PR28882, build failure with gcc-4.2 due to use of 0b literals
+ PR 28882
+ * elf/loongarch.h: Replace binary literals with hex.
+
+2022-02-13 Alan Modra <amodra@gmail.com>
+
+ Don't pass around expld.dataseg pointer
+ The better to see any code that accesses expld.dataseg.
+
+ * ldexp.c (fold_segment_end): Remove seg parameter. Adjust calls.
+ (fold_segment_align, fold_segment_relro_end): Likewise.
+ * ldlang.c (lang_size_segment): Likewise.
+ (lang_size_relro_segment_1, lang_find_relro_sections_1): Likewise.
+
+2022-02-13 Alan Modra <amodra@gmail.com>
+
+ Remove bfd ELF_RELROPAGESIZE
+ Now that ld properly aligns the end of the relro segment, the hack to
+ make relro work on powerpc can disappear.
+
+ bfd/
+ * bfd.c (bfd_emul_get_commonpagesize): Remove relro param.
+ Don't return bed->relropagesize.
+ * elf-bfd.h (struct elf_backend_data): Remove relropagesize.
+ * elfxx-target.h (ELF_RELROPAGESIZE): Remove.
+ * elf32-ppc.c (ELF_RELROPAGESIZE): Don't define.
+ * elf64-ppc.c: Likewise.
+ * bfd-in2.h: Regenerate.
+ ld/
+ * ldemul.c (after_parse_default): Adjust
+ bfd_emul_get_commonpagesize call.
+
+2022-02-13 Alan Modra <amodra@gmail.com>
+
+ PR28824, relro security issues, x86 keep COMMONPAGESIZE relro
+ x86 treats MAXPAGESIZE as a memory optimisation parameter, actual
+ hardware paging is always COMMPAGESIZE of 4k. Use COMMONPAGESIZE for
+ the end of the relro segment alignment.
+
+ The previous patch regresses pr18176, increasing the testcase file
+ size from 322208 to 2099872 bytes. Fixing this on x86 will require
+ introducing a gap after the end of the relro segment (of up to
+ relropagesize-1 bytes).
+
+ PR 28824
+ PR 18176
+ * ld.h (ld_config_type): Add relro_use_commonpagesize field.
+ * ldexp.c (fold_segment_align): Set relropagesize depending on
+ relro_use_commonpagesize.
+ * emultempl/elf-x86.em (elf_x86_create_output_section_statements):
+ Set relro_use_commonpagesize.
+ * testsuite/ld-x86-64/pr18176.d: xfail.
+
+2022-02-13 Alan Modra <amodra@gmail.com>
+
+ PR28824, relro security issues
+ Background
+ ==========
+ There are constraints on layout of binaries to meet demand paging and
+ memory protection requirements. Demand paged binaries must have file
+ offset mod pagesize equal to vma mod pagesize. Memory protection
+ (executable, read, write status) can only change at page boundaries.
+ The linker's MAXPAGESIZE variable gives the page size for these layout
+ constraints.
+
+ In a typical basic executable with two memory segments, text (RE) and
+ data (RW), the data segment must start on a different page to the
+ last text segment page. For example, with 64k pages and a small
+ executable of 48k text and 1k data, the text segment might start at
+ address 0x10000 and data at 0x20000 for a total of two 64k memory
+ pages. Demand paging would require the image on disk to be 64k+1k
+ in size. We can do better than that. If the data segment instead
+ starts at 0x2c000 (the end of the text segment plus one 64k page) then
+ there are still only two memory pages, but the disk image is now
+ smaller, 48k+1k in size. This is why the linker normally starts the
+ data segment at the end of the text segment plus one page. That
+ simple heuristic isn't ideal in all cases. Changing our simple
+ example to one with 64k-1 text size, following that heuristic would
+ result in data starting at 0x2ffff. Now we have two 64k memory data
+ pages for a data segment of 1k! If the data segment instead started
+ at 0x30000 we'd get a single data segment page at the cost of 1 byte
+ extra in the disk image, which is likely a good trade-off. So the
+ linker does adjust the simple heuristic. Just how much disk image
+ size increase is allowed is controlled by the linker's COMMONPAGESIZE
+ variable.
+
+ A PT_GNU_RELRO segment overlays the initial part of the data segment,
+ saying that those pages should be made read-only after relocation by
+ the dynamic loader. Page granularity for memory protection means that
+ the end of the relro segment must be at a page boundary.
+
+ The problem
+ ===========
+ Unfortunately most targets currently only align the end of the relro
+ segment to COMMONPAGESIZE. That results in only partial relro
+ protection if an executable is running with MAXPAGESIZE pages, since
+ any part of the relro segment past the last MAXPAGESIZE boundary can't
+ be made read-only without also affecting sections past the end of the
+ relro segment. I believe this problem arose because x86 always runs
+ with 4k (COMMPAGESIZE) memory pages, and therefore using a larger
+ MAXPAGESIZE on x86 is for reasons other than the demand paging and
+ memory page protection boundary requirements.
+
+ The solution
+ ============
+ Always end the relro segment on a MAXPAGESIZE boundary, except for
+ x86. Note that the relro segment, comprising of sections at the start
+ of the data segment, is sized according to how those sections are laid
+ out. That means the start of the relro segment is fixed relative to
+ its end. Which also means the start of the data segment must be at a
+ fixed address mod MAXPAGESIZE. So for relro the linker can't play
+ games with the start of the data segment to save disk space. At
+ least, not without introducing gaps between the relro sections. In
+ fact, because the linker was starting layout using its simple
+ heuristic of starting the data segment at the end of the text segment
+ plus one page, it was sometimes introducing page gaps for no reason.
+ See pr28743.
+
+ PR 28824
+ PR 28734
+ * ldexp.c (fold_segment_align): When relro, don't adjust up by
+ offset within page. Set relropagesize.
+ (fold_segment_relro_end): Align to relropagesize.
+ * ldexp.h (seg_align_type): Rename pagesize to commonpagesize.
+ Add relropagesize. Comment.
+ * ldlang.c (lang_size_segment): Adjust to suit field renaming.
+ (lang_size_relro_segment_1): Align relro_end using relropagesize.
+
+2022-02-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-11 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Disallow invalid relocation against protected symbol
+ I am checking this into master and will backport it to 2.38 branch.
+
+ H.J
+ ----
+ On x86, GCC 12 supports -mno-direct-extern-access to enable canonical
+ reference to protected function and disable copy relocation. With
+ -mno-direct-extern-access, the canonical protected function symbols must
+ be accessed via canonical reference and the protected data symbols in
+ shared libraries are non-copyable. Under glibc 2.35, non-canonical
+ reference to the canonical protected function will get the run-time error:
+
+ ./y: internal_f: ./libfoo.so: non-canonical reference to canonical protected function
+
+ and copy relocations against the non-copyable protected symbols will get
+ the run-time error:
+
+ ./x: internal_i: ./libfoo.so: copy relocation against non-copyable protected symbol
+
+ Update x86 linker to disallow non-canonical reference to the canonical
+ protected function:
+
+ ld: plt.o: non-canonical reference to canonical protected function `internal_f' in libfoo.so
+ ld: failed to set dynamic section sizes: bad value
+
+ and copy relocation against the non-copyable protected symbol:
+
+ ld: main.o: copy relocation against non-copyable protected symbol `internal_i' in libfoo.so
+
+ at link-time.
+
+ bfd/
+
+ PR ld/28875
+ * elf-properties.c (_bfd_elf_parse_gnu_properties): Don't skip
+ shared libraries for GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS.
+ * elf32-i386.c (elf_i386_scan_relocs): Disallow non-canonical
+ reference to canonical protected function.
+ * elf64-x86-64.c (elf_x86_64_scan_relocs): Likewise.
+ * elfxx-x86.c (elf_x86_allocate_dynrelocs): Don't allow copy
+ relocation against non-copyable protected symbol.
+
+ ld/
+
+ PR ld/28875
+ * testsuite/ld-i386/i386.exp: Check non-canonical reference to
+ canonical protected function and check copy relocation against
+ non-copyable protected symbol.
+ * testsuite/ld-i386/pr21997-1.err: New file.
+ * testsuite/ld-i386/pr28875.err: Likewise.
+ * testsuite/ld-i386/pr28875a.c: Likewise.
+ * testsuite/ld-i386/pr28875b.c: Likewise.
+ * testsuite/ld-x86-64/pr21997-1a.err: Updated.
+ * testsuite/ld-x86-64/pr21997-1b.err: Likewise.
+ * testsuite/ld-x86-64/pr28875-data.err: New file.
+ * testsuite/ld-x86-64/pr28875-func.err: Likewise.
+ * testsuite/ld-x86-64/x86-64.exp: Check non-canonical reference
+ to canonical protected function and check copy relocation against
+ non-copyable protected symbol.
+
+2022-02-11 Tom Tromey <tromey@adacore.com>
+
+ Add initializers to bound_minimal_symbol
+ This adds initializers to bound_minimal_symbol, allowing for the
+ removal of some calls to memset.
+
+2022-02-11 Bhuvanendra Kumar N <Bhuvanendra.KumarN@amd.com>
+
+ gdb/fortran: support ptype and print commands for namelist variables
+ Gfortran supports namelists (a Fortran feature); it emits
+ DW_TAG_namelist and DW_TAG_namelist_item dies. But gdb does not
+ process these dies and does not support 'print' or 'ptype' commands on
+ namelist variables.
+
+ An attempt to print namelist variables results in gdb bailing out with
+ the error message as shown below.
+
+ (gdb) print nml
+ No symbol "nml" in current context.
+
+ This commit is to make the print and ptype commands work for namelist
+ variables and its items. Sample output of these commands is shared
+ below, with fixed gdb.
+
+ (gdb) ptype nml
+ type = Type nml
+ integer(kind=4) :: a
+ integer(kind=4) :: b
+ End Type nml
+ (gdb) print nml
+ $1 = ( a = 10, b = 20 )
+
+2022-02-11 Bruno Larsen <blarsen@redhat.com>
+
+ gdb: fix until behavior with trailing !is_stmt lines
+ When using the command "until", it is expected that GDB will exit a
+ loop if the current instruction is the last one related to that loop.
+ However, if there were trailing non-statement instructions, "until"
+ would just behave as "next". This was noticeable in clang-compiled
+ code, but might happen with gcc-compiled as well. PR gdb/17315 relates
+ to this problem, as running gdb.base/watchpoint.exp with clang
+ would fail for this reason.
+
+ To better understand this issue, consider the following source code,
+ with line numbers marked on the left:
+
+ 10: for (i = 0; i < 10; ++i)
+ 11: loop_body ();
+ 12: other_stuff ();
+
+ If we transform this to pseudo-assembler, and generate a line table,
+ we could end up with something like this:
+
+ Address | Pseudo-Assembler | Line | Is-Statement?
+
+ 0x100 | i = 0 | 10 | Yes
+ 0x104 | loop_body () | 11 | Yes
+ 0x108 | i = i + 1 | 10 | Yes
+ 0x10c | if (i < 10): | 10 | No
+ 0x110 | goto 0x104 | 10 | No
+ 0x114 | other_stuff () | 12 | Yes
+
+ Notice the two non-statement instructions at the end of the loop.
+
+ The problem is that when we reach address 0x108 and use 'until',
+ hoping to leave the loop, GDB sets up a stepping range that runs from
+ the start of the function (0x100 in our example) to the end of the
+ current line table entry, that is 0x10c in our example. GDB then
+ starts stepping forward.
+
+ When 0x10c is reached GDB spots that we have left the stepping range,
+ that the new location is not a statement, and that the new location is
+ associated with the same source line number as the previous stepping
+ range. GDB then sets up a new stepping range that runs from 0x10c to
+ 0x114, and continues stepping forward.
+
+ Within that stepping range the inferior hits the goto (at 0x110) and
+ loops back to address 0x104.
+
+ At 0x104 GDB spots that we have left the previous stepping range, that
+ the new address is marked as a statement, and that the new address is
+ for a different source line. As a result, GDB stops and returns
+ control to the user. This is not what the user was expecting, they
+ expected GDB to exit the loop.
+
+ The fix proposed in this patch, is that, when the user issues the
+ 'until' command, and GDB sets up the initial stepping range, GDB will
+ check subsequent SALs (symtab_and_lines) to see if they are
+ non-statements associated with the same line number. If they are then
+ the end of the initial stepping range is extended to the end of the
+ non-statement SALs.
+
+ In our example above, the user is at 0x108 and uses 'until', GDB now
+ sets up a stepping range from the start of the function 0x100 to
+ 0x114, the first address associated with a different line.
+
+ Now as GDB steps around the loop it never leaves the initial stepping
+ range. It is only when GDB exits the loop that we leave the stepping
+ range, and the stepping finishes at address 0x114.
+
+ This patch also adds a test case that can be run with gcc to test that
+ this functionality is not broken in the future.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17315
+
+2022-02-11 Richard Sandiford <richard.sandiford@arm.com>
+
+ gas/doc: Fix "a true results" typo
+
+2022-02-11 Jan Vrany <jan.vrany@labware.com>
+
+ gdb: extend the information printed by 'maint info jit'
+ This commit updates the output of 'maint info jit' to print not just
+ the jit_code_entry address, but also the symfile address, and the
+ symfile size.
+
+ The new information could be obtained by looking into target memory at
+ the contents of the jit_code_entry, but, by storing this information
+ within gdb at the time the jit object is loaded, it is now possible to
+ check if the jit_code_entry has been modified in target memory behind
+ gdb's back.
+
+ Additionally, the symfile address is the same address that is now used
+ in the objfile names after commit 4a620b7e.
+
+ One test that relies on the output of 'maint info jit' was updated to
+ allow for the new output format.
+
+2022-02-11 Michael Forney <mforney@mforney.org>
+
+ bfd: Remove return with expression in void function
+ * bfd.c (bfd_set_gp_value): Remove return with expression
+ in void function.
+
+2022-02-11 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: LoongArch: Add Makefile, configure and NEWS
+ This commit adds Makefile, configure and NEWS for LoongArch.
+
+ gdb: LoongArch: Add initial native Linux support
+ This commit adds initial native Linux support for LoongArch.
+
+ gdb: LoongArch: Add initial Linux target support
+ This commit adds initial Linux target support for LoongArch.
+
+ gdb: LoongArch: Add initial baremetal support
+ This commit adds initial baremetal support for LoongArch.
+
+ gdb: LoongArch: Add initial target description support
+ This commit adds initial target description support for LoongArch.
+
+2022-02-11 Mike Frysinger <vapier@gentoo.org>
+
+ libctf: delete unused libctf_TEXINFOS
+ It's not clear what this was meant for, but it's not used by anything,
+ and the info pages still generate fine without it.
+
+2022-02-11 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/linux: remove ptrace support check for exec, fork, vfork, vforkdone, clone, sysgood
+ I think it's safe to remove checking support for these ptrace features,
+ they have all been added in what is now ancient times (around the
+ beginning of Linux 2.6). This allows removing a bit of complexity in
+ linux-nat.c and nat/linux-ptrace.c.
+
+ It also allows saving one extra fork every time we start debugging on
+ Linux: linux_check_ptrace_features forks a child process to test if some
+ ptrace features are supported. That child process forks a grand-child,
+ to test whether ptrace reports an event for the fork by the child. This
+ is no longer needed, if we assume the kernel supports reporting forks.
+
+ PTRACE_O_TRACEVFORKDONE was introduced in Linux in this change, in 2003:
+
+ https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=45c1a159b85b3b30afd26a77b4be312226bba416
+
+ PTRACE_O_TRACESYSGOOD was supported at least as of this change, in 2002:
+
+ https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=acc7088569c8eef04eeed0eff51d23bb5bcff964
+
+ PTRACE_O_TRACEFORK, PTRACE_O_TRACEVFORK, PTRACE_O_TRACEEXEC and
+ PTRACE_O_TRACECLONE were introduced in this change, in 2002:
+
+ https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=a0691b116f6a4473f0fa264210ab9b95771a2b46
+
+ Change-Id: Iffb906549a89cc6b619427f976ec044706ab1e8d
+
+2022-02-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-10 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/infrun: some extra infrun debug print statements
+ While reviewing a different patch I wanted to know more about what was
+ going on during GDB's stepping. I added some extra infrun debug print
+ calls, and I thought these might be useful to others.
+
+2022-02-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-09 Nick Clifton <nickc@redhat.com>
+
+ Update the obsolete list and how-to-make-a-release documentation now that the 2.38 release is out.
+
+2022-02-09 Alan Modra <amodra@gmail.com>
+
+ PR28763, SIGSEGV during processing of program headers via readelf
+ PR 28763
+ * readelf.c (process_file_header): Discard any cached program
+ headers if there is an extension field for e_phnum in first
+ section header.
+
+2022-02-09 Alan Modra <amodra@gmail.com>
+
+ Work around gcc-4 warnings in elf64-ppc.c
+ elf64-ppc.c: In function 'ppc64_elf_size_dynamic_sections':
+ elf64-ppc.c:10309:45: error: value computed is not used [-Werror=unused-value]
+ ++lgot_ents, ++lgot_masks, isym != NULL && isym++)
+
+ It is of course a silly warning, fixed in later versions of gcc. I
+ wrote "isym != NULL && isym++" rather than the simpler "isym++" to
+ stop sanitisers complaining about incrementing a NULL pointer. isym
+ is of course unused in any code path where it might start off as
+ NULL. Sometimes you can't win. So don't try to be clever in reading
+ local symbols only when needed. 99 times out of 100 they will be
+ cached anyway.
+
+ * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Avoid annoying
+ warnings by always reading local syms.
+ (ppc64_elf_layout_multitoc): Likewise.
+
+2022-02-09 Peilin Ye <peilin.ye@bytedance.com>
+
+ Test --only-keep-debug on ELF relocatables
+ Add a test for commit 7c4643efe7be, which fixed --only-keep-debug for ELF
+ relocatables.
+
+ * testsuite/binutils-all/objcopy.exp
+ (keep_debug_symbols_for_elf_relocatable): New test.
+
+2022-02-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-08 Palmer Dabbelt <palmer@rivosinc.com>
+
+ RISC-V: Stop reporting warnings for mismatched extension versions
+ The extension version checking logic is really just too complicated to
+ encode into the linker, trying to do so causes more harm than good.
+ This removes the checks and the associated tests, leaving the logic to
+ keep the largest version of each extension linked into the target.
+
+ bfd/
+
+ * elfnn-riscv.c (riscv_version_mismatch): Rename to
+ riscv_update_subset_version, and stop reporting warnings on
+ version mismatches.
+ (riscv_merge_std_ext): Adjust calls to riscv_version_mismatch.
+ (riscv_merge_multi_letter_ext): Likewise.
+
+ ld/
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-01.d: Remove
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-01a.s: Likewise
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-01b.s: Likewise
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d: Likewise
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-02a.s: Likewise
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-02b.s: Likewise
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-02c.s: Likewise
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-02d.s: Likewise
+ * testsuite/ld-riscv-elf/attr-merge-user-ext-01.d: New test.
+ * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i21_m2p0.s:
+ Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-user-ext-rv32i21_m2p1.s:
+ Likewise.
+ * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Remove obselete
+ attr-merge-arch-failed-{01,02}, replace with
+ attr-merge-user-ext-01.
+
+2022-02-08 Alan Modra <amodra@gmail.com>
+
+ PR28862, heap-buffer-overflow in parse_stab_string
+ I have no info on the format of a "SUNPRO C++ Namespace" stab, so am
+ relying on the previous code being correct in parsing these stabs.
+ Just don't allow NULs anywhere in the stab.
+
+ PR 28862
+ * stabs.c (parse_stab_string): Don't overrun buffer when parsing
+ 'Y' stab.
+
+2022-02-08 Alan Modra <amodra@gmail.com>
+
+ Re: elf: Check symbol version without any symbols
+ * testsuite/ld-elf/pr24718-1.d: Don't xfail for hppa64.
+
+2022-02-08 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: remove tailing newlines from index_cache_debug calls
+ I noticed that most of the calls to index_cache_debug include a
+ trailing newline. As the new debug mechanism already adds a newline,
+ that means all of these debug calls result in a blank line being
+ printed, which I think is a mistake.
+
+ Remove all the trailing newlines.
+
+ I also reformatted one of the index_cache_debug where a string will
+ now fit onto a single line.
+
+ Unless 'set debug index-cache on' is used, there should be no visible
+ change in output after this commit.
+
+2022-02-08 H.J. Lu <hjl.tools@gmail.com>
+
+ i386: Allow GOT32 relocations against ABS symbols
+ GOT32 relocations are allowed since absolute value + addend is stored in
+ the GOT slot.
+
+ Tested on glibc 2.35 build with GCC 11.2 and -Os.
+
+ bfd/
+
+ PR ld/28870
+ * elfxx-x86.c (_bfd_elf_x86_valid_reloc_p): Also allow GOT32
+ relocations.
+
+ ld/
+
+ PR ld/28870
+ * testsuite/ld-i386/i386.exp: Run pr28870.
+ * testsuite/ld-i386/pr28870.d: New file.
+ * testsuite/ld-i386/pr28870.s: Likewise.
+
+2022-02-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: allow Value.format_string to return styled output
+ Add a new argument to the gdb.Value.format_string method, 'styling'.
+ This argument is False by default.
+
+ When this argument is True, then the returned string can contain output
+ styling escape sequences.
+
+ When this argument is False, then the returned string will not contain
+ any styling escape sequences.
+
+ If the returned string is going to be printed to the user, then it is
+ often nice to retain the GDB styling.
+
+ For the testing, we need to adjust the TERM environment variable, as
+ we do for all the styling tests. I'm now running all of the C tests
+ in gdb.python/py-format-string.exp in an environment where styling
+ could be generated, but only my new test should actually produce
+ styled output, hopefully this will catch the case where a bug might
+ cause format_string to always produce styled output.
+
+2022-02-07 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: make thread_info::m_thread_fsm a std::unique_ptr
+ While working on function calls, I realized that the thread_fsm member
+ of struct thread_info is a raw pointer to a resource it owns. This
+ commit changes the type of the thread_fsm member to a std::unique_ptr in
+ order to signify this ownership relationship and slightly ease resource
+ management (no need to manually call delete).
+
+ To ensure consistent use, the field is made a private member
+ (m_thread_fsm). The setter method (set_thread_fsm) can then check
+ that it is incorrect to associate a FSM to a thread_info object if
+ another one is already in place. This is ensured by an assertion.
+
+ The function run_inferior_call takes an argument as a pointer to a
+ call_thread_fsm and installs it in it in a thread_info instance. Also
+ change this function's signature to accept a unique_ptr in order to
+ signify that the ownership of the call_thread_fsm is transferred during
+ the call.
+
+ No user visible change expected after this commit.
+
+ Tested on x86_64-linux with no regression observed.
+
+ Change-Id: Ia1224f72a4afa247801ce6650ce82f90224a9ae8
+
+2022-02-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: unbuffer all input streams when not using readline
+ This commit should fix PR gdb/28711. What's actually going on is
+ pretty involved, and there's still a bit of the story that I don't
+ understand completely, however, from my observed results, I think that
+ the change I propose making here (or something very similar) is going
+ to be needed.
+
+ The original bug report involves using eclipse to drive gdb using mi
+ commands. A separate tty is spun off in which to send gdb the mi
+ commands, this tty is created using the new-ui command.
+
+ The behaviour observed is that, given a particular set of mi commands
+ being sent to gdb, we sometimes see an ESPIPE error from a lseek
+ call, which ultimately results in gdb terminating.
+
+ The problems all originate from gdb_readline_no_editing_callback in
+ gdb/event-top.c, where we can (sometimes) perform calls to fgetc, and
+ allow glibc to perform buffering on the FILE object being used.
+
+ I say sometime, because, gdb_readline_no_editing_callback already
+ includes a call to disable the glibc buffering, but this is only done
+ if the input stream is not a tty. In our case the input stream is a
+ tty, so the buffering is left in place.
+
+ The first step to understanding why this problem occurs is to
+ understand that eclipse sends multiple commands to gdb very quickly
+ without waiting for and answer to each command, eclipse plans to
+ collect all of the command results after sending all the commands to
+ gdb. In fact, eclipse sends the commands to gdb that they appear to
+ arrive in the gdb process as a single block of data. When reproducing
+ this issue within the testsuite I find it necessary to send multiple
+ commands using a single write call.
+
+ The next bit of the story gets a little involved, and this is where my
+ understanding is not complete. I can describe the behaviour that I
+ observe, and (for me at least) I'm happy that what I'm seeing, if a
+ little strange, is consistent. In order to fully understand what's
+ going on I think I would likely need to dive into kernel code, which
+ currently seems unnecessary given that I'm happy with the solution I'm
+ proposing.
+
+ The following description all relates to input from a tty in which I'm
+ not using readline. I see the same problems either when using a
+ new-ui tty, or with gdb's standard, non-readline, mi tty.
+
+ Here's what I observe happening when I send multiple commands to gdb
+ using a single write, if I send gdb this:
+
+ command_1\ncommand_2\ncommand_3
+
+ then gdb's event loop will wake up (from its select) as it sees there
+ is input available. We call into gdb_readline_no_editing_callback,
+ where we call fgetc, glibc will do a single big read, and get back
+ just:
+
+ command_1\n
+
+ that is, despite there being multiple lines of input available, I
+ consistently get just a single line. From glibc a single character is
+ returned from the fgetc call, and within gdb we accumulate characters,
+ one at a time, into our own buffer. Eventually gdb sees the '\n'
+ character, and dispatches the whole 'command_1' into gdb's command
+ handler, which processes the command and prints the result. We then
+ return to gdb_readline_no_editing_callback, which in turn returns to
+ gdb's event loop where we re-enter the select.
+
+ Inside the select we immediately see that there is more input waiting
+ on the input stream, drop out of the select, and call back into
+ gdb_readline_no_editing_callback. In this function we again call
+ fgetc where glibc performs another big read. This time glibc gets:
+
+ command_2\n
+
+ that is, we once again get just a single line, despite there being a
+ third line available. Just like the first command we copy the whole
+ string, character by character into gdb's buffer, then handle the
+ command. After handling the command we go to the event loop, enter,
+ and then exit the select, and call back to the function
+ gdb_readline_no_editing_callback.
+
+ In gdb_readline_no_editing_callback we again call fgetc, this time
+ glibc gets the string:
+
+ command_3\n
+
+ like before, we copy this to gdb's buffer and handle the command, then
+ we return to the event loop. At this point the select blocks while we
+ wait for more input to arrive.
+
+ The important bit of this is that someone, somewhere is, it appears,
+ taking care to split the incoming write into lines.
+
+ My next experiment is to try something like:
+
+ this_is_a_very_long_command\nshort_command\n
+
+ However, I actually make 'this_is_a_very_long_command' very long, as
+ in many hundreds of characters long. One way to do this is:
+
+ echo xxxxxx.....xxxxx
+
+ and just adding more and more 'x' characters as needed. What I'm
+ aiming for is to have the first command be longer than glibc's
+ internal read buffer, which, on my machine, is 1024 characters.
+
+ However, for this discussion, lets imagine that glibc's buffer is just
+ 8 characters (we can create just this situation by adding a suitable
+ setbuf call into gdb_readline_no_editing_callback).
+
+ Now, if I send gdb this data:
+
+ abcdefghij\nkl\n
+
+ The first read from glibc will get 'abcdefgh', that is a full 8
+ character buffer. Once gdb has copied these to its buffer we call
+ fgetc again, and now glibc will get 'ij\n', that is, just like before,
+ multiple lines are split at the '\n' character. The full command,
+ which is now in gdb's buffer can be handled 'abcdefghij', after which
+ we go (via the event loop) back to gdb_readline_no_editing_callback.
+ Now we call fgetc, and glibc will get 'kl\n', which is then handled in
+ the normal way.
+
+ So far, so good. However, there is, apparently, one edge case where
+ the above rules don't apply.
+
+ If the '\n' character is the first character read from the kernel,
+ then the incoming lines are not split up. So, given glibc's 8
+ character buffer, if I send gdb this:
+
+ abcdefgh\nkl\n
+
+ that is the first command is 8 characters plus a newline, then, on the
+ first read (from within glibc) we get 'abcdefgh' in a single buffer.
+ As there's no newline gdb calls fgetc again, and glibc does another
+ large read, now we get:
+
+ \nkl\n
+
+ which doesn't follow the above pattern - the lines are not split into
+ separate buffers!
+
+ So, gdb reads the first character from glibc using fgetc, this is the
+ newline. Now gdb has a complete command, and so the command is
+ handled. We then return to the event loop and enter the select.
+
+ The problem is that, as far as the kernel is concerned, there is no
+ more input pending, it's all been read into glibc's buffer, and so the
+ select doesn't return. The second command is basically stuck in
+ glibc's buffer.
+
+ If I send another command to gdb, or even just send an empty
+ command (a lone newline) then the select returns, we call into
+ gdb_readline_no_editing_callback, and now gdb sees the second
+ command.
+
+ OK, so the above is interesting, but it doesn't explain the ESPIPE
+ error.
+
+ Well, that's a slightly different, but related issue. The ESPIPE
+ case will _only_ show up when using new-ui to create the separate tty
+ for mi commands, and is a consequence of this commit:
+
+ commit afe09f0b6311a4dd1a7e2dc6491550bb228734f8
+ Date: Thu Jul 18 17:20:04 2019 +0100
+
+ Fix for using named pipes on Windows
+
+ Prior to this commit, the new-ui command would open the tty three
+ times, once each for stdin, stderr, and stdout. After this commit we
+ open the tty just once and reuse the FILE object for all three roles.
+
+ Consider the problem case, where glibc has (unexpectedly) read the
+ second command into its internal buffer. When we handle the first
+ command we usually end up having to write something to the mi output
+ stream.
+
+ After the above commit the same FILE object represents both the input
+ and output streams, so, when gdb tries to write to the FILE object,
+ glibc spots that there is input pending within the input buffer, and
+ so assumes that we have read ahead of where we should be in the input
+ file. To correct for this glibc tries to do an lseek call to
+ reposition the file offset of the output stream prior to writing to
+ it. However, as the output stream is a tty, and seeking is not
+ supported on a tty, this lseek call fails, this results in the ESPIPE,
+ which ultimately causes gdb to terminate.
+
+ So, now we understand why the ESPIPE triggers (which was what caused
+ the gdb crash in the original bug report), and we also understand that
+ sometime gdb will not handle the second command in a timely
+ fashion (if the first command is just the wrong length). So, what to
+ do about all this?
+
+ We could revert the commit mentioned above (and implement its
+ functionality another way). This would certainly resolve the ESPIPE
+ issue, the buffered input would now only be on the input stream, the
+ output stream would have no buffered input, and so glibc would never
+ try to lseek, and so we'd never get the ESPIPE error.
+
+ However, this only solves one of the two problems. We would still
+ suffer from the problem where, if the first command is just the wrong
+ length, the second command will not (immediately) get handled.
+
+ The only solution I can see to this problem is to unbuffer the input
+ stream. If glibc is not buffering the input, but instead, we read
+ incoming data character by character from the kernel, then everything
+ will be fine. As soon as we see the newline at the end of the first
+ command we will handle the first command. As glibc will have no
+ buffered input it will not be tempted to lseek, so no ESPIPE error.
+ When we go have to the event loop there will be more data pending in
+ the kernel, so the select will immediately return, and the second
+ command will be processed.
+
+ I'm tempted to suggest that we should move the unbuffering of the
+ input stream out of gdb_readline_no_editing_callback and do it
+ somewhere earlier, more like when we create the input streams.
+ However, I've not done that in this commit for a couple of reasons:
+
+ 1. By keeping the unbuffering in gdb_readline_no_editing_callback
+ I'm making the smallest possible change that fixes the bug. Moving
+ the unbuffering somewhere better can be done as a refactor later, if
+ that 's felt to be important,
+
+ 2. I don't think making repeated calls to unbuffer the input will
+ have that much performance impact. We only make the unbuffer call
+ once per call to gdb_readline_no_editing_callback, and, if the input
+ stream is already unbuffered we'll return pretty quickly, so I don't
+ see this as being massively costly,
+
+ 3. Tom is currently doing lots of gdb stream management changes and
+ I want to minimise the chances we'll conflict.
+
+ So, this commit just changes gdb_readline_no_editing_callback to
+ always unbuffer the input stream.
+
+ The test for this issue sends two commands in a loop, with the first
+ command growing bigger each time around the loop. I actually make the
+ first command bigger by just adding whitespace to the front, as gdb
+ still has to read the complete command (including whitespace) via
+ glibc, so this is enough to trigger the bug.
+
+ The original bug was reported when using a virtual machine, and in
+ this situation we see this in the strace output:
+
+ read(9, "70-var-info-path-expression var1.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 1024) = 64
+ read(9, "\n71-var-info-path-expression var1.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n", 1024) = 67
+
+ I'm not completely sure what's going on here, but it appears that the
+ kernel on the virtual machine is delivering the input to glibc slower
+ than I see on my real hardware; glibc asks for 1024 bytes, but only
+ gets 64 bytes the first time. In the second read we see the problem
+ case, the first character is the newline, but then the entire second
+ command is included.
+
+ If I run this exact example on my real hardware then the first command
+ would not be truncated at 64 bytes, instead, I'd expect to see the
+ newline included in the first read, with the second command split into
+ a second read.
+
+ So, for testing, I check cases where the first command is just a few
+ characters (starting at 8 character), all the way up to 2048
+ characters. Hopefully, this should mean we hit the problem case for
+ most machine setups.
+
+ The only last question relates to commit afe09f0b6311a4d that I
+ mentioned earlier. That commit was intended to provide support for
+ Microsoft named pipes:
+
+ https://docs.microsoft.com/en-us/windows/win32/ipc/named-pipes
+
+ I know next to nothing about this topic beyond a brief scan of the
+ above link, but I think these windows named pipe are closer in
+ behaviour to unix sockets than to unix named fifos.
+
+ I am a little nervous that, after the above commit, we now use the
+ same FILE for in, err, and out streams. In contrast, in a vanilla C
+ program, I would expect different FILE objects for each stream.
+
+ Still, I'm reluctant to revert the above commit (and provide the same
+ functionality a different way) without a specific bug to point at,
+ and, now that the streams are unbuffered, I expect a lot of the read
+ and write calls are going straight to the kernel with minimal glibc
+ involvement, so maybe it doesn't really matter. Anyway, I haven't
+ touched the above patch, but it is something to keep in mind when
+ working in this area.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28711
+
+2022-02-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/disasm: combine the no printing disassembler setup code
+ We have three places in gdb where we initialise a disassembler that
+ will not print anything (used for figuring out the length of
+ instructions, or collecting other information from the disassembler).
+
+ Each of these places has its own stub function to act as a print like
+ callback, the stub function is identical in each case, and just does
+ nothing.
+
+ In this commit I create a new function to initialise a disassembler
+ that doesn't print anything, and have all three locations use this new
+ function. There's now only one non-printing stub function.
+
+ There should be no user visible changes after this commit.
+
+2022-02-07 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdb: add the 'set/show suppress-cli-notifications' command
+ GDB already has a flag to suppress printing notification events, such
+ as thread and inferior context switches, on the CLI. This is used
+ internally when executing commands. Make the flag available to the
+ user via a new command. This is expected to be useful in scripts.
+
+ For instance, suppose that when Inferior 1 gets to a certain state,
+ you want to add and set up a new inferior using the commands below,
+ but you also want to have a reduced/clean output.
+
+ define do-setup
+ printf "Setting up Inferior 2...\n"
+ add-inferior -exec a.out
+ inferior 2
+ break file.c:3
+ run
+ inferior 1
+ printf "Done\n"
+ end
+
+ Currently, GDB prints
+
+ (gdb) do-setup
+ Setting up Inferior 2...
+ [New inferior 2]
+ Added inferior 2 on connection 1 (native)
+ [Switching to inferior 2 [<null>] (/tmp/a.out)]
+ Breakpoint 2 at 0x1155: file file.c, line 3.
+
+ Thread 2.1 "a.out" hit Breakpoint 2, main () at file.c:3
+ 3 return 0;
+ [Switching to inferior 1 [process 7670] (/tmp/test)]
+ [Switching to thread 1.1 (process 7670)]
+ #0 main () at test.c:2
+ 2 int a = 1;
+ Done
+
+ GDB's Python API make it possible to capture and return GDB's output,
+ but this does not work for all the streams. In particular, CLI
+ notification events are not captured:
+
+ (gdb) python gdb.execute("do-setup", False, True)
+ [Switching to inferior 2 [<null>] (/tmp/a.out)]
+
+ Thread 2.1 "a.out" hit Breakpoint 2, main () at file.c:3
+ 3 return 0;
+ [Switching to inferior 1 [process 8263] (/tmp/test)]
+ [Switching to thread 1.1 (process 8263)]
+ #0 main () at test.c:2
+ 2 int a = 1;
+
+ You can use the new "set suppress-cli-notifications" command to
+ suppress the output:
+
+ (gdb) set suppress-cli-notifications on
+ (gdb) do-setup
+ Setting up Inferior 2...
+ [New inferior 2]
+ Added inferior 2 on connection 1 (native)
+ Breakpoint 2 at 0x1155: file file.c, line 3.
+ Done
+
+2022-02-07 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdb/cli: add a 'normal_stop' option to 'cli_suppress_notification'
+ Extend the 'cli_suppress_notification' struct with a new field,
+ 'normal_stop', that can be used for checking if printing normal stop
+ events on the CLI should be suppressed.
+
+ This patch only introduces the flag. The subsequent patch adds a user
+ command to turn the flag off/on.
+
+2022-02-07 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdb/cli: convert cli_suppress_notification from int to bool
+ Convert the suppress_notification flag for the CLI from int to bool.
+
+2022-02-07 Alan Modra <amodra@gmail.com>
+
+ Revert "elf: Remove the 1-page gap before the RELRO segment"
+ This reverts commit 2f83249c13d86065b4c7cdb198ea871017b4bba1.
+
+ PR ld/28743
+ * ldlang.c (lang_size_relro_segment_1): Revert 2022-01-10 changes.
+ * testsuite/ld-i386/pr20830.d: Likewise.
+ * testsuite/ld-s390/gotreloc_64-relro-1.dd: Likewise.
+ * testsuite/ld-x86-64/pr14207.d: Likewise.
+ * testsuite/ld-x86-64/pr18176.d: Likewise.
+ * testsuite/ld-x86-64/pr20830a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830a.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a.d: Likewise.
+ * testsuite/ld-x86-64/pr21038b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c.d: Likewise.
+
+2022-02-07 Alan Modra <amodra@gmail.com>
+
+ Revert "ld: Rewrite lang_size_relro_segment_1"
+ This reverts commit c804c6f98d342c3d46f73d7a7ec6229d5ab1c9f3.
+
+ PR ld/28743
+ PR ld/28819
+ * ldlang.c (lang_size_relro_segment_1): Revert 2022-01-14 change.
+ * testsuite/ld-x86-64/pr28743-1.d: Likewise.
+ * testsuite/ld-x86-64/pr28743-1.s: Likewise.
+ * testsuite/ld-x86-64/x86-64.exp: Likewise.
+
+2022-02-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-06 Alan Modra <amodra@gmail.com>
+
+ A more elegant pr28827-1 testcase
+ Use .irpc macros in pr28827-1.s
+
+ * testsuite/ld-powerpc/pr28827-1.s: Make the testcase more
+ elegant. Comment.
+
+2022-02-06 Tom Tromey <tom@tromey.com>
+
+ Merge do_val_print and common_val_print
+ The only caller of do_val_print just does a small bit of work before
+ the call. This patch merges the two functions, and removes an
+ unnecessary local variable, making gdb a bit simpler.
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_LINE macro
+ Add a getter and a setter for a symbol's line. Remove the corresponding macro
+ and adjust all callers.
+
+ Change-Id: I229f2b8fcf938c07975f641361313a8761fad9a5
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_TYPE macro
+ Add a getter and a setter for a symbol's type. Remove the corresponding
+ macro and adjust all callers.
+
+ Change-Id: Ie1a137744c5bfe1df4d4f9ae5541c5299577c8de
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remote SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION macro
+ Add a getter for a whether a symbol is a C++ template function. Remove
+ the corresponding macro and adjust all callers.
+
+ Change-Id: I89abc2802a952b77b0e0eb73a25c2306cb8e8bcc
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_INLINED macro
+ Add a getter and a setter for whether a symbol is inlined. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: I934468da3b5a32dd6b161a6f252a6b1b94737279
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_IS_ARGUMENT macro
+ Add a getter and a setter for whether a symbol is an argument. Remove
+ the corresponding macro and adjust all callers.
+
+ Change-Id: I71b4f0465f3dfd2ed8b9e140bd3f7d5eb8d9ee81
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_OBJFILE_OWNED macro
+ Add a getter and a setter for whether a symbol is objfile owned. Remove
+ the corresponding macro and adjust all callers.
+
+ Change-Id: Ib7ef3718d65553ae924ca04c3fd478b0f4f3147c
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_DOMAIN macro
+ Add a getter and a setter for a symbol's domain. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: I54465b50ac89739c663859a726aef8cdc6e4b8f3
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_CLASS macro, add getter
+ Change-Id: I83211d5a47efc0564386e5b5ea4a29c00b1fd46a
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_IMPL macro, add method
+ Add a getter for a symbol's "impl". Remove the corresponding macro and
+ adjust all callers.
+
+ Change-Id: Ibe26ed442f0f99a0f5cddafca30bd96ec7fb9fa8
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_ACLASS_INDEX macro, add getter/setter
+ Add a getter and a setter for a symbol's aclass index. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: Ie8c8d732624cfadb714aba5ddafa3d29409b3d39
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMBOL_MATCHES_SEARCH_NAME
+ It seems like this macro is not needed at all anymore, it just wraps the
+ function of the same name with the same arguments.
+
+ Change-Id: I3c342ac8d89c27af5aee1a819dc32cc6396fd41b
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMTAB_DIRNAME macro
+ Remove the macro, replace with an equivalent method.
+
+ Change-Id: I46ec36b91bb734331138eb9cd086b2db01635aed
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMTAB_PSPACE macro
+ Remove the macro, replace with an equivalent method.
+
+ Change-Id: Icccc20e7e8ae03ac4dac1c7514c25a12a9a0ac69
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMTAB_OBJFILE macro
+ Remove the macro, replace with an equivalent method.
+
+ Change-Id: I8f9ecd290ad28502e53c1ceca5006ba78bf042eb
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMTAB_BLOCKVECTOR macro
+ Remove the macro, replace with an equivalent method.
+
+ Change-Id: Id6fe2a79c04bcd6c69ccaefb7a69bc06a476288c
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMTAB_LANGUAGE macro, add getter/setter
+ Add a getter and a setter for a symtab's language. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: I9f4d840b11c19f80f39bac1bce020fdd1739e11f
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMTAB_LINETABLE macro, add getter/setter
+ Add a getter and a setter for a symtab's linetable. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: I159183fc0ccd8e18ab937b3c2f09ef2244ec6e9c
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove SYMTAB_COMPUNIT macro, add getter/setter
+ Add a getter and a setter for a symtab's compunit_symtab. Remove the
+ corresponding macro and adjust all callers.
+
+ For brevity, I chose the name "compunit" instead of "compunit_symtab"
+ the the field, getter and setter names. Since we are already in symtab
+ context, the _symtab suffix seems redundant.
+
+ Change-Id: I4b9b731c96e3594f7733e75af1e3d01bc0e4fe92
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_MACRO_TABLE macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's macro table. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: I00615ea72d5ac43d9a865e941cb2de0a979c173a
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_EPILOGUE_UNWIND_VALID macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's epilogue unwind valid flag.
+ Remove the corresponding macro and adjust all callers.
+
+ Change-Id: If3b68629d987767da9be7041a95d96dc34367a9a
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_LOCATIONS_VALID macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's locations valid flag.
+ Remove the corresponding macro and adjust all callers.
+
+ Change-Id: I3e3cfba926ce62993d5b61814331bb3244afad01
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_BLOCK_LINE_SECTION macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's block line section. Remove
+ the corresponding macro and adjust all callers.
+
+ Change-Id: I3eb1a323388ad55eae8bfa45f5bc4a08dc3df455
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_BLOCKVECTOR macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's blockvector. Remove
+ the corresponding macro and adjust all callers.
+
+ Change-Id: I99484c6619dcbbea7c5d89c72aa660316ca62f64
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_DIRNAME macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's dirname. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: If2f39b295fd26822586485e04a8b8b5aa5cc9b2e
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_PRODUCER macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's producer. Remove the
+ corresponding macro and adjust all callers.
+
+ Change-Id: Ia1d6d8a0e247a08a21af23819d71e49b37d8931b
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_DEBUGFORMAT macro, add getter/setter
+ Add a getter and a setter for a compunit_symtab's debugformat. Remove
+ the corresponding macro and adjust all callers.
+
+ Change-Id: I1667b02d5322346f8e23abd9f8a584afbcd75975
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_FILETABS macro
+ I think that most remaining uses of COMPUNIT_FILETABS intend to get the
+ primary filetab of the compunit_symtab specifically (and not to iterate
+ over all filetabs, for example, those cases would use compunit_filetabs,
+ which has been converted to compunit_symtab::filetabs), so replace mosts
+ uses with compunit_symtab::primary_filetab.
+
+ In jit.c, function finalize_symtab, we can save the symtab object
+ returned by allocate_symtab and use it, it makes things simpler.
+
+ Change-Id: I4e51d6d4b40759de8768b61292e5e13c8eae2e38
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: move compunit_filetabs to compunit_symtab::filetabs
+ Make compunit_filetabs, used to iterate a compunit_symtab's filetabs, a
+ method of compunit_symtab. The name filetabs conflicts with the current
+ name of the field. Rename the field to m_filetabs, since at this point
+ nothing outside of compunit_symtab uses it, so we should treat it as
+ private (even though it's not actually private). Rename the
+ last_filetab field to m_last_filetab as well (it's only used on
+ compunit_symtab::add_filetab).
+
+ Adjust the COMPUNIT_FILETABS macro to keep its current behavior of
+ returning the first filetab.
+
+ Change-Id: I537b553a44451c52d24b18ee1bfa47e23747cfc3
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: add compunit_symtab::set_primary_filetab method
+ Add a method to set the primary filetab of the CU. This is currently
+ done in buildsym_compunit::end_symtab_with_blockvector.
+
+ Change-Id: I16c51a6b90a4cb4c0c5f183b0f2e12bc64b6fd74
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: add compunit_symtab::add_filetab method
+ Add a method to append a filetab/symtab to a compunit_symtab. There is
+ a single place where this is done currently, in allocate_symtab.
+
+ Change-Id: Ie86c6e34d175728173d1cffdce44acd6cff6c31d
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: rename compunit_primary_filetab to compunit_symtab::primary_filetab
+ Make compunit_primary_filetab a method of compunit_symtab.
+
+ Change-Id: Iee3c4f7e36d579bf763c5bba146e5e10d6766768
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: remove COMPUNIT_OBJFILE macro
+ Remove the macro, update all users to use the getter directly.
+
+ Change-Id: I3f0fd6f4455d1c4ebd5da73b561eb18a979ef1f6
+
+2022-02-06 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: add getter/setter for compunit_symtab::objfile
+ Rename the field to m_objfile, and add a getter and a setter. Update
+ all users.
+
+ Change-Id: If7e2f763ee3e70570140d9af9261b1b056253317
+
+2022-02-06 Tom Tromey <tom@tromey.com>
+
+ Allow non-ASCII characters in Rust identifiers
+ Rust 1.53 (quite a while ago now) ungated the support for non-ASCII
+ identifiers. This didn't work in gdb. This is PR rust/20166.
+
+ This patch fixes the problem by allowing non-ASCII characters to be
+ considered as identifier components. It seemed simplest to just pass
+ them through -- doing any extra checking didn't seem worthwhile.
+
+ The new test also verifies that such characters are allowed in strings
+ and character literals as well. The latter also required a bit of
+ work in the lexer.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=20166
+
+2022-02-06 Tom Tromey <tom@tromey.com>
+
+ Fix Rust parser bug with function fields
+ In Rust, 'obj.f()' is a method call -- but '(obj.f)()' is a call of a
+ function-valued field 'f' in 'obj'. The Rust parser in gdb currently
+ gets this wrong. This is PR rust/24082.
+
+ The expression and Rust parser rewrites made this simple to fix --
+ simply wrapping a parenthesized expression in a new operation handles
+ it. This patch has a slight hack because I didn't want to introduce a
+ new exp_opcode enumeration constant just for this. IMO this doesn't
+ matter, since we should work toward removing dependencies on these
+ opcodes anyway; but let me know what you think of this.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24082
+
+2022-02-06 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Add emultempl/emulation.em
+ Add emultempl/emulation.em to define ld_${EMULATION_NAME}_emulation so
+ that new emulation hooks can be added easily.
+
+ * emultempl/aix.em (LDEMUL_AFTER_OPEN): New.
+ (LDEMUL_SET_OUTPUT_ARCH): Likewise.
+ (LDEMUL_CHOOSE_TARGET): Likewise.
+ (LDEMUL_BEFORE_ALLOCATION): Likewise.
+ (LDEMUL_CREATE_OUTPUT_SECTION_STATEMENTS): Likewise.
+ (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise.
+ (LDEMUL_PARSE_ARGS): Likewise.
+ (LDEMUL_ADD_OPTIONS): Likewise.
+ (LDEMUL_HANDLE_OPTION): Likewise.
+ (LDEMUL_UNRECOGNIZED_FILE): Likewise.
+ (LDEMUL_PRINT_SYMBOL): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/beos.em (gld_${EMULATION_NAME}_before_parse):
+ Renamed to ...
+ (gld${EMULATION_NAME}_before_parse): This.
+ (gld_${EMULATION_NAME}_set_symbols): Renamed to ...
+ (gld${EMULATION_NAME}_set_symbols): This.
+ (gld_${EMULATION_NAME}_after_open): Renamed to ...
+ (gld${EMULATION_NAME}_after_open): This.
+ (gld_${EMULATION_NAME}_before_allocation): Renamed to ...
+ (gld${EMULATION_NAME}_before_allocation): This.
+ (gld_${EMULATION_NAME}_get_script): Renamed to ...
+ (gld${EMULATION_NAME}_get_script): This.
+ (LDEMUL_AFTER_OPEN): New.
+ (LDEMUL_BEFORE_ALLOCATION): Likewise.
+ (LDEMUL_PLACE_ORPHAN): Likewise.
+ (LDEMUL_SET_SYMBOLS): Likewise.
+ (LDEMUL_ADD_OPTIONS): Likewise.
+ (LDEMUL_HANDLE_OPTION): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/elf.em (LDEMUL_AFTER_PARSE): New.
+ (LDEMUL_AFTER_OPEN): Likewise.
+ (LDEMUL_BEFORE_PLACE_ORPHANS): Likewise.
+ (LDEMUL_AFTER_ALLOCATION): Likewise.
+ (LDEMUL_SET_OUTPUT_ARCH): Likewise.
+ (LDEMUL_BEFORE_ALLOCATION): Likewise.
+ (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise.
+ (LDEMUL_PLACE_ORPHAN): Likewise.
+ (LDEMUL_ADD_OPTIONS): Likewise.
+ (LDEMUL_HANDLE_OPTION): Likewise.
+ (LDEMUL_LIST_OPTIONS): Likewise.
+ (LDEMUL_UNRECOGNIZED_FILE): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/emulation.em: New file.
+ * emultempl/generic.em (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/msp430.em (LDEMUL_AFTER_OPEN): New.
+ (LDEMUL_AFTER_ALLOCATION): Likewise.
+ (LDEMUL_PLACE_ORPHAN): Likewise.
+ (LDEMUL_FINISH): Likewise.
+ (LDEMUL_ADD_OPTIONS): Likewise.
+ (LDEMUL_HANDLE_OPTION): Likewise.
+ (LDEMUL_LIST_OPTIONS): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/pe.em (gld_${EMULATION_NAME}_before_parse): Renamed
+ to ...
+ (gld${EMULATION_NAME}_before_parse): This.
+ (gld_${EMULATION_NAME}_list_options): Renamed to ...
+ (gld${EMULATION_NAME}_list_options): This.
+ (gld_${EMULATION_NAME}_set_symbols): Renamed to ...
+ (gld${EMULATION_NAME}_set_symbols): This.
+ (gld_${EMULATION_NAME}_after_parse): Renamed to ...
+ (gld${EMULATION_NAME}_after_parse): This.
+ (gld_${EMULATION_NAME}_after_open): Renamed to ...
+ (gld${EMULATION_NAME}_after_open): This.
+ (gld_${EMULATION_NAME}_before_allocation): Renamed to ...
+ (gld${EMULATION_NAME}_before_allocation): This.
+ (gld_${EMULATION_NAME}_unrecognized_file): Renamed to ...
+ (gld${EMULATION_NAME}_unrecognized_file): This.
+ (gld_${EMULATION_NAME}_recognized_file): Renamed to ...
+ (gld${EMULATION_NAME}_recognized_file): This.
+ (gld_${EMULATION_NAME}_finish): Renamed to ...
+ (gld${EMULATION_NAME}_finish): This.
+ (gld_${EMULATION_NAME}_place_orphan): Renamed to ...
+ (gld${EMULATION_NAME}_place_orphan): This.
+ (gld_${EMULATION_NAME}_open_dynamic_archive): Renamed to ...
+ (gld${EMULATION_NAME}_open_dynamic_archive): This.
+ (gld_${EMULATION_NAME}_find_potential_libraries): Renamed to ...
+ (gld${EMULATION_NAME}_find_potential_libraries): This.
+ (gld_${EMULATION_NAME}_get_script): Renamed to ...
+ (gld${EMULATION_NAME}_get_script): This.
+ (LDEMUL_AFTER_PARSE): New.
+ (LDEMUL_AFTER_OPEN): Likewise.
+ (LDEMUL_BEFORE_ALLOCATION): Likewise.
+ (LDEMUL_FINISH=): Likewise.
+ (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise.
+ (LDEMUL_PLACE_ORPHAN): Likewise.
+ (LDEMUL_SET_SYMBOLS): Likewise.
+ (LDEMUL_ADD_OPTIONS): Likewise.
+ (LDEMUL_HANDLE_OPTION): Likewise.
+ (LDEMUL_UNRECOGNIZED_FILE): Likewise.
+ (LDEMUL_LIST_OPTIONS): Likewise.
+ (LDEMUL_RECOGNIZED_FILE): Likewise.
+ (LDEMUL_FIND_POTENTIAL_LIBRARIES): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/pep.em (gld_${EMULATION_NAME}_before_parse): Renamed
+ to ...
+ (gld${EMULATION_NAME}_before_parse): This.
+ (gld_${EMULATION_NAME}_list_options): Renamed to ...
+ (gld${EMULATION_NAME}_list_options): This.
+ (gld_${EMULATION_NAME}_set_symbols): Renamed to ...
+ (gld${EMULATION_NAME}_set_symbols): This.
+ (gld_${EMULATION_NAME}_after_parse): Renamed to ...
+ (gld${EMULATION_NAME}_after_parse): This.
+ (gld_${EMULATION_NAME}_after_open): Renamed to ...
+ (gld${EMULATION_NAME}_after_open): This.
+ (gld_${EMULATION_NAME}_before_allocation): Renamed to ...
+ (gld${EMULATION_NAME}_before_allocation): This.
+ (gld_${EMULATION_NAME}_unrecognized_file): Renamed to ...
+ (gld${EMULATION_NAME}_unrecognized_file): This.
+ (gld_${EMULATION_NAME}_recognized_file): Renamed to ...
+ (gld${EMULATION_NAME}_recognized_file): This.
+ (gld_${EMULATION_NAME}_finish): Renamed to ...
+ (gld${EMULATION_NAME}_finish): This.
+ (gld_${EMULATION_NAME}_place_orphan): Renamed to ...
+ (gld${EMULATION_NAME}_place_orphan): This.
+ (gld_${EMULATION_NAME}_open_dynamic_archive): Renamed to ...
+ (gld${EMULATION_NAME}_open_dynamic_archive): This.
+ (gld_${EMULATION_NAME}_find_potential_libraries): Renamed to ...
+ (gld${EMULATION_NAME}_find_potential_libraries): This.
+ (gld_${EMULATION_NAME}_get_script): Renamed to ...
+ (gld${EMULATION_NAME}_get_script): This.
+ (LDEMUL_AFTER_PARSE): New.
+ (LDEMUL_AFTER_OPEN): Likewise.
+ (LDEMUL_BEFORE_ALLOCATION): Likewise.
+ (LDEMUL_FINISH=): Likewise.
+ (LDEMUL_OPEN_DYNAMIC_ARCHIVE): Likewise.
+ (LDEMUL_PLACE_ORPHAN): Likewise.
+ (LDEMUL_SET_SYMBOLS): Likewise.
+ (LDEMUL_ADD_OPTIONS): Likewise.
+ (LDEMUL_HANDLE_OPTION): Likewise.
+ (LDEMUL_UNRECOGNIZED_FILE): Likewise.
+ (LDEMUL_LIST_OPTIONS): Likewise.
+ (LDEMUL_RECOGNIZED_FILE): Likewise.
+ (LDEMUL_FIND_POTENTIAL_LIBRARIES): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/ticoff.em (gld_${EMULATION_NAME}_list_options):
+ Renamed to ...
+ (gld${EMULATION_NAME}_list_options): This.
+ (gld_${EMULATION_NAME}_before_parse): Renamed to ...
+ (gld_${EMULATION_NAME}_get_script): Renamed to ...
+ (gld${EMULATION_NAME}_get_script): This.
+ (LDEMUL_ADD_OPTIONS): New.
+ (LDEMUL_HANDLE_OPTION): Likewise.
+ (LDEMUL_LIST_OPTIONS): Likewise.
+ (ld_${EMULATION_NAME}_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+ * emultempl/vanilla.em (LDEMUL_BEFORE_PARSE): New.
+ (LDEMUL_SET_OUTPUT_ARCH): Likewise.
+ (LDEMUL_GET_SCRIPT): Likewise.
+ (EMULATION_NAME): Likewise.
+ (OUTPUT_FORMAT): Likewise.
+ (ld_vanilla_emulation): Removed.
+ Source ${srcdir}/emultempl/emulation.em.
+
+2022-02-06 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: update docs for 'info win' and 'winheight' commands
+ This started by noticing that the docs for 'winheight' are out of
+ date, the docs currently give a specific list of possible window
+ names. However, now that windows can be implemented in Python, it is
+ not possible to list all possible names.
+
+ I now link the user to a mechanism by which they can discover the
+ valid names for themselves at run time (by using 'info win'). That,
+ and the fact that gdb provides tab-completion of the name at the
+ command line, feels good enough.
+
+ Finally, I noticed that the docs for 'win info' don't explicitly say
+ that the name of the window is given in the output. This could
+ probably have been inferred, but given I'm now linking to this as a
+ mechanism to find the window name, I'd prefer to mention that the name
+ can be found in the output.
+
+2022-02-06 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/tui: add window width information to 'info win' output
+ Now that we support horizontal window placement in the tui, it makes
+ sense to have 'info win' include the width, as well as the height, of
+ the currently visible windows.
+
+ That's what this commit does. Example output is now:
+
+ (gdb) info win
+ Name Lines Columns Focus
+ src 12 40 (has focus)
+ asm 12 41
+ status 1 80
+ cmd 11 80
+
+ I've added a NEWS entry, but the documentation was already suitably
+ vague, it just says that 'info win' displays the size of the visible
+ windows, so I don't think anything needs to be added there.
+
+ I've also added some tests, as far as I could find, the 'info win'
+ command was previously untested.
+
+2022-02-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-05 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Skip undefined symbol when finishing DT_RELR
+ Don't abort for undefined symbol when finishing DT_RELR. Instead, skip
+ undefined symbol. Undefined symbol will be reported by relocate_section.
+
+ * elfxx-x86.c (elf_x86_size_or_finish_relative_reloc): Skip
+ undefined symbol in finishing phase.
+
+2022-02-05 Alan Modra <amodra@gmail.com>
+
+ Tweak assembler invocation for pr28827-1 test
+ PR 28827
+ * testsuite/ld-powerpc/pr28827-1.d: Pass -a64 to gas.
+
+2022-02-05 Alan Modra <amodra@gmail.com>
+
+ PR28827 testcase
+ This testcase triggers a stub sizing error with the patches applied
+ for PR28743 (commit 2f83249c13d8 and c804c6f98d34).
+
+ PR 28827
+ * testsuite/ld-powerpc/pr28827-1.s,
+ * testsuite/ld-powerpc/pr28827-1.d: New test.
+ * testsuite/ld-powerpc/powerpc.exp: Run it.
+
+2022-02-05 Alan Modra <amodra@gmail.com>
+
+ Enable "size" as a dumpprog in ld
+ binutils/
+ * testsuite/lib/binutils-common.exp (run_dump_test): Reference
+ global SIZE and SIZEFLAGS.
+ ld/
+ * testsuite/config/default.exp: Define SIZE and SIZEFLAGS.
+
+2022-02-05 Alan Modra <amodra@gmail.com>
+
+ Detect .eh_frame_hdr earlier for SIZEOF_HEADERS
+ Current code detects the need for PT_GNU_EH_FRAME using a field set by
+ _bfd_elf_discard_section_eh_frame_hdr, which is called fairly late in
+ the linking process. Use the elf hash table eh_info instead, which is
+ set up earlier by size_dynamic_sections.
+
+ * elf-bfd.h (struct output_elf_obj_tdata): Delete eh_frame_hdr.
+ (elf_eh_frame_hdr): Don't define.
+ (_bfd_elf_discard_section_eh_frame_hdr): Update prototype.
+ * elf-eh-frame.c (_bfd_elf_discard_section_eh_frame_hdr): Delete
+ abfd parameter. Don't set elf_eh_frame_hdr.
+ * elf.c (elf_eh_frame_hdr): New function.
+ (get_program_header_size): Adjust elf_eh_frame_hdr call.
+ (_bfd_elf_map_sections_to_segments): Likewise.
+
+2022-02-05 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim: mips: Add simulator support for mips32r6/mips64r6
+ 2022-02-01 Ali Lown <ali.lown@imgtec.com>
+ Andrew Bennett <andrew.bennett@imgtec.com>
+ Dragan Mladjenovic <dragan.mladjenovic@rt-rk.com>
+ Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim/common/ChangeLog:
+ * sim-bits.h (EXTEND9, EXTEND18 ,EXTEND19, EXTEND21,
+ EXTEND26): New macros.
+
+ sim/mips/ChangeLog:
+ * Makefile.in (IGEN_INCLUDE): Add mips3264r6.igen.
+ * configure: Regenerate.
+ * configure.ac: Support mipsisa32r6 and mipsisa64r6.
+ (sim_engine_run): Pick simulator model from processor specified
+ in e_flags.
+ * cp1.c (value_fpr): Handle fmt_dc32.
+ (fp_unary, fp_binary): Zero initialize locals.
+ (update_fcsr, fp_classify, fp_rint, fp_r6_cmp, inner_fmac,
+ fp_fmac, fp_min, fp_max, fp_mina, fp_maxa, fp_fmadd, fp_fmsub):
+ New functions.
+ (sim_fpu_class_mips_mapping): New.
+ * cp1.h (fcsr_ABS2008_mask, fcsr_ABS2008_shift): New define.
+ * interp.c (MIPSR6_P): New.
+ (load_word): Allow unaligned memory access for MIPSR6.
+ * micromips.igen (sc, scd): Adapt to new do_sc* helper signature.
+ * mips.igen: Add *r6 models.
+ (signal_if_cti, forbiddenslot32): New helpers.
+ (delayslot32): Use signal_if_cti.
+ (do_sc, do_scd); Add store_ll_bit parameter.
+ (sc, scd): Adapt to previous change.
+ (nal, beq, bal): New definitions for *r6.
+ (sll): Split nop and ssnop cases into ...
+ (nop, ssnop): New definitions.
+ (loadstore_ea): Use the 32-bit compatibility adressing.
+ (cache): Split logic into ...
+ (do_cache): New helper.
+ (check_fpu): Select IEEE 754-2008 mode for R6.
+ (not_word_value, unpredictable, check_mt_hilo, check_mf_hilo,
+ check_multi_hilo, check_div_hilo, check_u64, do_dmfc1b, add,
+ li, addu, and, andi, bgez, bgtz, blez, bltz, bne, break, dadd,
+ daddiu, daddu, dror, dror32, drorv, dsll, dsll32, dsllv, dsra,
+ dsra32, dsrav, dsrl, dsrl32, dsub, dsubu, j, jal, jalr,
+ jalr.hb, lb, lbu, ld, lh, lhu, lui, lw, lwu, nor, or, ori, ror,
+ rorv, sb, sd, sh, sll, sllv, slt, slti, sltiu, sltu, sra, srav,
+ srl, srlv, sub, subu, sw, sync, syscall, teq, tge, tgeu, tlt,
+ tltu, tne, xor, xori, check_fmt_p, do_load_double,
+ do_store_double, abs.FMT, add.FMT, ceil.l.FMT, ceil.w.FMT,
+ cfc1, ctc1, cvt.d.FMT, cvt.l.FMT, cvt.w.FMT, div.FMT, dfmc1,
+ dmtc1, floor.l.FMT, floor.w.FMT, ldc1, lwc1, mfc1, mov.FMT,
+ mtc1, mul.FMT, recip.FMT, round.l.FMT, round.w.FMT, rsqrt.FMT,
+ sdc1, sqrt.FMT, sub.FMT, swc1, trunc.l.FMT, trunc.w.FMT, bc0f,
+ bc0fl, bc0t, bc0tl, dmfc0, dmtc0, eret, mfc0, mtc0, cop, tlbp,
+ tlbr, tlbwi, tlbwr): Enable on *r6 models.
+ * mips3264r2.igen (dext, dextm, dextu, di, dins, dinsm, dinsu,
+ dsbh, dshd, ei, ext, mfhc1, mthc1, ins, seb, seh, synci, rdhwr,
+ wsbh): Likewise.
+ * mips3264r6.igen: New file.
+ * sim-main.h (FP_formats): Add fmt_dc32.
+ (FORBIDDEN_SLOT): New macros.
+ (simFORBIDDENSLOT, FP_R6CMP_*, FP_R6CLASS_*): New defines.
+ (fp_r6_cmp, fp_classify, fp_rint, fp_min, fp_max, fp_mina,
+ fp_maxa, fp_fmadd, fp_fmsub): New declarations.
+ (R6Compare, Classify, RoundToIntegralExact, Min, Max, MinA,
+ MaxA, FusedMultiplyAdd, FusedMultiplySub): New macros. Wrapping
+ previous declarations.
+
+ sim/testsuite/mips/ChangeLog:
+ * basic.exp: Add r6-*.s tests.
+ (run_r6_removed_test): New function.
+ (run_endian_tests): New function.
+ * hilo-hazard-3.s: Skip for mips*r6.
+ * r2-fpu.s: New test.
+ * r6-64.s: New test.
+ * r6-branch.s: New test.
+ * r6-forbidden.s: New test.
+ * r6-fpu.s: New test.
+ * r6-llsc-dp.s: New test.
+ * r6-llsc-wp.s: New test.
+ * r6-removed.csv: New test.
+ * r6-removed.s: New test.
+ * r6.s: New test.
+ * utils-r6.inc: New inc.
+
+2022-02-05 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim: Add partial support for IEEE 754-2008
+ 2022-02-01 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim/common/ChangeLog:
+ * sim-fpu.c (sim_fpu_minmax_nan): New.
+ (sim_fpu_max): Add variant behaviour for IEEE 754-2008.
+ (sim_fpu_min): Likewise.
+ (sim_fpu_is_un, sim_fpu_is_or): New.
+ (sim_fpu_un, sim_fpu_or): New.
+ (sim_fpu_is_ieee754_2008, sim_fpu_is_ieee754_1985): New.
+ (sim_fpu_set_mode): New.
+ (sim_fpu_classify): New.
+ * sim-fpu.h (sim_fpu_minmax_nan): New declaration.
+ (sim_fpu_un, sim_fpu_or): New declarations.
+ (sim_fpu_is_un, sim_fpu_is_or): New declarations.
+ (sim_fpu_mode): New enum.
+ [sim_fpu_state](current_mode): New field.
+ (sim_fpu_current_mode): New define.
+ (sim_fpu_is_ieee754_2008): New declaration.
+ (sim_fpu_is_ieee754_1985): New declaration.
+ (sim_fpu_set_mode): New declaration.
+ (sim_fpu_classify): New declaration.
+
+2022-02-05 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim: Factor out NaN handling in floating point operations
+ 2022-02-01 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim/common/ChangeLog:
+ * sim-fpu.c (sim_fpu_op_nan): New.
+ (sim_fpu_add): Factor out NaN operand handling with
+ a call to sim_fpu_op_nan.
+ (sim_fpu_sub, sim_fpu_mul, sim_fpu_div): Likewise.
+ (sim_fpu_rem, sim_fpu_max, sim_fpu_min): Likewise.
+ * sim-fpu.h (sim_fpu_op_nan): New declaration.
+
+2022-02-05 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim: Allow toggling of quiet NaN-bit semantics
+ IEEE754-1985 specifies the top bit of the mantissa as an indicator
+ of signalling vs. quiet NaN, but does not define the precise semantics.
+ Most architectures treat this bit as indicating quiet NaN, but legacy
+ (pre-R6) MIPS goes the other way and treats it as signalling NaN.
+
+ This used to be controlled by a macro that was only defined for MIPS.
+ This patch replaces the macro with a variable to track the current
+ semantics of the NaN bit and allows differentiation between older
+ (pre-R6) and and newer MIPS cores.
+
+ 2022-02-01 Faraz Shahbazker <fshahbazker@wavecomp.com>
+
+ sim/common/ChangeLog:
+ * sim-fpu.c (_sim_fpu): New.
+ (pack_fpu, unpack_fpu): Allow reversal of quiet NaN semantics.
+ * sim-fpu.h (sim_fpu_state): New struct.
+ (_sim_fpu): New extern.
+ (sim_fpu_quiet_nan_inverted): New define.
+
+ sim/mips/ChangeLog:
+ * cp1.h (fcsr_NAN2008_mask, fcsr_NAN2008_shift): New.
+ * mips.igen (check_fpu): Select default quiet NaN mode
+ for legacy MIPS.
+ * sim-main.h (SIM_QUIET_NAN_NEGATED): Remove.
+
+2022-02-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-04 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Remove emultempl/armcoff.em
+ Remove emultempl/armcoff.em which has been unused after
+
+ commit 2ac93be706418f3b2aebeb22159a328023faed52
+ Author: Alan Modra <amodra@gmail.com>
+ Date: Mon Apr 16 20:33:36 2018 +0930
+
+ Remove arm-aout and arm-coff support
+
+ This also removes arm-netbsd (not arm-netbsdelf!), arm-openbsd, and
+ arm-riscix. Those targets weren't on the obsolete list but they are
+ all aout, and it doesn't make all that much sense to remove arm-aout
+ without removing them too.
+
+ * emultempl/armcoff.em: Removed.
+
+2022-02-04 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: include jit_code_entry::symfile_addr value in names of objfiles created by jit reader API
+ This commit includes the JIT object's symfile address in the names of
+ objfiles created by JIT reader API (e.g., << JIT compiled code at
+ 0x7ffd8a0c77a0 >>). This allows one to at least differentiate one from
+ another.
+
+ The address is the one that the debugged program has put in
+ jit_code_entry::symfile_addr, and that the JIT reader's read function
+ receives. As we can see in gdb.base/jit-reader-host.c and
+ gdb.base/jit-reader.c, that may not be the actual value of where the
+ JIT-ed code is. But it is a value chosen by the author of the JIT
+ engine and the JIT reader, so including this value in the objfile name
+ may help them correlate the JIT objfiles created by with their logs /
+ data structures.
+
+ To access this field, we need to pass down a reference to the
+ jit_code_entry. So make jit_dbg_reader_data a structure (instead of an
+ alias for a CORE_ADDR) that includes the address of the code entry in
+ the inferior's address space (the previous meaning of
+ jit_dbg_reader_data) plus a reference to the jit_code_entry as read into
+ GDB's address space. And while at it, pass down the gdbarch, so that we
+ don't have to call target_gdbarch.
+
+ Co-Authored-By: Jan Vrany <jan.vrany@labware.com>
+ Change-Id: Ib26c4d1bd8de503d651aff89ad2e500cb312afa5
+
+2022-02-04 Tom Tromey <tromey@adacore.com>
+
+ Improve Ada unchecked union type printing
+ Currently, "ptype" of an Ada unchecked union may show a
+ compiler-generated wrapper structure in its output. It's more
+ Ada-like to elide this structure, which is what this patch implements.
+ It turned out to be simplest to reuse a part of print_variant_clauses
+ for this.
+
+ As this is Ada-specific, and Joel already reviewed it internally, I am
+ going to check it in.
+
+2022-02-04 Tom Tromey <tromey@adacore.com>
+
+ Remove host_hex_value
+ I noticed that host_hex_value is redundant, because gdbsupport already
+ has fromhex. This patch removes the former in favor of the latter.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-02-04 Andi Kleen <andi@firstfloor.org>
+
+ Support symbol+offset lookup in addr2line
+ The Linux kernel usually ouputs symbol+offset instead of plain code
+ addresses these days, to avoid leaking ASLR secrets and to handle
+ dynamically loaded modules.
+
+ Converting those with addr2line is somewhat involved: it requires
+ looking up the symbol first using nm and then manually compute the
+ offset, and then pass it to addr2line.
+
+ This patch implements the necessary steps directly in addr2line,
+ by looking up the symbol (with demangling if needed) and computing
+ the offset.
+
+ It's possible that a symbol is ambigious with a hex number. In this
+ case it uses the symbol lookup if the string contains a +. When it isn't
+ ambigious the + is optional.
+
+2022-02-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-03 Cary Coutant <ccoutant@gmail.com>
+
+ Rename EM_56800V4 to EM_56800EF.
+ include/elf:
+ * common.h: Rename EM_56800V4 to EM_56800EF.
+
+2022-02-03 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Update X86_64_GOT_TYPE_P to cover more GOT relocations
+ Add R_X86_64_GOT32, R_X86_64_GOT64, R_X86_64_GOTPCREL64 and
+ R_X86_64_GOTPLT64 to X86_64_GOT_TYPE_P to cover more GOT relocations.
+
+ PR ld/28858
+ * elfxx-x86.h (X86_64_GOT_TYPE_P): Add R_X86_64_GOT32,
+ R_X86_64_GOT64, R_X86_64_GOTPCREL64 and R_X86_64_GOTPLT64.
+
+2022-02-03 Cary Coutant <ccoutant@gmail.com>
+
+ Add new e_machine values.
+ include/elf:
+ * common.h: Add EM_U16_U8CORE, EM_TACHYUM, EM_56800V4.
+
+2022-02-03 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ testsuite: fix failure in gdb.threads/killed-outside.exp
+ Starting with commit
+
+ commit 1da5d0e664e362857153af8682321a89ebafb7f6
+ Date: Tue Jan 4 08:02:24 2022 -0700
+
+ Change how Python architecture and language are handled
+
+ we see a failure in gdb.threads/killed-outside.exp:
+
+ ...
+ Executing on target: kill -9 16622 (timeout = 300)
+ builtin_spawn -ignore SIGHUP kill -9 16622
+ continue
+ Continuing.
+ Couldn't get registers: No such process.
+ (gdb) [Thread 0x7ffff77c2700 (LWP 16626) exited]
+
+ Program terminated with signal SIGKILL, Killed.
+ The program no longer exists.
+ FAIL: gdb.threads/killed-outside.exp: prompt after first continue (timeout)
+
+ This is not a regression but a failure due to a change in GDB's
+ output. Prior to the aforementioned commit, GDB has been printing the
+ "Couldn't get registers: No such process." message twice. The second
+ one came from
+
+ (top-gdb) bt
+ #0 amd64_linux_nat_target::fetch_registers (this=0x555557f31440 <the_amd64_linux_nat_target>, regcache=0x555558805ce0, regnum=16) at /gdb-up/gdb/amd64-linux-nat.c:225
+ #1 0x000055555640ac5f in target_ops::fetch_registers (this=0x555557d636d0 <the_thread_db_target>, arg0=0x555558805ce0, arg1=16) at /gdb-up/gdb/target-delegates.c:502
+ #2 0x000055555641a647 in target_fetch_registers (regcache=0x555558805ce0, regno=16) at /gdb-up/gdb/target.c:3945
+ #3 0x0000555556278e68 in regcache::raw_update (this=0x555558805ce0, regnum=16) at /gdb-up/gdb/regcache.c:587
+ #4 0x0000555556278f14 in readable_regcache::raw_read (this=0x555558805ce0, regnum=16, buf=0x555558881950 "") at /gdb-up/gdb/regcache.c:601
+ #5 0x00005555562792aa in readable_regcache::cooked_read (this=0x555558805ce0, regnum=16, buf=0x555558881950 "") at /gdb-up/gdb/regcache.c:690
+ #6 0x000055555627965e in readable_regcache::cooked_read_value (this=0x555558805ce0, regnum=16) at /gdb-up/gdb/regcache.c:748
+ #7 0x0000555556352a37 in sentinel_frame_prev_register (this_frame=0x555558181090, this_prologue_cache=0x5555581810a8, regnum=16) at /gdb-up/gdb/sentinel-frame.c:53
+ #8 0x0000555555fa4773 in frame_unwind_register_value (next_frame=0x555558181090, regnum=16) at /gdb-up/gdb/frame.c:1235
+ #9 0x0000555555fa420d in frame_register_unwind (next_frame=0x555558181090, regnum=16, optimizedp=0x7fffffffd570, unavailablep=0x7fffffffd574, lvalp=0x7fffffffd57c, addrp=0x7fffffffd580,
+ realnump=0x7fffffffd578, bufferp=0x7fffffffd5b0 "") at /gdb-up/gdb/frame.c:1143
+ #10 0x0000555555fa455f in frame_unwind_register (next_frame=0x555558181090, regnum=16, buf=0x7fffffffd5b0 "") at /gdb-up/gdb/frame.c:1199
+ #11 0x00005555560178e2 in i386_unwind_pc (gdbarch=0x5555587c4a70, next_frame=0x555558181090) at /gdb-up/gdb/i386-tdep.c:1972
+ #12 0x0000555555cd2b9d in gdbarch_unwind_pc (gdbarch=0x5555587c4a70, next_frame=0x555558181090) at /gdb-up/gdb/gdbarch.c:3007
+ #13 0x0000555555fa3a5b in frame_unwind_pc (this_frame=0x555558181090) at /gdb-up/gdb/frame.c:948
+ #14 0x0000555555fa7621 in get_frame_pc (frame=0x555558181160) at /gdb-up/gdb/frame.c:2572
+ #15 0x0000555555fa7706 in get_frame_address_in_block (this_frame=0x555558181160) at /gdb-up/gdb/frame.c:2602
+ #16 0x0000555555fa77d0 in get_frame_address_in_block_if_available (this_frame=0x555558181160, pc=0x7fffffffd708) at /gdb-up/gdb/frame.c:2665
+ #17 0x0000555555fa5f8d in select_frame (fi=0x555558181160) at /gdb-up/gdb/frame.c:1890
+ #18 0x0000555555fa5bab in lookup_selected_frame (a_frame_id=..., frame_level=-1) at /gdb-up/gdb/frame.c:1720
+ #19 0x0000555555fa5e47 in get_selected_frame (message=0x0) at /gdb-up/gdb/frame.c:1810
+ #20 0x0000555555cc9c6e in get_current_arch () at /gdb-up/gdb/arch-utils.c:848
+ #21 0x000055555625b239 in gdbpy_before_prompt_hook (extlang=0x555557451f20 <extension_language_python>, current_gdb_prompt=0x555557f4d890 <top_prompt+16> "(gdb) ")
+ at /gdb-up/gdb/python/python.c:1063
+ #22 0x0000555555f7cfbb in ext_lang_before_prompt (current_gdb_prompt=0x555557f4d890 <top_prompt+16> "(gdb) ") at /gdb-up/gdb/extension.c:922
+ #23 0x0000555555f7d442 in std::_Function_handler<void (char const*), void (*)(char const*)>::_M_invoke(std::_Any_data const&, char const*&&) (__functor=...,
+ __args#0=@0x7fffffffd900: 0x555557f4d890 <top_prompt+16> "(gdb) ") at /usr/include/c++/7/bits/std_function.h:316
+ #24 0x0000555555f752dd in std::function<void (char const*)>::operator()(char const*) const (this=0x55555817d838, __args#0=0x555557f4d890 <top_prompt+16> "(gdb) ")
+ at /usr/include/c++/7/bits/std_function.h:706
+ #25 0x0000555555f75100 in gdb::observers::observable<char const*>::notify (this=0x555557f49060 <gdb::observers::before_prompt>, args#0=0x555557f4d890 <top_prompt+16> "(gdb) ")
+ at /gdb-up/gdb/../gdbsupport/observable.h:150
+ #26 0x0000555555f736dc in top_level_prompt () at /gdb-up/gdb/event-top.c:444
+ #27 0x0000555555f735ba in display_gdb_prompt (new_prompt=0x0) at /gdb-up/gdb/event-top.c:411
+ #28 0x00005555564611a7 in tui_on_command_error () at /gdb-up/gdb/tui/tui-interp.c:205
+ #29 0x0000555555c2173f in std::_Function_handler<void (), void (*)()>::_M_invoke(std::_Any_data const&) (__functor=...) at /usr/include/c++/7/bits/std_function.h:316
+ #30 0x0000555555e10c20 in std::function<void ()>::operator()() const (this=0x5555580f9028) at /usr/include/c++/7/bits/std_function.h:706
+ #31 0x0000555555e10973 in gdb::observers::observable<>::notify() const (this=0x555557f48d20 <gdb::observers::command_error>) at /gdb-up/gdb/../gdbsupport/observable.h:150
+ #32 0x00005555560e9b3f in start_event_loop () at /gdb-up/gdb/main.c:438
+ #33 0x00005555560e9bcc in captured_command_loop () at /gdb-up/gdb/main.c:481
+ #34 0x00005555560eb616 in captured_main (data=0x7fffffffddd0) at /gdb-up/gdb/main.c:1348
+ #35 0x00005555560eb67c in gdb_main (args=0x7fffffffddd0) at /gdb-up/gdb/main.c:1363
+ #36 0x0000555555c1b6b3 in main (argc=12, argv=0x7fffffffded8) at /gdb-up/gdb/gdb.c:32
+
+ Commit 1da5d0e664 eliminated the call to 'get_current_arch'
+ in 'gdbpy_before_prompt_hook'. Hence, the second instance of
+ "Couldn't get registers: No such process." does not appear anymore.
+
+ Fix the failure by updating the regular expression in the test.
+
+2022-02-03 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 treatment of absolute symbols
+ Supporting -static-pie on PowerPC64 requires the linker to properly
+ treat SHN_ABS symbols for cases like glibc's _nl_current_LC_CTYPE_used
+ absolute symbol. I've been slow to fix the linker on powerpc because
+ there is some chance that this will break some shared libraries or
+ PIEs.
+
+ bfd/
+ * elf64-ppc.c (ppc64_elf_check_relocs): Consolidate local sym
+ handling code. Don't count dyn relocs against non-dynamic
+ absolute symbols.
+ (dec_dynrel_count): Adjust to suit.
+ (ppc64_elf_edit_toc): Don't remove entries for absolute symbols
+ when pic.
+ (allocate_got): Don't allocate space for got relocs against
+ non-dynamic absolute syms.
+ (ppc64_elf_layout_multitoc): Likewise.
+ (got_and_plt_relr): Likewise.
+ (ppc64_elf_size_dynamic_sections): Likewise for local got.
+ (got_and_plt_relr_for_local_syms): Likewise.
+ (ppc64_elf_size_stubs): Don't allocate space for relr either.
+ (ppc64_elf_relocate_section): Don't write relocs against non-dynamic
+ absolute symbols. Don't optimise got and toc code sequences
+ loading absolute symbol entries.
+ ld/
+ * testsuite/ld-powerpc/abs-reloc.s,
+ * testsuite/ld-powerpc/abs-static.d,
+ * testsuite/ld-powerpc/abs-static.r,
+ * testsuite/ld-powerpc/abs-pie.d,
+ * testsuite/ld-powerpc/abs-pie.r,
+ * testsuite/ld-powerpc/abs-shared.d,
+ * testsuite/ld-powerpc/abs-shared.r,
+ * testsuite/ld-powerpc/abs-pie-relr.d,
+ * testsuite/ld-powerpc/abs-pie-relr.r,
+ * testsuite/ld-powerpc/abs-shared-relr.d,
+ * testsuite/ld-powerpc/abs-shared-relr.r: New tests.
+ * testsuite/ld-powerpc/powerpc.exp: Run them.
+
+2022-02-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-02 Nick Clifton <nickc@redhat.com>
+
+ Stop the BFD library complaining about compressed dwarf debug string sections being too big.
+ PR 28834
+ * dwarf2.c (read_section): Change the heuristic that checks for
+ overlarge dwarf debug info sections.
+
+2022-02-02 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: fix formatting for help set/show extended-prompt
+ The formatting of the help text for 'help set extended-prompt' and
+ 'help show extended-prompt' is a little off.
+
+ Here's the offending snippet:
+
+ Substitutions are applied to VALUE to compute the real prompt.
+
+ The currently defined substitutions are:
+ \[ Begins a sequence of non-printing characters.
+ \\ A backslash.
+ \] Ends a sequence of non-printing characters.
+ \e The ESC character.
+
+ Notice that the line for '\[' is indented more that the others.
+
+ Turns out this is due to how we build this help text, something which
+ is done in Python. We extended a classes __doc__ string with some
+ dynamically generated text.
+
+ The classes doc string looks like this:
+
+ """Set the extended prompt.
+
+ Usage: set extended-prompt VALUE
+
+ Substitutions are applied to VALUE to compute the real prompt.
+
+ The currently defined substitutions are:
+ """
+
+ Notice the closing """ are in a line of their own, and include some
+ white space just before. It's this extra white space that's causing
+ the problem.
+
+ Fix the formatting issue by moving the """ to the end of the previous
+ line. I then add the extra newline in at the point where the doc
+ string is merged with the dynamically generated text.
+
+ Now everything lines up correctly.
+
+2022-02-02 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: test to check one aspect of the linespec parsing code
+ While working on the fix for PR cli/28665 (see previous couple of
+ commits), I was playing with making a change in the linespec parsing
+ code. Specifically, I was thinking about whether the spec_string for
+ LINESPEC_LOCATION locations should ever be nullptr.
+
+ I made a change to prevent the spec_string from ever being nullptr,
+ tested gdb, and saw no regressions.
+
+ However, as part of this work I was reviewing how the breakpoint code
+ handles this case (spec_string being nullptr), and spotted that in
+ parse_breakpoint_sals the nullptr case is specifically handled, so
+ changing this should have caused a regression. But I didn't see one.
+
+ So, this commit adds a comment in location.c mentioning that the
+ nullptr case is (a) not an oversight, and (b) is required. Then I add
+ a new test to gdb.base/break.exp that ensures a change in this area
+ will cause a regression.
+
+ This test passes on current gdb, but with my modified (and broken)
+ gdb, the test would fail.
+
+2022-02-02 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: handle calls to edit command passing only a linespec condition
+ While working on the previous commit to fix PR cli/28665, I noticed
+ that the 'edit' command would suffer from the same problem. That is,
+ something like:
+
+ (gdb) edit task 123
+
+ would cause GDB to break. For a full explanation of what's going on
+ here, see the commit message for the previous commit.
+
+ As with the previous commit, this issue can be prevented by detecting,
+ and throwing, a junk at the end of the line error earlier, before
+ calling decode_line_1.
+
+ So, that's what this commit does. I've also added some tests for this
+ issue.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28665
+
+2022-02-02 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: handle calls to list command passing only a linespec condition
+ In PR cli/28665, it was reported that GDB would crash when given a
+ command like:
+
+ (gdb) list task 123
+
+ The problem here is that in cli/cli-cmd.c:list_command, the string
+ 'task 123' is passed to string_to_event_location in find a location
+ specification. However, this location parsing understands about
+ breakpoint conditions, and so, will stop parsing when it sees
+ something that looks like a condition, in this case, the 'task 123'
+ looks like a breakpoint condition.
+
+ As a result, the location we get back from string_to_event_location
+ has no actual location specification attached to it. The actual call
+ path is:
+
+ list_command
+ string_to_event_location
+ string_to_event_location_basic
+ new_linespec_location
+
+ In new_linespec_location we call linespec_lex_to_end, which looks at
+ 'task 123' and decides that there's nothing there that describes a
+ location. As such, in new_linespec_location, the spec_string field of
+ the location is left as nullptr.
+
+ Back in list_command we then call decode_line_1, which calls
+ event_location_to_sals, which calls parse_linespec, which takes the
+ spec_string we found earlier, and tries to converts this into a list
+ of sals.
+
+ However, parse_linespec is not intended to be passed a nullptr, for
+ example, calling is_ada_operator will try to access through the
+ nullptr, causing undefined behaviour. But there are other cases
+ within parse_linespec which don't expect to see a nullptr.
+
+ When looking at how to fix this issue, I first considered having
+ linespec_lex_to_end detect the problem. That function understands
+ when the first thing in the linespec is a condition keyword, and so,
+ could throw an error saying something like: "no linespec before
+ condition keyword", however, this is not going to work, at least, not
+ without additional changes to GDB, it is valid to place a breakpoint
+ like:
+
+ (gdb) break task 123
+
+ This will place a breakpoint at the current location with the
+ condition 'task 123', and changing linespec_lex_to_end breaks this
+ behaviour.
+
+ So, next, I considered what would happen if I added a condition to an
+ otherwise valid list command, this is what I see:
+
+ (gdb) list file.c:1 task 123
+ Junk at end of line specification.
+ (gdb)
+
+ So, then I wondered, could we just pull the "Junk" detection forward,
+ so that we throw the error earlier, before we call decode_line_1?
+
+ It turns out that yes we can. Well, sort of.
+
+ It is simpler, I think, to add a separate check into the list_command
+ function, after calling string_to_event_location, but before calling
+ decode_line_1. We know when we call string_to_event_location that the
+ string in question is not empty, so, after calling
+ string_to_event_location, if non of the string has been consumed, then
+ the content of the string must be junk - it clearly doesn't look like
+ a location specification.
+
+ I've reused the same "Junk at end of line specification." error for
+ consistency, and added a few tests to cover this issue.
+
+ While the first version of this patch was on the mailing list, a
+ second bug PR gdb/28797 was raised. This was for a very similar
+ issue, but this time the problem command was:
+
+ (gdb) list ,,
+
+ Here the list command understands about the first comma, list can have
+ two arguments separated by a comma, and the first argument can be
+ missing. So we end up trying to parse the second command "," as a
+ linespec.
+
+ However, in linespec_lex_to_end, we will stop parsing a linespec at a
+ comma, so, in the above case we end up with an empty linespec (between
+ the two commas), and, like above, this results in the spec_string
+ being nullptr.
+
+ As with the previous case, I've resolved this issue by adding an extra
+ check for junk at the end of the line - after parsing (or failing to
+ parse) the nothing between the two commas, we still have the "," left
+ at the end of the list command line - when we see this we can throw
+ the same "junk at the end of the line" error, and all is good.
+
+ I've added tests for this case too.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28665
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28797
+
+2022-02-02 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: move linespec test into gdb.linespec/ directory
+ The gdb.base/linespecs.exp test should really live in the gdb.linespec
+ directory, so lets move it there.
+
+ As we already have gdb.linespec/linespec.exp, I've renamed the test to
+ gdb.linespec/errors.exp, as this better reflects what the test is
+ actually checking.
+
+ Finally, the test script doesn't have its own source file, it was
+ reusing a random other source file, gdb.base/memattr.c. Now the tests
+ script is in gdb.linespec/, I've updated the test to use a different
+ source file from that directory.
+
+2022-02-02 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add empty string check in parse_linespec
+ If parse_linespec (linespec.c) is passed ARG as an empty string then
+ we end up calling `strchr (linespec_quote_characters, '\0')`, which
+ will return a pointer to the '\0' at the end of
+ linespec_quote_characters. This then results in GDB calling
+ skip_quote_char with `ARG + 1`, which is undefined behaviour (as ARG
+ only contained a single character, the '\0').
+
+ Fix this by checking for the first character of ARG being '\0' before
+ the call to strchr.
+
+ I have additionally added an assertion that ARG can't itself be
+ nullptr, as calling is_ada_operator with nullptr can end up calling
+ 'startswith' on the nullptr, which is undefined behaviour.
+
+ Finally, I moved the declaration of TOKEN into the body of
+ parse_linespec, to where TOKEN is defined.
+
+ This patch came about while I was working on fixes for PR cli/28665
+ and PR gdb/28797. The actual fixes for these two issues will be in a
+ later commit in this series, but, with this patch in place, both of
+ the above bugs would hit the new assertion rather than accessing
+ invalid memory and crashing. The '\0' check is not currently ever
+ hit, but just makes the code a little safer.
+
+ Because this patch only changes the nature of the failure for the
+ above two bugs, there's no tests here. A later commit will fix the
+ above two issues, at which point I'll add some tests.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28665
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28797
+
+2022-02-02 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: update the comment on string_to_event_location
+ The comment on string_to_event_location is (I believe) out of date.
+ This commit fixes the two issues I see:
+
+ 1. This function can't return NULL any more. The implementation
+ calls string_to_explicit_location which can return NULL, but if this
+ is the case we then call string_to_event_location_basic, which I
+ don't believe can ever return NULL.
+
+ 2. I've removed the mention that the returned string is malloc'd,
+ though this is true, now that we return a managed pointer, I believe
+ the source of the memory allocation is irrelevant, and so, shouldn't
+ be discussed in the header comment.
+
+ There should be no user visible changes after this commit.
+
+2022-02-02 Nick Clifton <nickc@redhat.com>
+
+ Updated French translation for the ld/ and gold/ sub-directories
+
+2022-02-02 Stafford Horne <shorne@gmail.com>
+
+ or1k: Avoid R_OR1K_GOT16 signed overflow by using special howto
+ Previously when fixing PR 21464 we masked out upper bits of the
+ relocation value in order to avoid overflow complaints when acceptable.
+ It turns out this does not work when the relocation value ends up being
+ signed.
+
+ To fix this this patch introduces a special howto with
+ complain_on_overflow set to complain_overflow_dont. This is used in
+ place of the normal R_OR1K_GOT16 howto when we detect R_OR1K_GOT_AHI16
+ relocations.
+
+ bfd/ChangeLog:
+
+ PR 28735
+ * elf32-or1k.c (or1k_elf_got16_no_overflow_howto): Define.
+ (or1k_elf_relocate_section): Use new howto instead of trying to
+ mask out relocation bits.
+
+2022-02-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-02-01 Tom Tromey <tromey@adacore.com>
+
+ Fix flex rule in gdb
+ Currently, if flex fails, it will leave the resulting .c file in the
+ tree. This will cause a cascade of errors, and requires the manual
+ deletion of the .c file in order to recreate the problem.
+
+ It's better for the rule to fail such that the .c file is not updated.
+ This way, 'make' will fail the same way every time -- which is much
+ handier for debugging syntax errors.
+
+ This fix just updates the Makefile rule to follow the way that the
+ "yacc" rule already works.
+
+2022-02-01 Markus Metzger <markus.t.metzger@intel.com>
+
+ gdb, btrace: improve error messages
+ When trying to use 'record btrace' on a system that does not support it,
+ the error message isn't as clear as it could be. See
+ https://sourceware.org/pipermail/gdb/2022-January/049870.html.
+
+ Improve the error message in a few cases.
+
+ Reported-by: Simon Sobisch <simonsobisch@gnu.org>
+
+2022-02-01 Jan Vrany <jan.vrany@labware.com>
+
+ gdb/python: fix gdb.Objfile.__repr__ () for dynamically compiled code
+ While experimenting with JIT reader API I realized that calling repr ()
+ on objfile created by JIT reader crashes GDB.
+
+ The problem was that objfpy_repr () called objfile_filename () which
+ returned NULL, causing PyString_FromFormat () to crash.
+
+ This commit fixes this problem by using objfile_name () instead of
+ objfile_filename (). This also makes consistent with the value of gdb.Objfile.filename variable.
+
+2022-02-01 Samuel Thibault <samuel.thibault@gnu.org>
+
+ hurd: Fix RPC prototypes
+ The last updates of MIG introduced qualifying strings and arrays with
+ const as appropriate. We thus have to update the protypes in gdb too.
+
+ Change-Id: I3f72aac1dfa6e58d1394d5776b822d7c8f2409df
+
+2022-02-01 Samuel Thibault <samuel.thibault@gnu.org>
+
+ hurd: Fix RPC link names
+ The RPC stub code expects to be calling a C function, not a C++
+ function.
+
+ Change-Id: Idd7549fc118f2addc7fb4975667a011cacacc03f
+
+2022-02-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-31 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Check symbol version without any symbols
+ VER_FLG_WEAK doesn't indicate that all symbol references of the symbol
+ version have STB_WEAK. VER_FLG_WEAK indicates a weak symbol version
+ definition with no symbols associated with it. It is used to verify
+ the existence of a particular implementation without any symbol references
+ to the weak symbol version.
+
+ PR ld/24718
+ * testsuite/ld-elf/pr24718-1.d: New file.
+ * testsuite/ld-elf/pr24718-1.s: Likewise.
+ * testsuite/ld-elf/pr24718-1.t: Likewise.
+
+2022-01-31 H.J. Lu <hjl.tools@gmail.com>
+
+ Load debug section only when dumping debug sections
+ Don't load debug sections if we aren't dumping any debug sections.
+
+ PR binutils/28843
+ * objdump.c (dump_any_debugging): New.
+ (load_debug_section): Return false if dump_any_debugging isn't
+ set.
+ (main): Set dump_any_debugging when dumping any debug sections.
+ * readelf (dump_any_debugging): New.
+ (parse_args): Set dump_any_debugging when dumping any debug
+ sections.
+ (load_debug_section): Return false if dump_any_debugging isn't
+ set.
+
+2022-01-31 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix some clang-tidy readability-misleading-indentation warnings
+ I have warnings like these showing in my editor all the time, so I
+ thought I'd run clang-tidy with this diagnostic on all the files (that I
+ can compile) and fix them.
+
+ There is still one warning, in utils.c, but that's because some code
+ is mixed up with preprocessor macros (#ifdef TUI), so I think there no
+ good solution there.
+
+ Change-Id: I345175fc7dd865318f0fbe61ac026c88c3b6a96b
+
+2022-01-31 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb, testsuite, fortran: adapt info symbol expected output for intel compilers
+ Info symbol is expected to print the symbol table name of a symbol, since
+ symbol lookup happens via the minimal symbol table. This name
+ corresponds to the linkage name in the full symbol table.
+
+ For gfortran (and maybe others) these names currently have the form
+ XXXX.NUMBER where XXXX is the symbol name and NUMBER a compiler
+ generated appendix for mangling.
+ An example taken from the modified nested-funcs-2.exp would be
+
+ ~~~~
+ $ objdump -t ./outputs/gdb.fortran/nested-funcs-2/nested-funcs-2 | grep \
+ increment
+ 00000000000014ab l F .text 0000000000000095 increment.3883
+ 000000000000141c l F .text 000000000000008f increment_program_global.3881
+ ~~~~
+
+ This mangled name gets recognized by the Ada demangler/decoder and decoded as
+ Ada to XXXX (setting the symbol language to Ada). This leads to output
+ of XXXX over XXXX.NUMBER for info symbol on gfortran symbols.
+
+ For ifort and ifx the generated linkage names have the form
+ SCOPEA_SCOPEB_XXXX_ which are not recognized by the Ada decoder (or any
+ other demangler for that matter) and thus printed as is.
+ The respective objdump in the above case looks like
+
+ ~~~~
+ $ objdump -t ./outputs/gdb.fortran/nested-funcs-2/nested-funcs-2 | grep \
+ increment
+ 0000000000403a44 l F .text 0000000000000074 contains_keyword_IP_increment_
+ 0000000000403ab8 l F .text 0000000000000070
+ contains_keyword_IP_increment_program_global_
+ ~~~~
+
+ In the unmodified testcase this results in 'fails' when ran with the intel
+ compilers:
+
+ ~~~~
+ >> make check RUNTESTFLAGS="gdb.fortran/nested-funcs-2.exp \
+ GDBFLAGS='$GDBFLAGS' CC_FOR_TARGET='icpc' F90_FOR_TARGET='ifort'"
+
+ ...
+
+ === gdb Summary ===
+
+ \# of expected passes 80
+ \# of unexpected failures 14
+ ~~~~
+
+ Note that there is no Fortran mangling standard. We keep the gfortran
+ behavior as is and modify the test to reflect ifx and ifort mangled
+ names which fixes above fails.
+
+2022-01-31 Nick Clifton <nickc@redhat.com>
+
+ Import patch from mainline GCC to fix an infinite recusion in the Rust demangler.
+ PR 98886
+ PR 99935
+ * rust-demangle.c (struct rust_demangler): Add a recursion
+ counter.
+ (demangle_path): Increment/decrement the recursion counter upon
+ entry and exit. Fail if the counter exceeds a fixed limit.
+ (demangle_type): Likewise.
+ (rust_demangle_callback): Initialise the recursion counter,
+ disabling if requested by the option flags.
+
+2022-01-31 Alan Modra <amodra@gmail.com>
+
+ Re: PR28827, assertion building LLVM 9 on powerpc64le-linux-gnu
+ In trying to find a testcase for PR28827, I managed to hit a linker
+ error in bfd_set_section_contents with a .branch_lt input section
+ being too large for the output .branch_lt.
+
+ bfd/
+ PR 28827
+ * elf64-ppc.c (ppc64_elf_size_stubs): Set section size to
+ maxsize past STUB_SHRINK_ITER before laying out. Remove now
+ unnecessary conditional setting of maxsize at start of loop.
+ ld/
+ * testsuite/ld-powerpc/pr28827-2.d,
+ * testsuite/ld-powerpc/pr28827-2.lnk,
+ * testsuite/ld-powerpc/pr28827-2.s: New test.
+ * testsuite/ld-powerpc/powerpc.exp: Run it.
+
+2022-01-31 Tom Tromey <tom@tromey.com>
+
+ Remove unused variables in fbsd-tdep.c files
+ i386-fbsd-tdep.c and amd64-fbsd-tdep.c failed to build on my x86-64
+ Fedora 34 machine, using the system gcc, after a recent patch. These
+ two files now have unused variables, which provokes a warning in this
+ configuration.
+
+ I'm checking in this patch to remove the unused variables.
+
+2022-01-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-29 Alan Modra <amodra@gmail.com>
+
+ Re: PR28827, assertion building LLVM 9 on powerpc64le-linux-gnu
+ The previous patch wasn't quite correct. The size and padding depends
+ on offset used in the current iteration, and if we're fudging the
+ offset past STUB_SHRINK_ITER then we'd better use that offset. We
+ can't have plt_stub_pad using stub_sec->size as the offset.
+
+ PR 28827
+ * elf64-ppc.c (plt_stub_pad): Add stub_off param.
+ (ppc_size_one_stub): Set up stub_offset to value used in this
+ iteration before sizing the stub. Adjust plt_stub_pad calls.
+
+2022-01-29 Alan Modra <amodra@gmail.com>
+
+ objcopy --only-keep-debug
+ From: Peilin Ye <peilin.ye@bytedance.com>
+ objcopy's --only-keep-debug option has been broken for ELF files since
+ commit 8c803a2dd7d3.
+
+ 1. binutils/objcopy.c:setup_section() marks non-debug sections as
+ SHT_NOBITS, then calls bfd_copy_private_section_data();
+ 2. If ISEC and OSEC share the same section flags,
+ bfd/elf.c:_bfd_elf_init_private_section_data() restores OSEC's
+ section type back to ISEC's section type, effectively undoing
+ "make_nobits".
+
+ * objcopy.c (setup_section): Act on make_nobits after calling
+ bfd_copy_private_section_data.
+
+2022-01-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-28 John Baldwin <jhb@FreeBSD.org>
+
+ gdb: fix ppc-sysv-tdep.c build on 32-bit platforms
+ The previous code triggered the following error on an i386 host:
+
+ /git/gdb/gdb/ppc-sysv-tdep.c:1764:34: error: non-constant-expression cannot be narrowed from type 'ULONGEST' (aka 'unsigned long long') to 'size_t' (aka 'unsigned int') in initializer list [-Wc++11-narrowing]
+ unscaled.read ({writebuf, TYPE_LENGTH (valtype)},
+ ^~~~~~~~~~~~~~~~~~~~~
+ /git/gdb/gdb/gdbtypes.h:2043:31: note: expanded from macro 'TYPE_LENGTH'
+ ^~~~~~~~~~~~~~~~~~
+ /git/gdb/gdb/ppc-sysv-tdep.c:1764:34: note: insert an explicit cast to silence this issue
+ unscaled.read ({writebuf, TYPE_LENGTH (valtype)},
+ ^~~~~~~~~~~~~~~~~~~~~
+ static_cast<size_t>( )
+ /git/gdb/gdb/gdbtypes.h:2043:31: note: expanded from macro 'TYPE_LENGTH'
+ ^~~~~~~~~~~~~~~~~~
+ 1 error generated.
+
+ Fix this by using gdb::make_array_view.
+
+2022-01-28 John Baldwin <jhb@FreeBSD.org>
+
+ FreeBSD x86 nat: Use register maps for GP register sets.
+ Rather than using the x86-specific register offset tables, use
+ register maps to describe the layout of the general purpose registers
+ fetched via PT_GETREGS. The sole user-visible difference is that
+ FreeBSD/amd64 will now report additional segment registers ($ds, $es,
+ $fs, and $gs) for both 32-bit and 64-bit processes.
+
+ As part of these changes, the FreeBSD x86 native targets no longer use
+ amd64-bsd-nat.c or i386-bsd-nat.c. Remove FreeBSD-specific register
+ handling (for $fs_base, $gs_base, and XSAVE state) from these files.
+ Similarly, remove the global x86bsd_xsave_len from x86-bsd-nat.c. The
+ FreeBSD x86 native targets use a static xsave_len instead.
+
+ While here, rework the probing of PT_GETXMMREGS on FreeBSD/i386.
+ Probe the ptrace op once in the target read_description method and
+ cache the result for the future similar to the way the status of XSAVE
+ support is probed in the read_description method. In addition, return
+ the proper xcr0 mask (X87-only) for old kernels or systems without
+ either XSAVE or XMM support.
+
+2022-01-28 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Return a bool from fetch_register_set and store_register_set.
+ Change these helper functions to return true if they did any work.
+
+2022-01-28 John Baldwin <jhb@FreeBSD.org>
+
+ FreeBSD x86: Use tramp-frame for signal frames.
+ Use a register map to describe the registers in mcontext_t as part of
+ the signal frame as is done on several other FreeBSD arches. This
+ permits fetching the fsbase and gsbase register values from the signal
+ frame for both amd64 and i386 and permits fetching additional segment
+ registers stored as 16-bit values on amd64.
+
+ While signal frames on FreeBSD do contain floating point/XSAVE state,
+ these unwinders do not attempt to supply those registers. The
+ existing x86 signal frame uwinders do not support these registers, and
+ the only existing functions which handle FSAVE/FXSAVE/XSAVE state all
+ work with regcaches. In the future these unwinders could create a
+ tempory regcache, collect floating point registers, and then supply
+ values out of the regcache into the trad-frame.
+
+2022-01-28 John Baldwin <jhb@FreeBSD.org>
+
+ Use register maps for gp regsets on FreeBSD/x86 core dumps.
+ In particular, this permits reporting the value of the $ds, $es, $fs,
+ and $gs segment registers from amd64 core dumps since they are stored
+ as 16-bit values rather than the 32-bit size assumed by i386_gregset.
+
+2022-01-28 John Baldwin <jhb@FreeBSD.org>
+
+ regcache: Zero-extend small registers described by a register map.
+ When registers are supplied via regcache_supply_register from a
+ register block described by a register map, registers may be stored in
+ slots smaller than GDB's native register size (e.g. x86 segment
+ registers are 16 bits, but the GDB registers for those are 32-bits).
+ regcache_collect_regset is careful to zero-extend slots larger than a
+ register size, but regcache_supply_regset just used
+ regcache::raw_supply_part and did not initialize the upper bytes of a
+ register value.
+
+ trad_frame_set_reg_regmap assumes these semantics (zero-extending
+ short registers). Upcoming patches also require these semantics for
+ handling x86 segment register values stored in 16-bit slots on
+ FreeBSD. Note that architecturally x86 segment registers are 16 bits,
+ but the x86 gdb architectures treat these registers as 32 bits.
+
+2022-01-28 John Baldwin <jhb@FreeBSD.org>
+
+ FreeBSD x86: Remove fallback for detecting signal trampolines by address.
+ A few FreeBSD releases did not include the page holding the signal
+ code in core dumps. As a workaround, a sysctl was used to fetch the
+ default location of the signal code instead. The youngest affected
+ FreeBSD release is 10.1 released in November 2014 and EOLed in
+ December 2016. The fallback only works for native processes and would
+ require a separate unwinder once the FreeBSD arches are converted to
+ use tramp_frame for signal frames.
+
+ Remove support for pre-5.0 FreeBSD/i386 signal trampolines.
+ The last relevant release (FreeBSD 4.11) was released in January of
+ 2005.
+
+ Remove vestigal FreeBSD/i386 3.x support.
+ This was orphaned when a.out support was removed as the FreeBSD/i386
+ ELF support always used the register layouts from 4.0+.
+
+2022-01-28 Bruno Larsen <blarsen@redhat.com>
+
+ Add Bruno Larsen to gdb/MAINTAINERS
+
+2022-01-28 Enze Li <lienze2010@hotmail.com>
+
+ gdb/build: Fix Wpessimizing-move in clang build
+ When building with clang, I run into an error:
+
+ ...
+ tui/tui-disasm.c:138:25: error: moving a temporary object prevents copy
+ elision [-Werror,-Wpessimizing-move]
+ tal.addr_string = std::move (gdb_dis_out.release ());
+ ^
+ tui/tui-disasm.c:138:25: note: remove std::move call here
+ tal.addr_string = std::move (gdb_dis_out.release ());
+ ^~~~~~~~~~~ ~
+ ...
+
+ The error above is caused by the recent commit 5d10a2041eb8 ("gdb: add
+ string_file::release method").
+
+ Fix this by removing std::move.
+
+ Build on x86_64-linux with clang 13.0.0.
+
+2022-01-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ Add top-level .editorconfig file
+ Add a .editorconfig [1] file. This helps configure editors
+ automatically with the right whitespace settings. It will help me,
+ since I need to juggle with different whitespace settings for different
+ projects. But I think it can also help newcomers get things right from
+ the start.
+
+ Some editors have native support for reading these files, while others
+ require a plug-in [2]. And if you don't want to use it, then this file
+ doesn't change anything to your life.
+
+ I added rules for the kinds of files I edit most often, but more can be
+ added later. I assumed that the rules were the same for GDB and the
+ other projects, but if that's not the case, we can always put
+ .editorconfig files in project subdirectories to override settings.
+
+ [1] https://editorconfig.org/
+ [2] https://editorconfig.org/#download
+
+ Change-Id: Ifda136d13877fafcf0d137fec8501f6a34e1367b
+
+2022-01-28 Nick Clifton <nickc@redhat.com>
+
+ Updated French translation for the gas sub-directory.
+
+2022-01-28 Alan Modra <amodra@gmail.com>
+
+ Set __ehdr_start rel_from_abs earlier
+ This is just a tidy, making the __ehdr_start symbol flag tweaks all in
+ one place.
+
+ * ldelf.c (ldelf_before_allocation): Don't set rel_from_abs
+ for __ehdr_start.
+ * ldlang.c (lang_symbol_tweaks): Set it here instead.
+
+2022-01-28 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 handling of @tocbase
+ * elf64-ppc.c (ppc64_elf_relocate_section): Warn if the symbol
+ on R_PPC64_TOC isn't local.
+
+2022-01-28 Alan Modra <amodra@gmail.com>
+
+ Update PowerPC64 symtocbase test
+ Using a symbol other than .TOC. with @tocbase is an extension to the
+ ABI. It is never valid to use a symbol without a definition in the
+ binary, and symbols on these expressions cannot be overridden. Make
+ this explicit by using ".hidden" in the testcase.
+
+ * testsuite/ld-powerpc/symtocbase-1.s: Align data. Make function
+ entry symbol hidden.
+ * testsuite/ld-powerpc/symtocbase-2.s: Likewise.
+ * testsuite/ld-powerpc/symtocbase.d: Adjust expected output.
+
+2022-01-28 Alan Modra <amodra@gmail.com>
+
+ PR28827, assertion building LLVM 9 on powerpc64le-linux-gnu
+ The assertion is this one in ppc_build_one_stub
+ BFD_ASSERT (stub_entry->stub_offset >= stub_entry->group->stub_sec->size);
+ It is checking that a stub doesn't overwrite the tail of a previous
+ stub, so not something trivial.
+
+ Normally, stub sizing iterates until no stubs are added, detected by
+ no change in stub section size. Iteration also continues if no stubs
+ are added but one or more stubs increases in size, which also can be
+ detected by a change in stub section size. But there is a
+ pathological case where stub section sizing decreases one iteration
+ then increases the next. To handle that situation, stub sizing also
+ stops at more than STUB_SHRINK_ITER (20) iterations when calculated
+ stub section size is smaller. The previous larger size is kept for
+ the actual layout (so that building the stubs, which behaves like
+ another iteration of stub sizing, will see the stub section sizes
+ shrink). The problem with that stopping condition is that it assumes
+ that stub sizing is only affected by addresses external to the stub
+ sections, which isn't always true.
+
+ This patch fixes that by also keeping larger individual stub_offset
+ addresses past STUB_SHRINK_ITER. It also catches a further
+ pathological case where one stub shrinks and another expands in such a
+ way that no stub section size change is seen.
+
+ PR 28827
+ * elf64-ppc.c (struct ppc_link_hash_table): Add stub_changed.
+ (STUB_SHRINK_ITER): Move earlier in file.
+ (ppc_size_one_stub): Detect any change in stub_offset. Keep
+ larger one if past STUB_SHRINK_ITER.
+ (ppc64_elf_size_stubs): Iterate on stub_changed too.
+
+2022-01-28 Alan Modra <amodra@gmail.com>
+
+ PR28826 x86_64 ld segfaults building xen
+ Fallout from commit e86fc4a5bc37
+
+ PR 28826
+ * coffgen.c (coff_write_alien_symbol): Init dummy to zeros.
+
+2022-01-28 Alan Modra <amodra@gmail.com>
+
+ PR28753, buffer overflow in read_section_stabs_debugging_info
+ PR 28753
+ * rddbg.c (read_section_stabs_debugging_info): Don't read past
+ end of section when concatentating stab strings.
+
+2022-01-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-27 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: work around negative DW_AT_data_member_location GCC 11 bug
+ g++ 11.1.0 has a bug where it will emit a negative
+ DW_AT_data_member_location in some cases:
+
+ $ cat test.cpp
+ #include <memory>
+
+ int
+ main()
+ {
+ std::unique_ptr<int> ptr;
+ }
+ $ g++ -g test.cpp
+ $ llvm-dwarfdump -F a.out
+ ...
+ 0x00000964: DW_TAG_member
+ DW_AT_name [DW_FORM_strp] ("_M_head_impl")
+ DW_AT_decl_file [DW_FORM_data1] ("/usr/include/c++/11.1.0/tuple")
+ DW_AT_decl_line [DW_FORM_data1] (125)
+ DW_AT_decl_column [DW_FORM_data1] (0x27)
+ DW_AT_type [DW_FORM_ref4] (0x0000067a "default_delete<int>")
+ DW_AT_data_member_location [DW_FORM_sdata] (-1)
+ ...
+
+ This leads to a GDB crash (when built with ASan, otherwise probably
+ garbage results), since it tries to read just before (to the left, in
+ ASan speak) of the value's buffer:
+
+ ==888645==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000c52af at pc 0x7f711b239f4b bp 0x7fff356bd470 sp 0x7fff356bcc18
+ READ of size 1 at 0x6020000c52af thread T0
+ #0 0x7f711b239f4a in __interceptor_memcpy /build/gcc/src/gcc/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:827
+ #1 0x555c4977efa1 in value_contents_copy_raw /home/simark/src/binutils-gdb/gdb/value.c:1347
+ #2 0x555c497909cd in value_primitive_field(value*, long, int, type*) /home/simark/src/binutils-gdb/gdb/value.c:3126
+ #3 0x555c478f2eaa in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:333
+ #4 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513
+ #5 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #6 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513
+ #7 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #8 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513
+ #9 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #10 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383
+ #11 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438
+ #12 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632
+ #13 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048
+ #14 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151
+ #15 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335
+ #16 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513
+ #17 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #18 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383
+ #19 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438
+ #20 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632
+ #21 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048
+ #22 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151
+ #23 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335
+ #24 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383
+ #25 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438
+ #26 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632
+ #27 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048
+ #28 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151
+ #29 0x555c4760f04c in c_value_print(value*, ui_file*, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:587
+ #30 0x555c483ff954 in language_defn::value_print(value*, ui_file*, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:614
+ #31 0x555c49759f61 in value_print(value*, ui_file*, value_print_options const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1189
+ #32 0x555c48950f70 in print_formatted /home/simark/src/binutils-gdb/gdb/printcmd.c:337
+ #33 0x555c48958eda in print_value(value*, value_print_options const&) /home/simark/src/binutils-gdb/gdb/printcmd.c:1258
+ #34 0x555c48959891 in print_command_1 /home/simark/src/binutils-gdb/gdb/printcmd.c:1367
+ #35 0x555c4895a3df in print_command /home/simark/src/binutils-gdb/gdb/printcmd.c:1458
+ #36 0x555c4767f974 in do_simple_func /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:97
+ #37 0x555c47692e25 in cmd_func(cmd_list_element*, char const*, int) /home/simark/src/binutils-gdb/gdb/cli/cli-decode.c:2475
+ #38 0x555c4936107e in execute_command(char const*, int) /home/simark/src/binutils-gdb/gdb/top.c:670
+ #39 0x555c485f1bff in catch_command_errors /home/simark/src/binutils-gdb/gdb/main.c:523
+ #40 0x555c485f249c in execute_cmdargs /home/simark/src/binutils-gdb/gdb/main.c:618
+ #41 0x555c485f6677 in captured_main_1 /home/simark/src/binutils-gdb/gdb/main.c:1317
+ #42 0x555c485f6c83 in captured_main /home/simark/src/binutils-gdb/gdb/main.c:1338
+ #43 0x555c485f6d65 in gdb_main(captured_main_args*) /home/simark/src/binutils-gdb/gdb/main.c:1363
+ #44 0x555c46e41ba8 in main /home/simark/src/binutils-gdb/gdb/gdb.c:32
+ #45 0x7f71198bcb24 in __libc_start_main (/usr/lib/libc.so.6+0x27b24)
+ #46 0x555c46e4197d in _start (/home/simark/build/binutils-gdb-one-target/gdb/gdb+0x77f197d)
+
+ 0x6020000c52af is located 1 bytes to the left of 8-byte region [0x6020000c52b0,0x6020000c52b8)
+ allocated by thread T0 here:
+ #0 0x7f711b2b7459 in __interceptor_calloc /build/gcc/src/gcc/libsanitizer/asan/asan_malloc_linux.cpp:154
+ #1 0x555c470acdc9 in xcalloc /home/simark/src/binutils-gdb/gdb/alloc.c:100
+ #2 0x555c49b775cd in xzalloc(unsigned long) /home/simark/src/binutils-gdb/gdbsupport/common-utils.cc:29
+ #3 0x555c4977bdeb in allocate_value_contents /home/simark/src/binutils-gdb/gdb/value.c:1029
+ #4 0x555c4977be25 in allocate_value(type*) /home/simark/src/binutils-gdb/gdb/value.c:1040
+ #5 0x555c4979030d in value_primitive_field(value*, long, int, type*) /home/simark/src/binutils-gdb/gdb/value.c:3092
+ #6 0x555c478f6280 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:501
+ #7 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #8 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513
+ #9 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #10 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513
+ #11 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #12 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383
+ #13 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438
+ #14 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632
+ #15 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048
+ #16 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151
+ #17 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335
+ #18 0x555c478f63b2 in cp_print_value /home/simark/src/binutils-gdb/gdb/cp-valprint.c:513
+ #19 0x555c478f02ca in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:161
+ #20 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383
+ #21 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438
+ #22 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632
+ #23 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048
+ #24 0x555c49759b17 in common_val_print(value*, ui_file*, int, value_print_options const*, language_defn const*) /home/simark/src/binutils-gdb/gdb/valprint.c:1151
+ #25 0x555c478f2fcb in cp_print_value_fields(value*, ui_file*, int, value_print_options const*, type**, int) /home/simark/src/binutils-gdb/gdb/cp-valprint.c:335
+ #26 0x555c4760d45f in c_value_print_struct /home/simark/src/binutils-gdb/gdb/c-valprint.c:383
+ #27 0x555c4760df4c in c_value_print_inner(value*, ui_file*, int, value_print_options const*) /home/simark/src/binutils-gdb/gdb/c-valprint.c:438
+ #28 0x555c483ff9a7 in language_defn::value_print_inner(value*, ui_file*, int, value_print_options const*) const /home/simark/src/binutils-gdb/gdb/language.c:632
+ #29 0x555c49758b68 in do_val_print /home/simark/src/binutils-gdb/gdb/valprint.c:1048
+
+ Since there are some binaries with this in the wild, I think it would be
+ useful for GDB to work around this. I did the obvious simple thing, if
+ the DW_AT_data_member_location's value is -1, replace it with 0. I
+ added a producer check to only apply this fixup for GCC 11. The idea is
+ that if some other compiler ever uses a DW_AT_data_member_location value
+ of -1 by mistake, we don't know (before analyzing the bug at least) if
+ they did mean 0 or some other value. So I wouldn't want to apply the
+ fixup in that case.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28063
+ Change-Id: Ieef3459b0b9bbce8bdad838ba83b4b64e7269d42
+
+2022-01-27 Kevin Buettner <kevinb@redhat.com>
+
+ Fix GDB internal error by using text (instead of data) section offset
+ Fedora Rawhide is now using gcc-12.0. As part of updating to the
+ gcc-12.0 package set, Rawhide is also now using a version of libgcc_s
+ which lacks a .data section. This causes gdb to fail in the following
+ fashion while debugging a program (such as gdb) which uses libgcc_s:
+
+ (top-gdb) run
+ Starting program: rawhide-master/bld/gdb/gdb
+ ...
+ objfiles.h:467: internal-error: sect_index_data not initialized
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ ...
+
+ I snipped the backtrace from the above output. Instead, here's a
+ portion of a backtrace obtained using GDB's backtrace command.
+ (Obviously, in order to obtain it, I used a GDB which has been patched
+ with this commit.)
+
+ #0 internal_error (
+ file=0xc6a508 "gdb/objfiles.h", line=467,
+ fmt=0xc6a4e8 "sect_index_data not initialized")
+ at gdbsupport/errors.cc:51
+ #1 0x00000000005f9651 in objfile::data_section_offset (this=0x4fa48f0)
+ at gdb/objfiles.h:467
+ #2 0x000000000097c5f8 in relocate_address (address=0x17244, objfile=0x4fa48f0)
+ at gdb/stap-probe.c:1333
+ #3 0x000000000097c630 in stap_probe::get_relocated_address (this=0xa1a17a0,
+ objfile=0x4fa48f0)
+ at gdb/stap-probe.c:1341
+ #4 0x00000000004d7025 in create_exception_master_breakpoint_probe (
+ objfile=0x4fa48f0)
+ at gdb/breakpoint.c:3505
+ #5 0x00000000004d7426 in create_exception_master_breakpoint ()
+ at gdb/breakpoint.c:3575
+ #6 0x00000000004efcc1 in breakpoint_re_set ()
+ at gdb/breakpoint.c:13407
+ #7 0x0000000000956998 in solib_add (pattern=0x0, from_tty=0, readsyms=1)
+ at gdb/solib.c:1001
+ #8 0x00000000009576a8 in handle_solib_event ()
+ at gdb/solib.c:1269
+ ...
+
+ The function 'relocate_address' in gdb/stap-probe.c attempts to do
+ its "relocation" by using objfile->data_section_offset(). That
+ method, data_section_offset() is defined as follows in objfiles.h:
+
+ CORE_ADDR data_section_offset () const
+ {
+ return section_offsets[SECT_OFF_DATA (this)];
+ }
+
+ The internal error occurs when the SECT_OFF_DATA macro finds that the
+ 'sect_index_data' field is -1:
+
+ #define SECT_OFF_DATA(objfile) \
+ ((objfile->sect_index_data == -1) \
+ ? (internal_error (__FILE__, __LINE__, \
+ _("sect_index_data not initialized")), -1) \
+ : objfile->sect_index_data)
+
+ relocate_address() is obtaining the section offset in order to compute
+ a relocated address. For some ABIs, such as the System V ABI, the
+ section offsets will all be the same. So for those ABIs, it doesn't
+ matter which offset is used. However, other ABIs, such as the FDPIC
+ ABI, will have different offsets for the various sections. Thus, for
+ those ABIs, it is vital that this and other relocation code use the
+ correct offset.
+
+ In stap_probe::get_relocated_address, the address to which to add the
+ offset (thus forming the relocated address) is obtained via
+ this->get_address (); get_address is a getter for m_address in
+ probe.h. It's documented/defined as follows (also in probe.h):
+
+ /* The address where the probe is inserted, relative to
+ SECT_OFF_TEXT. */
+ CORE_ADDR m_address;
+
+ (Thanks to Tom Tromey for this observation.)
+
+ So, based on this, the current use of data_section_offset /
+ SECT_OFF_DATA is wrong. This relocation code should have been using
+ text_section_offset / SECT_OFF_TEXT all along. That being the
+ case, I've adjusted the stap-probe.c relocation code accordingly.
+
+ Searching the sources turned up one other use of data_section_offset,
+ in gdb/dtrace-probe.c, so I've updated that code as well. The same
+ reasoning presented above applies to this case too.
+
+ Summary:
+
+ * gdb/dtrace-probe.c (dtrace_probe::get_relocated_address):
+ Use method text_section_offset instead of data_section_offset.
+ * gdb/stap-probe.c (relocate_address): Likewise.
+
+2022-01-27 Markus Metzger <markus.t.metzger@intel.com>
+
+ gdb, remote, btrace: move switch_to_thread call right before xfer call
+ In remote_target::remote_btrace_maybe_reopen, we switch to the currently
+ iterated thread in order to set inferior_ptid for a subsequent xfer.
+
+ Move the switch_to_thread call directly before the target_read_stralloc
+ call to clarify why we need to switch threads.
+
+2022-01-27 Markus Metzger <markus.t.metzger@intel.com>
+
+ gdb, gdbserver: update thread identifier in enable_btrace target method
+ The enable_btrace target method takes a ptid_t to identify the thread on
+ which tracing shall be enabled.
+
+ Change this to thread_info * to avoid translating back and forth between
+ the two. This will be used in a subsequent patch.
+
+2022-01-27 Markus Metzger <markus.t.metzger@intel.com>
+
+ gdb, btrace: switch threads in remote_btrace_maybe_reopen()
+ In remote_btrace_maybe_reopen() we iterate over threads and use
+ set_general_thread() to set the thread from which to transfer the btrace
+ configuration.
+
+ This sets the remote general thread but does not affect inferior_ptid. On
+ the xfer request later on, remote_target::xfer_partial() again sets the
+ remote general thread to inferior_ptid, overwriting what
+ remote_btrace_maybe_reopen() had done.
+
+ In one case, this led to inferior_ptid being null_ptid when we tried to
+ enable tracing on a newly created thread inside a newly created process
+ during attach.
+
+ This, in turn, led to find_inferior_pid() asserting when we iterated over
+ threads in record_btrace_is_replaying(), which was called from
+ record_btrace_target::xfer_partial() when reading the btrace configuration
+ of the new thread to check whether it was already being recorded.
+
+ The bug was exposed by
+
+ 0618ae41497 gdb: optimize all_matching_threads_iterator
+
+ and found by
+
+ FAIL: gdb.btrace/enable-new-thread.exp: ... (GDB internal error)
+
+ Use switch_to_thread() in remote_btrace_maybe_reopen().
+
+2022-01-27 Markus Metzger <markus.t.metzger@intel.com>
+
+ gdb, btrace: rename record_btrace_enable_warn()
+ We use record_btrace_enable_warn() as the new-thread observer callback.
+ It is not used in other contexts.
+
+ Rename it to record_btrace_on_new_thread() to make its role more clear.
+
+2022-01-27 Nick Clifton <nickc@redhat.com>
+
+ Updated Swedish translation for the binutils subdirectory
+
+2022-01-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-26 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: handle non utf-8 characters when source highlighting
+ This commit adds support for source files that contain non utf-8
+ characters when performing source styling using the Python pygments
+ package. This does not change the behaviour of GDB when the GNU
+ Source Highlight library is used.
+
+ For the following problem description, assume that either GDB is built
+ without GNU Source Highlight support, of that this has been disabled
+ using 'maintenance set gnu-source-highlight enabled off'.
+
+ The initial problem reported was that a source file containing non
+ utf-8 characters would cause GDB to print a Python exception, and then
+ display the source without styling, e.g.:
+
+ Python Exception <class 'UnicodeDecodeError'>: 'utf-8' codec can't decode byte 0xc0 in position 142: invalid start byte
+ /* Source code here, without styling... */
+
+ Further, as the user steps through different source files, each time
+ the problematic source file was evicted from the source cache, and
+ then later reloaded, the exception would be printed again.
+
+ Finally, this problem is only present when using Python 3, this issue
+ is not present for Python 2.
+
+ What makes this especially frustrating is that GDB can clearly print
+ the source file contents, they're right there... If we disable
+ styling completely, or make use of the GNU Source Highlight library,
+ then everything is fine. So why is there an error when we try to
+ apply styling using Python?
+
+ The problem is the use of PyString_FromString (which is an alias for
+ PyUnicode_FromString in Python 3), this function converts a C string
+ into a either a Unicode object (Py3) or a str object (Py2). For
+ Python 2 there is no unicode encoding performed during this function
+ call, but for Python 3 the input is assumed to be a uft-8 encoding
+ string for the purpose of the conversion. And here of course, is the
+ problem, if the source file contains non utf-8 characters, then it
+ should not be treated as utf-8, but that's what we do, and that's why
+ we get an error.
+
+ My first thought when looking at this was to spot when the
+ PyString_FromString call failed with a UnicodeDecodeError and silently
+ ignore the error. This would mean that GDB would print the source
+ without styling, but would also avoid the annoying exception message.
+
+ However, I also make use of `pygmentize`, a command line wrapper
+ around the Python pygments module, which I use to apply syntax
+ highlighting in the output of `less`. And this command line wrapper
+ is quite happy to syntax highlight my source file that contains non
+ utf-8 characters, so it feels like the problem should be solvable.
+
+ It turns out that inside the pygments module there is already support
+ for guessing the encoding of the incoming file content, if the
+ incoming content is not already a Unicode string. This is what
+ happens for Python 2 where the incoming content is of `str` type.
+
+ We could try and make GDB smarter when it comes to converting C
+ strings into Python Unicode objects; this would probably require us to
+ just try a couple of different encoding schemes rather than just
+ giving up after utf-8.
+
+ However, I figure, why bother? The pygments module already does this
+ for us, and the colorize API is not part of the documented external
+ API of GDB. So, why not just change the colorize API, instead of the
+ content being a Unicode string (for Python 3), lets just make the
+ content be a bytes object. The pygments module can then take
+ responsibility for guessing the encoding.
+
+ So, currently, the colorize API receives a unicode object, and returns
+ a unicode object. I propose that the colorize API receive a bytes
+ object, and return a bytes object.
+
+2022-01-26 Tom Tromey <tom@tromey.com>
+
+ Remove global wrap_here function
+ This removes the global wrap_here function, so that future calls
+ cannot be introduced. Instead, all callers must use the method on the
+ appropriate ui_file.
+
+ This temporarily moves the implementation of this method to utils.c.
+ This will change once the remaining patches to untangle the pager have
+ been written.
+
+2022-01-26 Tom Tromey <tom@tromey.com>
+
+ Always call the wrap_here method
+ This changes all existing calls to wrap_here to call the method on the
+ appropriate ui_file instead. The choice of ui_file is determined by
+ context.
+
+2022-01-26 Tom Tromey <tom@tromey.com>
+
+ Add ui_file::wrap_here
+ Right now, wrap_here is a global function. In the long run, we'd like
+ output streams to be relatively self-contained objects, and having a
+ global function like this is counter to that goal. Also, existing
+ code freely mixes writes to some parameterized stream with calls to
+ wrap_here -- but wrap_here only really affects gdb_stdout, so this is
+ also incoherent.
+
+ This step is a patch toward making wrap_here more sane. It adds a
+ wrap_here method to ui_file and changes ui_out implementations to use
+ it.
+
+2022-01-26 Tom Tromey <tom@tromey.com>
+
+ Convert wrap_here to use integer parameter
+ I think it only really makes sense to call wrap_here with an argument
+ consisting solely of spaces. Given this, it seemed better to me that
+ the argument be an int, rather than a string. This patch is the
+ result. Much of it was written by a script.
+
+2022-01-26 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: improve the auto help text for gdb.Parameter
+ This commit attempts to improve the help text that is generated for
+ gdb.Parameter objects when the user fails to provide their own
+ documentation.
+
+ Documentation for a gdb.Parameter is currently pulled from two
+ sources: the class documentation string, and the set_doc/show_doc
+ class attributes. Thus, a fully documented parameter might look like
+ this:
+
+ class Param_All (gdb.Parameter):
+ """This is the class documentation string."""
+
+ show_doc = "Show the state of this parameter"
+ set_doc = "Set the state of this parameter"
+
+ def get_set_string (self):
+ val = "on"
+ if (self.value == False):
+ val = "off"
+ return "Test Parameter has been set to " + val
+
+ def __init__ (self, name):
+ super (Param_All, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+ self._value = True
+
+ Param_All ('param-all')
+
+ Then in GDB we see this:
+
+ (gdb) help set param-all
+ Set the state of this parameter
+ This is the class documentation string.
+
+ Which is fine. But, if the user skips both of the documentation parts
+ like this:
+
+ class Param_None (gdb.Parameter):
+
+ def get_set_string (self):
+ val = "on"
+ if (self.value == False):
+ val = "off"
+ return "Test Parameter has been set to " + val
+
+ def __init__ (self, name):
+ super (Param_None, self).__init__ (name, gdb.COMMAND_DATA, gdb.PARAM_BOOLEAN)
+ self._value = True
+
+ Param_None ('param-none')
+
+ Now in GDB we see this:
+
+ (gdb) help set param-none
+ This command is not documented.
+ This command is not documented.
+
+ That's not great, the duplicated text looks a bit weird. If we drop
+ different parts we get different results. Here's what we get if the
+ user drops the set_doc and show_doc attributes:
+
+ (gdb) help set param-doc
+ This command is not documented.
+ This is the class documentation string.
+
+ That kind of sucks, we say it's undocumented, then proceed to print
+ the documentation. Finally, if we drop the class documentation but
+ keep the set_doc and show_doc:
+
+ (gdb) help set param-set-show
+ Set the state of this parameter
+ This command is not documented.
+
+ That seems OK.
+
+ So, I think there's room for improvement.
+
+ With this patch, for the four cases above we now see this:
+
+ # All values provided by the user, no change in this case:
+ (gdb) help set param-all
+ Set the state of this parameter
+ This is the class documentation string.
+
+ # Nothing provided by the user, the first string is now different:
+ (gdb) help set param-none
+ Set the current value of 'param-none'.
+ This command is not documented.
+
+ # Only the class documentation is provided, the first string is
+ # changed as in the previous case:
+ (gdb) help set param-doc
+ Set the current value of 'param-doc'.
+ This is the class documentation string.
+
+ # Only the set_doc and show_doc are provided, this case is unchanged
+ # from before the patch:
+ (gdb) help set param-set-show
+ Set the state of this parameter
+ This command is not documented.
+
+ The one place where this change might be considered a negative is when
+ dealing with prefix commands. If we create a prefix command but don't
+ supply the set_doc / show_doc strings, then this is what we saw before
+ my patch:
+
+ (gdb) python Param_None ('print param-none')
+ (gdb) help set print
+ set print, set pr, set p
+ Generic command for setting how things print.
+
+ List of set print subcommands:
+
+ ... snip ...
+ set print param-none -- This command is not documented.
+ ... snip ...
+
+ And after my patch:
+
+ (gdb) python Param_None ('print param-none')
+ (gdb) help set print
+ set print, set pr, set p
+ Generic command for setting how things print.
+
+ List of set print subcommands:
+
+ ... snip ...
+ set print param-none -- Set the current value of 'print param-none'.
+ ... snip ...
+
+ This seems slightly less helpful than before, but I don't think its
+ terrible.
+
+ Additionally, I've changed what we print when the get_show_string
+ method is not provided in Python.
+
+ Back when gdb.Parameter was first added to GDB, we didn't provide a
+ show function when registering the internal command object within
+ GDB. As a result, GDB would make use of its "magic" mangling of the
+ show_doc string to create a sentence that would display the current
+ value (see deprecated_show_value_hack in cli/cli-setshow.c).
+
+ However, when we added support for the get_show_string method to
+ gdb.Parameter, there was an attempt to maintain backward compatibility
+ by displaying the show_doc string with the current value appended, see
+ get_show_value in py-param.c. Unfortunately, this isn't anywhere
+ close to what deprecated_show_value_hack does, and the results are
+ pretty poor, for example, this is GDB before my patch:
+
+ (gdb) show param-none
+ This command is not documented. off
+
+ I think we can all agree that this is pretty bad.
+
+ After my patch, we how show this:
+
+ (gdb) show param-none
+ The current value of 'param-none' is "off".
+
+ Which at least is a real sentence, even if it's not very informative.
+
+ This patch does change the way that the Python API behaves slightly,
+ but only in the cases when the user has missed providing GDB with some
+ information. In most cases I think the new behaviour is a lot better,
+ there's the one case (noted above) which is a bit iffy, but I think is
+ still OK.
+
+ I've updated the existing gdb.python/py-parameter.exp test to cover
+ the modified behaviour.
+
+ Finally, I've updated the documentation to (I hope) make it clearer
+ how the various bits of help text come together.
+
+2022-01-26 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: add gdb.history_count function
+ Add a new function gdb.history_count to the Python api, this function
+ returns an integer, the number of items in GDB's value history.
+
+ This is useful if you want to pull items from the history by their
+ absolute number, for example, if you wanted to show a complete history
+ list. Previously we could figure out how many items are in the
+ history list by trying to fetch the items, and then catching the
+ exception when the item is not available, but having this function
+ seems nicer.
+
+2022-01-26 Tom Tromey <tromey@adacore.com>
+
+ Remove unused declaration
+ This removes an unused declaration from top.h. This type is not
+ defined anywhere.
+
+2022-01-26 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: convert maintenance target-async and target-non-stop settings to callbacks
+ This simplifies things a bit, as we don't need two variables and think
+ about reverting target_async_permitted_1 and target_non_stop_enabled_1
+ values if we can't change the setting.
+
+ Change-Id: I36acab045dacf02ae1988486cfdb27c1dff309f6
+
+2022-01-26 Keith Seitz <keiths@redhat.com>
+
+ Reference array of structs instead of first member during memcpy
+ aarch64-tdep.c defines the following macro:
+
+ #define MEM_ALLOC(MEMS, LENGTH, RECORD_BUF) \
+ do \
+ { \
+ unsigned int mem_len = LENGTH; \
+ if (mem_len) \
+ { \
+ MEMS = XNEWVEC (struct aarch64_mem_r, mem_len); \
+ memcpy(&MEMS->len, &RECORD_BUF[0], \
+ sizeof(struct aarch64_mem_r) * LENGTH); \
+ } \
+ } \
+ while (0)
+
+ This is simlpy allocating a new array and copying it. However, for
+ the destination address, it is actually copying into the first member
+ of the first element of the array (`&MEMS->len"). This elicits a
+ warning with GCC 12:
+
+ ../../binutils-gdb/gdb/aarch64-tdep.c: In function ‘int aarch64_process_record(gdbarch*, regcache*, CORE_ADDR)’:
+ ../../binutils-gdb/gdb/aarch64-tdep.c:3711:23: error: writing 16 bytes into a region of size 8 [-Werror=stringop-overflow=]
+ 3711 | memcpy(&MEMS->len, &RECORD_BUF[0], \
+ | ^
+ ../../binutils-gdb/gdb/aarch64-tdep.c:4394:3: note: in expansion of macro ‘MEM_ALLOC’
+ 4394 | MEM_ALLOC (aarch64_insn_r->aarch64_mems, aarch64_insn_r->mem_rec_count,
+ | ^~~~~~~~~
+ ../../binutils-gdb/gdb/aarch64-tdep.c:3721:12: note: destination object ‘aarch64_mem_r::len’ of size 8
+ 3721 | uint64_t len; /* Record length. */
+ | ^~~
+
+ The simple fix is to reference the array, `MEMS' as the destination of the copy.
+
+ Tested by rebuilding.
+
+
+ # Please enter the commit message for your changes. Lines starting
+ # with '#' will be kept; you may remove them yourself if you want to.
+ # An empty message aborts the commit.
+ #
+ # Date: Tue Jan 25 08:28:32 2022 -0800
+ #
+ # On branch master
+ # Your branch is ahead of 'origin/master' by 1 commit.
+ # (use "git push" to publish your local commits)
+ #
+ # Changes to be committed:
+ # modified: aarch64-tdep.c
+ #
+
+2022-01-26 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add string_file::release method
+ A common pattern for string_file is to want to move out the internal
+ string buffer, because it is the result of the computation that we want
+ to return. It is the reason why string_file::string returns a non-const
+ reference, as explained in the comment. I think it would make sense to
+ have a dedicated method for that instead and make string_file::string
+ return a const reference.
+
+ This allows removing the explicit std::move in the typical case. Note
+ that compile_program::compute was missing a move, meaning that the
+ resulting string was copied. With the new version, it's not possible to
+ forget to move.
+
+ Change-Id: Ieaefa35b73daa7930b2f3a26988b6e3b4121bb79
+
+2022-01-26 Tom Tromey <tromey@adacore.com>
+
+ Add a way to temporarily set a gdb parameter from Python
+ It's sometimes useful to temporarily set some gdb parameter from
+ Python. Now that the 'endian' crash is fixed, and now that the
+ current language is no longer captured by the Python layer, it seems
+ reasonable to add a helper function for this situation.
+
+ This adds a new gdb.with_parameter function. This creates a context
+ manager which temporarily sets some parameter to a specified value.
+ The old value is restored when the context is exited. This is most
+ useful with the Python "with" statement:
+
+ with gdb.with_parameter('language', 'ada'):
+ ... do Ada stuff
+
+ This also adds a simple function to set a parameter,
+ gdb.set_parameter, as suggested by Andrew.
+
+ This is PR python/10790.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=10790
+
+2022-01-26 Tom Tromey <tromey@adacore.com>
+
+ Fix another crash with gdb parameters in Python
+ While looking into the language-capturing issue, I found another way
+ to crash gdb using parameters from Python:
+
+ (gdb) python print(gdb.parameter('endian'))
+
+ (This is related to PR python/12188, though this patch isn't going to
+ fix what that bug is really about.)
+
+ The problem here is that the global variable that underlies the
+ "endian" parameter is initialized to NULL. However, that's not a
+ valid value for an "enum" set/show parameter.
+
+ My understanding is that, in gdb, an "enum" parameter's underlying
+ variable must have a value that is "==" (not just strcmp-equal) to one
+ of the values coming from the enum array. This invariant is relied on
+ in various places.
+
+ I started this patch by fixing the problem with "endian". Then I
+ added some assertions to add_setshow_enum_cmd to try to catch other
+ problems of the same type.
+
+ This patch fixes all the problems that I found. I also looked at all
+ the calls to add_setshow_enum_cmd to ensure that they were all
+ included in the gdb I tested. I think they are: there are no calls in
+ nat-* files, or in remote-sim.c; and I was trying a build with all
+ targets, Python, and Guile enabled.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=12188
+
+2022-01-26 Tom Tromey <tromey@adacore.com>
+
+ Change how Python architecture and language are handled
+ Currently, gdb's Python layer captures the current architecture and
+ language when "entering" Python code. This has some undesirable
+ effects, and so this series changes how this is handled.
+
+ First, there is code like this:
+
+ gdbpy_enter enter_py (python_gdbarch, python_language);
+
+ This is incorrect, because both of these are NULL when not otherwise
+ assigned. This can cause crashes in some cases -- I've added one to
+ the test suite. (Note that this crasher is just an example, other
+ ones along the same lines are possible.)
+
+ Second, when the language is captured in this way, it means that
+ Python code cannot affect the current language for its own purposes.
+ It's reasonable to want to write code like this:
+
+ gdb.execute('set language mumble')
+ ... stuff using the current language
+ gdb.execute('set language previous-value')
+
+ However, this won't actually work, because the language is captured on
+ entry. I've added a test to show this as well.
+
+ This patch changes gdb to try to avoid capturing the current values.
+ The Python concept of the current gdbarch is only set in those few
+ cases where a non-default value is computed or needed; and the
+ language is not captured at all -- instead, in the cases where it's
+ required, the current language is temporarily changed.
+
+2022-01-26 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Make bfd.stamp depend on source bfd.texi
+ Make bfd.stamp depend on source bfd.texi to avoid regenerating
+ doc/bfd.info for each make run.
+
+ PR binutils/28807
+ * Makefile.in: Regenerate.
+ * doc/local.mk (%D%/bfd.stamp): Depend on $(srcdir)/%D%/bfd.texi.
+
+2022-01-26 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Rewrite lang_size_relro_segment_1
+ 1. Compute the desired PT_GNU_RELRO segment base and find the maximum
+ section alignment of sections starting from the PT_GNU_RELRO segment.
+ 2. Find the first preceding load section.
+ 3. Don't add the 1-page gap between the first preceding load section and
+ the relro segment if the maximum page size >= the maximum section
+ alignment. Align the PT_GNU_RELRO segment first. Subtract the maximum
+ page size if therer is still a 1-page gap.
+
+ PR ld/28743
+ PR ld/28819
+ * ldlang.c (lang_size_relro_segment_1): Rewrite.
+ * testsuite/ld-x86-64/pr28743-1.d: New file.
+ * testsuite/ld-x86-64/pr28743-1.s: Likewise.
+ * testsuite/ld-x86-64/x86-64.exp: Run pr28743-1.
+
+2022-01-26 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/testsuite: Ensure constant test name in gdb.base/break-interp.exp
+ When running the testsuite, I have lines similar to the following in the
+ gdb.sum file:
+
+ ~~~
+ PASS: gdb.base/break-interp.exp: ldprelink=NO: ldsepdebug=NO: first backtrace: p /x 0x7f283d2f0fd1
+ ...
+ PASS: gdb.base/break-interp.exp: ldprelink=NO: ldsepdebug=NO: binprelink=NO: binsepdebug=NO: binpie=NO: INNER: first backtrace: p /x 0x7f00de0317a5
+ ...
+ ~~~
+
+ The address part of the command might change between execution of the
+ test, which adds noise to a diff between two .sum files.
+
+ This patch changes to test name to "p /x $pc" in order to have constant
+ test name.
+
+ Tested on x86_64-Linux.
+
+ Change-Id: I973c1237a084dd6d424276443cbf0920533c9a21
+
+2022-01-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-25 Tom Tromey <tom@tromey.com>
+
+ Always print the "host libthread-db" message to stdout
+ linux-thread-db.c has a bit of unusual code that unconditionally
+ prints a message, but decides whether to print to gdb_stdout or
+ gdb_stdlog based on a debug flag. It seems better to me to simply
+ always print this; and this is the only spot in gdb where we
+ conditionally pass gdb_stdout to one of the f*_unfiltered functions.
+
+2022-01-25 Tom Tromey <tom@tromey.com>
+
+ Reduce explicit use of gdb_stdout
+ In an earlier version of the pager rewrite series, it was important to
+ audit unfiltered output calls to see which were truly necessary.
+
+ This is no longer necessary, but it still seems like a decent cleanup
+ to change calls to avoid explicitly passing gdb_stdout. That is,
+ rather than using something like fprintf_unfiltered with gdb_stdout,
+ the code ought to use plain printf_unfiltered instead.
+
+ This patch makes this change. I went ahead and converted all the
+ _filtered calls I could find, as well, for the same clarity.
+
+2022-01-25 Tom Tromey <tom@tromey.com>
+
+ Sent timing stats to gdb_stdlog
+ This changes the time / space / symtab per-command statistics code to
+ send its output to gdb_stdlog rather than gdb_stdout. This seems
+ slightly more correct to me.
+
+ Send some error output to gdb_stderr
+ This changes some code to send some error messages to gdb_stderr
+ rather than gdb_stdout.
+
+2022-01-25 Klaus Ziegler <klausz@haus-gisela.de>
+
+ Fix a probem building the binutils on SPARC/amd64
+ PR 28816
+ * elf/common.h (AT_SUN_HWCAP): Make definition conditional.
+
+2022-01-25 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Regenerate Makefile.in
+ * Makefile.in: Regenerate.
+
+2022-01-25 Mike Frysinger <vapier@gentoo.org>
+
+ gold: drop old cygnus install hack
+ The gold subdir doesn't actually have a manual, so this hack doesn't
+ do anything. Plus the automake cygnus option was removed years ago
+ by Simon in d0ac1c44885daf68f631befa37e ("Bump to autoconf 2.69 and
+ automake 1.15.1"). So delete it here.
+
+ gas: drop old cygnus install hack
+ This was needed when gas was using the automake cygnus option, but
+ this was removed years ago by Simon in d0ac1c44885daf68f631befa37e
+ ("Bump to autoconf 2.69 and automake 1.15.1"). So delete it here.
+ The info pages are already & still installed by default w/out it.
+
+2022-01-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-24 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Update doc/local.mk
+ PR binutils/28807
+ * Makefile.in: Regenerate.
+ * doc/local.mk (AM_MAKEINFOFLAGS): Add -I "$(srcdir)/%D%" -I %D%.
+ (TEXI2DVI): New.
+ (%D%/bfd.texi): Removed.
+ (doc/bfd/index.html): Remove -I$(srcdir). Replace bfd.texi with
+ %D%/bfd.texi.
+
+2022-01-24 Roland McGrath <mcgrathr@google.com>
+
+ bfd/doc: Fix racy build failure from missing mkdir
+ bfd/
+ * doc/local.mk (%D%/bfdver.texi): Add mkdir command.
+
+2022-01-24 Martin Sebor <msebor@redhat.com>
+
+ Fix a proble building the libiberty library with gcc-12.
+ PR 28779
+ * regex.c: Suppress -Wuse-after-free.
+
+2022-01-24 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: improve description for Window.click on Python TUI windows
+ The description of the Window.click method doesn't mention where the
+ coordinates are anchored (it's the top left corner).
+
+ This minor tweak just mentions this point.
+
+2022-01-24 Nick Clifton <nickc@redhat.com>
+
+ Update Bulgarian, French, Romaniam and Ukranian translation for some of the sub-directories
+
+2022-01-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-23 Tom Tromey <tom@tromey.com>
+
+ Simplify some Rust expression-evaluation code
+ A few Rust operations do a bit of work in their 'evaluate' functions
+ and then call another function -- but are also the only caller. This
+ patch simplifies this code by removing the extra layer.
+
+ Tested on x86-64 Fedora 34. I'm checking this in.
+
+2022-01-23 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Partially revert commit 0e3839bde6f
+ Partially revert
+
+ commit 0e3839bde6f93e1e3eefce815be3636e3d81054d
+ Author: H.J. Lu <hjl.tools@gmail.com>
+ Date: Sun Jan 23 07:29:27 2022 -0800
+
+ bfd: Properly install library and header files
+
+ PR binutils/28807
+ * Makefile.am: Revert bfdlib_LTLIBRARIES and bfdinclude_HEADERS
+ changes.
+ * Makefile.in: Regenerate.
+
+2022-01-23 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Properly install library and header files
+ Rename bfdlib_LTLIBRARIES and bfdinclude_HEADERS to lib_LTLIBRARIES and
+ include_HEADERS to fix the missing installed library and header files in
+ bfd caused by
+
+ commit bd32be01c997f686ab0b53f0640eaa0aeb61fbd3
+ Author: Mike Frysinger <vapier@gentoo.org>
+ Date: Fri Dec 3 00:23:20 2021 -0500
+
+ bfd: merge doc subdir up a level
+
+ PR binutils/28807
+ * Makefile.am (bfdlib_LTLIBRARIES): Renamed to ...
+ (lib_LTLIBRARIES): This.
+ (bfdinclude_HEADERS): Renamed to ...
+ (include_HEADERS): This.
+ * Makefile.in: Regenerate.
+ * doc/local.mk (install): Removed.
+
+2022-01-23 H.J. Lu <hjl.tools@gmail.com>
+
+ Regenerate Makefile.in files with automake 1.15.1
+ Regenerate Makefile.in files with the unmodified automake 1.15.1 to
+ remove
+
+ runstatedir = @runstatedir@
+
+ bfd/
+
+ * Makefile.in: Regenerate.
+
+ binutils/
+
+ * Makefile.in: Regenerate.
+
+ gas/
+
+ * Makefile.in: Regenerate.
+
+ gold/
+
+ * Makefile.in: Regenerate.
+ * testsuite/Makefile.in: Likewise.
+
+ gprof/
+
+ * Makefile.in: Regenerate.
+
+ ld/
+
+ * Makefile.in: Regenerate.
+
+ opcodes/
+
+ * Makefile.in: Regenerate.
+
+2022-01-23 H.J. Lu <hjl.tools@gmail.com>
+
+ Regenerate configure files with autoconf 2.69
+ Regenerate configure files with the unmodified autoconf 2.69 to remove
+
+ --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
+
+ bfd/
+
+ * configure: Regenerate.
+
+ binutils/
+
+ * configure: Regenerate.
+
+ gas/
+
+ * configure: Regenerate.
+
+ gold/
+
+ * configure: Regenerate.
+
+ gprof/
+
+ * configure: Regenerate.
+
+ ld/
+
+ * configure: Regenerate.
+
+ opcodes/
+
+ * configure: Regenerate.
+
+2022-01-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-22 Mike Frysinger <vapier@gentoo.org>
+
+ bfd: merge doc subdir up a level
+ This avoids a recursive make into the doc subdir and speeds up the
+ build slightly. It also allows for more parallelism.
+
+ bfd: rename core.texi to corefile.texi
+ This is a generated file name from a correspondingly named C file.
+ Rename it to avoid unique build rules since there's no difference
+ to the generated manual.
+
+ bfd: replace doc header generation with pattern rules
+ This unifies boilerplate rules for most files with pattern rules.
+
+2022-01-22 Martin Storsj? <martin@martin.st>
+
+ Allow inferring tmp_prefix from the dll name from a def file.
+
+2022-01-22 Alexander von Gluck IV <kallisti5@unixzen.com>
+
+ Adjust default page sizes for haiku arm.
+ * configure.tgt (arm-haiku): Fix typo.
+ * emulparams/armelf_haiku.su (MAXPAGESIZE): Use the default value.
+ (COMMONPAGESIZE): Likewise.
+
+2022-01-22 Nick Clifton <nickc@redhat.com>
+
+ Update release makeing script with new release numbers
+
+ Change version number to 2.38.50 and regenerate files
+
+ Add markers for 2.38 branch
+
+2022-01-22 Lifang Xia <lifang_xia@linux.alibaba.com>
+
+ RISC-V: create new frag after alignment.
+ PR 28793:
+
+ The alignment may be removed in linker. We need to create new frag after
+ alignment to prevent the assembler from computing static offsets.
+
+ gas/
+ * config/tc-riscv.c (riscv_frag_align_code): Create new frag.
+
+2022-01-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-21 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: include gdbsupport/buildargv.h in ser-mingw.c
+ Fixes:
+
+ CXX ser-mingw.o
+ /home/simark/src/binutils-gdb/gdb/ser-mingw.c: In function ‘int pipe_windows_open(serial*, const char*)’:
+ /home/simark/src/binutils-gdb/gdb/ser-mingw.c:870:3: error: ‘gdb_argv’ was not declared in this scope
+ 870 | gdb_argv argv (name);
+ | ^~~~~~~~
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28802
+ Change-Id: I7f3e8ec5f9ca8582d587545fdf6b69901259f199
+
+2022-01-21 Nick Clifton <nickc@redhat.com>
+
+ Updated Serbian translation for the ld sub-directory
+
+2022-01-21 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: fill in two missing @r
+ I noticed two places in the docs where we appear to be missing @r.
+ makeinfo seems to do the correct things despite these being
+ missing (at least, I couldn't see any difference in the pdf or info
+ output), but it doesn't hurt to have the @r in place.
+
+2022-01-21 Mike Frysinger <vapier@gentoo.org>
+
+ drop old unused stamp-h.in file
+ This was needed by ancient versions of automake, but that hasn't been
+ the case since at least automake-1.5, so punt this from the tree.
+
+2022-01-21 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport/gdb_regex.cc: replace defs.h include with common-defs.h
+ This was forgotten when gdb_regex was moved from gdb to gdbsupport.
+
+ Change-Id: I73b446f71861cabbf7afdb7408ef9d59fa64b804
+
+2022-01-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-20 Tom Tromey <tromey@adacore.com>
+
+ Avoid bad breakpoints with --gc-sections
+ We found a case where --gc-sections can cause gdb to set an invalid
+ breakpoint. In the included test case, gdb will set a breakpoint with
+ two locations, one of which is 0x0.
+
+ The code in lnp_state_machine::check_line_address is intended to
+ filter out this sort of problem, but in this case, the entire CU is
+ empty, causing unrelocated_lowpc==0x0 -- which circumvents the check.
+
+ It seems to me that if a CU is empty like this, then it is ok to
+ simply ignore the line table, as there won't be any locations anyway.
+
+2022-01-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-19 Maciej W. Rozycki <macro@embecosm.com>
+
+ Add `set print array-indexes' tests for C/C++ arrays
+ Add `set print array-indexes' tests for C/C++ arrays, complementing one
+ for Fortran arrays.
+
+2022-01-19 Maciej W. Rozycki <macro@embecosm.com>
+
+ Respect `set print array-indexes' with Fortran arrays
+ Add `set print array-indexes' handling for Fortran arrays. Currently
+ the setting is ignored and indices are never shown.
+
+ Keep track of the most recent index handled so that any outstanding
+ repeated elements printed when the limit set by `set print elements' is
+ hit have the correct index shown.
+
+ Output now looks like:
+
+ (gdb) set print array-indexes on
+ (gdb) print array_1d
+ $1 = ((-2) = 1, (-1) = 1, (0) = 1, (1) = 1, (2) = 1)
+ (gdb) set print repeats 4
+ (gdb) set print elements 12
+ (gdb) print array_2d
+ $2 = ((-2) = ((-2) = 2, <repeats 5 times>) (-1) = ((-2) = 2, <repeats 5 times>) (0) = ((-2) = 2, (-1) = 2, ...) ...)
+ (gdb)
+
+ for a 5-element vector and a 5 by 5 array filled with the value of 2.
+
+2022-01-19 Maciej W. Rozycki <macro@embecosm.com>
+
+ Add `set print repeats' tests for C/C++ arrays
+ Add `set print repeats' tests for C/C++ arrays, complementing one for
+ Fortran arrays and covering the different interpretation of the `set
+ print elements' setting in particular where the per-dimension count of
+ the elements handled is matched against the trigger rather than the
+ total element count as with Fortran arrays.
+
+2022-01-19 Maciej W. Rozycki <macro@embecosm.com>
+
+ Respect `set print repeats' with Fortran arrays
+ Implement `set print repeats' handling for Fortran arrays. Currently
+ the setting is ignored and always treated as if no limit was set.
+
+ Unlike the generic array walker implemented decades ago the Fortran one
+ is a proper C++ class. Rather than trying to mimic the old walker then,
+ which turned out a bit of a challenge where interacting with the `set
+ print elements' setting, write it entirely from scratch, by adding an
+ extra specialization handler method for processing dimensions other than
+ the innermost one and letting the specialization class call the `walk_1'
+ method from the handler as it sees fit. This way repeats can be tracked
+ and the next inner dimension recursed into as a need arises only, or
+ unconditionally in the base class.
+
+ Keep track of the dimension number being handled in the class rather as
+ a parameter to the walker so that it does not have to be passed across
+ by the specialization class.
+
+ Use per-dimension element count tracking, needed to terminate processing
+ early when the limit set by `set print elements' is hit. This requires
+ extra care too where the limit triggers exactly where another element
+ that is a subarray begins. In that case rather than recursing we need
+ to terminate processing or lone `(...)' would be printed. Additionally
+ if the skipped element is the last one in the current dimension we need
+ to print `...' by hand, because `continue_walking' won't print it at the
+ upper level, because it can see the last element has already been taken
+ care of.
+
+ Preserve the existing semantics of `set print elements' where the total
+ count of the elements handled is matched against the trigger level which
+ is unlike with the C/C++ array printer where the per-dimension element
+ count is used instead.
+
+ Output now looks like:
+
+ (gdb) set print repeats 4
+ (gdb) print array_2d
+ $1 = ((2, <repeats 5 times>) <repeats 5 times>)
+ (gdb) set print elements 12
+ (gdb) print array_2d
+ $2 = ((2, <repeats 5 times>) (2, <repeats 5 times>) (2, 2, ...) ...)
+ (gdb)
+
+ for a 5 by 5 array filled with the value of 2.
+
+ Amend existing test cases accordingly that rely on the current incorrect
+ behavior and explicitly request that there be no limit for printing
+ repeated elements there.
+
+ Add suitable test cases as well covering sliced arrays in particular.
+
+ Co-Authored-By: Andrew Burgess <andrew.burgess@embecosm.com>
+
+2022-01-19 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Add include for gdb_argv.
+
+2022-01-19 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 DT_RELR ELFv1
+ More fun with R_PPC64_NONE found in .opd. Fixed by the
+ allocate_dynrelocs and ppc64_elf_size_dynamic_sections changes, and
+ since we are doing ifunc, opd and SYMBOL_REFERENCES_LOCAL tests later,
+ don't duplicate that work in check_relocs.
+
+ * elf64-ppc.c (ppc64_elf_check_relocs): Remove opd and ifunc
+ conditions for rel_count.
+ (dec_dynrel_count): Likewise.
+ (allocate_dynrelocs): Test for opd and ifunc when allocating
+ relative relocs.
+ (ppc64_elf_size_dynamic_sections): Likewise.
+
+2022-01-19 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 DT_RELR local PLT
+ Similarly to the local GOT case.
+
+ * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Don't allocate
+ space for PLT relocs against local syms when enable_dt_relr.
+
+2022-01-19 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 DT_RELR local GOT
+ Fixes another case where we end up with superfluous R_PPC64_NONE.
+
+ * elf64-ppc.c (ppc64_elf_size_dynamic_sections): Don't allocate
+ space for GOT relocs against non-TLS local syms when enable_dt_relr.
+ (ppc64_elf_layout_multitoc): Likewise.
+
+2022-01-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-18 Alan Modra <amodra@gmail.com>
+
+ Re: PowerPC64 DT_RELR
+ HJ: "There are 238 R_PPC64_NONEs in libc.so.6 alone."
+ Indeed, let's make them go away. I had the SYMBOL_REFERENCES_LOCAL
+ test in the wrong place. check_relocs is too early to know whether a
+ symbol is dynamic in a shared library. Lots of glibc symbols are made
+ local by version script, but that doesn't happen until
+ size_dynamic_sections.
+
+ * elf64-ppc.c (ppc64_elf_check_relocs): Don't count relative relocs
+ here depending on SYMBOL_REFERENCES_LOCAL.
+ (dec_dynrel_count): Likewise.
+ (allocate_dynrelocs): Do so here instead.
+
+2022-01-18 Tom Tromey <tom@tromey.com>
+
+ Fix the remote-sim.c build
+ My earlier patch to move gdb_argv broke the remote-sim.c build. This
+ patch fixes the bug. I'm checking it in.
+
+2022-01-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver: introduce remote_debug_printf
+ Add remote_debug_printf, and use it for all debug messages controlled by
+ remote_debug.
+
+ Change remote_debug to be a bool, which is trivial in this case.
+
+ Change-Id: I90de13cb892faec3830047b571661822b126d6e8
+
+2022-01-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver: introduce threads_debug_printf, THREADS_SCOPED_DEBUG_ENTER_EXIT
+ Add the threads_debug_printf and THREADS_SCOPED_DEBUG_ENTER_EXIT, which
+ use the logging infrastructure from gdbsupport/common-debug.h. Replace
+ all debug_print uses that are predicated by debug_threads with
+ threads_dethreads_debug_printf. Replace uses of the debug_enter and
+ debug_exit macros with THREADS_SCOPED_DEBUG_ENTER_EXIT, which serves
+ essentially the same purpose, but allows showing what comes between the
+ enter and the exit in an indented form.
+
+ Note that "threads" debug is currently used for a bit of everything in
+ GDBserver, not only threads related stuff. It should ideally be cleaned
+ up and separated logically as is done in GDB, but that's out of the
+ scope of this patch.
+
+ Change-Id: I2d4546464462cb4c16f7f1168c5cec5a89f2289a
+
+2022-01-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver: turn debug_threads into a boolean
+ debug_threads is always used as a boolean. Except in ax.cc and
+ tracepoint.cc. These files have their own macros that use
+ debug_threads, and have a concept of verbosity level. But they both
+ have a single level, so it's just a boolean in the end.
+
+ Remove this concept of level. If we ever want to re-introduce it, I
+ think it will be better implemented in a more common location.
+
+ Change debug_threads to bool and adjust some users that were treating it
+ as an int.
+
+ Change-Id: I137f596eaf763a08c977dd74417969cedfee9ecf
+
+2022-01-18 Tom Tromey <tom@tromey.com>
+
+ Simplify Ada catchpoints
+ All the Ada catchpoints use the same breakpoint_ops contents, because
+ the catchpoint itself records its kind. This patch simplifies the
+ code by removing the redundant ops structures.
+
+ Move "catch exec" to a new file
+ The "catch exec" code is reasonably self-contained, and so this patch
+ moves it out of breakpoint.c (the second largest source file in gdb)
+ and into a new file, break-catch-exec.c.
+
+ Move "catch fork" to a new file
+ The "catch fork" code is reasonably self-contained, and so this patch
+ moves it out of breakpoint.c (the second largest source file in gdb)
+ and into a new file, break-catch-fork.c.
+
+ Unify "catch fork" and "catch vfork"
+ I noticed that "catch fork" and "catch vfork" are nearly identical.
+ This patch simplifies the code by unifying these two cases.
+
+ Move gdb_regex to gdbsupport
+ This moves the gdb_regex convenience class to gdbsupport.
+
+ Introduce gdb-hashtab module in gdbsupport
+ gdb has some extensions and helpers for working with the libiberty
+ hash table. This patch consolidates these and moves them to
+ gdbsupport.
+
+ Move gdb obstack code to gdbsupport
+ This moves the gdb-specific obstack code -- both extensions like
+ obconcat and obstack_strdup, and things like auto_obstack -- to
+ gdbsupport.
+
+ Move gdb_argv to gdbsupport
+ This moves the gdb_argv class to a new header in gdbsupport.
+
+ Simplify event_location_probe
+ event_location_probe currently stores two strings, but really only
+ needs one. This patch simplifies it and removes some unnecessary
+ copies as well.
+
+ Use std::string in event_location
+ This changes event_location to use std::string, removing some manual
+ memory management, and an unnecessary string copy.
+
+ Split event_location into subclasses
+ event_location uses the old C-style discriminated union approach.
+ However, it's better to use subclassing, as this makes the code
+ clearer and removes some chances for error. This also enables future
+ cleanups to avoid manual memory management and copies.
+
+ Remove EL_* macros from location.c
+ This patch removes the old-style EL_* macros from location.c. This
+ cleans up the code by itself, IMO, but also enables further cleanups
+ in subsequent patches.
+
+ Boolify explicit_to_string_internal
+ This changes explicit_to_string_internal to use 'bool' rather than
+ 'int'.
+
+ Remove a use of xfree in location.c
+ This small cleanup removes a use of xfree from location.c, by
+ switching to unique_xmalloc_ptr. One function is only used in
+ location.c, so it is made static. And, another function is changed to
+ avoid a copy.
+
+2022-01-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use ptid_t::to_string instead of target_pid_to_str in debug statements
+ Same idea as 0fab79556484 ("gdb: use ptid_t::to_string in infrun debug
+ messages"), but throughout GDB.
+
+ Change-Id: I62ba36eaef29935316d7187b9b13d7b88491acc1
+
+2022-01-18 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: preserve `|` in connection details string
+ Consider this GDB session:
+
+ $ gdb -q
+ (gdb) target remote | gdbserver - ~/tmp/hello.x
+ Remote debugging using | gdbserver - ~/tmp/hello.x
+ ... snip ...
+ (gdb) info connections
+ Num What Description
+ * 1 remote gdbserver - ~/tmp/hello.x Remote target using gdb-specific protocol
+ (gdb) python conn = gdb.selected_inferior().connection
+ (gdb) python print(conn.details)
+ gdbserver - ~/tmp/hello.x
+ (gdb)
+
+ I think there are two things wrong here, first in the "What" column of
+ the 'info connections' output, I think the text should be:
+
+ remote | gdbserver - ~/tmp/hello.x
+
+ to correctly show the user how the connection was established. And in
+ a similar fashion, I think that the `details` string of the
+ gdb.TargetConnection object should be:
+
+ | gdbserver - ~/tmp/hello.x
+
+ This commit makes this change. Currently the '|' is detected and
+ removed in gdb/serial.c. The string passed to the pipe_ops
+ structure (from gdb/ser-pipe.c), doesn't then, contain the `|`, this
+ is instead implied by the fact that it is a pipes based implementation
+ of the serial_ops interface.
+
+ After this commit we still detect the `|` in gdb/serial.c, but we now
+ store the full string (including the `|`) in the serial::name member
+ variable.
+
+ For pipe based serial connections, this name is only used for
+ displaying the two fields I mention above, and in pipe_open (from
+ gdb/ser-pipe.c), and in pipe_open, we now know to skip over the `|`.
+
+ The benefit I see from this change is that GDB's output now more
+ accurately reflects the commands used to start a target, thus making
+ it easier for a user to understand what is going on.
+
+2022-01-18 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: print explicit test result for gdb.base/dfp-test.exp
+ In the current code, if decimal floating point is not supported for
+ this target, there is no binary file dfp-test, and also there is no
+ test result after execute the following commands:
+
+ $ make check-gdb TESTS="gdb.base/dfp-test.exp"
+ $ grep error gdb/testsuite/gdb.log
+ /home/loongson/gdb.git/gdb/testsuite/gdb.base/dfp-test.c:39:1: error: decimal floating point not supported for this target
+ [...]
+ $ cat gdb/testsuite/gdb.sum
+ [...]
+ Running target unix
+ Running /home/loongson/gdb.git/gdb/testsuite/gdb.base/dfp-test.exp ...
+
+ === gdb Summary ===
+ [...]
+
+ With this patch:
+
+ $ make check-gdb TESTS="gdb.base/dfp-test.exp"
+ $ cat gdb/testsuite/gdb.sum
+ [...]
+ Running target unix
+ Running /home/loongson/gdb.git/gdb/testsuite/gdb.base/dfp-test.exp ...
+ UNSUPPORTED: gdb.base/dfp-test.exp: decimal floating point not supported for this target.
+
+ === gdb Summary ===
+
+ # of unsupported tests 1
+ [...]
+
+2022-01-18 Simon Marchi <simon.marchi@efficios.com>
+
+ bfd/elf64-ppc.c: fix clang -Wbitwise-instead-of-logical warning in ppc64_elf_check_init_fini
+ I see this error with clang-14:
+
+ CC elf64-ppc.lo
+ /home/smarchi/src/binutils-gdb/bfd/elf64-ppc.c:13131:11: error: use of bitwise '&' with boolean operands [-Werror,-Wbitwise-instead-of-logical]
+ return (check_pasted_section (info, ".init")
+ ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Fix by replacing & with &&. But given that the check_pasted_section
+ function has side-effects and we want to make sure both calls are made,
+ assign to temporary variables before evaluating the `&&`.
+
+ Change-Id: I849e1b2401bea5f4d8ef3ab9af99ba9e3ef42490
+
+2022-01-18 Alan Modra <amodra@gmail.com>
+
+ PR28029, debuginfod tests
+ binutils/NEWS says of the change in --process-links semantics:
+ If other debug section display options are also enabled (eg
+ --debug-dump=info) then the contents of matching sections in both the main
+ file and the separate debuginfo file *will* be displayed. This is because in
+ most cases the debug section will only be present in one of the files.
+
+ Implying that debug info is dumped without --process-links. Indeed
+ that appears to be the case for readelf. This does the same for
+ objdump.
+
+ PR 28029
+ * objdump.c (dump_bfd): Do not exit early when !is_mainfile
+ && !processlinks, instead just exclude non-debug output.
+ (dump_dwarf): Add is_mainfile parameter and pass to
+ dump_dwarf_section.
+ (dump_dwarf_section): Only display debug sections when
+ !is_mainfile and !process_links.
+
+2022-01-18 Alan Modra <amodra@gmail.com>
+
+ Check thin archive element file size against archive header
+ Makes it a little less likely for someone to break their thin archives.
+
+ * archive.c (_bfd_get_elt_at_filepos): Check thin archive
+ element file size.
+
+2022-01-18 Alan Modra <amodra@gmail.com>
+
+ lang_size_relro_segment tidy
+ This function has seen too many minimal change style edits.
+ No functional changes in this patch.
+
+ * ldlang.c (lang_size_relro_segment): Tidy.
+
+2022-01-18 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 DT_RELR
+ PowerPC64 takes a more traditional approach to DT_RELR than x86. Count
+ relative relocs in check_relocs, allocate space for them and output in
+ the usual places but not doing so when enable_dt_relr. DT_RELR is
+ sized in the existing ppc stub relaxation machinery, run via the
+ linker's ldemul_after_allocation hook. DT_RELR is output in the same
+ function that writes ppc stubs, run via ldemul_finish.
+
+ This support should be considered experimental.
+
+ bfd/
+ * elf64-ppc.c (struct ppc_local_dyn_relocs): Renamed from
+ ppc_dyn_relocs. Add rel_count field. Update uses.
+ (struct ppc_dyn_relocs): New. Replace all uses of elf_dyn_relocs.
+ (struct ppc_link_hash_table): Add relr_alloc, relr_count and
+ relr_addr.
+ (ppc64_elf_copy_indirect_symbol): Merge rel_count.
+ (ppc64_elf_check_relocs): Init rel_count for global and local syms.
+ (dec_dynrel_count): Change r_info param to reloc pointer. Update
+ all callers. Handle decrementing rel_count.
+ (allocate_got): Don't allocate space for relative relocs when
+ enable_dt_relr.
+ (allocate_dynrelocs): Likewise.
+ (ppc64_elf_size_dynamic_sections): Likewise. Handle srelrdyn.
+ (ppc_build_one_stub): Don't emit relative relocs on .branch_lt.
+ (compare_relr_address, append_relr_off): New functions.
+ (got_and_plt_relr_for_local_syms, got_and_plt_relr): Likewise.
+ (ppc64_elf_size_stubs): Size .relr.syn.
+ (ppc64_elf_build_stubs): Emit .relr.dyn.
+ (build_global_entry_stubs_and_plt): Don't output relative relocs
+ when enable_dt_relr.
+ (write_plt_relocs_for_local_syms): Likewise.
+ (ppc64_elf_relocate_section): Likewise.
+ binutils/
+ * testsuite/lib/binutils-common.exp (supports_dt_relr): Add
+ powerpc64.
+ ld/
+ * emulparams/elf64ppc.sh: Source dt-relr.sh.
+ * testsuite/ld-elf/dt-relr-2b.d: Adjust for powerpc.
+ * testsuite/ld-elf/dt-relr-2c.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2d.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2e.d: Likewise.
+
+2022-01-18 Alan Modra <amodra@gmail.com>
+
+ tweak __ehdr_start visibility and flags for check_relocs
+ bfd/
+ * elf-bfd.h (UNDEFWEAK_NO_DYNAMIC_RELOC): Test linker_def.
+ ld/
+ * ldelf.c (ldelf_before_allocation): Don't force __ehdr_start
+ local and hidden here..
+ * ldlang.c (lang_symbol_tweaks): ..do so here instead and set
+ def_regular and linker_def for check_relocs. New function
+ extracted from lang_process.
+
+2022-01-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-17 Nick Clifton <nickc@redhat.com>
+
+ Update the config.guess and config.sub files from the master repository and regenerate files.
+
+2022-01-17 Sergey Belyashov <sergey.belyashov@gmail.com>
+
+ Fix Z80 assembly failure.
+ PR 28762
+ * app.c (do_scrub_chars): Correct handling when the symbol is not 'af'.
+
+2022-01-17 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/infrun: rename variable and move to more specific scope
+ Move the "started" variable to the scope it's needed, and rename it to
+ "step_over_started".
+
+ Change-Id: I56f3384dbd328f55198063bb855edda10f1492a3
+
+2022-01-17 Jan Beulich <jbeulich@suse.com>
+
+ x86: adjust struct instr_info field types
+ Now that this lives on the stack, let's have it be a little less
+ wasteful in terms of space. Switch boolean fields to "bool" (also when
+ this doesn't change their size) and also limit the widths of "rex",
+ "rex_used", "op_ad", and "op_index". Do a little bit of re-ordering as
+ well to limit the number of padding holes.
+
+ x86: drop index16 field
+ There's a single use on a generally infrequently taken code path. Put
+ the necessary conditional there instead.
+
+ x86: drop most Intel syntax register name arrays
+ By making use of, in particular, oappend_maybe_intel() there's no need
+ for this redundant set of static data.
+
+ x86: fold variables in memory operand index handling
+ There's no real need for the pseudo-boolean "haveindex" or for separate
+ 32-bit / 64-bit index pointers. Fold them into a single "indexes" and
+ set that uniformly to AT&T names, compensating by emitting the register
+ name via oappend_maybe_intel().
+
+ x86: constify disassembler static data
+ Now that the code is intended to be largely thread-safe, we'd better not
+ have any writable static objects.
+
+2022-01-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-16 Joel Brobecker <brobecker@adacore.com>
+
+ gdb/copyright.py: Do not update gdbsupport/Makefile.in
+ This file is generated, so we should not modify it (any modification
+ we make is going to be undone at the next re-generation anyway).
+
+2022-01-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-14 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb.dlang/demangle.exp: update expected output for _D8demangle4testFnZv
+ Since commit ce2d3708bc8b ("Synchronize binutils libiberty sources with
+ gcc version."), I see this failure:
+
+ demangle _D8demangle4testFnZv^M
+ demangle.test(typeof(null))^M
+ (gdb) FAIL: gdb.dlang/demangle.exp: _D8demangle4testFnZv
+
+ The commit imported the commit 0e32a5aa8bc9 ("libiberty: Add support for
+ D `typeof(*null)' types") from the gcc repository. That commit includes
+ an update to libiberty/testsuite/d-demangle-expected, which updates a
+ test for the exact same mangled name:
+
+ _D8demangle4testFnZv
+ -demangle.test(none)
+ +demangle.test(typeof(null))
+
+ I don't know anything about D, but give that the change was made by Iain
+ Buclaw, the D language maintainer, I trust him on that.
+
+ Fix our test by updating the expected output in the same way.
+
+ Note: it's not really useful to have all these D demangling tests in the
+ GDB testsuite, since there are demangling tests in libiberty. We should
+ consider removing them, but we first need to make sure that everything
+ that is covered in gdb/testsuite/gdb.dlang/demangle.exp is also covered
+ in libiberty/testsuite/d-demangle-expected.
+
+ Change-Id: If2b290ea8367b8e1e0b90b20d4a6e0bee517952d
+
+2022-01-14 Nils-Christian Kempke <nils-christian.kempke@intel.com>
+
+ gdb/testsuite: enable __INTEL_LLVM_COMPILER preprocessor in get_compiler_info
+ Intel Next Gen compiler defines preprocessor __INTEL_LLVM_COMPILER and provides
+ version info in __clang_version__ e.g. value: 12.0.0 (icx 2020.10.0.1113).
+
+ gdb/testsuite/ChangeLog:
+ 2020-12-07 Abdul Basit Ijaz <abdul.b.ijaz@intel.com>
+
+ * lib/compiler.c: Add Intel next gen compiler pre-processor check.
+ * lib/compiler.cc: Ditto.
+ * lib/fortran.exp (fortran_main): Check Intel next gen compiler in
+ test_compiler_info.
+
+2022-01-14 Alan Modra <amodra@gmail.com>
+
+ PR28751 mbind2a / mbind2b regressions on powerpc*-linux
+ include/
+ * bfdlink.h (struct bfd_link_info): Add commonpagesize_is_set.
+ ld/
+ PR 28751
+ * emultempl/elf.em (handle_option): Set commonpagesize_is_set.
+ * ldelf.c (ldelf_after_parse): Don't error when only one of
+ -z max-page-size or -z common-page-size is given, correct the
+ other value to make it sane.
+ * testsuite/ld-elf/elf.exp (mbind2a, mbind2b): Do not pass
+ -z max-page-size.
+
+2022-01-14 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop ymmxmm_mode
+ This enumerator is not used by any table entry.
+
+ x86: share yet more VEX table entries with EVEX decoding
+ On top of prior similar work more opportunities have appeared in the
+ meantime. Note that this also happens to address the prior lack of
+ decoding of EVEX.L'L for VMOV{L,H}P{S,D} and VMOV{LH,HL}PS.
+
+ x86: consistently use scalar_mode for AVX512-FP16 scalar insns
+ For some reason the original AVFX512F insns were not taken as a basis
+ here, causing unnecessary divergence. While not an active issue, it is
+ still relevant to note that OP_XMM() has special treatment of e.g.
+ scalar_mode (marking broadcast as invalid). Such would better be
+ consistent for all sufficiently similar insns.
+
+ x86: record further wrong uses of EVEX.b
+ For one EVEX.W set does not imply EVEX.b is uniformly valid. Reject it
+ for modes which occur for insns allowing for EVEX.W to be set (noticed
+ with VMOV{H,L}PD and VMOVDDUP, and only in AT&T mode, but not checked
+ whether further insns would also have been impacted; I expect e.g.
+ VCMPSD would have had the same issue). And then the present concept of
+ broadcast makes no sense at all when the memory operand of an insn is
+ the destination.
+
+2022-01-14 Jan Beulich <jbeulich@suse.com>
+
+ x86: reduce AVX512 FP set of insns decoded through vex_w_table[]
+ Like for AVX512-FP16, there's not that many FP insns where going through
+ this table is easier / cheaper than using suitable macros. Utilize %XS
+ and %XD more to eliminate a fair number of table entries.
+
+ While doing this I noticed a few anomalies. Where lines get touched /
+ moved anyway, these are being addressed right here:
+ - vmovshdup used EXx for its 2nd operand, thus displaying seemingly
+ valid broadcast when EVEX.b is set with a memory operand; use
+ EXEvexXNoBcst instead just like vmovsldup already does
+ - vmovlhps used EXx for its 3rd operand, when all sibling entries use
+ EXq; switch to EXq there for consistency (the two differ only for
+ memory operands)
+
+2022-01-14 Jan Beulich <jbeulich@suse.com>
+
+ x86: reduce AVX512-FP16 set of insns decoded through vex_w_table[]
+ Like already indicated during review of the original submission, there's
+ really only very few insns where going through this table is easier /
+ cheaper than using suitable macros. Utilize %XH more and introduce
+ similar %XS and %XD (which subsequently can be used for further table
+ size reduction).
+
+ While there also switch to using oappend() in 'XH' macro processing.
+
+2022-01-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-13 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Disable DT_RELR in some -z relro tests
+ Disable DT_RELR in the following -z relro tests which don't expect
+ DT_RELR in linker outputs.
+
+ * testsuite/ld-i386/pr20830.d: Pass $NO_DT_RELR_LDFLAGS to ld.
+ * testsuite/ld-x86-64/pr20830a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830a.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a.d: Likewise.
+ * testsuite/ld-x86-64/pr21038b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c.d: Likewise.
+
+2022-01-13 H.J. Lu <hjl.tools@gmail.com>
+
+ Reapply libiberty: Pass --plugin to AR and RANLIB
+ Reapply the patch to detect GCC LTO plugin used for libiberty build to
+ support LTO build in libiberty.
+
+ * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
+ (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
+ (configure_deps): Depend on ../config/gcc-plugin.m4.
+ * aclocal.m4: Include ../config/gcc-plugin.m4.
+ * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
+ RANLIB_PLUGIN_OPTION.
+ * configure: Regenerate.
+
+2022-01-13 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Remove the 1-page gap before the RELRO segment
+ The existing RELRO scheme may leave a 1-page gap before the RELRO segment
+ and align the end of the RELRO segment to the page size:
+
+ [18] .eh_frame PROGBITS 408fa0 008fa0 005e80 00 A 0 0 8
+ [19] .init_array INIT_ARRAY 410de0 00fde0 000008 08 WA 0 0 8
+ [20] .fini_array FINI_ARRAY 410de8 00fde8 000008 08 WA 0 0 8
+ [21] .dynamic DYNAMIC 410df0 00fdf0 000200 10 WA 7 0 8
+ [22] .got PROGBITS 410ff0 00fff0 000010 08 WA 0 0 8
+ [23] .got.plt PROGBITS 411000 010000 000048 08 WA 0 0 8
+
+ Instead, we can remove the 1-page gap if the maximum page size >= the
+ maximum section alignment:
+
+ [18] .eh_frame PROGBITS 408fa0 008fa0 005e80 00 A 0 0 8
+ [19] .init_array INIT_ARRAY 40fde0 00fde0 000008 08 WA 0 0 8
+ [20] .fini_array FINI_ARRAY 40fde8 00fde8 000008 08 WA 0 0 8
+ [21] .dynamic DYNAMIC 40fdf0 00fdf0 000200 10 WA 7 0 8
+ [22] .got PROGBITS 40fff0 00fff0 000010 08 WA 0 0 8
+ [23] .got.plt PROGBITS 410000 010000 000048 08 WA 0 0 8
+
+ Because the end of the RELRO segment is always aligned to the page size
+ and may not be moved, the RELRO segment size may be increased:
+
+ [ 3] .dynstr STRTAB 000148 000148 000001 00 A 0 0 1
+ [ 4] .eh_frame PROGBITS 000150 000150 000000 00 A 0 0 8
+ [ 5] .init_array INIT_ARRAY 200150 000150 000010 08 WA 0 0 1
+ [ 6] .fini_array FINI_ARRAY 200160 000160 000010 08 WA 0 0 1
+ [ 7] .jcr PROGBITS 200170 000170 000008 00 WA 0 0 1
+ [ 8] .data.rel.ro PROGBITS 200180 000180 000020 00 WA 0 0 16
+ [ 9] .dynamic DYNAMIC 2001a0 0001a0 0001c0 10 WA 3 0 8
+ [10] .got PROGBITS 200360 000360 0002a8 00 WA 0 0 8
+ [11] .bss NOBITS 201000 000608 000840 00 WA 0 0 1
+
+ vs the old section layout:
+
+ [ 3] .dynstr STRTAB 000148 000148 000001 00 A 0 0 1
+ [ 4] .eh_frame PROGBITS 000150 000150 000000 00 A 0 0 8
+ [ 5] .init_array INIT_ARRAY 200b48 000b48 000010 08 WA 0 0 1
+ [ 6] .fini_array FINI_ARRAY 200b58 000b58 000010 08 WA 0 0 1
+ [ 7] .jcr PROGBITS 200b68 000b68 000008 00 WA 0 0 1
+ [ 8] .data.rel.ro PROGBITS 200b70 000b70 000020 00 WA 0 0 16
+ [ 9] .dynamic DYNAMIC 200b90 000b90 0001c0 10 WA 3 0 8
+ [10] .got PROGBITS 200d50 000d50 0002a8 00 WA 0 0 8
+ [11] .bss NOBITS 201000 000ff8 000840 00 WA 0 0 1
+
+ But there is no 1-page gap.
+
+ PR ld/28743
+ * ldlang.c (lang_size_relro_segment_1): Remove the 1-page gap
+ before the RELRO segment if the maximum page size >= the maximum
+ section alignment.
+ * testsuite/ld-i386/pr20830.d: Adjusted.
+ * testsuite/ld-s390/gotreloc_64-relro-1.dd: Likewise.
+ * testsuite/ld-x86-64/pr14207.d: Likewise.
+ * testsuite/ld-x86-64/pr18176.d: Likewise.
+ * testsuite/ld-x86-64/pr20830a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830a.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr20830b.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038a.d: Likewise.
+ * testsuite/ld-x86-64/pr21038b-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c-now.d: Likewise.
+ * testsuite/ld-x86-64/pr21038c.d: Likewise.
+
+2022-01-13 Nick Clifton <nickc@redhat.com>
+
+ Synchronize binutils libiberty sources with gcc version.
+ +2021-12-30 Lancelot SIX <lsix@lancelotsix.com>
+ +
+ + * cp-demangle.c (d_clone_suffix): Support digits in clone tag
+ + names.
+ + * testsuite/demangle-expected: Check demangling of clone symbols
+ + with digits in name.
+ +
+ +2021-12-16 H.J. Lu <hjl.tools@gmail.com>
+ +
+ + Revert:
+ + 2021-12-16 H.J. Lu <hjl.tools@gmail.com>
+ +
+ + * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
+ + (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
+ + (configure_deps): Depend on ../config/gcc-plugin.m4.
+ + * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
+ + RANLIB_PLUGIN_OPTION.
+ + * aclocal.m4: Regenerated.
+ + * configure: Likewise.
+ +
+ +2021-12-15 H.J. Lu <hjl.tools@gmail.com>
+ +
+ + * Makefile.in (AR): Add @AR_PLUGIN_OPTION@
+ + (RANLIB): Add @RANLIB_PLUGIN_OPTION@.
+ + (configure_deps): Depend on ../config/gcc-plugin.m4.
+ + * configure.ac: AC_SUBST AR_PLUGIN_OPTION and
+ + RANLIB_PLUGIN_OPTION.
+ + * aclocal.m4: Regenerated.
+ + * configure: Likewise.
+ +
+ +2021-11-29 Eric Gallager <egallager@gcc.gnu.org>
+ +
+ + PR other/103021
+ + * Makefile.in: Use ETAGS variable in TAGS target.
+ + * configure: Regenerate.
+ + * configure.ac: Allow ETAGS variable to be overridden.
+ +
+ +2021-11-29 Andrew Pinski <apinski@marvell.com>
+ +
+ + * make-temp-file.c (try_dir): Check to see if the dir
+ + is actually a directory.
+ +
+ +2021-10-22 Eric Gallager <egallager@gcc.gnu.org>
+ +
+ + PR other/102663
+ + * Makefile.in: Allow dvi-formatted documentation
+ + to be installed.
+ +
+ +2021-10-17 Lu?s Ferreira <contact@lsferreira.net>
+ +
+ + PR d/102618
+ + * d-demangle.c (dlang_parse_qualified): Handle anonymous
+ + symbols correctly.
+ + * testsuite/d-demangle-expected: New tests to cover anonymous
+ + symbols.
+ +
+ +2021-10-14 Lu?s Ferreira <contact@lsferreira.net>
+ +
+ + * testsuite/d-demangle-expected: Add test case for function literals.
+ +
+ +2021-10-14 Lu?s Ferreira <contact@lsferreira.net>
+ +
+ + * testsuite/d-demangle-expected: Add test cases for simple special
+ + mangles.
+ +
+ +2021-10-12 Lu?s Ferreira <contact@lsferreira.net>
+ +
+ + * d-demangle.c (dlang_parse_qualified): Remove redudant parenthesis
+ + around lhs and rhs of assignments.
+ +
+ +2021-10-01 Lu?s Ferreira <contact@lsferreira.net>
+ +
+ + * testsuite/d-demangle-expected: Add missing format for new test
+ +
+ +2021-09-23 Lu?s Ferreira <contact@lsferreira.net>
+ +
+ + * d-demangle.c (dlang_Type): Validate MANGLED is nonnull.
+ + * testsuite/d-demangle-expected: New test.
+ +
+ +2021-09-23 Lu?s Ferreira <contact@lsferreira.net>
+ +
+ + * d-demangle.c (dlang_symbol_backref): Ensure strlen of
+ + string is less than length computed by dlang_number.
+ +
+ +2021-09-01 Iain Sandoe <iain@sandoe.co.uk>
+
+ * configure: Regenerate.
+ + * configure.ac: Do not search for sbrk on Darwin.
+ + * xmalloc.c: Do not declare sbrk unless it has been found
+ + by configure.
+ +
+ +2021-08-29 Iain Buclaw <ibuclaw@gdcproject.org>
+ +
+ + * d-demangle.c (dlang_identifier): Skip over fake parent manglings.
+ + * testsuite/d-demangle-expected: Add tests.
+ +
+ +2021-08-29 Iain Buclaw <ibuclaw@gdcproject.org>
+ +
+ + * d-demangle.c (dlang_parse_arrayliteral): Add 'info' parameter.
+ + (dlang_parse_assocarray): Likewise.
+ + (dlang_parse_structlit): Likewise.
+ + (dlang_value): Likewise. Handle function literal symbols.
+ + (dlang_template_args): Pass 'info' to dlang_value.
+ + * testsuite/d-demangle-expected: Add new test.
+ +
+ +2021-08-29 Iain Buclaw <ibuclaw@gdcproject.org>
+ +
+ + * d-demangle.c (dlang_attributes): Handle typeof(*null).
+ + (dlang_type): Likewise. Demangle 'n' as typeof(null).
+ + * testsuite/d-demangle-expected: Update tests.
+ +
+ +2021-08-23 Iain Sandoe <iain@sandoe.co.uk>
+ +
+ + * simple-object-mach-o.c (simple_object_mach_o_write_segment):
+ + Cast the first argument to set_32 as needed.
+
+ -2021-07-03 Nick Clifton <nickc@redhat.com>
+ +2021-08-18 Iain Sandoe <iain@sandoe.co.uk>
+
+ + * simple-object-mach-o.c (simple_object_mach_o_write_segment):
+ + Arrange to swap the LTO index tables where needed.
+ # Please enter the commit message for your changes. Lines starting
+
+2022-01-13 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: don't use -Wmissing-prototypes with g++
+ This commit aims to not make use of -Wmissing-prototypes when
+ compiling with g++.
+
+ Use of -Wmissing-prototypes was added with this commit:
+
+ commit a0761e34f054767de6d6389929d27e9015fb299b
+ Date: Wed Mar 11 15:15:12 2020 -0400
+
+ gdb: enable -Wmissing-prototypes warning
+
+ Because clang can provide helpful warnings with this flag.
+ Unfortunately, g++ doesn't accept this flag, and will give this
+ warning:
+
+ cc1plus: warning: command line option ‘-Wmissing-prototypes’ is valid for C/ObjC but not for C++
+
+ In theory the fact that this flag is not supported should be detected
+ by the configure check in gdbsupport/warning.m4, but for users of
+ ccache, this check doesn't work due to a long standing ccache issue:
+
+ https://github.com/ccache/ccache/issues/738
+
+ The ccache problem is that -W... options are reordered on the command
+ line, and so -Wmissing-prototypes is seen before -Werror. Usually
+ this doesn't matter, but the above warning (about the flag not being
+ valid) is issued before the -Werror flag is processed, and so is not
+ fatal.
+
+ There have been two previous attempts to fix this that I'm aware of.
+ The first is:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-September/182148.html
+
+ In this attempt, instead of just relying on a compile to check if a
+ flag is valid, the proposal was to both compile and link. As linking
+ doesn't go through ccache, we don't suffer from the argument
+ reordering problem, and the link phase will correctly fail when using
+ -Wmissing-prototypes with g++. The configure script will then disable
+ the use of this flag.
+
+ This approach was rejected, and the suggestion was to only add the
+ -Wmissing-prototypes flag if we are compiling with gcc.
+
+ The second attempt, attempts this approach, and can be found here:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-November/183076.html
+
+ This attempt only adds the -Wmissing-prototypes flag is the value of
+ GCC is not 'yes'. This feels like it is doing the right thing,
+ unfortunately, the GCC flag is really a 'is gcc like' flag, not a
+ strict, is gcc check. As such, GCC is set to 'yes' for clang, which
+ would mean the flag was not included for clang or gcc. The entire
+ point of the original commit was to add this flag for clang, so
+ clearly the second attempt is not sufficient either.
+
+ In this new attempt I have added gdbsupport/compiler-type.m4, this
+ file defines AM_GDB_COMPILER_TYPE. This macro sets the variable
+ GDB_COMPILER_TYPE to either 'gcc', 'clang', or 'unknown'. In future
+ the list of values might be extended to cover other compilers, if this
+ is ever useful.
+
+ I've then modified gdbsupport/warning.m4 to only add the problematic
+ -Wmissing-prototypes flag if GDB_COMPILER_TYPE is not 'gcc'.
+
+ I've tested this with both gcc and clang and see the expected results,
+ gcc no longer attempts to use the -Wmissing-prototypes flag, while
+ clang continues to use it.
+
+ When compiling using ccache, I am no longer seeing the warning.
+
+2022-01-13 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add some extra debug information to attach_command
+ While working on another patch I wanted to add some extra debug
+ information to the attach_command function. This required me to add a
+ new function to convert the thread_info::state variable to a string.
+
+ The new debug might be useful to others, and the state to string
+ function might be useful in other locations, so I thought I'd merge
+ it.
+
+2022-01-13 Alan Modra <amodra@gmail.com>
+
+ Re: gas: add visibility support using GNU syntax on XCOFF
+ tc-ppc.c: In function 'ppc_comm':
+ tc-ppc.c:4560:40: error: 'visibility' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+
+ With that fixed we hit lots of segfaults in the ld testsuite.
+
+ PR 22085
+ bfd/
+ * xcofflink.c (xcoff_link_input_bfd): Don't segfault on NULL
+ sym_hash.
+ gas/
+ * config/tc-ppc.c (ppc_comm): Init visibility.
+
+2022-01-13 Alan Modra <amodra@gmail.com>
+
+ dt-relr.exp --no-as-needed
+ Otherwise the very simple test may not be linked with libc.so at all,
+ and thus correctly have no version reference added. Causing failure
+ of the dt-relr-glibc-1b.so test.
+
+ * testsuite/ld-elf/dt-relr.exp: Link with --no-as-needed.
+
+2022-01-13 Alan Modra <amodra@gmail.com>
+
+ Correct .relr.dyn nocombreloc script
+ * scripttempl/elf.sc (.relr.dyn): Don't depend on $COMBRELOC.
+
+2022-01-13 Alan Modra <amodra@gmail.com>
+
+ testsuite supports_dt_relr
+ Tidy, and fix "FAIL: Build dt-relr-glibc-1b.so" on all non-x86
+ linux targets.
+
+ binutils/
+ * binutils-common.exp (supports_dt_relr): New proc.
+ ld/
+ * testsuite/config/default.exp (DT_RELR_LDFLAGS, NO_DT_RELR_LDFLAGS),
+ (DT_RELR_CC_LDFLAGS, NO_DT_RELR_CC_LDFLAGS): Use supports_dt_relr.
+ * testsuite/ld-elf/dt-relr.exp: Don't run unless supports_dt_relr.
+ * testsuite/ld-elf/dt-relr-1a.d: Likewise.
+ * testsuite/ld-elf/dt-relr-1b.d: Likewise.
+ * testsuite/ld-elf/dt-relr-1c.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2a.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2b.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2c.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2d.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2e.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2f.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2g.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2h.d: Likewise.
+ * testsuite/ld-elf/dt-relr-3a.d: Likewise.
+ * testsuite/ld-elf/dt-relr-3b.d: Likewise.
+
+2022-01-13 Alan Modra <amodra@gmail.com>
+
+ Don't use C++ comments in assembly
+ It might seem to work, but only if '/' is a start of comment char.
+
+ * testsuite/ld-elf/dt-relr-1.s: Use # for comment.
+ * testsuite/ld-elf/dt-relr-2.s: Likewise.
+ * testsuite/ld-elf/dt-relr-3.s: Likewise.
+
+2022-01-13 Alan Modra <amodra@gmail.com>
+
+ Move DT_RELR tag setting to elflink.c
+ This makes the code setting DT_RELR tags generally available. Many
+ targets will be able to use the defaults. Those that can't should set
+ up sh_entsize for .relr.dyn output section before reaching the dynamic
+ tag code in bfd_elf_final_link.
+
+ * elflink.c (bfd_elf_final_link): Set up DT_RELR tags and sh_entsize.
+ * elfxx-x86.c (_bfd_x86_elf_finish_dynamic_sections): Don't do any
+ of that here.
+
+2022-01-13 Alan Modra <amodra@gmail.com>
+
+ Re: Set SEC_ELF_REVERSE_COPY earlier
+ Let's not rely on .init/.fini having relocs for the size sanity check.
+ This is mainly to squash reports of "my fuzzed object made ld hang".
+
+2022-01-13 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: make string[] type as char in gdb.base/charset.c
+ This reverts the commit ff656e2e1cb1 ("gdb: testsuite: fix failed
+ testcases in gdb.base/charset.exp").
+
+ The original test code has no problem. On an architecture where
+ char is signed, then both 'A' and ebcdic_us_string[7] will yield
+ -63, which makes the equality true. On an architecture where char
+ is unsigned, then both 'A' and ebcdic_us_string[7] will yield 193,
+ which also makes the equality true.
+
+ The test cases only failed on LoongArch. The default type of char
+ is signed char on LoongArch, like x86-64. But when use gdb print
+ command on LoongArch, the default type of char is unsigned char,
+ this is wrong, I will look into it later, sorry for that.
+
+ On LoongArch:
+
+ $ cat test_char.c
+ #include <stdio.h>
+
+ int main()
+ {
+ char c1 = 193;
+ unsigned char c2 = 193;
+
+ printf("%d\n", c1);
+ printf("%d\n", c1 == c2);
+
+ return 0;
+ }
+ $ gcc test_char.c -o test_char
+ $ ./test_char
+ -63
+ 0
+
+ (gdb) set target-charset EBCDIC-US
+ (gdb) print 'A'
+ $1 = 193 'A'
+ (gdb) print /c 'A'
+ $2 = 193 'A'
+ (gdb) print /u 'A'
+ $3 = 193
+ (gdb) print /d 'A'
+ $4 = -63
+ (gdb) print /x 'A'
+ $5 = 0xc1
+
+2022-01-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-12 Carl Love <cel@us.ibm.com>
+
+ gdb Power 9 add test for HW watchpoint support.
+ The Power 9 processor revision 2.2 has HW watchpoint support disabled due
+ to a HW bug. The support is fixed in Power 9 processor revision 2.3. This
+ patch add a test to lib/gdb.exp for Power to determine if the processor
+ supports HW watchpoints or not. If the Power processor doesn't support HW
+ watchpoints the proceedure skip_hw_watchpoint_tests will return 1 to
+ disable the various HW watchpoint tests.
+
+ The patch has been tested on Power 9, processor revesions 2.2 and 2.3. The
+ patch has also been tested on Power 10. No regression test failures were
+ found.
+
+2022-01-12 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: add gdb.host_charset function
+ We already have gdb.target_charset and gdb.target_wide_charset. This
+ commit adds gdb.host_charset along the same lines.
+
+2022-01-12 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdb/testsuite: fix gdb.python/py-events.exp for finding process id
+ When executed with --target_board=native-extended-gdbserver, the
+ gdb.python/py-events.exp test errors out with
+
+ ERROR: tcl error sourcing /path/to/gdb/testsuite/gdb.python/py-events.exp.
+ ERROR: can't read "process_id": no such variable
+ while executing
+ "lappend expected "ptid: \\($process_id, $process_id, 0\\)" "address: $addr""
+ (file "/path/to/gdb/testsuite/gdb.python/py-events.exp" line 103)
+ invoked from within
+ "source /path/to/gdb/testsuite/gdb.python/py-events.exp"
+ ("uplevel" body line 1)
+ invoked from within
+ "uplevel #0 source /path/to/gdb/testsuite/gdb.python/py-events.exp"
+ invoked from within
+ "catch "uplevel #0 source $test_file_name""
+
+ There are multiple problems around this:
+
+ 1. The process_id variable is not initialized to a default value.
+
+ 2. The test attempts to find the PID of the current thread, but the
+ regexp that it uses is not tailored for the output printed by the
+ remote target.
+
+ 3. The test uses "info threads" to find the current thread PID.
+ Using the "thread" command instead is simpler.
+
+ Fix these problems.
+
+2022-01-12 Tom Tromey <tromey@adacore.com>
+
+ Don't mention "serial" in target remote description
+ PR remote/9177 points out that "info files" mentions "serial" a couple
+ of times:
+
+ Remote serial target in gdb-specific protocol:
+ Debugging a target over a serial line.
+
+ However, often the remote target isn't really a serial connection.
+
+ It seems to me that this text could be a bit clearer; and furthermore
+ since "info files" prints the target's long description,
+ remote_target::files_info doesn't really add much and can simply be
+ removed.
+
+ Regression tested on x86-64 Fedora 34.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=9177
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Add glibc dependency for DT_RELR
+ When DT_RELR is enabled, to avoid random run-time crash with older glibc
+ binaries without DT_RELR support, add a GLIBC_ABI_DT_RELR symbol version,
+ which is provided by glibc with DT_RELR support, dependency on the shared
+ C library if it provides a GLIBC_2.XX symbol version.
+
+ bfd/
+
+ * elflink.c (elf_link_add_dt_relr_dependency): New function.
+ (bfd_elf_size_dynamic_sections): Call
+ elf_link_add_dt_relr_dependency if DT_RELR is enabled.
+
+ ld/
+
+ * ld.texi: Mention GLIBC_ABI_DT_RELR in -z pack-relative-relocs
+ entry.
+ * testsuite/ld-elf/dt-relr-glibc-1.c: New file.
+ * testsuite/ld-elf/dt-relr-glibc-1a.rd: Likewise.
+ * testsuite/ld-elf/dt-relr-glibc-1b.rd: Likewise.
+ * testsuite/ld-elf/dt-relr.exp: Likewise.
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Add simple DT_RELR tests
+ * testsuite/ld-elf/dt-relr-1.s: New file.
+ * testsuite/ld-elf/dt-relr-1a.d: Likewise.
+ * testsuite/ld-elf/dt-relr-1b.d: Likewise.
+ * testsuite/ld-elf/dt-relr-1c.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2.s: Likewise.
+ * testsuite/ld-elf/dt-relr-2a.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2b.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2c.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2d.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2e.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2f.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2g.d: Likewise.
+ * testsuite/ld-elf/dt-relr-2h.d: Likewise.
+ * testsuite/ld-elf/dt-relr-3.s: Likewise.
+ * testsuite/ld-elf/dt-relr-3a.d: Likewise.
+ * testsuite/ld-elf/dt-relr-3b.d: Likewise.
+ * testsuite/ld-i386/dt-relr-1.s: Likewise.
+ * testsuite/ld-i386/dt-relr-1a.d: Likewise.
+ * testsuite/ld-i386/dt-relr-1b.d: Likewise.
+ * testsuite/ld-x86-64/dt-relr-1a-x32.d: Likewise.
+ * testsuite/ld-x86-64/dt-relr-1a.d: Likewise.
+ * testsuite/ld-x86-64/dt-relr-1b-x32.d: Likewise.
+ * testsuite/ld-x86-64/dt-relr-1b.d: Likewise.
+ * testsuite/ld-x86-64/dt-relr-1.s: Likewise.
+ * testsuite/ld-i386/i386.exp: Run dt-relr-1a and dt-relr-1b.
+ * testsuite/ld-x86-64/x86-64.exp: Run dt-relr-1a, dt-relr-1a-x32
+ dt-relr-1b and dt-relr-1b-x32.
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Add DT_RELR support
+ DT_RELR is implemented with linker relaxation:
+
+ 1. During linker relaxation, we scan input relocations with the same
+ logic in relocate_section to determine if a relative relocation should
+ be generated and save the relative relocation candidate information for
+ sizing the DT_RELR section later after all symbols addresses can be
+ determined. For these relative relocations which can't be placed in
+ the DT_RELR section, they will be placed in the rela.dyn/rel.dyn
+ section.
+ 2. When DT_RELR is enabled, _bfd_elf_map_sections_to_segments calls a
+ backend function to size the DT_RELR section which will compute the
+ DT_RELR section size and tell ldelf_map_segments to layout sections
+ again when the DT_RELR section size has been increased.
+ 3. After regular symbol processing is finished, bfd_elf_final_link calls
+ a backend function to finish the DT_RELR section.
+
+ * elf32-i386.c (elf_i386_relocate_section): Don't generate
+ relative relocation when DT_RELR is enabled.
+ (elf_i386_finish_dynamic_symbol): Likewise.
+ * elf64-x86-64.c (elf_x86_64_relocate_section): Don't generate
+ relative relocation when DT_RELR is enabled.
+ (elf_x86_64_finish_dynamic_symbol): Likewise.
+ * elfxx-x86.c (_bfd_x86_elf_link_hash_table_create): Initialize
+ relative_r_type, relative_r_name, elf_append_reloc,
+ elf_write_addend and elf_write_addend_in_got.
+ (elf_x86_relative_reloc_record_add): New function.
+ (_bfd_x86_elf_link_relax_section): Likewise.
+ (elf64_dt_relr_bitmap_add): Likewise.
+ (elf32_dt_relr_bitmap_add): Likewise.
+ (_bfd_elf32_write_addend): Likewise.
+ (_bfd_elf64_write_addend): Likewise.
+ (elf_x86_size_or_finish_relative_reloc): Likewise.
+ (elf_x86_compute_dl_relr_bitmap): Likewise.
+ (elf_x86_write_dl_relr_bitmap): Likewise.
+ (elf_x86_relative_reloc_compare ): Likewise.
+ (_bfd_elf_x86_size_relative_relocs): Likewise.
+ (_bfd_elf_x86_finish_relative_relocs): Likewise.
+ (_bfd_x86_elf_size_dynamic_sections): Skip the .relr.dyn section.
+ (_bfd_x86_elf_finish_dynamic_sections): Convert 3 spare dynamic
+ tags to DT_RELR, DT_RELRSZ and for compact relative relocation.
+ * elfxx-x86.h (X86_64_GOT_TYPE_P): New.
+ (I386_GOT_TYPE_P): Likewise.
+ (X86_GOT_TYPE_P): Likewise.
+ (X86_64_RELATIVE_RELOC_TYPE_P): Likewise.
+ (I386_RELATIVE_RELOC_TYPE_P): Likewise.
+ (X86_RELATIVE_RELOC_TYPE_P): Likewise.
+ (X86_LOCAL_GOT_RELATIVE_RELOC_P): Likewise.
+ (I386_PCREL_TYPE_P): Likewise.
+ (X86_64_PCREL_TYPE_P): Likewise.
+ (X86_64_NEED_DYNAMIC_RELOC_TYPE_P): Rewrite.
+ (I386_NEED_DYNAMIC_RELOC_TYPE_P): Likewise.
+ (GENERATE_DYNAMIC_RELOCATION_P): Also check rel_from_abs.
+ (elf_x86_link_hash_entry): Add got_relative_reloc_done.
+ (elf_x86_relative_reloc_record): New.
+ (elf_x86_relative_reloc_data): Likewise.
+ (elf_dt_relr_bitmap): Likewise.
+ (elf_x86_link_hash_table): Add dt_relr_bitmap, relative_reloc,
+ unaligned_relative_reloc, relative_r_type, relative_r_name,
+ elf_append_reloc, elf_write_addend, elf_write_addend_in_got and
+ relative_reloc_done.
+ (elf_x86_relative_reloc_done): New.
+ (relative_reloc_packed): Likewise.
+ (_bfd_x86_elf_link_relax_section): Likewise.
+ (_bfd_elf_x86_size_relative_relocs): Likewise.
+ (_bfd_elf_x86_finish_relative_relocs): Likewise.
+ (_bfd_elf32_write_addend): Likewise.
+ (_bfd_elf64_write_addend): Likewise.
+ (bfd_elf32_bfd_relax_section): Likewise.
+ (bfd_elf64_bfd_relax_section): Likewise.
+ (elf_backend_size_relative_relocs): Likewise.
+ (elf_backend_finish_relative_relocs): Likewise.
+ (elf_x86_allocate_local_got_info): Also allocate
+ relative_reloc_done.
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Support DT_RELR in linker tests
+ Allow eabling and disabling DT_RELR in linker tests. Disable DT_RELR in
+ linker tests which don't expect DT_RELR in linker outputs.
+
+ binutils/
+
+ * testsuite/lib/binutils-common.exp (run_dump_test): Make
+ DT_RELR_LDFLAGS and NO_DT_RELR_LDFLAGS global.
+
+ ld/
+
+ * testsuite/config/default.exp (DT_RELR_LDFLAGS): New.
+ (DT_RELR_CC_LDFLAGS): Likewise.
+ (NO_DT_RELR_LDFLAGS): Likewise.
+ (NO_DT_RELR_CC_LDFLAGS): Likewise.
+ * testsuite/ld-elf/shared.exp: Pass $NO_DT_RELR_LDFLAGS to
+ linker for some tests.
+ * testsuite/ld-i386/export-class.exp: Likewise.
+ * testsuite/ld-i386/i386.exp: Likewise.
+ * testsuite/ld-i386/ibt-plt-2a.d: Pass $NO_DT_RELR_LDFLAGS to
+ linker.
+ * testsuite/ld-i386/ibt-plt-3a.d: Likewise.
+ * testsuite/ld-i386/ibt-plt-3c.d: Likewise.
+ * testsuite/ld-i386/pr26869.d: Likewise.
+ * testsuite/ld-i386/report-reloc-1.d: Likewise.
+ * testsuite/ld-ifunc/ifunc-2-i386-now.d: Likewise.
+ * testsuite/ld-ifunc/ifunc-2-local-i386-now.d: Likewise.
+ * testsuite/ld-ifunc/ifunc-2-local-x86-64-now.d: Likewise.
+ * testsuite/ld-ifunc/ifunc-2-x86-64-now.d: Likewise.
+ * testsuite/ld-ifunc/pr17154-x86-64.d: Likewise.
+ * testsuite/ld-x86-64/bnd-branch-1-now.d: Likewise.
+ * testsuite/ld-x86-64/bnd-ifunc-1-now.d: Likewise.
+ * testsuite/ld-x86-64/bnd-ifunc-2-now.d: Likewise.
+ * testsuite/ld-x86-64/bnd-ifunc-2.d: Likewise.
+ * testsuite/ld-x86-64/bnd-plt-1-now.d: Likewise.
+ * testsuite/ld-x86-64/bnd-plt-1.d: Likewise.
+ * testsuite/ld-x86-64/ibt-plt-2a-x32.d: Likewise.
+ * testsuite/ld-x86-64/ibt-plt-2a.d: Likewise.
+ * testsuite/ld-x86-64/ibt-plt-3a-x32.d: Likewise.
+ * testsuite/ld-x86-64/ibt-plt-3a.d: Likewise.
+ * testsuite/ld-x86-64/ilp32-4.d: Likewise.
+ * testsuite/ld-x86-64/load1c.d: Likewise.
+ * testsuite/ld-x86-64/load1d.d: Likewise.
+ * testsuite/ld-x86-64/pr13082-2b.d: Likewise.
+ * testsuite/ld-x86-64/pr14207.d: Likewise.
+ * testsuite/ld-x86-64/pr18176.d: Likewise.
+ * testsuite/ld-x86-64/pr19162.d: Likewise.
+ * testsuite/ld-x86-64/pr19636-2d.d: Likewise.
+ * testsuite/ld-x86-64/pr19636-2l.d: Likewise.
+ * testsuite/ld-x86-64/pr20253-1d.d: Likewise.
+ * testsuite/ld-x86-64/pr20253-1f.d: Likewise.
+ * testsuite/ld-x86-64/pr20253-1j.d: Likewise.
+ * testsuite/ld-x86-64/pr20253-1l.d: Likewise.
+ * testsuite/ld-x86-64/report-reloc-1-x32.d: Likewise.
+ * testsuite/ld-x86-64/report-reloc-1.d: Likewise.
+ * testsuite/ld-x86-64/export-class.exp (x86_64_export_class_test):
+ Pass $NO_DT_RELR_LDFLAGS to linker.
+ * testsuite/ld-x86-64/x86-64.exp: Pass $NO_DT_RELR_LDFLAGS to
+ linker for some tests.
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Add size_relative_relocs and finish_relative_relocs
+ On some targets, the DT_RELR section size can be computed only after all
+ symbols addresses can be determined. Set the preliminary DT_RELR section
+ size before mapping sections to segments and set the final DT_RELR section
+ size after regular symbol processing is done.
+
+ * elf-bfd.h (elf_backend_data): Add size_relative_relocs and
+ finish_relative_relocs.
+ * elf.c (_bfd_elf_map_sections_to_segments): Call
+ size_relative_relocs if DT_RELR is enabled.
+ * elflink.c (bfd_elf_final_link): Call finish_relative_relocs
+ after regular symbol processing is finished if DT_RELR is enabled.
+ * elfxx-target.h (elf_backend_size_relative_relocs): New.
+ (elf_backend_finish_relative_relocs): Likewise.
+ (elfNN_bed): Add elf_backend_size_relative_relocs and
+ elf_backend_finish_relative_relocs.
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Initial DT_RELR support
+ Add a -z pack-relative-relocs option to enable DT_RELR and create a
+ relr.dyn section for DT_RELR. DT_RELR is implemented with the linker
+ relaxation infrastructure, but it doesn't require the --relax option
+ enabled. -z pack-relative-relocs implies -z combreloc. -z nocombreloc
+ implies -z nopack-relative-relocs.
+
+ -z pack-relative-relocs is chosen over the similar option in lld,
+ --pack-dyn-relocs=relr, to implement a glibc binary lockout mechanism
+ with a special glibc version symbol, to avoid random crashes of DT_RELR
+ binaries with the existing glibc binaries.
+
+ bfd/
+
+ * elf-bfd.h (elf_link_hash_table): Add srelrdyn.
+ * elflink.c (_bfd_elf_link_create_dynamic_sections): Create a
+ .relr.dyn section for DT_RELR.
+
+ include/
+
+ * bfdlink.h (bfd_link_info): Add enable_dt_relr.
+
+ ld/
+
+ * News: Mention -z pack-relative-relocs and
+ -z nopack-relative-relocs.
+ * ld.texi: Document -z pack-relative-relocs and
+ -z nopack-relative-relocs.
+ * ldelf.c (ldelf_after_parse): Disable DT_RELR if not building
+ PIE nor shared library. Add 3 spare dynamic tags for DT_RELR,
+ DT_RELRSZ and DT_RELRENT.
+ * ldlang.c (lang_relax_sections): Also enable relaxation if
+ DT_RELR is enabled.
+ * emulparams/elf32_x86_64.sh: Source dt-relr.sh.
+ * emulparams/elf_i386.sh: Likewise.
+ * emulparams/elf_x86_64.sh: Likewise.
+ * emulparams/dt-relr.sh: New file.
+ * scripttempl/elf.sc: Support .relr.dyn.
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Pass need_layout to _bfd_elf_map_sections_to_segments
+ On some targets, the DT_RELR section size can be computed only after all
+ symbols addresses can be determined. Update ldelf_map_segments to pass
+ need_layout to _bfd_elf_map_sections_to_segments which will size DT_RELR
+ section and set need_layout to true if the DT_RELR section size is changed.
+
+ bfd/
+
+ * elf-bfd.h (_bfd_elf_map_sections_to_segments): Add a bool
+ pointer argument.
+ * elf.c (_bfd_elf_map_sections_to_segments): Add a bool pointer
+ argument to indicate if section layout needs update.
+ (assign_file_positions_for_load_sections): Pass NULL to
+ _bfd_elf_map_sections_to_segments.
+ * elflink.c (_bfd_elf_strip_zero_sized_dynamic_sections): Pass
+ NULL to _bfd_elf_map_sections_to_segments.
+
+ ld/
+
+ * ldelfgen.c (ldelf_map_segments): Pass &need_layout to
+ _bfd_elf_map_sections_to_segments.
+
+2022-01-12 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Add .relr.dyn to special_sections_r
+ * elf.c (special_sections_r): Add .relr.dyn.
+
+2022-01-12 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add 'maint set/show gnu-source-highlight enabled' command
+ In a later commit I want to address an issue with the Python pygments
+ based code styling solution. As this approach is only used when the
+ GNU Source Highlight library is not available, testing bugs in this
+ area can be annoying, as it requires GDB to be rebuilt with use of GNU
+ Source Highlight disabled.
+
+ This commit adds a pair of new maintenance commands:
+
+ maintenance set gnu-source-highlight enabled on|off
+ maintenance show gnu-source-highlight enabled
+
+ these commands can be used to disable use of the GNU Source Highlight
+ library, allowing me, in a later commit, to easily test bugs that
+ would otherwise be masked by GNU Source Highlight being used.
+
+ I made this a maintenance command, rather than a general purpose
+ command, as it didn't seem like this was something a general user
+ would need to adjust. We can always convert the maintenance command
+ to a general command later if needed.
+
+ There's no test for this here, but this feature will be used in a
+ later commit.
+
+2022-01-12 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: erase items from the source_cache::m_offset_cache
+ The source_cache class has two member variables m_source_map, which
+ stores the file contents, and m_offset_cache, which stores offsets
+ into the file contents.
+
+ As source files are read the contents of the file, as well as the
+ offset data, are stored in the cache using these two member variables.
+
+ Whenever GDB needs either the files contents, or the offset data,
+ source_cache::ensure is called. This function looks for the file in
+ m_source_map, and if it's found then this implies the file is also in
+ m_offset_cache, and we're done.
+
+ If the file is not in m_source_map then GDB calls
+ source_cache::get_plain_source_lines to open the file and read its
+ contents. ::get_plain_source_lines also calculates the offset data,
+ which is then inserted into m_offset_cache.
+
+ Back in ::ensure, the file contents are added into m_source_map. And
+ finally, if m_source_map contains more than MAX_ENTRIES, an entry is
+ removed from m_source_map.
+
+ The problem is entries are not removed from m_offset_cache at the same
+ time.
+
+ This means that if a program contains enough source files, GDB will
+ hold at most MAX_ENTRIES cached source file contents, but can contain
+ offsets data for every source file.
+
+ Now, the offsets data is going to be smaller than the cached file
+ contents, so maybe there's no harm here. But, when we reload the file
+ contents we always recalculate the offsets data. And, when we
+ ::get_line_charpos asking for offset data we still call ::ensure which
+ will ends up loading and caching the file contents.
+
+ So, given the current code does the work of reloading the offset data
+ anyway, we may as well save memory by capping m_offset_cache to
+ MAX_ENTRIES just like we do m_source_map.
+
+ That's what this commit does.
+
+ There should be no user visible changes after this commit, except for
+ ever so slightly lower memory usage in some cases.
+
+2022-01-12 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: new 'maint flush source-cache' command
+ This commit adds a new 'maint flush source-cache' command, this
+ flushes the cache of source file contents.
+
+ After flushing GDB is forced to reread source files the next time any
+ source lines are to be displayed.
+
+ I've added a test for this new feature. The test is a little weird,
+ in that it modifies a source file after compilation, and makes use of
+ the cache flush so that the changes show up when listing the source
+ file. I'm not sure when such a situation would ever crop up in real
+ life, but maybe we can imagine such cases.
+
+ In reality, this command is useful for testing the syntax highlighting
+ within GDB, we can adjust the syntax highlighting settings, flush the
+ cache, and then get the file contents re-highlighted using the new
+ settings.
+
+2022-01-12 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: rename lin-lwp to linux-nat in set/show debug
+ Rename 'set debug lin-lwp' to 'set debug linux-nat' and 'show debug
+ lin-lwp' to 'show debug linux-nat'.
+
+ I've updated the documentation and help text to match, as well as
+ making it clear that the debug that is coming out relates to all
+ aspects of Linux native inferior support, not just the LWP aspect of
+ it.
+
+ The boundary between general "native" target debug, and the lwp
+ specific part of that debug was always a little blurry, but the actual
+ debug variable inside GDB is debug_linux_nat, and the print routine
+ linux_nat_debug_printf, is used throughout the linux-nat.c file, not
+ just for lwp related debug, so the new name seems to make more sense.
+
+2022-01-12 Clément Chigot <clement.chigot@atos.net>
+
+ ld: add hidden and internal visibility support for XCOFF
+ This patch adds a primary support for hidden and internal visibility in
+ GNU linker for XCOFF format.
+ The protected visibility isn't yet supported.
+
+ PR 22085
+
+ bfd/ChangeLog:
+
+ * xcofflink.c (xcoff_dynamic_definition_p): Add hidden
+ and internal visibility support.
+ (xcoff_link_add_symbols): Likewise.
+ (xcoff_auto_export_p): Likewise.
+ (bfd_xcoff_export_symbol): Likewise.
+ (xcoff_link_input_bfd): Likewise.
+
+ ld/ChangeLog:
+
+ * testsuite/ld-vsb/main.c: Adapt for XCOFF.
+ * testsuite/ld-vsb/sh1.c: Likewse.
+ * testsuite/ld-vsb/vsb.exp: Likewise.
+ * testsuite/ld-vsb/visibility-1-xcoff-32.d: New test.
+ * testsuite/ld-vsb/visibility-1-xcoff-64.d: New test.
+ * testsuite/ld-vsb/visibility-2-xcoff-32.d: New test.
+ * testsuite/ld-vsb/visibility-2-xcoff-64.d: New test.
+ * testsuite/ld-vsb/xcoffvsb.dat: New test.
+
+2022-01-12 Clément Chigot <clement.chigot@atos.net>
+
+ ld/testsuite: prepare ld-elfvsb to support XCOFF
+ A following patch will add visibility support in ld for XCOFF. Thus,
+ ld-elfvsb is renamed ld-vsb and a suffix is added to files targeting only
+ ELF format.
+
+ ld/ChangeLog:
+
+ * testsuite/ld-elfvsb: rename as ld-vsb.
+ * testsuite/ld-elfvsb/hidden0.d: move to ld-vsb and rename with
+ suffix -elf.d.
+ * testsuite/ld-elfvsb/hidden1.d: Likewise.
+ * testsuite/ld-elfvsb/hidden2.d: Likewise.
+ * testsuite/ld-elfvsb/internal0.d: Likewise.
+ * testsuite/ld-elfvsb/internal1.d: Likewise.
+ * testsuite/ld-elfvsb/protected0.d: Likewise.
+ * testsuite/ld-elfvsb/protected1.d: Likewise.
+
+2022-01-12 Clément Chigot <clement.chigot@atos.net>
+
+ gas: add visibility support using GNU syntax on XCOFF
+ In order to ease port of GNU assembly code and especially ld testsuite,
+ this patch allows XCOFF to accept the usual GNU syntax for visibility.
+
+ PR 22085
+
+ gas/ChangeLog:
+
+ * config/tc-ppc.c (ppc_GNU_visibility): New function.
+ * testsuite/gas/ppc/aix.exp: Add new tests.
+ * testsuite/gas/ppc/xcoff-visibility-2-32.d: New test.
+ * testsuite/gas/ppc/xcoff-visibility-2-64.d: New test.
+ * testsuite/gas/ppc/xcoff-visibility-2.s: New test.
+
+2022-01-12 Clément Chigot <clement.chigot@atos.net>
+
+ gas: add visibility support for XCOFF
+ XCOFF assembly defines the visibility using an additional argument
+ on several pseudo-ops: .globl, .weak, .extern and .comm.
+ This implies that .globl and .weak syntax is different than the
+ usual GNU syntax. But we want to provide compatibility with AIX
+ assembler, especially because GCC is generating the visibility
+ using this XCOFF syntax.
+
+ PR 22085
+
+ bfd/ChangeLog:
+
+ * coffcode.h (coff_write_object_contents): Change XCOFF header
+ vstamp field to 2.
+ * coffgen.c (coff_print_symbol): Increase the size for n_type.
+
+ gas/ChangeLog:
+
+ * config/tc-ppc.c (ppc_xcoff_get_visibility): New function.
+ (ppc_globl): New function.
+ (ppc_weak): New function.
+ (ppc_comm): Add visibility field support.
+ (ppc_extern): Likewise.
+ * testsuite/gas/all/cofftag.d: Adjust to new n_type size
+ providing by objdump.
+ * testsuite/gas/ppc/test1xcoff32.d: Likewise.
+ * testsuite/gas/ppc/aix.exp: Add new tests.
+ * testsuite/gas/ppc/xcoff-visibility-1-32.d: New test.
+ * testsuite/gas/ppc/xcoff-visibility-1-64.d: New test.
+ * testsuite/gas/ppc/xcoff-visibility-1.s: New test.
+
+ include/ChangeLog:
+
+ * coff/internal.h (SYM_V_INTERNAL, SYM_V_HIDDEN,
+ SYM_V_PROTECTED, SYM_V_EXPORTED, SYM_V_MASK): New defines.
+ * coff/xcoff.h (struct xcoff_link_hash_entry): Add visibility
+ field.
+
+ ld/ChangeLog:
+
+ * testsuite/ld-pe/pr19803.d: Adjust to new n_type size
+ providing by objdump.
+
+2022-01-12 Hans-Peter Nilsson <hp@axis.com>
+
+ objdump, readelf: Emit "CU:" format only when wide output is requested
+ As pre-approved by Alan in
+ https://sourceware.org/pipermail/binutils/2021-September/118019.html
+ and I believe people have run into getting testsuite failures for
+ test-environments with "long" directory names, at least once more
+ since that time. Enough. I grepped the gas, binutils and ld
+ testsuites for "CU:" to catch target-specific occurrences, but I
+ noticed none. I chose to remove "CU:" on the objdump tests instead of
+ changing options to get the wide format, so as to keep the name of the
+ test consistent with actual options; but added it to the readelf
+ options for the gas test as I believe the "CU:" format is preferable.
+
+ Tested for cris-elf and native x86_64-pc-linux-gnu.
+
+ binutils:
+ * dwarf.c (display_debug_lines_decoded): Don't check the
+ string length of the directory, instead emit the "CU: dir/name"
+ format only if wide output is requested.
+ * testsuite/binutils-all/dw5.W, testsuite/binutils-all/objdump.WL:
+ Adjust accordingly.
+
+ gas:
+ * testsuite/gas/elf/dwarf-5-loc0.d: Add -W to readelf options.
+
+2022-01-12 Alan Modra <amodra@gmail.com>
+
+ Set SEC_ELF_REVERSE_COPY earlier
+ For the sake of DT_RELR.
+
+ bfd/
+ * elflink.c (elf_link_input_bfd): Don't set SEC_ELF_REVERSE_COPY
+ here. Move sanity checks to reverse copying code.
+ ld/
+ * ldlang.c (lang_add_section): Set SEC_ELF_REVERSE_COPY for
+ .ctors/.dtors in .init_array/.fini_array.
+
+2022-01-12 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: fix wrong comment in gdb.base/charset.c
+ In gdb/testsuite/gdb.base/charset.c, use "IBM1047" instead of "EBCDIC"
+ to fix the wrong comment.
+
+2022-01-12 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: fix failed testcases in gdb.base/charset.exp
+ In gdb/testsuite/gdb.base/charset.c, the last argument is greater than 127
+ when call fill_run() in EBCDIC-US and IBM1047, but the type of string[] is
+ char, this will change the value due to sign extension.
+
+ For example, ebcdic_us_string[7] will be -63 instead of the original 193 in
+ EBCDIC-US.
+
+ Make the type of string[] as unsigned char to fix the following six failed
+ testcases:
+
+ $ grep FAIL gdb/testsuite/gdb.sum
+ FAIL: gdb.base/charset.exp: check value of parsed character literal in EBCDIC-US
+ FAIL: gdb.base/charset.exp: check value of parsed string literal in EBCDIC-US
+ FAIL: gdb.base/charset.exp: check value of escape that doesn't exist in EBCDIC-US
+ FAIL: gdb.base/charset.exp: check value of parsed character literal in IBM1047
+ FAIL: gdb.base/charset.exp: check value of parsed string literal in IBM1047
+ FAIL: gdb.base/charset.exp: check value of escape that doesn't exist in IBM1047
+
+2022-01-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-11 Fangrui Song <maskray@google.com>
+
+ ar: Add --thin for creating thin archives
+ In many ar implementations (FreeBSD, elfutils, etc), -T has the X/Open
+ System Interface specified semantics. Therefore -T for thin archives is
+ not recommended for portability. -T is deprecated without diagnostics.
+
+ PR binutils/28759
+ * ar.c (long_options): Add --thin.
+ (usage) Add --thin. Deprecate -T without diagnostics.
+ * doc/binutils.texi: Add doc.
+ * NEWS: Mention --thin.
+ * binutils/testsuite/binutils-all/ar.exp: Add tests.
+
+2022-01-11 Martin Storsj <martin@martin.st>
+
+ Fix multiple problems with DLL generation.
+ ld * pe-dll.c (make_head): Prefix the symbol name with the dll name.
+ (make_tail, make_one, make_singleton_name_thunk): Likewise.
+ (make_import_fixup_entry, make_runtime_pseudo_reloc): Likewise.
+ (pe_create_runtime_relocator_reference): Likewise.
+ (pe_dll_generate_implib): Set dll_symname_len.
+ (pe_process_import_defs): Likewise.
+
+ binutils
+ * dlltool.c (main): If a prefix has not been provided, attempt to
+ use a deterministic one based upon the dll name.
+
+2022-01-11 Jan Beulich <jbeulich@suse.com>
+
+ gas/doc: mention quoted symbol names
+
+2022-01-11 Andrew Burgess <aburgess@redhat.com>
+
+ gdbsupport: regenerate Makefile.in
+ I had cause to regenerate gdbsupport/Makefile.in, and noticed some
+ unexpected changes in the copyright header dates.
+
+ I suspect that this was caused by the end of year date range update
+ process.
+
+ The Makefile.in contains two date ranges. The first range appears to
+ be the date range for the version of automake being used, that is the
+ range runs up to 2017 only, when automake 1.15.1 was released.
+
+ The second date range in Makefile.in represents the date range for the
+ generated file, and so, now runs up to 2022.
+
+ Anyway, this is the result of running autoreconf (using automake
+ 1.15.1) in the gdbsupport directory.
+
+2022-01-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-10 Clément Chigot <clement.chigot@atos.net>
+
+ XCOFF: add support for TLS relocations on hidden symbols
+ This patch adds support for TLS relocation targeting C_HIDEXT symbols.
+ In gas, TLS relocations, except R_TLSM and R_TLMSL, must keep the value
+ of their target symbol.
+ In ld, it simply ensures that internal TLS symbols are added to the
+ linker hash table for xcoff_reloc_type_tls.
+
+ It also improves the tests made by both.
+
+ bfd/ChangeLog:
+
+ * coff-rs6000.c (xcoff_howto_table): Fix name of R_TLSML.
+ (xcoff_reloc_type_tls): Replace the error when h is NULL by
+ an assert.
+ (xcoff_complain_overflow_unsigned_func): Adjust comments.
+ * coff64-rs6000.c (xcoff64_howto_table): Fix name of R_TLSML.
+ * xcofflink.c (xcoff_link_add_symbols_to_hash_table): New
+ function.
+ (xcoff_link_add_symbols): Add C_HIDEXT TLS symbols to the linker
+ hash table.
+
+ gas/ChangeLog:
+
+ * config/tc-ppc.c (md_apply_fix): Enable support for TLS
+ relocation over internal symbols.
+ * testsuite/gas/ppc/aix.exp: Replace xcoff-tlms by xcoff-tls.
+ * testsuite/gas/ppc/xcoff-tlsm-32.d: Removed.
+ * testsuite/gas/ppc/xcoff-tlsm-64.d: Removed.
+ * testsuite/gas/ppc/xcoff-tlsm.s: Removed.
+ * testsuite/gas/ppc/xcoff-tls-32.d: New test.
+ * testsuite/gas/ppc/xcoff-tls-64.d: New test.
+ * testsuite/gas/ppc/xcoff-tls.s: New test.
+
+ ld/ChangeLog:
+
+ * testsuite/ld-powerpc/aix52.exp: Improve aix-tls-reloc test.
+ * testsuite/ld-powerpc/aix-tls-reloc.s: Likewise.
+ * testsuite/ld-powerpc/aix-tls-reloc-32.d: Removed.
+ * testsuite/ld-powerpc/aix-tls-reloc-64.d: Removed.
+ * testsuite/ld-powerpc/aix-tls-reloc-32.dd: New test.
+ * testsuite/ld-powerpc/aix-tls-reloc-32.dt: New test.
+ * testsuite/ld-powerpc/aix-tls-reloc-64.dd: New test.
+ * testsuite/ld-powerpc/aix-tls-reloc-64.dt: New test.
+
+2022-01-10 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: add Tiezhu Yang to MAINTAINERS
+
+2022-01-10 Tom Tromey <tom@tromey.com>
+
+ Reduce use of unfiltered output in Darwin code
+ The Darwin code uses unfiltered output liberally. This patch changes
+ this code to send some output to gdb_stdlog (in some cases via the use
+ of debug_prefixed_printf_cond_nofunc), or to gdb_stderr, or to simply
+ switch to filtered output.
+
+ Note that I didn't switch inferior_debug to use
+ debug_prefixed_printf_cond_nofunc, because that would affect the
+ output by removing the information about the inferior. I wasn't sure
+ if this was important or not, so I left it in.
+
+ v2 of this patch uses warning rather than prints to gdb_stderr, and
+ removes some trailing whitespace.
+
+ I can't compile this patch, so it's "best effort".
+
+2022-01-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-08 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/hurd: handle inferiors exiting
+ While testing on GNU/Hurd (i386) I noticed that GDB crashes when an
+ inferior exits, with this error:
+
+ inferior.c:293: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed.
+
+ The problem appears to be in gnu_nat_target::wait.
+
+ We always set inferior_ptid to null_ptid before calling target_wait,
+ this has been the case since the multi-target changes were made to GDB
+ in commit:
+
+ commit 5b6d1e4fa4fc6827c7b3f0e99ff120dfa14d65d2
+ Date: Fri Jan 10 20:06:08 2020 +0000
+
+ Multi-target support
+
+ With follow up changes in commit:
+
+ commit 24ed6739b699f329c2c45aedee5f8c7d2f54e493
+ Date: Thu Jan 30 14:35:40 2020 +0000
+
+ gdb/remote: Restore support for 'S' stop reply packet
+
+ Unfortunately, the GNU/Hurd target is still relying on the value of
+ inferior_ptid in the case where an inferior exits - we return the
+ value of inferior_ptid as the pid of the process that exited. This
+ was fine in the single target world, where inferior_ptid identified
+ the one running inferior, but this is no longer good enough.
+
+ Instead, we should return a ptid containing the pid of the process
+ that exited, as obtained from the wait event, and this is what this
+ commit does.
+
+ I've not run the full testsuite on GNU/Hurd as there appear to be lots
+ of other issues with this target that makes running the full testsuite
+ very painful, but I think this looks like a small easy improvement.
+
+2022-01-08 Tom Tromey <tom@tromey.com>
+
+ Add explicit check for nullptr to target_announce_attach
+ Lancelot pointed out that target_announce_attach was missing an
+ explicit check against nullptr. This patch adds it.
+
+2022-01-08 Hannes Domani <ssbssa@yahoo.de>
+
+ Add _sigsys info to siginfo struct
+ This patch adds information about _sigsys structure from newer
+ kernels, so that $_siginfo decoding can show information about
+ _sigsys, making it easier for developers to debug seccomp failures.
+ Requested in PR gdb/24283.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24283
+
+2022-01-08 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ gdb: testsuite: show print array-indexes after set in arrayidx.exp
+ Add "show print array-indexes" testcases after set print array-indexes
+ to off or on.
+
+ Without this patch:
+
+ PASS: gdb.base/arrayidx.exp: set print array-indexes to off
+ PASS: gdb.base/arrayidx.exp: print array with array-indexes off
+ PASS: gdb.base/arrayidx.exp: set print array-indexes to on
+ PASS: gdb.base/arrayidx.exp: print array with array-indexes on
+
+ With this patch:
+
+ PASS: gdb.base/arrayidx.exp: set print array-indexes to off
+ PASS: gdb.base/arrayidx.exp: show print array-indexes is off
+ PASS: gdb.base/arrayidx.exp: print array with array-indexes off
+ PASS: gdb.base/arrayidx.exp: set print array-indexes to on
+ PASS: gdb.base/arrayidx.exp: show print array-indexes is on
+ PASS: gdb.base/arrayidx.exp: print array with array-indexes on
+
+2022-01-08 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Extract _bfd_elf_link_iterate_on_relocs
+ DT_RELR encodes consecutive R_*_RELATIVE relocations in GOT (the global
+ offset table) and data sections in a compact format:
+
+ https://groups.google.com/g/generic-abi/c/bX460iggiKg
+
+ On some targets, R_*_RELATIVE relocations are counted and the GOT offsets
+ are allocated when setting the dynamic section sizes after seeing all
+ relocations. R_*_RELATIVE relocations are generated while relocating
+ sections after section layout has been finalized.
+
+ To prepare for DT_RELR implementation on these targets, extract
+ _bfd_elf_link_iterate_on_relocs from _bfd_elf_link_check_relocs so
+ that a backend can scan relocations in elf_backend_always_size_sections
+
+ For x86 targets, the old check_relocs is renamed to scan_relocs and a
+ new check_relocs is added to chek input sections and create dynamic
+ relocation sections so that they will be mapped to output sections.
+ scan_relocs is now called from elf_backend_always_size_sections.
+
+ Since relocations are scanned after __start, __stop, .startof. and
+ .sizeof. symbols have been finalized on x86, __[start|stop]_SECNAME for
+ --gc-sections -z start-stop-gc are now zero when all SECNAME sections
+ been garbage collected. This is no need for elf_x86_start_stop_gc_p.
+
+ bfd/
+
+ * elf-bfd.h (_bfd_elf_link_iterate_on_relocs): New.
+ * elf32-i386.c (elf_i386_convert_load_reloc): Don't call
+ elf_x86_start_stop_gc_p.
+ (elf_i386_check_relocs): Renamed to ...
+ (elf_i386_scan_relocs): This. Don't call
+ _bfd_elf_make_dynamic_reloc_section.
+ (elf_i386_always_size_sections): New.
+ (elf_backend_check_relocs): Removed.
+ (elf_backend_always_size_sections): New.
+ * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Don't call
+ elf_x86_start_stop_gc_p.
+ (elf_x86_64_check_relocs): Renamed to ...
+ (elf_x86_64_scan_relocs): This. Don't call
+ _bfd_elf_make_dynamic_reloc_section.
+ (elf_x86_64_always_size_sections): New.
+ (elf_backend_check_relocs): Removed.
+ (elf_backend_always_size_sections): New.
+ * elflink.c (elf_link_check_or_scan_relocs):
+ New. Extracted from _bfd_elf_link_check_relocs.
+ (_bfd_elf_link_check_relocs): Call elf_link_check_or_scan_relocs.
+ * elfxx-x86.c (_bfd_x86_elf_check_relocs): New.
+ * elfxx-x86.h (X86_64_NEED_DYNAMIC_RELOC_TYPE_P): New.
+ (I386_NEED_DYNAMIC_RELOC_TYPE_P): Likewise.
+ (X86_NEED_DYNAMIC_RELOC_TYPE_P): Likewise.
+ (_bfd_x86_elf_check_relocs): Likewise.
+ (elf_backend_check_relocs): Likewise.
+ (elf_backend_always_size_sections): Removed.
+ (elf_x86_start_stop_gc_p): Likewise.
+
+ ld/
+
+ * testsuite/ld-i386/pr27491-1a.d: Updated.
+ * testsuite/ld-x86-64/pr27491-1a.d: Likewise.
+
+2022-01-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.mi/mi-catch-load.exp
+ When I run the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.mi/mi-catch-load.exp ...
+ DUPLICATE: gdb.mi/mi-catch-load.exp: breakpoint at main
+ DUPLICATE: gdb.mi/mi-catch-load.exp: mi runto main
+
+ Fix by grouping the various phases in with_test_prefix blocks. Since
+ the tests now have a prefix, remove the manually written prefixes in
+ testnames.
+
+ Also change some messages with the pattern "(timeout) $testname" into
+ "$estname (timeout)" since tools will handle this as $testname[1] (which
+ is what we want in this particular scenario).
+
+ Tested on x86_64-linux.
+
+ [1] https://sourceware.org/gdb/wiki/GDBTestcaseCookbook#Do_not_use_.22tail_parentheses.22_on_test_messages
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.threads/staticthreads.ex
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.threads/staticthreads.exp ...
+ DUPLICATE: gdb.threads/staticthreads.exp: couldn't compile staticthreads.c: unrecognized error
+
+ Fix by using foreach_with_prefix instead of foreach when preparing the
+ test case.
+
+ Testeed on x86_64-linux both in a setup where the test fails to prepare
+ and in a setup where the test fails to setup.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.mi/mi-language.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.mi/mi-language.exp ...
+ DUPLICATE: gdb.mi/mi-language.exp: set lang ada
+
+ This is due to an erroneous explicit test name. This explicit test name
+ also happens to be useless (at least it would have been if it was
+ correct) since it only repeats the command, so just remove the explicit
+ test name and let the command be used as default test name. Also remove
+ explicit test name at another location in the file since it also just
+ repeat the command.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.mi/mi-nonstop-exit.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.mi/mi-nonstop-exit.exp ...
+ DUPLICATE: gdb.mi/mi-nonstop-exit.exp: breakpoint at main
+ DUPLICATE: gdb.mi/mi-nonstop-exit.exp: mi runto main
+
+ This test runs the same sequence of operations twice. Refactor the code
+ by running both of those sequences within a foreach_with_prefix block to
+ ensure that the commands have unique test names.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.mi/mi-nonstop.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.mi/mi-nonstop.exp ...
+ DUPLICATE: gdb.mi/mi-nonstop.exp: check varobj, w1, 1
+ DUPLICATE: gdb.mi/mi-nonstop.exp: stacktrace of stopped thread
+
+ Fix by adjusting the problematic test names.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.mi/mi-nsthrexec.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.mi/mi-nsthrexec.exp ...
+ DUPLICATE: gdb.mi/mi-nsthrexec.exp: breakpoint at main
+
+ Fix by adjusting the duplicated test name.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/watchpoints.exp
+ When running the testsuite, I have:
+
+ Running ../gdb/testsuite/gdb.base/watchpoints.exp ...
+ DUPLICATE: gdb.base/watchpoints.exp: watchpoint hit, first time
+
+ Fix by adjusting the test names where appropriate.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/nested-subp2.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/nested-subp2.exp ...
+ DUPLICATE: gdb.base/nested-subp2.exp: continue to the STOP marker
+ DUPLICATE: gdb.base/nested-subp2.exp: print c
+ DUPLICATE: gdb.base/nested-subp2.exp: print count
+
+ Fix by using with_test_prefix to differentiate the test that are
+ performed at different points during the execution of the debuggee.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/call-signal-resume.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/call-signal-resume.exp ...
+ DUPLICATE: gdb.base/call-signal-resume.exp: dummy stack frame number
+ DUPLICATE: gdb.base/call-signal-resume.exp: set confirm off
+ DUPLICATE: gdb.base/call-signal-resume.exp: return
+
+ This is due to the fact that a pattern was probably copy/pasted to
+ re-use the logic while not adjusting the test names to avoid the
+ duplication.
+
+ Fix by removing the redundant tests ('set confirm off' only needs to be
+ used once) and adjusting the test names where appropriate.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/pointers.exp
+ When I run the testsuite, I have :
+
+ Running .../gdb/testsuite/gdb.base/pointers.exp ...
+ DUPLICATE: gdb.base/pointers.exp: pointer assignment
+
+ Fix by placing the sections with duplication in with_test_prefix blocks.
+ This removes the duplication and gives a better organization the file.
+
+ Tested on x86_64-linux.
+ Co-Authored-By: Pedro Alves <pedro@palves.net>
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/unload.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/unload.exp ...
+ DUPLICATE: gdb.base/unload.exp: continuing to unloaded libfile
+
+ Fix by adjusting the test name.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/define-prefix.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/define-prefix.exp ...
+ DUPLICATE: gdb.base/define-prefix.exp: define user command: ghi-prefix-cmd
+
+ Fix by adjusting test names.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/funcargs.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/funcargs.exp ...
+ DUPLICATE: gdb.base/funcargs.exp: run to call2a
+
+ Fix by using proc_with_prefix instead on plain proc to create logical
+ function blocks.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/shlib-call.exp
+ When I run the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/shlib-call.exp ...
+ DUPLICATE: gdb.base/shlib-call.exp: print g
+ DUPLICATE: gdb.base/shlib-call.exp: set print sevenbit-strings
+ DUPLICATE: gdb.base/shlib-call.exp: set print address off
+ DUPLICATE: gdb.base/shlib-call.exp: set width 0
+ DUPLICATE: gdb.base/shlib-call.exp: continue until exit
+
+ Fix by adjusting the test names when required, and by removing
+ un-necessary commands.
+
+ While at it, do some cleanup:
+ - Replace an explicit GDB restart sequence with a call to clean_restart.
+ - Remove trailing whitespaces.
+ - Use $gdb_test_name in gdb_test_multiple.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/set-cfd.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/set-cwd.exp ...
+ DUPLICATE: gdb.base/set-cwd.exp: test_cwd_reset: continue to breakpoint: break-here
+
+ Fix by moving the tests after the 'runto_main' within the same
+ with_test_prefix scope.
+
+ While at it, I fix some indentation issues.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/exprs.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/exprs.exp ...
+ DUPLICATE: gdb.base/exprs.exp: \$[0-9]* = red (setup)
+
+ Fix by using with_test_prefix where appropriate.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/readline.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/readline.exp ...
+ DUPLICATE: gdb.base/readline.exp: Simple operate-and-get-next - final prompt
+
+ Fix by adjusting the prefix given to the second 'simple' call to
+ operate_and_get_next.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/pretty-array.exp
+ When I run the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/pretty-array.exp ...
+ DUPLICATE: gdb.base/pretty-array.exp: print nums
+ DUPLICATE: gdb.base/pretty-array.exp: print nums
+
+ Fix by giving a name to the test cases.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/ui-redirect.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/ui-redirect.exp ...
+ DUPLICATE: gdb.base/ui-redirect.exp: redirect while already logging: set logging redirect off
+
+ Fix by moving the first 'set logging redirect off' to the end of the
+ previous [with_test_prefix] test block. The statement's purpose is to
+ clean the on flag set in this previous block, so moving it there makes
+ sense and does not change the sequence of commands in the test file.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: completion-support.exp: improve leading whitespace support
+ There is a expect support library in the source tree designed to help
+ developers test the auto-completion capabilities of GDB.
+
+ One of the functions is test_gdb_complete_unique_re. It is used
+ (usually indirectly via test_gdb_complete_unique) to test that a given
+ input line is completed as a given output line. The test checks for two
+ ways to do the completion: using tab-completion, or using the
+ 'complete' command. To do this, calls to two dedicated functions are
+ performed. If we omit few details, we can consider that a call to
+
+ test_gdb_complete_unique $input $expected
+
+ is equivalent to the two following calls:
+
+ test_gdb_complete_tab_unique $input $expected
+ test_gdb_complete_cmd_unique $input $expected
+
+ When using the tab-completion, everything works as expected, but some
+ care must be taken when using the 'complete' command if the given input
+ has leading whitespaces. In such situation, the output of the
+ 'complete' command will drop the leading whitespaces.
+
+ The current approach is that in such situation, the input and expected
+ outputs are right trimmed (i.e. all leading whitespaces are removed)
+ when performing the command completion check.
+
+ This means that the following call:
+
+ test_gdb_complete_unique " $input" " $expected"
+
+ is almost equivalent to (again, omitting few details and arguments):
+
+ test_gdb_complete_tab_unique " $input" " $expected"
+ test_gdb_complete_cmd_unique "$input" "$expected"
+
+ This approach comes with a problem that we encounter when running the
+ tests in complete-empty.exp. When doing so, we have:
+
+ Running .../gdb/testsuite/gdb.base/complete-empty.exp ...
+ DUPLICATE: gdb.base/complete-empty.exp: empty-input-line: cmd complete ""
+
+ This is because the test file does something like:
+
+ test_gdb_complete_unique "" "!" " " 1
+ test_gdb_complete_unique " " " !" " " 1¬
+
+ which, if we do the substitution introduced above is equivalent to:
+
+ test_gdb_complete_tab_unique "" "!"
+ test_gdb_complete_cmd_unique "" "!"
+ test_gdb_complete_tab_unique " " " !"
+ test_gdb_complete_cmd_unique "" "!"
+
+ We see that the lines 2 and 4 are now the same, and for this reason the
+ testing framework complains about DUPLICATE test names.
+
+ To fix that, this commit proposes that instead of left trimming both
+ input and expected outputs, only the expected output is trimmed.
+
+ Care must be taken in the case the completion gives more possibilities
+ than allowed by the max-completions setting. In this case, the input
+ will be repeated in the output in its left trimmed version. This commit
+ also ensures that this is taken care of.
+
+ With this commit, the gdb.base/complete-empty.exp still passes all its
+ tests but does not report the DUPLICATE anymore.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/subst.exp
+ When I run the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/subst.ex ...
+ DUPLICATE: gdb.base/subst.exp: unset substitute-path from, no rule entered yet
+
+ Fix by adjusting the problematic test name.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Pedro Alves <pedro@palves.net>
+
+ gdb/testsuite: Remove duplicates from gdb.base/dfp-exprs.exp
+ When I run the testsuite, I have:
+
+ Running ../gdb/testsuite/gdb.base/dfp-exprs.exp ...
+ DUPLICATE: gdb.base/dfp-exprs.exp: p 1.2dl < 1.3df
+
+ Replace hand-written tests checking various comparison operators between
+ various decimal floating point types with a loop to programmatically
+ generate all the combinations. This removes the need to eyeball for all
+ suffixes, which lead to the original duplication.
+
+ Also add a lot more combinations, testing all comparison operators
+ comprehensively. The result is 262 unique tests vs 104 before this
+ patch.
+
+ Tested on x86_86-linux.
+
+ Change-Id: Id215a3d610aa8e032bf06ee160b5e3aed4a92d1e
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/ptype.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/ptype.exp ...
+ DUPLICATE: gdb.base/ptype.exp: ptype the_highest
+ DUPLICATE: gdb.base/ptype.exp: list intfoo
+ DUPLICATE: gdb.base/ptype.exp: list charfoo
+
+ Fix by adjusting the offending test names.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/dfp-test.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/dfp-test.exp ...
+ DUPLICATE: gdb.base/dfp-test.exp: 1.23E is an invalid number
+ DUPLICATE: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+ DUPLICATE: gdb.base/dfp-test.exp: 1.23E is an invalid number
+ DUPLICATE: gdb.base/dfp-test.exp: 1.23E45A is an invalid number
+
+ Fix by using proc_with_prefix where appropriate.
+
+ Tested on x86_64-linux.
+ Co-Authored-By: Andrew Burgess <aburgess@redhat.com>
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/del.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/del.exp ...
+ DUPLICATE: gdb.base/del.exp: info break after removing break on main
+
+ Refactor slightly this test to run the various configurations under
+ foreach_with_prefix so each variant is automatically prefixed, ensuring
+ that the forgotten custom test name cannot happen.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/solib-display.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/solib-display.exp ...
+ DUPLICATE: gdb.base/solib-display.exp: NO: break 25
+ DUPLICATE: gdb.base/solib-display.exp: NO: continue
+ DUPLICATE: gdb.base/solib-display.exp: IN: break 25
+ DUPLICATE: gdb.base/solib-display.exp: IN: continue
+ DUPLICATE: gdb.base/solib-display.exp: SEP: break 25
+ DUPLICATE: gdb.base/solib-display.exp: SEP: continue
+
+ The 'break 25' appears because the test inserts two breakpoints at the
+ same location. Fix this by only inserting the breakpoint once.
+
+ Fix the 'continue' DUPLICATE by giving a phony name to the second
+ continue: 'continue two'.
+
+ While at it, this commit also removes a trailing space.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/decl-before-def.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/decl-before-def.exp ...
+ DUPLICATE: gdb.base/decl-before-def.exp: p a
+
+ Fix by giving explicit names to the two tests that use the same command.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/pending.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/pending.exp ...
+ DUPLICATE: gdb.base/pending.exp: disable other breakpoints
+
+ Fix by adjusting the test names.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/checkpoint.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/checkpoint.exp ...
+ DUPLICATE: gdb.base/checkpoint.exp: verify lines 5 two
+ DUPLICATE: gdb.base/checkpoint.exp: restart 0 one
+
+ This patch fixes the various erroneous incorrect test names.
+
+ While at it, this patch also remove some trailing white spaces across
+ the file.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/pie-fork.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/pie-fork.exp ...
+ DUPLICATE: gdb.base/pie-fork.exp: test_no_detach_on_fork: continue
+
+ Fix by giving explicit names to the 'continue' commands that cause the
+ duplicate message.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/realname-expand.exp
+ When running the testsuite, I have:
+
+ Running .../gdb/testsuite/gdb.base/realname-expand.exp ...
+ DUPLICATE: gdb.base/realname-expand.exp: set basenames-may-differ on
+
+ This is due to the fact that the test restarts GDB twice and each time
+ sets the basenames-may-differ setting. This patch proposes to fix this
+ by not restarting GDB so the setting is maintained. It just clears the
+ breakpoints between the two tests and updates the breakpoints number as
+ required.
+
+ This patch also perform some minor refactorings to improve visibility.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/interp.exp
+ When running the testsuite I have:
+
+ Running .../gdb/testsuite/gdb.base/interp.exp ...
+ DUPLICATE: gdb.base/interp.exp: interpreter-exec mi "-var-update *"
+
+ This is due to the fact that multiple successive instances of
+ gdb_test_multiple use 'pass $cmd', but one of them forgets to reset $cmd
+ to a new test name.
+
+ Fix by using 'pass $gdb_test_name', given that the gdb_test_name is set
+ by gdb_test_multiple.
+
+ While fixing this, this patch refactors all occurrences of the following
+ pattern:
+
+ set cmd foo
+ gdb_test_multiple $cmd $cmd {
+ -re ... {
+ pass $cmd
+ }
+ }
+
+ into
+
+ gdb_test_multiple foo "" {
+ -re ... {
+ pass $gdb_test_name
+ }
+ }
+
+ This makes this test file coherent in its use of $gdb_test_name.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/miscexprs.exp
+ When running the testsuite I see:
+
+ Running .../gdb/testsuite/gdb.base/miscexprs.exp ...
+ DUPLICATE: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+ DUPLICATE: gdb.base/miscexprs.exp: print value of !ibig.i[100]
+
+ This is due to an explicit test name repeated across multiple tests.
+ The actual test explicit names do not add much over the command from
+ wich default test names are derived.
+
+ Fix by removing the explicit test names across the file where they do
+ not add value. While at doing some cleaning, also use $gdb_test_name in
+ the various uses of gdb_test_multiple.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates from gdb.base/stack-checking.exp
+ When running the testsuite I have:
+
+ Running .../gdb/testsuite/gdb.base/stack-checking.exp ...
+ DUPLICATE: gdb.base/stack-checking.exp: bt
+ DUPLICATE: gdb.base/stack-checking.exp: bt
+
+ Fix by using with_test_prefix.
+
+ Tested on x86_64-linux.
+
+2022-01-07 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ RISC-V: update docs to reflect privileged spec v1.9 has been dropped
+ After commit d8af286fffa ("RISC-V: Drop the privileged spec v1.9
+ support.") has removed support for privileged spec v1.9, this removes
+ it from the documentation.
+
+ References: d8af286fffa ("RISC-V: Drop the privileged spec v1.9 support.")
+
+ gas/ChangeLog:
+
+ * configure: Regenerate.
+ * configure.ac: Remove reference to priv spec 1.9.
+ * po/fr.po: Same.
+ * po/ru.po: Same.
+ * po/uk.po: Same.
+
+2022-01-07 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ RISC-V: update docs for -mpriv-spec/--with-priv-spec for 1.12
+ While support for the privileged spec was added in a63375ac337
+ ("RISC-V: Hypervisor ext: support Privileged Spec 1.12"), the
+ documentation has not been updated. Add 1.12 to the relevant
+ documentation.
+
+ References: a63375ac337 ("RISC-V: Hypervisor ext: support Privileged Spec 1.12")
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c: Add 1.12 to the usage message.
+ * configure: Regenerate.
+ * configure.ac: Add 1.12 to the help/usage message.
+ * po/fr.po: Same.
+ * po/ru.po: Same.
+ * po/uk.po: Same.
+
+2022-01-07 Tom Tromey <tromey@adacore.com>
+
+ Do not use CC_HAS_LONG_LONG
+ ax.cc checks CC_HAS_LONG_LONG, but nothing defines this. However,
+ PRINTF_HAS_LONG_LONG is checked in configure. This patch removes the
+ former and keeps the latter. This is PR remote/14976 (filed by me in
+ 2012, lol).
+
+ I'm checking this in.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=14976
+
+2022-01-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: shorten some source lines, and prevent some line breaks
+ Building on the previous commit, this makes use of a trailing @ to
+ split long @deffn lines in the guile.texi source file. This splitting
+ doesn't change how the document is laid out by texinfo.
+
+ I have also wrapped keyword and argument name pairs in @w{...} to
+ prevent line breaks appearing between the two. I've currently only
+ done this for the longer @deffn lines, where a line break is
+ possible. This makes the @deffn lines much nicer to read in the
+ generated pdf.
+
+2022-01-07 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: Remove (...) around guile procedure names in @deffn lines
+ Most guile procedures in the guile.texi file are defined like:
+
+ @deffn {Scheme Procedure} name arg1 arg2 arg3
+
+ But there are two places where we do this:
+
+ @deffn {Scheme Procedure} (name arg1 arg2 arg3)
+
+ Notice the added (...). Though this does represent how a procedure
+ call is written in scheme, it's not the normal style throughout the
+ manual. I also checked the 'info guile' info page to see how they
+ wrote there declarations, and they use the first style too.
+
+ The second style also has the drawback that index entries are added as
+ '(name', and so they are grouped in the '(' section of the index,
+ which is not very user friendly.
+
+ In this commit I've changed the definitions of make-command and
+ make-parameter to use the first style.
+
+ The procedure declaration lines can get pretty long with all of the
+ arguments, and this was true for both of the procedures I am changing
+ in this commit. I have made use of a trailing '@' to split the deffn
+ lines, and keep them under 80 characters in the texi source. This
+ makes no difference to how the final document looks.
+
+ Finally, our current style for keyword arguments, appears to be:
+
+ [#:keyword-name argument-name]
+
+ I don't really understand the reason for this, 'info guile' just seems
+ to use:
+
+ [#:keyword-name]
+
+ which seems just as good to me. But I don't propose to change
+ that just now. What I do notice though, is that sometimes, texinfo
+ will place a line break between the keyword-name and the
+ argument-name, for example, the pdf of make-command is:
+
+ make-command name [#:invoke invoke] [#:command-class
+ command-class] [#:completer-class completer] [#:prefix? prefix] [#:doc
+ doc-string]
+
+ Notice the line break after '#:command-class' and after '#:doc',
+ neither of which are ideal. And so, for the two commands I am
+ changing in this commit, I have made use of @w{...} to prevent line
+ breaks between the keyword-name and the argument-name. Now the pdf
+ looks like this:
+
+ make-command name [#:invoke invoke]
+ [#:command-class command-class] [#:completer-class completer]
+ [#:prefix? prefix] [#:doc doc-string]
+
+ Which seems much better. I'll probably update the other deffn lines
+ at some point.
+
+2022-01-07 Pavel Mayorov <pmayorov@cloudlinux.com>
+
+ Revert previous delta to debug.c. Replace with patch to reject indirect types that point to indirect types.
+ PR 28718
+ * dwarf.c: Revert previous delta.
+ (debug_get_real_type): Reject indirect types that point to
+ indirect types.
+ (debug_get_type_name, debug_get_type_size, debug_write_type):
+ Likewise.
+
+2022-01-07 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Updated the default ISA spec to 20191213.
+ Update the default ISA spec from 2.2 to 20191213 will change the default
+ version of i from 2.0 to 2.1. Since zicsr and zifencei are separated
+ from i 2.1, users need to add them in the architecture string if they need
+ fence.i and csr instructions. Besides, we also allow old ISA spec can
+ recognize zicsr and zifencei, but we won't output them since they are
+ already included in the i extension when i's version is less than 2.1.
+
+ bfd/
+ * elfxx-riscv.c (riscv_parse_add_subset): Allow old ISA spec can
+ recognize zicsr and zifencei.
+ gas/
+ * config/tc-riscv.c (DEFAULT_RISCV_ISA_SPEC): Updated to 20191213.
+ * testsuite/gas/riscv/csr-version-1p10.d: Added zicsr to -march since
+ the default version of i is 2.1.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/option-arch-03.d: Updated i's version to 2.1.
+ * testsuite/gas/riscv/option-arch-03.s: Likewise.
+ ld/
+ * testsuite/ld-riscv-elf/call-relax.d: Added zicsr to -march since
+ the default version of i is 2.1.
+ * testsuite/ld-riscv-elf/attr-merge-arch-01.d: Updated i's version to 2.1.
+ * testsuite/ld-riscv-elf/attr-merge-arch-01a.s: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-01b.: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-02.d: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-02a.s: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-02b.s: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-03.d: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-03a.s: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-03b.s: Likewise.
+ * testsuite/ld-riscv-elf/attr-merge-arch-failed-02.d: Added zifencei
+ into Tag_RISCV_arch since it is added implied when i's version is
+ larger than 2.1.
+
+2022-01-07 Alan Modra <amodra@gmail.com>
+
+ Move elf_backend_always_size_sections earlier
+ * elflink.c (bfd_elf_size_dynamic_sections): Move plt/got init
+ earlier and call elf_backend_always_size_sections at the start
+ of this function.
+
+2022-01-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-06 H.J. Lu <hjl.tools@gmail.com>
+
+ ldelfgen.c: Add missing newlines when calling einfo
+ * ldelfgen.c (ldelf_map_segments): Add the missing newline to
+ einfo.
+
+2022-01-06 Nick Clifton <nickc@redhat.com>
+
+ Fix a stack exhaustion bug parsing malicious STABS format debug information.
+ PR 28718
+ * debug.c (debug_write_type): Allow for malicious recursion via
+ indirect debug types.
+
+2022-01-06 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add support for new SME instructions
+ This patch adds support for three new SME instructions: ADDSPL,
+ ADDSVL and RDSVL. They behave like ADDPL, ADDVL and RDVL, but read
+ the streaming vector length instead of the current vector length.
+
+ opcodes/
+ * aarch64-tbl.h (aarch64_opcode_table): Add ADDSPL, ADDSVL and RDSVL.
+ * aarch64-dis-2.c: Regenerate.
+
+ gas/
+ * testsuite/gas/aarch64/sme.s, testsuite/gas/aarch64/sme.d: Add tests
+ for ADDSPL, ADDSVL and RDSVL.
+
+2022-01-06 Tom Tromey <tom@tromey.com>
+
+ Use target_announce_detach in more targets
+ target_announce_detach was added in commit 0f48b757 ("Factor out
+ "Detaching from program" message printing"). There, Pedro wrote:
+
+ (For now, I left the couple targets that print this a bit differently
+ alone. Maybe this could be further pulled out into infcmd.c. If we
+ did that, and those targets want to continue printing differently,
+ this new function could be converted to a target method.)
+
+ It seems to me that the differences aren't very big, and in some cases
+ other targets handled the output a bit more nicely. In particular,
+ some targets will print a different message when exec_file==NULL,
+ rather than printing the same output with an empty string as
+ exec_file.
+
+ This patch incorporates the nicer output into target_announce_detach,
+ then changes the remaining ports to use this function.
+
+2022-01-06 Tom Tromey <tom@tromey.com>
+
+ Introduce target_announce_attach
+ This introduces target_announce_attach, by analog with
+ target_announce_detach. Then it converts existing targets to use
+ this, rather than emitting their own output by hand.
+
+2022-01-06 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make use add_setshow_prefix_cmd in gnu-nat.c
+ In gnu-nat.c we currently implement some set/show prefix commands
+ "manually", that is, we call add_prefix_cmd, and assign a set and show
+ function to each prefix command.
+
+ These set/show functions print an error indicating that the user
+ didn't type a complete command.
+
+ If we instead switch to using add_setshow_prefix_cmd then we can
+ delete the set/show functions, GDB provides some default functions,
+ which give a nice help style summary that lists all of the available
+ sub-commands, along with a one line summary of what each does.
+
+ Though this clearly changes the existing behaviour, I think this
+ change is acceptable as the new behaviour is more inline with other
+ set/show prefix commands, and the new behaviour is more informative.
+
+ This change will conflict with Tom's change here:
+
+ https://sourceware.org/pipermail/gdb-patches/2022-January/184724.html
+
+ Where Tom changes the set/show functions that I delete. My suggestion
+ is that the set/show functions still be deleted even after Tom's
+ patch (or instead of Tom's patch).
+
+ For testing I've build GDB on GNU/Hurd, and manually tested these
+ functions. I did a grep over the testsuite, and don't believe the
+ existing error messages are being checked for in any tests.
+
+2022-01-06 Tom Tromey <tom@tromey.com>
+
+ Use warning in windows-nat error messages
+ A warning in windows-nat.c can be converted to use the warning
+ function. As a side effect, this arranges for the output to be sent
+ to gdb_stderr.
+
+2022-01-06 Tom Tromey <tom@tromey.com>
+
+ Clean up some dead code in windows-tdep.c
+ windows-tdep.c checks the result of xmalloc, which isn't necessary. I
+ initially removed this dead check, but then went a bit further and
+ modified the code so that some "goto"s and explicit memory management
+ could be removed. Then, I added a couple of missing bounds checks.
+
+ I believe this also fixes a possible bug with a missing 0-termination
+ of a string. I am not certain, but that is why I think the existing
+ code allocates a buffer that is 1 byte too long -- but then it fails
+ to set this byte to 0.
+
+2022-01-06 Tom Tromey <tromey@adacore.com>
+
+ Avoid crash in language_info
+ language_info calls:
+
+ show_language_command (NULL, 1, NULL, NULL);
+
+ ... "knowing" that show_language_command does not use its ui_file
+ parameter. However, this was changed in commit 7514a661
+ ("Consistently Use ui_file parameter to show callbacks").
+
+ This patch changes language_info to pass a ui_file.
+
+ It took a while to write the test -- this function is only called when
+ 'verbose' is on and when switching the "expected" language in auto
+ mode.
+
+2022-01-06 Tom Tromey <tromey@adacore.com>
+
+ Fix some failures in langs.exp
+ langs.exp currently has some fails for me because the stack trace
+ includes full paths to the source files.
+
+ FAIL: gdb.base/langs.exp: up to foo in langs.exp
+ FAIL: gdb.base/langs.exp: up to cppsub_ in langs.exp
+ FAIL: gdb.base/langs.exp: up to fsub in langs.exp
+
+ This fixes the failures by making the filename regexps a bit more lax.
+
+2022-01-06 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop NoAVX insn attribute
+ To avoid issues like that addressed by 6e3e5c9e4181 ("x86: extend SSE
+ check to PCLMULQDQ, AES, and GFNI insns"), base the check on opcode
+ attributes and operand types.
+
+ x86: drop NoAVX from POPCNT
+ With the introduction of CpuPOPCNT the NoAVX attribute has become
+ meaningless for POPCNT.
+
+ x86: drop some "comm" template parameters
+ As already indicated in a remark when introducing these templates, the
+ "commutative" attribute is ignored for legacy encoding templates. Hence
+ it is possible to shorten a number of templates by specifying C directly
+ rather than through a template parameter. I think this helps readability
+ a bit.
+
+ x86: templatize FMA insn templates
+ The operand ordering portion of the mnemonics repeats, causing a flurry
+ of almost identical templates. Abstract this out.
+
+ x86-64: restrict PC32 -> PLT32 conversion
+ Neither non-64-bit code nor uses with a non-zero offset from a symbol
+ should be converted to PLT32, as an eventual PLT entry would not express
+ what was requested.
+
+2022-01-06 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Fix copyright year in gdb/testsuite/gdb.base/inferior-clone.exp
+ I just realized that I forgot to update the year before pushing the
+ patch that created this file. Since it landed after the global
+ copyright year update have been done, this file’s copyright year is
+ updated.
+
+ This patch fixes that.
+
+ Change-Id: I280f7d86e02d38425f7afdcf19a1c3500d51c23f
+
+2022-01-06 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: migrate to standard uintXX_t types
+ Drop the sim-specific unsignedXX types and move to the standard uintXX_t
+ types that C11 provides.
+
+ sim: common: migrate to standard uintXX_t types
+ Drop the sim-specific unsignedXX types and move to the standard uintXX_t
+ types that C11 provides.
+
+ sim: igen: migrate to standard uintXX_t types
+ Move off the custom local 64-bit types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: mips: migrate to standard uintXX_t types
+ Move off the sim-specific unsignedXX types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: cris: migrate to standard uintXX_t types
+ Move off the sim-specific unsignedXX types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: iq2000: migrate to standard uintXX_t types
+ Move off the sim-specific unsignedXX types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: synacor: migrate to standard uintXX_t types
+ Move off the sim-specific unsignedXX types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: msp430: migrate to standard uintXX_t types
+ Move off the sim-specific unsignedXX types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: riscv: migrate to standard uintXX_t types
+ Move off the sim-specific unsignedXX types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: bfin: migrate to standard uintXX_t types
+ Move off the sim-specific unsignedXX types and to the standard uintXX_t
+ types that C11 provides.
+
+ sim: testsuite: migrate to standard uintXX_t types
+ This old code setup its own uintXX types, but since we require C11
+ now, we can assume the standard uintXX_t types exist and use them.
+
+ sim: erc32: migrate to standard uintXX_t types
+ This old port setup its own uintXX types, but since we require C11
+ now, we can assume the standard uintXX_t types exist and use them.
+
+ sim: mn10300: migrate to standard uintXX_t types
+ This old port setup its own uintXX types, but since we require C11
+ now, we can assume the standard uintXX_t types exist and use them.
+
+ sim: v850: migrate to standard uintXX_t types
+ This old port setup its own uintXX types, but since we require C11
+ now, we can assume the standard uintXX_t types exist and use them.
+
+2022-01-06 Mike Frysinger <vapier@gentoo.org>
+
+ sim: m68hc11: migrate to standard uintXX_t types
+ This old port setup its own uintXX types, but since we require C11
+ now, we can assume the standard uintXX_t types exist and use them.
+
+ Also migrate off the sim-specific unsignedXX types.
+
+2022-01-06 Mike Frysinger <vapier@gentoo.org>
+
+ sim: d10v: migrate to standard uintXX_t types
+ This old port setup its own uintXX types, but since we require C11
+ now, we can assume the standard uintXX_t types exist and use them.
+
+ Also migrate off the sim-specific unsignedXX types.
+
+2022-01-06 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cr16: migrate to standard uintXX_t types
+ This old port setup its own uintXX types, but since we require C11
+ now, we can assume the standard uintXX_t types exist and use them.
+
+ Also migrate off the sim-specific unsignedXX types.
+
+2022-01-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-05 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Add elf_x86_allocate_local_got_info
+ Add elf_x86_allocate_local_got_info to allocate x86 GOT info for local
+ symbols.
+
+ * elf32-i386.c (elf_i386_check_relocs): Call
+ elf_x86_allocate_local_got_info.
+ * elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
+ * elfxx-x86.h (elf_x86_allocate_local_got_info): New.
+
+2022-01-05 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ opcodes: Make i386-dis.c thread-safe
+ Improve thread safety in print_insn_i386_att, print_insn_i386_intel and
+ print_insn_i386 by removing the use of static variables.
+
+ Tested on x86_64-pc-linux-gnu.
+
+ 2022-01-04 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * i386-dis.c: Make print_insn_i386_att, print_insn_i386_intel
+ and print_insn_i386 thread-safe
+
+2022-01-05 H.J. Lu <hjl.tools@gmail.com>
+
+ doc: Replace =frame-interp with =frames-interp
+ The actual objdump and readelf option name is =frames-interp, not
+ =frames-interp.
+
+ PR binutils/28747
+ * doc/debug.options.texi: Replace =frame-interp with
+ =frames-interp.
+
+2022-01-05 Tom Tromey <tromey@adacore.com>
+
+ Change riscv_return_value to use RETURN_VALUE_ABI_PRESERVES_ADDRESS
+ Internally, AdaCore has a test that is equivalent to (really a direct
+ translation of) gdb.base/gnu_vector.exp. On 32-bit RISC-V, the
+ "return" part of this test fails.
+
+ Joel tracked this down to riscv_return_value returning
+ RETURN_VALUE_ABI_RETURNS_ADDRESS. Using
+ RETURN_VALUE_ABI_PRESERVES_ADDRESS is more correct here, and fixes the
+ bug.
+
+ I tested this for both 32- and 64-bit RISC-V using the AdaCore
+ internal test suite, and Andrew Burgess tested it using
+ gnu_vector.exp.
+
+2022-01-05 Tom Tromey <tom@tromey.com>
+
+ Filtered output cleanup in expression dumping
+ Most of the expression-dumping code uses filtered output, but a few
+ functions did not. This patch cleans up these instance.
+
+ Note that this won't cause any behavior change, because the only calls
+ to dump_prefix_expression pass in gdb_stdlog. However, in the long
+ run it's easier to audit the code if the number of uses of _unfiltered
+ is reduced.
+
+2022-01-05 Tom Tromey <tom@tromey.com>
+
+ Use filtered output in terminal_info implementations
+ This changes one terminal_info implementation, and
+ default_terminal_info, to use filtered output. Other implementations
+ of this method already use filtered output.
+
+ I can't compile go32-nat.c, so this is a 'best effort' patch.
+
+2022-01-05 Tom Tromey <tom@tromey.com>
+
+ Use filtered output in gnu-nat.c commands
+ gnu-nat.c has a number of ordinary commands that should use filtered
+ output. In a few cases, I changed the output to use gdb_stderr as
+ well. I can't compile this file, so this patch is split out as a
+ "best effort".
+
+ Use filtered output in *-tdep commands
+ Various targets introduce their own commands, which then use
+ unfiltered output. It's better to use filtered output by default, so
+ this patch fixes the instances I found.
+
+ Use filtered output in btrace-related commands
+ This changes btrace.c and record-btrace.c to use filtered output in
+ the commands implemented there.
+
+ Use filtered output in some dumping commands
+ There are several commands that may optionally send their output to a
+ file -- they take an optional filename argument and open a file. This
+ patch changes these commands to use filtered output. The rationale
+ here is that, when printing to gdb_stdout, filtering is appropriate --
+ it is, and should be, the default for all commands. And, when writing
+ to a file, paging will not happen anyway (it only happens when the
+ stream==gdb_stdout), so using the _filtered form will not change
+ anything.
+
+ Use filtered output in kill command
+ This changes the kill command to use filtered output. I split this
+ one into its own patch because, out of an abundance of caution, I
+ changed the function to call bfd_cache_close_all a bit earlier, in
+ case pagination caused an exception.
+
+2022-01-05 Tom Tromey <tom@tromey.com>
+
+ Use filtered output in ordinary commands
+ Many otherwise ordinary commands choose to use unfiltered output
+ rather than filtered. I don't think there's any reason for this, so
+ this changes many such commands to use filtered output instead.
+
+ Note that complete_command is not touched due to a comment there
+ explaining why unfiltered output is believed to be used.
+
+2022-01-05 Tom Tromey <tom@tromey.com>
+
+ Use filtered output in language_info
+ Change language_info to use filtered output. This is ok because the
+ sole caller uses filtered output elsewhere, and because this function
+ calls show_language_command, which also uses filtered output.
+
+ Use filtered output in files_info implementations
+ This changes the implementations of the target files_info method to
+ use filtered output. This makes sense because the sole caller of this
+ method is an ordinary command (info_program_command). This patch
+ changes this command to use filtered output as well.
+
+ Use filtered output in target-descriptions.c
+ target-descriptions.c uses unfiltered output. However, if you happen
+ to invoke this command interactively, it's probably better for it to
+ use filtering. For non-interactive use, this doesn't matter.
+
+ Use filtered output for gdbarch dump
+ This changes gdbarch dumping to use filtered output. This seems a bit
+ better to me, both on the principle that this is an ordinary command,
+ and because the output can be voluminous, so it may be nice to stop in
+ the middle.
+
+2022-01-05 Tom Tromey <tom@tromey.com>
+
+ Implement putstr and putstrn in ui_file
+ In my tour of the ui_file subsystem, I found that fputstr and fputstrn
+ can be simplified. The _filtered forms are never used (and IMO
+ unlikely to ever be used) and so can be removed. And, the interface
+ can be simplified by removing a callback function and moving the
+ implementation directly to ui_file.
+
+ A new self-test is included. Previously, I think nothing was testing
+ this code.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-01-05 Tom Tromey <tromey@adacore.com>
+
+ Change how versioned symbols are recorded
+ A change to BFD caused a gdb regression when using the Ada "catch
+ exception" feature. The bug is visible when a shared library throws
+ an exception that is caught in the main executable.
+
+ This was discussed here:
+
+ https://sourceware.org/pipermail/binutils/2021-July/117538.html
+
+ This patch implements Alan's proposed fix, namely to use VERSYM_HIDDEN
+ rather than the name when deciding to install a version-less symbol.
+
+ The internal test case is identical to the catch_ex_std.exp that is
+ in-tree, so I haven't added a new test. I could not make that one
+ fail on x86-64 Linux, though. It's possible that maybe I'd have to
+ update the system linker first, but I didn't want to try that.
+
+ Regression tested on x86-64 Fedora 32.
+
+2022-01-05 Hannes Domani <ssbssa@yahoo.de>
+
+ Fix inferior_thread attribute in new_thread event
+ Commit 72ee03ff58 fixed a use-after-move bug in add_thread_object, but
+ it changed the inferior_thread attribute to contain the inferior instead
+ of the actual thread.
+ This now uses the thread_obj in its new location instead.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28429
+
+2022-01-05 Tom Tromey <tom@tromey.com>
+
+ Simplify execute_control_commands_to_string
+ execute_control_commands_to_string can be rewritten in terms of
+ execute_fn_to_string, which consolidates some knowledge about which
+ streams to redirect.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-01-05 Tom Tromey <tromey@adacore.com>
+
+ Do not print anything when self-backtrace unavailable
+ Right now, gdb's self-backtrace feature will still print something
+ when a backtrace is unavailable:
+
+ sig_write (_("----- Backtrace -----\n"));
+ [...]
+ sig_write (_("Backtrace unavailable\n"));
+ sig_write ("---------------------\n");
+
+ However, if GDB_PRINT_INTERNAL_BACKTRACE is undefined, it seems better
+ to me to print nothing at all.
+
+ This patch implements this change. It also makes a couple of other
+ small changes in this same module: it adds a header guard to
+ bt-utils.h, and it protects the definitions of
+ gdb_internal_backtrace_1 with a check of GDB_PRINT_INTERNAL_BACKTRACE.
+
+2022-01-05 Tom Tromey <tromey@adacore.com>
+
+ Fix pager regression
+ The patch to fix paging with redirection caused a regression in the
+ internal AdaCore test suite. The problem occurs when running an MI
+ command from the CLI using interpreter-exec, when paging is enabled.
+ This scenario isn't covered by the current test suite, so this patch
+ includes a new test.
+
+ The problem is that, in this situation, MI does:
+
+ fputs_unfiltered (strcmp (context->command, "target-select") == 0
+ ? "^connected" : "^done", mi->raw_stdout);
+
+ Here raw_stdout is a stdio_file wrapping stdout, so the pager thinks
+ that it is ok to buffer the output. However, in this setup, it isn't
+ ok, and flushing the wrap buffer doesn't really work properly. Also,
+ MI next does:
+
+ mi_out_put (uiout, mi->raw_stdout);
+
+ ... but this uses ui_file::write, which also doesn't flush the wrap
+ buffer.
+
+ I think all this will be fixed by the pager rewrite series I'm working
+ on. However, in the meantime, adding the old gdb_stdout check back to
+ the pager fixes this problem.
+
+ Regression tested on x86-64 Fedora 34.
+
+2022-01-05 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Set p_align to the minimum page size if possible
+ Currently, on 32-bit and 64-bit ARM, it seems that ld generates p_align
+ values of 0x10000 even if no section alignment is greater than 0x1000.
+ The issue is more general and probably affects other targets with multiple
+ page sizes.
+
+ While file layout absolutely must take 64K page size into account, that
+ does not have to be reflected in the p_align value. If running on a 64K
+ kernel, the file will be loaded at a 64K page boundary by necessity. On
+ a 4K kernel, 64K alignment is not needed.
+
+ The glibc loader has been fixed to honor p_align:
+
+ https://sourceware.org/bugzilla/show_bug.cgi?id=28676
+
+ similar to kernel:
+
+ commit ce81bb256a224259ab686742a6284930cbe4f1fa
+ Author: Chris Kennelly <ckennelly@google.com>
+ Date: Thu Oct 15 20:12:32 2020 -0700
+
+ fs/binfmt_elf: use PT_LOAD p_align values for suitable start address
+
+ This means that on 4K kernels, we will start to do extra work for 64K
+ p_align, but this pointless for pretty much all binaries (whose section
+ alignment rarely exceeds 16).
+
+ The minimum page size is used, instead of the maximum section alignment
+ due to this glibc bug:
+
+ https://sourceware.org/bugzilla/show_bug.cgi?id=28688
+
+ It has been fixed in glibc 2.35. But linker output must work on existing
+ glibc binaries.
+
+ 1. Set p_align to the minimum page size while laying out segments aligning
+ to the maximum page size or section alignment. The run-time loader can
+ align segments to the minimum page size or above, depending on system page
+ size.
+ 2. If -z max-page-size=NNN is used, p_align will be set to the maximum
+ page size or the largest section alignment.
+ 3. If a section requires alignment higher than the minimum page size,
+ don't set p_align to the minimum page size.
+ 4. If a section requires alignment higher than the maximum page size,
+ set p_align to the section alignment.
+ 5. For objcopy, when the minimum page size != the maximum page size,
+ p_align may be set to the minimum page size while segments are aligned
+ to the maximum page size. In this case, the input p_align will be
+ ignored and the maximum page size will be used to align the ouput
+ segments.
+ 6. Update linker to disallow the common page size > the maximum page size.
+ 7. Update linker to avoid the common page size > the maximum page size.
+ 8. Adjust pru_irq_map-1.d to expect p_align == sh_addralign:
+
+ Section Headers:
+ [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
+ [ 0] NULL 00000000 000000 000000 00 0 0 0
+ [ 1] .text PROGBITS 20000000 00007c 000004 00 AX 0 0 4
+ ...
+ Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ LOAD 0x000074 0x00000000 0x00000000 0x00008 0x00008 RW 0x1
+ LOAD 0x00007c 0x20000000 0x20000000 0x00004 0x00004 R E 0x4
+
+ vs.
+
+ Section Headers:
+ [Nr] Name Type Addr Off Size ES Flg Lk Inf Al
+ [ 0] NULL 00000000 000000 000000 00 0 0 0
+ [ 1] .text PROGBITS 20000000 00007c 000004 00 AX 0 0 4
+ ...
+ Program Headers:
+ Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
+ LOAD 0x000074 0x00000000 0x00000000 0x00008 0x00008 RW 0x1
+ LOAD 0x00007c 0x20000000 0x20000000 0x00004 0x00004 R E 0x1
+
+ To enable this linker optimization, the backend should define ELF_P_ALIGN
+ to ELF_MINPAGESIZE.
+
+ bfd/
+
+ PR ld/28689
+ PR ld/28695
+ * elf-bfd.h (elf_backend_data): Add p_align.
+ * elf.c (assign_file_positions_for_load_sections): Set p_align
+ to the default p_align value while laying out segments aligning
+ to maximum page size or section alignment.
+ (elf_is_p_align_valid): New function.
+ (copy_elf_program_header): Call elf_is_p_align_valid to determine
+ if p_align is valid.
+ * elfxx-target.h (ELF_P_ALIGN): New. Default to 0.
+ (elfNN_bed): Add ELF_P_ALIGN.
+ * elfxx-x86.h (ELF_P_ALIGN): New. Set to ELF_MINPAGESIZE.
+
+ include/
+
+ PR ld/28689
+ PR ld/28695
+ * bfdlink.h (bfd_link_info): Add maxpagesize_is_set.
+
+ ld/
+
+ PR ld/28689
+ PR ld/28695
+ * emultempl/elf.em (gld${EMULATION_NAME}_handle_option): Set
+ link_info.maxpagesize_is_set for -z max-page-size=NNN.
+ * ldelf.c (ldelf_after_parse): Disallow link_info.commonpagesize
+ > link_info.maxpagesize.
+ * testsuite/ld-elf/elf.exp: Pass -z max-page-size=0x4000 to
+ linker to build mbind2a and mbind2b.
+ * testsuite/ld-elf/header.d: Add -z common-page-size=0x100.
+ * testsuite/ld-elf/linux-x86.exp: Add PR ld/28689 tests.
+ * testsuite/ld-elf/p_align-1.c: New file.
+ * testsuite/ld-elf/page-size-1.d: New test.
+ * testsuite/ld-elf/pr26936.d: Add -z common-page-size=0x1000.
+ * testsuite/ld-elf/seg.d: Likewise.
+ * testsuite/ld-scripts/rgn-at5.d: Likewise.
+ * testsuite/ld-pru/pru_irq_map-1.d: Append 1 to name. Adjust
+ expected PT_LOAD segment alignment.
+ * testsuite/ld-pru/pru_irq_map-2.d: Append 2 to name.
+ * testsuite/ld-scripts/pr23571.d: Add -z max-page-size=0x1000.
+
+2022-01-05 Alan Modra <amodra@gmail.com>
+
+ Adjust quoted-sym-names test
+ Some targets restrict symbol addresses in .text to instruction
+ boundaries.
+
+ * testsuite/gas/all/quoted-sym-names.s: Define syms in .data.
+ * testsuite/gas/all/quoted-sym-names.d: Adjust to suit.
+
+2022-01-05 Alan Modra <amodra@gmail.com>
+
+ infinite recursion detected in gold testcase
+ gold/testsuite/icf_test.cc:32:5: error: infinite recursion detected [-Werror=infinite-recursion]
+ 32 | int kept_func()
+ | ^~~~~~~~~
+
+ * testsuite/icf_test.cc: Avoid infinite recursion error.
+
+2022-01-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-04 H.J. Lu <hjl.tools@gmail.com>
+
+ ld/x86: Update -z report-relative-reloc
+ Use 0x%v, instead of bfd_sprintf_vma, to report relative relocations.
+ Change linker relative relocations report from
+
+ tmpdir/dump: R_X86_64_IRELATIVE (offset: 0x0000000000002000, info: 0x0000000000000025, addend: 0x0000000000001007) against 'ifunc' for section '.data.rel.ro.local' in tmpdir/report-reloc-1.o
+
+ to
+
+ tmpdir/dump: R_X86_64_IRELATIVE (offset: 0x2000, info: 0x25, addend: 0x1007) against 'ifunc' for section '.data.rel.ro.local' in tmpdir/report-reloc-1.o
+
+ bfd/
+
+ * elfxx-x86.c (_bfd_x86_elf_link_report_relative_reloc): Use
+ 0x%v instead of bfd_sprintf_vma.
+
+ ld/
+
+ * testsuite/ld-i386/report-reloc-1.l: Updated.
+ * testsuite/ld-x86-64/report-reloc-1.l: Likewise.
+
+2022-01-04 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Improve thin archive member error message
+ Improve thin archive member error message with:
+
+ ld: libbar.a(bar.o): error opening thin archive member: No such file or directory
+
+ instead of
+
+ ld: libbar.a: error adding symbols: No such file or directory
+
+ PR ld/28722
+ * archive.c (_bfd_get_elt_at_filepos): Add a pointer argument
+ for struct bfd_link_info. Call linker callback when failing to
+ open thin archive member.
+ (_bfd_generic_get_elt_at_index): Pass NULL to
+ _bfd_get_elt_at_filepos.
+ (bfd_generic_openr_next_archived_file): Likewise.
+ * coff-alpha.c (alpha_ecoff_get_elt_at_filepos): Add a pointer
+ argument for struct bfd_link_info and pass it to
+ _bfd_get_elt_at_filepos.
+ (alpha_ecoff_openr_next_archived_file): Pass NULL to
+ _bfd_get_elt_at_filepos.
+ (alpha_ecoff_get_elt_at_index): Likewise.
+ * coff-rs6000.c (_bfd_xcoff_openr_next_archived_file): Likewise.
+ * ecoff.c (ecoff_link_add_archive_symbols): Pass info to
+ backend->get_elt_at_filepos.
+ * elflink.c (elf_link_is_defined_archive_symbol): info to
+ _bfd_get_elt_at_filepos.
+ * libbfd-in.h (_bfd_get_elt_at_filepos): Add a pointer argument
+ for struct bfd_link_info.
+ * libbfd.h: Regenerate.
+ * libecoff.h (ecoff_backend_data): Add a pointer argument for
+ struct bfd_link_info to get_elt_at_filepos.
+ * linker.c (_bfd_generic_link_add_archive_symbols): Pass info to
+ _bfd_get_elt_at_filepos.
+
+2022-01-04 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb/testsuite: fix inferior-clone.exp for native-extended-gdbserver
+ 003aae076207dbf32f98ba846158fc32669ef85f (gdb: Copy inferior properties
+ in clone-inferior) introduced a testcase that fails when testing with
+ the native-extended-gdbserver board:
+
+ Running ../gdb/testsuite/gdb.base/inferior-clone.exp ...
+ FAIL: gdb.base/inferior-clone.exp: inferior 2: clone-inferior
+ FAIL: gdb.base/inferior-clone.exp: inferior 3: clone-inferior
+
+ The error is as follows:
+
+ clone-inferior
+ [New inferior 2]
+ Added inferior 2 on connection 1 (extended-remote localhost:2346)
+ (gdb) FAIL: gdb.base/inferior-clone.exp: inferior 2: clone-inferior
+
+ This fails because the testcase only expect the 'Added inferior 2' part
+ of the message. The 'on connection 1 [...]' part is unexpected.
+
+ Fix by adjusting the testcase to a account for the possible trailing
+ part of the message.
+
+ Tested on x86_64-linux with native-extende-gdbserver and unix boards.
+
+ Change-Id: Ie3d6f04c9ffe9cab1fbda8ddf4935ee09b858c7a
+
+2022-01-04 Nick Clifton <nickc@redhat.com>
+
+ Add ATTRIBUTE_UNUSED to load_build_id_debug_file()'s main_filename parameter.
+
+2022-01-04 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: don't pass nullptr to sigwait
+ I tried building GDB on GNU/Hurd, and ran into this warning:
+
+ gdbsupport/scoped_ignore_signal.h:78:16: error: null argument where non-null required (argument 2) [-Werror=nonnull]
+
+ This is because in this commit:
+
+ commit 99624310dd82542c389c89c2e55d8cae36bb74e1
+ Date: Sun Jun 27 15:13:14 2021 -0400
+
+ gdb: fall back on sigpending + sigwait if sigtimedwait is not available
+
+ A call to sigwait was introduced that passes nullptr as the second
+ argument, this call is only reached if sigtimedwait is not supported.
+
+ The original patch was written for macOS, I assume on that target
+ passing nullptr as the second argument is fine.
+
+ On my GNU/Linux box, the man-page for sigwait doesn't mention that
+ nullptr is allowed for the second argument, so my assumption would be
+ that nullptr is not OK, and, if I change the '#ifdef
+ HAVE_SIGTIMEDWAIT' introduced by the above patch to '#if 0', and
+ rebuild on GNU/Linux, I see the same warning that I see on GNU/Hurd.
+
+ I propose that we stop passing nullptr as the second argument to
+ sigwait, and instead pass a valid int pointer. The value returned in
+ the int can then be used in an assert.
+
+ For testing, I (locally) made the change to the #ifdef I mentioned
+ above, compiled GDB, and ran the usual tests, this meant I was using
+ sigwait instead on sigtimedwait on GNU/Linux, I saw no regressions.
+
+2022-01-04 Nick Clifton <nickc@redhat.com>
+
+ Remove a spurious debugging message.
+ PR 28716
+ * dwarf.c (load_build_id_debug_file): Remove spurious printf.
+
+2022-01-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix build breaker in gdb/cli/cli-logging.c
+ Fix build breaker in gdb/cli/cli-logging.c:
+ ...
+ gdb/cli/cli-logging.c: In function \
+ ‘void show_logging_enabled(ui_file*, int, cmd_list_element*, const char*)’:
+ gdb/gdbsupport/gdb_locale.h:28:28: error: cannot convert ‘char*’ to ‘ui_file*’
+ 28 | # define _(String) gettext (String)
+ | ~~~~~~~~^~~~~~~~
+ | |
+ | char*
+ gdb/cli/cli-logging.c:202:25: note: in expansion of macro ‘_’
+ 202 | fprintf_unfiltered (_("on: Logging is enabled.\n"));
+ | ^
+ ...
+
+ Build and tested on x86_64-linux.
+
+ Fixes: 45aec4e5ed8 ("[gdb/cli] Improve show logging output")
+
+2022-01-04 Jan Beulich <jbeulich@suse.com>
+
+ x86/Intel: correct VFPCLASSP{S,D} handling when displacement is present
+ fits_in_disp8() can be called before ambiguous operands get resolved
+ or rejected (in process_suffix()), which requires that i.memshift be
+ non-negative to avoid an internal error. This case wasn't covered by
+ 6c0946d0d28d ("x86: correct VFPCLASSP{S,D} operand size handling").
+
+2022-01-04 Jan Beulich <jbeulich@suse.com>
+
+ gas: rework handling of backslashes in quoted symbol names
+ Strange effects can result from the present handling, e.g.:
+
+ .if 1
+ "backslash\\":
+ .endif
+
+ yields first (correctly) "missing closing `"'" but then also "invalid
+ character '\' in mnemonic" and further "end of file inside conditional".
+ Symbols names ending in \ are in principle not expressable with that
+ scheme.
+
+ Instead of recording whether a backslash was seen, inspect the
+ subsequent character right away. Only accept \\ (meaning a single
+ backslash in the resulting symbol name) and \" (meaning an embedded
+ double quote in the resulting symbol name) for now, warning about any
+ other combination.
+
+ While perhaps not necessary immediately, also permit concatenated
+ strings to form a symbol name. This may become useful if going forward
+ we would want to support \<octal> or \x<hex> sequences, where closing
+ and re-opening quotes can be useful to delimit such sequences.
+
+ The ELF "Multibyte symbol names" test gets switched away from using
+ .set, as that would now also mean excluding nios2 and pru. By using
+ .equiv instead, even the existing #notarget can be dropped. (For h8300
+ the .section directive additionally needs attributes specified, to avoid
+ a target specific warning.)
+
+2022-01-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-03 Tom de Vries <tdevries@suse.de>
+
+ [gdb/cli] Improve show logging output
+ Before commit 3b6acaee895 "Update more calls to add_prefix_cmd" we had the
+ following output for "show logging":
+ ...
+ $ gdb -q -batch -ex "set trace-commands on" \
+ -ex "set logging off" \
+ -ex "show logging" \
+ -ex "set logging on" \
+ -ex "show logging"
+ +set logging off
+ +show logging
+ Future logs will be written to gdb.txt.
+ Logs will be appended to the log file.
+ Output will be logged and displayed.
+ Debug output will be logged and displayed.
+ +set logging on
+ +show logging
+ Currently logging to "gdb.txt".
+ Logs will be appended to the log file.
+ Output will be logged and displayed.
+ Debug output will be logged and displayed.
+ ...
+
+ After that commit we have instead:
+ ...
+ +set logging off
+ +show logging
+ debugredirect: The logging output mode is off.
+ file: The current logfile is "gdb.txt".
+ overwrite: Whether logging overwrites or appends to the log file is off.
+ redirect: The logging output mode is off.
+ +set logging on
+ +show logging
+ debugredirect: The logging output mode is off.
+ file: The current logfile is "gdb.txt".
+ overwrite: Whether logging overwrites or appends to the log file is off.
+ redirect: The logging output mode is off.
+ ...
+ which gives less clear output for some subcommands.
+
+ OTOH, it's explicit about whether boolean values are on or off.
+
+ The new text seems to have been chosen to match the set/show help texts:
+ ...
+ (gdb) help show logging
+ Show logging options.
+
+ List of show logging subcommands:
+
+ show logging debugredirect -- Show the logging debug output mode.
+ show logging file -- Show the current logfile.
+ show logging overwrite -- \
+ Show whether logging overwrites or appends to the log file.
+ show logging redirect -- Show the logging output mode.
+ ...
+
+ Make the show logging messages more clear, while still keep the boolean
+ values explicit, such that we have:
+ ...
+ $ ./gdb.sh -q -batch -ex "show logging"
+ logging debugredirect: off: \
+ Debug output will go to both the screen and the log file.
+ logging enabled: off: Logging is disabled.
+ logging file: The current logfile is "gdb.txt".
+ logging overwrite: off: Logging appends to the log file.
+ logging redirect: off: Output will go to both the screen and the log file.
+ ...
+
+ Tested on x86_64-linux.
+
+2022-01-03 Tom Tromey <tromey@adacore.com>
+
+ Fix use of 'printf' in gdbtypes.c
+ An earlier patch of mine, commit 64b7cc50 ("Remove
+ gdb_print_host_address") inadvertently changed a function in
+ gdbtypes.c to use printf rather than printf_filtered. This patch
+ fixes the problem.
+
+ Fix regression in page-logging.exp
+ Simon and Tom pointed out that page-logging.exp failed on their
+ machines. Tom tracked this down to the "width" setting. Since
+ there's no need in the test to change the width, it seems simplest to
+ remove the setting. I confirmed that the test still fails if the fix
+ is backed out, ensuring that the test is still testing what it
+ purports to.
+
+ Small indentation fix in eval.c
+ I noticed that the AdaCore tree had a small divergence in eval.c -- it
+ had a fix for an indentation problem in binop_promote. I'm checking
+ in this small fix as obvious.
+
+2022-01-03 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle for loop initial decl with gcc 4.8.5
+ When running test-case gdb.threads/schedlock-thread-exit.exp on a system with
+ system compiler gcc 4.8.5, I run into:
+ ...
+ src/gdb/testsuite/gdb.threads/schedlock-thread-exit.c:33:3: error: \
+ 'for' loop initial declarations are only allowed in C99 mode
+ ...
+
+ Fix this by:
+ - using -std=c99, or
+ - using -std=gnu99, in case that's required, or
+ - in the case of the jit test-cases, rewriting the for loops.
+
+ Tested on x86_64-linux, both with gcc 4.8.5 and gcc 7.5.0.
+
+2022-01-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-02 Tom Tromey <tom@tromey.com>
+
+ Update copying.awk for _initialize declaration patch
+ Commit 6c265988 ("gdb: add back declarations for _initialize
+ functions") modified copying.c, but not copying.awk. This patch
+ updates copying.awk to backport the appropriate fix. This way, if
+ copying.awk is run again, it will create the correct output.
+
+ I'm checking this in as obvious.
+
+2022-01-02 Tom Tromey <tom@tromey.com>
+
+ Use filtered output in print_i387_ext
+ print_i387_ext mostly uses filtered output, but one call in the middle
+ of the function uses the _unfiltered form. This patch fixes this
+ call. I'm checking this in as obvious.
+
+2022-01-02 Alan Modra <amodra@gmail.com>
+
+ Update year range in copyright notice of binutils files
+ The result of running etc/update-copyright.py --this-year, fixing all
+ the files whose mode is changed by the script, plus a build with
+ --enable-maintainer-mode --enable-cgen-maint=yes, then checking
+ out */po/*.pot which we don't update frequently.
+
+ The copy of cgen was with commit d1dd5fcc38ead reverted as that commit
+ breaks building of bfp opcodes files.
+
+2022-01-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2022-01-01 Mike Frysinger <vapier@gentoo.org>
+
+ gdb: copyright: fix a few comment typos
+
+ sim: ppc: drop natural types
+ These are almost entirely unused. For the very few places using them,
+ replace with explicit signed types. This matches what was done in the
+ common sim code.
+
+ sim: mips: clean up bad style/whitespace
+ This doesn't fix all the problems, but grabs a bunch of the more
+ obvious ones.
+
+ sim: tweak copyright lines for gnulib update-copyright
+ The regex it uses does not like so many leading spaces which causes
+ it to think the files lack copyright. Trim them down so the script
+ can find & update them accordingly.
+
+ gdb: update sim mips testsuite copyright exemption
+ The sim testsuite was reorganized last year, so update the path.
+
+2022-01-01 Mike Frysinger <vapier@gentoo.org>
+
+ unify 64-bit bfd checks
+ Move the 64-bit bfd logic out of bfd/configure.ac and into bfd64.m4
+ under config so it can be shared between all the other subdirs.
+
+ This replaces want64 with enable_64_bit_bfd which was already being
+ declared, but not used directly.
+
+2022-01-01 Joel Brobecker <brobecker@adacore.com>
+
+ Update Copyright year in gdb/testsuite/gdb.arch/powerpc-power10.exp
+ This commit updates the copyright year range in the script
+ gdb/testsuite/gdb.arch/powerpc-power10.exp. The update was
+ performed by running gdb/copyright.py again, to make sure
+ that the copyright year range will be automatically updated
+ in years forward.
+
+2022-01-01 Joel Brobecker <brobecker@adacore.com>
+
+ Fix copyright header in gdb/testsuite/gdb.arch/powerpc-power10.exp
+ The copyright year and holder line is slight malformed, missing
+ a space after a comma, and this is sufficient for gdb's
+ copyright.py script to miss this file during its automated
+ copyright year update.
+
+ This commit fixes this.
+
+2022-01-01 Joel Brobecker <brobecker@adacore.com>
+
+ gdb/copyright.py: Add update-netbsd.sh to MULTIPLE_COPYRIGHT_HEADERS
+ Add gdb/syscalls/update-netbsd.sh to the reminder printed
+ at the end of the execution listing all the files where
+ a manual update of the copyright header is needed. This
+ scripts contains some inline code which includes a copyright
+ header.
+
+ Manual copyright year update of various GDB files
+ This commit updates the copyright year in some files where
+ we have a copyright year outside of the copyright year,
+ and thus are not included in gdb's copyright.py script.
+
+2022-01-01 Joel Brobecker <brobecker@adacore.com>
+
+ Automatic Copyright Year update after running gdb/copyright.py
+ This commit brings all the changes made by running gdb/copyright.py
+ as per GDB's Start of New Year Procedure.
+
+ For the avoidance of doubt, all changes in this commits were
+ performed by the script.
+
+2022-01-01 Joel Brobecker <brobecker@adacore.com>
+
+ Update Copyright Year in gdb, gdbserver and gdbreplay version output
+ This commit changes the copyright year printed by gdb, gdbserver
+ and gdbreplay when printing the tool's version.
+
+2022-01-01 Alan Modra <amodra@gmail.com>
+
+ ubsan: next_char_of_string signed integer overflow
+ Squash another totally useless fuzz report that I should have ignored.
+
+ * read.c (next_char_of_string): Avoid integer overflow.
+
+2022-01-01 Alan Modra <amodra@gmail.com>
+
+ ubsan: bfd_mach_o_build_commands shift exponent 64 is too large
+ * mach-o.c (bfd_mach_o_read_section_32): Limit alignment further.
+ (bfd_mach_o_read_section_64): Likewise.
+
+2022-01-01 Alan Modra <amodra@gmail.com>
+
+ ubsan: signed integer multiply overflow
+ 9223371018427387904 * 2 cannot be represented in type 'long', yes, but
+ we don't care.
+
+ * expr.c (expr): Avoid signed overflow.
+
+2022-01-01 Alan Modra <amodra@gmail.com>
+
+ asan: Null-dereference in _bfd_xcoff_copy_private_bfd_data
+ sec->output_section will be NULL when objcopy removes sections.
+
+ * coff-rs6000.c (_bfd_xcoff_copy_private_bfd_data): Protect against
+ objcopy removing sections.
+
+2022-01-01 Alan Modra <amodra@gmail.com>
+
+ ubsan: integer overflow in section filepos subtraction
+ * elf.c (assign_file_positions_for_non_load_sections): Avoid
+ signed integer overflow.
+
+2022-01-01 Alan Modra <amodra@gmail.com>
+
+ Remove unnecessary ELF_MINPAGESIZE defines
+ The idea of this patch is to make it easy to see which targets (just
+ sparc) have ELF_MINPAGESIZE != ELF_COMMONPAGESIZE.
+
+ * elf32-arm.c (ELF_MINPAGESIZE): Don't define.
+ * elf32-metag.c: Likewise.
+ * elfnn-aarch64.c: Likewise.
+ * elf64-x86-64.c: Likewise. Also don't redefine a bunch of other
+ macros for l1om elf64-target.h use that are unchanged from default.
+
+2022-01-01 H.J. Lu <hjl.tools@gmail.com>
+
+ ld-x86-64: Pass options to linker with "-Wl,"
+ * testsuite/ld-x86-64/x86-64.exp: Pass options to linker with
+ "-Wl,".
+
+2022-01-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-31 Tom Tromey <tom@tromey.com>
+
+ Do not call reinitialize_more_filter from avr_io_reg_read_command
+ avr_io_reg_read_command is an ordinary gdb command, and so should not
+ be calling reinitialize_more_filter. This patch removes it. I'm
+ checking this in as obvious. Tested by rebuilding.
+
+2021-12-31 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Define check_relocs_failed in elfxx-x86.h
+ * elf32-i386.c (check_relocs_failed): Moved to ...
+ * elfxx-x86.h (check_relocs_failed): Here. New.
+ * elf64-x86-64.c (check_relocs_failed): Removed.
+
+ Define X86_PCREL_TYPE_P/X86_SIZE_TYPE_P in elfxx-x86.h
+ * elf32-i386.c: Don't include "elf/i386.h".
+ (X86_PCREL_TYPE_P): Removed.
+ (X86_SIZE_TYPE_P): Likewise.
+ (elf_i386_check_relocs): Pass false to NEED_DYNAMIC_RELOCATION_P.
+ (elf_i386_relocate_section): Pass false to
+ GENERATE_DYNAMIC_RELOCATION_P and COPY_INPUT_RELOC_P.
+ * elf64-x86-64.c: Don't include "elf/x86-64.h".
+ (X86_PCREL_TYPE_P): Removed.
+ (X86_SIZE_TYPE_P): Likewise.
+ (elf_x86_64_check_relocs): Pass true to NEED_DYNAMIC_RELOCATION_P
+ and X86_PCREL_TYPE_P.
+ (elf_x86_64_relocate_section): Pass true to X86_PCREL_TYPE_P,
+ X86_SIZE_TYPE_P, GENERATE_DYNAMIC_RELOCATION_P and
+ COPY_INPUT_RELOC_P.
+ * elfxx-x86.c: Don't include "elf/i386.h" nor "elf/x86-64.h".
+ * elfxx-x86.h (X86_64_PCREL_TYPE_P): New.
+ (I386_PCREL_TYPE_P): Likewise.
+ (X86_PCREL_TYPE_P): Likewise.
+ (X86_64_SIZE_TYPE_P): Likewise.
+ (I386_SIZE_TYPE_P): Likewise.
+ (X86_SIZE_TYPE_P): Likewise.
+ (NEED_DYNAMIC_RELOCATION_P): Add IS_X86_64 and pass it to
+ X86_PCREL_TYPE_P.
+ (COPY_INPUT_RELOC_P): Likewise.
+ (GENERATE_DYNAMIC_RELOCATION_P): Add IS_X86_64, pass it to
+ X86_PCREL_TYPE_P and X86_SIZE_TYPE_P.
+
+2021-12-31 Tamar Christina <tamar.christina@arm.com>
+
+ ld: fix coff PE SEH
+ COFF_WITH_pex64 and COFF_WITH_peAArch64 can't be true at the same time.
+ That means that two conditionals that control the sorting of the .pdata section
+ became a falsum.
+
+ The testsuite doesn't catch this because the linker does the sorting and to link
+ you require library support from the unwinder so we can't test from binutils in
+ isolation.
+
+ bfd/ChangeLog:
+
+ 2021-12-31 Tamar Christina <tamar.christina@arm.com>
+
+ PR ld/28682
+ * peXXigen.c: Fix conditional.
+
+2021-12-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Use filtered output in show callbacks
+ "show" command callbacks, like most ordinary gdb commands, should use
+ filtered output. I found a few that did not, so this patch changes
+ them to use the filtered form.
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Consistently Use ui_file parameter to show callbacks
+ I happened to notice that one "show" callback was printing to
+ gdb_stdout rather than to the passed-in ui_file parameter. I went
+ through all such callbacks and fixed them to consistently use the
+ ui_file.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Use gdb_stdlog for MI debugging
+ When MI debugging is enabled, the logging output should be sent to
+ gdb_stdlog. This is part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Use debug_prefixed_printf_cond_nofunc in index-cache
+ This changes index-cache.c to use debug_prefixed_printf_cond_nofunc.
+ As a side effect, logs are now written to gdb_stdlog. This is part of
+ PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Send minsym logging to gdb_stdlog
+ This changes minsyms.c to send logging output to gdb_stdlog. This is
+ part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Use gdb_stdlog for separate debug file logging
+ This changes the separate debug file logging code (spread across two
+ files) to use gdb_stdlog for its output. This is part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Use debug_prefixed_printf_cond_nofunc in machoread
+ This changes machoread.c to use debug_prefixed_printf_cond_nofunc. As
+ a side effect, the logs are now written to gdb_stdlog. This is part
+ of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Use debug_prefixed_printf_cond_nofunc in microblaze.c
+ This changes microblaze.c to use the standard logging macro. As a
+ side effect, logs will now go to gdb_stdlog. This is part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Send debugging data to gdb_stdlog in mips-linux-nat.c
+ This changes mips-linux-nat.c to send some logging output to
+ gdb_stdlog, rather than stdout. This is part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Send arch-utils error messages to gdb_stderr
+ This changes arch-utils.c to send some error messages to gdb_stderr.
+ This is part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Use correct stream for process record output
+ The process record code often emits unfiltered output. In some cases,
+ this output ought to go to gdb_stderr (but see below). In other
+ cases, the output is guarded by a logging variable and so ought to go
+ to gdb_stdlog. This patch makes these changes.
+
+ Note that in many cases, the output to stderr is followed by a
+ "return -1", which is how process record indicates an error. It seems
+ to me that calling error here would be preferable, because, in many
+ cases, that's all the caller does when it sees a -1. However, I
+ haven't made this change.
+
+ This is part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Send jit.c errors to gdb_stderr
+ jit.c writes some error messages to gdb_stdout, but using gdb_stderr
+ is better. This is part of PR gdb/7233.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=7233
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Fix logging redirection bug with pager
+ I noticed yesterday that if gdb output is redirected to a file, the
+ pager will still be active. This is irritating, because the output
+ isn't actually visible -- just the pager prompt. Looking in bugzilla,
+ I found that this had been filed 17 years ago, as PR cli/8798.
+
+ This patch fixes the bug. It changes the pagination code to query the
+ particular ui-file to see if paging is allowable. The ui-file
+ implementations are changed so that only the stdout implementation and
+ a tee (where one sub-file is stdout) can page.
+
+ Regression tested on x86-64 Fedora 34.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=8798
+
+2021-12-29 Tom Tromey <tom@tromey.com>
+
+ Remove unusual use of core_addr_eq and core_addr_hash
+ gdbtypes.h uses core_addr_eq and core_addr_hash in a weird way: taking
+ the address of a member and then passing this (as a void*) to these
+ functions.
+
+ It seems better to simply inline the ordinary code here. CORE_ADDR is
+ a scalar so it can be directly compared, and the identity hash
+ function seems safe to assume as well.
+
+ After this, core_addr_eq and core_addr_hash are unused, so this patch
+ removes them.
+
+2021-12-29 Lancelot SIX <lancelot.six@amd.com>
+
+ gdb: Copy inferior properties in clone-inferior
+ This commit ensures that the following settings are cloned from one
+ inferior to the new one when processing the clone-inferior command:
+ - inferior-tty
+ - environment variables
+ - cwd
+ - args
+
+ Some of those parameters can be passed as command line arguments to GDB
+ (-args and -tty), so one could expect the clone-inferior to respect
+ those flags. The following debugging session illustrates that:
+
+ gdb -nx -quiet -batch \
+ -ex "show args" \
+ -ex "show inferior-tty" \
+ -ex "clone-inferior" \
+ -ex "inferior 2" \
+ -ex "show args" \
+ -ex "show inferior-tty" \
+ -tty=/some/tty \
+ -args echo foo bar
+ Argument list to give program being debugged when it is started is "foo bar".
+ Terminal for future runs of program being debugged is "/some/tty".
+ [New inferior 2]
+ Added inferior 2.
+ [Switching to inferior 2 [<null>] (/bin/echo)]
+ Argument list to give program being debugged when it is started is "".
+ Terminal for future runs of program being debugged is "".
+
+ The other properties this commit copies on clone (i.e. CWD and the
+ environment variables) are included since they are related (in the sense
+ that they influence the runtime behavior of the program) even if they
+ cannot be directly set using command line switches.
+
+ There is a chance that this patch changes existing user workflow. I
+ think that this change is mostly harmless. If users want to start a new
+ inferior based on an existing one, they probably already propagate those
+ settings to the new inferior in some way.
+
+ Tested on x86_64-linux.
+
+ Change-Id: I3b1f28b662f246228b37bb24c2ea1481567b363d
+
+2021-12-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-28 H.J. Lu <hjl.tools@gmail.com>
+
+ elf32-i386: Fix a typo in GOT comments
+ Entry offsets in the global offset table are multiples of 4, not 8.
+
+ * elf32-i386.c (elf_i386_relocate_section): Fix a typo in GOT
+ comments.
+
+2021-12-28 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Don't check non-thin archive member file size
+ There is no need to check member file size for thin archive member.
+
+ * bfdio.c (bfd_bread): Don't check non-thin archive member file
+ size.
+
+2021-12-28 Alan Modra <amodra@gmail.com>
+
+ gas reloc sorting
+ In some cases, eg. riscv_pre_output_hook, gas generates out-of-order
+ relocations. Various places in the linker assume relocs are sorted
+ by increasing r_offset, which is normally the case. Provide
+ GAS_SORT_RELOCS to handle unsorted relocs.
+
+ bfd/
+ PR 28709
+ * elf32-nds32.c (nds32_insertion_sort): Make static.
+ * elf32-nds32.h (nds32_insertion_sort): Delete declaration.
+ gas/
+ PR 28709
+ * write.c (write_relocs): Implement reloc sorting by r_offset
+ when GAS_SORT_RELOCS.
+ * config/tc-nds32.c (compar_relent, nds32_set_section_relocs): Delete.
+ * config/tc-nds32.h (nds32_set_section_relocs): Don't declare.
+ (SET_SECTION_RELOCS): Don't define.
+ (GAS_SORT_RELOCS): Define.
+ * config/tc-riscv.h (GAS_SORT_RELOCS): Define.
+
+2021-12-28 jiawei <jiawei@iscas.ac.cn>
+
+ ld: Fix testcase errors due to -shared not support.
+ Reviewed-by: Jim Wilson <jim.wilson.gcc@gmail.com>
+
+ ld/ChangeLog:
+
+ * testsuite/ld-ctf/ctf.exp: Add shared lib check.
+ * testsuite/ld-plugin/lto.exp: Add lto shared check.
+
+2021-12-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-27 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Update comments for check_relocs in elf_backend_data
+ Since
+
+ commit 5c3261b0e834647cf9eb555320e20871b7854f98
+ Author: H.J. Lu <hjl.tools@gmail.com>
+ Date: Mon Oct 16 03:49:54 2017 -0700
+
+ ELF: Call check_relocs after opening all inputs
+
+ check_relocs is called after opening all inputs.
+
+ * elf-bfd.h (elf_backend_data::check_relocs): Update comments.
+
+2021-12-27 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Remove emultempl/linux.em
+ Remove emultempl/linux.em whose last usage was removed by
+
+ commit c65c21e1ffd1e02d9970a4bca0b7e384788a50f0
+ Author: Alan Modra <amodra@gmail.com>
+ Date: Mon Apr 16 22:14:01 2018 +0930
+
+ various i386-aout and i386-coff target removal
+
+ Also tidies some other aout leftovers in binutils-common.exp.
+
+2021-12-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-24 Tom Tromey <tom@tromey.com>
+
+ Remove gdb_print_host_address
+ gdb_print_host_address is just a simple wrapper around
+ fprintf_filtered. However, it is readily replaced in all callers by a
+ combination of %s and call to host_address_to_string. This also
+ simplifies the code, so I think it's worthwhile to remove this
+ function.
+
+ Regression tested on x86-64 Fedora 64.
+
+2021-12-24 Tom Tromey <tom@tromey.com>
+
+ Move gdb_bfd_errmsg to gdb_bfd.c
+ gdb_bfd.c contains most of gdb's BFD-related utility functions.
+ However, gdb_bfd_errmsg is in utils.c. It seemed better to me to move
+ this out of util.[ch] and into the BFD-related file instead.
+
+ Tested by rebuilding.
+
+2021-12-24 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Rewrite the csr testcases.
+ Maskray (Fangrui Song) had suggested me before that we should combine
+ multiple testcases into one file as possible as we can. So that we can
+ more easily understand what these test cases are testing, and easier to
+ maintain. Therefore, this patch rewrites all csr testcases, to make them
+ more clean.
+
+ gas/
+ * testsuite/gas/riscv/csr-fail-nonexistent.d: Renamed from
+ priv-reg-fail-nonexistent testcase.
+ * testsuite/gas/riscv/csr-fail-nonexistent.: Likewise.
+ * testsuite/gas/riscv/csr-fail-nonexistent.s: Likewise.
+ * testsuite/gas/riscv/csr-insns-pseudo-noalias.d: Renamed from
+ priv-reg-pseudo testcase.
+ * testsuite/gas/riscv/csr-insns-pseudo.d: Likewise.
+ * testsuite/gas/riscv/csr-insns-pseudo.s: Likewise.
+ * testsuite/gas/riscv/csr-insns-read-only.d: Renamed from
+ priv-reg-fail-read-only-02 testcase.
+ * testsuite/gas/riscv/csr-insns-read-only.l: Likewise.
+ * testsuite/gas/riscv/csr-insns-read-only.s: Likewise.
+ * testsuite/gas/riscv/h-ext-32.d: Moved hypervisor csrs to csr.s.
+ * testsuite/gas/riscv/h-ext-32.s: Likewise.
+ * testsuite/gas/riscv/h-ext-64.d: Likewise.
+ * testsuite/gas/riscv/h-ext-64.s: Likewise.
+ * testsuite/gas/riscv/csr.s: Renamed from priv-reg.s, and then
+ added the hypervisor csrs.
+ * testsuite/gas/riscv/csr-version-1p9p1.d: The csr testcase when
+ the privileged spec is 1.9.1. Also tested all invalid csr warnings
+ when -mcsr-check is enabled.
+ * testsuite/gas/riscv/csr-version-1p9p1.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p10.d: Likewise, but the
+ privileged spec is 1.10..
+ * testsuite/gas/riscv/csr-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p11.d: Likewise, but the
+ privileged spec is 1.11.
+ * testsuite/gas/riscv/csr-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/csr-version-1p12.d: Likewise, but the
+ privileged spec is 1.12.
+ * testsuite/gas/riscv/csr-version-1p12.l: Likewise.
+ * testsuite/gas/riscv/priv-reg*: Removed or Renamed.
+
+2021-12-24 Vineet Gupta <vineetg@rivosinc.com>
+
+ RISC-V: Hypervisor ext: support Privileged Spec 1.12
+ This is the Hypervisor Extension 1.0
+
+ - Hypervisor Memory-Management Instructions
+ HFENCE.VVMA, HFENCE.GVMA,
+
+ - Hypervisor Virtual Machine Load and Store Instructions
+ HLV.B, HLV.BU, HSV.B,
+ HLV.H, HLV.HU, HLVX.HU, HSB.H,
+ HLV.W, HLV.WU, HLVX.WU, HSV.W,
+ HLV.D, HSV.D
+
+ - Hypervisor CSRs (some new, some address changed)
+ hstatus, hedeleg, hideleg, hie, hcounteren, hgeie, htval, hip, hvip,
+ htinst, hgeip, henvcfg, henvcfgh, hgatp, hcontext, htimedelta, htimedeltah,
+ vsstatus, vsie, vstvec, vsscratch, vsepc, vscause, vstval, vsip, vsatp,
+
+ Note that following were added already as part of svinval extension
+ support:
+ HINVAL.GVMA, HINVAL.VVMA
+
+ Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
+ Reviewed-by: Nelson Chu <nelson.chu@sifive.com>
+
+ bfd/
+ * cpu-riscv.c (riscv_priv_specs): Added entry for 1.12.
+ * cpu-riscv.h (enum riscv_spec_class): Added PRIV_SPEC_CLASS_1P12.
+ gas/
+ * config/tc-riscv.c (abort_version): Updated comment.
+ (validate_riscv_insn): Annotate switch-break.
+ * testsuite/gas/riscv/h-ext-32.d: New testcase for hypervisor.
+ * testsuite/gas/riscv/h-ext-32.s: Likewise.
+ * testsuite/gas/riscv/h-ext-64.d: Likewise.
+ * testsuite/gas/riscv/h-ext-64.s: Likewise.
+ include/
+ * opcode/riscv-opc.h: Added encodings for hypervisor csrs and
+ instrcutions.
+ opcodes/
+ * riscv-opc.c (riscv_opcodes): Added hypervisor instrcutions.
+
+2021-12-24 Vineet Gupta <vineetg@rivosinc.com>
+
+ RISC-V: Hypervisor ext: drop Privileged Spec 1.9.1 implementation/tests
+ This makes way for a clean 1.12 based Hypervisor Ext support.
+
+ There are no known implementors of 1.9.1 H-ext. (Per Jim, kendryte k210
+ is based on priv spec 1.9.1, but it seems unlikely that they implemented
+ H-ext).
+
+ Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
+ Reviewed-by: Nelson Chu <nelson.chu@sifive.com>
+
+ gas/
+ * testsuite/gas/riscv/csr-dw-regnums.d: Drop the hypervisor csrs
+ defined in the privileged spec 1.9.1.
+ * testsuite/gas/riscv/csr-dw-regnums.s: Likewise.
+ * testsuite/gas/riscv/priv-reg-fail-read-only-01.s: Likewise.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p10.l: Likewise.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p11.l: Likewise.
+ * testsuite/gas/riscv/priv-reg-version-1p10.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/priv-reg.s: Likewise.
+ include/
+ * opcode/riscv-opc.h: Drop the hypervisor csrs defined in the
+ privileged spec 1.9.1.
+
+2021-12-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-23 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: resolve some duplicate testnames in gdb.mi
+ Set of fixes to resolve some duplicate test names in the gdb.mi/
+ directory. There should be no real test changes after this set of
+ fixes, they are all either:
+
+ - Adding with_test_prefix type constructs to make test names unique,
+ or
+
+ - Changing the test name to be more descriptive, or better reflect
+ the test being run.
+
+2021-12-23 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/remote: handle attach when stop packet lacks thread-id
+ Bug PR gdb/28405 reports a regression when using attach with an
+ extended-remote target. In this case the target is not including a
+ thread-id in the stop packet it sends back after the attach.
+
+ The regression was introduced with this commit:
+
+ commit 8f66807b98f7634c43149ea62e454ea8f877691d
+ Date: Wed Jan 13 20:26:58 2021 -0500
+
+ gdb: better handling of 'S' packets
+
+ The problem is that when GDB processes the stop packet, it sees that
+ there is no thread-id and so has to "guess" which thread the stop
+ should apply to.
+
+ In this case the target only has one thread, so really, there's no
+ guessing needed, but GDB still runs through the same process, this
+ shouldn't cause us any problems.
+
+ However, after the above commit, GDB now expects itself to be more
+ internally consistent, specifically, only a thread that GDB thinks is
+ resumed, can be a candidate for having stopped.
+
+ It turns out that, when GDB attaches to a process through an
+ extended-remote target, the threads of the process being attached too,
+ are not, initially, marked as resumed.
+
+ And so, when GDB tries to figure out which thread the stop might apply
+ too, it finds no threads in the processes marked resumed, and so an
+ assert triggers.
+
+ In extended_remote_target::attach we create a new thread with a call
+ to add_thread_silent, rather than remote_target::remote_add_thread,
+ the reason is that calling the latter will result in a call to
+ 'add_thread' rather than 'add_thread_silent'. However,
+ remote_target::remote_add_thread includes additional
+ actions (i.e. calling remote_thread_info::set_resumed and set_running)
+ which are missing from extended_remote_target::attach. These missing
+ calls are what would serve to mark the new thread as resumed.
+
+ In this commit I propose that we add an extra parameter to
+ remote_target::remote_add_thread. This new parameter will force the
+ new thread to be added with a call to add_thread_silent. We can now
+ call remote_add_thread from the ::attach method, the extra
+ actions (listed above) will now be performed, and the thread will be
+ left in the correct state.
+
+ Additionally, in PR gdb/28405, a segfault is reported. This segfault
+ triggers when 'set debug remote 1' is used before trying to reproduce
+ the original assertion failure. The cause of this is in
+ remote_target::select_thread_for_ambiguous_stop_reply, where we do
+ this:
+
+ remote_debug_printf ("first resumed thread is %s",
+ pid_to_str (first_resumed_thread->ptid).c_str ());
+ remote_debug_printf ("is this guess ambiguous? = %d", ambiguous);
+
+ gdb_assert (first_resumed_thread != nullptr);
+
+ Notice that when debug printing is on we dereference
+ first_resumed_thread before we assert that the pointer is not
+ nullptr. This is the cause of the segfault, and is resolved by moving
+ the assert before the debug printing code.
+
+ I've extended an existing test, ext-attach.exp, so that the original
+ test is run multiple times; we run in the original mode, as normal,
+ but also, we now run with different packets disabled in gdbserver. In
+ particular, disabling Tthread would trigger the assertion as it was
+ reported in the original bug. I also run the test in all-stop and
+ non-stop modes now for extra coverage, we also run the tests with
+ target-async enabled, and disabled.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28405
+
+2021-12-23 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: on x86-64 non-trivial C++ objects are returned in memory
+ Fixes PR gdb/28681. It was observed that after using the `finish`
+ command an incorrect value was displayed in some cases. Specifically,
+ this behaviour was observed on an x86-64 target.
+
+ Consider this test program:
+
+ struct A
+ {
+ int i;
+
+ A ()
+ { this->i = 0; }
+ A (const A& a)
+ { this->i = a.i; }
+ };
+
+ A
+ func (int i)
+ {
+ A a;
+ a.i = i;
+ return a;
+ }
+
+ int
+ main ()
+ {
+ A a = func (3);
+ return a.i;
+ }
+
+ And this GDB session:
+
+ $ gdb -q ex.x
+ Reading symbols from ex.x...
+ (gdb) b func
+ Breakpoint 1 at 0x401115: file ex.cc, line 14.
+ (gdb) r
+ Starting program: /home/andrew/tmp/ex.x
+
+ Breakpoint 1, func (i=3) at ex.cc:14
+ 14 A a;
+ (gdb) finish
+ Run till exit from #0 func (i=3) at ex.cc:14
+ main () at ex.cc:23
+ 23 return a.i;
+ Value returned is $1 = {
+ i = -19044
+ }
+ (gdb) p a
+ $2 = {
+ i = 3
+ }
+ (gdb)
+
+ Notice how after the `finish` the contents of $1 are junk, but, when I
+ immediately ask for the value of `a`, I get back the correct value.
+
+ The problem here is that after the finish command GDB calls the
+ function amd64_return_value to figure out where the return value can
+ be found (on x86-64 targets anyway).
+
+ This function makes the wrong choice for the struct A in our case, as
+ sizeof(A) <= 8, then amd64_return_value decides that A will be
+ returned in a register. GDB then reads the return value register an
+ interprets the contents as an instance of A.
+
+ Unfortunately, A is not trivially copyable (due to its copy
+ constructor), and the sys-v specification for argument and return
+ value passing, says that any non-trivial C++ object should have space
+ allocated for it by the caller, and the address of this space is
+ passed to the callee as a hidden first argument. The callee should
+ then return the address of this space as the return value.
+
+ And so, the register that GDB is treating as containing an instance of
+ A, actually contains the address of an instance of A (in this case on
+ the stack), this is why GDB shows the incorrect result.
+
+ The call stack within GDB for where we actually go wrong is this:
+
+ amd64_return_value
+ amd64_classify
+ amd64_classify_aggregate
+
+ And it is in amd64_classify_aggregate that we should be classifying
+ the type as AMD64_MEMORY, instead of as AMD64_INTEGER as we currently
+ do (via a call to amd64_classify_aggregate_field).
+
+ At the top of amd64_classify_aggregate we already have this logic:
+
+ if (TYPE_LENGTH (type) > 16 || amd64_has_unaligned_fields (type))
+ {
+ theclass[0] = theclass[1] = AMD64_MEMORY;
+ return;
+ }
+
+ Which handles some easy cases where we know a struct will be placed
+ into memory, that is (a) the struct is more than 16-bytes in size,
+ or (b) the struct has any unaligned fields.
+
+ All we need then, is to add a check here to see if the struct is
+ trivially copyable. If it is not then we know the struct will be
+ passed in memory.
+
+ I originally structured the code like this:
+
+ if (TYPE_LENGTH (type) > 16
+ || amd64_has_unaligned_fields (type)
+ || !language_pass_by_reference (type).trivially_copyable)
+ {
+ theclass[0] = theclass[1] = AMD64_MEMORY;
+ return;
+ }
+
+ This solved the example from the bug, and my small example above. So
+ then I started adding some more extensive tests to the GDB testsuite,
+ and I ran into a problem. I hit this error:
+
+ gdbtypes.h:676: internal-error: loc_bitpos: Assertion `m_loc_kind == FIELD_LOC_KIND_BITPOS' failed.
+
+ This problem is triggered from:
+
+ amd64_classify_aggregate
+ amd64_has_unaligned_fields
+ field::loc_bitpos
+
+ Inside the unaligned field check we try to get the bit position of
+ each field. Unfortunately, in some cases the field location is not
+ FIELD_LOC_KIND_BITPOS, but is FIELD_LOC_KIND_DWARF_BLOCK.
+
+ An example that shows this bug is:
+
+ struct B
+ {
+ short j;
+ };
+
+ struct A : virtual public B
+ {
+ short i;
+
+ A ()
+ { this->i = 0; }
+ A (const A& a)
+ { this->i = a.i; }
+ };
+
+ A
+ func (int i)
+ {
+ A a;
+ a.i = i;
+ return a;
+ }
+
+ int
+ main ()
+ {
+ A a = func (3);
+ return a.i;
+ }
+
+ It is the virtual base class, B, that causes the problem. The base
+ class is represented, within GDB, as a field within A. However, the
+ location type for this field is a DWARF_BLOCK.
+
+ I spent a little time trying to figure out how to convert the
+ DWARF_BLOCK to a BITPOS, however, I realised that, in this case at
+ least, conversion is not needed.
+
+ The C++ standard says that a class is not trivially copyable if it has
+ any virtual base classes. And so, in this case, even if I could
+ figure out the BITPOS for the virtual base class fields, I know for
+ sure that I would immediately fail the trivially_copyable check. So,
+ lets just reorder the checks in amd64_classify_aggregate to:
+
+ if (TYPE_LENGTH (type) > 16
+ || !language_pass_by_reference (type).trivially_copyable
+ || amd64_has_unaligned_fields (type))
+ {
+ theclass[0] = theclass[1] = AMD64_MEMORY;
+ return;
+ }
+
+ Now, if we have a class with virtual bases we will fail quicker, and
+ avoid the unaligned fields check completely.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28681
+
+2021-12-23 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make use of SCOPE_EXIT to manage thread executing state
+ While working on another patch relating to how GDB manages threads
+ executing and resumed state, I spotted the following code in
+ record-btrace.c:
+
+ executing = tp->executing ();
+ set_executing (proc_target, inferior_ptid, false);
+
+ id = null_frame_id;
+ try
+ {
+ id = get_frame_id (get_current_frame ());
+ }
+ catch (const gdb_exception &except)
+ {
+ /* Restore the previous execution state. */
+ set_executing (proc_target, inferior_ptid, executing);
+
+ throw;
+ }
+
+ /* Restore the previous execution state. */
+ set_executing (proc_target, inferior_ptid, executing);
+
+ return id;
+
+ I notice that we only catch the exception so we can call
+ set_executing, and this is the same call to set_executing that we need
+ to perform in the non-exception return path.
+
+ This would be much cleaner if we could use SCOPE_EXIT to avoid the
+ try/catch, so lets do that.
+
+ While cleaning this up, I also applied a similar patch to
+ record-full.c, though there's no try/catch in that case, but using
+ SCOPE_EXIT makes the code safe if, in the future, we do start throwing
+ exceptions.
+
+ There should be no user visible changes after this commit.
+
+2021-12-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-22 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/doc: add some index entries relating to mi-async setting
+ I noticed that the mi-async setting was not referenced from the index
+ in any way, this commit tries to rectify that a bit.
+
+ The @cindex lines I think are not controversial, these same index
+ entries are used elsewhere in the manual for async related topics (see
+ @node Background Execution).
+
+ The only bit that might be controversial is that I've added a @kindex
+ entry for 'set mi-async' when the command is documented as '-gdb-set
+ mi-async' (with a similar difference for the show/-gdb-show).
+
+ My reasoning here is that nothing else is indexed under -gdb-set or
+ -gdb-show, and as -gdb-set/-gdb-show are just the MI equivalent for
+ set/show anything that is documented under set/show can be adjusted
+ using -gdb-set/-gdbshow, and so, I've tried to keep the index
+ consistent for mi-async.
+
+2021-12-22 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: convert 'set debug lin-lwp' to a boolean command
+ Convert the 'set debug lin-lwp' command to a boolean. Adds a new
+ LINUX_NAT_SCOPED_DEBUG_ENTER_EXIT macro, and makes use of it in one
+ place (linux_nat_target::stop).
+
+ The manual entry for 'set debug lin-lwp' is already vague about
+ exactly what arguments this command takes, and the description talks
+ about turning debug on and off, so I don't think there's any updates
+ required there.
+
+ I have updated the doc strings shown when the users enters 'help show
+ debug lin-lwp' or 'help show debug lin-lwp'. The old title lines used
+ to talk about the 'GNU/Linux lwp module', but this debug flag is now
+ used for any native linux target debug, so we now talk about
+ 'GNU/Linux native target'. The body string for this setting has been
+ changed from 'Enables printf debugging output.' to 'When on, print
+ debug messages relating to the GNU/Linux native target.', the old
+ value looks like a cut&paste error to me.
+
+2021-12-22 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add threads debugging switch
+ Add new commands:
+
+ set debug threads on|off
+ show debug threads
+
+ Prints additional debug information relating to thread creation and
+ deletion.
+
+ GDB already announces when threads are created of course.... most of
+ the time, but sometimes threads are added silently, in which case this
+ debug message is the only mechanism to see the thread being added.
+ Also, though GDB does announce when a thread exits, it doesn't
+ announce when the thread object is deleted, I've added a debug message
+ for that.
+
+ Additionally, having message printed through the debug system will
+ cause the messages to be nested to an appropriate depth when other
+ debug sub-systems are turned on (especially things like `infrun` and
+ `lin-lwp`).
+
+2021-12-22 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Update Scalar Crypto testcases.
+ Add opcodes in testcases to make sure every instruction generate
+ right opcode after disassemble.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/k-ext-64.d: Add opcode detect.
+ * testsuite/gas/riscv/k-ext.d: Ditto.
+ * testsuite/gas/riscv/zbkb-32.d: Ditto.
+ * testsuite/gas/riscv/zbkb-64.d: Ditto.
+ * testsuite/gas/riscv/zbkc-32.d: Ditto.
+ * testsuite/gas/riscv/zbkc-64.d: Ditto.
+ * testsuite/gas/riscv/zbkx-32.d: Ditto.
+ * testsuite/gas/riscv/zbkx-64.d: Ditto.
+ * testsuite/gas/riscv/zknd-32.d: Ditto.
+ * testsuite/gas/riscv/zknd-64.d: Ditto.
+ * testsuite/gas/riscv/zkne-32.d: Ditto.
+ * testsuite/gas/riscv/zkne-64.d: Ditto.
+ * testsuite/gas/riscv/zknh-32.d: Ditto.
+ * testsuite/gas/riscv/zknh-64.d: Ditto.
+ * testsuite/gas/riscv/zksed-32.d: Ditto.
+ * testsuite/gas/riscv/zksed-64.d: Ditto.
+ * testsuite/gas/riscv/zksh-32.d: Ditto.
+ * testsuite/gas/riscv/zksh-64.d: Ditto.
+
+2021-12-22 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbarch-components.py: change empty "params" tuples to empty lists
+ During review, it was suggested to change the "params" parameter from a
+ tuple to a list, for esthetic reasons. The empty ones are still tuples
+ though, they should probably be changed to be empty lists, for
+ consistency. It does not change anything in the script result.
+
+ Change-Id: If13c6c527aa167a5ee5b45740e5f1bda1e9517e4
+
+2021-12-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-21 Luis Machado <luis.machado@linaro.org>
+
+ [AArch64] Fix typo in error messages
+ Fix mispelling of PROT_ME to PROT_MTE in the error messages.
+
+2021-12-21 Joel Sherrill <joel@rtems.org>
+
+ Obsolete m32c-rtems and m32r-rtems
+ 2020-12-20 Joel Sherrill <joel@rtems.org>
+
+ bfd/
+ * config.bfd (m32c-*-rtems*): Remove target.
+
+ ld/
+ * configure.tgt (m32c-*-rtems*): Remove target.
+ * configure.tgt (m32r-*-rtems*): Remove target.
+
+2021-12-21 Jan Beulich <jbeulich@suse.com>
+
+ x86: -mfence-as-lock-add=yes doesn't work for 16-bit mode
+ Rather than trying to fix this (which would require making an assumption
+ on the upper half of %esp being zero), simply issue an error. While at
+ it, since the generated code is in conflict with -momit-lock-prefix=yes,
+ issue an error in that case as well.
+
+ gas/ELF: avoid below-base ref in obj_elf_parse_section_letters()
+ We would better be prepared for 'm' being the first character of the
+ incoming string.
+
+2021-12-21 Alan Modra <amodra@gmail.com>
+
+ Typo fixes in binutils doc
+ * doc/binutils.texi: Fix typos.
+
+2021-12-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-20 Tom Tromey <tom@tromey.com>
+
+ Remove print_spaces
+ This removes the print_spaces helper function, in favor of using the
+ "*%s" idiom that's already used in many places in gdb. One spot (in
+ symmisc.c) is changed to use print_spaces_filtered, because the rest
+ of that function is using filtered output. (This highlights one way
+ that the printf idiom is better -- this error is harder to make when
+ using that.)
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-12-20 Tom Tromey <tom@tromey.com>
+
+ Remove puts_debug
+ I noticed that puts_debug isn't used in the tree. git log tells me
+ that the last use was removed in 2015:
+
+ commit 40e0b27177e747600d3ec186458fe0e482a1cf77
+ Author: Pedro Alves <palves@redhat.com>
+ Date: Mon Aug 24 15:40:26 2015 +0100
+
+ Delete the remaining ROM monitor targets
+
+ ... and this commit mentions that the code being removed here probably
+ hadn't worked for 6 years prior to that.
+
+ Based on this, I'm removing puts_debug. I don't think it's useful.
+ Tested by rebuilding.
+
+2021-12-20 Tom Tromey <tom@tromey.com>
+
+ Make n_spaces return a const char *
+ n_spaces keeps the spaces in a static buffer. If a caller overwrites
+ these, it may give an incorrect result to a subsequent caller. So,
+ make the return type const to help avoid this outcome.
+
+2021-12-20 Enze Li <lienze2010@hotmail.com>
+
+ Add Enze Li to gdb/MAINTAINERS
+
+2021-12-20 Joel Brobecker <brobecker@adacore.com>
+
+ gdb/ada-exp.y: Reformat comment to follow GDB's coding standards
+ This commit reformats a comment in gdb/ada-exp.y to avoid
+ the leading '*' at the beginning of each line of the comment.
+
+ gdb/ada-lang.h: Reformat comment to follow coding standards
+ This commit reformats a comment in gdb/ada-lang.h to avoid
+ the leading '*' at the beginning of each line of the comment.
+
+2021-12-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-19 Alan Modra <amodra@gmail.com>
+
+ Obsolete m32c-rtems
+
+ readelf: avoid a possible divide by zero
+ * readelf.c (process_section_headers): Check SHT_RELR entsize.
+
+2021-12-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-18 Enze Li <lienze2010@hotmail.com>
+
+ gdb: add "exit" command as an alias for "quit"
+ This command adds the "exit" command as an alias for the "quit"
+ command, as requested in PR gdb/28406.
+
+ The documentation is also updated to mention this new command.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28406
+
+2021-12-18 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add assert in remote_target::wait relating to async being off
+ While working on another patch I ended up in a situation where I had
+ async mode disabled (with 'maint set target-async off'), but the async
+ event token got marked anyway.
+
+ In this situation GDB was continually calling into
+ remote_target::wait, however, the async token would never become
+ unmarked as the unmarking is guarded by target_is_async_p.
+
+ We could just unconditionally unmark the token, but that would feel
+ like just ignoring a bug, so, instead, lets assert that if
+ !target_is_async_p, then the async token should not be marked.
+
+ This assertion would have caught my earlier mistake.
+
+ There should be no user visible changes with this commit.
+
+2021-12-18 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/remote: some fixes for 'maint set target-async off'
+ While working on another patch relating to remote targets, I wanted to
+ test with 'maint set target-async off' in place. Unfortunately I ran
+ into some problems. This commit is an attempt to fix one of the
+ issues I hit.
+
+ In my particular case I was actually running with:
+
+ maint set target-async off
+ maint set target-non-stop off
+
+ that is, we're telling GDB to force the targets to operate in
+ non-async mode, and in all-stop mode. Here's my GDB session showing
+ the problem:
+
+ (gdb) maintenance set target-async off
+ (gdb) maintenance set target-non-stop off
+ (gdb) target extended-remote :54321
+ Remote debugging using :54321
+ (gdb) attach 2365960
+ Attaching to process 2365960
+ No unwaited-for children left.
+ (gdb)
+
+ Notice the 'No unwaited-for children left.' error, this is the
+ problem. There's no reason why GDB should not be able to attach to
+ the process.
+
+ The problem is this:
+
+ 1. The user runs 'attach PID' and this sends GDB into attach_command
+ in infcmd.c. From here we call the ::attach method on the attach
+ target, which will be the extended_remote_target.
+
+ 2. In extended_remote_target::attach, we attach to the remote target
+ and get the first reply (which is a stop packet). We put off
+ processing the stop packet until the end of ::attach. We setup the
+ inferior and thread to represent the process we attached to, and
+ download the target description. Finally, we process the initial
+ stop packet.
+
+ If '!target_is_non_stop_p ()' and '!target_can_async_p ()', which is
+ the case for us given the maintenance commands we used, we cache the
+ stop packet within the remote_state::buf for later processing.
+
+ 3. Back in attach_command, if 'target_is_non_stop_p ()' then we
+ request that the target stops. This will either process any cached
+ stop replies, or request that the target stops, and process the stop
+ replies. However, this code is not what we use due to non-stop mode
+ being disabled. So, we skip to the next step which is to call
+ validate_exec_file.
+
+ 4. Calling validate_exec_file can cause packets to be sent to the
+ remote target, and replies received, the first path I hit is the
+ call to target_pid_to_exec_file, which calls
+ remote_target::pid_to_exec_file, which can then try to read the
+ executable from the remote. Sending an receiving packets will make
+ use of the remote_state::buf object.
+
+ 5. The attempt to attach continues, but the damage is already done...
+
+ So, the problem is that, in step #2 we cache a stop reply in the
+ remote_state::buf, and then in step #4 we reuse the remote_state::buf
+ object, discarding any cached stop reply. As a result, the initial
+ stop, which is sent when GDB first attaches to the target, is lost.
+
+ This problem can clearly be seen, I feel, by looking at the
+ remote_state::cached_wait_status flag. This flag tells GDB if there
+ is a wait status cached in remote_state::buf. However, in
+ remote_target::putpkt_binary and remote_target::getpkt_or_notif_sane_1
+ this flag is just set back to 0, doing this immediately discards any
+ cached data.
+
+ I don't know if this scheme ever made sense, looking at commit
+ 2d717e4f8a54, where the cached_wait_status flag was added, it appears
+ that there was nothing between where the stop was cached, and where
+ the stop was consumed, so, I suspect, there never was a situation
+ where we ended up in putpkt_binary or getpkt_or_notif_sane_1 and
+ needed to clear to the flag, maybe the clearing was added "just in
+ case". Whatever the history, I claim that this clearing this flag is
+ no longer a good idea.
+
+ So, my first step toward fixing this issue was to replace the two
+ instances of 'rs->cached_wait_status = 0;' in ::putpkt_binary and
+ ::getpkt_or_notif_sane_1 with 'gdb_assert (rs->cached_wait_status ==
+ 0);', this, at least would show me when GDB was doing something
+ dangerous, and indeed, this assert is now hit in my test case above.
+
+ I did play with using some kind of scoped restore to backup, and
+ restore the remote_state::buf object in all the places within remote.c
+ that I was hitting where the ::buf was being corrupted. The first
+ problem with this is that, where the ::cached_wait_status flag is
+ reset is _not_ where ::buf is corrupted. For the ::putpkt_binary
+ case, by the time we get to the method the buffer has already been
+ corrupted in many cases, so we end up needing to add the scoped
+ save/restore within the callers, which means we need the save/restore
+ in _lots_ of places.
+
+ Plus, using this save/restore model feels like the wrong solution. I
+ don't think that it's obvious that the buffer might be holding cached
+ data, and I think it would be too easy for new corruptions of the
+ buffer to be introduced, which could easily go unnoticed for a long
+ time.
+
+ So, I really wanted a solution that didn't require us to cache data in
+ the ::buf object.
+
+ Luckily, I think we already have such a solution in place, the
+ remote_state::stop_reply_queue, it seems like this does exactly the
+ same task, just in a slightly different way. With the
+ ::stop_reply_queue, the stop packets are processed upon receipt and
+ the stop_reply object is added to the queue. With the ::buf cache
+ solution, the unprocessed stop reply is cached in the ::buf, and
+ processed later.
+
+ So, finally, in this commit, I propose to remove the
+ remote_state::cached_wait_status flag and to stop using the ::buf to
+ cache stop replies. Instead, stop replies will now always be stored
+ in the ::stop_reply_queue.
+
+ There are two places where we use the ::buf to hold a cached stop
+ reply, the first is in the ::attach method, and the second is in
+ remote_target::start_remote, however, the second of these cases is far
+ less problematic, as after caching the stop reply in ::buf we call the
+ global start_remote function, which does very little work before
+ calling normal_stop, which processes the cached stop reply. However,
+ my plan is to switch both users over to using ::stop_reply_queue so
+ that the old (unsafe) ::cached_wait_status mechanism can be completely
+ removed.
+
+ The next problem is that the ::stop_reply_queue is currently only used
+ for async-mode, and so, in remote_target::push_stop_reply, where we
+ push stop_reply objects into the ::stop_reply_queue, we currently also
+ mark the async event token. I've modified this so we only mark the
+ async event token if 'target_is_async_p ()' - note, _is_, not _can_
+ here. The ::push_stop_reply method is called in places where async
+ mode has been temporarily disabled, but, when async mode is switched
+ back on (see remote_target::async) we will mark the event token if
+ there are events in the queue.
+
+ Another change of interest is in remote_target::remote_interrupt_as.
+ Previously this code checked ::cached_wait_status, but didn't check
+ for events in the ::stop_reply_queue. Now that ::cached_wait_status
+ has been removed we now check the queue length instead, which should
+ have the same result.
+
+ Finally, in remote_target::wait_as, I've tried to merge the processing
+ of the ::stop_reply_queue with how we used to handle the
+ ::cached_wait_status flag.
+
+ Currently, when processing the ::stop_reply_queue we call
+ process_stop_reply and immediately return. However, when handling
+ ::cached_wait_status we run through the whole of ::wait_as, and return
+ at the end of the function.
+
+ If we consider a standard stop packet, the two differences I see are:
+
+ 1. Resetting of the remote_state::waiting_for_stop_reply, flag; this
+ is not currently done when processing a stop from the
+ ::stop_reply_queue.
+
+ 2. The final return value has the possibility of being adjusted at
+ the end of ::wait_as, as well as there being calls to
+ record_currthread, non of which are done if we process a stop from
+ the ::stop_reply_queue.
+
+ After discussion on the mailing list:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-December/184535.html
+
+ it was suggested that, when an event is pushed into the
+ ::stop_reply_queue, the ::waiting_for_stop_reply flag is never going
+ to be set. As a result, we don't need to worry about the first
+ difference. I have however, added a gdb_assert to validate the
+ assumption that the flag is never going to be set. If in future the
+ situation ever changes, then we should find out pretty quickly.
+
+ As for the second difference, I have resolved this by having all stop
+ packets taken from the ::stop_reply_queue, pass through the return
+ value adjustment code at the end of ::wait_as.
+
+ An example of a test that reveals the benefits of this commit is:
+
+ make check-gdb \
+ RUNTESTFLAGS="--target_board=native-extended-gdbserver \
+ GDBFLAGS='-ex maint\ set\ target-async\ off \
+ -ex maint\ set\ target-non-stop\ off' \
+ gdb.base/attach.exp"
+
+ For testing I've been running test on x86-64/GNU Linux, and run with
+ target boards unix, native-gdbserver, and native-extended-gdbserver.
+ For each board I've run with the default GDBFLAGS, as well as with:
+
+ GDBFLAGS='-ex maint\ set\ target-async\ off \
+ -ex maint\ set\ target-non-stop\ off' \
+
+ Though running with the above GDBFLAGS is clearly a lot more unstable
+ both before and after my patch, I'm not seeing any consistent new
+ failures with my patch, except, with the native-extended-gdbserver
+ board, where I am seeing new failures, but only because more tests are
+ now running. For that configuration alone I see the number of
+ unresolved go down by 49, the number of passes goes up by 446, and the
+ number of failures also increases by 144. All of the failures are new
+ tests as far as I can tell.
+
+2021-12-18 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ x86: Terminate mnemonicendp in swap_operand()
+ Tested on x86_64-pc-linux-gnu.
+
+ opcodes/ChangeLog:
+ 2021-12-17 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * i386-dis.c (swap_operand): Terminate mnemonicendp.
+
+ gas/ChangeLog:
+ 2021-12-17 Vladimir Mezentsev <vladimir.mezentsev@oracle.com>
+
+ * testsuite/gas/i386/opts-intel.d: Updated expected disassembly.
+ * testsuite/gas/i386/opts.d: Likewise.
+ * testsuite/gas/i386/sse2avx-opts-intel.d: Likewise.
+ * testsuite/gas/i386/sse2avx-opts.d: Likewise.
+ * testsuite/gas/i386/x86-64-opts-intel.d: Likewise.
+ * testsuite/gas/i386/x86-64-opts.d: Likewise.
+ * testsuite/gas/i386/x86-64-sse2avx-opts-intel.d: Likewise.
+ * testsuite/gas/i386/x86-64-sse2avx-opts.d: Likewise.
+
+2021-12-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-17 Tom Tromey <tom@tromey.com>
+
+ Document gdbarch-components.py
+ This adds a comment to document how to update gdbarch.
+
+ Remove gdbarch.sh
+ This patch runs gdbarch.py and removes gdbarch.sh.
+
+2021-12-17 Simon Marchi <simon.marchi@efficios.com>
+
+ Add new gdbarch generator
+ The new gdbarch generator is a Python program. It reads the
+ "components.py" that was created in the previous patch, and generates
+ gdbarch.c and gdbarch-gen.h.
+
+ This is a relatively straightforward translation of the existing .sh
+ code. It doesn't try very hard to be idiomatic Python or to be
+ especially smart.
+
+ It is, however, incredibly faster:
+
+ $ time ./gdbarch.sh
+
+ real 0m8.197s
+ user 0m5.779s
+ sys 0m3.384s
+
+ $ time ./gdbarch.py
+
+ real 0m0.065s
+ user 0m0.053s
+ sys 0m0.011s
+
+ Co-Authored-By: Tom Tromey <tom@tromey.com>
+
+2021-12-17 Tom Tromey <tom@tromey.com>
+
+ Generate new gdbarch-components.py from gdbarch.sh
+ The new gdbarch.sh approach will be to edit a Python file, rather than
+ adding a line to a certain part of gdbarch.sh. We use the existing sh
+ code, though, to generate the first draft of this .py file.
+
+ Documentation on the format will come in a subsequent patch.
+
+ Note that some info (like "staticdefault") in the current code is
+ actually unused, and so is ignored by this new generator.
+
+2021-12-17 Tom Tromey <tom@tromey.com>
+
+ Do not sort the fields in gdbarch_dump
+ This changes gdbarch.sh so that it no longer sorts the fields in
+ gdbarch_dump. This sorting isn't done anywhere else by gdbarch.sh,
+ and this simplifies the new generator a little bit.
+
+ Do not generate gdbarch.h
+ Now that gdbarch.h has been split, we no longer need the generator
+ code in gdbarch.sh, so remove it.
+
+2021-12-17 Tom Tromey <tom@tromey.com>
+
+ Split gdbarch.h into two files
+ This patch splits gdbarch.h into two files -- gdbarch.h now is
+ editable and hand-maintained, and the new gdbarch-gen.h file is the
+ only thing generated by gdbarch.sh. This lets us avoid maintaining
+ boilerplate in the gdbarch.sh file.
+
+ Note that gdbarch.sh still generates gdbarch.h after this patch. This
+ makes it easier to re-run when rebasing. This code is removed in a
+ subsequent patch.
+
+2021-12-17 Tom Tromey <tom@tromey.com>
+
+ Move ordinary gdbarch code to arch-utils
+ While I think it makes sense to generate gdbarch.c, at the same time I
+ think it is better for ordinary code to be editable in a C file -- not
+ as a hunk of C code embedded in the generator.
+
+ This patch moves this sort of code out of gdbarch.sh and gdbarch.c and
+ into arch-utils.c, then has arch-utils.c include gdbarch.c.
+
+2021-12-17 Maciej W. Rozycki <macro@embecosm.com>
+
+ Avoid redundant operations in `fortran_array_walker'
+ Move inner dimension's element type determination outside the respective
+ loops in `fortran_array_walker'. The operation is exactly the same with
+ each iteration, so there is no point in redoing it for each element and
+ while a smart compiler might be able to move it outside the loop it is
+ regardless a bad coding style. No functional change.
+
+ Initialize `m_ndimensions' in the member initializer list
+ Following our coding convention initialize the `m_ndimensions' member in
+ the member initializer list rather than in the body of the constructor
+ of the `fortran_array_walker' class. No functional change.
+
+2021-12-17 Lancelot SIX <lancelot.six@amd.com>
+ Pedro Alves <pedro@palves.net>
+
+ gdb/tui: install SIGWINCH only when connected to a TTY
+ PR26056 reports that when GDB is connected to non-TTY stdin/stdout, it
+ crashes when it receives a SIGWINCH signal.
+
+ This can be reproduced as follows:
+
+ $ gdb/gdb -nx -batch -ex 'run' --args sleep 60 </dev/null 2>&1 | cat
+
+ # from another terminal:
+ $ kill -WINCH %(pidof gdb)
+
+ When doing so, the process crashes in a call to rl_resize_terminal:
+
+ void
+ rl_resize_terminal (void)
+ {
+ _rl_get_screen_size (fileno (rl_instream), 1);
+ ...
+ }
+
+ The problem is that at this point rl_instream has the value NULL.
+
+ The rl_instream variable is supposed to be initialized during a call to
+ readline_initialize_everything, which in a normal startup sequence is
+ called under this call chain:
+
+ tui_interp::init
+ tui_ensure_readline_initialized
+ rl_initialize
+ readline_initialize_everything
+
+ In tui_interp::init, we have the following sequence:
+
+ tui_initialize_io ();
+ tui_initialize_win (); // <- Installs SIGWINCH
+ if (gdb_stdout->isatty ())
+ tui_ensure_readline_initialized (); // <- Initializes rl_instream
+
+ This function unconditionally installs the SIGWINCH signal handler (this
+ is done by tui_initialize_win), and then if gdb_stdout is a TTY it
+ initializes readline. Therefore, if stdout is not a TTY, SIGWINCH is
+ installed but readline is not initialized. In such situation
+ rl_instream stays NULL, and when GDB receives a SIGWINCH it calls its
+ handler and in fine tries to access rl_instream leading to the crash.
+
+ This patch proposes to fix this issue by installing the SIGWINCH signal
+ handler only if GDB is connected to a TTY. Given that this
+ initialization it the only task of tui_initialize_win, this patch moves
+ tui_initialize_win just after the call to
+ tui_ensure_readline_initialized.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26056
+ Change-Id: I6458acef7b0d9beda2a10715d0345f02361076d9
+
+2021-12-17 Alan Modra <amodra@gmail.com>
+
+ asan: NULL dereference in bfd_elf_set_group_contents
+ * elf-bfd.h (struct output_elf_obj_tdata): Make num_section_syms
+ unsigned.
+ * elf.c (bfd_elf_set_group_contents): Bounds check sec->index
+ and check that entry in elf_section_syms for sec is non-NULL.
+ (_bfd_elf_symbol_from_bfd_symbol): Adjust.
+
+2021-12-17 Alan Modra <amodra@gmail.com>
+
+ asan: use after free in _bfd_elf_mips_get_relocated_section_contents
+ Leaving entries on mips_hi16_list from a previous pass over relocs
+ leads to confusing bugs.
+
+ * elfxx-mips.c (_bfd_elf_mips_get_relocated_section_contents):
+ Free mips_hi16_list entries on error exit.
+
+2021-12-17 Alan Modra <amodra@gmail.com>
+
+ asan: abort in wasm_scan_name_function_section
+ Macros like READ_LEB128 in wasm-module.c that alter control flow are
+ evil. Maintainers will break your code if you have hidden ways to
+ reach labels.
+
+ * wasm-module.c (wasm_scan_name_function_section): Don't
+ attempt to bfd_release NULL.
+
+2021-12-17 Alan Modra <amodra@gmail.com>
+
+ asan: heap-buffer-overflow in bpf_elf_generic_reloc
+ The bpf reloc howtos are a bit weird, using bitpos to specify an
+ offset from r_offset that is outside the size of the reloc as given by
+ howto.size. That means bfd_get_reloc_size gives the wrong answer for
+ range checking, and thus bfd_reloc_offset_in_range can't be used.
+
+ * elf64-bpf.c (bpf_elf_generic_reloc): Handle bitpos offset reloc
+ range checking.
+
+2021-12-17 Alan Modra <amodra@gmail.com>
+
+ ubsan: bfd.c:2519:8: shift exponent 34 is too large
+ * bfd.c (bfd_update_compression_header): Avoid integer overflow.
+
+ asan: buffer overflow in mmo_get_symbols
+ * mmo.c (mmo_get_symbols): Error on symbol name exceeding max length.
+
+2021-12-17 Alan Modra <amodra@gmail.com>
+
+ asan: buffer overflow in elfnn-aarch64.c get_plt_type
+ We can't assume .dynamic is a multiple of ElfNN_External_Dyn, at least
+ not when presented with fuzzed object files.
+
+ * elfnn-aarch64.c (get_plt_type): Don't access past end of
+ improperly sized .dynamic.
+
+2021-12-17 Alan Modra <amodra@gmail.com>
+
+ try_build_id_prefix gcc-10 -Wformat-security errors
+ dwarf.c:11300:3: error: format not a string literal and no format arguments [-Werror=format-security]
+ 11300 | f += sprintf (f, prefix);
+
+ PR 28697
+ * dwarf.c (try_build_id_prefix): Avoid -Wformat-security error.
+
+2021-12-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-16 Nick Clifton <nickc@redhat.com>
+
+ Fix AVR assembler so that it creates relocs that will work with linker relaxation.
+ PR 28686
+ gas * config/tc-avr.h (tc_fix_adjustable): Define.
+ * config/tc-avr.c (avr_fix_adjustable): New function.
+ * testsuite/gas/all/gas.exp: Skip tests that need adjustable fixups.
+ * testsuite/gas/elf/elf.exp: Likewise.
+ * testsuite/gas/avr/diffreloc_withrelax.d: Adjust expected output.
+ * testsuite/gas/avr/pc-relative-reloc.d: Adjust expected output.
+
+ ld * testsuite/ld-avr/avr-prop-7.d: Adjust expected output.
+ * testsuite/ld-avr/avr-prop-8.d: Likewise.
+ * testsuite/ld-avr/pr13402.d: Likewise.
+
+2021-12-16 Nick Clifton <nickc@redhat.com>
+
+ When loading separate debug info files, also attempt to locate a file based upon the build-id.
+ PR 28697
+ * dwarf.c (load_build_id_debug_file): New function.
+ (try_build_id_prefix): New function.
+ (check_for_and_load_links): Call load_build_id_debug_file.
+ (debug_displays): Add entry for .note.gnu.build-id.
+ * dwarf.h (enum dwarf_section_display_enum): Add
+ note_gnu_build_id.
+ * testsuite/binutils-all/debuginfod.exp (test_fetch_debuglink):
+ Fix regexp for loads via debuglink section.
+
+2021-12-16 Richard Sandiford <richard.sandiford@arm.com>
+
+ arm: Add support for Armv9.1-A to Armv9.3-A
+ This patch adds AArch32 support for -march=armv9.[123]-a.
+ The behaviour of the new options can be expressed using a
+ combination of existing feature flags and tables.
+
+ The cpu_arch_ver entries for ARM_ARCH_V9_2A and ARM_ARCH_V9_3A
+ are technically redundant but it seemed less surprising to include
+ them anyway.
+
+ include/
+ * opcode/arm.h (ARM_ARCH_V9_1A, ARM_ARCH_V9_2A): New macros.
+ (ARM_ARCH_V9_3A): Likewise.
+
+ gas/
+ * doc/c-arm.texi: Add armv9.1-a, armv9.2-a and armv9.3-a.
+ * config/tc-arm.c (armv91a_ext_table, armv92a_ext_table): New macros.
+ (armv93a_ext_table): Likewise.
+ (arm_archs): Add armv9.1-a, armv9.2-a and armv9.3-a.
+ (cpu_arch_ver): Add ARM_ARCH_V9_1A, ARM_ARCH_V9_2A and ARM_ARCH_V9_3A.
+ * NEWS: Mention the above.
+ * testsuite/gas/arm/attr-march-armv9_1-a.d: New test.
+ * testsuite/gas/arm/attr-march-armv9_2-a.d: Likewise.
+ * testsuite/gas/arm/attr-march-armv9_3-a.d: Likewise.
+ * testsuite/gas/arm/bfloat16-armv9.1-a.d: Likewise.
+ * testsuite/gas/arm/bfloat16-armv9.2-a.d: Likewise.
+ * testsuite/gas/arm/bfloat16-armv9.3-a.d: Likewise.
+ * testsuite/gas/arm/i8mm-armv9.1-a.d: Likewise.
+ * testsuite/gas/arm/i8mm-armv9.2-a.d: Likewise.
+ * testsuite/gas/arm/i8mm-armv9.3-a.d: Likewise.
+
+2021-12-16 Richard Sandiford <richard.sandiford@arm.com>
+
+ arm: Add support for Armv8.7-A and Armv8.8-A
+ This patch adds AArch32 support for -march=armv8.[78]-a.
+ The behaviour of the new options can be expressed using a
+ combination of existing feature flags and tables.
+
+ The cpu_arch_ver entries are technically redundant but
+ it seemed less surprising to include them anyway.
+
+ include/
+ * opcode/arm.h (ARM_ARCH_V8_7A, ARM_ARCH_V8_8A): New macros.
+
+ gas/
+ * doc/c-arm.texi: Add armv8.7-a and armv8.8-a.
+ * config/tc-arm.c (armv87a_ext_table, armv88a_ext_table): New macros.
+ (arm_archs): Add armv8.7-a and armv8.8-a.
+ (cpu_arch_ver): Add ARM_ARCH_V8_7A and ARM_ARCH_V8_8A.
+ * NEWS: Mention the above.
+ * testsuite/gas/arm/attr-march-armv8_7-a.d: New test.
+ * testsuite/gas/arm/attr-march-armv8_8-a.d: Likewise.
+ * testsuite/gas/arm/bfloat16-armv8.7-a.d: Likewise.
+ * testsuite/gas/arm/bfloat16-armv8.8-a.d: Likewise.
+ * testsuite/gas/arm/i8mm-armv8.7-a.d: Likewise.
+ * testsuite/gas/arm/i8mm-armv8.8-a.d: Likewise.
+
+2021-12-16 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add support for Armv9.1-A to Armv9.3-A
+ This patch adds AArch64 support for -march=armv9.[123]-a.
+ The behaviour of the new options can be expressed using a
+ combination of existing feature flags, so we don't need to
+ eat into the vanishing number of spare AARCH64_FEATURE_* bits.
+ Hoewver, it was more convenient to separate out the |s of
+ feature flags so that Armv9.1-A could reuse the set for
+ Armv8.6-A, and so on.
+
+ include/
+ * opcode/aarch64.h (AARCH64_ARCH_V8_FEATURES): New macro,
+ split out from...
+ (AARCH64_ARCH_V8): ...here.
+ (AARCH64_ARCH_V8_1_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_1): ...here.
+ (AARCH64_ARCH_V8_2_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_2): ...here.
+ (AARCH64_ARCH_V8_3_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_3): ...here.
+ (AARCH64_ARCH_V8_4_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_4): ...here.
+ (AARCH64_ARCH_V8_5_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_5): ...here.
+ (AARCH64_ARCH_V8_6_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_6): ...here.
+ (AARCH64_ARCH_V8_7_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_7): ...here.
+ (AARCH64_ARCH_V8_8_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V8_8): ...here.
+ (AARCH64_ARCH_V9_FEATURES): New macro, split out from...
+ (AARCH64_ARCH_V9): ...here.
+ (AARCH64_ARCH_V9_1_FEATURES, AARCH64_ARCH_V9_1): New macros.
+ (AARCH64_ARCH_V9_2_FEATURES, AARCH64_ARCH_V9_2): New macros.
+ (AARCH64_ARCH_V9_3_FEATURES, AARCH64_ARCH_V9_3): New macros.
+
+ gas/
+ * doc/c-aarch64.texi: Add armv9.1-a, armv9-2-a and armv9.3-a.
+ * config/tc-aarch64.c (aarch64_archs): Likewise.
+ * NEWS: Mention the above.
+ * testsuite/gas/aarch64/armv9_invalid.d,
+ testsuite/gas/aarch64/armv9_invalid.s,
+ testsuite/gas/aarch64/armv9_invalid.l: New test.
+ * testsuite/gas/aarch64/armv9_1.d,
+ testsuite/gas/aarch64/armv9_1.s: Likewise.
+ * testsuite/gas/aarch64/armv9_1_invalid.d,
+ testsuite/gas/aarch64/armv9_1_invalid.s,
+ testsuite/gas/aarch64/armv9_1_invalid.l: Likewise.
+ * testsuite/gas/aarch64/armv9_2.d,
+ testsuite/gas/aarch64/armv9_2.s: Likewise.
+ * testsuite/gas/aarch64/armv9_2_invalid.d,
+ testsuite/gas/aarch64/armv9_2_invalid.s,
+ testsuite/gas/aarch64/armv9_2_invalid.l: Likewise.
+ * testsuite/gas/aarch64/armv9_3.d,
+ testsuite/gas/aarch64/armv9_3.s: Likewise.
+
+2021-12-16 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Support svinval extension with frozen version 1.0.
+ According to the privileged spec, there are five new instructions for
+ svinval extension. Two of them (HINVAL.VVMA and HINVAL.GVMA) need to
+ enable the hypervisor extension. But there is no implementation of
+ hypervisor extension in mainline for now, so let's consider the related
+ issues later.
+
+ 31..25 24..20 19..15 14..12 11...7 6..2 1..0
+ sinval.vma 0001011 rs2 rs1 000 00000 11100 11
+ sfence.w.inval 0001100 00000 00000 000 00000 11100 11
+ sfence.inval.ir 0001100 00001 00000 000 00000 11100 11
+ hinval.vvma 0010011 rs2 rs1 000 00000 11100 11
+ hinval.gvma 0110011 rs2 rs1 000 00000 11100 11
+
+ This patch is cherry-picked from the riscv integration branch since the
+ svinval extension is frozen for now. Besides, we fix the funct7 encodings
+ of hinval.vvma and hinval.gvma, from 0x0011011 and 0x0111011 to 0x0010011
+ and 0x0110011.
+
+ bfd/
+ * elfxx-riscv.c (riscv_supported_std_s_ext): Added svinval.
+ (riscv_multi_subset_supports): Handle INSN_CLASS_SVINVAL.
+ gas/
+ * testsuite/gas/riscv/svinval.d: New testcase.
+ * testsuite/gas/riscv/svinval.s: Likewise.
+ include/
+ * opcode/riscv-opc.h: Added encodings for svinval.
+ * opcode/riscv.h (enum riscv_insn_class): Added INSN_CLASS_SVINVAL.
+ opcodes/
+ * riscv-opc.c (riscv_opcodes): Added svinval instructions.
+
+2021-12-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: mips/or1k: drop redundant arg to bitsize macro
+ These are just using the default behavior for the 3rd arg, so drop
+ it to make it more clear. This also makes them match all other
+ ports that only use the first 2 arguments.
+
+2021-12-16 Mike Frysinger <vapier@gentoo.org>
+
+ bfd: unify texi generation rules
+ The logic between these rules are extremely similar, so unify them
+ into a single variable by leveraging make $@ and $< variables.
+
+ Also add automake silent rule support while we're here.
+
+2021-12-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: fix mingw builds with replacement gnulib open
+ The header shuffling in here broke the workaround for gnulib defining
+ "open". Move it back before the sim-specific includes to fix. This
+ is because the callback struct in the headers has an "open" member and
+ this file tries to call that.
+
+2021-12-16 Sandra Loosemore <sandra@codesourcery.com>
+
+ Adjust compare_link_order for unstable qsort
+ In a cross toolchain for nios2-elf target and x86_64-w64-mingw32 host
+ using binutils 2.37, we observed a failure that didn't show up on
+ x86_64-linux-gnu host: testcase pr25490-5.s was failing with
+
+ C:\path\to\nios2-elf-ld.exe: looping in map_segments
+ FAIL: __patchable_function_entries section 5
+
+ * ldelfgen.c (compare_link_order): Don't use section id in
+ sorting. Keep original ordering instead. Update comments.
+
+2021-12-16 Alan Modra <amodra@gmail.com>
+
+ Re: Fix an undefined behaviour in the BFD library's DWARF parser
+ Using an unsigned int cast (to 32 bits) on a pointer difference (of
+ possibly 64 bits) is wrong. Even though it will work on all real
+ object files, the fuzzers will eventually find this hole.
+
+ PR 28687
+ * dwarf1.c (parse_die): Cast pointer difference to size_t.
+ Catch another possible pointer overflow.
+
+2021-12-16 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: re-format with black 21.12b0
+ Run black 21.12b0 on gdb/, there is a single whitespace change. I will
+ update the wiki [1] in parallel to bump the version of black to 21.12b0.
+
+ [1] https://sourceware.org/gdb/wiki/Internals%20GDB-Python-Coding-Standards
+
+ Change-Id: Ib3b859e3506c74a4f15d16f1e44ef402de3b98e2
+
+2021-12-16 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: re-format with black 21.9b0
+ Run black 21.9b0 on gdb/ (this is the version currently mentioned on the
+ wiki [1], the subsequent commit will bump that version).
+
+ [1] https://sourceware.org/gdb/wiki/Internals%20GDB-Python-Coding-Standards
+
+ Change-Id: I5ceaab42c42428e053e2572df172aa42a88f0f86
+
+2021-12-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-15 Alan Modra <amodra@gmail.com>
+
+ PR28691, validate dwarf attribute form
+ PR28691 is a fuzzing PR that triggers a non-problem of "output changes
+ per run" with PIEs and/or different compilers. I've closed similar
+ PRs before as wontfix, but I guess there will be no end of this type
+ of PR. The trigger is an attribute that usually takes one of the
+ offset/constant reference DW_FORMs being given an indexed string
+ DW_FORM. The bfd reader doesn't support indexed strings and returns
+ an error string instead. The address of the string varies with PIE
+ runs and/or compiler, and we allow that address to appear in output.
+ Fix this by validating integer attribute forms, as we do for string
+ form attributes.
+
+ PR 28691
+ * dwarf2.c (is_str_attr): Rename to..
+ (is_str_form): ..this. Change param type. Update calls.
+ (is_int_form): New function.
+ (read_attribute_value): Handle DW_FORM_addrx2.
+ (find_abstract_instance): Validate form when using attr.u.val.
+ (scan_unit_for_symbols, parse_comp_unit): Likewise.
+
+2021-12-15 Luis Machado <luis.machado@linaro.org>
+
+ New --enable-threading configure option to control use of threads in GDB/GDBserver
+ Add the --enable-threading configure option so multithreading can be disabled
+ at configure time. This is useful for statically-linked builds of
+ GDB/GDBserver, since the thread library doesn't play well with that setup.
+
+ If you try to run a statically-linked GDB built with threading, it will crash
+ when setting up the number of worker threads.
+
+ This new option is also convenient when debugging GDB in a system with lots of
+ threads, where the thread discovery code in GDB will emit too many messages,
+ like so:
+
+ [New Thread 0xfffff74d3a50 (LWP 2625599)]
+
+ If you have X threads, that message will be repeated X times.
+
+ The default for --enable-threading is "yes".
+
+2021-12-15 Nikita Popov <npv1310@gmail.com>
+
+ Fix an undefined behaviour in the BFD library's DWARF parser.
+ PR 28687
+ * dwarf1.c (parse_die): Fix undefined behaviour in range tests.
+
+2021-12-15 Alan Modra <amodra@gmail.com>
+
+ PR28694, Out-of-bounds write in stab_xcoff_builtin_type
+ PR 28694
+ * stabs.c (stab_xcoff_builtin_type): Make typenum unsigned.
+ Negate typenum earlier, simplifying bounds checking. Correct
+ off-by-one indexing. Adjust switch cases.
+
+2021-12-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-14 Alan Modra <amodra@gmail.com>
+
+ loongarch32 build failure on 32-bit host
+ gas/config/tc-loongarch.c: In function ‘assember_macro_helper’:
+ gas/config/tc-loongarch.c:915:28: error: right shift count >= width of type [-Werror=shift-count-overflow]
+ 915 | hi32 = insn->args[1] >> 32;
+ | ^~
+
+ One possible fix is to make offsetT a 64-bit type for loongarch32.
+ This also makes bfd/targmatch.h (generated from bfd/config.bfd)
+ consistent since the loongarch32 match is inside #ifdef BFD64.
+
+ * config.bfd (loongarch32-*): Set want64.
+
+2021-12-14 Alan Modra <amodra@gmail.com>
+
+ loongarch64 build failure on 32-bit host
+ gas/config/tc-loongarch.c: In function ‘loongarch_args_parser_can_match_arg_helper’:
+ gas/config/tc-loongarch.c:661:13: error: cast from pointer to integer of different size [-Werror=pointer
+ -to-int-cast]
+ 661 | imm = (offsetT) str_hash_find (r_htab, arg);
+ | ^
+
+ Cast it to the correct size int, relying on normal integer promotions
+ if offsetT is larger than a pointer.
+
+ * config/tc-loongarch.c (loongarch_args_parser_can_match_arg_helper):
+ Cast return from str_hash_find to intptr_t, not offsetT.
+
+2021-12-14 Alan Modra <amodra@gmail.com>
+
+ XCOFF C_STSYM test failure on 32-bit host
+ This test was failing here and on another similar symbol:
+ [ 4](sec 1)(fl 0x00)(ty 0)(scl 143) (nx 0) 0x05d1745d11745d21 .bs
+ where correct output is
+ [ 4](sec 1)(fl 0x00)(ty 0)(scl 143) (nx 0) 0x000000000000000a .bs
+
+ The problem is caused by a 32-bit host pointer being sign-extended
+ when stored into a 64-bit bfd_vma, and then that value not being
+ trimmed back to 32 bits when used. The following belt-and-braces
+ patch fixes both the store and subsequent reads.
+
+ * coffcode.h (coff_slurp_symbol_table): Do not sign extend
+ when storing a host pointer to syment.n_value.
+ * coffgen.c (coff_get_symbol_info): Cast syment.n_value to a
+ bfd_hostptr_t before using in arithmetic.
+ (coff_print_symbol): Likewise.
+
+2021-12-14 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbserver/tracepoint.cc: use snprintf in gdb_agent_socket_init
+ If we modify tracepoint.cc to try to use a too long unix socket name,
+ for example by modifying SOCK_DIR to be:
+
+ #define SOCK_DIR "/tmp/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut/salut"
+
+ ... trying to start an application with libinproctrace.so loaded
+ crashes:
+
+ $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.6:./libinproctrace.so /bin/ls
+ /home/smarchi/src/binutils-gdb/gdbserver/../gdbsupport/common-utils.cc:69: A problem internal to GDBserver in-process agent has been detected.
+ xsnprintf: Assertion `ret < size' failed.
+
+ Looking at the rest of the socket initialization code, the intent seems
+ to be that if something goes wrong, we warn but let the program
+ execute. So crashing on this failed assertions seems against the intent.
+
+ Commit 6cebaf6e1ae4 ("use xsnprintf instead of snprintf.") changed this
+ code to use xsnprintf instead of snprintf, introducing this assertion.
+ Before that, snprintf would return a value bigger that UNIX_PATH_MAX and
+ the "if" after would catch it and emit a warning, which is exactly what
+ we want. That change was done because LynxOS didn't have snprintf.
+ Since LynxOS isn't supported anymore, we can simply revert to use
+ snprintf there.
+
+ With this patch, we get a warning (printed by the caller of
+ gdb_agent_socket_init), but the program keeps executing:
+
+ $ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.6:./libinproctrace.so /bin/ls
+ ipa: could not create sync socket
+ ...
+
+ Change-Id: I78bca52d5dc3145335abeae45a42052701e3f5dd
+
+2021-12-14 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbserver/tracepoint.cc: work around -Wstringop-truncation error
+ When building gdb with on AArch64 with g++ 11.1.0 (and some preceding
+ versions too), -O2 and -fsanitize=address, I get this error.
+
+ CXX tracepoint-ipa.o
+ cc1plus: warning: command-line option ‘-Wmissing-prototypes’ is valid for C/ObjC but not for C++
+ In file included from /usr/include/string.h:519,
+ from ../gnulib/import/string.h:41,
+ from /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/common-defs.h:95,
+ from /home/simark/src/binutils-gdb/gdbserver/server.h:22,
+ from /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:19:
+ In function ‘char* strncpy(char*, const char*, size_t)’,
+ inlined from ‘int init_named_socket(const char*)’ at /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:6902:11,
+ inlined from ‘int gdb_agent_socket_init()’ at /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:6953:26,
+ inlined from ‘void* gdb_agent_helper_thread(void*)’ at /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc:7204:41:
+ /usr/include/bits/string_fortified.h:95:34: error: ‘char* __builtin_strncpy(char*, const char*, long unsigned int)’ output may be truncated copying 107 bytes from a string of length 107 [-Werror=stringop-truncation]
+ 95 | return __builtin___strncpy_chk (__dest, __src, __len,
+ | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
+ 96 | __glibc_objsize (__dest));
+ | ~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Note that _FORTIFY_SOURCE changes the message a bit, but I get a similar
+ error if I use -D_FORTIFY_SOURCE=0.
+
+ I am pretty sure it's spurious and might be related to this GCC bug:
+
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88780
+
+ From what I can see, we are copying from a static 108 bytes long buffer
+ (the global array agent_socket_name) to a 108 bytes long array,
+ sockaddr_un::sun_path. I don't see anything wrong.
+
+ Still, it would make things easier if we didn't see this error. Change
+ the code to check that the source string length is smaller than the
+ destination buffer (including space for the NULL byte) and use strcpy.
+
+ For anybody who would like to try to reproduce, the full command line
+ is:
+
+ g++ -I. -I/home/simark/src/binutils-gdb/gdbserver -I/home/simark/src/binutils-gdb/gdbserver/../gdb/regformats -I/home/simark/src/binutils-gdb/gdbserver/.. -I/home/simark/src/binutils-gdb/gdbserver/../include -I/home/simark/src/binutils-gdb/gdbserver/../gdb -I/home/simark/src/binutils-gdb/gdbserver/../gnulib/import -I../gnulib/import -I/home/simark/src/binutils-gdb/gdbserver/.. -I.. -pthread -Wall -Wpointer-arith -Wno-unused -Wunused-value -Wunused-variable -Wunused-function -Wno-switch -Wno-char-subscripts -Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable -Wno-sign-compare -Wno-error=maybe-uninitialized -Wno-mismatched-tags -Wsuggest-override -Wimplicit-fallthrough=3 -Wduplicated-cond -Wshadow=local -Wdeprecated-copy -Wdeprecated-copy-dtor -Wredundant-move -Wmissing-declarations -Wmissing-prototypes -Wstrict-null-sentinel -Wformat -Wformat-nonliteral -Werror -DGDBSERVER -DCONFIG_UST_GDB_INTEGRATION -Drpl_strerror_r=strerror_r -Drpl_free=free -fPIC -DIN_PROCESS_AGENT -fvisibility=hidden -g3 -O2 -fsanitize=address -c -o tracepoint-ipa.o -MT tracepoint-ipa.o -MMD -MP -MF ./.deps/tracepoint-ipa.Tpo /home/simark/src/binutils-gdb/gdbserver/tracepoint.cc
+
+ Change-Id: I18e86c0487feead7e7677e69398405e7057cf464
+
+2021-12-14 Simon Marchi <simon.marchi@polymtl.ca>
+
+ bfd: fix -Wunused errors with clang 13+
+ Clang 13 and 14 produce some -Wunused-but-set-{variable,parameter} for
+ situations where gcc doesn't. In particular, when a variable is set and
+ then used in a way to update its own value. For example, if `i` is only
+ used in this way:
+
+ int i = 2;
+ i++;
+ i = i + 1;
+
+ gcc won't warn, but clang will.
+
+ Fix all such errors found in an --enable-targets=all build. It would be
+ important for somebody who knows what they're doing to just make sure
+ that these variables can indeed be deleted, and that there a no cases
+ where it's a bug, and the variable should actually be used.
+
+ The first instance of this error fix by this patch is:
+
+ CC elf32-score.lo
+ /home/simark/src/binutils-gdb/bfd/elf32-score.c:450:11: error: variable 'relocation' set but not used [-Werror,-Wunused-but-set-variable]
+ bfd_vma relocation;
+ ^
+
+ Change-Id: I2f233ce20352645cf388aff3dfa08a651d21a6b6
+
+2021-12-14 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/mi: rename build_table to add_builtin_mi_commands
+ Just give the function build_table a more descriptive name. There
+ should be no user visible changes after this commit.
+
+2021-12-14 Jan Vrany <jan.vrany@labware.com>
+
+ gdb/mi: rename mi_cmd to mi_command
+ Just give this class a new name, more inline with the name of the
+ sub-classes. I've also updated mi_cmd_up to mi_command_up in
+ mi-cmds.c inline with this new naming scheme.
+
+ There should be no user visible changes after this commit.
+
+2021-12-14 Jan Vrany <jan.vrany@labware.com>
+
+ gdb/mi: use separate classes for different types of MI command
+ This commit changes the infrastructure in mi-cmds.{c,h} to add new
+ sub-classes for the different types of MI command. Instances of these
+ sub-classes are then created and added into mi_cmd_table.
+
+ The existing mi_cmd class becomes the abstract base class, this has an
+ invoke method and takes care of the suppress notifications handling,
+ before calling a do_invoke virtual method which is implemented by all
+ of the sub-classes.
+
+ There's currently two different sub-classes, one of pure MI commands,
+ and a second for MI commands that delegate to CLI commands.
+
+ There should be no user visible changes after this commit.
+
+2021-12-14 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/mi: int to bool conversion in mi_execute_cli_command
+ Change an argument of mi_execute_cli_command from int to bool. Update
+ the callers to take this into account. Within mi_execute_cli_command,
+ update a comparison of a pointer to 0 with a comparison to nullptr,
+ and add an assert, if we are not using the argument string then the
+ string should be nullptr. Also removed a cryptic 'gdb_????' comment,
+ which isn't really helpful.
+
+ There should be no user visible changes after this commit.
+
+2021-12-14 Jan Vrany <jan.vrany@labware.com>
+
+ gdb/mi: use std::map for MI commands in mi-cmds.c
+ This changes the hashmap used in mi-cmds.c from a custom structure to
+ std::map. Not only is replacing a custom container with a standard
+ one an improvement, but using std::map will make it easier to
+ dynamically add commands; which is something that is planned for a
+ later series, where we will allow MI commands to be implemented in
+ Python.
+
+ There should be no user visible changes after this commit.
+
+2021-12-14 Jan Vrany <jan.vrany@labware.com>
+
+ gdb/mi: rename mi_lookup to mi_cmd_lookup
+ Lets give this function a more descriptive name. I've also improved
+ the comments in the header and source files.
+
+ There should be no user visible changes after this commit.
+
+2021-12-14 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Added ld testcases for the medlow and medany code models.
+ There are two linker scripts, code-model-01.ld and code-model-02.ld,
+ which are corresponding to the two different memory layouts,
+
+ * code-model-01.ld: the text section is in the 32-bit address range, but
+ the data section is far away from the text section, which means the data
+ section is over the 32-bit address range.
+
+ * code-model-02.ld: the text section is over the 32-bit address range, but
+ the data section is placed nearly zero address.
+
+ We use the two linker scripts, to test the current medlow and medany behaviors
+ of GNU ld, including the weak symbol references and the relaxations behaviors.
+ Besides, these testcases also show the limits of the current medlow and medany
+ code models, that is - we may get the truncated to fit errors when linking
+ with the above two linker scripts.
+
+ ld/
+ * testsuite/ld-riscv-elf/code-model-01.ld: New testcases to test the
+ behaviors of the current medlow and medany code models.
+ * testsuite/ld-riscv-elf/code-model-02.ld: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medany-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medany-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medany-weakref-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medany-weakref-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medlow-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medlow-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medlow-weakref-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-medlow-weakref-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medany-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medany-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medany-weakref-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medany-weakref-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medlow-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medlow-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-01.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model-relax-medlow-weakref-02.d: Likewise.
+ * testsuite/ld-riscv-elf/code-model.s: Likewise.
+ * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.
+
+2021-12-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-13 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Adjust linker tests for --disable-separate-code
+ Adjust linker tests for linker configured with --disable-separate-code:
+
+ 1. Update expected outputs.
+ 2. Pass -z max-page-size=0x1000 -z separate-code" to linker.
+
+ * testsuite/ld-i386/report-reloc-1.l: Updated.
+ * testsuite/ld-x86-64/report-reloc-1.l: Likewise.
+ * testsuite/ld-x86-64/pe-x86-64.exp: Pass
+ "-z max-page-size=0x1000 -z separate-code" to linker.
+ * testsuite/ld-x86-64/pr19609-4e.d: Likewise.
+ * testsuite/ld-x86-64/pr19609-6a.d: Likewise.
+ * testsuite/ld-x86-64/pr19609-6b.d: Likewise.
+ * testsuite/ld-x86-64/pr19609-7b.d: Likewise.
+ * testsuite/ld-x86-64/pr19609-7d.d: Likewise.
+
+2021-12-13 Carl Love <cel@us.ibm.com>
+
+ gdb: Powerpc mark xfail in gdb.base/catch-syscall.exp
+ Powerpc is not reporting the
+
+ Catchpoint 1 (returned from syscall execve), ....
+
+ as expected. The issue appears to be with the kernel not returning the
+ expected result. This patch marks the test failure as an xfail.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28623
+
+2021-12-13 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: improve reuse of value contents when fetching array elements
+ While working on a Python script, which was interacting with a remote
+ target, I noticed some weird slowness in GDB. In my program I had a
+ structure something like this:
+
+ struct foo_t
+ {
+ int array[5];
+ };
+
+ struct foo_t global_foo;
+
+ Then in the Python script I was fetching a complete copy of global
+ foo, like:
+
+ val = gdb.parse_and_eval('global_foo')
+ val.fetch_lazy()
+
+ Then I would work with items in foo_t.array, like:
+
+ print(val['array'][1])
+
+ I called the fetch_lazy method specifically because I knew I was going
+ to end up accessing almost all of the contents of val, and so I wanted
+ GDB to do a single remote protocol call to fetch all the contents in
+ one go, rather than trying to do lazy fetches for a couple of bytes at
+ a time.
+
+ What I observed was that, after the fetch_lazy call, GDB does,
+ correctly, fetch the entire contents of global_foo, including all of
+ the contents of array, however, when I access val.array[1], GDB still
+ goes and fetches the value of this element from the remote target.
+
+ What's going on is that in valarith.c, in value_subscript, for C like
+ languages, we always end up treating the array value as a pointer, and
+ then doing value_ptradd, and value_ind, the second of these calls
+ always returns a lazy value.
+
+ My guess is that this approach allows us to handle indexing off the
+ end of an array, when working with zero element arrays, or when
+ indexing a raw pointer as an array. And, I agree, that in these
+ cases, where, even when the original value is non-lazy, we still will
+ not have the content of the array loaded, we should be using the
+ value_ind approach.
+
+ However, for cases where we do have the array contents loaded, and we
+ do know the bounds of the array, I think we should be using
+ value_subscripted_rvalue, which is what we use for non C like
+ languages.
+
+ One problem I did run into, exposed by gdb.base/charset.exp, was that
+ value_subscripted_rvalue stripped typedefs from the element type of
+ the array, which means the value returned will not have the same type
+ as an element of the array, but would be the raw, non-typedefed,
+ type. In charset.exp we got back an 'int' instead of a
+ 'wchar_t' (which is a typedef of 'int'), and this impacts how we print
+ the value. Removing typedefs from the resulting value just seems
+ wrong, so I got rid of that, and I don't see any test regressions.
+
+ With this change in place, my original Python script is now doing no
+ additional memory accesses, and its performance increases about 10x!
+
+2021-12-13 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: update gdb-gdb.py.in for latest changes to struct field
+ This commit updates uses of 'loc' and 'loc_kind' to 'm_loc' and
+ 'm_loc_kind' respectively, in gdb-gdb.py.in, which is required after
+ this commit:
+
+ commit cd3f655cc7a55437a05aa8e7b1fcc9051b5fe404
+ Date: Thu Sep 30 22:38:29 2021 -0400
+
+ gdb: add accessors for field (and call site) location
+
+ I have also incorporated this change:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-September/182171.html
+
+ Which means we print 'm_name' instead of 'name' when displaying the
+ 'm_name' member variable.
+
+ Finally, I have also added support for the new TYPE_SPECIFIC_INT
+ fields, which were added with this commit:
+
+ commit 20a5fcbd5b28cca88511ac5a9ad5e54251e8fa6d
+ Date: Wed Sep 23 09:39:24 2020 -0600
+
+ Handle bit offset and bit size in base types
+
+ I updated the gdb.gdb/python-helper.exp test to cover all of these
+ changes.
+
+2021-12-13 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdbserver/linux-low: replace direct assignment to current_thread
+ Use scoped_restore_current_thread and switch_to_thread in
+ linux_process_target::wait_for_sigstop.
+
+2021-12-13 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdbserver: replace direct assignments to current_thread
+ Replace the direct assignments to current_thread with
+ switch_to_thread. Use scoped_restore_current_thread when appropriate.
+ There is one instance remaining in linux-low.cc's wait_for_sigstop.
+ This will be handled in a separate patch.
+
+ Regression-tested on X86-64 Linux using the native-gdbserver and
+ native-extended-gdbserver board files.
+
+2021-12-13 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdbserver: introduce scoped_restore_current_thread and switch_to_thread
+ Introduce a class for restoring the current thread and a function to
+ switch to the given thread. This is a preparation for a refactoring
+ that aims to remove direct assignments to 'current_thread'.
+
+2021-12-13 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make post_startup_inferior a virtual method on inf_ptrace_target
+ While working on a later patch that required me to understand how GDB
+ starts up inferiors, I was confused by the
+ target_ops::post_startup_inferior method.
+
+ The post_startup_inferior target function is only called from
+ inf_ptrace_target::create_inferior.
+
+ Part of the target class hierarchy looks like this:
+
+ inf_child_target
+ |
+ '-- inf_ptrace_target
+ |
+ |-- linux_nat_target
+ |
+ |-- fbsd_nat_target
+ |
+ |-- nbsd_nat_target
+ |
+ |-- obsd_nat_target
+ |
+ '-- rs6000_nat_target
+
+ Every sub-class of inf_ptrace_target, except rs6000_nat_target,
+ implements ::post_startup_inferior. The rs6000_nat_target picks up
+ the implementation of ::post_startup_inferior not from
+ inf_ptrace_target, but from inf_child_target.
+
+ No descendent of inf_child_target, outside the inf_ptrace_target
+ sub-tree, implements ::post_startup_inferior, which isn't really
+ surprising, as they would never see the method called (remember, the
+ method is only called from inf_ptrace_target::create_inferior).
+
+ What I find confusing is the role inf_child_target plays in
+ implementing, what is really a helper function for just one of its
+ descendents.
+
+ In this commit I propose that we formally make ::post_startup_inferior
+ a helper function of inf_ptrace_target. To do this I will remove the
+ ::post_startup_inferior from the target_ops API, and instead make this
+ a protected, pure virtual function on inf_ptrace_target.
+
+ I'll remove the empty implementation of ::post_startup_inferior from
+ the inf_child_target class, and add a new empty implementation to the
+ rs6000_nat_target class.
+
+ All the other descendents of inf_ptrace_target already provide an
+ implementation of this method and so don't need to change beyond
+ making the method protected within their class declarations.
+
+ To me, this makes much more sense now. The helper function, which is
+ only called from within the inf_ptrace_target class, is now a part of
+ the inf_ptrace_target class.
+
+ The only way in which this change is visible to a user is if the user
+ turns on 'set debug target 1'. With this debug flag on, prior to this
+ patch the user would see something like:
+
+ -> native->post_startup_inferior (...)
+ <- native->post_startup_inferior (2588939)
+
+ After this patch these lines are no longer present, as the
+ post_startup_inferior is no longer a top level target method. For me,
+ this is an acceptable change.
+
+2021-12-13 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: have mips_nbsd_nat_target inherit from nbsd_nat_target
+ While working on another patch I had reason to look at
+ mips-netbsd-nat.c, and noticed that the class mips_nbsd_nat_target
+ inherits directly from inf_ptrace_target.
+
+ This is a little strange as alpha_bsd_nat_target,
+ arm_netbsd_nat_target, hppa_nbsd_nat_target, m68k_bsd_nat_target,
+ ppc_nbsd_nat_target, sh_nbsd_nat_target, and vax_bsd_nat_target all
+ inherit from nbsd_nat_target.
+
+ Originally, in this commit:
+
+ commit f6ac5f3d63e03a81c4ff3749aba234961cc9090e
+ Date: Thu May 3 00:37:22 2018 +0100
+
+ Convert struct target_ops to C++
+
+ When the target tree was converted to C++, all of the above classes
+ inherited from inf_ptrace_target except for hppa_nbsd_nat_target,
+ which was the only class that originally inherited from
+ nbsd_nat_target.
+
+ Later on all the remaining targets (except mips) were converted to
+ inherit from nbsd_nat_target, these are the commits:
+
+ commit 4fed520be264b60893aa674071947890f8172915
+ Date: Sat Mar 14 16:05:24 2020 +0100
+
+ Inherit alpha_netbsd_nat_target from nbsd_nat_target
+
+ commit 6018d381a00515933016c539d2fdc18ad0d304b8
+ Date: Sat Mar 14 14:50:51 2020 +0100
+
+ Inherit arm_netbsd_nat_target from nbsd_nat_target
+
+ commit 01a801176ea15ddfc988cade2e3d84c3b0abfec3
+ Date: Sat Mar 14 16:54:42 2020 +0100
+
+ Inherit m68k_bsd_nat_target from nbsd_nat_target
+
+ commit 9faa006d11a5e08264a007463435f84b77864c9c
+ Date: Thu Mar 19 14:52:57 2020 +0100
+
+ Inherit ppc_nbsd_nat_target from nbsd_nat_target
+
+ commit 9809762324491b851332ce600ae9bde8dd34f601
+ Date: Tue Mar 17 15:07:39 2020 +0100
+
+ Inherit sh_nbsd_nat_target from nbsd_nat_target
+
+ commit d5be5fa4207da00d039a1d5a040ba316e7092cbd
+ Date: Sat Mar 14 13:21:58 2020 +0100
+
+ Inherit vax_bsd_nat_target from nbsd_nat_target
+
+ I could only find mailing list threads for ppc and sh in the archive ,
+ and unfortunately, none of the commits has any real detail that might
+ explain why mips was missed out, the only extra context I could find
+ was this message:
+
+ https://sourceware.org/pipermail/gdb-patches/2020-March/166853.html
+
+ Which says that "proper" OS support is going to be added to
+ nbsd_nat_target, hence the need to inherit from that class.
+
+ My guess is that leaving mips_nbsd_nat_target unchanged was an
+ oversight, so, in this commit, I propose changing mips_nbsd_nat_target
+ to inherit from nbsd_nat_target just like all the other nbsd targets.
+
+ My motivation for this patch relates to the post_startup_inferior
+ target method. In a future commit I want to change how this method is
+ handled. Currently the mips_nbsd_nat_target will pick up the empty
+ implementation of inf_child_target::post_startup_inferior rather than
+ the version in netbsd-nat.c. This feels like a bug to me, as surely,
+ enabling of proc events is something that would need to be done for
+ all netbsd targets, regardless of architecture.
+
+ In my future patch I have a choice then, either (a) add a new, empty
+ implementation of post_startup_inferior to mips_nbsd_nat_target,
+ or (b) this commit, have mips_nbsd_nat_target inherit from
+ nbsd_nat_target. Option (b) seems like the right way to go, hence,
+ this commit.
+
+ I've done absolutely no testing for this change, not even building it,
+ as that would require at least an environment in which I can x-build
+ mips-netbsd applications, which I have no idea how to set up.
+
+2021-12-13 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: only include mips and riscv targets if building with 64-bit bfd
+ While testing another patch I was trying to build different
+ configurations of GDB, and, during one test build I ran into a
+ problem, I configured with `--enable-targets=all
+ --host=i686-w64-mingw32` and saw this error while linking GDB:
+
+ .../i686-w64-mingw32/bin/ld: mips-tdep.o: in function `mips_gdbarch_init':
+ .../src/gdb/mips-tdep.c:8730: undefined reference to `disassembler_options_mips'
+ .../i686-w64-mingw32/bin/ld: riscv-tdep.o: in function `riscv_gdbarch_init':
+ .../src/gdb/riscv-tdep.c:3851: undefined reference to `disassembler_options_riscv'
+
+ So the `disassembler_options_mips` and `disassembler_options_riscv`
+ symbols are missing.
+
+ This turns out to be because mips-dis.c and riscv-dis.c, in which
+ these symbols are defined, are in the TARGET64_LIBOPCODES_CFILES list
+ in opcodes/Makefile.am, these files are only built when we are
+ building with a 64-bit bfd.
+
+ If we look further, into bfd/Makefile.am, we can see that all the
+ files matching elf*-riscv.lo are in the BFD64_BACKENDS list, as are
+ the elf*-mips.lo files, and (I know because I tried), the two
+ disassemblers do, not surprisingly, depend on features supplied from
+ libbfd.
+
+ So, though we can build most of GDB just fine for riscv and mips with
+ a 32-bit bfd, if I understand correctly, the final GDB
+ executable (assuming we could get it to link) would not understand
+ these architectures at the bfd level, nor would there be any
+ disassembler available. This sounds like a pretty useless GDB to me.
+
+ So, in this commit, I move the riscv and mips targets into GDB's list
+ of targets that require a 64-bit bfd. After this I can build GDB just
+ fine with the configure options given above.
+
+ This was discussed on the mailing list in a couple of threads:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-December/184365.html
+ https://sourceware.org/pipermail/binutils/2021-November/118498.html
+
+ and it is agreed, that it is unfortunate that the 32-bit riscv and
+ 32-bit mips targets require a 64-bit bfd. If in the future this
+ situation ever changes then it would be expected that some (or all) of
+ this patch would be reverted. Until then though, this patch allows
+ GDB to build when configured with --enable-targets=all, and when using
+ a 32-bit libbfd.
+
+2021-12-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-12 Tom Tromey <tom@tromey.com>
+
+ C++-ify path substitution code
+ I found some uses of xfree in the path substitution code in source.c.
+ C++-ifying struct substitute_path_rule both simplifies the code and
+ removes manual memory management.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-12-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-11 Alan Modra <amodra@gmail.com>
+
+ [GOLD] PowerPC64 @notoc in non-power10 code
+ Gold version of commit 7aba54da42.
+
+ elfcpp/
+ * powerpc.h (R_PPC64_REL24_P9NOTOC): Define.
+ gold/
+ * powerpc.cc (Target_powerpc::maybe_skip_tls_get_addr_call,
+ is_branch_reloc, max_branch_delta): Handle R_PPC64_REL24_P9NOTOC.
+ (Target_powerpc::Branch_info::make_stub): Likewise.
+ (struct Plt_stub_ent): Add p9notoc_, p9off_, tsize_.
+ (struct Branch_stub_ent): Add p9notoc_, p9off_.
+ (Stub_table::add_plt_call_entry): Handle R_PPC64_REL24_P9NOTOC.
+ (Stub_table::add_long_branch_entry): Likewise.
+ (Stub_table::add_eh_frame): Likewise.
+ (Stub_table::plt_call_size): Return aligned size. Adjust callers.
+ Handle p9notoc_ sizing.
+ (Stub_table::do_write): Write out p9notoc_ stubs.
+ (Target_powerpc::Scan::get_reference_flags, local, global):
+ Handle R_PPC64_REL24_P9NOTOC.
+ (Target_powerpc::Relocate::relocate): Likewise.
+
+2021-12-11 H.J. Lu <hjl.tools@gmail.com>
+
+ Don't return the main file as the separate debug info
+ On Fedora 35,
+
+ $ readelf -d /usr/bin/npc
+
+ caused readelf to run out of stack since load_separate_debug_info
+ returned the input main file as the separate debug info:
+
+ (gdb) bt
+ #0 load_separate_debug_info (
+ main_filename=main_filename@entry=0x510f50 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo",
+ xlink=xlink@entry=0x4e5180 <debug_displays+4480>,
+ parse_func=parse_func@entry=0x431550 <parse_gnu_debuglink>,
+ check_func=check_func@entry=0x432ae0 <check_gnu_debuglink>,
+ func_data=func_data@entry=0x7fffffffdb60, file=file@entry=0x51d430)
+ at /export/gnu/import/git/sources/binutils-gdb/binutils/dwarf.c:11057
+ #1 0x000000000043328d in check_for_and_load_links (file=0x51d430,
+ filename=0x510f50 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo")
+ at /export/gnu/import/git/sources/binutils-gdb/binutils/dwarf.c:11381
+ #2 0x00000000004332ae in check_for_and_load_links (file=0x51b070,
+ filename=0x518dd0 "/export/home/hjl/.cache/debuginfod_client/dcc33c51c49e7dafc178fdb5cf8bd8946f965295/debuginfo")
+
+ Return NULL if the separate debug info is the same as the input main
+ file to avoid infinite recursion.
+
+ PR binutils/28679
+ * dwarf.c (load_separate_debug_info): Don't return the input
+ main file.
+
+2021-12-11 Alan Modra <amodra@gmail.com>
+
+ Don't edit bogus sh_link on reading relocatable objects (Oracle fix)
+ This reverts a 1995 fix to handle bogus object files. Presumably such
+ object files have long gone.
+
+ * elf.c (bfd_section_from_shdr): Remove old hack for Oracle
+ libraries.
+
+2021-12-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-10 Jan Vrany <jan.vrany@labware.com>
+
+ gdb/testsuite: respect GDBSERVER variable in remote-stdio-gdbserver "board"
+ The comment on top of gdb/testsuite/boards/remote-stdio-gdbserver.exp says
+ that user can specify path to gdbserver on remote system by setting
+ GDBSERVER variable. However, this variable was ignored and /usr/bin/gdbserver
+ was used unconditionally.
+
+ This commit updates the code to respect GDBSERVER if set and fall back to
+ /usr/bin/gdbserver if not.
+
+2021-12-10 Simon Marchi <simon.marchi@polymtl.ca>
+
+ Revert "gdbsupport: remove unnecessary `#ifndef IN_PROCESS_AGENT`"
+ This reverts commit fe72c32765e1190c8a17d309fc3a7e1882d6a430.
+
+ It turns out it was wrong, libinproctrace.so does build its own
+ gdbsupport/tdesc.cc. This broke the build:
+
+ make[1]: Entering directory '/home/simark/build/binutils-gdb-one-target/gdbserver'
+ CXXLD libinproctrace.so
+ /usr/bin/ld: gdbsupport/tdesc-ipa.o: in function `print_xml_feature::visit_pre(target_desc const*)':
+ /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:407: undefined reference to `tdesc_architecture_name(target_desc const*)'
+ /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:408: undefined reference to `tdesc_architecture_name(target_desc const*)'
+ /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:411: undefined reference to `tdesc_osabi_name(target_desc const*)'
+ /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:416: undefined reference to `tdesc_compatible_info_list(target_desc const*)'
+ /usr/bin/ld: /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/tdesc.cc:418: undefined reference to `tdesc_compatible_info_arch_name(std::unique_ptr<tdesc_compatible_info, std::default_delete<tdesc_compatible_info> > const&)'
+
+2021-12-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-09 Alan Modra <amodra@gmail.com>
+
+ PR28674, objdump crash
+ Not returning an error indication here leaves the attribute
+ uninitialised, which then leads to intemperate behaviour.
+
+ PR 28674
+ * dwarf2.c (read_attribute_value): Return NULL on trying to read
+ past end of attributes.
+
+2021-12-09 Alan Modra <amodra@gmail.com>
+
+ Set sh_link for reloc sections created as normal sections
+ binutils-all/strip-13 and binutils-all/strip-14 tests create
+ SHT_REL/SHT_RELA sections by hand. These don't have sh_link set to
+ the .symtab section as they should, leading to readelf warnings if you
+ happen to be looking at the object files.
+
+ * elf.c (assign_section_numbers): Formatting. Set sh_link for
+ reloc sections created as normal sections in relocatable
+ objects.
+
+2021-12-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbsupport: remove unnecessary `#ifndef IN_PROCESS_AGENT`
+ I suppose this code was copied from GDBserver and this ifndef was left
+ there. As far as I know, IN_PROCESS_AGENT will never be defined when
+ building this file, so we can remove this.
+
+ Change-Id: I84fc408e330b3a29106df830a09342861cadbaf6
+
+2021-12-09 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/microblaze-tdep.c: fix -Wunused-but-set-variable
+ Fix this, seen when building with clang 14:
+
+ CXX microblaze-tdep.o
+ /home/simark/src/binutils-gdb/gdb/microblaze-tdep.c:207:7: error: variable 'flags' set but not used [-Werror,-Wunused-but-set-variable]
+ int flags = 0;
+ ^
+
+ Change-Id: I59f726ed33e924912748bc475b6fd9a9394fc0d0
+
+2021-12-09 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/csky-tdep.c: fix -Wunused-but-set-variable error
+ Fix these, seen when building with clang 14:
+
+ CXX csky-tdep.o
+ /home/simark/src/binutils-gdb/gdb/csky-tdep.c:332:7: error: variable 'need_dummy_stack' set but not used [-Werror,-Wunused-but-set-variable]
+ int need_dummy_stack = 0;
+ ^
+ /home/simark/src/binutils-gdb/gdb/csky-tdep.c:805:12: error: variable 'offset' set but not used [-Werror,-Wunused-but-set-variable]
+ int offset = 0;
+ ^
+
+ Change-Id: I6703bcb50e83c50083f716f4084ef6aa30d659c4
+
+2021-12-09 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: fix default behavior of runto
+ The documented behavior of proc runto is to not emit a PASS when
+ succeeding to to run to the specified location, but emit a FAIL when
+ failing to do so. I suppose the intent is that it won't pollute the
+ results normally passing tests (although I don't see why we would care),
+ but make visible any problems.
+
+ However, it seems like the implementation makes it default to never
+ print anything. "no-message" is prependend to "args", so if "message"
+ is not passed, we will always take the path that sets print_fail to 0,
+ which will silence any failure.
+
+ This unfortunately means that tests relying on runto_main won't emit a
+ FAIL if failing to run to main. And since commit 4dfef5be6812
+ ("gdb/testsuite: make runto_main not pass no-message to runto"), tests
+ don't emit a FAIL themselves when failing to run to main. This means
+ that tests failing to run to main just fail silently, and that's bad.
+
+ This can be reproduced by hacking gdb.base/template.exp like so:
+
+ diff --git a/gdb/testsuite/gdb.base/template.c b/gdb/testsuite/gdb.base/template.c
+ index bcf39c377d92..052be5b79d73 100644
+ --- a/gdb/testsuite/gdb.base/template.c
+ +++ b/gdb/testsuite/gdb.base/template.c
+ @@ -15,6 +15,14 @@
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+ +#include <stdlib.h>
+ +
+ +__attribute__((constructor))
+ +static void c (void)
+ +{
+ + exit (1);
+ +}
+ +
+ int
+ main (void)
+ {
+
+ Running the modified gdb.base/template.exp shows that it exits without
+ printing any result.
+
+ Remove the line that prepends no-message to args, that should make
+ runto's behavior match its documentation.
+
+ This patch will appear to add many failures, but in reality they already
+ existed, they were just silenced.
+
+ Change-Id: I2a730d5bc72b6ef0698cd6aad962d9902aa7c3d6
+
+2021-12-09 Carl Love <cel@us.ibm.com>
+
+ gdb fix elfv1 Powerpc gdb.dwarf2/frame-inlined-in-outer-frame.exp
+ On ELFv1, the _start symbol must point to the *function descriptor* (in
+ the .opd section), not to the function code (in the .text section) like
+ with ELFv2 and other architectures.
+
+2021-12-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/maint.exp with -readnow
+ With test-case gdb.base/maint.exp and target board -readnow, I run into:
+ ...
+ FAIL: gdb.base/maint.exp: maint info line-table w/o a file name
+ ...
+
+ The problem is that this and other regexps anchored using '^':
+ ...
+ -re "^$gdb_prompt $" {
+ ...
+ don't trigger because other regexps don't consume the entire preceding line.
+
+ This is partly due to the addition of the IS-STMT column.
+
+ Fix this by making the regexps consume entire lines.
+
+ Tested on x86_64-linux with native and target board readnow, as well as
+ check-read1 and check-readmore.
+
+2021-12-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/include-main.exp with -readnow
+ With test-case gdb.base/include-main.exp and target board readnow, I run into:
+ ...
+ FAIL: gdb.base/include-main.exp: maint info symtab
+ ...
+
+ The corresponding check in gdb.base/include-main.exp:
+ ...
+ gdb_test_no_output "maint info symtab"
+ ...
+ checks that no CU was expanded, while -readnow ensures that all CUs are
+ expanded.
+
+ Fix this by skipping the check with -readnow.
+
+ Tested on x86_64-linux, with native and target board readnow.
+
+2021-12-09 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Clarify the behavior of .option arch directive.
+ * To be consistent with -march option, removed the "=" operator when
+ user want to reset the whole architecture string. So the formats are,
+
+ .option arch, +<extension><version>, ...
+ .option arch, -<extension>
+ .option arch, <ISA string>
+
+ * Don't allow to add or remove the base extensions in the .option arch
+ directive. Instead, users should reset the whole architecture string
+ while they want to change the base extension.
+
+ * The operator "+" won't update the version of extension, if the
+ extension is already in the subset list.
+
+ bfd/
+ * elfxx-riscv.c (riscv_add_subset): Don't update the version
+ if the extension is already in the subset list.
+ (riscv_update_subset): To be consistent with -march option,
+ removed the "=" operator when user want to reset the whole
+ architecture string. Besides, Don't allow to add or remove
+ the base extensions in the .option arch directive.
+ gas/
+ * testsuite/gas/riscv/option-arch-01.s: Updated since we cannot
+ add or remove the base extensions in the .option arch directive.
+ * testsuite/gas/riscv/option-arch-02.s: Likewise.
+ * testsuite/gas/riscv/option-arch-fail.l: Likewise.
+ * testsuite/gas/riscv/option-arch-fail.s: Likewise.
+ * testsuite/gas/riscv/option-arch-01a.d: Set -misa-spec=2.2.
+ * testsuite/gas/riscv/option-arch-01b.d: Likewise.
+ * testsuite/gas/riscv/option-arch-02.d: Updated since the .option
+ arch, + won't change the version of extension, if the extension is
+ already in the subset list.
+ * testsuite/gas/riscv/option-arch-03.s: Removed the "=" operator
+ when resetting the whole architecture string.
+
+2021-12-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: use ## for automake comments
+ The ## marker tells automake to not include the comment in its
+ generated output, so use that in most places where the comment
+ only makes sense in the inputs.
+
+2021-12-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb, gdbserver: detach fork child when detaching from fork parent
+ While working with pending fork events, I wondered what would happen if
+ the user detached an inferior while a thread of that inferior had a
+ pending fork event. What happens with the fork child, which is
+ ptrace-attached by the GDB process (or by GDBserver), but not known to
+ the core? Sure enough, neither the core of GDB or the target detach the
+ child process, so GDB (or GDBserver) just stays ptrace-attached to the
+ process. The result is that the fork child process is stuck, while you
+ would expect it to be detached and run.
+
+ Make GDBserver detach of fork children it knows about. That is done in
+ the generic handle_detach function. Since a process_info already exists
+ for the child, we can simply call detach_inferior on it.
+
+ GDB-side, make the linux-nat and remote targets detach of fork children
+ known because of pending fork events. These pending fork events can be
+ stored in:
+
+ - thread_info::pending_waitstatus, if the core has consumed the event
+ but then saved it for later (for example, because it got the event
+ while stopping all threads, to present an all-stop stop on top of a
+ non-stop target)
+ - thread_info::pending_follow: if we ran to a "catch fork" and we
+ detach at that moment
+
+ Additionally, pending fork events can be in target-specific fields:
+
+ - For linux-nat, they can be in lwp_info::status and
+ lwp_info::waitstatus.
+ - For the remote target, they could be stored as pending stop replies,
+ saved in `remote_state::notif_state::pending_event`, if not
+ acknowledged yet, or in `remote_state::stop_reply_queue`, if
+ acknowledged. I followed the model of remove_new_fork_children for
+ this: call remote_notif_get_pending_events to process /
+ acknowledge any unacknowledged notification, then look through
+ stop_reply_queue.
+
+ Update the gdb.threads/pending-fork-event.exp test (and rename it to
+ gdb.threads/pending-fork-event-detach.exp) to try to detach the process
+ while it is stopped with a pending fork event. In order to verify that
+ the fork child process is correctly detached and resumes execution
+ outside of GDB's control, make that process create a file in the test
+ output directory, and make the test wait $timeout seconds for that file
+ to appear (it happens instantly if everything goes well).
+
+ This test catches a bug in linux-nat.c, also reported as PR 28512
+ ("waitstatus.h:300: internal-error: gdb_signal target_waitstatus::sig()
+ const: Assertion `m_kind == TARGET_WAITKIND_STOPPED || m_kind ==
+ TARGET_WAITKIND_SIGNALLED' failed.). When detaching a thread with a
+ pending event, get_detach_signal unconditionally fetches the signal
+ stored in the waitstatus (`tp->pending_waitstatus ().sig ()`). However,
+ that is only valid if the pending event is of type
+ TARGET_WAITKIND_STOPPED, and this is now enforced using assertions (iit
+ would also be valid for TARGET_WAITKIND_SIGNALLED, but that would mean
+ the thread does not exist anymore, so we wouldn't be detaching it). Add
+ a condition in get_detach_signal to access the signal number only if the
+ wait status is of kind TARGET_WAITKIND_STOPPED, and use GDB_SIGNAL_0
+ instead (since the thread was not stopped with a signal to begin with).
+
+ Add another test, gdb.threads/pending-fork-event-ns.exp, specifically to
+ verify that we consider events in pending stop replies in the remote
+ target. This test has many threads constantly forking, and we detach
+ from the program while the program is executing. That gives us some
+ chance that we detach while a fork stop reply is stored in the remote
+ target. To verify that we correctly detach all fork children, we ask
+ the parent to exit by sending it a SIGUSR1 signal and have it write a
+ file to the filesystem before exiting. Because the parent's main thread
+ joins the forking threads, and the forking threads wait for their fork
+ children to exit, if some fork child is not detach by GDB, the parent
+ will not write the file, and the test will time out. If I remove the
+ new remote_detach_pid calls in remote.c, the test fails eventually if I
+ run it in a loop.
+
+ There is a known limitation: we don't remove breakpoints from the
+ children before detaching it. So the children, could hit a trap
+ instruction after being detached and crash. I know this is wrong, and
+ it should be fixed, but I would like to handle that later. The current
+ patch doesn't fix everything, but it's a step in the right direction.
+
+ Change-Id: I6d811a56f520e3cb92d5ea563ad38976f92e93dd
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28512
+
+2021-12-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: move clearing of tp->pending_follow to follow_fork_inferior
+ A following patch will change targets so that when they detach an
+ inferior, they also detach any pending fork children this inferior may
+ have. While doing this, I hit a case where we couldn't differentiate
+ two cases, where in one we should detach the fork detach but not in the
+ other.
+
+ Suppose we continue past a fork with "follow-fork-mode == child" &&
+ "detach-on-fork on". follow_fork_inferior calls target_detach to detach
+ the parent. In that case the target should not detach the fork
+ child, as we'll continue debugging the child. As of now, the
+ tp->pending_follow field of the thread who called fork still contains
+ the details about the fork.
+
+ Then, suppose we run to a fork catchpoint and the user types "detach".
+ In that case, the target should detach the fork child in addition to the
+ parent. In that case as well, the tp->pending_follow field contains
+ the details about the fork.
+
+ To allow targets to differentiate the two cases, clear
+ tp->pending_follow a bit earlier, when following a fork. Targets will
+ then see that tp->pending_follow contains TARGET_WAITKIND_SPURIOUS, and
+ won't detach the fork child.
+
+ As of this patch, no behavior changes are expected.
+
+ Change-Id: I537741859ed712cb531baaefc78bb934e2a28153
+
+2021-12-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/remote.c: refactor pending fork status functions
+ In preparation for a following patch, refactor a few things that I did
+ find a bit awkward, and to make them a bit more reusable.
+
+ - Pass an inferior to kill_new_fork_children instead of a pid. That
+ allows iterating on only this inferior's threads and avoid further
+ filtering on the thread's pid.
+ - Change thread_pending_fork_status to return a non-nullptr value only
+ if the thread does have a pending fork status.
+ - Remove is_pending_fork_parent_thread, as one can just use
+ thread_pending_fork_status and check for nullptr.
+ - Replace is_pending_fork_parent with is_fork_status, which just
+ returns if the given target_waitkind if a fork or a vfork. Push
+ filtering on the pid to the callers, when it is necessary.
+
+ Change-Id: I0764ccc684d40f054e39df6fa5458cc4c5d1cd7b
+
+2021-12-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/remote.c: move some things up
+ Move the stop_reply and a few functions up. Some code above them in the
+ file will need to use them in a following patch. No behavior changes
+ expected here.
+
+ Change-Id: I3ca57d0e3ec253f56e1ba401289d9d167de14ad2
+
+2021-12-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb/linux-nat: factor ptrace-detach code to new detach_one_pid function
+ The following patch will add some code paths that need to ptrace-detach
+ a given PID. Factor out the code that does this and put it in its own
+ function, so that it can be re-used.
+
+ Change-Id: Ie65ca0d89893b41aea0a23d9fc6ffbed042a9705
+
+2021-12-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbserver: hide fork child threads from GDB
+ This patch aims at fixing a bug where an inferior is unexpectedly
+ created when a fork happens at the same time as another event, and that
+ other event is reported to GDB first (and the fork event stays pending
+ in GDBserver). This happens for example when we step a thread and
+ another thread forks at the same time. The bug looks like (if I
+ reproduce the included test by hand):
+
+ (gdb) show detach-on-fork
+ Whether gdb will detach the child of a fork is on.
+ (gdb) show follow-fork-mode
+ Debugger response to a program call of fork or vfork is "parent".
+ (gdb) si
+ [New inferior 2]
+ Reading /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/step-while-fork-in-other-thread/step-while-fork-in-other-thread from remote target...
+ Reading /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/step-while-fork-in-other-thread/step-while-fork-in-other-thread from remote target...
+ Reading symbols from target:/home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.threads/step-while-fork-in-other-thread/step-while-fork-in-other-thread...
+ [New Thread 965190.965190]
+ [Switching to Thread 965190.965190]
+ Remote 'g' packet reply is too long (expected 560 bytes, got 816 bytes): ... <long series of bytes>
+
+ The sequence of events leading to the problem is:
+
+ - We are using the all-stop user-visible mode as well as the
+ synchronous / all-stop variant of the remote protocol
+ - We have two threads, thread A that we single-step and thread B that
+ calls fork at the same time
+ - GDBserver's linux_process_target::wait pulls the "single step
+ complete SIGTRAP" and the "fork" events from the kernel. It
+ arbitrarily choses one event to report, it happens to be the
+ single-step SIGTRAP. The fork stays pending in the thread_info.
+ - GDBserver send that SIGTRAP as a stop reply to GDB
+ - While in stop_all_threads, GDB calls update_thread_list, which ends
+ up querying the remote thread list using qXfer:threads:read.
+ - In the reply, GDBserver includes the fork child created as a result
+ of thread B's fork.
+ - GDB-side, the remote target sees the new PID, calls
+ remote_notice_new_inferior, which ends up unexpectedly creating a new
+ inferior, and things go downhill from there.
+
+ The problem here is that as long as GDB did not process the fork event,
+ it should pretend the fork child does not exist. Ultimately, this event
+ will be reported, we'll go through follow_fork, and that process will be
+ detached.
+
+ The remote target (GDB-side), has some code to remove from the reported
+ thread list the threads that are the result of forks not processed by
+ GDB yet. But that only works for fork events that have made their way
+ to the remote target (GDB-side), but haven't been consumed by the core
+ yet, so are still lingering as pending stop replies in the remote target
+ (see remove_new_fork_children in remote.c). But in our case, the fork
+ event hasn't made its way to the GDB-side remote target. We need to
+ implement the same kind of logic GDBserver-side: if there exists a
+ thread / inferior that is the result of a fork event GDBserver hasn't
+ reported yet, it should exclude that thread / inferior from the reported
+ thread list.
+
+ This was actually discussed a while ago, but not implemented AFAIK:
+
+ https://pi.simark.ca/gdb-patches/1ad9f5a8-d00e-9a26-b0c9-3f4066af5142@redhat.com/#t
+ https://sourceware.org/pipermail/gdb-patches/2016-June/133906.html
+
+ Implementation details-wise, the fix for this is all in GDBserver. The
+ Linux layer of GDBserver already tracks unreported fork parent / child
+ relationships using the lwp_info::fork_relative, in order to avoid
+ wildcard actions resuming fork childs unknown to GDB. This information
+ needs to be made available to the handle_qxfer_threads_worker function,
+ so it can filter the reported threads. Add a new thread_pending_parent
+ target function that allows the Linux target to return the parent of an
+ eventual fork child.
+
+ Testing-wise, the test replicates pretty-much the sequence of events
+ shown above. The setup of the test makes it such that the main thread
+ is about to fork. We stepi the other thread, so that the step completes
+ very quickly, in a single event. Meanwhile, the main thread is resumed,
+ so very likely has time to call fork. This means that the bug may not
+ reproduce every time (if the main thread does not have time to call
+ fork), but it will reproduce more often than not. The test fails
+ without the fix applied on the native-gdbserver and
+ native-extended-gdbserver boards.
+
+ At some point I suspected that which thread called fork and which thread
+ did the step influenced the order in which the events were reported, and
+ therefore the reproducibility of the bug. So I made the test try both
+ combinations: main thread forks while other thread steps, and vice
+ versa. I'm not sure this is still necessary, but I left it there
+ anyway. It doesn't hurt to test a few more combinations.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28288
+ Change-Id: I2158d5732fc7d7ca06b0eb01f88cf27bf527b990
+
+2021-12-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-08 Tom Tromey <tom@tromey.com>
+
+ Use for-each more in gdb
+ There are some loops in gdb that use ARRAY_SIZE (or a wordier
+ equivalent) to loop over a static array. This patch changes some of
+ these to use foreach instead.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-12-08 Tom Tromey <tromey@adacore.com>
+
+ Fix error in file_and_directory patch
+ In my earlier C++-ization patch for file_and_directory, I introduced
+ an error:
+
+ - if (strcmp (fnd.name, "<unknown>") != 0)
+ + if (fnd.is_unknown ())
+
+ This change inverted the sense of the test, which causes failures with
+ .debug_names.
+
+ This patch fixes the bug. Regression tested on x86-64 Fedora 34. I
+ also tested it using the AdaCore internal test suite, with
+ .debug_names -- this was failing before, and now it works.
+
+2021-12-08 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: Use tp_init instead of tp_new to setup gdb.Value
+ The documentation suggests that we implement gdb.Value.__init__,
+ however, this is not currently true, we really implement
+ gdb.Value.__new__. This will cause confusion if a user tries to
+ sub-class gdb.Value. They might write:
+
+ class MyVal (gdb.Value):
+ def __init__ (self, val):
+ gdb.Value.__init__(self, val)
+
+ obj = MyVal(123)
+ print ("Got: %s" % obj)
+
+ But, when they source this code they'll see:
+
+ (gdb) source ~/tmp/value-test.py
+ Traceback (most recent call last):
+ File "/home/andrew/tmp/value-test.py", line 7, in <module>
+ obj = MyVal(123)
+ File "/home/andrew/tmp/value-test.py", line 5, in __init__
+ gdb.Value.__init__(self, val)
+ TypeError: object.__init__() takes exactly one argument (the instance to initialize)
+ (gdb)
+
+ The reason for this is that, as we don't implement __init__ for
+ gdb.Value, Python ends up calling object.__init__ instead, which
+ doesn't expect any arguments.
+
+ The Python docs suggest that the reason why we might take this
+ approach is because we want gdb.Value to be immutable:
+
+ https://docs.python.org/3/c-api/typeobj.html#c.PyTypeObject.tp_new
+
+ But I don't see any reason why we should require gdb.Value to be
+ immutable when other types defined in GDB are not. This current
+ immutability can be seen in this code:
+
+ obj = gdb.Value(1234)
+ print("Got: %s" % obj)
+ obj.__init__ (5678)
+ print("Got: %s" % obj)
+
+ Which currently runs without error, but prints:
+
+ Got: 1234
+ Got: 1234
+
+ In this commit I propose that we switch to using __init__ to
+ initialize gdb.Value objects.
+
+ This does introduce some additional complexity, during the __init__
+ call a gdb.Value might already be associated with a gdb value object,
+ in which case we need to cleanly break that association before
+ installing the new gdb value object. However, the cost of doing this
+ is not great, and the benefit - being able to easily sub-class
+ gdb.Value seems worth it.
+
+ After this commit the first example above works without error, while
+ the second example now prints:
+
+ Got: 1234
+ Got: 5678
+
+ In order to make it easier to override the gdb.Value.__init__ method,
+ I have tweaked the definition of gdb.Value.__init__. The second,
+ optional argument to __init__ is a gdb.Type, if this argument is not
+ present then GDB figures out a suitable type.
+
+ However, if we want to override the __init__ method in a sub-class,
+ and still support the default argument, it is easier to write:
+
+ class MyVal (gdb.Value):
+ def __init__ (self, val, type=None):
+ gdb.Value.__init__(self, val, type)
+
+ Currently, passing None for the Type will result in an error:
+
+ TypeError: type argument must be a gdb.Type.
+
+ After this commit I now allow the type argument to be None, in which
+ case GDB figures out a suitable type just as if the type had not been
+ passed at all.
+
+ Unless a user is trying to reinitialize a value, or create sub-classes
+ of gdb.Value, there should be no user visible changes after this
+ commit.
+
+2021-12-08 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: use try/catch around a gdb_disassembler::print_insn call
+ While investigating some disassembler problems I ran into this case;
+ GDB compiled on a 32-bit arm target, with --enable-targets=all. Then
+ in GDB:
+
+ (gdb) set architecture i386
+ (gdb) disassemble 0x0,+4
+ unknown disassembler error (error = -1)
+
+ This is interesting because it shows a case where the libopcodes
+ disassembler is returning -1 without first calling the
+ memory_error_func callback. Indeed, the return from libopcodes
+ happens from this code snippet in i386-dis.c in the print_insn
+ function:
+
+ if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
+ {
+ (*info->fprintf_func) (info->stream,
+ _("64-bit address is disabled"));
+ return -1;
+ }
+
+ Notice how, prior to the return the disassembler tries to print a
+ helpful message out, but GDB doesn't print this message.
+
+ The reason this message goes missing is the call stack, it looks like
+ this:
+
+ gdb_pretty_print_disassembler::pretty_print_insn
+ gdb_disassembler::print_insn
+ gdbarch_print_insn
+ ...
+ i386-dis.c:print_insn
+
+ When i386-dis.c:print_insn returns -1 this is handled in
+ gdb_disassembler::print_insn, where an exception is thrown. However,
+ the actual printing of the disassembler output is done in
+ gdb_pretty_print_disassembler::pretty_print_insn, and is only done if
+ an exception is not thrown.
+
+ In this commit I change this. The pretty_print_insn now uses
+ try/catch around the call to gdb_disassembler::print_insn, if we catch
+ an error then we first print any pending output in the instruction
+ buffer, before rethrowing the exception. As a result, even if an
+ exception is thrown we still print any pending disassembler output to
+ the screen; in the above case the helpful message will now be shown.
+
+ Before my patch we might expect to see this output:
+
+ (gdb) disassemble 0x0,+4
+ Dump of assembler code from 0x0 to 0x4:
+ 0x0000000000000000: unknown disassembler error (error = -1)
+ (gdb)
+
+ But now we see this:
+
+ (gdb) disassemble 0x0,+4
+ Dump of assembler code from 0x0 to 0x4:
+ 0x0000000000000000: 64-bit address is disabled
+ unknown disassembler error (error = -1)
+
+ If the disassembler returns -1 without printing a helpful message then
+ we would still expect a change in output, something like:
+
+ (gdb) disassemble 0x0,+4
+ Dump of assembler code from 0x0 to 0x4:
+ 0x0000000000000000:
+ unknown disassembler error (error = -1)
+
+ Which I think is still acceptable, though at this point I think a
+ strong case can be made that this is a disassembler bug (not printing
+ anything, but still returning -1).
+
+ Notice however, that the error message is always printed on a new line
+ now. This is also true for the memory error case, where before we
+ might see this:
+
+ (gdb) disassemble 0x0,+4
+ Dump of assembler code from 0x0 to 0x4:
+ 0x00000000: Cannot access memory at address 0x0
+
+ We now get this:
+
+ (gdb) disassemble 0x0,+4
+ Dump of assembler code from 0x0 to 0x4:
+ 0x00000000:
+ Cannot access memory at address 0x0
+
+ For me, I'm happy to accept this change, having the error on a line by
+ itself, rather than just appended to the end of the previous line,
+ seems like an improvement, but I'm aware others might feel
+ differently, so I'd appreciate any feedback.
+
+2021-12-08 Jan Vrany <jan.vrany@labware.com>
+
+ ppc: recognize all program traps
+ Permanent program breakpoints (ones inserted into the code) other than
+ the one GDB uses for POWER (0x7fe00008) did not result in stop but
+ caused GDB to loop infinitely.
+
+ This was because GDB did not recognize trap instructions other than
+ "trap". For example, "tw 12, 4, 4" was not be recognized, causing GDB
+ to loop forever.
+
+ This commit fixes this by providing POWER specific hook
+ (gdbarch_program_breakpoint_here_p) recognizing all tw, twi, td and tdi
+ instructions.
+
+ Tested on Linux on PowerPC e500 and on QEMU PPC64le.
+
+2021-12-08 Jan Vrany <jan.vrany@labware.com>
+
+ ppc: use "trap" ("tw, 31, 0, 0") as breakpoint instruction
+ Power ISA 3.0 B spec [1], sections 3.3.11 "Fixed-Point Trap Instructions"
+ and section C.6 "Trap Mnemonics" specify "tw, 31, 0, 0" (encoded as
+ 0x7fe00008) as canonical unconditional trap instruction.
+
+ This commit changes the breakpoint instruction used by GDB from
+ "tw 12, r2, r2" to unconditional "trap".
+
+ [1]: https://openpowerfoundation.org/?resource_lib=power-isa-version-3-0
+
+2021-12-08 Fangrui Song <maskray@google.com>
+
+ bfd_section_from_shdr: Support SHT_RELR sections
+ If a.so contains an SHT_RELR section, objcopy a.so will fail with:
+
+ a.so: unknown type [0x13] section `.relr.dyn'
+
+ This change allows objcopy to work.
+
+ bfd/
+ * elf.c (bfd_section_from_shdr): Support SHT_RELR.
+
+2021-12-08 Alan Modra <amodra@gmail.com>
+
+ PR28673, input file 'gcov' is the same as output file
+ PR 28673
+ * ldlang.c (open_output): Use local_sym_name when checking
+ output against input files rather than filename.
+
+2021-12-08 Tom Tromey <tom@tromey.com>
+
+ Fix bug in source.c change
+ My earlier change to source.c ("Remove an xfree from add_path")
+ introduced a regression. This patch fixes the problem.
+
+2021-12-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make struct linespect contain vectors, not pointers to vectors
+ struct linespec contains pointers to vectors, instead of containing
+ vectors directly. This is probably historical, when linespec_parser
+ (which contains a struct linespec field) was not C++-ified yet. But it
+ seems easy to change the pointers to vectors to just vectors today.
+ This simplifies the code, we don't need to manually allocate and delete
+ the vectors and there's no pointer that can be NULL.
+
+ As far as I understand, there was not meaningful distinction between a
+ NULL pointer to vector and an empty vector. So all NULL checks are
+ changed for !empty checks.
+
+ Change-Id: Ie759707da14d9d984169b93233343a86e2de9ee6
+
+2021-12-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-07 Tom Tromey <tom@tromey.com>
+
+ Remove an xfree from add_path
+ This removes a temporary \0 assignment and an xfree from add_path,
+ replacing it with a simpler use of std::string.
+
+2021-12-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/linespec.c: simplify condition
+ We can remove the empty check: if the vector has size 1, it is obviously
+ not empty. This code ended up like this because the empty check used to
+ be a NULL check.
+
+ Change-Id: I1571bd0228818ca93f6a6b444e9b010dc2da4c08
+
+2021-12-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: rename "maint agent" functions
+ Functions agent_eval_command and agent_command are used to implement
+ maintenance commands, rename them accordingly (with the maint_ prefix),
+ as well as the agent_command_1 helper function.
+
+ Change-Id: Iacf96d4a0a26298e8dd4648a0f38da649ea5ef61
+
+2021-12-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make set_raw_breakpoint static
+ set_raw_breakpoint is only used in breakpoint.c, make it static.
+
+ Change-Id: I7fbeda067685309a30b88aceaf957eff7a28e310
+
+2021-12-07 John Baldwin <jhb@FreeBSD.org>
+
+ Support AT_FXRNG and AT_KPRELOAD on FreeBSD.
+ FreeBSD's kernel has recently added two new ELF auxiliary vector
+ entries. AT_FXRNG points to a root seed version for the kernel's
+ PRNG. Userland can use this to reseed a userland PRNG after the
+ kernel's PRNG has reseeded. AT_KPRELOAD is the base address of a
+ kernel-provided vDSO.
+
+ This change displays the proper name and description of these entries
+ in 'info auxv'.
+
+ include/ChangeLog:
+
+ * elf/common.h (AT_FREEBSD_FXRNG, AT_FREEBSD_KPRELOAD): Define.
+
+2021-12-07 Tom Tromey <tromey@adacore.com>
+
+ Avoid extra work in global_symbol_searcher::expand_symtabs
+ I noticed that global_symbol_searcher::expand_symtabs always passes a
+ file matcher to expand_symtabs_matching. However, if 'filenames' is
+ empty, then this always returns true. It's slightly more efficient to
+ pass a null file matcher in this case, because that lets the "quick"
+ symbol implementations skip any filename checks.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-12-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix options arg handling in compile_jit_elf_main_as_so
+ In commit 80ad340c902 ("[gdb/testsuite] use -Ttext-segment for jit-elf tests")
+ the following change was made:
+ ...
+ proc compile_jit_elf_main_as_so {main_solib_srcfile main_solib_binfile options} {
+ - set options [concat $options debug]
+ + global jit_load_address jit_load_increment
+ +
+ + set options [list \
+ + additional_flags="-DMAIN=jit_dl_main" \
+ + additional_flags=-DLOAD_ADDRESS=$jit_load_address \
+ + additional_flags=-DLOAD_INCREMENT=$jit_load_increment \
+ + debug]
+ ...
+
+ Before the change, the options argument was used, but after the change not
+ anymore.
+
+ Fix this by reverting back to using "set options [concat $options ...]".
+
+ Fixing this gets us twice the -DMAIN=jit_dl_main bit, once from a caller, and
+ once from compile_jit_elf_main_as_so. Fix this by removing the bit from
+ compile_jit_elf_main_as_so, which makes the code similar to compile_jit_main.
+
+ Tested on x86_64-linux.
+
+2021-12-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAIL in gdb.tui/basic.exp
+ On openSUSE Leap 15.2 aarch64 I ran into:
+ ...
+ FAIL: gdb.tui/basic.exp: check main is where we expect on the screen
+ ...
+ while this is passing on x86_64.
+
+ On x86_64-linux we have at the initial screen dump for "list -q main":
+ ...
+ 0 +-/home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.tui/tui-layout.c--+
+ 1 | 15 You should have received a copy of the GNU General Public |
+ 2 | 16 along with this program. If not, see <http://www.gnu.org/|
+ 3 | 17 |
+ 4 | 18 int |
+ 5 | 19 main () |
+ 6 | 20 { |
+ 7 | 21 return 0; |
+ 8 | 22 } |
+ 9 | 23 |
+ ...
+ but on aarch64:
+ ...
+ 0 +-/home/tdevries/gdb/src/gdb/testsuite/gdb.tui/tui-layout.c--------------+
+ 1 | 16 along with this program. If not, see <http://www.gnu.org/|
+ 2 | 17 |
+ 3 | 18 int |
+ 4 | 19 main () |
+ 5 | 20 { |
+ 6 | 21 return 0; |
+ 7 | 22 } |
+ 8 | 23 |
+ 9 | 24 |
+ ...
+
+ The cause of the diffferent placement is that we have as line number for main
+ on x86_64:
+ ...
+ $ gdb -q -batch outputs/gdb.tui/basic/basic -ex "info line main"
+ Line 20 of "tui-layout.c" starts at address 0x4004a7 <main> \
+ and ends at 0x4004ab <main+4>.
+ ...
+ and on aarch64 instead:
+ ...
+ $ gdb -q -batch outputs/gdb.tui/basic/basic -ex "info line main"
+ Line 21 of "tui-layout.c" starts at address 0x4005f4 <main> \
+ and ends at 0x4005f8 <main+4>.
+ ...
+
+ Fix this by using a new source file main-one-line.c, that implements the
+ entire main function on a single line, in order to force the compiler to use
+ that line number.
+
+ Also try to do less hard-coding in the test-case.
+
+ Tested on x86_64-linux and aarch64-linux.
+
+2021-12-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Fix inferior plt calls in PIE for i386
+ Consider test-case test.c:
+ ...
+ int main (void) {
+ void *p = malloc (10);
+ return 0;
+ }
+ ...
+
+ When compiled to a non-PIE exec:
+ ...
+ $ gcc -m32 test.c
+ ...
+ the call sequence looks like:
+ ...
+ 8048447: 83 ec 0c sub $0xc,%esp
+ 804844a: 6a 0a push $0xa
+ 804844c: e8 bf fe ff ff call 8048310 <malloc@plt>
+ ...
+ which calls to:
+ ...
+ 08048310 <malloc@plt>:
+ 8048310: ff 25 0c a0 04 08 jmp *0x804a00c
+ 8048316: 68 00 00 00 00 push $0x0
+ 804831b: e9 e0 ff ff ff jmp 8048300 <.plt>
+ ...
+ where the first insn at 0x8048310 initially jumps to the following address
+ 0x8048316, read from the .got.plt @ 0x804a00c:
+ ...
+ 804a000 0c9f0408 00000000 00000000 16830408 ................
+ 804a010 26830408 &...
+ ...
+
+ Likewise, when compiled as a PIE:
+ ...
+ $ gcc -m32 -fPIE -pie test.c
+ ...
+ we have this call sequence (with %ebx setup to point to the .got.plt):
+ ...
+ 0000055d <main>:
+ 579: 83 ec 0c sub $0xc,%esp
+ 57c: 6a 0a push $0xa
+ 57e: 89 c3 mov %eax,%ebx
+ 580: e8 6b fe ff ff call 3f0 <malloc@plt>
+ ...
+ which calls to:
+ ...
+ 000003f0 <malloc@plt>:
+ 3f0: ff a3 0c 00 00 00 jmp *0xc(%ebx)
+ 3f6: 68 00 00 00 00 push $0x0
+ 3fb: e9 e0 ff ff ff jmp 3e0 <.plt>
+ ...
+ where the insn at 0x3f0 initially jumps to following address 0x3f6, read from
+ the .got.plt at offset 0xc:
+ ...
+ 2000 f41e0000 00000000 00000000 f6030000 ................
+ 2010 06040000 ....
+ ...
+
+ When instead doing an inferior call to malloc (with nosharedlib to force
+ malloc to resolve to malloc@plt rather than the functions in ld.so or libc.so)
+ with the non-PIE exec, we have the expected:
+ ...
+ $ gdb -q -batch a.out -ex start -ex nosharedlib -ex "p /x (void *)malloc (10)"
+ Temporary breakpoint 1 at 0x8048444
+
+ Temporary breakpoint 1, 0x08048444 in main ()
+ $1 = 0x804b160
+ ...
+
+ But with the PIE exec, we run into:
+ ...
+ $ gdb -q -batch a.out -ex start -ex nosharedlib -ex "p /x (void *)malloc (10)"
+ Temporary breakpoint 1 at 0x56c
+
+ Temporary breakpoint 1, 0x5655556c in main ()
+
+ Program received signal SIGSEGV, Segmentation fault.
+ 0x565553f0 in malloc@plt ()
+ ...
+
+ The segfault happens because:
+ - the inferior call mechanism doesn't setup %ebx
+ - %ebx instead is 0
+ - the jump to "*0xc(%ebx)" reads from memory at 0xc
+
+ Fix this by setting up %ebx properly in i386_thiscall_push_dummy_call.
+
+ Fixes this failure with target board unix/-m32/-pie/-fPIE reported in
+ PR28467:
+ ...
+ FAIL: gdb.base/nodebug.exp: p/c (int) array_index("abcdef",2)
+ ...
+
+ Tested on x86_64-linux, with target board unix/-m32 and unix/-m32/-fPIE/-pie.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28467
+
+2021-12-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Support -readnow during reread
+ When running test-case gdb.base/cached-source-file.exp with target board
+ readnow, we run into:
+ ...
+ FAIL: gdb.base/cached-source-file.exp: rerun program (the program exited)
+ ...
+
+ The problem is that when rereading, the readnow is ignored.
+
+ Fix this by copying the readnow handling code from symbol_file_add_with_addrs
+ to reread_symbols.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26800
+
+2021-12-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/ada] Fix assert in ada_is_unconstrained_packed_array_type
+ On openSUSE Leap 42.3, with system compiler gcc 4.8.5 I run into:
+ ...
+ (gdb) print u_one_two_three^M
+ src/gdb/gdbtypes.h:1050: internal-error: field: \
+ Assertion `idx >= 0 && idx < num_fields ()' failed.^M
+ ...
+
+ We run into trouble while doing this in
+ ada_is_unconstrained_packed_array_type:
+ ...
+ 1953 return TYPE_FIELD_BITSIZE (type, 0) > 0;
+ ...
+ which tries to get field 0 from a type without fields:
+ ...
+ (gdb) p type->num_fields ()
+ $6 = 0
+ ...
+ which is the case because the type is a typedef:
+ ...
+ (gdb) p type->code ()
+ $7 = TYPE_CODE_TYPEDEF
+ ...
+
+ Fix this by using the type referenced by the typedef instead.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28323
+
+2021-12-07 Alan Modra <amodra@gmail.com>
+
+ Re: Add support for AArch64 EFI (efi-*-aarch64)
+ Commit b69c9d41e8 was broken in multiple ways regarding the realloc
+ of the target string, most notably in that "-little" wasn't actually
+ appended to the input_target or output_target. This caused asan
+ errors and "FAIL: Check if efi app format is recognized". I also
+ noticed that the input_target string wasn't being copied but rather
+ the output_target when dealing with the input target. Fix that too.
+
+ PR 26206
+ * objcopy.c (convert_efi_target): Rewrite. Allocate modified
+ target strings here..
+ (copy_main): ..rather than here. Do handle input_target,
+ not output_target for input.
+
+2021-12-07 Alan Modra <amodra@gmail.com>
+
+ Error on ld output file name matching input file name
+ It's not foolproof, for example we don't catch output to a linker
+ script, to a library specified with -l, or to an element of a thin
+ archive.
+
+ * ldlang.c (open_output): Exit with error on output file matching
+ an input file.
+ * testsuite/ld-misc/just-symbols.exp: Adjust ld -r test to suit.
+
+2021-12-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-06 Carl Love <cel@us.ibm.com>
+
+ gdb: Add PowerPC support to gdb.dwarf2/frame-inlined-in-outer-frame
+ This patch adds an #elif defined for PowerPC to setup the exit_0 macro.
+ This patch addes the needed macro definitionald logic to handle both elfV1
+ and elfV2.
+
+ The patch has been successfully tested on both PowerPC BE, Powerpc LE and
+ X86_64 with no regressions.
+
+2021-12-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use precise align in gdb.arch/i386-{avx,sse}.exp
+ Test-cases gdb.arch/i386-{avx,sse}.exp use assembly instructions that require
+ the memory operands to be aligned to a certain boundary, and the test-cases
+ use C11's _Alignas to make that happen.
+
+ The draw-back of using _Alignas is that while it does enforce a minimum
+ alignment, the actual alignment may be bigger, which makes the following
+ scenario possible:
+ - copy say, gdb.arch/i386-avx.c as basis for a new test-case
+ - run the test-case and observe a PASS
+ - commit the new test-case in the supposition that the test-case is correct
+ and well-tested
+ - run later into a failure on a different test setup (which may be a setup
+ where reproduction and investigation is more difficult and time-consuming),
+ and find out that the specified alignment was incorrect and should have been
+ updated to say, 64 bytes. The initial PASS occurred only because the actual
+ alignment happened to be greater than required.
+
+ The idea of having precise alignment as a means of having more predictable
+ execution which allows flushing out bugs earlier, has been filed as PR
+ gcc/103095.
+
+ Add a new file lib/precise-aligned-alloc.c with functions
+ precise_aligned_alloc and precise_aligned_dup, to support precise alignment.
+
+ Use precise_aligned_dup in aforementioned test-cases to:
+ - verify that the specified alignment is indeed sufficient, rather
+ than too little but accidentally over-aligned.
+ - prevent the same type of problems in any new test-cases based on these
+
+ Tested on x86_64-linux, with both gcc and clang.
+
+2021-12-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix data alignment in gdb.arch/i386-{avx,sse}.exp
+ When running test-case gdb.arch/i386-avx.exp with clang I ran into:
+ ...
+ (gdb) PASS: gdb.arch/i386-avx.exp: set first breakpoint in main
+ continue^M
+ Continuing.^M
+ ^M
+ Program received signal SIGSEGV, Segmentation fault.^M
+ 0x000000000040052b in main (argc=1, argv=0x7fffffffd3c8) at i386-avx.c:54^M
+ 54 asm ("vmovaps 0(%0), %%ymm0\n\t"^M
+ (gdb) FAIL: gdb.arch/i386-avx.exp: continue to breakpoint: \
+ continue to first breakpoint in main
+ ...
+
+ The problem is that the vmovaps insn requires an 256-bit (or 32-byte) aligned
+ address, and it's only 16-byte aligned:
+ ...
+ (gdb) p /x $rax
+ $1 = 0x601030
+ ...
+
+ Fix this by using a sufficiently aligned address, using _Alignas.
+
+ Compile using -std=gnu11 to support _Alignas.
+
+ Likewise in gdb.arch/i386-sse.exp.
+
+ Tested on x86_64-linux, with both gcc and clang.
+
+2021-12-06 Alan Modra <amodra@gmail.com>
+
+ [GOLD] PowerPC64 inline plt sequences
+ The fixes gold failures to handle inline PLT sequences properly.
+ PowerPC gold was always turning these back into direct calls due to
+ gsym->use_plt_offset() returning false. This is fixed for dynamic
+ linking by correcting get_reference_flags, and for static linking by
+ overriding use_plt_offset() in relocate(). The rest of the patch
+ revolves around needing to create PLT entries for inline PLT calls
+ when statically linking (for gcc -mlongcall). The lplt section
+ handled that for local symbols, now it does globals too.
+
+ * powerpc.cc (Target_powerpc::plt_off): Return proper section
+ for static link.
+ (Target_powerpc::symval_for_branch): Make public.
+ (Target_powerpc::make_lplt_section): Add Symbol_table* param.
+ Adjust all calls.
+ (Target_powerpc::make_local_plt_entry): Likewise.
+ (Target_powerpc::make_local_plt_entry): New variant for global syms.
+ (Powerpc_relobj::do_relocate_sections): Don't write lplt contents.
+ (Output_data_plt_powerpc::do_write): Write lplt contents here.
+ (Output_data_plt_powerpc::Output_data_plt_powerpc): Save
+ symbol table pointer. Adjust all uses.
+ (Output_data_plt_powerpc::add_entry): Add stash parameter. Don't
+ do dynamic reloc handling when no reloc section. Save symbol
+ for local plt entries.
+ (Output_data_plt_powerpc::add_local_entry): Save symbol.
+ (Output_data_plt_powerpc::Local_plt_ent): New class.
+ (Output_data_plt_powerpc::sym_ents_): New vector.
+ (Target_powerpc::Scan::get_reference_flags): Return
+ FUNCTION_CALL|RELATIVE_REF for inline plt relocs.
+ (Target_powerpc::Scan::global): Make entries in lplt for inline
+ plt call relocation symbols.
+ (Target_powerpc::Relocate::relocate): Rename has_plt_offset to
+ use_plt_offset. Set use_plt_offset for inline plt relocs.
+
+2021-12-06 Clément Chigot <clement.chigot@atos.net>
+
+ ld: improve shared tests for AIX
+ It's now possible to refer symbols in the main program from the
+ shared library. However, it still impossible to have the same
+ overriden features between shared objects and mains than ELF,
+ without using the runtime linking feature which isn't yet fully
+ available.
+
+ ld/ChangeLog:
+
+ * testsuite/ld-shared/shared.exp: Improve XCOFF support
+ * testsuite/ld-shared/main.c: Likewise.
+ * testsuite/ld-shared/sh1.c: Likewise.
+ * testsuite/ld-shared/xcoff.dat: Likewise.
+
+2021-12-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-05 Tom Tromey <tom@tromey.com>
+
+ Preserve artificial CU name in process_psymtab_comp_unit_reader
+ This fixes a use-after-free that Simon pointed out.
+ process_psymtab_comp_unit_reader was allocating an artificial name for
+ a CU, and then discarding it. However, this name was preserved in the
+ cached file_and_directory. This patch arranges for the allocated name
+ to be preserved there.
+
+2021-12-05 Mike Frysinger <vapier@gentoo.org>
+
+ sim: include ansidecl.h when needed
+ Avoid implicit include deps with this to help untangle sim headers
+ so we can get rid of arch-specific sim-main.h.
+
+ sim: include stdint.h when needed
+ Avoid implicit include deps with this to help untangle sim headers
+ so we can get rid of arch-specific sim-main.h.
+
+ sim: include stdarg.h when used
+ Avoid implicit include deps with this to help untangle sim headers
+ so we can get rid of arch-specific sim-main.h.
+
+2021-12-05 Mike Frysinger <vapier@gentoo.org>
+
+ sim: reorder header includes
+ We're including system headers after local headers in a bunch of
+ places, but this leads to conflicts when our local headers happen
+ to define symbols that show up in the system headers.
+
+ Use the more standard order of:
+ * config.h (via defs.h)
+ * system headers
+ * local library headers (e.g. bfd & libiberty)
+ * sim specific headers
+
+2021-12-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: fix memory leak in create_file_handler when re-using file handler
+ ASan made me notice a memory leak, where the memory tied to the file
+ handle name string wasn't freed. When register a file handler with an
+ fd that is already registered, we re-use the file_handler object, so we
+ ended up creating a new std::string object and overwriting the
+ file_handler::name pointer, without free-ing the old std::string.
+
+ Fix this by allocating file_handler with new, deleting it with
+ delete, and making file_handler::name not a pointer.
+
+ Change-Id: Ie304cc78ab5ae5dfad9a1366e9890c09de651f43
+
+2021-12-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-04 Mike Frysinger <vapier@gentoo.org>
+
+ sim: moxie: hoist dtb rules up to common builds
+ These rules don't depend on the target compiler settings, so hoist
+ the build logic up to the common builds for better parallelization.
+
+ sim: m68hc11: delete unused profile flags
+ These were moved to the common configure script a while ago and have
+ the same default as these, so just delete it.
+
+ sim: msp430: delete redundant comments & settings
+ These were copied from the example docs, so aren't adding any value.
+
+ sim: erc32: drop old configure target
+ There is no configure script in here anymore to regenerate.
+
+ sim: m32c/rl78: drop redundant -Wall settings
+ We already turn these on in the configure script.
+
+2021-12-04 Tom Tromey <tom@tromey.com>
+
+ Cache the result of find_file_and_directory
+ This changes the DWARF reader to cache the result of
+ find_file_and_directory. This is not especially important now, but it
+ will help the new DWARF indexer.
+
+ Move file_and_directory to new file and C++-ize
+ This moves file_and_directory to a new file, and then C++-izes it --
+ replacing direct assignments with methods, and arranging for it to own
+ any string that must be computed. Finally, the CU's objfile will only
+ be used on demand; this is an important property for the new DWARF
+ indexer's parallel mode.
+
+ Remove Irix case from find_file_and_directory
+ find_file_and_directory has a special case for the Irix 6.2 compiler.
+ Since this is long obsolete, this patch removes it.
+
+2021-12-04 Mike Frysinger <vapier@gentoo.org>
+
+ sim: frv: split up testsuite a bit
+ Running frv's allinsn in serial is quite slow due to the sheer number
+ of tests it contains. By splitting it up and running in parallel, the
+ execution time on my system goes from ~100sec to ~60sec.
+
+2021-12-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: don't show deprecated aliases
+ I don't think it's very useful to show deprecated aliases to the
+ user. It encourages the user to use them, when the goal is the
+ opposite.
+
+ For example, before:
+
+ (gdb) help set index-cache enabled
+ set index-cache enabled, set index-cache off, set index-cache on
+ alias set index-cache off = set index-cache enabled off
+ alias set index-cache on = set index-cache enabled on
+ Enable the index cache.
+ When on, enable the use of the index cache.
+
+ (gdb) help set index-cache on
+ Warning: 'set index-cache on', an alias for the command 'set index-cache enabled', is deprecated.
+ Use 'set index-cache enabled on'.
+
+ set index-cache enabled, set index-cache off, set index-cache on
+ alias set index-cache off = set index-cache enabled off
+ alias set index-cache on = set index-cache enabled on
+ Enable the index cache.
+ When on, enable the use of the index cache.
+
+ After:
+
+ (gdb) help set index-cache enabled
+ Enable the index cache.
+ When on, enable the use of the index cache.
+ (gdb) help set index-cache on
+ Warning: 'set index-cache on', an alias for the command 'set index-cache enabled', is deprecated.
+ Use 'set index-cache enabled on'.
+
+ Enable the index cache.
+ When on, enable the use of the index cache.
+
+ Change-Id: I989b618a5ad96ba975367e9d16db95523cd57a4c
+
+2021-12-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: fix two "maint info line-table"-related tests
+ Commit 92228a334ba2 ("gdb: small "maintenance info line-table"
+ readability improvements") change the output format of "maint info
+ line-table" slightly, adding some empty lines between each
+ line-table. This causes two tests to start failing, update them to
+ account for those empty lines.
+
+ Change-Id: I9d33a58fce3e860ba0554b25f5582e8066a5c519
+
+2021-12-04 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: revert one array_view copy change in ada-lang.c
+ Commit 4bce7cdaf481 ("gdbsupport: add array_view copy function") caused
+ an internal error when running gdb.ada/packed_array_assign.exp:
+
+ print pra(1) := pr^M
+ /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/array-view.h:217: internal-error: copy: Assertion `dest.size () == src.size ()' failed.^M
+
+ I am not sure what's the root cause of this, whether it is a GDB bug
+ exposed by using the array_view copy function or not. Back out the
+ change that triggers the internal error for now, while we investigate
+ it.
+
+ Change-Id: I055ab14143e4cfd3ca7ce8f4855c6c3c05db52a7
+
+2021-12-04 Mike Frysinger <vapier@gentoo.org>
+
+ bfd: unify header generation rules
+ The logic between these rules are extremely similar, so unify them
+ into a single variable.
+
+2021-12-04 Mike Frysinger <vapier@gentoo.org>
+
+ bfd: move header updates up a directory
+ The rules for rebuilding the bfd headers live in the doc/ subdir
+ (most likely) because they rely on the chew & related tools. But
+ we can collapse them into the main Makefile while keeping the tools
+ in the doc subdir easily enough. This makes the code simpler and
+ allows for rebuilding them in parallel.
+
+ Also add automake silent rule support while we're here.
+
+2021-12-04 Mike Frysinger <vapier@gentoo.org>
+
+ bfd: convert bfdver.h to silent automake rules
+
+2021-12-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: small "maintenance info line-table" readability improvements
+ - separate each entry with a newline, to visually separate them
+ - style filenames with the filename style
+ - print the name of the compunit_symtab
+
+ A header now looks like this, with the compunit_symtab name added (and
+ the coloring, but you can't really see it here):
+
+ objfile: /home/simark/build/babeltrace/src/cli/.libs/babeltrace2 ((struct objfile *) 0x613000005980)
+ compunit_symtab: babeltrace2-cfg-cli-args.c ((struct compunit_symtab *) 0x62100da1ed10)
+ symtab: /usr/include/glib-2.0/glib/gdatetime.h ((struct symtab *) 0x62100d9ee530)
+ linetable: ((struct linetable *) 0x0):
+
+ Change-Id: Idc23e10aaa66e2e692adb0a6a74144f72c4fa1c7
+
+2021-12-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: change some alias functions parameters to const-reference
+ Now that we use intrusive list to link aliases, it becomes easier to
+ pass cmd_list_element arguments by const-reference rather than by
+ pointer to some functions, change a few.
+
+ Change-Id: Id0df648ed26e9447da0671fc2c858981cda31df8
+
+2021-12-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use intrusive_list for cmd_list_element aliases list
+ Change the manually-implemented linked list to use intrusive_list. This
+ is not strictly necessary, but it makes the code much simpler.
+
+ Change-Id: Idd08090ebf2db8bdcf68e85ef72a9635f1584ccc
+
+2021-12-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: trivial changes to use array_view
+ Change a few relatively obvious spots using value contents to propagate
+ the use array_view a bit more.
+
+ Change-Id: I5338a60986f06d5969fec803d04f8423c9288a15
+
+2021-12-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make extract_integer take an array_view
+ I think it would make sense for extract_integer, extract_signed_integer
+ and extract_unsigned_integer to take an array_view. This way, when we
+ extract an integer, we can validate that we don't overflow the buffer
+ passed by the caller (e.g. ask to extract a 4-byte integer but pass a
+ 2-byte buffer).
+
+ - Change extract_integer to take an array_view
+ - Add overloads of extract_signed_integer and extract_unsigned_integer
+ that take array_views. Keep the existing versions so we don't
+ need to change all callers, but make them call the array_view
+ versions.
+
+ This shortens some places like:
+
+ result = extract_unsigned_integer (value_contents (result_val).data (),
+ TYPE_LENGTH (value_type (result_val)),
+ byte_order);
+
+ into
+
+ result = extract_unsigned_integer (value_contents (result_val), byte_order);
+
+ value_contents returns an array view that is of length
+ `TYPE_LENGTH (value_type (result_val))` already, so the length is
+ implicitly communicated through the array view.
+
+ Change-Id: Ic1c1f98c88d5c17a8486393af316f982604d6c95
+
+2021-12-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: add array_view copy function
+ An assertion was recently added to array_view::operator[] to ensure we
+ don't do out of bounds accesses. However, when the array_view is copied
+ to or from using memcpy, it bypasses that safety.
+
+ To address this, add a `copy` free function that copies data from an
+ array view to another, ensuring that the destination and source array
+ views have the same size. When copying to or from parts of an
+ array_view, we are expected to use gdb::array_view::slice, which does
+ its own bounds check. With all that, any copy operation that goes out
+ of bounds should be caught by an assertion at runtime.
+
+ copy is implemented using std::copy and std::copy_backward, which, at
+ least on libstdc++, appears to pick memmove when copying trivial data.
+ So in the end there shouldn't be much difference vs using a bare memcpy,
+ as we do right now. When copying non-trivial data, std::copy and
+ std::copy_backward assigns each element in a loop.
+
+ To properly support overlapping ranges, we must use std::copy or
+ std::copy_backward, depending on whether the destination is before the
+ source or vice-versa. std::copy and std::copy_backward don't support
+ copying exactly overlapping ranges (where the source range is equal to
+ the destination range). But in this case, no copy is needed anyway, so
+ we do nothing.
+
+ The order of parameters of the new copy function is based on std::copy
+ and std::copy_backward, where the source comes before the destination.
+
+ Change a few randomly selected spots to use the new function, to show
+ how it can be used.
+
+ Add a test for the new function, testing both with arrays of a trivial
+ type (int) and of a non-trivial type (foo). Test non-overlapping
+ ranges as well as three kinds of overlapping ranges: source before dest,
+ dest before source, and dest == source.
+
+ Change-Id: Ibeaca04e0028410fd44ce82f72e60058d6230a03
+
+2021-12-03 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: change store_waitstatus to return a target_waitstatus by value
+ store_waitstatus is basically a translation function between a status
+ integer and an equivalent target_waitstatus object. It would make sense
+ for it to take the integer as a parameter and return the
+ target_waitstatus by value. Do that, and rename to
+ host_status_to_waitstatus. Users can then do:
+
+ ws = host_status_to_waitstatus (status)
+
+ which does the right thing, given the move constructor of
+ target_waitstatus.
+
+ Change-Id: I7a07d59d3dc19d3ed66929642f82f44f3e85d61b
+
+2021-12-03 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: return *this in target_waitstatus setters
+ While playing with some code creating target_waitstatus objects, I was
+ mildly annoyed by the fact that we can't just return a new
+ target_waitstatus object. We have to do:
+
+ target_waitstatus ws;
+ ws.set_exited (123);
+ return ws;
+
+ Make the setters return the "this" object as a reference, such that it's
+ possible to do:
+
+ return target_waitstatus ().set_exited (123);
+
+ I initially thought of adding static creation functions, which you would
+ use like:
+
+ return target_waitstatus::make_exited (123);
+
+ However, making the setters return a reference to the object achieves
+ pretty much the same thing, with less new code.
+
+ Change-Id: I45159b7f9fcd9db5b20603480e323020b14ed147
+
+2021-12-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make saved_filename an std::string
+ Make this variable an std::string, avoiding manual memory management.
+
+ Change-Id: Ie7a8d7381449ab9c4dfc4cb8b99e63b9ffa8f947
+
+2021-12-03 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Fix uninitialised memory
+ AARCH64_OPDE_EXPECTED_A_AFTER_B and AARCH64_OPDE_A_SHOULD_FOLLOW_B
+ are not paired with an error string, but we had an assert that the
+ error was nonnull. Previously this assert was testing uninitialised
+ memory and so could pass or fail arbitrarily.
+
+ opcodes/
+ * aarch64-opc.c (verify_mops_pme_sequence): Initialize the error
+ field to null for AARCH64_OPDE_EXPECTED_A_AFTER_B and
+ AARCH64_OPDE_A_SHOULD_FOLLOW_B.
+ * aarch64-dis.c (print_verifier_notes): Move assert.
+
+2021-12-03 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: make value_subscripted_rvalue static
+ The function value_subscripted_rvalue is only used in valarith.c, so
+ lets make it a static function.
+
+ There should be no user visible change after this commit.
+
+2021-12-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: give a test a real name
+ A test in gdb.python/py-send-packet.exp added in this commit:
+
+ commit 24b2de7b776f8f23788d855b1eec290c6e208821
+ Date: Tue Aug 31 14:04:36 2021 +0100
+
+ gdb/python: add gdb.RemoteTargetConnection.send_packet
+
+ included a large amount of binary data in the command sent to GDB. As
+ this test didn't have a real test name the binary data was included in
+ the gdb.sum file. The contents of the binary data could change
+ between different runs of GDB, and this makes comparing results
+ harder.
+
+ This commit gives the test a real test name.
+
+2021-12-03 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/remote: fix use after free bug
+ This commit:
+
+ commit 288712bbaca36bff6578bc839ebcdc3707662f81
+ Date: Mon Nov 22 15:16:27 2021 +0000
+
+ gdb/remote: use scoped_restore to control starting_up flag
+
+ introduced a use after free bug. The scoped restore added in the
+ above commit resets a flag within a remote_target's remote_state
+ object.
+
+ However, in some situations, the remote_target can be unpushed before
+ the error is thrown. If the only reference to the target is the one
+ in the target stack, then unpushing the target will cause the
+ remote_target to be deleted, which, in turn, will delete the
+ remote_state object. The scoped restore will then try to reset the
+ flag within a deleted object.
+
+ This problem was caught in the gdb.server/server-connect.exp test,
+ which, when run with the address sanitizer enabled, highlights the
+ write after free bug described above.
+
+ This commit resolves this issue by adding a new class specifically for
+ the purpose of managing the starting_up flag. As well as setting, and
+ then clearing the starting_up flag, this new class increments, and
+ then decrements the reference count on the remote_target object. This
+ prevents the remote_target from being deleted until after the flag has
+ been reset.
+
+ The gdb.server/server-connect.exp now runs cleanly with the address
+ sanitizer enabled.
+
+2021-12-03 Mike Frysinger <vapier@gentoo.org>
+
+ libctf: workaround automake bug with conditional info pages
+ It looks like automake makes assumptions about its ability to build info
+ pages based on the GNU standard behavior of shipping info pages with the
+ distributions. So even though the info pages were conditionalized, and
+ automake disabled some of the targets, it was still creeping in by way
+ of unconditional INFO_DEPS settings.
+
+ We can workaround this by adding a stub target for the info page when
+ building info pages are disabled. This tricks automake into disabling
+ its own extended generation target. I'll follow up with the automake
+ folks to see what they think.
+
+2021-12-03 Chenghua Xu <xuchenghua@loongson.cn>
+
+ Add myself and Zhensong Liu as the LoongArch port maintainer.
+
+2021-12-03 Alan Modra <amodra@gmail.com>
+
+ Revert "Re: Don't compile some opcodes files when bfd is 32-bit only"
+ This reverts commit 7a53275579e7cec9389ccb924f5ecf69e8d89d41.
+ The bpf sim doesn't work with a 32-bit bfd after all.
+
+2021-12-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove unexpected xstrdup in _initialize_maint_test_settings
+ That xstrdup is not correct, since we are assigning an std::string. The
+ result of xstrdup is used to initialize the string, and then lost
+ forever. Remove it.
+
+ Change-Id: Ief7771055e4bfd643ef3b285ec9fb7b1bfd14335
+
+2021-12-02 Nick Clifton <nickc@redhat.com>
+
+ Fix illegal memory access whilst parsing corrupt DWARF debug information.
+ PR 28645
+ * dwarf.c (process_cu_tu_index): Add test for overruning section
+ whilst processing slots.
+
+2021-12-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Fix avx512 -m32 support in gdbserver
+ PR27257 reports a problem that can be reproduced as follows:
+ - use x86_64 machine with avx512 support
+ - compile a hello world with -m32 to a.out
+ - start a gdbserver session with a.out
+ - use gdb to connect to the gdbserver session
+
+ This makes us run into:
+ ...
+ Listening on port 2346
+ Remote debugging from host ::1, port 34940
+ src/gdbserver/regcache.cc:257: \
+ A problem internal to GDBserver has been detected.
+ Unknown register zmm16h requested
+ ...
+
+ The problem is that i387_xsave_to_cache in gdbserver/i387-fp.cc can't find a
+ register zmm16h in the register cache.
+
+ To understand how this happens, first some background.
+
+ SSE has 16 128-bit wide xmm registers.
+
+ AVX extends the SSE registers set as follows:
+ - it extends the 16 existing 128-bit wide xmm registers to 256-bit wide ymm
+ registers.
+
+ AVX512 extends the AVX register set as follows:
+ - it extends the 16 existing 256-bit wide ymm registers to 512-bit wide zmm
+ registers.
+ - it adds 16 additional 512-bit wide zmm registers (with corresponding ymm and
+ xmm subregisters added as well)
+
+ However, in 32-bit mode, there are only 8 xmm/ymm/zmm registers.
+
+ The problem we're running into is that gdbserver/i387-fp.cc uses these
+ constants to describe the size of the register file:
+ ...
+ static const int num_avx512_zmmh_low_registers = 16;
+ static const int num_avx512_zmmh_high_registers = 16;
+ static const int num_avx512_ymmh_registers = 16;
+ static const int num_avx512_xmm_registers = 16;
+ ...
+ which are all incorrect for the 32-bit case.
+
+ Fix this by replacing the constants with variables that have the appropriate
+ values in 64-bit and 32-bit mode.
+
+ Tested on x86_64-linux with native and unix/-m32.
+
+2021-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: update tests looking for "DWARF 2" debug format
+ Commit ab557072b8ec ("gdb: use actual DWARF version in compunit's
+ debugformat field") changes the debug format string in "info source" to
+ show the actual DWARF version, rather than always show "DWARF 2".
+
+ However, it failed to consider that some tests checked for the "DWARF 2"
+ string to see if the test program is compiled with DWARF debug
+ information. Since everything is compiled with DWARF 4 or 5 nowadays,
+ that changed the behavior of those tests. Notably, it prevent the
+ tests using skip_inline_var_tests to run.
+
+ Grep through the testsuite for "DWARF 2" and change all occurrences I
+ could find to use "DWARF [0-9]" instead (that string is passed to TCL's
+ string match).
+
+ Change-Id: Ic7fb0217fb9623880c6f155da6becba0f567a885
+
+2021-12-02 Joel Brobecker <brobecker@adacore.com>
+
+ (PPC64) fix handling of fixed-point values when using "return" command
+ In the gdb.ada/fixed_points_function.exp testcase, we have the following
+ Ada code...
+
+ type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary
+ function Call_FP1 (F : FP1_Type) return FP1_Type is
+ begin
+ FP1_Arg := F;
+ return FP1_Arg;
+ end Call_FP1;
+
+ ... used as follow:
+
+ F1 : FP1_Type := 1.0;
+ F1 := Call_FP1 (F1);
+
+ The testcase, among other things, verifies that "return" works
+ properly as follow:
+
+ | (gdb) return 1.0
+ | Make pck.call_fp1 return now? (y or n) y
+ | [...]
+ | 9 F1 := Call_FP1 (F1);
+ | (gdb) next
+ | (gdb) print f1
+ | $1 = 0.0625
+
+ The output of the last command shows that we returned the wrong
+ value. The value printed gives a clue about the problem, since
+ it is 1/16th of the value we expected, where 1/16 is FP1_Type's
+ scaling factor.
+
+ The problem, here, comes from the fact that the function
+ handling return values for base types (ppc64_sysv_abi_return_value_base)
+ writes the return value using unpack_long which, upon seeing that
+ the value being unpacked is a fixed point type, applies the scaling
+ factor, to get the integer-representation of our fixed-point value
+ (similar to what it does with floats, for instance).
+
+ So, the fix consists in teaching ppc64_sysv_abi_return_value_base
+ about fixed-point types, and to avoid the unwanted application
+ of the scaling factor.
+
+ Note that the "finish" function, on the other hand, does not
+ suffer from this issue, simply becaue the value returned by
+ the function is read from register without the use of a type,
+ thus avoiding an unwanted application of a scaling factor.
+
+ No test added, as this change is already tested by
+ gdb.ada/fixed_points_function.exp.
+
+ Co-Authored-By: Tristan Gingold <gingold@adacore.com>
+
+2021-12-02 Joel Brobecker <brobecker@adacore.com>
+
+ (RISCV) fix handling of fixed-point type return values
+ This commit adds support for TYPE_CODE_FIXED_POINT types for
+ "finish" and "return" commands.
+
+ Consider the following Ada code...
+
+ type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary
+ function Call_FP1 (F : FP1_Type) return FP1_Type is
+ begin
+ FP1_Arg := F;
+ return FP1_Arg;
+ end Call_FP1;
+
+ ... used as follow:
+
+ F1 : FP1_Type := 1.0;
+ F1 := Call_FP1 (F1);
+
+ "finish" currently behaves as follow:
+
+ | (gdb) finish
+ | [...]
+ | Value returned is $1 = 0
+
+ We expect the returned value to be "1".
+
+ Similarly, "return" makes the function return the wrong value:
+
+ | (gdb) return 1.0
+ | Make pck.call_fp1 return now? (y or n) y
+ | [...]
+ | 9 F1 := Call_FP1 (F1);
+ | (gdb) next
+ | (gdb) print f1
+ | $1 = 0.0625
+
+ (we expect it to print "1" instead).
+
+ This problem comes from the handling of integral return values
+ when the return value is actually fixed point type. Our type
+ here is actually a range of a fixed point type, but the same
+ principles should also apply to pure fixed-point types. For
+ the record, here is what the debugging info looks like:
+
+ <1><238>: Abbrev Number: 2 (DW_TAG_subrange_type)
+ <239> DW_AT_lower_bound : -16
+ <23a> DW_AT_upper_bound : 16
+ <23b> DW_AT_name : pck__fp1_type
+ <23f> DW_AT_type : <0x248>
+
+ <1><248>: Abbrev Number: 4 (DW_TAG_base_type)
+ <249> DW_AT_byte_size : 1
+ <24a> DW_AT_encoding : 13 (signed_fixed)
+ <24b> DW_AT_binary_scale: -4
+ <24c> DW_AT_name : pck__Tfp1_typeB
+ <250> DW_AT_artificial : 1
+
+ ... where the scaling factor is 1/16.
+
+ Looking at the "finish" command, what happens is that riscv_arg_location
+ determines that our return value should be returned by parameter using
+ an integral convention (via builtin type long). And then,
+ riscv_return_value uses a cast to that builtin type long to
+ store the value of into a buffer with the right register size.
+ This doesn't work in our case, because the underlying value
+ returned by the function is unscaled, which means it is 16,
+ and thus the cast is like doing:
+
+ arg_val = (FP1_Type) 16
+
+ ... In other words, it is trying to create an FP1_Type enty whose
+ value is 16. Applying the scaling factor, that's 256, and because
+ the size of FP1_Type is 1 byte, we overflow and thus it ends up
+ being zero.
+
+ The same happen with the "return" function, but the other way around.
+
+ The fix consists in handling fixed-point types separately from
+ integral types.
+
+2021-12-02 Joel Brobecker <brobecker@adacore.com>
+
+ (ARM/fixed-point) wrong value shown by "finish" command:
+ Consider the following Ada code:
+
+ type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary
+ FP1_Arg : FP1_Type := 0.0;
+
+ function Call_FP1 (F : FP1_Type) return FP1_Type is
+ begin
+ FP1_Arg := F;
+ return FP1_Arg;
+ end Call_FP1;
+
+ After having stopped inside function Call_FP1 as follow:
+
+ Breakpoint 1, pck.call_fp1 (f=1) at /[...]/pck.adb:5
+ 5 FP1_Arg := F;
+
+ Returning from that function call using "finish" should show
+ that the function return "1.0" (the same value as was passed
+ as an argument). However, this is not the case:
+
+ (gdb) finish
+ Run till exit from #0 pck.call_fp1 (f=1)
+ [...]
+ 9 F1 := Call_FP1 (F1);
+ Value returned is $1 = 0
+
+ This patch enhances the extraction of the return value to know about
+ fixed point types.
+
+2021-12-02 Xavier Roirand <roirand@adacore.com>
+
+ (Ada/AArch64) fix fixed point argument passing in inferior funcall
+ Consider the following code:
+
+ type FP1_Type is delta 0.1 range -1.0 .. +1.0; -- Ordinary
+
+ function Call_FP1 (F : FP1_Type) return FP1_Type is
+ begin
+ return F;
+ end Call_FP1;
+
+ When the default in GCC is to generate proper DWARF info for fixed point
+ types, then in gdb, printing the result of a call to call_fp1 with a
+ decimal parameter leads to:
+
+ (gdb) p call_fp1(0.5)
+ $1 = 0
+
+ The displayed value is wrong, and we actually expected:
+
+ (gdb) p call_fp1(0.5)
+ $1 = 0.5
+
+ What happened is that our fixed point type parameter got promoted to a
+ 32bit integer because we detected that the length of that object was less
+ than 4 bytes. The compiler does not perform this promotion and therefore
+ GDB should not either.
+
+ This patch fixes the behavior described above.
+
+2021-12-02 Tom Tromey <tromey@adacore.com>
+
+ Implement 'task apply'
+ This adds a 'task apply' command, which is the Ada tasking analogue of
+ 'thread apply'. Unlike 'thread apply', it doesn't offer the
+ 'ascending' flag; but otherwise it's essentially the same.
+
+ Add "task" keyword to the "watch" command
+ Breakpoints in gdb can be made specific to an Ada task using the
+ "task" qualifier. This patch applies this same idea to watchpoints.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Update gas/NEWS for recent changes
+ gas/
+ * NEWS: Mention support for Armv8.8-A and for new system registers.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add BC instruction
+ This patch adds support for the Armv8.8-A BC instruction.
+ [https://developer.arm.com/documentation/ddi0596/2021-09/Base-Instructions/BC-cond--Branch-Consistent-conditionally-?lang=en]
+
+ include/
+ * opcode/aarch64.h (AARCH64_FEATURE_HBC): New macro.
+ (AARCH64_ARCH_V8_8): Make armv8.8-a imply AARCH64_FEATURE_HBC.
+
+ opcodes/
+ * aarch64-tbl.h (aarch64_feature_hbc): New variable.
+ (HBC, HBC_INSN): New macros.
+ (aarch64_opcode_table): Add BC.C.
+ * aarch64-dis-2.c: Regenerate.
+
+ gas/
+ * doc/c-aarch64.texi: Document +hbc.
+ * config/tc-aarch64.c (aarch64_features): Add "hbc".
+ * testsuite/gas/aarch64/hbc.s, testsuite/gas/aarch64/hbc.d: New test.
+ * testsuite/gas/aarch64/hbc-invalid.s,
+ testsuite/gas/aarch64/hbc-invalid.l,
+ testsuite/gas/aarch64/hbc-invalid.d: New test.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Enforce P/M/E order for MOPS instructions
+ The MOPS instructions should be used as a triple, such as:
+
+ cpyfp [x0]!, [x1]!, x2!
+ cpyfm [x0]!, [x1]!, x2!
+ cpyfe [x0]!, [x1]!, x2!
+
+ The registers should also be the same for each writeback operand.
+ This patch adds a warning for code that doesn't follow this rule,
+ along similar lines to the warning that we already emit for
+ invalid uses of MOVPRFX.
+
+ include/
+ * opcode/aarch64.h (C_SCAN_MOPS_P, C_SCAN_MOPS_M, C_SCAN_MOPS_E)
+ (C_SCAN_MOPS_PME): New macros.
+ (AARCH64_OPDE_A_SHOULD_FOLLOW_B): New aarch64_operand_error_kind.
+ (AARCH64_OPDE_EXPECTED_A_AFTER_B): Likewise.
+ (aarch64_operand_error): Make each data value a union between
+ an int and a string.
+
+ opcodes/
+ * aarch64-tbl.h (MOPS_CPY_OP1_OP2_INSN): Add scan flags.
+ (MOPS_SET_OP1_OP2_INSN): Likewise.
+ * aarch64-opc.c (set_out_of_range_error): Update after change to
+ aarch64_operand_error.
+ (set_unaligned_error, set_reg_list_error): Likewise.
+ (init_insn_sequence): Use a 3-instruction sequence for
+ MOPS P instructions.
+ (verify_mops_pme_sequence): New function.
+ (verify_constraints): Call it.
+ * aarch64-dis.c (print_verifier_notes): Handle
+ AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B.
+
+ gas/
+ * config/tc-aarch64.c (operand_mismatch_kind_names): Add entries
+ for AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B.
+ (operand_error_higher_severity_p): Check that
+ AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B
+ come between AARCH64_OPDE_RECOVERABLE and AARCH64_OPDE_SYNTAX_ERROR;
+ their relative order is not significant.
+ (record_operand_error_with_data): Update after change to
+ aarch64_operand_error.
+ (output_operand_error_record): Likewise. Handle
+ AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B.
+ * testsuite/gas/aarch64/mops_invalid_2.s,
+ testsuite/gas/aarch64/mops_invalid_2.d,
+ testsuite/gas/aarch64/mops_invalid_2.l: New test.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add support for +mops
+ This patch adds support for FEAT_MOPS, an Armv8.8-A extension
+ that provides memcpy and memset acceleration instructions.
+
+ I took the perhaps controversial decision to generate the individual
+ instruction forms using macros rather than list them out individually.
+ This becomes useful with a follow-on patch to check that code follows
+ the correct P/M/E sequence.
+ [https://developer.arm.com/documentation/ddi0596/2021-09/Base-Instructions?lang=en]
+
+ include/
+ * opcode/aarch64.h (AARCH64_FEATURE_MOPS): New macro.
+ (AARCH64_ARCH_V8_8): Make armv8.8-a imply AARCH64_FEATURE_MOPS.
+ (AARCH64_OPND_MOPS_ADDR_Rd): New aarch64_opnd.
+ (AARCH64_OPND_MOPS_ADDR_Rs): Likewise.
+ (AARCH64_OPND_MOPS_WB_Rn): Likewise.
+
+ opcodes/
+ * aarch64-asm.h (ins_x0_to_x30): New inserter.
+ * aarch64-asm.c (aarch64_ins_x0_to_x30): New function.
+ * aarch64-dis.h (ext_x0_to_x30): New extractor.
+ * aarch64-dis.c (aarch64_ext_x0_to_x30): New function.
+ * aarch64-tbl.h (aarch64_feature_mops): New feature set.
+ (aarch64_feature_mops_memtag): Likewise.
+ (MOPS, MOPS_MEMTAG, MOPS_INSN, MOPS_MEMTAG_INSN)
+ (MOPS_CPY_OP1_OP2_PME_INSN, MOPS_CPY_OP1_OP2_INSN, MOPS_CPY_OP1_INSN)
+ (MOPS_CPY_INSN, MOPS_SET_OP1_OP2_PME_INSN, MOPS_SET_OP1_OP2_INSN)
+ (MOPS_SET_INSN): New macros.
+ (aarch64_opcode_table): Add MOPS instructions.
+ (aarch64_opcode_table): Add entries for AARCH64_OPND_MOPS_ADDR_Rd,
+ AARCH64_OPND_MOPS_ADDR_Rs and AARCH64_OPND_MOPS_WB_Rn.
+ * aarch64-opc.c (aarch64_print_operand): Handle
+ AARCH64_OPND_MOPS_ADDR_Rd, AARCH64_OPND_MOPS_ADDR_Rs and
+ AARCH64_OPND_MOPS_WB_Rn.
+ (verify_three_different_regs): New function.
+ * aarch64-asm-2.c: Regenerate.
+ * aarch64-dis-2.c: Likewise.
+ * aarch64-opc-2.c: Likewise.
+
+ gas/
+ * doc/c-aarch64.texi: Document +mops.
+ * config/tc-aarch64.c (parse_x0_to_x30): New function.
+ (parse_operands): Handle AARCH64_OPND_MOPS_ADDR_Rd,
+ AARCH64_OPND_MOPS_ADDR_Rs and AARCH64_OPND_MOPS_WB_Rn.
+ (aarch64_features): Add "mops".
+ * testsuite/gas/aarch64/mops.s, testsuite/gas/aarch64/mops.d: New test.
+ * testsuite/gas/aarch64/mops_invalid.s,
+ * testsuite/gas/aarch64/mops_invalid.d,
+ * testsuite/gas/aarch64/mops_invalid.l: Likewise.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add Armv8.8-A system registers
+ Armv8.8-A defines two new system registers: allint and icc_nmiar1_el1.
+ Both of them were previously unmapped. allint supports a 0/1 immediate.
+ [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/ALLINT--All-Interrupt-Mask-Bit?lang=en]
+ [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/ICC-NMIAR1-EL1--Interrupt-Controller-Non-maskable-Interrupt-Acknowledge-Register-1?lang=en]
+
+ opcodes/
+ * aarch64-opc.c (SR_V8_8): New macro.
+ (aarch64_sys_regs): Add allint and icc_nmiar1_el1.
+ (aarch64_pstatefields): Add allint.
+
+ gas/
+ * testsuite/gas/aarch64/armv8_8-a-sysregs.s,
+ * testsuite/gas/aarch64/armv8_8-a-sysregs.d: New test.
+ * testsuite/gas/aarch64/armv8_8-a-sysregs-invalid.s,
+ * testsuite/gas/aarch64/armv8_8-a-sysregs-invalid.l,
+ * testsuite/gas/aarch64/armv8_8-a-sysregs-invalid.d: New test.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add id_aa64isar2_el1
+ Armv8.8-A defines a read-only system register called id_aa64isar2_el1.
+ The register was previously RES0 and should therefore be accepted
+ at all architecture levels.
+ [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/ID-AA64ISAR2-EL1--AArch64-Instruction-Set-Attribute-Register-2?lang=en]
+
+ opcodes/
+ * aarch64-opc.c (aarch64_sys_regs): Add id_aa64isar2_el1.
+
+ gas/
+ * testsuite/gas/aarch64/sysreg-diagnostic.s: Test writes to
+ id_aa64isar2_el1.
+ * testsuite/gas/aarch64/sysreg-diagnostic.d: Update accordingly.
+ * testsuite/gas/aarch64/sysreg-diagnostic.l: Likewise.
+ * testsuite/gas/aarch64/sysreg.s: Test reads from
+ id_aa64isar2_el1.
+ * testsuite/gas/aarch64/sysreg.d: Update accordingly.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add support for Armv8.8-A
+ This patch adds skeleton support for -march=armv8.8-a, testing only
+ that it correctly inherits from armv8.7-a.
+
+ include/
+ * opcode/aarch64.h (AARCH64_FEATURE_V8_8): New macro.
+ (AARCH64_ARCH_V8_8): Likewise.
+
+ gas/
+ * doc/c-aarch64.texi: Document armv8.8-a.
+ * config/tc-aarch64.c (aarch64_archs): Add armv8-8-a
+ * testsuite/gas/aarch64/v8-8-a.s,
+ * testsuite/gas/aarch64/v8-8-a.d: New test.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Provide line info for unclosed sequences
+ We warn about MOVPRFX instructions that have no following
+ instruction. This patch adds a line number to the message,
+ which is useful if the assembly code has multiple text sections.
+
+ The new code is unconditional since OBJ_ELF is always defined
+ for aarch64.
+
+ gas/
+ * config/tc-aarch64.h (aarch64_segment_info_type): Add last_file
+ and last_line.
+ * config/tc-aarch64.c (now_instr_sequence): Delete.
+ (force_automatic_sequence_close): Provide a line number when
+ reporting unclosed sequences.
+ (md_assemble): Record the location of the instruction in
+ tc_segment_info.
+ * testsuite/gas/aarch64/sve-movprfx_4.l: Add line number to error
+ message.
+ * testsuite/gas/aarch64/sve-movprfx_7.l: Likewise.
+ * testsuite/gas/aarch64/sve-movprfx_8.l: Likewise.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Tweak insn sequence code
+ libopcodes has some code to check constraints across sequences
+ of consecutive instructions. It was added to support MOVPRFX
+ sequences but is going to be useful for the Armv8.8-A MOPS
+ feature as well.
+
+ Currently the structure has one field to record the instruction
+ that started a sequence and another to record the remaining
+ instructions in the sequence. It's more convenient for the
+ MOPS code if we put the instructions into a single array instead.
+
+ No functional change intended.
+
+ include/
+ * opcode/aarch64.h (aarch64_instr_sequence): Replace num_insns
+ and current_insns with num_added_insns and num_allocated_insns.
+
+ opcodes/
+ * aarch64-opc.c (add_insn_to_sequence): New function.
+ (init_insn_sequence): Update for new aarch64_instr_sequence layout.
+ Add the first instruction to the inst array.
+ (verify_constraints): Update for new aarch64_instr_sequence layout.
+ Don't add the last instruction to the array.
+
+2021-12-02 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add maximum immediate value to aarch64_sys_reg
+ The immediate form of MSR has a 4-bit immediate field (in CRm).
+ However, many forms of MSR require a smaller immediate. These cases
+ are identified by value in operand_general_constraint_met_p,
+ but they're now the common case rather than the exception.
+
+ This patch therefore adds the maximum value to the sys_reg
+ description and gets the range from there. It also enforces
+ the minimum of 0, which avoids a situation in which:
+
+ msr dit, #2
+
+ would give the expected:
+
+ Error: immediate value out of range 0 to 1
+
+ whereas:
+
+ msr dit, #-1
+
+ would give:
+
+ Error: immediate value out of range 0 to 15
+
+ (from the later UIMM4 checking).
+
+ Also:
+
+ - we were reporting the first error above against the wrong operand
+ - TCO takes a single-bit immediate, but we previously allowed
+ all 16 values.
+ [https://developer.arm.com/documentation/ddi0596/2021-09/Base-Instructions/MSR--immediate---Move-immediate-value-to-Special-Register-?lang=en]
+
+ opcodes/
+ * aarch64-opc.h (F_REG_MAX_VALUE, F_GET_REG_MAX_VALUE): New macros.
+ * aarch64-opc.c (operand_general_constraint_met_p): Read the
+ maximum MSR immediate value from aarch64_pstatefields.
+ (aarch64_pstatefields): Add the maximum immediate value
+ for each register.
+
+ gas/
+ * testsuite/gas/aarch64/sysreg-4.s: Use an immediate value of 1
+ rather than 8 for the TCO test.
+ * testsuite/gas/aarch64/sysreg-4.d: Update accordingly.
+ * testsuite/gas/aarch64/armv8_2-a-illegal.l: Fix operand number
+ in MSR immediate error messages.
+ * testsuite/gas/aarch64/diagnostic.l: Likewise.
+ * testsuite/gas/aarch64/pan-illegal.l: Likewise.
+ * testsuite/gas/aarch64/ssbs-illegal1.l: Likewise.
+ * testsuite/gas/aarch64/illegal-sysreg-4b.s,
+ * testsuite/gas/aarch64/illegal-sysreg-4b.d,
+ * testsuite/gas/aarch64/illegal-sysreg-4b.l: New test.
+
+2021-12-02 Marcus Nilsson <brainbomb@gmail.com>
+
+ Allow the --visualize-jumps feature to work with the AVR disassembler.
+ * avr-dis.c (avr_operand); Pass in disassemble_info and fill
+ in insn_type on branching instructions.
+
+2021-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb, include: replace pragmas with DIAGNOSTIC macros, fix build with g++ 4.8
+ When introducing this code, I forgot that we had some macros for this.
+ Replace some "manual" pragma diagnostic with some DIAGNOSTIC_* macros,
+ provided by include/diagnostics.h.
+
+ In diagnostics.h:
+
+ - Add DIAGNOSTIC_ERROR, to enable a diagnostic at error level.
+ - Add DIAGNOSTIC_ERROR_SWITCH, to enable -Wswitch at error level, for
+ both gcc and clang.
+
+ Additionally, using DIAGNOSTIC_PUSH, DIAGNOSTIC_ERROR_SWITCH and
+ DIAGNOSTIC_POP seems to misbehave with g++ 4.8, where we see these
+ errors:
+
+ CXX ada-tasks.o
+ /home/smarchi/src/binutils-gdb/gdb/ada-tasks.c: In function void read_known_tasks():
+ /home/smarchi/src/binutils-gdb/gdb/ada-tasks.c:998:10: error: enumeration value ADA_TASKS_UNKNOWN not handled in switch [-Werror=switch]
+ switch (data->known_tasks_kind)
+ ^
+
+ Because of the POP, the diagnostic should go back to being disabled,
+ since it was disabled in the beginning, but that's not what we see
+ here. Versions of GCC >= 5 compile correctly.
+
+ Work around this by making DIAGNOSTIC_ERROR_SWITCH a no-op for GCC < 5.
+
+ Note that this code (already as it exists in master today) enables
+ -Wswitch at the error level even if --disable-werror is passed. It
+ shouldn't be a problem, as it's not like a new enumerator will appear
+ out of nowhere and cause a build error if building with future
+ compilers. Still, for correctness, we would ideally want to ask the
+ compiler to enable -Wswitch at its default level (as if the user had
+ passed -Wswitch on the command-line). There doesn't seem to be a way to
+ do this.
+
+ Change-Id: Id33ebec3de39bd449409ea0bab59831289ffe82d
+
+2021-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gas: re-generate configure
+ When configuring gas, I get:
+
+ config.status: error: cannot find input file: `doc/Makefile.in'
+
+ This is because configure is out-of-date, re-generate it.
+
+ Change-Id: Iaa5980c282900d9fd23b90f0df25bf8ba3676498
+
+2021-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ libctf: re-generate configure
+ When configuring libctf, I get:
+
+ config.status: error: cannot find input file: `doc/Makefile.in'
+
+ This is because configure is out-of-date, re-generate it.
+
+ Change-Id: Ie69acd33012211a4620661582c7d24ad6d2cd169
+
+2021-12-02 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Skip __[start|stop]_SECNAME for --gc-sections -z start-stop-gc
+ Don't convert memory load to immediate load on __start_SECNAME and
+ __stop_SECNAME for --gc-sections -z start-stop-gc if all SECNAME
+ sections been garbage collected.
+
+ bfd/
+
+ PR ld/27491
+ * elf32-i386.c (elf_i386_convert_load_reloc): Skip __start_SECNAME
+ and __stop_SECNAME for --gc-sections -z start-stop-gc if the input
+ section been garbage collected.
+ * elf64-x86-64.c (elf_x86_64_convert_load_reloc): Likewise.
+ * elfxx-x86.h (elf_x86_start_stop_gc_p): New function.
+
+ ld/
+ PR ld/27491
+ * testsuite/ld-i386/i386.exp: Run PR ld/27491 tests.
+ * testsuite/ld-x86-64/x86-64.exp: Likewise.
+ * testsuite/ld-i386/pr27491-1.s: New file.
+ * testsuite/ld-i386/pr27491-1a.d: Likewise.
+ * testsuite/ld-i386/pr27491-1b.d: Likewise.
+ * testsuite/ld-i386/pr27491-1c.d: Likewise.
+ * testsuite/ld-i386/pr27491-2.d: Likewise.
+ * testsuite/ld-i386/pr27491-2.s: Likewise.
+ * testsuite/ld-i386/pr27491-3.d: Likewise.
+ * testsuite/ld-i386/pr27491-3.s: Likewise.
+ * testsuite/ld-i386/pr27491-4.d: Likewise.
+ * testsuite/ld-i386/pr27491-4a.s: Likewise.
+ * testsuite/ld-i386/pr27491-4b.s: Likewise.
+ * testsuite/ld-x86-64/pr27491-1.s: Likewise.
+ * testsuite/ld-x86-64/pr27491-1a.d: Likewise.
+ * testsuite/ld-x86-64/pr27491-1b.d: Likewise.
+ * testsuite/ld-x86-64/pr27491-1c.d: Likewise.
+ * testsuite/ld-x86-64/pr27491-2.d: Likewise.
+ * testsuite/ld-x86-64/pr27491-2.s: Likewise.
+ * testsuite/ld-x86-64/pr27491-3.d: Likewise.
+ * testsuite/ld-x86-64/pr27491-3.s: Likewise.
+ * testsuite/ld-x86-64/pr27491-4.d: Likewise.
+ * testsuite/ld-x86-64/pr27491-4a.s: Likewise.
+ * testsuite/ld-x86-64/pr27491-4b.s: Likewise.
+
+2021-12-02 Mike Frysinger <vapier@gentoo.org>
+
+ bfd: delete unused proto settings
+ These have been around for decades but don't appear to be used, and
+ trying to build them (e.g. `make archive.p archive.ip`) doesn't work,
+ so just delete it all.
+
+ gas: merge doc subdir up a level
+ This avoids a recursive make into the doc subdir and speeds up the
+ build slightly. It also allows for more parallelism.
+
+ libctf: merge doc subdir up a level
+ This avoids a recursive make into the doc subdir and speeds up the
+ build slightly. It also allows for more parallelism.
+
+2021-12-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use actual DWARF version in compunit's debugformat field
+ The "info source" command, with a DWARF-compile program, always show
+ that the debug info is "DWARF 2":
+
+ (gdb) info source
+ Current source file is test.c
+ Compilation directory is /home/smarchi/build/binutils-gdb/gdb
+ Located in /home/smarchi/build/binutils-gdb/gdb/test.c
+ Contains 2 lines.
+ Source language is c.
+ Producer is GNU C17 9.3.0 -mtune=generic -march=x86-64 -g3 -gdwarf-5 -O0 -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection.
+ Compiled with DWARF 2 debugging format.
+ Includes preprocessor macro info.
+
+ Change it to display the actual DWARF version:
+
+ (gdb) info source
+ Current source file is test.c
+ Compilation directory is /home/smarchi/build/binutils-gdb/gdb
+ Located in /home/smarchi/build/binutils-gdb/gdb/test.c
+ Contains 2 lines.
+ Source language is c.
+ Producer is GNU C17 9.3.0 -mtune=generic -march=x86-64 -g3 -gdwarf-5 -O0 -fasynchronous-unwind-tables -fstack-protector-strong -fstack-clash-protection -fcf-protection.
+ Compiled with DWARF 5 debugging format.
+ Includes preprocessor macro info.
+
+ The comp_unit_head::version field is guaranteed to be between 2 and 5,
+ thanks to the check in read_comp_unit_head. So we can still use static
+ strings to pass to record_debugformat, and keep it efficient.
+
+ In the future, when somebody will update GDB to support DWARF 6, they'll
+ hit this assert and have to update this code.
+
+ Change-Id: I3270b7ebf5e9a17b4215405bd2e365662a4d6172
+
+2021-12-02 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Discard input .note.gnu.build-id sections
+ 1. Discard input .note.gnu.build-id sections.
+ 2. Clear the build ID field before writing.
+ 3. Use bfd_make_section_anyway_with_flags to create the output
+ .note.gnu.build-id section.
+
+ PR ld/28639
+ * ldelf.c (ldelf_after_open): Discard input .note.gnu.build-id
+ sections, excluding the first one.
+ (write_build_id): Clear the build ID field before writing.
+ (ldelf_setup_build_id): Use bfd_make_section_anyway_with_flags
+ to create the output .note.gnu.build-id section.
+ * testsuite/ld-elf/build-id.exp: New file.
+ * testsuite/ld-elf/pr28639a.rd: Likewise.
+ * testsuite/ld-elf/pr28639b.rd: Likewise.
+ * testsuite/ld-elf/pr28639c.rd: Likewise.
+ * testsuite/ld-elf/pr28639d.rd: Likewise.
+
+2021-12-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-12-01 Mike Frysinger <vapier@gentoo.org>
+
+ binutils: add missing prefix for binutils/index.html rule
+
+2021-12-01 Luca Boccassi <luca.boccassi@gmail.com>
+
+ readelf: recognize FDO Packaging Metadata ELF note. (Correcting snafu during patch application)
+
+2021-12-01 Luca Boccassi <luca.boccassi@gmail.com>
+
+ readelf: recognize FDO Packaging Metadata ELF note
+ As defined on: https://systemd.io/COREDUMP_PACKAGE_METADATA/
+ this note will be used starting from Fedora 36. Allow
+ readelf --notes to pretty print it:
+
+ Displaying notes found in: .note.package
+ Owner Data size Description
+ FDO 0x00000039 FDO_PACKAGING_METADATA
+ Packaging Metadata: {"type":"deb","name":"fsverity-utils","version":"1.3-1"}
+
+2021-12-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix typo in gdb.multi/multi-arch-exec.exp
+ With gdb.multi/multi-arch-exec.exp I run into:
+ ...
+ Running src/gdb/testsuite/gdb.multi/multi-arch-exec.exp ...
+ ERROR: tcl error sourcing src/gdb/testsuite/gdb.multi/multi-arch-exec.exp.
+ ERROR: wrong # args: extra words after "else" clause in "if" command
+ while executing
+ "if [istarget "powerpc64*-*-*"] {
+ set march "-m64"
+ } else if [istarget "s390*-*-*"] {
+ set march "-m31"
+ } else {
+ set march "-m32"
+ }"
+ ...
+
+ Fix the else if -> elseif typo.
+
+ Tested on x86_64-linux.
+
+2021-12-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.arch/i386-pkru.exp on linux
+ When running test-case gdb.arch/i386-pkru.exp on a machine with "Memory
+ Protection Keys for Userspace" support, we run into:
+ ...
+ (gdb) PASS: gdb.arch/i386-pkru.exp: probe PKRU support
+ print $pkru^M
+ $2 = 1431655764^M
+ (gdb) FAIL: gdb.arch/i386-pkru.exp: pkru register
+ ...
+
+ The test-case expects the $pkru register to have the default value 0, matching
+ the "init state" of 0 defined by the XSAVE hardware.
+
+ Since linux kernel version v4.9 containing commit acd547b29880 ("x86/pkeys:
+ Default to a restrictive init PKRU"), the register is set to 0x55555554 by
+ default (which matches the printed decimal value above).
+
+ Fix the FAIL by accepting this value for linux.
+
+ Tested on x86_64-linux.
+
+2021-12-01 Nick Clifton <nickc@redhat.com>
+
+ Fix the fields in the x_n union inside the the x_file structure so that pointers can be stored.
+ PR 28630
+ * coff/internal.h (x_n): Use bfd_hostptr_t for the fields in this
+ structure.
+
+2021-12-01 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/remote: use scoped_restore to control starting_up flag
+ This commit makes use of a scoped_restore object to control the
+ remote_state::starting_up flag within the remote_target::start_remote
+ method.
+
+ Ideally I would have liked to create the scoped_restore inside
+ start_remote and just leave the restore in place until the end of the
+ scope, however, I'm worried that doing this would change the behaviour
+ of GDB. Specifically, in start_remote, the following code is executed
+ once the starting_up flag has been restored to its previous value:
+
+ if (breakpoints_should_be_inserted_now ())
+ insert_breakpoints ();
+
+ I think (but am not 100% sure) that calling install_breakpoints could
+ end up back inside remote_target::can_download_tracepoint, which does
+ check the value of remote_state::starting_up. And so, I'm concerned
+ that leaving the scoped_restore in place until the end of start_remote
+ will cause a possible change in behaviour.
+
+ To avoid this, and to leave things as close to the current behaviour
+ as possible, I've split remote_target::start_remote into two, there's
+ the main function body which moves into remote_target::start_remote_1,
+ this function uses the scoped_restore to change the ::starting_up
+ flag, then there's the old remote_target::start_remote, which now just
+ calls ::start_remote_1, and then does the insert_breakpoints call.
+
+ There should be no user visible changes after this commit, unless
+ there's a situation where the ::starting_up flag could previously have
+ been left set, if this was the case, then this situation should no
+ longer be possible.
+
+2021-12-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb.base/corefile-buildid.exp: fix DUPLICATEs when failing to generate a core file
+ When my system isn't properly configured to generate core files in the
+ local directory, I see these DUPLICATEs:
+
+ DUPLICATE: gdb.base/corefile-buildid.exp: could not generate core file
+
+ Fix that by having a single with_test_prefix around that message and
+ what follows.
+
+ Change-Id: I4ac245fcce1c666db56e3bad3582aa17f183dcba
+
+2021-12-01 Mike Frysinger <vapier@gentoo.org>
+
+ gold: enable silent build rules
+
+2021-12-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-30 Carl Love <cel@us.ibm.com>
+
+ gdb: Powerpc fix gdb.multi/multi-arch-exec.exp test
+ The expect file has a procedure append_arch_options which sets march based
+ the istarget. The current if / else statement does not check for
+ powerpc64. The else statement is hit which sets march to -m32. This
+ results in compilation errors on 64-bit PowerPC.
+
+ This patch adds an if statement to check for powerpc64 and if true sets mach
+ to -m64.
+
+ The patch was tested on a Power 10 system. No compile errors were generated.
+ The test completes with 1 expected pass and no failures.
+
+2021-11-30 Mike Frysinger <vapier@gentoo.org>
+
+ binutils: regenerate Makefile.in after doc/ changes
+
+2021-11-30 Roland McGrath <mcgrathr@google.com>
+
+ Fix missing build dependency for binutils man pages
+ binutils/
+ * doc/local.mk: Give each man page target its missing dependency on
+ doc/$(am__dirstamp).
+
+2021-11-30 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Add missing system registers [PR27145]
+ This patch adds support for various system registers, up to Armv8.7-A.
+ This includes all the registers that were mentioned in the PR and that
+ hadn't become supported since.
+
+ opcodes/
+ PR aarch64/27145
+ * aarch64-opc.c (SR_V8_4): Remove duplicate definition.
+ (SR_V8_6, SR_V8_7, SR_GIC, SR_AMU): New macros.
+ (aarch64_sys_regs): Add missing entries (up to Armv8.7-A).
+
+ gas/
+ PR aarch64/27145
+ * testsuite/gas/aarch64/sysreg-8.s,
+ * testsuite/gas/aarch64/sysreg-8.d,
+ * testsuite/gas/aarch64/illegal-sysreg-8.s,
+ * testsuite/gas/aarch64/illegal-sysreg-8.d,
+ * testsuite/gas/aarch64/illegal-sysreg-8.l,
+ * testsuite/gas/aarch64/illegal-sysreg-8b.s,
+ * testsuite/gas/aarch64/illegal-sysreg-8b.d,
+ * testsuite/gas/aarch64/illegal-sysreg-8b.l: New tests.
+ * testsuite/gas/aarch64/sysreg.s: Change system register numbers
+ to ones that are still unallocated.
+ * testsuite/gas/aarch64/sysreg.d: Update accordingly.
+
+2021-11-30 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Make LOR registers conditional on +lor
+ We have a +lor feature flag for the Limited Ordering Regions
+ extension, but the associated registers didn't use it.
+
+ opcodes/
+ * aarch64-opc.c (SR_LOR): New macro.
+ (aarch64_sys_regs): Use it for lorc_el1, lorea_el1, lorn_el1 and
+ lorsa_el1.
+
+ gas/
+ * testsuite/gas/aarch64/sysreg-7.s: Enable +lor.
+ * testsuite/gas/aarch64/illegal-sysreg-7.s: Test for LOR registers
+ without +lor.
+ * testsuite/gas/aarch64/illegal-sysreg-7.d: Update accordingly.
+ * testsuite/gas/aarch64/illegal-sysreg-7.l: Likewise.
+
+2021-11-30 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Remove ZIDR_EL1
+ ZIDR_EL1 was part of an early version of SVE, but didn't make
+ it to the final release.
+
+ opcodes/
+ * aarch64-opc.c (aarch64_sys_regs): Remove zidr_el1 entry.
+
+ gas/
+ * testsuite/gas/aarch64/sve-sysreg.s: Remove zidr_el1.
+ * testsuite/gas/aarch64/sve-sysreg.d: Update accordingly.
+ * testsuite/gas/aarch64/sve-sysreg-invalid.l: Likewise.
+
+2021-11-30 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Allow writes to MFAR_EL3
+ MFAR_EL3 is a read/write register, but was incorrectly marked as
+ read-only
+ [https://developer.arm.com/documentation/ddi0601/2021-09/AArch64-Registers/MFAR-EL3--PA-Fault-Address-Register?lang=en]
+
+ opcodes/
+ * aarch64-opc.c (aarch64_sys_regs): Mark mfar_el3 as read-write.
+
+ gas/
+ * testsuite/gas/aarch64/rme.s: Test writing to mfar_el3.
+ * testsuite/gas/aarch64/rme.d: Update accordingly.
+ * testsuite/gas/aarch64/rme-invalid.s: Delete.
+ * testsuite/gas/aarch64/rme-invalid.l: Likewise.
+ * testsuite/gas/aarch64/rme-invalid.d: Likewise.
+
+2021-11-30 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Mark PMSIDR_EL1 as read-only
+ We were incorrectly allowing writes to PMSIDR_EL1, which is
+ a read-only register.
+ [https://developer.arm.com/documentation/ddi0595/2021-09/AArch64-Registers/PMSIDR-EL1--Sampling-Profiling-ID-Register?lang=en]
+
+ opcodes/
+ * aarch64-opc.c (aarch64_sys_regs): Make pmsidr_el1 as F_REG_READ.
+
+ gas/
+ * testsuite/gas/aarch64/msr.s: Remove write to pmsidr_el1.
+ * testsuite/gas/aarch64/msr.d: Update accordingly.
+ * testsuite/gas/aarch64/illegal-sysreg-2.s,
+ * testsuite/gas/aarch64/illegal-sysreg-2.d,
+ * testsuite/gas/aarch64/illegal-sysreg-2.l: New test.
+
+2021-11-30 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Remove duplicate system register entries
+ There is a lot of overlap between the ETM and ETE system registers,
+ so some registers were listed twice.
+
+ Already tested by etm.[sd] and ete.[sd].
+
+ opcodes/
+ * aarch64-opc.c (aarch64_sys_regs): Combine ETE and ETM blocks
+ and remove redundant entries.
+
+ gas/
+ * testsuite/gas/aarch64/etm.s: Remove duplicated test.
+ * testsuite/gas/aarch64/etm.d: Update accordingly.
+
+2021-11-30 Richard Sandiford <richard.sandiford@arm.com>
+
+ aarch64: Check for register aliases before mnemonics
+ Previously we would not accept:
+
+ A .req B
+
+ if A happened to be the name of an instruction. Adding new
+ instructions could therefore invalidate existing register aliases.
+
+ I noticed this with a test that used "zero" as a register alias
+ for "xzr", where "zero" is now also the name of an SME instruction.
+ I don't have any evidence that "real" code is doing this, but it
+ seems at least plausible.
+
+ This patch switches things so that we check for register aliases
+ first. It might slow down parsing slightly, but the difference
+ is unlikely to be noticeable.
+
+ Things like:
+
+ b .req + 0
+
+ still work, since create_register_alias checks for " .req ",
+ and with the input scrubber, we'll only keep whitespace after
+ .req if it's followed by another name. If there's some valid
+ expression that I haven't thought about that is scrubbed to
+ " .req ", users could avoid the ambiguity by wrapping .req
+ in parentheses.
+
+ The new test for invalid aliases already passed. I just wanted
+ something to exercise the !dot condition.
+
+ I can't find a way of exercising the (existing) p == base condition,
+ but I'm not brave enough to say that it can never happen. If it does
+ happen, get_mnemonic_name would return an empty string.
+
+ gas/
+ * config/tc-aarch64.c (opcode_lookup): Move mnemonic extraction
+ code to...
+ (md_assemble): ...here. Check for register aliases first.
+ * testsuite/gas/aarch64/register_aliases.d,
+ testsuite/gas/aarch64/register_aliases.s: Test for a register
+ alias called "zero".
+ * testsuite/gas/aarch64/register_aliases_invalid.d,
+ testsuite/gas/aarch64/register_aliases_invalid.l,
+ testsuite/gas/aarch64/register_aliases_invalid.s: New test.
+
+2021-11-30 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: don't use the 'p' format for parsing args
+ When running the gdb.python/py-arch.exp tests on a GDB built
+ against Python 2 I ran into some errors. The problem is that this
+ test script exercises the gdb.Architecture.integer_type method, and
+ this method uses 'p' as an argument format specifier in a call to
+ gdb_PyArg_ParseTupleAndKeywords.
+
+ Unfortunately this specified was only added in Python 3.3, so will
+ cause an error for earlier versions of Python.
+
+ This commit switches to use the 'O' specifier to collect a PyObject,
+ and then uses PyObject_IsTrue to convert the object to a boolean.
+
+ An earlier version of this patch incorrectly switched from using 'p'
+ to use 'i', however, it was pointed out during review that this would
+ cause some changes in behaviour, for example both of these will work
+ with 'p', but not with 'i':
+
+ gdb.selected_inferior().architecture().integer_type(32, None)
+ gdb.selected_inferior().architecture().integer_type(32, "foo")
+
+ The new approach of using 'O' works fine with these cases. I've added
+ some new tests to cover both of the above.
+
+ There should be no user visible changes after this commit.
+
+2021-11-30 Tom de Vries <tdevries@sdflex.arch.suse.de>
+
+ [gdb/testsuite] Fix gdb.base/style.exp with stub-termcap
+ When running test-case gdb.base/style.exp with a gdb build using
+ stub-termcap.c, we run into:
+ ...
+ (gdb) PASS: gdb.base/style.exp: all styles enabled: frame when width=20
+ ^M<et width 30^M
+ (gdb) FAIL: gdb.base/style.exp: all styles enabled: set width 30
+ ...
+
+ The problem is that we're trying to issue the command "set width 30" while
+ width is set to 20, which causes horizontal scrolling.
+
+ Fix this by resetting the width to 0 before issuing the "set width 30"
+ command.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24582
+
+2021-11-30 Nick Clifton <nickc@redhat.com>
+
+ Use dwarf_vma type for offsets, ranges and section sizes in DWARF decoder.
+ * dwarf.c (find_debug_info_for_offset): Use dwarf_vma type for
+ offsets, sizes and ranges.
+ (display_loc_list): Likewise. Also use print_dwarf_vma to print
+ the offset.
+ (display_loclists_list): Likewise.
+ (display_loc_list_dwo): Likewise.
+ (display_debug_str): Likewise.
+ (display_debug_aranges): Likewise.
+ (display_debug_ranges_list): Likewise.
+ (display_debug_rnglists_list): Likewise.
+ (display_debug_ranges): Likewise.
+
+ ld: pru: Add pru_irq_map output section
+ * scripttempl/pru.sc (.pru_irq_map): Define output section.
+ * testsuite/ld-pru/pru_irq_map-1.d: New test.
+ * testsuite/ld-pru/pru_irq_map-2.d: New test.
+ * testsuite/ld-pru/pru_irq_map.s: New test.
+
+2021-11-30 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: check the python module is available before using it
+ The gdb.python/py-inferior-leak.exp test makes use of the tracemalloc
+ module. When running the Python tests with a GDB built against Python
+ 2 I ran into a test failure due to the tracemalloc module not being
+ available.
+
+ This commit adds a new helper function to lib/gdb-python.exp that
+ checks if a named module is available. Using this we can then skip
+ the py-inferior-leak.exp test when the tracemalloc module is not
+ available.
+
+2021-11-30 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: fix disassembler regressions for 32-bit arm
+ After this commit:
+
+ commit 76b43c9b5c2b275cbf4f927bfc25984410cb5dd5
+ Date: Tue Oct 5 15:10:12 2021 +0100
+
+ gdb: improve error reporting from the disassembler
+
+ We started seeing FAILs in the gdb.base/all-architectures*.exp tests,
+ when running on a 32-bit ARM target, though I suspect running on any
+ target that compiles such that bfd_vma is 32-bits would also trigger
+ the failures.
+
+ The problem is that the test is expected GDB's disassembler to print
+ an error like this:
+
+ Cannot access memory at address 0x0
+
+ However, after the above commit we see an error like:
+
+ unknown disassembler error (error = -1)
+
+ The reason for this is this code in opcodes/i386-dis.c (in the
+ print_insn function):
+
+ if (address_mode == mode_64bit && sizeof (bfd_vma) < 8)
+ {
+ (*info->fprintf_func) (info->stream,
+ _("64-bit address is disabled"));
+ return -1;
+ }
+
+ This code effectively disallows us from ever disassembling 64-bit x86
+ code if we compiled GDB with a 32-bit bfd_vma. Notice we return
+ -1 (indicating a failure to disassemble), but never call the
+ memory_error_func callback.
+
+ Prior to the above commit GDB, when it received the -1 return value
+ would assume that a memory error had occurred and just print whatever
+ value happened to be in the memory error address variable, the default
+ value of 0 just happened to be fine because the test had asked GDB to
+ do this 'disassemble 0x0,+4'.
+
+ If we instead change the test to do 'disassemble 0x100,+4' then GDB
+ would (previously) have still reported:
+
+ Cannot access memory at address 0x0
+
+ which makes far less sense.
+
+ In this commit I propose to fix this issue by changing the test to
+ accept either the "Cannot access memory ..." string, or the newer
+ "unknown disassembler error ..." string. With this change done the
+ test now passes.
+
+ However, there is one weakness with this strategy; if GDB broke such
+ that we _always_ reported "unknown disassembler error ..." we would
+ never notice. This clearly would be bad. To avoid this issue I have
+ adjusted the all-architectures*.exp tests so that, when we disassemble
+ for the default architecture (the one selected by "auto") we _only_
+ expect to get the "Cannot access memory ..." error string.
+
+ [ Note: In an ideal world we should be able to disassemble any
+ architecture at all times. There's no reason why the 64-bit x86
+ disassembler requires a 64-bit bfd_vma, other than the code happens
+ to be written that way. We could rewrite the disassemble to not
+ have this requirement, but, I don't plan to do that any time soon. ]
+
+ Further, I have changed the all-architectures*.exp test so that we now
+ disassemble at address 0x100, this should avoid us being able to pass
+ by printing a default address of 0x0. I did originally change the
+ address we disassembled at to 0x4, however, some architectures,
+ e.g. ia64, have a default instruction alignment that is greater than
+ 4, so would still round down to 0x0. I could have just picked 0x8 as
+ an address, but I figured that 0x100 was likely to satisfy most
+ architectures alignment requirements.
+
+2021-11-30 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: add gdb.RemoteTargetConnection.send_packet
+ This commits adds a new sub-class of gdb.TargetConnection,
+ gdb.RemoteTargetConnection. This sub-class is created for all
+ 'remote' and 'extended-remote' targets.
+
+ This new sub-class has one additional method over its base class,
+ 'send_packet'. This new method is equivalent to the 'maint
+ packet' CLI command, it allows a custom packet to be sent to a remote
+ target.
+
+ The outgoing packet can either be a bytes object, or a Unicode string,
+ so long as the Unicode string contains only ASCII characters.
+
+ The result of calling RemoteTargetConnection.send_packet is a bytes
+ object containing the reply that came from the remote.
+
+2021-11-30 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: make packet_command function available outside remote.c
+ In a later commit I will add a Python API to access the 'maint packet'
+ functionality, that is, sending a user specified packet to the target.
+
+ To make implementing this easier, this commit refactors how this
+ command is currently implemented so that the packet_command function
+ is now global.
+
+ The new global send_remote_packet function takes an object that is an
+ implementation of an abstract interface. Two functions within this
+ interface are then called, one just before a packet is sent to the
+ remote target, and one when the reply has been received from the
+ remote target. Using an interface object in this way allows (1) for
+ the error checking to be done before the first callback is made, this
+ means we only print out what packet it being sent once we know we are
+ going to actually send it, and (2) we don't need to make a copy of the
+ reply if all we want to do is print it.
+
+ One user visible changes after this commit are the error
+ messages, which I've changed to be less 'maint packet' command
+ focused, this will make them (I hope) better for when
+ send_remote_packet can be called from Python code.
+
+ So: "command can only be used with remote target"
+ Becomes: "packets can only be sent to a remote target"
+
+ And: "remote-packet command requires packet text as argument"
+ Becomes: "a remote packet must not be empty"
+
+ Additionally, in this commit, I've added support for packet replies
+ that contain binary data. Before this commit, the code that printed
+ the reply treated the reply as a C string, it assumed that the string
+ only contained printable characters, and had a null character only at
+ the end.
+
+ One way to show the problem with this is if we try to read the auxv
+ data from a remote target, the auxv data is binary, so, before this
+ commit:
+
+ (gdb) target remote :54321
+ ...
+ (gdb) maint packet qXfer:auxv:read::0,1000
+ sending: "qXfer:auxv:read::0,1000"
+ received: "l!"
+ (gdb)
+
+ And after this commit:
+
+ (gdb) target remote :54321
+ ...
+ (gdb) maint packet qXfer:auxv:read::0,1000
+ sending: "qXfer:auxv:read::0,1000"
+ received: "l!\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xfc\xf7\xff\x7f\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\xff\xf>
+ (gdb)
+
+ The binary contents of the reply are now printed as escaped hex.
+
+2021-11-30 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/python: introduce gdb.TargetConnection object type
+ This commit adds a new object type gdb.TargetConnection. This new
+ type represents a connection within GDB (a connection as displayed by
+ 'info connections').
+
+ There's three ways to find a gdb.TargetConnection, there's a new
+ 'gdb.connections()' function, which returns a list of all currently
+ active connections.
+
+ Or you can read the new 'connection' property on the gdb.Inferior
+ object type, this contains the connection for that inferior (or None
+ if the inferior has no connection, for example, it is exited).
+
+ Finally, there's a new gdb.events.connection_removed event registry,
+ this emits a new gdb.ConnectionEvent whenever a connection is removed
+ from GDB (this can happen when all inferiors using a connection exit,
+ though this is not always the case, depending on the connection type).
+ The gdb.ConnectionEvent has a 'connection' property, which is the
+ gdb.TargetConnection being removed from GDB.
+
+ The gdb.TargetConnection has an 'is_valid()' method. A connection
+ object becomes invalid when the underlying connection is removed from
+ GDB (as discussed above, this might be when all inferiors using a
+ connection exit, or it might be when the user explicitly replaces a
+ connection in GDB by issuing another 'target' command).
+
+ The gdb.TargetConnection has the following read-only properties:
+
+ 'num': The number for this connection,
+
+ 'type': e.g. 'native', 'remote', 'sim', etc
+
+ 'description': The longer description as seen in the 'info
+ connections' command output.
+
+ 'details': A string or None. Extra details for the connection, for
+ example, a remote connection's details might be
+ 'hostname:port'.
+
+2021-11-30 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: The vtype immediate with more than the defined 8 bits are preserved.
+ According the rvv spec,
+ https://github.com/riscv/riscv-v-spec/blob/master/vtype-format.adoc
+
+ The bits of vtype immediate from 8 to (xlen - 1) should be reserved.
+ Therefore, we should also dump the vtype immediate as numbers, when
+ they are set over 8-bits. I think this is a bug that we used to support
+ vediv extension and use the bit 8 and 9 of vtype, but forgot to update
+ the behavior when removing the vediv.
+
+ Consider the testcases,
+
+ vsetvli a0, a1, 0x700 # the reserved bit 10, 9 and 8 are used.
+ vsetvli a0, a1, 0x400 # the reserved bit 10 is used.
+ vsetvli a0, a1, 0x300 # the reserved bit 9 and 8 are used.
+ vsetvli a0, a1, 0x100 # the reserved bit 8 is used.
+ vsetivli a0, 0xb, 0x300 # the reserved bit 9 and 8 are used.
+ vsetivli a0, 0xb, 0x100 # the reserved bit 8 is used.
+
+ The original objdump shows the following result,
+
+ 0000000000000000 <.text>:
+ 0: 7005f557 vsetvli a0,a1,1792
+ 4: 4005f557 vsetvli a0,a1,1024
+ 8: 3005f557 vsetvli a0,a1,e8,m1,tu,mu
+ c: 1005f557 vsetvli a0,a1,e8,m1,tu,mu
+ 10: f005f557 vsetivli a0,11,e8,m1,tu,mu
+ 14: d005f557 vsetivli a0,11,e8,m1,tu,mu
+
+ But in fact the correct result should be,
+
+ 0000000000000000 <.text>:
+ 0: 7005f557 vsetvli a0,a1,1792
+ 4: 4005f557 vsetvli a0,a1,1024
+ 8: 3005f557 vsetvli a0,a1,768
+ c: 1005f557 vsetvli a0,a1,256
+ 10: f005f557 vsetivli a0,11,768
+ 14: d005f557 vsetivli a0,11,256
+
+ gas/
+ * testsuite/gas/riscv/vector-insns.d: Added testcases to
+ test the reserved bit 8 to (xlen-1) of vtype.
+ * testsuite/gas/riscv/vector-insns.s: Likewise.
+ include/
+ * opcode/riscv.h: Removed OP_MASK_VTYPE_RES and OP_SH_VTYPE_RES,
+ since they are different for operand Vc and Vb.
+ opcodes/
+ * riscv-dis.c (print_insn_args): Updated imm_vtype_res to
+ extract the reserved immediate of vtype correctly.
+
+2021-11-30 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Dump vset[i]vli immediate as numbers once vsew or vlmul is reserved.
+ Consider the following case,
+
+ vsetvli a0, a1, 0x4 # unrecognized vlmul
+ vsetvli a0, a1, 0x20 # unrecognized vsew
+ vsetivli a0, 0xb, 0x4 # unrecognized vlmul
+ vsetivli a0, 0xb, 0x20 # unrecognized vsew
+
+ For the current dis-assembler, we get the result,
+
+ 0000000000000000 <.text>:
+ 0: 0045f557 vsetvli a0,a1,e8,(null),tu,mu
+ 4: 0205f557 vsetvli a0,a1,e128,m1,tu,mu
+ 8: c045f557 vsetivli a0,11,e8,(null),tu,mu
+ c: c205f557 vsetivli a0,11,e128,m1,tu,mu
+
+ The vsew e128 and vlmul (null) are preserved according to the spec,
+ so dump these fields looks wrong. Consider that we are used to dump
+ the unrecognized csr as csr numbers directly, we should also dump
+ the whole vset[i]vli immediates as numbers, once the vsew or vlmul
+ is reserved. Therefore, following is what I expected,
+
+ 0000000000000000 <.text>:
+ 0: 0045f557 vsetvli a0,a1,4
+ 4: 0205f557 vsetvli a0,a1,32
+ 8: c045f557 vsetivli a0,11,4
+ c: c205f557 vsetivli a0,11,32
+
+ gas/
+ * testsuite/gas/riscv/vector-insns.d: Rewrite the vset[i]vli
+ testcases since we should dump the immediate as numbers once
+ the vsew or vlmul is reserved.
+ * testsuite/gas/riscv/vector-insns.s: Likewise.
+ opcodes/
+ * riscv-dis.c (print_insn_args): The reserved vsew and vlmul
+ are NULL string in the riscv_vsew and riscv_vlmul, so dump the
+ whole imm as numbers once one of them is NULL.
+ * riscv-opc.c (riscv_vsew): Set the reserved vsew to NULL.
+ (riscv_vlmul): Set the reserved vlmul to NULL.
+
+2021-11-30 Mike Frysinger <vapier@gentoo.org>
+
+ zlib: enable silent build rules
+
+ ld: enable silent build rules
+ Also add $(AM_V_xxx) to various manual rules in here.
+
+ libctf: enable silent build rules
+ Also add $(AM_V_xxx) to various manual rules in here.
+
+ gprof: enable silent build rules
+ Also add $(AM_V_xxx) to various manual rules in here.
+
+ binutils: merge doc subdir up a level
+ This avoids a recursive make into the doc subdir and speeds up the
+ build slightly. It also allows for more parallelism.
+
+ binutils: enable silent build rules
+ Also add $(AM_V_xxx) to various manual rules in here.
+
+ bfd: enable silent build rules
+ Also add $(AM_V_xxx) to various manual rules in here.
+
+ opcodes: enable silent build rules
+ Also add $(AM_V_xxx) to various manual rules in here.
+
+2021-11-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-29 Tom Tromey <tom@tromey.com>
+
+ Allow DW_ATE_UTF for Rust characters
+ The Rust compiler plans to change the encoding of a Rust 'char' type
+ to use DW_ATE_UTF. You can see the discussion here:
+
+ https://github.com/rust-lang/rust/pull/89887
+
+ However, this fails in gdb. I looked into this, and it turns out that
+ the handling of DW_ATE_UTF is currently fairly specific to C++. In
+ particular, the code here assumes the C++ type names, and it creates
+ an integer type.
+
+ This comes from commit 53e710acd ("GDB thinks char16_t and char32_t
+ are signed in C++"). The message says:
+
+ Both places need fixing. But since I couldn't tell why dwarf2read.c
+ needs to create a new type, I've made it use the per-arch built-in
+ types instead, so that the types are only created once per arch
+ instead of once per objfile. That seems to work fine.
+
+ ... which is fine, but it seems to me that it's also correct to make a
+ new character type; and this approach is better because it preserves
+ the type name as well. This does use more memory, but first we
+ shouldn't be too concerned about the memory use of types coming from
+ debuginfo; and second, if we are, we should implement type interning
+ anyway.
+
+ Changing this code to use a character type revealed a couple of
+ oddities in the C/C++ handling of TYPE_CODE_CHAR. This patch fixes
+ these as well.
+
+ I filed PR rust/28637 for this issue, so that this patch can be
+ backported to the gdb 11 branch.
+
+2021-11-29 Aaron Merey <amerey@redhat.com>
+ Tom de Vries <tdevries@suse.de>
+
+ [PR gdb/27026] CTRL-C is ignored when debug info is downloaded
+ During debuginfod downloads, ctrl-c should result in the download
+ being cancelled and skipped. However in some cases, ctrl-c fails to
+ get delivered to gdb during downloading. This can result in downloads
+ being unskippable.
+
+ Fix this by ensuring that target_terminal::ours is in effect for the
+ duration of each download.
+
+ https://sourceware.org/bugzilla/show_bug.cgi?id=27026#c3
+
+2021-11-29 Nick Clifton <nickc@redhat.com>
+
+ strings: Replace references to -u option with references to -U.
+ PR 28632
+
+2021-11-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix segfault in search_one_symtab
+ PR28539 describes a segfault in lambda function search_one_symtab due to
+ psymbol_functions::expand_symtabs_matching calling expansion_notify with a
+ nullptr symtab:
+ ...
+ struct compunit_symtab *symtab =
+ psymtab_to_symtab (objfile, ps);
+
+ if (expansion_notify != NULL)
+ if (!expansion_notify (symtab))
+ return false;
+ ...
+
+ This happens as follows. The partial symtab ps is a dwarf2_include_psymtab
+ for some header file:
+ ...
+ (gdb) p ps.filename
+ $5 = 0x64fcf80 "/usr/include/c++/11/bits/stl_construct.h"
+ ...
+
+ The includer of ps is a shared symtab for a partial unit, with as user:
+ ...
+ (gdb) p ps.includer().user.filename
+ $11 = 0x64fc9f0 \
+ "/usr/src/debug/llvm13-13.0.0-1.2.x86_64/tools/clang/lib/AST/Decl.cpp"
+ ...
+
+ The call to psymtab_to_symtab expands the Decl.cpp symtab (and consequently
+ the shared symtab), but returns nullptr because:
+ ...
+ struct dwarf2_include_psymtab : public partial_symtab
+ {
+ ...
+ compunit_symtab *get_compunit_symtab (struct objfile *objfile) const override
+ {
+ return nullptr;
+ }
+ ...
+
+ Fix this by returning the Decl.cpp symtab instead, which fixes the segfault
+ in the PR.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28539
+
+2021-11-29 Nick Clifton <nickc@redhat.com>
+
+ Update description of string's -n option.
+ PR 28632
+ * strings.c (usage): Update desciption of -n option.
+ * doc/binutils.texi: Likewise.
+
+2021-11-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix typo in proc lines
+ Proc lines contains a typo:
+ ...
+ string_form { set $_line_string_form $value }
+ ...
+
+ Remove the incorrect '$' in '$_line_string_form'.
+
+ Tested on x86_64-linux.
+
+2021-11-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use unique files in gdb.dwarf2/dw2-lines.exp
+ While debugging a problem in gdb.dwarf2/dw2-lines.exp, I realized that the
+ test-case generates all executables and associated temporary files using the
+ same filenames.
+
+ Fix this by adding a new proc prefix_id in lib/gdb.exp, and using it in the
+ test-case.
+
+ Tested on x86_64-linux.
+
+2021-11-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/dw2-lines.exp with -m32
+ When running test-case gdb.dwarf2/dw2-lines.exp with target board -unix/-m32,
+ we run into another instance of PR28383, where the dwarf assembler generates
+ 64-bit relocations which are not supported by the 32-bit assembler:
+ ...
+ dw2-lines-dw.S: Assembler messages:^M
+ outputs/gdb.dwarf2/dw2-lines/dw2-lines-dw.S:76: Error: \
+ cannot represent relocation type BFD_RELOC_64^M
+ ...
+
+ Fix this by using _op_offset in _line_finalize_header.
+
+ Tested on x86_64-linux.
+
+2021-11-29 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: drop most specific istarget checks
+ We'll rely on the toolchain probing to determine whether each arch's
+ tests can be run rather the current configure target. This allows
+ testing all of the ports in a multitarget configuration.
+
+ For now, we don't reformat the files entirely to make it easier to
+ review, and in case we need to make adjustments. Once this feels
+ like it's stable, we can flatten the code a bit by removing the if
+ statement entirely.
+
+2021-11-29 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: support parallel execution
+ Break up the dejagnu logic so that we can parallelize the testsuite.
+ This takes a page from gcc & gdb where each .exp is run in isolation
+ instead of in serial.
+
+ For most targets, this doesn't make much of a difference as they only
+ have a single .exp. A few (like cris & frv) have multiple .exp though
+ and will see a bit of a speed up.
+
+ The real gain is when testing a multitarget build. This way we can
+ run all the targets in parallel and cut the execution time a bit.
+ On my system, it goes from ~155sec to ~100sec.
+
+ We can gain further speedups by splitting up some of the larger .exp
+ files into smaller groups. We'll do that in a followup though.
+
+2021-11-29 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: expand arch specific toolchain settings
+ Leverage the new per-port toolchain settings to initialize the env
+ for eeach set of tests. This allows us to run all the tests in a
+ multitarget build if the user sets up the vars. If they don't, we
+ can still skip all the tests.
+
+2021-11-29 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: setup per-port toolchain settings for multitarget build
+ Gas does not support multitarget builds -- it still only supports
+ a single input & output format. ld is a bit better, but requires
+ manual flags to select the right output. This makes it impossible
+ to run the complete testsuite in a multitarget build.
+
+ To address this limitation, create a suite of FOR_TARGET variables
+ so these can be set to precompiled as & ld programs. It requires
+ a bit of setup ahead of time, but it's a one-time cost, and makes
+ running the full testsuite at once much easier.
+
+2021-11-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-28 Alan Modra <amodra@gmail.com>
+
+ PR28629 NIOS2 fallout
+ The test exactly matched wrong output.
+
+ PR 28629
+ * testsuite/gas/nios2/relax.d: Update expected output.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: add checks to core headers to prevent incorrect common building
+ Some of the core sim headers rely on the SIM_AC_OPTION_BITSIZE macro
+ which can change the size of core types. Since these haven't been
+ unified across ports, add checks to make sure they aren't accidentally
+ included when building for all ports. This caught the sim-load file
+ using poisoned headers that it didn't actually need.
+
+ sim: unify syscall.o building
+ Now that we've unified all the syscall tables, this file does not rely
+ on any port-specific settings, so move it up to building as part of the
+ common step so we only do it once in a multibuild.
+
+ sim: drop unused gentmap & nltvals.def logic
+ Now that all ports have switched to target-newlib-* files, there's
+ no need for these files & generating things at build time. So punt
+ the logic and make target-newlib-syscall a hard requirement.
+
+ sim: mcore: switch to new target-newlib-syscall
+ Use the new target-newlib-syscall module. This is needed to merge all
+ the architectures into a single build, and mcore has a custom syscall
+ table for its newlib/libgloss port.
+
+ sim: riscv: switch to new target-newlib-syscall
+ Use the new target-newlib-syscall module. This is needed to merge all
+ the architectures into a single build, and riscv has a custom syscall
+ table for its newlib/libgloss port.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cr16: switch to new target-newlib-syscall
+ Use the new target-newlib-syscall module. This is needed to merge all
+ the architectures into a single build, and cr16 has a custom syscall
+ table for its newlib/libgloss port.
+
+ This allows cleaning up the syscall ifdef logic. We know these will
+ always exist now.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: d10v: switch to new target-newlib-syscall
+ Use the new target-newlib-syscall module. This is needed to merge all
+ the architectures into a single build, and d10v has a custom syscall
+ table for its newlib/libgloss port.
+
+ This allows cleaning up the syscall ifdef logic. We know these will
+ always exist now.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: sh: switch to new target-newlib-syscall
+ Use the new target-newlib-syscall module. This is needed to merge all
+ the architectures into a single build, and sh has a custom syscall
+ table for its newlib/libgloss port.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: v850: switch to new target-newlib-syscall
+ Use the new target-newlib-syscall module. This is needed to merge all
+ the architectures into a single build, and v850 has a custom syscall
+ table for its newlib/libgloss port.
+
+ This allows cleaning up the syscall ifdef logic. We know these will
+ always exist now.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: iq2000/lm32/m32c/moxie/rx: switch to new target-newlib-syscall.h
+ Use the new target-newlib-syscall.h to provide the target syscall
+ defines. These code paths are written specifically for the newlib
+ ABI rather than being generalized, so switching them to the defines
+ rather than trying to go through the dynamic callback conversion
+ seems like the best trade-off for now. Might have to reconsider
+ this in the future.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: nltvals: pull target syscalls out into a dedicated source file
+ Like we just did for pulling out the errno map, pull out the syscall
+ maps into a dedicated common file. Most newlib ports are using the
+ same syscall map, but not all, which means we have to do a bit more
+ work to migrate.
+
+ This commit adds the maps and switches the ports using the common
+ default syscall table over to it. Ports using unique syscall tables
+ are still using the old targ-map.c logic.
+
+ Switching common ports over is easy by checking NL_TARGET, but the
+ ppc code needs a bit more cleanup here hence its larger diff.
+
+2021-11-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: frv: resolve syscalls dynamically
+ Avoid use of TARGET_<syscall> defines and rely on the callback layers
+ to resolve these dynamically so we can support multiple syscall layers
+ instead of assuming the newlib/libgloss numbers all the time.
+
+ sim: mn10300: resolve syscalls dynamically
+ Avoid use of TARGET_<syscall> defines and rely on the callback layers
+ to resolve these dynamically so we can support multiple syscall layers
+ instead of assuming the newlib/libgloss numbers all the time.
+
+ sim: nltvals: drop i960
+ This port was dropped from gdb/bfd/sim years ago, so stop including
+ its syscall constants too.
+
+ sim: moxie: fix datadir handling
+ Expand the value at `make` time rather than configure generation time
+ so that we handle $(datarootdir) setting properly.
+
+2021-11-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-27 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix typos in configure
+ The variable names used to restore CFLAGS and LDFLAGS here don't quite
+ match the names used above, resulting in losing the original CFLAGS and
+ LDFLAGS. Fix that.
+
+ Change-Id: I9cc2c3b48b1dc30c31a7143563c893fd6f426a0a
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: hw: mark hw_descriptors const
+
+ sim: testsuite: add dedicated flag for init toolchain tests
+ As we setup more reliable CC_FOR_TARGET variables for each target, the
+ bfin way of overriding it to stuff custom CFLAGS doesn't scale well.
+ Add a dedicated CFLAGS_FOR_TARGET_init setting that each set of tests
+ can setup if they want to add custom options.
+
+ sim: testsuite: clean up arch specific toolchain settings
+ In a multitarget build, we process all targets in order, so make sure
+ the toolchain settings from one don't leak into the next.
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cris: always search for local rvdummy tool
+ If the board info sets the sim to a basename that is found via $PATH
+ (which is the default dejagnu behavior), the logic here to use its
+ dirname to find rvdummy fails because it looks for `./rvdummy`. So
+ switch it to always use the local build of rvdummy which is the one
+ we want to be testing against in the first place.
+
+ If we get a request for testing against a different setup, we can
+ figure out & document the needs at that point, and then setup some
+ config knobs to control it.
+
+2021-11-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAIL in gdb.base/list-missing-source.exp
+ In commit f8080fb7a44 "[gdb/testsuite] Add gdb.base/include-main.exp" a
+ file gdb.base/main.c was added, which caused the following regression:
+ ...
+ (gdb) list^M
+ <gdb.base/main.c>
+ (gdb) FAIL: gdb.base/list-missing-source.exp: list
+ ...
+
+ The problem is that the test-case does not expect to find a file main.c, but
+ now it finds gdb.base/main.c.
+
+ Fix this by using the more specific file name list-missing-source.c.
+
+ Tested on x86_64-linux.
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: fix bits-gen EXEEXT handling
+ Add missing $(EXEEXT) to dependencies on bits-gen. These are actually
+ build-only tools, but automake doesn't allow for build & host tools, so
+ the rules are re-using EXEEXT.
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: initial support for OS-specific tests
+ We usually test against the newlib/libgloss environment, but for a
+ few ports that also support Linux apps, we want to test that logic
+ too. A lot of the C code is written such that it works with either
+ newlib/libgloss or glibc/linux toolchains, but we have some tests
+ that end up being Linux-specific. Cris has been using the target
+ tuple as a rough proxy for this (where cris*-*-elf is assumed to be
+ newlib/libgloss, and everything else is glibc/linux), but that is a
+ bit too rough, and it doesn't work in a multitarget build.
+
+ So lets create a few stub files that we can do compile tests with
+ to detect the different setups, and then let tests declare which
+ one they require (if they require any at all).
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: unify basic C compiler checks
+ Both bfin & cris ports test the C compiler to see if it works, but in
+ their own way. Unify the checks in the common code so we can leverage
+ them in more ports in the future, and collapse the bfin & cris code.
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: rework sim_init usage
+ The sim_init function was called by runtest for each test when --tool
+ was set to sim. When we changed to --tool '' to collapse the testsuite
+ dir, the init function was no longer called on every test. However, it
+ was still being called explicitly by config/default.exp. It's not clear
+ why that explicit call ever existed since, in the past, it meant it was
+ redundant.
+
+ Lets drop the single sim_init call in config/default.exp and move it out
+ to all our tests. This replicates the runtest behavior so we can setup
+ variables on a per-test basis which allows us to recollapse the sim_path
+ logic back. We'll also leverage this in the future for toolchain setup.
+
+ Also add a few comments clarifying the overall runtime behavior.
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cris: fix testsuite hang when sim is missing
+ If the cris sim hasn't been built yet, trying to run its testsuite
+ will hang indefinitely. The common sim APIs already have this, so
+ copy it over to the cris forks of the test+run functions.
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: fix objdir handling
+ The tests assume that the cwd is the objdir directory and write its
+ intermediates to there all the time. When using runtest's --objdir
+ setting though, this puts the files in the wrong place. This isn't
+ a big problem currently as we never change --objdir, but in order to
+ support parallel test execution, we're going to start setting that
+ option, so clean up the code ahead of time.
+
+ We also have to tweak some of the cris tests which were making
+ assumptions about the argv[0] value.
+
+2021-11-27 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: rename global_sim_options to SIMFLAGS_FOR_TARGET
+ Now that all the other toolchain settings have been renamed to match
+ the dejagnu settings of XXX_FOR_TARGET, rename global_sim_options to
+ SIMFLAGS_FOR_TARGET too.
+
+ sim: testsuite: replace global_ld_options with LDFLAGS_FOR_TARGET
+ Only a few tests actually use global_ld_options, but we can replace the
+ sim-specific settings with the dejagnu common LDFLAGS_FOR_TARGET and get
+ the same result.
+
+2021-11-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-26 John David Anglin <danglin@gcc.gnu.org>
+
+ Fix ifunc test fails on hppa*-*-*
+ 2021-11-26 John David Anglin <danglin@gcc.gnu.org>
+
+ PR ld/27442
+
+ ld/ChangeLog:
+
+ * ld/testsuite/ld-ifunc/ifunc.exp (contains_irelative_reloc): Adjust
+ regexp.
+ Skip static ifunc-using executable test on hppa*-*-*.
+
+2021-11-26 H.J. Lu <hjl.tools@gmail.com>
+
+ gas: Update commit 4780e5e4933
+ Update
+
+ commit 4780e5e4933a2497a5aecc4ceabbbb8e82aaf822
+ Author: Tom de Vries <tdevries@suse.de>
+ Date: Fri Nov 26 09:59:45 2021 +0100
+
+ [gas] Fix file 0 dir with -gdwarf-5
+
+ 1. Replace i with j in
+
+ for (j = 0; i < NUM_MD5_BYTES; ++j)
+
+ 2. Pass -W to readelf to force CU: in output due to:
+
+ if (do_wide || strlen (directory) < 76)
+ printf (_("CU: %s/%s:\n"), directory, file_table[0].name);
+ else
+ printf ("%s:\n", file_table[0].name);
+
+ PR gas/28629
+ * dwarf2dbg.c (out_dir_and_file_list): Fix a typo in commit
+ 4780e5e4933.
+ * testsuite/gas/elf/dwarf-5-nop-for-line-table.d: Pass -W to
+ readelf.
+
+2021-11-26 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: replace global_as_options with ASFLAGS_FOR_TARGET
+ Only a few tests actually use global_as_options, but we can replace the
+ sim-specific settings with the dejagnu common ASFLAGS_FOR_TARGET and get
+ the same result.
+
+2021-11-26 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add gdb.base/include-main.exp
+ The test-case gdb.ada/dgopt.exp uses the -gnatD switch, in combination with
+ -gnatG.
+
+ This causes the source file $src/gdb/testsuite/gdb.ada/dgopt/x.adb to be
+ expanded into $build/gdb/testsuite/outputs/gdb.ada/dgopt/x.adb.dg, and the
+ debug information should refer to the x.adb.dg file.
+
+ That is the case for the .debug_line part:
+ ...
+ The Directory Table is empty.
+
+ The File Name Table (offset 0x1c):
+ Entry Dir Time Size Name
+ 1 0 0 0 x.adb.dg
+ ...
+ but not for the .debug_info part:
+ ...
+ <11> DW_AT_name : $src/gdb/testsuite/gdb.ada/dgopt/x.adb
+ <15> DW_AT_comp_dir : $build/gdb/testsuite/outputs/gdb.ada/dgopt
+ ...
+
+ Filed as PR gcc/103436.
+
+ In C we can generate similar debug information, using a source file that does
+ not contain any code, but includes another one that does:
+ ...
+ $ cat gdb/testsuite/gdb.base/include-main.c
+ #include "main.c"
+ ...
+ such that in the .debug_line part we have:
+ ...
+ The Directory Table (offset 0x1c):
+ 1 /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base
+
+ The File Name Table (offset 0x57):
+ Entry Dir Time Size Name
+ 1 1 0 0 main.c
+ ...
+ and in the .debug_info part:
+ ...
+ <11> DW_AT_name : $src/gdb/testsuite/gdb.base/include-main.c
+ <15> DW_AT_comp_dir : $build/gdb/testsuite
+ ...
+
+ Add a C test-case that mimics gdb.ada/dgopt.exp, that is:
+ - generate debug info as described above,
+ - issue a list of a line in include-main.c, while the corresponding
+ CU is not expanded yet.
+
+ Tested on x86_64-linux.
+
+2021-11-26 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: drop unused global_cc_options
+ Nothing in the testsuite is using this setting, so let's drop it.
+ Any code that wants to set compiler flags can use CFLAGS_FOR_TARGET
+ instead to get the same effect.
+
+ sim: testsuite: punt unused toolchain variables
+ These haven't been used in over 20 years. The sim testsuite used to
+ run these tools itself directly, but back in ~1999 it switched to the
+ dejagnu helpers (e.g. target_assemble & target_link), and the dejagnu
+ logic only utilizes XXX_FOR_TARGET variables. Punt them here to avoid
+ confusion with dead code.
+
+2021-11-26 Andrew Burgess <aburgess@redhat.com>
+ Simon Cook <simon.cook@embecosm.com>
+
+ gdb: add risc-v disassembler options support
+ This commit adds support for RISC-V disassembler options to GDB. This
+ commit is based on this patch which was never committed:
+
+ https://sourceware.org/pipermail/binutils/2021-January/114944.html
+
+ All of the binutils refactoring has been moved to a separate, earlier,
+ commit, so this commit is pretty straight forward, just registering
+ the required gdbarch hooks.
+
+2021-11-26 Andrew Burgess <aburgess@redhat.com>
+ Simon Cook <simon.cook@embecosm.com>
+
+ opcodes/riscv: add disassembler options support to libopcodes
+ In preparation for the next commit, which will add GDB support for
+ RISC-V disassembler options, this commit restructures how the
+ disassembler options are managed within libopcodes.
+
+ The implementation provided here is based on this mailing list patch
+ which was never committed:
+
+ https://sourceware.org/pipermail/binutils/2021-January/114944.html
+
+ which in turn took inspiration from the MIPS implementation of the
+ same feature.
+
+ The biggest changes from the original mailing list post are:
+
+ 1. The GDB changes have been split into a separate patch, and
+
+ 2. The `riscv_option_args_privspec` variable, which held the valid
+ priv-spec values is now gone, instead we use the `riscv_priv_specs`
+ array from bfd/cpu-riscv.c instead.
+
+
+ include/ChangeLog:
+
+ * dis-asm.h (disassembler_options_riscv): Declare.
+
+ opcodes/ChangeLog:
+
+ * riscv-dis.c (enum riscv_option_arg_t): New enum typedef.
+ (riscv_options): New static global.
+ (disassembler_options_riscv): New function.
+ (print_riscv_disassembler_options): Rewrite to use
+ disassembler_options_riscv.
+
+2021-11-26 Tom de Vries <tdevries@suse.de>
+
+ [gas] Fix file 0 dir with -gdwarf-5
+ In out_dir_and_file_list, if file 0 is copied from file 1, only the filename
+ is copied, and the dir and md5 fields are left to their default values.
+
+ Fix this by adding the copy of the dir and md5 fields.
+
+ gas/ChangeLog:
+
+ 2021-11-26 Tom de Vries <tdevries@suse.de>
+
+ PR 28629
+ * dwarf2dbg.c (out_dir_and_file_list): When copying file 1 to file 0,
+ also copy dir and md5 fields.
+ * testsuite/gas/i386/dwarf5-line-4.d: Adjust expected output.
+
+2021-11-26 Mike Frysinger <vapier@gentoo.org>
+
+ sim: mips: avoid _ namespace
+ Some C libraries export _P symbols in their headers (like older
+ newlib and its ctype.h), so use P_ instead to avoid conflicts.
+
+ ld: fix POSIX shell test usage
+ POSIX test uses = for compares, not == which is a bashism.
+
+ gas: enable silent build rules
+
+ ld: fix --disable-multiple-abs-defs alignment in help
+
+2021-11-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-25 Enze Li <lienze2010@hotmail.com>
+
+ gdb: ensure extension_language_python is always defined
+ In this commit:
+
+ commit c6a6aad52d9e839d6a84ac31cabe2b7e1a2a31a0
+ Date: Mon Oct 25 17:25:45 2021 +0100
+
+ gdb/python: make some global variables static
+
+ building without Python was broken. The extension_language_python
+ global was moved from being always defined, to only being defined when
+ the HAVE_PYTHON macro was defined. As a consequence, building without
+ Python support would result in errors like:
+
+ /usr/bin/ld: extension.o:(.rodata+0x120): undefined reference to `extension_language_python'
+
+ This commit fixes the problem by moving the definition of
+ extension_language_python outside of the HAVE_PYTHON macro protection.
+
+2021-11-25 Andrew Burgess <aburgess@redhat.com>
+
+ Revert "gdb: add assert in remote_target::wait relating to async being off"
+ This commit introduced a test failure in gdb.server/attach-flag.exp.
+ I didn't spot this failure originally as the problem is fixed by this,
+ as yet unpushed patch:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-November/183768.html
+
+ I unfortunately didn't test each patch in the original series
+ independently. I'll repost this patch after the above patch has been
+ merged.
+
+ This reverts commit 32b1f5e8d6b8ddd3be6e471c26dd85a1dac31dda.
+
+2021-11-25 Nick Clifton <nickc@redhat.com>
+
+ Fix building the AArch64 assembler and disassembler when assertions are disabled.
+ PR 28614
+ * aarch64-asm.c: Replace assert(0) with real code.
+ * aarch64-dis.c: Likewise.
+ * aarch64-opc.c: Likewise.
+
+2021-11-25 Bruno Larsen <blarsen@redhat.com>
+
+ PR gdb/28480: Improve ambiguous member detection
+ Basic ambiguity detection assumes that when 2 fields with the same name
+ have the same byte offset, it must be an unambiguous request. This is not
+ always correct. Consider the following code:
+
+ class empty { };
+
+ class A {
+ public:
+ [[no_unique_address]] empty e;
+ };
+
+ class B {
+ public:
+ int e;
+ };
+
+ class C: public A, public B { };
+
+ if we tried to use c.e in code, the compiler would warn of an ambiguity,
+ however, since A::e does not demand an unique address, it gets the same
+ address (and thus byte offset) of the members, making A::e and B::e have the
+ same address. however, "print c.e" would fail to report the ambiguity,
+ and would instead print it as an empty class (first path found).
+
+ The new code solves this by checking for other found_fields that have
+ different m_struct_path.back() (final class that the member was found
+ in), despite having the same byte offset.
+
+ The testcase gdb.cp/ambiguous.exp was also changed to test for this
+ behavior.
+
+2021-11-25 Jan W. Jagersma <jwjagersma@gmail.com>
+
+ coff-go32: consistent 16-byte section alignment
+ Section alignment for coff-go32 is inconsistent - The '.text' and
+ '.data' sections are 16-byte aligned, but named sections '.text.*' and
+ '.data.*' are only 4-byte aligned. '.gnu.linkonce.r.*' is aligned to
+ 16 bytes, yet '.rodata' and '.rodata.*' are aligned to 4 bytes. For
+ '.bss' all input sections are only aligned to 4 bytes.
+
+ This primarily can cause trouble when using SSE instructions, which
+ require their memory operands to be aligned to 16-byte boundaries.
+
+ This patch solves the issue simply by setting the section alignment
+ to 16 bytes, for all code and data sections referenced in the default
+ linker script.
+
+ * coff-go32.c (COFF_SECTION_ALIGNMENT_ENTRIES): Use partial
+ name match for .text, .data. Add entries for .const, .rodata,
+ .bss, .gnu.linkonce.b.
+
+2021-11-25 Alan Modra <amodra@gmail.com>
+
+ Re: AArch64: Add support for AArch64 EFI (efi-*-aarch64)
+ Commit b69c9d41e8 edited bfd/Makefile.in rather than using automake,
+ which meant a typo in Makefile.am was not discovered and other
+ differences in Makefile.in are seen with a proper regeneration. One
+ difference was lack of an empty line between the pe-aarch64igen.c rule
+ and the following $(BFD32_LIBS) etc. dependency rule, in the
+ regenerated file. Not that it matters for proper "make" behaviour,
+ but it's nicer with a line between those rules. Moving the rule
+ earlier seems to cure the missing empty line.
+
+ * Makefile.am (BFD64_BACKENDS): Correct typo.
+ (BFD_H_DEPS, LOCAL_H_DEPS): Move earlier. Move rule using these
+ deps earlier too.
+ * Makefile.in: Regenerate.
+ * po/BLD-POTFILES.in: Regenerate.
+ * po/SRC-POTFILES.in: Regenerate.
+
+2021-11-25 Nick Clifton <nickc@redhat.com>
+
+ Updated French translation for the opcodes directory.
+ * po/fr.po; Updated French translation.
+
+2021-11-25 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: rename source_styling_changed observer
+ In a later commit I plan to add disassembler styling. In the same way
+ that we have a source_styling_changed observer I would need to add a
+ disassembler_styling_changed observer.
+
+ However, currently, these observers would only be notified from
+ cli-style.c:set_style_enabled, and observed in tui-winsource.c,
+ tui_source_window::style_changed, as a result, having two observers
+ seems unnecessary right now, so, in this commit, I plan to rename
+ source_styling_changed to just styling_changed, then, in the later
+ commit, when disassembler styling is added, I can use the same
+ observer for both source styling, and disassembler styling.
+
+ There should be no user visible changes after this commit.
+
+2021-11-25 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: make some global variables static
+ Make a couple of global variables static in python/python.c. To do
+ this I had to move the definition of extension_language_python to
+ later in the file.
+
+ There should be no user visible changes after this commit.
+
+2021-11-25 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add assert in remote_target::wait relating to async being off
+ While working on another patch I ended up in a situation where I had
+ async mode disabled (with 'maint set target-async off'), but the async
+ event token got marked anyway.
+
+ In this situation GDB was continually calling into
+ remote_target::wait, however, the async token would never become
+ unmarked as the unmarking is guarded by target_is_async_p.
+
+ We could just unconditionally unmark the token, but that would feel
+ like just ignoring a bug, so, instead, lets assert that if
+ !target_is_async_p, then the async token should not be marked.
+
+ This assertion would have caught my earlier mistake.
+
+ There should be no user visible changes with this commit.
+
+2021-11-25 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: simplify remote_target::is_async_p
+ This commit simplifies remote_target::is_async_p by removing the
+ target_async_permitted check.
+
+ In previous commits I have added additional assertions around the
+ target_async_permitted flag into target.c, as a result we should now
+ be confident that if target_can_async_p returns false, a target will
+ never have async mode enabled. Given this, it should not be necessary
+ to check target_async_permitted in remote_target::is_async_p, if this
+ flag is false ::is_async_p should return false anyway. There is an
+ assert to this effect in target_is_async_p.
+
+ There should be no user visible change after this commit.
+
+2021-11-25 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: add asserts in target.c for target_async_permitted
+ The target_async_permitted flag allows a user to override whether a
+ target can act in async mode or not. In previous commits I have moved
+ the checking of this flag out of the various ::can_async_p methods and
+ into the common target.c code.
+
+ In this commit I will add some additional assertions into
+ target_is_async_p and target_async. The rules these assertions are
+ checking are:
+
+ 1. A target that returns false for target_can_async_p should never
+ become "async enabled", and so ::is_async_p should always return
+ false. This is being checked in target_is_async_p.
+
+ 2. GDB should never try to enable async mode for a target that
+ returns false for target_can_async_p, this is checked in
+ target_async.
+
+ There are a few places where we call the ::is_async_p method directly,
+ in these cases we will obviously not pass through the assert in
+ target_is_async_p, however, there are also plenty of places where we
+ do call target_is_async_p so if GDB starts to misbehave we should
+ catch it quickly enough.
+
+ There should be no user visible changes after this commit.
+
+2021-11-25 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: hoist target_async_permitted checks into target.c
+ This commit moves the target_async_permitted check out of each targets
+ ::can_async_p method and into the target_can_async_p wrapper function.
+
+ I've left some asserts in the two ::can_async_p methods that I
+ changed, which will hopefully catch any direct calls to these methods
+ that might be added in the future.
+
+ There should be no user visible changes after this commit.
+
+2021-11-25 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: introduce a new overload of target_can_async_p
+ There are a few places where we call the target_ops::can_async_p
+ member function directly, instead of using the target_can_async_p
+ wrapper.
+
+ In some of these places this is because we need to ask before the
+ target has been pushed, and in another location (in target.c) it seems
+ unnecessary to go through the wrapper when we are already in target.c
+ code.
+
+ However, in the next commit I'd like to hoist some common checks out
+ of target specific code into target.c. To achieve this, in this
+ commit, I introduce a new overload of target_can_async_p which takes a
+ target_ops pointer, and calls the ::can_async_p method directly. I
+ then make use of the new overload where appropriate.
+
+ There should be no user visible changes after this commit.
+
+2021-11-25 Clément Chigot <clement.chigot@atos.net>
+
+ ld/testsuite/ld-elfvsb: correctly test "weak hidden symbol DSO last"
+ The test must be done with the shared object and not with the object
+ file which is already being tested above.
+
+ ld/
+ * testsuite/ld-elfvsb/elfvsb.exp: use .so file in "weak hidden
+ symbol DSO last"
+
+2021-11-25 Tom de Vries <tdevries@suse.de>
+
+ [gdb/cli] Add "set logging enabled", deprecate "set logging on/off"
+ Before commit 3b6acaee895 "Update more calls to add_prefix_cmd" we had the
+ following output for "show logging file":
+ ...
+ $ gdb -q -batch -ex "set trace-commands on" \
+ -ex "set logging off" \
+ -ex "show logging file" \
+ -ex "set logging on" \
+ -ex "show logging file"
+ +set logging off
+ +show logging file
+ Future logs will be written to gdb.txt.
+ +set logging on
+ +show logging file
+ Currently logging to "gdb.txt".
+ ...
+
+ After that commit we have instead:
+ ...
+ +set logging off
+ +show logging file
+ The current logfile is "gdb.txt".
+ +set logging on
+ +show logging file
+ The current logfile is "gdb.txt".
+ ...
+
+ Before the commit, whether logging is enabled or not can be deduced from the
+ output of the command. After the commit, the message is unified and it's no
+ longer clear whether logging is enabled or not.
+
+ Fix this by:
+ - adding a new command "show logging enabled"
+ - adding a corresponding new command "set logging enabled on/off"
+ - making the commands "set logging on/off" deprecated aliases of the
+ "set logging enabled on/off" command.
+
+ Update the docs and testsuite to use "set logging enabled". Mention the new
+ and deprecated commands in NEWS.
+
+ Tested on x86_64-linux.
+
+2021-11-25 Tom de Vries <tdevries@suse.de>
+
+ [gdb/cli] Fix typo in logging overwrite help text
+ Currently we have:
+ ...
+ $ gdb -q -batch -ex "help set logging overwrite"
+ Set whether logging overwrites or appends to the log file.
+ If set, logging overrides the log file.
+ ...
+
+ Fix overrides -> overwrites typo.
+
+2021-11-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-24 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix help doc for "set index-cache enabled"
+ When implementing this command, I put "help doc" as a placeholder for
+ the help string, and forgot to update it. Change it for a real help
+ string.
+
+ Change-Id: Id23c2142c5073dc570bd8a706e9ec6fa8c40eb09
+
+2021-11-24 Simon Marchi <simon.marchi@efficios.com>
+
+ Revert (part of) "gdb fix for catch-syscall.exp"
+ This reverts (par of) commit ab198279120fe7937c0970a8bb881922726678f9.
+ This commit changed what the test expects when catching the execve
+ syscall based on the behavior seen on a Linux PowerPC machine. That is,
+ we get an "entry" event, but no "return" event. This is not what we get
+ on Linux with other architectures, though, and it seems like a
+ PowerPC-specific bug.
+
+ Revert the part of the patch related to this, but not the other hunk.
+
+ Change-Id: I4248776e4299f10999487be96d4acd1b33639996
+
+2021-11-24 Nick Clifton <nickc@redhat.com>
+
+ Fix an illegal memory access parsing a corrupt sysroff file.
+ PR 28564
+ * sysdump.c (getCHARS): Check for an out of bounds read.
+
+2021-11-24 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: fix crash when reading ECOFF debug information
+ In commit:
+
+ commit 633cf2548bcd3dafe297e21a1dd3574240280d48
+ Date: Wed May 9 15:42:28 2018 -0600
+
+ Remove cleanups from mdebugread.c
+
+ the following change was made in the function parse_partial_symbols in
+ mdebugread.c:
+
+ - fdr_to_pst = XCNEWVEC (struct pst_map, hdr->ifdMax + 1);
+ - old_chain = make_cleanup (xfree, fdr_to_pst);
+ + gdb::def_vector<struct pst_map> fdr_to_pst_holder (hdr->ifdMax + 1);
+ + fdr_to_pst = fdr_to_pst_holder.data ();
+
+ The problem with this change is that XCNEWVEC calls xcalloc, which in
+ turn calls calloc, and calloc zero initializes the allocated memory.
+ In contrast, the new line gdb::def_vector<struct pst_map> specifically
+ does not initialize the underlying memory.
+
+ This is a problem because, later on in this same function, we
+ increment the n_globals field within 'struct pst_map' objects stored
+ in the vector. The incrementing is now being done from an
+ uninitialized starting point.
+
+ In this commit we switch from using gdb::def_vector to using
+ std::vector, this alone should be enough to ensure that the fields are
+ initialized to zero.
+
+ However, for extra clarity, I have also added initial values in the
+ 'struct pst_map' to make it crystal clear how the struct will start
+ up.
+
+ This issue was reported on the mailing list here:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-November/183693.html
+
+ Co-Authored-By: Lightning <lightningth@gmail.com>
+
+2021-11-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-23 Alexandra Hájková <ahajkova@redhat.com>
+
+ configure.ac: Check for the readline.h explicitly
+ When readline development package is missing make fails with
+ "configure: error: system readline is not new enough" which
+ might be confusing. This patch checks for the readline.h explicitly
+ and makes make to warn about the missing package.
+
+2021-11-23 Tamar Christina <tamar.christina@arm.com>
+
+ AArch64: Add support for AArch64 EFI (efi-*-aarch64).
+ This adds support for efi-*-aarch64 by virtue of adding a new PEI target
+ pei-aarch64-little. This is not a full target and only exists to support EFI
+ at this time.
+
+ This means that this target does not support relocation processing and is mostly
+ a container format. This format has been added to elf based aarch64 targets
+ such that efi images can be made natively on Linux.
+
+ However this target is not valid for use with gas but only with objcopy.
+
+ With these changes the resulting file is recognized as an efi image by
+ third party tools:
+
+ > pecli info hello.efi
+
+ Metadata
+ ================================================================================
+ MD5: 598c32a778b0f0deebe977fef8578c4e
+ SHA1: 4580121edd5cb4dc40f51b28f171fd15250df84c
+ SHA256: 3154bd7cf42433d1c957f6bf55a17ad8c57ed41b29df2d485703349fd6ff1d5c
+ Imphash:
+ Size: 47561 bytes
+ Type: PE32+ executable (EFI application) (stripped to external PDB), for MS Windows
+ Compile Time: 1970-01-01 00:00:00 (UTC - 0x0 )
+ Entry point: 0x2000 (section .text)
+
+ Sections
+ ================================================================================
+ Name RWX VirtSize VirtAddr RawAddr RawSize Entropy md5
+ .text R-X 0x5bb0 0x2000 0x400 0x5c00 6.39 551fbc264256a3f387de8a891500ae0d
+ .reloc R-- 0xc 0x8000 0x6000 0x200 0.02 0c45f6d812d079821c1d54c09ab89e1d
+ .data RW- 0x1d88 0x9000 0x6200 0x1e00 4.18 5d1137c09f01289dc62bf754f7290db3
+ .dynamic RW- 0xf0 0xb000 0x8000 0x200 0.34 5c94ed3206f05a277e6f04fbf131f131
+ .rela R-- 0xe58 0xc000 0x8200 0x1000 1.87 8b5c6bc30f3acb7ca7bf2e6789d68519
+ .dynsym R-- 0x138 0xd000 0x9200 0x200 0.96 bdcf5101da51aadc663ca8859f88138c
+
+ Imports
+ ================================================================================
+
+ Any magic number is based on the Microsoft PE specification [1].
+
+ [1] https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
+
+ bfd/ChangeLog:
+
+ 2021-10-21 Tamar Christina <tamar.christina@arm.com>
+
+ PR binutils/26206
+ * .gitignore (pe-aarch64igen.c): New.
+ * Makefile.am (pei-aarch64.lo, pe-aarch64igen.lo, pei-aarch64.c,
+ pe-aarch64igen.c): Add support.
+ * Makefile.in: Likewise.
+ * bfd.c (bfd_get_sign_extend_vma): Add pei-aarch64-little.
+ * coff-aarch64.c: New file.
+ * coffcode.h (coff_set_arch_mach_hook, coff_set_flags,
+ coff_write_object_contents) Add aarch64 (aarch64_pei_vec) support.
+ * config.bfd: Likewise.
+ * configure: Likewise.
+ * configure.ac: Likewise.
+ * libpei.h (GET_OPTHDR_IMAGE_BASE, PUT_OPTHDR_IMAGE_BASE,
+ GET_OPTHDR_SIZE_OF_STACK_RESERVE, PUT_OPTHDR_SIZE_OF_STACK_RESERVE,
+ GET_OPTHDR_SIZE_OF_STACK_COMMIT, PUT_OPTHDR_SIZE_OF_STACK_COMMIT,
+ GET_OPTHDR_SIZE_OF_HEAP_RESERVE, PUT_OPTHDR_SIZE_OF_HEAP_RESERVE,
+ GET_OPTHDR_SIZE_OF_HEAP_COMMIT, PUT_OPTHDR_SIZE_OF_HEAP_COMMIT,
+ GET_PDATA_ENTRY, _bfd_peAArch64_bfd_copy_private_bfd_data_common,
+ _bfd_peAArch64_bfd_copy_private_section_data,
+ _bfd_peAArch64_get_symbol_info, _bfd_peAArch64_only_swap_filehdr_out,
+ _bfd_peAArch64_print_private_bfd_data_common,
+ _bfd_peAArch64i_final_link_postscript,
+ _bfd_peAArch64i_only_swap_filehdr_out, _bfd_peAArch64i_swap_aouthdr_in,
+ _bfd_peAArch64i_swap_aouthdr_out, _bfd_peAArch64i_swap_aux_in,
+ _bfd_peAArch64i_swap_aux_out, _bfd_peAArch64i_swap_lineno_in,
+ _bfd_peAArch64i_swap_lineno_out, _bfd_peAArch64i_swap_scnhdr_out,
+ _bfd_peAArch64i_swap_sym_in, _bfd_peAArch64i_swap_sym_out,
+ _bfd_peAArch64i_swap_debugdir_in, _bfd_peAArch64i_swap_debugdir_out,
+ _bfd_peAArch64i_write_codeview_record,
+ _bfd_peAArch64i_slurp_codeview_record,
+ _bfd_peAArch64_print_ce_compressed_pdata): New.
+ * peXXigen.c (_bfd_XXi_swap_aouthdr_in, _bfd_XXi_swap_aouthdr_out,
+ pe_print_pdata, _bfd_XX_print_private_bfd_data_common,
+ _bfd_XX_bfd_copy_private_section_data, _bfd_XXi_final_link_postscript):
+ Support COFF_WITH_peAArch64,
+ * pei-aarch64.c: New file.
+ * peicode.h (coff_swap_scnhdr_in, pe_ILF_build_a_bfd, pe_ILF_object_p):
+ Support COFF_WITH_peAArch64.
+ (jtab): Add dummy entry that traps.
+ * targets.c (aarch64_pei_vec): New.
+
+ binutils/ChangeLog:
+
+ 2021-10-21 Tamar Christina <tamar.christina@arm.com>
+
+ PR binutils/26206
+ * NEWS: Add new support.
+ * objcopy.c (convert_efi_target): Add efi-*-aarch64 support.
+ * testsuite/binutils-all/aarch64/pei-aarch64-little.d: New test.
+ * testsuite/binutils-all/aarch64/pei-aarch64-little.s: New test.
+
+ include/ChangeLog:
+
+ 2021-10-21 Tamar Christina <tamar.christina@arm.com>
+
+ PR binutils/26206
+ * coff/aarch64.h: New file.
+ * coff/pe.h (IMAGE_FILE_MACHINE_ARM64): New.
+
+2021-11-23 Alan Modra <amodra@gmail.com>
+
+ binutils debuginfod test
+ A missing "return" resulted in this non-ELF fail:
+ x86_64-w64-mingw32 +FAIL: debuginfod (create separate debug info file)
+
+ Also, the debuginfod I have installed does not appear to handle
+ non-native ELF objects, so only run the test when native.
+
+ * testsuite/binutils-all/debuginfod.exp: Don't run test unless
+ native ELF.
+
+2021-11-23 Alan Modra <amodra@gmail.com>
+
+ Update bug reporting address
+ https://sourceware.org/bugzilla/ everywhere
+
+ bfd/
+ * configure.ac (ACX_BUGURL): Set to https://sourceware.org/bugzilla/
+ * po/Make-in (msgid-bugs-address): Likewise.
+ * README: Report bugs to the above.
+ * configure: Regenerate.
+ binutils/
+ * po/Make-in (msgid-bugs-address): Update.
+ gas/
+ * README: Update bug address. Delete mention of gcc.
+ * po/Make-in: Update bug address.
+ gold/
+ * po/Make-in: Update bug address.
+ gprof/
+ * po/Make-in: Update bug address.
+ ld/
+ * po/Make-in: Update bug address.
+ opcodes/
+ * po/Make-in: Update bug address.
+
+2021-11-23 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+
+ gdb: more compile fixes for gnu-nat.c
+ This fixes compile errors like
+
+ ../../gdb-11.1/gdb/gnu-nat.c: In function void add_task_commands():
+ ../../gdb-11.1/gdb/gnu-nat.c:3204:17: error: no matching function for call to add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**)
+ 3204 | &setlist);
+ | ^
+ In file included from ../../gdb-11.1/gdb/completer.h:21,
+ from ../../gdb-11.1/gdb/symtab.h:36,
+ from ../../gdb-11.1/gdb/infrun.h:21,
+ from ../../gdb-11.1/gdb/target.h:42,
+ from ../../gdb-11.1/gdb/inf-child.h:23,
+ from ../../gdb-11.1/gdb/gnu-nat.h:38,
+ from ../../gdb-11.1/gdb/gnu-nat.c:24:
+ ../../gdb-11.1/gdb/command.h:160:33: note: candidate: cmd_list_element* add_cmd(const char*, command_class, void (*)(const char*, int), const char*, cmd_list_element**)
+ 160 | extern struct cmd_list_element *add_cmd (const char *, enum command_class,
+ | ^~~~~~~
+ ../../gdb-11.1/gdb/command.h:161:30: note: no known conversion for argument 3 from cmd_list_element* to void (*)(const char*, int)
+ 161 | cmd_const_cfunc_ftype *fun,
+ | ~~~~~~~~~~~~~~~~~~~~~~~^~~
+ ../../gdb-11.1/gdb/command.h:167:33: note: candidate: cmd_list_element* add_cmd(const char*, command_class, const char*, cmd_list_element**)
+ 167 | extern struct cmd_list_element *add_cmd (const char *, enum command_class,
+ | ^~~~~~~
+ ../../gdb-11.1/gdb/command.h:167:33: note: candidate expects 4 arguments, 5 provided
+ ../../gdb-11.1/gdb/gnu-nat.c:3210:18: error: no matching function for call to add_cmd(const char [8], command_class, cmd_list_element*&, char*, cmd_list_element**)
+ 3210 | &showlist);
+ | ^
+
+ Change-Id: Ie9029363d3fb40e34e8f5b1ab503745bc44bfe3f
+
+2021-11-23 Andrea Monaco <andrea.monaco@autistici.org>
+
+ gnu-nat.c: fix calls to add_info_alias
+ Some time ago add_info_alias was changed (commit
+ e0f25bd9717c7973197095523db7c1cdc956cea2). These calls were not updated
+ and caused errors on compilation.
+
+ Change-Id: I354ae4e8b8926d785abc94ec7142471ffd76d2de
+
+2021-11-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-22 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: pass more const target_waitstatus by reference
+ While working on target_waitstatus changes, I noticed a few places where
+ const target_waitstatus objects could be passed by reference instead of
+ by pointers. And in some cases, places where a target_waitstatus could
+ be passed as const, but was not. Convert them as much as possible.
+
+ Change-Id: Ied552d464be5d5b87489913b95f9720a5ad50c5a
+
+2021-11-22 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: introduce target_waitkind_str, use it in target_waitstatus::to_string
+ I would like to print target_waitkind values in debug messages, so I
+ think that a target_waitkind-to-string function would be useful. While
+ at it, use it in target_waitstatus::to_string. This changes the output
+ of target_waitstatus::to_string a bit, but I think it is for the better.
+ The debug messages will show a string matching exactly the
+ target_waitkind enumerator (minus the TARGET_WAITKIND prefix).
+
+ As a convenience, make string_appendf return the same reference to
+ string it got as a parameter. This allows doing this:
+
+ return string_appendf (str, "foo");
+
+ ... keeping the code concise.
+
+ Change-Id: I383dffc9c78614e7d0668b1516073905e798eef7
+
+2021-11-22 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: rename target_waitstatus_to_string to target_waitstatus::to_string
+ Make target_waitstatus_to_string a "to_string" method of
+ target_waitstatus, a bit like we have ptid_t::to_string already. This
+ will save a bit of typing.
+
+ Change-Id: Id261b7a09fa9fa3c738abac131c191a6f9c13905
+
+2021-11-22 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Removed the redundant NULL pointer check in the riscv_update_subset.
+ If we always use the .option arch to call the riscv_update_subset, then
+ it is almost impossible that the input string will be NULL. Therefore,
+ just remove the redundant NULL pointer check in the riscv_update_subset.
+
+ bfd/
+ * elfxx-riscv.c (riscv_update_subset): Removed the redundant NULL
+ pointer check.
+
+2021-11-22 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Replace .option rvc/norvc with .option arch, +c/-c.
+ Since the .option rvc/norvc directives are obsolete, replace them with
+ the new proposed diretives: .option arch, +c/-c. And also reset the
+ riscv_opts.rvc flag for the .option arch directives.
+
+ gas/
+ * config/tc-riscv.c (s_riscv_option): Reset the riscv_opts.rvc
+ for the .option arch directives.
+ * testsuite/gas/riscv/align-1.s: Replace the obsolete .option
+ rvc/norvc with .option arch, +c/-c.
+ * testsuite/gas/riscv/c-add-addi.s: Likewise.
+ * testsuite/gas/riscv/c-nonzero-imm.s: Likewise.
+ * testsuite/gas/riscv/c-nonzero-reg.s: Likewise.
+ * testsuite/gas/riscv/c-zero-imm-64.s: Likewise.
+ * testsuite/gas/riscv/c-zero-imm.s: Likewise.
+ * testsuite/gas/riscv/c-zero-reg.s: Likewise.
+ * testsuite/gas/riscv/ext.s: Likewise.
+ * testsuite/gas/riscv/mapping-01.s: Likewise.
+ * testsuite/gas/riscv/mapping-02.s: Likewise.
+ * testsuite/gas/riscv/mapping-03.s: Likewise.
+ * testsuite/gas/riscv/mapping-04.s: Likewise.
+ * testsuite/gas/riscv/no-relax-align-2.s: Likewise.
+ * testsuite/gas/riscv/shamt-32.s: Likewise.
+ * testsuite/gas/riscv/shamt-64.s: Likewise.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix x86_64 x32 build
+ A build error on x86_64 with x32 abi was reported here (
+ https://sourceware.org/pipermail/gdb/2021-November/049787.html ):
+ ...
+ gdb/nat/amd64-linux-siginfo.c:280:42: error: \
+ 'struct compat_x32_siginfo_t::<unnamed union>::<unnamed>' has no member \
+ named 'si_addr_bnd'
+ 280 | #define cpt_si_lower _sifields._sigfault.si_addr_bnd._lower
+ | ^~~~~~~~~~~
+ gdb/nat/amd64-linux-siginfo.c:337:38: note: in expansion of macro 'cpt_si_lower'
+ 337 | to->cpt_si_lower = from_ptrace.cpt_si_lower;
+ | ^~~~~~~~~~~~
+ ...
+
+ The problem is that code added in commit d3d7d1ba3bb "[gdb/tdep] Handle
+ si_addr_bnd in compat_siginfo_from_siginfo" doesn't compile on an x86_64 x32
+ setup, because compat_x32_siginfo_t doesn't have the si_addr_bnd fields.
+
+ Fix this conservatively by disabling the code for x32.
+
+ Tested on x86_64-linux.
+
+2021-11-22 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: PR28610, Fix ASAN heap-buffer-overflow error in riscv_update_subset.
+ The architecture parser in riscv_update_subset shouldn't check (or access)
+ the pointer space which doesn't exist.
+
+ bfd/
+ pr 28610
+ * elfxx-riscv.c (riscv_update_subset): The architecture parser
+ shouldn't access the pointer space which doesn't exist.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Support .debug_line with DW_FORM_line_strp
+ I noticed a new gcc option -gdwarf64 and tried it out (using gcc 11.2.1).
+
+ With a test-case hello.c:
+ ...
+ int
+ main (void)
+ {
+ printf ("hello\n");
+ return 0;
+ }
+ ...
+ compiled like this:
+ ...
+ $ gcc -g -gdwarf64 ~/hello.c
+ ...
+ I ran into:
+ ...
+ $ gdb -q -batch a.out
+ DW_FORM_line_strp pointing outside of .debug_line_str section \
+ [in module a.out]
+ ...
+
+ Debugging gdb revealed that the string offset is:
+ ...
+ (gdb) up
+ objfile=0x182ab70, str_offset=1378684502312,
+ form_name=0xeae9b5 "DW_FORM_line_strp")
+ at src/gdb/dwarf2/section.c:208
+ 208 error (_("%s pointing outside of %s section [in module %s]"),
+ (gdb) p /x str_offset
+ $1 = 0x14100000128
+ (gdb)
+ ...
+ which is read when parsing a .debug_line entry at 0x1e0.
+
+ Looking with readelf at the 0x1e0 entry, we have:
+ ...
+ The Directory Table (offset 0x202, lines 2, columns 1):
+ Entry Name
+ 0 (indirect line string, offset: 0x128): /data/gdb_versions/devel
+ 1 (indirect line string, offset: 0x141): /home/vries
+ ...
+ which in a hexdump looks like:
+ ...
+ 0x00000200 1f022801 00004101 00000201 1f020f02
+ ...
+
+ What happens is the following:
+ - readelf interprets the DW_FORM_line_strp reference to .debug_line_str as
+ a 4 byte value, and sees entries 0x00000128 and 0x00000141.
+ - gdb instead interprets it as an 8 byte value, and sees as first entry
+ 0x0000014100000128, which is too big so it bails out.
+
+ AFAIU, gdb is wrong. It assumes DW_FORM_line_strp is 8 bytes on the basis
+ that the corresponding CU is 64-bit DWARF. However, the .debug_line
+ contribution has it's own initial_length field, and encodes there that it's
+ 32-bit DWARF.
+
+ Fix this by using the correct offset size for DW_FORM_line_strp references
+ in .debug_line.
+
+ Note: the described test-case does trigger this complaint (both with and
+ without this patch):
+ ...
+ $ gdb -q -batch -iex "set complaints 10" a.out
+ During symbol reading: intermixed 32-bit and 64-bit DWARF sections
+ ...
+
+ The reason that the CU has 64-bit dwarf is because -gdwarf64 was passed to
+ gcc. The reason that the .debug_line entry has 32-bit dwarf is because that's
+ what gas generates. Perhaps this is complaint-worthy, but I don't think it
+ is wrong.
+
+ Tested on x86_64-linux, using native and target board dwarf64.exp.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add target board dwarf64.exp
+ Add a new target board dwarf64.exp, that runs test with -gdwarf64.
+
+ Tested on x86_64-linux.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Support .debug_line v5 in dwarf assembler
+ The v5 section version for .debug_line has:
+ - two new fields address_size and segment_selector_size
+ - a different way to encode the directory and filename tables.
+
+ Add support for this in the dwarf assembler.
+
+ For now, make the v5 directory and filename tables work with the v4 type of
+ specification in the test-cases by adding duplicate entries at position 0.
+
+ This will need to be properly fixed with an intrusive fix that changes how
+ directory and filename entries are specified in the test-cases, f.i:
+ ...
+ set diridx [include_dir "${srcdir}/${subdir}"]
+ set fileidx [file_name "$srcfile" $diridx]
+ ...
+
+ Tested on x86_64-linux.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Factor out _line_finalize_header
+ Rather than generate dwarf immediately in procs include_dir and file_name,
+ postpone generation and store the data in variables. Then handle the
+ generation in a new proc _line_finalize_header.
+
+ Tested on x86-64-linux.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Support .debug_line v4 in dwarf assembler
+ The .debug_line header got a new field in v4:
+ maximum_operations_per_instruction.
+
+ Generate this field in the dwarf assembler, for now hardcoding the value to 1,
+ meaning non-VLIW.
+
+ Tested on x86_64-linux.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add test-case gdb.dwarf2/dw2-lines.exp
+ Add a new test-case gdb.dwarf2/dw2-lines.exp that tests various .debug_line
+ sections.
+
+ Tested on x86_64-linux.
+
+2021-11-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Speed up MACRO_AT_* calls
+ Currently, for each MACRO_AT_range or MACRO_AT_func in dwarf assembly the
+ following is done:
+ - $srcdir/$subdir/$srcfile is compiled to an executable using
+ flags "debug"
+ - a new gdb instance is started
+ - the new executable is loaded.
+
+ This is inefficient, because the executable is identical within the same
+ Dwarf::assemble call.
+
+ Share the gdb instance in the same Dwarf::assemble invocation, which speeds
+ up a make check with RUNTESTFLAGS like this to catch all dwarf assembly
+ test-cases:
+ ...
+ rtf=$(echo $(cd src/gdb/testsuite; find gdb.* -type f -name "*.exp" \
+ | xargs grep -l Dwarf::assemble))
+ ...
+ from:
+ ...
+ real 1m39.916s
+ user 1m25.668s
+ sys 0m21.377s
+ ...
+ to:
+ ...
+ real 1m29.512s
+ user 1m17.316s
+ sys 0m19.100s
+ ...
+
+ Tested on x86_64-linux.
+
+2021-11-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-21 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Remove duplicates in gdb.base/catch-signal.exp
+ When running the testsuite I have the following:
+
+ Running .../gdb/testsuite/gdb.base/catch-signal.exp ...
+ DUPLICATE: gdb.base/catch-signal.exp: SIGHUP: continue
+ DUPLICATE: gdb.base/catch-signal.exp: SIGHUP: continue
+ DUPLICATE: gdb.base/catch-signal.exp: 1: continue
+ DUPLICATE: gdb.base/catch-signal.exp: 1: continue
+ DUPLICATE: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+ DUPLICATE: gdb.base/catch-signal.exp: SIGHUP SIGUSR2: continue
+
+ This patch removes DUPLICATE in gdb.base/catch-signal.exp by explicitly
+ giving names to the offending 'gdb_test "continue"' statements to make
+ them distinct.
+
+ Tested on x86_64-linux.
+
+2021-11-21 Mike Frysinger <vapier@gentoo.org>
+
+ sim: v850: fix cpu_option testsuite handling
+ The v850 testsuite code has been testing the $opt variable, but this
+ was never actually set anywhere globally or v850-specific. Instead,
+ this was a random variable leaking out of the sh testsuite code. As
+ far as I can tell, it has always been this way. That means the code
+ only ever tested the v850 cpu target (which is the default).
+
+ This failure can be easily seen in practice by running the v850 code
+ in isolation and seeing it crash:
+ $ runtest v850/allinsns.exp
+ ...
+ Running target unix
+ Using /usr/share/dejagnu/baseboards/unix.exp as board description file for target.
+ Using /usr/share/dejagnu/config/unix.exp as generic interface file for target.
+ Using ../../../sim/testsuite/config/default.exp as tool-and-target-specific interface file.
+ WARNING: Assuming target board is the local machine (which is probably wrong).
+ You may need to set your DEJAGNU environment variable.
+ Running ../../../sim/testsuite/v850/allinsns.exp ...
+ ERROR: tcl error sourcing ../../../sim/testsuite/v850/allinsns.exp.
+ ERROR: tcl error code TCL LOOKUP VARNAME opt
+ ERROR: can't read "opt": no such variable
+ while executing
+ "switch -regexp -- $opt {
+
+ Backing up a bit, the reason for this logic in the first place is
+ because the common sim testsuite code makes an assumption about the
+ assembler options with cpu_option -- the option and its value are
+ always separated by an =. This is not the case with v850. So tweak
+ the core sim logic a bit to support omitting the = so that we can
+ switch v850 to the standard all_machs setting and avoid opt entirely.
+
+2021-11-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-20 Jeff Law <jeffreyalaw@gmail.com>
+
+ Fix intermittent failures on the H8, particularly H8/SX tests.
+ The upstream GCC tester has showed spurious execution failures on the
+ H8 target for the H8/SX multilibs. I suspected memory corruption or an
+ uninitialized variable early as the same binary would sometimes work and
+ sometimes it got the wrong result. Worse yet, the point where the test
+ determined it was getting the wrong result would change.
+
+ Because it only happened on the H8/SX variant I was able to zero in on
+ the "mova" support and the "short form" of those instructions in particular.
+
+ As the code stands it checks if code->op3.type == 0 to try and identify cases
+ where op3 wasn't filled in and thus we've got the short form of the mova
+ instruction.
+
+ But for the short-form of those instructions we never set any of the "op3"
+ data structure. We get whatever was lying around -- it's usually zero and
+ thus things usually work, but if the stale data was nonzero, then we'd
+ fail to recognize the instruction as a short-form and fail to set up the
+ various fields appropriately.
+
+ I initially initialized the op3.type field to zero, but didn't like that
+ because it was inconsistent with how other operands were initialized.
+ Bringing consistency meant using -1 as the initializer value and adjusting
+ the check for short form mova appropriately.
+
+ I've had this in the upstream GCC tester for perhaps a year at this point
+ and haven't seen any of the intermittent failures again.
+
+2021-11-20 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbsupport: fix array-view compilation with c++11 && _GLIBCXX_DEBUG
+ When building with -std=c++11 and -D_GLIBCXX_DEBUG=1, we get some errors
+ like:
+
+ CXX unittests/array-view-selftests.o
+ In file included from /home/smarchi/src/binutils-gdb/gdb/utils.h:25,
+ from /home/smarchi/src/binutils-gdb/gdb/defs.h:630,
+ from /home/smarchi/src/binutils-gdb/gdb/unittests/array-view-selftests.c:20:
+ /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/array-view.h: In instantiation of constexpr gdb::array_view<T> gdb::array_view<T>::slice(gdb::array_view<T>::size_type, gdb::array_view<T>::size_type) const [with T = unsigned char; gdb::array_view<T>::size_type = long unsigned int:
+ /home/smarchi/src/binutils-gdb/gdb/unittests/array-view-selftests.c:532:29: required from here
+ /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/array-view.h:192:3: error: body of constexpr function constexpr gdb::array_view<T> gdb::array_view<T>::slice(gdb::array_view<T>::size_type, gdb::array_view<T>::size_type) const [with T = unsigned char; gdb::array_view<T>::size_type = long unsigned int not a return-statement
+ 192 | }
+ | ^
+
+ This is because constexpr functions in c++11 can only consist of a
+ single return statement, so we can't have the gdb_assert in there. Make
+ the gdb_assert presence conditional to the __cplusplus version, to
+ enable it only for c++14 and later.
+
+ Change-Id: I2ac33f7b4bd1765ddc3ac8d07445b16ac1f340f0
+
+2021-11-20 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Check if libsource-highlight is usable
+ When building gdb with g++ 4.8.5, I ran into:
+ ...
+ ld: source-cache.o: in function `source_cache::ensure(symtab*)':
+ source-cache.c:207: undefined reference to \
+ srchilite::SourceHighlight::SourceHighlight(std::string const&)
+ ...
+
+ [ I configured gdb without explicit settings related to source-highlight, so
+ we're excercising the enable_source_highlight=auto scenario. ]
+
+ The problem is that:
+ - the source-highlight library is build with system compiler
+ g++ 7.5.0 which uses the new libstdc++ library abi (see
+ https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html )
+ - gdb is build using g++ 4.8.5 which uses the old abi.
+
+ [ There's a compatibility macro _GLIBCXX_USE_CXX11_ABI, but that doesn't work
+ for this case. Instead, it enables the opposite case where the
+ source-highlight library is build with g++ 4.8.5 and gdb is build with
+ g++ 7.5.0. ]
+
+ Fix this by checking whether the source-highlight library is usable during
+ configuration.
+
+ In the enable_source_highlight=auto scenario, this allows the build to skip
+ the unusable library and finish successfully.
+
+ In the enable_source_highlight=yes scenario, this allows the build to error
+ out earlier.
+
+ Tested on x86_64-linux.
+
+2021-11-20 Clément Chigot <clement.chigot@atos.net>
+
+ bfd: remove wrong comment in xcofflink.c
+ This comment was long time ago associated to the function
+ "xcoff_build_ldsyms" which have since been replaced by
+ "xcoff_build_ldsym".
+
+ * xcofflink.c: Remove wrong comment.
+
+2021-11-20 Mike Frysinger <vapier@gentoo.org>
+
+ sim: bfin: fix short --env usage in testsuite
+ Now that we have more than one option that matches "--env", the test
+ config here doesn't work. Use the explicit --environment.
+
+2021-11-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-19 H.J. Lu <hjl.tools@gmail.com>
+
+ elfedit: Align --[in|out]put-abiversion usage
+ Align
+
+ --input-abiversion [0-255] Set input ABIVERSION
+ --output-abiversion [0-255] Set output ABIVERSION
+
+ instead of
+
+ --input-abiversion [0-255]
+ Set input ABIVERSION
+ --output-abiversion [0-255]
+ Set output ABIVERSION
+
+ * elfedit.c (usage): Align --[in|out]put-abiversion usage.
+
+2021-11-19 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle runto fail in gdb.mi/mi-var-cp.exp
+ On OBS I ran into:
+ ...
+ PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:81 (set breakpoint)
+ UNRESOLVED: gdb.mi/mi-var-cp.exp: unable to start target
+ ...
+ followed by 81 FAILs and two more UNRESOLVEDs.
+
+ I didn't manage to reproduce this, but I did notice that the initial
+ problem causing the UNRESOLVED caused all subsequent UNRESOLVEDs and FAILs.
+
+ I emulated the problem by commenting out the send_gdb "run\n" in
+ mi_run_cmd_full.
+
+ Fix this by:
+ - handling mi_run_cmd failure in mi_get_inline_test
+ - handling mi_run_inline_test failure in gdb.mi/mi-var-cp.exp, and
+ other test-cases using mi_get_inline_test
+
+ Tested on x86_64-linux.
+
+2021-11-19 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix 64-bit dwarf test-cases with -m32
+ When running test-case gdb.dwarf2/loc-sec-offset.exp with target board -m32,
+ I run into:
+ ...
+ builtin_spawn -ignore SIGHUP gcc -fno-stack-protector -m32 \
+ -fdiagnostics-color=never -c -o loc-sec-offset-dw641.o \
+ loc-sec-offset-dw64.S^M
+ as: loc-sec-offset-dw641.o: unsupported relocation type: 0x1^M
+ loc-sec-offset-dw64.S: Assembler messages:^M
+ loc-sec-offset-dw64.S:29: Error: cannot represent relocation type \
+ BFD_RELOC_64^M
+ ...
+
+ Looking at line 29, we have:
+ ...
+ .8byte .Labbrev1_begin /* Abbrevs */
+ ...
+
+ It would be nice if the assembler could handle this somehow. But I guess
+ it's not unreasonable that an assembler for a 32-bit architecture will object
+ to handling 64-bit labels.
+
+ Instead, work around this in the dwarf assembler by emitting:
+ ...
+ .4byte .Labbrev1_begin /* Abbrevs (lsw) */
+ .4byte 0 /* Abbrevs (msw) */
+ ...
+
+ Tested on x86_64-linux with target board unix/-m32.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28383
+
+2021-11-19 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.threads/thread-specific-bp.exp
+ On OBS I ran into a failure in test-case gdb.threads/thread-specific-bp.exp:
+ ...
+ (gdb) PASS: gdb.threads/thread-specific-bp.exp: non-stop: continue to end
+ info breakpoint^M
+ Num Type Disp Enb Address What^M
+ 1 breakpoint keep y 0x0000555555555167 in main at $src:36^M
+ breakpoint already hit 1 time^M
+ 2 breakpoint keep y 0x0000555555555151 in start at $src:23^M
+ breakpoint already hit 1 time^M
+ 3 breakpoint keep y 0x0000555555555167 in main at $src:36 thread 2^M
+ stop only in thread 2^M
+ 4 breakpoint keep y 0x000055555555515c in end at $src:29^M
+ breakpoint already hit 1 time^M
+ (gdb) [Thread 0x7ffff7db1640 (LWP 19984) exited]^M
+ Thread-specific breakpoint 3 deleted - thread 2 no longer in the thread list.^M
+ FAIL: gdb.threads/thread-specific-bp.exp: non-stop: \
+ thread-specific breakpoint was deleted (timeout)
+ ...
+
+ Fix this by waiting for the "[Thread 0x7ffff7db1640 (LWP 19984) exited]"
+ message before issuing the "info breakpoint command".
+
+ Tested on x86_64-linux.
+
+2021-11-19 Christina Schimpe <christina.schimpe@intel.com>
+
+ gdb/testsuite: Extend tests for print of cv qualifiers
+ This commit supplements whatis and ptype command tests for print of
+ const-volatile qualifiers.
+
+ gdb/testsuite/ChangeLog:
+ 2021-11-16 Christina Schimpe <christina.schimpe@intel.com>
+
+ * gdb.cp/ptype-cv-cp.cc: New const and volatile typedef
+ variables.
+ * gdb.cp/ptype-cv-cp.exp: Add new tests.
+
+2021-11-19 Christina Schimpe <christina.schimpe@intel.com>
+
+ gdb: Print cv qualifiers if class attributes are substituted
+ Make ptype print const/volatile qualifiers when template or typedef
+ attributes are substituted.
+
+ For a programm like
+ ~~~
+ template<typename DataT>
+ class Cfoo
+ {
+ typedef float myfloat;
+ public:
+ DataT me0;
+ const DataT me1=1;
+ const myfloat me2=2.0;
+ };
+
+ int main()
+ {
+ Cfoo<int> cfoo;
+ return 0;
+ }
+ ~~~
+
+ gdb outputs the following type for cfoo's attributes:
+
+ ~~~
+ (gdb) b 14
+ Breakpoint 1 at 0x1170: file tmp.cc, line 14.
+ (gdb) run
+ Starting program: /tmp
+
+ Breakpoint 1, main () at tmp.cc:14
+ 14 return 0;
+ (gdb) ptype cfoo
+ type = class Cfoo<int> [with DataT = int] {
+ public:
+ DataT me0;
+ DataT me1;
+ myfloat me2;
+
+ private:
+ typedef float myfloat;
+ }
+
+ ~~~
+
+ The cv qualifiers (const in this case) are ignored for me1 and me2.
+
+ After:
+ ~~~
+ (gdb) ptype cfoo
+ type = class Cfoo<int> [with DataT = int] {
+ public:
+ DataT me0;
+ const DataT me1;
+ const myfloat me2;
+
+ private:
+ typedef float myfloat;
+ }
+ ~~~
+
+ gdb/ChangeLog:
+ 2021-11-16 Christina Schimpe <christina.schimpe@intel.com>
+
+ * gdb/c-typeprint.c: Print cv qualifiers in case of parameter
+ substitution.
+
+ gdb/testsuite/ChangeLog:
+ 2021-11-16 Christina Schimpe <christina.schimpe@intel.com>
+
+ * gdb.cp/templates.cc: New template class Cfoo with const,
+ template, typdef and integer attributes.
+ * gdb.cp/templates.exp: Add new test using ptype and ptype/r
+ commmands for template class CFoo.
+
+2021-11-19 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Support new .option arch directive.
+ https://github.com/riscv/riscv-asm-manual/pull/67
+
+ Format:
+ .option arch, +<extension><version>, ...
+ .option arch, -<extension>
+ .option arch, =<ISA string>
+
+ The new direcitve is used to enable/disable extensions for the specific
+ code region. For example,
+
+ .attribute arch, "rv64ic" # arch = rv64i2p0_c2p0
+ .option push
+ .option arch, +d2p0, -c # arch = rv64i2p0_f2p0_d2p0, f is added implied
+ .option arch, =rv32gc # arch = rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0
+ .option pop # arch = rv64i2p0_c2p0
+
+ Note that,
+ 1. ".option rvc/norvc" have the same behavior as ".option arch +c/-c".
+ 2. ".option arch -i" is illegal, since we cannot remove base i extension.
+ 3. If arch=rv64i2p0, then ".option arch, +i3p0" will update the i's version
+ from 2.0 to 3.0.
+ 4. If arch=rv64i3p0, then ".option arch, +i" will update the i's version
+ from 2.0 to the default one according to the chosen isa spec.
+
+ bfd/
+ * elfxx-riscv.c (riscv_add_subset): If the subset is already added,
+ and the new versions are not RISCV_UNKNOWN_VERSION, then update the
+ versions to the subset list.
+ (riscv_copy_subset): New function. Copy the subset from list.
+ (riscv_copy_subset_list): New function. Return the new copyed list.
+ (riscv_update_subset): Updated to make .option arch directives workable.
+ * elfxx-riscv.h: Updated.
+ gas/
+ * config/tc-riscv.c (riscv_subsets): Defined as a pointer.
+ (riscv_rps_as): Init the subset_list to NULL, we will set it later
+ once riscv_opts_stack is created or updated.
+ (struct riscv_option_stack, riscv_opts_stack): Moved forward.
+ (riscv_set_arch): Updated.
+ (s_riscv_option): Support new .option arch directive, to add, remove
+ or update subsets for the specific code region.
+ (riscv_write_out_attrs): Updated.
+ * doc/c-riscv.texi: Added document for new .option arch directive.
+ * testsuite/gas/riscv/option-arch-01a.d: New testcase.
+ * testsuite/gas/riscv/option-arch-01b.d: Likewise.
+ * testsuite/gas/riscv/option-arch-01.s: Likewise..
+ * testsuite/gas/riscv/option-arch-02.d: Likewise.
+ * testsuite/gas/riscv/option-arch-02.s: Likewise.
+ * testsuite/gas/riscv/option-arch-fail.d: Likewise.
+ * testsuite/gas/riscv/option-arch-fail.l: Likewise.
+ * testsuite/gas/riscv/option-arch-fail.s: Likewise.
+
+2021-11-19 Alan Modra <amodra@gmail.com>
+
+ Re: Add multibyte character warning option to the assembler.
+ On hppa*-hp-hpux* run_dump_test edits the test file, adjusting .comm
+ directives to suit those target's unusual syntax. Thus gas is passed
+ a temporary file name.
+
+ * testsuite/gas/all/multibyte1.l: Ignore file name.
+
+2021-11-19 Mike Frysinger <vapier@gentoo.org>
+
+ sim: install various doc files
+
+2021-11-19 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Support STO_RISCV_VARIANT_CC and DT_RISCV_VARIANT_CC.
+ This is the original discussion,
+ https://github.com/riscv/riscv-elf-psabi-doc/pull/190
+
+ And here is the glibc part,
+ https://sourceware.org/pipermail/libc-alpha/2021-August/129931.html
+
+ For binutils part, we need to support a new direcitve: .variant_cc.
+ The function symbol marked by .variant_cc means it need to be resolved
+ directly without resolver for dynamic linker. We also add a new dynamic
+ entry, STO_RISCV_VARIANT_CC, to indicate there are symbols with the
+ special attribute in the dynamic symbol table of the object.
+
+ I heard that llvm already have supported this in their mainline, so
+ I think it's time to commit this.
+
+ bfd/
+ * elfnn-riscv.c (riscv_elf_link_hash_table): Added variant_cc
+ flag. It is used to check if relocations for variant CC symbols
+ may be present.
+ (allocate_dynrelocs): If the symbol has STO_RISCV_VARIANT_CC
+ flag, then raise the variant_cc flag of riscv_elf_link_hash_table.
+ (riscv_elf_size_dynamic_sections): Added dynamic entry for
+ variant_cc.
+ (riscv_elf_merge_symbol_attribute): New function, used to merge
+ non-visibility st_other attributes, including STO_RISCV_VARIANT_CC.
+ binutils/
+ * readelf.c (get_riscv_dynamic_type): New function.
+ (get_dynamic_type): Called get_riscv_dynamic_type for riscv targets.
+ (get_riscv_symbol_other): New function.
+ (get_symbol_other): Called get_riscv_symbol_other for riscv targets.
+ gas/
+ * config/tc-riscv.c (s_variant_cc): Marked symbol that it follows a
+ variant CC convention.
+ (riscv_elf_copy_symbol_attributes): Same as elf_copy_symbol_attributes,
+ but without copying st_other. If a function symbol has special st_other
+ value set via directives, then attaching an IFUNC resolver to that symbol
+ should not override the st_other setting.
+ (riscv_pseudo_table): Support variant_cc diretive.
+ * config/tc-riscv.h (OBJ_COPY_SYMBOL_ATTRIBUTES): Defined.
+ * testsuite/gas/riscv/variant_cc-set.d: New testcase.
+ * testsuite/gas/riscv/variant_cc-set.s: Likewise.
+ * testsuite/gas/riscv/variant_cc.d: Likewise.
+ * testsuite/gas/riscv/variant_cc.s: Likewise.
+ include/
+ * elf/riscv.h (DT_RISCV_VARIANT_CC): Defined to (DT_LOPROC + 1).
+ (STO_RISCV_VARIANT_CC): Defined to 0x80.
+ ld/
+ * testsuite/ld-riscv-elf/variant_cc-1.s: New testcase.
+ * testsuite/ld-riscv-elf/variant_cc-2.s: Likewise.
+ * testsuite/ld-riscv-elf/variant_cc-now.d: Likewise.
+ * testsuite/ld-riscv-elf/variant_cc-r.d: Likewise.
+ * testsuite/ld-riscv-elf/variant_cc-shared.d: Likewise.
+ * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.
+
+2021-11-19 Mike Frysinger <vapier@gentoo.org>
+
+ sim: use program_transform_name for libsim
+ Instead of always using target_alias as a prefix on the name, use
+ program_transform_name instead so that the library is scoped in the
+ same way as the run program.
+
+ sim: avoid installing headers when there is no sim
+ If we aren't building any sims, don't install the sim headers as they
+ won't be useful to anyone.
+
+2021-11-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-18 Kevin Buettner <kevinb@redhat.com>
+
+ dprintf-execution-x-script.exp: Adjust test for native-extended-gdbserver
+ Without this commit, doing...
+
+ make check RUNTESTFLAGS="--target_board=native-extended-gdbserver" \
+ TESTS="gdb.base/dprintf-execution-x-script.exp"
+
+ ...will show one failure.
+
+ Here's a snippet from gdb.log showing the circumstances - I've trimmed
+ the paths for readability:
+
+ builtin_spawn gdb -nw -nx -data-directory data-directory -iex set height 0 -iex set width 0 -iex set auto-connect-native-target off -iex set sysroot -ex set height unlimited -x testsuite/gdb.base/dprintf-execution-x-script.gdb --args testsuite/outputs/gdb.base/dprintf-execution-x-script/dprintf-execution-x-script
+ ...
+ Reading symbols from testsuite/outputs/gdb.base/dprintf-execution-x-script/dprintf-execution-x-script...
+ Dprintf 1 at 0x40116e: file testsuite/gdb.base/dprintf-execution-x-script.c, line 38.
+ Breakpoint 2 at 0x40113a: file testsuite/gdb.base/dprintf-execution-x-script.c, line 26.
+ testsuite/gdb.base/dprintf-execution-x-script.gdb:21: Error in sourced command file:
+ Don't know how to run. Try "help target".
+ (gdb) FAIL: gdb.base/dprintf-execution-x-script.exp: load and run script with -x
+ ...
+ GNU gdb (GDB) 12.0.50.20211118-git
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ ...
+ (gdb) set height 0
+ (gdb) set width 0
+ (gdb) builtin_spawn gdbserver/gdbserver --once --multi localhost:2346
+ Listening on port 2346
+ target extended-remote localhost:2346
+ Remote debugging using localhost:2346
+ ...
+ [Tests after this point will pass.]
+
+ Note that the command which spawns gdb prevents the gdb script from
+ using the native target via "-iex set auto-connect-native-target off".
+
+ Moreover, the script in question contains a "run" command, so GDB
+ doesn't know how to run (since it's prevented from using the native
+ target and no alternate "target" command has been issued. But, once
+ GDB finishes starting up, the test will spawn a gdbserver and then
+ connect to it. The other (two) tests after this point both pass.
+
+ I've fixed this by using gdb_test_multiple instead of gdb_test.
+ When a "Don't know how to run message" is received, the test is
+ unsupported.
+
+ I've also added a comment explaining the reason for needing to check
+ for "Don't know how to run" despite bailing out at the top of the test
+ via:
+
+ if ![target_can_use_run_cmd] {
+ return 0
+ }
+
+2021-11-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix array-view-selftests.c build with g++ 4.8
+ When building with g++ 4.8, I get:
+
+ CXX unittests/array-view-selftests.o
+ /home/smarchi/src/binutils-gdb/gdb/unittests/array-view-selftests.c:123:42: error: expected 'class' before 'Container'
+ template<template<typename ...> typename Container>
+ ^
+
+ I am no C++ template expert, but it looks like if I change "typename" for
+ "class", as the compiler kind of suggests, the code compiles.
+
+ Change-Id: I9c3edd29fb2b190069f0ce0dbf3bc3604d175f48
+
+2021-11-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix ia64-tdep.c build with g++ 4.8
+ When building with g++ 4.8, I get:
+
+ CXX ia64-tdep.o
+ /home/smarchi/src/binutils-gdb/gdb/ia64-tdep.c:3862:1: error: could not convert '{ia64_allocate_new_rse_frame, ia64_store_argument_in_slot, ia64_set_function_addr}' from '<brace
+ -enclosed initializer list>' to 'const ia64_infcall_ops'
+ };
+ ^
+
+ This happens since commit 345bd07cce3 ("gdb: fix gdbarch_tdep ODR
+ violation"), which added default values for ia64_infcall_ops fields. It
+ looks like g++ 4.8 doesn't like initializing the ia64_infcall_ops object
+ using the brace-enclosed initializer list when the ia64_infcall_ops
+ fields are assigned default values.
+
+ Later compilers don't have a problem with that, so I suppose that the
+ code is correct, but still, change it to make gcc 4.8 happy. Don't
+ initialize the fields of ia64_infcall_ops directly, instead
+ default-initialize ia64_gdbarch_tdep::infcall_ops.
+
+ Change-Id: I35e3a61abd7b7bbcafe6cb207078c738c5266d76
+
+2021-11-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: move AIX_TEXT_SEGMENT_BASE to rs6000-aix-tdep.c, remove rs6000-tdep.h
+ The contents of rs6000-tdep.h (AIX_TEXT_SEGMENT_BASE) is AIX-specific,
+ so I thought that this file should be named rs6000-aix-tdep.h. But
+ there's already a rs6000-aix-tdep.h, so then I though
+ AIX_TEXT_SEGMENT_BASE should simply be moved there, and rs6000-tdep.h
+ deleted. But then I realized that AIX_TEXT_SEGMENT_BASE is only used in
+ rs6000-aix-tdep.c, so move it to the beginning of that file.
+
+ Change-Id: Ia212c6fae202f31aedb46575821cd642beeda7a3
+
+2021-11-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: rename rs6000-nat.c to rs6000-aix-nat.c
+ This file seems to be AIX-specific, according to its contents and
+ configure.nat. Rename it to rs6000-aix-nat.c, to make that clear (and
+ to follow the convention).
+
+ Change-Id: Ib418dddc6b79b2e28f64431121742b5e87f5f4f5
+
+2021-11-18 Tom de Vries <tdevries@suse.de>
+
+ [gdb/doc] Fix negative repeat count examining memory example
+ The documentation for the examining memory command x contains an example:
+ ...
+ You can also specify a negative repeat count to examine memory backward from
+ the given address. For example, 'x/-3uh 0x54320' prints three halfwords (h)
+ at 0x54314, 0x54328, and 0x5431c.
+ ...
+
+ The 0x54328 looks like a typo, which was intended to be 0x54318.
+
+ But the series uses a 4-byte distance, while the halfword size used in the
+ command means a 2-byte distance, so the series should be:
+ ...
+ 0x5431a, 0x5431c, and 0x5431e.
+ ...
+
+ Fix this by updating the addresses in the example accordingly.
+
+ Reported here ( https://sourceware.org/pipermail/gdb/2021-November/049784.html
+ ).
+
+2021-11-18 Nick Clifton <nickc@redhat.com>
+
+ Add multibyte character warning option to the assembler.
+ * as.c (parse_args): Add support for --multibyte-handling.
+ * as.h (multibyte_handling): Declare.
+ * app.c (scan_for_multibyte_characters): New function.
+ (do_scrub_chars): Call the new function if multibyte warning is
+ enabled.
+ * input-scrub,c (input_scrub_next_buffer): Call the multibyte
+ scanning function if multibyte warnings are enabled.
+ * symbols.c (struct symbol_flags): Add multibyte_warned bit.
+ (symbol_init): Call the multibyte scanning function if multibyte
+ symbol warnings are enabled.
+ (S_SET_SEGMENT): Likewise.
+ * NEWS: Mention the new feature.
+ * doc/as.texi: Document the new feature.
+ * testsuite/gas/all/multibyte.s: New test source file.
+ * testsuite/gas/all/multibyte1.d: New test driver file.
+ * testsuite/gas/all/multibyte1.l: New test expected output.
+ * testsuite/gas/all/multibyte2.d: New test driver file.
+ * testsuite/gas/all/multibyte2.l: New test expected output.
+ * testsuite/gas/all/gas.exp: Run the new tests.
+
+2021-11-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: include gdbarch.h in all files extending gdbarch_tdep
+ Commit 345bd07cce33 ("gdb: fix gdbarch_tdep ODR violation") made a bunch
+ of files define a *_gdbarch_tdep class that inherits from a gdbarch_tdep
+ base. But some of these files don't include gdbarch.h, where
+ gdbarch_tdep is defined. This may cause build errors if gdbarch.h isn't
+ already included by chance by some other header file. Avoid this by
+ making them include gdbarch.h.
+
+ Change-Id: If433d302007e274daa4f656cfc94f769cf1aa68a
+
+2021-11-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: make gdb_assert_not_reached accept a format string
+ Change gdb_assert_not_reached to accept a format string plus
+ corresponding arguments. This allows giving more precise messages.
+
+ Because the format string passed by the caller is prepended with a "%s:"
+ to add the function name, the callers can no longer pass a translated
+ string (`_(...)`). Make the gdb_assert_not_reached include the _(),
+ just like the gdb_assert_fail macro just above.
+
+ Change-Id: Id0cfda5a57979df6cdaacaba0d55dd91ae9efee7
+
+2021-11-18 Carl Love <cel@us.ibm.com>
+
+ gdb fix for catch-syscall.exp
+ Remove check_continue "execve" from Proc test_catch_syscall_execve.
+
+ The check_continue proceedure checs that the command, execve, starts and
+ checks for the return from the command. The execve command starts a new
+ program and thus the return from the command causing the test to fail.
+
+ The call to proc check_continue "execve" is removed and replaced with
+ just the call to check_call_to_syscall "execve" to verify the command
+ executed. The next test in proc test_catch_syscall_execve verifies that
+ the new program started and hit the break point in main.
+
+ Update the check for the PowerPC architecture. Power Little Endian systems
+ include "le" in the name. The istarget "power64-*-linux*" check fails to
+ match LE sytems. The expected string is updated to capture both Big Endian
+ and Little Endian systems. Power 10 LE istarget prints as:
+ powerpc64le-unknown-linux-gnu.
+
+ This patch fixes three failures and the error:
+
+ ERROR: can't read "arch1": no such variable
+
+ Patch tested on Power 10 ppc64le GNU/Linux platform.
+
+2021-11-18 Carl Love <cel@us.ibm.com>
+
+ gdb: PowerPC fix gdb.base/break-interp.exp
+ This patch fixes eight test failures on PowerPC for the test
+ gdb.base/break-interp.exp. The patch adds a funtion and registers it to
+ setup the displaced stepping for ppc-linux platform. The patch moves the
+ struct ppc_inferior_data to the ppc-tdep.h include file to make it visible
+ to the ppc-linux-tdep.c and rs6000-tdep.c files. Additionally the function
+ get_ppc_per_inferior is made external in ppc-tdep.h to make it visible in
+ both files.
+
+ Tested on Power 10 ppc64le-linux with no regressions.
+
+2021-11-18 Carl Love <cel@us.ibm.com>
+
+ gdb fix PowerPC test gdb.arch/ppc-longdouble.exp
+ The test complains of duplicate tests.
+
+ DUPLICATE: gdb.arch/ppc-longdouble.exp: continue to breakpoint: return
+
+ The do_test calls gdb_continue_to_breakpoint "return". The duplicates
+ are the result of calling do_test three times with different arguments.
+
+ This patch fixes the duplicate tests by adding $name to the
+ gdb_continue_to_breakpoint argument.
+
+ Patch tested on Power 10 ppc64le GNU/Linux, no duplicate tests reported,
+ no new regression errors.
+
+2021-11-18 H.J. Lu <hjl.tools@gmail.com>
+
+ elf/x86: Issue an error on discarded output .plt section
+ Issue an error, instead of crash, on discarded output .plt section.
+
+ bfd/
+
+ PR ld/28597
+ * elf32-i386.c (elf_i386_finish_dynamic_sections): Issue an error
+ on discarded output .plt section.
+ * elf64-x86-64.c (elf_x86_64_finish_dynamic_sections): Likewise.
+
+ ld/
+
+ PR ld/28597
+ * testsuite/ld-elf/pr28597.d: New file.
+ * testsuite/ld-elf/pr28597.s: Likewise.
+ * testsuite/ld-elf/pr28597.t: Likewise.
+
+2021-11-18 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add missing wait in gdb.base/signals-state-child.exp
+ On OBS I ran into:
+ ...
+ (gdb) shell diff -s outputs/gdb.base/signals-state-child/standalone.txt \
+ outputs/gdb.base/signals-state-child/gdb.txt^M
+ diff: outputs/gdb.base/signals-state-child/standalone.txt: \
+ No such file or directory^M
+ (gdb) FAIL: gdb.base/signals-state-child.exp: signals states are identical
+ ...
+
+ I managed to reproduce this by adding "sleep (5)" at the start of main in
+ signals-state-child.c.
+
+ Fix this by waiting on the result of the spawned command.
+
+ Tested on x86_64-linux.
+
+2021-11-18 Alan Modra <amodra@gmail.com>
+
+ Re: Don't compile some opcodes files when bfd is 32-bit only
+ Put bpf back in the 32-bit targets, even though bpf requires a 64-bit
+ bfd. bpf sim support apparently works without being 64-bit.
+
+ * Makefile.am (TARGET64_LIBOPCODES_CFILES): Move bpf files..
+ (TARGET32_LIBOPCODES_CFILES): ..to here.
+ * Makefile.in: Regenerate.
+
+2021-11-18 Alan Modra <amodra@gmail.com>
+
+ Pass DEBUGINFOD_CFLAGS when compiling dwarf.c
+ Pick up the elfutils/debuginfod.h install location -I flags from
+ a variable set by debuginfod.m4 (via pkg.m4 and pkg-config).
+
+ * Makefile.am (DEBUGINFOD_CFLAGS): Define.
+ (dwarf.@OBJECT@): New rule.
+
+2021-11-18 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Add testcases for z[fdq]inx
+ Use gpr when the zfinx enable, the testcases contain float
+ instructions that reuse by z[fdq]inx.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/riscv/zdinx.d: New test.
+ * testsuite/gas/riscv/zdinx.s: New test.
+ * testsuite/gas/riscv/zfinx.d: New test.
+ * testsuite/gas/riscv/zfinx.s: New test.
+ * testsuite/gas/riscv/zqinx.d: New test.
+ * testsuite/gas/riscv/zqinx.s: New test.
+
+ Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
+
+2021-11-18 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Add instructions and operand set for z[fdq]inx
+ Reuse float instructions in INSN_CLASS_F/D/Q, use riscv_subset_supports to
+ verify if z*inx enabled and use gpr instead of fpr when z*inx is enable.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_multi_subset_supports): Added support for
+ z*inx extension.
+
+ gas/ChangeLog:
+
+ * config/tc-riscv.c (riscv_ip): Added register choice for z*inx.
+
+ include/ChangeLog:
+
+ * opcode/riscv.h (enum riscv_insn_class): Reused INSN_CLASS_* for z*inx.
+
+ opcodes/ChangeLog:
+
+ * riscv-dis.c (riscv_disassemble_insn): Added disassemble check for
+ z*inx.
+ * riscv-opc.c: Reused INSN_CLASS_* for z*inx.
+
+ Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
+
+2021-11-18 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Add mininal support for z[fdq]inx
+ Minimal support for zfinx, zdinx, zqinx. Like f/d/q, the zqinx
+ imply zdinx and zdinx imply zfinx, where zfinx are not compatible
+ with f/d/q.
+
+ bfd/ChangeLog:
+
+ * elfxx-riscv.c (riscv_implicit_subsets): Added implicit rules
+ for z*inx extensions.
+ (riscv_supported_std_z_ext): Added entries for z*inx.
+ (riscv_parse_check_conflicts): Added conflict check for z*inx.
+
+ Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
+
+2021-11-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] SVE2 instructions added to support SME
+ This patch is adding new SVE2 instructions added to support SME extension.
+ The following SVE2 instructions are added by the SME architecture:
+ * PSEL,
+ * REVD, SCLAMP and UCLAMP.
+
+ gas/ChangeLog:
+
+ * config/tc-aarch64.c (parse_sme_pred_reg_with_index):
+ New parser.
+ (parse_operands): New parser.
+ * testsuite/gas/aarch64/sme-9-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-9-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-9-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-9.d: New test.
+ * testsuite/gas/aarch64/sme-9.s: New test.
+
+ include/ChangeLog:
+
+ * opcode/aarch64.h (enum aarch64_opnd): New operand
+ AARCH64_OPND_SME_PnT_Wm_imm.
+
+ opcodes/ChangeLog:
+
+ * aarch64-asm.c (aarch64_ins_sme_pred_reg_with_index):
+ New inserter.
+ * aarch64-dis.c (aarch64_ext_sme_pred_reg_with_index):
+ New extractor.
+ * aarch64-opc.c (aarch64_print_operand): Printout of
+ OPND_SME_PnT_Wm_imm.
+ * aarch64-opc.h (enum aarch64_field_kind): New bitfields
+ FLD_SME_Rm, FLD_SME_i1, FLD_SME_tszh, FLD_SME_tszl.
+ * aarch64-tbl.h (OP_SVE_NN_BHSD): New qualifier.
+ (OP_SVE_QMQ): New qualifier.
+ (struct aarch64_opcode): New instructions PSEL, REVD,
+ SCLAMP and UCLAMP.
+ aarch64-asm-2.c: Regenerate.
+ aarch64-dis-2.c: Regenerate.
+ aarch64-opc-2.c: Regenerate.
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] Add new SME system registers
+ This patch is adding miscellaneous SME related system registers.
+
+ gas/ChangeLog:
+
+ * testsuite/gas/aarch64/sme-sysreg.d: New test.
+ * testsuite/gas/aarch64/sme-sysreg.s: New test.
+ * testsuite/gas/aarch64/sme-sysreg-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-sysreg-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-sysreg-illegal.s: New test.
+
+ opcodes/ChangeLog:
+
+ * aarch64-opc.c: New system registers id_aa64smfr0_el1,
+ smcr_el1, smcr_el12, smcr_el2, smcr_el3, smpri_el1,
+ smprimap_el2, smidr_el1, tpidr2_el0 and mpamsm_el1.
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] Add SME mode selection and state access instructions
+ This patch is adding new SME mode selection and state access instructions:
+ * Add SMSTART and SMSTOP instructions.
+ * Add SVCR system register.
+
+ gas/ChangeLog:
+
+ * config/tc-aarch64.c (parse_sme_sm_za): New parser.
+ (parse_operands): New parser.
+ * testsuite/gas/aarch64/sme-8-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-8-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-8-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-8.d: New test.
+ * testsuite/gas/aarch64/sme-8.s: New test.
+
+ include/ChangeLog:
+
+ * opcode/aarch64.h (enum aarch64_opnd): New operand
+ AARCH64_OPND_SME_SM_ZA.
+ (enum aarch64_insn_class): New instruction classes
+ sme_start and sme_stop.
+
+ opcodes/ChangeLog:
+
+ * aarch64-asm.c (aarch64_ins_pstatefield): New inserter.
+ (aarch64_ins_sme_sm_za): New inserter.
+ * aarch64-dis.c (aarch64_ext_imm): New extractor.
+ (aarch64_ext_pstatefield): New extractor.
+ (aarch64_ext_sme_sm_za): New extractor.
+ * aarch64-opc.c (operand_general_constraint_met_p):
+ New pstatefield value for SME instructions.
+ (aarch64_print_operand): Printout for OPND_SME_SM_ZA.
+ (SR_SME): New register SVCR.
+ * aarch64-opc.h (F_REG_IN_CRM): New register endcoding.
+ * aarch64-opc.h (F_IMM_IN_CRM): New immediate endcoding.
+ (PSTATE_ENCODE_CRM): Encode CRm field.
+ (PSTATE_DECODE_CRM): Decode CRm field.
+ (PSTATE_ENCODE_CRM_IMM): Encode CRm immediate field.
+ (PSTATE_DECODE_CRM_IMM): Decode CRm immediate field.
+ (PSTATE_ENCODE_CRM_AND_IMM): Encode CRm and immediate
+ field.
+ * aarch64-tbl.h (struct aarch64_opcode): New SMSTART
+ and SMSTOP instructions.
+ aarch64-asm-2.c: Regenerate.
+ aarch64-dis-2.c: Regenerate.
+ aarch64-opc-2.c: Regenerate.
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] Add LD1x, ST1x, LDR and STR instructions
+ This patch is adding new loads and stores defined by SME instructions.
+
+ gas/ChangeLog:
+
+ * config/tc-aarch64.c (parse_sme_address): New parser.
+ (parse_sme_za_hv_tiles_operand_with_braces): New parser.
+ (parse_sme_za_array): New parser.
+ (output_operand_error_record): Print error details if
+ present.
+ (parse_operands): Support new operands.
+ * testsuite/gas/aarch64/sme-5-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-5-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-5-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-5.d: New test.
+ * testsuite/gas/aarch64/sme-5.s: New test.
+ * testsuite/gas/aarch64/sme-6-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-6-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-6-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-6.d: New test.
+ * testsuite/gas/aarch64/sme-6.s: New test.
+ * testsuite/gas/aarch64/sme-7-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-7-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-7-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-7.d: New test.
+ * testsuite/gas/aarch64/sme-7.s: New test.
+
+ include/ChangeLog:
+
+ * opcode/aarch64.h (enum aarch64_opnd): New operands.
+ (enum aarch64_insn_class): Added sme_ldr and sme_str.
+ (AARCH64_OPDE_UNTIED_IMMS): New operand error kind.
+
+ opcodes/ChangeLog:
+
+ * aarch64-asm.c (aarch64_ins_sme_za_hv_tiles): New inserter.
+ (aarch64_ins_sme_za_list): New inserter.
+ (aarch64_ins_sme_za_array): New inserter.
+ (aarch64_ins_sme_addr_ri_u4xvl): New inserter.
+ * aarch64-asm.h (AARCH64_DECL_OPD_INSERTER): Added
+ ins_sme_za_list, ins_sme_za_array and ins_sme_addr_ri_u4xvl.
+ * aarch64-dis.c (aarch64_ext_sme_za_hv_tiles): New extractor.
+ (aarch64_ext_sme_za_list): New extractor.
+ (aarch64_ext_sme_za_array): New extractor.
+ (aarch64_ext_sme_addr_ri_u4xvl): New extractor.
+ * aarch64-dis.h (AARCH64_DECL_OPD_EXTRACTOR): Added
+ ext_sme_za_list, ext_sme_za_array and ext_sme_addr_ri_u4xvl.
+ * aarch64-opc.c (operand_general_constraint_met_p):
+ (aarch64_match_operands_constraint): Handle sme_ldr, sme_str
+ and sme_misc.
+ (aarch64_print_operand): New operands supported.
+ * aarch64-tbl.h (OP_SVE_QUU): New qualifier.
+ (OP_SVE_QZU): New qualifier.
+ aarch64-asm-2.c: Regenerate.
+ aarch64-dis-2.c: Regenerate.
+ aarch64-opc-2.c: Regenerate.
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] Add ZERO instruction
+ This patch is adding ZERO (a list of 64-bit element ZA tiles)
+ instruction.
+
+ gas/ChangeLog:
+
+ * config/tc-aarch64.c (parse_sme_list_of_64bit_tiles):
+ New parser.
+ (parse_operands): Handle OPND_SME_list_of_64bit_tiles.
+ * testsuite/gas/aarch64/sme-4-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-4-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-4-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-4.d: New test.
+ * testsuite/gas/aarch64/sme-4.s: New test.
+
+ include/ChangeLog:
+
+ * opcode/aarch64.h (enum aarch64_opnd): New operand
+ AARCH64_OPND_SME_list_of_64bit_tiles.
+
+ opcodes/ChangeLog:
+
+ * aarch64-opc.c (print_sme_za_list): New printing function.
+ (aarch64_print_operand): Handle OPND_SME_list_of_64bit_tiles.
+ * aarch64-opc.h (enum aarch64_field_kind): New bitfield
+ FLD_SME_zero_mask.
+ * aarch64-tbl.h (struct aarch64_opcode): New ZERO instruction.
+ aarch64-asm-2.c: Regenerate.
+ aarch64-dis-2.c: Regenerate.
+ aarch64-opc-2.c: Regenerate.
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] Add MOV and MOVA instructions
+ This patch is adding new MOV (alias) and MOVA SME instruction.
+
+ gas/ChangeLog:
+
+ * config/tc-aarch64.c (enum sme_hv_slice): new enum.
+ (struct reloc_entry): Added ZAH and ZAV registers.
+ (parse_sme_immediate): Immediate parser.
+ (parse_sme_za_hv_tiles_operand): ZA tile parser.
+ (parse_sme_za_hv_tiles_operand_index): Index parser.
+ (parse_operands): Added ZA tile parser calls.
+ (REGNUMS): New macro. Regs with suffix.
+ (REGSET16S): New macro. 16 regs with suffix.
+ * testsuite/gas/aarch64/sme-2-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-2-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-2-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-2.d: New test.
+ * testsuite/gas/aarch64/sme-2.s: New test.
+ * testsuite/gas/aarch64/sme-2a.d: New test.
+ * testsuite/gas/aarch64/sme-2a.s: New test.
+ * testsuite/gas/aarch64/sme-3-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-3-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-3-illegal.s: New test.
+ * testsuite/gas/aarch64/sme-3.d: New test.
+ * testsuite/gas/aarch64/sme-3.s: New test.
+ * testsuite/gas/aarch64/sme-3a.d: New test.
+ * testsuite/gas/aarch64/sme-3a.s: New test.
+
+ include/ChangeLog:
+
+ * opcode/aarch64.h (enum aarch64_opnd): New enums
+ AARCH64_OPND_SME_ZA_HV_idx_src and
+ AARCH64_OPND_SME_ZA_HV_idx_dest.
+ (struct aarch64_opnd_info): New ZA tile vector struct.
+
+ opcodes/ChangeLog:
+
+ * aarch64-asm.c (aarch64_ins_sme_za_hv_tiles):
+ New inserter.
+ * aarch64-asm.h (AARCH64_DECL_OPD_INSERTER):
+ New inserter ins_sme_za_hv_tiles.
+ * aarch64-dis.c (aarch64_ext_sme_za_hv_tiles):
+ New extractor.
+ * aarch64-dis.h (AARCH64_DECL_OPD_EXTRACTOR):
+ New extractor ext_sme_za_hv_tiles.
+ * aarch64-opc.c (aarch64_print_operand):
+ Handle SME_ZA_HV_idx_src and SME_ZA_HV_idx_dest.
+ * aarch64-opc.h (enum aarch64_field_kind): New enums
+ FLD_SME_size_10, FLD_SME_Q, FLD_SME_V and FLD_SME_Rv.
+ (struct aarch64_operand): Increase fields size to 5.
+ * aarch64-tbl.h (OP_SME_BHSDQ_PM_BHSDQ): New qualifiers
+ aarch64-asm-2.c: Regenerate.
+ aarch64-dis-2.c: Regenerate.
+ aarch64-opc-2.c: Regenerate.
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] Add SME instructions
+ Patch is adding new SME matrix instructions. Please note additional
+ instructions will be added in following patches.
+
+ gas/ChangeLog:
+
+ * config/tc-aarch64.c (parse_sme_zada_operand):
+ New parser.
+ * config/tc-aarch64.c (parse_reg_with_qual):
+ New reg parser.
+ * config/tc-aarch64.c (R_ZA): New egister type.
+ (parse_operands): New parser.
+ * testsuite/gas/aarch64/sme-illegal.d: New test.
+ * testsuite/gas/aarch64/sme-illegal.l: New test.
+ * testsuite/gas/aarch64/sme-illegal.s: New test.
+ * testsuite/gas/aarch64/sme.d: New test.
+ * testsuite/gas/aarch64/sme.s: New test.
+ * testsuite/gas/aarch64/sme-f64.d: New test.
+ * testsuite/gas/aarch64/sme-f64.s: New test.
+ * testsuite/gas/aarch64/sme-i64.d: New test.
+ * testsuite/gas/aarch64/sme-i64.s: New test.
+
+ include/ChangeLog:
+
+ * opcode/aarch64.h (enum aarch64_opnd): New operands
+ AARCH64_OPND_SME_ZAda_2b, AARCH64_OPND_SME_ZAda_3b and
+ AARCH64_OPND_SME_Pm.
+ (enum aarch64_insn_class): New instruction class sme_misc.
+
+ opcodes/ChangeLog:
+
+ * aarch64-opc.c (aarch64_print_operand):
+ Print OPND_SME_ZAda_2b and OPND_SME_ZAda_3b operands.
+ (verify_constraints): Handle OPND_SME_Pm.
+ * aarch64-opc.h (enum aarch64_field_kind):
+ New bit fields FLD_SME_ZAda_2b, FLD_SME_ZAda_3b and FLD_SME_Pm.
+ * aarch64-tbl.h (OP_SME_ZADA_PN_PM_ZN_S): New qualifier set.
+ (OP_SME_ZADA_PN_PM_ZN_D): New qualifier.
+ (OP_SME_ZADA_PN_PM_ZN_ZM): New qualifier.
+ (OP_SME_ZADA_S_PM_PM_S_S): New qualifier.
+ (OP_SME_ZADA_D_PM_PM_D_D): New qualifier.
+ (OP_SME_ZADA_S_PM_PM_H_H): New qualifier.
+ (OP_SME_ZADA_S_PM_PM_B_B): New qualifier.
+ (OP_SME_ZADA_D_PM_PM_H_H): New qualifier.
+ (SME_INSN): New instruction macro.
+ (SME_F64_INSN): New instruction macro.
+ (SME_I64_INSN): New instruction macro.
+ (SME_INSNC): New instruction macro.
+ (struct aarch64_opcode): New SME instructions.
+ aarch64-asm-2.c: Regenerate.
+ aarch64-dis-2.c: Regenerate.
+ aarch64-opc-2.c: Regenerate.
+
+2021-11-17 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: [SME] Add +sme option to -march
+ This series of patches (tagged [SME]) add support for the Scalable
+ Matrix Extension. Patch introduces new command line options: +sme, +sme-f64 and
+ +sme-i64 to -march command line options.
+
+ gas/ChangeLog:
+
+ * NEWS: Updated docs.
+ * config/tc-aarch64.c: New SME command line options.
+ * doc/c-aarch64.texi: Update docs.
+
+ include/ChangeLog:
+
+ * opcode/aarch64.h (AARCH64_FEATURE_SME): New flag.
+ (AARCH64_FEATURE_SME_F64): New flag.
+ (AARCH64_FEATURE_SME_I64): New flag.
+
+ opcodes/ChangeLog:
+
+ * aarch64-tbl.h (SME): New feature object.
+
+2021-11-17 Jeremy Drake <cygwin@jdrake.com>
+
+ Set the default DLL chracteristics to 0 for Cygwin based targets.
+ * emultempl/pep.em (DEFAULT_DLL_CHARACTERISTICS): Set to 0 for
+ Cygwin targets.
+ * emultempl/pep.em (DEFAULT_DLL_CHARACTERISTICS): Likewise.
+
+2021-11-17 Nick Clifton <nickc@redhat.com>
+
+ Fix the linker script parser so that it will recognise the PT_GNU_RELRO segment type, and the linker itself so that it will gracefully handle being unable to assign any sections to such a segment.
+ PR 28452
+ bfd * elf.c (assign_file_positions_for_non_load_sections): Replace
+ assertion with a warning message.
+
+ ld * ldgram.y: Add support for PT_GNU_RELRO and PT_GNU_PROPERTY.
+ * ldgram.c: Regenerate.
+
+2021-11-17 Andreas Arnez <arnez@linux.ibm.com>
+
+ [gdb/build, s390x] Fix build after gdbarch_tdep changes
+ Commit 345bd07cce33 ("gdb: fix gdbarch_tdep ODR violation") changes a
+ declaration in s390-tdep.h from
+
+ struct gdbarch_tdep { ... };
+
+ to
+
+ struct s390_gdbarch_tdep : gdbarch_tdep { ... };
+
+ and now requires that gdbarch_tdep has been declared before. Which is
+ usually the case, except when compiling s390-linux-nat.c, where
+ s390-tdep.h is included before gdbarch.h. Thus the s390x build errors out
+ with the compiler complaining about a missing class name after the colon.
+
+ Fix this in s390-linux-nat.c, by including gdbarch.h before s390-tdep.h.
+
+2021-11-17 Luis Machado <luis.machado@linaro.org>
+
+ Expose the BTI BTYPE more explicitly in the registers
+ Augment the register description XML to expose the BTI BTYPE field contained
+ in the CPSR register. It will be displayed like so:
+
+ cpsr 0x60001000 [ EL=0 BTYPE=0 SSBS C Z ]
+
+2021-11-17 H.J. Lu <hjl.tools@gmail.com>
+
+ elfedit: Add --output-abiversion option to update ABIVERSION
+ * NEWS: Mention --output-abiversion.
+ * elfedit.c (input_elf_abiversion): New.
+ (output_elf_abiversion): Likewise.
+ (update_elf_header): Update EI_ABIVERSION.
+ (command_line_switch): Add OPTION_INPUT_ABIVERSION and
+ OPTION_OUTPUT_ABIVERSION.
+ (options): Add --input-abiversion and --output-abiversion.
+ (usage): Likewise.
+ (main): Handle --input-abiversion and --output-abiversion.
+ * doc/binutils.texi: Document --input-abiversion and
+ --output-abiversion.
+ * testsuite/binutils-all/elfedit.exp: Run elfedit-6.
+ * testsuite/binutils-all/elfedit-6.d: New file.
+
+2021-11-17 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Support rvv extension with released version 1.0.
+ 2021-11-17 Jim Wilson <jimw@sifive.com>
+ Kito Cheng <kito.cheng@sifive.com>
+ Nelson Chu <nelson.chu@sifive.com>
+
+ This patch is porting from the following riscv github,
+ https://github.com/riscv/riscv-binutils-gdb/tree/rvv-1.0.x
+
+ And here is the vector spec,
+ https://github.com/riscv/riscv-v-spec
+
+ bfd/
+ * elfxx-riscv.c (riscv_implicit_subsets): Added imply rules
+ of v, zve and zvl extensions.
+ (riscv_supported_std_ext): Updated verison of v to 1.0.
+ (riscv_supported_std_z_ext): Added zve and zvl extensions.
+ (riscv_parse_check_conflicts): The zvl extensions need to
+ enable either v or zve extension.
+ (riscv_multi_subset_supports): Check the subset list to know
+ if the INSN_CLASS_V and INSN_CLASS_ZVEF instructions are supported.
+ gas/
+ * config/tc-riscv.c (enum riscv_csr_class): Added CSR_CLASS_V.
+ (enum reg_class): Added RCLASS_VECR and RCLASS_VECM.
+ (validate_riscv_insn): Check whether the rvv operands are valid.
+ (md_begin): Initialize register hash for rvv registers.
+ (macro_build): Added rvv operands when expanding rvv pseudoes.
+ (vector_macro): Expand rvv macros into one or more instructions.
+ (macro): Likewise.
+ (my_getVsetvliExpression): Similar to my_getVsetvliExpression,
+ but used for parsing vsetvli operands.
+ (riscv_ip): Parse and encode rvv operands. Besides, The rvv loads
+ and stores with EEW 64 cannot be used when zve32x is enabled.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p10.d: Updated -march
+ to rv32ifv_zkr.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/priv-reg.s: Added rvv csr testcases.
+ * testsuite/gas/riscv/priv-reg-version-1p10.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/march-imply-v.d: New testcase.
+ * testsuite/gas/riscv/vector-insns-fail-zve32xf.d: Likewise.
+ * testsuite/gas/riscv/vector-insns-fail-zve32xf.l: Likewise.
+ * testsuite/gas/riscv/vector-insns-fail-zvl.d: Likewise.
+ * testsuite/gas/riscv/vector-insns-fail-zvl.l: Likewise.
+ * testsuite/gas/riscv/vector-insns-vmsgtvx.d: Likewise.
+ * testsuite/gas/riscv/vector-insns-vmsgtvx.s: Likewise.
+ * testsuite/gas/riscv/vector-insns-zero-imm.d: Likewise.
+ * testsuite/gas/riscv/vector-insns-zero-imm.s: Likewise.
+ * testsuite/gas/riscv/vector-insns.d: Likewise.
+ * testsuite/gas/riscv/vector-insns.s: Likewise.
+ include/
+ * opcode/riscv-opc.h: Defined mask/match encodings and csrs for rvv.
+ * opcode/riscv.h: Defined rvv immediate encodings and fields.
+ (enum riscv_insn_class): Added INSN_CLASS_V and INSN_CLASS_ZVEF.
+ (INSN_V_EEW64): Defined.
+ (M_VMSGE, M_VMSGEU): Added for the rvv pseudoes.
+ opcodes/
+ * riscv-dis.c (print_insn_args): Dump the rvv operands.
+ * riscv-opc.c (riscv_vecr_names_numeric): Defined rvv registers.
+ (riscv_vecm_names_numeric): Likewise.
+ (riscv_vsew): Likewise.
+ (riscv_vlmul): Likewise.
+ (riscv_vta): Likewise.
+ (riscv_vma): Likewise.
+ (match_vs1_eq_vs2): Added for rvv Vu operand.
+ (match_vd_eq_vs1_eq_vs2): Added for rvv Vv operand.
+ (riscv_opcodes): Added rvv v1.0 instructions.
+
+2021-11-17 Sergei Trofimovich <siarheit@google.com>
+
+ gdb/nat/linux-osdata.c: fix build on gcc-12 (string overfow)
+ On gcc-12 build fails as:
+
+ ../../gdbserver/../gdb/nat/linux-osdata.c: In function 'void linux_xfer_osdata_processes(buffer*)':
+ ../../gdbserver/../gdb/nat/linux-osdata.c:330:39: error:
+ '__builtin___sprintf_chk' may write a terminating nul past the end of the destination [-Werror=format-overflow=]
+ 330 | sprintf (core_str, "%d", i);
+ | ^
+
+ It's an off-by-one case in an infeasible scenario for negative
+ huge core count. The change switches to std::string for memory
+ handling.
+
+ Tested by running 'info os processes' and checking CPU cores column.
+
+2021-11-17 Aaron Merey <amerey@redhat.com>
+
+ gdb: Add aliases for read_core_file_mappings callbacks
+ Add aliases read_core_file_mappings_loop_ftype and
+ read_core_file_mappings_pre_loop_ftype. Intended for use with
+ read_core_file_mappings.
+
+ Also add build_id parameter to read_core_file_mappings_loop_ftype.
+
+2021-11-17 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: add support for $pwd replacements
+ Extend the common test framework to support $pwd replacements in
+ settings. This allows replacing the custom cris @exedir@ with it.
+
+ sim: cris: replace @srcdir@ test extension with $srcdir/$subdir
+ The common framework supports $srcdir & $subdir replacements already,
+ so replace the custom @srcdir@ logic with those. Since the replace
+ happens in slurp_options that cris already uses, we don't have any
+ logic to port over there. We have to duplicate that into the cris
+ slurp_rv helper though.
+
+2021-11-17 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cris: drop custom "dynamic" test field
+ This tag is used to force tests to be built dynamically (i.e. without
+ -static linking). This is because cris-sim.exp in dejagnu turns on
+ static linking in ldflags.
+
+ The default configs and runtest flags shouldn't load these boards.
+ If these settings are still needed, we should figure out a different
+ way of suppressing the stock settings wholesale. We want these to
+ all pass out of the box with little to no configuration so that they
+ can run in a multitarget build.
+
+ With dropping "dynamic", it'll be easier to merge the custom cris
+ test logic with the common sim test logic.
+
+2021-11-17 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: add more silent build rules
+ site.exp is still verbose, but that comes from automake, so have
+ to get it fixed upstream.
+
+2021-11-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-16 Sergei Trofimovich <siarheit@google.com>
+
+ sim: cr16: fix build on gcc-12 (NULL comparison)
+ On gcc-12 build fails as:
+
+ sim/cr16/interp.c: In function 'lookup_hash':
+ sim/cr16/interp.c:89:25: error:
+ the comparison will always evaluate as 'true'
+ for the address of 'mnimonic' will never be NULL [-Werror=address]
+ 89 | if ((h->ops->mnimonic != NULL) &&
+ | ^~
+
+ 'mnimonic' is a sharr array within ops. It can never be NULL.
+
+ While at it renamed 'mnimonic' to 'mnemonic'.
+
+2021-11-16 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix length of array view returned by some value_contents functions
+ In commit 50888e42dcd3 ("gdb: change functions returning value contents
+ to use gdb::array_view"), I believe I made a mistake with the length of
+ the array views returned by some functions. All functions return a view
+ of `TYPE_LENGTH (value_type (type))` length. This is not correct when
+ the value's enclosing type is larger than the value's type. In that
+ case, the value's contents buffer is of the size of the enclosing type,
+ and the value's actual contents is a slice of that (as returned by
+ value_contents). So, functions value_contents_all_raw,
+ value_contents_for_printing and value_contents_for_printing_const are
+ not correct. Since they are meant to return the value's contents buffer
+ as a whole, they should have the size of the enclosing type.
+
+ There is nothing that uses the returned array view size at the moment,
+ so this didn't cause a problem. But it became apparent when trying to
+ adjust some callers.
+
+ Change-Id: Ib4e8837e1069111d2b2784d3253d5f3002419e68
+
+2021-11-16 Fangrui Song <maskray@google.com>
+
+ readelf: Support SHT_RELR/DT_RELR for -r
+ The -r output for SHT_RELR looks like:
+
+ Relocation section '.relr.dyn' at offset 0x530 contains 4 entries:
+ 7 offsets
+ 00000000000028c0
+ 00000000000028c8
+ 0000000000003ad0
+ 0000000000003ad8
+ 0000000000003ae0
+ 0000000000003ae8
+ 0000000000003af0
+
+ For --use-dynamic, the header looks like
+
+ 'RELR' relocation section at offset 0x530 contains 32 bytes:
+
+ include/
+ * elf/common.h (DT_ENCODING): Bump to 38.
+ * elf/external.h (Elf32_External_Relr): New.
+ (Elf64_External_Relr): New.
+ binutils/
+ * readelf.c (enum relocation_type): New.
+ (slurp_relr_relocs): New.
+ (dump_relocations): Change is_rela to rel_type.
+ Dump RELR.
+ (dynamic_relocations): Add DT_RELR.
+ (process_relocs): Check SHT_RELR and DT_RELR.
+ (process_dynamic_section): Store into dynamic_info for
+ DT_RELR/DT_RELRENT/DT_RELRSZ.
+
+2021-11-16 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: remove FUNCTION_NAME
+ __func__ is standard C++11:
+
+ https://en.cppreference.com/w/cpp/language/function
+
+ Also, in C++11, __func__ expands to the demangled function name, so the
+ mention in the comment above FUNCTION_NAME doesn't apply anymore.
+ Finally, in places where FUNCTION_NAME is used, I think it's enough to
+ print the function name, no need to print the whole signature.
+ Therefore, I propose to just remove FUNCTION_NAME and update users to
+ use the standard __func__.
+
+ Change-Id: I778f28155422b044402442dc18d42d0cded1017d
+
+2021-11-16 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/gdbsupport: make xstrprintf and xstrvprintf return a unique_ptr
+ The motivation is to reduce the number of places where unmanaged
+ pointers are returned from allocation type routines. All of the
+ callers are updated.
+
+ There should be no user visible changes after this commit.
+
+2021-11-16 Andrew Burgess <aburgess@redhat.com>
+
+ gdbsupport: move xfree into its own file
+ In the next commit I'd like to reference gdb_unique_ptr within the
+ common-utils.h file. However, this requires that I include
+ gdb_unique_ptr.h, which requires that xfree be defined.
+
+ Interestingly, gdb_unique_ptr.h doesn't actually include anything that
+ defines xfree, but I was finding that when I added a gdb_unique_ptr.h
+ include to common-utils.h I was getting a dependency cycle; before my
+ change xfree was defined when gdb_unique_ptr.h was processed, while
+ after my change it was not, and this made g++ unhappy.
+
+ To break this cycle, I propose to move xfree into its own header file,
+ gdb-xfree.h, which I'll then include into gdb_unique_ptr.h and
+ common-utils.cc.
+
+2021-11-16 Andrew Burgess <aburgess@redhat.com>
+
+ gdb: throw OPTIMIZED_OUT_ERROR rather than GENERIC_ERROR
+ While reviewing this patch:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-November/183227.html
+
+ I spotted that the patch could be improved if we threw
+ OPTIMIZED_OUT_ERROR rather than GENERIC_ERROR in a few places.
+
+ This commit updates error_value_optimized_out and
+ require_not_optimized_out to throw OPTIMIZED_OUT_ERROR.
+
+ I ran the testsuite and saw no regressions. This doesn't really
+ surprise me, we don't usually write code like:
+
+ catch (const gdb_exception_error &ex)
+ {
+ (if ex.error == GENERIC_ERROR)
+ ...
+ else
+ ...
+ }
+
+ There are a three places where we write something like:
+
+ catch (const gdb_exception_error &ex)
+ {
+ (if ex.error == OPTIMIZED_OUT_ERROR)
+ ...
+ }
+
+ In frame.c:unwind_pc, stack.c:info_frame_command_core, and
+ value.c:value_optimized_out, but if we are hitting these cases then
+ it's not significantly changing GDB's behaviour.
+
+2021-11-16 Tom Tromey <tromey@adacore.com>
+
+ Remove config.cache in gdbserver's "distclean"
+ PR gdb/28586 points out that "make distclean" fails to delete
+ config.cache from gdbserver/. This patch fixes the bug, and removes a
+ duplicate "Makefile" deletion that was also pointed out in the PR.
+
+2021-11-16 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Remove inferior output in gdb.base/foll-vfork.exp
+ Test-case gdb.base/foll-vfork.exp has inferior output that is not needed, but
+ which makes the regexp matching more difficult (see commit 1f28b70def1
+ "[gdb/testsuite] Fix regexp in gdb.base/foll-vfork.exp").
+
+ Remove the inferior output, and revert commit 1f28b70def1 to make the matching
+ more restrictive.
+
+ Tested on x86_64-linux.
+
+2021-11-16 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Don't allow KMOV in TLS code sequences
+ Don't allow KMOV in TLS code sequences which require integer MOV
+ instructions.
+
+ PR target/28595
+ * config/tc-i386.c (match_template): Don't allow KMOV in TLS
+ code sequences.
+ * testsuite/gas/i386/i386.exp: Run inval-tls and x86-64-inval-tls
+ tests.
+ * testsuite/gas/i386/inval-tls.l: New file.
+ * testsuite/gas/i386/inval-tls.s: Likewise.
+ * testsuite/gas/i386/x86-64-inval-tls.l: Likewise.
+ * testsuite/gas/i386/x86-64-inval-tls.s: Likewise.
+
+2021-11-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: run: support concise env var settings
+ Support the same syntax as other common utilities where env vars can
+ be specified before the program to be run without an explicit option.
+
+ This behavior can be suppressed by using the -- marker.
+
+2021-11-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: nrun: add --env-{set,unset,clear} command line options
+ Provide explicit control over the program's environment with the
+ basic set/unset/clear options. These are a bit clunky to use,
+ but they're functional.
+
+ The env set operation is split out into a separate function as it'll
+ be used in the next commit.
+
+ With these in place, we can adjust the custom cris testsuite to use
+ the now standard options and not its one-off hack.
+
+2021-11-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: syscall: hoist argc/argn/argnlen to common code
+ Now that the callback framework supports argv & envp, we can move
+ the Blackfin implementation of these syscalls to the common code.
+
+ sim: syscall: fix argvlen & argv implementation
+ Now that we have access to the argv & envp strings, finish implementing
+ these syscalls. Delete unused variables, fix tbuf by incrementing the
+ pointer instead of setting to the length, and make sure we don't write
+ more data than the bufsize says is available.
+
+ sim: callback: expose argv & environ
+ Pass the existing strings data to the callbacks so that common
+ libgloss syscalls can be implemented (which we'll do shortly).
+
+2021-11-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: keep track of program environment strings
+ We've been passing the environment strings to sim_create_inferior,
+ but most ports don't do anything with them. A few will use ad-hoc
+ logic to stuff the stack for user-mode programs, but that's it.
+
+ Let's formalize this across the board by storing the strings in the
+ normal sim state. This will allow (in future commits) supporting
+ more functionality in the run interface, and to unify some of the
+ libgloss syscalls.
+
+2021-11-16 Mike Frysinger <vapier@gentoo.org>
+
+ sim: iq2000: fix some missing prototypes warnings
+ Turns out some of these were hiding real bugs like not passing the
+ pc variable down.
+
+2021-11-16 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Scalar crypto instruction and entropy source CSR testcases.
+ Add testcases for Scalar Crypto extension, with total testcase contain all
+ instructions in k-ext/k-ext-64 and sub-extension testcase for zbk* zk*. Also
+ add testcase for new CSR name 'seed' which is the Entropy Source in zkr.
+
+ In fact these whole testcases can be combined into one file, after we have
+ supported the .option arch +-= directives.
+
+ gas/
+ * testsuite/gas/riscv/k-ext-64.d: New testcase for crypto instructions.
+ * testsuite/gas/riscv/k-ext-64.s: Likewise.
+ * testsuite/gas/riscv/k-ext.d: Likewise.
+ * testsuite/gas/riscv/k-ext.s: Likewise.
+ * testsuite/gas/riscv/zbkb-32.d: Likewise.
+ * testsuite/gas/riscv/zbkb-32.s: Likewise.
+ * testsuite/gas/riscv/zbkb-64.d: Likewise.
+ * testsuite/gas/riscv/zbkb-64.s: Likewise.
+ * testsuite/gas/riscv/zbkc-32.d: Likewise.
+ * testsuite/gas/riscv/zbkc-64.d: Likewise.
+ * testsuite/gas/riscv/zbkc.s: Likewise.
+ * testsuite/gas/riscv/zbkx-32.d: Likewise.
+ * testsuite/gas/riscv/zbkx-64.d: Likewise.
+ * testsuite/gas/riscv/zbkx.s: Likewise.
+ * testsuite/gas/riscv/zknd-32.d: Likewise.
+ * testsuite/gas/riscv/zknd-32.s: Likewise.
+ * testsuite/gas/riscv/zknd-64.d: Likewise.
+ * testsuite/gas/riscv/zknd-64.s: Likewise.
+ * testsuite/gas/riscv/zkne-32.d: Likewise.
+ * testsuite/gas/riscv/zkne-32.s: Likewise.
+ * testsuite/gas/riscv/zkne-64.d: Likewise.
+ * testsuite/gas/riscv/zkne-64.s: Likewise.
+ * testsuite/gas/riscv/zknh-32.d: Likewise.
+ * testsuite/gas/riscv/zknh-32.s: Likewise.
+ * testsuite/gas/riscv/zknh-64.d: Likewise.
+ * testsuite/gas/riscv/zknh-64.s: Likewise.
+ * testsuite/gas/riscv/zksed-32.d: Likewise.
+ * testsuite/gas/riscv/zksed-64.d: Likewise.
+ * testsuite/gas/riscv/zksed.s: Likewise.
+ * testsuite/gas/riscv/zksh-32.d: Likewise.
+ * testsuite/gas/riscv/zksh-64.d: Likewise.
+ * testsuite/gas/riscv/zksh.s: Likewise.
+ * testsuite/gas/riscv/priv-reg-fail-zkr.d: New testcase for zkr
+ csr check.
+ * testsuite/gas/riscv/priv-reg-fail-zkr.l: Likewise.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p10.d: Updated march to
+ rv32if_zkr.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-fail-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-version-1p10.d: Added Crypto seed csr.
+ * testsuite/gas/riscv/priv-reg-version-1p11.d: Likewise.
+ * testsuite/gas/riscv/priv-reg-version-1p9p1.d: Likewise.
+ * testsuite/gas/riscv/priv-reg.s: Likewise.
+
+2021-11-16 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Scalar crypto instructions and operand set.
+ Add instructions in k-ext, some instruction in zbkb, zbkc is reuse from
+ zbb,zbc, we just change the class attribute to make them both support.
+ The 'aes64ks1i' and 'aes64ks2' instructions are present in both the Zknd
+ and Zkne extensions on rv64. Add new operand letter 'y' to present 'bs'
+ symbol and 'Y' to present 'rnum' symbolc for zkn instructions. Also add
+ a new Entropy Source CSR define 'seed' located at address 0x015.
+
+ bfd/
+ * elfxx-riscv.c (riscv_multi_subset_supports): Added support for
+ crypto extension.
+ gas/
+ *config/tc-riscv.c (enum riscv_csr_class): Added CSR_CLASS_ZKR.
+ (riscv_csr_address): Checked for CSR_CLASS_ZKR.
+ (validate_riscv_insn): Added y and Y for bs and rnum operands.
+ (riscv_ip): Handle y and Y operands.
+ include/
+ * opcode/riscv-opc.h: Added encodings of crypto instructions.
+ Also defined new csr seed, which address is 0x15.
+ * opcode/riscv.h: Defined OP_* and INSN_CLASS_* for crypto.
+ opcodes/
+ * riscv-dis.c (print_insn_args): Recognized new y and Y operands.
+ * riscv-opc.c (riscv_opcodes): Added crypto instructions.
+
+2021-11-16 jiawei <jiawei@iscas.ac.cn>
+
+ RISC-V: Minimal support of scalar crypto extension.
+ Minimal support of scalar crypto extension, add "k" in the
+ riscv_supported_std_ext, to make the order check right with
+ "zk" behind "zb".
+
+ bfd/
+ * elfxx-riscv.c (riscv_implicit_subsets): Added implicit
+ rules for zk* extensions.
+ (riscv_supported_std_ext): Added entry for k.
+ (riscv_supported_std_z_ext): Added entries for zk*.
+
+2021-11-16 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: rework "set debuginfod" commands
+ As discussed here [1], do some re-work in the "set debuginfod commands".
+
+ First, use "set debuginfod enabled on/off/ask" instead of "set
+ debuginfod on/off/ask". This is more MI-friendly, and it gives an
+ output that makes more sense in "info set", for example.
+
+ Then, make the show commands not call "error" when debuginfod support is
+ not compiled in. This makes the commands "show" and "show debuginfod"
+ stop early, breaking gdb.base/default.exp:
+
+ Running /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.base/default.exp ...
+ FAIL: gdb.base/default.exp: info set
+ FAIL: gdb.base/default.exp: show
+
+ - Make the "debuginfod enabled" setting default to "off" when debuginfod
+ support is not compiled in, and "ask" otherwise.
+ - Make the setter of "debuginfod enabled" error out when debuginfod
+ support is not compiled in, so that "debuginfod enabled" will always
+ remain "off" in that case.
+ - Make the setter of "debuginfod verbose" work in any case. I don't
+ see the harm in letting the user change that setting, since the user will
+ hit an error if they try to enable the use of debuginfod.
+ - I would do the same for the "debuginfod urls" setter, but because
+ this one needs to see the DEBUGINFOD_URLS_ENV_VAR macro, provided by
+ libdebuginfod, I made that one error out as well if debuginfod
+ support is not compiled it (otherwise, I would have left it like
+ "debuginfod verbose". Alternatively, we could hard-code
+ "DEBUGINFOD_URLS" in the code (in fact, it was prior to this patch,
+ but I think it was an oversight, as other spots use
+ DEBUGINFOD_URLS_ENV_VAR), or use a dummy string to store the setting,
+ but I don't really see the value in that.
+
+ Rename debuginfod_enable to debuginfod_enabled, just so it matches the
+ setting name.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2021-October/182937.html
+
+ Change-Id: I45fdb2993f668226a5639228951362b7800f09d5
+ Co-Authored-By: Aaron Merey <amerey@redhat.com>
+
+2021-11-16 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: adjust gdbarch_tdep calls in nat files
+ Commit 345bd07cce33 ("gdb: fix gdbarch_tdep ODR violation") forgot to
+ update the gdbarch_tdep calls in the native files other than x86-64
+ Linux. This patch updates them all (to the best of my knowledge).
+ These are the files I was able to build-test:
+
+ aarch64-linux-nat.c
+ amd64-bsd-nat.c
+ arm-linux-nat.c
+ ppc-linux-nat.c
+ windows-nat.c
+ xtensa-linux-nat.c
+
+ And these are the ones I could not build-test:
+
+ aix-thread.c
+ arm-netbsd-nat.c
+ ppc-fbsd-nat.c
+ ppc-netbsd-nat.c
+ ia64-tdep.c (the part that needs libunwind)
+ ppc-obsd-nat.c
+ rs6000-nat.c
+
+ If there are still some build problems related to gdbarch_tdep in them,
+ they should be pretty obvious to fix.
+
+ Change-Id: Iaa3d791a850e4432973757598e634e3da6061428
+
+2021-11-16 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove unused variables in xtensa-linux-nat.c
+ While build-testing this file, the compiler complained about these two
+ unused variables, remove them.
+
+ Change-Id: I3c54f779f12c16ef6184af58aca75eaad042ce4e
+
+2021-11-16 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add arc-newlib-tdep.c to ALL_TARGET_OBS
+ This file is currently not compiled in an --enable-targets=all build,
+ but it should be. Add it to ALL_TARGET_OBS.
+
+ Update the gdbarch_tdep call that commit 345bd07cce33 ("gdb: fix
+ gdbarch_tdep ODR violation") forgot to update.
+
+ Change-Id: I86248a01493eea5e70186e9c46a298ad3994b034
+
+2021-11-16 Jim Wilson <wilson@tuliptree.org>
+
+ Update my email address.
+ I've left SiFive and have a new gmail account because it is convenient
+ to use with git send-email. I'm planning to use this for my RISC-V
+ work. My tuliptree address still works, it just isn't as convenient.
+
+ binutils:
+ * MAINTAINERS (RISC-V): Update my address.
+
+2021-11-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-15 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Don't use gdb_stdlog for inferior-events
+ The test-case gdb.base/foll-vfork.exp contains:
+ ...
+ if [gdb_debug_enabled] {
+ untested "debug is enabled"
+ return 0
+ }
+ ...
+
+ To understand what it does, I disabled this bit and ran with GDB_DEBUG=infrun,
+ like so:
+ ...
+ $ cd $build/gdb/testsuite
+ $ make check GDB_DEBUG=infrun RUNTESTFLAGS=gdb.base/foll-vfork.exp
+ ...
+ and ran into:
+ ...
+ (gdb) PASS: gdb.base/foll-vfork.exp: exec: \
+ vfork parent follow, through step: set follow-fork parent
+ next^M
+ 33 if (pid == 0) {^M
+ (gdb) FAIL: gdb.base/foll-vfork.exp: exec: \
+ vfork parent follow, through step: step
+ ...
+
+ The problem is that the test-case expects:
+ ...
+ (gdb) PASS: gdb.base/foll-vfork.exp: exec: \
+ vfork parent follow, through step: set follow-fork parent
+ next^M
+ [Detaching after vfork from child process 28169]^M
+ 33 if (pid == 0) {^M
+ (gdb) PASS: gdb.base/foll-vfork.exp: exec: \
+ vfork parent follow, through step: step
+ ...
+ but the "Detaching" line has been redirected to
+ $outputs/gdb.base/foll-vfork/gdb.debug.
+
+ I looked at the documentation of "set logging debugredirect [on|off]":
+ ...
+ By default, GDB debug output will go to both the terminal and the logfile.
+ Set debugredirect if you want debug output to go only to the log file.
+ ...
+ and my interpretation of it was that "debug output" did not match the
+ "messages" description of inferior-events:
+ ...
+ The set print inferior-events command allows you to enable or disable printing
+ of messages when GDB notices that new inferiors have started or that inferiors
+ have exited or have been detached.
+ ...
+
+ Fix the discrepancy by not using gdb_stdlog for inferior-events.
+
+ Update the gdb.base/foll-vfork.exp test-case to not require
+ gdb_debug_enabled == 0.
+
+ Tested on x86_64-linux.
+
+ Tested test-case gdb.base/foll-vfork.exp with and without GDB_DEBUG=infrun.
+
+2021-11-15 Roland McGrath <mcgrathr@google.com>
+
+ ld: Fix testsuite failures under --enable-textrel-check=error
+ ld/
+ * testsuite/ld-aarch64/dt_textrel.d: Pass explicit -z notext in
+ case ld was configured with --enable-textrel-check=error.
+ * testsuite/ld-aarch64/pr22764.d: Likewise.
+ * testsuite/ld-aarch64/pr20402.d: Likewise.
+
+2021-11-15 Luis Machado <luis.machado@linaro.org>
+
+ Extend the prologue analyzer to handle the bti instruction
+ Handle the BTI instruction in the prologue analyzer. The patch handles all
+ the variations of the BTI instruction.
+
+2021-11-15 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix gdbarch_tdep ODR violation
+ I would like to be able to use non-trivial types in gdbarch_tdep types.
+ This is not possible at the moment (in theory), because of the one
+ definition rule.
+
+ To allow it, rename all gdbarch_tdep types to <arch>_gdbarch_tdep, and
+ make them inherit from a gdbarch_tdep base class. The inheritance is
+ necessary to be able to pass pointers to all these <arch>_gdbarch_tdep
+ objects to gdbarch_alloc, which takes a pointer to gdbarch_tdep.
+
+ These objects are never deleted through a base class pointer, so I
+ didn't include a virtual destructor. In the future, if gdbarch objects
+ deletable, I could imagine that the gdbarch_tdep objects could become
+ owned by the gdbarch objects, and then it would become useful to have a
+ virtual destructor (so that the gdbarch object can delete the owned
+ gdbarch_tdep object). But that's not necessary right now.
+
+ It turns out that RISC-V already has a gdbarch_tdep that is
+ non-default-constructible, so that provides a good motivation for this
+ change.
+
+ Most changes are fairly straightforward, mostly needing to add some
+ casts all over the place. There is however the xtensa architecture,
+ doing its own little weird thing to define its gdbarch_tdep. I did my
+ best to adapt it, but I can't test those changes.
+
+ Change-Id: Ic001903f91ddd106bd6ca09a79dabe8df2d69f3b
+
+2021-11-15 Clément Chigot <clement.chigot@atos.net>
+
+ COFF: avoid modifications over C_FILE filename aux entries.
+ Commit e86fc4a5bc37 ("PR 28447: implement multiple parameters for .file
+ on XCOFF") introduces C_FILE entries which can store additional
+ information.
+ However, some modifications are needed by them but not by the original
+ C_FILE entries, usually representing the filename.
+ This patch ensures that filename entries are kept as is, in order to
+ protect targets not supporting the additional entries.
+
+ * coffgen.c (coff_write_symbol): Protect filename entries
+ (coff_write_symbols): Likewise.
+ (coff_print_symbol): Likewise.
+
+2021-11-15 Eric Botcazou <ebotcazou@gcc.gnu.org>
+
+ Deal with full path in .file 0 directive
+ Gas uses the directory part, if present, of the .file 0 directive to set
+ entry 0 of the directory table in DWARF 5, which represents the "current
+ directory".
+
+ Now Gas also uses the file part of the same directive to set entry 0 of the
+ file table, which represents the "current compilation file". But the latter
+ need not be located in the former so GCC will use a full path in the file
+ part when it is passed a full path:
+
+ gcc -c /full/path/test.c -save-temps
+
+ yields:
+
+ .file 0 "/current/directory" "/full/path/test.c"
+
+ in the assembly file and:
+
+ The Directory Table (offset 0x22, lines 2, columns 1):
+ Entry Name
+ 0 (indirect line string, offset: 0x25): /current/directory
+ 1 (indirect line string, offset: 0x38): /full/path
+
+ The File Name Table (offset 0x30, lines 2, columns 2):
+ Entry Dir Name
+ 0 0 (indirect line string, offset: 0x43): /full/path/test.c
+
+ in the object file. Note the full path and the questionable Dir value in
+ the 0 entry of the file table.
+
+2021-11-15 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cris: make error message test a little more flexible
+ The point of this test is to just make sure the usage text is shown,
+ not the exact details of the usage text. So shorten the output test
+ to match the beginning. This fixes breakage when the output changed
+ slightly to include [--].
+
+ sim: run: fix crash in argc==0 error situation
+ The new argv processing code assumed that we were always passed a
+ command line. If we weren't, make sure we don't crash before we
+ get a chance to output an error message about incorrect usage.
+
+ sim: cris: touch up rvdummy handling
+ Add quiet build support and make sure it's removed with `make clean`.
+
+ sim: cris: replace custom "dest" test field with new --argv0
+ The #dest field used in the cris testsuite is a bit of hack to set the
+ argv[0] for the tests to read out later on. Now that the sim has an
+ option to set argv[0] explicitly, we don't need this custom field, so
+ let's drop it to harmonize the testsuites a little.
+
+ sim: run: add --argv0 option to control argv[0]
+ We default argv[0] to the program we run which is a standard *NIX
+ convention, but sometimes we want to be able to control the argv[0]
+ setting independently (especially for programs that inspect argv[0]
+ to change their behavior or output). Add an option to control it.
+
+2021-11-15 Mike Frysinger <vapier@gentoo.org>
+
+ sim: split program path out of argv vector
+ We use the program argv to both find the program to run (argv[0]) and
+ to hold the arguments to the program. Most of the time this is fine,
+ but if we want to let programs specify argv[0] independently (which is
+ possible in standard *NIX programs), this double duty doesn't work.
+
+ So let's split the path to the program to run out into a separate
+ field by itself. This simplifies the various sim_open funcs too.
+
+ By itself, this code is more of a logical cleanup than something that
+ is super useful. But it will open up customization of argv[0] in a
+ follow up commit. Split the changes to make it easier to review.
+
+2021-11-15 Mike Frysinger <vapier@gentoo.org>
+
+ sim: bfin: fix mach/xfail usage in tests
+ Set the mach to the right value all the time, and update xfail to
+ say the test fails on all targets. WIth multitarget testing, the
+ idea of target here doesn't make much sense.
+
+2021-11-15 Alan Modra <amodra@gmail.com>
+
+ -Waddress fixes for gold testsuite
+ Current mainline gcc.
+ common_test_1.c: In function 'main':
+ common_test_1.c:56:14: error: comparison between two arrays [-Werror=array-compare]
+ 56 | assert (c5 > c4);
+ | ^
+ common_test_1.c:56:14: note: use '&c5[0] > &c4[0]' to compare the addresses
+
+ * testsuite/common_test_1.c: Avoid -Waddress warnings.
+ * testsuite/common_test_1_v1.c: Likewise.
+ * testsuite/common_test_1_v2.c: Likewise.
+ * testsuite/script_test_2.cc: Likewise.
+
+2021-11-15 Alan Modra <amodra@gmail.com>
+
+ PowerPC64 @notoc in non-power10 code
+ R_PPC64_REL24_P9NOTOC is a variant of R_PPC64_REL24_NOTOC for use on
+ @notoc cals from non-power10 code in the rare case that using such a
+ construct is useful. R_PPC64_REL24_P9NOTOC will be emitted by gas
+ rather than R_PPC64_REL24_NOTOC when @notoc is used in a branch
+ instruction if power10 instructions are not enabled at that point.
+ The new relocation tells the linker to not use power10 instructions on
+ any stub emitted for that branch, unless overridden by
+ --power10-stubs=yes.
+
+ The current linker heuristic of only generating power10 instructions
+ for stubs if power10-only relocations are detected, continues to be
+ used.
+
+ include/
+ * elf/ppc64.h (R_PPC64_REL24_P9NOTOC): Define.
+ bfd/
+ * reloc.c (BFD_RELOC_PPC64_REL24_P9NOTOC): Define.
+ * elf64-ppc.c (ppc64_elf_howto_raw): Add entry for new reloc.
+ (ppc64_elf_reloc_type_lookup): Handle it.
+ (enum ppc_stub_type): Delete.
+ (enum ppc_stub_main_type, ppc_stub_sub_type): New.
+ (struct ppc_stub_type): New.
+ (struct ppc_stub_hash_entry): Use the above new type.
+ (struct ppc_link_hash_table): Update stub_count.
+ (is_branch_reloc, ppc64_elf_check_relocs),
+ (toc_adjusting_stub_needed): Handle new reloc.
+ (stub_hash_newfunc, select_alt_stub, ppc_merge_stub),
+ (ppc_type_of_stub, plt_stub_size, build_plt_stub),
+ (build_tls_get_addr_head, build_tls_get_addr_tail),
+ (ppc_build_one_stub, ppc_size_one_stub, ppc64_elf_size_stubs),
+ (ppc64_elf_build_stubs, ppc64_elf_relocate_section): Handle new
+ reloc. Modify stub handling to suit new scheme.
+ * bfd-in2.h: Regenerate.
+ * libbfd.h: Regenerate.
+ gas/
+ * config/tc-ppc.c (ppc_elf_suffix): When power10 is not enabled
+ return BFD_RELOC_PPC64_REL24_P9NOTOC for @notoc.
+ (fixup_size, ppc_force_relocation, ppc_fix_adjustable): Handle
+ BFD_RELOC_PPC64_REL24_P9NOTOC.
+ ld/
+ * testsuite/ld-powerpc/callstub-2.s: Add .machine power10.
+
+2021-11-15 Alan Modra <amodra@gmail.com>
+
+ Regenerate a couple of files
+ A couple of files changed on my latest --enable-maintainer-mode
+ build. ld/Makefile.in had a missing dependency but better sorting of
+ the loongson entries.
+
+ intl/
+ * configure: Regenerate.
+ ld/
+ * Makefile.am: Sort loongson entries.
+ * Makefile.in: Regenerate.
+
+2021-11-15 Pedro Alves <pedro@palves.net>
+
+ Fix build with current GCC: EL_EXPLICIT(location) always non-NULL
+ Compiling GDB with current GCC (1b4a63593b) runs into this:
+
+ src/gdb/location.c: In function 'int event_location_empty_p(const event_location*)':
+ src/gdb/location.c:963:38: error: the address of 'event_location::<unnamed union>::explicit_loc' will never be NULL [-Werror=address]
+ 963 | return (EL_EXPLICIT (location) == NULL
+ | ^
+ src/gdb/location.c:57:30: note: 'event_location::<unnamed union>::explicit_loc' declared here
+ 57 | struct explicit_location explicit_loc;
+ | ^~~~~~~~~~~~
+
+ GCC is right, EL_EXPLICIT is defined as returning the address of an
+ union field:
+
+ /* An explicit location. */
+ struct explicit_location explicit_loc;
+ #define EL_EXPLICIT(P) (&((P)->u.explicit_loc))
+
+ and thus must always be non-NULL.
+
+ Change-Id: Ie74fee7834495a93affcefce03c06e4d83ad8191
+
+2021-11-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-14 Lancelot SIX <lsix@lancelotsix.com>
+
+ [PR gdb/16238] Add completer for the show user command
+ The 'show user' command (which shows the definition of non-python/scheme
+ user defined commands) is currently missing a completer. This is
+ mentioned in PR 16238. Having one can improve the user experience.
+
+ In this commit I propose an implementation for such completer as well as
+ the associated tests.
+
+ Tested on x86_64 GNU/Linux.
+
+ All feedbacks are welcome.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16238
+
+2021-11-14 Alan Modra <amodra@gmail.com>
+
+ sync libbacktrace from gcc
+
+2021-11-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-13 H.J. Lu <hjl.tools@gmail.com>
+
+ Sync Makefile.tpl with GCC
+ * Makefile.tpl: Sync with GCC.
+ * Makefile.in: Regenerate.
+
+2021-11-13 Mike Frysinger <vapier@gentoo.org>
+
+ sim: sh: fix switch-bool warnings
+ This code triggers -Werror=switch-bool warnings with <=gcc-5 versions.
+ Rework it to use if statements instead as it also simplifies a bit.
+
+ sim: sh: rework carry checks to not rely on integer overflows
+ In <=gcc-7 versions, -fstrict-overflow is enabled by default, and that
+ triggers warnings in this code that relies on integer overflows to test
+ for carries. Change the logic to test against the limit directly.
+
+2021-11-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-12 Carl Love <cel@us.ibm.com>
+
+ Fix gdb.base/sigstep.exp test for ppc
+ The test stops at <signal_handler called> which is the call to the handler
+ rather than in the handler as intended. This patch replaces the
+ gdb_test "$enter_cmd to handler" with a gdb_test_multiple test. The multiple
+ test looks for the stop at <signal_handler called>. If found, the command
+ is issued again. The test passes if gdb stops in the handler as expected.
+
+ (gdb) PASS: gdb.base/sigstep.exp: stepi to handler, nothing in handler, step
+ from handler: continue to signal
+ stepi
+ <signal handler called>
+ 1: x/i $pc
+ => 0x7ffff7f80440 <__kernel_start_sigtramp_rt64>: bctrl
+ (gdb) stepi
+ handler (sig=551) at sigstep.c:32
+ 32 {
+ 1: x/i $pc
+ => 0x10000097c <handler>: addis r2,r12,2
+ (gdb) PASS: gdb.base/sigstep.exp: stepi to handler, nothing in handler,
+ step from handler: stepi to handler
+
+ Patch has been tested on x86_64-linux and ppc64le-linux with no test failures.
+
+2021-11-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix regexp in gdb.base/foll-vfork.exp
+ On OBS I ran into:
+ ...
+ (gdb) PASS: gdb.base/foll-vfork.exp: exit: \
+ vfork relations in info inferiors: continue to child exit
+ info inferiors^M
+ Num Description Connection Executable ^M
+ 1 <null> foll-vfork-exit ^M
+ * 2 <null> foll-vfork-exit ^M
+ (gdb) I'm the proud parent of child #5044!^M
+ FAIL: gdb.base/foll-vfork.exp: exit: vfork relations in info inferiors: \
+ vfork relation no longer appears in info inferiors (timeout)
+ ...
+
+ Fix this by removing the '$' anchor in the corresponding '$gdb_prompt $'
+ regexps.
+
+ Tested on x86_64-linux.
+
+2021-11-12 Alan Modra <amodra@gmail.com>
+
+ Don't compile some opcodes files when bfd is 32-bit only
+ * Makefile.am (TARGET_LIBOPCODES_CFILES): Split into..
+ (TARGET64_LIBOPCODES_CFILES): ..this and..
+ (TARGET32_LIBOPCODES_CFILES): ..this.
+ (ALL_MACHINES): Likewise split to
+ (ALL64_MACHINES, ALL32_MACHINES): ..this.
+ * disassemble.c: Define some ARCH_* when ARCH_all only if BFD64.
+ * configure.ac (BFD_MACHINES): Defined depending on BFD_ARCH_SIZE.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+ Import Makefile.def from gcc
+ * Makefile.def: Import from gcc.
+ * Makefile.in: Regenerate.
+
+2021-11-12 Alan Modra <amodra@gmail.com>
+
+ Fix demangle style usage info
+ Extract allowed styles from libiberty, so we don't have to worry about
+ our help messages getting out of date. The function probably belongs
+ in libiberty/cplus-dem.c but it can be here for a while to iron out
+ bugs.
+
+ PR 28581
+ * demanguse.c: New file.
+ * demanguse.h: New file.
+ * nm.c (usage): Break up output. Use display_demangler_styles.
+ * objdump.c (usage): Use display_demangler_styles.
+ * readelf.c (usage): Likewise.
+ * Makefile.am: Add demanguse.c and demanguse.h.
+ * Makefile.in: Regenerate.
+ * po/POTFILESin: Regenerate.
+
+2021-11-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-11 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix "set scheduler-locking" thread exit hang
+ GDB hangs when doing this:
+
+ - launch inferior with multiple threads
+ - multiple threads hit some breakpoint(s)
+ - one breakpoint hit is presented as a stop, the rest are saved as
+ pending wait statuses
+ - "set scheduler-locking on"
+ - resume the currently selected thread (because of scheduler-locking,
+ it's the only one resumed), let it execute until exit
+ - GDB hangs, not showing the prompt, impossible to interrupt with ^C
+
+ When the resumed thread exits, we expect the target to return a
+ TARGET_WAITKIND_NO_RESUMED event, and that's what we see:
+
+ [infrun] fetch_inferior_event: enter
+ [infrun] scoped_disable_commit_resumed: reason=handling event
+ [infrun] random_pending_event_thread: None found.
+ [Thread 0x7ffff7d9c700 (LWP 309357) exited]
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: -1.0.0 [process -1],
+ [infrun] print_target_wait_results: status->kind = no-resumed
+ [infrun] handle_inferior_event: status->kind = no-resumed
+ [infrun] handle_no_resumed: TARGET_WAITKIND_NO_RESUMED (ignoring: found resumed)
+ [infrun] prepare_to_wait: prepare_to_wait
+ [infrun] reset: reason=handling event
+ [infrun] maybe_set_commit_resumed_all_targets: not requesting commit-resumed for target native, no resumed threads
+ [infrun] fetch_inferior_event: exit
+
+ The problem is in handle_no_resumed: we check if some other thread is
+ actually resumed, to see if we should ignore that event (see comments in
+ that function for more info). If this condition is true:
+
+ (thread->executing () || thread->has_pending_waitstatus ())
+
+ ... then we ignore the event. The problem is that there are some non-resumed
+ threads with a pending event, which makes us ignore the event. But these
+ threads are not resumed, so we end up waiting while nothing executes, hence
+ waiting for ever.
+
+ My first fix was to change the condition to:
+
+ (thread->executing ()
+ || (thread->resumed () && thread->has_pending_waitstatus ()))
+
+ ... but then it occured to me that we could simply check for:
+
+ (thread->resumed ())
+
+ Since "executing" implies "resumed", checking simply for "resumed"
+ covers threads that are resumed and executing, as well as threads that
+ are resumed with a pending status, which is what we want.
+
+ Change-Id: Ie796290f8ae7f34c026ca3a8fcef7397414f4780
+
+2021-11-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix Wimplicit-exception-spec-mismatch in clang build
+ When building with clang 13 (and -std=gnu++17 to work around an issue in
+ string_view-selftests.c), we run into a few Wimplicit-exception-spec-mismatch
+ warnings:
+ ...
+ src/gdbsupport/new-op.cc:102:1: error: function previously declared with an \
+ explicit exception specification redeclared with an implicit exception \
+ specification [-Werror,-Wimplicit-exception-spec-mismatch]
+ operator delete (void *p)
+ ^
+ /usr/include/c++/11/new:130:6: note: previous declaration is here
+ void operator delete(void*) _GLIBCXX_USE_NOEXCEPT
+ ^
+ ...
+
+ These are due to recent commit 5fff6115fea "Fix
+ LD_PRELOAD=/usr/lib64/libasan.so.6 gdb".
+
+ Fix this by adding the missing noexcept.
+
+ Build on x86_64-linux, using gcc 7.5.0 and clang 13.0.0.
+
+2021-11-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix build with -std=c++11
+ When building with -std=c++11, we run into two Werror=missing-declarations:
+ ...
+ new-op.cc: In function 'void operator delete(void*, std::size_t)':
+ new-op.cc:114:1: error: no previous declaration for \
+ 'void operator delete(void*, std::size_t)' [-Werror=missing-declarations]
+ operator delete (void *p, std::size_t) noexcept
+ ^~~~~~~~
+ new-op.cc: In function 'void operator delete [](void*, std::size_t)':
+ new-op.cc:132:1: error: no previous declaration for \
+ 'void operator delete [](void*, std::size_t)' [-Werror=missing-declarations]
+ operator delete[] (void *p, std::size_t) noexcept
+ ^~~~~~~~
+ ...
+
+ These are due to recent commit 5fff6115fea "Fix
+ LD_PRELOAD=/usr/lib64/libasan.so.6 gdb".
+
+ The declarations are provided by <new> (which is included) for c++14 onwards,
+ but they are missing for c++11.
+
+ Fix this by adding the missing declarations.
+
+ Tested on x86_64-linux, with gcc 7.5.0, both without (implying -std=gnu++14) and
+ with -std=c++11.
+
+2021-11-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add gdb.arch/ppc64-break-on-_exit.exp
+ Add a regression test-case for commit a50bdb99afe "[gdb/tdep, rs6000] Don't
+ skip system call in skip_prologue":
+ - set a breakpoint on a local copy of glibc's _exit, and
+ - verify that it triggers.
+
+ The test-case uses an assembly file by default, but also has the possibility
+ to use a C source file instead.
+
+ Tested on ppc64le-linux. Verified that the test-case fails without
+ aforementioned commit, and passes with the commit. Both with assembly
+ and C source.
+
+2021-11-11 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Dump objects according to the elf architecture attribute.
+ For now we should always generate the elf architecture attribute both for
+ elf and linux toolchains, so that we could dump the objects correctly
+ according to the generated architecture string. This patch resolves the
+ problem that we probably dump an object with c.nop instructions, but
+ in fact the c extension isn't allowed. Consider the following case,
+
+ nelson@LAPTOP-QFSGI1F2:~/test$ cat temp.s
+ .option norvc
+ .option norelax
+ .text
+ add a0, a0, a0
+ .byte 0x1
+ .balign 16
+ nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-as temp.s -o temp.o
+ nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-objdump -d temp.o
+
+ temp.o: file format elf32-littleriscv
+
+ Disassembly of section .text:
+
+ 00000000 <.text>:
+ 0: 00a50533 add a0,a0,a0
+ 4: 01 .byte 0x01
+ 5: 00 .byte 0x00
+ 6: 0001 nop
+ 8: 00000013 nop
+ c: 00000013 nop
+ nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-readelf -A temp.o
+ Attribute Section: riscv
+ File Attributes
+ Tag_RISCV_arch: "rv32i2p0_m2p0_a2p0_f2p0_d2p0"
+
+ The c.nop at address 0x6 is generated for alignment, but since the rvc isn't
+ allowed for this object, dump it as a c.nop instruction looks wrong. After
+ applying this patch, I get the following result,
+
+ nelson@LAPTOP-QFSGI1F2:~/test$ ~/binutils-dev/build-elf32-upstream/build-install/bin/riscv32-unknown-elf-objdump -d temp.o
+
+ temp.o: file format elf32-littleriscv
+
+ Disassembly of section .text:
+
+ 00000000 <.text>:
+ 0: 00a50533 add a0,a0,a0
+ 4: 01 .byte 0x01
+ 5: 00 .byte 0x00
+ 6: 0001 .2byte 0x1
+ 8: 00000013 nop
+ c: 00000013 nop
+
+ For the current objdump, we dump data to .byte/.short/.word/.dword, and
+ dump the unknown or unsupported instructions to .2byte/.4byte/.8byte, which
+ respectively are 2, 4 and 8 bytes instructions. Therefore, we shouldn't
+ dump the 0x0001 as a c.nop instruction in the above case, we should dump
+ it to .2byte 0x1 as a unknown instruction, since the rvc is disabled.
+
+ However, consider that some people may use the new objdump to dump the old
+ objects, which don't have any elf attributes. We usually set the default
+ architecture string to rv64g by bfd/elfxx-riscv.c:riscv_set_default_arch.
+ But this will cause rvc instructions to be unrecognized. Therefore, we
+ set the default architecture string to rv64gc for disassembler, to keep
+ the previous behavior.
+
+ This patch pass the riscv-gnu-toolchain gcc/binutils regressions for
+ rv32emc-elf, rv32gc-linux, rv32i-elf, rv64gc-elf and rv64gc-linux
+ toolchains. Also, tested by --enable-targets=all and can build
+ riscv-gdb successfully.
+
+ bfd/
+ * elfnn-riscv.c (riscv_merge_arch_attr_info): Tidy the
+ codes for riscv_parse_subset_t setting.
+ * elfxx-riscv.c (riscv_get_default_ext_version): Updated.
+ (riscv_subset_supports): Moved from gas/config/tc-riscv.c.
+ (riscv_multi_subset_supports): Likewise.
+ * elfxx-riscv.h: Added extern for riscv_subset_supports and
+ riscv_multi_subset_supports.
+ gas/
+ * config/tc-riscv.c (riscv_subset_supports): Moved to
+ bfd/elfxx-riscv.c.
+ (riscv_multi_subset_supports): Likewise.
+ (riscv_rps_as): Defined for architectrue parser.
+ (riscv_set_arch): Updated.
+ (riscv_set_abi_by_arch): Likewise.
+ (riscv_csr_address): Likewise.
+ (reg_lookup_internal): Likewise.
+ (riscv_ip): Likewise.
+ (s_riscv_option): Updated.
+ * testsuite/gas/riscv/mapping-04b.d: Updated.
+ * testsuite/gas/riscv/mapping-norelax-03b.d: Likewise.
+ * testsuite/gas/riscv/mapping-norelax-04b.d: Likewise.
+ opcodes/
+ * riscv-dis.c: Include elfxx-riscv.h since we need the
+ architecture parser. Also removed the cpu-riscv.h, it
+ is already included in elfxx-riscv.h.
+ (default_isa_spec): Defined since the parser need this
+ to set the default architecture string.
+ (xlen): Moved out from riscv_disassemble_insn as a global
+ variable, it is more convenient to initialize riscv_rps_dis.
+ (riscv_subsets): Defined to recoed the supported
+ extensions.
+ (riscv_rps_dis): Defined for architectrue parser.
+ (riscv_disassemble_insn): Call riscv_multi_subset_supports
+ to make sure if the instructions are valid or not.
+ (print_insn_riscv): Initialize the riscv_subsets by parsing
+ the elf architectrue attribute. Otherwise, set the default
+ architectrue string to rv64gc.
+
+2021-11-11 Mike Frysinger <vapier@gentoo.org>
+
+ sim: testsuite: drop sim_compile cover function
+ Most code isn't using this, and the only call site (in one cris file)
+ can use target_compile directly. So switch it over to simplify.
+
+ sim: cris: stop testing a.out explicitly [ld/13900]
+ Since gcc dropped support for a.out starting with 4.4.0 in 2009, it's
+ been impossible to verify this code actually still works. Since it
+ crashes in ld, and it uses a config option that no other tests uses
+ and we want to remove, drop the test to avoid all the trouble.
+
+ sim: io: tweak compiler workaround with error output
+ Outputting an extra space broke a cris test. Change the workaround
+ to use %s with an empty string to avoid the compiler warning but not
+ output an extra space.
+
+ sim: testsuite: delete unused arm remote host logic
+ There's no need to sync testutils.inc with remote hosts. The one
+ we have in the source tree is all we need and only thing we test.
+ Delete it to simplify.
+
+ sim: synacor: simplify test generation
+ Objcopy was used to create a binary file of just the executable code
+ since the environment requires code to based at address 0. We can
+ accomplish the same thing with the -Ttext=0 flag, so switch to that
+ to get rid of custom logic.
+
+2021-11-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-10 Tom Tromey <tromey@adacore.com>
+
+ Handle PIE in .debug_loclists
+ Simon pointed out that my recent patches to .debug_loclists caused
+ some regressions. After a brief discussion we realized it was because
+ his system compiler defaults to PIE.
+
+ This patch changes this code to unconditionally apply the text offset
+ here. It also changes loclist_describe_location to work more like
+ dwarf2_find_location_expression.
+
+ I tested this by running the gdb.dwarf2 tests both with and without
+ -pie.
+
+2021-11-10 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ arm: enable Cortex-A710 CPU
+ This patch is adding support for Cortex-A710 CPU in Arm.
+
+ bfd/
+
+ * cpu-arm.c (processors): Add cortex-a710.
+
+ gas/
+
+ * NEWS: Update docs.
+ * config/tc-arm.c (arm_cpus): Add cortex-a710 to -mcpu.
+ * doc/c-arm.texi: Update docs.
+ * testsuite/gas/arm/cpu-cortex-a710.d: New test.
+
+2021-11-10 Clément Chigot <clement.chigot@atos.net>
+
+ gdb: adjust x_file fields on COFF readers
+ Commit e86fc4a5bc37 ("PR 28447: implement multiple parameters for .file
+ on XCOFF") changes the structure associated to the internal
+ representation of files in COFF formats. However, gdb directory update
+ has been forgotten, leading to compilation errors of this kind:
+
+ CXX coffread.o
+ /home/simark/src/binutils-gdb/gdb/coffread.c: In function 'const char* coff_getfilename(internal_auxent*)':
+ /home/simark/src/binutils-gdb/gdb/coffread.c:1343:29: error: 'union internal_auxent::<unnamed struct>::<unnamed>' has no member named 'x_zeroes'
+ 1343 | if (aux_entry->x_file.x_n.x_zeroes == 0)
+ | ^~~~~~~~
+
+ Fix it by adjusting the COFF code in GDB.
+
+ Change-Id: I703fa134bc722d47515efbd72b88fa5650af6c3c
+
+2021-11-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add gdb.opt/break-on-_exit.exp
+ Add a test-case to excercise the problem scenario reported in PR28527 and
+ fixed in commit a50bdb99afe "[gdb/tdep, rs6000] Don't skip system call in
+ skip_prologue":
+ - set a breakpoint on _exit, and
+ - verify that it triggers.
+
+ Note that this is not a regression test for that commit. Since the actual
+ code in _exit may vary across os instances, we cannot guarantee that the
+ problem will always trigger with this test-case.
+
+ Rather, this test-case is a version of the original test-case
+ (gdb.threads/process-dies-while-detaching.exp) that is minimal while still
+ reproducing the problem reported in PR28527, in that same setting.
+
+ The benefit of this test-case is that it exercise real-life code and may
+ expose similar problems in other settings. Also, it provides a much easier
+ test-case to investigate in case a similar problem occurs.
+
+ Tested on x86_64-linux and ppc64le-linux.
+
+2021-11-10 Mike Frysinger <vapier@gentoo.org>
+
+ sim: frv: flip trapdump default back to off
+ When I refactored this by scoping it to sim-frv-xxx in commit
+ e7954ef5e5ed90fb7d28c013518f4c2e6bcd20a1 ("sim: frv: scope the
+ unique configure flag"), I changed the default from off to on.
+ While the feature is nice for developers, it breaks a bunch of
+ tests which aren't expecting this extra output. So flip it back
+ to off by default.
+
+2021-11-10 Pekka Seppänen <pexu@sourceware.mail.kapsi.fi>
+
+ PR28575, readelf.c and strings.c use undefined type uint
+ Since --unicode support (commit b3aa80b45c4) both binutils/readelf.c
+ and binutils/strings.c use 'uint' in a few locations. It likely
+ should be 'unsigned int' since there isn't anything defining 'uint'
+ within binutils (besides zlib) and AFAIK it isn't a standard type.
+
+ * readelf.c (print_symbol): Replace uint with unsigned int.
+ * strings.c (string_min, display_utf8_char): Likewise.
+ (print_unicode_stream_body, print_unicode_stream): Likewise.
+ (print_strings): Likewise.
+ (get_unicode_byte): Wrap long line.
+
+2021-11-10 Clément Chigot <clement.chigot@atos.net>
+
+ ld: set correct flags for AIX shared tests
+ Previous flags were aimed to be run with XLC.
+ Nowadays, only GCC is being tested with GNU toolchain. Moreover,
+ recent XLC versions might also accept "-shared".
+
+ * testsuite/ld-shared/shared.exp: Adjust shared flags.
+
+2021-11-10 Clément Chigot <clement.chigot@atos.net>
+
+ PR 28447: implement multiple parameters for .file on XCOFF
+ On XCOFF, ".file" pseudo-op allows 3 extras parameters to provide
+ additional information to AIX linker, or its debugger. These are
+ stored in auxiliary entries of the C_FILE symbol.
+
+ bfd/
+ PR 28447
+ * coffcode.h (combined_entry_type): Add extrap field.
+ (coff_bigobj_swap_aux_in): Adjust names of x_file fields.
+ (coff_bigobj_swap_aux_out): Likewise.
+ * coffgen.c (coff_write_auxent_fname): New function.
+ (coff_fix_symbol_name): Write x_file using
+ coff_write_auxent_fname.
+ (coff_write_symbol): Likewise.
+ (coff_write_symbols): Add C_FILE auxiliary entries to
+ string table if needed.
+ (coff_get_normalized_symtab): Adjust names of x_file fields.
+ Normalize C_FILE auxiliary entries.
+ (coff_print_symbol): Print C_FILE auxiliary entries.
+ * coff-rs6000.c (_bfd_xcoff_swap_aux_in): Adjust names of
+ x_file fields.
+ (_bfd_xcoff_swap_aux_out): Likewise.
+ * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Likewise.
+ (_bfd_xcoff64_swap_aux_out): Likewise.
+ * cofflink.c (_bfd_coff_final_link): Likewise.
+ (_bfd_coff_link_input_bfd): Likewise.
+ * coffswap.h (coff_swap_aux_in): Likewise.
+ * peXXigen.c (_bfd_XXi_swap_aux_in): Likewise.
+ (_bfd_XXi_swap_aux_out): Likewise.
+ * xcofflink.c (xcoff_link_input_bfd): Likewise.
+ * libcoff.h: Regenerate.
+ gas/
+ * config/tc-ppc.c (ppc_file): New function.
+ * config/tc-ppc.h (OBJ_COFF_MAX_AUXENTRIES): Change to 4.
+ * testsuite/gas/ppc/aix.exp: Add tests.
+ * testsuite/gas/ppc/xcoff-file-32.d: New test.
+ * testsuite/gas/ppc/xcoff-file-64.d: New test.
+ * testsuite/gas/ppc/xcoff-file.s: New test.
+ include/
+ * coff/internal.h (union internal_auxent): Change x_file to be a
+ struct instead of a union. Add x_ftype field.
+ * coff/rs6000.h (union external_auxent): Add x_resv field.
+ * coff/xcoff.h (XFT_FN): New define.
+ (XFT_CT): Likewise.
+ (XFT_CV): Likewise.
+ (XFT_CD): Likewise.
+
+2021-11-10 Kevin Buettner <kevinb@redhat.com>
+
+ Test case for Bug 28308
+ The purpose of this test is described in the comments in
+ dprintf-execution-x-script.exp.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28308
+
+ The name of this new test was based on that of an existing test,
+ bp-cmds-execution-x-script.exp. I started off by copying that test,
+ adding to it, and then rewriting almost all of it. It's different
+ enough that I decided that listing the copyright year as 2021
+ was sufficient.
+
+2021-11-10 Kevin Buettner <kevinb@redhat.com>
+
+ Fix PR 28308 - dprintf breakpoints not working when run from script
+ This commit fixes Bug 28308, titled "Strange interactions with
+ dprintf and break/commands":
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28308
+
+ Since creating that bug report, I've found a somewhat simpler way of
+ reproducing the problem. I've encapsulated it into the GDB test case
+ which I've created along with this bug fix. The name of the new test
+ is gdb.base/dprintf-execution-x-script.exp, I'll demonstrate the
+ problem using this test case, though for brevity, I've placed all
+ relevant files in the same directory and have renamed the files to all
+ start with 'dp-bug' instead of 'dprintf-execution-x-script'.
+
+ The script file, named dp-bug.gdb, consists of the following commands:
+
+ dprintf increment, "dprintf in increment(), vi=%d\n", vi
+ break inc_vi
+ commands
+ continue
+ end
+ run
+
+ Note that the final command in this script is 'run'. When 'run' is
+ instead issued interactively, the bug does not occur. So, let's look
+ at the interactive case first in order to see the correct/expected
+ output:
+
+ $ gdb -q -x dp-bug.gdb dp-bug
+ ... eliding buggy output which I'll discuss later ...
+ (gdb) run
+ Starting program: /mesquite2/sourceware-git/f34-master/bld/gdb/tmp/dp-bug
+ vi=0
+ dprintf in increment(), vi=0
+
+ Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26
+ 26 in dprintf-execution-x-script.c
+ vi=1
+ dprintf in increment(), vi=1
+
+ Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26
+ 26 in dprintf-execution-x-script.c
+ vi=2
+ dprintf in increment(), vi=2
+
+ Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26
+ 26 in dprintf-execution-x-script.c
+ vi=3
+ [Inferior 1 (process 1539210) exited normally]
+
+ In this run, in which 'run' was issued from the gdb prompt (instead
+ of at the end of the script), there are three dprintf messages along
+ with three 'Breakpoint 2' messages. This is the correct output.
+
+ Now let's look at the output that I snipped above; this is the output
+ when 'run' is issued from the script loaded via GDB's -x switch:
+
+ $ gdb -q -x dp-bug.gdb dp-bug
+ Reading symbols from dp-bug...
+ Dprintf 1 at 0x40116e: file dprintf-execution-x-script.c, line 38.
+ Breakpoint 2 at 0x40113a: file dprintf-execution-x-script.c, line 26.
+ vi=0
+ dprintf in increment(), vi=0
+
+ Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26
+ 26 dprintf-execution-x-script.c: No such file or directory.
+ vi=1
+
+ Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26
+ 26 in dprintf-execution-x-script.c
+ vi=2
+
+ Breakpoint 2, inc_vi () at dprintf-execution-x-script.c:26
+ 26 in dprintf-execution-x-script.c
+ vi=3
+ [Inferior 1 (process 1539175) exited normally]
+
+ In the output shown above, only the first dprintf message is printed.
+ The 2nd and 3rd dprintf messages are missing! However, all three
+ 'Breakpoint 2...' messages are still printed.
+
+ Why does this happen?
+
+ bpstat_do_actions_1() in gdb/breakpoint.c contains the following
+ comment and code near the start of the function:
+
+ /* Avoid endless recursion if a `source' command is contained
+ in bs->commands. */
+ if (executing_breakpoint_commands)
+ return 0;
+
+ scoped_restore save_executing
+ = make_scoped_restore (&executing_breakpoint_commands, 1);
+
+ Also, as described by this comment prior to the 'async' field
+ in 'struct ui' in top.h, the main UI starts off in sync mode
+ when processing command line arguments:
+
+ /* True if the UI is in async mode, false if in sync mode. If in
+ sync mode, a synchronous execution command (e.g, "next") does not
+ return until the command is finished. If in async mode, then
+ running a synchronous command returns right after resuming the
+ target. Waiting for the command's completion is later done on
+ the top event loop. For the main UI, this starts out disabled,
+ until all the explicit command line arguments (e.g., `gdb -ex
+ "start" -ex "next"') are processed. */
+
+ This combination of things, the state of the static global
+ 'executing_breakpoint_commands' plus the state of the async
+ field in the main UI causes this behavior.
+
+ This is a backtrace after hitting the dprintf breakpoint for
+ the second time when doing 'run' from the script file, i.e.
+ non-interactively:
+
+ Thread 1 "gdb" hit Breakpoint 3, bpstat_do_actions_1 (bsp=0x7fffffffc2b8)
+ at /ironwood1/sourceware-git/f34-master/bld/../../worktree-master/gdb/breakpoint.c:4431
+ 4431 if (executing_breakpoint_commands)
+
+ #0 bpstat_do_actions_1 (bsp=0x7fffffffc2b8)
+ at gdb/breakpoint.c:4431
+ #1 0x00000000004d8bc6 in dprintf_after_condition_true (bs=0x1538090)
+ at gdb/breakpoint.c:13048
+ #2 0x00000000004c5caa in bpstat_stop_status (aspace=0x116dbc0, bp_addr=0x40116e, thread=0x137f450, ws=0x7fffffffc718,
+ stop_chain=0x1538090) at gdb/breakpoint.c:5498
+ #3 0x0000000000768d98 in handle_signal_stop (ecs=0x7fffffffc6f0)
+ at gdb/infrun.c:6172
+ #4 0x00000000007678d3 in handle_inferior_event (ecs=0x7fffffffc6f0)
+ at gdb/infrun.c:5662
+ #5 0x0000000000763cd5 in fetch_inferior_event ()
+ at gdb/infrun.c:4060
+ #6 0x0000000000746d7d in inferior_event_handler (event_type=INF_REG_EVENT)
+ at gdb/inf-loop.c:41
+ #7 0x00000000007a702f in handle_target_event (error=0, client_data=0x0)
+ at gdb/linux-nat.c:4207
+ #8 0x0000000000b8cd6e in gdb_wait_for_event (block=block@entry=0)
+ at gdbsupport/event-loop.cc:701
+ #9 0x0000000000b8d032 in gdb_wait_for_event (block=0)
+ at gdbsupport/event-loop.cc:597
+ #10 gdb_do_one_event () at gdbsupport/event-loop.cc:212
+ #11 0x00000000009d19b6 in wait_sync_command_done ()
+ at gdb/top.c:528
+ #12 0x00000000009d1a3f in maybe_wait_sync_command_done (was_sync=0)
+ at gdb/top.c:545
+ #13 0x00000000009d2033 in execute_command (p=0x7fffffffcb18 "", from_tty=0)
+ at gdb/top.c:676
+ #14 0x0000000000560d5b in execute_control_command_1 (cmd=0x13b9bb0, from_tty=0)
+ at gdb/cli/cli-script.c:547
+ #15 0x000000000056134a in execute_control_command (cmd=0x13b9bb0, from_tty=0)
+ at gdb/cli/cli-script.c:717
+ #16 0x00000000004c3bbe in bpstat_do_actions_1 (bsp=0x137f530)
+ at gdb/breakpoint.c:4469
+ #17 0x00000000004c3d40 in bpstat_do_actions ()
+ at gdb/breakpoint.c:4533
+ #18 0x00000000006a473a in command_handler (command=0x1399ad0 "run")
+ at gdb/event-top.c:624
+ #19 0x00000000009d182e in read_command_file (stream=0x113e540)
+ at gdb/top.c:443
+ #20 0x0000000000563697 in script_from_file (stream=0x113e540, file=0x13bb0b0 "dp-bug.gdb")
+ at gdb/cli/cli-script.c:1642
+ #21 0x00000000006abd63 in source_gdb_script (extlang=0xc44e80 <extension_language_gdb>, stream=0x113e540,
+ file=0x13bb0b0 "dp-bug.gdb") at gdb/extension.c:188
+ #22 0x0000000000544400 in source_script_from_stream (stream=0x113e540, file=0x7fffffffd91a "dp-bug.gdb",
+ file_to_open=0x13bb0b0 "dp-bug.gdb")
+ at gdb/cli/cli-cmds.c:692
+ #23 0x0000000000544557 in source_script_with_search (file=0x7fffffffd91a "dp-bug.gdb", from_tty=1, search_path=0)
+ at gdb/cli/cli-cmds.c:750
+ #24 0x00000000005445cf in source_script (file=0x7fffffffd91a "dp-bug.gdb", from_tty=1)
+ at gdb/cli/cli-cmds.c:759
+ #25 0x00000000007cf6d9 in catch_command_errors (command=0x5445aa <source_script(char const*, int)>,
+ arg=0x7fffffffd91a "dp-bug.gdb", from_tty=1, do_bp_actions=false)
+ at gdb/main.c:523
+ #26 0x00000000007cf85d in execute_cmdargs (cmdarg_vec=0x7fffffffd1b0, file_type=CMDARG_FILE, cmd_type=CMDARG_COMMAND,
+ ret=0x7fffffffd18c) at gdb/main.c:615
+ #27 0x00000000007d0c8e in captured_main_1 (context=0x7fffffffd3f0)
+ at gdb/main.c:1322
+ #28 0x00000000007d0eba in captured_main (data=0x7fffffffd3f0)
+ at gdb/main.c:1343
+ #29 0x00000000007d0f25 in gdb_main (args=0x7fffffffd3f0)
+ at gdb/main.c:1368
+ #30 0x00000000004186dd in main (argc=5, argv=0x7fffffffd508)
+ at gdb/gdb.c:32
+
+ There are two frames for bpstat_do_actions_1(), one at frame #16 and
+ the other at frame #0. The one at frame #16 is processing the actions
+ for Breakpoint 2, which is a 'continue'. The one at frame #0 is attempting
+ to process the dprintf breakpoint action. However, at this point,
+ the value of 'executing_breakpoint_commands' is 1, forcing an early
+ return, i.e. prior to executing the command(s) associated with the dprintf
+ breakpoint.
+
+ For the sake of comparison, this is what the stack looks like when hitting
+ the dprintf breakpoint for the second time when issuing the 'run'
+ command from the GDB prompt.
+
+ Thread 1 "gdb" hit Breakpoint 3, bpstat_do_actions_1 (bsp=0x7fffffffccd8)
+ at /ironwood1/sourceware-git/f34-master/bld/../../worktree-master/gdb/breakpoint.c:4431
+ 4431 if (executing_breakpoint_commands)
+
+ #0 bpstat_do_actions_1 (bsp=0x7fffffffccd8)
+ at gdb/breakpoint.c:4431
+ #1 0x00000000004d8bc6 in dprintf_after_condition_true (bs=0x16b0290)
+ at gdb/breakpoint.c:13048
+ #2 0x00000000004c5caa in bpstat_stop_status (aspace=0x116dbc0, bp_addr=0x40116e, thread=0x13f0e60, ws=0x7fffffffd138,
+ stop_chain=0x16b0290) at gdb/breakpoint.c:5498
+ #3 0x0000000000768d98 in handle_signal_stop (ecs=0x7fffffffd110)
+ at gdb/infrun.c:6172
+ #4 0x00000000007678d3 in handle_inferior_event (ecs=0x7fffffffd110)
+ at gdb/infrun.c:5662
+ #5 0x0000000000763cd5 in fetch_inferior_event ()
+ at gdb/infrun.c:4060
+ #6 0x0000000000746d7d in inferior_event_handler (event_type=INF_REG_EVENT)
+ at gdb/inf-loop.c:41
+ #7 0x00000000007a702f in handle_target_event (error=0, client_data=0x0)
+ at gdb/linux-nat.c:4207
+ #8 0x0000000000b8cd6e in gdb_wait_for_event (block=block@entry=0)
+ at gdbsupport/event-loop.cc:701
+ #9 0x0000000000b8d032 in gdb_wait_for_event (block=0)
+ at gdbsupport/event-loop.cc:597
+ #10 gdb_do_one_event () at gdbsupport/event-loop.cc:212
+ #11 0x00000000007cf512 in start_event_loop ()
+ at gdb/main.c:421
+ #12 0x00000000007cf631 in captured_command_loop ()
+ at gdb/main.c:481
+ #13 0x00000000007d0ebf in captured_main (data=0x7fffffffd3f0)
+ at gdb/main.c:1353
+ #14 0x00000000007d0f25 in gdb_main (args=0x7fffffffd3f0)
+ at gdb/main.c:1368
+ #15 0x00000000004186dd in main (argc=5, argv=0x7fffffffd508)
+ at gdb/gdb.c:32
+
+ This relatively short backtrace is due to the current UI's async field
+ being set to 1.
+
+ Yet another thing to be aware of regarding this problem is the
+ difference in the way that commands associated to dprintf breakpoints
+ versus regular breakpoints are handled. While they both use a command
+ list associated with the breakpoint, regular breakpoints will place
+ the commands to be run on the bpstat chain constructed in
+ bp_stop_status(). These commands are run later on. For dprintf
+ breakpoints, commands are run via the 'after_condition_true' function
+ pointer directly from bpstat_stop_status(). (The 'commands' field in
+ the bpstat is cleared in dprintf_after_condition_true(). This
+ prevents the dprintf commands from being run again later on when other
+ commands on the bpstat chain are processed.)
+
+ Another thing that I noticed is that dprintf breakpoints are the only
+ type of breakpoint which use 'after_condition_true'. This suggests
+ that one possible way of fixing this problem, that of making dprintf
+ breakpoints work more like regular breakpoints, probably won't work.
+ (I must admit, however, that my understanding of this code isn't
+ complete enough to say why. I'll trust that whoever implemented it
+ had a good reason for doing it this way.)
+
+ The comment referenced earlier regarding 'executing_breakpoint_commands'
+ states that the reason for checking this variable is to avoid
+ potential endless recursion when a 'source' command appears in
+ bs->commands. We know that a dprintf command is constrained to either
+ 1) execution of a GDB printf command, 2) an inferior function call of
+ a printf-like function, or 3) execution of an agent-printf command.
+ Therefore, infinite recursion due to a 'source' command cannot happen
+ when executing commands upon hitting a dprintf breakpoint.
+
+ I chose to fix this problem by having dprintf_after_condition_true()
+ directly call execute_control_commands(). This means that it no
+ longer attempts to go through bpstat_do_actions_1() avoiding the
+ infinite recursion check for potential 'source' commands on the
+ command chain. I think it simplifies this code a little bit too, a
+ definite bonus.
+
+ Summary:
+
+ * breakpoint.c (dprintf_after_condition_true): Don't call
+ bpstat_do_actions_1(). Call execute_control_commands()
+ instead.
+
+2021-11-10 Alan Modra <amodra@gmail.com>
+
+ Re: Add --unicode option
+ * objdump: Whitespace fixes.
+ (long_options): Correct "ctf" entry.
+
+2021-11-10 Alan Modra <amodra@gmail.com>
+
+ Re: Add --unicode option
+ At low optimisation levels gcc may warn.
+
+ * strings.c (print_unicode_stream_body): Avoid bogus "may be
+ used unitialised" warning.
+
+2021-11-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-09 Alan Modra <amodra@gmail.com>
+
+ PR28543, readelf entered an infinite loop
+ This little tweak terminates fuzzed binary readelf output a little
+ quicker.
+
+ PR 28543
+ * dwarf.c (read_and_display_attr_value): Consume a byte when
+ form is unrecognized.
+
+2021-11-09 Alan Modra <amodra@gmail.com>
+
+ PR28542, Undefined behaviours in readelf.c
+ PR 28542
+ * readelf.c (dump_relocations): Check that section headers have
+ been read before attempting to access section name.
+ (print_dynamic_symbol): Likewise.
+ (process_mips_specific): Delete dead code.
+
+2021-11-09 Pedro Alves <pedro@palves.net>
+
+ gdb::array_view slicing/container selftest - test std::array too
+ Change-Id: I2141b0b8a09f6521a59908599eb5ba1a19b18dc6
+
+2021-11-09 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb.debuginfod/fetch_src_and_symbols.exp: fix when GDB is built with AddressSanitizer
+ This test fails for me, showing:
+
+ ERROR: tcl error sourcing /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.debuginfod/fetch_src_and_symbols.exp.
+ ERROR: This GDB was configured as follows:
+ configure --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
+ --with-auto-load-dir=$debugdir:$datadir/auto-load
+ --with-auto-load-safe-path=$debugdir:$datadir/auto-load
+ ... and much more ...
+
+ The problem is that TCL's exec throws an error as soon as the exec'ed
+ process outputs on stderr. When GDB is built with ASan, it prints some
+ warnings about pre-existing signal handlers:
+
+ warning: Found custom handler for signal 7 (Bus error) preinstalled.
+ warning: Found custom handler for signal 8 (Floating point exception) preinstalled.
+ warning: Found custom handler for signal 11 (Segmentation fault) preinstalled.
+
+ Pass --quiet to GDB to avoid these warnings.
+
+ Change-Id: I3751d89b9b1df646da19149d7cb86775e2d3e80f
+
+2021-11-09 Tom Tromey <tromey@adacore.com>
+
+ Correctly handle DW_LLE_start_end
+ When the code to handle DW_LLE_start_end was added (as part of some
+ DWARF 5 work), it was written to add the base address. However, this
+ seems incorrect -- the DWARF standard describes this as an address,
+ not an offset from the base address.
+
+ This patch changes a couple of spots in dwarf2/loc.c to fix this
+ problem. It then changes decode_debug_loc_addresses to return
+ DEBUG_LOC_OFFSET_PAIR instead, which preserves the previous semantics.
+
+ This only showed up on the RISC-V target internally, due to the
+ combination of DWARF 5 and a newer version of GCC. I've updated a
+ couple of existing loclists test cases to demonstrate the bug.
+
+2021-11-09 Tom Tromey <tromey@adacore.com>
+
+ Fix build on rhES5
+ The rhES5 build failed due to an upstream import a while back. The
+ bug here is that, while the 'personality' function exists,
+ ADDR_NO_RANDOMIZE is only defined in <linux/personality.h>, not
+ <sys/personality.h>.
+
+ However, <linux/personality.h> does not declare the 'personality'
+ function, and <sys/personality.h> and <linux/personality.h> cannot
+ both be included.
+
+ This patch restores one of the removed configure checks and updates
+ the code to check it.
+
+ We had this as a local patch at AdaCore, because it seemed like there
+ was no interest upstream. However, now it turns out that this fixes
+ PR build/28555, so I'm sending it now.
+
+2021-11-09 H.J. Lu <hjl.tools@gmail.com>
+
+ doc/ctf-spec.texi: Remove "@validatemenus off"
+ Remove @validatemenus from ctf-spec.texi, which has been removed from
+ texinfo by
+
+ commit a16dd1a9ece08568a1980b9a65a3a9090717997f
+ Author: Gavin Smith <gavinsmith0123@gmail.com>
+ Date: Mon Oct 12 16:32:37 2020 +0100
+
+ * doc/texinfo.texi
+ (Writing a Menu, Customization Variables for @-Commands)
+ (Command List),
+ * doc/refcard/txirefcard.tex
+ Remove @validatemenus.
+ * tp/Texinfo/XS/Makefile.am (command_ids.h): Use gawk instead
+ of awk. Avoid discouraged "$p" usage, using "$(p)" instead.
+ * tp/Texinfo/XS/configure.ac: Check for gawk.
+
+ commit 128acab3889b51809dc3bd3c6c74b61d13f7f5f4
+ Author: Gavin Smith <gavinsmith0123@gmail.com>
+ Date: Thu Jan 3 14:51:53 2019 +0000
+
+ Update refcard.
+
+ * doc/refcard/txirefcard.tex: @setfilename is no longer
+ mandatory. Do not mention @validatemenus or explicitly giving
+ @node pointers, as these are not very important features.
+
+ PR libctf/28567
+ * doc/ctf-spec.texi: Remove "@validatemenus off".
+
+2021-11-09 Nick Clifton <nickc@redhat.com>
+
+ Add --unicode option to control how unicode characters are handled by display tools.
+ * nm.c: Add --unicode option to control how unicode characters are
+ handled.
+ * objdump.c: Likewise.
+ * readelf.c: Likewise.
+ * strings.c: Likewise.
+ * binutils.texi: Document the new feature.
+ * NEWS: Document the new feature.
+ * testsuite/binutils-all/unicode.exp: New file.
+ * testsuite/binutils-all/nm.hex.unicode
+ * testsuite/binutils-all/strings.escape.unicode
+ * testsuite/binutils-all/objdump.highlight.unicode
+ * testsuite/binutils-all/readelf.invalid.unicode
+
+2021-11-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: sh: simplify testsuite a bit
+ Switch from the centralized list in the exp file to each test declaring
+ its own requirements which they're already (mostly) doing. This will
+ increase coverage slightly by running more tests in more configurations
+ since the hardcoded exp list was a little out of date.
+
+ We have to mark the psh* tests as shdsp only (to match what the exp
+ file was doing), mark the fsca & fsrra tests as failing (since they
+ weren't even being run by the exp file), and to fix the expected
+ output & status of the fail test.
+
+2021-11-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cris: clean up missing func prototype warnings
+ Move some unused funcs under existing #if 0 protection, mark a few
+ local funcs as static, and add missing prototypes for the rest which
+ are used from other files. This fixes all the fatal warnings in the
+ mloop files so we can turn -Werror on here fully.
+
+2021-11-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-08 Lancelot SIX <lsix@lancelotsix.com>
+
+ Improve gdb::array_view ctor from contiguous containers
+ While reading the interface of gdb::array_view, I realized that the
+ constructor that builds an array_view on top of a contiguous container
+ (such as std::vector, std::array or even gdb::array_view) can be
+ missused.
+
+ Lets consider the following code sample:
+
+ struct Parent
+ {
+ Parent (int a): a { a } {}
+ int a;
+ };
+
+ std::ostream &operator<< (std::ostream& os, const Parent & p)
+ { os << "Parent {a=" << p.a << "}"; return os; }
+
+ struct Child : public Parent
+ {
+ Child (int a, int b): Parent { a }, b { b } {}
+ int b;
+ };
+
+ std::ostream &operator<< (std::ostream& os, const Child & p)
+ { os << "Child {a=" << p.a << ", b=" << p.b << "}"; return os; }
+
+ template <typename T>
+ void print (const gdb::array_view<const T> &p)
+ {
+ std::for_each (p.begin (), p.end (), [](const T &p) { std::cout << p << '\n'; });
+ }
+
+ Then with the current interface nothinng prevents this usage of
+ array_view to be done:
+
+ const std::array<Child, 3> elts = {
+ Child {1, 2},
+ Child {3, 4},
+ Child {5, 6}
+ };
+ print_all<Parent> (elts);
+
+ This compiles fine and produces the following output:
+
+ Parent {a=1}
+ Parent {a=2}
+ Parent {a=3}
+
+ which is obviously wrong. There is nowhere in memory a Parent-like
+ object for which the A member is 2 and this call to print_all<Parent>
+ shold not compile at all (calling print_all<Child> is however fine).
+
+ This comes down to the fact that a Child* is convertible into a Parent*,
+ and that an array view is constructed to a pointer to the first element
+ and a size. The valid type pointed to that can be used with this
+ constructor are restricted using SFINAE, which requires that a
+ pointer to a member into the underlying container can be converted into a
+ pointer the array_view's data type.
+
+ This patch proposes to change the constraints on the gdb::array_view
+ ctor which accepts a container now requires that the (decayed) type of
+ the elements in the container match the (decayed) type of the array_view
+ being constructed.
+
+ Applying this change required minimum adjustment in GDB codebase, which
+ are also included in this patch.
+
+ Tested by rebuilding.
+
+2021-11-08 Lancelot SIX <lsix@lancelotsix.com>
+
+ Add a const version of gdb_argv:as_array_view
+ This commits adds const versions for the GET and AS_ARRAX_VIEW methods
+ of gdb_argv. Those methods will be required in the following patch of
+ the series.
+
+2021-11-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix nulltr -> nullptr typo
+ Change-Id: I04403bd85ec3fa75ea14130d68daba675a2a8aeb
+
+2021-11-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: tweak scoped_disable_commit_resumed uses when resuming all threads in non-stop
+ When doing "continue -a" in non-stop mode, each thread is individually
+ resumed while the commit resumed state is enabled. This forces the
+ target to commit each resumption immediately, instead of being able to
+ batch things.
+
+ The reason is that there is no scoped_disable_commit_resumed around the
+ loop over threads in continue_1, when "non_stop && all_threads" is true.
+ Since the proceed function is called once for each thread, the
+ scoped_disable_commit_resumed in proceed therefore forces commit-resumed
+ between each thread resumption. Add the necessary
+ scoped_disable_commit_resumed in continue_1 to avoid that.
+
+ I looked at the MI side of things, the function exec_continue, and found
+ that it was correct. There is a similar iteration over threads, and
+ there is a scoped_disable_commit_resumed at the function scope. This is
+ not wrong, but a bit more than we need. The branches that just call
+ continue_1 do not need it, as continue_1 takes care of disabling commit
+ resumed. So, move the scoped_disable_commit_resumed to the inner scope
+ where we iterate on threads and proceed them individually.
+
+ Here's an example debugging a multi-threaded program attached by
+ gdbserver (debug output trimmed for brevity):
+
+ $ ./gdb -nx -q --data-directory=data-directory -ex "set non-stop" -ex "tar rem :1234"
+ (gdb) set debug remote
+ (gdb) set debug infrun
+ (gdb) c -a
+ Continuing.
+ [infrun] proceed: enter
+ [infrun] scoped_disable_commit_resumed: reason=proceeding
+ [remote] Sending packet: $vCont;c:p14388.14388#90
+ [infrun] reset: reason=proceeding
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote
+ [infrun] proceed: exit
+ [infrun] proceed: enter
+ [infrun] scoped_disable_commit_resumed: reason=proceeding
+ [remote] Sending packet: $vCont;c:p14388.1438a#b9
+ [infrun] reset: reason=proceeding
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote
+ [infrun] proceed: exit
+ ... and so on for each thread ...
+
+ Notice how we send one vCont;c for each thread. With the patch applied, we
+ send a single vCont;c at the end:
+
+ [infrun] scoped_disable_commit_resumed: reason=continue all threads in non-stop
+ [infrun] proceed: enter
+ [infrun] scoped_disable_commit_resumed: reason=proceeding
+ [infrun] reset: reason=proceeding
+ [infrun] proceed: exit
+ [infrun] clear_proceed_status_thread: Thread 85790.85792
+ [infrun] proceed: enter
+ [infrun] scoped_disable_commit_resumed: reason=proceeding
+ [infrun] reset: reason=proceeding
+ [infrun] proceed: exit
+ ... proceeding threads individually ...
+ [infrun] reset: reason=continue all threads in non-stop
+ [infrun] maybe_set_commit_resumed_all_targets: enabling commit-resumed for target remote
+ [infrun] maybe_call_commit_resumed_all_targets: calling commit_resumed for target remote
+ [remote] Sending packet: $vCont;c#a8
+
+ Change-Id: I331dd2473c5aa5114f89854196fed2a8fdd122bb
+
+2021-11-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make dwarf2_find_containing_comp_unit take a dwarf2_per_bfd
+ While reading another patch, I saw that this function didn't need to
+ take a dwarf2_per_objfile, but could take a dwarf2_per_bfd instead.
+ It doesn't change the behavior, but doing this shows that this function
+ is objfile-independent (can work with only the shared per-bfd data).
+
+ Change-Id: I58f9c9cef6688902e95226480285da2d0005d77f
+
+2021-11-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove bpstat typedef, rename bpstats to bpstat
+ I don't find that the bpstat typedef, which hides a pointer, is
+ particularly useful. In fact, it confused me many times, and I just see
+ it as something to remember that adds cognitive load. Also, with C++,
+ we might want to be able to pass bpstats objects by const-reference, not
+ necessarily by pointer.
+
+ So, remove the bpstat typedef and rename struct bpstats to bpstat (since
+ it represents one bpstat, it makes sense that it is singular).
+
+ Change-Id: I52e763b6e54ee666a9e045785f686d37b4f5f849
+
+2021-11-08 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: add CTF format specification
+ It's been a long time since most of this was written: it's long past
+ time to put it in the binutils source tree. It's believed correct and
+ complete insofar as it goes: it documents format v3 (the current
+ version) but not the libctf API or any earlier versions. (The
+ earlier versions can be read by libctf but not generated by it, and you
+ are highly unlikely ever to see an example of any of them.)
+
+ libctf/ChangeLog
+ 2021-11-08 Nick Alcock <nick.alcock@oracle.com>
+
+ * doc/ctf-spec.texi: New file.
+ * configure.ac (MAKEINFO): Add.
+ (BUILD_INFO): Likewise.
+ (AC_CONFIG_FILES) [doc/Makefile]: Add.
+ * Makefile.am [BUILD_INFO] (SUBDIRS): Add doc/.
+ * doc/Makefile.am: New file.
+ * doc/Makefile.in: Likewise.
+ * configure: Regenerated.
+ * Makefile.in: Likewise.
+
+2021-11-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-07 Alan Modra <amodra@gmail.com>
+
+ Correct ld script wildcard matching description
+ Goes with commit 68bbb9f788d0
+
+ * ld.texi (Input Section Wildcards): Delete paragraph incorrectly
+ saying '*' does not match '/'.
+
+2021-11-07 Mike Frysinger <vapier@gentoo.org>
+
+ sim: sh: fix conversion of PC to an integer
+ On LLP64 targets where sizeof(long) != sizeof(void*), this code fails:
+ sim/sh/interp.c:704:24: error: cast from pointer to integer of different size -Werror=pointer-to-int-cast]
+ 704 | do { memstalls += ((((long) PC & 3) != 0) ? (n) : ((n) - 1)); } while (0)
+ | ^
+
+ Since this code simply needs to check alignment, cast it using uintptr_t
+ which is the right type for this.
+
+2021-11-07 Mike Frysinger <vapier@gentoo.org>
+
+ sim: sh: clean up time(NULL) call
+ Casting 0 to a pointer via (long *) doesn't work on LLP64 targets:
+ error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast]
+
+ It's also unnecessary here. We can simply pass NULL like every other
+ bit of code does.
+
+2021-11-07 Mike Frysinger <vapier@gentoo.org>
+
+ sim: sh: break utime logic out of _WIN32 check
+ Some _WIN32 targets provide utime (like mingw), so move the header
+ include out from _WIN32 and under the specific HAVE_UTIME_H check.
+
+ sim: sh: drop errno extern
+ This isn't needed on any reasonable target nowadays, and no other
+ source does this, and breaks with some mingw targets, so punt the
+ extern entirely.
+
+ sim: sh: fix isnan redefinition with mingw targets
+ The code assumes that all _WIN32 targets are the same and can
+ define isnan to _isnan. For mingw targets, they provide an isnan
+ define already, so no need for the fallback here.
+
+ sim: arm/bfin/rx: undefine page size from system headers
+ Some targets (like cygwin) will export page size defines that clash
+ with our local usage here. Undefine the system one to fix building
+ for these targets.
+
+ sim: ppc: switch to libiberty environ.h
+ Drop our compat code and assume environ exists to simplify.
+ We did this for all other targets already, but ppc was missed.
+
+ sim: sh: enable -Werror everywhere
+ With most of the warnings fixed in interp.c, we can enable -Werror
+ here too now. There are some -Wmaybe-uninitialized warnings still
+ lurking that look legitimate, but we don't flag those are fatal,
+ and I don't have the expertise to dive into each opcode to figure
+ out the right way to clean them up.
+
+ sim: sh: fix uninitialized variable usage with pdmsb
+ This block of code relies on i to control which bits to test and how
+ many times to run through the loop, but it never actually initialized
+ it. There is another chunk of code that handles the pdmsb instruction
+ that sets i to 16, so use that here too assuming it's correct. The
+ programming manual suggests this is the right value too, but I am by
+ no means a SuperH DSP expert. The tests are still passing though ...
+
+ sim: sh: constify a few read-only lookup tables
+
+ sim: sh: fix various parentheses warnings
+ Add parentheses to a bunch of places where the compiler suggests we
+ do to avoid confusion to most readers.
+
+ sim: sh: fix unused-value warnings
+ These macro expansions are deliberate in not using the computed value
+ so that they trigger side-effects (possible invalid memory accesses)
+ but while otherwise being noops. Add a (void) cast so the compiler
+ knows these are intentional.
+
+ sim: sh: rework register layout with anonymous unions & structs
+ Now that we require C11, we can leverage anonymous unions & structs
+ to fix a long standing issue with the SH register layout. The use
+ of sregs.i for sh-dsp has generated a lot of compiler warnings about
+ the access being out of bounds -- it only has 7 elements declared,
+ but code goes beyond that to reach into the fregs that follow. But
+ now that we have anonymous unions, we can reduce the nested names
+ and have sregs cover all of these registers.
+
+2021-11-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-06 Tiezhu Yang <yangtiezhu@loongson.cn>
+
+ sim: mips: use sim_fpu_to{32,64}u to fix build warnings
+ Since the first argument type is unsigned32 or unsigned64, just use
+ sim_fpu_to{32,64}u instead of sim_fpu_to{32,64}i to fix the following
+ build warnings:
+
+ CC cp1.o
+ .../sim/mips/cp1.c: In function 'convert':
+ .../sim/mips/cp1.c:1425:32: warning: pointer targets in passing argument 1 of 'sim_fpu_to32i' differ in signedness [-Wpointer-sign]
+ status |= sim_fpu_to32i (&result32, &wop, round);
+ ^~~~~~~~~
+ In file included from .../sim/mips/sim-main.h:67,
+ from .../sim/mips/cp1.c:46:
+ .../sim/mips/../common/sim-fpu.h:270:22: note: expected 'signed32 *' {aka 'int *'} but argument is of type 'unsigned32 *' {aka 'unsigned int *'}
+ INLINE_SIM_FPU (int) sim_fpu_to32i (signed32 *i, const sim_fpu *f,
+ ^~~~~~~~~~~~~
+ .../sim/mips/cp1.c:1429:32: warning: pointer targets in passing argument 1 of 'sim_fpu_to64i' differ in signedness [-Wpointer-sign]
+ status |= sim_fpu_to64i (&result64, &wop, round);
+ ^~~~~~~~~
+ In file included from .../sim/mips/sim-main.h:67,
+ from .../sim/mips/cp1.c:46:
+ .../sim/mips/../common/sim-fpu.h:274:22: note: expected 'signed64 *' {aka 'long int *'} but argument is of type 'unsigned64 *' {aka 'long unsigned int *'}
+ INLINE_SIM_FPU (int) sim_fpu_to64i (signed64 *i, const sim_fpu *f,
+ ^~~~~~~~~~~~~
+ .../sim/mips/cp1.c: In function 'convert_ps':
+ .../sim/mips/cp1.c:1528:34: warning: pointer targets in passing argument 1 of 'sim_fpu_to32i' differ in signedness [-Wpointer-sign]
+ status_u |= sim_fpu_to32i (&res_u, &wop_u, round);
+ ^~~~~~
+ In file included from .../sim/mips/sim-main.h:67,
+ from .../sim/mips/cp1.c:46:
+ .../sim/mips/../common/sim-fpu.h:270:22: note: expected 'signed32 *' {aka 'int *'} but argument is of type 'unsigned32 *' {aka 'unsigned int *'}
+ INLINE_SIM_FPU (int) sim_fpu_to32i (signed32 *i, const sim_fpu *f,
+ ^~~~~~~~~~~~~
+ .../sim/mips/cp1.c:1529:34: warning: pointer targets in passing argument 1 of 'sim_fpu_to32i' differ in signedness [-Wpointer-sign]
+ status_l |= sim_fpu_to32i (&res_l, &wop_l, round);
+ ^~~~~~
+ In file included from .../sim/mips/sim-main.h:67,
+ from .../sim/mips/cp1.c:46:
+ .../sim/mips/../common/sim-fpu.h:270:22: note: expected 'signed32 *' {aka 'int *'} but argument is of type 'unsigned32 *' {aka 'unsigned int *'}
+ INLINE_SIM_FPU (int) sim_fpu_to32i (signed32 *i, const sim_fpu *f,
+ ^~~~~~~~~~~~~
+
+2021-11-06 Alan Modra <amodra@gmail.com>
+
+ Modernise yyerror
+ Newer versions of bison emit a prototype for yyerror
+ void yyerror (const char *);
+ This clashes with some of our old code that declares yyerror to return
+ an int. Fix that in most cases by modernizing yyerror. bfin-parse.y
+ uses the return value all over the place, so for there disable
+ generation of the prototype as specified by posix.
+
+ binutils/
+ * arparse.y (yyerror): Return void.
+ * dlltool.c (yyerror): Likewise.
+ * dlltool.h (yyerror): Likewise.
+ * sysinfo.y (yyerror): Likewise.
+ * windmc.h (yyerror): Likewise.
+ * mclex.c (mc_error): Extract from ..
+ (yyerror): ..here, both now returning void.
+ gas/
+ * config/bfin-parse.y (yyerror): Define.
+ (yyerror): Make static.
+ * itbl-parse.y (yyerror): Return void.
+ ld/
+ * deffilep.y (def_error): Return void.
+
+2021-11-06 Alan Modra <amodra@gmail.com>
+
+ ubsan: undefined shift in mach-o.c
+ This one was logically wrong too. If file_ptr was 64 bits, then -1U
+ is extended to 0x00000000ffffffff, probably not what was intended
+ here.
+
+ * mach-o.c (FILE_ALIGN): Correct expression.
+
+2021-11-06 Fangrui Song <maskray@google.com>
+
+ readelf: Support RELR in -S and -d and output
+ readelf -r dumping support is not added in this patch.
+
+ include/
+ * elf/common.h: Add SHT_RELR, DT_RELR{,SZ,ENT}
+ bfd/
+ * elf.c (_bfd_elf_print_private_bfd_data): Add DT_RELR{,SZ,ENT}.
+ binutils/
+ * readelf.c (get_dynamic_type): Add DT_RELR{,SZ,ENT}.
+ (get_section_type_name): Add SHT_RELR.
+
+2021-11-06 Fangrui Song <maskray@google.com>
+
+ readelf: Make DT_PREINIT_ARRAYSZ's output style match DT_INIT_ARRAYSZ
+ The output now looks like:
+
+ - 0x0000000000000021 (PREINIT_ARRAYSZ) 0x10
+ + 0x0000000000000021 (PREINIT_ARRAYSZ) 16 (bytes)
+ 0x0000000000000019 (INIT_ARRAY) 0xbefc90
+ 0x000000000000001b (INIT_ARRAYSZ) 536 (bytes)
+
+ * readelf.c (process_dynamic_section): Handle DT_PREINIT_ARRAYSZ.
+
+2021-11-06 Mike Frysinger <vapier@gentoo.org>
+
+ sim: clarify license text via COPYING file
+ The project has been using GPL v3 for a while now in the source files,
+ and the arm & ppc ports have carried a copy of the COPYING file. Lets
+ move those up to the top sim dir like other projects to make it clear.
+
+ Also drop the ppc/COPYING.LIB as it's not really referenced by any
+ source as everything is GPL v3.
+
+2021-11-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-05 Tom Tromey <tom@tromey.com>
+
+ Introduce make_unique_xstrndup
+ This adds a new make_unique_xstrndup function, which is the "n"
+ analogue of make_unique_xstrdup. It also updates a couple existing
+ places to use this function.
+
+2021-11-05 Pedro Alves <pedro@palves.net>
+
+ Avoid /proc/pid/mem races (PR 28065)
+ PR 28065 (gdb.threads/access-mem-running-thread-exit.exp intermittent
+ failure) shows that GDB can hit an unexpected scenario -- it can
+ happen that the kernel manages to open a /proc/PID/task/LWP/mem file,
+ but then reading from the file returns 0/EOF, even though the process
+ hasn't exited or execed.
+
+ "0" out of read/write is normally what you get when the address space
+ of the process the file was open for is gone, because the process
+ execed or exited. So when GDB gets the 0, it returns memory access
+ failure. In the bad case in question, the process hasn't execed or
+ exited, so GDB fails a memory access when the access should have
+ worked.
+
+ GDB has code in place to gracefully handle the case of opening the
+ /proc/PID/task/LWP/mem just while the LWP is exiting -- most often the
+ open fails with EACCES or ENOENT. When it happens, GDB just tries
+ opening the file for a different thread of the process. The testcase
+ is written such that it stresses GDB's logic of closing/reopening the
+ /proc/PID/task/LWP/mem file, by constantly spawning short lived
+ threads.
+
+ However, there's a window where the kernel manages to find the thread,
+ but the thread exits just after and clears its address space pointer.
+ In this case, the kernel creates a file successfully, but the file
+ ends up with no address space associated, so a subsequent read/write
+ returns 0/EOF too, just like if the whole process had execed or
+ exited. This is the case in question that GDB does not handle.
+
+ Oleg Nesterov gave this suggestion as workaround for that race:
+
+ gdb can open(/proc/pid/mem) and then read (say) /proc/pid/statm.
+ If statm reports something non-zero, then open() was "successfull".
+
+ I think that might work. However, I didn't try it, because I realized
+ we have another nasty race that that wouldn't fix.
+
+ The other race I realized is that because we close/reopen the
+ /proc/PID/task/LWP/mem file when GDB switches to a different inferior,
+ then it can happen that GDB reopens /proc/PID/task/LWP/mem just after
+ a thread execs, and before GDB has seen the corresponding exec event.
+ I.e., we can open a /proc/PID/task/LWP/mem file accessing the
+ post-exec address space thinking we're accessing the pre-exec address
+ space.
+
+ A few months back, Simon, Oleg and I discussed a similar race:
+
+ [Bug gdb/26754] Race condition when resuming threads and one does an exec
+ https://sourceware.org/bugzilla/show_bug.cgi?id=26754
+
+ The solution back then was to make the kernel fail any ptrace
+ operation until the exec event is consumed, with this kernel commit:
+
+ commit dbb5afad100a828c97e012c6106566d99f041db6
+ Author: Oleg Nesterov <oleg@redhat.com>
+ AuthorDate: Wed May 12 15:33:08 2021 +0200
+ Commit: Linus Torvalds <torvalds@linux-foundation.org>
+ CommitDate: Wed May 12 10:45:22 2021 -0700
+
+ ptrace: make ptrace() fail if the tracee changed its pid unexpectedly
+
+ This however, only applies to ptrace, not to the /proc/pid/mem file
+ opening case. Also, even if it did apply to the file open case, we
+ would want to support current kernels until such a fix is more wide
+ spread anyhow.
+
+ So all in all, this commit gives up on the idea of only ever keeping
+ one /proc/pid/mem file descriptor open. Instead, make GDB open a
+ /proc/pid/mem per inferior, and keep it open until the inferior exits,
+ is detached or execs. Make GDB open the file right after the inferior
+ is created or is attached to or forks, at which point we know the
+ inferior is stable and stopped and isn't thus going to exec, or have a
+ thread exit, and so the file open won't fail (unless the whole process
+ is SIGKILLed from outside GDB, at which point it doesn't matter
+ whether we open the file).
+
+ This way, we avoid both races described above, at the expense of using
+ more file descriptors (one per inferior).
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28065
+ Change-Id: Iff943b95126d0f98a7973a07e989e4f020c29419
+
+2021-11-05 Andrew Burgess <aburgess@redhat.com>
+
+ gdb/testsuite: use gdb_get_line_number
+ Replaces a hard coded line number with a use of gdb_get_line_number.
+
+ I suspect that the line number has, over time, come adrift from where
+ it was supposed to be stopping. When the test was first added, line
+ 770 pointed at the final 'return 0' in function main. Over time, as
+ things have been added, line 770 now points at some random location in
+ the middle of main.
+
+ So, I've marked the 'return 0' with a comment, and now the test will
+ always stop there.
+
+ I also removed an old comment from 1997 talking about how these tests
+ will only pass with the HP compiler, followed by an additional comment
+ from 2000 saying that the tests now pass with GCC.
+
+ I get the same results before and after this change.
+
+2021-11-05 Alan Modra <amodra@gmail.com>
+
+ PR28541, unstable cie offset in the output of readelf
+ Calculating "0 - pointer" can indeed result in seeming randomness as
+ the pointer address varies.
+
+ PR 28541
+ * dwarf.c (display_debug_frames): Don't print cie offset when
+ invalid, print "invalid" instead. Remove now redundant warning.
+
+2021-11-05 Alan Modra <amodra@gmail.com>
+
+ Missing va_end in aarch64-dis.c
+ * aarch64-dis.c (extract_fields): Invoke va_end.
+
+2021-11-05 Alan Modra <amodra@gmail.com>
+
+ PR28530, Hang in objdump on machine with 196GB RAM
+ Investigating the PR28530 testcase, which has a fuzzed compression
+ header with an enormous size, I noticed that decompress_contents is
+ broken when the size doesn't fit in strm.avail_out. It wouldn't be
+ too hard to support larger sizes (patches welcome!) but for now just
+ stop decompress_contents from returning rubbish.
+
+ PR 28530
+ * compress.c (decompress_contents): Fail when uncompressed_size
+ is too big.
+ (bfd_init_section_decompress_status): Likewise.
+
+2021-11-05 Alan Modra <amodra@gmail.com>
+
+ asan: alpha-vms: objdump buffer overflows
+ * vms-alpha.c (evax_bfd_print_desc): Sanity check buffer access.
+ (evax_bfd_print_valspec, evax_bfd_print_typspec): Likewise.
+ (evax_bfd_print_dst): Likewise.
+
+2021-11-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: introduce "set index-cache enabled", deprecate "set index-cache on/off"
+ The "set index-cache" command is used at the same time as a prefix
+ command (prefix for "set index-cache directory", for example), and a
+ boolean setting for turning the index-cache on and off. Even though I
+ did introduce that, I now don't think it's a good idea to do something
+ non-standard like this.
+
+ First, there's no dedicated CLI command to show whether the index-cache
+ is enabled, so it has to be custom output in the "show index-cache
+ handler". Also, it means there's no good way a MI frontend can find out
+ if the index-cache is enabled. "-gdb-show index-cache" doesn't show it
+ in the MI output record:
+
+ (gdb) interpreter-exec mi "-gdb-show index-cache"
+ ~"\n"
+ ~"The index cache is currently disabled.\n"
+ ^done,showlist={option={name="directory",value="/home/simark/.cache/gdb"}}
+
+ Fix this by introducing "set/show index-cache enabled on/off", regular
+ boolean setting commands. Keep commands "set index-cache on" and "set
+ index-cache off" as deprecated aliases of "set index-cache enabled",
+ with respectively the default arguments "on" and "off".
+
+ Update tests using "set index-cache on/off" to use the new command.
+ Update the regexps in gdb.base/maint.exp to figure out whether the
+ index-cache is enabled or not. Update the doc to mention the new
+ commands.
+
+ Change-Id: I7d5aaaf7fd22bf47bd03e0023ef4fbb4023b37b3
+
+2021-11-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: pass/return setting setter/getter scalar values by value
+ The getter and setter in struct setting always receive and return values
+ by const reference. This is not necessary for scalar values (like bool
+ and int), but more importantly it makes it a bit annoying to write a
+ getter, you have to use a scratch static variable or something similar
+ that you can refer to:
+
+ const bool &
+ my_getter ()
+ {
+ static bool value;
+ value = function_returning_bool ();
+ return value;
+ }
+
+ Change the getter and setter function signatures to receive and return
+ value by value instead of by reference, when the underlying data type is
+ scalar. This means that string-based settings will still use
+ references, but all others will be by value. The getter above would
+ then be re-written as:
+
+ bool
+ my_getter ()
+ {
+ return function_returning_bool ();
+ }
+
+ This is useful for a patch later in this series that defines a boolean
+ setting with a getter and a setter.
+
+ Change-Id: Ieca3a2419fcdb75a6f75948b2c920b548a0af0fd
+
+2021-11-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove command_class enum class_deprecated
+ The class_deprecated enumerator isn't assigned anywhere, so remove it.
+ Commands that are deprecated have cmd_list_element::cmd_deprecated set
+ instead.
+
+ Change-Id: Ib35e540915c52aa65f13bfe9b8e4e22e6007903c
+
+2021-11-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove unnecessary cmd_list_element::aliases nullptr checks
+ Remove two unnecessary nullptr checks. If aliases is nullptr, then the
+ for loops will simply be skipped.
+
+ Change-Id: I9132063bb17798391f8d019af305383fa8e0229f
+
+2021-11-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver: re-generate configure
+ I get some diffs when running autoconf in gdbserver, probably leftovers
+ from commit 5dfe4bfcb969 ("Fix format_pieces selftest on Windows").
+ Re-generate configure in that directory.
+
+ Change-Id: Icdc9906af95fbaf1047a579914b2983f8ec5db08
+
+2021-11-04 H.J. Lu <hjl.tools@gmail.com>
+
+ Revert "bfd: Always check sections with the corrupt size"
+ This reverts commit e0f7ea91436dd308a094c4c101fd4169e8245a91.
+
+2021-11-04 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Always check sections with the corrupt size
+ Always check sections with the corrupt size for non-MMO files. Skip MMO
+ files for compress_status == COMPRESS_SECTION_NONE since MMO has special
+ handling for COMPRESS_SECTION_NONE.
+
+ PR binutils/28530
+ * compress.c (bfd_get_full_section_contents): Always check
+ sections with the corrupt size.
+
+2021-11-04 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Clarify the behavior of .option rvc or norvc.
+ Add/Remove the rvc extension to/from the riscv_subsets once the
+ .option rvc/norvc is set. So that we don't need to always check
+ the riscv_opts.rvc in the riscv_subset_supports, just call the
+ riscv_lookup_subset to search the subset list is enough.
+
+ Besides, we will need to dump the instructions according to the
+ elf architecture attributes. That means the dis-assembler needs
+ to parse the architecture string from the elf attribute before
+ dumping any instructions, and also needs to recognized the
+ INSN_CLASS* classes from riscv_opcodes. Therefore, I suppose
+ some functions will need to be moved from gas/config/tc-riscv.c
+ to bfd/elfxx-riscv.c, including riscv_multi_subset_supports and
+ riscv_subset_supports. This is one of the reasons why we need
+ this patch.
+
+ This patch passes the gcc/binutils regressions of rv32emc-elf,
+ rv32i-elf, rv64gc-elf and rv64gc-linux toolchains.
+
+ bfd/
+ * elfxx-riscv.c (riscv_remove_subset): Remove the extension
+ from the subset list.
+ (riscv_update_subset): Add/Remove an extension to/from the
+ subset list. This is used for the .option rvc or norvc.
+ * elfxx-riscv.h: Added the extern bool riscv_update_subset.
+ gas/
+ * config/tc-riscv.c (riscv_set_options): Removed the unused
+ rve flag.
+ (riscv_opts): Likewise.
+ (riscv_set_rve): Removed.
+ (riscv_subset_supports): Removed the riscv_opts.rvc check.
+ (riscv_set_arch): Don't need to call riscv_set_rve.
+ (reg_lookup_internal): Call riscv_subset_supports to check
+ whether the rve is supported.
+ (s_riscv_option): Add/Remove the rvc extension to/from the
+ subset list once the .option rvc/norvc is set.
+
+2021-11-04 Mike Frysinger <vapier@gentoo.org>
+
+ sim: mips: fix missing prototype in multi-run generation
+ The multi-run logic for mips involves a bit of codegen and rewriting
+ of files to include per-architecture prefixes. That can result in
+ files with missing prototypes which cause compiler errors. In the
+ case of mips-sde-elf targets, we have:
+ $srcdir/m16run.c -> $builddir/m16mips64r2_run.c
+ sim_engine_run -> m16mips64r2_engine_run
+ $srcdir/micromipsrun.c -> micromipsmicromips_run.c
+ sim_engine_run -> micromips64micromips_engine_run
+
+ micromipsmicromips_run.c:80:1: error: no previous prototype for 'micromips64micromips_engine_run' [-Werror=missing-prototypes]
+ 80 | micromips64micromips_engine_run (SIM_DESC sd, int next_cpu_nr, int nr_cpus,
+
+ We generate headers for those prototypes in the configure script,
+ but only include them in the generated multi-run.c file. Update the
+ rewrite logic to turn the sim-engine.h include into the relevant
+ generated engine include so these files also have their prototypes.
+ $srcdir/m16run.c -> $builddir/m16mips64r2_run.c
+ sim-engine.h -> m16mips64r2_engine.h
+ $srcdir/micromipsrun.c -> micromipsmicromips_run.c
+ sim-engine.h -> micromips64micromips_engine.h
+
+2021-11-04 Alan Modra <amodra@gmail.com>
+
+ PR28540, segmentation fault on NULL byte_get
+ PR 28540
+ * objdump.c (dump_bfd): Don't attempt load_separate_debug_files
+ when byte_get is NULL.
+
+2021-11-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: inline common sim-fpu.c logic
+ We will never bother building w/out a ../common/ sim directory,
+ so drop ancient logic supporting that method.
+
+2021-11-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: switch to common builds for callback objects
+ We don't need to build this anymore ourselves since the common build
+ includes it and produces the same object code. We also need to pull
+ in the split constant modules after the refactoring and pulling them
+ out of nltvals.def & targ-map.o. This doesn't matter for the sim
+ directly, but does for gdb and other users of libsim.
+
+ We also delete some conditional source tree logic since we already
+ require this be the "new" combined tree with a ../common/ dir. This
+ has been the case for decades at this point.
+
+2021-11-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix gnu-nat build
+ When building gnu-nat.c, we get:
+
+ CXX gnu-nat.o
+ gnu-nat.c: In member function 'virtual void gnu_nat_target::create_inferior(const char*, const string&, char**, int)':
+ gnu-nat.c:2117:13: error: 'struct inf' has no member named 'target_is_pushed'
+ 2117 | if (!inf->target_is_pushed (this))
+ | ^~~~~~~~~~~~~~~~
+ gnu-nat.c:2118:10: error: 'struct inf' has no member named 'push_target'
+ 2118 | inf->push_target (this);
+ | ^~~~~~~~~~~
+
+ This is because of a confusion between the generic `struct inferior`
+ variable and the gnu-nat-specific `struct inf` variable. Fix by
+ referring to `inferior`, not `inf`.
+
+ Adjust the comment on top of `struct inf` to clarify the purpose of that
+ type.
+
+ Co-Authored-By: Andrea Monaco <andrea.monaco@autistici.org>
+ Change-Id: I2fe2f7f6ef61a38d79860fd262b08835c963fc77
+
+2021-11-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: set ASAN_OPTIONS=detect_leaks=0 while running tests
+ We see some additional failures when running the testsuite against a GDB
+ compiled with ASan, compared to a GDB compiled without ASan. Some of
+ them are caused by the memory leak report shown by the GDB process when
+ it exits, and the fact that it makes it exit with a non-zero exit code.
+
+ I generally try to remember to set ASAN_OPTIONS=detect_leaks=0 in my
+ environment when running the tests, but I don't always do it. I think
+ it would be nice if the testsuite did it. I don't see any use to have
+ leak detection when running the tests. That is, unless we ever have a
+ test that ensures GDB doesn't leak memory, which isn't going to happen
+ any time soon.
+
+ Here are some tests I found that were affected by this:
+
+ gdb.base/batch-exit-status.exp
+ gdb.base/many-headers.exp
+ gdb.base/quit.exp
+ gdb.base/with-mf.exp
+ gdb.dwarf2/gdb-add-index.exp
+ gdb.dwarf2/gdb-add-index-symlink.exp
+ gdb.dwarf2/imported-unit-runto-main.exp
+
+ Change-Id: I784c7df8a13979eb96587f735c1d33ba2cc6e0ca
+
+2021-11-03 Tom Tromey <tromey@adacore.com>
+
+ Use section name in warnings in display_debug_loc
+ While looking at an apparently malformed executable with
+ "readelf --debug-dump=loc", I got this warning:
+
+ readelf: ./main: Warning: There is a hole [0x89 - 0x95] in .debug_loc section.
+
+ However, the executable only has a .debug_loclists section.
+
+ This patch fixes the warning messages in display_debug_loc to use the
+ name of the section that is being processed.
+
+ binutils/ChangeLog
+ 2021-11-03 Tom Tromey <tromey@adacore.com>
+
+ * dwarf.c (display_debug_loc): Use section name in warnings.
+
+2021-11-03 Luis Machado <luis.machado@linaro.org>
+
+ [AArch64] Make gdbserver register set selection dynamic
+ The current register set selection mechanism for AArch64 is static, based
+ on a pre-populated array of register sets.
+
+ This means that we might potentially probe register sets that are not
+ available. This is OK if the kernel errors out during ptrace, but probing the
+ tag_ctl register, for example, does not result in a ptrace error if the kernel
+ supports the tagged address ABI but not MTE (PR 28355).
+
+ Making the register set selection dynamic, based on feature checks, solves
+ this and simplifies the code a bit. It allows us to list all of the register
+ sets only once, and pick and choose based on HWCAP/HWCAP2 or other properties.
+
+ I plan to backport this fix to GDB 11 as well.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28355
+
+2021-11-03 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix LD_PRELOAD=/usr/lib64/libasan.so.6 gdb
+ Currently for a binary compiled normally (without -fsanitize=address) but with
+ LD_PRELOAD of ASAN one gets:
+
+ $ ASAN_OPTIONS=detect_leaks=0:alloc_dealloc_mismatch=1:abort_on_error=1:fast_unwind_on_malloc=0 LD_PRELOAD=/usr/lib64/libasan.so.6 gdb
+ =================================================================
+ ==1909567==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete []) on 0x602000001570
+ #0 0x7f1c98e5efa7 in operator delete[](void*) (/usr/lib64/libasan.so.6+0xb0fa7)
+ ...
+ 0x602000001570 is located 0 bytes inside of 2-byte region [0x602000001570,0x602000001572)
+ allocated by thread T0 here:
+ #0 0x7f1c98e5cd1f in __interceptor_malloc (/usr/lib64/libasan.so.6+0xaed1f)
+ #1 0x557ee4a42e81 in operator new(unsigned long) (/usr/libexec/gdb+0x74ce81)
+ SUMMARY: AddressSanitizer: alloc-dealloc-mismatch (/usr/lib64/libasan.so.6+0xb0fa7) in operator delete[](void*)
+ ==1909567==HINT: if you don't care about these errors you may set ASAN_OPTIONS=alloc_dealloc_mismatch=0
+ ==1909567==ABORTING
+
+ Despite the code called properly operator new[] and operator delete[].
+ But GDB's new-op.cc provides its own operator new[] which gets translated into
+ malloc() (which gets recogized as operatore new(size_t)) but as it does not
+ translate also operators delete[] Address Sanitizer gets confused.
+
+ The question is how many variants of the delete operator need to be provided.
+ There could be 14 operators new but there are only 4, GDB uses 3 of them.
+ There could be 16 operators delete but there are only 6, GDB uses 2 of them.
+ It depends on libraries and compiler which of the operators will get used.
+ Currently being used:
+ U operator new[](unsigned long)
+ U operator new(unsigned long)
+ U operator new(unsigned long, std::nothrow_t const&)
+ U operator delete[](void*)
+ U operator delete(void*, unsigned long)
+
+ Tested on x86_64-linux.
+
+2021-11-03 Alan Modra <amodra@gmail.com>
+
+ asan: dlltool buffer overflow: embedded NUL in string
+ yyleng gives the pattern length, xstrdup just copies up to the NUL.
+ So it is quite possible writing at an index of yyleng-2 overflows
+ the xstrdup allocated string buffer. xmemdup quite handily avoids
+ this problem, even writing the terminating NUL over the trailing
+ quote. Use it in ldlex.l too where we'd already had a report of this
+ problem and fixed it by hand, and to implement xmemdup0 in gas.
+
+ binutils/
+ * deflex.l (single and double quote strings): Use xmemdup.
+ gas/
+ * as.h (xmemdup0): Use xmemdup.
+ ld/
+ PR 20906
+ * ldlex.l (double quote string): Use xmemdup.
+
+2021-11-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: mloop: mark a few conditionally used funcs as unused
+ These are marked inline, so building w/gcc at higher optimization
+ levels will automatically discard them. But building with -O0 will
+ trigger unused function warnings, so fix that.
+
+ The common before/after cover functions in the common mloop generator
+ are not used by all architecture ports. Doesn't seem to be a hard
+ requirement, so marking them optional (i.e. unused) is fine.
+
+ The cris execute function is conditionally used depending on the
+ fast-build mode settings, so mark it unused too.
+
+2021-11-03 Alan Modra <amodra@gmail.com>
+
+ asan: assert (addr_ranges) <= (start)
+ That assert would be more obvious if it were reported as
+ "addr_ranges <= end_ranges". Fix that by using the obvious variable
+ in the final loop. Stop the assertion by using a signed comparison:
+ It's possible for the rounding up of the arange pointer to exceed the
+ end of the block when the block size is fuzzed.
+
+ * dwarf.c (display_debug_aranges): Use "end_ranges" in loop
+ displaying ranges rather that "start". Simplify rounding up
+ to 2*address_size boundary. Use signed comparison in loop.
+
+2021-11-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: hoist cgen mloop rules up to common builds
+ These rules don't depend on the target compiler settings, so hoist
+ the build logic up to the common builds for better parallelization.
+
+ We have to extend the genmloop.sh logic a bit to allow outputting
+ to a subdir since it always assumed cwd was the right place.
+
+ We leave the cgen maintainer rules in the subdirs for now as they
+ aren't normally run, and they rely on cgen logic that has not yet
+ been generalized.
+
+2021-11-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: hoist mn10300 & v850 igen rules up to common builds
+ These rules don't depend on the target compiler settings, so hoist
+ the build logic up to the common builds for better parallelization.
+
+ We leave the mips rules in place as they depend on complicated
+ arch-specific configure logic that needs to be untangled first.
+
+2021-11-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: hoist gencode & opc2c build rules up to common builds
+ These rules don't depend on the target compiler settings, so hoist
+ the build logic up to the common builds for better parallelization.
+
+2021-11-03 Mike Frysinger <vapier@gentoo.org>
+
+ opcodes: d10v: simplify header includes
+ This file doesn't use anything from bfd (sysdep.h), so drop that
+ include. This avoids an implicit dependency on the generated
+ config.h which can be problematic for build-time tools.
+
+ Also swap stdio.h for stddef.h. This file isn't doing or using
+ any I/O structures, but it does need NULL.
+
+2021-11-03 Alan Modra <amodra@gmail.com>
+
+ PR28523, ld.bfd created undefined symbols on ppc64
+ This patch removes any fake (linker created) function descriptor
+ symbol if its code entry symbol isn't dynamic, to ensure bogus dynamic
+ symbols are not created. The change to func_desc_adjust requires that
+ it be run only once, which means ppc64_elf_tls_setup can't call it for
+ just a few selected symbols.
+
+ PR 28523
+ * elf64-ppc.c (func_desc_adjust): If a function entry sym is
+ not dynamic and has no plt entry, hide any associated fake
+ function descriptor symbol.
+ (ppc64_elf_edit): Move func_desc_adjust iteration over syms to..
+ (ppc64_elf_tls_setup): ..here.
+
+2021-11-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep, rs6000] Don't skip system call in skip_prologue
+ I ran into a case where a breakpoint on _exit never triggered, because it was
+ set past the end of the _exit prologue, past the end of the exit_group system
+ call (which does not return).
+
+ More concretely, the breakpoint was set at the last insn show here:
+ ...
+ Dump of assembler code for function _exit:
+ 0x00007ffff7e42ea0 <+0>: 12 00 4c 3c addis r2,r12,18
+ 0x00007ffff7e42ea4 <+4>: 60 43 42 38 addi r2,r2,17248
+ 0x00007ffff7e42ea8 <+8>: 00 00 00 60 nop
+ 0x00007ffff7e42eac <+12>: f8 ff e1 fb std r31,-8(r1)
+ 0x00007ffff7e42eb0 <+16>: 78 1b 7f 7c mr r31,r3
+ 0x00007ffff7e42eb4 <+20>: f0 ff c1 fb std r30,-16(r1)
+ 0x00007ffff7e42eb8 <+24>: ea 00 00 38 li r0,234
+ 0x00007ffff7e42ebc <+28>: a0 8b 22 e9 ld r9,-29792(r2)
+ 0x00007ffff7e42ec0 <+32>: 78 fb e3 7f mr r3,r31
+ 0x00007ffff7e42ec4 <+36>: 14 6a c9 7f add r30,r9,r13
+ 0x00007ffff7e42ec8 <+40>: 02 00 00 44 sc
+ 0x00007ffff7e42ecc <+44>: 26 00 00 7c mfcr r0
+ 0x00007ffff7e42ed0 <+48>: 00 10 09 74 andis. r9,r0,4096
+ ...
+
+ Fix this by treating system calls the same as branches in skip_prologue:
+ by default, don't skip, such that the breakpoint is set at 0x00007ffff7e42eb8
+ instead.
+
+ Tested on ppc64le-linux, on a power 8 machine.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28527
+
+2021-11-02 Tom de Vries <tdevries@zinfandel-3.arch.suse.de>
+
+ [gdb/testsuite] Handle SIGILL in two gdb.arch powerpc test-cases
+ On powerpc64le-linux, with test-case gdb.arch/powerpc-addpcis.exp I run into
+ SIGILL:
+ ...
+ (gdb) PASS: gdb.arch/powerpc-addpcis.exp: get hexadecimal valueof "$r3"
+ stepi^M
+ ^M
+ Program terminated with signal SIGILL, Illegal instruction.^M
+ The program no longer exists.^M
+ (gdb) PASS: gdb.arch/powerpc-addpcis.exp: set r4
+ ...
+ because it's a power9 insn, and I'm running on a power8 machine.
+
+ Fix this by handling the SIGILL. Likewise in gdb.arch/powerpc-lnia.exp.
+
+ Tested on powerpc64le-linux.
+
+2021-11-02 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/sim: update my email address
+ gdb:
+
+ * MAINTAINERS (Global Maintainers): Update my address.
+ (Responsible Maintainers): Likewise.
+ (Write After Approval): Likewise.
+
+ sim:
+
+ * MAINTAINERS (Global Maintainers): Update my address.
+
+2021-11-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix stepi test-cases with unix/-m32/-fPIE/-pie
+ When running test-case gdb.base/step-indirect-call-thunk.exp with target board
+ unix/-m32/-fPIE/-pie, I run into:
+ ...
+ (gdb) stepi^M
+ 0x5655552e 22 { /* inc.1 */^M
+ (gdb) stepi^M
+ 0x56555530 22 { /* inc.1 */^M
+ (gdb) stepi^M
+ 0x565555f7 in __x86.get_pc_thunk.ax ()^M
+ (gdb) FAIL: gdb.base/step-indirect-call-thunk.exp: stepi into return thunk
+ ...
+
+ In contrast, with unix/-m32 we have instead:
+ ...
+ (gdb) stepi^M
+ 0x08048407 22 { /* inc.1 */^M
+ (gdb) stepi^M
+ 23 return x + 1; /* inc.2 */^M
+ (gdb) stepi^M
+ 0x0804840c 23 return x + 1; /* inc.2 */^M
+ (gdb) stepi^M
+ 24 } /* inc.3 */^M
+ (gdb) stepi^M
+ 0x08048410 24 } /* inc.3 */^M
+ (gdb) stepi^M
+ 0x0804848f in __x86_return_thunk ()^M
+ (gdb) PASS: gdb.base/step-indirect-call-thunk.exp: stepi into return thunk
+ ...
+
+ The test-case doesn't expect to run into __x86.get_pc_thunk.ax, which is a
+ PIC helper function for x86_64-linux.
+
+ Fix this by insn-stepping through it.
+
+ Likewise in a few other test-cases.
+
+ Tested on x86_64-linux.
+
+2021-11-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-11-01 Alan Modra <amodra@gmail.com>
+
+ ARM: match armeb output for unwind-pacbti-m test
+ * testsuite/gas/arm/unwind-pacbti-m.d: Match armeb output.
+
+2021-11-01 Bruno Larsen <blarsen@redhat.com>
+
+ [gdb/doc]: Updated manpages to be consistent with help
+ Updated manpages to be consistent with help information provided by the
+ binary. The main changes are:
+
+ * Making all long-form options have '--', instead of a single '-';
+ * added most of the missing options to the manpage;
+ * removed the information about using '+' instead of '-', since it
+ doesn't seem to be supported anymore.
+
+ This also fixes 2 upstream bugs:
+ * https://sourceware.org/bugzilla/show_bug.cgi?id=23965; by adding
+ --args to the manpage
+ * https://sourceware.org/bugzilla/show_bug.cgi?id=10619; by adding the
+ double dashes
+
+2021-11-01 Alan Modra <amodra@gmail.com>
+
+ macho-o archive sanity checks
+ Anti-fuzzing checks.
+
+ * mach-o.c (bfd_mach_o_fat_archive_p): Sanity check entry offset
+ and size against file size.
+
+2021-11-01 Alan Modra <amodra@gmail.com>
+
+ objcopy buffer overflow
+ "tocopy" in this code was an int, which when the size to be copied was
+ larger than MAXINT could result in tocopy being negative. A negative
+ value of course is less than BUFSIZE, but when converted to
+ bfd_size_type is extremely large.
+
+ PR 995
+ * objcopy.c (copy_unknown_object): Correct calculation of "tocopy".
+ Use better variable types.
+
+2021-11-01 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ arm: add armv9-a architecture to -march
+ Update also include:
+ + New value of Tag_CPU_arch EABI attribute (22) is added.
+ + Updated missing Tag_CPU_arch EABI attributes.
+ + Updated how we combine archs 'v4t_plus_v6_m' as this mechanism
+ have to handle new Armv9 as well.
+
+ Regression tested on `arm-none-eabi` cross Binutils and no issues.
+
+ bfd/
+
+ * archures.c: Define bfd_mach_arm_9.
+ * bfd-in2.h (bfd_mach_arm_9): Define bfd_mach_arm_9.
+ * cpu-arm.c: Add 'armv9-a' option to -march.
+ * elf32-arm.c (using_thumb2_bl): Update assert check.
+ (arch_has_arm_nop): Add TAG_CPU_ARCH_V9.
+ (bfd_arm_get_mach_from_attributes): Add case for TAG_CPU_ARCH_V9.
+ Update assert.
+ (tag_cpu_arch_combine): Updated table.
+ (v9): New table..
+
+ binutils/
+
+ * readelf.c (arm_attr_tag_CPU_arch): Update with
+
+ elfcpp/
+
+ * arm.h: Update TAG_CPU_ARCH_ enums with correct values.
+
+ gas/
+
+ * NEWS: Update docs.
+ * config/tc-arm.c (get_aeabi_cpu_arch_from_fset): Return Armv9-a
+ for -amarch=all.
+ (aeabi_set_public_attributes): Update assert.
+ * doc/c-arm.texi: Update docs.
+ * testsuite/gas/arm/armv9-a_arch.d: New test.
+ * testsuite/gas/arm/attr-march-all.d: Update test with v9.
+
+ include/
+
+ * elf/arm.h Update TAG_CPU_ARCH_ defines with correct values.
+ * opcode/arm.h (ARM_EXT3_V9A): New macro.
+ (ARM_ARCH_NONE): Updated with arm_feature_set.core size.
+ (FPU_NONE): Updated.
+ (ARM_ANY): Updated.
+ (ARM_ARCH_UNKNOWN): New macro.
+ (ARM_FEATURE_LOW): Updated.
+ (ARM_FEATURE_CORE): Updated.
+ (ARM_FEATURE_CORE_LOW): Updated.
+ (ARM_FEATURE_CORE_HIGH): Updated.
+ (ARM_FEATURE_COPROC): Updated.
+ (ARM_FEATURE): Updated.
+ (ARM_FEATURE_ALL): New macro.
+
+ opcodes/
+
+ * arm-dis.c (select_arm_features): Support bfd_mach_arm_9.
+ Also Update bfd_mach_arm_unknown to use new macro ARM_ARCH_UNKNOWN.
+
+2021-11-01 Mike Frysinger <vapier@gentoo.org>
+
+ sim: iq2000: reduce -Wno-error scope
+ Clean up the warnings in sim-if, then reduce the -Werror disable to
+ the files that still aren't clean that now that we require GNU make
+ and can set variables on a per-object basis.
+
+ sim: lm32: reduce -Wno-error scope
+ Clean up some warnings in dv-lm32cpu, and all in sim-if, then reduce
+ the -Werror disable to the files that still aren't clean that now that
+ we require GNU make and can set variables on a per-object basis.
+
+ sim: frv: reduce -Wno-error scope
+ Only two files in here still generates warnings, so reduce the -Werror
+ disable to that now that we require GNU make and can set variables on
+ a per-object basis.
+
+ sim: m32r: reduce -Wno-error scope
+ Only two files in here still generates warnings, so reduce the -Werror
+ disable to that now that we require GNU make and can set variables on
+ a per-object basis.
+
+ sim: mips: reduce -Wno-error scope
+ Fix a few printf warnings in sim-main.c, and then we're left with only
+ one file in here still generating warnings, so reduce the -Werror
+ disable to that alone now that we require GNU make and can set variables
+ on a per-object basis.
+
+ sim: erc32: reduce -Wno-error scope
+ Only one file in here still generates warnings, so reduce the -Werror
+ disable to that alone now that we require GNU make and can set variables
+ on a per-object basis.
+
+ sim: cris: reduce -Wno-error scope
+ Only two files in here still generates warnings, so reduce the -Werror
+ disable to that now that we require GNU make and can set variables on
+ a per-object basis.
+
+ sim: sh: reduce -Wno-error scope
+ Only one file in here still generates warnings, so reduce the -Werror
+ disable to that alone now that we require GNU make and can set variables
+ on a per-object basis.
+
+ sim: or1k: build with -Werror
+ The only warnings left in this port are a few maybe-uninitialized,
+ but we don't abort the build for them, so turn on -Werror everywhere.
+
+ sim: igen: minor build output alignment fix
+ The custom echo was off by one space relative to all the others.
+
+ sim: ppc: fix the printf fix for 32-bit systems
+ The time delta is a 64-bit value too.
+
+ sim: m68hc11: clean up pointer casts
+ The void *data field is used to past arbitrary data between event
+ handlers, and these are using it to pass an integer. Fix up the
+ casts to avoid using (long) to cast to/from pointers since there
+ is no guarantee that's the right size.
+
+ sim: d10v: clean up pointer casts
+ Use %p to print pointers instead of trying to cast them to longs.
+
+ sim: bfin: cast pointers using uintptr_t
+ We can't assume that sizeof(long) == sizeof(void*), so change all
+ these casts over to uintptr_t.
+
+ sim: ppc: clean up printf format handling
+ Don't blindly cast every possible type to (long). Change to the right
+ printf format specifier whether it be a 64-bit type or a pointer.
+
+ sim: ppc: switch core types to stdint.h types
+ There's no need to define these ourselves anymore, so switch to the
+ stdint.h types. This will be important when we start using PRI*
+ defines with printf formats.
+
+ sim: mn10300: clean up pointer casts
+ The void *data field is used to past arbitrary data between event
+ handlers, and these are using it to pass an enum. Fix up the casts
+ to avoid using (long) to cast to/from pointers since there is no
+ guarantee that's the right size.
+
+ sim: events: clean up trace casts
+ Don't blindly cast every possible type to (long). Change to the right
+ printf format specifier whether it be a 64-bit type or a pointer.
+
+ sim: ppc: handle \r in igen inputs [PR sim/28476]
+ Make sure we consume & ignore \r bytes in inputs in case the file
+ encodings are from a non-LF systems (e.g. Windows).
+
+ sim: ppc: constify strings in igen tooling
+
+2021-11-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-31 Tom Tromey <tom@tromey.com>
+
+ Fix latent bug in DWARF test case
+ On my branch that replaces the DWARF psymtab reader,
+ dw2-stack-boundary.exp started failing. However, when I look at the
+ output in gdb.log, it is correct:
+
+ file /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.dwarf2/dw2-stack-boundary/dw2-stack-boundary
+ Reading symbols from /home/tromey/gdb/build/gdb/testsuite/outputs/gdb.dwarf2/dw2-stack-boundary/dw2-stack-boundary...
+ During symbol reading: location description stack overflow
+ During symbol reading: location description stack underflow
+
+ What happens to cause the failure is that the two branches in
+ gdb_test_multiple appear in this order:
+
+ -re "\r\nDuring symbol reading: location description stack underflow" {
+ [...]
+ -re "\r\nDuring symbol reading: location description stack overflow" {
+
+ The first one will match the above, without causing the second one to
+ ever match -- leading to a spurious failure.
+
+ Anchoring the regexps seems to fix the problem, and works for the
+ current gdb as well.
+
+2021-10-31 Tom Tromey <tom@tromey.com>
+
+ Fix unittest.exp failure due to 'set debuginfod' addition
+ The 'set debuginfod' change caused a regression in unittest.exp:
+
+ Running selftest help_doc_invariants.
+ help doc broken invariant: command 'info set debuginfod' help doc first line is not terminated with a '.' character
+ help doc broken invariant: command 'set debuginfod' help doc first line is not terminated with a '.' character
+ help doc broken invariant: command 'show debuginfod' help doc first line is not terminated with a '.' character
+ Self test failed: self-test failed at ../../binutils-gdb/gdb/unittests/command-def-selftests.c:100
+
+ This patch fixes the problem. I'm checking it in.
+
+2021-10-31 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: use silent build rules here too
+ The ppc codebase is unique and doesn't leverage common/, so have to
+ add silent rules to it specifically.
+
+ sim: rl78: drop obsolete manual dependency rules
+ We have GNU make generate these for us automatically now, so there's
+ no need to manually specify any deps.
+
+ sim: drop unused targ-vals.h includes
+ This is used in a few places where it's not needed. Drop the include
+ to avoid the build-time generated header file as we move to drop it.
+
+ sim: unify callback.o building
+ Now that the use of TARGET_xxx defines have been removed, we can move
+ this to the common logic so we only build it once for multi-targets.
+
+ sim: nltvals: pull target open flags out into a dedicated source file
+ Like we just did for pulling out the errno & signal maps, pull out the
+ open flag map into a dedicated common file. All newlib ports are using
+ the same map which makes it easy.
+
+ sim: nltvals: localize TARGET_<open> defines
+ Code should not be using these directly, instead they should be
+ resolving these dynamically via the open_map. Rework the common
+ callback code that was using the defines to use symbolic names
+ instead, and localize some of the defines in the ARM code (since
+ it's a bit unclear how many different APIs it supports currently),
+ then remove the defines out of the header so no new code can rely on
+ them.
+
+ sim: nltvals: pull target signal out into a dedicated source file
+ Like we just did for pulling out the errno map, pull out the signal
+ map into a dedicated common file. All newlib ports are using the
+ same signal map which makes it easy.
+
+2021-10-31 Mike Frysinger <vapier@gentoo.org>
+
+ sim: nltvals: pull target errno out into a dedicated source file
+ The current system maintains a list of target errno constants in the
+ nltvals.def file, then runs a build-time tool to turn that into a C
+ file. This list of errno values is the same for all arches, so we
+ don't need the arch-specific flexibility. Further, these are only
+ for newlib/libgloss environments, which makes it confusing to support
+ other userland runtimes (like Linux). Let's simplify to make this
+ easier to understand & build. We don't namespace the variables yet,
+ but sets up the framework for it.
+
+ Create a new target-newlib-errno.c template file. The template file
+ is hand written, but the inline map is still automatically generated.
+
+ This allows us to move it to the common set of objects so it's only
+ built once in a multi-target build.
+
+ Now we can remove the output from the gentmap build-time tool since
+ it's checked into the tree.
+
+ Then we stop including the errno lists in nltvals.def since nothing
+ uses it.
+
+2021-10-31 Mike Frysinger <vapier@gentoo.org>
+
+ sim: erc32: use silent build rules with sis linkage
+
+2021-10-31 Mike Frysinger <vapier@gentoo.org>
+
+ sim: erc32: fix a few more build warnings
+ Tweak the if indentation & brace style to avoid ambiguous warnings.
+
+ Add ATTRIBUTE_UNUSED to UART functions that aren't used when FAST_UART
+ is defined (which is the default).
+
+2021-10-31 Orgad Shaneh <orgads@gmail.com>
+
+ sim: erc32: fix signedness compatibility and redefinition warnings
+
+2021-10-31 Mike Frysinger <vapier@gentoo.org>
+
+ sim: add arch-specific conditional logic
+ This will make it easy to include arch-specific logic (build files)
+ as we migrate ports to the common top level build.
+
+ sim: v850: delete old gencode logic
+ The v850 port used to have a gencode helper, but it was deleted long
+ ago. Clean up the settings that no longer make sense w/out it.
+
+ sim: common: merge multiple clean commands
+ This provides a minor speedup when cleaning in a multi-target build.
+
+ sim: m32c: tighten up opc2c build output
+ Drop the single debugging line that repeats the command line option,
+ and use the silent build helpers to tighten up output.
+
+ sim: tighten up build regen rules
+ Update the makefile & configure related rules to use the silent
+ build helpers.
+
+ sim: tighten up gencode output
+ Update the gencode rules to use the silent build helpers.
+
+ sim: igen: tighten up build output
+ Add a new stamp helper for quiet builds, and don't dump the command
+ line options when it runs. That isn't standard tool behavior, and
+ doesn't really seem necessary in any way.
+
+ sim: tighten up stamp rules
+ Add a new ECHO_STAMP helper and convert existing stamp code over
+ to it. This is mostly common rules and cgen mloop rules.
+
+ sim: silence stamp touch rules
+ We pretty much never care about these stamp touches, so silence them.
+ Also switch to using $@ when it makes sense.
+
+ sim: standardize move-if-change rules
+ Use the srcroot path and make them all silent.
+
+ sim: mips/v850: remove redundant variable setup
+ The common/Make-common.in fragment already provides these variables.
+
+2021-10-31 Orgad Shaneh <orgads@gmail.com>
+
+ sim: fix compilation on mingw64 [PR sim/28476]
+ ...by reordering includes.
+
+ 1. sim-utils.c
+
+ sim/mips/sim-main.h defines UserMode, while there is a struct in winnt.h
+ which has UserMode as a member. So if sim-main.h is included before winnt.h,
+ compilation fails.
+
+ 2. ppc
+
+ registers.h defines CR, which is used as a member in winnt.h.
+
+ winsock2.h is included by sys/time.h, so sys/time.h has to be included
+ before registers.h.
+
+ Bug: https://sourceware.org/PR28476
+
+2021-10-31 Alan Modra <amodra@gmail.com>
+
+ Don't include coff/pe.h in coff-x86_64.c
+ This (and other) code from coffcode.h is broken for x86_64_coff_vec,
+ and has been ever since support was added in 2006 commit 99ad839030c1
+ Here, bfd_coff_aoutsz must match coff_swap_aouthdr_out otherwise we
+ end up writing garbage.
+
+ /* Note that peicode.h fills in a PEAOUTHDR, not an AOUTHDR.
+ include/coff/pe.h sets AOUTSZ == sizeof (PEAOUTHDR)). */
+ char * buff;
+ bfd_size_type amount = bfd_coff_aoutsz (abfd);
+
+ buff = (char *) bfd_malloc (amount);
+ if (buff == NULL)
+ return false;
+
+ coff_swap_aouthdr_out (abfd, & internal_a, buff);
+ amount = bfd_bwrite (buff, amount, abfd);
+
+ We have removed support for --target=x86_64-coff, likely because it
+ never worked properly, but still produce coff-x86_64.o with
+ --enable-targets=all. This means objcopy can recognize x86_64 COFF
+ files but will write garbage to the output file, a fact found by
+ fuzzers. I suspect x86_64 COFF is still broken after this fix, and
+ mention of coff-x86_64.* should be removed from bfd/Makefile.am.
+
+ * coff-x86_64.c: Don't include coff/pe.h.
+ (COFF_WITH_pex64): Don't define here.
+ * pe-x86_64.c: Include coff/pe.h and other headers.
+ (PEI_HEADERS): Define.
+
+2021-10-31 Alan Modra <amodra@gmail.com>
+
+ Re: PR28420, ecoff fuzzing failures
+ sym_ptr_ptr NULL results in segfaults.
+
+ PR 28420
+ * ecoff.c (ecoff_slurp_reloc_table): Don't leave sym_ptr_ptr NULL.
+
+2021-10-31 Alan Modra <amodra@gmail.com>
+
+ ubsan: alpha-vms: undefined shift
+ * vms-alpha.c (evax_bfd_print_image): Shift left 1u.
+
+ PR28518: signed integer overflow & free on unmalloced address
+ PR 28518
+ * vms-alpha.c (build_module_list): Don't lose malloc buffer address.
+ Use unsigned variables.
+
+2021-10-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix gdb.gdb/unittest.exp with C++17 compiler
+ On a machine with gcc 11, I get:
+
+ FAIL: gdb.gdb/unittest.exp: test_completion: tab complete "maintenance selftest string_v" (second tab) (timeout)
+ FAIL: gdb.gdb/unittest.exp: test_completion: tab complete "maintenance selftest string_vie" (timeout)
+
+ That's because when compiling with C++ >= 17, we use the standard
+ version of string_view, and don't have a selftest for it. So the list
+ of selftests shown by the tab completion when completing "string_v"
+ differs.
+
+ Change the test to use the copy_* tests instead.
+
+ Change-Id: I85f6aa44ee5fc9652b9bd4451e0506b89773526b
+
+2021-10-30 Aaron Merey <amerey@redhat.com>
+
+ gdb.texinfo: Expand documentation for debuginfod
+ Add section describing GDB's usage of debuginfod.
+
+ Refer to this new section in the description of the '--with-debuginfod'
+ configure option.
+
+ Mention debuginfod in the 'Separate Debug Files' section.
+
+2021-10-30 Aaron Merey <amerey@redhat.com>
+
+ gdb: add set/show commands for managing debuginfod
+ Add 'set debuginfod' command. Accepts 'on', 'off' or 'ask' as an
+ argument. 'on' enables debuginfod for the current session. 'off'
+ disables debuginfod for the current session. 'ask' will prompt
+ the user to either enable or disable debuginfod when the next query
+ is about to be performed:
+
+ This GDB supports auto-downloading debuginfo from the following URLs:
+ <URL1> <URL2> ...
+ Enable debuginfod for this session? (y or [n]) y
+ Debuginfod has been enabled.
+ To make this setting permanent, add 'set debuginfod on' to .gdbinit.
+
+ For interactive sessions, 'ask' is the default. For non-interactive
+ sessions, 'off' is the default.
+
+ Add 'show debuginfod status' command. Displays whether debuginfod
+ is set to 'on', 'off' or 'ask'.
+
+ Add 'set/show debuginfod urls' commands. Accepts a string of
+ space-separated debuginfod server URLs to be queried. The default
+ value is copied from the DEBUGINFOD_URLS environment variable.
+
+ Finally add 'set/show debuginfod verbose' commands to control whether
+ debuginfod-related output is displayed. Verbose output is enabled
+ by default.
+
+ (gdb) run
+ Starting program: /bin/sleep 5
+ Download failed: No route to host. Continuing without debug info for /lib64/libc.so.6.
+
+ If GDB is not built with debuginfod then these commands will just display
+
+ Support for debuginfod is not compiled into GDB.
+
+2021-10-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove TYPE_FIELD_DWARF_BLOCK
+ Remove TYPE_FIELD_DWARF_BLOCK, replace with type::field +
+ field::loc_dwarf_block.
+
+ Change-Id: I10af9410bb5f46d342b8358a7956998c7e804b64
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove TYPE_FIELD_STATIC_PHYSADDR
+ Remove TYPE_FIELD_STATIC_PHYSADDR replace with type::field +
+ field::loc_physaddr.
+
+ Change-Id: Ica9bc4a48f34750ec82ec86c298d3ecece81bcbd
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove TYPE_FIELD_STATIC_PHYSNAME
+ Remove TYPE_FIELD_STATIC_PHYSNAME, replace with type::field +
+ field::loc_physname.
+
+ Change-Id: Ie35d446b67dd1d02f39998b406001bdb7e6d5abb
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove TYPE_FIELD_ENUMVAL
+ Remove TYPE_FIELD_ENUMVAL, replace with type::field +
+ field::loc_enumval.
+
+ Change-Id: I2ada73e4635aad3363ce2eb22c1dc52698ee2072
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove TYPE_FIELD_BITPOS
+ Remove TYPE_FIELD_BITPOS, replace its uses with type::field +
+ field::loc_bitpos.
+
+ Change-Id: Iccd8d5a77e5352843a837babaa6bd284162e0320
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove TYPE_FIELD_LOC_KIND
+ Remove TYPE_FIELD_LOC_KIND, replace its uses with type::field +
+ field::loc_kind.
+
+ Change-Id: Ib124a26365df82ac1d23df7962d954192913bd90
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove FIELD_DWARF_BLOCK macro
+ Remove FIELD_DWARF_BLOCK, replace its uses with field::loc_dwarf_block.
+
+ Change-Id: I66b7d6a960cb5e341e61e21bd3cc9a6ac26de6a8
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove FIELD_STATIC_PHYSADDR macro
+ Remove FIELD_LOC_KIND_PHYSADDR, replace its uses with
+ field::loc_physaddr.
+
+ Change-Id: Ifd8b2bdaad75f42bfb1404ef8c396ffe7e10ac55
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove FIELD_STATIC_PHYSNAME macro
+ Remove FIELD_STATIC_PHYSNAME, replace its uses with field::loc_physname.
+
+ Change-Id: Iaa8952410403b4eb5bbd68411feea27e2405d657
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove FIELD_ENUMVAL macro
+ Remove FIELD_ENUMVAL, replace its uses with field::loc_enumval.
+
+ Change-Id: Id4861cee91a8bb583a9836f1aa5da0a320fbf4d9
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove FIELD_BITPOS macro
+ Remove FIELD_BITPOD, replace its uses with field::loc_bitpos.
+
+ Change-Id: Idb99297e0170661254276c206383a7e9bf1a935a
+
+2021-10-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove FIELD_LOC_KIND macro
+ Remove FIELD_LOC_KIND, replace its uses with field::loc_kind or
+ call_site_target::loc_kind.
+
+ Change-Id: I0368d8c3ea269d491bb215aa70e32edbdf55f389
+
+2021-10-29 Tom Tromey <tromey@adacore.com>
+
+ Add gdb.Architecture.integer_type Python function
+ This adds a new Python function, gdb.Architecture.integer_type, which
+ can be used to look up an integer type of a given size and
+ signed-ness. This is useful to avoid dependency on debuginfo when a
+ particular integer type would be useful.
+
+ v2 moves this to be a method on gdb.Architecture and addresses other
+ review comments.
+
+2021-10-29 Tom Tromey <tromey@adacore.com>
+
+ Remove ada_value_print_inner
+ I noticed that the only caller of ada_value_print_inner is
+ valprint.c:do_val_print (via ada_language::value_print_inner), meaning
+ that the try/catch logic in this function is redundant. This patch
+ removes the wrapper function.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-10-29 Tom Tromey <tromey@adacore.com>
+
+ Document resolve_dynamic_type oddity
+ Today I re-learned that resolve_dynamic_type can return a type for
+ which is_dynamic_type returns true. This can happen for an array
+ whose elements have dynamic type -- the array is reported as dynamic,
+ but resolving the elements would be incorrect, because each element
+ might have a different type after resolution.
+
+ You can see the special case in resolve_dynamic_array_or_string:
+
+ if (ary_dim != NULL && ary_dim->code () == TYPE_CODE_ARRAY)
+ ...
+ else
+ ...
+
+ I looked into having the TYPE_CODE_ARRAY case in
+ is_dynamic_type_internal follow this same logic, but that breaks down
+ on the gdb.fortran/dynamic-ptype-whatis.exp test case. In particular
+ this code in fortran_undetermined::evaluate:
+
+ value *callee = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
+ if (noside == EVAL_AVOID_SIDE_EFFECTS
+ && is_dynamic_type (value_type (callee)))
+ callee = std::get<0> (m_storage)->evaluate (nullptr, exp, EVAL_NORMAL);
+
+ ... relies on is_dynamic_type returning true for such an array.
+
+ I wasn't really sure of the best way to fix this, so in the meantime I
+ wrote this patch, which documents the oddity so that I might have a
+ chance of remembering this in the future.
+
+2021-10-29 Tom Tromey <tromey@adacore.com>
+
+ Avoid self-test failures on x86-linux
+ The disassembly tests in "maint selftest" will fail on x86-linux.
+ This happens because opcodes rejects an attempt to disassemble for an
+ arch with a 64-bit address size when bfd_vma is 32-bit.
+
+ This patch avoids this problem by avoiding the test in this case. I
+ chose to do it this way because this seems to be the only situation
+ where opcodes checks the size of bfd_vma.
+
+ For v2 of this patch, I've also updated memory_error_test to do the
+ same thing. This is needed due to the "improve error reporting from
+ the disassembler" patch.
+
+2021-10-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix build with --disable-unit-tests
+ A build with --disable-unit-tests currently run into:
+ ...
+ ld: maint.o: in function \
+ `maintenance_selftest_completer(cmd_list_element*, completion_tracker&,
+ char const*, char const*)':
+ src/gdb/maint.c:1183: undefined reference to \
+ `selftests::for_each_selftest(
+ gdb::function_view<
+ void (std::__cxx11::basic_string<char,std::char_traits<char>,
+ std::allocator<char> > const&)>)'
+ ...
+
+ Fix this by guarding the call to selftests::for_each_selftest in
+ maintenance_selftest_completer with GDB_SELF_TEST, such that the "-verbose"
+ completion still works.
+
+ Rebuild on x86_64-linux and ran gdb.gdb/unittest.exp.
+
+2021-10-29 Enze Li <lienze2010@hotmail.com>
+
+ Document "memory-tag-violations".
+ * gdb/doc/gdb.texinfo: (Data): Document '-memory-tag-violations'.
+ (Command Options): Update the example.
+
+2021-10-29 Tejas Belagod <tejas.belagod@arm.com>
+
+ Support for a new pacbti unwind opcode.
+ This patch adds readelf support for decoding the exception table
+ opcode for restoring the RA_AUTH_CODE pseudo register defined by the
+ EHABI
+ (https://github.com/ARM-software/abi-aa/releases/download/2021Q1/ehabi32.pdf
+ Section 10.3).
+
+ * readelf.c (decode_arm_unwind_bytecode): Add support to decode
+ restoring RA_AUTH_CODE pseudo register.
+
+2021-10-29 Alan Modra <amodra@gmail.com>
+
+ Re: arm: add unwinder encoding support for PACBTI
+ Move the gas testsuite files to where they belong.
+
+2021-10-29 Alan Modra <amodra@gmail.com>
+
+ ELF core file size checks
+ Catch fuzzed segments where p_offset + p_filesz wraps, and limit error
+ output.
+
+ * elfcore.h (elf_core_file_p): Rewrite segment checks using
+ bfd_get_file_size. Set read_only on file size errors.
+ * elfcode.h (elf_swap_shdr_in): Don't repeat error message.
+
+2021-10-29 Alan Modra <amodra@gmail.com>
+
+ obcopy vs. files with silly section alignment
+ We already ignore stupid segment alignment when rewriting headers,
+ ignore section alignment too.
+
+ * elf.c (rewrite_elf_program_header): Ignore section alignment
+ power greater than 62.
+
+2021-10-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-28 Stafford Horne <shorne@gmail.com>
+
+ gdb: Add OpenRISC gdbserver and native config news
+ The previous patches added gdbserver and native debugging support
+ for OpenRISC targets. This patch documents that in the news.
+
+ gdb: or1k: add single step for linux native debugging
+ Needed for single stepping in Linux, this adds the or1k implementation
+ of or1k_software_single_step. Most of the implementation is borrowed
+ from the bare metal single step code from or1k_single_step_through_delay
+ which has been extracted and shared in helper function
+ or1k_delay_slot_p.
+
+2021-10-28 Stafford Horne <shorne@gmail.com>
+
+ gdb: or1k: add native linux support
+ This patch adds support for running gdb natively on OpenRISC linux.
+ Debugging support is provided via the linux PTRACE interface which is
+ mostly handled by GDB genric code. This patch provides the logic of how
+ to read and write the ptrace registers between linux and GDB.
+
+ Single stepping is privided in a separate patch.
+
+2021-10-28 Stafford Horne <shorne@gmail.com>
+
+ gdb: or1k: add generated linux descriptor file
+
+ gdb: or1k: fixup linux regcache comment
+ The old comment was not properly updated from the RISC-V example used.
+ Update it to match OpenRISC.
+
+2021-10-28 Stafford Horne <shorne@gmail.com>
+
+ gdb: or1k: implement gdb server
+ This patch adds gdbserver support for OpenRISC. This has been used for
+ debugging the glibc port that in being worked on here:
+
+ https://github.com/openrisc/or1k-glibc/tree/or1k-port-2
+
+ Hence the comment about registers definitions being inline with glibc.
+
+2021-10-28 Christian Biesinger <cbiesinger@google.com>
+
+ [sim] Include defs.h in ppc/hw_memory.c
+ To fix this error (seen on cygwin):
+ /../../sim/ppc/../common ../../../sim/ppc/hw_memory.c
+ In file included from ../../gnulib/import/stdlib.h:100,
+ from ../../../sim/ppc/hw_memory.c:28:
+ ../../gnulib/import/unistd.h:663:3: error: #error "Please include config.h first."
+ 663 | #error "Please include config.h first."
+ | ^~~~~
+ ../../gnulib/import/unistd.h:665:24: error: expected ';' before 'extern'
+ 665 | _GL_INLINE_HEADER_BEGIN
+ | ^
+ | ;
+ ../../gnulib/import/unistd.h:2806:22: error: expected ';' before 'extern'
+ 2806 | _GL_INLINE_HEADER_END
+ | ^
+ | ;
+
+2021-10-28 Markus Klein <markus.klein@sma.de>
+
+ ARM assembler: Allow up to 32 single precision registers in the VPUSH and VPOP instructions.
+ PR 28436
+ * config/tc-arm.c (do_vfp_nsyn_push_pop_check): New function.
+ (do_vfp_nsyn_pop): Use the new function.
+ (do_vfp_nsyn_push): Use the new function.
+ * testsuite/gas/arm/v8_1m-mve.s: Add new instructions.
+ * testsuite/gas/arm/v8_1m-mve.d: Updated expected disassembly.
+
+2021-10-28 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: use ptid_t::to_string in infrun debug messages
+ In debug messages, I think it would be more helpful to print ptid using
+ the simple "pid.lwp.tid" notation in infrun debug messages. I am
+ currently debugging some fork issues, and find the pid_to_str output not
+ so useful, as it doesn't tell which process a thread belongs to.
+
+ It currently shows up like this:
+
+ [infrun] resume_1: step=1, signal=GDB_SIGNAL_0, trap_expected=0, current thread [Thread 0x7ffff7d95740 (LWP 892942)] at 0x55555555521f
+
+ With the patch, it shows up like this:
+
+ [infrun] resume_1: step=1, signal=GDB_SIGNAL_0, trap_expected=1, current thread [894072.894077.0] at 0x5555555551d9
+
+ Change-Id: I130796d7dfb0d8e763b8358d8a6002701d80c4ea
+
+2021-10-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add selftest name completion
+ After the previous commit, it is easy to add completion for selftest
+ names. Again, this is not particularly high value, but I rarely touched
+ completion, so it served as a simple example to get some practice.
+
+ Change the for_each_selftest_ftype parameter to gdb::function_view, so
+ that we can pass a lambda that captures things.
+
+ Change-Id: I87cac299ddca9ca7eb0ffab78342e850a98d954c
+
+2021-10-28 Tejas Belagod <Tejas.Belagod@arm.com>
+
+ arm: add unwinder encoding support for PACBTI
+ This patch adds support for encoding the Return Address Authentication pseudo
+ register - '.save {ra_auth_code}' as defined by the DWARF ABI - in the
+ exception tables where the opcode is defined by the EHABI
+
+ gas/Changelog:
+
+ * config/tc-arm.c (arm_reg_type): Add new type REG_TYPE_PSEUDO.
+ (reg_expected_msgs): Add message for pseudo reg type.
+ (reg_list_els): Add new reg list type REGLIST_PSEUDO.
+ (parse_reg_list): Handle new REGLIST_PSEUDO type.
+ (s_arm_unwind_save_pseudo): Encode pseudo reg list save in exception
+ tables.
+ (s_arm_unwind_save): Handle new REG_TYPE_PSEUDO.
+ (reg_names): Add ra_auth_code pseudo register.
+ * testsuite/gas/arm/unwind-pacbti-m.s: New test.
+ * testsuite/gas/arm/unwind-pacbti-m.d: New test.
+ * testsuite/gas/arm/unwind-pacbti-m-readelf.d: New test.
+
+2021-10-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add "maint set/show selftest verbose" commands and use process_options
+ I saw the new -verbose switch to "maint selftests" and thought it would
+ be nice for it to use the option framework. For example, that makes
+ having completion easy. It's not that high value, given this is a
+ maintenance command, but I had never used the framework myself, so it
+ was a good way to practice.
+
+ This patch also adds the "maint set/show selftest verbose" setting. It
+ would be possible to use option framework without adding the setting,
+ but using the framework makes adding the option almost trivial, so I
+ thought why not.
+
+ Change-Id: I6687faa0713ff3da60b398253211777100094144
+
+2021-10-28 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Update some test-cases to GPLv3
+ I noticed some files in the test-suite have GPLv2 notices.
+
+ Update these to GPLv3.
+
+2021-10-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add add_setshow_prefix_cmd
+ There's a common pattern to call add_basic_prefix_cmd and
+ add_show_prefix_cmd to add matching set and show commands. Add the
+ add_setshow_prefix_cmd function to factor that out and use it at a few
+ places.
+
+ Change-Id: I6e9e90a30e9efb7b255bf839cac27b85d7069cfd
+
+2021-10-28 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Require python in gdb.server/server-kill-python.exp
+ I came across this when running test-case gdb.server/server-kill-python.exp
+ with a gdb configured without python:
+ ...
+ builtin_spawn gdb -nw -nx -data-directory data-directory -iex set height 0 \
+ -iex set width 0 -quiet -iex set height 0 -iex set width 0 \
+ -ex source outputs/gdb.server/server-kill-python/file1.py^M
+ FAIL: gdb.server/server-kill-python.exp: ensure inferior is running
+ Executing on target: kill -9 28535 (timeout = 300)
+ builtin_spawn -ignore SIGHUP kill -9 28535^M
+ file1.py:1: Error in sourced command file:^M
+ Undefined command: "import". Try "help".^M
+ ...
+
+ Fix this by testing for python support in the test-case.
+
+ Tested on aarch64-linux (with python support disabled) and x86_64-linux (with
+ python support enabled).
+
+2021-10-28 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix assembly comments in gdb.dwarf2/clang-debug-names.exp.tcl
+ On openSUSE Leap 15.2 aarch64 I ran into:
+ ...
+ clang-debug-names-debug.S:72: \
+ Error: junk at end of line, first unrecognized character is `#'
+ ...
+ due to:
+ ...
+ 71 .Ldebug_names_start:
+ 72 .short 5 # Header: version
+ ...
+
+ Fix this by using the /* ... */ comment style instead:
+ ...
+ $ sed -i 's% #\([^"]*\)%/*\1 */%' clang-debug-names.exp.tcl
+ ...
+
+ Tested on aarch64-linux and x86_64-linux.
+
+2021-10-28 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Handle DW_AT_string_length with location list
+ Consider a fortran routine where a string variable s is modified:
+ ...
+ subroutine f(s)
+ character*(*) s
+ print *, s
+ s(1:3) = 'oof'
+ print *, s
+ end subroutine f
+ ...
+
+ When compiling with optimization level -O1 and printing the type of
+ variable s we get:
+ ...
+ $ gdb -q -batch outputs/gdb.opt/fortran-string/fortran-string \
+ -ex "b f" \
+ -ex run \
+ -ex "ptype s"
+ Breakpoint 1 at 0x4006f7: file fortran-string.f90, line 21.
+
+ Breakpoint 1, f (s=..., _s=_s@entry=3) at fortran-string.f90:21
+ 21 subroutine f(s)
+ type = character*1
+ ...
+ while with -O0 we have instead:
+ ...
+ type = character (3)
+ ...
+
+ The problem is that the type of s is:
+ ...
+ <1><2d6>: Abbrev Number: 21 (DW_TAG_string_type)
+ <2d7> DW_AT_string_length: 0xbf (location list)
+ <2db> DW_AT_byte_size : 4
+ ...
+ where the DW_AT_string_length is a location list, a case that is not handled
+ by attr_to_dynamic_prop.
+
+ Fix this by handling attr->form_is_section_offset () in attr_to_dynamic_prop.
+
+ Tested on x86_64-linux.
+
+ The test-case is based on gdb.opt/fortran-string.exp from
+ https://src.fedoraproject.org/rpms/gdb/raw/f32/f/gdb-archer-vla-tests.patch .
+ I've updated the copyrights to stretch to 2021.
+
+ [ I've tried to create a dwarf assembly test-case for this, but didn't
+ manage. ]
+
+ Co-Authored-By: Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26910
+
+2021-10-28 Kavitha Natarajan <kavitha.natarajan@amd.com>
+
+ [gdb/testsuite] Initialize anonymous union in gdb.cp/koenig.cc
+ GDB test fails while running the test case gdb.cp/koenig.exp using
+ clang compiler:
+ [...]
+ p foo (p_union)
+ No symbol "p_union" in current context.
+ (gdb) FAIL: gdb.cp/koenig.exp: p foo (p_union)
+ [...]
+
+ In the testcase, "p_union" is an unused/uninitialized variable of
+ anonymous union type. Clang does not emit symbol for unused anonymous
+ union/struct variables at any optimization level. Since the compiler
+ itself is not emitting the symbol for "p_union", debug info is also
+ not emitted when built with debug option. If the anonymous union is
+ initialized (or used), then clang emits the symbol "p_union" which
+ enables emitting debug info for "p_union".
+ [...]
+ p foo (p_union)
+ Cannot resolve function foo to any overloaded instance
+ (gdb) PASS: gdb.cp/koenig.exp: p foo (p_union)
+ [...]
+
+2021-10-28 Alan Modra <amodra@gmail.com>
+
+ asan: mmo: NULL dereferenc in mmo_xore_32
+ mmo_get_loc can return NULL. It's commented even, and that the caller
+ then must handle a split field. mmo_xore_* don't handle split fields,
+ instead just segfault. Stop that happening, and refuse to recognise
+ fuzzed mmo files that trigger this problem.
+
+ * mmo.c (mmo_get_loc): Don't declare inline.
+ (mmo_xore_64, mmo_xore_32, mmo_xore_16): Remove forward decls.
+ Return pointer, don't dereference NULL.
+ (mmo_scan): Return error on mmo_get_loc returning NULL.
+
+2021-10-28 Alan Modra <amodra@gmail.com>
+
+ bfd: remove use of INLINE
+ No need to use anything fancy, plain inline works just as well.
+
+ * bfd-in.h (INLINE): Don't define.
+ * bfd-in2.h: Regenerate.
+ * aoutx.h: Replace use of INLINE with inline.
+ * elf-eh-frame.c: Likewise.
+ * elf32-score7.c: Likewise.
+ * elfxx-mips.c: Likewise.
+ * ihex.c: Likewise.
+ * mach-o.c: Likewise.
+ * mmo.c: Likewise.
+
+2021-10-28 Alan Modra <amodra@gmail.com>
+
+ ASSERT in empty output section with address
+ * ldlang.c (lang_do_assignments_1): Correct "dot" inside ignored
+ sections.
+ * testsuite/ld-scripts/empty-address-4.d,
+ * testsuite/ld-scripts/empty-address-4.s,
+ * testsuite/ld-scripts/empty-address-4.t: New test.
+ * testsuite/ld-scripts/empty-address.exp: Run it.
+
+2021-10-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-27 Alan Modra <amodra@gmail.com>
+
+ asan: alpha-vms: buffer overflows
+ Yet more anti-fuzzer sanity checking
+
+ * vms-alpha.c (evax_bfd_print_egsd): Sanity check record and
+ name lengths before access.
+ (evax_bfd_print_etir_stc_ir, evax_bfd_print_etir): Likewise.
+
+2021-10-27 Alan Modra <amodra@gmail.com>
+
+ ubsan: arm: undefined shift
+ left shift of 2 by 31 places cannot be represented in type 'int'
+
+ * arm-dis.c (print_insn_thumb16): Avoid undefined behaviour.
+
+2021-10-27 Tom Tromey <tromey@adacore.com>
+
+ Fix watchpoints with multiple threads on Windows
+ A recent internal change pointed out that watchpoints were not working
+ on Windows when the inferior was multi-threaded. This happened
+ because the debug registers were only updated for certain threads --
+ in particular, those that were being resumed and that were not marked
+ as suspended. In the case of single-stepping, the need to update the
+ debug registers in other threads could also be "forgotten".
+
+ This patch changes windows-nat.c to mark all threads needing a debug
+ register update. This brings the code closer to what gdbserver does
+ (though, unfortunately, it still seems more complicated than needed).
+
+2021-10-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix port detection in gdb.debuginfod/fetch_src_and_symbols.exp
+ On OBS I ran into this failure with test-case
+ gdb.debuginfod/fetch_src_and_symbols.exp:
+ ...
+ Failed to listen for connections: Address already in use^M
+ [Thu Oct 21 11:48:49 2021] (559/559): started http server on IPv6 port=8000^M
+ ...
+ FAIL: gdb.debuginfod/fetch_src_and_symbols.exp: local_url: find port timeout
+ ...
+
+ The test-case is trying to start debuginfod on a port to see if it's
+ available, and it handles either this message:
+ "started http server on IPv4 IPv6 port=$port"
+ meaning success, or:
+ "failed to bind to port"
+ meaning failure, in which case the debuginfod instance is killed, and we try
+ the next port.
+
+ The test-case only uses the v4 address 127.0.0.1, so fix this by:
+ - accepting "started http server on IPv4 port=$port"
+ - rejecting "started http server on IPv6 port=$port"
+
+ Tested on x86_64-linux.
+
+2021-10-27 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: fix value.c build on 32-bits
+ When building on ARM (32-bits), we errors like this:
+
+ /home/smarchi/src/binutils-gdb/gdb/value.c: In function 'gdb::array_view<const unsigned char> value_contents_for_printing(value*)':
+ /home/smarchi/src/binutils-gdb/gdb/value.c:1252:35: error: narrowing conversion of 'length' from 'ULONGEST' {aka 'long long unsigned int'} to 'size_t' {aka 'unsigned int'} [-Werror=narrowing]
+ 1252 | return {value->contents.get (), length};
+ | ^~~~~~
+
+ Fix that by using gdb::make_array_view, which does the appropriate
+ conversion.
+
+ Change-Id: I7d6f2e75d7440d248b8fb18f8272ee92954b404d
+
+2021-10-27 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Tidy riscv assembler and disassembler.
+ Tidy the gas/config/tc-riscv.c and opcodes/riscv-dis.c, to prepare for
+ moving the released extensions (including released vendor extensions)
+ from integration branch back to mainline.
+
+ * Added parts of missing comments.
+
+ * Updated md_show_usage.
+
+ * For validate_riscv_insn, riscv_ip and print_insn_args, unify the
+ following pointer names,
+ - oparg: pointed to the parsed operand defined in the riscv_opcodes.
+ - asarg: pointed to the parsed operand from assembly.
+ - opargStart: recorded the parsed operand name from riscv_opcodes.
+ - asargStart: recorded the parsed operand name from assembly.
+
+ gas/
+ * config/tc-riscv.c: Added parts of missind comments and updated
+ the md_show_usage.
+ (riscv_multi_subset_supports): Tidy codes.
+ (validate_riscv_insn): Unify the pointer names, oparg, asarg,
+ opargStart and asargStart, to prepare for moving the released
+ extensions from integration branch back to mainline.
+ (riscv_ip): Likewise.
+ (macro_build): Added fmtStart, also used to prepare for moving
+ released extensions.
+ (md_show_usage): Added missing descriptions for new options.
+ opcodes/
+ * riscv-dis.c (print_insn_args): Unify the pointer names,
+ oparg and opargStart, to prepare for moving the released
+ extensions from integration branch back to mainline.
+
+2021-10-27 Maciej W. Rozycki <macro@embecosm.com>
+
+ opcodes: Fix RPATH not being set for dynamic libbfd dependency
+ If built as a shared library, libopcodes has a load-time dependency on
+ libbfd, which is recorded in the dynamic section, however without a
+ corresponding RPATH entry for the directory to find libbfd in. This
+ causes loading to fail whenever libbfd is only pulled by libopcodes
+ indirectly and libbfd has been installed in a directory that is not in
+ the dynamic loader's search path.
+
+ It does not happen with the programs included with binutils or GDB,
+ because they all also pull libbfd when using libopcodes, but it can
+ happen with external software, e.g.:
+
+ $ gdbserver --help
+ gdbserver: error while loading shared libraries: libbfd-[...].so: cannot open shared object file: No such file or directory
+ $
+
+ (not our `gdbserver').
+
+ Indirect dynamic dependencies are handled by libtool automatically by
+ adding RPATH entries as required, however our setup for libopcodes
+ prevents this from happening by linking in libbfd with an explicit file
+ reference sneaked through to the linker directly behind libtool's back
+ via the `-Wl' linker command-line option rather than via `-l' combined
+ with a suitable library search path specified via `-L', as it would be
+ usually the case, or just referring to the relevant .la file in a fully
+ libtool-enabled configuration such as ours.
+
+ According to an observation in the discussion back in 2007[1][2][3] that
+ has led to the current arrangement it is to prevent libtool from picking
+ up the wrong version of libbfd. It does not appear to be needed though,
+ not at least with our current libtool incarnation, as directly referring
+ `libbfd.la' does exactly what it should, as previously suggested[4], and
+ with no link-time reference to the installation directory other than to
+ set RPATH. Uninstalled version of libopcodes has libbfd's build-time
+ location prepended to RPATH too, as also expected.
+
+ Use a direct reference to `libbfd.la' then, making the load error quoted
+ above go away. Alternatively `-L' and `-l' could be used to the same
+ effect, but it seems an unnecessary complication and just another way to
+ circumvent rather than making use of libtool.
+
+ References:
+
+ [1] "compile failure due to undefined symbol",
+ <https://sourceware.org/ml/binutils/2007-08/msg00476.html>
+
+ [2] same, <https://sourceware.org/ml/binutils/2007-09/msg00000.html>
+
+ [3] same, <https://sourceware.org/ml/binutils/2007-10/msg00019.html>
+
+ [4] same, <https://sourceware.org/ml/binutils/2007-10/msg00034.html>
+
+ opcodes/
+ * Makefile.am: Remove obsolete comment.
+ * configure.ac: Refer `libbfd.la' to link shared BFD library
+ except for Cygwin.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+
+2021-10-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-27 H.J. Lu <hjl.tools@gmail.com>
+
+ gold: Place .note.gnu.property section before other note sections
+ Place the .note.gnu.property section before all other note sections to
+ avoid being placed between other note sections with different alignments.
+
+ PR gold/28494
+ * layout.cc (Layout::create_note): Set order to ORDER_PROPERTY_NOTE
+ for the .note.gnu.property section.
+ * layout.h (Output_section_order): Add ORDER_PROPERTY_NOTE.
+
+2021-10-26 Tom de Vries <tdevries@suse.de>
+
+ [gdb/doc] Fix print inferior-events default
+ In the docs about print inferior-events we read:
+ ...
+ By default, these messages will not be printed.
+ ...
+
+ That used to be the case, but is no longer so since commit f67c0c91715 "Enable
+ 'set print inferior-events' and improve detach/fork/kill/exit messages".
+
+ Fix this by updating the docs.
+
+2021-10-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-25 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: change functions returning value contents to use gdb::array_view
+ The bug fixed by this [1] patch was caused by an out-of-bounds access to
+ a value's content. The code gets the value's content (just a pointer)
+ and then indexes it with a non-sensical index.
+
+ This made me think of changing functions that return value contents to
+ return array_views instead of a plain pointer. This has the advantage
+ that when GDB is built with _GLIBCXX_DEBUG, accesses to the array_view
+ are checked, making bugs more apparent / easier to find.
+
+ This patch changes the return types of these functions, and updates
+ callers to call .data() on the result, meaning it's not changing
+ anything in practice. Additional work will be needed (which can be done
+ little by little) to make callers propagate the use of array_view and
+ reap the benefits.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2021-September/182306.html
+
+ Change-Id: I5151f888f169e1c36abe2cbc57620110673816f3
+
+2021-10-25 Simon Marchi <simon.marchi@efficios.com>
+
+ gdbsupport: add assertions in array_view
+ Add assertions to ensure we don't access an array_view out of bounds.
+ Enable these assertions only when _GLIBCXX_DEBUG is set, as we did for
+ gdb::optional.
+
+ Change-Id: Iffaee38252405073735ed123c8e57fde6b2c6be3
+
+2021-10-25 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver: make target_pid_to_str return std::string
+ I wanted to write a warning that included two target_pid_to_str calls,
+ like this:
+
+ warning (_("Blabla %s, blabla %s"),
+ target_pid_to_str (ptid1),
+ target_pid_to_str (ptid2));
+
+ This doesn't work, because target_pid_to_str stores its result in a
+ static buffer, so my message would show twice the same ptid. Change
+ target_pid_to_str to return an std::string to avoid this. I don't think
+ we save much by using a static buffer, but it is more error-prone.
+
+ Change-Id: Ie3f649627686b84930529cc5c7c691ccf5d36dc2
+
+2021-10-25 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Also handle stores for -muse-unaligned-vector-move
+ * config/tc-i386.c (encode_with_unaligned_vector_move): Also
+ handle stores.
+ * testsuite/gas/i386/unaligned-vector-move.s: Add stores.
+ * testsuite/gas/i386/unaligned-vector-move.d: Updated.
+ * testsuite/gas/i386/x86-64-unaligned-vector-move.d: Likewise.
+
+2021-10-25 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix duplicate in gdb.mi/mi-var-cp.exp
+ With test-case gdb.mi/mi-var-cp.exp I run into this duplicate:
+ ...
+ PASS: gdb.mi/mi-var-cp.exp: run to mi-var-cp.cc:104 (set breakpoint)
+ PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+ PASS: gdb.mi/mi-var-cp.exp: create varobj for s
+ DUPLICATE: gdb.mi/mi-var-cp.exp: create varobj for s
+ ...
+
+ This is due to a duplicate test name here:
+ ...
+ $ cat -n gdb/testsuite/gdb.mi/mi-var-cp.cc
+ ...
+ 100 int reference_to_struct ()
+ 101 {
+ 102 /*: BEGIN: reference_to_struct :*/
+ 103 S s = {7, 8};
+ 104 S& r = s;
+ 105 /*:
+ 106 mi_create_varobj S s "create varobj for s"
+ 107 mi_create_varobj R r "create varobj for s"
+ ...
+
+ Fix this by using "create varobj for r" instead.
+
+ Tested on x86_64-linux.
+
+2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf, ld: handle nonrepresentable types better
+ ctf_type_visit (used, among other things, by the type dumping code) was
+ aborting when it saw a nonrepresentable type anywhere: even a single
+ structure member with a nonrepresentable type caused an abort with
+ ECTF_NONREPRESENTABLE. This is not useful behaviour, given that the
+ abort comes from a type-resolution we are only doing in order to
+ determine whether the type is a structure or union. We know
+ nonrepresentable types can't be either, so handle that case and
+ pass the nonrepresentable type down.
+
+ (The added test verifies that the dumper now handles this case and
+ prints nonrepresentable structure members as it already does
+ nonrepresentable top-level types, rather than skipping the whole
+ structure -- or, without the previous commit, skipping the whole types
+ section.)
+
+ ld/ChangeLog
+ 2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ * testsuite/ld-ctf/nonrepresentable-member.*: New test.
+
+ libctf/ChangeLog
+ 2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-types.c (ctf_type_rvisit): Handle nonrepresentable types.
+
+2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: dump: do not stop dumping types on error
+ If dumping of a single type fails, we obviously can't dump it; but just
+ as obviously this doesn't make the other types in the types section
+ invalid or undumpable. So we should not propagate errors seen when
+ type-dumping, but rather ignore them and carry on, so we dump as many
+ types as we can (leaving out the ones we can't grok).
+
+ libctf/ChangeLog
+ 2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-dump.c (ctf_dump_type): Do not abort on error.
+
+2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ binutils, ld: make objdump --ctf's parameter optional
+ ld by default (and always, unless adjusted with a hand-rolled linker
+ script) emits deduplicated CTF into the .ctf section. But viewing
+ it needs you to explicitly tell objdump this: it doesn't default
+ its argument, even though what you always end up typing is
+ --ctf=.ctf.
+
+ This is annoying, so make the argument optional.
+
+ binutils/ChangeLog
+ 2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ * objdump.c (usage): --ctf now has an optional argument.
+ (main): Adjust accordingly.
+ (dump_ctf): Default it.
+ * doc/ctf.options.texi: Adjust.
+
+ ld/ChangeLog
+ 2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ * testsuite/ld-ctf/array.d: Change --ctf=.ctf to --ctf.
+ * testsuite/ld-ctf/conflicting-cycle-1.B-1.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-1.B-2.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-1.parent.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-2.A-1.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-2.A-2.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-2.parent.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-3.C-1.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-3.C-2.d: Likewise.
+ * testsuite/ld-ctf/conflicting-cycle-3.parent.d: Likewise.
+ * testsuite/ld-ctf/conflicting-enums.d: Likewise.
+ * testsuite/ld-ctf/conflicting-typedefs.d: Likewise.
+ * testsuite/ld-ctf/cross-tu-cyclic-conflicting.d: Likewise.
+ * testsuite/ld-ctf/cross-tu-cyclic-nonconflicting.d: Likewise.
+ * testsuite/ld-ctf/cross-tu-into-cycle.d: Likewise.
+ * testsuite/ld-ctf/cross-tu-noncyclic.d: Likewise.
+ * testsuite/ld-ctf/cycle-1.d: Likewise.
+ * testsuite/ld-ctf/cycle-2.A.d: Likewise.
+ * testsuite/ld-ctf/cycle-2.B.d: Likewise.
+ * testsuite/ld-ctf/cycle-2.C.d: Likewise.
+ * testsuite/ld-ctf/data-func-conflicted.d: Likewise.
+ * testsuite/ld-ctf/diag-cttname-null.d: Likewise.
+ * testsuite/ld-ctf/diag-cuname.d: Likewise.
+ * testsuite/ld-ctf/diag-parlabel.d: Likewise.
+ * testsuite/ld-ctf/enum-forward.d: Likewise.
+ * testsuite/ld-ctf/enums.d: Likewise.
+ * testsuite/ld-ctf/forward.d: Likewise.
+ * testsuite/ld-ctf/function.d: Likewise.
+ * testsuite/ld-ctf/nonrepresentable.d: Likewise.
+ * testsuite/ld-ctf/slice.d: Likewise.
+ * testsuite/ld-ctf/super-sub-cycles.d: Likewise.
+
+2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ binutils: make objdump/readelf --ctf-parent actually useful
+ This option has been present since the very early days of the
+ development of libctf as part of binutils, and it shows. Back in the
+ earliest days, I thought we might handle ambiguous types by introducing
+ new ELF sections on the fly named things like .ctf.foo.c for ambiguous
+ types found only in foo.c, etc. This turned out to be a terrible idea,
+ so we moved to using a CTF archive in the .ctf section which contained
+ all the CTF dictionaries -- but the --ctf-parent option in objdump and
+ readelf was never adjusted, and lingered as a mechanism to specify CTF
+ parent dictionaries in sections other than .ctf, even though the linker
+ has no way to produce parent dictionaries in different sections from
+ their children, libctf's ctf_open can't handle such split-up
+ parent/child dicts, and they are never found in the wild, emitted by GNU
+ ld or by any known third-party linking tool.
+
+ Meanwhile, the actually-useful ctf_link feature (albeit not used by ld)
+ which lets you remap the names of CTF archive members (so you can end up
+ with a parent archive member named something other than ".ctf", still
+ contained with all its children in a single .ctf section) had no support
+ in objdump or readelf: there was no way to tell them that these members
+ were parents, so all the types in the associated child dicts always
+ appeared corrupted, referencing nonexistent types from a parent objdump
+ couldn't find.
+
+ So adjust --ctf-parent so that rather than taking a section name it
+ takes a member name instead (if not specified, the name is ".ctf", which
+ is what GNU ld emits). Because the option was always useless before
+ now, this is expected to have no backward-compatibility implications.
+
+ As part of this, we have to slightly adjust the code which skips the
+ archive member name if redundant: right now it skips it if it's ".ctf",
+ on the assumption that this name will almost always be at the start
+ of the objdump output and thus we'll end up with a shared dump
+ and then smaller, headed dumps for the per-TU child dicts; but if
+ the parent name has been changed, that won't be true any more.
+
+ So change the rules to "members named .ctf which appear first in the
+ first have their member name skipped". Since we now need to count
+ members, move from ctf_archive_iter (for which passing in extra
+ parameters requires defining a new struct and is clumsy) to
+ ctf_archive_next, allowing us to just *call* dump_ctf_archive_member and
+ maintain a member count in the obvious way. In the process we fix a
+ tiny difference between readelf and objdump: if a ctf_dump ever failed,
+ readelf skipped every later member, while objdump tried to keep going as
+ much as it could. For a dumping tool the former is clearly preferable.
+
+ binutils/ChangeLog
+ 2021-10-25 Nick Alcock <nick.alcock@oracle.com>
+
+ * objdump.c (usage): --ctf-parent now takes a name, not a section.
+ (dump_ctf): Don't open a separate section; use the parent_name in
+ ctf_dict_open instead. Use ctf_archive_next, not ctf_archive_iter,
+ so we can pass down a member count.
+ (dump_ctf_archive_member): Add the member count; don't return
+ anything. Import parents into children no matter what the
+ parent's name, while still avoiding displaying the header for the
+ common parent name of ".ctf".
+ * readelf.c (usage): Adjust similarly.
+ (dump_section_as_ctf): Likewise.
+ (dump_ctf_archive_member): Likewise. Never stop iterating over
+ archive members, even if ctf_dump of one member fails.
+ * doc/ctf.options.texi: Adjust.
+
+2021-10-25 Alan Modra <amodra@gmail.com>
+
+ objdump doesn't accept -L option
+ A followup to commit ca0e11aa4b.
+
+ * objdump.c (main): Add 'L' to short options and sort them.
+
+2021-10-25 Alan Modra <amodra@gmail.com>
+
+ bfd_nonfatal_message, localise va_start
+ Nothing to see here, just a little tidier.
+
+ * bucomm.c (bfd_nonfatal_message): Localise va_list args.
+
+2021-10-25 Alan Modra <amodra@gmail.com>
+
+ ubsan: _bfd_xcoff64_swap_aux_in left shift of negative value
+ * coff64-rs6000.c (_bfd_xcoff64_swap_aux_in): Use bfd_vma for h.
+
+ asan: evax_bfd_print_image buffer overflow
+ * vms-alpha.c (evax_bfd_print_image): Sanity check printing of
+ "image activator fixup" section.
+ (evax_bfd_print_relocation_records): Sanity check buffer offsets.
+ (evax_bfd_print_address_fixups): Likewise.
+ (evax_bfd_print_reference_fixups): Likewise.
+
+2021-10-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-24 Alan Modra <amodra@gmail.com>
+
+ asan: c4x, c54x coff_canonicalize_reloc buffer overflow
+ Sometimes the investigation of a fuzzing bug report leads into areas
+ you'd rather not go. In this instance by the time I'd figured out the
+ real cause was a target variant that had never been properly supported
+ in binutils, the time needed to fix it was less than the time needed
+ to rip it out.
+
+ * coffcode.h (coff_set_alignment_hook): Call bfd_coff_swap_reloc_in
+ not coff_swap_reloc_in.
+ (coff_slurp_reloc_table): Likewise. Don't use RELOC type.
+ (ticoff0_swap_table): Use coff_swap_reloc_v0_out and
+ coff_swap_reloc_v0_in.
+ * coffswap.h (coff_swap_reloc_v0_in, coff_swap_reloc_v0_out): New.
+ * coff-tic54x.c (tic54x_lookup_howto): Don't abort.
+ * coffgen.c (coff_get_normalized_symtab): Use PTR_ADD.
+ * bfd-in.h (PTR_ADD, NPTR_ADD): Avoid warnings when passing an
+ expression.
+ * bfd-in2.h: Regenerate.
+
+2021-10-24 Alan Modra <amodra@gmail.com>
+
+ asan: arm-darwin: buffer overflow
+ PR 21813
+ * mach-o-arm.c (bfd_mach_o_arm_canonicalize_one_reloc): Sanity
+ check PAIR reloc in other branch of condition as was done for
+ PR21813. Formatting. Delete debug printf.
+
+ asan: aout: heap buffer overflow
+ * aoutx.h (aout_get_external_symbols): Sanity check before writing
+ zero index entry. Remove outdated comment.
+ * pdp11.c (aout_get_external_symbols): Likewise.
+
+2021-10-24 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch ld support
+ 2021-10-22 Chenghua Xu <xuchenghua@loongson.cn>
+ Zhensong Liu <liuzhensong@loongson.cn>
+ Weinan Liu <liuweinan@loongson.cn>
+ Xiaolin Tang <tangxiaolin@loongson.cn>
+
+ ld/
+ * Makefile.am: Add LoongArch.
+ * NEWS: Mention LoongArch support.
+ * configure.tgt: Add LoongArch.
+ * emulparams/elf32loongarch-defs.sh: New.
+ * emulparams/elf32loongarch.sh: Likewise.
+ * emulparams/elf64loongarch-defs.sh: Likewise.
+ * emulparams/elf64loongarch.sh: Likewise.
+ * emultempl/loongarchelf.em: Likewise.
+ * Makefile.in: Regenerate.
+ * po/BLD-POTFILES.in: Regenerate.
+ ld/testsuite/
+ * ld-loongarch-elf/disas-jirl.d: New.
+ * ld-loongarch-elf/disas-jirl.s: Likewise.
+ * ld-loongarch-elf/jmp_op.d: Likewise.
+ * ld-loongarch-elf/jmp_op.s: Likewise.
+ * ld-loongarch-elf/ld-loongarch-elf.exp: Likewise.
+ * ld-loongarch-elf/macro_op.d: Likewise.
+ * ld-loongarch-elf/macro_op.s: Likewise.
+ * ld-loongarch-elf/syscall-0.s: Likewise.
+ * ld-loongarch-elf/syscall-1.s: Likewise.
+ * ld-loongarch-elf/syscall.d: Likewise.
+ * ld-srec/srec.exp: Add LoongArch.
+ * ld-unique/pr21529.d: Likewise.
+
+2021-10-24 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch gas support
+ 2021-10-22 Chenghua Xu <xuchenghua@loongson.cn>
+ Zhensong Liu <liuzhensong@loongson.cn>
+ Weinan Liu <liuweinan@loongson.cn>
+ Xiaolin Tang <tangxiaolin@loongson.cn>
+
+ gas/
+ * Makefile.am: Add LoongArch.
+ * NEWS: Mention LoongArch support.
+ * config/loongarch-lex-wrapper.c: New.
+ * config/loongarch-lex.h: New.
+ * config/loongarch-lex.l: New.
+ * config/loongarch-parse.y: New.
+ * config/tc-loongarch.c: New.
+ * config/tc-loongarch.h: New.
+ * configure.ac: Add LoongArch.
+ * configure.tgt: Likewise.
+ * doc/as.texi: Likewise.
+ * doc/c-loongarch.texi: Likewise.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * po/POTFILES.in: Regenerate.
+ gas/testsuite/
+ * gas/all/gas.exp: Add LoongArch.
+ * gas/elf/elf.exp: Likewise.
+ * gas/loongarch/4opt_op.d: New.
+ * gas/loongarch/4opt_op.s: Likewise.
+ * gas/loongarch/fix_op.d: Likewise.
+ * gas/loongarch/fix_op.s: Likewise.
+ * gas/loongarch/float_op.d: Likewise.
+ * gas/loongarch/float_op.s: Likewise.
+ * gas/loongarch/imm_op.d: Likewise.
+ * gas/loongarch/imm_op.s: Likewise.
+ * gas/loongarch/jmp_op.d: Likewise.
+ * gas/loongarch/jmp_op.s: Likewise.
+ * gas/loongarch/load_store_op.d: Likewise.
+ * gas/loongarch/load_store_op.s: Likewise.
+ * gas/loongarch/loongarch.exp: Likewise.
+ * gas/loongarch/macro_op.d: Likewise.
+ * gas/loongarch/macro_op.s: Likewise.
+ * gas/loongarch/nop.d: Likewise.
+ * gas/loongarch/nop.s: Likewise.
+ * gas/loongarch/privilege_op.d: Likewise.
+ * gas/loongarch/privilege_op.s: Likewise.
+ * gas/loongarch/syscall.d: Likewise.
+ * gas/loongarch/syscall.s: Likewise.
+ * lib/gas-defs.exp: Add LoongArch.
+
+2021-10-24 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch binutils support
+ 2021-10-22 Chenghua Xu <xuchenghua@loongson.cn>
+ Zhensong Liu <liuzhensong@loongson.cn>
+ Weinan Liu <liuweinan@loongson.cn>
+ binutils/
+ * NEWS: Mention LoongArch support.
+ * readelf.c: Add LoongArch.
+ * testsuite/binutils-all/objdump.exp: Add LoongArch.
+
+2021-10-24 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch opcodes support
+ 2021-10-22 Chenghua Xu <xuchenghua@loongson.cn>
+ Zhensong Liu <liuzhensong@loongson.cn>
+ Weinan Liu <liuweinan@loongson.cn>
+
+ include/
+ * opcode/loongarch.h: New.
+ * dis-asm.h: Declare print_loongarch_disassembler_options.
+ opcodes/
+ * Makefile.am: Add LoongArch.
+ * configure.ac: Likewise.
+ * disassemble.c: Likewise.
+ * disassemble.h: Declare print_insn_loongarch.
+ * loongarch-coder.c: New.
+ * loongarch-dis.c: New.
+ * loongarch-opc.c: New.
+ * Makefile.in: Regenerate.
+ * configure: Regenerate.
+ * po/POTFILES.in: Regenerate.
+
+2021-10-24 liuzhensong <liuzhensong@loongson.cn>
+
+ LoongArch bfd support
+ 2021-10-22 Chenghua Xu <xuchenghua@loongson.cn>
+ Zhensong Liu <liuzhensong@loongson.cn>
+ Weinan Liu <liuweinan@loongson.cn>
+ bfd/
+ * Makefile.am: Add LoongArch.
+ * archures.c: Likewise.
+ * config.bfd: Likewise.
+ * configure.ac: Likewise.
+ * cpu-loongarch.c: New.
+ * elf-bfd.h: Add LoongArch.
+ * elf.c: Add LoongArch elfcore_grok_xxx.
+ * elfnn-loongarch.c: New.
+ * elfxx-loongarch.c: New.
+ * elfxx-loongarch.h: New.
+ * reloc.c: Add LoongArch BFD RELOC ENUM.
+ * targets.c: Add LoongArch target.
+ * Makefile.in: Regenerate.
+ * bfd-in2.h: Regenerate.
+ * configure: Regenerate.
+ * libbfd.h: Regenerate.
+ * po/BLD-POTFILES.in: Regenerate.
+ * po/SRC-POTFILES.in: Regenerate.
+
+ include/
+ * elf/common.h: Add NT_LARCH_{CPUCFG,CSR,LSX,LASX}.
+ * elf/loongarch.h: New.
+
+2021-10-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-22 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Add -muse-unaligned-vector-move to assembler
+ Unaligned load/store instructions on aligned memory or register are as
+ fast as aligned load/store instructions on modern Intel processors. Add
+ a command-line option, -muse-unaligned-vector-move, to x86 assembler to
+ encode encode aligned vector load/store instructions as unaligned
+ vector load/store instructions.
+
+ * NEWS: Mention -muse-unaligned-vector-move.
+ * config/tc-i386.c (use_unaligned_vector_move): New.
+ (encode_with_unaligned_vector_move): Likewise.
+ (md_assemble): Call encode_with_unaligned_vector_move for
+ -muse-unaligned-vector-move.
+ (OPTION_MUSE_UNALIGNED_VECTOR_MOVE): New.
+ (md_longopts): Add -muse-unaligned-vector-move.
+ (md_parse_option): Handle -muse-unaligned-vector-move.
+ (md_show_usage): Add -muse-unaligned-vector-move.
+ * doc/c-i386.texi: Document -muse-unaligned-vector-move.
+ * testsuite/gas/i386/i386.exp: Run unaligned-vector-move and
+ x86-64-unaligned-vector-move.
+ * testsuite/gas/i386/unaligned-vector-move.d: New file.
+ * testsuite/gas/i386/unaligned-vector-move.s: Likewise.
+ * testsuite/gas/i386/x86-64-unaligned-vector-move.d: Likewise.
+
+2021-10-22 Tom Tromey <tromey@adacore.com>
+
+ Fix 'uninstall' target
+ This adds some missing code to the 'uninstall' targets in gdb and
+ gdbserver. It also changes gdb's uninstall target so that it no
+ longer tries to remove any man page -- this is already done (and more
+ correctly) by doc/Makefile.in.
+
+ I tested this with 'make install' followed by 'make uninstall', then
+ examining the install tree for regular files. Only the 'dir' file
+ remains, but this appears to just be how 'install-info' is intended to
+ work.
+
+2021-10-22 Tom Tromey <tromey@adacore.com>
+
+ Remove unused variables from gdbserver's Makefile
+ This removes a number of unused variables from gdbserver's Makefile.
+ I found these while working on the subsequent patches, and figured it
+ would be cleaner to have a separate patch for the deletions.
+
+2021-10-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.threads/linux-dp.exp
+ On openSUSE Tumbleweed with glibc-debuginfo installed I get:
+ ...
+ (gdb) PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print
+ where^M
+ #0 print_philosopher (n=3, left=33 '!', right=33 '!') at linux-dp.c:105^M
+ #1 0x0000000000401628 in philosopher (data=0x40537c) at linux-dp.c:148^M
+ #2 0x00007ffff7d56b37 in start_thread (arg=<optimized out>) \
+ at pthread_create.c:435^M
+ #3 0x00007ffff7ddb640 in clone3 () \
+ at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81^M
+ (gdb) PASS: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit
+ ...
+ while without debuginfo installed I get instead:
+ ...
+ (gdb) PASS: gdb.threads/linux-dp.exp: continue to breakpoint: thread 5's print
+ where^M
+ #0 print_philosopher (n=3, left=33 '!', right=33 '!') at linux-dp.c:105^M
+ #1 0x0000000000401628 in philosopher (data=0x40537c) at linux-dp.c:148^M
+ #2 0x00007ffff7d56b37 in start_thread () from /lib64/libc.so.6^M
+ #3 0x00007ffff7ddb640 in clone3 () from /lib64/libc.so.6^M
+ (gdb) FAIL: gdb.threads/linux-dp.exp: first thread-specific breakpoint hit
+ ...
+
+ The problem is that the regexp used:
+ ...
+ "\(from .*libpthread\|at pthread_create\|in pthread_create\)"
+ ...
+ expects the 'from' part to match libpthread, but in glibc 2.34 libpthread has
+ been merged into libc.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+2021-10-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAILs in gdb.mi/mi-breakpoint-changed.exp
+ Since commit e36788d1354 "[gdb/testsuite] Fix handling of nr_args < 3 in
+ mi_gdb_test" we run into:
+ ...
+ PASS: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: mi runto main
+ Expecting: ^(-break-insert -f pendfunc1[^M
+ ]+)?((&.*)*.*~"Breakpoint 2 at.*\\n".*=breakpoint-created,\
+ bkpt=\{number="2",type="breakpoint".*\}.*\n\^done[^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ -break-insert -f pendfunc1^M
+ ^done,bkpt={number="2",type="breakpoint",disp="keep",enabled="y",\
+ addr="0x00007ffff7bd559e",func="pendfunc1",\
+ file="gdb/testsuite/gdb.mi/pendshr1.c",\
+ fullname="gdb/testsuite/gdb.mi/pendshr1.c",line="21",thread-groups=["i1"],\
+ times="0",original-location="pendfunc1"}^M
+ (gdb) ^M
+ FAIL: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: \
+ -break-insert -f pendfunc1 (unexpected output)
+ ...
+
+ The regexp expects a breakpoint-created event, but that's actually suppressed
+ by the command:
+ ...
+ DEF_MI_CMD_MI_1 ("break-insert", mi_cmd_break_insert,
+ &mi_suppress_notification.breakpoint),
+ ...
+
+ Fix this by updating the regexp.
+
+ Likewise for the following:
+ ...
+ PASS: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: \
+ -break-insert -f pendfunc1
+ Expecting: ^(-break-enable count 1 2[^M
+ ]+)?(=breakpoint-modified,\
+ bkpt=\{number="2",type="breakpoint",disp="dis",enabled="y".*\}.*\n\^done[^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ -break-enable count 1 2^M
+ ^done^M
+ (gdb) ^M
+ FAIL: gdb.mi/mi-breakpoint-changed.exp: test_auto_disable: \
+ -break-enable count 1 2 (unexpected out\
+ put)
+ ...
+
+ Tested on x86_64-linux.
+
+2021-10-22 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: move gdb.Membuf support into a new file
+ In a future commit I'm going to be creating gdb.Membuf objects from a
+ new file within gdb/python/py*.c. Currently all gdb.Membuf objects
+ are created directly within infpy_read_memory (as a result of calling
+ gdb.Inferior.read_memory()).
+
+ Initially I split out the Membuf creation code into a new function,
+ and left the new function in gdb/python/py-inferior.c, however, it
+ felt a little random that the Membuf creation code should live with
+ the inferior handling code.
+
+ So, then I moved all of the Membuf related code out into a new file,
+ gdb/python/py-membuf.c, the interface is gdbpy_buffer_to_membuf, which
+ wraps an array of bytes into a gdb.Membuf object.
+
+ Most of the code is moved directly from py-inferior.c with only minor
+ tweaks to layout and replacing NULL with nullptr, hence, I've left the
+ copyright date on py-membuf.c as 2009-2021 to match py-inferior.c.
+
+ Currently, the only user of this code is still py-inferior.c, but in
+ later commits this will change.
+
+ There should be no user visible changes after this commit.
+
+2021-10-22 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: new gdb.architecture_names function
+ Add a new function to the Python API, gdb.architecture_names(). This
+ function returns a list containing all of the supported architecture
+ names within the current build of GDB.
+
+ The values returned in this list are all of the possible values that
+ can be returned from gdb.Architecture.name().
+
+2021-10-22 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: make disassembler fprintf callback a static member function
+ The disassemble_info structure has four callbacks, we have three of
+ them as static member functions within gdb_disassembler, the fourth is
+ just a global static function.
+
+ However, this fourth callback, is still only used from the
+ disassemble_info struct, so there's no real reason for its special
+ handling.
+
+ This commit makes fprintf_disasm a static method within
+ gdb_disassembler.
+
+ There should be no user visible changes after this commit.
+
+2021-10-22 Lewis Revill <lewis.revill@embecosm.com>
+
+ RISC-V: Added ld testcase for pcgp relaxation.
+ Consider the the pcgp-relax-02 testcase,
+
+ .text
+ .globl _start
+ _start:
+ .L1: auipc a0, %pcrel_hi(data_a)
+ .L2: auipc a1, %pcrel_hi(data_b)
+ addi a0, a0, %pcrel_lo(.L1)
+ addi a1, a1, %pcrel_lo(.L2)
+
+ .data
+ .word 0x0
+ .globl data_a
+ data_a:
+ .word 0x1
+
+ .section .rodata
+ .globl data_b
+ data_b:
+ .word 0x2
+
+ If the first auipc is deleted, but we are still building the pcgp
+ table (connect the high and low pcrel relocations), then there is
+ an aliasing issue that we need some way to disambiguate which of
+ the two symbols we are targeting. Therefore, Palmer thought of a
+ way to use R_RISCV_DELETE to split this into two phases, so we
+ could resolve the addresses before creating the ambiguities.
+
+ This patch just add the ld testcase for the above case, in case we
+ have changed something but break this.
+
+ ld/
+ * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Renamed pcgp-relax
+ to pcgp-relax-01, and added pcgp-relax-02.
+ * testsuite/ld-riscv-elf/pcgp-relax-01.d: Renmaed from pcgp-relax.
+ * testsuite/ld-riscv-elf/pcgp-relax-01.s: Likewise.
+ * testsuite/ld-riscv-elf/pcgp-relax-02.d: New testcase.
+ * testsuite/ld-riscv-elf/pcgp-relax-02.s: Likewise.
+
+2021-10-22 Lewis Revill <lewis.revill@embecosm.com>
+
+ RISC-V: Don't separate pcgp relaxation to another relax pass.
+ Commit abd20cb637008da9d32018b4b03973e119388a0a and
+ ebdcad3fddf6ec21f6d4dcc702379a12718cf0c4 introduced additional
+ complexity into the paths run by the RISC-V relaxation pass in order to
+ resolve the issue of accurately keeping track of pcrel_hi and pcrel_lo
+ pairs. The first commit split up relaxation of these relocs into a pass
+ which occurred after other relaxations in order to prevent the situation
+ where bytes were deleted in between a pcrel_lo/pcrel_hi pair, inhibiting
+ our ability to find the corresponding pcrel_hi relocation from the
+ address attached to the pcrel_lo.
+
+ Since the relaxation was split into two passes the 'again' parameter
+ could not be used to perform the entire relaxation process again and so
+ the second commit added a way to restart ldelf_map_segments, thus
+ starting the whole process again.
+
+ Unfortunately this process could not account for the fact that we were
+ not finished with the relaxation process so in some cases - such as the
+ case where code would not fit in a memory region before the
+ R_RISCV_ALIGN relocation was relaxed - sanity checks in generic code
+ would fail.
+
+ This patch fixes all three of these concerns by reverting back to a
+ system of having only one target relax pass but updating entries in the
+ table of pcrel_hi/pcrel_lo relocs every time any bytes are deleted. Thus
+ we can keep track of the pairs accurately, and we can use the 'again'
+ parameter to restart the entire target relax pass, behaving in the way
+ that generic code expects. Unfortunately we must still have an
+ additional pass to delay deleting AUIPC bytes to avoid ambiguity between
+ pcrel_hi relocs stored in the table after deletion. This pass can only
+ be run once so we may potentially miss out on relaxation opportunities
+ but this is likely to be rare.
+
+ https://sourceware.org/bugzilla/show_bug.cgi?id=28410
+
+ bfd/
+ * elfnn-riscv.c (riscv_elf_link_hash_table): Removed restart_relax.
+ (riscv_elf_link_hash_table_create): Updated.
+ (riscv_relax_delete_bytes): Moved after the riscv_update_pcgp_relocs.
+ Update the pcgp_relocs table whenever bytes are deleted.
+ (riscv_update_pcgp_relocs): Add function to update the section
+ offset of pcrel_hi and pcrel_lo, and also update the symbol value
+ of pcrel_hi.
+ (_bfd_riscv_relax_call): Need to update the pcgp_relocs table
+ when deleting codes.
+ (_bfd_riscv_relax_lui): Likewise.
+ (_bfd_riscv_relax_tls_le): Likewise.
+ (_bfd_riscv_relax_align): Once we've handled an R_RISCV_ALIGN,
+ we can't relax anything else, so set the sec->sec_flg0 to true.
+ Besides, we don't need to update the pcgp_relocs table at this
+ stage, so just pass NULL pointer as the pcgp_relocs table for
+ riscv_relax_delete_bytes.
+ (_bfd_riscv_relax_section): Use only one pass for all target
+ relaxations.
+ (_bfd_riscv_relax_delete): Likewise, we don't need to update
+ the pcgp_relocs table at this stage, and don't need to set
+ the `again' since restart_relax mechanism is abandoned.
+ (bfd_elfNN_riscv_restart_relax_sections): Removed.
+ (_bfd_riscv_relax_section): Updated.
+ * elfxx-riscv.h (bfd_elf32_riscv_restart_relax_sections): Removed.
+ (bfd_elf64_riscv_restart_relax_sections): Likewise.
+ ld/
+ * emultempl/riscvelf.em: Revert restart_relax changes and set
+ relax_pass to 3.
+ * testsuite/ld-riscv-elf/align-small-region.d: New testcase.
+ * testsuite/ld-riscv-elf/align-small-region.ld: Likewise.
+ * testsuite/ld-riscv-elf/align-small-region.s: Likewise.
+ * testsuite/ld-riscv-elf/restart-relax.d: Removed sine the
+ restart_relax mechanism is abandoned.
+ * testsuite/ld-riscv-elf/restart-relax.s: Likewise.
+ * testsuite/ld-riscv-elf/ld-riscv-elf.exp: Updated.
+
+2021-10-22 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix remote-sim.c build
+ Commit 183be222907a ("gdb, gdbserver: make target_waitstatus safe")
+ broke the remote-sim.c build. In fact, it does some wrong changes,
+ result of a bad sed invocation.
+
+ Fix it by adjusting the code to the new target_waitstatus API.
+
+ Change-Id: I3236ff7ef7681fc29215f68be210ff4263760e91
+
+2021-10-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-21 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb, gdbserver: make target_waitstatus safe
+ I stumbled on a bug caused by the fact that a code path read
+ target_waitstatus::value::sig (expecting it to contain a gdb_signal
+ value) while target_waitstatus::kind was TARGET_WAITKIND_FORKED. This
+ meant that the active union field was in fact
+ target_waitstatus::value::related_pid, and contained a ptid. The read
+ signal value was therefore garbage, and that caused GDB to crash soon
+ after. Or, since that GDB was built with ubsan, this nice error
+ message:
+
+ /home/simark/src/binutils-gdb/gdb/linux-nat.c:1271:12: runtime error: load of value 2686365, which is not a valid value for type 'gdb_signal'
+
+ Despite being a large-ish change, I think it would be nice to make
+ target_waitstatus safe against that kind of bug. As already done
+ elsewhere (e.g. dynamic_prop), validate that the type of value read from
+ the union matches what is supposed to be the active field.
+
+ - Make the kind and value of target_waitstatus private.
+ - Make the kind initialized to TARGET_WAITKIND_IGNORE on
+ target_waitstatus construction. This is what most users appear to do
+ explicitly.
+ - Add setters, one for each kind. Each setter takes as a parameter the
+ data associated to that kind, if any. This makes it impossible to
+ forget to attach the associated data.
+ - Add getters, one for each associated data type. Each getter
+ validates that the data type fetched by the user matches the wait
+ status kind.
+ - Change "integer" to "exit_status", "related_pid" to "child_ptid",
+ just because that's more precise terminology.
+ - Fix all users.
+
+ That last point is semi-mechanical. There are a lot of obvious changes,
+ but some less obvious ones. For example, it's not possible to set the
+ kind at some point and the associated data later, as some users did.
+ But in any case, the intent of the code should not change in this patch.
+
+ This was tested on x86-64 Linux (unix, native-gdbserver and
+ native-extended-gdbserver boards). It was built-tested on x86-64
+ FreeBSD, NetBSD, MinGW and macOS. The rest of the changes to native
+ files was done as a best effort. If I forgot any place to update in
+ these files, it should be easy to fix (unless the change happens to
+ reveal an actual bug).
+
+ Change-Id: I0ae967df1ff6e28de78abbe3ac9b4b2ff4ad03b7
+
+2021-10-21 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver: initialize the members of lwp_info in-class
+ Add a constructor to initialize the waitstatus members. Initialize the
+ others in the class directly.
+
+ Change-Id: I10f885eb33adfae86e3c97b1e135335b540d7442
+
+2021-10-21 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbserver: make thread_info non-POD
+ Add a constructor and a destructor. The constructor takes care of the
+ initialization that happened in add_thread, while the destructor takes
+ care of the freeing that happened in free_one_thread. This is needed to
+ make target_waitstatus non-POD, as thread_info contains a member of that
+ type.
+
+ Change-Id: I1db321b4de9dd233ede0d5c101950f1d6f1d13b7
+
+2021-10-21 Andrew Pinski <apinski@marvell.com>
+
+ Fix ARMv8.4 for hw watchpoint and breakpoint
+ Just like my previoius patch for ARMv8.1 and v8.2 (49ecef2a7da2ee9df4),
+ this adds ARMv8.4 debug arch as being compatible for hw watchpoint
+ and breakpoints.
+
+ Refactor code slightly in nat/aarch64-linux-hw-point.c (aarch64_linux_get_debug_reg_capacity)
+ Since the two locations which check the debug arch are the same code currently, it is
+ a good idea to factor it out to a new function and just use that function from
+ aarch64_linux_get_debug_reg_capacity. This is also the first step to support
+ ARMv8.4 debug arch.
+
+2021-10-21 Carl Love <cel@us.ibm.com>
+
+ Fixes for gdb.mi/mi-break.exp
+ Update the expected pattern for two of the tests.
+
+ Matching pattern \" doesn't work. Use .* to match the \* pattern.
+
+2021-10-21 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tui] Fix breakpoint display functionality
+ In commit 81e6b8eb208 "Make tui-winsource not use breakpoint_chain", a loop
+ body was transformed into a lambda function body:
+ ...
+ - for (bp = breakpoint_chain;
+ - bp != NULL;
+ - bp = bp->next)
+ + iterate_over_breakpoints ([&] (breakpoint *bp) -> bool
+ ...
+ and consequently:
+ - a continue was replaced by a return, and
+ - a final return was added.
+
+ Then in commit 240edef62f0 "gdb: remove iterate_over_breakpoints function", we
+ transformed back to a loop body:
+ ...
+ - iterate_over_breakpoints ([&] (breakpoint *bp) -> bool
+ + for (breakpoint *bp : all_breakpoints ())
+ ...
+ but without reverting the changes that introduced the two returns.
+
+ Consequently, breakpoints no longer show up in the tui source window.
+
+ Fix this by reverting the changes that introduced the two returns.
+
+ Build on x86_64-linux, tested with all .exp test-cases that contain
+ tuiterm_env.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28483
+
+2021-10-21 Carl Love <cel@us.ibm.com>
+
+ Fix test step-and-next-inline.cc
+ The test expect the runto_main to stop at the first line of the function.
+ Depending on the optimization level, gdb may stop in the prolog or after
+ the prolog at the first line. To ensure the test stops at the first line
+ of main, have it explicitly stop at a break point on the first line of the
+ function.
+
+ On PowerPC, the test passes when compiled with no optimization but fails
+ with all levels of optimization due to gdb stopping in the prolog.
+
+2021-10-21 Tom Tromey <tromey@adacore.com>
+
+ Fix latent Ada bug when accessing field offsets
+ The "add accessors for field (and call site) location" patch caused a
+ gdb crash when running the internal AdaCore testsuite. This turned
+ out to be a latent bug in ada-lang.c.
+
+ The immediate cause of the bug is that find_struct_field
+ unconditionally uses TYPE_FIELD_BITPOS. This causes an assert for a
+ dynamic type.
+
+ This patch fixes the problem by doing two things. First, it changes
+ find_struct_field to use a dummy value for the field offset in the
+ situation where the offset is not actually needed by the caller. This
+ works because the offset isn't used in any other way -- only as a
+ result.
+
+ Second, this patch assures that calls to find_struct_field use a
+ resolved type when the offset is needed. For
+ value_tag_from_contents_and_address, this is done by resolving the
+ type explicitly. In ada_value_struct_elt, this is done by passing
+ nullptr for the out parameters when they are not needed (the second
+ call in this function already uses a resolved type).
+
+ Note that, while we believe the parent field probably can't occur at a
+ variable offset, the patch still updates this code path, just in case.
+
+ I've updated an existing test case to reproduce the crash.
+ I'm checking this in.
+
+2021-10-21 Alan Modra <amodra@gmail.com>
+
+ -Waddress warning in ldelf.c
+ ldelf.c: In function 'ldelf_after_open':
+ ldelf.c:1049:43: warning: the comparison will always evaluate as 'true' for the address of 'elf_header' will never be NULL [-Waddress]
+ 1049 | && elf_tdata (abfd)->elf_header != NULL
+ | ^~
+ In file included from ldelf.c:37:
+ ../bfd/elf-bfd.h:1957:21: note: 'elf_header' declared here
+ 1957 | Elf_Internal_Ehdr elf_header[1]; /* Actual data, but ref like ptr */
+
+ * ldelf.c (ldelf_after_open): Remove useless elf_header test.
+
+2021-10-21 Alan Modra <amodra@gmail.com>
+
+ Avoid -Waddress warnings in readelf
+ Mainline gcc:
+ readelf.c: In function 'find_section':
+ readelf.c:349:8: error: the comparison will always evaluate as 'true' for the pointer operand in 'filedata->section_headers + (sizetype)((long unsigned int)i * 80)' must not be NULL [-Werror=address]
+ 349 | ((X) != NULL \
+ | ^~
+ readelf.c:761:9: note: in expansion of macro 'SECTION_NAME_VALID'
+ 761 | if (SECTION_NAME_VALID (filedata->section_headers + i)
+ | ^~~~~~~~~~~~~~~~~~
+
+ This will likely be fixed in gcc, but inline functions are nicer than
+ macros.
+
+ * readelf.c (SECTION_NAME, SECTION_NAME_VALID),
+ (SECTION_NAME_PRINT, VALID_SYMBOL_NAME, VALID_DYNAMIC_NAME),
+ (GET_DYNAMIC_NAME): Delete. Replace with..
+ (section_name, section_name_valid, section_name_print),
+ (valid_symbol_name, valid_dynamic_name, get_dynamic_name): ..these
+ new inline functions. Update use throughout file.
+
+2021-10-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-20 Alan Modra <amodra@gmail.com>
+
+ PR28417, std::string no longer allows accepting nullptr_t
+ PR 28417
+ * incremental.cc (Sized_relobj_incr::do_section_name): Avoid
+ std:string undefined behaviour.
+ * options.h (Search_directory::Search_directory): Likewise.
+
+2021-10-20 Alan Modra <amodra@gmail.com>
+
+ Re: PR27625, powerpc64 gold __tls_get_addr calls
+ My previous PR27625 patch had a problem or two. For one, the error
+ "__tls_get_addr call lacks marker reloc" on processing some calls
+ before hitting a call without markers typically isn't seen. Instead a
+ gold assertion fails. Either way it would be a hard error, which
+ triggers on a file contained in libphobos.a when running the gcc
+ testsuite. A warning isn't even appropriate since the call involved
+ is one built by hand without any of the arg setup relocations that
+ might result in linker optimisation.
+
+ So this patch reverts most of commit 0af4fcc25dd5, instead entirely
+ ignoring the problem of mis-optimising old-style __tls_get_addr calls
+ without marker relocs. We can't handle them gracefully without
+ another pass over relocations before decisions are made about GOT
+ entries in Scan::global or Scan::local. That seems too costly, just
+ to link object files from 2009. What's more, there doesn't seem to be
+ any way to allow the libphobos explicit __tls_get_addr call, but not
+ old TLS sequences without marker relocs. Examining instructions
+ before the __tls_get_addr call is out of the question: program flow
+ might reach the call via a branch. Putting an R_PPC64_TLSGD marker
+ with zero sym on the call might be a solution, but current linkers
+ will then merrily optimise away the call!
+
+ PR gold/27625
+ * powerpc.cc (Powerpc_relobj): Delete no_tls_marker_, tls_marker_,
+ and tls_opt_error_ variables and accessors. Remove all uses.
+
+2021-10-20 Tom Tromey <tom@tromey.com>
+
+ Use std::string in print_one_catch_syscall
+ This changes print_one_catch_syscall to use std::string, removing a
+ bit of manual memory management.
+
+ Use unique_xmalloc_ptr in breakpoint
+ This changes struct breakpoint to use unique_xmalloc_ptr in a couple
+ of spots, removing a bit of manual memory management.
+
+ Use unique_xmalloc_ptr in bp_location
+ This changes struct bp_location to use a unique_xmalloc_ptr, removing
+ a bit of manual memory management.
+
+ Use unique_xmalloc_ptr in watchpoint
+ This changes struct watchpoint to use unique_xmalloc_ptr in a couple
+ of places, removing a bit of manual memory management.
+
+ Use unique_xmalloc_ptr in exec_catchpoint
+ This changes struct exec_catchpoint to use a unique_xmalloc_ptr,
+ removing a bit of manual memory management.
+
+ Use unique_xmalloc_ptr in solib_catchpoint
+ This changes struct solib_catchpoint to use a unique_xmalloc_ptr,
+ removing a bit of manual memory management.
+
+2021-10-20 Christian Biesinger <cbiesinger@google.com>
+
+ Make c-exp.y work with Bison 3.8+
+ When using Bison 3.8, we get this error:
+
+ ../../gdb/c-exp.y:3455:1: error: 'void c_print_token(FILE*, int, YYSTYPE)' defined but not used [-Werror=unused-function]
+
+ That's because bison 3.8 removed YYPRINT support:
+ https://savannah.gnu.org/forum/forum.php?forum_id=10047
+
+ Accordingly, this patch only defines that function for Bison < 3.8.
+
+ Change-Id: I3cbf2f317630bb72810b00f2d9b2c4b99fa812ad
+
+2021-10-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-19 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Reimplement gdb.gdb/python-interrupts.exp as unittest
+ The test-case gdb.gdb/python-interrupts.exp:
+ - runs to captured_command_loop
+ - sets a breakpoint at set_active_ext_lang
+ - calls a python command
+ - verifies the command triggers the breakpoint
+ - sends a signal and verifies the result
+
+ The test-case is fragile, because (f.i. with -flto) it cannot be guaranteed
+ that captured_command_loop and set_active_ext_lang are available for setting
+ breakpoints.
+
+ Reimplement the test-case as unittest, using:
+ - execute_command_to_string to capture the output
+ - try/catch to catch the "Error while executing Python code" exception
+ - a new hook selftests::hook_set_active_ext_lang to raise the signal
+
+ Tested on x86_64-linux.
+
+2021-10-19 Tom Tromey <tromey@adacore.com>
+
+ Check index in type::field
+ This changes gdb to check the index that is passed to type::field.
+ This caught one bug in the Ada code when running the test suite
+ (actually I found the bug first, then realized that the check would
+ have helped), so this patch fixes that as well.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-10-19 Tom Tromey <tromey@adacore.com>
+
+ Fix Rust lex selftest when using libiconv
+ The Rust lex selftest fails on our Windows build. I tracked this down
+ to a use of UTF-32 as a parameter to convert_between_encodings. Here,
+ iconv_open succeeds, but the actual conversion of a tab character
+ fails with EILSEQ. I suspect that "UTF-32" is being interpreted as
+ big-endian, as changing the call to use "UTF-32LE" makes it work.
+ This patch implements this fix.
+
+2021-10-19 Tom Tromey <tromey@adacore.com>
+
+ Fix format_pieces selftest on Windows
+ The format_pieces selftest currently fails on Windows hosts.
+
+ The selftest doesn't handle the "%ll" -> "%I64" rewrite that the
+ formatter may perform, but also gdbsupport was missing a configure
+ check for PRINTF_HAS_LONG_LONG. This patch fixes both issues.
+
+2021-10-19 Tom Tromey <tromey@adacore.com>
+
+ Fix bug in dynamic type resolution
+ A customer-reported problem led us to a bug in dynamic type
+ resolution. resolve_dynamic_struct will recursively call
+ resolve_dynamic_type_internal, passing it the sub-object for the
+ particular field being resolved. While it offsets the address here,
+ it does not also offset the "valaddr" -- the array of bytes describing
+ the memory.
+
+ This patch fixes the bug, by offsetting both. A test case is included
+ that can be used to reproduce the bug.
+
+2021-10-19 Tom Tromey <tromey@adacore.com>
+
+ Always use std::function for self-tests
+ Now that there is a register_test variant that accepts std::function,
+ it seems to me that the 'selftest' struct and accompanying code is
+ obsolete -- simply always using std::function is simpler. This patch
+ implements this idea.
+
+2021-10-19 Daniel Black <daniel@mariadb.org>
+
+ Fix PR gdb/17917 Lookup build-id in remote binaries
+ GDB doesn't support loading debug files using build-id from remote
+ target filesystems.
+
+ This is the case when gdbserver attached to a process and a gdb target
+ remote occurs over tcp.
+
+ With this change we make build-id lookups possible:
+
+ (gdb) show debug-file-directory
+ The directory where separate debug symbols are searched for is "/usr/local/lib/debug".
+ (gdb) set debug-file-directory /usr/lib/debug
+ (gdb) show sysroot
+ The current system root is "target:".
+ (gdb) target extended-remote :46615
+ Remote debugging using :46615
+ warning: Can not parse XML target description; XML support was disabled at compile time
+ Reading /usr/sbin/mariadbd from remote target...
+ warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
+ Reading /usr/sbin/mariadbd from remote target...
+ Reading symbols from target:/usr/sbin/mariadbd...
+ Reading /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target...
+ Reading /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target...
+ Reading symbols from target:/usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug...
+ Reading /lib/x86_64-linux-gnu/libpcre2-8.so.0 from remote target...
+ ...
+
+ Before this change, the lookups would have been (GNU gdb (GDB) Fedora 10.2-3.fc34):
+
+ (gdb) target extended-remote :46615
+ Remote debugging using :46615
+ Reading /usr/sbin/mariadbd from remote target...
+ warning: File transfers from remote targets can be slow. Use "set sysroot" to access files locally instead.
+ Reading /usr/sbin/mariadbd from remote target...
+ Reading symbols from target:/usr/sbin/mariadbd...
+ Reading /usr/sbin/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target...
+ Reading /usr/sbin/.debug/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target...
+ Reading /usr/lib/debug//usr/sbin/0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target...
+ Reading /usr/lib/debug/usr/sbin//0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target...
+ Reading target:/usr/lib/debug/usr/sbin//0a874dca5a7ff831396ddc0785d939a192efe3.debug from remote target...
+ Missing separate debuginfo for target:/usr/sbin/mariadbd
+ Try: dnf --enablerepo='*debug*' install /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug
+ (No debugging symbols found in target:/usr/sbin/mariadbd)
+
+ Observe it didn't look for
+ /usr/lib/debug/.build-id/6e/0a874dca5a7ff831396ddc0785d939a192efe3.debug
+ on the remote target (where it is) and expected them to be installed
+ locally.
+
+ As a minor optimization, this also changes the build-id lookup such that
+ if sysroot is empty, no second lookup of the same location is performed.
+
+ Change-Id: I5181696d271c325a25a0805a8defb8ab7f9b3f55
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17917
+
+2021-10-19 Nick Clifton <nickc@redhat.com>
+
+ Fix a potential illegal memory access when testing for a special LTO symbol name.
+ bfd * linker.c (_bfd_generic_link_add_one_symbol): Test for a NULL
+ name before checking to see if the symbol is __gnu_lto_slim.
+ * archive.c (_bfd_compute_and_write_armap): Likewise.
+ binutils
+ * nm.c (filter_symbols): Test for a NULL name before checking to
+ see if the symbol is __gnu_lto_slim.
+ * objcopy.c (filter_symbols): Likewise.
+
+2021-10-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-18 Weimin Pan <weimin.pan@oracle.com>
+
+ CTF: incorrect underlying type setting for enumeration types
+ A bug was filed against the incorrect underlying type setting for
+ an enumeration type, which was caused by a copy and paste error.
+ This patch fixes the problem by setting it by calling objfile_int_type,
+ which was originally dwarf2_per_objfile::int_type, with ctf_type_size bits.
+ Also add error checking on ctf_func_type_info call.
+
+2021-10-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-17 Alan Modra <amodra@gmail.com>
+
+ PR28459, readelf issues bogus warning
+ I'd missed the fact that the .debug_rnglists dump doesn't exactly
+ display the contents of the section. Instead readelf rummages through
+ .debug_info looking for DW_AT_ranges entries, then displays the
+ entries in .debug_rnglists pointed at, sorted. A simpler dump of the
+ actual section contents might be more useful and robust, but it was
+ likely done that way to detect overlap and holes.
+
+ Anyway, the headers in .debug_rnglists besides the first are ignored,
+ and limiting to the unit length of the first header fails if there is
+ more than one unit.
+
+ PR 28459
+ * dwarf.c (display_debug_ranges): Don't constrain data to length
+ in header.
+
+2021-10-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-16 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Adjust pr28158.rd for glibc 2.34
+ Adjust pr28158.rd for glibc 2.34:
+
+ $ readelf -W --dyn-syms tmpdir/pr28158
+
+ Symbol table '.dynsym' contains 4 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.34 (2)
+ 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 3: 000000000040401c 4 OBJECT GLOBAL DEFAULT 23 foo@VERS_2.0 (3)
+ $
+
+ vs older glibc:
+
+ $ readelf -W --dyn-syms tmpdir/pr28158
+
+ Symbol table '.dynsym' contains 4 entries:
+ Num: Value Size Type Bind Vis Ndx Name
+ 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
+ 1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (3)
+ 2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
+ 3: 000000000040401c 4 OBJECT GLOBAL DEFAULT 23 foo@VERS_2.0 (2)
+
+ $
+
+ * testsuite/ld-elf/pr28158.rd: Adjusted for glibc 2.34.
+
+2021-10-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-14 Carl Love <cel@us.ibm.com>
+
+ Powerpc: Add support for openat and fstatat syscalls
+ [gdb] update ppc-linux-tdep.c
+
+ Add argument to ppc_canonicalize_syscall for the wordsize.
+ Add syscall entries for the openat and fstatat system calls.
+
+2021-10-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add .debug_loc support in dwarf assembler
+ Add .debug_loc support in the dwarf assembler, and use it in new test-case
+ gdb.dwarf2/loc-sec-offset.exp (which is based on
+ gdb.dwarf2/loclists-sec-offset.exp).
+
+ Tested on x86_64-linux.
+
+2021-10-14 Alan Modra <amodra@gmail.com>
+
+ [GOLD] Re: PowerPC64: Don't pretend to support multi-toc
+ We can't get at section->address() until everything is laid out, so
+ trying to generalise the offset calculation rather than using a value
+ of 0x8000 (the old object->toc_base_offset()) was bound to fail.
+ got->g_o_t() is a little better than a hard-coded 0x8000.
+
+ * powerpc.cc (Target_powerpc::Scan::local, global): Don't use
+ toc_pointer() here.
+
+2021-10-14 Alan Modra <amodra@gmail.com>
+
+ [GOLD] Two GOT sections for PowerPC64
+ Split .got into two piece, one with the header and entries for small
+ model got entries, the other with entries for medium/large model got
+ entries. The idea is to better support mixed pcrel/non-pcrel code
+ where non-pcrel small-model .toc entries need to be within 32k of the
+ toc pointer.
+
+ * target.h (Target::tls_offset_for_local): Add got param.
+ (Target::tls_offset_for_global): Likewise.
+ (Target::do_tls_offset_for_local, do_tls_offset_for_global): Likewise.
+ * output.h (Output_data_got::Got_entry::write): Add got param.
+ * output.cc (Output_data_got::Got_entry::write): Likewise, pass to
+ tls_offset_for_local/global calls.
+ (Output_data_got::do_write): Adjust to suit.
+ * s390.cc (Target_s390::do_tls_offset_for_local): Likewise.
+ (Target_s390::do_tls_offset_for_global): Likewise.
+ * powerpc.cc (enum Got_type): Extend with small types, move from
+ class Target_powerpc.
+ (Target_powerpc::biggot_): New.
+ (Traget_powerpc::do_tls_offset_for_local, do_tls_offset_for_global,
+ got_size, got_section, got_base_offset): Handle biggot_.
+ (Target_powerpc::do_define_standard_symbols): Adjust.
+ (Target_powerpc::make_plt_section, do_finalize_sections): Likewise.
+ (Output_data_got_powerpc::Output_data_got_powerpc): Only make
+ 64-bit header for small got section.
+ (Output_data_got_powerpc::g_o_t): Only return a result for small
+ got section.
+ (Output_data_got_powerpc::write): Only write small got section
+ header.
+ (Target_powerpc::Scan::local, global): Select small/big Got_type
+ and section to suit reloc.
+ (Target_powerpc::Relocate::relocate): Similarly.
+ (Sort_toc_sections): Rewrite.
+
+2021-10-14 Alan Modra <amodra@gmail.com>
+
+ [GOLD] PowerPC64: Don't pretend to support multi-toc
+ Code in powerpc.cc is pretending to support a per-object toc pointer
+ value, but powerpc gold has no real support for multi-toc. This patch
+ removes the pretense, tidying quite a lot in preparation for a
+ followup patch. If multi-toc is ever to be supported, don't revert
+ this patch but start by adding object parameter to toc_pointer() and
+ an object to Branch_stub_key.
+
+ * powerpc.cc (Powerpc_relobj::toc_base_offset): Delete.
+ (Target_powerpc::toc_pointer): New function. Use throughout.
+ (Target_powerpc::got_base_offset): New function. Use throughout..
+ (Output_data_got_powerpc::got_base_offset): ..in place of
+ this. Delete.
+ (Output_data_got_powerpc::Output_data_got_powerpc): Init
+ header_index_ to -1u for 64-bit, and make header here.
+ (Output_data_got_powerpc::set_final_data_size, reserve_ent): Don't
+ make 64-bit header here.
+ (Output_data_got_powerpc::g_o_t): Return toc pointer offset in
+ section for 64-bit. Use throughout.
+ (Stub_table): Remove toc_base_off_ from Branch_stub_key, and
+ object param on add_long_branch_entry and find_long_branch_entry.
+ Adjust all uses.
+
+2021-10-14 Alan Modra <amodra@gmail.com>
+
+ Re: s12z/disassembler: call memory_error_func when appropriate
+ Adjust for commit ba7c18a48457.
+
+ * testsuite/gas/s12z/truncated.d: Update expected output.
+
+2021-10-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/exp] Improve <error reading variable> message
+ When printing a variable x in a subroutine foo:
+ ...
+ subroutine foo (x)
+ integer(4) :: x (*)
+ x(3) = 1
+ end subroutine foo
+ ...
+ where x is an array with unknown bounds, we get:
+ ...
+ $ gdb -q -batch outputs/gdb.fortran/array-no-bounds/array-no-bounds \
+ -ex "break foo" \
+ -ex run \
+ -ex "print x"
+ Breakpoint 1 at 0x4005cf: file array-no-bounds.f90, line 18.
+
+ Breakpoint 1, foo (x=...) at array-no-bounds.f90:18
+ 18 x(3) = 1
+ $1 = <error reading variable>
+ ...
+
+ Improve the error message by printing the details of the error, such that we
+ have instead:
+ ...
+ $1 = <error reading variable: failed to get range bounds>
+ ...
+
+ This is a change in gdb/valprint.c, and grepping through the sources reveals
+ that this is a common pattern.
+
+ Tested on x86_64-linux.
+
+2021-10-13 Carl Love <cel@us.ibm.com>
+
+ PPC fix for stfiwx instruction (and additional stores with primary opcode of 31)
+ [gdb] Fix address being recorded in rs6000-tdep.c, ppc_process_record_op31.
+
+ The GDB record function was recording the variable addr that was passed in
+ rather than the calculated effective address (ea) by the
+ ppc_process_record_op31 function.
+
+2021-10-13 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: improve error reporting from the disassembler
+ If the libopcodes disassembler returns a negative value then this
+ indicates that the disassembly failed for some reason. In disas.c, in
+ the function gdb_disassembler::print_insn we can see how this is
+ handled; when we get a negative value back, we call the memory_error
+ function, which throws an exception.
+
+ The problem here is that the address used in the memory_error call is
+ gdb_disassembler::m_err_memaddr, which is set in
+ gdb_disassembler::dis_asm_memory_error, which is called from within
+ the libopcodes disassembler through the
+ disassembler_info::memory_error_func callback.
+
+ However, for this to work correctly, every time the libopcodes
+ disassembler returns a negative value, the libopcodes disassembler
+ must have first called the memory_error_func callback.
+
+ My first plan was to make m_err_memaddr a gdb::optional, and assert
+ that it always had a value prior to calling memory_error, however, a
+ quick look in opcodes/*-dis.c shows that there _are_ cases where a
+ negative value is returned without first calling the memory_error_func
+ callback, for example in arc-dis.c and cris-dis.c.
+
+ Now, I think that a good argument can be made that these disassemblers
+ must therefore be broken, except for the case where we can't read
+ memory, we should always be able to disassemble the memory contents to
+ _something_, even if it's just '.word 0x....'. However, I certainly
+ don't plan to go and fix all of the disassemblers.
+
+ What I do propose to do then, is make m_err_memaddr a gdb::optional,
+ but now, instead of always calling memory_error, I add a new path
+ which just calls error complaining about an unknown error. This new
+ path is only used if m_err_memaddr doesn't have a value (indicating
+ that the memory_error_func callback was not called).
+
+ To test this I just augmented one of the disassemblers to always
+ return -1, before this patch I see this:
+
+ Dump of assembler code for function main:
+ 0x000101aa <+0>: Cannot access memory at address 0x0
+
+ And after this commit I now see:
+
+ Dump of assembler code for function main:
+ 0x000101aa <+0>: unknown disassembler error (error = -1)
+
+ This doesn't really help much, but that's because there's no way to
+ report non memory errors out of the disasembler, because, it was not
+ expected that the disassembler would ever report non memory errors.
+
+2021-10-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.fortran/call-no-debug.exp with native-gdbserver
+ When running test-case gdb.fortran/call-no-debug.exp with target board
+ native-gdbserver, I run into:
+ ...
+ (gdb) PASS: gdb.fortran/call-no-debug.exp: print string_func_ (&'abcdefg', 3)
+ call (integer) string_func_ (&'abcdefg', 3)^M
+ $2 = 0^M
+ (gdb) FAIL: gdb.fortran/call-no-debug.exp: call (integer) string_func_ (&'abcdefg', 3)
+ ...
+
+ The problem is that gdb_test is used to match inferior output.
+
+ Fix this by using gdb_test_stdio.
+
+ Tested on x86_64-linux.
+
+2021-10-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Require use_gdb_stub == 0 where appropriate
+ When running with target board native-gdbserver, we run into a number of FAILs
+ due to use of the start command (and similar), which is not supported when
+ use_gdb_stub == 1.
+
+ Fix this by:
+ - requiring use_gdb_stub == 0 for the entire test-case, or
+ - guarding some tests in the test-case with use_gdb_stub == 0.
+
+ Tested on x86_64-linux.
+
+2021-10-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix test name in gdb.python/python.exp
+ When running test-case gdb.python/python.exp, we have:
+ ...
+ PASS: gdb.python/python.exp: starti via gdb.execute, not from tty
+ PASS: gdb.python/python.exp: starti via interactive input
+ ...
+
+ The two tests are instances of the same test, with different values for
+ starti command argument from_tty, so it's strange that the test names are so
+ different.
+
+ This is due to using a gdb_test nested in a gdb_test_multiple, with the inner
+ one using a different test name than the outer one. [ That could still make
+ sense if both produced passes, but that's not the case here. ]
+
+ Fix this by using $gdb_test_name, such that we have:
+ ...
+ PASS: gdb.python/python.exp: starti via gdb.execute, not from tty
+ PASS: gdb.python/python.exp: starti via gdb.execute, from tty
+ ...
+
+ Also make this more readable by using variables.
+
+ Tested on x86_64-linux.
+
+2021-10-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/batch-exit-status.exp with native-gdbserver
+ When running test-case gdb.base/batch-exit-status.exp with target board
+ native-gdbserver, I run into (added missing double quotes for clarity):
+ ...
+ builtin_spawn $build/gdb/testsuite/../../gdb/gdb -nw -nx \
+ -data-directory $build/gdb/testsuite/../data-directory \
+ -iex "set height 0" -iex "set width 0" \
+ -ex "set auto-connect-native-target off" \
+ -iex "set sysroot" -batch ""^M
+ : No such file or directory.^M
+ PASS: gdb.base/batch-exit-status.exp: 1x: \
+ No such file or directory: [lindex $result 2] == 0
+ FAIL: gdb.base/batch-exit-status.exp: 1x: \
+ No such file or directory: [lindex $result 3] == $expect_status
+ ...
+
+ As in commit a02a90c114c "[gdb/testsuite] Set sysroot earlier in
+ local-board.exp", the problem is the use of -ex for
+ "set auto-connect-native-target off", which makes that the last command to
+ be executed, and consequently determines the return status.
+
+ Fix this by using -iex instead.
+
+ Tested on x86_64-linux.
+
+2021-10-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Remove quit in gdb.arch/i386-mpx.exp
+ When running test-case gdb.arch/i386-mpx.exp with target board
+ native-gdbserver, I run into:
+ ...
+ (gdb) PASS: gdb.arch/i386-mpx.exp: verify size for bnd0
+ Remote debugging from host ::1, port 42328^M
+ quit^M
+ A debugging session is active.^M
+ ^M
+ Inferior 1 [process 19679] will be killed.^M
+ ^M
+ Quit anyway? (y or n) monitor exit^M
+ Please answer y or n.^M
+ A debugging session is active.^M
+ ^M
+ Inferior 1 [process 19679] will be killed.^M
+ ^M
+ Quit anyway? (y or n) WARNING: Timed out waiting for EOF in server after monitor exit
+ ...
+
+ The problem is that the test-case sends a quit at the end (without verifying
+ the result of this in any way):
+ ...
+ send_gdb "quit\n"
+ ...
+
+ Fix this by removing the quit.
+
+ Tested on x86_64-linux.
+
+2021-10-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-11 Srinath Parvathaneni <srinath.parvathaneni@arm.com>
+
+ [ARM] Add support for M-profile MVE extension
+ This patch adds support for the M-profile MVE extension, which includes the
+ following:
+
+ - New M-profile XML feature m-profile-mve
+ - MVE vector predication status and control register (VPR)
+ - p0 pseudo register (contained in the VPR)
+ - q0 ~ q7 pseudo vector registers
+ - New feature bits
+ - Documentation update
+
+ Pseudo register p0 is the least significant bits of vpr and can be accessed
+ as $p0 or displayed through $vpr. For more information about the register
+ layout, please refer to [1].
+
+ The q0 ~ q7 registers map back to the d0 ~ d15 registers, two d registers
+ per q register.
+
+ The register dump looks like this:
+
+ (gdb) info reg all
+ r0 0x0 0
+ r1 0x0 0
+ r2 0x0 0
+ r3 0x0 0
+ r4 0x0 0
+ r5 0x0 0
+ r6 0x0 0
+ r7 0x0 0
+ r8 0x0 0
+ r9 0x0 0
+ r10 0x0 0
+ r11 0x0 0
+ r12 0x0 0
+ sp 0x0 0x0 <__Vectors>
+ lr 0xffffffff -1
+ pc 0xd0c 0xd0c <Reset_Handler>
+ xpsr 0x1000000 16777216
+ d0 0 (raw 0x0000000000000000)
+ d1 0 (raw 0x0000000000000000)
+ d2 0 (raw 0x0000000000000000)
+ d3 0 (raw 0x0000000000000000)
+ d4 0 (raw 0x0000000000000000)
+ d5 0 (raw 0x0000000000000000)
+ d6 0 (raw 0x0000000000000000)
+ d7 0 (raw 0x0000000000000000)
+ d8 0 (raw 0x0000000000000000)
+ d9 0 (raw 0x0000000000000000)
+ d10 0 (raw 0x0000000000000000)
+ d11 0 (raw 0x0000000000000000)
+ d12 0 (raw 0x0000000000000000)
+ d13 0 (raw 0x0000000000000000)
+ d14 0 (raw 0x0000000000000000)
+ d15 0 (raw 0x0000000000000000)
+ fpscr 0x0 0
+ vpr 0x0 [ P0=0 MASK01=0 MASK23=0 ]
+ s0 0 (raw 0x00000000)
+ s1 0 (raw 0x00000000)
+ s2 0 (raw 0x00000000)
+ s3 0 (raw 0x00000000)
+ s4 0 (raw 0x00000000)
+ s5 0 (raw 0x00000000)
+ s6 0 (raw 0x00000000)
+ s7 0 (raw 0x00000000)
+ s8 0 (raw 0x00000000)
+ s9 0 (raw 0x00000000)
+ s10 0 (raw 0x00000000)
+ s11 0 (raw 0x00000000)
+ s12 0 (raw 0x00000000)
+ s13 0 (raw 0x00000000)
+ s14 0 (raw 0x00000000)
+ s15 0 (raw 0x00000000)
+ s16 0 (raw 0x00000000)
+ s17 0 (raw 0x00000000)
+ s18 0 (raw 0x00000000)
+ s19 0 (raw 0x00000000)
+ s20 0 (raw 0x00000000)
+ s21 0 (raw 0x00000000)
+ s22 0 (raw 0x00000000)
+ s23 0 (raw 0x00000000)
+ s24 0 (raw 0x00000000)
+ s25 0 (raw 0x00000000)
+ s26 0 (raw 0x00000000)
+ s27 0 (raw 0x00000000)
+ s28 0 (raw 0x00000000)
+ s29 0 (raw 0x00000000)
+ s30 0 (raw 0x00000000)
+ s31 0 (raw 0x00000000)
+ q0 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ q1 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ q2 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ q3 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ q4 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ q5 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ q6 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ q7 {u8 = {0x0 <repeats 16 times>}, u16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u32 = {0x0, 0x0, 0x0, 0x0}, u64 = {0x0, 0x0}, f32 = {0x0, 0x0, 0x0, 0x0}, f64 = {0x0, 0x0}}
+ p0 0x0 0
+
+ Built and regtested with a simulator.
+
+ [1] https://developer.arm.com/documentation/ddi0553/bn
+
+ Co-Authored-By: Luis Machado <luis.machado@linaro.org>
+
+2021-10-11 Luis Machado <luis.machado@linaro.org>
+
+ [ARM] Refactor pseudo register numbering
+ The pseudo register handling for ARM uses some hardcoded constants to
+ determine types and names. In preparation to the upcoming MVE support
+ patch (that will add another pseudo register), this patch refactors and
+ reorganizes things in order to simplify handling of future pseudo registers.
+
+ We keep track of the first pseudo register number in a group and the number of
+ pseudo registers in that group.
+
+ Right now we only have the S and Q pseudo registers.
+
+2021-10-11 Luis Machado <luis.machado@linaro.org>
+
+ [ARM] Small refactoring of arm gdbarch initialization
+ This is in preparation to MVE support, where we will define another
+ pseudo register. We need to define the pseudo register numbers *after*
+ accounting for all the registers in the XML description, so move
+ the call to tdesc_use_registers up.
+
+ If we don't do it, GDB's register count won't consider registers contained
+ in the XML but ignored by GDB, throwing the register numbering off.
+
+2021-10-11 Luis Machado <luis.machado@linaro.org>
+
+ [ARM] Refactor some constants
+ In preparation for the MVE extension patch, this one refactors some of
+ the register-related constants we have for ARM.
+
+ Basically I'm separating counting constants from numbering constants.
+
+ For example, ARM_A1_REGNUM is a numbering constant, whereas ARM_NUM_ARG_REGS
+ is a counting constant.
+
+2021-10-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAIL in gdb.mi/mi-var-child-f.exp
+ When running test-case gdb.mi/mi-var-child-f.exp on openSUSE Tumbleweed
+ (with glibc 2.34) I run into:
+ ...
+ (gdb) ^M
+ PASS: gdb.mi/mi-var-child-f.exp: mi runto prog_array
+ Expecting: ^(-var-create array \* array[^M
+ ]+)?(\^done,name="array",numchild="[0-9]+",value=".*",type=.*,has_more="0"[^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ -var-create array * array^M
+ &"Attempt to use a type name as an expression.\n"^M
+ ^error,msg="-var-create: unable to create variable object"^M
+ (gdb) ^M
+ FAIL: gdb.mi/mi-var-child-f.exp: create local variable array (unexpected output)
+ ...
+
+ The problem is that the name array is used both:
+ - as the name for a local variable
+ - as the name of a type in glibc, in file malloc/dynarray-skeleton.c, as included
+ by nss/nss_files/files-hosts.c.
+
+ Fix this by ignoring the shared lib symbols.
+
+ Likewise in a couple of other fortran tests.
+
+ Tested on x86_64-linux.
+
+2021-10-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ z80/disassembler: call memory_error_func when appropriate
+ If a call to the read_memory_func fails then we should call the
+ memory_error_func to notify the user of the disassembler of the
+ address that was a problem.
+
+ Without this GDB will report all memory errors as being at address
+ 0x0.
+
+ opcodes/ChangeLog:
+
+ * z80-dis.c (fetch_data): Call memory_error_func if the
+ read_memory_func call fails.
+
+2021-10-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ s12z/disassembler: call memory_error_func when appropriate
+ If a call to the read_memory_func fails then we should call the
+ memory_error_func to notify the user of the disassembler of the
+ address that was a problem.
+
+ Without this GDB will report all memory errors as being at address
+ 0x0.
+
+ opcodes/ChangeLog:
+
+ * s12z-disc.c (abstract_read_memory): Call memory_error_func if
+ the read_memory_func call fails.
+
+2021-10-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix double debug info in gdb.dwarf2/dw2-ref-missing-frame.exp
+ A mistake slipped in in commit a5ea23036d8 "[gdb/testsuite] Use function_range
+ in gdb.dwarf2/dw2-ref-missing-frame.exp".
+
+ Before the commit the main file was compiled with debug info, and the two
+ others not:
+ ...
+ if {[prepare_for_testing_full "failed to prepare" \
+ [list $testfile {} $srcfile {} $srcfuncfile {} \
+ $srcmainfile debug]]} {
+ ...
+
+ After the commit, all were compiled with debug info, and consequently, there
+ are two versions of debug info for $srcfuncfile. This shows up as a FAIL when
+ running the test-case with target boards readnow and cc-with-debug-names.
+
+ Fix this by using prepare_for_testing_full, as before.
+
+ Tested on x86_64-linux.
+
+ Fixes: a5ea23036d8 ("[gdb/testsuite] Use function_range in
+ gdb.dwarf2/dw2-ref-missing-frame.exp")
+
+2021-10-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use require for ensure_gdb_index
+ Replace:
+ ...
+ if { [ensure_gdb_index $binfile] == -1 } {
+ return -1
+ }
+ ...
+ with:
+ ...
+ require {ensure_gdb_index $binfile} != -1
+ ...
+ and consequently, add a missing UNTESTED message.
+
+ Tested on x86_64-linux, both with native and target board readnow.
+
+2021-10-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle readnow in ensure_gdb_index
+ When running test-case gdb.base/with-mf.exp with target board readnow, I run
+ into:
+ ...
+ FAIL: gdb.base/with-mf.exp: check if index present
+ ...
+ This is since commit 6010fb0c49e "[gdb/testsuite] Fix full buffer in
+ gdb.rust/dwindex.exp".
+
+ Before that commit, the proc ensure_gdb_index would treat the line:
+ ...
+ .gdb_index: faked for "readnow"^M
+ ...
+ as proof that an index is already present (which is incorrect).
+
+ Now, instead it generates aforementioned FAIL and continues to generate an
+ index.
+
+ Fix this by explicitly handling the readnow case in proc ensure_gdb_index,
+ such that we bail out instead.
+
+ Tested on x86_64-linux.
+
+2021-10-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/gdb-add-index-symlink.exp
+ The test-case gdb.dwarf2/gdb-add-index-symlink.exp interpretes a failure to
+ add an index as a failure to add an index for a symlink:
+ ...
+ if { [ensure_gdb_index $symlink] == -1 } {
+ fail "Unable to call gdb-add-index with a symlink to a symfile"
+ return -1
+ }
+ ...
+
+ However, it's possible that the gdb-add-index also fails with a regular
+ file. Add a check for that situation.
+
+ Tested on x86_64-linux.
+
+2021-10-11 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add proc require in lib/gdb.exp
+ Add a new proc require in lib/gdb.exp, and use it to shorten:
+ ...
+ if { [gdb_skip_xml_test] } {
+ # Valgrind gdbserver requires gdb with xml support.
+ untested "missing xml support"
+ return 0
+ }
+ ...
+ into:
+ ...
+ require gdb_skip_xml_test 0
+ ...
+
+ Tested on x86_64-linux, both with and without a trigger patch that forces
+ gdb_skip_xml_test to return 1.
+
+2021-10-11 Michael Forney <mforney@mforney.org>
+
+ bfd: Remove use of void pointer arithmetic
+ This is not valid in ISO C. Instead, use a pointer to bfd_byte.
+
+ * peicode.h (pe_bfd_object_p): Remove use of void pointer
+ arithmetic.
+
+2021-10-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Make execute_command_to_string return string on throw
+ The pattern for using execute_command_to_string is:
+ ...
+ std::string output;
+ output = execute_fn_to_string (fn, term_out);
+ ...
+
+ This results in a problem when using it in a try/catch:
+ ...
+ try
+ {
+ output = execute_fn_to_string (fn, term_out)
+ }
+ catch (const gdb_exception &e)
+ {
+ /* Use output. */
+ }
+ ...
+
+ If an expection was thrown during execute_fn_to_string, then the output
+ remains unassigned, while it could be worthwhile to known what output was
+ generated by gdb before the expection was thrown.
+
+ Fix this by returning the string using a parameter instead:
+ ...
+ execute_fn_to_string (output, fn, term_out)
+ ...
+
+ Also add a variant without string parameter, to support places where the
+ function is used while ignoring the result:
+ ...
+ execute_fn_to_string (fn, term_out)
+ ...
+
+ Tested on x86_64-linux.
+
+2021-10-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add check-readmore
+ Consider the gdb output:
+ ...
+ 27 return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M
+ (gdb) ^M
+ Thread 2 "run-attach-whil" stopped.^M
+ ...
+
+ When trying to match the gdb prompt using gdb_test which uses '$gdb_prompt $',
+ it may pass or fail.
+
+ This sort of thing needs to be fixed (see commit b0e2f96b56b), but there's
+ currently no way to reliably find this type of FAILs.
+
+ We have check-read1, but that one actually make the test pass reliably.
+
+ We need something like the opposite of check-read1: something that makes
+ expect read a bit slower, or more exhaustively.
+
+ Add a new test target check-readmore that implements this.
+
+ There are two methods of implementing this in read1.c:
+ - the first method waits a bit before doing a read
+ - the second method does a read and then decides whether to
+ return or to wait a bit and do another read, and so on.
+
+ The second method is potentially faster, has less risc of timeout and could
+ potentially detect more problems. The first method has a simpler
+ implementation.
+
+ The second method is enabled by default. The default waiting period is 10
+ miliseconds.
+
+ The first method can be enabled using:
+ ...
+ $ export READMORE_METHOD=1
+ ...
+ and the waiting period can be specified in miliseconds using:
+ ...
+ $ export READMORE_SLEEP=9
+ ...
+
+ Also a log file can be specified using:
+ ...
+ $ export READMORE_LOG=$(pwd -P)/LOG
+ ...
+
+ Tested on x86_64-linux.
+
+ Testing with check-readmore showed these regressions:
+ ...
+ FAIL: gdb.base/bp-cmds-continue-ctrl-c.exp: run: stop with control-c (continue)
+ FAIL: gdb.base/bp-cmds-continue-ctrl-c.exp: attach: stop with control-c (continue)
+ ...
+
+ I have not been able to find a problem in the test-case, and I think it's the
+ nature of both the test-case and readmore that makes it run longer. Make
+ these pass by increasing the alarm timeout from 60 to 120 seconds.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27957
+
+2021-10-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix fortran module tests with stressed cpu
+ When running these test-cases:
+ - gdb.fortran/info-modules.exp
+ - gdb.fortran/module.exp
+ - gdb.mi/mi-fortran-modules.exp
+ in conjunction with:
+ ...
+ $ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1))
+ ...
+ I run into timeouts.
+
+ Fix this by using:
+ - "set auto-solib-add off" to avoid symbols of shared libs
+ (which doesn't work for libc, now that libpthread_name_p has been
+ updated to match libc)
+ - "nosharedlibrary" to avoid symbols of libc
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28133
+
+2021-10-09 Guillermo E. Martinez <guillermo.e.martinez@oracle.com>
+
+ PR28415, invalid read in xtensa_read_table_entries
+ PR 28415
+ PR 28416
+ * elf32-xtensa.c (xtensa_read_table_entries): Handle error
+ return from retrieve_contents.
+
+2021-10-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/info-types-c++.exp with stressed cpu
+ When running test-case gdb.base/info-types-c++.exp in conjunction with:
+ ...
+ $ stress -c $(($(cat /proc/cpuinfo | grep -c "^processor") + 1))
+ ...
+ we get:
+ ...
+ FAIL: gdb.base/info-types-c++.exp: info types (timeout)
+ ...
+
+ Fix this by setting auto-solib-add to off.
+
+ Tested on x86_64-linux.
+
+2021-10-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/info_sources_2.exp with check-read1
+ When running test-case gdb.base/info_sources_2.exp with check-read1, I run
+ into:
+ ...
+ FAIL: gdb.base/info_sources_2.exp: args: : info sources (timeout)
+ ...
+
+ Fix this by consuming a "$src1, $src2, ..., $srcn: line bit by bit rather than
+ as one whole line.
+
+ Also add the missing handling of "Objfile has no debug information".
+
+ Tested on x86_64-linux.
+
+2021-10-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.mi/gdb2549.exp with check-read1
+ When running test-case gdb.mi/gdb2549.exp with check-read1, I run into:
+ ...
+ FAIL: gdb.mi/gdb2549.exp: register values x (timeout)
+ ...
+
+ Fix this by applying the same fix as for "register values t" in commit
+ 478e490a4df "[gdb/testsuite] Fix gdb.mi/gdb2549.exp with check-read1".
+
+ Tested on x86_64-linux.
+
+2021-10-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/bt-on-error-and-warning.exp with check-read1
+ When running test-case gdb.base/bt-on-error-and-warning.exp with check-read1,
+ I run into:
+ ...
+ (gdb) maint internal-error foobar^M
+ src/gdb/maint.c:82: internal-error: foobar^M
+ A problem internal to GDB has been detectedFAIL: \
+ gdb.base/bt-on-error-and-warning.exp: problem=internal-error, mode=on: \
+ scan for backtrace (GDB internal error)
+ Resyncing due to internal error.
+ ,^M
+ ...
+
+ The corresponding gdb_test_multiple in the test-case contains:
+ ...
+ -early -re "^A problem internal to GDB has been detected,\r\n" {
+ incr header_lines
+ exp_continue
+ }
+ ...
+ but instead this one triggers in gdb_test_multiple:
+ ...
+ -re ".*A problem internal to GDB has been detected" {
+ fail "$message (GDB internal error)"
+ gdb_internal_error_resync
+ set result -1
+ }
+ ...
+
+ Fix this by likewise shortening the regexp to before the comma.
+
+ Tested on x86_64-linux.
+
+2021-10-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add nopie in two test-cases
+ When running test-case gdb.dwarf2/dw2-restrict.exp on openSUSE Leap 15.2 with
+ gcc-PIE installed (switching compiler default to -fPIE/-pie), I get:
+ ...
+ gdb compile failed, ld: outputs/gdb.dwarf2/dw2-restrict/dw2-restrict0.o: \
+ warning: relocation in read-only section `.text'
+ ld: warning: creating DT_TEXTREL in a PIE
+ UNTESTED: gdb.dwarf2/dw2-restrict.exp: failed to prepare
+ ...
+
+ This is due to using a hardcoded .S file that was generated with -fno-PIE.
+
+ Fix this by adding the missing nopie.
+
+ Likewise in gdb.arch/amd64-tailcall-noret.exp.
+
+ Tested on x86_64-linux.
+
+2021-10-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.threads/check-libthread-db.exp with glibc 2.34
+ When running test-case gdb.threads/check-libthread-db.exp on openSUSE
+ Tumbleweed (with glibc 2.34) I get:
+ ...
+ (gdb) continue^M
+ Continuing.^M
+ [Thread debugging using libthread_db enabled]^M
+ Using host libthread_db library "/lib64/libthread_db.so.1".^M
+ Stopped due to shared library event:^M
+ Inferior loaded /lib64/libm.so.6^M
+ /lib64/libc.so.6^M
+ (gdb) FAIL: gdb.threads/check-libthread-db.exp: user-initiated check: continue
+ ...
+
+ The check expect the inferior to load libpthread, but since glibc 2.34
+ libpthread has been integrated into glibc, and consequently it's no longer
+ a dependency:
+ ...
+ $ ldd outputs/gdb.threads/check-libthread-db/check-libthread-db
+ linux-vdso.so.1 (0x00007ffe4cae4000)
+ libm.so.6 => /lib64/libm.so.6 (0x00007f167c77c000)
+ libc.so.6 => /lib64/libc.so.6 (0x00007f167c572000)
+ /lib64/ld-linux-x86-64.so.2 (0x00007f167c86e000)
+ ...
+
+ Fix this by updating the regexp to expect libpthread or libc.
+
+ Tested on x86_64-linux.
+
+2021-10-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.guile/scm-type.exp with gcc 4.8
+ With gcc 7.5.0, I get:
+ ...
+ (gdb) guile (print (type-range (field-type (type-field (value-type \
+ (value-dereference f)) "items"))))^M
+ = (0 0)^M
+ (gdb) PASS: gdb.guile/scm-type.exp: lang_cpp: test_range: \
+ on flexible array member: $cmd
+ ...
+ but with gcc 4.8.5, I get instead:
+ ...
+ (gdb) guile (print (type-range (field-type (type-field (value-type \
+ (value-dereference f)) "items"))))^M
+ = (0 -1)^M
+ (gdb) FAIL: gdb.guile/scm-type.exp: lang_cpp: test_range: \
+ on flexible array member: $cmd
+ ...
+
+ There's a difference in debug info. With gcc 4.8.5, we have:
+ ...
+ <2><224>: Abbrev Number: 15 (DW_TAG_member)
+ <225> DW_AT_name : items
+ <22b> DW_AT_type : <0x231>
+ <1><231>: Abbrev Number: 4 (DW_TAG_array_type)
+ <232> DW_AT_type : <0x105>
+ <2><23a>: Abbrev Number: 16 (DW_TAG_subrange_type)
+ <23b> DW_AT_type : <0x11a>
+ <23f> DW_AT_upper_bound : 0xffffffffffffffff
+ ...
+ and with gcc 7.5.0, we have instead:
+ ...
+ <2><89f>: Abbrev Number: 12 (DW_TAG_member)
+ <8a0> DW_AT_name : items
+ <8a6> DW_AT_type : <0x8ac>
+ <1><8ac>: Abbrev Number: 17 (DW_TAG_array_type)
+ <8ad> DW_AT_type : <0x29d>
+ <2><8b5>: Abbrev Number: 41 (DW_TAG_subrange_type)
+ <2><8b6>: Abbrev Number: 0
+ ...
+
+ As mentioned in commit 858c8f2c1b9 "gdb/testsuite: adjust
+ gdb.python/flexible-array-member.exp expected pattern":
+ ...
+ Ideally, GDB would present a consistent and documented value for an
+ array member declared with size 0, regardless of how the debug info
+ looks like.
+ ...
+
+ As in gdb.python/flexible-array-member.exp, change the test to accept the two
+ values.
+
+ Tested on x86_64-linux.
+
+2021-10-07 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add accessors for field (and call site) location
+ Add accessors for the various location values in struct field. This
+ lets us assert that when we get a location value of a certain kind (say,
+ bitpos), the field's location indeed contains a value of that kind.
+
+ Remove the SET_FIELD_* macros, instead use the new setters directly.
+ Update the FIELD_* macros used to access field locations to go through
+ the getters. They will be removed in a subsequent patch.
+
+ There are places where the FIELD_* macros are used on call_site_target
+ structures, because it contains members of the same name (loc_kind and
+ loc). For now, I have replicated the getters/setters in
+ call_site_target. But we could perhaps eventually factor them in a
+ "location" structure that can be used at both places.
+
+ Note that the field structure, being zero-initialized, defaults to a
+ bitpos location with value 0. While writing this patch, I tried to make
+ it default to an "unset" location, to catch places where we would miss
+ setting a field's location. However, I found that some places relied on
+ the default being "bitpos 0", so I left it as-is. This change could
+ always be done as follow-up work, making these places explicitly set the
+ "bitpos 0" location.
+
+ I found two issues to fix:
+
+ - I got some failures in the gdb.base/infcall-nested-structs-c++.exp
+ test. They were caused by two functions in amd64-tdep.c using
+ TYPE_FIELD_BITPOS before checking if the location is of the bitpos
+ kind, which they do indirectly through `field_is_static`. Simply
+ move getting the bitpos below the field_is_static call.
+
+ - I got a failure in gdb.xml/tdesc-regs.exp. It turns out that in
+ make_gdb_type_enum, we set enum field values using SET_FIELD_BITPOS,
+ and later access them through FIELD_ENUMVAL. Fix that by using
+ set_loc_enumval to set the value.
+
+ Change-Id: I53d3734916c46457576ba11dd77df4049d2fc1e8
+
+2021-10-07 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ RISC-V: Support aliases for Zbs instructions
+ Add aliases for the non-immediate mnemonics of b{set,clr,inv,ext} to
+ yencode the respective immediate insn b{set,clr,inv,ext}i when the
+ second source operand is an immediate.
+
+ 2021-01-11 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ gas/
+ * testsuite/gas/riscv/b-ext.d: Add tests.
+ * testsuite/gas/riscv/b-ext.s: Likewise.
+ * testsuite/gas/riscv/b-ext-64.d: Likewise.
+ * testsuite/gas/riscv/b-ext-64.s: Likewise.
+ opcodes/
+ * riscv-opc.c (riscv_opcodes): Add aliases for Zbs.
+
+ Suggested-by: Jan Beulich <jbeulich@suse.com>
+
+2021-10-07 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ RISC-V: Add support for Zbs instructions
+ This change adds the Zbs instructions from the Zbs 1.0.0 specification.
+ See
+ https://github.com/riscv/riscv-bitmanip/releases/tag/1.0.0
+ for the frozen specification.
+
+ 2021-01-09 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ bfd/
+ * elfxx-riscv.c (riscv_supported_std_z_ext): Added zbs.
+ gas/
+ * config/tc-riscv.c (riscv_multi_subset_supports): Handle INSN_CLASS_ZBS.
+ * testsuite/gas/riscv/b-ext.d: Test Zbs instructions.
+ * testsuite/gas/riscv/b-ext.s: Likewise.
+ * testsuite/gas/riscv/b-ext-64.d: Likewise.
+ * testsuite/gas/riscv/b-ext-64.s: Likewise.
+ include/
+ * opcode/riscv-opc.h: Added MASK/MATCH/DECLARE_INSN for Zbs.
+ * opcode/riscv.h (riscv_insn_class): Added INSN_CLASS_ZBS.
+ opcodes/
+ * riscv-opc.c (riscv_supported_std_z_ext): Add zbs.
+
+2021-10-07 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ RISC-V: Update extension version for Zb[abc] to 1.0.0
+ 2021-10-06 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ bfd/
+ * elfxx-riscv.c (riscv_supported_std_z_ext): Update the version
+ number for zba, zbb and zbc to 1.0.0
+
+
+ Version-changes: 3
+ - Updated version numbers for zba, zbb and zbc to 1.0.0
+
+2021-10-07 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ RISC-V: Split Zb[abc] into commented sections
+ The Zb[abc] opcodes are bundled just below the Privileged opcodes in
+ riscv_opcodes, possibly giving the appearance that they are part of
+ the Privileged spec for an uninitiated reader. This separates them
+ out and adds comments above each section to clearly identify them as
+ Zba, Zbb or Zbc opcodes.
+
+ 2021-10-04 Philipp Tomsich <philipp.tomsich@vrull.eu>
+
+ opcodes/
+ * riscv-opc.c: Split of Zb[abc] instructions and add comments.
+
+2021-10-07 Alan Modra <amodra@gmail.com>
+
+ PR28423, use-after-free in objdump
+ XCOFF archives use a bi-directional linked list for file members. So
+ one member points to both the previous member and the next member.
+ Members may not be sequentially ordered in the file. This of course
+ is over-engineered nonsense and an attractive target for fuzzers.
+ (There is even a free list of members!) The testcase in PR28423 is an
+ XCOFF archive with one member pointing to itself, which results in
+ lots of bad behaviour. For example, "ar t" never terminates.
+
+ The use-after-free with "objdump -r" happens like this: The first
+ archive element is opened, its symbols are read and "canonicalized"
+ for objdump, then relocations are read and printed. Those relocations
+ use the canonicalized symbols, and also happen to be cached by the
+ coff bfd backend support. objdump frees the symbols. The next
+ archive element is then opened. This must be done before the first
+ element is closed, because finding the next element uses data held in
+ the currect element. Unfortunately the next element happens to be the
+ original, so we aren't opening, we're reopening a bfd which has cached
+ data. When the relocations are printed they use the cached copy
+ containing references to the freed canonical symbols.
+
+ This patch adds a little sanity checking to the XCOFF "open next
+ archive file" support, so that it rejects archive members pointing at
+ themselves. That is sufficient to cure this problem. Anything more
+ is overkill. If someone deliberately fuzzes an XCOFF archive with an
+ element loop then reports an "ar" bug when it runs forever, they will
+ find their bug report closed WONTFIX.
+
+ PR 28423
+ * coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Save size occupied
+ by member name in areltdata.extra_size.
+ (_bfd_xcoff_openr_next_archived_file): Sanity check nextoff.
+ * coff64-rs6000.c (xcoff64_openr_next_archived_file): Call
+ _bfd_xcoff_openr_next_archived_file.
+
+2021-10-07 Alan Modra <amodra@gmail.com>
+
+ PR28422, build_id use-after-free
+ This fixes a bug in commit 5d9bbb73c1df. All fields preserved from a
+ bfd in struct bfd_preserve need to be cleared in bfd_reinit.
+
+ PR 28422
+ * format.c (bfd_reinit): Clear build_id.
+
+2021-10-07 Alan Modra <amodra@gmail.com>
+
+ Change ridiculous section size error
+ Rather than reporting "memory exhausted", report "file truncated".
+ You can hit this error on small fuzzed object files, or on files that
+ are actually truncated. In either case sizes can be such that an out
+ of memory error is a little confusing.
+
+ * compress.c (bfd_get_full_section_contents): Set
+ bfd_error_file_truncated rather than bfd_error_no_memory when
+ section size exceeds file size.
+
+2021-10-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAIL in gdb.base/annota1.exp
+ On openSUSE tumbleweed I run into:
+ ...
+ FAIL: gdb.base/annota1.exp: run until main breakpoint (timeout)
+ ...
+ due to a message related to libthread_db:
+ ...
+ ^Z^Zstarting^M
+ [Thread debugging using libthread_db enabled]^M
+ Using host libthread_db library "/lib64/libthread_db.so.1".^M
+ ^M
+ ^Z^Zframes-invalid^M
+ ...
+ which is not matched by the regexp.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+2021-10-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Refactor regexp in gdb.base/annota1.exp
+ Refactor regexp in gdb.base/annota1.exp to reduce indentation and repetition.
+
+ Tested on x86_64-linux.
+
+2021-10-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-06 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/doc: improve 'show print elements' description
+ The documentation for 'show print elements' contains the line:
+
+ If the number is 0, then the printing is unlimited.
+
+ However, this line is now out of date as can be seen by this GDB
+ session:
+
+ (gdb) set print elements 0
+ (gdb) show print elements
+ Limit on string chars or array elements to print is unlimited.
+
+ The value 0 does indeed mean unlimited, and this is described in the
+ 'set print elements' section, however, for 'show print elements' the
+ user will never see the value 0, so lets just remove that bit from the
+ docs.
+
+2021-10-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAIL in gdb.tui/corefile-run.exp
+ When running test-case gdb.tui/corefile-run.exp on openSUSE Tumbleweed,
+ I run into:
+ ...
+ PASS: gdb.tui/corefile-run.exp: load corefile
+ FAIL: gdb.tui/corefile-run.exp: run until the end
+ ...
+
+ What's going on is easier to see when also doing dump_screen if
+ check_contents passes, and inspecting state at the preceding PASS:
+ ...
+ +-------------------------------------------------------------------------+
+ exec No process In: L?? PC: ??
+ [New LWP 16629]
+ [Thread debugging using libthread_db enabled]
+ Using host libthread_db library "/lib64/libthread_db.so.1".
+ Core was generated by `/data/gdb_versions/devel/build/gdb/testsuite/output
+ s/gdb.tui/corefile-run/corefi'.
+ Program terminated with signal SIGTRAP, Trace/breakpoint trap.
+ #0 main ()
+ --Type <RET> for more, q to quit, c to continue without paging--
+ ...
+
+ The problem is that we're getting a pagination prompt, and the subsequent run
+ command is interpreted as an answer to that prompt.
+
+ Fix this by:
+ - detecting the gdb prompt in response to "load corefile", such that
+ we detect the failure earlier, and
+ - doing a "set pagination off" in Term::clean_restart.
+
+ Tested on x86_64-linux.
+
+2021-10-06 Alan Modra <amodra@gmail.com>
+
+ PR28420, ecoff fuzzing failures
+ PR 28420
+ * coff-mips.c (mips_adjust_reloc_in): Replace abort with error
+ message and return.
+ * ecoff.c (ecoff_slurp_reloc_table): Remove assertion and aborts,
+ instead handle errors gracefully.
+
+2021-10-06 Alan Modra <amodra@gmail.com>
+
+ PR28402, fail to allocate line number array
+ This fixes a situation where the COFF code allocated memory for
+ internal representaion arrays before reading the external file data.
+ That meant the allocation didn't have any sanity check against file
+ size.
+
+ PR 28402
+ * coffcode.h (buy_and_read): Malloc rather than alloc memory.
+ (coff_slurp_line_table): Read native line number info before
+ allocating memory for internal line number array. Adjust error
+ paths to suit. Remove now unnecessary line number count check.
+ (coff_slurp_reloc_table): Adjust to suit buy_and_read change.
+
+2021-10-06 Alan Modra <amodra@gmail.com>
+
+ PR28403, null pointer dereference in disassemble_bytes
+ Indexing of symbol and howto arrays wasn't checked in aout targets.
+
+ PR 28403
+ * aout-ns32k.c (MY (reloc_howto)): Sanity check howto_table index.
+ Make r_index unsigned.
+ (MY_swap_std_reloc_in): Make r_index unsigned.
+ * aoutx.h (MOVE_ADDRESS): Sanity check symbol r_index.
+ (aout_link_input_section_std): Make r_index unsigned.
+ (aout_link_input_section_ext): Likewise.
+ * i386lynx.c (MOVE_ADDRESS): Sanity check symbol r_index.
+ (swap_ext_reloc_in, swap_std_reloc_in): Make r_index unsigned.
+ * pdp11.c (MOVE_ADDRESS): Sanity check symbol r_index.
+
+2021-10-06 Alan Modra <amodra@gmail.com>
+
+ PR28401, invalid section name lookup
+ The PR28401 testcase has a section named "", ie. an empty string.
+ This results in some silly behaviour in load_debug_section, and
+ dump_dwarf_section. Fix that. Note that this patch doesn't correct
+ the main complaint in PR28401, "failed to allocate", since malloc
+ failures on sections having huge bogus sizes are to be expected. We
+ can't safely catch all such cases by comparing with file size, for
+ example, where sections contain compressed data.
+
+ PR 28401
+ * objdump.c (load_debug_section): Don't attempt to retrieve
+ empty name sections.
+ (dump_dwarf_section): Likewise.
+
+2021-10-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Make tui testing less verbose
+ Currently, tui testing is rather verbose. When using these RUNTESTFLAGS to
+ pick up all tui tests (17 in total):
+ ...
+ rtf=$(echo $(cd src/gdb/testsuite/; find gdb.* -type f -name *.exp* \
+ | xargs grep -l tuiterm_env) )
+ ...
+ we have:
+ ...
+ $ wc -l gdb.log
+ 120592 gdb.log
+ ...
+
+ Most of the output is related to controlling the tui screen, but that does
+ not give a top-level sense of how the test-case progresses.
+
+ Put differently: a lot of bandwith is used to describe how we arrive at a
+ certain tui screen state. But we don't actually always show the state we
+ arrive at, unless there's a FAIL.
+
+ And if there's say, a PASS that should actually be FAILing, it's hard to
+ detect.
+
+ Fix this by:
+ - dropping the -log on the call to verbose in _log. We still can get the
+ same info back using runtest -v.
+ - dumping the screen or box that we're checking, also when the test passes.
+
+ Brings down verbosity to something more reasonable:
+ ...
+ $ wc -l gdb.log
+ 3221 gdb.log
+ ...
+
+ Tested on x86_64-linux.
+
+2021-10-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add Term::dump_box in lib/tuiterm.exp
+ Factor out new proc Term::get_region and use it to implement a
+ new proc Term::dump_box, similar to Term::dump_screen.
+
+ Tested on x86_64-linux.
+
+2021-10-05 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: Remove deprecated assertion in setting::get
+ The commit 702991711a91bd47b209289562843a11e7009396 (gdb: Have setter
+ and getter callbacks for settings) makes it possible for a setting not
+ to be backed by a memory buffer but use callback functions instead to
+ retrieve or set the setting's value.
+
+ An assertion was not properly updated to take into account that the
+ m_var member (which points to a memory buffer, if used) might be nullptr
+ if the setting uses callback functions. If the setting is backed by a
+ memory buffer, the m_var has to be non nullptr, which is already checked
+ before the pointer is dereferenced.
+
+ This commit removes this assertion as it is not valid anymore.
+
+2021-10-05 Tom Tromey <tromey@adacore.com>
+
+ Remove 'varsize-limit'
+ This makes the Ada-specific "varsize-limit" a synonym for
+ "max-value-size", and removes the Ada-specific checks of the limit.
+
+ I am not certain of the history here, but it seems to me that this
+ code is fully obsolete now. And, removing this makes it possible to
+ index large Ada arrays without triggering an error. A new test case
+ is included to demonstrate this.
+
+2021-10-05 Tom Tromey <tromey@adacore.com>
+
+ Allow lazy 'zero' value
+ This changes value_zero to create a lazy value. In many cases,
+ value_zero is called in expression evaluation to wrap a type in a
+ non-eval context. It seems senseless to allocate a buffer in these
+ cases.
+
+ A new 'is_zero' flag is added so we can preserve the existing
+ assertions in value_fetch_lazy.
+
+ A subsequent patch will add a test where creating a zero value would
+ fail, due to the variable size check. However, the contents of this
+ value are never needed, and so creating a lazy value avoids the error
+ case.
+
+2021-10-05 Tom Tromey <tromey@adacore.com>
+
+ Add lval_funcs::is_optimized_out
+ This adds an is_optimized_out function pointer to lval_funcs, and
+ changes value_optimized_out to call it. This new function lets gdb
+ determine if a value is optimized out without necessarily fetching the
+ value. This is needed for a subsequent patch, where an attempt to
+ access a lazy value would fail due to the value size limit -- however,
+ the access was only needed to determine the optimized-out state.
+
+2021-10-05 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAIL in gdb.mi/mi-nsmoribund.exp
+ Since commit e36788d1354 "[gdb/testsuite] Fix handling of nr_args < 3 in
+ mi_gdb_test" we run into:
+ ...
+ PASS: gdb.mi/mi-nsmoribund.exp: print done = 1
+ Expecting: ^(.*[^M
+ ]+)?([^
+ ]*^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"^M
+ \*running,thread-id="[0-9]+"[^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ 103-exec-continue --all^M
+ =library-loaded,id="/lib64/libgcc_s.so.1",target-name="/lib64/libgcc_s.so.1",\
+ host-name="/lib64/libgcc_s.so.1",symbols-loaded="0",thread-group="i1",\
+ ranges=[{from="0x00007ffff22a5010",to="0x00007ffff22b6365"}]^M
+ 103^running^M
+ *running,thread-id="5"^M
+ (gdb) ^M
+ FAIL: gdb.mi/mi-nsmoribund.exp: 103-exec-continue --all (unexpected output)
+ ...
+
+ The regexp expect running messages for all threads, but we only get one for
+ thread 5.
+
+ The test-case uses non-stop mode, and when the exec-continue --all command is
+ issued, thread 5 is stopped and all other threads are running. Consequently,
+ only thread 5 is resumed, and reported as running.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+2021-10-05 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: fix memory leak in python inferior code
+ When a user creates a gdb.Inferior object for the first time a new
+ Python object is created. This object is then cached within GDB's
+ inferior object using the registry mechanism (see
+ inferior_to_inferior_object in py-inferior.c, specifically the calls
+ to inferior_data and set_inferior_data).
+
+ The Python Reference to the gdb.Inferior object held within the real
+ inferior object ensures that the reference count on the Python
+ gdb.Inferior object never reaches zero while the GDB inferior object
+ continues to exist.
+
+ At the same time, the gdb.Inferior object maintains a C++ pointer back
+ to GDB's real inferior object. We therefore end up with a system that
+ looks like this:
+
+ Python Reference
+ |
+ |
+ .----------. | .--------------.
+ | |------------------->| |
+ | inferior | | gdb.Inferior |
+ | |<-------------------| |
+ '----------' | '--------------'
+ |
+ |
+ C++ Pointer
+
+ When GDB's inferior object is deleted (say the inferior exits) then
+ py_free_inferior is called (thanks to the registry system), this
+ function looks up the Python gdb.Inferior object and sets the C++
+ pointer to nullptr and finally reduces the reference count on the
+ Python gdb.Inferior object.
+
+ If at this point the user still holds a reference to the Python
+ gdb.Inferior object then nothing happens. However, the gdb.Inferior
+ object is now in the non-valid state (see infpy_is_valid in
+ py-inferior.c), but otherwise, everything is fine.
+
+ However, if there are no further references to the Python gdb.Inferior
+ object, or, once the user has given up all their references to the
+ gdb.Inferior object, then infpy_dealloc is called.
+
+ This function currently checks to see if the inferior pointer within
+ the gdb.Inferior object is nullptr or not. If the pointer is nullptr
+ then infpy_dealloc immediately returns.
+
+ Only when the inferior point in the gdb.Inferior is not nullptr do
+ we (a) set the gdb.Inferior reference inside GDB's inferior to
+ nullptr, and (b) call the underlying Python tp_free function.
+
+ There are a number things wrong here:
+
+ 1. The Python gdb.Inferior reference within GDB's inferior object
+ holds a reference count, thus, setting this reference to nullptr
+ without first decrementing the reference count would leak a
+ reference, however...
+
+ 2. As GDB's inferior holds a reference then infpy_dealloc will never
+ be called until GDB's inferior object is deleted. Deleting a GDB
+ inferior ohject calls py_free_inferior, and so gives up the
+ reference. At this point there is no longer a need to call
+ set_inferior_data to set the field back to NULL, that field must
+ have been cleared in order to get the reference count to zero, which
+ means...
+
+ 3. If we know that py_free_inferior must be called before
+ infpy_dealloc, then we know that the inferior pointer in
+ gdb.Inferior will always be nullptr when infpy_dealloc is called,
+ this means that the call to the underlying tp_free function will
+ always be skipped. Skipping this call will cause Python to leak the
+ memory associated with the gdb.Inferior object, which is what we
+ currently always do.
+
+ Given all of the above, I assert that the C++ pointer within
+ gdb.Inferior will always be nullptr when infpy_dealloc is called.
+ That's what this patch does.
+
+ I wrote a test for this issue making use of Pythons tracemalloc
+ module, which allows us to spot this memory leak.
+
+2021-10-05 Bhuvanendra Kumar N <Bhuvanendra.KumarN@amd.com>
+
+ [gdb/testsuite] Use function_range in gdb.dwarf2/dw2-ref-missing-frame.exp
+ Following 2 test points are failing with clang compiler
+
+ (gdb) FAIL: gdb.dwarf2/dw2-ref-missing-frame.exp: func_nofb print
+ (gdb) FAIL: gdb.dwarf2/dw2-ref-missing-frame.exp: func_loopfb print
+
+ As in commit f677852bbda "[gdb/testsuite] Use function_range in
+ gdb.dwarf2/dw2-abs-hi-pc.exp", the problem is that the CU and functions
+ have an empty address range, due to using asm labels in global scope,
+ which is a known source of problems, as explained in the comment of proc
+ function_range in gdb/testsuite/lib/dwarf.exp. Hence fix this also by
+ using function_range.
+
+ Tested on x86_64-linux with gcc and clang.
+
+2021-10-05 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: add a new gdb_exiting event
+ Add a new event, gdb.events.gdb_exiting, which is called once GDB
+ decides it is going to exit.
+
+ This event is not triggered in the case that GDB performs a hard
+ abort, for example, when handling an internal error and the user
+ decides to quit the debug session, or if GDB hits an unexpected,
+ fatal, signal.
+
+ This event is triggered if the user just types 'quit' at the command
+ prompt, or if GDB is run with '-batch' and has processed all of the
+ required commands.
+
+ The new event type is gdb.GdbExitingEvent, and it has a single
+ attribute exit_code, which is the value that GDB is about to exit
+ with.
+
+ The event is triggered before GDB starts dismantling any of its own
+ internal state, so, my expectation is that most Python calls should
+ work just fine at this point.
+
+ When considering this functionality I wondered about using the
+ 'atexit' Python module. However, this is triggered when the Python
+ environment is shut down, which is done from a final cleanup. At
+ this point we don't know for sure what other GDB state has already
+ been cleaned up.
+
+2021-10-05 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: update events test to handle missing exit_code
+ The test gdb.python/py-events.exp sets up a handler for the gdb.exited
+ event. Unfortunately the handler is slightly broken, it assumes that
+ the exit_code attribute will always be present. This is not always
+ the case.
+
+ In a later commit I am going to add more tests to py-events.exp test
+ script, and in so doing I expose the bug in our handling of gdb.exited
+ events.
+
+ Just to be clear, GDB itself is fine, it is the test that is not
+ written correctly according to the Python Events API.
+
+ So, in this commit I fix the Python code in the test, and extend the
+ test case to exercise more paths through the Python code.
+
+ Additionally, I noticed that the gdb.exited event is used as an
+ example in the documentation for how to write an event handler.
+ Unfortunately the same bug that we had in our test was also present in
+ the example code in the manual.
+
+ So I've fixed that too.
+
+ After this commit there is no functional change to GDB.
+
+2021-10-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-04 Tom Tromey <tromey@adacore.com>
+
+ Use unique_xmalloc_ptr<char> when demangling
+ I noticed that some methods in language_defn could use
+ unique_xmalloc_ptr<char> rather than a plain 'char *'. This patch
+ implements this change, fixing up the fallout and changing
+ gdb_demangle to also return this type. In one spot, std::string is
+ used to simplify some related code, and in another, an auto_obstack is
+ used to avoid manual management.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-10-04 Tom Tromey <tromey@adacore.com>
+
+ Minor boolean fix in windows-nat.c
+ I noticed a spot in windows-nat.c that used '1' rather than the more
+ appropriate 'true'. This patch fixes it.
+
+2021-10-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Add CXX_DIALECT to CXX
+ Say we use a gcc version that (while supporting c++11) does not support c++11
+ by default, and needs an -std setting to enable it.
+
+ If gdb would use the default AX_CXX_COMPILE_STDCXX from autoconf-archive, then
+ we'd have:
+ ...
+ CXX="g++ -std=gnu++11"
+ ...
+
+ That mechanism however has the following problem (quoting from commit
+ 0bcda685399):
+ ...
+ the top level Makefile passes CXX down to subdirs, and that overrides whatever
+ gdb/Makefile may set CXX to. The result would be that a make invocation from
+ the build/gdb/ directory would use "g++ -std=gnu++11" as expected, while a
+ make invocation at the top level would not.
+ ...
+
+ Commit 0bcda685399 fixes this by using a custom AX_CXX_COMPILE_STDCXX which
+ does:
+ ...
+ CXX=g++
+ CXX_DIALECT=-std=gnu++11
+ ...
+
+ The problem reported in PR28318 is that using the custom instead of the
+ default AX_CXX_COMPILE_STDCXX makes the configure test for std::thread
+ support fail.
+
+ We could simply add $CXX_DIALECT to the test for std::thread support, but
+ that would have to be repeated for each added c++ support test.
+
+ Instead, fix this by doing:
+ ...
+ CXX="g++ -std=gnu++11"
+ CXX_DIALECT=-std=gnu++11
+ ...
+
+ This is somewhat awkward, since it results in -std=gnu++11 occuring twice in
+ some situations:
+ ...
+ $ touch src/gdb/dwarf2/read.c
+ $ ( cd build/gdb; make V=1 dwarf2/read.o )
+ g++-4.8 -std=gnu++11 -x c++ -std=gnu++11 ...
+ ...
+
+ However, both settings are needed:
+ - the switch in CXX for the std::thread tests (and other tests)
+ - the switch in CXX_DIALECT so it can be appended in Makefiles, to
+ counteract the fact that the top-level Makefile overrides CXX
+
+ The code added in gdb/ax_cxx_compile_stdcxx.m4 is copied from the default
+ AX_CXX_COMPILE_STDCXX from autoconf-archive.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28318
+
+2021-10-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ [gdb/symtab] Use unrelocated addresses in call_site
+ Consider test-case gdb.trace/entry-values.exp with target board
+ unix/-fPIE/-pie.
+
+ Using this command we have an abbreviated version, and can see the correct
+ @entry values for foo:
+ ...
+ $ gdb -q -batch outputs/gdb.trace/entry-values/entry-values \
+ -ex start \
+ -ex "break foo" \
+ -ex "set print entry-values both" \
+ -ex continue
+ Temporary breakpoint 1 at 0x679
+
+ Temporary breakpoint 1, 0x0000555555554679 in main ()
+ Breakpoint 2 at 0x55555555463e
+
+ Breakpoint 2, 0x000055555555463e in foo (i=0, i@entry=2, j=2, j@entry=3)
+ ...
+
+ Now, let's try the same again, but run directly to foo rather than stopping at
+ main:
+ ...
+ $ gdb -q -batch outputs/gdb.trace/entry-values/entry-values \
+ -ex "break foo" \
+ -ex "set print entry-values both" \
+ -ex run
+ Breakpoint 1 at 0x63e
+
+ Breakpoint 1, 0x000055555555463e in foo (i=0, i@entry=<optimized out>, \
+ j=2, j@entry=<optimized out>)
+ ...
+
+ So, what explains the difference? Noteworthy, this is a dwarf assembly
+ test-case, with debug info for foo and bar, but not for main.
+
+ In the first case:
+ - we run to main
+ - this does not trigger expanding debug info, because there's none for main
+ - we set a breakpoint at foo
+ - this triggers expanding debug info. Relocated addresses are used in
+ call_site info (because the exec is started)
+ - we continue to foo, and manage to find the call_site info
+
+ In the second case:
+ - we set a breakpoint at foo
+ - this triggers expanding debug info. Unrelocated addresses are used in
+ call_site info (because the exec is not started)
+ - we run to foo
+ - this triggers objfile_relocate1, but it doesn't update the call_site
+ info addresses
+ - we don't manage to find the call_site info
+
+ We could fix this by adding the missing call_site relocation in
+ objfile_relocate1.
+
+ This solution however is counter-trend in the sense that we're trying to
+ work towards the situation where when starting two instances of an executable,
+ we need only one instance of debug information, implying the use of
+ unrelocated addresses.
+
+ So, fix this instead by using unrelocated addresses in call_site info.
+
+ Tested on x86_64-linux.
+
+ This fixes all remaining unix/-fno-PIE/-no-pie vs unix/-fPIE/-pie
+ regressions, like f.i. PR24892.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24892
+
+ Co-Authored-By: Tom de Vries <tdevries@suse.de>
+
+2021-10-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ [gdb/symtab] C++-ify call_site
+ - add constructor
+ - add member function call_site::pc ()
+
+ Tested on x86_64-linux.
+
+ Co-Authored-By: Tom de Vries <tdevries@suse.de>
+
+2021-10-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Add call_site_eq and call_site_hash
+ In commit b4c919f7525 "[gdb/symtab] Fix htab_find_slot call in
+ read_call_site_scope" , I removed the comment:
+ ...
+ It must be the first field as we overload core_addr_hash and core_addr_eq for
+ it.
+ ...
+ for field pc of struct call_site.
+
+ However, this was not tested, and when indeed moving field pc to the second
+ location, we run into a testsuite failure in gdb.trace/entry-values.exp.
+
+ This is caused by core_addr_eq (the eq_f function for the htab) being
+ called with a pointer to the pc field (as passed into htab_find_slot) and a
+ pointer to a hash table element. Now that pc is no longer the first field,
+ the pointer to hash table element no longer points to the pc field.
+
+ This could be fixed by simply reinstating the comment, but we're trying to
+ get rid of this kind of tricks that make refactoring more difficult.
+
+ Instead, fix this by:
+ - reverting commit b4c919f7525, apart from the comment removal, such that
+ we're passing a pointer to element to htab_find_slot
+ - updating the htab_find_slot call in compunit_symtab::find_call_site
+ in a similar manner
+ - adding a call_site_eq and call_site_hash, and using these in the hash table
+ instead of core_addr_eq and core_addr_hash.
+
+ Tested on x86_64-linux, both with and without a trigger patch that moves pc to
+ the second location in struct call_site.
+
+2021-10-04 Tom Tromey <tromey@adacore.com>
+
+ Fix remote-sim.c compilation
+ The change "make string-like set show commands use std::string
+ variable" caused remote-sim.c to fail to build. The issue is that the
+ code does:
+
+ const std::string &sysroot = gdb_sysroot;
+ if (is_target_filename (sysroot))
+ sysroot += strlen (TARGET_SYSROOT_PREFIX);
+
+ ... which isn't valid.
+
+ This patch changes this code to use a 'const char *' again, fixing the
+ build.
+
+2021-10-04 Bruno Larsen <blarsen@redhat.com>
+
+ [gdb/testsuite] update analyze-racy-logs.py to python3
+ Since python 2 is no longer supported on most distributions, update the
+ script to run under python while while still being runnable under
+ python2.
+
+2021-10-04 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdbsupport: remove attempt to define TARGET_WORD_SIZE
+ In the gdbsupport configure.ac file, there is an attempt to define
+ TARGET_WORD_SIZE. This is done by running grep on the file
+ ../bfd/bfd-in3.h.
+
+ The problem with this is, the file bfd-in3.h is generated into the bfd
+ build directory when bfd is configured, and there is no dependency
+ between the gdbsupport module and the bfd module, so, for example, if
+ I do:
+
+ $ ../src/configure
+ $ make all-gdbsupport
+
+ Then bfd will neither be configured, or built. In this case
+ TARGET_WORD_SIZE ends up being defined, but with no value because the
+ grep on bfd-in3.h fails.
+
+ However, it turns out that this doesn't matter; we don't actually use
+ TARGET_WORD_SIZE anywhere.
+
+ My proposal in this commit is to just remove the definition of
+ TARGET_WORD_SIZE, the alternative would be to add a dependency between
+ configure-gdbsupport and configure-bfd into Makefile.def, but adding a
+ dependency for something we don't need seems pretty pointless.
+
+2021-10-04 Mike Frysinger <vapier@gentoo.org>
+
+ sim: add --info-target for listing supported BFD targets
+ It can be difficult to guess the exact bfd name, so add an option to
+ list all the targets that the current build supports. This aligns with
+ other simulator options like --info-architecture.
+
+2021-10-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-03 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: Setting setter return a bool to tell if the value changed
+ GDB can notify observers when a parameter is changed.
+
+ To do that, do_set_command (in gdb/cli/cli-setshow.c) compares the new
+ value against the old one before updating it, and based on that notifies
+ observers. This looks like something like:
+
+ int valuechanged = 0;
+ switch (cmd->var.type ())
+ {
+ case var_integer:
+ {
+ LONGEST new_val = parse_and_eval_long (arg)
+ if (new_val != cmd->var.get<int> ())
+ {
+ cmd->var.get<int> (new_val);
+ value_changes = 1;
+ }
+ }
+ case var_uinteger:
+ case var_zuinteger:
+ {
+ unsigned int val
+ = parse_cli_var_uinteger (c->var->type (), &arg, true);
+ if (c->var->get<unsigned int> () != val)
+ {
+ c->var->set<unsigned int> (val);
+ option_changed = true;
+ }
+ }
+ case...
+ /* And so on for all possible var_types. */
+ }
+
+ This comparison is done for each possible var_type, which leads to
+ unnecessary logic duplication.
+
+ In this patch I propose to move all those checks in one place within the
+ setting setter method. This limits the code duplication and simplifies
+ the do_set_command implementation.
+
+ This patch also changes slightly the way a value change is detected.
+ Instead of comparing the user provided value against the current value
+ of the setting, we compare the value of the setting before and after the
+ set operation. This is meant to handle edge cases where trying to set
+ an unrecognized value would be equivalent to a noop (the actual value
+ remains unchanged). Doing this requires that the original value needs
+ to be copied before the update, which can be non trivial for
+ std::string.
+
+ There should be no user visible change introduced by this commit.
+
+ Tested on x86_64 GNU/Linux.
+
+ [1] https://review.lttng.org/c/binutils-gdb/+/5831/41
+
+ Change-Id: If064b9cede3eb56275aacd2b286f74eceb1aed11
+
+2021-10-03 Lancelot SIX <lsix@lancelotsix.com>
+ Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: Have setter and getter callbacks for settings
+ The main motivation behind this improvement is to help the
+ implementation of a patch Simon Marchi is preparing to fix a bug when
+ MI or Python try to access parameters that are inferior dependent (see
+ PR/28085).
+
+ This commit extends the previous ones, which introduces the setting
+ object to represent a static variable whose value can be set or shown
+ with the appropriate commands. This patch proposes that a setting can
+ either contain a pointer to a static variable holding a setting, or
+ pointers to a pair of setter and getter callback functions.
+
+ The callbacks functions can be used to retrieve or change the value with
+ custom logic. This is useful when the source of truth for a given
+ setting is not contained in the variable pointed to by the setting
+ instance.
+
+ Given that the callback function call is hidden within the setting
+ abstraction introduced earlier, none of the sites accessing the setting
+ needs to be updated. The registered getter or setter is used whatever
+ the way to access it is (through MI, Python, Guile, the "with" command
+ and the $_gdb_setting / $_gdb_setting_str convenience functions).
+
+ All the add_setshow_*_cmd are given a new overload that will accept the
+ pair of function pointers (set / get functions) instead of the pointer
+ to a global variable.
+
+ Tested on GNU/Linux x86_64 with no regression observed.
+
+ Change-Id: Ieb81fef57550632ff66e6aa85f637372a226be8c
+
+2021-10-03 Simon Marchi <simon.marchi@efficios.com>
+ Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: make string-like set show commands use std::string variable
+ String-like settings (var_string, var_filename, var_optional_filename,
+ var_string_noescape) currently take a pointer to a `char *` storage
+ variable (typically global) that holds the setting's value. I'd like to
+ "mordernize" this by changing them to use an std::string for storage.
+
+ An obvious reason is that string operations on std::string are often
+ easier to write than with C strings. And they avoid having to do any
+ manual memory management.
+
+ Another interesting reason is that, with `char *`, nullptr and an empty
+ string often both have the same meaning of "no value". String settings
+ are initially nullptr (unless initialized otherwise). But when doing
+ "set foo" (where `foo` is a string setting), the setting now points to
+ an empty string. For example, solib_search_path is nullptr at startup,
+ but points to an empty string after doing "set solib-search-path". This
+ leads to some code that needs to check for both to check for "no value".
+ Or some code that converts back and forth between NULL and "" when
+ getting or setting the value. I find this very error-prone, because it
+ is very easy to forget one or the other. With std::string, we at least
+ know that the variable is not "NULL". There is only one way of
+ representing an empty string setting, that is with an empty string.
+
+ I was wondering whether the distinction between NULL and "" would be
+ important for some setting, but it doesn't seem so. If that ever
+ happens, it would be more C++-y and self-descriptive to use
+ optional<string> anyway.
+
+ Actually, there's one spot where this distinction mattered, it's in
+ init_history, for the test gdb.base/gdbinit-history.exp. init_history
+ sets the history filename to the default ".gdb_history" if it sees that
+ the setting was never set - if history_filename is nullptr. If
+ history_filename is an empty string, it means the setting was explicitly
+ cleared, so it leaves it as-is. With the change to std::string, this
+ distinction doesn't exist anymore. This can be fixed by moving the code
+ that chooses a good default value for history_filename to
+ _initialize_top. This is ran before -ex commands are processed, so an
+ -ex command can then clear that value if needed (what
+ gdb.base/gdbinit-history.exp tests).
+
+ Another small improvement, in my opinion is that we can now easily
+ give string parameters initial values, by simply initializing the global
+ variables, instead of xstrdup-ing it in the _initialize function.
+
+ In Python and Guile, when registering a string-like parameter, we
+ allocate (with new) an std::string that is owned by the param_smob (in
+ Guile) and the parmpy_object (in Python) objects.
+
+ This patch started by changing all relevant add_setshow_* commands to
+ take an `std::string *` instead of a `char **` and fixing everything
+ that failed to build. That includes of course all string setting
+ variable and their uses.
+
+ string_option_def now uses an std::string also, because there's a
+ connection between options and settings (see
+ add_setshow_cmds_for_options).
+
+ The add_path function in source.c is really complex and twisted, I'd
+ rather not try to change it to work on an std::string right now.
+ Instead, I added an overload that copies the std:string to a `char *`
+ and back. This means more copying, but this is not used in a hot path
+ at all, so I think it is acceptable.
+
+ Change-Id: I92c50a1bdd8307141cdbacb388248e4e4fc08c93
+
+2021-10-03 Lancelot SIX <lsix@lancelotsix.com>
+ Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: Introduce setting construct within cmd_list_element
+ cmd_list_element can contain a pointer to data that can be set and / or
+ shown. This is achieved with the void* VAR member which points to the
+ data that can be accessed, while the VAR_TYPE member (of type enum
+ var_types) indicates how to interpret the data pointed to.
+
+ With this pattern, the user of the cmd_list_element needs to know what
+ is the storage type associated with a given VAR_TYPES in order to do
+ the proper casting. No automatic safeguard is available to prevent
+ miss-use of the pointer. Client code typically looks something like:
+
+ switch (c->var_type)
+ {
+ case var_zuinteger:
+ unsigned int v = *(unsigned int*) c->var;
+ ...
+ break;
+ case var_boolean:
+ bool v = *(bool *) c->var;
+ ...
+ break;
+ ...
+ }
+
+ This patch proposes to add an abstraction around the var_types and void*
+ pointer pair. The abstraction is meant to prevent the user from having
+ to handle the cast and verify that the data is read or written as a type
+ that is coherent with the setting's var_type. This is achieved by
+ introducing the struct setting which exposes a set of templated get /
+ set member functions. The template parameter is the type of the
+ variable that holds the referred variable.
+
+ Using those accessors allows runtime checks to be inserted in order to
+ ensure that the data pointed to has the expected type. For example,
+ instantiating the member functions with bool will yield something
+ similar to:
+
+ const bool &get<bool> () const
+ {
+ gdb_assert (m_var_type == var_boolean);
+ gdb_assert (m_var != nullptr);
+ return *static_cast<bool *> (m_var);
+ }
+ void set<bool> (const bool &var)
+ {
+ gdb_assert (m_var_type == var_boolean);
+ gdb_assert (m_var != nullptr);
+ *static_cast<bool *> (m_var) = var;
+ }
+
+ Using the new abstraction, our initial example becomes:
+
+ switch (c->var_type)
+ {
+ case var_zuinteger:
+ unsigned int v = c->var->get<unsigned int> ();
+ ...
+ break;
+ case var_boolean:
+ bool v = c->var->get<bool> ();
+ ...
+ break;
+ ...
+ }
+
+ While the call site is still similar, the introduction of runtime checks
+ help ensure correct usage of the data.
+
+ In order to avoid turning the bulk of add_setshow_cmd_full into a
+ templated function, and following a suggestion from Pedro Alves, a
+ setting can be constructed from a pre validated type erased reference to
+ a variable. This is what setting::erased_args is used for.
+
+ Introducing an opaque abstraction to describe a setting will also make
+ it possible to use callbacks to retrieve or set the value of the setting
+ on the fly instead of pointing to a static chunk of memory. This will
+ be done added in a later commit.
+
+ Given that a cmd_list_element may or may not reference a setting, the
+ VAR and VAR_TYPES members of the struct are replaced with a
+ gdb::optional<setting> named VAR.
+
+ Few internal function signatures have been modified to take into account
+ this new abstraction:
+
+ -The functions value_from_setting, str_value_from_setting and
+ get_setshow_command_value_string used to have a 'cmd_list_element *'
+ parameter but only used it for the VAR and VAR_TYPE member. They now
+ take a 'const setting &' parameter instead.
+ - Similarly, the 'void *' and a 'enum var_types' parameters of
+ pascm_param_value and gdbpy_parameter_value have been replaced with a
+ 'const setting &' parameter.
+
+ No user visible change is expected after this patch.
+
+ Tested on GNU/Linux x86_64, with no regression noticed.
+
+ Change-Id: Ie1d08c3ceb8b30b3d7bf1efe036eb8acffcd2f34
+
+2021-10-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: filter out SIGSTKSZ [PR sim/28302]
+ We map target signals to host signals so we can propagate signals
+ between the host & simulated worlds. That means we need to know
+ the symbolic names & values of all signals that might be sent.
+
+ The tools that generate that list use signal.h and include all
+ symbols that start with "SIG" so as to automatically include any
+ new symbols that the C library might add. Unfortunately, this
+ also picks up "SIGSTKSZ" which is not actually a signal itself,
+ but a signal related setting -- it's the size of the stack when
+ a signal is handled.
+
+ By itself this doesn't super matter as we will never see a signal
+ with that same value (since the range of valid signals tend to be
+ way less than 1024, and the size of the default signal stack will
+ never be that small). But with recent glibc changes that make this
+ into a dynamic value instead of a compile-time constant, some users
+ see build failures when building the sim.
+
+ As suggested by Adam Sampson, update our scripts to ignore this
+ symbol to simplify everything and avoid the build failure.
+
+ Bug: https://sourceware.org/PR28302
+
+2021-10-03 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: fallback when ln is not available [PR sim/18864]
+ Not all systems have easy access to hard links or symlinks, so add
+ fallback logic to the run->psim build code to handle those.
+
+ Bug: https://sourceware.org/PR18864
+
+2021-10-03 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: Fix comment in riscv_scan_prologue
+ I found an inaccurate comment in riscv_scan_prologue. This commit fixes
+ it.
+
+2021-10-03 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: Support the c.mv insn in the riscv prologue scanner.
+ While working on other problems, I encountered situations where GDB
+ fails to properly unwind the stack because some functions use the C.MV
+ instruction in the prologue. The prologue scanner stops when it hits
+ this instruction assuming its job is done at this point. Unfortunately
+ the prologue is not necessarily finished yet, preventing GDB to properly
+ unwind.
+
+ This commit adds support for handling such instruction in
+ riscv_scan_prologue.
+
+ Note that C.MV is part of the compressed instruction set. The MV
+ counterpart from the base ISA is a pseudo instruction that expands to
+ 'ADDI RD,RS1,0' which is already supported.
+
+ Tested on riscv64-linux-gnu.
+
+ All feedback are welcome.
+
+2021-10-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ [gdb/symtab] Remove COMPUNIT_CALL_SITE_HTAB
+ Remove macro COMPUNIT_CALL_SITE_HTAB, and provide access to the htab using
+ member functions:
+ - compunit_symtab::find_call_site
+ - compunit_symtab::set_call_site_htab
+
+ Tested on x86_64-linux.
+
+ Co-Authored-By: Tom de Vries <tdevries@suse.de>
+
+2021-10-02 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/python: fix a few flake8 warnings
+ Fix these rather obvious warnings reported by flake8:
+
+ ./lib/gdb/FrameIterator.py:16:1: F401 'gdb' imported but unused
+ ./lib/gdb/FrameIterator.py:17:1: F401 'itertools' imported but unused
+ ./lib/gdb/command/prompt.py:55:26: E712 comparison to False should be 'if cond is False:' or 'if not cond:'
+ ./lib/gdb/command/explore.py:526:9: F841 local variable 'has_explorable_fields' is assigned to but never used
+ ./lib/gdb/command/explore.py:697:56: E712 comparison to False should be 'if cond is False:' or 'if not cond:'
+ ./lib/gdb/command/explore.py:736:62: E712 comparison to False should be 'if cond is False:' or 'if not cond:'
+ ./lib/gdb/command/explore.py:767:61: E712 comparison to False should be 'if cond is False:' or 'if not cond:'
+ ./lib/gdb/command/frame_filters.py:21:1: F401 'copy' imported but unused
+ ./lib/gdb/command/frame_filters.py:22:1: F401 'gdb.FrameIterator.FrameIterator' imported but unused
+ ./lib/gdb/command/frame_filters.py:23:1: F401 'gdb.FrameDecorator.FrameDecorator' imported but unused
+ ./lib/gdb/command/frame_filters.py:25:1: F401 'itertools' imported but unused
+ ./lib/gdb/command/frame_filters.py:179:17: E712 comparison to True should be 'if cond is True:' or 'if cond:'
+
+ Change-Id: I4f49c0cb430359ee872222600c61d9c5283b09ab
+
+2021-10-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-10-01 Luis Machado <luis.machado@linaro.org>
+
+ Fix build failure for 32-bit targets
+ When building master GDB, I ran into the following:
+
+ binutils-gdb/gdb/bt-utils.c: In function 'int libbacktrace_print(void*, uintptr_t, const char*, int, const char*)':
+ binutils-gdb/gdb/bt-utils.c:93:44: error: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'uintptr_t {aka unsigned int}' [-Werror=format=]
+ snprintf (buf, sizeof (buf), "0x%lx ", pc);
+
+ Fix this by using %PRIxPTR as opposed to %lx.
+
+2021-10-01 Nick Clifton <nickc@redhat.com>
+
+ Fix mistake in RX assembler documentation (special section names)
+
+2021-10-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ [gdb/symtab] Fix htab_find_slot call in read_call_site_scope
+ In read_call_site_scope we have:
+ ...
+ call_site_local.pc = pc;
+ slot = htab_find_slot (cu->call_site_htab, &call_site_local, INSERT);
+ ...
+
+ The call passes a call_site pointer as element. OTOH, the hashtab is created
+ using hash_f == core_addr_hash and eq_f == core_addr_eq, so the element
+ will be accessed through a CORE_ADDR pointer.
+
+ This is not wrong (at least in C), given that pc is the first field in
+ call_site.
+
+ Nevertheless, as in call_site_for_pc, make the htab_find_slot call match the
+ used hash_f and eq_f by using &pc instead:
+ ...
+ slot = htab_find_slot (cu->call_site_htab, &pc, INSERT);
+ ...
+
+ Tested on x86_64-linux.
+
+ Co-Authored-By: Tom de Vries <tdevries@suse.de>
+
+2021-10-01 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH bfd: Fix linker warning for recently introduced arm attributes
+ 2021-09-27 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf-bfd.h (NUM_KNOWN_OBJ_ATTRIBUTES): Update value to cover
+ 'Tag_BTI_use' and 'Tag_PACRET_use'.
+
+2021-10-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite/dwarf: use options for rnglists/loclists procs
+ Change how rnglists and loclists procs to align them with how procs for
+ aranges (and other things in the DWARF assembler) work. Instead of
+ using "args" (variable number of parameters in TCL) and command-line
+ style option arguments, use one leading "option" parameters, used as a
+ kind of key/value dictionary of options parsed using `parse_options`.
+
+ Change-Id: I63e60d17ae16a020ce4d6de44baf3d152ea42a1a
+
+2021-10-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite/dwarf: don't define nested procs for rnglists/loclists
+ When I wrote support for rnglists and loclists in the testsuite's DWARF
+ assembler, I made it with nested procs, for example proc "table" inside
+ proc "rnglists". The intention was that this proc "table" could only be
+ used by the user while inside proc "rnglists"'s body. I had chosen very
+ simple names, thinking there was no chance of name clashes. I recently
+ learned that this is not how TCL works. This ends up defining a proc
+ "table" in the current namespace ("Dwarf" in this case).
+
+ Things still work if you generate rnglists and loclists in the same
+ file, as each redefines its own procedures when executing. But if a
+ user of the assembler happened to define a convenience "table" or
+ "start_end" procedure, for example, it would get overriden.
+
+ I'd like to change how this works to reduce the chances of a name clash.
+
+ - Move the procs out of each other, so they are not defined in a nested
+ fashion.
+ - Prefix them with "_rnglists_" or "_loclists_".
+ - While calling $body in the various procs, temporarily make the procs
+ available under their "short" name. For example, while in rngllists'
+ body, make _rnglists_table available as just "table". This allows
+ existing code to keep working and keeps it not too verbose.
+ - Modify with_override to allow the overriden proc to not exist. In
+ that case, the temporary proc is deleted on exit.
+
+ Note the non-conforming indentation when calling with_override in
+ _loclists_list. This is on purpose: as we implement more loclists (and
+ rnglists) entry types, the indentation would otherwise get larger and
+ larger without much value for readability. So I think it's reasonable
+ here to put them on the same level.
+
+ Change-Id: I7bb48d26fcb0dba1ae4dada05c0c837212424328
+
+2021-10-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove TYPE_FIELD_NAME and FIELD_NAME macros
+ Remove the `TYPE_FIELD_NAME` and `FIELD_NAME` macros, changing all the
+ call sites to use field::name directly.
+
+ Change-Id: I6900ae4e1ffab1396e24fb3298e94bf123826ca6
+
+2021-10-01 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add field::name / field::set_name
+ Add the `name` and `set_name` methods on `struct field`, in order to
+ remove `FIELD_NAME` and `TYPE_FIELD_NAME` macros. In this patch, the
+ macros are changed to use `field::name`, so all the call sites that are
+ used to set the field's name are changed to use `field::set_name`.
+ The next patch will remove the macros completely.
+
+ Note that because of the name clash between the existing field named
+ `name` and the new method, I renamed the field `m_name`. It is not
+ private per-se, because we can't make `struct field` a non-POD yet, but
+ it should be considered private anyway (not accessed outside `struct
+ field`).
+
+ Change-Id: If16ddbca4e0c39d0ff9da420bb5cdebe5b9b0896
+
+2021-10-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-30 Sergio Durigan Junior <sergiodj@sergiodj.net>
+
+ [PR gdb/28369] Use get_shell on gdb/ser-pipe.c
+ PR gdb/28369 reports that gdb/ser-pipe.c has an 'execl' function call
+ with a hard-coded "/bin/sh" as its argument. We've had 'get_shell'
+ for a while now, which is conscious about the SHELL environment and a
+ better alternative to always calling "/bin/sh".
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28369
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add untested for missing xml support in gdb.base/valgrind*.exp
+ Add untested in case missing xml support is detected in test-cases
+ gdb.base/valgrind*.exp.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ arm: enable Cortex-R52+ CPU
+ Patch is adding Cortex-R52+ as 'cortex-r52plus' command line
+ flag for -mcpu option.
+
+ bfd/
+
+ * cpu-arm.c: New Cortex-R52+ CPU.
+
+ gas/
+
+ * NEWS: Update docs.
+ * config/tc-arm.c: New Cortex-R52+ CPU.
+ * doc/c-arm.texi: Update docs.
+ * testsuite/gas/arm/cpu-cortex-r52plus.d: New test.
+
+2021-09-30 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: Enable Cortex-X2 CPU
+ This patch is adding support for Cortex-X2 CPU.
+
+ gas:
+
+ * NEWS: Update docs.
+ * config/tc-aarch64.c: Add Cortex-X2.
+ * doc/c-aarch64.texi: Update docs.
+
+2021-09-30 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: Enable Cortex-A710 CPU
+ This patch is adding support for Cortex-A710 CPU.
+
+ gas/
+
+ * NEWS: Update docs.
+ * config/tc-aarch64.c: Add Cortex-A710.
+ * doc/c-aarch64.texi: Update docs.
+
+2021-09-30 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: Enable Cortex-A510 CPU
+ This patch is adding support for Cortex-A510 CPU.
+
+ gas/
+
+ * NEWS: Update docs.
+ * config/tc-aarch64.c: Add Cortex-A510.
+ * doc/c-aarch64.texi: Update docs.
+
+2021-09-30 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: Update AArch64 features command line options docs 2/2
+ Patch is only sorting by 'Extension` column 'Architecture Extension'
+ table.
+
+ gas/
+
+ * doc/c-aarch64.texi: Update docs.
+
+2021-09-30 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: Update AArch64 features command line options docs 1/2
+ Patch is improving entries in "Architecture extensions" table in GAS
+ documentation.
+
+ gas/
+
+ * doc/c-aarch64.texi: Update docs.
+
+2021-09-30 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
+
+ aarch64: add armv9-a architecture to -march
+ Patch is adding new 'armv9-a` command line flag to -march for AArch64.
+
+ gas/
+
+ * config/tc-aarch64.c: Add 'armv9-a' command line flag.
+ * docs/c-aarch64.text: Update docs.
+ * NEWS: Update docs.
+
+ include/
+
+ * opcode/aarch64.h (AARCH64_FEATURE_V9): New define.
+ (AARCH64_ARCH_V9): New define.
+
+2021-09-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: make runto_main not pass no-message to runto
+ As follow-up to this discussion:
+
+ https://sourceware.org/pipermail/gdb-patches/2020-August/171385.html
+
+ ... make runto_main not pass no-message to runto. This means that if we
+ fail to run to main, for some reason, we'll emit a FAIL. This is the
+ behavior we want the majority of (if not all) the time.
+
+ Without this, we rely on tests logging a failure if runto_main fails,
+ otherwise. They do so in a very inconsisteny mannet, sometimes using
+ "fail", "unsupported" or "untested". The messages also vary widly.
+ This patch removes all these messages as well.
+
+ Also, remove a few "fail" where we call runto (and not runto_main). by
+ default (without an explicit no-message argument), runto prints a
+ failure already. In two places, gdb.multi/multi-re-run.exp and
+ gdb.python/py-pp-registration.exp, remove "message" passed to runto.
+ This removes a few PASSes that we don't care about (but FAILs will still
+ be printed if we fail to run to where we want to). This aligns their
+ behavior with the rest of the testsuite.
+
+ Change-Id: Ib763c98c5f4fb6898886b635210d7c34bd4b9023
+
+2021-09-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: make gdb_mkostemp_cloexec return a scoped_fd
+ This encourages the callers to use automatic file descriptor management.
+
+ Change-Id: I137a81df6f3607b457e28c35aafde8ed6f3a3344
+
+2021-09-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: make gdb_open_cloexec return scoped_fd
+ Make gdb_open_cloexec return a scoped_fd, to encourage using automatic
+ management of the file descriptor closing. Except in the most trivial
+ cases, I changed the callers to just release the fd, which retains their
+ existing behavior. That will allow the transition to using scoped_fd
+ more to go gradually, one caller at a time.
+
+ Change-Id: Ife022b403f96e71d5ebb4f1056ef6251b30fe554
+
+2021-09-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: move gdb_file_up to its own file
+ The following patches wants to change gdb_fopen_cloexec and
+ gdb_mkostemp_cloexec to return a scoped_fd. Doing this causes a cyclic
+ include between scoped_fd.h and filestuff.h, that both want to include
+ each other. scoped_fd.h includes filestuff.h because of the
+ scoped_fd::to_file method's return value. filestuff.h would then
+ include scoped_fd.h for gdb_fopen_cloexec's and gdb_mkostemp_cloexec's
+ return values.
+
+ To fix that, move gdb_file_up to its own file, gdb_file.h.
+
+ Change-Id: Ic82a48914b2aacee8f14af535b7469245f88b93d
+
+2021-09-30 Dimitar Dimitrov <dimitar@dinux.eu>
+
+ ld: pru: Fix resource_table output section alignment
+ My commit 261980de18b added alignment for the resource table symbol.
+ But it is wrong. The Linux remoteproc driver loads and interprets the
+ contents of the .resource_table ELF section, not of a table symbol.
+
+ Without this patch, if the linker happens to output padding for symbol
+ alignment, then the resource table contents as viewed by the kernel
+ loader would "shift" and look corrupted.
+
+ ld/ChangeLog:
+
+ * scripttempl/pru.sc (.resource_table): Align the output
+ section, not the first symbol.
+
+2021-09-30 Tom Tromey <tromey@adacore.com>
+
+ Fix Windows crash from stop_pc change
+ The "make thread_suspend_state::stop_pc optional" patch caused a
+ regression on Windows when using shared libraries. I tracked this
+ down to an unguarded use of stop_pc() in the TARGET_WAITKIND_LOADED
+ case of handle_inferior_event. This patch fixes the bug by ensuring
+ that the stop PC is set at this point.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use untested in gdb.debuginfod/fetch_src_and_symbols.exp
+ With running test-case gdb.debuginfod/fetch_src_and_symbols.exp with target
+ board unix/-bad, I get:
+ ...
+ gcc: error: unrecognized command line option '-bad'^M
+ compiler exited with status 1
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ FAIL: gdb.debuginfod/fetch_src_and_symbols.exp: compile
+ ...
+
+ Replace the FAIL with the usual:
+ ...
+ UNTESTED: gdb.debuginfod/fetch_src_and_symbols.exp: failed to compile
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Remove redundant FAIL in gdb.base/info-os.exp
+ When running test-case gdb.base/info-os.exp with target board unix/-bad, I run
+ into:
+ ...
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ UNTESTED: gdb.base/info-os.exp: failed to prepare
+ FAIL: gdb.base/info-os.exp: cannot compile test program
+ ...
+
+ Remove the redundant FAIL.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix DUPLICATE in gdb.base/info-os.exp
+ When running test-case gdb.base/info-os.exp, I run into:
+ ...
+ PASS: gdb.base/info-os.exp: get threads
+ PASS: gdb.base/info-os.exp: get threads
+ DUPLICATE: gdb.base/info-os.exp: get threads
+ ...
+
+ Fix this not doing pass followed by exp_continue in gdb_test_multiple.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Check compilation result in gdb.dwarf2/dw2-opt-structptr.exp
+ When running test-case gdb.dwarf2/dw2-opt-structptr.exp with target board
+ unix/-bad, I get:
+ ...
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ UNTESTED: gdb.dwarf2/dw2-opt-structptr.exp: dw2-opt-structptr.exp
+ UNTESTED: gdb.dwarf2/dw2-opt-structptr.exp: failed to compile
+ ERROR: (dw2-opt-structptr) No such file or directory
+ UNRESOLVED: gdb.dwarf2/dw2-opt-structptr.exp: console: set print object on
+ ...
+
+ Merge the two UNTESTEDs.
+
+ Fix the UNRESOLVED by checking result of compilation.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Check compilation result in gdb.base/structs.exp
+ When running test-case gdb.base/structs.exp with target board unix/-bad, I
+ get:
+ ...
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ UNTESTED: gdb.base/structs.exp: failed to prepare
+ ERROR: tcl error sourcing src/gdb/testsuite/gdb.base/structs.exp.
+ ERROR: can't read "use_gdb_stub": no such variable
+ ...
+
+ Fix this by checking the compilation result.
+
+ Fix the resulting DUPLICATEs using with_test_prefix.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Prepare nodebug exec in gdb.base/cvexpr.exp
+ When running test-case gdb.base/cvexpr.exp with target board unix/-bad, I get:
+ ...
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ ERROR: tcl error sourcing src/gdb/testsuite/gdb.base/cvexpr.exp.
+ ERROR: can't read "use_gdb_stub": no such variable
+ ...
+
+ This is triggered in a part of the test that claims to require no debug
+ information, but uses the exec containing either dwarf or ctf.
+
+ Fix this by preparing another executable compiled with nodebug, and using
+ that one instead.
+
+ Also use with_test_prefix to mark the nodebug part, such that we have:
+ ...
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ UNTESTED: gdb.base/cvexpr.exp: dwarf: failed to prepare
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ UNTESTED: gdb.base/cvexpr.exp: nodebug: failed to prepare
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix DUPLICATE in gdb.base/cvexpr.exp
+ Fix:
+ ...
+ DUPLICATE: gdb.base/cvexpr.exp: ptype int * restrict
+ ...
+ using with_test_prefix.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Check compilation result in gdb.base/call-sc.exp
+ When running test-case gdb.base/call-sc.exp with target board unix/-bad, I
+ get:
+ ...
+ gdb compile failed, gcc: error: unrecognized command line option '-bad'
+ UNTESTED: gdb.base/call-sc.exp: failed to prepare
+ ERROR: tcl error sourcing src/gdb/testsuite/gdb.base/call-sc.exp.
+ ERROR: can't read "use_gdb_stub": no such variable
+ ...
+
+ Fix this by checking the compilation result.
+
+ Fix the resulting DUPLICATE:
+ ...
+ DUPLICATE: gdb.base/call-sc.exp: failed to prepare
+ ...
+ using with_test_prefix.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix untested messages in gdb.mi/*.exp
+ The effect of:
+ ...
+ untested "y.exp"
+ ...
+ in a gdb.x/y.exp is:
+ ...
+ UNTESTED: gdb.x/y.exp: y.exp
+ ...
+ which is a bit pointless.
+
+ Replace these untested messages in gdb.mi/*.exp with the usual "failed to
+ compile".
+
+ Likewise for an:
+ ...
+ untested $testname
+ ...
+ where the variable is undefined.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Nick Clifton <nickc@redhat.com>
+
+ make objcopy fail if it is asked to redefine symbols in an object file containing LTO information.
+ * objcopy.c (filter_symbols): Fail if attempting to dredefine
+ symbols in an LTO object file.
+
+2021-09-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix full buffer in gdb.rust/dwindex.exp
+ On ubuntu 18.04.5, I run into:
+ ...
+ (gdb) mt print objfiles dwindex^M
+ ^M
+ Object file build/gdb/testsuite/outputs/gdb.rust/dwindex/dwindex: \
+ Objfile at 0x55dab0b87a50, bfd at 0x55dab0b0cfa0, 1095 minsyms^M
+ ^M
+ Psymtabs:^M
+ vendor/compiler_builtins/src/int/specialized_div_rem/mod.rs at 0x55dab0db0720^M
+ ...
+ library/std/src/sys/unix/stdio.rs at 0x55dab0d96320^M
+ ERROR: internal buffer is full.
+ UNRESOLVED: gdb.rust/dwindex.exp: check if index present
+ ...
+
+ Fix this by using -lbl in proc ensure_gdb_index.
+
+ Tested on x86_64-linux.
+
+2021-09-30 Libor Bukata <libor.bukata@oracle.com>
+
+ Add Solaris specific ELF note processing
+ Add elfcore_grok_solaris_note function that enables to
+ obtain process status, register values, and program info
+ from Solaris's core files.
+
+ bfd/
+ * elf.c (elfcore_grok_solaris_note): Solaris specific ELF
+ note parser. Better GDB's coredump analysis on Solaris...
+ (elfcore_grok_solaris_note_impl): New function.
+ (elfcore_grok_solaris_prstatus): New function.
+ (elfcore_grok_solaris_info): New function.
+ (elfcore_grok_solaris_lwpstatus): New function.
+ (elf_parse_notes): Added "CORE" groker element.
+ include/
+ * elf/common.h: Add note segment constants for core files on
+ Solaris systems.
+
+2021-09-30 Frederic Cambus <fred@statdns.com>
+
+ Add support to readelf for reading OpenBSD ELF core notes.
+ * readelf.c (get_openbsd_elfcore_note_type): New function.
+ (process_note): Add support for OpenBSD core notes.
+
+2021-09-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/break-interp.exp for ld.so without debug
+ When running test-case gdb.base/break-interp.exp on openSUSE Leap 42.3, I get:
+ ...
+ (gdb) info addr dl_main^M
+ Symbol "dl_main" is at 0x1750 in a file compiled without debugging.^M
+ (gdb) FAIL: gdb.base/break-interp.exp: info addr dl_main
+ ...
+ while the regexp expects "Symbol \"dl_main\" is a function at address $hex\\."
+
+ Fix this by also accepting this variant.
+
+ Tested on x86_64-linux.
+
+2021-09-29 H.J. Lu <hjl.tools@gmail.com>
+
+ Add a testcase for PR binutils/27202
+ PR binutils/27202
+ * testsuite/gas/elf/dwarf-5-loc0.d: New file.
+ * testsuite/gas/elf/dwarf-5-loc0.s: Likewise.
+ * testsuite/gas/elf/elf.exp: Run dwarf-5-loc0.
+
+2021-09-29 Pedro Alves <pedro@palves.net>
+
+ Fix gdb.multi/multi-term-settings.exp race
+ The gdb.multi/multi-term-settings.exp testcase sometimes fails like so:
+
+ Running /home/pedro/gdb/mygit/src/gdb/testsuite/gdb.multi/multi-term-settings.exp ...
+ FAIL: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: stop with control-c (SIGINT)
+
+ It's easier to reproduce if you stress the machine at the same time, like e.g.:
+
+ $ stress -c 24
+
+ Looking at gdb.log, we see:
+
+ (gdb) attach 60422
+ Attaching to program: build/gdb/testsuite/outputs/gdb.multi/multi-term-settings/multi-term-settings, process 60422
+ [New Thread 60422.60422]
+ Reading symbols from /lib/x86_64-linux-gnu/libc.so.6...
+ Reading symbols from /usr/lib/debug//lib/x86_64-linux-gnu/libc-2.31.so...
+ Reading symbols from /lib64/ld-linux-x86-64.so.2...
+ (No debugging symbols found in /lib64/ld-linux-x86-64.so.2)
+ 0x00007f2fc2485334 in __GI___clock_nanosleep (clock_id=<optimized out>, clock_id@entry <mailto:clock_id@entry>=0, flags=flags@entry <mailto:flags@entry>=0, req=req@entry <mailto:req@entry>=0x7ffe23126940, rem=rem@entry <mailto:rem@entry>=0x0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
+ 78 ../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory.
+ (gdb) PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: inf2: attach
+ set schedule-multiple on
+ (gdb) PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: set schedule-multiple on
+ info inferiors
+ Num Description Connection Executable
+ 1 process 60404 1 (extended-remote localhost:2349) build/gdb/testsuite/outputs/gdb.multi/multi-term-settings/multi-term-settings
+ * 2 process 60422 1 (extended-remote localhost:2349) build/gdb/testsuite/outputs/gdb.multi/multi-term-settings/multi-term-settings
+ (gdb) PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: info inferiors
+ pid=60422, count=46
+ pid=60422, count=47
+ pid=60422, count=48
+ pid=60422, count=49
+ pid=60422, count=50
+ pid=60422, count=51
+ pid=60422, count=52
+ pid=60422, count=53
+ pid=60422, count=54
+ pid=60422, count=55
+ pid=60422, count=56
+ pid=60422, count=57
+ pid=60422, count=58
+ pid=60422, count=59
+ pid=60422, count=60
+ pid=60422, count=61
+ pid=60422, count=62
+ pid=60422, count=63
+ pid=60422, count=64
+ pid=60422, count=65
+ pid=60422, count=66
+ pid=60422, count=67
+ pid=60422, count=68
+ pid=60422, count=69
+ pid=60404, count=54
+ pid=60404, count=55
+ pid=60404, count=56
+ pid=60404, count=57
+ pid=60404, count=58
+ PASS: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: continue
+ Quit
+ (gdb) FAIL: gdb.multi/multi-term-settings.exp: inf1_how=attach: inf2_how=attach: stop with control-c (SIGINT)
+
+ If you look at the testcase's sources, you'll see that the intention
+ is to resumes the program with "continue", wait to see a few of those
+ "pid=..., count=..." lines, and then interrupt the program with
+ Ctrl-C. But somehow, that resulted in GDB printing "Quit", instead of
+ the Ctrl-C stopping the program with SIGINT.
+
+ Here's what is happening:
+
+ #1 - those "pid=..., count=..." lines we see above weren't actually
+ output by the inferior after it has been continued (see #1).
+ Note that "inf1_how" and "inf2_how" are "attach". What happened
+ is that those "pid=..., count=..." lines were output by the
+ inferiors _before_ they were attached to. We see them at that
+ point instead of earlier, because that's where the testcase
+ reads from the inferiors' spawn_ids.
+
+ #2 - The testcase mistakenly thinks those "pid=..., count=..." lines
+ happened after the continue was processed by GDB, meaning it has
+ waited enough, and so sends the Ctrl-C. GDB hasn't yet passed
+ the terminal to the inferior, so the Ctrl-C results in that
+ Quit.
+
+ The fix here is twofold:
+
+ #1 - flush inferior output right after attaching
+
+ #2 - consume the "Continuing" printed by "continue", indicating the
+ inferior has the terminal. This is the same as done throughout
+ the testsuite to handle this exact problem of sending Ctrl-C too
+ soon.
+
+ gdb/testsuite/ChangeLog:
+ yyyy-mm-dd Pedro Alves <pedro@palves.net <mailto:pedro@palves.net>>
+
+ * gdb.multi/multi-term-settings.exp (create_inferior): Flush
+ inferior output.
+ (coretest): Use $gdb_test_name. After issuing "continue", wait
+ for "Continuing".
+
+ Change-Id: Iba7671dfe1eee6b98d29cfdb05a1b9aa2f9defb9
+
+2021-09-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Disable vgdb tests if xml not supported
+ I build gdb without xml support using --without-expat, and ran into:
+ ...
+ (gdb) target remote | vgdb --wait=2 --max-invoke-ms=2500 --pid=22032^M
+ Remote debugging using | vgdb --wait=2 --max-invoke-ms=2500 --pid=22032^M
+ relaying data between gdb and process 22032^M
+ warning: Can not parse XML target description; XML support was disabled at \
+ compile time^M
+ ...
+ (gdb) PASS: gdb.base/valgrind-infcall.exp: continue #1
+ p gdb_test_infcall ()^M
+ Remote 'g' packet reply is too long (expected 560 bytes, got 800 bytes): ...^M
+ (gdb) FAIL: gdb.base/valgrind-infcall.exp: p gdb_test_infcall ()
+ ...
+
+ After googling the error message with context valgrind gdbserver, I found
+ indications that the Remote 'g' packet reply error is due to missing xml
+ support.
+
+ And here ( https://www.valgrind.org/docs/manual/manual-core-adv.html ) I
+ found:
+ ...
+ GDB version needed for ARM and PPC32/64.
+
+ You must use a GDB version which is able to read XML target description sent
+ by a gdbserver. This is the standard setup if GDB was configured and built
+ with the "expat" library. If your GDB was not configured with XML support, it
+ will report an error message when using the "target" command. Debugging will
+ not work because GDB will then not be able to fetch the registers from the
+ Valgrind gdbserver.
+ ...
+
+ So I guess I'm running into the same problem for x86_64.
+
+ Fix this by skipping all gdb.base/valgrind-*.exp tests if xml support is not
+ available. Although only the gdb.base/valgrind-infcall*.exp produce fails,
+ the Remote 'g' packet reply error occurs in all tests, so it seems prudent to
+ disable them all.
+
+ Tested on x86_64-linux.
+
+2021-09-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.python/py-breakpoint.exp with python 2
+ With a gdb build using python 2.7, I run into:
+ ...
+ (gdb) python \
+ gdb.events.breakpoint_modified.connect(lambda bp: print(bp.enabled))^M
+ File "<string>", line 1^M
+ gdb.events.breakpoint_modified.connect(lambda bp: print(bp.enabled))^M
+ ^^M
+ SyntaxError: invalid syntax^M
+ Error while executing Python code.^M
+ (gdb) FAIL: gdb.python/py-breakpoint.exp: test_bkpt_auto_disable: \
+ trap breakpoint_modified event
+ ...
+
+ This is caused by the following:
+ - a lambda function body needs to be an expression
+ - in python 2, print is a statement, while in python 3 it's a function
+ - a function call is an expression, and a statement is not.
+
+ Fix this by defining a function print_bp_enabled:
+ ...
+ def print_bp_enabled (bp):
+ print (bp.enabled)
+ end
+ ...
+ and using that instead.
+
+ Tested on x86_64-linux.
+
+2021-09-29 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix breakpoint detection in gdb.gdb/python-helper.exp
+ With a gdb configured to be somewhat minimal, while still supporting python:
+ ...
+ $ gdb --configuration
+ This GDB was configured as follows:
+ configure --host=x86_64-pc-linux-gnu --target=x86_64-pc-linux-gnu
+ --with-auto-load-dir=$debugdir:$datadir/auto-load
+ --with-auto-load-safe-path=$debugdir:$datadir/auto-load
+ --without-expat
+ --with-gdb-datadir=$install/share/gdb (relocatable)
+ --with-jit-reader-dir=$install/lib64/gdb (relocatable)
+ --without-libunwind-ia64
+ --without-lzma
+ --without-babeltrace
+ --without-intel-pt
+ --with-mpfr
+ --without-xxhash
+ --with-python=/usr
+ --with-python-libdir=/usr/lib
+ --with-debuginfod
+ --without-guile
+ --disable-source-highlight
+ --with-separate-debug-dir=/usr/lib/debug
+ --with-system-gdbinit=$devel/system-gdbinit
+ ...
+ and using gcc 4.8 to build gdb (causing std::thread not to be used due to
+ PR28318) I ran into:
+ ...
+ (gdb) PASS: gdb.gdb/python-helper.exp: start inner gdb
+ print 1^M
+ ^M
+ Breakpoint 2, value_print () at src/gdb/valprint.c:1174^M
+ 1174 scoped_value_mark free_values;^M
+ (xgdb) FAIL: gdb.gdb/python-helper.exp: hit breakpoint in inner gdb (timeout)
+ ...
+
+ The problem is that the regexp expects "hit Breakpoint $decimal". The "hit"
+ part is missing.
+
+ The "hit" is printed by maybe_print_thread_hit_breakpoint, when
+ show_thread_that_caused_stop returns true:
+ ...
+ int
+ show_thread_that_caused_stop (void)
+ {
+ return highest_thread_num > 1;
+ }
+ ...
+ Apparently, that's not the case.
+
+ Fix this by removing "hit" from the regexp, making the regexp more similar to
+ what is used in say, continue_to_breakpoint.
+
+ Tested on x86_64-linux.
+
+2021-09-29 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: fix build when libbacktrace and execinfo backtrace are not available
+ In this commit:
+
+ commit abbbd4a3e0ca51132e7fb31a43f896d29894dae0
+ Date: Wed Aug 11 13:24:33 2021 +0100
+
+ gdb: use libbacktrace to create a better backtrace for fatal signals
+
+ The build of GDB was broken iff, the execinfo backtrace API is not
+ available, and, libbacktrace is either disabled, or not usable. In
+ this case you'll see build errors like this:
+
+ CXX bt-utils.o
+ /home/username/src/binutils-gdb/gdb/bt-utils.c: In function 'void gdb_internal_backtrace()':
+ /home/username/src/binutils-gdb/gdb/bt-utils.c:165:5: error: 'gdb_internal_backtrace_1' was not declared in this scope
+ gdb_internal_backtrace_1 ();
+ ^~~~~~~~~~~~~~~~~~~~~~~~
+
+ This commit fixes the issue by guarding the call to
+ gdb_internal_backtrace_1 with '#ifdef GDB_PRINT_INTERNAL_BACKTRACE',
+ which is only defined when one of the backtrace libraries are
+ available.
+
+2021-09-29 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/doc: use 'standard error stream' instead of 'stderr' in some places
+ With this commit:
+
+ commit 91f2597bd24d171c1337a4629f8237aa47c59082
+ Date: Thu Aug 12 18:24:59 2021 +0100
+
+ gdb: print backtrace for internal error/warning
+
+ I included some references to 'stderr', which, it was pointed out,
+ would be better written as 'standard error stream'. See:
+
+ https://sourceware.org/pipermail/gdb-patches/2021-September/182225.html
+
+ This commit replaces the two instances of 'stderr' that I introduced.
+
+2021-09-29 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: fix manor -> manner typo in some comments
+ In a recent commit I used 'manor' in some comments rather than
+ 'manner'. This commit fixes those two mistakes.
+
+ I also looked through the gdb/ tree and found one additional instance
+ of this mistake that this commit also fixes.
+
+2021-09-29 Alan Modra <amodra@gmail.com>
+
+ PR27202, readelf -wL doesn't work on ".loc 0"
+ For DWARF revision 4 and earlier, display_debug_lines_decoded
+ populates the file_table array with entries read from .debug_line
+ after the directory table. file_table[0] contains the first entry.
+ DWARF rev 4 line number programs index this entry as file number one.
+ DWARF revision 5 changes .debug_line format quite extensively, and in
+ particular gives file number zero a meaning.
+
+ PR 27202
+ * dwarf.c (display_debug_lines_decoded): Correct indexing used
+ for DWARF5 files.
+
+2021-09-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: enable target_async around stop_all_threads call in process_initial_stop_replies
+ The following scenario hangs:
+
+ - maint set target-non-stop on
+ - `gdbserver --attach`
+ - a multi-threaded program
+
+ For example:
+
+ Terminal 1:
+
+ $ gnome-calculator&
+ [1] 495731
+ $ ../gdbserver/gdbserver --once --attach :1234 495731
+ Attached; pid = 495731
+ Listening on port 1234
+
+ Terminal 2:
+
+ $ ./gdb -nx -q --data-directory=data-directory /usr/bin/gnome-calculator -ex "maint set target-non-stop on" -ex "tar rem :1234"
+ Reading symbols from /usr/bin/gnome-calculator...
+ (No debugging symbols found in /usr/bin/gnome-calculator)
+ Remote debugging using :1234
+ * hangs *
+
+ What happens is:
+
+ - The protocol between gdb and gdbserver is in non-stop mode, but the
+ user-visible behavior is all-stop
+ - On connect, gdbserver sends one stop reply for one thread that is
+ stops, the others stay running
+ - In process_initial_stop_replies, gdb calls stop_all_threads to stop
+ these other threads, because we are using the all-stop user-visible
+ mode
+ - stop_all_threads sends a stop request for all the running threads and
+ then waits for resulting events
+ - At this point, the remote target is in target_async(0) mode, which
+ makes stop_all_threads not consider it for events
+ - stop_all_threads loops indefinitely (it does not even block
+ indefinitely, it is in an infinite busy loop) because there are no
+ event sources. wait_one_event returns a TARGET_WAITKIND_NO_RESUMED
+ wait status.
+
+ Fix that by making the remote target async around the stop_all_threads
+ call.
+
+ I haven't implemented it because I'm not sure how to do it, but I think
+ it would be a good idea to have, in stop_all_threads / wait_one /
+ handle_one, an assert to check that if we are expecting one or more
+ event, then there are some targets that are in a state where they can
+ supply some events. Otherwise, we'll necessarily be stuck in this
+ infinite loop, and it's probably due to a bug in GDB. I'm not too sure
+ where to put this or how to express it though. Perhaps in
+ stop_all_threads, here:
+
+ for (int i = 0; i < waits_needed; i++)
+ {
+ wait_one_event event = wait_one ();
+ *here*
+ if (handle_one (event))
+ break;
+ }
+
+ If at that point, the returned event is TARGET_WAITKIND_NO_RESUMED,
+ there's a problem. We expect some event, because we've asked some
+ threads to stop, but all targets are answering that they won't have any
+ events for us. That's a contradiction, and a sign that something has
+ gone wrong. It could perhaps event be:
+
+ gdb_assert (event.ws.kind != TARGET_WAITKIND_NO_RESUMED);
+
+ in handle_one, as the idea is the same in prepare_for_detach.
+
+ A bit more sophisticated would be: we know which targets we are
+ expecting waits from, since we know which threads we have asked to
+ stop. So if any of these targets returns TARGET_WAITKIND_NO_RESUMED,
+ something is fishy.
+
+ Add a test that tests attaching with gdbserver's --attach flag to a
+ multi-threaded program, and then connecting to it. Without the fix, the
+ test reproduces the hang.
+
+ Change-Id: If6f6690a4887ca66693ef1af64791dda4c65f24f
+
+2021-09-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix darwin-nat build (again)
+ I made a mistake in the previous patch. Adjust the format string to
+ match the arguments.
+
+ Change-Id: I4d45e0e0adb78eb3b5a06ba1a5287155940056ba
+
+2021-09-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix darwin-nat build
+ There are two errors of this kind:
+
+ CXX darwin-nat.o
+ /Users/smarchi/src/binutils-gdb/gdb/darwin-nat.c:1175:19: error: format specifies type 'unsigned long' but the argument has type 'ULONGEST' (aka 'unsigned long long') [-Werror,-Wformat]
+ ptid.pid (), ptid.tid ());
+ ^~~~~~~~~~~
+
+ Fix them by using ptid_t's to_string method.
+
+ Change-Id: I52087d5f7ee0fc01ac8b3f87d4db0217cb0d7cc7
+
+2021-09-29 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb.base/foll-fork.exp: accept "info breakpoints" output in any order
+ The test currently requires the "inf 1" breakpoint to be before the "inf
+ 2" breakpoint. This is not always the case:
+
+ info breakpoints 2
+ Num Type Disp Enb Address What
+ 2 breakpoint keep y <MULTIPLE>
+ 2.1 y 0x0000555555554730 in callee at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:9 inf 2
+ 2.2 y 0x0000555555554730 in callee at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/foll-fork.c:9 inf 1
+ (gdb) FAIL: gdb.base/foll-fork.exp: follow-fork-mode=parent: detach-on-fork=off: cmd=next 2: test_follow_fork: info breakpoints
+
+ Since add_location_to_breakpoint uses only the address as a criterion to
+ sort locations, the order of locations at the same address is not
+ stable: it will depend on the insertion order. Here, the insertion
+ order comes from the order of SALs when creating the breakpoint, which
+ can vary from machine to machine. While it would be more user-friendly
+ to have a more stable order for printed breakpoint locations, it doesn't
+ really matter for this test, and it would be hard to define an order
+ that will be the same everywhere, all the time.
+
+ So, loosen the regexp to accept "inf 1" and "inf 2" in any order.
+
+ Co-Authored-By: Pedro Alves <pedro@palves.net>
+ Change-Id: I5ada2e0c6ad0669e0d161bfb6b767229c0970d16
+
+2021-09-28 Cooper Qu <cooper.qu@linux.alibaba.com>
+
+ RISC-V: Fix wrong version number when arch contains 'p'.
+ When specify a default version for p extension in
+ riscv_supported_std_ext[](elfxx-riscv.c) and assembling with
+ -march=rv32imacp, the c extension's version in attribute will become
+ 0p0, the expectation is 2p0.
+
+ TODO: Remember to add testcase when we have supported standrad p in
+ the future.
+
+ bfd/
+ PR gas/28372
+ * elfxx-riscv.c (riscv_parsing_subset_version): Break if p
+ represent the 'p' extension.
+
+ Change-Id: Ia4e0cf26f3d7d07acaee8cefd86707ecac663a59
+
+2021-09-28 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Allow to add numbers in the prefixed extension names.
+ We need to allow adding numbers in the prefixed extension names, since
+ the zve<32,64><d,f,x> extensions are included in the forzen rvv v1.0 spec
+ recently. But there are two restrictions as follows,
+
+ * The extension name ends with <number>p is invalid, since this may
+ be confused with extension with <number>.0 version. We report errors
+ for this case.
+
+ Invalid format: [z|h|s|zvm|x][0-9a-z]+[0-9]+p
+
+ * The extension name ends with numbers is valid, but the numbers will
+ be parsed as major version, so try to avoid naming extensions like this.
+
+ bfd/
+ * elfxx-riscv.c (riscv_recognized_prefixed_ext): Renamed from
+ riscv_valid_prefixed_ext/
+ (riscv_parsing_subset_version): The extensions end with <number>p
+ is forbidden, we already report the detailed errors in the
+ riscv_parse_prefixed_ext, so clean the code and unused parameters.
+ (riscv_parse_std_ext): Updated.
+ (riscv_parse_prefixed_ext): Rewrite the parser to allow numbers
+ in the prefixed extension names.
+ gas/
+ * testsuite/gas/riscv/march-fail-invalid-x-01.d: New testcases.
+ * testsuite/gas/riscv/march-fail-invalid-x-02.d: Likewise.
+ * testsuite/gas/riscv/march-fail-invalid-z-01.d: Likewise.
+ * testsuite/gas/riscv/march-fail-invalid-z-02.d: Likewise.
+ * testsuite/gas/riscv/march-fail-invalid.l: Likewise.
+ * testsuite/gas/riscv/march-fail-version-x.d: Removed.
+ * testsuite/gas/riscv/march-fail-version-z.d: Likewise.
+ * testsuite/gas/riscv/march-fail-version.l: Likewise.
+
+2021-09-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: print backtrace for internal error/warning
+ This commit builds on previous work to allow GDB to print a backtrace
+ of itself when GDB encounters an internal-error or internal-warning.
+ This fixes PR gdb/26377.
+
+ There's not many places where we call internal_warning, and I guess in
+ most cases the user would probably continue their debug session. And
+ so, in order to avoid cluttering up the output, by default, printing
+ of a backtrace is off for internal-warnings.
+
+ In contrast, printing of a backtrace is on by default for
+ internal-errors, as I figure that in most cases hitting an
+ internal-error is going to be the end of the debug session.
+
+ Whether a backtrace is printed or not can be controlled with the new
+ settings:
+
+ maintenance set internal-error backtrace on|off
+ maintenance show internal-error backtrace
+
+ maintenance set internal-warning backtrace on|off
+ maintenance show internal-warning backtrace
+
+ Here is an example of what an internal-error now looks like with the
+ backtrace included:
+
+ (gdb) maintenance internal-error blah
+ ../../src.dev-3/gdb/maint.c:82: internal-error: blah
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ ----- Backtrace -----
+ 0x5c61ca gdb_internal_backtrace_1
+ ../../src.dev-3/gdb/bt-utils.c:123
+ 0x5c626d _Z22gdb_internal_backtracev
+ ../../src.dev-3/gdb/bt-utils.c:165
+ 0xe33237 internal_vproblem
+ ../../src.dev-3/gdb/utils.c:393
+ 0xe33539 _Z15internal_verrorPKciS0_P13__va_list_tag
+ ../../src.dev-3/gdb/utils.c:470
+ 0x1549652 _Z14internal_errorPKciS0_z
+ ../../src.dev-3/gdbsupport/errors.cc:55
+ 0x9c7982 maintenance_internal_error
+ ../../src.dev-3/gdb/maint.c:82
+ 0x636f57 do_simple_func
+ ../../src.dev-3/gdb/cli/cli-decode.c:97
+ .... snip, lots more backtrace lines ....
+ ---------------------
+ ../../src.dev-3/gdb/maint.c:82: internal-error: blah
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Quit this debugging session? (y or n) y
+
+ This is a bug, please report it. For instructions, see:
+ <https://www.gnu.org/software/gdb/bugs/>.
+
+ ../../src.dev-3/gdb/maint.c:82: internal-error: blah
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Create a core file of GDB? (y or n) n
+
+ My hope is that this backtrace might make it slightly easier to
+ diagnose GDB issues if all that is provided is the console output, I
+ find that we frequently get reports of an assert being hit that is
+ located in pretty generic code (frame.c, value.c, etc) and it is not
+ always obvious how we might have arrived at the assert.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=26377
+
+2021-09-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: use libbacktrace to create a better backtrace for fatal signals
+ GDB recently gained the ability to print a backtrace when a fatal
+ signal is encountered. This backtrace is produced using the backtrace
+ and backtrace_symbols_fd API available in glibc.
+
+ However, in order for this API to actually map addresses to symbol
+ names it is required that the application (GDB) be compiled with
+ -rdynamic, which GDB is not by default.
+
+ As a result, the backtrace produced often looks like this:
+
+ Fatal signal: Bus error
+ ----- Backtrace -----
+ ./gdb/gdb[0x80ec00]
+ ./gdb/gdb[0x80ed56]
+ /lib64/libc.so.6(+0x3c6b0)[0x7fc2ce1936b0]
+ /lib64/libc.so.6(__poll+0x4f)[0x7fc2ce24da5f]
+ ./gdb/gdb[0x15495ba]
+ ./gdb/gdb[0x15489b8]
+ ./gdb/gdb[0x9b794d]
+ ./gdb/gdb[0x9b7a6d]
+ ./gdb/gdb[0x9b943b]
+ ./gdb/gdb[0x9b94a1]
+ ./gdb/gdb[0x4175dd]
+ /lib64/libc.so.6(__libc_start_main+0xf3)[0x7fc2ce17e1a3]
+ ./gdb/gdb[0x4174de]
+ ---------------------
+
+ This is OK if you have access to the exact same build of GDB, you can
+ manually map the addresses back to symbols, however, it is next to
+ useless if all you have is a backtrace copied into a bug report.
+
+ GCC uses libbacktrace for printing a backtrace when it encounters an
+ error. In recent commits I added this library into the binutils-gdb
+ repository, and in this commit I allow this library to be used by
+ GDB. Now (when GDB is compiled with debug information) the backtrace
+ looks like this:
+
+ ----- Backtrace -----
+ 0x80ee08 gdb_internal_backtrace
+ ../../src/gdb/event-top.c:989
+ 0x80ef0b handle_fatal_signal
+ ../../src/gdb/event-top.c:1036
+ 0x7f24539dd6af ???
+ 0x7f2453a97a5f ???
+ 0x154976f gdb_wait_for_event
+ ../../src/gdbsupport/event-loop.cc:613
+ 0x1548b6d _Z16gdb_do_one_eventv
+ ../../src/gdbsupport/event-loop.cc:237
+ 0x9b7b02 start_event_loop
+ ../../src/gdb/main.c:421
+ 0x9b7c22 captured_command_loop
+ ../../src/gdb/main.c:481
+ 0x9b95f0 captured_main
+ ../../src/gdb/main.c:1353
+ 0x9b9656 _Z8gdb_mainP18captured_main_args
+ ../../src/gdb/main.c:1368
+ 0x4175ec main
+ ../../src/gdb/gdb.c:32
+ ---------------------
+
+ Which seems much more useful.
+
+ Use of libbacktrace is optional. If GDB is configured with
+ --disable-libbacktrace then the libbacktrace directory will not be
+ built, and GDB will not try to use this library. In this case GDB
+ would try to use the old backtrace and backtrace_symbols_fd API.
+
+ All of the functions related to writing the backtrace of GDB itself
+ have been moved into the new files gdb/by-utils.{c,h}.
+
+2021-09-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ src-release.sh: add libbacktrace to GDB_SUPPORT_DIRS
+ After the previous commit that imported libbacktrace from gcc, this
+ commit updates src-release.sh so that the libbacktrace directory is
+ included in the gdb release tar file.
+
+ ChangeLog:
+
+ * src-release.sh (GDB_SUPPPORT_DIRS): Add libbacktrace.
+
+2021-09-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ Copy in libbacktrace from gcc
+ This copies in libbacktrace from the gcc repository as it was in the
+ commit 62e420293a293608f383d9b9c7f2debd666e9fc9. GDB is going to
+ start using this library soon.
+
+ A dependency between GDB and libbacktrace has already been added to
+ the top level Makefile, so, after this commit, when building GDB,
+ libbacktrace will be built first. However, libbacktrace is not yet
+ linked into GDB, or used by GDB in any way.
+
+ It is possible to stop libbacktrace being built by configuring the
+ tree with --disable-libbacktrace.
+
+ This commit does NOT update src-release.sh, that will be done in the
+ next commit, this commit ONLY imports libbacktrace from gcc. This
+ means that if you try to make a release of GDB from exactly this
+ commit then the release tar file will not include libbacktrace.
+ However, as libbacktrace is an optional dependency this is fine.
+
+2021-09-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: Add a dependency between gdb and libbacktrace
+ GDB is going to start using libbacktrace, so add a build dependency.
+
+ ChangeLog:
+
+ * Makefile.def: Add all-gdb dependency on all-libbacktrace.
+ * Makefile.in: Regenerate.
+
+2021-09-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ top-level configure: setup target_configdirs based on repository
+ The top-level configure script is shared between the gcc repository
+ and the binutils-gdb repository.
+
+ The target_configdirs variable in the configure.ac script, defines
+ sub-directories that contain components that should be built for the
+ target using the target tools.
+
+ Some components, e.g. zlib, are built as both host and target
+ libraries.
+
+ This causes problems for binutils-gdb. If we run 'make all' in the
+ binutils-gdb repository we end up trying to build a target version of
+ the zlib library, which requires the target compiler be available.
+ Often the target compiler isn't immediately available, and so the
+ build fails.
+
+ The problem with zlib impacted a previous attempt to synchronise the
+ top-level configure scripts from gcc to binutils-gdb, see this thread:
+
+ https://sourceware.org/pipermail/binutils/2019-May/107094.html
+
+ And I'm in the process of importing libbacktrace in to binutils-gdb,
+ which is also a host and target library, and triggers the same issues.
+
+ I believe that for binutils-gdb, at least at the moment, there are no
+ target libraries that we need to build.
+
+ In the configure script we build three lists of things we want to
+ build, $configdirs, $build_configdirs, and $target_configdirs, we also
+ build two lists of things we don't want to build, $skipdirs and
+ $noconfigdirs. We then remove anything that is in the lists of things
+ not to build, from the list of things that should be built.
+
+ My proposal is to add everything in target_configdirs into skipdirs,
+ if the source tree doesn't contain a gcc/ sub-directory. The result
+ is that for binutils-gdb no target tools or libraries will be built,
+ while for the gcc repository, nothing should change.
+
+ If a user builds a unified source tree, then the target tools and
+ libraries should still be built as the gcc/ directory will be present.
+
+ I've tested a build of gcc on x86-64, and the same set of target
+ libraries still seem to get built. On binutils-gdb this change
+ resolves the issues with 'make all'.
+
+ ChangeLog:
+
+ * configure: Regenerate.
+ * configure.ac (skipdirs): Add the contents of target_configdirs if
+ we are not building gcc.
+
+2021-09-28 Gleb Fotengauer-Malinovskiy <glebfm@altlinux.org>
+
+ PR28391, strip/objcopy --preserve-dates *.a: cannot set time
+ After commit 985e0264516 copy_archive function began to pass invalid
+ values to the utimensat(2) function when it tries to preserve
+ timestamps in ar archives. This happens because the bfd_stat_arch_elt
+ implementation for ar archives fills only the st_mtim.tv_sec part of
+ the st_mtim timespec structure, but leaves the st_mtim.tv_nsec part
+ and the whole st_atim timespec untouched leaving them uninitialized
+
+ PR 28391
+ * ar.c (extract_file): Clear buf for preserve_dates.
+ * objcopy.c (copy_archive): Likewise.
+
+2021-09-28 Mike Frysinger <vapier@gentoo.org>
+
+ sim: drop weak func attrs on module inits
+ When I first wrote this, I was thinking we'd scan all source files
+ that existed and generate a complete init list. That means for any
+ particular build, we'd probably have a few functions that didn't
+ exist, so weak attributes was necessary. What I ended up scanning
+ though was only the source files that went into a particular build.
+
+ There was another concern too: a source file might be included, but
+ the build settings would cause all of its contents to be skipped
+ (via CPP defines). So scanning via naive grep would pick up names
+ not actually available. A check of the source tree shows that we
+ never do this, and it's pretty easy to institute a policy that we
+ don't start (by at the very least including a stub init func).
+
+ The use of weak symbols ends up causing a problem in practice: for
+ a few modules (like profiling), nothing else pulls it in, so the
+ linker omits it entirely, which leads to the profiling module never
+ being available. So drop the weak markings since we know all these
+ funcs will be available.
+
+2021-09-28 Cui,Lili <lili.cui@intel.com>
+
+ x86: Print {bad} on invalid broadcast in OP_E_memory
+ Don't print broadcast for scalar_mode, and print {bad} for invalid broadcast.
+
+ gas/
+
+ PR binutils/28381
+ * testsuite/gas/i386/bad-bcast.s: Add a new testcase.
+ * testsuite/gas/i386/bad-bcast.d: Likewise.
+ * testsuite/gas/i386/bad-bcast-intel.d: New.
+
+ opcodes/
+
+ PR binutils/28381
+ * i386-dis.c (static struct): Add no_broadcast.
+ (OP_E_memory): Mark invalid broadcast with no_broadcast=1 and Print "{bad}"for it.
+ (intel_operand_size): mark invalid broadcast with no_broadcast=1.
+ (OP_XMM): Mark scalar_mode with no_broadcast=1.
+
+2021-09-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use intrusive_list for linux-nat lwp_list
+ Replace the manually maintained linked list of lwp_info objects with
+ intrusive_list. Replace the ALL_LWPS macro with all_lwps, which returns
+ a range. Add all_lwps_safe as well, for use in iterate_over_lwps, which
+ currently iterates in a safe manner.
+
+ Change-Id: I355313502510acc0103f5eaf2fbde80897d6376c
+
+2021-09-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add destructor to lwp_info
+ Replace the lwp_free function with a destructor. Make lwp_info
+ non-copyable, since there is now a destructor (we wouldn't want an
+ lwp_info object getting copied and this->arch_private getting deleted
+ twice).
+
+ Change-Id: I09fcbe967e362566d3a06fed2abca2a9955570fa
+
+2021-09-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make lwp_info non-POD
+ Initialize all fields in the class declaration directly. This opens the
+ door to using intrusive_list, done in the following patch.
+
+ Change-Id: I38bb27410cd9ebf511d310bb86fe2ea1872c3b05
+
+2021-09-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-27 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb: don't share aspace/pspace on fork with "detach-on-fork on" and "follow-fork-mode child"
+ We found that when handling forks, two inferiors can unexpectedly share
+ their program space and address space. To reproduce:
+
+ 1. Using a test program that forks...
+ 2. "set follow-fork-mode child"
+ 3. "set detach-on-fork on" (the default)
+ 4. run to a breakpoint somewhere after the fork
+
+ Step 4 should have created a new inferior:
+
+ (gdb) info inferiors
+ Num Description Connection Executable
+ 1 <null> /home/smarchi/build/wt/amd/gdb/fork
+ * 2 process 251425 1 (native) /home/smarchi/build/wt/amd/gdb/fork
+
+ By inspecting the state of GDB, we can see that the two inferiors now
+ share one program space and one address space:
+
+ Inferior 1:
+
+ (top-gdb) p inferior_list.m_front.num
+ $2 = 1
+ (top-gdb) p inferior_list.m_front.aspace
+ $3 = (struct address_space *) 0x5595e2520400
+ (top-gdb) p inferior_list.m_front.pspace
+ $4 = (struct program_space *) 0x5595e2520440
+
+ Inferior 2:
+
+ (top-gdb) p inferior_list.m_front.next.num
+ $5 = 2
+ (top-gdb) p inferior_list.m_front.next.aspace
+ $6 = (struct address_space *) 0x5595e2520400
+ (top-gdb) p inferior_list.m_front.next.pspace
+ $7 = (struct program_space *) 0x5595e2520440
+
+ You can then run inferior 1 again and the two inferiors will still
+ erroneously share their spaces, but already at this point this is wrong.
+
+ The cause of the bad {a,p}space sharing is in follow_fork_inferior.
+ When following the child and detaching from the parent, we just re-use
+ the parent's spaces, rather than cloning them. When we switch back to
+ inferior 1 and run again, we find ourselves with two unrelated inferiors
+ sharing spaces.
+
+ Fix that by creating new spaces for the parent after having moved them
+ to the child. My initial implementation created new spaces for the
+ child instead. Doing this breaks doing "next" over fork(). When "next"
+ start, we record the symtab of the starting location. When the program
+ stops, we compare that symtab with the symtab the program has stopped
+ at. If the symtab or the line number has changed, we conclude the
+ "next" is done. If we create a new program space for the child and copy
+ the parent's program space to it with clone_program_space, it creates
+ new symtabs for the child as well. When the child stop, but still on
+ the fork() line, GDB thinks the "next" is done because the symtab
+ pointers no longer match. In reality they are two symtab instances that
+ represent the same file. But moving the spaces to the child and
+ creating new spaces for the parent, we avoid this problem.
+
+ Note that the problem described above happens today with "detach-on-fork
+ off" and "follow-fork-mode child", because we create new spaces for the
+ child. This will have to be addressed later.
+
+ Test-wise, improve gdb.base/foll-fork.exp to set a breakpoint that is
+ expected to have a location in each inferiors. Without the fix, when
+ the two inferiors erroneously share a program space, GDB reports a
+ single location.
+
+ Change-Id: Ifea76e14f87b9f7321fc3a766217061190e71c6e
+
+2021-09-27 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb.base/foll-fork.exp: use foreach_with_prefix to handle prefixes
+ No behavior change in the test expected, other than in the test names.
+
+ Change-Id: I111137483858ab0f23138439f2930009779a2b3d
+
+2021-09-27 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb.base/foll-fork.exp: rename variables
+ Rename the variables / parameters used to match the corresponding GDB
+ setting name, I find that easier to follow.
+
+ Change-Id: Idcbddbbb369279fcf1e808b11a8c478f21b2a946
+
+2021-09-27 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb.base/foll-fork.exp: refactor to restart GDB between each portion of the test
+ This test is difficult to follow and modify because the state of GDB is
+ preserved some tests. Add a setup proc, which starts a new GDB and runs
+ to main, and use it in all test procs. Use proc_with_prefix to avoid
+ duplicates.
+
+ The check_fork_catchpoints proc also seems used to check for follow-fork
+ support by checking if catchpoints are supported. If they are not, it
+ uses "return -code return", which makes its caller return. I find this
+ unnecessary complex, versus just returning a boolean. Modify it to do
+ so.
+
+ Change-Id: I23e62b204286c5e9c5c86d2727f7d33fb126ed08
+
+2021-09-27 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb.base/foll-fork.exp: remove gating based on target triplet
+ It looks like this test has some code to check at runtime the support of
+ fork handling of the target (see check_fork_catchpoints). So, it seems
+ to me that the check based on target triplet at the beginning of the
+ test is not needed. This kind of gating is generally not desirable,
+ because we wouldn't think of updating it when adding fork support to a
+ target. For example, FreeBSD supports fork, but it wasn't listed here.
+
+ Change-Id: I6b55f2298edae6b37c3681fb8633d8ea1b5aabee
+
+2021-09-27 Simon Marchi <simon.marchi@efficios.com>
+
+ gdb.base/foll-fork.exp: remove DUPLICATEs
+ Remove DUPLICATEs, and and at the same time replace two uses of
+ gdb_test_multiple with gdb_test. I don't think using gdb_test_multiple
+ is necessary here.
+
+ Change-Id: I8dcf097c3364e92d4f0e11f0c0f05dbb88e86742
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf, lookup: fix bounds of pptrtab lookup
+ An off-by-one bug in the check for pptrtab lookup meant that we could
+ access the pptrtab past its bounds (*well* past its bounds),
+ particularly if we called ctf_lookup_by_name in a child dict with "*foo"
+ where "foo" is a type that exists in the parent but not the child and no
+ previous lookups by name have been carried out. (Note that "*foo" is
+ not even a valid thing to call ctf_lookup_by_name with: foo * is.
+ Nonetheless, users sometimes do call ctf_lookup_by_name with invalid
+ content, and it should return ECTF_NOTYPE, not crash.)
+
+ ctf_pptrtab_len, as its name suggests (and as other tests of it in
+ ctf-lookup.c confirm), is one higher than the maximum valid permissible
+ index, so the comparison is wrong.
+
+ (Test added, which should fail pretty reliably in the presence of this
+ bug on any machine with 4KiB pages.)
+
+ libctf/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-lookup.c (ctf_lookup_by_name_internal): Fix pptrtab bounds.
+ * testsuite/libctf-writable/pptrtab-writable-page-deep-lookup.*:
+ New test.
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf, testsuite: fix various warnings in tests
+ These warnings are all off by default, but if they do fire you get
+ spurious ERRORs when running make check-libctf.
+
+ libctf/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * testsuite/libctf-lookup/enum-symbol.c: Remove unused label.
+ * testsuite/libctf-lookup/conflicting-type-syms.c: Remove unused
+ variables.
+ * testsuite/libctf-regression/pptrtab.c: Likewise.
+ * testsuite/libctf-regression/type-add-unnamed-struct.c: Likewise.
+ * testsuite/libctf-writable/pptrtab.c: Likewise.
+ * testsuite/libctf-writable/reserialize-strtab-corruption.c:
+ Likewise.
+ * testsuite/libctf-regression/nonstatic-var-section-ld-r.c: Fix
+ format string.
+ * testsuite/libctf-regression/nonstatic-var-section-ld.c:
+ Likewise.
+ * testsuite/libctf-regression/nonstatic-var-section-ld.lk: Adjust.
+ * testsuite/libctf-writable/symtypetab-nonlinker-writeout.c: Fix
+ initializer.
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: fix handling of CTF symtypetab sections emitted by older GCC
+ Older (pre-upstreaming) GCC emits a function symtypetab section of a
+ format never read by any extant libctf. We can detect such CTF dicts by
+ the lack of the CTF_F_NEWFUNCINFO flag in their header, and we do so
+ when reading in the symtypetab section -- but if the set of symbols with
+ types is sufficiently sparse, even an older GCC will emit a function
+ index section.
+
+ In NEWFUNCINFO-capable compilers, this section will always be the exact
+ same length as the corresponding function section (each is an array of
+ uint32_t, associated 1:1 with each other). But this is not true for the
+ older compiler, for which the sections are different lengths. We check
+ to see if the function symtypetab section and its index are the same
+ length, but we fail to skip this check when this is not a NEWFUNCINFO
+ dict, and emit a spurious corruption error for a CTF dict we could
+ have perfectly well opened and used.
+
+ Fix trivial: check the flag (and fix the terrible grammar of the error
+ message at the same time).
+
+ libctf/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * ctf-open.c (ctf_bufopen_internal): Don't complain about corrupt
+ function index symtypetab sections if this is an old-format
+ function symtypetab section (which should be ignored in any case).
+ Fix bad grammar.
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ configure: regenerate in all projects that use libtool.m4
+ (including sim/, which has no changelog.)
+
+ bfd/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+
+ binutils/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+
+ gas/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+
+ gprof/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+
+ ld/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+
+ libctf/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+ * Makefile.in: Regenerate.
+
+ opcodes/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+
+ zlib/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ * configure: Regenerate.
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: try several possibilities for linker versioning flags
+ Checking for linker versioning by just grepping ld --help output for
+ mentions of --version-script is inadequate now that Solaris 11.4
+ implements a --version-script with different semantics. Try linking a
+ test program with a small wildcard-using version script with each
+ supported set of flags in turn, to make sure that linker versioning is
+ not only advertised but actually works.
+
+ The Solaris "GNU-compatible" linker versioning is not quite
+ GNU-compatible enough, but we can work around the differences by
+ generating a new version script that removes the comments from the
+ original (Solaris ld requires #-style comments), and making another
+ version script for libctf-nonbfd in particular which doesn't mention any
+ of the symbols that appear in libctf.la, to avoid Solaris ld introducing
+ corresponding new NOTYPE symbols to match the version script.
+
+ libctf/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ PR libctf/27967
+ * configure.ac (VERSION_FLAGS): Replace with...
+ (ac_cv_libctf_version_script): ... this multiple test.
+ (VERSION_FLAGS_NOBFD): Substitute this too.
+ * Makefile.am (libctf_nobfd_la_LDFLAGS): Use it. Split out...
+ (libctf_ldflags_nover): ... non-versioning flags here.
+ (libctf_la_LDFLAGS): Use it.
+ * libctf.ver: Give every symbol not in libctf-nobfd a comment on
+ the same line noting as much.
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ libtool.m4: fix nm BSD flag detection
+ Libtool needs to get BSD-format (or MS-format) output out of the system
+ nm, so that it can scan generated object files for symbol names for
+ -export-symbols-regex support. Some nms need specific flags to turn on
+ BSD-formatted output, so libtool checks for this in its AC_PATH_NM.
+ Unfortunately the code to do this has a pair of interlocking flaws:
+
+ - it runs the test by doing an nm of /dev/null. Some platforms
+ reasonably refuse to do an nm on a device file, but before now this
+ has only been worked around by assuming that the error message has a
+ specific textual form emitted by Tru64 nm, and that getting this
+ error means this is Tru64 nm and that nm -B would work to produce
+ BSD-format output, even though the test never actually got anything
+ but an error message out of nm -B. This is fixable by nm'ing *nm
+ itself* (since we necessarily have a path to it).
+
+ - the test is entirely skipped if NM is set in the environment, on the
+ grounds that the user has overridden the test: but the user cannot
+ reasonably be expected to know that libtool wants not only nm but
+ also flags forcing BSD-format output. Worse yet, one such "user" is
+ the top-level Cygnus configure script, which neither tests for
+ nor specifies any BSD-format flags. So platforms needing BSD-format
+ flags always fail to set them when run in a Cygnus tree, breaking
+ -export-symbols-regex on such platforms. Libtool also needs to
+ augment $LD on some platforms, but this is done unconditionally,
+ augmenting whatever the user specified: the nm check should do the
+ same.
+
+ One wrinkle: if the user has overridden $NM, a path might have been
+ provided: so we use the user-specified path if there was one, and
+ otherwise do the path search as usual. (If the nm specified doesn't
+ work, this might lead to a few extra pointless path searches -- but
+ the test is going to fail anyway, so that's not a problem.)
+
+ (Tested with NM unset, and set to nm, /usr/bin/nm, my-nm where my-nm is a
+ symlink to /usr/bin/nm on the PATH, and /not-on-the-path/my-nm where
+ *that* is a symlink to /usr/bin/nm.)
+
+ ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ PR libctf/27967
+ * libtool.m4 (LT_PATH_NM): Try BSDization flags with a user-provided
+ NM, if there is one. Run nm on itself, not on /dev/null, to avoid
+ errors from nms that refuse to work on non-regular files. Remove
+ other workarounds for this problem. Strip out blank lines from the
+ nm output.
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ libtool.m4: augment symcode for Solaris 11
+ This reports common symbols like GNU nm, via a type code of 'C'.
+
+ ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ PR libctf/27967
+ * libtool.m4 (lt_cv_sys_global_symbol_pipe): Augment symcode for
+ Solaris 11.
+
+2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ libctf: link against libiberty before linking in libbfd or libctf-nobfd
+ This ensures that the CTF_LIBADD, which always contains at least this
+ when doing a shared link:
+
+ -L`pwd`/../libiberty/pic -liberty
+
+ appears in the link line before any requirements pulled in by libbfd.la,
+ which include -liberty but because it is install-time do not include the
+ -L`pwd`/../libiberty/pic portion (in an indirect dep like this, the path
+ comes from the libbfd.la file, and is an install path). libiberty also
+ appears after libbfd in the link line by virtue of libctf-nobfd.la,
+ because libctf-nobfd has to follow libbfd in the link line, and that
+ needs symbols from libiberty too.
+
+ Without this, an installed liberty might well be pulled in by libbfd,
+ and if --enable-install-libiberty is not specified this libiberty might
+ be completely incompatible with what is being installed and break either
+ or boht of libbfd and libctf. (The specific problem observed here is
+ that bsearch_r was not present, but other problems might easily be
+ observed in future too.)
+
+ Because ld links against libctf, this has a tendency to break the system
+ linker at install time too, if installing with --prefix=/usr. That's
+ quite unpleasant to recover from.
+
+ libctf/ChangeLog
+ 2021-09-27 Nick Alcock <nick.alcock@oracle.com>
+
+ PR libctf/27360
+ * Makefile.am (libctf_la_LIBADD): Link against libiberty
+ before pulling in libbfd.la or pulling in libctf-nobfd.la.
+ * Makefile.in: Regenerate.
+
+2021-09-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix build with g++-4.8
+ When building g++-4.8, we run into:
+ ...
+ src/gdb/dwarf2/read.c:919:5: error: multiple fields in union \
+ 'partial_die_info::<anonymous union>' initialized
+ ...
+
+ This is due to:
+ ...
+ union
+ {
+ struct
+ {
+ CORE_ADDR lowpc = 0;
+ CORE_ADDR highpc = 0;
+ };
+ ULONGEST ranges_offset;
+ };
+ ...
+
+ The error looks incorrect, given that only one union member is initialized,
+ and does not reproduce with newer g++.
+
+ Nevertheless, work around this by moving the initialization to a constructor.
+
+ [ I considered just removing the initialization, with the idea that access
+ should be guarded by has_pc_info, but I ran into one failure in the testsuite,
+ for gdb.base/check-psymtab.exp due to add_partial_symbol using lowpc without
+ checking has_pc_info. ]
+
+ Tested on x86_64-linux.
+
+2021-09-27 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: add setting to disable reading source code files
+ In some situations it is possible that a user might not want GDB to
+ try and access source code files, for example, the source code might
+ be stored on a slow to access network file system.
+
+ It is almost certainly possible that using some combination of 'set
+ directories' and/or 'set substitute-path' a user can trick GDB into
+ being unable to find the source files, but this feels like a rather
+ crude way to solve the problem.
+
+ In this commit a new option is add that stops GDB from opening and
+ reading the source files. A user can run with source code reading
+ disabled if this is required, then re-enable later if they decide
+ that they now want to view the source code.
+
+2021-09-27 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: remove duplicate cmd_list_element declarations
+ For some reason we have two locations where cmd_list_elements are
+ declared, cli/cli-cmds.h and gdbcmd.h. Worse still there is
+ duplication between these two locations.
+
+ In this commit I have moved all of the cmd_list_element declarations
+ from gdbcmd.h into cli/cli-cmds.h and removed the duplicates.
+
+ There should be no user visible changes after this commit.
+
+2021-09-27 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: prevent an assertion when computing the frame_id for an inline frame
+ I ran into this assertion while GDB was trying to unwind the stack:
+
+ gdb/inline-frame.c:173: internal-error: void inline_frame_this_id(frame_info*, void**, frame_id*): Assertion `frame_id_p (*this_id)' failed.
+
+ That is, when building the frame_id for an inline frame, GDB asks for
+ the frame_id of the previous frame. Unfortunately, no valid frame_id
+ was returned for the previous frame, and so the assertion triggers.
+
+ What is happening is this, I had a stack that looked something like
+ this (the arrows '->' point from caller to callee):
+
+ normal_frame -> inline_frame
+
+ However, for whatever reason (e.g. broken debug information, or
+ corrupted stack contents in the inferior), when GDB tries to unwind
+ "normal_frame", it ends up getting back effectively the same frame,
+ thus the call stack looks like this to GDB:
+
+ .-> normal_frame -> inline_frame
+ | |
+ '-----'
+
+ Given such a situation we would expect GDB to terminate the stack with
+ an error like this:
+
+ Backtrace stopped: previous frame identical to this frame (corrupt stack?)
+
+ However, the inline_frame causes a problem, and here's why:
+
+ When unwinding we start from the sentinel frame and call
+ get_prev_frame. We eventually end up in get_prev_frame_if_no_cycle,
+ in here we create a raw frame, and as this is frame #0 we immediately
+ return.
+
+ However, eventually we will try to unwind the stack further. When we
+ do this we inevitably needing to know the frame_id for frame #0, and
+ so, eventually, we end up in compute_frame_id.
+
+ In compute_frame_id we first find the right unwinder for this frame,
+ in our case (i.e. for inline_frame) the $pc is within the function
+ normal_frame, but also within a block associated with the inlined
+ function inline_frame, as such the inline frame unwinder claims this
+ frame.
+
+ Back in compute_frame_id we next compute the frame_id, for our
+ inline_frame this means a call to inline_frame_this_id.
+
+ The ID of an inline frame is based on the id of the previous frame, so
+ from inline_frame_this_id we call get_prev_frame_always, this
+ eventually calls get_prev_frame_if_no_cycle again, which creates
+ another raw frame and calls compute_frame_id (for frames other than
+ frame 0 we immediately compute the frame_id).
+
+ In compute_frame_id we again identify the correct unwinder for this
+ frame. Our $pc is unchanged, however, the fact that the next frame is
+ of type INLINE_FRAME prevents the inline frame unwinder from claiming
+ this frame again, and so, the standard DWARF frame unwinder claims
+ normal_frame.
+
+ We return to compute_frame_id and call the standard DWARF function to
+ build the frame_id for normal_frame.
+
+ With the frame_id of normal_frame figured out we return to
+ compute_frame_id, and then to get_prev_frame_if_no_cycle, where we add
+ the ID for normal_frame into the frame_id cache, and return the frame
+ back to inline_frame_this_id.
+
+ From inline_frame_this_id we build a frame_id for inline_frame and
+ return to compute_frame_id, and then to get_prev_frame_if_no_cycle,
+ which adds the frame_id for inline_frame into the frame_id cache.
+
+ So far, so good.
+
+ However, as we are trying to unwind the complete stack, we eventually
+ ask for the previous frame of normal_frame, remember, at this point
+ GDB doesn't know the stack is corrupted (with a cycle), GDB still
+ needs to figure that out.
+
+ So, we eventually end up in get_prev_frame_if_no_cycle where we create
+ a raw frame and call compute_frame_id, remember, this is for the frame
+ before normal_frame.
+
+ The first task for compute_frame_id is to find the unwinder for this
+ frame, so all of the frame sniffers are tried in order, this includes
+ the inline frame sniffer.
+
+ The inline frame sniffer asks for the $pc, this request is sent up the
+ stack to normal_frame, which, due to its cyclic behaviour, tells GDB
+ that the $pc in the previous frame was the same as the $pc in
+ normal_frame.
+
+ GDB spots that this $pc corresponds to both the function normal_frame
+ and also the inline function inline_frame. As the next frame is not
+ an INLINE_FRAME then GDB figures that we have not yet built a frame to
+ cover inline_frame, and so the inline sniffer claims this new frame.
+ Our stack is now looking like this:
+
+ inline_frame -> normal_frame -> inline_frame
+
+ But, we have not yet computed the frame id for the outer most (on the
+ left) inline_frame. After the frame sniffer has claimed the inline
+ frame GDB returns to compute_frame_id and calls inline_frame_this_id.
+
+ In here GDB calls get_prev_frame_always, which eventually ends up
+ in get_prev_frame_if_no_cycle again, where we create a raw frame and
+ call compute_frame_id.
+
+ Just like before, compute_frame_id tries to find an unwinder for this
+ new frame, it sees that the $pc is within both normal_frame and
+ inline_frame, but the next frame is, again, an INLINE_FRAME, so, just
+ like before the standard DWARF unwinder claims this frame. Back in
+ compute_frame_id we again call the standard DWARF function to build
+ the frame_id for this new copy of normal_frame.
+
+ At this point the stack looks like this:
+
+ normal_frame -> inline_frame -> normal_frame -> inline_frame
+
+ After compute_frame_id we return to get_prev_frame_if_no_cycle, where
+ we try to add the frame_id for the new normal_frame into the frame_id
+ cache, however, unlike before, we fail to add this frame_id as it is
+ a duplicate of the previous normal_frame frame_id. Having found a
+ duplicate get_prev_frame_if_no_cycle unlinks the new frame from the
+ stack, and returns nullptr, the stack now looks like this:
+
+ inline_frame -> normal_frame -> inline_frame
+
+ The nullptr result from get_prev_frame_if_no_cycle is fed back to
+ inline_frame_this_id, which forwards this to get_frame_id, which
+ immediately returns null_frame_id. As null_frame_id is not considered
+ a valid frame_id, this is what triggers the assertion.
+
+ In summary then:
+
+ - inline_frame_this_id currently assumes that as the inline frame
+ exists, we will always get a valid frame back from
+ get_prev_frame_always,
+
+ - get_prev_frame_if_no_cycle currently assumes that it is safe to
+ return nullptr when it sees a cycle.
+
+ Notice that in frame.c:compute_frame_id, this code:
+
+ fi->this_id.value = outer_frame_id;
+ fi->unwind->this_id (fi, &fi->prologue_cache, &fi->this_id.value);
+ gdb_assert (frame_id_p (fi->this_id.value));
+
+ The assertion makes it clear that the this_id function must always
+ return a valid frame_id (e.g. null_frame_id is not a valid return
+ value), and similarly in inline_frame.c:inline_frame_this_id this
+ code:
+
+ *this_id = get_frame_id (get_prev_frame_always (this_frame));
+ /* snip comment */
+ gdb_assert (frame_id_p (*this_id));
+
+ Makes it clear that every inline frame expects to be able to get a
+ previous frame, which will have a valid frame_id.
+
+ As I have discussed above, these assumptions don't currently hold in
+ all cases.
+
+ One possibility would be to move the call to get_prev_frame_always
+ forward from inline_frame_this_id to inline_frame_sniffer, however,
+ this falls foul of (in frame.c:frame_cleanup_after_sniffer) this
+ assertion:
+
+ /* No sniffer should extend the frame chain; sniff based on what is
+ already certain. */
+ gdb_assert (!frame->prev_p);
+
+ This assert prohibits any sniffer from trying to get the previous
+ frame, as getting the previous frame is likely to depend on the next
+ frame, I can understand why this assertion is a good thing, and I'm in
+ no rush to alter this rule.
+
+ The solution proposed here takes onboard feedback from both Pedro, and
+ Simon (see the links below). The get_prev_frame_if_no_cycle function
+ is renamed to get_prev_frame_maybe_check_cycle, and will now not do
+ cycle detection for inline frames, even when we spot a duplicate frame
+ it is still returned. This is fine, as, if the normal frame has a
+ duplicate frame-id then the inline frame will also have a duplicate
+ frame-id. And so, when we reject the inline frame, the duplicate
+ normal frame, which is previous to the inline frame, will also be
+ rejected.
+
+ In inline-frame.c the call to get_prev_frame_always is no longer
+ nested inside the call to get_frame_id. There are reasons why
+ get_prev_frame_always can return nullptr, for example, if there is a
+ memory error while trying to get the previous frame, if this should
+ happen then we now give a more informative error message.
+
+ Historical Links:
+
+ Patch v2: https://sourceware.org/pipermail/gdb-patches/2021-June/180208.html
+ Feedback: https://sourceware.org/pipermail/gdb-patches/2021-July/180651.html
+ https://sourceware.org/pipermail/gdb-patches/2021-July/180663.html
+
+ Patch v3: https://sourceware.org/pipermail/gdb-patches/2021-July/181029.html
+ Feedback: https://sourceware.org/pipermail/gdb-patches/2021-July/181035.html
+
+ Additional input: https://sourceware.org/pipermail/gdb-patches/2021-September/182040.html
+
+2021-09-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/dcache-flush.exp
+ When running test-case gdb.base/dcache-flush.exp on ubuntu 18.04.5, I run into:
+ ...
+ (gdb) PASS: gdb.base/dcache-flush.exp: p var2
+ info dcache^M
+ Dcache 4096 lines of 64 bytes each.^M
+ Contains data for Thread 0x7ffff7fc6b80 (LWP 3551)^M
+ Line 0: address 0x7fffffffd4c0 [47 hits]^M
+ Line 1: address 0x7fffffffd500 [31 hits]^M
+ Line 2: address 0x7fffffffd5c0 [7 hits]^M
+ Cache state: 3 active lines, 85 hits^M
+ (gdb) FAIL: gdb.base/dcache-flush.exp: check dcache before flushing
+ ...
+ The regexp expects "Contains data for process $decimal".
+
+ This is another case of thread_db_target::pid_to_str being used.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+2021-09-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Test sw watchpoint in gdb.threads/process-dies-while-detaching.exp
+ The test-case gdb.threads/process-dies-while-detaching.exp takes about 20s
+ when using hw watchpoints, but when forcing sw watchpoints (using the patch
+ mentioned in PR28375#c0), the test-case takes instead 3m14s.
+
+ Also, it show a FAIL:
+ ...
+ (gdb) continue^M
+ Continuing.^M
+ Cannot find user-level thread for LWP 10324: generic error^M
+ (gdb) FAIL: gdb.threads/process-dies-while-detaching.exp: single-process:
+ continue: watchpoint: continue
+ ...
+ for which PR28375 was filed.
+
+ Modify the test-case to:
+ - add the hw/sw axis to the watchpoint testing, to ensure that we
+ observe the sw watchpoint behaviour also on can-use-hw-watchpoints
+ architectures.
+ - skip the hw breakpoint testing if not supported
+ - set the sw watchpoint later to avoid making the test
+ too slow. This still triggers the same PR, but now takes just 24s.
+
+ This patch adds a KFAIL for PR28375.
+
+ Tested on x86_64-linux.
+
+2021-09-27 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix indentation in gdbtypes.c
+ Change-Id: I7bfbb9d349a1f474256800c45e28fe3b1de08771
+
+2021-09-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-26 Peter Bergner <bergner@linux.ibm.com>
+
+ PowerPC: Enable mfppr mfppr32, mtppr and mtppr32 extended mnemonics on POWER5
+ SPR 896 and the mfppr mfppr32, mtppr and mtppr32 extended mnemonics were added
+ in ISA 2.03, so enable them on POWER5 and later.
+
+ opcodes/
+ * ppc-opc.c (powerpc_opcodes) <mfppr, mfppr32, mtppr, mtppr32>: Enable
+ on POWER5 and later.
+
+ gas/
+ * testsuite/gas/ppc/power5.s: New test.
+ * testsuite/gas/ppc/power5.d: Likewise.
+ * testsuite/gas/ppc/ppc.exp: Run it.
+ * testsuite/gas/ppc/power7.s: Remove tests for mfppr, mfppr32, mtppr
+ and mtppr32.
+ * testsuite/gas/ppc/power7.d: Likewise.
+
+2021-09-25 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Minimize gdb restarts
+ Minimize gdb restarts, applying the following rules:
+ - don't use prepare_for_testing unless necessary
+ - don't use clean_restart unless necessary
+
+ Also, if possible, replace build_for_executable + clean_restart
+ with prepare_for_testing for brevity.
+
+ Touches 68 test-cases.
+
+ Tested on x86_64-linux.
+
+2021-09-25 Alan Modra <amodra@gmail.com>
+
+ PR28346, segfault attempting to disassemble raw binary
+ Don't attempt to access elf_section_data for non-ELF sections.
+
+ PR 28346
+ * elf32-xtensa.c (xtensa_read_table_entries): Return zero entries
+ for non-ELF.
+
+2021-09-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-24 Hans-Peter Nilsson <hp@axis.com>
+
+ gas/testsuite/ld-elf/dwarf2-21.d: Pass -W
+ Required for the expected "CU:" to be emitted for long
+ source-paths. See binutils/dwarf.c:
+
+ if (do_wide || strlen (directory) < 76)
+ printf (_("CU: %s/%s:\n"), directory, file_table[0].name);
+ else
+ printf ("%s:\n", file_table[0].name);
+
+ See also commit 5f410aa50ce2c, "testsuite/ld-elf/pr26936.d:
+ Pass -W."
+
+ gas/ChangeLog:
+ * testsuite/ld-elf/dwarf2-21.d: Pass -W.
+
+2021-09-24 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: change thread_info::name to unique_xmalloc_ptr, add helper function
+ This started out as changing thread_info::name to a unique_xmalloc_ptr.
+ That showed that almost all users of that field had the same logic to
+ get a thread's name: use thread_info::name if non-nullptr, else ask the
+ target. Factor out this logic in a new thread_name free function. Make
+ the field private (rename to m_name) and add some accessors.
+
+ Change-Id: Iebdd95f4cd21fbefc505249bd1d05befc466a2fc
+
+2021-09-24 Tom Tromey <tom@tromey.com>
+
+ Move value_true to value.h
+ I noticed that value_true is declared in language.h and defined in
+ language.c. However, as part of the value API, I think it would be
+ better in one of those files. And, because it is very short, I
+ changed it to be an inline function in value.h. I've also removed a
+ comment from the implementation, on the basis that it seems obsolete
+ -- if the change it suggests was needed, it probably would have been
+ done by now; and if it is needed in the future, odds are it would be
+ done differently anyway.
+
+ Finally, this patch also changes value_true and value_logical_not to
+ return a bool, and updates some uses.
+
+2021-09-24 Pedro Alves <pedro@palves.net>
+
+ Make dcache multi-target-safe
+ By inspection, I noticed that this code in dcache.c is not
+ multi-target-aware:
+
+ /* If this is a different inferior from what we've recorded,
+ flush the cache. */
+
+ if (inferior_ptid != dcache->ptid)
+
+ This doesn't take into account that threads of different targets may
+ have the same ptid.
+
+ Fixed by also storing/comparing the process_stratum_target.
+
+ Tested on x86-64-linux-gnu, native and gdbserver.
+
+ Change-Id: I4d9d74052c696b72d28cb1c77b697b911725c8d3
+
+2021-09-24 Pedro Alves <pedro@palves.net>
+
+ Fix 'FAIL: gdb.perf/disassemble.exp: python Disassemble().run()'
+ We currently have one FAIL while running "make check-perf":
+
+ PerfTest::assemble, run ...
+ python Disassemble().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 64, in run
+ self.warm_up()
+ File "<string>", line 25, in warm_up
+ gdb.error: No symbol "ada_evaluate_subexp" in current context.
+ Error while executing Python code.
+ (gdb) FAIL: gdb.perf/disassemble.exp: python Disassemble().run()
+ ...
+
+ The gdb.perf/disassemble.exp testcase debugs GDB with itself, runs to
+ main, and then disassembles a few GDB functions. The problem is that
+ most(!) functions it is trying to disassemble are now gone...
+
+ This commit fixes the issue by simply picking some other functions to
+ disassemble.
+
+ It would perhaps be better to come up with some test program to
+ disassemble, one that would stay the same throughout the years,
+ instead of disassembling GDB itself. I don't know why that wasn't
+ done to begin with. I'll have to leave that for another rainy day,
+ though.
+
+ gdb/testsuite/
+ yyyy-mm-dd Pedro Alves <pedro@palves.net>
+
+ * gdb.perf/disassemble.py (Disassemble::warm_up): Disassemble
+ evaluate_subexp_do_call instead of ada_evaluate_subexp.
+ (Disassemble::warm_up): Disassemble "captured_main",
+ "run_inferior_call" and "update_global_location_list" instead of
+ "evaluate_subexp_standard" and "c_parse_internal".
+
+ Change-Id: I89d1cca89ce2e495dea5096e439685739cc0d3df
+
+2021-09-24 Pedro Alves <pedro@palves.net>
+
+ Fix all PATH problems in testsuite/gdb.perf/
+ Currently "make check-perf" triggers ~40 PATH messages in gdb.sum:
+
+ ...
+ PATH: gdb.perf/backtrace.exp: python sys.path.insert(0, os.path.abspath("/home/pedro/rocm/gdb/build/gdb/../../src/gdb/testsuite/gdb.perf/lib"))
+ PATH: gdb.perf/backtrace.exp: python exec (open ('/home/pedro/rocm/gdb/build/gdb/testsuite/outputs/gdb.perf/backtrace/backtrace.py').read ())
+ ...
+
+ This commit fixes them. E.g. before/after gdb.sum diff:
+
+ -PASS: gdb.perf/backtrace.exp: python import os, sys
+ -PASS: gdb.perf/backtrace.exp: python sys.path.insert(0, os.path.abspath("/home/pedro/rocm/gdb/build-master/gdb/../../src/gdb/testsuite/gdb.perf/lib"))
+ -PATH: gdb.perf/backtrace.exp: python sys.path.insert(0, os.path.abspath("/home/pedro/rocm/gdb/build-master/gdb/../../src/gdb/testsuite/gdb.perf/lib"))
+ -PASS: gdb.perf/backtrace.exp: python exec (open ('/home/pedro/rocm/gdb/build-master/gdb/testsuite/outputs/gdb.perf/backtrace/backtrace.py').read ())
+ -PATH: gdb.perf/backtrace.exp: python exec (open ('/home/pedro/rocm/gdb/build-master/gdb/testsuite/outputs/gdb.perf/backtrace/backtrace.py').read ())
+ +PASS: gdb.perf/backtrace.exp: setup perftest: python import os, sys
+ +PASS: gdb.perf/backtrace.exp: setup perftest: python sys.path.insert(0, os.path.abspath("${srcdir}/gdb.perf/lib"))
+ +PASS: gdb.perf/backtrace.exp: setup perftest: python exec (open ('${srcdir}/gdb.perf/backtrace.py').read ())
+
+ gdb/testsuite/
+ yyyy-mm-dd Pedro Alves <pedro@palves.net>
+
+ * lib/perftest.exp (PerfTest::_setup_perftest): Use
+ with_test_prefix. Add explicit test names to python invocations,
+ with "$srcdir" not expanded.
+
+ Change-Id: I50a31b04b7abdea754139509e4a34ae9263118a4
+
+2021-09-24 Pedro Alves <pedro@palves.net>
+
+ Fix all DUPLICATE problems in testsuite/gdb.perf/
+ Currently running "make check-perf" shows:
+
+ ...
+ # of duplicate test names 6008
+ ...
+
+ All those duplicate test names come from gdb.perf/skip-command.exp.
+ This commit fixes them, using with_test_prefix.
+
+ gdb/testsuite/
+ yyyy-mm-dd Pedro Alves <pedro@palves.net>
+
+ * gdb.perf/skip-command.exp (run_skip_bench): Wrap each for
+ iteration in with_test_prefix.
+
+ Change-Id: I38501cf70bc6b60306ee7228996ee7bcd858dc1b
+
+2021-09-24 Tom Tromey <tromey@adacore.com>
+
+ Fix handling of DW_AT_data_bit_offset
+ A newer version of GCC will now emit member locations using just
+ DW_AT_data_bit_offset, like:
+
+ <3><14fe>: Abbrev Number: 1 (DW_TAG_member)
+ <14ff> DW_AT_name : (indirect string, offset: 0x215e): nb_bytes
+ <1503> DW_AT_decl_file : 1
+ <1503> DW_AT_decl_line : 10
+ <1504> DW_AT_decl_column : 7
+ <1505> DW_AT_type : <0x150b>
+ <1509> DW_AT_bit_size : 31
+ <150a> DW_AT_data_bit_offset: 64
+
+ whereas earlier versions would emit something like:
+
+ <3><164f>: Abbrev Number: 7 (DW_TAG_member)
+ <1650> DW_AT_name : (indirect string, offset: 0x218d): nb_bytes
+ <1654> DW_AT_decl_file : 1
+ <1655> DW_AT_decl_line : 10
+ <1656> DW_AT_decl_column : 7
+ <1657> DW_AT_type : <0x165f>
+ <165b> DW_AT_byte_size : 4
+ <165c> DW_AT_bit_size : 31
+ <165d> DW_AT_bit_offset : 1
+ <165e> DW_AT_data_member_location: 8
+
+ That is, DW_AT_data_member_location is not emitted any more. This is
+ a change due to the switch to DWARF 5 by default.
+
+ This change pointed out an existing bug in gdb, namely that the
+ attr_to_dynamic_prop depends on the presence of
+ DW_AT_data_member_location. This patch moves the handling of
+ DW_AT_data_bit_offset into handle_data_member_location, and updates
+ attr_to_dynamic_prop to handle this new case.
+
+ A new test case is included. This test fails with GCC 11, but passes
+ with an earlier version of GCC.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Don't leave gdb instance running after function_range
+ A typical dwarf assembly test-case start like this:
+ ...
+ standard_testfile .c -debug.S
+
+ set asm_file [standard_output_file $srcfile2]
+ Dwarf::assemble $asm_file {
+ ...
+ }
+
+ if { [prepare_for_testing "failed to prepare" ${testfile} \
+ [list $srcfile $asm_file] {nodebug}] } {
+ return -1
+ }
+ ...
+
+ When accidentally using build_for_executable instead of
+ prepare_for_testing (or intentionally using it but forgetting to add
+ clean_restart $binfile or some such) the mistake may not be caught, because
+ another gdb instance is still running, and we may silently end up testing
+ compiler-generated DWARF.
+
+ This can be caused by something relatively obvious, like an earlier
+ prepare_for_testing or clean_restart, but also by something more obscure like
+ function_range, which may even be triggered by dwarf assembly like this:
+ ...
+ {MACRO_AT_func {main}}
+ ...
+
+ Fix this by calling gdb_exit at the end of function_range.
+
+ Also fix the fallout of that in test-case gdb.dwarf2/dw2-bad-elf.exp, where a
+ get_sizeof call used the gdb instance left lingering by function_range.
+
+ [ A better and more complete fix would add a new proc get_exec_info, that would
+ be called at the start of the dwarf assembly body:
+ ...
+ Dwarf::assemble $asm_file {
+ get_exec_info {main foo} {int void*}
+ ...
+ that would:
+ - do a prepare_for_testing with $srcfile (roughtly equivalent to what
+ MACRO_AT_func does,
+ - call function_range for all functions main and foo, without starting a
+ new gdb instance
+ - set corresponding variables at the call-site: main_start, main_len,
+ main_end, foo_start, foo_len, foo_end.
+ - get size for types int and void*
+ - set corresponding variables at the call-site: int_size, void_ptr_size.
+ - do a gdb_exit. ]
+
+ Tested on x86_64-linux.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use pie instead of -fpie/-pie
+ I noticed two test-cases where -fpie is used. Using the canonical pie option
+ will usually get one -fPIE instead.
+
+ That choice is justified here in gdb_compile:
+ ...
+ # For safety, use fPIE rather than fpie. On AArch64, m68k, PowerPC
+ # and SPARC, fpie can cause compile errors due to the GOT exceeding
+ # a maximum size. On other architectures the two flags are
+ # identical (see the GCC manual). Note Debian9 and Ubuntu16.10
+ # onwards default GCC to using fPIE. If you do require fpie, then
+ # it can be set using the pie_flag.
+ set flag "additional_flags=-fPIE"
+ ...
+
+ There is no indication that using -fpie rather than -fPIE is on purpose, so
+ use pie instead.
+
+ Tested on x86_64-linux.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Factor out dump_info in gdb.testsuite/dump-system-info.exp
+ Factor out new proc dump_info in test-case gdb.testsuite/dump-system-info.exp,
+ and in the process:
+ - fix a few typos
+ - remove unnecessary "test -r /proc/cpuinfo"
+
+ Tested on x86_64-linux.
+
+ Co-Authored-By: Pedro Alves <pedro@palves.net>
+
+2021-09-24 Pedro Alves <pedro@palves.net>
+
+ gdb/testsuite: Make it possible to use TCL variables in DWARF assembler loclists
+ It is currently not possible to use variables in locations lists. For
+ example, with:
+
+ diff --git a/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp b/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp
+ index 6b4f5c8cbb8..cdbf948619f 100644
+ --- a/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp
+ +++ b/gdb/testsuite/gdb.dwarf2/loclists-multiple-cus.exp
+ @@ -30,6 +30,8 @@ if {![dwarf2_support]} {
+ return 0
+ }
+
+ +set myconst 0x123456
+ +
+ # Test with 32-bit and 64-bit DWARF.
+ foreach_with_prefix is_64 {false true} {
+ if { $is_64 } {
+ @@ -49,6 +51,7 @@ foreach_with_prefix is_64 {false true} {
+ global func1_addr func1_len
+ global func2_addr func2_len
+ global is_64
+ + global myconst
+
+ # The CU uses the DW_FORM_loclistx form to refer to the .debug_loclists
+ # section.
+ @@ -107,7 +110,7 @@ foreach_with_prefix is_64 {false true} {
+ list_ {
+ # When in func1.
+ start_length $func1_addr $func1_len {
+ - DW_OP_constu 0x123456
+ + DW_OP_constu $myconst
+ DW_OP_stack_value
+ }
+
+ we get:
+
+ $ make check TESTS="*/loclists-multiple-cus.exp"
+ ...
+ gdb compile failed, build/gdb/testsuite/outputs/gdb.dwarf2/loclists-multiple-cus/loclists-multiple-cus-dw32.S: Assembler messages:
+ build/gdb/testsuite/outputs/gdb.dwarf2/loclists-multiple-cus/loclists-multiple-cus-dw32.S:78: Error: leb128 operand is an undefined symbol: $myconst
+ ...
+
+ That means $myconst was copied literally to the generated assembly
+ file.
+
+ This patch fixes it, by running subst on the location list body, in
+ the context of the caller. The fix is applied to both
+ Dwarf::loclists::table::list_::start_length and
+ Dwarf::loclists::table::list_::start_end.
+
+ Reported-by: Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Change-Id: I615a64431857242d9f477d5699e3732df1b31322
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix DUPLICATEs in gdb.dwarf2/implptr-64bit.exp
+ When running test-case gdb.dwarf2/implptr-64bit.exp with target board
+ unix/-m32, I noticed:
+ ...
+ DUPLICATE: gdb.dwarf2/implptr-64bit.exp: failed to prepare
+ ...
+
+ Fix this by using with_test_prefix.
+
+ Tested on x86_64-linux.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix DUPLICATEs gdb.dwarf2/dw2-is-stmt.exp
+ Fix these DUPLICATEs by using with_test_prefix:
+ ...
+ DUPLICATE: gdb.dwarf2/dw2-is-stmt.exp: ensure we saw a valid line pattern, 1
+ DUPLICATE: gdb.dwarf2/dw2-is-stmt.exp: ensure we saw a valid line pattern, 2
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix set $var val in gdb.dwarf2/dw2-is-stmt.exp
+ When doing a testrun with:
+ ...
+ $ make check RUNTESTFLAGS=$(cd $src/gdb/testsuite/; echo gdb.dwarf2/*.exp)
+ ...
+ I ran into:
+ ...
+ ERROR: tcl error sourcing gdb.dwarf2/dw2-is-stmt.exp.
+ ERROR: expected integer but got "dw2-abs-hi-pc-world.c"
+ while executing
+ "incr i"
+ ...
+
+ The variable i is set in gdb.dwarf2/dw2-abs-hi-pc.exp, and leaks to
+ gdb.dwarf2/dw2-is-stmt.exp. It's not removed by gdb_cleanup_globals because i
+ is set as global variable by runtest.exp, which does:
+ ...
+ for { set i 0 } { $i < $argc } { incr i } {
+ ...
+ at toplevel but forgets to unset the variable.
+
+ Fix this by removing '$' in front of the variable name when doing set:
+ ...
+ -set $i 0
+ +set i 0
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix DUPLICATE in gdb.base/load-command.exp
+ Fix this duplicate:
+ ...
+ DUPLICATE: gdb.base/load-command.exp: check initial value of the_variable
+ ...
+ by using with_test_prefix.
+
+ Tested on x86_64-linux.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use pie/nopie instead of ldflags=-pie/-no-pie
+ I noticed two test-case that use ldflags=-pie and ldflags-no-pie, instead of
+ the canonical pie and nopie options, which would typically also add
+ additional_flags=-fPIE respectively additional_flags=-fno-pie.
+
+ There is no indication that this is on purpose, so replace these with pie and
+ nopie.
+
+ Tested on x86_64-linux.
+
+2021-09-24 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add gdb.testsuite/dump-system-info.exp
+ When interpreting the testsuite results, it's often relevant what kind of
+ machine the testsuite ran on. On a local machine one can just do
+ /proc/cpuinfo, but in case of running tests using a remote system
+ that distributes test runs to other remote systems that are not directly
+ accessible, that's not possible.
+
+ Fix this by dumping /proc/cpuinfo into the gdb.log, as well as lsb_release -a
+ and uname -a.
+
+ We could do this at the start of each test run, by putting it into unix.exp
+ or some such. However, this might be too verbose, so we choose to put it into
+ its own test-case, such that it get triggered in a full testrun, but not when
+ running one or a subset of tests.
+
+ We put the test-case into the gdb.testsuite directory, which is currently the
+ only place in the testsuite where we do not test gdb. [ Though perhaps this
+ could be put into a new gdb.info directory, since the test-case doesn't
+ actually test the testsuite. ]
+
+ Tested on x86_64-linux.
+
+2021-09-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-23 Tom Tromey <tom@tromey.com>
+
+ Change pointer_type to a method of struct type
+ I noticed that pointer_type is declared in language.h and defined in
+ language.c. However, it really has to do with types, so it should
+ have been in gdbtypes.h all along.
+
+ This patch changes it to be a method on struct type. And, I went
+ through uses of TYPE_IS_REFERENCE and updated many spots to use the
+ new method as well. (I didn't update ones that were in arch-specific
+ code, as I couldn't readily test that.)
+
+2021-09-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Support -fPIE/-fno-PIE/-pie/-no-pie in gdb_compile_rust
+ When running gdb.rust/*.exp test-cases with target board unix/-fPIE/-pie, I
+ run into:
+ ...
+ builtin_spawn -ignore SIGHUP rustc --color never gdb.rust/watch.rs \
+ -g -lm -fPIE -pie -o outputs/gdb.rust/watch/watch^M
+ error: Unrecognized option: 'f'^M
+ ^M
+ compiler exited with status 1
+ ...
+
+ The problem is that -fPIE and -fpie are gcc options, but for rust we use
+ rustc, which has different compilation options.
+
+ Fix this by translating the gcc options to rustc options in gdb_compile_rust,
+ similar to how that is done for ada in target_compile_ada_from_dir.
+
+ Likewise for unix/-fno-PIE/-no-pie.
+
+ Tested on x86_64-linux, with:
+ - native
+ - unix/-fPIE/-pie
+ - unix/-fno-PIE/-no-pie
+ specifically, on openSUSE Leap 15.2 both with package gcc-PIE:
+ - installed (making gcc default to PIE)
+ - uninstalled (making gcc default to non-PIE).
+ and rustc 1.52.1.
+
+2021-09-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use pie instead of -fPIE -pie
+ Replace {additional_flags=-fPIE ldflags=-pie} with {pie}.
+
+ This makes sure that the test-cases properly error out when using target board
+ unix/-fno-PIE/-no-pie.
+
+ Tested on x86_64-linux.
+
+2021-09-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix probe test in gdb.base/break-interp.exp
+ When running test-case gdb.base/break-interp.exp on ubuntu 18.04.5, we have:
+ ...
+ (gdb) bt^M
+ #0 0x00007eff7ad5ae12 in ?? () from break-interp-LDprelinkNOdebugNO^M
+ #1 0x00007eff7ad71f50 in ?? () from break-interp-LDprelinkNOdebugNO^M
+ #2 0x00007eff7ad59128 in ?? () from break-interp-LDprelinkNOdebugNO^M
+ #3 0x00007eff7ad58098 in ?? () from break-interp-LDprelinkNOdebugNO^M
+ #4 0x0000000000000002 in ?? ()^M
+ #5 0x00007fff505d7a32 in ?? ()^M
+ #6 0x00007fff505d7a94 in ?? ()^M
+ #7 0x0000000000000000 in ?? ()^M
+ (gdb) FAIL: gdb.base/break-interp.exp: ldprelink=NO: ldsepdebug=NO: \
+ first backtrace: dl bt
+ ...
+
+ Using the backtrace, the test-case tries to establish that we're stopped in
+ dl_main.
+
+ However, the backtrace only shows an address, because:
+ - the dynamic linker contains no minimal symbols and no debug info, and
+ - gdb is build without --with-separate-debug-dir so it can't find the
+ corresponding .debug file, which does contain the mimimal symbols and
+ debug info.
+
+ As in "[gdb/testsuite] Improve probe detection in gdb.base/break-probes.exp",
+ fix this by doing info probes and grepping for the address.
+
+ Tested on x86_64-linux.
+
+2021-09-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Improve probe detection in gdb.base/break-probes.exp
+ When running test-case gdb.base/break-probes.exp on ubuntu 18.04.5, we have:
+ ...
+ (gdb) run^M
+ Starting program: break-probes^M
+ Stopped due to shared library event (no libraries added or removed)^M
+ (gdb) bt^M
+ #0 0x00007ffff7dd6e12 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #1 0x00007ffff7dedf50 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #2 0x00007ffff7dd5128 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #3 0x00007ffff7dd4098 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #4 0x0000000000000001 in ?? ()^M
+ #5 0x00007fffffffdaac in ?? ()^M
+ #6 0x0000000000000000 in ?? ()^M
+ (gdb) UNSUPPORTED: gdb.base/break-probes.exp: probes not present on this system
+ ...
+
+ Using the backtrace, the test-case tries to establish that we're stopped in
+ dl_main, which is used as proof that we're using probes.
+
+ However, the backtrace only shows an address, because:
+ - the dynamic linker contains no minimal symbols and no debug info, and
+ - gdb is build without --with-separate-debug-dir so it can't find the
+ corresponding .debug file, which does contain the mimimal symbols and
+ debug info.
+
+ Fix this by instead printing the pc and grepping for the value in the
+ info probes output:
+ ...
+ (gdb) p /x $pc^M
+ $1 = 0x7ffff7dd6e12^M
+ (gdb) info probes^M
+ Type Provider Name Where Object ^M
+ ...
+ stap rtld init_start 0x00007ffff7dd6e12 /lib64/ld-linux-x86-64.so.2 ^M
+ ...
+ (gdb)
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle failing probe detection in gdb.base/break-probes.exp
+ When running test-case gdb.base/break-probes.exp on ubuntu 18.04.5, we have:
+ ...
+ (gdb) bt^M
+ #0 0x00007ffff7dd6e12 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #1 0x00007ffff7dedf50 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #2 0x00007ffff7dd5128 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #3 0x00007ffff7dd4098 in ?? () from /lib64/ld-linux-x86-64.so.2^M
+ #4 0x0000000000000001 in ?? ()^M
+ #5 0x00007fffffffdaac in ?? ()^M
+ #6 0x0000000000000000 in ?? ()^M
+ (gdb) FAIL: gdb.base/break-probes.exp: ensure using probes
+ ...
+
+ The test-case intends to emit an UNTESTED in this case, but fails to do so
+ because it tries to do it in a regexp clause in a gdb_test_multiple, which
+ doesn't trigger. Instead, a default clause triggers which produces the FAIL.
+
+ Also the use of UNTESTED is not appropriate, and we should use UNSUPPORTED
+ instead.
+
+ Fix this by silencing the FAIL, and emitting an UNSUPPORTED after the
+ gdb_test_multiple:
+ ...
+ if { ! $using_probes } {
+ + unsupported "probes not present on this system"
+ return -1
+ }
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use early-out style in gdb.base/break-probes.exp
+ Reduce indentation and improve readability in test-case
+ gdb.base/break-probes.exp by replacing:
+ ...
+ if { <cond> } {
+ <lots-of-code>
+ }
+ ...
+ with:
+ ...
+ if { ! <cond> } {
+ return -1
+ }
+ <lots-of-code>
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-23 Pedro Alves <pedro@palves.net>
+
+ Test that frame info/IDs are stable/consistent
+ This adds a testcase that tests that the unwinder produces consistent
+ frame info and frame IDs by making sure that "info frame" shows the
+ same result when stopped at a function (level == 0), compared to when
+ we find the same frame in the stack at a level > 0.
+
+ E.g., on x86-64, right after running to main, we see:
+
+ (gdb) info frame
+ Stack level 0, frame at 0x7fffffffd340:
+ rip = 0x555555555168 in main (gdb.base/backtrace.c:41); saved rip = 0x7ffff7dd90b3
+ source language c.
+ Arglist at 0x7fffffffd330, args:
+ Locals at 0x7fffffffd330, Previous frame's sp is 0x7fffffffd340
+ Saved registers:
+ rbp at 0x7fffffffd330, rip at 0x7fffffffd338
+ (gdb)
+
+ and then after continuing to a function called by main, and selecting
+ the "main" frame again, we see:
+
+ (gdb) info frame
+ Stack level 3, frame at 0x7fffffffd340:
+ rip = 0x555555555172 in main (gdb.base/backtrace.c:41); saved rip = 0x7ffff7dd90b3
+ caller of frame at 0x7fffffffd330
+ source language c.
+ Arglist at 0x7fffffffd330, args:
+ Locals at 0x7fffffffd330, Previous frame's sp is 0x7fffffffd340
+ Saved registers:
+ rbp at 0x7fffffffd330, rip at 0x7fffffffd338
+ (gdb)
+
+ The only differences should be in the stack level, the 'rip = '
+ address, and the presence of the "caller of frame at" info. All the
+ rest should be the same. If it isn't, it probably means that the
+ frame base, the frame ID, etc. aren't stable & consistent.
+
+ The testcase exercises both the DWARF and the heuristic unwinders,
+ using "maint set dwarf unwinder on/off".
+
+ Tested on {x86-64 -m64, x86-64 -m32, Aarch64, Power8} GNU/Linux.
+
+ Change-Id: I795001c82cc70d543d197415e3f80ce5dc7f3452
+
+2021-09-23 Tom Tromey <tromey@adacore.com>
+
+ Change get_ada_task_ptid parameter type
+ get_ada_task_ptid currently takes a 'long' as its 'thread' parameter
+ type. However, on some platforms this is actually a pointer, and
+ using 'long' can sometimes end up with the value being sign-extended.
+ This sign extension can cause problems later, if the tid is then later
+ used as an address again.
+
+ This patch changes the parameter type to ULONGEST and updates all the
+ uses. This approach preserves sign extension on the targets where it
+ is apparently intended, while avoiding it on others.
+
+ Co-Authored-By: John Baldwin <jhb@FreeBSD.org>
+
+2021-09-23 Tom Tromey <tromey@adacore.com>
+
+ Change ptid_t::tid to ULONGEST
+ The ptid_t 'tid' member is normally used as an address in gdb -- both
+ bsd-uthread and ravenscar-thread use it this way. However, because
+ the type is 'long', this can cause problems with sign extension.
+
+ This patch changes the type to ULONGEST to ensure that sign extension
+ does not occur.
+
+2021-09-23 Tom Tromey <tromey@adacore.com>
+
+ Remove defaulted 'tid' parameter to ptid_t constructor
+ I wanted to find, and potentially modify, all the spots where the
+ 'tid' parameter to the ptid_t constructor was used. So, I temporarily
+ removed this parameter and then rebuilt.
+
+ In order to make it simpler to search through the "real" (nonzero)
+ uses of this parameter, something I knew I'd have to do multiple
+ times, I removed any ", 0" from constructor calls.
+
+ Co-Authored-By: John Baldwin <jhb@FreeBSD.org>
+
+2021-09-23 Tom Tromey <tom@tromey.com>
+
+ Style the "XXX" text in ptype/o
+ This patch changes gdb to use the 'highlight' style on the "XXX" text
+ in the output of ptype/o.
+
+2021-09-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.python/py-events.exp
+ With test-case gdb.python/py-events.exp on ubuntu 18.04.5 we run into:
+ ...
+ (gdb) info threads^M
+ Id Target Id Frame ^M
+ * 1 Thread 0x7ffff7fc3740 (LWP 31467) "py-events" do_nothing () at \
+ src/gdb/testsuite/gdb.python/py-events-shlib.c:19^M
+ (gdb) FAIL: gdb.python/py-events.exp: get current thread
+ ...
+
+ The info thread commands uses "Thread" instead of "process" because
+ libpthread is already loaded:
+ ...
+ new objfile name: /lib/x86_64-linux-gnu/libdl.so.2^M
+ [Thread debugging using libthread_db enabled]^M
+ Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".^M
+ event type: new_objfile^M
+ new objfile name: /lib/x86_64-linux-gnu/libpthread.so.0^M
+ ...
+ and consequently thread_db_target::pid_to_str is used.
+
+ Fix this by parsing the "Thread" expression.
+
+ Tested on x86_64-linux.
+
+2021-09-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Add maint selftest -verbose option
+ The print_one_insn selftest in gdb/disasm-selftests.c contains:
+ ...
+ /* If you want to see the disassembled instruction printed to gdb_stdout,
+ set verbose to true. */
+ static const bool verbose = false;
+ ...
+
+ Make this parameter available in the maint selftest command using a new option
+ -verbose, such that we can do:
+ ...
+ (gdb) maint selftest -verbose print_one_insn
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-22 Alan Modra <amodra@gmail.com>
+
+ dwarf2 sub-section test
+ This is a testcase for the bug fixed by commit 5b4846283c3d. When
+ running the testcase on ia64 targets I found timeouts along with lots
+ of memory being consumed, due to ia64 gas not tracking text
+ sub-sections. Trying to add nops for ".nop 16" in ".text 1" resulting
+ in them being added to subsegment 0, with no increase to subsegment 1
+ size. This patch also fixes that problem.
+
+ Note that the testcase fails on ft32-elf, mn10200-elf, score-elf,
+ tic5x-elf, and xtensa-elf. The first two are relocation errors, the
+ last three appear to be the .nop directive failing to emit the right
+ number of nops. I didn't XFAIL any of them.
+
+ * config/tc-ia64.c (md): Add last_text_subseg.
+ (ia64_flush_insns, dot_endp): Use last_text_subseg.
+ (ia64_frob_label, md_assemble): Set last_text_subseg.
+ * testsuite/gas/elf/dwarf2-21.d,
+ * testsuite/gas/elf/dwarf2-21.s: New test.
+ * testsuite/gas/elf/elf.exp: Run it.
+
+2021-09-22 Alan Modra <amodra@gmail.com>
+
+ Fix x86 "FAIL: TLS -fno-pic -shared"
+ Fix a typo in commit 5d0869d9872a
+
+ * testsuite/ld-i386/tlsnopic.rd: Typo fix.
+
+2021-09-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-21 Nick Clifton <nickc@redhat.com>
+
+ Change the linker's heuristic for computing the entry point for binaries so that shared libraries default to an entry point of 0.
+ * ldlang.c (lang_end): When computing the entry point, only
+ try the start address of the entry section when creating an
+ executable.
+ * ld.texi (Entry point): Update description of heuristic used to
+ choose the entry point.
+ testsuite/ld-alpha/tlspic.rd: Update expected entry point address.
+ testsuite/ld-arm/tls-gdesc-got.d: Likewise.
+ testsuite/ld-i386/tlsnopic.rd: Likewise.
+ testsuite/ld-ia64/tlspic.rd: Likewise.
+ testsuite/ld-sparc/gotop32.rd: Likewise.
+ testsuite/ld-sparc/gotop64.rd: Likewise.
+ testsuite/ld-sparc/tlssunnopic32.rd: Likewise.
+ testsuite/ld-sparc/tlssunnopic64.rd: Likewise.
+ testsuite/ld-sparc/tlssunpic32.rd: Likewise.
+ testsuite/ld-sparc/tlssunpic64.rd: Likewise.
+ testsuite/ld-tic6x/shlib-1.rd: Likewise.
+ testsuite/ld-tic6x/shlib-1b.rd: Likewise.
+ testsuite/ld-tic6x/shlib-1r.rd: Likewise.
+ testsuite/ld-tic6x/shlib-1rb.rd: Likewise.
+ testsuite/ld-tic6x/shlib-noindex.rd: Likewise.
+ testsuite/ld-x86-64/pr14207.d: Likewise.
+ testsuite/ld-x86-64/tlsdesc.rd: Likewise.
+ testsuite/ld-x86-64/tlspic.rd: Likewise.
+ testsuite/ld-x86-64/tlspic2.rd: Likewise.
+
+2021-09-21 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle supports_memtag in gdb.base/gdb-caching-proc.exp
+ In test-case gdb.base/gdb-caching-proc.exp, we run all procs declared with
+ gdb_caching_proc. Some of these require a gdb instance, some not.
+
+ We could just do a clean_restart every time, but that would amount to 44 gdb
+ restarts. We try to minimize this by doing this only for the few procs that
+ need it, and hardcoding those in the test-case.
+
+ For those procs, we do a clean_restart, execute the proc, and then do a
+ gdb_exit, to make sure the gdb instance doesn't linger such that we detect
+ procs that need a gdb instance but are not listed in the test-case.
+
+ However, that doesn't work in the case of gnat_runtime_has_debug_info. This
+ proc doesn't require a gdb instance because it starts its own. But it doesn't
+ clean up the gdb instance, and since it's not listed, the test-case
+ doesn't clean up the gdb instance eiter. Consequently, the proc
+ supports_memtag (which should be listed, but isn't) uses the gdb instance
+ started by gnat_runtime_has_debug_info rather than throwing an error. Well,
+ unless gnat_runtime_has_debug_info fails before starting a gdb instance, in
+ which case we do run into the error.
+
+ Fix this by:
+ - doing gdb_exit unconditionally
+ - fixing the resulting error by adding supports_memtag in the test-case to
+ the "needing gdb instance" list
+
+ Tested on x86_64-linux.
+
+2021-09-21 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ gdb, doc: Add ieee_half and bfloat16 to list of predefined target types.
+ For some reason these two weren't added to the list when they were orginally
+ added to GDB.
+
+ gdb/doc/ChangeLog:
+ 2021-09-21 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ * gdb.texinfo (Predefined Target Types): Mention ieee_half and bfloat16.
+
+2021-09-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-20 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.ada/interface.exp with gcc-9
+ When running test-case gdb.ada/interface.exp with gcc-9, we run into:
+ ...
+ (gdb) info locals^M
+ s = (x => 1, y => 2, w => 3, h => 4)^M
+ r = (x => 1, y => 2, w => 3, h => 4)^M
+ (gdb) FAIL: gdb.ada/interface.exp: info locals
+ ...
+
+ The failure is caused by the regexp expecting variable r followed by
+ variable s.
+
+ Fix this by allowing variable s followed by variable r as well.
+
+ Tested on x86_64-linux.
+
+2021-09-20 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.ada/mi_prot.exp
+ When running test-case gdb.ada/mi_prot.exp with gcc 8.5.0, we run into:
+ ...
+ (gdb) ^M
+ Expecting: ^(-stack-list-arguments --no-frame-filters 1[^M
+ ]+)?(\^done,stack=.*[^M
+ ]+[(]gdb[)] ^M
+ [ ]*)
+ -stack-list-arguments --no-frame-filters 1^M
+ ^done,stack-args=[frame={level="0",args=[{name="<_object>",value="(ceiling_priority =\
+ > 97, local => 0)"},{name="v",value="5"},{name="<_objectO>",value="true"}]},frame={le\
+ vel="1",args=[{name="v",value="5"},{name="<_objectO>",value="true"}]},frame={level="2\
+ ",args=[]}]^M
+ (gdb) ^M
+ FAIL: gdb.ada/mi_prot.exp: -stack-list-arguments --no-frame-filters 1 (unexpected out\
+ put)
+ ...
+
+ Fix this by updating the regexp to expect "^done,stack-args=" instead of
+ "^done,stack=".
+
+ Tested on x86_64-linux.
+
+2021-09-20 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Register test for each arch separately in register_test_foreach_arch
+ In gdb/disasm-selftests.c we have:
+ ...
+ selftests::register_test_foreach_arch ("print_one_insn",
+ selftests::print_one_insn_test);
+ ...
+ and we get:
+ ...
+ $ gdb -q -batch -ex "maint selftest print_one_insn" 2>&1 \
+ | grep ^Running
+ Running selftest print_one_insn.
+ $
+ ...
+
+ Change the semantics register_test_foreach_arch such that a version of
+ print_one_insn is registered for each architecture, such that we have:
+ ...
+ $ gdb -q -batch -ex "maint selftest print_one_insn" 2>&1 \
+ | grep ^Running
+ Running selftest print_one_insn::A6.
+ Running selftest print_one_insn::A7.
+ Running selftest print_one_insn::ARC600.
+ ...
+ $
+ ...
+
+ This makes it f.i. possible to do:
+ ...
+ $ gdb -q -batch a.out -ex "maint selftest print_one_insn::armv8.1-m.main"
+ Running selftest print_one_insn::armv8.1-m.main.
+ Self test failed: self-test failed at src/gdb/disasm-selftests.c:165
+ Ran 1 unit tests, 1 failed
+ ...
+
+ Tested on x86_64-linux with an --enable-targets=all build.
+
+2021-09-20 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Change register_test to use std::function arg
+ Change register_test to use std::function arg, such that we can do:
+ ...
+ register_test (test_name, [=] () { SELF_CHECK (...); });
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-20 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.ada/big_packed_array.exp xfail for -m32
+ With test-case gdb.ada/big_packed_array.exp and target board unix/-m32 I run
+ into:
+ ...
+ (gdb) print bad^M
+ $2 = (0 => 0 <repeats 24 times>, 160)^M
+ (gdb) FAIL: gdb.ada/big_packed_array.exp: scenario=minimal: print bad
+ ...
+
+ The problem is that while the variable is an array of 196 bits (== 24.5 bytes),
+ the debug information describes it as 25 unsigned char. This is PR
+ gcc/101643, and the test-case contains an xfail for this, which catches only:
+ ...
+ (gdb) print bad^M
+ $2 = (0 => 0 <repeats 25 times>)^M
+ ...
+
+ Fix this by updating the xfail pattern.
+
+ Tested on x86_64-linux.
+
+2021-09-20 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport/gdb_proc_service.h: use decltype instead of typeof
+ Bug 28341 shows that GDB fails to compile when built with -std=c++11.
+ I don't know much about the use case, but according to the author of the
+ bug:
+
+ I encountered the scenario where CXX is set to "g++ -std=c++11" when
+ I try to compile binutils under GCC as part of the GCC 3-stage
+ compilation, which is common for building a cross-compiler.
+
+ The author of the bug suggests using __typeof__ instead of typeof. But
+ since we're using C++, we might as well use decltype, which is standard.
+ This is what this patch does.
+
+ The failure (and fix) can be observed by configuring GDB with CXX="g++
+ -std=c++11":
+
+ CXX linux-low.o
+ In file included from /home/simark/src/binutils-gdb/gdbserver/gdb_proc_service.h:22,
+ from /home/simark/src/binutils-gdb/gdbserver/linux-low.h:27,
+ from /home/simark/src/binutils-gdb/gdbserver/linux-low.cc:20:
+ /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/gdb_proc_service.h:177:50: error: expected constructor, destructor, or type conversion before (token
+ 177 | __attribute__((visibility ("default"))) typeof (SYM) SYM
+ | ^
+ /home/simark/src/binutils-gdb/gdbserver/../gdbsupport/gdb_proc_service.h:179:1: note: in expansion of macro PS_EXPORT
+ 179 | PS_EXPORT (ps_get_thread_area);
+ | ^~~~~~~~~
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28341
+ Change-Id: I84fbaae938209d8d935ca08dec9b7e6a0dd1bda0
+
+2021-09-20 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ riscv: print .2byte or .4byte before an unknown instruction encoding
+ When the RISC-V disassembler encounters an unknown instruction, it
+ currently just prints the value of the bytes, like this:
+
+ Dump of assembler code for function custom_insn:
+ 0x00010132 <+0>: addi sp,sp,-16
+ 0x00010134 <+2>: sw s0,12(sp)
+ 0x00010136 <+4>: addi s0,sp,16
+ 0x00010138 <+6>: 0x52018b
+ 0x0001013c <+10>: 0x9c45
+
+ My proposal, in this patch, is to change the behaviour to this:
+
+ Dump of assembler code for function custom_insn:
+ 0x00010132 <+0>: addi sp,sp,-16
+ 0x00010134 <+2>: sw s0,12(sp)
+ 0x00010136 <+4>: addi s0,sp,16
+ 0x00010138 <+6>: .4byte 0x52018b
+ 0x0001013c <+10>: .2byte 0x9c45
+
+ Adding the .4byte and .2byte opcodes. The benefit that I see here is
+ that in the patched version of the tools, the disassembler output can
+ be fed back into the assembler and it should assemble to the same
+ binary format. Before the patch, the disassembler output is invalid
+ assembly.
+
+ I've started a RISC-V specific test file under binutils so that I can
+ add a test for this change.
+
+ binutils/ChangeLog:
+
+ * testsuite/binutils-all/riscv/riscv.exp: New file.
+ * testsuite/binutils-all/riscv/unknown.d: New file.
+ * testsuite/binutils-all/riscv/unknown.s: New file.
+
+ opcodes/ChangeLog:
+
+ * riscv-dis.c (riscv_disassemble_insn): Print a .%dbyte opcode
+ before an unknown instruction, '%d' is replaced with the
+ instruction length.
+
+2021-09-20 Alan Modra <amodra@gmail.com>
+
+ Fix allocate_filenum last dir/file checks
+ * dwarf2dbg.c (allocate_filenum) Correct use of last_used_dir_len.
+
+2021-09-20 Alan Modra <amodra@gmail.com>
+
+ Re: PR28149, debug info with wrong file association
+ Fixes segfaults when building aarch64-linux kernel, due to only doing
+ part of the work necessary when allocating file numbers late. I'd
+ missed looping over subsegments, which resulted in some u.filename
+ entries left around and later interpreted as u.view.
+
+ PR 28149
+ * dwarf2dbg.c (purge_generated_debug): Iterate over subsegs too.
+ (dwarf2_finish): Call do_allocate_filenum for all subsegs too,
+ in a separate loop before subsegs are chained.
+
+2021-09-20 Alan Modra <amodra@gmail.com>
+
+ Move eelf_mipsel_haiki.c to ALL_64_EMULATION_SOURCES
+ --enable-targets=all on a 32-bit host results in a link failure with
+ undefined references due to elfxx-mips.c not being compiled. This
+ patch fixes that by putting eelf_mipsel_haiki.c in the correct
+ EMULATION_SOURCES Makefile variable. I've also added a bunch of
+ missing file dependencies and sorted a few things so that it's easier
+ to verify dependencies are present.
+
+ * Makfile.am: Add missing haiku dependencies, sort.
+ (ALL_EMULATION_SOURCES): Sort. Move eelf_mipsel_haiku.c to..
+ (ALL_64_EMULATION_SOURCES): ..here. Sort.
+ * Makfile.in: Regenerate.
+
+2021-09-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-19 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Don't set version info on unversioned symbols
+ Don't set version info on unversioned symbols when seeing a hidden
+ versioned symbol after an unversioned definition and the default
+ versioned symbol.
+
+ bfd/
+
+ PR ld/28348
+ * elflink.c (elf_link_add_object_symbols): Don't set version info
+ on unversioned symbols.
+
+ ld/
+
+ PR ld/28348
+ * testsuite/ld-elf/pr28348.rd: New file.
+ * testsuite/ld-elf/pr28348.t: Likewise.
+ * testsuite/ld-elf/pr28348a.c: Likewise.
+ * testsuite/ld-elf/pr28348b.c: Likewise.
+ * testsuite/ld-elf/pr28348c.c: Likewise.
+ * testsuite/ld-elf/shared.exp: Run PR ld/28348 tests.
+
+2021-09-19 Mike Frysinger <vapier@gentoo.org>
+
+ gdb: manual: update @inforef to @xref
+ The @inforef command is deprecated, and @xref does the samething.
+ Also had to update the text capitalization to match current manual.
+ Verified that info & HTML links work.
+
+2021-09-19 Weimin Pan <weimin.pan@oracle.com>
+
+ CTF: multi-CU and archive support
+ Now gdb is capable of debugging executable, which consists of multiple
+ compilation units (CUs) with the CTF debug info. An executable could
+ potentially have one or more archives, which, in CTF context, contain
+ conflicting types.
+
+ all changes were made in ctfread.c in which elfctf_build_psymtabs was
+ modified to handle archives, via the ctf archive iterator and its callback
+ build_ctf_archive_member and scan_partial_symbols was modified to scan
+ archives, which are treated as subfiles, to build the psymtabs.
+
+ Also changes were made to handle CTF's data object section and function
+ info section which now share the same format of their contents - an array
+ of type IDs. New functions ctf_psymtab_add_stt_entries, which is called by
+ ctf_psymtab_add_stt_obj and ctf_psymtab_add_stt_func, and add_stt_entries,
+ which is called by add_stt_obj and add_stt_func when setting up psymtabs
+ and full symtab, respectively.
+
+2021-09-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-18 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.server/server-kill.exp with -m32
+ When running test-case gdb.server/server-kill.exp with target board unix/-m32,
+ I run into:
+ ...
+ 0xf7fd6b20 in _start () from /lib/ld-linux.so.2^M
+ (gdb) Executing on target: kill -9 13082 (timeout = 300)
+ builtin_spawn -ignore SIGHUP kill -9 13082^M
+ bt^M
+ (gdb) FAIL: gdb.server/server-kill.exp: kill_pid_of=server: test_unwind_syms: bt
+ ...
+
+ The test-case expects the backtrace command to trigger remote communication,
+ which then should result in a "Remote connection closed" or similar.
+
+ However, no remote communication is triggered, because we hit the "Check that
+ this frame is unwindable" case in get_prev_frame_always_1.
+
+ We don't hit this problem in the kill_pid_of=inferior case, because there we
+ run to main before doing the backtrace.
+
+ Fix this by doing the same in the kill_pid_of=server case.
+
+ Tested on x86_64-linux.
+
+2021-09-18 Tom de Vries <tdevries@suse.de>
+
+ [gdb/ada] Handle artificial local symbols
+ With current master and gcc 7.5.0/8.5.0, we have this timeout:
+ ...
+ (gdb) print s^M
+ Multiple matches for s^M
+ [0] cancel^M
+ [1] s at src/gdb/testsuite/gdb.ada/interface/foo.adb:20^M
+ [2] s at src/gdb/testsuite/gdb.ada/interface/foo.adb:?^M
+ > FAIL: gdb.ada/interface.exp: print s (timeout)
+ ...
+
+ [ The FAIL doesn't reproduce with gcc 9.3.1. This difference in
+ behaviour bisects to gcc commit d70ba0c10de.
+
+ The FAIL with earlier gcc bisects to gdb commit ba8694b650b. ]
+
+ The FAIL is caused by gcc generating this debug info describing a named
+ artificial variable:
+ ...
+ <2><1204>: Abbrev Number: 31 (DW_TAG_variable)
+ <1205> DW_AT_name : s.14
+ <1209> DW_AT_type : <0x1213>
+ <120d> DW_AT_artificial : 1
+ <120d> DW_AT_location : 5 byte block: 91 e0 7d 23 18 \
+ (DW_OP_fbreg: -288; DW_OP_plus_uconst: 24)
+ ...
+
+ An easy way to fix this would be to simply not put named artificial variables
+ into the symbol table. However, that causes regressions for Ada. It relies
+ on being able to get the value from such variables, using a named reference.
+
+ Fix this instead by marking the symbol as artificial, and:
+ - ignoring such symbols in ada_resolve_variable, which fixes the FAIL
+ - ignoring such ada symbols in do_print_variable_and_value, which prevents
+ them from showing up in "info locals"
+
+ Note that a fix for the latter was submitted here (
+ https://sourceware.org/pipermail/gdb-patches/2008-January/054994.html ), and
+ this patch borrows from it.
+
+ Tested on x86_64-linux.
+
+ Co-Authored-By: Joel Brobecker <brobecker@adacore.com>
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28180
+
+2021-09-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ PR28149 part 2, purge generated line info
+ Mixing compiler generated line info with gas generated line info is
+ generally just confusing. Also .loc directives with non-zero view
+ fields might reference a previous .loc. It becomes a little more
+ tricky to locate that previous .loc if there might be gas generated
+ line info present too. Mind you, we turn off gas generation of line
+ info on seeing compiler generated line info, so any reference back
+ won't hit gas generated line info. At least, if the view info is
+ sane. Unfortunately, gas needs to handle mangled source.
+
+ PR 28149
+ * dwarf2dbg.c (purge_generated_debug): New function.
+ (dwarf2_directive_filename): Call the above.
+ (out_debug_line): Don't segfault after purging.
+ * testsuite/gas/i386/dwarf2-line-4.d: Update expected output.
+ * testsuite/gas/i386/dwarf4-line-1.d: Likewise.
+ * testsuite/gas/i386/dwarf5-line-1.d: Likewise.
+ * testsuite/gas/i386/dwarf5-line-2.d: Likewise.
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ PR28149, debug info with wrong file association
+ gcc-11 and gcc-12 pass -gdwarf-5 to gas, in order to prime gas for
+ DWARF 5 level debug info. Unfortunately it seems there are cases
+ where the compiler does not emit a .file or .loc dwarf debug directive
+ before any machine instructions. (Note that the .file directive
+ typically emitted as the first line of assembly output doesn't count as
+ a dwarf debug directive. The dwarf .file has a file number before the
+ file name string.)
+
+ This patch delays allocation of file numbers for gas generated line
+ debug info until the end of assembly, thus avoiding any clashes with
+ compiler generated file numbers. Two fixes for test case source are
+ necessary; A .loc can't use a file number that hasn't already been
+ specified with .file.
+
+ A followup patch will remove all the gas generated line info on
+ seeing a .file directive.
+
+ PR 28149
+ * dwarf2dbg.c (num_of_auto_assigned): Delete.
+ (current): Update initialisation.
+ (set_or_check_view): Replace all accesses to view with u.view.
+ (dwarf2_consume_line_info): Likewise.
+ (dwarf2_directive_loc): Likewise. Assert that we aren't generating
+ line info.
+ (dwarf2_gen_line_info_1): Don't call set_or_check_view on
+ gas generated line entries.
+ (dwarf2_gen_line_info): Set and track filenames for gas generated
+ line entries. Simplify generation of labels.
+ (get_directory_table_entry): Use filename_cmp when comparing dirs.
+ (do_allocate_filenum): New function.
+ (dwarf2_where): Set u.filename and filenum to -1 for gas generated
+ line entries.
+ (dwarf2_directive_filename): Remove num_of_auto_assigned handling.
+ (process_entries): Update view field access. Call
+ do_allocate_filenum.
+ * dwarf2dbg.h (struct dwarf2_line_info): Add filename field in
+ union aliasing view.
+ * testsuite/gas/i386/dwarf2-line-3.s: Add .file directive.
+ * testsuite/gas/i386/dwarf2-line-4.s: Likewise.
+ * testsuite/gas/i386/dwarf2-line-4.d: Update expected output.
+ * testsuite/gas/i386/dwarf4-line-1.d: Likewise.
+ * testsuite/gas/i386/dwarf5-line-1.d: Likewise.
+ * testsuite/gas/i386/dwarf5-line-2.d: Likewise.
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ [GOLD] PowerPC64 support for sym+addend GOT entries
+ Pass addends to all the GOT handling functions, plus remove some
+ extraneous asserts.
+
+ PR 28192
+ * powerpc.cc (Output_data_got_powerpc): Add addend parameter to
+ all methods creating got entries.
+ (Target_powerpc::Scan::local): Pass reloc addend to got handling
+ functions, and when creating dynamic got relocations.
+ (Target_powerpc::Scan::global): Likewise.
+ (Target_powerpc::Relocate::relocate): Likewise. Remove extraneous
+ assertions.
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ [GOLD] Got_entry::write addends
+ This takes care of writing out GOT entries with addends. The local
+ symbol case was already largely handled, except for passing the addend
+ to tls_offset_for_local which might need the addend in a
+ local_got_offset call. That's needed also in tls_offset_for_global.
+
+ I'm assuming here that GOT entries for function symbols won't ever
+ have addends, and in particular that a GOT entry referencing PLT call
+ stub code won't want an offset into the code.
+
+ PR 28192
+ * output.cc (Output_data_got::Got_entry::write): Include addend
+ in global symbol value. Pass addend to tls_offset_for_*.
+ * powerpc.cc (Target_powerpc::do_tls_offset_for_local): Handle addend.
+ (Target_powerpc::do_tls_offset_for_global): Likewise.
+ * s390.cc (Target_s390::do_tls_offset_for_local): Likewise.
+ (Target_s390::do_tls_offset_for_global): Likewise.
+ * target.h (Target::tls_offset_for_local): Add addend param.
+ (Target::tls_offset_for_global): Likewise.
+ (Target::do_tls_offset_for_local): Likewise.
+ (Target::do_tls_offset_for_global): Likewise.
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ [GOLD] Output_data_got create entry method addends
+ This patch makes all the Output_data_got methods that create new
+ entries accept an optional addend.
+
+ PR 28192
+ * output.h (Output_data_got::add_global): Add optional addend
+ parameter. Update comment. Delete overload without addend.
+ (Output_data_got::add_global_plt): Likewise.
+ (Output_data_got::add_global_tls): Likewise.
+ (Output_data_got::add_global_with_rel): Likewise.
+ (Output_data_got::add_global_pair_with_rel): Likewise.
+ (Output_data_got::add_local_plt): Likewise.
+ (Output_data_got::add_local_tls): Likewise.
+ (Output_data_got::add_local_tls_pair): Likewise.
+ (Output_data_got::reserve_local): Likewise.
+ (Output_data_got::reserve_global): Likewise.
+ (Output_data_got::Got_entry): Include addend in global sym
+ constructor. Delete local sym constructor without addend.
+ * output.cc (Output_data_got::add_global): Add addend param,
+ pass to got handling methods.
+ (Output_data_got::add_global_plt): Likewise.
+ (Output_data_got::add_global_with_rel): Likewise.
+ (Output_data_got::add_global_pair_with_rel): Likewise.
+ (Output_data_got::add_local_plt): Likewise.
+ (Output_data_got::add_local_tls_pair): Likewise.
+ (Output_data_got::reserve_local): Likewise.
+ (Output_data_got::reserve_global): Likewise.
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ [GOLD] Output_data_got tidy
+ Some Output_data_got methods already have support for addends, but
+ were implemented as separate methods. This removes unnecessary code
+ duplication.
+
+ Relobj::local_has_got_offset and others there get a similar treatment.
+ Comments are removed since it should be obvious without a comment, and
+ the existing comments are not precisely what the code does. For
+ example, a local_has_got_offset call without an addend does not return
+ whether the local symbol has *a* GOT offset of type GOT_TYPE, it
+ returns whether there is a GOT entry of type GOT_TYPE for the symbol
+ with addend of zero.
+
+ PR 28192
+ * output.h (Output_data_got::add_local): Make addend optional.
+ (Output_data_got::add_local_with_rel): Likewise.
+ (Output_data_got::add_local_pair_with_rel): Likewise.
+ * output.cc (Output_data_got::add_local): Delete overload
+ without addend.
+ (Output_data_got::add_local_with_rel): Likewise.
+ (Output_data_got::add_local_pair_with_rel): Likewise.
+ * object.h (Relobj::local_has_got_offset): Make addend optional.
+ Delete overload without addend later. Update comment.
+ (Relobj::local_got_offset): Likewise.
+ (Relobj::set_local_got_offset): Likewise.
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ [GOLD] Remove addend from Local_got_entry_key
+ This patch removes the addend from Local_got_entry_key, which is
+ unnecessary now that Got_offset_list has an addend. Note that it
+ might be advantageous to keep the addend in Local_got_entry_key when
+ linking objects containing a large number of section_sym+addend@got
+ relocations. I opted to save some memory by removing the field but
+ left the class there in case we might need to restore {sym,addend}
+ lookup. That's also why this change is split out from the
+ Got_offset_list change.
+
+ PR 28192
+ * object.h (Local_got_entry_key): Delete addend_ field.
+ Adjust constructor and methods to suit.
+ * object.cc (Sized_relobj::do_for_all_local_got_entries):
+ Update key.
+
+2021-09-17 Alan Modra <amodra@gmail.com>
+
+ [GOLD] Got_offset_list: addend field
+ This is the first in a series of patches aimed at supporting GOT
+ entries against symbol plus addend generally for PowerPC64 rather than
+ just section symbol plus addend as gold has currently.
+
+ This patch adds an addend field to Got_offset_list, so that both local
+ and global symbols can have GOT entries with addend.
+
+ PR 28192
+ * object.h (Got_offset_list): Add addend_ field, init in both
+ constructors. Adjust all accessors to suit.
+ (Sized_relobj::do_local_has_got_offset): Adjust to suit.
+ (Sized_relobj::do_local_got_offset): Likewise.
+ (Sized_relobj::do_set_local_got_offset): Likewise.
+ * symtab.h (Symbol::has_got_offset): Add optional addend param.
+ (Symbol::got_offset, Symbol::set_got_offset): Likewise.
+ * incremental.cc (Local_got_offset_visitor::visit): Add unused
+ uint64_t parameter with FIXME.
+ (Global_got_offset_visitor::visit): Add unused uint64_t parameter.
+
+2021-09-17 Henry Castro <hcvcastro@gmail.com>
+
+ Fix segfault when running ia16-elf-gdb
+ "A problem internal to GDB has been detected,
+ further debugging may prove unreliable."
+
+ Segmentation fault
+
+2021-09-17 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Merged extension string tables and their version tables into one.
+ There are two main reasons for this patch,
+
+ * In the past we had two extension tables, one is used to record all
+ supported extensions in bfd/elfxx-riscv.c, another is used to get the
+ default extension versions in gas/config/tc-riscv.c. It is hard to
+ maintain lots of tables in different files, but in fact we can merge
+ them into just one table. Therefore, we now define many riscv_supported_std*
+ tables, which record names and versions for all supported extensions.
+ We not only use these tables to initialize the riscv_ext_order, but
+ also use them to get the default versions of extensions, and decide if
+ the extensions should be enbaled by default.
+
+ * We add a new filed `default_enable' for the riscv_supported_std* tables,
+ to decide if the extension should be enabled by default. For now if the
+ `default_enable' field of the extension is set to EXT_DEFAULT, then we
+ should enable the extension when the -march and elf architecture attributes
+ are not set. In the future, I suppose the `default_enable' can be set
+ to lots of EXT_<VENDOR>, each vendor can decide to open which extensions,
+ when the target triple of vendor is chosen.
+
+ The elf/linux regression tests of riscv-gnu-toolchain are passed.
+
+ bfd/
+ * elfnn-riscv.c (cpu-riscv.h): Removed sine it is included in
+ bfd/elfxx-riscv.h.
+ (riscv_merge_std_ext): Updated since the field of rpe is changed.
+ * elfxx-riscv.c (cpu-riscv.h): Removed.
+ (riscv_implicit_subsets): Added implicit extensions for g.
+ (struct riscv_supported_ext): Used to be riscv_ext_version. Moved
+ from gas/config/tc-riscv.c, and added new field `default_enable' to
+ decide if the extension should be enabled by default.
+ (EXT_DEFAULT): Defined for `default_enable' field.
+ (riscv_supported_std_ext): It used to return the supported standard
+ architecture string, but now we move ext_version_table from
+ gas/config/tc-riscv.c to here, and rename it to riscv_supported_std_ext.
+ Currently we not only use the table to initialize riscv_ext_order, but
+ also get the default versions of extensions, and decide if the extensions
+ should be enbaled by default.
+ (riscv_supported_std_z_ext): Likewise, but is used for z* extensions.
+ (riscv_supported_std_s_ext): Likewise, but is used for s* extensions.
+ (riscv_supported_std_h_ext): Likewise, but is used for h* extensions.
+ (riscv_supported_std_zxm_ext): Likewise, but is used for zxm* extensions.
+ (riscv_all_supported_ext): Includes all supported extension tables.
+ (riscv_known_prefixed_ext): Updated.
+ (riscv_valid_prefixed_ext): Updated.
+ (riscv_init_ext_order): Init the riscv_ext_order table according to
+ riscv_supported_std_ext.
+ (riscv_get_default_ext_version): Moved from gas/config/tc-riscv.c.
+ Get the versions of extensions from riscv_supported_std* tables.
+ (riscv_parse_add_subset): Updated.
+ (riscv_parse_std_ext): Updated.
+ (riscv_set_default_arch): Set the default subset list according to
+ the default_enable field of riscv_supported_*ext tables.
+ (riscv_parse_subset): If the input ARCH is NULL, then we call
+ riscv_set_default_arch to set the default subset list.
+ * elfxx-riscv.h (cpu-riscv.h): Included.
+ (riscv_parse_subset_t): Removed get_default_version field, and added
+ isa_spec field to replace it.
+ (extern riscv_supported_std_ext): Removed.
+ gas/
+ * (bfd/cpu-riscv.h): Removed.
+ (struct riscv_ext_version): Renamed and moved to bfd/elfxx-riscv.c.
+ (ext_version_table): Likewise.
+ (riscv_get_default_ext_version): Likewise.
+ (ext_version_hash): Removed.
+ (init_ext_version_hash): Removed.
+ (riscv_set_arch): Updated since the field of rps is changed. Besides,
+ report error when the architecture string is empty.
+ (riscv_after_parse_args): Updated.
+
+2021-09-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-16 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix interrupted sleep in multi-threaded test-cases
+ When running test-case gdb.threads/continue-pending-status.exp with native, I
+ have:
+ ...
+ (gdb) continue^M
+ Continuing.^M
+ PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c
+ ^C^M
+ Thread 1 "continue-pendin" received signal SIGINT, Interrupt.^M
+ [Switching to Thread 0x7ffff7fc4740 (LWP 1276)]^M
+ 0x00007ffff758e4c0 in __GI___nanosleep () at nanosleep.c:27^M
+ 27 return SYSCALL_CANCEL (nanosleep, requested_time, remaining);^M
+ (gdb) PASS: gdb.threads/continue-pending-status.exp: attempt 0: caught interrupt
+ ...
+ but with target board unix/-m32, I run into:
+ ...
+ (gdb) continue^M
+ Continuing.^M
+ PASS: gdb.threads/continue-pending-status.exp: attempt 0: continue for ctrl-c
+ [Thread 0xf74aeb40 (LWP 31957) exited]^M
+ [Thread 0xf7cafb40 (LWP 31956) exited]^M
+ [Inferior 1 (process 31952) exited normally]^M
+ (gdb) Quit^M
+ ...
+
+ The problem is that the sleep (300) call at the end of main is interrupted,
+ which causes the inferior to exit before the ctrl-c can be send.
+
+ This problem is described at "Interrupted System Calls" in the docs, and the
+ suggested solution (using a sleep loop) indeed fixes the problem.
+
+ Fix this instead using the more prevalent:
+ ...
+ alarm (300);
+ ...
+ while (1) sleep (1);
+ ...
+ which is roughly equivalent because the sleep is called at the end of main,
+ but slightly better because it guards against hangs from the start rather than
+ from the end of main.
+
+ Likewise in gdb.base/watch_thread_num.exp.
+
+ Likewise in gdb.btrace/enable-running.exp, but use the sleep loop there,
+ because the sleep is not called at the end of main.
+
+ Tested on x86_64-linux.
+
+2021-09-16 Mike Frysinger <vapier@gentoo.org>
+
+ gdb: manual: fix werrors typo
+
+2021-09-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-15 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use function_range in gdb.dwarf2/dw2-abs-hi-pc.exp
+ When I run test-case gdb.dwarf2/dw2-abs-hi-pc.exp with gcc, we have:
+ ...
+ (gdb) break hello^M
+ Breakpoint 1 at 0x4004c0: file dw2-abs-hi-pc-hello.c, line 24.^M
+ (gdb) PASS: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello
+ ...
+ but with clang, I run into:
+ ...
+ (gdb) break hello^M
+ Breakpoint 1 at 0x4004e4^M
+ (gdb) FAIL: gdb.dwarf2/dw2-abs-hi-pc.exp: break hello
+ ...
+
+ The problem is that the CU and function both have an empty address range:
+ ...
+ <0><d2>: Abbrev Number: 1 (DW_TAG_compile_unit)
+ <108> DW_AT_name : dw2-abs-hi-pc-hello.c
+ <123> DW_AT_low_pc : 0x4004e0
+ <127> DW_AT_high_pc : 0x4004e0
+ <1><12f>: Abbrev Number: 2 (DW_TAG_subprogram)
+ <131> DW_AT_name : hello
+ <13a> DW_AT_low_pc : 0x4004e0
+ <13e> DW_AT_high_pc : 0x4004e0
+ ...
+
+ The address ranges are set like this in dw2-abs-hi-pc-hello-dbg.S:
+ ...
+ .4byte .hello_start /* DW_AT_low_pc */
+ .4byte .hello_end /* DW_AT_high_pc */
+ ...
+ where the labels refer to dw2-abs-hi-pc-hello.c:
+ ...
+ extern int v;
+
+ asm (".hello_start: .globl .hello_start\n");
+ void
+ hello (void)
+ {
+ asm (".hello0: .globl .hello0\n");
+ v++;
+ asm (".hello1: .globl .hello1\n");
+ }
+ asm (".hello_end: .globl .hello_end\n");
+ ...
+
+ Using asm labels in global scope is a known source of problems, as explained
+ in the comment of proc function_range in gdb/testsuite/lib/dwarf.exp.
+
+ Fix this by using function_range instead.
+
+ Tested on x86_64-linux with gcc and clang-7 and clang-12.
+
+2021-09-15 Claudiu Zissulescu <claziss@synopsys.com>
+
+ arc: Fix got-weak linker test
+ Use regular expressions to fix the got-weak linker test.
+
+ ld/
+ * testsuite/got-weak.d: Update test.
+
+2021-09-15 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ bfd: fix incorrect type used in sizeof
+ Noticed in passing that we used 'sizeof (char **)' when calculating
+ the size of a list of 'char *' pointers. Of course, this isn't really
+ going to make a difference anywhere, but we may as well be correct.
+
+ There should be no user visible changes after this commit.
+
+ bfd/ChangeLog:
+
+ * archures.c (bfd_arch_list): Use 'char *' instead of 'char **'
+ when calculating space for a string list.
+
+2021-09-15 Tom de Vries <tdevries@suse.de>
+
+ [gdb/doc] Fix typo in maint selftest entry
+ Fix typo "will by" -> "will be".
+
+2021-09-15 Tom de Vries <tdevries@suse.de>
+
+ [bfd] Ensure unique printable names for bfd archs
+ Remove duplicate entry in bfd_ft32_arch and bfd_rx_arch.
+
+ Fix printable name for bfd_mach_n1: "nh1" -> "n1".
+
+ PR 28336
+ * cpu-ft32.c (arch_info_struct): Remove "ft32" entry.
+ * cpu-rx.c (arch_info_struct): Remove "rx" entry.
+ * cpu-nds32.c (bfd_nds32_arch): Fix printable name for bfd_mach_n1
+ entry.
+
+2021-09-15 Alan Modra <amodra@gmail.com>
+
+ PR28328, dlltool ice
+ PR 28328
+ * archive.c (bfd_ar_hdr_from_filesystem): Don't use bfd_set_input_error
+ here, our caller will do that.
+
+2021-09-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb_load_no_complaints with gnu-debuglink
+ When running test-case gdb.dwarf2/dw2-ranges-psym-warning.exp with target
+ board gnu-debuglink I run into:
+ ...
+ (gdb) file dw2-ranges-psym-warning^M
+ Reading symbols from dw2-ranges-psym-warning...^M
+ Reading symbols from .debug/dw2-ranges-psym-warning.debug...^M
+ (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: No complaints
+ ...
+
+ Fix this by updating the regexp in gdb_load_no_complaints.
+
+ Tested on x86_64-linux.
+
+2021-09-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix function range handling in psymtabs
+ Consider the test-case from this patch.
+
+ We run into:
+ ...
+ (gdb) PASS: gdb.dwarf2/dw2-ranges-psym-warning.exp: continue
+ bt^M
+ warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
+ ^M
+ warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
+ ^M
+ warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
+ ^M
+ warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
+ ^M
+ warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
+ ^M
+ warning: (Internal error: pc 0x4004b6 in read in psymtab, but not in symtab.)^M
+ ^M
+ read in psymtab, but not in symtab.)^M
+ ^M
+ )^M
+ (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym-warning.exp: bt
+ ...
+
+ This happens as follows.
+
+ The function foo:
+ ...
+ <1><31>: Abbrev Number: 4 (DW_TAG_subprogram)
+ <33> DW_AT_name : foo
+ <37> DW_AT_ranges : 0x0
+ ...
+ has these ranges:
+ ...
+ 00000000 00000000004004c1 00000000004004d2
+ 00000000 00000000004004ae 00000000004004af
+ 00000000 <End of list>
+ ...
+ which have a hole at at [0x4004af,0x4004c1).
+
+ However, the address map of the partial symtabs incorrectly maps addresses
+ in the hole (such as 0x4004b6 in the backtrace) to the foo CU.
+
+ The address map of the full symbol table of the foo CU however does not
+ contain the addresses in the hole, which is what the warning / internal error
+ complains about.
+
+ Fix this by making sure that ranges of functions are read correctly.
+
+ The patch adds a bit to struct partial_die_info, in this hole (shown for
+ x86_64-linux):
+ ...
+ /* 11: 7 | 4 */ unsigned int canonical_name : 1;
+ /* XXX 4-byte hole */
+ /* 16 | 8 */ const char *raw_name;
+ ...
+ So there's no increase in size for 64-bit, but AFAIU there will be an increase
+ for 32-bit.
+
+ Tested on x86_64-linux.
+
+ gdb/ChangeLog:
+
+ 2021-08-10 Tom de Vries <tdevries@suse.de>
+
+ PR symtab/28200
+ * dwarf2/read.c (struct partial_die_info): Add has_range_info and
+ range_offset field.
+ (add_partial_subprogram): Handle pdi->has_range_info.
+ (partial_die_info::read): Set pdi->has_range_info.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-10 Tom de Vries <tdevries@suse.de>
+
+ PR symtab/28200
+ * gdb.dwarf2/dw2-ranges-psym-warning-main.c: New test.
+ * gdb.dwarf2/dw2-ranges-psym-warning.c: New test.
+ * gdb.dwarf2/dw2-ranges-psym-warning.exp: New file.
+
+2021-09-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix CU list in .debug_names for dummy CUs
+ With current trunk and target board cc-with-debug-names we have:
+ ...
+ (gdb) file dw2-ranges-psym^M
+ Reading symbols from dw2-ranges-psym...^M
+ warning: Section .debug_names in dw2-ranges-psym has abbreviation_table of \
+ size 1 vs. written as 28, ignoring .debug_names.^M
+ (gdb) set complaints 0^M
+ (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym.exp: No complaints
+ ...
+
+ The executable has 8 compilation units:
+ ...
+ $ readelf -wi dw2-ranges-psym | grep @
+ Compilation Unit @ offset 0x0:
+ Compilation Unit @ offset 0x2e:
+ Compilation Unit @ offset 0xa5:
+ Compilation Unit @ offset 0xc7:
+ Compilation Unit @ offset 0xd2:
+ Compilation Unit @ offset 0x145:
+ Compilation Unit @ offset 0x150:
+ Compilation Unit @ offset 0x308:
+ ...
+ of which the ones at 0xc7 and 0x145 are dummy CUs (that is, they do not
+ contain a single DIE), which were added by recent commit 5ef670d81fd
+ "[gdb/testsuite] Add dummy start and end CUs in dwarf assembly".
+
+ The .debug_names section contains this CU table:
+ ...
+ [ 0] 0x0
+ [ 1] 0x2e
+ [ 2] 0xa5
+ [ 3] 0xd2
+ [ 4] 0x150
+ [ 5] 0x308
+ [ 6] 0x1
+ [ 7] 0x0
+ ...
+ The last two entries are incorrect, and the entries for the dummy CUs are
+ missing.
+
+ The last two entries are incorrect because here in write_debug_names we write
+ the dimension of the CU list as 8:
+ ...
+ /* comp_unit_count - The number of CUs in the CU list. */
+ header.append_uint (4, dwarf5_byte_order,
+ per_objfile->per_bfd->all_comp_units.size ()
+ - per_objfile->per_bfd->tu_stats.nr_tus);
+ ...
+ while the actual dimension of the CU list is 6.
+
+ The discrepancy is caused by this code which skips the dummy CUs:
+ ...
+ for (int i = 0; i < per_objfile->per_bfd->all_comp_units.size (); ++i)
+ {
+ ...
+ /* CU of a shared file from 'dwz -m' may be unused by this main
+ file. It may be referenced from a local scope but in such
+ case it does not need to be present in .debug_names. */
+ if (psymtab == NULL)
+ continue;
+ ...
+ because they have a null partial symtab.
+
+ We can fix this by writing the actual dimension of the CU list, but that still
+ leaves the dummy CUs out of the CU list. The purpose of having these is to
+ delimit the end of preceding CUs.
+
+ So, fix this by:
+ - removing the code that skips the dummy CUs (note that the same change
+ was done for .gdb_index in commit efba5c2319d '[gdb/symtab] Handle PU
+ without import in "save gdb-index"'.
+ - verifying that all units are represented in the CU/TU lists
+ - using the actual CU list size when writing the dimension of the CU list
+ (and likewise for the TU list).
+
+ Tested on x86_64-linux with native and target board cc-with-debug-names.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28261
+
+2021-09-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Generate .debug_aranges in gdb.dwarf2/locexpr-data-member-location.exp
+ When running test-case gdb.dwarf2/locexpr-data-member-location.exp with target
+ board cc-with-debug-names, all tests pass but we run into PR28261:
+ ...
+ (gdb) run ^M
+ Starting program: locexpr-data-member-location ^M
+ warning: Section .debug_names in locexpr-data-member-location-lib.so has \
+ abbreviation_table of size 1 vs. written as 37, ignoring .debug_names.^M
+ ...
+
+ Using a patch that fixes PR28261, the warning is gone, but we run into:
+ ...
+ FAIL: gdb.dwarf2/locexpr-data-member-location.exp: step into foo
+ ...
+
+ This is due a missing .debug_aranges contribution for the CU declared in
+ gdb.dwarf2/locexpr-data-member-location.exp.
+
+ Fix this by adding the missing .debug_aranges contribution.
+
+ Tested on x86_64-linux.
+
+2021-09-14 Claudiu Zissulescu <claziss@synopsys.com>
+
+ arc: Fix potential invalid pointer access when fixing got symbols.
+ When statically linking, it can arrive to an undefined weak symbol of
+ which its value cannot be determined. However, we are having pieces of
+ code which doesn't take this situation into account, leading to access
+ a structure which may not be initialized. Fix this situation and add a
+ test.
+
+ bfd/
+ xxxx-xx-xx Cupertino Miranda <cmiranda@synopsys.com>
+ Claudiu Zissulescu <claziss@synopsys.com>
+
+ * arc-got.h (arc_static_sym_data): New structure.
+ (get_static_sym_data): New function.
+ (relocate_fix_got_relocs_for_got_info): Move the computation fo
+ symbol value and section to above introduced function, and use
+ this new function.
+
+ ld/testsuite/
+ xxxx-xx-xx Claudiu Zissulescu <claziss@synopsys.com>
+
+ * ld-arc/got-weak.d: New file.
+ * ld-arc/got-weak.s: Likewise.
+
+
+ fix
+
+2021-09-14 Mike Frysinger <vapier@gentoo.org>
+
+ sim: bfin: add support for SDL2
+ This probably should have been ported long ago, but better late than
+ never. We keep support for both versions for now since both projects
+ tend to have long lifetimes. Maybe consider dropping SDL1 in another
+ ten years.
+
+2021-09-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-14 Tom Tromey <tom@tromey.com>
+
+ Remove use of __CYGNUSCLIB__
+ I found a check of __CYGNUSCLIB__ in dbxread.c. I think this is dead
+ code. This patch removes it.
+
+2021-09-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Check for valid test name
+ When running gdb.base/batch-exit-status.exp I noticed that the test name
+ contains a newline:
+ ...
+ PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
+ : No such file or directory\.: [lindex $result 2] == 0
+ ...
+
+ Check for this in ::CheckTestNames::check, such that we have a warning:
+ ...
+ PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
+ : No such file or directory\.: [lindex $result 2] == 0
+ WARNING: Newline in test name
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Fix exec check in gdb_print_insn_arm
+ With a gdb build with --enable-targets=all we run into a KFAIL:
+ ...
+ KFAIL: gdb.gdb/unittest.exp: executable loaded: maintenance selftest, \
+ failed none (PRMS: gdb/27891)
+ ...
+ due to:
+ ...
+ Running selftest print_one_insn.^M
+ Self test failed: arch armv8.1-m.main: self-test failed at \
+ disasm-selftests.c:165^M
+ ...
+
+ The test fails because we expect disassembling of one arm insn to consume 4
+ bytes and produce (using verbose = true in disasm-selftests.c):
+ ...
+ arm mov r0, #0
+ ...
+ but instead the disassembler uses thumb mode and only consumes 2
+ bytes and produces:
+ ...
+ arm movs r0, r0
+ ...
+
+ The failure does not show up in the "no executable loaded" variant because
+ this code in gdb_print_insn_arm isn't triggered:
+ ...
+ if (current_program_space->exec_bfd () != NULL)
+ info->flags |= USER_SPECIFIED_MACHINE_TYPE;
+ ...
+ and consequently we do this in print_insn:
+ ...
+ if ((info->flags & USER_SPECIFIED_MACHINE_TYPE) == 0)
+ info->mach = bfd_mach_arm_unknown;
+ ...
+ and don't set force_thumb to true in select_arm_features.
+
+ The code in gdb_print_insn_arm makes the assumption that the disassembly
+ architecture matches the exec architecture, which in this case is incorrect,
+ because the exec architecture is x86_64, and the disassembly architecture is
+ armv8.1-m.main. Fix that by explicitly checking it:
+ ...
+ if (current_program_space->exec_bfd () != NULL
+ && (current_program_space->exec_bfd ()->arch_info
+ == gdbarch_bfd_arch_info (gdbarch)))
+ ...
+
+ This fixes the print_one_insn failure, so remove the KFAIL.
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27891
+
+2021-09-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/tdep] Reset force_thumb in parse_arm_disassembler_options
+ With a gdb build with --enable-targets=all, we have 2 arch-specific failures
+ in selftest print_one_insn:
+ ...
+ $ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \
+ | grep "Self test failed: arch "
+ Self test failed: arch armv8.1-m.main: self-test failed at \
+ disasm-selftests.c:165
+ Self test failed: arch arm_any: self-test failed at disasm-selftests.c:165
+ $
+ ...
+
+ During the first failed test, force_thumb is set to true, and remains so until
+ and during the second test, which causes the second failure.
+
+ Fix this by resetting force_thumb to false in parse_arm_disassembler_options,
+ such that we get just one failure:
+ ...
+ $ gdb -q -batch a.out -ex "maint selftest print_one_insn" 2>&1 \
+ | grep "Self test failed: arch "
+ Self test failed: arch armv8.1-m.main: self-test failed at \
+ disasm-selftests.c:165
+ $
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-13 Tom Tromey <tromey@adacore.com>
+
+ Fix no-Python build
+ A build without Python will currently fail, because
+ selftests::test_python uses gdb_python_initialized, which is only
+ conditionally defined.
+
+ This patch fixes the build by making test_python also be conditionally
+ defined. I chose this approach because the selftest will fail if
+ Python is not enabled, so it didn't seem useful to leave it defined.
+
+2021-09-13 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Update the assembler insn testcase.
+ Since the 0x57 is preserved for the vadd.vv instruction in the integration
+ branch, remove it to make sure the testcase can work.
+
+ gas/
+ * testsuite/gas/riscv/insn.d: Remove 0x57 since it is preserved
+ for vadd.vv instruction.
+ * testsuite/gas/riscv/insn.s: Likewise.
+
+2021-09-13 Jan Beulich <jbeulich@suse.com>
+
+ MIPS: don't use get_symbol_name() for section parsing. With s_change_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result.
+ gas * config/tc-mips.c (s_change_section): Use obj_elf_section_name to
+ parse the section name.
+
+ ia64: don't use get_symbol_name() for section parsing. With cross_section() later calling obj_elf_section(), it seems better to pre-parse the section name by the same function that will be used there. This way no differences in what is accepted will result.
+ gas * config/tc-ia64.c (cross_section): Use obj_elf_section_name to
+ parse the section name.
+
+2021-09-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.gdb/selftest.exp
+ With a gdb build with CFLAGS "-O2 -g -flto=auto", I run into:
+ ...
+ #7 gdb_main (args=0x7fffffffd220) at src/gdb/main.c:1368^M
+ #8 main (argc=<optimized out>, argv=<optimized out>) at src/gdb/gdb.c:32^M
+ (gdb) FAIL: gdb.gdb/selftest.exp: backtrace through signal handler
+ ...
+ which means that this regexp in proc test_with_self fails:
+ ...
+ -re "#0.*(read|poll).*in main \\(.*\\) at .*gdb\\.c.*$gdb_prompt $" {
+ ...
+
+ The problem is that gdb_main has been inlined into main, and consequently the
+ backtrace uses:
+ ...
+ #x <fn> ...
+ ...
+ instead of
+ ...
+ #x <address> in <fn> ...
+ ...
+
+ Fix this by updating the regexp to not require "in" before " main".
+
+ Tested on x86_64-linux.
+
+2021-09-13 Alan Modra <amodra@gmail.com>
+
+ Re: Deprecate a.out support for NetBSD targets
+ * config.bfd: Correct m68-*-*bsd* obsolete target match.
+
+2021-09-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix test name in gdb.base/batch-exit-status.exp
+ When running gdb.base/batch-exit-status.exp I noticed that the test name
+ contains a newline:
+ ...
+ PASS: gdb.base/batch-exit-status.exp: : No such file or directory\.^M
+ : No such file or directory\.: [lindex $result 2] == 0
+ ...
+
+ The mistake is that I passed an output regexp argument to a parameter
+ interpreted as testname prefix. Fix this by passing a testname prefix
+ instead.
+
+ Add support for checking output, to be able to handle the output regexp
+ argument.
+
+ Tested on x86_64-linux.
+
+2021-09-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Set sysroot earlier in local-board.exp
+ When running test-case gdb.base/batch-exit-status.exp for native, it passes.
+ But with target board cc-with-debug-names, we run into (added missing double
+ quotes for clarity):
+ ...
+ builtin_spawn $build/gdb/testsuite/../../gdb/gdb -nw -nx \
+ -data-directory $build/gdb/testsuite/../data-directory \
+ -iex "set height 0" -iex "set width 0" -ex "set sysroot" -batch ""^M
+ : No such file or directory.^M
+ PASS: gdb.base/batch-exit-status.exp: \
+ : No such file or directory\.: [lindex $result 2] == 0
+ FAIL: gdb.base/batch-exit-status.exp: \
+ : No such file or directory\.: [lindex $result 3] == $expect_status
+ ...
+
+ The difference between the passing and failing case is that with native we
+ have (leaving out set height/width for brevity):
+ ...
+ $ gdb -batch ""; echo $?
+ : No such file or directory.
+ 1
+ ...
+ and with target board cc-with-debug-names:
+ ...
+ $ gdb -ex "set sysroot" -batch ""; echo $?
+ : No such file or directory.
+ 0
+ ...
+
+ The difference is expected. GDB returns the exit status of the last executed
+ command. In the former case that's 'file ""', which fails. In the latter case,
+ that's 'set sysroot', which succeeds.
+
+ Fix this by setting sysroot using -iex instead of -ex in local-board.exp, such
+ that we have the expected:
+ ...
+ $ gdb -iex "set sysroot" -batch ""; echo $?
+ : No such file or directory.
+ 1
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-11 Mike Frysinger <vapier@gentoo.org>
+
+ sim: run: change help short option to -h
+ It's unclear why -H was picked over the more standard -h, but since
+ -h is still not used, just change -H to -h to match pretty much every
+ other tool in the sourceware tree.
+
+2021-09-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Reimplement gdb.gdb/python-selftest.exp as unittest
+ The test-case gdb.gdb/python-selftest.exp:
+ - patches the gdb_python_initialized variable in gdb to 0
+ - checks that the output of a python command is "Python not initialized"
+
+ Reimplement gdb.gdb/python-selftest.exp as unittest, using:
+ - execute_command_to_string to capture the output
+ - try/catch to catch the "Python not initialized" exception.
+
+ Tested on x86_64-linux.
+
+2021-09-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp
+ Fix DUPLICATE in gdb.base/global-var-nested-by-dso.exp by naming commands more
+ uniquely.
+
+2021-09-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix DUPLICATE in gdb.base/skip-solib.exp
+ Fix DUPLICATE in gdb.base/skip-solib.exp by using with_test_prefix.
+
+ Also fix indentation style and long lines, remove outdated question/answer
+ bits, and use multi_line.
+
+2021-09-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix handling of nr_args < 3 in mi_gdb_test
+ The documentation of mi_gdb_test states that the command, pattern and message
+ arguments are mandatory:
+ ...
+ # mi_gdb_test COMMAND PATTERN MESSAGE [IPATTERN] -- send a command to gdb;
+ # test the result.
+ ...
+
+ However, this is not checked, and when mi_gdb_test is called with less than 3
+ arguments, it passes or fails silently.
+
+ Fix this by using the following semantics:
+ - if there are 1 or 2 arguments, use the command as the message.
+ - if there is 1 argument, use ".*" as the pattern.
+ - if there are no or too much arguments, error out.
+
+ Fix a PATH issue in gdb.mi/mi-logging.exp, introduced by using the command as
+ message. Fix a few other trivial-looking FAILs.
+
+ There are 11 less trivial-looking FAILs left in gdb.mi in test-cases:
+ - mi-nsmoribund.exp
+ - mi-breakpoint-changed.exp
+ - mi-break.exp.
+
+ Tested on x86_64-linux.
+
+2021-09-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add string_list_to_regexp
+ A regexp pattern with escapes like this is hard to read:
+ ...
+ set re "~\"\[$\]$decimal = 1\\\\n\"\r\n\\^done"
+ ...
+
+ We can make it more readable by spacing out parts (which allows us to also use
+ the curly braces where that's convenient):
+ ...
+ set re [list "~" {"} {[$]} $decimal " = 1" "\\\\" "n" {"} "\r\n" "\\^" "done"]
+ set re [join $re ""]
+ ...
+ or by using string_to_regexp:
+ ...
+ set re [list \
+ [string_to_regexp {~"$}] \
+ $decimal \
+ [string_to_regexp " = 1\\n\"\r\n^done"]]
+ set re [join $re ""]
+ ...
+ Note: we have to avoid applying string_to_list to decimal, which is already a
+ regexp.
+
+ Add a proc string_list_to_regexp to make it easy to do both:
+ ...
+ set re [list \
+ [string_list_to_regexp ~ {"} $] \
+ $decimal \
+ [string_list_to_regexp " = 1" \\ n {"} \r\n ^ done]]
+ ...
+
+ Also add a test-case gdb.testsuite/string_to_regexp.exp.
+
+2021-09-10 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle unrecognized command line option in gdb_compile_test
+ When running the gdb testsuite with gnatmake-4.8, I get many fails of the
+ following form:
+ ...
+ gcc: error: unrecognized command line option '-fgnat-encodings=all'^M
+ gnatmake: "gdb.ada/O2_float_param/foo.adb" compilation error^M
+ compiler exited with status 1
+ compilation failed: gcc ... gdb.ada/O2_float_param/foo.adb
+ gcc: error: unrecognized command line option '-fgnat-encodings=all'
+ gnatmake: "gdb.ada/O2_float_param/foo.adb" compilation error
+ FAIL: gdb.ada/O2_float_param.exp: scenario=all: compilation foo.adb
+ ...
+
+ Fix this by marking the test unsupported instead, such that we have:
+ ...
+ UNSUPPORTED: gdb.ada/O2_float_param.exp: scenario=all: compilation foo.adb \
+ (unsupported option '-fgnat-encodings=all')
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-10 Alan Modra <amodra@gmail.com>
+
+ PowerPC, sanity check r_offset in relocate_section
+ * elf32-ppc.c (offset_in_range): New function.
+ (ppc_elf_vle_split16): Sanity check r_offset before accessing
+ section contents. Return status.
+ (ppc_elf_relocate_section): Sanity check r_offset before
+ accessing section contents. Don't segfault on NULL howto.
+
+ Re: gas: Use the directory name in .file 0
+ PR gas/28266
+ * testsuite/gas/elf/dwarf-5-file0-2.s: Use %object rather than
+ @object, .4byte instead of .long, and .asciz instead of .string.
+
+2021-09-10 Mike Frysinger <vapier@gentoo.org>
+
+ etc: switch to automake
+ There's no content in here currently, so switching to automake is
+ pretty easy with a stub file.
+
+ etc: rename configure.in to configure.ac
+ The .in name has been deprecated for a long time in favor of .ac.
+
+2021-09-10 H.J. Lu <hjl.tools@gmail.com>
+
+ gas: Use the directory name in .file 0
+ DWARF5 allows .file 0 to take an optional directory name. Set the entry
+ 0 of the directory table to the directory name in .file 0.
+
+ PR gas/28266
+ * dwarf2dbg.c (get_directory_table_entry): Add an argument for
+ the directory name in .file 0 and use it, instead of PWD.
+ (allocate_filenum): Pass NULL to get_directory_table_entry.
+ (allocate_filename_to_slot): Pass the incoming dirname to
+ get_directory_table_entry.
+ * testsuite/gas/elf/dwarf-5-file0-2.d: New file.
+ * testsuite/gas/elf/dwarf-5-file0-2.s: Likewise.
+ * testsuite/gas/elf/elf.exp: Run dwarf-5-file0-2.
+
+2021-09-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-09 Yoshinori Sato <ysato@users.sourceforge.jp>
+
+ gdb: Enable target rx-*-*linux.
+ I added rx-*-linux in binutils few yaers ago.
+ But missing this changes,
+
+2021-09-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/coredump-filter-build-id.exp with older eu-unstrip
+ On openSUSE Leap 42.3 with eu-unstrip 0.158, we run into:
+ ...
+ (gdb) PASS: gdb.base/coredump-filter-build-id.exp: save corefile
+ First line of eu-unstrip: \
+ 0x400000+0x202000 f4ae8502bd6a14770182382316bc595e9dc6f08b@0x400284 - - [exe]
+ FAIL: gdb.base/coredump-filter-build-id.exp: gcore dumped mapping with build-id
+ ...
+
+ The test expects an actual file name instead of '[exe]', but that only got
+ introduced with eu-unstrip 0.161. Before it printed '[exe]' or '[pie]'.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+2021-09-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix various issues in gdb.mi/mi-sym-info.exp
+ I noticed this failure in gdb.mi/mi-sym-info.exp with gcc-4.8:
+ ...
+ FAIL: gdb.mi/mi-sym-info.exp: -symbol-info-functions --max-results 1 \
+ (unexpected output)
+ ...
+ due to function f2 instead of f3 being listed.
+
+ AFAICT, this is caused by a difference in debug info:
+ ...
+ $ readelf -wi outputs/gdb.mi/mi-sym-info/mi-sym-info1.o \
+ | egrep "DW_AT_name.*: f[1-3]"
+ <72> DW_AT_name : f1
+ <a1> DW_AT_name : f2
+ <d0> DW_AT_name : f3
+ ...
+ vs:
+ ...
+ $ readelf -wi outputs/gdb.mi/mi-sym-info/mi-sym-info1.o \
+ | egrep "DW_AT_name.*: f[1-3]"
+ <f4> DW_AT_name : f3
+ <123> DW_AT_name : f2
+ <152> DW_AT_name : f1
+ ...
+ and the command documentation does not mention an imposed order, so fix this
+ by allowing f2 as well.
+
+ Doing this fix, it made sense to do a refactoring of adding f2_re and f3_re
+ variables, in order to write (?:$f2_re|$f3_re), and I applied the same pattern
+ overall.
+
+ Furthermore, I found a silent FAIL due to calling mi_gdb_proc with 2 args, fix
+ by updating the regexp.
+
+ Then I ran with clang and found another FAIL, fix by updating the regexp.
+
+ Tested on x86_64-linux with gcc-4.8.5, gcc-7.5.0, gcc-11.2.1, clang-7.0.1 and
+ clang-12.0.1.
+
+2021-09-09 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Reimplement gdb.gdb/complaints.exp as unittest
+ When building gdb with "-Wall -O2 -g -flto=auto", I run into:
+ ...
+ (gdb) call clear_complaints()^M
+ No symbol "clear_complaints" in current context.^M
+ (gdb) FAIL: gdb.gdb/complaints.exp: clear complaints
+ ...
+
+ The problem is that lto has optimized away the clear_complaints function
+ and consequently the selftest doesn't work.
+
+ Fix this by reimplementing the selftest as a unit test.
+
+ Factor out two new functions:
+ - void
+ execute_fn_to_ui_file (struct ui_file *file, std::function<void(void)> fn);
+ - std::string
+ execute_fn_to_string (std::function<void(void)> fn, bool term_out);
+ and use the latter to capture the complaints output.
+
+ Tested on x86_64-linux.
+
+2021-09-09 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: remove all uses of Py_TPFLAGS_HAVE_ITER
+ Python 2 has a bit flag Py_TPFLAGS_HAVE_ITER which can be passed as
+ part of the tp_flags field when defining a new object type. This flag
+ is not defined in Python 3 and so we define it to 0 in
+ python-internal.h (when IS_PY3K is defined).
+
+ The meaning of this flag is that the object has the fields tp_iter and
+ tp_iternext. Note the use of "has" here, the flag says nothing about
+ the values in those fields, just that the type object has the fields.
+
+ In early versions of Python 2 these fields were no part of the
+ PyTypeObject struct, they were added in version 2.2 (see
+ https://docs.python.org/release/2.3/api/type-structs.html). And so,
+ there could be a some code compiled out there which has a PyTypeObject
+ structure within it that doesn't even have the tp_iter and tp_iternext
+ fields, attempting to access these fields would be undefined
+ behaviour.
+
+ And so Python added the Py_TPFLAGS_HAVE_ITER flag. If the flag is
+ present then Python is free to access the tp_iter and tp_iternext
+ fields.
+
+ If we consider GDB then we always assume that the tp_iter and
+ tp_iternext fields are part of PyTypeObject. If someone was crazy
+ enough to try and compile GDB against Python 2.1 then we'd get lots of
+ build errors saying that we were passing too many fields when
+ initializing PyTypeObject structures. And so, I claim, we can be sure
+ that GDB will always be compiled with a version of Python that has the
+ tp_iter and tp_iternext fields in PyTypeObject.
+
+ Next we can look at the Py_TPFLAGS_DEFAULT flag. In Python 2, each
+ time additional fields are added to PyTypeObject a new Py_TPFLAGS_*
+ flag would be defined to indicate whether those flags are present or
+ not. And, those new flags would be added to Py_TPFLAGS_DEFAULT. And
+ so, in the latest version of Python 2 the Py_TPFLAGS_DEFAULT flag
+ includes Py_TPFLAGS_HAVE_ITER (see
+ https://docs.python.org/2.7/c-api/typeobj.html).
+
+ In GDB we pass Py_TPFLAGS_DEFAULT as part of the tp_flags for all
+ objects we define.
+
+ And so, in this commit, I propose to remove all uses of
+ Py_TPFLAGS_HAVE_ITER from GDB, it's simply not needed.
+
+ There should be no user visible changes after this commit.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: accept -EB/-EL short options
+ Many GNU tools accept -EB/-EL as short options for selecting big &
+ little endian modes. While the sim has an -E option, it requires
+ spelling out "big" and "little". Adding support for -EB & -EL is
+ thus quite trivial, so lets round it out to be less annoying.
+
+ sim: ppc: drop support for std-config.h overrides
+ Only the ppc arch supports this kind of source file override logic.
+ All the others expose knobs via configure flags, and for some of
+ these, the ppc code does as well. For others, it doesn't make sense
+ to ever change them. Since it's unlikely anyone is using this, drop
+ it all to simplify the code (and to get us a little closer to the
+ common sim code).
+
+ sim: ppc: enable use of gnulib
+ All other sim arches are using this now, so finish up the logic in
+ the ppc arch to enable gnulib usage here too.
+
+ sim: drop old O_NDELAY & FNBLOCK support
+ We use these older names inconsistently in the sim codebase, and time
+ has moved on long ago, so drop support for these non-standard names.
+ POSIX provides O_NONBLOCK for us, so use it everywhere.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: dv-sockser: enable for mingw targets too
+ We have enough functionality from gnulib now to build sockser on
+ all platforms.
+
+ Non-blocking I/O is supported when F_GETFL/F_SETFL are unavailable,
+ but we can address that in a follow up commit. This mirrors what
+ is done in other places in the sim already.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: cgen: workaround Windows VOID define
+ The cgen framework provides a "VOID" type for code to use, but this
+ defines ends up conflicting with the standard Windows VOID define.
+ Since they actually define to the same thing ("void"), undef it here
+ to fix the Windows build.
+
+ We might want to reconsider the need for "VOID" in cgen, but that
+ will take larger discussion & coordination with the cgen project.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: dv-sockser: move sim-main.h include after system includes
+ The sim-main.h header is a bit of a dumping ground. Every arch can
+ (and many do) define all sorts of weird & common names that end up
+ conflicting with system headers. So including it before the system
+ headers sets us up for pain. v850 is a good example of this -- when
+ building for mingw, we see weird failures:
+
+ $ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/v850/../common/dv-sockser.c
+ In file included from ../../../../sim/v850/sim-main.h:11,
+ from ../../../../sim/v850/../common/dv-sockser.c:24:
+ ../../../../sim/v850/../common/sim-base.h:97:32: error: expected ')' before '->' token
+ 97 | # define STATE_CPU(sd, n) ((sd)->cpu[0])
+ | ^~
+
+ While gcc is unhelpful at first, running it through the preprocessor
+ by hand shows more details:
+
+ $ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/v850/../common/dv-sockser.c
+ $ i686-w64-mingw32-gcc -c dv-sockser.i
+ In file included from /usr/i686-w64-mingw32/usr/include/minwindef.h:163,
+ from /usr/i686-w64-mingw32/usr/include/windef.h:9,
+ from /usr/i686-w64-mingw32/usr/include/windows.h:69,
+ from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
+ from ../../gnulib/import/sys/socket.h:684,
+ from ../../gnulib/import/netinet/in.h:43,
+ from ../../../../sim/v850/../common/dv-sockser.c:39:
+ /usr/i686-w64-mingw32/usr/include/winnt.h:4803:25: error: expected ')' before '->' token
+ 4803 | DWORD State;
+ | ^
+ | )
+
+ This is because v850 sets up this common name:
+
+ All of this needs cleaning up someday, but since the dv-sockser code
+ definitely should be fixed in this way, lets do that now and unblock
+ the v850 code.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: mips: delete unused PSIZE define
+ It's unclear what this define is for as it appears to be unused, and
+ has never been used in the history of the mips sim. Delete it to tidy
+ up, and to fix build errors for Windows targets that have a standard
+ "PSIZE" struct in their system headers. This doesn't show up yet as
+ most sim files don't include many system headers, but enabling sockser
+ code for mingw uncovers the conflict.
+
+ Unfortunately the error produced by gcc is inscrutable, but running
+ it through the preprocessor manually manages to provide a pointer to
+ the underlying issue.
+
+ $ i686-w64-mingw32-gcc ... -c -o dv-sockser.o ../../../../sim/mips/../common/dv-sockser.c
+ <command-line>: error: expected identifier or '(' before numeric constant
+ In file included from /usr/i686-w64-mingw32/usr/include/windows.h:71,
+ from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
+ from ../../gnulib/import/sys/socket.h:684,
+ from ../../gnulib/import/netinet/in.h:43,
+ from ../../../../sim/mips/../common/dv-sockser.c:39:
+ /usr/i686-w64-mingw32/usr/include/wingdi.h:2934:59: error: unknown type name 'LPSIZE'; did you mean 'LPSIZEL'?
+ 2934 | WINGDIAPI WINBOOL WINAPI GetAspectRatioFilterEx(HDC hdc,LPSIZE lpsize);
+ | ^~~~~~
+ | LPSIZEL
+ ...
+
+ $ i686-w64-mingw32-gcc ... -E -dD -o dv-sockser.i ../../../../sim/mips/../common/dv-sockser.c
+ $ i686-w64-mingw32-gcc -c dv-sockser.i
+ In file included from /usr/i686-w64-mingw32/usr/include/windows.h:69,
+ from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
+ from ../../gnulib/import/sys/socket.h:684,
+ from ../../gnulib/import/netinet/in.h:43,
+ from ../../../../sim/mips/../common/dv-sockser.c:39:
+ /usr/i686-w64-mingw32/usr/include/windef.h:104:9: error: expected identifier or '(' before numeric constant
+ 104 | } SIZE,*PSIZE,*LPSIZE;
+ | ^~
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: switch to common warning flags
+ Now that the ppc code has been cleaned up enough to use the same set
+ of warning flags as the common code, delete the ppc-specific configure
+ logic so we can leverage what the common code already defined for us.
+
+2021-09-09 Tom de Vries <tdevries@suse.de>
+
+ sim: ppc: enable -Wpointer-sign warnings
+ When compiling with --enable-werror and CFLAGS="-O0 -g -Wall", we run into:
+ ...
+ src/sim/ppc/hw_memory.c: In function 'hw_memory_init_address':
+ src/sim/ppc/hw_memory.c:204:7: error: pointer targets in passing argument 4 \
+ of 'device_find_integer_array_property' differ in signedness \
+ [-Werror=pointer-sign]
+ &new_chunk->size);
+ ^
+ ...
+
+ Fix these by adding an explicit pointer cast. It's a bit ugly to use APIs
+ based on signed integers to read out unsigned values, but in practice, this
+ is par for the course in the ppc code.
+
+ We already use signed APIs and assign the result to unsigned values a lot:
+ see how device_find_integer_property returns a signed integer (cell), but
+ then assign it to unsigned types. The array APIs are not used that often
+ which is why we don't see many warnings, and we disable warnings when we
+ assign signed integers to unsigned integers in general.
+
+ The dtc/libfdt project (which is the standard in other projects) processes
+ the fdt blob as a series of bytes without any type information. Typing is
+ left to the caller. They have core APIs that read/write bytes, and a few
+ helper functions to cast/convert those bytes to the right value (e.g. u32).
+ In this ppc sim code, the core APIs use signed integers, and the callers
+ convert to unsigned, usually implicitly.
+
+ We could add some core APIs to the ppc sim that deal with raw bytes and then
+ add some helpers to convert to the right type, but that seems like a lot of
+ lifting for what boils down to a cast, and is effectively equivalent to all
+ the implicit assignments we use elsewhere. Long term, a lot of the ppc code
+ should either get converted to existing sim common code, or we should stand
+ up proper APIs in the common code first, or use standard libraries to do all
+ the processing (e.g. libfdt). Either way, this device.c code would all get
+ deleted, and callers (like these hw_*.c files) would get converted. Which
+ is also why we go with a cast rather new (but largely unused) APIs.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: enable -Wmissing-declarations & -Wmissing-prototypes
+ This aligns with common code which already uses this flag. We have
+ to add another local prototype to fix the failure, and add another
+ local decl for the SIM_DESC type. Unwinding these will require a
+ lot more work & conversions in the process, so going with the decl
+ for now unblocks the warning unification.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: microblaze: replace custom basic types with common ones
+ The basic "byte" type conflicts with Windows headers, and we already
+ have common types that provide the right sizes. So replace these with
+ the common ones to avoid issues.
+
+ CC dv-sockser.o
+ In file included from /usr/i686-w64-mingw32/usr/include/wtypes.h:8,
+ from /usr/i686-w64-mingw32/usr/include/winscard.h:10,
+ from /usr/i686-w64-mingw32/usr/include/windows.h:97,
+ from /usr/i686-w64-mingw32/usr/include/winsock2.h:23,
+ from ../../gnulib/import/sys/socket.h:684,
+ from ../../gnulib/import/netinet/in.h:43,
+ from .../build/sim/../../../sim/microblaze/../common/dv-sockser.c:39:
+ /usr/i686-w64-mingw32/usr/include/rpcndr.h:63:25: error: conflicting types for 'byte'; have 'unsigned char'
+ 63 | typedef unsigned char byte;
+ | ^~~~
+ In file included from .../buildsim/../../../sim/microblaze/sim-main.h:21,
+ from .../buildsim/../../../sim/microblaze/../common/dv-sockser.c:24:
+ .../buildsim/../../../sim/microblaze/microblaze.h:94:25: note: previous declaration of 'byte' with type 'byte' {aka 'char'}
+ 94 | typedef char byte;
+ | ^~~~
+ make: *** [Makefile:513: dv-sockser.o] Error 1
+
+2021-09-09 Jim Wilson <jimw@sifive.com>
+
+ RISC-V: Pretty print values formed with lui and addiw.
+ The disassembler has support to pretty print values created by an lui/addi
+ pair, but there is no support for addiw. There is also no support for
+ c.addi and c.addiw. This patch extends the pretty printing support to
+ handle these 3 instructions in addition to addi. Existing testcases serve
+ as tests for the new feature.
+
+ opcodes/
+ * riscv-dis.c (maybe_print_address): New arg wide. Sign extend when
+ wide is true.
+ (print_insn_args): Fix calls to maybe_print_address. Add checks for
+ c.addi, c.addiw, and addiw, and call maybe_print_address for them.
+
+ gas/
+ * testsuite/gas/riscv/insn.d: Update for disassembler change.
+ * testsuite/gas/li32.d, testsuite/gas/li64.d: Likwise.
+ * testsuite/gas/lla64.d: Likewise.
+
+2021-09-09 Mike Frysinger <vapier@gentoo.org>
+
+ sim: ppc: align format string settings with common code
+ This copies logic used in the common sim warning configure code to fix
+ build errors for mingw targets. Turning format warnings on triggers
+ a failure in the debug.c file, so apply a minor fix at the same time.
+
+ sim: ppc: drop unnecessary config includes
+ This file is compiled for the --host & --build system which leads to
+ including the configure generated config.h in both environments.
+ This obviously doesn't work when the two targets don't look alike at
+ all and can cause build failures here (e.g. a mingw host & a linux
+ build). Since we don't actually need any config settings in this
+ very simple file, drop the includes entirely.
+
+2021-09-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-08 Mike Frysinger <vapier@gentoo.org>
+
+ gnulib: import various network functions
+ Some sim ports use these to provide networking functionality via the
+ dv-sockser module or via direct emulation for a few ports.
+
+ Gdb seems to build just fine still too.
+
+2021-09-08 Tom Tromey <tromey@adacore.com>
+
+ Fix unit test build on Windows
+ Like Tom de Vries' earlier patch to fix the no-CXX_STD_THREAD case in
+ maint.c, this patch fixes a similar problem in
+ parallel-for-selftests.c. This fixes a build failure on Windows.
+
+2021-09-08 Alan Modra <amodra@gmail.com>
+
+ PowerPC64, sanity check r_offset in relocate_section
+ This hardens the powerpc64 linker code transformations.
+
+ * elf64-ppc.c (is_8byte_reloc, offset_in_range): New functions.
+ (ppc64_elf_relocate_section): Sanity check r_offset before
+ accessing section contents for various code transformations.
+
+2021-09-08 Alan Modra <amodra@gmail.com>
+
+ PowerPC64: Avoid useless work on R_PPC64_TPREL34
+ _bfd_elf_ppc_at_tprel_transform doesn't handle prefix instructions,
+ and I'm not inclined to implement code editing for them.
+
+ * elf64-ppc.c (ppc64_elf_relocate_section): Don't attempt tprel
+ transform for R_PPC64_TPREL34.
+
+2021-09-08 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: make thread_suspend_state::stop_pc optional
+ Currently the stop_pc field of thread_suspect_state is a CORE_ADDR and
+ when we want to indicate that there is no stop_pc available we set
+ this field back to a special value.
+
+ There are actually two special values used, in post_create_inferior
+ the stop_pc is set to 0. This is a little unfortunate, there are
+ plenty of embedded targets where 0 is a valid pc value. The more
+ common special value for stop_pc though, is set in
+ thread_info::set_executing, where the value (~(CORE_ADDR) 0) is used.
+
+ This commit changes things so that the stop_pc is instead a
+ gdb::optional. We can now explicitly reset the field to an
+ uninitialised state, we also have asserts that we don't read the
+ stop_pc when its in an uninitialised state (both in
+ gdbsupport/gdb_optional.h, when compiling with _GLIBCXX_DEBUG
+ defined, and in thread_info::stop_pc).
+
+ One situation where a thread will not have a stop_pc value is when the
+ thread is stopped as a consequence of GDB being in all stop mode, and
+ some other thread stopped at an interesting event. When GDB brings
+ all the other threads to a stop those other threads will not have a
+ stop_pc set (thus avoiding an unnecessary read of the pc register).
+
+ Previously, when GDB passed through handle_one (in infrun.c) the
+ threads executing flag was set to false and the stop_pc field was left
+ unchanged, i.e. it would (previous) have been left as ~0.
+
+ Now, handle_one leaves the stop_pc with no value.
+
+ This caused a problem when we later try to set these threads running
+ again, in proceed() we compare the current pc with the cached stop_pc.
+ If the thread was stopped via handle_one then the stop_pc would have
+ been left as ~0, and the compare (in proceed) would (likely) fail.
+ Now however, this compare tries to read the stop_pc when it has no
+ value and this would trigger an assert.
+
+ To resolve this I've added thread_info::stop_pc_p() which returns true
+ if the thread has a cached stop_pc. We should only ever call
+ thread_info::stop_pc() if we know that there is a cached stop_pc,
+ however, this doesn't mean that every call to thread_info::stop_pc()
+ needs to be guarded with a call to thread_info::stop_pc_p(), in most
+ cases we know that the thread we are looking at stopped due to some
+ interesting event in that thread, and so, we know that the stop_pc is
+ valid.
+
+ After running the testsuite I've seen no other situations where
+ stop_pc is read uninitialised.
+
+ There should be no user visible changes after this commit.
+
+2021-09-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Fix build with undefined CXX_STD_THREAD
+ When building gdb on openSUSE Leap 42.3, we trigger the case that
+ CXX_STD_THREAD is undefined, and run into:
+ ...
+ gdb/maint.c: In function 'void maintenance_show_worker_threads \
+ (ui_file*, int, cmd_list_element*, const char*)':
+ gdb/maint.c:877:14: error: 'gdb::thread_pool' has not been declared
+ gdb::thread_pool::g_thread_pool->thread_count ());
+ ^
+ Makefile:1647: recipe for target 'maint.o' failed
+ make[1]: *** [maint.o] Error 1
+ ...
+
+ Fix this by handling the undefined CXX_STD_THREAD case in
+ maintenance_show_worker_threads, such that we get:
+ ...
+ $ gdb -q -batch -ex "maint show worker-thread"
+ The number of worker threads GDB can use is 0.
+ ...
+
+ Tested on x86_64-linux.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28312
+
+2021-09-08 Mike Frysinger <vapier@gentoo.org>
+
+ sim: update configure target list
+ Fix sorting of the list, and update the globs to match the list used
+ in gdb's configure script.
+
+ gdb: cris: enable sim integration
+ The sim side is already ready to go for cris, so wire it up.
+
+ gdb: aarch64: enable sim integration
+ The sim side is already ready to go for aarch64, so wire it up.
+
+ gdb: sim: consolidate configure settings
+ Moving all the sim settings to one section makes it easier to track,
+ and makes it easier to keep it aligned with the sim target tests.
+ The gdb logic was duplicating this when handling different OS targets
+ instead of having a single cpu check. Now it's more obvious that the
+ sim is tied to a cpu and not related to the OS.
+
+2021-09-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-07 Tom Tromey <tromey@adacore.com>
+
+ Remove unused declaration from gdbserver/win32-low.h
+ I noticed that gdbserver/win32-low.h has an unused declaration. This
+ code was changed a while ago, but this declaration slipped through.
+ This patch removes it. Tested by rebuilding.
+
+2021-09-07 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: make use of std::string in utils.c
+ Replace some of the manual string management (malloc/free) with
+ std::string when creating commands in utils.c.
+
+ Things are a little bit messy as, creating the prefix commands (using
+ add_basic_prefix_cmd and add_show_prefix_cmd), doesn't copy the doc
+ string, while creating the actual set/show commands (using
+ add_setshow_enum_cmd) does copy the doc string.
+
+ As a result, I have retained the use of xstrprintf when creating the
+ prefix command doc strings, but switched to using std::string when
+ creating the actual set/show commands.
+
+ There should be no user visible changes after this commit.
+
+2021-09-07 Luis Machado <luis.machado@linaro.org>
+
+ Revert: [AArch64] MTE corefile support
+ bfd * elf.c (elfcore_make_memtag_note_section): New function.
+ (elfcore_grok_note): Handle NT_MEMTAG note types.
+
+ binutils* readelf.c (get_note_type): Handle NT_MEMTAG note types.
+
+ include * elf/common.h (NT_MEMTAG): New constant.
+ (NT_MEMTAG_TYPE_AARCH_MTE): New constant.
+
+2021-09-07 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: use bool instead of int in struct internal_problem
+ Change struct internal_problem (gdb/utils.c) to use bool instead of
+ int, update the 3 static instances of this structure that we create to
+ use true/false instead of 1/0.
+
+ I've also updated the comments on struct internal_problem as the
+ existing comment doesn't seem to be referring to the structure, it
+ talks about returning something, which doesn't make sense in this
+ context.
+
+ There should be no user visible changes after this commit.
+
+2021-09-07 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: make thread_info::executing private
+ Rename thread_info::executing to thread_info::m_executing, and make it
+ private. Add a new get/set member functions, and convert GDB to make
+ use of these.
+
+ The only real change of interest in this patch is in thread.c where I
+ have deleted the helper function set_executing_thread, and now just
+ use the new set function thread_info::set_executing. However, the old
+ helper function set_executing_thread included some code to reset the
+ thread's stop_pc, so I moved this code into the new function
+ thread_info::set_executing. However, I don't believe there is
+ anywhere that this results in a change of behaviour, previously the
+ executing flag was always set true through a call to
+ set_executing_thread anyway.
+
+2021-09-07 Nick Clifton <nickc@redhat.com>
+
+ Fix an illegal memory access triggered by an atempt to disassemble a corrupt xtensa binary.
+ PR 28305
+ * elf32-xtensa.c (elf_xtensa_do_reloc): Add check for put of range
+ reloc.
+
+2021-09-07 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/python: new function to add values into GDB's history
+ The guile API has (history-append! <value>) to add values into GDB's
+ history list. There is currently no equivalent in the Python API.
+
+ This commit adds gdb.add_history(<value>) to the Python API, this
+ function takes <value> a gdb.Value (or anything that can be passed to
+ the constructor of gdb.Value), and adds the value it represents to
+ GDB's history list. The index of the newly added value is returned.
+
+2021-09-07 Nick Clifton <nickc@redhat.com>
+
+ Fix illegal memory access triggered by an attempt to disassemble a corrupt RISC-V binary.
+ PR 28303
+ * elfxx-riscv.c (riscv_elf_add_sub_reloc): Add check for out of
+ range relocs.
+
+2021-09-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle internal-error in gdb_unload
+ When reverting commit 5a20fadc841 and using gdb_unload instead of runto "bar"
+ to trigger the internal-error in test-case
+ gdb.dwarf2/locexpr-data-member-location.exp, we run into:
+ ...
+ ERROR: couldn't unload file in $gdb (timeout).
+ ...
+ and the test-case takes about 1 minute.
+
+ Fix this by handling internal-error in gdb_unload, such that we have:
+ ...
+ ERROR: Couldn't unload file in $gdb (GDB internal error).
+ ERROR: Could not resync from internal error (eof)
+ ...
+ within 2 seconds.
+
+ Tested on x86_64-linux.
+
+2021-09-07 Alan Modra <amodra@gmail.com>
+
+ PR28307, segfault in ppc64_elf_toc64_reloc
+ Adds missing bfd_reloc_offset_in_range checks to various relocation
+ special_functions.
+
+ PR 28307
+ * elf32-ppc.c (ppc_elf_addr16_ha_reloc): Range check reloc offset.
+ * elf64-ppc.c (ppc64_elf_ha_reloc, ppc64_elf_brtaken_reloc): Likewise.
+ (ppc64_elf_toc64_reloc, ppc64_elf_prefix_reloc): Likewise.
+
+2021-09-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-07 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle internal-error in gdb_run_cmd
+ When reverting commit 5a20fadc841 the test-case
+ gdb.dwarf2/locexpr-data-member-location.exp fails like this:
+ ...
+ FAIL: gdb.dwarf2/locexpr-data-member-location.exp: running to bar in runto \
+ (GDB internal error)
+ ERROR: Could not resync from internal error (eof)
+ ...
+ and takes 1 minute to run.
+
+ The long running time is caused by running into a timeout in gdb_run_cmd, at
+ this point:
+ ...
+ (gdb) run ^M
+ The program being debugged has been started already.^M
+ Start it from the beginning? (y or n) y^M
+ /home/vries/gdb_versions/devel/src/gdb/gdbtypes.c:5583: internal-error: \
+ Unexpected type field location kind: 4^M
+ A problem internal to GDB has been detected,^M
+ further debugging may prove unreliable.^M
+ Quit this debugging session? (y or n)
+ ...
+
+ Fix this by detecting the internal-error in gdb_run_cmd. We don't handle it
+ in gdb_run_cmd, but stash the gdb output back into the buffer using
+ -notransfer, and let the caller proc runto deal with it.
+
+ After the fix, the test-case just takes 2 seconds.
+
+ Tested on x86_64-linux.
+
+2021-09-06 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: rename gdb/testsuite/gdb.arch/riscv64-unwind-prologue-with-ld-lw.c
+ A previous commit added the
+ gdb.arch/riscv64-unwind-prologue-with-ld-lw.exp testcase, but one of its
+ associated file was named after a previous version of the test.
+
+ This commit fixes this and makes sure that all the files linked to this
+ testcase share the same prefix in the name.
+
+ Tested on riscv64 GNU/Linux.
+
+2021-09-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Handle eof in gdb_internal_error_resync
+ Before commit 5a20fadc841 the test-case
+ gdb.dwarf2/locexpr-data-member-location.exp fails like this:
+ ...
+ FAIL: gdb.dwarf2/locexpr-data-member-location.exp: running to bar in runto \
+ (GDB internal error)
+ ERROR: : spawn id exp9 not open
+ while executing
+ "expect {
+ -i exp9 -timeout 10
+ -re "Quit this debugging session\\? \\(y or n\\) $" {
+ send_gdb "n\n" answer
+ incr count
+ }
+ -re "Create ..."
+ ("uplevel" body line 1)
+ invoked from within
+ "uplevel $body" NONE : spawn id exp9 not open
+ ERROR: Could not resync from internal error (timeout)
+ ...
+
+ Fix the:
+ ...
+ ERROR: : spawn id exp9 not open
+ ...
+ by handling eof in gdb_internal_error_resync, such that we have instead:
+ ...
+ FAIL: gdb.dwarf2/locexpr-data-member-location.exp: running to bar in runto \
+ (GDB internal error)
+ ERROR: Could not resync from internal error (eof)
+ ...
+
+ Tested on x86_64-linux.
+
+2021-09-06 Tom Tromey <tom@tromey.com>
+
+ Remove some complaints.h includes
+ There are a few includes of complaints.h that aren't necessary. This
+ patch removes them. Tested by rebuilding.
+
+2021-09-06 Nick Clifton <nickc@redhat.com>
+
+ Fix an illegal memory access triggered by disassembling corrupt s390x binaries.
+ PR 28304
+ * elfxx-score7.c (score_elf_gprel15_reloc): If there is no output bfd
+ treat the reloc as undefined.
+
+ Fix potential use on an uninitialised vairable in the MCore assembler.
+
+ Fix potential uninitialised variable in microblaze assembler code.
+
+2021-09-06 Yinjun Zhang <yinjun.zhang@corigine.com>
+
+ Add a sanity check to the init_nfp6000_mecsr_sec() function in the NFP disassembler.
+
+2021-09-06 Alexandra Hájková <ahajkova@redhat.com>
+
+ gdbtypes.c: Add the case for FIELD_LOC_KIND_DWARF_BLOCK
+ The case for FIELD_LOC_KIND_DWARF_BLOCK was missing for
+ switch TYPE_FIELD_LOC_KIND. Thas caused an internal-error
+ under some circumstances.
+
+ Fixes bug 28030.
+
+2021-09-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Check avx support in gdb.arch/amd64-disp-step-avx.exp
+ On a machine on Open Build Service I'm running into a SIGILL for test-case
+ gdb.arch/amd64-disp-step-avx.exp:
+ ...
+ Program received signal SIGILL, Illegal instruction.^M
+ test_rip_vex2 () at gdb.arch/amd64-disp-step-avx.S:40^M
+ 40 vmovsd ro_var(%rip),%xmm0^M
+ (gdb) FAIL: gdb.arch/amd64-disp-step-avx.exp: vex2: \
+ continue to test_rip_vex2_end
+ ...
+ The SIGILL happens when trying to execute the first avx instruction in the
+ executable.
+
+ I can't directly access the machine, but looking at the log for test-case
+ gdb.arch/i386-avx.exp, it seems that there's no avx support:
+ ...
+ Breakpoint 1, main (argc=1, argv=0x7fffffffd6b8) at gdb.arch/i386-avx.c:68^M
+ 68 if (have_avx ())^M
+ (gdb) print have_avx ()^M
+ $1 = 0^M
+ ...
+
+ Fix this by:
+ - adding a gdb_caching_proc have_avx, similar to have_mpx, using the have_avx
+ function from gdb.arch/i386-avx.c
+ - using proc have_avx in both gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp
+ and gdb/testsuite/gdb.arch/i386-avx.exp.
+
+ Tested on my x86_64-linux laptop with avx support, where both test-cases pass.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-09-04 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/26950
+ * gdb/testsuite/gdb.arch/i386-avx.c (main): Remove call to have_avx.
+ (have_avx): Move ...
+ * gdb/testsuite/lib/gdb.exp (have_avx): ... here. New proc.
+ * gdb/testsuite/gdb.arch/amd64-disp-step-avx.exp: Use have_avx.
+ * gdb/testsuite/gdb.arch/i386-avx.exp: Same.
+
+2021-09-04 Mike Frysinger <vapier@gentoo.org>
+
+ gnulib: import sys_wait
+ A few sims use this to emulate process syscalls.
+ Gdb builds seem to still be fine.
+
+2021-09-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-03 Tom Tromey <tromey@adacore.com>
+
+ Use CORE_ADDR as return type from x86_dr_low_get_addr
+ On a Windows build locally, watchpoints started failing. I tracked
+ this down to x86_dr_low_get_addr returning an 'unsigned long'... in
+ this particular build, this is a 32-bit type, but the inferior is a
+ 64-bit program.
+
+ This patch fixes the problem by changing the return type. No other
+ change is required, because this matches the function pointer in
+ struct x86_dr_low_type.
+
+2021-09-03 Kevin Buettner <kevinb@redhat.com>
+
+ Test case reproducing PR28030 bug
+ The original reproducer for PR28030 required use of a specific
+ compiler version - gcc-c++-11.1.1-3.fc34 is mentioned in the PR,
+ though it seems probable that other gcc versions might also be able to
+ reproduce the bug as well. This commit introduces a test case which,
+ using the DWARF assembler, provides a reproducer which is independent
+ of the compiler version. (Well, it'll work with whatever compilers
+ the DWARF assembler works with.)
+
+ To the best of my knowledge, it's also the first test case which uses
+ the DWARF assembler to provide debug info for a shared object. That
+ being the case, I provided more than the usual commentary which should
+ allow this case to be used as a template when a combo shared
+ library / DWARF assembler test case is required in the future.
+
+ I provide some details regarding the bug in a comment near the
+ beginning of locexpr-dml.exp.
+
+ This problem was difficult to reproduce; I found myself constantly
+ referring to the backtrace while trying to figure out what (else) I
+ might be missing while trying to create a reproducer. Below is a
+ partial backtrace which I include for posterity.
+
+ #0 internal_error (
+ file=0xc50110 "/ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c", line=5575,
+ fmt=0xc520c0 "Unexpected type field location kind: %d")
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdbsupport/errors.cc:51
+ #1 0x00000000006ef0c5 in copy_type_recursive (objfile=0x1635930,
+ type=0x274c260, copied_types=0x30bb290)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c:5575
+ #2 0x00000000006ef382 in copy_type_recursive (objfile=0x1635930,
+ type=0x274ca10, copied_types=0x30bb290)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/gdbtypes.c:5602
+ #3 0x0000000000a7409a in preserve_one_value (value=0x24269f0,
+ objfile=0x1635930, copied_types=0x30bb290)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/value.c:2529
+ #4 0x000000000072012a in gdbscm_preserve_values (
+ extlang=0xc55720 <extension_language_guile>, objfile=0x1635930,
+ copied_types=0x30bb290)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/guile/scm-value.c:94
+ #5 0x00000000006a3f82 in preserve_ext_lang_values (objfile=0x1635930,
+ copied_types=0x30bb290)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/extension.c:568
+ #6 0x0000000000a7428d in preserve_values (objfile=0x1635930)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/value.c:2579
+ #7 0x000000000082d514 in objfile::~objfile (this=0x1635930,
+ __in_chrg=<optimized out>)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:549
+ #8 0x0000000000831cc8 in std::_Sp_counted_ptr<objfile*, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x1654580)
+ at /usr/include/c++/11/bits/shared_ptr_base.h:348
+ #9 0x00000000004e6617 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x1654580) at /usr/include/c++/11/bits/shared_ptr_base.h:168
+ #10 0x00000000004e1d2f in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x190bb88, __in_chrg=<optimized out>)
+ at /usr/include/c++/11/bits/shared_ptr_base.h:705
+ #11 0x000000000082feee in std::__shared_ptr<objfile, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x190bb80, __in_chrg=<optimized out>)
+ at /usr/include/c++/11/bits/shared_ptr_base.h:1154
+ #12 0x000000000082ff0a in std::shared_ptr<objfile>::~shared_ptr (
+ this=0x190bb80, __in_chrg=<optimized out>)
+ at /usr/include/c++/11/bits/shared_ptr.h:122
+ #13 0x000000000085ed7e in __gnu_cxx::new_allocator<std::_List_node<std::shared_ptr<objfile> > >::destroy<std::shared_ptr<objfile> > (this=0x114bc00,
+ __p=0x190bb80) at /usr/include/c++/11/ext/new_allocator.h:168
+ #14 0x000000000085e88d in std::allocator_traits<std::allocator<std::_List_node<std::shared_ptr<objfile> > > >::destroy<std::shared_ptr<objfile> > (__a=...,
+ __p=0x190bb80) at /usr/include/c++/11/bits/alloc_traits.h:531
+ #15 0x000000000085e50c in std::__cxx11::list<std::shared_ptr<objfile>, std::allocator<std::shared_ptr<objfile> > >::_M_erase (this=0x114bc00, __position=
+ std::shared_ptr<objfile> (expired, weak count 1) = {get() = 0x1635930})
+ at /usr/include/c++/11/bits/stl_list.h:1925
+ #16 0x000000000085df0e in std::__cxx11::list<std::shared_ptr<objfile>, std::allocator<std::shared_ptr<objfile> > >::erase (this=0x114bc00, __position=
+ std::shared_ptr<objfile> (expired, weak count 1) = {get() = 0x1635930})
+ at /usr/include/c++/11/bits/list.tcc:158
+ #17 0x000000000085c748 in program_space::remove_objfile (this=0x114bbc0,
+ objfile=0x1635930)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/progspace.c:210
+ #18 0x000000000082d3ae in objfile::unlink (this=0x1635930)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:487
+ #19 0x000000000082e68c in objfile_purge_solibs ()
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/objfiles.c:875
+ #20 0x000000000092dd37 in no_shared_libraries (ignored=0x0, from_tty=1)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/solib.c:1236
+ #21 0x00000000009a37fe in target_pre_inferior (from_tty=1)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/target.c:2496
+ #22 0x00000000007454d6 in run_command_1 (args=0x0, from_tty=1,
+ run_how=RUN_NORMAL)
+ at /ironwood1/sourceware-git/f34-pr28030/bld/../../worktree-pr28030/gdb/infcmd.c:437
+
+ I'll note a few points regarding this backtrace:
+
+ Frame #1 is where the internal error occurs. It's caused by an
+ unhandled case for FIELD_LOC_KIND_DWARF_BLOCK. The fix for this bug
+ adds support for this case.
+
+ Frame #22 - it's a partial backtrace - shows that GDB is attempting to
+ (re)run the program. You can see the exact command sequence that was
+ used for reproducing this problem in the PR (at
+ https://sourceware.org/bugzilla/show_bug.cgi?id=28030), but in a
+ nutshell, after starting the program and advancing to the appropriate
+ source line, GDB was asked to step into libstdc++; a "finish" command
+ was issued, returning a value. The fact that a value was returned is
+ very important. GDB was then used to step back into libstdc++. A
+ breakpoint was set on a source line in the library after which a "run"
+ command was issued.
+
+ Frame #19 shows a call to objfile_purge_solibs. It's aptly named.
+
+ Frame #7 is a call to the destructor for one of the objfile solibs; it
+ turned out to be the one for libstdc++.
+
+ Frames #6 thru #3 show various value preservation frames. If you look
+ at preserve_values() in gdb/value.c, the value history is preserved
+ first, followed by internal variables, followed by values for the
+ extension languages (python and guile).
+
+2021-09-03 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add untested case in gdb.gdb/complaints.exp
+ When building gdb with "-Wall -O2 -g -flto=auto", I run into:
+ ...
+ (gdb) call clear_complaints()^M
+ No symbol "clear_complaints" in current context.^M
+ (gdb) FAIL: gdb.gdb/complaints.exp: clear complaints
+ ...
+
+ The problem is that lto has optimized away clear_complaints, and consequently
+ the selftests cannot run.
+
+ Fix this by:
+ - using info function to detect presence of clear_complaints
+ - handling the absence of clear_complaints by calling untested
+ ...
+ (gdb) UNTESTED: gdb.gdb/complaints.exp: \
+ Cannot find clear_complaints, skipping test
+ ...
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-09-03 Tom de Vries <tdevries@suse.de>
+
+ * gdb.gdb/complaints.exp: Use untested if clear_complaints cannot
+ be found.
+
+2021-09-03 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ gdb: Enable finish command and inferior calls for _Float16 on amd64 and i386.
+ Values of type _Float16 and _Float16 _Complex can now be used on CPUs with
+ AVX512-FP16 support. Return values of those types are located in XMM0.
+ Compiler support for gcc and clang is in progress, see e.g.:
+ https://gcc.gnu.org/pipermail/gcc-patches/2021-July/574117.html
+
+ gdb/ChangeLog:
+ 2021-07-21 Felix Willgerodt <Felix.Willgerodt@intel.com>
+
+ * amd64-tdep.c (amd64_classify): Classify _Float16 and
+ _Float16 _Complex as AMD64_SSE.
+ * i386-tdep.c (i386_extract_return_value): Read _Float16 and
+ _Float16 _Complex from xmm0.
+
+ gdb/testsuite/ChangeLog:
+ 2021-07-21 Felix Willgerodt <Felix.Willgerodt@intel.com>
+
+ * gdb.arch/x86-avx512fp16-abi.c: New file.
+ * gdb.arch/x86-avx512fp16-abi.exp: New file.
+
+2021-09-03 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ Add half support for AVX512 register view.
+ This adds support for the half datatype, FP16, to the AVX512 register printing.
+
+ gdb/ChangeLog:
+ 2020-07-21 Felix Willgerodt <Felix.Willgerodt@intel.com>
+
+ * i386-tdep.c (i386_zmm_type) <v32_half>: New field.
+ (i386_ymm_type) <v16_half>: New field.
+ (i386_gdbarch_init): Add set_gdbarch_half_format.
+ * features/i386/64bit-avx512.xml: Add half type.
+ * features/i386/64bit-avx512.c: Regenerated.
+ * features/i386/64bit-sse.xml: Add half type.
+ * features/i386/64bit-sse.c: Regenerated.
+
+ gdb/testsuite/ChangeLog:
+ 2021-07-21 Felix Willgerodt <Felix.Willgerodt@intel.com>
+
+ * gdb.arch/x86-avx512fp16.c: New file.
+ * gdb.arch/x86-avx512fp16.exp: New file.
+ * lib/gdb.exp (skip_avx512fp16_tests): New function.
+
+2021-09-03 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ gdb, i386: Enable AVX512-bfloat16 for i386 targets.
+ Values of type bfloat16 can also be used on 32-bit targets, which was missed
+ in the original enablement. This also adjusts the testcase to pass with
+ "unix/-m32", where only the lower 8 AVX registers are available.
+
+ gdb/ChangeLog:
+ 2021-07-21 Felix Willgerodt <Felix.Willgerodt@intel.com>
+
+ * features/i386/32bit-sse.xml: Add bfloat16 type.
+ * features/i386/32bit-sse.c: Regenerated.
+
+ gdb/testsuite/ChangeLog:
+ 2021-07-21 Felix Willgerodt <Felix.Willgerodt@intel.com>
+
+ * gdb.arch/x86-avx512bf16.exp: Only use x/z/ymm 0-7.
+
+2021-09-03 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add untested case in selftest_setup
+ When building gdb with "-Wall -O2 -g -flto=auto", I run into:
+ ...
+ FAIL: gdb.gdb/python-helper.exp: breakpoint in captured_main \
+ (got interactive prompt)
+ FAIL: gdb.gdb/python-helper.exp: run until breakpoint at captured_main
+ WARNING: Couldn't test self
+ ...
+ and similar in gdb.gdb/selftest.exp.
+
+ The first FAIL in more detail:
+ ...
+ (gdb) break captured_main^M
+ Function "captured_main" not defined.^M
+ Make breakpoint pending on future shared library load? (y or [n]) n^M
+ (gdb) FAIL: gdb.gdb/python-helper.exp: breakpoint in captured_main \
+ (got interactive prompt)
+ ...
+
+ The problem is that lto has optimized away the captured_main function
+ and consequently the selftests dependent on that cannot run.
+
+ Fix this by:
+ - using gdb_breakpoint to detect failure to set the breakpoint
+ - handling the failure to set a breakpoint by calling untested
+ - not emitting the warning if we've already got untested
+ such that we have:
+ ...
+ (gdb) UNTESTED: gdb.gdb/python-helper.exp: Cannot set breakpoint at \
+ captured_main, skipping testcase.
+ ...
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-09-02 Tom de Vries <tdevries@suse.de>
+
+ * lib/selftest-support.exp: Emit untested when not being able to set
+ breakpoint.
+
+2021-09-03 Alan Modra <amodra@gmail.com>
+
+ ld testsuite tidy
+ Fixes a few issues:
+ 1) If you use "-fsanitize=address,undefined" in CFLAGS, the Makefile
+ attempt to trim off -fsanitize options left us with ",undefined".
+ 2) ld_compile adds CFLAGS_FOR_TARGET itself, no need to pass it.
+ 3) CFLAGS might be needed linking bootstrap test.
+
+ * Makefile.am (CFLAGS_FOR_TARGET, CXXFLAGS_FOR_TARGET): Trim off
+ all -fsanitize=*.
+ * Makefile.in: Regenerate.
+ * testsuite/ld-bootstrap/bootstrap.exp: Use CFLAGS when linking.
+ * testsuite/ld-cdtest/cdtest.exp: Use CFLAGS_FOR_TARGET when
+ linking.
+ * testsuite/ld-auto-import/auto-import.exp: Don't pass
+ CFLAGS_FOR_TARGET to ld_compile.
+ * testsuite/ld-cygwin/exe-export.exp: Likewise.
+ * testsuite/ld-elfvers/vers.exp: Likewise.
+ * testsuite/ld-elfvsb/elfvsb.exp: Likewise.
+ * testsuite/ld-elfweak/elfweak.exp: Likewise.
+ * testsuite/ld-gc/gc.exp: Likewise.
+ * testsuite/ld-pe/pe-compile.exp: Likewise.
+ * testsuite/ld-pe/pe-run.exp: Likewise.
+ * testsuite/ld-pe/pe-run2.exp: Likewise.
+ * testsuite/ld-plugin/plugin.exp: Likewise.
+ * testsuite/ld-shared/shared.exp: Likewise.
+ * testsuite/ld-elfcomm/elfcomm.exp: Likewise, and don't allow
+ nios2 testing to trash CFLAGS_FOR_TARGET.
+ * testsuite/ld-scripts/crossref.exp: Don't pass options in
+ CC_FOR_TARGET, do so in CFLAGS_FOR_TARGET instead.
+ * testsuite/ld-srec/srec.exp: Likewise, and for CXX.
+
+2021-09-03 Alan Modra <amodra@gmail.com>
+
+ CC_FOR_TARGET et al
+ The top level Makefile, the ld Makefile and others, define
+ CC_FOR_TARGET to be a compiler for the binutils target machine. This
+ is the compiler that should be used for almost all tests with C
+ source. There are _FOR_TARGET versions of CFLAGS, CXX, and CXXFLAGS
+ too. This was all supposed to work with the testsuite .exp files
+ using CC for the target compiler, and CC_FOR_HOST for the host
+ compiler, with the makefiles passing CC=$CC_FOR_TARGET and
+ CC_FOR_HOST=$CC to the runtest invocation.
+
+ One exception to the rule of using CC_FOR_TARGET is the native-only ld
+ bootstrap test, which uses the newly built ld to link a copy of
+ itself. Since the files being linked were created with the host
+ compiler, the boostrap test should use CC and CFLAGS, in case some
+ host compiler option provides needed libraries automatically.
+ However, bootstrap.exp used CC where it should have used CC_FOR_HOST.
+ I set about fixing that problem, then decided that playing games in
+ the makefiles with CC was a bad idea. Not only is it confusing, but
+ other dejagnu code knows about CC_FOR_TARGET. See dejagnu/target.exp.
+
+ So this patch gets rid of the makefile variable renaming and changes
+ all the .exp files to use the correct _FOR_TARGET variables.
+ CC_FOR_HOST and CFLAGS_FOR_HOST disappear. A followup patch will
+ correct bootstrap.exp to use CFLAGS, and a number of other things I
+ noticed.
+
+ binutils/
+ * testsuite/lib/binutils-common.exp (run_dump_test): Use
+ CC_FOR_TARGET and CFLAGS_FOR_TARGET rather than CC and CFLAGS.
+ ld/
+ * Makefile.am (check-DEJAGNU): Don't set CC to CC_FOR_TARGET
+ and similar. Pass variables with unchanged names. Don't set
+ CC_FOR_HOST or CFLAGS_FOR_HOST.
+ * Makefile.in: Regenerate.
+ * testsuite/config/default.exp: Update default CC and similar.
+ (compiler_supports, plug_opt): Use CC_FOR_TARGET.
+ * testsuite/ld-cdtest/cdtest.exp: Replace all uses of CC with
+ CC_FOR_TARGET, and similarly for CFLAGS, CXX and CXXFLAGS.
+ * testsuite/ld-auto-import/auto-import.exp: Likewise.
+ * testsuite/ld-cygwin/exe-export.exp: Likewise.
+ * testsuite/ld-elf/dwarf.exp: Likewise.
+ * testsuite/ld-elf/indirect.exp: Likewise.
+ * testsuite/ld-elf/shared.exp: Likewise.
+ * testsuite/ld-elfcomm/elfcomm.exp: Likewise.
+ * testsuite/ld-elfvers/vers.exp: Likewise.
+ * testsuite/ld-elfvsb/elfvsb.exp: Likewise.
+ * testsuite/ld-elfweak/elfweak.exp: Likewise.
+ * testsuite/ld-gc/gc.exp: Likewise.
+ * testsuite/ld-ifunc/ifunc.exp: Likewise.
+ * testsuite/ld-mn10300/mn10300.exp: Likewise.
+ * testsuite/ld-pe/pe-compile.exp: Likewise.
+ * testsuite/ld-pe/pe-run.exp: Likewise.
+ * testsuite/ld-pe/pe-run2.exp: Likewise.
+ * testsuite/ld-pie/pie.exp: Likewise.
+ * testsuite/ld-plugin/lto.exp: Likewise.
+ * testsuite/ld-plugin/plugin.exp: Likewise.
+ * testsuite/ld-scripts/crossref.exp: Likewise.
+ * testsuite/ld-selective/selective.exp: Likewise.
+ * testsuite/ld-sh/sh.exp: Likewise.
+ * testsuite/ld-shared/shared.exp: Likewise.
+ * testsuite/ld-srec/srec.exp: Likewise.
+ * testsuite/ld-undefined/undefined.exp: Likewise.
+ * testsuite/ld-unique/unique.exp: Likewise.
+ * testsuite/ld-x86-64/tls.exp: Likewise.
+ * testsuite/lib/ld-lib.exp: Likewise.
+ libctf/
+ * Makefile.am (check-DEJAGNU): Don't set CC to CC_FOR_TARGET.
+ Pass CC and CC_FOR_TARGET. Don't set CC_FOR_HOST.
+ * Makefile.in: Regenerate.
+ * testsuite/config/default.exp: Update default CC and similar.
+ * testsuite/lib/ctf-lib.exp (run_native_host_cmd): Use CC rather
+ than CC_FOR_HOST.
+ (run_lookup_test): Use CC_FOR_TARGET and CFLAGS_FOR_TARGET.
+
+2021-09-03 Alan Modra <amodra@gmail.com>
+
+ pj: asan: out of bounds, ubsan: left shift of negative
+ * pj-dis.c: Include libiberty.h.
+ (print_insn_pj): Don't index op->arg past array bound. Don't
+ left shift negative int.
+
+ ubsan: alpha: member access within null pointer
+ * elf64-alpha.c (elf64_alpha_relax_with_lituse): Avoid UB.
+
+ ubsan: libctf: applying zero offset to null pointer
+ * ctf-open.c (init_symtab): Avoid ubsan error.
+
+2021-09-03 Alan Modra <amodra@gmail.com>
+
+ haiku tidy
+ --enable-maintainer-mode showed a number of files needing to be
+ regenerated, and in the case of ld/Makefile.in that the file was
+ regenerated by hand. Nothing to see here really.
+
+ ld/
+ * Makefile.am (ALL_64_EMULATION_SOURCES): Sort haiku entry.
+ * Makefile.in: Regenerate.
+ * po/BLD-POTFILES.in: Regenerate.
+ libctf/
+ * configure: Regenerate.
+ zlib/
+ * configure: Regenerate.
+
+2021-09-03 Fangrui Song <maskray@google.com>
+
+ gold: --export-dynamic-symbol: don't imply -u
+ to match GNU ld.
+
+ gold/
+ * archive.cc (Library_base::should_include_member): Don't handle
+ --export-dynamic-symbol.
+ * symtab.cc (Symbol_table::do_add_undefined_symbols_from_command_line):
+ Likewise.
+
+2021-09-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-02 Alexander von Gluck IV <kallisti5@unixzen.com>
+
+ Add support for the haiku operating system. These are the os support patches we have been grooming and maintaining for quite a few years over on git.haiku-os.org. All of these architectures are working and most have been stable for quite some time.
+
+2021-09-02 Nick Clifton <nickc@redhat.com>
+
+ Fix the V850 assembler's generation of relocations for the st.b instruction.
+ PR 28292
+ gas * config/tc-v850.c (handle_lo16): Also accept
+ BFD_RELOC_V850_LO16_SPLIT_OFFSET.
+ * testsuite/gas/v850/split-lo16.s: Add extra line.
+ * testsuite/gas/v850/split-lo16.d: Update expected disassembly.
+
+ opcodes * v850-opc.c (D16): Use BFD_RELOC_V850_LO16_SPLIT_OFFSET in place
+ of BFD_RELOC_16.
+
+2021-09-02 Alan Modra <amodra@gmail.com>
+
+ SHT_SYMTAB_SHNDX handling
+ .symtab_shndx section contents is an array, one entry for each symbol
+ in .symtab, present when the number of symbols exceeds a little less
+ than 64k. Since the mapping is 1-1 with symbols there is no need to
+ keep both dest_index and destshndx_index in elf_sym_strtab. Instead,
+ just make sure that the shndx pointers to the swap functions are kept
+ NULL when .symtab_shndx does not exist. Also, strtabcount in the
+ linker's elf hash table is incremented in lock-step with the output
+ symcount, so that can disappear too.
+
+2021-09-02 Alan Modra <amodra@gmail.com>
+
+ PTR_ADD and NPTR_ADD for bfd.h
+ This defines a couple of macros used to avoid ubsan complaints about
+ calculations involving NULL pointers. PTR_ADD should be used in the
+ case where it is known that the offset is always zero with a NULL
+ pointer, and you'd like to know if a non-zero offset is ever used.
+ NPTR_ADD should be rarely used, but is defined for cases where a
+ non-zero offset is expected and should be ignored if the pointer is
+ NULL.
+
+ bfd/
+ * bfd-in.h (PTR_ADD, NPTR_ADD): Define.
+ * bfd-in2.h: Regenerate.
+ * elf-eh-frame.c (adjust_eh_frame_local_symbols): Avoid NULL
+ pointer calculations.
+ * elflink.c (_bfd_elf_strip_zero_sized_dynamic_sections): Likewise.
+ (bfd_elf_add_dt_needed_tag, elf_finalize_dynstr): Likewise.
+ (elf_link_add_object_symbols, elf_link_input_bfd): Likewise.
+ (bfd_elf_final_link, bfd_elf_gc_record_vtinherit): Likewise.
+ binutils/
+ * objdump.c (disassemble_section): Use PTR_ADD for rel_ppend.
+
+2021-09-02 Alan Modra <amodra@gmail.com>
+
+ obstack.h __PTR_ALIGN vs. ubsan
+ Current ubsan complains on every use of __PTR_ALIGN (when ptrdiff_t is
+ as large as a pointer), due to making calculations relative to a NULL
+ pointer. This patch avoids the problem by extracting out and
+ simplifying __BPTR_ALIGN for the usual case. I've continued to use
+ ptrdiff_t here, where it might be better to throw away __BPTR_ALIGN
+ entirely and just assume uintptr_t exists.
+
+ * obstack.h (__PTR_ALIGN): Expand and simplify __BPTR_ALIGN
+ rather than calculating relative to a NULL pointer.
+
+2021-09-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-09-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix dwo path in fission-*.S
+ [ Using $build for /home/vries/gdb_versions/devel/build to make things a bit
+ more readable. ]
+
+ When using make check// to run test-case gdb.dwarf2/fission-base.exp:
+ ...
+ ( cd $build/gdb; make check//unix RUNTESTFLAGS="fission-base.exp" )
+ ...
+ we run into:
+ ...
+ (gdb) file \
+ $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base^M
+ Reading symbols from \
+ $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base...^M
+ warning: Could not find DWO CU \
+ $build/gdb/testsuite.1/outputs/gdb.dwarf2/fission-base/fission-base.dwo \
+ (0x807060504030201) referenced by CU at offset 0xc7 [in module \
+ $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base]^M
+ ...
+
+ The problem is that the executable refers to the dwo file using path name
+ $build/gdb/testsuite.1/outputs/gdb.dwarf2/fission-base/fission-base.dwo,
+ while the actual dwo file is at
+ $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base.dwo.
+
+ This is caused by this trick in fission-base.S:
+ ...
+ #define XSTR(s) STR(s)
+ #define STR(s) #s
+ ...
+ .asciz XSTR(DWO) # DW_AT_GNU_dwo_name
+ ...
+ and:
+ ...
+ $ echo | gcc -E -dD - | grep "define unix"
+ ...
+
+ I used this trick to avoid doing additional_flags=-DDWO=\"$dwo\", since I was
+ concerned that there could be quoting issues.
+
+ However, I've found other uses of this pattern, f.i. in
+ gdb/testsuite/gdb.base/corefile-buildid.exp:
+ ...
+ additional_flags=-DSHLIB_NAME=\"$dlopen_lib\"]
+ ...
+
+ So, fix this by:
+ - using additional_flags=-DDWO=\"$dwo\" and
+ - using plain DWO instead of XSTR(DWO)
+
+ Likewise in other gdb.dwarf2/fission*.exp test-cases.
+
+ Tested on x86_64-linux, using make check//unix.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-09-01 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/28298
+ * gdb.dwarf2/fission-base.S: Use DWO instead of XSTR(DWO).
+ * gdb.dwarf2/fission-loclists-pie.S: Same.
+ * gdb.dwarf2/fission-loclists.S: Same.
+ * gdb.dwarf2/fission-reread.S: Same.
+ * gdb.dwarf2/fission-base.exp: Use additional_flags=-DDWO=\"$dwo\".
+ * gdb.dwarf2/fission-loclists-pie.exp: Same.
+ * gdb.dwarf2/fission-loclists.exp: Same.
+ * gdb.dwarf2/fission-reread.exp: Same.
+
+2021-09-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.fortran/call-no-debug.exp symbol search
+ On openSUSE Tumbleweed I ran into:
+ ...
+ (gdb) ptype outstring_func.part^M
+ No symbol "outstring_func" in current context.^M
+ (gdb) FAIL: gdb.fortran/call-no-debug.exp: ptype outstring_func.part
+ ...
+ while on openSUSE Leap 15.2 I have instead:
+ ...
+ (gdb) ptype string_func_^M
+ type = <unknown return type> ()^M
+ (gdb) PASS: gdb.fortran/call-no-debug.exp: ptype string_func_
+ ...
+
+ The difference is caused by the result for "info function string_func", which
+ is this for the latter:
+ ...
+ (gdb) info function string_func^M
+ All functions matching regular expression "string_func":^M
+ ^M
+ Non-debugging symbols:^M
+ 0x000000000040089c string_func_^M
+ ...
+ but this for the former:
+ ...
+ (gdb) info function string_func^M
+ All functions matching regular expression "string_func":^M
+ ^M
+ Non-debugging symbols:^M
+ 0x00000000004012bb string_func_^M
+ 0x00007ffff7bac5b0 outstring_func.part^M
+ 0x00007ffff7bb1a00 outstring_func.part^M
+ ...
+
+ The extra symbols are part of glibc:
+ ...
+ $ nm /lib64/libc.so.6 | grep string_func
+ 00000000000695b0 t outstring_func.part.0
+ 000000000006ea00 t outstring_func.part.0
+ ...
+
+ If glibc debug info is installed, we get instead:
+ ...
+ (gdb) info function string_func^M
+ All functions matching regular expression "string_func":^M
+ ^M
+ File /usr/src/debug/glibc-2.33-9.1.x86_64/stdio-common/vfprintf-internal.c:^M
+ 236: static int outstring_func(int, size_t, const unsigned int *, FILE *);^M
+ ^M
+ File vfprintf-internal.c:^M
+ 236: static int outstring_func(int, size_t, const unsigned char *, FILE *);^M
+ ^M
+ Non-debugging symbols:^M
+ 0x00000000004012bb string_func_^M
+ ...
+ and the FAIL doesn't trigger.
+
+ Fix this by calling "info function string_func" before starting the exec, such
+ that only symbols of the exec are taken into account.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-09-01 Tom de Vries <tdevries@suse.de>
+
+ * gdb.fortran/call-no-debug.exp: Avoid shared lib symbols for
+ find_mangled_name calls.
+
+2021-09-01 Yinjun Zhang <yinjun.zhang@corigine.com>
+
+ nfp: add validity check of island and me
+ AddressSanitizer detects heap-buffer-overflow when running
+ "objdump -D" for nfp .nffw files.
+
+ PR 27854
+ * nfp-dis.c (_NFP_ISLAND_MAX, _NFP_ME_MAX): Define.
+ (nfp_priv_data): ..and use here.
+ (_print_instrs): Sanity check island and menum.
+
+2021-09-01 Alan Modra <amodra@gmail.com>
+
+ PR28250, Null pointer dereference in debug_class_type_samep
+ Typo fix, obviously should be m1->variants != NULL, not
+ m1->variants == NULL.
+
+ PR 28250
+ * debug.c (debug_class_type_samep): Correct m1->variants test.
+
+2021-09-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-31 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove breakpoint_find_if
+ Remove breakpoint_find_if, replace its sole usage with using
+ all_breakpoints directly instead. At the same time, change return
+ types to use bool.
+
+ Change-Id: I9ec392236b4804b362d16ab563330b9c07311106
+
+2021-08-31 Nick Clifton <nickc@redhat.com>
+
+ Update the how-to-make-a-release document so that a check for empty manual pages is included. cf PR 28144
+
+2021-08-31 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Extend .insn directive to support hardcode encoding.
+ The .insn directive can let users use their own instructions, or
+ some new instruction, which haven't supported in the old binutils.
+ For example, if users want to use sifive cache instruction, they
+ cannot just write "cflush.d1.l1" in the assembly code, they should
+ use ".insn i SYSTEM, 0, x0, x10, -0x40". But the .insn directive
+ may not easy to use for some cases, and not so friendly to users.
+ Therefore, I believe most of the users will use ".word 0xfc050073",
+ to encode the instructions directly, rather than use .insn. But
+ once we have supported the mapping symbols, the .word directives
+ are marked as data, so disassembler won't dump them as instructions
+ as usual. I have discussed this with Kito many times, we all think
+ extend the .insn direcitve to support the hardcode encoding, is the
+ easiest way to resolve the problem. Therefore, there are two more
+ .insn formats are proposed as follows,
+
+ (original) .insn <type>, <operand1>, <operand2>, ...
+ .insn <insn-length>, <value>
+ .insn <value>
+
+ The <type> is string, and the <insn-length> and <value> are constants.
+
+ gas/
+ * config/tc-riscv.c (riscv_ip_hardcode): Similar to riscv_ip,
+ but assembles an instruction according to the hardcode values
+ of .insn directive.
+ * doc/c-riscv.texi: Document two new .insn formats.
+ * testsuite/gas/riscv/insn-fail.d: New testcases.
+ * testsuite/gas/riscv/insn-fail.l: Likewise.
+ * testsuite/gas/riscv/insn-fail.s: Likewise.
+ * testsuite/gas/riscv/insn.d: Updated.
+ * testsuite/gas/riscv/insn.s: Likewise.
+
+2021-08-31 John Baldwin <jhb@FreeBSD.org>
+
+ Use gdbfmt for vprintf_filtered.
+ gdbfmt was already used for printf_filtered, so using it for
+ vprintf_filtered is more consistent.
+
+ As a result, all callers of vfprintf_maybe_filtered now use gdbfmt, so
+ the function can be simplified to assume the gdbfmt case and remove
+ the associated bool argument. Similary, vprintf_filtered is now a
+ simple wrapper around vfprintf_filtered.
+
+2021-08-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-30 John Baldwin <jhb@FreeBSD.org>
+
+ fbsd-nat: Don't use '%jd' and '%ju' with printf_filtered.
+ The handler for 'info proc status' for native processes on FreeBSD
+ uses the 'j' size modifier along with uintmax_t / intmax_t casts to
+ output integer values for types such as off_t that are not aliases of
+ a basic C type such as 'int' or 'long'. printf_filtered does not
+ support the 'j' modifer, so this resulted in runtime errors in
+ practice:
+
+ (gdb) info proc stat
+ process 8674
+ Name: ls
+ State: T (stopped)
+ Parent process: 8673
+ Process group: 8674
+ Session id: 2779
+ Unrecognized format specifier 'j' in printf
+
+ Instead, use plongest and pulongest to generate the output strings of
+ these integer values.
+
+2021-08-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix build error in unittests/parallel-for-selftests.c
+ We get this error when building GDB on some platforms. I get it using
+ g++-10 on Ubuntu 20.04 (installed using the distro package). It was
+ also reported by John Baldwin, using a clang that uses libc++.
+
+ CXX unittests/parallel-for-selftests.o
+ cc1plus: warning: command line option '-Wmissing-prototypes' is valid for C/ObjC but not for C++
+ /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c: In function 'void selftests::parallel_for::test(int)':
+ /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:53:30: error: use of deleted function 'std::atomic<int>::atomic(const std::atomic<int>&)'
+ 53 | std::atomic<int> counter = 0;
+ | ^
+ In file included from /usr/include/c++/9/future:42,
+ from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/thread-pool.h:29,
+ from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/parallel-for.h:26,
+ from /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:22:
+ /usr/include/c++/9/atomic:755:7: note: declared here
+ 755 | atomic(const atomic&) = delete;
+ | ^~~~~~
+ /usr/include/c++/9/atomic:759:17: note: after user-defined conversion: 'constexpr std::atomic<int>::atomic(std::atomic<int>::__integral_type)'
+ 759 | constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
+ | ^~~~~~
+
+ I haven't dug to know why it does not happen everywhere, but this patch
+ fixes it by using the constructor to initialize the variable, rather
+ than the assignment operator.
+
+ Change-Id: I6b27958171bf6187f6a875657395fd10441db7e6
+
+2021-08-30 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: PR28291, Fix the gdb fails that PR27916 caused.
+ * According to PR28291, we get the following unexpected gdb behavior,
+
+ (gdb) disassemble 0x0,+4
+ Dump of assembler code from 0x0 to 0x4:
+ 0x0000000000000000:
+ 0x0000000000000001:
+ 0x0000000000000002:
+ 0x0000000000000003:
+ End of assembler dump.
+
+ * This patch should fix it to the right behavior,
+
+ (gdb) disassemble 0x0,+4
+ Dump of assembler code from 0x0 to 0x4:
+ 0x0000000000000000: Cannot access memory at address 0x0
+
+ opcodes/
+ pr 28291
+ * riscv-dis.c (print_insn_riscv): Return STATUS if it is not zero.
+
+2021-08-30 Tom Tromey <tom@tromey.com>
+
+ Add some parallel_for_each tests
+ Tom de Vries noticed that a patch in the DWARF scanner rewrite series
+ caused a regression in parallel_for_each -- it started crashing in the
+ case where the number of threads is 0 (there was an unchecked use of
+ "n-1" that was used to size an array).
+
+ He also pointed out that there were no tests of parallel_for_each.
+ This adds a few tests of parallel_for_each, primarily testing that
+ different settings for the number of threads will work. This test
+ catches the bug that he found in that series.
+
+2021-08-30 Tom Tromey <tom@tromey.com>
+
+ Add a show function for "maint show worker-threads"
+ I wanted to see how many threads gdb thought it was using, but
+ "maint show worker-threads" only reported "unlimited". This patch
+ adds a show function so that it will now report the number of threads
+ gdb has started.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-08-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/cli] Don't assert on empty string for core-file
+ With current gdb we run into:
+ ...
+ $ gdb -batch '' ''
+ : No such file or directory.
+ pathstuff.cc:132: internal-error: \
+ gdb::unique_xmalloc_ptr<char> gdb_abspath(const char*): \
+ Assertion `path != NULL && path[0] != '\0'' failed.
+ ...
+
+ Fix this by skipping the call to gdb_abspath in core_target_open in the
+ empty-string case, such that we have instead:
+ ...
+ $ gdb -batch '' ''
+ : No such file or directory.
+ : No such file or directory.
+ $
+ ...
+
+ Tested on x86_64-linux.
+
+ gdb/ChangeLog:
+
+ 2021-08-30 Tom de Vries <tdevries@suse.de>
+
+ PR cli/28290
+ * gdb/corelow.c (core_target_open): Skip call to gdb_abspath in the
+ empty-string case.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-30 Tom de Vries <tdevries@suse.de>
+
+ PR cli/28290
+ * gdb.base/batch-exit-status.exp: Add gdb '' and gdb '' '' tests.
+
+2021-08-30 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: PR27916, Support mapping symbols.
+ Similar to ARM/AARCH64, we add mapping symbols in the symbol table,
+ to mark the start addresses of data and instructions. The $d means
+ data, and the $x means instruction. Then the disassembler uses these
+ symbols to decide whether we should dump data or instruction.
+
+ Consider the mapping-04 test case,
+ $ cat tmp.s
+ .text
+ .option norelax
+ .option norvc
+ .fill 2, 4, 0x1001
+ .byte 1
+ .word 0
+ .balign 8
+ add a0, a0, a0
+ .fill 5, 2, 0x2002
+ add a1, a1, a1
+ .data
+ .word 0x1 # No need to add mapping symbols.
+ .word 0x2
+
+ $ riscv64-unknown-elf-as tmp.s -o tmp.o
+ $ riscv64-unknown-elf-objdump -d tmp.o
+
+ Disassembly of section .text:
+
+ 0000000000000000 <.text>:
+ 0: 00001001 .word 0x00001001 # Marked $d, .fill directive.
+ 4: 00001001 .word 0x00001001
+ 8: 00000001 .word 0x00000001 # .byte + part of .word.
+ c: 00 .byte 0x00 # remaining .word.
+ d: 00 .byte 0x00 # Marked $d, odd byte of alignment.
+ e: 0001 nop # Marked $x, nops for alignment.
+ 10: 00a50533 add a0,a0,a0
+ 14: 20022002 .word 0x20022002 # Marked $d, .fill directive.
+ 18: 20022002 .word 0x20022002
+ 1c: 2002 .short 0x2002
+ 1e: 00b585b3 add a1,a1,a1 # Marked $x.
+ 22: 0001 nop # Section tail alignment.
+ 24: 00000013 nop
+
+ * Use $d and $x to mark the distribution of data and instructions.
+ Alignments of code are recognized as instructions, since we usually
+ fill nops for them.
+
+ * If the alignment have odd bytes, then we cannot just fill the nops
+ into the spaces. We always fill an odd byte 0x00 at the start of
+ the spaces. Therefore, add a $d mapping symbol for the odd byte,
+ to tell disassembler that it isn't an instruction. The behavior
+ is same as Arm and Aarch64.
+
+ The elf/linux toolchain regressions all passed. Besides, I also
+ disable the mapping symbols internally, but use the new objudmp, the
+ regressions passed, too. Therefore, the new objudmp should dump
+ the objects corretly, even if they don't have any mapping symbols.
+
+ bfd/
+ pr 27916
+ * cpu-riscv.c (riscv_elf_is_mapping_symbols): Define mapping symbols.
+ * cpu-riscv.h: extern riscv_elf_is_mapping_symbols.
+ * elfnn-riscv.c (riscv_maybe_function_sym): Do not choose mapping
+ symbols as a function name.
+ (riscv_elf_is_target_special_symbol): Add mapping symbols.
+ binutils/
+ pr 27916
+ * testsuite/binutils-all/readelf.s: Updated.
+ * testsuite/binutils-all/readelf.s-64: Likewise.
+ * testsuite/binutils-all/readelf.s-64-unused: Likewise.
+ * testsuite/binutils-all/readelf.ss: Likewise.
+ * testsuite/binutils-all/readelf.ss-64: Likewise.
+ * testsuite/binutils-all/readelf.ss-64-unused: Likewise.
+ gas/
+ pr 27916
+ * config/tc-riscv.c (make_mapping_symbol): Create a new mapping symbol.
+ (riscv_mapping_state): Decide whether to create mapping symbol for
+ frag_now. Only add the mapping symbols to text sections.
+ (riscv_add_odd_padding_symbol): Add the mapping symbols for the
+ riscv_handle_align, which have odd bytes spaces.
+ (riscv_check_mapping_symbols): Remove any excess mapping symbols.
+ (md_assemble): Marked as MAP_INSN.
+ (riscv_frag_align_code): Marked as MAP_INSN.
+ (riscv_init_frag): Add mapping symbols for frag, it usually called
+ by frag_var. Marked as MAP_DATA for rs_align and rs_fill, and
+ marked as MAP_INSN for rs_align_code.
+ (s_riscv_insn): Marked as MAP_INSN.
+ (riscv_adjust_symtab): Call riscv_check_mapping_symbols.
+ * config/tc-riscv.h (md_cons_align): Defined to riscv_mapping_state
+ with MAP_DATA.
+ (TC_SEGMENT_INFO_TYPE): Record mapping state for each segment.
+ (TC_FRAG_TYPE): Record the first and last mapping symbols for the
+ fragments. The first mapping symbol must be placed at the start
+ of the fragment.
+ (TC_FRAG_INIT): Defined to riscv_init_frag.
+ * testsuite/gas/riscv/mapping-01.s: New testcase.
+ * testsuite/gas/riscv/mapping-01a.d: Likewise.
+ * testsuite/gas/riscv/mapping-01b.d: Likewise.
+ * testsuite/gas/riscv/mapping-02.s: Likewise.
+ * testsuite/gas/riscv/mapping-02a.d: Likewise.
+ * testsuite/gas/riscv/mapping-02b.d: Likewise.
+ * testsuite/gas/riscv/mapping-03.s: Likewise.
+ * testsuite/gas/riscv/mapping-03a.d: Likewise.
+ * testsuite/gas/riscv/mapping-03b.d: Likewise.
+ * testsuite/gas/riscv/mapping-04.s: Likewise.
+ * testsuite/gas/riscv/mapping-04a.d: Likewise.
+ * testsuite/gas/riscv/mapping-04b.d: Likewise.
+ * testsuite/gas/riscv/mapping-norelax-04a.d: Likewise.
+ * testsuite/gas/riscv/mapping-norelax-04b.d: Likewise.
+ * testsuite/gas/riscv/no-relax-align.d: Updated.
+ * testsuite/gas/riscv/no-relax-align-2.d: Likewise.
+ include/
+ pr 27916
+ * opcode/riscv.h (enum riscv_seg_mstate): Added.
+
+ opcodes/
+ pr 27916
+ * riscv-dis.c (last_map_symbol, last_stop_offset, last_map_state):
+ Added to dump sections with mapping symbols.
+ (riscv_get_map_state): Get the mapping state from the symbol.
+ (riscv_search_mapping_symbol): Check the sorted symbol table, and
+ then find the suitable mapping symbol.
+ (riscv_data_length): Decide which data size we should print.
+ (riscv_disassemble_data): Dump the data contents.
+ (print_insn_riscv): Handle the mapping symbols.
+ (riscv_symbol_is_valid): Marked mapping symbols as invalid.
+
+2021-08-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Improve argument syntax of proc arange
+ The current syntax of proc arange is:
+ ...
+ proc arange { arange_start arange_length {comment ""} {seg_sel ""} } {
+ ...
+ and a typical call looks like:
+ ...
+ arange $start $len
+ ...
+
+ This style is somewhat annoying because if you want to specify the last
+ parameter, you need to give the default values of all the other optional ones
+ before as well:
+ ...
+ arange $start $len "" $seg_sel
+ ...
+
+ Update the syntax to:
+ ...
+ proc arange { options arange_start arange_length } {
+ parse_options {
+ { comment "" }
+ { seg_sel "" }
+ }
+ ...
+ such that a typical call looks like:
+ ...
+ arange {} $start $len
+ ...
+ and a call using seg_sel looks like:
+ ...
+ arange {
+ seg_sel $seg_sel
+ } $start $len
+ ...
+
+ Also update proc aranges, which already has an options argument, to use the
+ new proc parse_options.
+
+ Tested on x86_64-linux.
+
+ Co-Authored-By: Simon Marchi <simon.marchi@polymtl.ca>
+
+2021-08-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-28 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Change indirect symbol from IR to undefined
+ bfd/
+
+ PR ld/28264
+ * elflink.c (_bfd_elf_merge_symbol): Change indirect symbol from
+ IR to undefined.
+
+ ld/
+
+ PR ld/28264
+ * testsuite/ld-plugin/lto.exp: Run PR ld/28264 test.
+ * testsuite/ld-plugin/pr28264-1.d: New file.
+ * testsuite/ld-plugin/pr28264-2.d: Likewise.
+ * testsuite/ld-plugin/pr28264-3.d: Likewise.
+ * testsuite/ld-plugin/pr28264-4.d: Likewise.
+ * testsuite/ld-plugin/pr28264.c: Likewise.
+ * testsuite/ld-plugin/pr28264.ver: Likewise.
+
+2021-08-28 Alan Modra <amodra@gmail.com>
+
+ PR28264, ld.bfd crash on linking efivar with LTO
+ PR 28264
+ PR 26978
+ * linker.c (_bfd_generic_link_add_one_symbol <MIND>): Check
+ that string is non-NULL.
+
+2021-08-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Don't write .gdb_index symbol table with empty entries
+ When comparing the sizes of the index files generated for shlib
+ outputs/gdb.dwarf2/dw2-zero-range/shr1.sl, I noticed a large difference
+ between .debug_names:
+ ...
+ $ gdb -q -batch $shlib -ex "save gdb-index -dwarf-5 ."
+ $ du -b -h shr1.sl.debug_names shr1.sl.debug_str
+ 61 shr1.sl.debug_names
+ 0 shr1.sl.debug_str
+ ...
+ and .gdb_index:
+ ...
+ $ gdb -q -batch $shlib -ex "save gdb-index ."
+ $ du -b -h shr1.sl.gdb-index
+ 8.2K shr1.sl.gdb-index
+ ...
+
+ The problem is that the .gdb_index contains a non-empty symbol table with only
+ empty entries.
+
+ Fix this by making the symbol table empty, such that we have instead:
+ ...
+ $ du -b -h shr1.sl.gdb-index
+ 184 shr1.sl.gdb-index
+ ...
+
+ Tested on x86_64-linux.
+
+2021-08-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp
+ Before commit 5ef670d81fd "[gdb/testsuite] Add dummy start and end CUs in
+ dwarf assembly" we had in exec outputs/gdb.dlang/watch-loc/watch-loc a D
+ compilation unit at offset 0xc7:
+ ...
+ Compilation Unit @ offset 0xc7:
+ Length: 0x4c (32-bit)
+ Version: 4
+ Abbrev Offset: 0x64
+ Pointer Size: 8
+ <0><d2>: Abbrev Number: 2 (DW_TAG_compile_unit)
+ <d3> DW_AT_language : 19 (D)
+ ...
+ with a corresponding .debug_aranges entry:
+ ...
+ Offset into .debug_info: 0xc7
+ Pointer Size: 4
+ Segment Size: 0
+
+ Address Length
+ 004004a7 0000000b
+ 00000000 00000000
+ ...
+
+ After that commit we have a dummy CU at offset 0xc7 and the D compilation unit
+ at offset 0xd2:
+ ...
+ Compilation Unit @ offset 0xc7:
+ Length: 0x7 (32-bit)
+ Version: 4
+ Abbrev Offset: 0x64
+ Pointer Size: 8
+ Compilation Unit @ offset 0xd2:
+ Length: 0x4c (32-bit)
+ Version: 4
+ Abbrev Offset: 0x65
+ Pointer Size: 8
+ <0><dd>: Abbrev Number: 2 (DW_TAG_compile_unit)
+ <de> DW_AT_language : 19 (D)
+ ...
+ while the .debug_aranges entry still points to 0xc7.
+
+ The problem is that the test-case uses a hack (quoting from
+ commit 75f06e9dc59):
+ ...
+ [ Note: this is a non-trivial test-case. The file watch-loc-dw.S contains a
+ .debug_info section, but not an .debug_aranges section or any actual code.
+ The file watch-loc.c contains code and a .debug_aranges section, but no other
+ debug section. So, the intent for the .debug_aranges section in watch-loc.c
+ is to refer to a compilation unit in the .debug_info section in
+ watch-loc-dw.S. ]
+ ...
+ and adding the dummy CU caused that hack to stop working.
+
+ Fix this by moving the generation of .debug_aranges from watch-loc.c to
+ watch-loc.exp, such that we have:
+ ...
+ Offset into .debug_info: 0xd2
+ Pointer Size: 4
+ Segment Size: 0
+
+ Address Length
+ 004004a7 0000000b
+ 00000000 00000000
+ ...
+
+ Tested on x86_64-linux.
+
+2021-08-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Generate .debug_aranges entry for dummy CU
+ A best practise for DWARF [1] is to generate .debug_aranges entries for CUs
+ even if they have no address range.
+
+ Generate .debug_arange entries for the dummy CUs added by the DWARF assembler.
+
+ Tested on x86_64-linux.
+
+ [1] http://wiki.dwarfstd.org/index.php?title=Best_Practices
+
+2021-08-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add .debug_aranges in more test-cases
+ A couple of test-cases fail when run with target board cc-with-debug-names due
+ to missing .debug_aranges entries for the CUs added by the dwarf assembler.
+
+ Add a .debug_aranges entry for those CUs.
+
+ Tested on x86_64-linux.
+
+2021-08-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Support .debug_aranges in dwarf assembly
+ Add a proc aranges such that we can generate .debug_aranges sections in dwarf
+ assembly using:
+ ...
+ cu { label cu_label } {
+ ...
+ }
+
+ aranges {} cu_label {
+ arange $addr $len [<comment>] [$segment_selector]
+ }
+ ...
+
+ Tested on x86_64-linux.
+
+2021-08-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add label option to proc cu
+ We can use current dwarf assembly infrastructure to declare a label that marks
+ the start of the CU header:
+ ...
+ declare_labels header_start_cu_a
+ _section ".debug_info"
+ header_start_cu_a : cu {} {
+ }
+ _section ".debug_info"
+ header_start_cu_b : cu {} {
+ }
+ ...
+ on the condition that we switch to the .debug_info section before, which makes
+ this style of use fragile.
+
+ Another way to achieve the same is to use the label as generated by the cu
+ proc itself:
+ ...
+ variable _cu_label
+ cu {} {
+ }
+ set header_start_cu_a $_cu_label
+ cu {} {
+ }
+ set header_start_cu_b $_cu_label
+ ...
+ but again that seems fragile given that adding a new CU inbetween will
+ silently result in the wrong value for the label.
+
+ Add a label option to proc cu such that we can simply do:
+ ...
+ cu { label header_start_cu_a } {
+ }
+ cu { label header_start_cu_b } {
+ }
+ ...
+
+ Tested on x86_64-linux.
+
+2021-08-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-26 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: remove some stray newlines in debug output
+ I spotted a couple of stray newlines that were left at the end of
+ debug message during conversion to the new debug output scheme. These
+ messages are part of the 'set debug lin-lwp 1' output.
+
+2021-08-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-24 Tom Tromey <tom@tromey.com>
+
+ Fix two regressions caused by CU / TU merging
+ PR symtab/28160 and PR symtab/27893 concern GDB crashes in the test
+ suite when using the "fission" target board. They are both caused by
+ the patches that merge the list of CUs with the list of TUs (and to a
+ lesser degree by the patches to share DWARF data across objfiles), and
+ the underlying issue is the same: it turns out that reading a DWO can
+ cause new type units to be created. This means that the list of
+ dwarf2_per_cu_data objects depends on precisely which CUs have been
+ expanded. However, because the type units can be created while
+ expanding a CU means that the vector of CUs can expand while it is
+ being iterated over -- a classic mistake. Also, because a TU can be
+ added later, it means the resize_symtabs approach is incorrect.
+
+ This patch fixes resize_symtabs by removing it, and having set_symtab
+ resize the vector on demand. It fixes the iteration problem by
+ introducing a safe (index-based) iterator and changing the relevant
+ spots to use it.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28160
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27893
+
+2021-08-24 Alan Modra <amodra@gmail.com>
+
+ Real programmers don't configure gcc using --with-ld
+ * testsuite/lib/ld-lib.exp (run_host_cmd): Give a clue as to why
+ gcc -B doesn't pick up the ld under test.
+
+2021-08-24 Alan Modra <amodra@gmail.com>
+
+ objdump -S test fail on mingw
+ FAIL: objdump -S
+ FAIL: objdump --source-comment
+ is seen on mingw for the simple reason that gcc adds a .exe suffix on
+ the output file if not already present. Fix that, and tidy some objcopy
+ tests.
+
+ * testsuite/lib/binutils-common.exp (exeext): New proc.
+ * testsuite/binutils-all/objcopy.exp (exe, test_prog): Use it here.
+ (objcopy_remove_relocations_from_executable): Catch objcopy errors.
+ Only run on ELF targets.
+ * testsuite/binutils-all/objdump.exp (exe): Set variable.
+ (test_build_id_debuglink, test_objdump_S): Use exe file suffix.
+
+2021-08-24 James Bowman (FTDI-UK) <james.bowman@ftdichip.com>
+
+ FT32: Remove recursion in ft32_opcode
+ The function ft32_opcode used recursion. This could cause a stack
+ overflow. Replaced with a pair of non-recursive functions.
+
+ PR 28169
+ * ft32-dis.c: Formatting.
+ (ft32_opcode1): Split out from..
+ (ft32_opcode): ..here.
+
+2021-08-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-23 Tom Tromey <tom@tromey.com>
+
+ Fix a latent bug in dw2-ranges-overlap.exp
+ dw2-ranges-overlap.exp creates a program where a psymtab has two
+ address ranges, and a function without debug info whose address is
+ between these two ranges. Then it sets a breakpoint on this function
+ and runs to it, expecting that the language should remain "auto; c"
+ when stopped.
+
+ However, this test case also has a "main" function described (briefly)
+ in the DWARF, and this function is given language C++. Also, a
+ breakpoint stop sets the current language to the language that was
+ used when setting the breakpoint.
+
+ My new DWARF scanner decides that this "main" is the main program and
+ sets the current language to C++ at startup, causing this test to
+ fail.
+
+ This patch fixes the test in a simple way, by introducing a new
+ function that takes the place of "main" in the DWARF. I think this
+ still exercises the original problem, but also avoids problems with my
+ branch.
+
+ It seemed safe to me to submit this separately.
+
+2021-08-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb] Fix 'not in executable format' error message
+ With trying to load a non-executable file into gdb, we run into PR26880:
+ ...
+ $ gdb -q -batch test.c
+ "0x7ffc87bfc8d0s": not in executable format: \
+ file format not recognized
+ ...
+
+ The problem is caused by using %ps in combination with the error function
+ (note that confusingly, it does work in combination with the warning
+ function).
+
+ Fix this by using plain "%s" instead.
+
+ Tested on x86_64-linux.
+
+ gdb/ChangeLog:
+
+ 2021-08-22 Tom de Vries <tdevries@suse.de>
+
+ PR gdb/26880
+ * gdb/exec.c (exec_file_attach): Use %s instead of %ps in call to
+ error function.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-22 Tom de Vries <tdevries@suse.de>
+
+ PR gdb/26880
+ * gdb.base/non-executable.exp: New file.
+
+2021-08-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Use compiler-generated instead of gas-generated stabs
+ The test-case gdb.dwarf2/dw2-ranges.exp is the only one in the gdb testsuite
+ that uses gas-generated stabs.
+
+ While the use seems natural alongside the use of gas-generated dwarf in the
+ same test-case, there are a few known issues, filed on the gdb side as:
+ - PR symtab/12497 - "stabs: PIE relocation does not work"
+ - PR symtab/28221 - "[readnow, stabs] FAIL: gdb.dwarf2/dw2-ranges.exp: \
+ info line func"
+ and on the gas side as:
+ - PR gas/28233 - "[gas, --gstabs] Generate stabs more similar to gcc"
+
+ The test-case contains a KFAIL for PR12497, but it's outdated and fails to
+ trigger.
+
+ The intention of the test-case is to test gas-generated dwarf, and using
+ gcc-generated stabs instead of gas-generated stabs works fine.
+
+ Supporting compiler-generated stabs is already a corner-case for gdb, and
+ there's no current commitment/incentive to support/workaround gas-generated
+ stabs, which can be considered a corner-case of a corner-case.
+
+ Work around these problem by using compiler-generated stabs in the test-case.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-22 Tom de Vries <tdevries@suse.de>
+
+ * gdb.dwarf2/dw2-ranges.exp: Use compiler-generated stabs.
+
+2021-08-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add dummy start and end CUs in dwarf assembly
+ Say one compiles a hello.c:
+ ...
+ $ gcc -g hello.c
+ ...
+
+ On openSUSE Leap 15.2 and Tumbleweed, the CU for hello.c is typically not the
+ first in .debug_info, nor the last, due to presence of debug information in
+ objects for sources like:
+ - ../sysdeps/x86_64/start.S
+ - init.c
+ - ../sysdeps/x86_64/crti.S
+ - elf-init.c
+ - ../sysdeps/x86_64/crtn.S.
+
+ On other systems, say ubuntu 18.04.5, the CU for hello.c is typically the
+ first and the last in .debug_info.
+
+ This difference has caused me to find some errors in the dwarf assembly
+ using openSUSE, that didn't show up on other platforms.
+
+ Force the same situation on other platforms by adding a dummy start
+ and end CU.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-22 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/28235
+ * lib/dwarf.exp (Dwarf::dummy_cu): New proc.
+ (Dwarf::assemble): Add dummy start and end CU.
+
+2021-08-23 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix dw2-ranges-psym.exp with -readnow
+ When running test-case gdb.dwarf2/dw2-ranges-psym.exp with target board
+ -readnow, I run into:
+ ...
+ (gdb) file dw2-ranges-psym^M
+ Reading symbols from dw2-ranges-psym...^M
+ Expanding full symbols from dw2-ranges-psym...^M
+ (gdb) set complaints 0^M
+ (gdb) FAIL: gdb.dwarf2/dw2-ranges-psym.exp: No complaints
+ ...
+
+ The problem is that the regexp expects a gdb prompt immediately after the
+ "Reading symbols" line.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-22 Tom de Vries <tdevries@suse.de>
+
+ * lib/gdb.exp (gdb_load_no_complaints): Update regexp to allow
+ "Expanding full symbols" Line.
+
+2021-08-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-22 Mike Frysinger <vapier@gentoo.org>
+
+ sim: m32r: add __linux__ hack for non-Linux hosts
+ The m32r Linux syscall emulation logic assumes the host environment
+ directly matches -- it's being run on 32-bit little endian Linux.
+ This breaks building for non-Linux systems, so put all the code in
+ __linux__ ifdef checks. This code needs a lot of love to make it
+ work everywhere, but let's at least unbreak it for non-Linux hosts.
+
+2021-08-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-20 Mike Frysinger <vapier@gentoo.org>
+
+ sim: nltvals: switch output mode to a directory
+ In preparation for this script generating more files, change the output
+ argument to specify a directory. This drops the stdout behavior, but
+ since no one really runs this tool directly, it's not a big deal.
+
+2021-08-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-19 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use bool in notify_command_param_changed_p and do_set_command
+ Trivial patch to use bool instead of int.
+
+ Change-Id: I9e5f8ee4305272a6671cbaaaf2f0484eff0d1ea5
+
+2021-08-19 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Put back 3 aborts in OP_E_memory
+ Put back 3 aborts where invalid lengths should have been filtered out.
+
+ gas/
+
+ PR binutils/28247
+ * testsuite/gas/i386/bad-bcast.s: Add a comment.
+
+ opcodes/
+
+ PR binutils/28247
+ * * i386-dis.c (OP_E_memory): Put back 3 aborts.
+
+2021-08-19 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Avoid abort on invalid broadcast
+ Print "{bad}" on invalid broadcast instead of abort.
+
+ gas/
+
+ PR binutils/28247
+ * testsuite/gas/i386/bad-bcast.d: New file.
+ * testsuite/gas/i386/bad-bcast.s: Likewise.
+ * testsuite/gas/i386/i386.exp: Run bad-bcast.
+
+ opcodes/
+
+ PR binutils/28247
+ * i386-dis.c (OP_E_memory): Print "{bad}" on invalid broadcast
+ instead of abort.
+
+2021-08-19 Aaron Merey <amerey@redhat.com>
+
+ gdb/solib: Refactor scan_dyntag
+ scan_dyntag is unnecessarily duplicated in solib-svr4.c and solib-dsbt.c.
+
+ Move this function to solib.c and rename it to gdb_bfd_scan_elf_dyntag.
+ Also add it to solib.h so it is included in both solib-svr4 and solib-dsbt.
+
+2021-08-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-18 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ [gdb] [rs6000] Add ppc64_linux_gcc_target_options method.
+ Add a method to set the gcc target options for the ppc64 targets.
+ This change sets an empty value, which allows the gcc
+ default values (-mcmodel=medium) be used, instead of -mcmodel=large
+ which is set by the default_gcc_target_options hook.
+
+ [gdb] [rs6000] Add ppc64*_gnu_triplet_regexp methods.
+ Add methods to set the target triplet so we can
+ find the proper gcc when our gcc is named of
+ the form powerpc64{le}-<foo>-gcc or ppc64{le}-<foo>-gcc.
+
+2021-08-18 Alan Modra <amodra@gmail.com>
+
+ Re: as: Replace the removed symbol with the versioned symbol
+ Some targets, typically embedded without shared libraries, replace the
+ relocation symbol with a section symbol (see tc_fix_adjustable).
+ Allow the test to pass for such targets. Fixes the following.
+
+ avr-elf +FAIL: symver symver16
+ d10v-elf +FAIL: symver symver16
+ dlx-elf +FAIL: symver symver16
+ ip2k-elf +FAIL: symver symver16
+ m68k-elf +FAIL: symver symver16
+ mcore-elf +FAIL: symver symver16
+ pj-elf +FAIL: symver symver16
+ s12z-elf +FAIL: symver symver16
+ visium-elf +FAIL: symver symver16
+ z80-elf +FAIL: symver symver16
+
+ PR gas/28157
+ * testsuite/gas/symver/symver16.d: Relax reloc match.
+
+2021-08-18 Alan Modra <amodra@gmail.com>
+
+ [GOLD] PowerPC64 relocation overflow for -Os register save/restore funcs
+ Fixes a silly mistake in calculating the address of -Os out-of-line
+ register save/restore function copies. Copies of these linker defined
+ functions are added to stub sections when the original (in
+ target->savres_section) can't be reached.
+
+ * powerpc.cc (Target_powerpc::Relocate::relocate): Correct address
+ calculation of out-of-line save/restore function copies.
+
+2021-08-18 Alan Modra <amodra@gmail.com>
+
+ Another ld script backtrack
+ * ldgram.y (length_spec): Throw away look-ahead NAME.
+
+2021-08-18 Mike Frysinger <vapier@gentoo.org>
+
+ gdb: fix spacing on CCLD silent rules
+
+ sim: nltvals: localize TARGET_<ERRNO> defines
+ Code should not be using these directly, instead they should be
+ resolving these dynamically via cb_host_to_target_errno maps.
+ Fix the Blackfin code and remove the defines out of the header
+ so no new code can rely on them.
+
+2021-08-18 Mike Frysinger <vapier@gentoo.org>
+
+ sim: rename ChangeLog files to ChangeLog-2021
+ Now that ChangeLog entries are no longer used for sim patches,
+ this commit renames all relevant sim ChangeLog to 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.
+
+ Also throw in a .gitignore entry to keep people from adding new
+ ChangeLog files anywhere in the sim tree.
+
+2021-08-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-17 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix thread_step_over_chain_length
+ If I debug a single-thread program and look at the infrun debug logs, I
+ see:
+
+ [infrun] start_step_over: stealing global queue of threads to step, length = 2
+
+ That makes no sense... turns out there's a buglet in
+ thread_step_over_chain_length, "num" should be initialized to 0. I
+ think this bug is a leftover from an earlier version of the code (not
+ merged upstream) that manually walked the list, where the first item was
+ implicitly counted (hence the 1).
+
+ Change-Id: I0af03aa93509aed36528be5076894dc156a0b5ce
+
+2021-08-17 Shahab Vahedi <shahab@synopsys.com>
+
+ opcodes: Fix the auxiliary register numbers for ARC HS
+ The numbers for the auxiliary registers "tlbindex" and
+ "tlbcommand" of ARCv2HS are incorrect. This patch makes
+ the following changes to correct that error.
+
+ ,------------.-----------------.---------------.
+ | aux. reg. | old (incorrect) | new (correct) |
+ |------------+-----------------+---------------|
+ | tlbindex | 0x463 | 0x464 |
+ | tlbcommand | 0x464 | 0x465 |
+ `------------^-----------------^---------------'
+
+ opcodes/
+ 2021-08-17 Shahab Vahedi <shahab@synopsys.com>
+
+ * arc-regs.h (DEF): Fix the register numbers.
+
+2021-08-17 H.J. Lu <hjl.tools@gmail.com>
+
+ gdb: Don't assume r_ldsomap when r_version > 1 on Linux
+ The r_ldsomap field is specific to Solaris (part of librtld_db), and
+ should never be accessed for Linux. glibc is planning to add a field
+ to support multiple namespaces. But there will be no r_ldsomap when
+ r_version is bumped to 2. Add linux_[ilp32|lp64]_fetch_link_map_offsets
+ to set r_ldsomap_offset to -1 and use them for Linux targets.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28236
+
+2021-08-17 H.J. Lu <hjl.tools@gmail.com>
+
+ gdbserver: Check r_version < 1 for Linux debugger interface
+ Update gdbserver to check r_version < 1 instead of r_version != 1 so
+ that r_version can be bumped for a new field in the glibc debugger
+ interface to support multiple namespaces. Since so far, the gdbserver
+ only reads fields defined for r_version == 1, it is compatible with
+ r_version >= 1.
+
+ All future glibc debugger interface changes will be backward compatible.
+ If there is ever the need for backward incompatible change to the glibc
+ debugger interface, a new DT_XXX element will be provided to access the
+ new incompatible interface.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=11839
+
+2021-08-17 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [4/4] arm: Add Tag_PACRET_use build attribute
+ bfd/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
+ 'Tag_PACRET_use' case.
+
+ binutils/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * readelf.c (arm_attr_tag_PAC_extension): Declare.
+ (arm_attr_public_tags): Add 'PAC_extension' lookup.
+
+ elfcpp/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm.h: Define 'Tag_PACRET_use' enum.
+
+ gas/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (arm_convert_symbolic_attribute): Add
+ 'Tag_PACRET_use' to the attribute_table.
+
+ include/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf/arm.h (elf_arm_reloc_type): Add 'Tag_PACRET_use'.
+
+2021-08-17 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [3/4] arm: Add Tag_BTI_use build attribute
+ bfd/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
+ 'Tag_BTI_use' case.
+
+ binutils/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * readelf.c (arm_attr_tag_PAC_extension): Declare.
+ (arm_attr_public_tags): Add 'PAC_extension' lookup.
+
+ elfcpp/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm.h: Define 'Tag_BTI_use' enum.
+
+ gas/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (arm_convert_symbolic_attribute): Add
+ 'Tag_BTI_use' to the attribute_table.
+
+ include/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf/arm.h (elf_arm_reloc_type): Add 'Tag_BTI_use'.
+
+2021-08-17 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [2/4] arm: Add Tag_BTI_extension build attribute
+ bfd/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
+ 'Tag_BTI_extension' case.
+
+ binutils/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * readelf.c (arm_attr_tag_PAC_extension): Declare.
+ (arm_attr_public_tags): Add 'PAC_extension' lookup.
+
+ elfcpp/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm.h: Define 'Tag_BTI_extension' enum.
+
+ gas/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (arm_convert_symbolic_attribute): Add
+ 'Tag_BTI_extension' to the attribute_table.
+
+ include/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf/arm.h (elf_arm_reloc_type): Add 'Tag_BTI_extension'.
+
+2021-08-17 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [1/4] arm: Add Tag_PAC_extension build attribute
+ bfd/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
+ 'Tag_PAC_extension' case.
+
+ binutils/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * readelf.c (arm_attr_tag_PAC_extension): Declare.
+ (arm_attr_public_tags): Add 'PAC_extension' lookup.
+
+ elfcpp/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm.h: Define 'Tag_PAC_extension' enum.
+
+ gas/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (arm_convert_symbolic_attribute): Add
+ 'Tag_PAC_extension' to the attribute_table.
+
+ include/
+ 2021-07-06 Andrea Corallo <andrea.corallo@arm.com>
+
+ * elf/arm.h (elf_arm_reloc_type): Add 'Tag_PAC_extension'.
+
+2021-08-17 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Always run fp tests
+ Always run fp tests since the size of .tfloat, .ds.x, .dc.x and .dcb.x
+ directive outputs is always 10 bytes. There is no need for fp-elf32 nor
+ fp-elf64.
+
+ PR gas/28230
+ * testsuite/gas/i386/fp-elf32.d: Removed.
+ * testsuite/gas/i386/fp-elf64.d: Likewise.
+ * testsuite/gas/i386/fp.s: Remove NO_TFLOAT_PADDING codes.
+ * testsuite/gas/i386/i386.exp: Don't run fp-elf32 nor fp-elf64.
+ Always run fp.
+
+2021-08-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-16 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Don't pad .tfloat directive output
+ .tfloat output should always be 10 bytes without padding, independent
+ of psABIs. In glibc, x86 assembly codes expect 10-byte .tfloat output.
+ This also reduces .ds.x output and .tfloat output with hex input from
+ 12 bytes to 10 bytes to match .tfloat output.
+
+ PR gas/28230
+ * NEWS: Mention changes of .ds.x output and .tfloat output with
+ hex input.
+ * config/tc-i386.c (x86_tfloat_pad): Removed.
+ * config/tc-i386.h (X_PRECISION_PAD): Changed to 0.
+ (x86_tfloat_pad): Removed.
+ * testsuite/gas/i386/fp.s: If NO_TFLOAT_PADDING isn't defined,
+ add explicit paddings after .tfloat, .ds.x, .dc.x and .dcb.x
+ directives.
+ * testsuite/gas/i386/i386.exp (ASFLAGS): Append
+ "--defsym NO_TFLOAT_PADDING=1" when running the fp test.
+
+2021-08-16 Tom Tromey <tromey@adacore.com>
+
+ Fix register regression in DWARF evaluator
+ On an internal test case, using an arm-elf target, commit ba5bc3e5a92
+ ("Make DWARF evaluator return a single struct value") causes a
+ regression. (It doesn't happen for any of the other cross targets
+ that I test when importing upstream gdb.)
+
+ I don't know if there's an upstream gdb test case showing the same
+ problem... I can only really run native tests with dejagnu AFAIK.
+
+ The failure manifests like this:
+
+ Breakpoint 1, file_1.export_1 (param_1=<error reading variable: Unable to access DWARF register number 64>, str=...) at [...]/file_1.adb:5
+
+ Whereas when it works it looks like:
+
+ Breakpoint 1, file_1.export_1 (param_1=99.0, str=...) at [...]/file_1.adb:5
+
+ The difference is that the new code uses the passed-in gdbarch,
+ whereas the old code used the frame's gdbarch, when handling
+ DWARF_VALUE_REGISTER.
+
+ This patch restores the use of the frame's arch.
+
+2021-08-16 Tom Tromey <tromey@adacore.com>
+
+ Fix Ada regression due to DWARF expression series
+ Commit 0579205aec4 ("Simplify dwarf_expr_context class interface")
+ caused a regression in the internal AdaCore test suite. I didn't try
+ to reproduce this with the GDB test suite, but the test is identical
+ to gdb.dwarf2/dynarr-ptr.exp.
+
+ The problem is that this change:
+
+ case DW_OP_push_object_address:
+ /* Return the address of the object we are currently observing. */
+ - if (this->data_view.data () == nullptr
+ - && this->obj_address == 0)
+ + if (this->m_addr_info == nullptr)
+
+ ... slightly changes the logic here. In particular, it's possible for
+ the caller to pass in a non-NULL m_addr_info, but one that looks like:
+
+ (top) p *this.m_addr_info
+ $15 = {
+ type = 0x29b7a70,
+ valaddr = {
+ m_array = 0x0,
+ m_size = 0
+ },
+ addr = 0,
+ next = 0x0
+ }
+
+ In this case, an additional check is needed. With the current code,
+ what happens instead is that the computation computes an incorrect
+ address -- but one that does not fail in read_memory, due to the
+ precise memory map of the embedded target in question.
+
+ This patch restores the old logic.
+
+2021-08-16 Patrick Monnerat <patrick@monnerat.net>
+
+ Notify observer of breakpoint auto-disabling
+ As breakpoint_modified observer is currently notified upon breakpoint stop
+ before handling auto-disabling when enable count is reached, the observer
+ is never notified of the disabling.
+
+ The problem affects:
+ - The MI interpreter enabled= value when reporting =breakpoint-modified
+ - A Python event handler for breakpoint_modified using the "enabled"
+ member of its parameter
+ - insight: breakpoint GUI window is not properly updated upon auto-disable
+
+ This patch moves the observer notification after the auto-disabling
+ code and implements corresponding tests for the MI and Python cases.
+
+ Fixes https://sourceware.org/bugzilla/show_bug.cgi?id=23336
+
+ Change-Id: I0c50df4789334071e5390cb46b3ca0d4a7f83c61
+
+2021-08-16 H.J. Lu <hjl.tools@gmail.com>
+
+ as: Replace the removed symbol with the versioned symbol
+ When a symbol removed by .symver is used in relocation and there is one
+ and only one versioned symbol, don't remove the symbol. Instead, mark
+ it to be removed and replace the removed symbol used in relocation with
+ the versioned symbol before generating relocation.
+
+ PR gas/28157
+ * symbols.c (symbol_flags): Add removed.
+ (symbol_entry_find): Updated.
+ (symbol_mark_removed): New function.
+ (symbol_removed_p): Likewise.
+ * symbols.h (symbol_mark_removed): New prototype.
+ (symbol_removed_p): Likewise.
+ * write.c (write_relocs): Call obj_fixup_removed_symbol on
+ removed fixp->fx_addsy and fixp->fx_subsy if defined.
+ (set_symtab): Don't add a symbol if symbol_removed_p returns true.
+ * config/obj-elf.c (elf_frob_symbol): Don't remove the symbol
+ if it is used on relocation. Instead, mark it as to be removed
+ and issue an error if the symbol has more than one versioned name.
+ (elf_fixup_removed_symbol): New function.
+ * config/obj-elf.h (elf_fixup_removed_symbol): New prototype.
+ (obj_fixup_removed_symbol): New.
+ * testsuite/gas/symver/symver11.d: Updated expected error
+ message.
+ * testsuite/gas/symver/symver16.d: New file.
+ * testsuite/gas/symver/symver16.s: Likewise.
+
+2021-08-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-14 Alan Modra <amodra@gmail.com>
+
+ ld script fill pattern expression
+ It turns out we do need to backtrack when parsing after all. The
+ fill_opt component in the section rule swiches to EXPRESSION and back
+ to SCRIPT, and to find the end of an expression it is necessary to
+ look ahead one token.
+
+ * ldgram.y (section): Throw away lookahead NAME token.
+ (overlay_section): Likewise.
+ * testsuite/ld-elf/overlay.t: Add fill pattern on overlays.
+ Test fill pattern before stupidly named normal sections too,
+ and before /DISCARD/.
+
+2021-08-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-13 Alan Modra <amodra@gmail.com>
+
+ ld lexer tidy, possibly break the world
+ This tidies the states in which ld lexer rules are enabled.
+ This change will quite likely trip over issues similar to those
+ mentioned in the new ldlex.l comments, so please test it out.
+
+ * ldgram.y (wildcard_name): Remove now unnecessary components.
+ * ldlex.l: Restrict many rules' states. Remove -l expression
+ state rule. Comment on lookahead state madness and need for
+ /DISCARD/ in expression state.
+
+2021-08-13 Alan Modra <amodra@gmail.com>
+
+ ld script lower-case absolute and sizeof_headers
+ I think these happened by accident, so let's see what breaks if they
+ are removed.
+
+ * ldlex.l: Remove lower case "absolute" and "sizeof_headers"
+ in non-mri mode.
+ * ld.texi: Remove sizeof_headers index.
+ * testsuite/ld-mmix/mmohdr1.ld: Use SIZEOF_HEADERS.
+
+2021-08-13 Alan Modra <amodra@gmail.com>
+
+ tidy mri script extern
+ MRI mode generally doesn't flip lexer states, so let's make MRI mode
+ "extern" not do so either.
+
+ * ldgram.y (extern_name_list): Don't change lex state here.
+ (ifile_p1): Change state here on EXTERN instead.
+
+2021-08-13 Alan Modra <amodra@gmail.com>
+
+ Re: PR28217, Syntax error when memory region contains a hyphen
+ I discovered some more errors when tightening up the lexer rules.
+ Just because we INCLUDE a file doesn't mean we've switched states.
+
+ PR 28217
+ * ldgram.y (statement): Don't switch lexer state on INCLUDE.
+ (mri_script_command, ifile_p1, memory_spec, section): Likewise.
+
+2021-08-13 Lifang Xia <lifang_xia@c-sky.com>
+
+ PR28168: [CSKY] Fix stack overflow in disassembler
+ PR 28168:
+ Stack overflow with a large float. %f is not a goot choice for this.
+ %f should be replaced with %.7g.
+
+ gas/
+ * testsuite/gas/csky/pr28168.d: New testcase for PR 28168.
+ * testsuite/gas/csky/pr28168.s: Likewise.
+ * testsuite/gas/csky/v2_float_part2.d: Following the new format.
+ * opcodes/csky-dis.c (csky_output_operand): %.7g replaces %f.
+
+2021-08-13 Alan Modra <amodra@gmail.com>
+
+ PR28217, Syntax error when memory region contains a hyphen
+ The saga of commit 40726f16a8d7 continues. This attacks the problem
+ of switching between SCRIPT and EXPRESSION state lexing by removing
+ the need to do so for phdrs like ":text". Instead {WILDCHAR}*
+ matching, the reason why ":text" lexed as one token, is restricted to
+ within the braces of a section or overlay statement. The new WILD
+ lexer state is switched at the non-optional brace tokens, so
+ ldlex_backup is no longer needed. I've also removed the BOTH state,
+ which doesn't seem to be needed any more. Besides rules involving
+ error reporting, there was just one place where SCRIPT appeared
+ without BOTH, the {WILDCHAR}* rule, three where BOTH appears without
+ SCRIPT for tokens that only need EXPRESSION state, and two where BOTH
+ appears alongside INPUT_LIST. (Since I'm editing the wild and
+ filename rules, removing BOTH and adding WILD can also be seen as
+ renaming the old BOTH state to SCRIPT and renaming the old SCRIPT
+ state to WILD with a reduced scope.)
+
+ As a followup, I'll look at removing EXPRESSION state from some lexer
+ rules that no longer need it due to this cleanup.
+
+ PR 28217
+ * ldgram.y (exp <ORIGIN, LENGTH>): Use paren_script_name.
+ (section): Parse within braces of section in wild mode, and
+ after brace back in script mode. Remove ldlex_backup call.
+ Similarly for OVERLAY.
+ (overlay_section): Similarly.
+ (script_file): Replace ldlex_both with ldlex_script.
+ * ldlex.h (ldlex_wild): Declare.
+ (ldlex_both): Delete.
+ * ldlex.l (BOTH): Delete. Remove state from all rules.
+ (WILD): New state. Enable many tokens in this state.
+ Enable filename match in SCRIPT mode. Enable WILDCHAR match
+ in WILD state, disable in SCRIPT mode.
+ (ldlex_wild): New function.
+ * ldfile.c (ldfile_try_open_bfd): Replace ldlex_both call with
+ ldlex_script.
+
+2021-08-13 Alan Modra <amodra@gmail.com>
+
+ ns32k configury
+ Since ns32k-netbsd is as yet not removed, just marked obsolete,
+ the target should still be accepted with --enable-obsolete.
+
+ I also enabled ns32k-openbsd in ld since there doesn't seem to be a
+ good reason why that target is not supported there but is elsewhere.
+
+ bfd/
+ * config.bfd: Allow ns32k-netbsd.
+ ld/
+ * configure.tgt: Allow ns32k-openbsd.
+
+2021-08-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-13 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: riscv_scan_prologue: handle LD and LW instructions
+ While working on the testsuite, I ended up noticing that GDB fails to
+ produce a full backtrace from a thread waiting in pthread_join. When
+ selecting the waiting thread and using the 'bt' command, the following
+ result can be observed:
+
+ (gdb) bt
+ #0 0x0000003ff7fccd20 in __futex_abstimed_wait_common64 () from /lib/riscv64-linux-gnu/libpthread.so.0
+ #1 0x0000003ff7fc43da in __pthread_clockjoin_ex () from /lib/riscv64-linux-gnu/libpthread.so.0
+ Backtrace stopped: frame did not save the PC
+
+ On my platform, I do not have debug symbols for glibc, so I need to rely
+ on prologue analysis in order to unwind stack.
+
+ Here is what the function prologue looks like:
+
+ (gdb) disassemble __pthread_clockjoin_ex
+ Dump of assembler code for function __pthread_clockjoin_ex:
+ 0x0000003ff7fc42de <+0>: addi sp,sp,-144
+ 0x0000003ff7fc42e0 <+2>: sd s5,88(sp)
+ 0x0000003ff7fc42e2 <+4>: auipc s5,0xd
+ 0x0000003ff7fc42e6 <+8>: ld s5,-2(s5) # 0x3ff7fd12e0
+ 0x0000003ff7fc42ea <+12>: ld a5,0(s5)
+ 0x0000003ff7fc42ee <+16>: sd ra,136(sp)
+ 0x0000003ff7fc42f0 <+18>: sd s0,128(sp)
+ 0x0000003ff7fc42f2 <+20>: sd s1,120(sp)
+ 0x0000003ff7fc42f4 <+22>: sd s2,112(sp)
+ 0x0000003ff7fc42f6 <+24>: sd s3,104(sp)
+ 0x0000003ff7fc42f8 <+26>: sd s4,96(sp)
+ 0x0000003ff7fc42fa <+28>: sd s6,80(sp)
+ 0x0000003ff7fc42fc <+30>: sd s7,72(sp)
+ 0x0000003ff7fc42fe <+32>: sd s8,64(sp)
+ 0x0000003ff7fc4300 <+34>: sd s9,56(sp)
+ 0x0000003ff7fc4302 <+36>: sd a5,40(sp)
+
+ As far as prologue analysis is concerned, the most interesting part is
+ done at address 0x0000003ff7fc42ee (<+16>): 'sd ra,136(sp)'. This stores
+ the RA (return address) register on the stack, which is the information
+ we are looking for in order to identify the caller.
+
+ In the current implementation of the prologue scanner, GDB stops when
+ hitting 0x0000003ff7fc42e6 (<+8>) because it does not know what to do
+ with the 'ld' instruction. GDB thinks it reached the end of the
+ prologue but have not yet reached the important part, which explain
+ GDB's inability to unwind past this point.
+
+ The section of the prologue starting at <+4> until <+12> is used to load
+ the stack canary[1], which will then be placed on the stack at <+36> at
+ the end of the prologue.
+
+ In order to have the prologue properly handled, this commit proposes to
+ add support for the ld instruction in the RISC-V prologue scanner.
+ I guess riscv32 would use lw in such situation so this patch also adds
+ support for this instruction.
+
+ With this patch applied, gdb is now able to unwind past pthread_join:
+
+ (gdb) bt
+ #0 0x0000003ff7fccd20 in __futex_abstimed_wait_common64 () from /lib/riscv64-linux-gnu/libpthread.so.0
+ #1 0x0000003ff7fc43da in __pthread_clockjoin_ex () from /lib/riscv64-linux-gnu/libpthread.so.0
+ #2 0x0000002aaaaaa88e in bar() ()
+ #3 0x0000002aaaaaa8c4 in foo() ()
+ #4 0x0000002aaaaaa8da in main ()
+
+ I have had a look to see if I could reproduce this easily, but in my
+ simple testcases using '-fstack-protector-all', the canary is loaded
+ after the RA register is saved. I do not have a reliable way of
+ generating a prologue similar to the problematic one so I forged one
+ instead.
+
+ The testsuite have been run on riscv64 ubuntu 21.01 with no regression
+ observed.
+
+ [1] https://en.wikipedia.org/wiki/Buffer_overflow_protection#Canaries
+
+2021-08-12 Tom Tromey <tromey@adacore.com>
+
+ Update documentation to mention Pygments
+ Philippe Blain pointed out that the gdb documentation does not mention
+ that Pygments may be used for source highlighting. This patch updates
+ the docs to reflect how highlighting is actually done.
+
+2021-08-12 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make gdbarch_printable_names return a vector
+ I noticed that gdbarch_selftest::operator() leaked the value returned by
+ gdbarch_printable_names. Make gdbarch_printable_names return an
+ std::vector and update callers. That makes it easier for everyone
+ involved, less manual memory management.
+
+ Change-Id: Ia8fc028bdb91f787410cca34f10bf3c5a6da1498
+
+2021-08-12 Carl Love <cel@us.ibm.com>
+
+ Improve forward progress test in python.exp
+ The test steps into func2 and than does an up to get back to the previous
+ frame. The test checks that the line number you are at after the up command
+ is greater than the line where the function was called from. The
+ assembly/codegen for the powerpc target includes a NOP after the
+ branch-link.
+
+ func2 (); /* Break at func2 call site. /
+ 10000694: 59 00 00 48 bl 100006ec
+ 10000698: 00 00 00 60 nop
+ return 0; / Break to end. */
+ 1000069c: 00 00 20 39 li r9,0
+
+ The PC at the instruction following the branch-link is 0x10000698 which
+ GDB.find_pc_line() maps to the same line number as the bl instruction.
+ GDB did move past the branch-link location thus making forward progress.
+
+ The following proposed fix adds an additional PC check to see if forward
+ progress was made. The line test is changed from greater than to greater
+ than or equal.
+
+2021-08-12 Jiangshuai Li <jiangshuai_li@c-sky.com>
+
+ gdb:csky rm tdesc_has_registers in csky_register_name
+ As CSKY arch has not parsed target-description.xml in csky_gdbarch_init,
+ when a remote server, like csky-qemu or gdbserver, send a target-description.xml
+ to gdb, tdesc_has_registers will return ture, but tdesc_register_name (gdbarch, 0)
+ will return NULL, so a cmd "info registers r0" will not work.
+
+ Function of parsing target-description.xml will be add later for CSKY arch,
+ now it is temporarily removed to allow me to do other supported tests.
+
+ 2021-07-15 Jiangshuai Li <jiangshuai_li@c-sky.com>
+
+ * csky-tdep.c : not using tdesc funtions in csky_register_name
+
+2021-08-12 Alan Modra <amodra@gmail.com>
+
+ Re: gas: support NaN flavors
+ Fixes tic4x-coff FAIL: simple FP constants
+
+ * testsuite/gas/all/float.s: Make NaN tests conditional on hasnan.
+ * testsuite/gas/all/gas.exp: Define hasnan.
+
+2021-08-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-11 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Update the pass and fail strings of PR ld/28138 test
+ PR ld/28138
+ * testsuite/ld-plugin/lto.exp: Update the pass and fail strings
+ of PR ld/28138 test to indicate which part of the test passed
+ and failed.
+
+2021-08-11 Darius Galis <darius.galis@cyberthorstudios.com>
+
+ Fix a typo in the RX asse,bler. The Double-precision floating-point exception handling control register name is DECNT not DCENT.
+ * config/rx-parse.y (DECNT): Fixed typo.
+ * testsuite/gas/rx/dpopm.sm (DECNT): Fixed typo.
+ * testsuite/gas/rx/dpushm.sm (DECNT): Fixed typo.
+ * testsuite/gas/rx/macros.inc (DECNT): Fixed typo.
+
+2021-08-11 Nick Clifton <nickc@redhat.com>
+
+ Fix an internal error in the CSKY assembler when asked to resolve an overlarge constant.
+ PR 28215
+ * config/tc-csky.c (md_apply_fix): Correctly handle a fixup that
+ involves an overlarge constant.
+
+2021-08-11 Luis Machado <luis.machado@linaro.org>
+
+ Add 3 new PAC-related ARM note types
+ The following patch synchronizes includes/objdump/readelf with the Linux
+ Kernel in terms of ARM regset notes.
+
+ We're currently missing 3 of them:
+
+ NT_ARM_PACA_KEYS
+ NT_ARM_PACG_KEYS
+ NT_ARM_PAC_ENABLED_KEYS
+
+ We don't need GDB to bother with this at the moment, so this doesn't update
+ bfd/elf.c. If needed, we can do it in the future.
+
+ binutils/
+
+ * readelf.c (get_note_type): Handle new ARM PAC notes.
+
+ include/elf/
+
+ * common.h (NT_ARM_PACA_KEYS, NT_ARM_PACG_KEYS)
+ (NT_ARM_PAC_ENABLED_KEYS): New constants.
+
+2021-08-11 Nick Clifton <nickc@redhat.com>
+
+ Updated Portuguese translation for the binutils sub-directory.
+
+2021-08-11 John Ericson <git@JohnEricson.me>
+
+ Deprecate a.out support for NetBSD targets.
+ As discussed previously, a.out support is now quite deprecated, and in
+ some cases removed, in both Binutils itself and NetBSD, so this legacy
+ default makes little sense. `netbsdelf*` and `netbsdaout*` still work
+ allowing the user to be explicit about there choice. Additionally, the
+ configure script warns about the change as Nick Clifton requested.
+
+ One possible concern was the status of NetBSD on NS32K, where only a.out
+ was supported. But per [1] NetBSD has removed support, and if it were to
+ come back, it would be with ELF. The binutils implementation is
+ therefore marked obsolete, per the instructions in the last message.
+
+ With that patch and this one applied, I have confirmed the following:
+
+ --target=i686-unknown-netbsd
+ --target=i686-unknown-netbsdelf
+ builds completely
+
+ --target=i686-unknown-netbsdaout
+ properly fails because target is deprecated.
+
+ --target=vax-unknown-netbsdaout builds completely except for gas, where
+ the target is deprecated.
+
+ [1]: https://mail-index.netbsd.org/tech-toolchain/2021/07/19/msg004025.html
+ ---
+ bfd/config.bfd | 43 +++++++++++++--------
+ bfd/configure.ac | 5 +--
+ binutils/testsuite/binutils-all/nm.exp | 2 +-
+ binutils/testsuite/lib/binutils-common.exp | 7 +---
+ config/picflag.m4 | 4 +-
+ gas/configure.tgt | 9 +++--
+ gas/testsuite/gas/arm/blx-bl-convert.d | 2 +-
+ gas/testsuite/gas/arm/blx-local-thumb.d | 2 +-
+ gas/testsuite/gas/sh/basic.exp | 2 +-
+ gdb/configure.host | 34 +++++++----------
+ gdb/configure.tgt | 2 +-
+ gdb/testsuite/gdb.asm/asm-source.exp | 6 +--
+ intl/configure | 2 +-
+ ld/configure.tgt | 44 +++++++++++-----------
+ ld/testsuite/ld-arm/arm-elf.exp | 4 +-
+ ld/testsuite/ld-elf/elf.exp | 2 +-
+ ld/testsuite/ld-elf/shared.exp | 4 +-
+ libiberty/configure | 4 +-
+
+2021-08-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: don't print backtrace when dumping core after an internal error
+ Currently, when GDB hits an internal error, and the user selects to
+ dump core, the recently added feature to write a backtrace to the
+ console will kick in, and print a backtrace as well as dumping the
+ core.
+
+ This was certainly not my intention when adding the backtrace on fatal
+ signal functionality, this feature was intended to produce a backtrace
+ when GDB crashes due to some fatal signal, internal errors should have
+ continued to behave as they did before, unchanged.
+
+ In this commit I set the signal disposition of SIGABRT back to SIG_DFL
+ just prior to the call to abort() that GDB uses to trigger the core
+ dump, this prevents GDB reaching the code that writes the backtrace to
+ the console.
+
+ I've also added a test that checks we don't see a backtrace on the
+ console after an internal error.
+
+2021-08-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: register SIGBUS, SIGFPE, and SIGABRT handlers
+ Register handlers for SIGBUS, SIGFPE, and SIGABRT. All of these
+ signals are setup as fatal signals that will cause GDB to terminate.
+ However, by passing these signals through the handle_fatal_signal
+ function, a user can arrange to see a backtrace when GDB
+ terminates (see maint set backtrace-on-fatal-signal).
+
+ In normal use of GDB there should be no user visible changes after
+ this commit. Only if GDB terminates with one of the above signals
+ will GDB change slightly, potentially printing a backtrace before
+ aborting.
+
+ I've added new tests for SIGFPE, SIGBUS, and SIGABRT.
+
+2021-08-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: print backtrace on fatal SIGSEGV
+ This commit adds a new maintenance feature, the ability to print
+ a (limited) backtrace if GDB dies due to a fatal signal.
+
+ The backtrace is produced using the backtrace and backtrace_symbols_fd
+ functions which are declared in the execinfo.h header, and both of
+ which are async signal safe. A configure check has been added to
+ check for these features, if they are not available then the new code
+ is not compiled into GDB and the backtrace will not be printed.
+
+ The motivation for this new feature is to aid in debugging GDB in
+ situations where GDB has crashed at a users site, but the user is
+ reluctant to share core files, possibly due to concerns about what
+ might be in the memory image within the core file. Such a user might
+ be happy to share a simple backtrace that was written to stderr.
+
+ The production of the backtrace is on by default, but can switched off
+ using the new commands:
+
+ maintenance set backtrace-on-fatal-signal on|off
+ maintenance show backtrace-on-fatal-signal
+
+ Right now, I have hooked this feature in to GDB's existing handling of
+ SIGSEGV only, but this will be extended to more signals in a later
+ commit.
+
+ One additional change I have made in this commit is that, when we
+ decide GDB should terminate due to the fatal signal, we now
+ raise the same fatal signal rather than raising SIGABRT.
+
+ Currently, this is only effecting our handling of SIGSEGV. So,
+ previously, if GDB hit a SEGV then we would terminate GDB with a
+ SIGABRT. After this commit we will terminate GDB with a SIGSEGV.
+
+ This feels like an improvement to me, we should still get a core dump,
+ but in many shells, the user will see a more specific message once GDB
+ exits, in bash for example "Segmentation fault" rather than "Aborted".
+
+ Finally then, here is an example of the output a user would see if GDB
+ should hit an internal SIGSEGV:
+
+ Fatal signal: Segmentation fault
+ ----- Backtrace -----
+ ./gdb/gdb[0x8078e6]
+ ./gdb/gdb[0x807b20]
+ /lib64/libpthread.so.0(+0x14b20)[0x7f6648c92b20]
+ /lib64/libc.so.6(__poll+0x4f)[0x7f66484d3a5f]
+ ./gdb/gdb[0x1540f4c]
+ ./gdb/gdb[0x154034a]
+ ./gdb/gdb[0x9b002d]
+ ./gdb/gdb[0x9b014d]
+ ./gdb/gdb[0x9b1aa6]
+ ./gdb/gdb[0x9b1b0c]
+ ./gdb/gdb[0x41756d]
+ /lib64/libc.so.6(__libc_start_main+0xf3)[0x7f66484041a3]
+ ./gdb/gdb[0x41746e]
+ ---------------------
+ A fatal error internal to GDB has been detected, further
+ debugging is not possible. GDB will now terminate.
+
+ This is a bug, please report it. For instructions, see:
+ <https://www.gnu.org/software/gdb/bugs/>.
+
+ Segmentation fault (core dumped)
+
+ It is disappointing that backtrace_symbols_fd does not actually map
+ the addresses back to symbols, this appears, in part, to be due to GDB
+ not being built with -rdynamic as the manual page for
+ backtrace_symbols_fd suggests, however, even when I do add -rdynamic
+ to the build of GDB I only see symbols for some addresses.
+
+ We could potentially look at alternative libraries to provide the
+ backtrace (e.g. libunwind) however, the solution presented here, which
+ is available as part of glibc is probably a good baseline from which
+ we might improve things in future.
+
+2021-08-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: rename async_init_signals to gdb_init_signals
+ The async_init_signals has, for some time, dealt with async and sync
+ signals, so removing the async prefix makes sense I think.
+
+ Additionally, as pointed out by Pedro:
+
+ .....
+
+ The comments relating to SIGTRAP and SIGQUIT within this function are
+ out of date.
+
+ The comments for SIGTRAP talk about the signal disposition (SIG_IGN)
+ being passed to the inferior, meaning the signal disposition being
+ inherited by GDB's fork children. However, we now call
+ restore_original_signals_state prior to forking, so the comment on
+ SIGTRAP is redundant.
+
+ The comments for SIGQUIT are similarly out of date, further, the
+ comment on SIGQUIT talks about problems with BSD4.3 and vfork,
+ however, we have not supported BSD4.3 for several years now.
+
+ Given the above, it seems that changing the disposition of SIGTRAP is
+ no longer needed, so I've deleted the signal() call for SIGTRAP.
+
+ Finally, the header comment on the function now called
+ gdb_init_signals was getting quite out of date, so I've updated it
+ to (hopefully) better reflect reality.
+
+ There should be no user visible change after this commit.
+
+2021-08-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: register signal handler after setting up event token
+ This commit fixes the smallest of small possible bug related to signal
+ handling. If we look in async_init_signals we see code like this:
+
+ signal (SIGQUIT, handle_sigquit);
+ sigquit_token =
+ create_async_signal_handler (async_do_nothing, NULL, "sigquit");
+
+ Then if we look in handle_sigquit we see code like this:
+
+ mark_async_signal_handler (sigquit_token);
+ signal (sig, handle_sigquit);
+
+ Finally, in mark_async_signal_handler we have:
+
+ async_handler_ptr->ready = 1;
+
+ Where async_handler_ptr will be sigquit_token.
+
+ What this means is that if a SIGQUIT arrive in async_init_signals
+ after handle_sigquit has been registered, but before sigquit_token has
+ been initialised, then GDB will most likely crash.
+
+ The chance of this happening is tiny, but fixing this is trivial, just
+ ensure we call create_async_signal_handler before calling signal, so
+ lets do that.
+
+ There are no tests for this. Trying to land a signal in the right
+ spot is pretty hit and miss. I did try changing the current HEAD GDB
+ like this:
+
+ signal (SIGQUIT, handle_sigquit);
+ raise (SIGQUIT);
+ sigquit_token =
+ create_async_signal_handler (async_do_nothing, NULL, "sigquit");
+
+ And confirmed that this did result in a crash, after my change I tried
+ this:
+
+ sigquit_token =
+ create_async_signal_handler (async_do_nothing, NULL, "sigquit");
+ signal (SIGQUIT, handle_sigquit);
+ raise (SIGQUIT);
+
+ And GDB now starts up just fine.
+
+ gdb/ChangeLog:
+
+ * event-top.c (async_init_signals): For each signal, call signal
+ only after calling create_async_signal_handler.
+
+2021-08-11 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: terminate upon receipt of SIGFPE
+ GDB's SIGFPE handling is broken, this is PR gdb/16505 and
+ PR gdb/17891.
+
+ We currently try to use an async event token to process SIGFPE. So,
+ when a SIGFPE arrives the signal handler calls
+ mark_async_signal_handler then returns, effectively ignoring the
+ signal (for now).
+
+ The intention is that later the event loop will see that the async
+ token associated with SIGFPE has been marked and will call the async
+ handler, which just throws an error.
+
+ The problem is that SIGFPE is not safe to ignore. Ignoring a
+ SIGFPE (unless it is generated artificially, e.g. by raise()) is
+ undefined behaviour, after ignoring the signal on many targets we
+ return to the instruction that caused the SIGFPE to be raised, which
+ immediately causes another SIGFPE to be raised, we get stuck in an
+ infinite loop. The behaviour is certainly true on x86-64.
+
+ To view this behaviour I simply added some dummy code to GDB that
+ performed an integer divide by zero, compiled this on x86-64
+ GNU/Linux, ran GDB and saw GDB hang.
+
+ In this commit, I propose to remove all special handling of SIGFPE and
+ instead just let GDB make use of the default SIGFPE action, that is,
+ to terminate the process.
+
+ The only user visible change here should be:
+
+ - If a user sends a SIGFPE to GDB using something like kill,
+ previously GDB would just print an error and remain alive, now GDB
+ will terminate. This is inline with what happens if the user
+ sends GDB a SIGSEGV from kill though, so I don't see this as an
+ issue.
+
+ - If a bug in GDB causes a real SIGFPE, previously the users GDB
+ session would hang. Now the GDB session will terminate. Again,
+ this is inline with what happens if GDB receives a SIGSEGV due to
+ an internal bug.
+
+ In bug gdb/16505 there is mention that it would be nice if GDB did
+ more than just terminate when receiving a fatal signal. I haven't
+ done that in this commit, but later commits will move in that
+ direction.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16505
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=17891
+
+2021-08-11 Alan Modra <amodra@gmail.com>
+
+ PR28198, Support # as linker script comment marker
+ PR 28198
+ * ldlex.l: Combine rules for handling newline, whitespace and
+ comments. Extend # comment handling to all states.
+
+2021-08-11 Alan Modra <amodra@gmail.com>
+
+ ldgram.y tidies
+ I've been tripped up before thinking the "end" rule was the "END"
+ token. Let's use a better name. The formatting changes are for
+ consistency within rules, and making it a little easier to visually
+ separate tokens from mid-rule actions.
+
+ * ldgram.y (separator): Rename from "end". Update uses.
+ (statement): Formatting. Move ';' match to beginning.
+ (paren_script_name): Formatting. Simplify.
+ (must_be_exp, section): Formatting.
+
+2021-08-11 Alan Modra <amodra@gmail.com>
+
+ Mention whitespace in script expressions
+ Inside an output section statement, ld's parser can't tell whether a
+ line
+ .+=4;
+ is an assignment to dot or a file named ".+=4".
+
+ * ld.texi (expressions): Mention need for whitespace.
+
+2021-08-11 Matt Jacobson <mhjacobson@me.com>
+
+ Add a -mno-dollar-line-separator command line option to the AVR assembler.
+ Some frontends, like the gcc Objective-C frontend, emit symbols with $
+ characters in them. The AVR target code in gas treats $ as a line separator,
+ so the code doesn?t assemble correctly.
+
+ Provide a machine-specific option to disable treating $ as a line separator.
+
+ * config/tc-avr.c (enum options): Add option flag.
+ (struct option): Add option -mno-dollar-line-separator.
+ (md_parse_option): Adjust treatment of $ when option is present.
+ * config/tc-avr.h: Use avr_line_separator_chars.
+
+2021-08-11 Nick Clifton <nickc@redhat.com>
+
+ Fix typo in previous delta
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ gas: fold IEEE encoding of -Inf with that of +Inf
+ The respective results differ only by the sign bits - there's no need to
+ have basically identical (partially even arch-specific) logic twice.
+ Simply set the sign bit at the end of encoding the various formats.
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ gas: support NaN flavors
+ Like for infinity, there isn't just a single NaN. The sign bit may be
+ of interest and, going beyond infinity, whether the value is quiet or
+ signalling may be even more relevant to be able to encode.
+
+ Note that an anomaly with x86'es double extended precision NaN values
+ gets taken care of at the same time: For all other formats a positive
+ value with all mantissa bits set was used, while here a negative value
+ with all non-significant mantissa bits clear was chose for an unknown
+ reason.
+
+ For m68k, since I don't know their X_PRECISION floating point value
+ layout, a warning gets issued if any of the new flavors was attempted
+ to be encoded that way. However likely it may be that, given that the
+ code lives in a source file supposedly implementing IEEE-compliant
+ formats, the bit patterns of the individual words match x86'es, I didn't
+ want to guess so. And my very, very old paper doc doesn't even mention
+ floating point formats other than single and double.
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ Arm64: leave .bfloat16 processing to common code
+ With x86 support having been implemented by extending atof-ieee.c, avoid
+ unnecessary code duplication in md_atof(). This will then also allow to
+ take advantage of adjustments made there without needing to mirror them
+ here.
+
+ Arm32: leave more .bfloat16 processing to common code
+ With x86 support having been implemented by extending atof-ieee.c, avoid
+ unnecessary code duplication in md_atof(). This will then also allow to
+ take advantage of adjustments made there without needing to mirror them
+ here.
+
+ gas: make 2nd argument of .dcb.* consistently optional
+ Unlike the forms consuming/producing integer data, the floating point
+ ones so far required the 2nd argument to be present, contrary to
+ documentation. To avoid code duplication, split float_length() out of
+ hex_float() (taking the opportunity to adjust error message wording).
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ x86: introduce .bfloat16 directive
+ This is to be able to generate data acted upon by AVX512-BF16 and
+ AMX-BF16 insns. While not part of the IEEE standard, the format is
+ sufficiently standardized to warrant handling in config/atof-ieee.c.
+ Arm, where custom handling was implemented, may want to leverage this as
+ well. To be able to also use the hex forms supported for other floating
+ point formats, a small addition to the generic hex_float() is needed.
+
+ Extend existing x86 testcases.
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ x86: introduce .hfloat directive
+ This is to be able to generate data passed to {,V}CVTPH2PS and acted
+ upon by AVX512-FP16 insns. To be able to also use the hex forms
+ supported for other floating point formats, a small addition to the
+ generic hex_float() is needed.
+
+ Extend existing x86 testcases.
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ x86/ELF: fix .tfloat output with hex input
+ The ELF psABI-s are quite clear here: On 32-bit the data type is 12
+ bytes long (with 2 bytes of trailing padding), while on 64-bit it is 16
+ bytes long (with 6 bytes of padding). Make hex_float() capable of
+ handling such padding.
+
+ Note that this brings the emitted data size of .dc.x / .dcb.x in line
+ also for non-ELF targets; so far they were different depending on input
+ format (dec vs hex).
+
+ Extend the existing x86 testcases.
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ x86/ELF: fix .ds.x output
+ The ELF psABI-s are quite clear here: On 32-bit the underlying data type
+ is 12 bytes long (with 2 bytes of trailing padding), while on 64-bit it
+ is 16 bytes long (with 6 bytes of padding). Make s_space() capable of
+ handling 'x' (and 'p') type floating point being other than 12 bytes
+ wide (also adjusting documentation). This requires duplicating the
+ definition of X_PRECISION in the target speciifc header; the compiler
+ would complain if this was out of sync with config/atof-ieee.c.
+
+ Note that for now padding space doesn't get separated from actual
+ storage, which means that things will work correctly only for little-
+ endian cases, and which also means that by specifying large enough
+ numbers padding space can be set to non-zero. Since the logic is needed
+ for a single little-endian architecture only for now, I'm hoping that
+ this might be acceptable for the time being; otherwise the change will
+ become more intrusive.
+
+ Note also that this brings the emitted data size of .ds.x vs .tfloat in
+ line for non-ELF targets as well; the issue will be even more obvious
+ when further taking into account a subsequent patch fixing .dc.x/.dcb.x
+ (where output sizes currently differ depending on input format).
+
+ Extend existing x86 testcases.
+
+2021-08-11 Jan Beulich <jbeulich@suse.com>
+
+ x86/ELF: fix .tfloat output
+ The ELF psABI-s are quite clear here: On 32-bit the data type is 12
+ bytes long (with 2 bytes of trailing padding), while on 64-bit it is 16
+ bytes long (with 6 bytes of padding). Make ieee_md_atof() capable of
+ handling such padding, and specify the needed padding for x86 (leaving
+ non-ELF targets alone for now). Split the existing x86 testcase.
+
+ x86: have non-PE/COFF BEOS be recognized as ELF
+ BEOS, unless explicitly requesting *-*-beospe* targets, uses standard
+ ELF. None of the newly enabled tests in the testsuite fail for me.
+
+2021-08-11 Alan Modra <amodra@gmail.com>
+
+ PR28163, Segment fault in function rl78_special_reloc
+ Relocation offset checks were completely missing in the rl78 backend,
+ allowing a relocation to write over memory anywhere. This was true
+ for rl78_special_reloc, a function primarily used when applying debug
+ relocations, and in rl78_elf_relocate_section used by the linker.
+
+ This patch fixes those problems by correcting inaccuracies in the
+ relocation howtos, then uses those howtos to sanity check relocation
+ offsets before applying relocations. In addition, the patch
+ implements overflow checking using the howto information rather than
+ the ad-hoc scheme implemented in relocate_section. I implemented the
+ overflow checking in rl78_special_reloc too.
+
+ * elf32-rl78.c (RL78REL, RL78_OP_REL): Add mask parameter.
+ (rl78_elf_howto_table): Set destination masks. Correct size and
+ bitsize of DIR32_REV. Correct complain_on_overflow for many relocs
+ as per tests in relocate_section. Add RH_SFR. Correct bitsize
+ for RH_SADDR. Set size to 3 and bitsize to 0 for all OP relocs.
+ (check_overflow): New function.
+ (rl78_special_reloc): Check that reloc address is within section.
+ Apply relocations using reloc howto. Check for overflow.
+ (RANGE): Delete.
+ (rl78_elf_relocate_section): Sanity check r_offset. Perform
+ overflow checking using reloc howto.
+
+2021-08-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-10 Tom Tromey <tom@tromey.com>
+
+ Ignore .debug_types when reading .debug_aranges
+ I noticed that the fission-reread.exp test case can cause a complaint
+ when run with --target_board=cc-with-debug-names:
+
+ warning: Section .debug_aranges in [...]/fission-reread has duplicate debug_info_offset 0x0, ignoring .debug_aranges.
+
+ The bug here is that this executable has both .debug_info and
+ .debug_types, and both have a CU at offset 0x0. This triggers the
+ duplicate warning.
+
+ Because .debug_types doesn't provide any address ranges, these CUs can
+ be ignored. That is, this bug turns out to be another regression from
+ the info/types merger patch.
+
+ This patch fixes the problem by having this loop igore type units.
+ fission-reread.exp is updated to test for the bug.
+
+2021-08-10 Tom Tromey <tom@tromey.com>
+
+ Generalize addrmap dumping
+ While debugging another patch series, I wanted to dump an addrmap. I
+ came up with this patch, which generalizes the addrmap-dumping code
+ from psymtab.c and moves it to addrmap.c. psymtab.c is changed to use
+ the new code.
+
+2021-08-10 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: iterate only on vfork parent threads in handle_vfork_child_exec_or_exit
+ I spotted what I think is a buglet in proceed_after_vfork_done. After a
+ vfork child exits or execs, we resume all the threads of the parent. To
+ do so, we iterate on all threads using iterate_over_threads with the
+ proceed_after_vfork_done callback. Each thread is resumed if the
+ following condition is true:
+
+ if (thread->ptid.pid () == pid
+ && thread->state == THREAD_RUNNING
+ && !thread->executing
+ && !thread->stop_requested
+ && thread->stop_signal () == GDB_SIGNAL_0)
+
+ where `pid` is the pid of the vfork parent. This is not multi-target
+ aware: since it only filters on pid, if there is an inferior with the
+ same pid in another target, we could end up resuming a thread of that
+ other inferior. The chances of the stars aligning for this to happen
+ are tiny, but still.
+
+ Fix that by iterating only on the vfork parent's threads, instead of on
+ all threads. This is more efficient, as we iterate on just the required
+ threads (inferiors have their own thread list), and we can drop the pid
+ check. The resulting code is also more straightforward in my opinion,
+ so it's a win-win.
+
+ Change-Id: I14647da72e2bf65592e82fbe6efb77a413a4be3a
+
+2021-08-10 Nick Clifton <nickc@redhat.com>
+
+ Updated Serbian and Russian translations for various sub-directories
+
+2021-08-10 George Barrett <bob@bob131.so>
+
+ guile: fix smob exports
+ Before Guile v2.1 [1], calls to `scm_make_smob_type' implicitly added
+ the created class to the exports list of (oop goops); v2.1+ does not
+ implicitly create bindings in any modules. This means that the GDB
+ manual subsection documenting exported types is not quite right when GDB
+ is linked against Guile <v2.1 (types are exported from (oop goops))
+ instead of (gdb)) and incorrect when linked against Guile v2.1+ (types
+ are not bound to any variables at all!).
+
+ There is a range of cases in which it's necessary or convenient to be
+ able to refer to a GDB smob type, for instance:
+
+ - Pattern matching based on the type of a value.
+ - Defining GOOPS methods handling values from GDB (GOOPS methods
+ typically use dynamic dispatch based on the types of the arguments).
+ - Type-checking assertions when applying some defensive programming on
+ an interface.
+ - Generally any other situation one might encounter in a dynamically
+ typed language that might need some introspection.
+
+ If you're more familiar with Python, it would be quite similar to being
+ unable to refer to the classes exported from the GDB module (which is to
+ say: not crippling for the most part, but makes certain tasks more
+ difficult than necessary).
+
+ This commit makes a small change to GDB's smob registration machinery
+ to make sure registered smobs get exported from the current
+ module. This will likely cause warnings to the user about conflicting
+ exports if they load both (gdb) and (oop goops) from a GDB linked
+ against Guile v2.0, but it shouldn't impact functionality (and seemed
+ preferable to trying to un-export bindings from (oop goops) if v2.0
+ was detected).
+
+ [1]: This changed with Guile commit
+ 28d0871b553a3959a6c59e2e4caec1c1509f8595
+
+ gdb/ChangeLog:
+
+ 2021-06-07 George Barrett <bob@bob131.so>
+
+ * guile/scm-gsmob.c (gdbscm_make_smob_type): Export registered
+ smob type from the current module.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-06-07 George Barrett <bob@bob131.so>
+
+ * gdb.guile/scm-gsmob.exp (test exports): Add tests to make
+ sure the smob types currently listed in the GDB manual get
+ exported from the (gdb) module.
+
+ Change-Id: I7dcd791276b48dfc9edb64fc71170bbb42a6f6e7
+
+2021-08-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-09 Nick Clifton <nickc@redhat.com>
+
+ GAS: DWARF-5: Ensure that the 0'th entry in the directory table contains the current working directory.
+ * dwarf2dbg.c (get_directory_table_entry): Ensure that dir[0]
+ contains current working directory.
+ (out_dir_and_file_list): Likewise.
+ * testsuite/gas/elf/dwarf-5-dir0.s: New test source file.
+ * testsuite/gas/elf/dwarf-5-dir0.d: New test driver.
+ * testsuite/gas/elf/elf.exp: Run the new test.
+ * testsuite/gas/elf/dwarf-5-file0.d: Adjust expected output.
+ * testsuite/gas/i386/dwarf5-line-1.d: Likewise.
+ * testsuite/gas/i386/dwarf5-line-2.d: Likewise.
+
+2021-08-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-08 Tom Tromey <tom@tromey.com>
+
+ Include objfiles.h in a few .c files
+ I found a few .c files that rely on objfiles.h, but that only include
+ it indirectly, via dwarf2/read.h -> psympriv.h. If that include is
+ removed (something my new DWARF indexer series does), then the build
+ will break.
+
+ It seemed harmless and correct to add these includes now, making the
+ eventual series a little smaller.
+
+2021-08-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-07 Alan Modra <amodra@gmail.com>
+
+ PR28186, SEGV elf.c:7991:30 in _bfd_elf_fixup_group_sections
+ PR 28186
+ * elf.c (_bfd_elf_fixup_group_sections): Don't segfault on
+ objcopy/strip with NULL output_section.
+
+2021-08-07 Alan Modra <amodra@gmail.com>
+
+ PR28176, rl78 complex reloc divide by zero
+ This is a bit more than just preventing the divide by zero. Most of
+ the patch is tidying up error reporting, so that for example, linking
+ an object file with a reloc stack underflow produces a linker error
+ rather than just displaying a message that might be ignored.
+
+ PR 28176
+ * elf32-rl78.c (RL78_STACK_PUSH, RL78_STACK_POP): Delete.
+ (rl78_stack_push, rl78_stack_pop): New inline functions.
+ (rl78_compute_complex_reloc): Add status and error message params.
+ Use new inline stack handling functions. Report stack overflow
+ or underflow, and divide by zero.
+ (rl78_special_reloc): Return status and error message from
+ rl78_compute_complex_reloc.
+ (rl78_elf_relocate_section): Similarly. Modernise reloc error
+ reporting. Delete unused bfd_reloc_other case. Don't assume
+ DIR24S_PCREL overflow is due to undefined function.
+ (rl78_offset_for_reloc): Adjust to suit rl78_compute_complex_reloc.
+
+2021-08-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Recognize .gdb_index symbol table with empty entries as empty
+ When reading a .gdb_index that contains a non-empty symbol table with only
+ empty entries, gdb doesn't recognize it as empty.
+
+ Fix this by recognizing that the constant pool is empty, and then setting the
+ symbol table to empty.
+
+ Tested on x86_64-linux.
+
+ gdb/ChangeLog:
+
+ 2021-08-01 Tom de Vries <tdevries@suse.de>
+
+ PR symtab/28159
+ * dwarf2/read.c (read_gdb_index_from_buffer): Handle symbol table
+ filled with empty entries.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-01 Tom de Vries <tdevries@suse.de>
+
+ PR symtab/28159
+ * gdb.dwarf2/dw2-zero-range.exp: Remove kfail.
+
+2021-08-06 Tom Tromey <tromey@adacore.com>
+
+ Unconditionally define _initialize_addrmap
+ The way that init.c is generated does not allow for an initialization
+ function to be conditionally defined -- doing so will result in a link
+ error.
+
+ This patch fixes a build problem that arises from such a conditional
+ definition. It can be reproduce with --disable-unit-tests.
+
+2021-08-06 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix zero address complaint for shlib
+ In PR28004 the following warning / Internal error is reported:
+ ...
+ $ gdb -q -batch \
+ -iex "set sysroot $(pwd -P)/repro" \
+ ./repro/gdb \
+ ./repro/core \
+ -ex bt
+ ...
+ Program terminated with signal SIGABRT, Aborted.
+ #0 0x00007ff8fe8e5d22 in raise () from repro/usr/lib/libc.so.6
+ [Current thread is 1 (LWP 1762498)]
+ #1 0x00007ff8fe8cf862 in abort () from repro/usr/lib/libc.so.6
+ warning: (Internal error: pc 0x7ff8feb2c21d in read in psymtab, \
+ but not in symtab.)
+ warning: (Internal error: pc 0x7ff8feb2c218 in read in psymtab, \
+ but not in symtab.)
+ ...
+ #2 0x00007ff8feb2c21e in __gnu_debug::_Error_formatter::_M_error() const \
+ [clone .cold] (warning: (Internal error: pc 0x7ff8feb2c21d in read in \
+ psymtab, but not in symtab.)
+
+ ) from repro/usr/lib/libstdc++.so.6
+ ...
+
+ The warning is about the following:
+ - in find_pc_sect_compunit_symtab we try to find the address
+ (0x7ff8feb2c218 / 0x7ff8feb2c21d) in the symtabs.
+ - that fails, so we try again in the partial symtabs.
+ - we find a matching partial symtab
+ - however, the partial symtab has a full symtab, so
+ we should have found a matching symtab in the first step.
+
+ The addresses are:
+ ...
+ (gdb) info sym 0x7ff8feb2c218
+ __gnu_debug::_Error_formatter::_M_error() const [clone .cold] in \
+ section .text of repro/usr/lib/libstdc++.so.6
+ (gdb) info sym 0x7ff8feb2c21d
+ __gnu_debug::_Error_formatter::_M_error() const [clone .cold] + 5 in \
+ section .text of repro/usr/lib/libstdc++.so.6
+ ...
+ which correspond to unrelocated addresses 0x9c218 and 0x9c21d:
+ ...
+ $ nm -C repro/usr/lib/libstdc++.so.6.0.29 | grep 000000000009c218
+ 000000000009c218 t __gnu_debug::_Error_formatter::_M_error() const \
+ [clone .cold]
+ ...
+ which belong to function __gnu_debug::_Error_formatter::_M_error() in
+ /build/gcc/src/gcc/libstdc++-v3/src/c++11/debug.cc.
+
+ The partial symtab that is found for the addresses is instead the one for
+ /build/gcc/src/gcc/libstdc++-v3/src/c++98/bitmap_allocator.cc, which is
+ incorrect.
+
+ This happens as follows.
+
+ The bitmap_allocator.cc CU has DW_AT_ranges at .debug_rnglist offset 0x4b50:
+ ...
+ 00004b50 0000000000000000 0000000000000056
+ 00004b5a 00000000000a4790 00000000000a479c
+ 00004b64 00000000000a47a0 00000000000a47ac
+ ...
+
+ When reading the first range 0x0..0x56, it doesn't trigger the "start address
+ of zero" complaint here:
+ ...
+ /* A not-uncommon case of bad debug info.
+ Don't pollute the addrmap with bad data. */
+ if (range_beginning + baseaddr == 0
+ && !per_objfile->per_bfd->has_section_at_zero)
+ {
+ complaint (_(".debug_rnglists entry has start address of zero"
+ " [in module %s]"), objfile_name (objfile));
+ continue;
+ }
+ ...
+ because baseaddr != 0, which seems incorrect given that when loading the
+ shared library individually in gdb (and consequently baseaddr == 0), we do see
+ the complaint.
+
+ Consequently, we run into this case in dwarf2_get_pc_bounds:
+ ...
+ if (low == 0 && !per_objfile->per_bfd->has_section_at_zero)
+ return PC_BOUNDS_INVALID;
+ ...
+ which then results in this code in process_psymtab_comp_unit_reader being
+ called with cu_bounds_kind == PC_BOUNDS_INVALID, which sets the set_addrmap
+ argument to 1:
+ ...
+ scan_partial_symbols (first_die, &lowpc, &highpc,
+ cu_bounds_kind <= PC_BOUNDS_INVALID, cu);
+ ...
+ and consequently, the CU addrmap gets build using address info from the
+ functions.
+
+ During that process, addrmap_set_empty is called with a range that includes
+ 0x9c218 and 0x9c21d:
+ ...
+ (gdb) p /x start
+ $7 = 0x9989c
+ (gdb) p /x end_inclusive
+ $8 = 0xb200d
+ ...
+ but it's called for a function at DIE 0x54153 with DW_AT_ranges at 0x40ae:
+ ...
+ 000040ae 00000000000b1ee0 00000000000b200e
+ 000040b9 000000000009989c 00000000000998c4
+ 000040c3 <End of list>
+ ...
+ and neither range includes 0x9c218 and 0x9c21d.
+
+ This is caused by this code in partial_die_info::read:
+ ...
+ if (dwarf2_ranges_read (ranges_offset, &lowpc, &highpc, cu,
+ nullptr, tag))
+ has_pc_info = 1;
+ ...
+ which pretends that the function is located at addresses 0x9989c..0xb200d,
+ which is indeed not the case.
+
+ This patch fixes the first problem encountered: fix the "start address of
+ zero" complaint warning by removing the baseaddr part from the condition.
+ Same for dwarf2_ranges_process.
+
+ The effect is that:
+ - the complaint is triggered, and
+ - the warning / Internal error is no longer triggered.
+
+ This does not fix the observed problem in partial_die_info::read, which is
+ filed as PR28200.
+
+ Tested on x86_64-linux.
+
+ Co-Authored-By: Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/ChangeLog:
+
+ 2021-07-29 Simon Marchi <simon.marchi@polymtl.ca>
+ Tom de Vries <tdevries@suse.de>
+
+ PR symtab/28004
+ * gdb/dwarf2/read.c (dwarf2_rnglists_process, dwarf2_ranges_process):
+ Fix zero address complaint.
+ * gdb/testsuite/gdb.dwarf2/dw2-zero-range-shlib.c: New test.
+ * gdb/testsuite/gdb.dwarf2/dw2-zero-range.c: New test.
+ * gdb/testsuite/gdb.dwarf2/dw2-zero-range.exp: New file.
+
+2021-08-06 Alan Modra <amodra@gmail.com>
+
+ Re: Add tests for Intel AVX512_FP16 instructions
+ * testsuite/gas/i386/x86-64-avx512_fp16_pseudo_ops.d: Pass with
+ mingw section padding.
+
+2021-08-06 Alan Modra <amodra@gmail.com>
+
+ chew ubsan warning
+ It matters not at all if pc is incremented from its initial NULL
+ value, but avoid this silly runtime ubsan error.
+
+ * doc/chew.c (perform): Avoid incrementing NULL pc.
+
+2021-08-06 Alan Modra <amodra@gmail.com>
+
+ bfd_reloc_offset_in_range overflow
+ This patch is more about the style of bounds checking we ought to use,
+ rather than a real problem. An overflow of "octet + reloc_size" can
+ only happen with huge sections which would certainly cause out of
+ memory errors.
+
+ * reloc.c (bfd_reloc_offset_in_range): Avoid possible overflow.
+
+2021-08-06 Alan Modra <amodra@gmail.com>
+
+ PR28175, Segment fault in coff-tic30.c reloc_processing
+ The obj_convert table shouldn't be accessed without first checking the
+ index against the table size.
+
+ PR 28175
+ * coff-tic30.c (reloc_processing): Sanity check reloc symbol index.
+ * coff-z80.c (reloc_processing): Likewise.
+ * coff-z8k.c (reloc_processing): Likewise.
+
+2021-08-06 Alan Modra <amodra@gmail.com>
+
+ PR28173, nds32_elf_howto_table index out of bounds
+ Indexing the howto table was seriously broken by a missing entry, and
+ use of assertions about user input rather than testing the input.
+
+ PR 28173
+ * elf32-nds32.c (nds32_elf_howto_table): Add missing empty howto.
+ (bfd_elf32_bfd_reloc_type_table_lookup): Replace assertions with
+ range checks. Return NULL if unsupported reloc type. Remove
+ dead code. Take an unsigned int param.
+ (nds32_info_to_howto_rel): Test for NULL howto or howto name
+ return from lookup. Remove assertion.
+ (nds32_info_to_howto): Remove unnecessary ATTRIBUTE_UNUSED.
+ Test for NULL howto or howto name return from lookup.
+
+2021-08-06 Alan Modra <amodra@gmail.com>
+
+ PR28172, bfin_pcrel24_reloc heap-buffer-overflow
+ bfin pcrel24 relocs are weird, they apply to the reloc address minus
+ two. That means reloc addresses of 0 and 1 are invalid. Check that,
+ and fix other reloc range checking.
+
+ PR 28172
+ * elf32-bfin.c (bfin_pcrel24_reloc): Correct reloc range check.
+ (bfin_imm16_reloc, bfin_byte4_reloc, bfin_bfd_reloc): Likewise.
+ (bfin_final_link_relocate): Likewise.
+
+2021-08-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-05 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ [PATCH] GDB Testsuite, update compile-cplus.exp
+ [PATCH] GDB Testsuite, update compile-cplus.exp
+
+ Update the gdb.compile/compile-cplus.exp test to
+ handle errors generated when passing bad arguments
+ into the gdb-compile command.
+ This matches changes made to gdb.compile/compile.exp
+ in the past as part of
+ "Migrate rest of compile commands to new options framework"
+ e6ed716cd5514c08b9d7c469d185b1aa177dbc22
+
+2021-08-05 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ [gdb] Handle .TOC. sections during gdb-compile for rs6000 target.
+ [gdb] Handle .TOC. sections during gdb-compile for rs6000 target.
+
+ When we encounter a .TOC. symbol in the object we are loading,
+ we need to associate this with the .toc section in order to
+ properly resolve other symbols in the object. IF a .toc section
+ is not found, iterate the sections until we find one with the
+ SEC_ALLOC flag. If that also fails, fall back to using
+ the *ABS* section, pointed to by bfd_abs_section_ptr.
+
+2021-08-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: gdb.base/attach.exp: expose bug when testing with native-extended-gdbserver
+ In gdb.base/attach.exp, proc do_attach_failure_tests, we attach to a
+ process. When then try to attach to the same process in another
+ inferior, expecting it to fail. We then come back to the first inferior
+ and try to kill it, to clean up the test. When using the
+ native-extended-gdbserver board, this "kill" test passes, even though it
+ didn't actually work:
+
+ add-inferior
+ [New inferior 2]
+ Added inferior 2 on connection 1 (extended-remote localhost:2347)
+ (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: add empty inferior 2
+ inferior 2
+ [Switching to inferior 2 [<null>] (<noexec>)]
+ (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: switch to inferior 2
+ attach 817032
+ Attaching to process 817032
+ Attaching to process 817032 failed
+ (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: fail to attach again
+ inferior 1
+ [Switching to inferior 1 [process 817032] (/home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/attach/attach)]
+ [Switching to thread 1.1 (Thread 817032.817032)]
+ #0 main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/attach.c:19
+ 19 while (! should_exit)
+ (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: switch to inferior 1
+ kill
+ Kill the program being debugged? (y or n) y
+ Remote connection closed <==== That's unexpected
+ (gdb) PASS: gdb.base/attach.exp: do_attach_failure_tests: exit after attach failures
+
+ When the second attach fails, gdbserver seems to break the connection
+ (it hangs up on the existing remote target) and start listening again
+ for incoming connections. This is documented in PR 19558 [1].
+
+ Make the expected output regexp for the kill command tighter (it
+ currently accepts anything). Use "set confirm off" so we don't have to
+ deal with the confirmation. And to be really sure the extended-remote
+ target still works, try to run the inferior again after killing. The
+ now tests are kfail'ed when the target is gdbserver.
+
+ [1] https://sourceware.org/bugzilla/show_bug.cgi?id=19558
+
+ gdb/testsuite/ChangeLog:
+
+ * gdb.base/attach.exp (do_attach_failure_tests): Make kill
+ regexp tighter, run inferior after killing it. Kfail when
+ target is gdbserver.
+
+ Change-Id: I99c5cd3968ce2ec962ace35b016f842a243b7a0d
+
+2021-08-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: gdb.base/attach.exp: fix support check in test_command_line_attach_run
+ When running this test with the native-extended-gdbserver, we get:
+
+ main () at /home/simark/src/binutils-gdb/gdb/testsuite/gdb.base/attach.c:19
+ 19 while (! should_exit)
+ The program being debugged has been started already.
+ Start it from the beginning? (y or n) PASS: gdb.base/attach.exp: cmdline attach run: run to prompt
+ y
+ Don't know how to run. Try "help target".
+ (gdb) FAIL: gdb.base/attach.exp: cmdline attach run: run to main
+
+ This test tests using both "-p <pid>" and "-ex start" on the command line,
+ making sure that we first attach and then run.
+
+ Normally, after that "y", we should see the program running again.
+ However, a particuliarity of the native-extended-gdbserver is that it
+ uses "set auto-connect-native-target off" on the command line. The full
+ GDB command line is:
+
+ ./gdb -nw -nx -data-directory /home/simark/build/binutils-gdb/gdb/testsuite/../data-directory \
+ -iex set height 0 -iex set width 0 -ex set auto-connect-native-target off \
+ -ex set sysroot -quiet -iex set height 0 -iex set width 0 --pid=536609 -ex start
+
+ The attach succeeds. I guess it is done before "set
+ auto-connect-native-target off", or it somehow bypasses it. When the
+ "start" is executed, the native target is unpushed, while killing the
+ existing process, but not re-pushed, due to "set
+ auto-connect-native-target off". So we get that "Don't know how to run"
+ message.
+
+ Really, I think it's a case of the test doing things incompatible with
+ the board, I think it should just be skipped. And as we can see with
+ the current code, there were some attempts at doing this, just using the
+ wrong checks:
+
+ - isnative: this is a dejagnu proc which checks if the target board has
+ the same triplet as the build machine. In the case of
+ native-extended-gdbserver, it does.
+ - is_remote target: this checks whether the target board is remote, as
+ in executing on a different machin. native-extended-gdbserver is not
+ remote.
+
+ Since the --pid option specifically attaches to a process using the
+ native target, change the test to use gdb_is_target_native instead.
+
+ gdb/testsuite/ChangeLog:
+
+ * gdb.base/attach.exp (test_command_line_attach_run): Use
+ gdb_is_target_native to check if test is supported.
+
+ Change-Id: I762e127f39623889999dc9ed2185540a0951bfb0
+
+2021-08-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: target_waitstatus_to_string: print extra info for FORKED, VFORKED, EXECD
+ Print the extra information contained in target_waitstatus for these
+ events. For TARGET_WAITKIND_{FORKED,VFORKED}, the extra information is
+ contained in related_pid, and is the ptid of the new process. For
+ TARGET_WAITKIND_EXECD, it,s the exec'd path name in execd_pathname.
+ Print it using the same format used for TARGET_WAITKIND_STOPPED and
+ others.
+
+ Here are sample outputs for all three events:
+
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: 726890.726890.0 [process 726890],
+ [infrun] print_target_wait_results: status->kind = vforked, related_pid = 726894.726894.0
+
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: 727045.727045.0 [process 727045],
+ [infrun] print_target_wait_results: status->kind = forked, related_pid = 727049.727049.0
+
+ [infrun] print_target_wait_results: target_wait (-1.0.0 [process -1], status) =
+ [infrun] print_target_wait_results: 727119.727119.0 [process 727119],
+ [infrun] print_target_wait_results: status->kind = execd, execd_pathname = /usr/bin/ls
+
+ Change-Id: I4416a74e3bf792a625a68bf26c51689e170f2184
+
+2021-08-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use ptid_t::to_string in print_target_wait_results
+ The ptid_t::to_string method was introduced recently, to format a ptid_t
+ for debug purposes. It formats the ptid exactly as is done in
+ print_target_wait_results, so make print_target_wait_results use it.
+
+ Change-Id: I0a81c8040d3e1858fb304cb28366b34d94eefe4d
+
+2021-08-05 Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Add as_lval argument to expression evaluator
+ There are cases where the result of the expression evaluation is
+ expected to be in a form of a value and not location description.
+
+ One place that has this requirement is dwarf_entry_parameter_to_value
+ function, but more are expected in the future. Until now, this
+ requirement was fulfilled by extending the evaluated expression with
+ a DW_OP_stack_value operation at the end.
+
+ New implementation, introduces a new evaluation argument instead.
+
+ * dwarf2/expr.c (dwarf_expr_context::fetch_result): Add as_lval
+ argument.
+ (dwarf_expr_context::eval_exp): Add as_lval argument.
+ * dwarf2/expr.h (struct dwarf_expr_context): Add as_lval
+ argument to fetch_result and eval_exp methods.
+ * dwarf2/frame.c (execute_stack_op): Add as_lval argument.
+ * dwarf2/loc.c (dwarf_entry_parameter_to_value): Remove
+ DWARF expression extension.
+ (dwarf2_evaluate_loc_desc_full): Add as_lval argument support.
+ (dwarf2_evaluate_loc_desc): Add as_lval argument support.
+ (dwarf2_locexpr_baton_eval): Add as_lval argument support.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Simplify dwarf_expr_context class interface
+ Idea of this patch is to get a clean and simple public interface for
+ the dwarf_expr_context class, looking like:
+
+ - constructor,
+ - destructor,
+ - push_address method and
+ - evaluate method.
+
+ Where constructor should only ever require a target architecture
+ information. This information is held in per object file
+ (dwarf2_per_objfile) structure, so it makes sense to keep that
+ structure as a constructor argument. It also makes sense to get the
+ address size from that structure, but unfortunately that interface
+ doesn't exist at the moment, so the dwarf_expr_context class user
+ needs to provide that information.
+
+ The push_address method is used to push a CORE_ADDR as a value on
+ top of the DWARF stack before the evaluation. This method can be
+ later changed to push any struct value object on the stack.
+
+ The evaluate method is the method that evaluates a DWARF expression
+ and provides the evaluation result, in a form of a single struct
+ value object that describes a location. To do this, the method requires
+ a context of the evaluation, as well as expected result type
+ information. If the type information is not provided, the DWARF generic
+ type will be used instead.
+
+ To avoid storing the gdbarch information in the evaluator object, that
+ information is now always acquired from the per_objfile object.
+
+ All data members are now private and only visible to the evaluator
+ class, so a m_ prefix was added to all of their names to reflect that.
+ To make this distinction clear, they are also accessed through objects
+ this pointer, wherever that was not the case before.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::dwarf_expr_context): Add
+ address size argument.
+ (dwarf_expr_context::read_mem): Change to use property_addr_info
+ structure.
+ (dwarf_expr_context::evaluate): New function.
+ (dwarf_expr_context::execute_stack_op): Change to use
+ property_addr_info structure.
+ * dwarf2/expr.h (struct dwarf_expr_context): New evaluate
+ declaration. Change eval and fetch_result method to private.
+ (dwarf_expr_context::gdbarch): Remove member.
+ (dwarf_expr_context::stack): Make private and add m_ prefix.
+ (dwarf_expr_context::addr_size): Make private and add
+ m_ prefix.
+ (dwarf_expr_context::recursion_depth): Make private and add
+ m_ prefix.
+ (dwarf_expr_context::max_recursion_depth): Make private and
+ add m_ prefix.
+ (dwarf_expr_context::len): Make private and add m_ prefix.
+ (dwarf_expr_context::data): Make private and add m_ prefix.
+ (dwarf_expr_context::initialized): Make private and add
+ m_ prefix.
+ (dwarf_expr_context::pieces): Make private and add m_ prefix.
+ (dwarf_expr_context::per_objfile): Make private and add
+ m_ prefix.
+ (dwarf_expr_context::frame): Make private and add m_ prefix.
+ (dwarf_expr_context::per_cu): Make private and add m_ prefix.
+ (dwarf_expr_context::addr_info): Make private and add
+ m_ prefix.
+ * dwarf2/frame.c (execute_stack_op): Change to call evaluate
+ method.
+ * dwarf2/loc.c (dwarf2_evaluate_loc_desc_full): Change to call
+ evaluate method.
+ (dwarf2_locexpr_baton_eval): Change to call evaluate method.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Make DWARF evaluator return a single struct value
+ The patch is addressing the issue of class users writing and reading
+ the internal data of the dwarf_expr_context class.
+
+ At this point, all conditions are met for the DWARF evaluator to return
+ an evaluation result in a form of a single struct value object.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (pieced_value_funcs): Chenge to static
+ function.
+ (allocate_piece_closure): Change to static function.
+ (dwarf_expr_context::fetch_result): New function.
+ * dwarf2/expr.h (struct piece_closure): Remove declaration.
+ (struct dwarf_expr_context): fetch_result new declaration.
+ fetch, fetch_address and fetch_in_stack_memory members move
+ to private.
+ (allocate_piece_closure): Remove.
+ * dwarf2/frame.c (execute_stack_op): Change to use
+ fetch_result.
+ * dwarf2/loc.c (dwarf2_evaluate_loc_desc_full): Change to use
+ fetch_result.
+ (dwarf2_locexpr_baton_eval): Change to use fetch_result.
+ * dwarf2/loc.h (invalid_synthetic_pointer): Expose function.
+
+2021-08-05 Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Make value_copy also copy the stack data member
+ Fixing a bug where the value_copy function did not copy the stack data
+ and initialized members of the struct value. This is needed for the
+ next patch where the DWARF expression evaluator is changed to return a
+ single struct value object.
+
+ * value.c (value_copy): Change to also copy the stack data
+ and initialized members.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Move piece_closure and its support to expr.c
+ Following 5 patches series is trying to clean up the interface of the
+ DWARF expression evaluator class (dwarf_expr_context).
+
+ After merging all expression evaluators into one class, the next
+ logical step is to make a clean user interface for that class. To do
+ that, we first need to address the issue of class users writing and
+ reading the internal data of the class directly.
+
+ Fixing the case of writing is simple, it makes sense for an evaluator
+ instance to be per architecture basis. Currently, the best separation
+ seems to be per object file, so having that data (dwarf2_per_objfile)
+ as a constructor argument makes sense. It also makes sense to get the
+ address size from that object file, but unfortunately that interface
+ does not exist at the moment.
+
+ Luckily, address size information is already available to the users
+ through other means. As a result, the address size also needs to be a
+ class constructor argument, at least until a better interface for
+ acquiring that information from an object file is implemented.
+
+ The rest of the user written data comes down to a context of an
+ evaluated expression (compilation unit context, frame context and
+ passed in buffer context) and a source type information that a result
+ of evaluating expression is representing. So, it makes sense for all of
+ these to be arguments of an evaluation method.
+
+ To address the problem of reading the dwarf_expr_context class
+ internal data, we first need to understand why it is implemented that
+ way?
+
+ This is actualy a question of which existing class can be used to
+ represent both values and a location descriptions and why it is not
+ used currently?
+
+ The answer is in a struct value class/structure, but the problem is
+ that before the evaluators were merged, only one evaluator had an
+ infrastructure to resolve composite and implicit pointer location
+ descriptions.
+
+ After the merge, we are now able to use the struct value to represent
+ any result of the expression evaluation. It also makes sense to move
+ all infrastructure for those location descriptions to the expr.c file
+ considering that that is the only place using that infrastructure.
+
+ What we are left with in the end is a clean public interface of the
+ dwarf_expr_context class containing:
+
+ - constructor,
+ - destructor,
+ - push_address method and
+ - eval_exp method.
+
+ The idea with this particular patch is to move piece_closure structure
+ and the interface that handles it (lval_funcs) to expr.c file.
+
+ While implicit pointer location descriptions are still not useful in
+ the CFI context (of the AMD's DWARF standard extensions), the composite
+ location descriptions are certainly necessary to describe a results of
+ specific compiler optimizations.
+
+ Considering that a piece_closure structure is used to represent both,
+ there was no benefit in splitting them.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (struct piece_closure): Add from loc.c.
+ (allocate_piece_closure): Add from loc.c.
+ (bits_to_bytes): Add from loc.c.
+ (rw_pieced_value): Add from loc.c.
+ (read_pieced_value): Add from loc.c.
+ (write_pieced_value): Add from loc.c.
+ (check_pieced_synthetic_pointer): Add from loc.c.
+ (indirect_pieced_value): Add from loc.c.
+ (coerce_pieced_ref): Add from loc.c.
+ (copy_pieced_value_closure): Add from loc.c.
+ (free_pieced_value_closure): Add from loc.c.
+ (sect_variable_value): Add from loc.c.
+ * dwarf2/loc.c (sect_variable_value): Move to expr.c.
+ (struct piece_closure): Move to expr.c.
+ (allocate_piece_closure): Move to expr.c.
+ (bits_to_bytes): Move to expr.c.
+ (rw_pieced_value): Move to expr.c.
+ (read_pieced_value): Move to expr.c.
+ (write_pieced_value): Move to expr.c.
+ (check_pieced_synthetic_pointer): Move to expr.c.
+ (indirect_pieced_value): Move to expr.c.
+ (coerce_pieced_ref): Move to expr.c.
+ (copy_pieced_value_closure): Move to expr.c.
+ (free_pieced_value_closure): Move to expr.c.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Merge evaluate_for_locexpr_baton evaluator
+ The evaluate_for_locexpr_baton is the last derived class from the
+ dwarf_expr_context class. It's purpose is to support the passed in
+ buffer functionality.
+
+ Although, it is not really necessary to merge this class with it's
+ base class, doing that simplifies new expression evaluator design.
+
+ Considering that this functionality is going around the DWARF standard,
+ it is also reasonable to expect that with a new evaluator design and
+ extending the push object address functionality to accept any location
+ description, there will be no need to support passed in buffers.
+
+ Alternatively, it would also makes sense to abstract the interaction
+ between the evaluator and a given resource in the near future. The
+ passed in buffer would then be a specialization of that abstraction.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::read_mem): Merge with
+ evaluate_for_locexpr_baton implementation.
+ * dwarf2/loc.c (class evaluate_for_locexpr_baton): Remove
+ class.
+ (evaluate_for_locexpr_baton::read_mem): Move to
+ dwarf_expr_context.
+ (dwarf2_locexpr_baton_eval): Instantiate dwarf_expr_context
+ instead of evaluate_for_locexpr_baton class.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Remove empty frame and full evaluators
+ There are no virtual methods that require different specialization in
+ dwarf_expr_context class. This means that derived classes
+ dwarf_expr_executor and dwarf_evaluate_loc_desc are not needed any
+ more.
+
+ As a result of this, the evaluate_for_locexpr_baton class base class
+ is now the dwarf_expr_context class.
+
+ There might be a need for a better class hierarchy when we know more
+ about the direction of the future DWARF versions and gdb extensions,
+ but that is out of the scope of this patch series.
+
+ gdb/ChangeLog:
+
+ * dwarf2/frame.c (class dwarf_expr_executor): Remove class.
+ (execute_stack_op): Instantiate dwarf_expr_context instead of
+ dwarf_evaluate_loc_desc class.
+ * dwarf2/loc.c (class dwarf_evaluate_loc_desc): Remove class.
+ (dwarf2_evaluate_loc_desc_full): Instantiate dwarf_expr_context
+ instead of dwarf_evaluate_loc_desc class.
+ (struct evaluate_for_locexpr_baton): Derive from
+ dwarf_expr_context.
+
+2021-08-05 Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Inline get_reg_value method of dwarf_expr_context
+ The get_reg_value method is a small function that is only called once,
+ so it can be inlined to simplify the dwarf_expr_context class.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::get_reg_value): Remove
+ method.
+ (dwarf_expr_context::execute_stack_op): Inline get_reg_value
+ method.
+ * dwarf2/expr.h (dwarf_expr_context::get_reg_value): Remove
+ method.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Move push_dwarf_reg_entry_value to expr.c
+ Following the idea of merging the evaluators, the
+ push_dwarf_reg_entry_value method can be moved from
+ dwarf_expr_executor and dwarf_evaluate_loc_desc classes
+ to their base class dwarf_expr_context.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c
+ (dwarf_expr_context::push_dwarf_reg_entry_value): Move from
+ dwarf_evaluate_loc_desc.
+ * dwarf2/frame.c
+ (dwarf_expr_executor::push_dwarf_reg_entry_value): Remove
+ method.
+ * dwarf2/loc.c (dwarf_expr_reg_to_entry_parameter): Expose
+ function.
+ (dwarf_evaluate_loc_desc::push_dwarf_reg_entry_value): Move to
+ dwarf_expr_context.
+ * dwarf2/loc.h (dwarf_expr_reg_to_entry_parameter): Expose
+ function.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Move read_mem to dwarf_expr_context
+ Following the idea of merging the evaluators, the read_mem method can
+ be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc classes
+ to their base class dwarf_expr_context.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::read_mem): Move from
+ dwarf_evaluate_loc_desc.
+ * dwarf2/frame.c (dwarf_expr_executor::read_mem): Remove
+ method.
+ * dwarf2/loc.c (dwarf_evaluate_loc_desc::read_mem): Move to
+ dwarf_expr_context.
+
+2021-08-05 Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Move get_object_address to dwarf_expr_context
+ Following the idea of merging the evaluators, the get_object_address
+ and can be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc
+ classes to their base class dwarf_expr_context.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::get_object_address): Move
+ from dwarf_evaluate_loc_desc.
+ (class dwarf_expr_context): Add object address member to
+ dwarf_expr_context.
+ * dwarf2/expr.h (dwarf_expr_context::get_frame_pc): Remove
+ method.
+ * dwarf2/frame.c (dwarf_expr_executor::get_object_address):
+ Remove method.
+ * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_object_address):
+ move to dwarf_expr_context.
+ (class dwarf_evaluate_loc_desc): Move object address member to
+ dwarf_expr_context.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Move dwarf_call to dwarf_expr_context
+ Following the idea of merging the evaluators, the dwarf_call and
+ get_frame_pc method can be moved from dwarf_expr_executor and
+ dwarf_evaluate_loc_desc classes to their base class dwarf_expr_context.
+ Once this is done, the get_frame_pc can be replace with lambda
+ function.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::dwarf_call): Move from
+ dwarf_evaluate_loc_desc.
+ (dwarf_expr_context::get_frame_pc): Replace with lambda.
+ * dwarf2/expr.h (dwarf_expr_context::get_frame_pc): Remove
+ method.
+ * dwarf2/frame.c (dwarf_expr_executor::dwarf_call): Remove
+ method.
+ (dwarf_expr_executor::get_frame_pc): Remove method.
+ * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_frame_pc): Remove
+ method.
+ (dwarf_evaluate_loc_desc::dwarf_call): Move to
+ dwarf_expr_context.
+ (per_cu_dwarf_call): Inline function.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Move compilation unit info to dwarf_expr_context
+ This patch moves the compilation unit context information and support
+ from dwarf_expr_executor and dwarf_evaluate_loc_desc to
+ dwarf_expr_context evaluator. The idea is to report an error when a
+ given operation requires a compilation unit information to be resolved,
+ which is not available.
+
+ With this change, it also makes sense to always acquire ref_addr_size
+ information from the compilation unit context, considering that all
+ DWARF operations that refer to that information require a compilation
+ unit context to be present during their evaluation.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (ensure_have_per_cu): New function.
+ (dwarf_expr_context::dwarf_expr_context): Add compilation unit
+ context information.
+ (dwarf_expr_context::get_base_type): Move from
+ dwarf_evaluate_loc_desc.
+ (dwarf_expr_context::get_addr_index): Remove method.
+ (dwarf_expr_context::dwarf_variable_value): Remove method.
+ (dwarf_expr_context::execute_stack_op): Call compilation unit
+ context info check. Inline get_addr_index and
+ dwarf_variable_value methods.
+ * dwarf2/expr.h (struct dwarf_expr_context): Add compilation
+ context info.
+ (dwarf_expr_context::get_addr_index): Remove method.
+ (dwarf_expr_context::dwarf_variable_value): Remove method.
+ (dwarf_expr_context::ref_addr_size): Remove member.
+ * dwarf2/frame.c (dwarf_expr_executor::get_addr_index): Remove
+ method.
+ (dwarf_expr_executor::dwarf_variable_value): Remove method.
+ * dwarf2/loc.c (sect_variable_value): Expose function.
+ (dwarf_evaluate_loc_desc::get_addr_index): Remove method.
+ (dwarf_evaluate_loc_desc::dwarf_variable_value): Remove method.
+ (class dwarf_evaluate_loc_desc): Move compilation unit context
+ information to dwarf_expr_context class.
+ * dwarf2/loc.h (sect_variable_value): Expose function.
+
+2021-08-05 Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Remove get_frame_cfa from dwarf_expr_context
+ Following the idea of merging the evaluators, the get_frame_cfa method
+ can be moved from dwarf_expr_executor and dwarf_evaluate_loc_desc
+ classes to their base class dwarf_expr_context. Once this is done,
+ it becomes apparent that the method is only called once and it can be
+ inlined.
+
+ It is also necessary to check if the frame context information was
+ provided before the DW_OP_call_frame_cfa operation is executed.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::get_frame_cfa): Remove
+ method.
+ (dwarf_expr_context::execute_stack_op): Call frame context info
+ check for DW_OP_call_frame_cfa. Remove use of get_frame_cfa.
+ * dwarf2/expr.h (dwarf_expr_context::get_frame_cfa): Remove
+ method.
+ * dwarf2/frame.c (dwarf_expr_context::get_frame_cfa): Remove
+ method.
+ * dwarf2/loc.c (dwarf_expr_context::get_frame_cfa): Remove
+ method.
+
+2021-08-05 Zoran Zaric <zoran.zaric@amd.com>
+
+ Move frame context info to dwarf_expr_context
+ Following 15 patches in this patch series is cleaning up the design of
+ the DWARF expression evaluator (dwarf_expr_context) to make future
+ extensions of that evaluator easier and cleaner to implement.
+
+ There are three subclasses of the dwarf_expr_context class
+ (dwarf_expr_executor, dwarf_evaluate_loc_desc and
+ evaluate_for_locexpr_baton). Here is a short description of each class:
+
+ - dwarf_expr_executor is evaluating a DWARF expression in a context
+ of a Call Frame Information. The overridden methods of this subclass
+ report an error if a specific DWARF operation, represented by that
+ method, is not allowed in a CFI context. The source code of this
+ subclass lacks the support for composite as well as implicit pointer
+ location description.
+
+ - dwarf_evaluate_loc_desc can evaluate any expression with no
+ restrictions. All of the methods that this subclass overrides are
+ actually doing what they are intended to do. This subclass contains
+ a full support for all location description types.
+
+ - evaluate_for_locexpr_baton subclass is a specialization of the
+ dwarf_evaluate_loc_desc subclass and it's function is to add
+ support for passed in buffers. This seems to be a way to go around
+ the fact that DWARF standard lacks a bit offset support for memory
+ location descriptions as well as using any location description for
+ the push object address functionality.
+
+ It all comes down to this question: what is a function of a DWARF
+ expression evaluator?
+
+ Is it to evaluate the expression in a given context or to check the
+ correctness of that expression in that context?
+
+ Currently, the only reason why there is a dwarf_expr_executor subclass
+ is to report an invalid DWARF expression in a context of a CFI, but is
+ that what the evaluator is supposed to do considering that the evaluator
+ is not tied to a given DWARF version?
+
+ There are more and more vendor and GNU extensions that are not part of
+ the DWARF standard, so is it that impossible to expect that some of the
+ extensions could actually lift the previously imposed restrictions of
+ the CFI context? Not to mention that every new DWARF version is lifting
+ some restrictions anyway.
+
+ The thing that makes more sense for an evaluator to do, is to take the
+ context of an evaluation and checks the requirements of every operation
+ evaluated against that context. With this approach, the evaluator would
+ report an error only if parts of the context, necessary for the
+ evaluation, are missing.
+
+ If this approach is taken, then the unification of the
+ dwarf_evaluate_loc_desc, dwarf_expr_executor and dwarf_expr_context
+ is the next logical step. This makes a design of the DWARF expression
+ evaluator cleaner and allows more flexibility when supporting future
+ vendor and GNU extensions.
+
+ Additional benefit here is that now all evaluators have access to all
+ location description types, which means that a vendor extended CFI
+ rules could support composite location description as well. This also
+ means that a new evaluator interface can be changed to return a single
+ struct value (that describes the result of the evaluation) instead of
+ a caller poking around the dwarf_expr_context internal data for answers
+ (like it is done currently).
+
+ This patch starts the merging process by moving the frame context
+ information and support from dwarf_expr_executor and
+ dwarf_evaluate_loc_desc to dwarf_expr_context evaluator. The idea
+ is to report an error when a given operation requires a frame
+ information to be resolved, if that information is not present.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (ensure_have_frame): New function.
+ (read_addr_from_reg): Add from frame.c.
+ (dwarf_expr_context::dwarf_expr_context): Add frame info to
+ dwarf_expr_context.
+ (dwarf_expr_context::read_addr_from_reg): Remove.
+ (dwarf_expr_context::get_reg_value): Move from
+ dwarf_evaluate_loc_desc.
+ (dwarf_expr_context::get_frame_base): Move from
+ dwarf_evaluate_loc_desc.
+ (dwarf_expr_context::execute_stack_op): Call frame context info
+ check. Remove use of read_addr_from_reg method.
+ * dwarf2/expr.h (struct dwarf_expr_context): Add frame info
+ member, read_addr_from_reg, get_reg_value and get_frame_base
+ declaration.
+ (read_addr_from_reg): Move to expr.c.
+ * dwarf2/frame.c (read_addr_from_reg): Move to
+ dwarf_expr_context.
+ (dwarf_expr_executor::read_addr_from_reg): Remove.
+ (dwarf_expr_executor::get_frame_base): Remove.
+ (dwarf_expr_executor::get_reg_value): Remove.
+ (execute_stack_op): Use read_addr_from_reg function instead of
+ read_addr_from_reg method.
+ * dwarf2/loc.c (dwarf_evaluate_loc_desc::get_frame_base): Move
+ to dwarf_expr_context.
+ (dwarf_evaluate_loc_desc::get_reg_value): Move to
+ dwarf_expr_context.
+ (dwarf_evaluate_loc_desc::read_addr_from_reg): Remove.
+ (dwarf2_locexpr_baton_eval):Use read_addr_from_reg function
+ instead of read_addr_from_reg method.
+
+2021-08-05 Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Cleanup of the dwarf_expr_context constructor
+ Move the initial values for dwarf_expr_context class data members
+ to the class declaration in expr.h.
+
+ gdb/ChangeLog:
+
+ * dwarf2/expr.c (dwarf_expr_context::dwarf_expr_context):
+ Remove initial data members values.
+ * dwarf2/expr.h (dwarf_expr_context): Add initial values
+ to the class data members.
+
+2021-08-05 Zoran Zaric <Zoran.Zaric@amd.com>
+
+ Replace the symbol needs evaluator with a parser
+ This patch addresses a design problem with the symbol_needs_eval_context
+ class. It exposes the problem by introducing two new testsuite test
+ cases.
+
+ To explain the issue, I first need to explain the dwarf_expr_context
+ class that the symbol_needs_eval_context class derives from.
+
+ The intention behind the dwarf_expr_context class is to commonize the
+ DWARF expression evaluation mechanism for different evaluation
+ contexts. Currently in gdb, the evaluation context can contain some or
+ all of the following information: architecture, object file, frame and
+ compilation unit.
+
+ Depending on the information needed to evaluate a given expression,
+ there are currently three distinct DWARF expression evaluators:
+
+  - Frame: designed to evaluate an expression in the context of a call
+    frame information (dwarf_expr_executor class). This evaluator doesn't
+    need a compilation unit information.
+
+  - Location description: designed to evaluate an expression in the
+    context of a source level information (dwarf_evaluate_loc_desc
+    class). This evaluator expects all information needed for the
+    evaluation of the given expression to be present.
+
+  - Symbol needs: designed to answer a question about the parts of the
+    context information required to evaluate a DWARF expression behind a
+    given symbol (symbol_needs_eval_context class). This evaluator
+    doesn't need a frame information.
+
+ The functional difference between the symbol needs evaluator and the
+ others is that this evaluator is not meant to interact with the actual
+ target. Instead, it is supposed to check which parts of the context
+ information are needed for the given DWARF expression to be evaluated by
+ the location description evaluator.
+
+ The idea is to take advantage of the existing dwarf_expr_context
+ evaluation mechanism and to fake all required interactions with the
+ actual target, by returning back dummy values. The evaluation result is
+ returned as one of three possible values, based on operations found in a
+ given expression:
+
+ - SYMBOL_NEEDS_NONE,
+ - SYMBOL_NEEDS_REGISTERS and
+ - SYMBOL_NEEDS_FRAME.
+
+ The problem here is that faking results of target interactions can yield
+ an incorrect evaluation result.
+
+ For example, if we have a conditional DWARF expression, where the
+ condition depends on a value read from an actual target, and the true
+ branch of the condition requires a frame information to be evaluated,
+ while the false branch doesn't, fake target reads could conclude that a
+ frame information is not needed, where in fact it is. This wrong
+ information would then cause the expression to be actually evaluated (by
+ the location description evaluator) with a missing frame information.
+ This would then crash the debugger.
+
+ The gdb.dwarf2/symbol_needs_eval_fail.exp test introduces this
+ scenario, with the following DWARF expression:
+
+                    DW_OP_addr $some_variable
+                    DW_OP_deref
+
+                    # conditional jump to DW_OP_bregx
+                    DW_OP_bra 4
+                    DW_OP_lit0
+
+                    # jump to DW_OP_stack_value
+                    DW_OP_skip 3
+                    DW_OP_bregx $dwarf_regnum 0
+                    DW_OP_stack_value
+
+ This expression describes a case where some variable dictates the
+ location of another variable. Depending on a value of some_variable, the
+ variable whose location is described by this expression is either read
+ from a register or it is defined as a constant value 0. In both cases,
+ the value will be returned as an implicit location description on the
+ DWARF stack.
+
+ Currently, when the symbol needs evaluator fakes a memory read from the
+ address behind the some_variable variable, the constant value 0 is used
+ as the value of the variable A, and the check returns the
+ SYMBOL_NEEDS_NONE result.
+
+ This is clearly a wrong result and it causes the debugger to crash.
+
+ The scenario might sound strange to some people, but it comes from a
+ SIMD/SIMT architecture where $some_variable is an execution mask.  In
+ any case, it is a valid DWARF expression, and GDB shouldn't crash while
+ evaluating it. Also, a similar example could be made based on a
+ condition of the frame base value, where if that value is concluded to
+ be 0, the variable location could be defaulted to a TLS based memory
+ address.
+
+ The gdb.dwarf2/symbol_needs_eval_timeout.exp test introduces a second
+ scenario. This scenario is a bit more abstract due to the DWARF
+ assembler lacking the CFI support, but it exposes a different
+ manifestation of the same problem. Like in the previous scenario, the
+ DWARF expression used in the test is valid:
+
+                        DW_OP_lit1
+                        DW_OP_addr $some_variable
+                        DW_OP_deref
+
+                        # jump to DW_OP_fbreg
+                        DW_OP_skip 4
+                        DW_OP_drop
+                        DW_OP_fbreg 0
+                        DW_OP_dup
+                        DW_OP_lit0
+                        DW_OP_eq
+
+                        # conditional jump to DW_OP_drop
+                        DW_OP_bra -9
+                        DW_OP_stack_value
+
+ Similarly to the previous scenario, the location of a variable A is an
+ implicit location description with a constant value that depends on a
+ value held by a global variable. The difference from the previous case
+ is that DWARF expression contains a loop instead of just one branch. The
+ end condition of that loop depends on the expectation that a frame base
+ value is never zero. Currently, the act of faking the target reads will
+ cause the symbol needs evaluator to get stuck in an infinite loop.
+
+ Somebody could argue that we could change the fake reads to return
+ something else, but that would only hide the real problem.
+
+ The general impression seems to be that the desired design is to have
+ one class that deals with parsing of the DWARF expression, while there
+ are virtual methods that deal with specifics of some operations.
+
+ Using an evaluator mechanism here doesn't seem to be correct, because
+ the act of evaluation relies on accessing the data from the actual
+ target with the possibility of skipping the evaluation of some parts of
+ the expression.
+
+ To better explain the proposed solution for the issue, I first need to
+ explain a couple more details behind the current design:
+
+ There are multiple places in gdb that handle DWARF expression parsing
+ for different purposes. Some are in charge of converting the expression
+ to some other internal representation (decode_location_expression,
+ disassemble_dwarf_expression and dwarf2_compile_expr_to_ax), some are
+ analysing the expression for specific information
+ (compute_stack_depth_worker) and some are in charge of evaluating the
+ expression in a given context (dwarf_expr_context::execute_stack_op
+ and decode_locdesc).
+
+ The problem is that all those functions have a similar (large) switch
+ statement that handles each DWARF expression operation. The result of
+ this is a code duplication and harder maintenance.
+
+ As a step into the right direction to solve this problem (at least for
+ the purpose of a DWARF expression evaluation) the expression parsing was
+ commonized inside of an evaluator base class (dwarf_expr_context). This
+ makes sense for all derived classes, except for the symbol needs
+ evaluator (symbol_needs_eval_context) class.
+
+ As described previously the problem with this evaluator is that if the
+ evaluator is not allowed to access the actual target, it is not really
+ evaluating.
+
+ Instead, the desired function of a symbol needs evaluator seems to fall
+ more into expression analysis category. This means that a more natural
+ fit for this evaluator is to be a symbol needs analysis, similar to the
+ existing compute_stack_depth_worker analysis.
+
+ Another problem is that using a heavyweight mechanism of an evaluator
+ to do an expression analysis seems to be an unneeded overhead. It also
+ requires a more complicated design of the parent class to support fake
+ target reads.
+
+ The reality is that the whole symbol_needs_eval_context class can be
+ replaced with a lightweight recursive analysis function, that will give
+ more correct result without compromising the design of the
+ dwarf_expr_context class. The analysis treats the expression byte
+ stream as a DWARF operation graph, where each graph node can be
+ visited only once and each operation can decide if the frame context
+ is needed for their evaluation.
+
+ The downside of this approach is adding of one more similar switch
+ statement, but at least this way the new symbol needs analysis will be
+ a lightweight mechnism and it will provide a correct result for any
+ given DWARF expression.
+
+ A more desired long term design would be to have one class that deals
+ with parsing of the DWARF expression, while there would be a virtual
+ methods that deal with specifics of some DWARF operations. Then that
+ class would be used as a base for all DWARF expression parsing mentioned
+ at the beginning.
+
+ This however, requires a far bigger changes that are out of the scope
+ of this patch series.
+
+ The new analysis requires the DWARF location description for the
+ argc argument of the main function to change in the assembly file
+ gdb.python/amd64-py-framefilter-invalidarg.S. Originally, expression
+ ended with a 0 value byte, which was never reached by the symbol needs
+ evaluator, because it was detecting a stack underflow when evaluating
+ the operation before. The new approach does not simulate a DWARF
+ stack anymore, so the 0 value byte needs to be removed because it
+ makes the DWARF expression invalid.
+
+ gdb/ChangeLog:
+
+ * dwarf2/loc.c (class symbol_needs_eval_context): Remove.
+ (dwarf2_get_symbol_read_needs): New function.
+ (dwarf2_loc_desc_get_symbol_read_needs): Remove.
+ (locexpr_get_symbol_read_needs): Use
+ dwarf2_get_symbol_read_needs.
+
+ gdb/testsuite/ChangeLog:
+
+ * gdb.python/amd64-py-framefilter-invalidarg.S : Update argc
+ DWARF location expression.
+ * lib/dwarf.exp (_location): Handle DW_OP_fbreg.
+ * gdb.dwarf2/symbol_needs_eval.c: New file.
+ * gdb.dwarf2/symbol_needs_eval_fail.exp: New file.
+ * gdb.dwarf2/symbol_needs_eval_timeout.exp: New file.
+
+2021-08-05 Cui,Lili <lili.cui@intel.com>
+
+ [PATCH 2/2] Add tests for Intel AVX512_FP16 instructions
+ Intel AVX512 FP16 instructions use maps 3, 5 and 6. Maps 5 and 6 use 3 bits
+ in the EVEX.mmm field (0b101, 0b110). Map 5 is for instructions that were FP32
+ in map 1 (0Fxx). Map 6 is for instructions that were FP32 in map 2 (0F38xx).
+ There are some exceptions to this rule. Some things in map 1 (0Fxx) with imm8
+ operands predated our current conventions; those instructions moved to map 3.
+ FP32 things in map 3 (0F3Axx) found new opcodes in map3 for FP16 because map3
+ is very sparsely populated. Most of the FP16 instructions share opcodes and
+ prefix (EVEX.pp) bits with the related FP32 operations.
+
+ Intel AVX512 FP16 instructions has new displacements scaling rules, please refer
+ to the public software developer manual for detail information.
+
+ gas/
+
+ 2021-08-05 Igor Tsimbalist <igor.v.tsimbalist@intel.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+ Wei Xiao <wei3.xiao@intel.com>
+ Lili Cui <lili.cui@intel.com>
+
+ * testsuite/gas/i386/i386.exp: Run FP16 tests.
+ * testsuite/gas/i386/avx512_fp16-intel.d: New test.
+ * testsuite/gas/i386/avx512_fp16-inval-bcast.l: Ditto.
+ * testsuite/gas/i386/avx512_fp16-inval-bcast.s: Ditto.
+ * testsuite/gas/i386/avx512_fp16.d: Ditto.
+ * testsuite/gas/i386/avx512_fp16.s: Ditto.
+ * testsuite/gas/i386/avx512_fp16_pseudo_ops.d: Ditto.
+ * testsuite/gas/i386/avx512_fp16_pseudo_ops.s: Ditto.
+ * testsuite/gas/i386/avx512_fp16_vl-intel.d: Ditto.
+ * testsuite/gas/i386/avx512_fp16_vl.d: Ditto.
+ * testsuite/gas/i386/avx512_fp16_vl.s: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16-intel.d: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16-inval-bcast.l: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16-inval-bcast.s: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16.d: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16.s: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16_pseudo_ops.d: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16_pseudo_ops.s: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16_vl-intel.d: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16_vl.d: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16_vl.s: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16-inval-register.l: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16-inval-register.s: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16-bad.d: Ditto.
+ * testsuite/gas/i386/x86-64-avx512_fp16-bad.s: Ditto.
+ * testsuite/gas/i386/x86-64-default-suffix-avx.d: Add new testcase.
+ * testsuite/gas/i386/x86-64-default-suffix.d: Ditto.
+ * testsuite/gas/i386/x86-64-default-suffix.s: Ditto.
+ * testsuite/gas/i386/xmmword.l: Ditto.
+ * testsuite/gas/i386/xmmword.s: Ditto.
+
+2021-08-05 Cui,Lili <lili.cui@intel.com>
+
+ [PATCH 1/2] Enable Intel AVX512_FP16 instructions
+ Intel AVX512 FP16 instructions use maps 3, 5 and 6. Maps 5 and 6 use 3 bits
+ in the EVEX.mmm field (0b101, 0b110). Map 5 is for instructions that were FP32
+ in map 1 (0Fxx). Map 6 is for instructions that were FP32 in map 2 (0F38xx).
+ There are some exceptions to this rule. Some things in map 1 (0Fxx) with imm8
+ operands predated our current conventions; those instructions moved to map 3.
+ FP32 things in map 3 (0F3Axx) found new opcodes in map3 for FP16 because map3
+ is very sparsely populated. Most of the FP16 instructions share opcodes and
+ prefix (EVEX.pp) bits with the related FP32 operations.
+
+ Intel AVX512 FP16 instructions has new displacements scaling rules, please refer
+ to the public software developer manual for detail information.
+
+ gas/
+
+ 2021-08-05 Igor Tsimbalist <igor.v.tsimbalist@intel.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+ Wei Xiao <wei3.xiao@intel.com>
+ Lili Cui <lili.cui@intel.com>
+
+ * config/tc-i386.c (struct Broadcast_Operation): Adjust comment.
+ (cpu_arch): Add .avx512_fp16.
+ (cpu_noarch): Add noavx512_fp16.
+ (pte): Add evexmap5 and evexmap6.
+ (build_evex_prefix): Handle EVEXMAP5 and EVEXMAP6.
+ (check_VecOperations): Handle {1to32}.
+ (check_VecOperands): Handle CheckRegNumb.
+ (check_word_reg): Handle Toqword.
+ (i386_error): Add invalid_dest_and_src_register_set.
+ (match_template): Handle invalid_dest_and_src_register_set.
+ * doc/c-i386.texi: Document avx512_fp16, noavx512_fp16.
+
+ opcodes/
+
+ 2021-08-05 Igor Tsimbalist <igor.v.tsimbalist@intel.com>
+ H.J. Lu <hongjiu.lu@intel.com>
+ Wei Xiao <wei3.xiao@intel.com>
+ Lili Cui <lili.cui@intel.com>
+
+ * i386-dis.c (EXwScalarS): New.
+ (EXxh): Ditto.
+ (EXxhc): Ditto.
+ (EXxmmqh): Ditto.
+ (EXxmmqdh): Ditto.
+ (EXEvexXwb): Ditto.
+ (DistinctDest_Fixup): Ditto.
+ (enum): Add xh_mode, evex_half_bcst_xmmqh_mode, evex_half_bcst_xmmqdh_mode
+ and w_swap_mode.
+ (enum): Add PREFIX_EVEX_0F3A08_W_0, PREFIX_EVEX_0F3A0A_W_0,
+ PREFIX_EVEX_0F3A26, PREFIX_EVEX_0F3A27, PREFIX_EVEX_0F3A56,
+ PREFIX_EVEX_0F3A57, PREFIX_EVEX_0F3A66, PREFIX_EVEX_0F3A67,
+ PREFIX_EVEX_0F3AC2, PREFIX_EVEX_MAP5_10, PREFIX_EVEX_MAP5_11,
+ PREFIX_EVEX_MAP5_1D, PREFIX_EVEX_MAP5_2A, PREFIX_EVEX_MAP5_2C,
+ PREFIX_EVEX_MAP5_2D, PREFIX_EVEX_MAP5_2E, PREFIX_EVEX_MAP5_2F,
+ PREFIX_EVEX_MAP5_51, PREFIX_EVEX_MAP5_58, PREFIX_EVEX_MAP5_59,
+ PREFIX_EVEX_MAP5_5A_W_0, PREFIX_EVEX_MAP5_5A_W_1,
+ PREFIX_EVEX_MAP5_5B_W_0, PREFIX_EVEX_MAP5_5B_W_1,
+ PREFIX_EVEX_MAP5_5C, PREFIX_EVEX_MAP5_5D, PREFIX_EVEX_MAP5_5E,
+ PREFIX_EVEX_MAP5_5F, PREFIX_EVEX_MAP5_78, PREFIX_EVEX_MAP5_79,
+ PREFIX_EVEX_MAP5_7A, PREFIX_EVEX_MAP5_7B, PREFIX_EVEX_MAP5_7C,
+ PREFIX_EVEX_MAP5_7D_W_0, PREFIX_EVEX_MAP6_13, PREFIX_EVEX_MAP6_56,
+ PREFIX_EVEX_MAP6_57, PREFIX_EVEX_MAP6_D6, PREFIX_EVEX_MAP6_D7
+ (enum): Add EVEX_MAP5 and EVEX_MAP6.
+ (enum): Add EVEX_W_MAP5_5A, EVEX_W_MAP5_5B,
+ EVEX_W_MAP5_78_P_0, EVEX_W_MAP5_78_P_2, EVEX_W_MAP5_79_P_0,
+ EVEX_W_MAP5_79_P_2, EVEX_W_MAP5_7A_P_2, EVEX_W_MAP5_7A_P_3,
+ EVEX_W_MAP5_7B_P_2, EVEX_W_MAP5_7C_P_0, EVEX_W_MAP5_7C_P_2,
+ EVEX_W_MAP5_7D, EVEX_W_MAP6_13_P_0, EVEX_W_MAP6_13_P_2,
+ (get_valid_dis386): Properly handle new instructions.
+ (intel_operand_size): Handle new modes.
+ (OP_E_memory): Ditto.
+ (OP_EX): Ditto.
+ * i386-dis-evex.h: Updated for AVX512_FP16.
+ * i386-dis-evex-mod.h: Updated for AVX512_FP16.
+ * i386-dis-evex-prefix.h: Updated for AVX512_FP16.
+ * i386-dis-evex-reg.h : Updated for AVX512_FP16.
+ * i386-dis-evex-w.h : Updated for AVX512_FP16.
+ * i386-gen.c (cpu_flag_init): Add CPU_AVX512_FP16_FLAGS,
+ and CPU_ANY_AVX512_FP16_FLAGS. Update CPU_ANY_AVX512F_FLAGS
+ and CPU_ANY_AVX512BW_FLAGS.
+ (cpu_flags): Add CpuAVX512_FP16.
+ (opcode_modifiers): Add DistinctDest.
+ * i386-opc.h (enum): (AVX512_FP16): New.
+ (i386_opcode_modifier): Add reqdistinctreg.
+ (i386_cpu_flags): Add cpuavx512_fp16.
+ (EVEXMAP5): Defined as a macro.
+ (EVEXMAP6): Ditto.
+ * i386-opc.tbl: Add Intel AVX512_FP16 instructions.
+ * i386-init.h: Regenerated.
+ * i386-tbl.h: Ditto.
+
+2021-08-05 Alan Modra <amodra@gmail.com>
+
+ PR28167, vms-alpha build_module_list
+ PR 28167
+ * vms-alpha.c (build_module_list): Malloc and free section contents.
+ Don't read past end of section.
+
+2021-08-05 Alan Modra <amodra@gmail.com>
+
+ PR28166, _bfd_elf_mips_get_relocated_section_contents
+ Some of the code paths unpacking mips relocs left arelent->sym_ptr_ptr
+ uninitialised.
+
+ PR 28166
+ * elf64-mips.c (mips_elf64_slurp_one_reloc_table): Don't leave
+ sym_ptr_ptr uninitialised.
+
+2021-08-05 Alan Modra <amodra@gmail.com>
+
+ PR28165, buffer overflow in elf32-rx.c:rx_info_to_howto_rela
+ PR 28165
+ * elf32-rx.c (rx_elf_howto_table): Add missing empty entries.
+ (rx_info_to_howto_rela): Assert rx_elf_howto_table is correct size.
+ Use actual size when sanity checking r_type.
+
+2021-08-05 Alan Modra <amodra@gmail.com>
+
+ Re: elf: Treat undefined version as hidden
+ Fix fallout in cris testsuite
+
+ PR binutils/28158
+ * ld-cris/libdso-1c.d: Update for version display change.
+ * ld-cris/libdso-15b.d: Likewise.
+
+2021-08-05 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/testsuite: update test gdb.base/step-over-syscall.exp
+ I was looking at PR gdb/19675 and the related test
+ gdb.base/step-over-syscall.exp. This test includes a call to kfail
+ when we are testing a displaced step over a clone syscall.
+
+ While looking at the test I removed the call to kfail and ran the
+ test, and was surprised that the test passed.
+
+ I ran the test a few times and it does sometimes fail, but mostly it
+ passed fine.
+
+ PR gdb/19675 describes how, when we displaced step over a clone, the
+ new thread is created with a $pc in the displaced step buffer. GDB
+ then fails to "fix" this $pc (for the new thread), and the thread will
+ be set running with its current $pc value. This means that the new
+ thread will just start executing from whatever happens to be after the
+ displaced stepping buffer.
+
+ In the original PR gdb/19675 bug report Yao Qi was seeing the new
+ thread cause a segfault, the problem is, what actually happens is
+ totally undefined.
+
+ On my machine, I'm seeing the new thread reenter main, it then starts
+ trying to run the test again (in the new thread). This just happens
+ to be safe enough (in this simple test) that most of the time the
+ inferior doesn't crash.
+
+ In this commit I try to make the test slightly more likely to fail by
+ doing a couple of things.
+
+ First, I added a static variable to main, this is set true when the
+ first thread enters main, if a second thread ever enters main then I
+ force an abort.
+
+ Second, when the test is finishing I want to ensure that the new
+ threads have had a chance to do "something bad" if they are going to.
+ So I added a global counter, as each thread starts successfully it
+ decrements the counter. The main thread does not proceed to the final
+ marker function (where GDB has placed a breakpoint) until all threads
+ have started successfully. This means that if the newly created
+ thread doesn't successfully enter clone_fn then the counter will never
+ reach zero and the test will timeout.
+
+ With these two changes my hope is that the test should fail more
+ reliably, and so, I have also changed the test to call setup_kfail
+ before the specific steps that we expect to misbehave instead of just
+ calling kfail and skipping parts of the test completely. The benefit
+ of this is that if/when we fix GDB this test will start to KPASS and
+ we'll know to update this test to remove the setup_kfail call.
+
+2021-08-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-05 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: Use unwinder name in frame_info::to_string
+ While working on a stack unwinding issue using 'set debug frame on', I
+ noticed the frame_info::to_string method could be slightly improved.
+
+ Unwinders have been given a name in
+ a154d838a70e96d888620c072e2d6ea8bdf044ca. Before this patch, frame_info
+ debug output prints the host address of the used unwinder, which is not
+ easy to interpret. This patch proposes to use the unwinder name
+ instead since we now have it.
+
+ Before the patch:
+
+ {level=1,type=NORMAL_FRAME,unwind=0x2ac1763ec0,pc=0x3ff7fc3460,id={stack=0x3ff7ea79b0,code=0x0000003ff7fc33ac,!special},func=0x3ff7fc33ac}
+
+ With the patch:
+
+ {level=1,type=NORMAL_FRAME,unwinder="riscv prologue",pc=0x3ff7fc3460,id={stack=0x3ff7ea79b0,code=0x0000003ff7fc33ac,!special},func=0x3ff7fc33ac}
+
+ Tested on riscv64-linux-gnu.
+
+2021-08-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: fix gdb.base/info-macros.exp with clang
+ The test gdb.base/info-macros.exp says that it doesn't pass the "debug"
+ option to prepare_for_testing because that would cause -g to appear
+ after -g3 on the command line, and that would cause some gcc versions to
+ not include macro info. I don't know what gcc versions this refers to.
+ I tested with gcc 4.8, and that works fine with -g after -g3.
+
+ The current state is problematic when testing with CC_FOR_TARGET=clang,
+ because then only -fdebug-macro is included. No -g switch if included,
+ meaning we get a binary without any debug info, and the test fails.
+
+ One way to fix it would be to add "debug" to the options when the
+ compiler is clang.
+
+ However, the solution I chose was to specify "debug" in any case, even
+ for gcc. Other macro tests such as gdb.base/macscp.exp do perfectly
+ fine with it. Also, this lets the test use the debug flag specified by
+ the board file. For example, we can test with GCC and DWARF 5, with:
+
+ $ make check RUNTESTFLAGS="--target_board unix/gdb:debug_flags=-gdwarf-5" TESTS="gdb.base/info-macros.exp"
+
+ With the hard-coded -g3, this wouldn't actually test with DWARF 5.
+
+ Change-Id: I33fa92ee545007d3ae9c52c4bb2d5be6b5b698f1
+
+2021-08-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: avoid dereferencing empty str_offsets_base optional in dwarf_decode_macros
+ Since 4d7188abfdf2 ("gdbsupport: add debug assertions in
+ gdb::optional::get"), some macro-related tests fail on Ubuntu 20.04 with
+ the system gcc 9.3.0 compiler when building with _GLIBCXX_DEBUG. For
+ example, gdb.base/info-macros.exp results in:
+
+ (gdb) break -qualified main
+ /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/gdb_optional.h:206: internal-error: T& gdb::optional<T>::get() [with T = long unsigned int]: Assertion `this->has_value ()' failed.
+
+ The binary contains DWARF 4 debug info and includes a pre-standard
+ (pre-DWARF 5) .debug_macro section. The CU doesn't have a
+ DW_AT_str_offsets_base attribute (which doesn't exist in DWARF 4). The
+ field dwarf2_cu::str_offsets_base is therefore empty. At
+ dwarf2/read.c:24138, we unconditionally read the value in the optional,
+ which triggers the assertion shown above.
+
+ The same thing happens when building the test program with DWARF 5 with
+ the same gcc compiler, as that version of gcc doesn't use indirect
+ string forms, even with DWARF 5. So it still doesn't add a
+ DW_AT_str_offsets_base attribute on the CU.
+
+ Fix that by propagating down a gdb::optional<ULONGEST> for the str
+ offsets base instead of ULONGEST. That value is only used in
+ dwarf_decode_macro_bytes, when encountering an "strx" macro operation
+ (DW_MACRO_define_strx or DW_MACRO_undef_strx). Add a check there that
+ we indeed have a value in the optional before reading it. This is
+ unlikely to happen, but could happen in theory with an erroneous file
+ that uses DW_MACRO_define_strx but does not provide a
+ DW_AT_str_offsets_base (in practice, some things would probably have
+ failed before and stopped processing of debug info). I tested the
+ complaint by inverting the condition and using a clang-compiled binary,
+ which uses the strx operators. This is the result:
+
+ During symbol reading: use of DW_MACRO_define_strx with unknown string offsets base [in module /home/simark/build/binutils-gdb/gdb/testsuite/outputs/gdb.base/info-macros/info-macros]
+
+ The test now passes cleanly with the setup mentioned above, and the
+ testsuite looks on par with how it was before 4d7188abfdf2.
+
+ Change-Id: I7ebd2724beb7b9b4178872374c2a177aea696e77
+
+2021-08-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix typo in complaint in dwarf2/macro.c
+ I saw this complaint when my code had some bug, and spotted the typo.
+ Fix it, and while at it mention DW_MACRO as well (it would be confusing
+ to only see DW_MACINFO with a file that uses a DWARF 5 .debug_macro
+ section). I contemplated the idea of passing the knowledge of whether
+ we are dealing with a .debug_macro section or .debug_macinfo section, to
+ print only the right one. But in the end, I don't think that trouble is
+ necessary for a complaint nobody is going to see.
+
+ Change-Id: I276ce8da65c3eac5304f64a1e246358ed29cdbbc
+
+2021-08-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix warnings in bsd-kvm.c
+ Building on OpenBSD, I get warnings like:
+
+ CXX bsd-kvm.o
+ /home/simark/src/binutils-gdb/gdb/bsd-kvm.c:241:18: error: ISO C++11 does not allow conversion from string literal to 'char *' [-Werror,-Wwritable-strings]
+ nl[0].n_name = "_dumppcb";
+ ^
+
+ Silence those by adding casts.
+
+ Change-Id: I2bef4eebcc306762a4e3e5b5c52f67ecf2820503
+
+2021-08-04 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ IBM Z: Remove lpswey parameter
+ opcodes/
+ * s390-opc.c (INSTR_SIY_RD): New instruction format.
+ (MASK_SIY_RD): New instruction mask.
+ * s390-opc.txt: Change instruction format of lpswey to SIY_RD.
+
+ gas/
+ * testsuite/gas/s390/zarch-arch14.d: Remove last operand of
+ lpswey.
+ * testsuite/gas/s390/zarch-arch14.s: Likewise.
+
+2021-08-04 Alan Modra <amodra@gmail.com>
+
+ PR28162, segment fault in mips_elf_assign_gp
+ For the testcase in the PR, _bfd_mips_elf32_gprel16_reloc is passed a
+ NULL output_bfd. As expected for reloc special functions if called by
+ objdump or when final linking. The function attempts to find the
+ output by
+ output_bfd = symbol->section->output_section->owner;
+ That makes some sense, since when handling a gp-relative reloc we need
+ the relevant gp to which the symbol is relative. Possibly the gp
+ value can be one for a shared library? But that doesn't seem useful
+ or supported by the various abi docs and won't work as written.
+ Symbols defined in shared libraries have section->output_section
+ NULL, and what's more the code in mips_elf_assign_gp isn't set up to
+ look at shared library symbols.
+
+ Also, if the symbol is a SHN_ABS one the owner of *ABS* section is
+ NULL, which will result in the testcase segfault. The only gp to
+ which an absolute symbol can be relative is the linker output bfd when
+ linking, or the input bfd when not. This patch arranges to do that
+ for all gp-relative reloc symbols.
+
+ * elf32-mips.c (_bfd_mips_elf32_gprel16_reloc): Don't use the
+ section symbol to find the output bfd, use input_section.
+ (mips_elf_gprel32_reloc, mips16_gprel_reloc): Likewise.
+ * elf64-mips.c (mips_elf64_gprel16_reloc): Likewise.
+ (mips_elf64_literal_reloc, mips_elf64_gprel32_reloc): Likewise.
+ (mips16_gprel_reloc): Likewise.
+
+2021-08-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Use lambda function instead of addrmap_foreach_check
+ Use a lambda function instead of addrmap_foreach_check,
+ which removes the need for static variables.
+
+ Also remove unnecessary static on local var temp_obstack in test_addrmap.
+
+ gdb/ChangeLog:
+
+ 2021-08-04 Tom de Vries <tdevries@suse.de>
+
+ * addrmap.c (addrmap_foreach_check): Remove.
+ (array, val1, val2): Move ...
+ (test_addrmap): ... here. Remove static on temp_obstack. Use lambda
+ function instead of addrmap_foreach_check.
+
+2021-08-04 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Treat undefined version as hidden
+ Since undefined version can't be used to resolve any references without
+ the original definition, treat it as hidden.
+
+ bfd/
+
+ PR binutils/28158
+ * elf.c (_bfd_elf_get_symbol_version_string): Treat undefined
+ version as hidden.
+
+ ld/
+
+ PR binutils/28158
+ * testsuite/ld-elf/linux-x86.exp: Run PR binutils/28158 tests.
+ * testsuite/ld-elf/pr28158-1.c: New file.
+ * testsuite/ld-elf/pr28158-2.S: Likewise.
+ * testsuite/ld-elf/pr28158.nd: Likewise.
+ * testsuite/ld-elf/pr28158.rd: Likewise.
+ * testsuite/ld-elf/pr28158.t: Likewise.
+ * testsuite/ld-elfvers/vers2.dsym: Updated.
+ * testsuite/ld-elfvers/vers3.dsym: Likewise.
+ * testsuite/ld-elfvers/vers6.dsym: Likewise.
+ * testsuite/ld-elfvers/vers19.dsym: Likewise.
+ * testsuite/ld-elfvers/vers22.dsym: Likewise.
+ * testsuite/ld-elfvers/vers23.dsym: Likewise.
+ * testsuite/ld-elfvers/vers23d.dsym: Likewise.
+ * testsuite/ld-elfvers/vers27d4.dsym: Likewise.
+ * testsuite/ld-elfvers/vers28c.dsym: Likewise.
+
+2021-08-04 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Implement addrmap_mutable_find
+ Currently addrmap_mutable_find is not implemented:
+ ...
+ static void *
+ addrmap_mutable_find (struct addrmap *self, CORE_ADDR addr)
+ {
+ /* Not needed yet. */
+ internal_error (__FILE__, __LINE__,
+ _("addrmap_find is not implemented yet "
+ "for mutable addrmaps"));
+ }
+ ...
+
+ I implemented this because I needed it during debugging, to be able to do:
+ ...
+ (gdb) p ((dwarf2_psymtab *)addrmap_find (map, addr))->filename
+ ...
+ before and after a call to addrmap_set_empty.
+
+ Since this is not used otherwise, added addrmap unit test.
+
+ Build on x86_64-linux, tested by doing:
+ ...
+ $ gdb -q -batch -ex "maint selftest addrmap"
+ Running selftest addrmap.
+ Ran 1 unit tests, 0 failed
+ ...
+
+ gdb/ChangeLog:
+
+ 2021-08-03 Tom de Vries <tdevries@suse.de>
+
+ * gdb/addrmap.c (addrmap_mutable_find): Implement
+ [GDB_SELF_TESTS] (CHECK_ADDRMAP_FIND): New macro.
+ [GDB_SELF_TESTS] (core_addr, addrmap_foreach_check, test_addrmap)
+ (_initialize_addrmap): New function.
+
+2021-08-04 Clément Chigot <clement.chigot@atos.net>
+
+ gas: correctly output XCOFF tbss symbols with XTY_CM type.
+ Global tbss symbols weren't correctly handled and were generating
+ a symbol with XTY_SD instead of XTY_CM as expected.
+
+ gas/
+ * config/tc-ppc.c (ppc_frog_symbol): Generate a XTY_CM when
+ a symbol has a storage class of XMC_UL.
+
+2021-08-04 Clément Chigot <clement.chigot@atos.net>
+
+ gas: always add dummy symbols when creating XCOFF sections.
+ Most of the algorithms for XCOFF in tc-ppc.c assume that
+ the csects field of a ppc_xcoff_section isn't NULL.
+ This was already made for most of the sections with the creation
+ of a dummy symbol.
+ This patch simply mades it default when creating a xcoff_section.
+
+ gas/
+ * config/tc-ppc.c (ppc_init_xcoff_section): Always create
+ the dummy symbol.
+ (md_begin): Adjust ppc_init_xcoff_section call.
+ (ppc_comm): Likewise.
+ (ppc_change_csect): Likewise.
+
+2021-08-04 Alan Modra <amodra@gmail.com>
+
+ PR28156, rename.c doesn't compile with MinGW
+ Guard against lack of struct timespec definition.
+
+ PR 28156
+ * rename.c (get_stat_atime, get_stat_mtime): Don't compile
+ unless HAVE_UTIMENSAT is defined.
+
+2021-08-04 Alan Modra <amodra@gmail.com>
+
+ PR28155, Superfluous "the" in the man page
+ PR 28155
+ * ld.texi (Options <runtime library name>): Correct grammar.
+
+ revise PE IMAGE_SCN_LNK_NRELOC_OVFL test
+ * coffcode.h (coff_set_alignment_hook): Test that the resulting
+ reloc count is not less than 0xffff.
+
+2021-08-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: follow-fork: push target and add thread in target_follow_fork
+ In the context of ROCm-gdb [1], the ROCm target sits on top of the
+ linux-nat target. when a process forks, it needs to carry over some
+ data from the forking inferior to the fork child inferior. Ideally, the
+ ROCm target would implement the follow_fork target_ops method, but there
+ are some small problems. This patch fixes these, which helps the ROCm
+ target, but also makes things more consistent and a bit nicer in
+ general, I believe.
+
+ The main problem is: when follow-fork-mode is "parent",
+ target_follow_fork is called with the parent as the current inferior.
+ When it's "child", target_follow_fork is called with the child as the
+ current inferior. This means that target_follow_fork is sometimes
+ called on the parent's target stack and sometimes on the child's target
+ stack.
+
+ The parent's target stack may contain targets above the process target,
+ such as the ROCm target. So if follow-fork-child is "parent", the ROCm
+ target would get notified of the fork and do whatever is needed. But
+ the child's target stack, at that moment, only contains the exec and
+ process target copied over from the parent. The child's target stack is
+ set up by follow_fork_inferior, before calling target_follow_fork. In
+ that case, the ROCm target wouldn't get notified of the fork.
+
+ For consistency, I think it would be good to always call
+ target_follow_fork on the parent inferior's target stack. I think it
+ makes sense as a way to indicate "this inferior has called fork, do
+ whatever is needed". The desired outcome of the fork (whether an
+ inferior is created for the child, do we need to detach from the child)
+ can be indicated by passed parameter.
+
+ I therefore propose these changes:
+
+ - make follow_fork_inferior always call target_follow_fork with the
+ parent as the current inferior. That lets all targets present on the
+ parent's target stack do some fork-related handling and push
+ themselves on the fork child's target stack if needed.
+
+ For this purpose, pass the child inferior down to target_follow_fork
+ and follow_fork implementations. This is nullptr if no inferior is
+ created for the child, because we want to detach from it.
+
+ - as a result, in follow_fork_inferior, detach from the parent inferior
+ (if needed) only after the target_follow_fork call. This is needed
+ because we want to call target_follow_fork before the parent's
+ target stack is torn down.
+
+ - hand over to the targets in the parent's target stack (including the
+ process target) the responsibility to push themselves, if needed, to
+ the child's target stack. Also hand over the responsibility to the
+ process target, at the same time, to create the child's initial
+ thread (just like we do for follow_exec).
+
+ - pass the child inferior to exec_on_vfork, so we don't need to swap
+ the current inferior between parent and child. Nothing in
+ exec_on_vfork depends on the current inferior, after this change.
+
+ Although this could perhaps be replaced with just having the exec
+ target implement follow_fork and push itself in the child's target
+ stack, like the process target does... We would just need to make
+ sure the process target calls beneath()->follow_fork(...). I'm not
+ sure about this one.
+
+ gdb/ChangeLog:
+
+ * target.h (struct target_ops) <follow_fork>: Add inferior*
+ parameter.
+ (target_follow_fork): Likewise.
+ * target.c (default_follow_fork): Likewise.
+ (target_follow_fork): Likewise.
+ * fbsd-nat.h (class fbsd_nat_target) <follow_fork>: Likewise.
+ (fbsd_nat_target::follow_fork): Likewise, and call
+ inf_ptrace_target::follow_fork.
+ * linux-nat.h (class linux_nat_target) <follow_fork>: Likewise.
+ * linux-nat.c (linux_nat_target::follow_fork): Likewise, and
+ call inf_ptrace_target::follow_fork.
+ * obsd-nat.h (obsd_nat_target) <follow_fork>: Likewise.
+ * obsd-nat.c (obsd_nat_target::follow_fork): Likewise, and call
+ inf_ptrace_target::follow_fork.
+ * remote.c (class remote_target) <follow_fork>: Likewise.
+ (remote_target::follow_fork): Likewise, and call
+ process_stratum_target::follow_fork.
+ * process-stratum-target.h (class process_stratum_target)
+ <follow_fork>: New.
+ * process-stratum-target.c
+ (process_stratum_target::follow_fork): New.
+ * target-delegates.c: Re-generate.
+
+ [1] https://github.com/ROCm-Developer-Tools/ROCgdb
+
+ Change-Id: I460bd0af850f0485e8aed4b24c6d8262a4c69929
+
+2021-08-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-03 Carl Love <cel@us.ibm.com>
+
+ Fixes for mi-fortran-modules.exp fixes
+ Output has additional information for a given filename.
+
+ gdb/testsuite/ChangeLog
+ * gdb.mi/mi-fortran-modules.exp (system_modules_pattern,
+ system_module_symbols_pattern): Add check for additional symbols
+ on the line
+
+2021-08-03 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport: add debug assertions in gdb::optional::get
+ The libstdc++ version of optional contains some runtime checks enabled
+ when _GLIBCXX_DEBUG is defined. I think it would be useful if our
+ version contained similar checks.
+
+ Add checks in the two `get` methods, also conditional on _GLIBCXX_DEBUG.
+ I think it's simpler to use that macro rather than introducing a new
+ GDB-specific one, as I think that if somebody is interested in enabling
+ these runtime checks, they'll also be interested in enabling the
+ libstdc++ runtime checks (and vice-versa).
+
+ I implemented these checks using gdb_assert. Note that gdb_assert
+ throws (after querying the user), and we are in noexcept methods. That
+ means that std::terminate / abort will immediately be called. I think
+ this is ok, since if those were "real" _GLIBCXX_DEBUG checks, abort
+ would be called straight away.
+
+ If I add a dummy failure, it looks like so:
+
+ $ ./gdb -q -nx --data-directory=data-directory
+ /home/simark/src/binutils-gdb/gdb/../gdbsupport/gdb_optional.h:206: internal-error: T& gdb::optional<T>::get() [with T = int]: Assertion `this->has_value ()' failed.
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Quit this debugging session? (y or n) n
+ [1] 658767 abort (core dumped) ./gdb -q -nx --data-directory=data-directory
+
+ Change-Id: Iadfdcd131425bd2ca6a2de30d7b22e9b3cc67793
+
+2021-08-03 Alok Kumar Sharma <AlokKumar.Sharma@amd.com>
+
+ [gdb/testsuite] templates.exp to accept clang++ output
+ Please consider below testcase with intended error.
+ ``````````
+ constexpr const char cstring[] = "Eta";
+ template <const char*, typename T> class Column {};
+ using quick = Column<cstring,double>; // cstring without '&'
+
+ void lookup() {
+ quick c1;
+ c1.ls();
+ }
+ ``````````
+ It produces below error.
+ ``````````
+ no member named 'ls' in 'Column<&cstring, double>'.
+ ``````````
+ Please note that error message contains '&' for cstring, which is absent
+ in actual program.
+ Clang++ does not generate & in such cases and this should also be
+ accepted as correct output.
+
+ gdb/testsuite/ChangeLog:
+
+ * gdb.cp/templates.exp: Accept different but correct output
+ from the Clang++ compiled binary also.
+
+2021-08-03 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-02 Tom Tromey <tromey@adacore.com>
+
+ Handle compiler-generated suffixes in Ada names
+ The compiler may add a suffix to a mangled name. A typical example
+ would be splitting a function and creating a ".cold" variant.
+
+ This patch changes Ada decoding (aka demangling) to handle these
+ suffixes. It also changes the encoding process to handle them as
+ well.
+
+ A symbol like "function.cold" will now be displayed to the user as
+ "function[cold]". The "." is not simply preserved because that is
+ already used in Ada.
+
+2021-08-02 Tom Tromey <tromey@adacore.com>
+
+ Remove uses of fprintf_symbol_filtered
+ I believe that many calls to fprintf_symbol_filtered are incorrect.
+ In particular, there are some that pass a symbol's print name, like:
+
+ fprintf_symbol_filtered (gdb_stdout, sym->print_name (),
+ current_language->la_language, DMGL_ANSI);
+
+ fprintf_symbol_filtered uses the "demangle" global to decide whether
+ or not to demangle -- but print_name does this as well. This can lead
+ to double-demangling. Normally this could be innocuous, except I also
+ plan to change Ada demangling in a way that causes this to fail.
+
+2021-08-02 Tom Tromey <tromey@adacore.com>
+
+ Handle type qualifier for enumeration name
+ Pierre-Marie noticed that the Ada expression "TYPE'(NAME)" resolved
+ incorrectly when "TYPE" was an enumeration type. Here, "NAME" should
+ be unambiguous.
+
+ This patch fixes this problem. Note that the patch is not perfect --
+ it does not give an error if TYPE is an enumeration type but NAME is
+ not an enumerator but does have some other meaning in scope. Fixing
+ this proved difficult, and so I've left it out.
+
+2021-08-02 Tom Tromey <tromey@adacore.com>
+
+ Remove the type_qualifier global
+ The type_qualifier global is no longer needed in the Ada expression
+ parser, so this removes it.
+
+2021-08-02 Tom Tromey <tromey@adacore.com>
+
+ Defer Ada character literal resolution
+ In Ada, an enumeration type can use a character literal as one of the
+ enumerators. The Ada expression parser handles the appropriate
+ conversion.
+
+ It turns out, though, that this conversion was handled incorrectly.
+ For an expression like TYPE'(EXP), the conversion would be done for
+ any such literal appearing in EXP -- but only the outermost such
+ expression should really be affected.
+
+ This patch defers the conversion until the resolution phase, fixing
+ the bug.
+
+2021-08-02 Tom Tromey <tromey@adacore.com>
+
+ Refactor Ada resolution
+ In a subsequent patch, it will be convenient if an Ada expression
+ operation can supply its own replacement object. This patch refactors
+ Ada expression resolution to make this possible.
+
+ Remove add_symbols_from_enclosing_procs
+ I noticed that add_symbols_from_enclosing_procs is empty, and can be
+ removed. The one caller, ada_add_local_symbols, can also be
+ simplified, removing some code that, I think, was an incorrect attempt
+ to handle nested functions.
+
+2021-08-02 Tom Tromey <tromey@adacore.com>
+
+ Avoid crash in varobj deletion
+ PR varobj/28131 points out a crash in the varobj deletion code. It
+ took a while to reproduce this, but essentially what happens is that a
+ top-level varobj deletes its root object, then deletes the "dynamic"
+ object. However, deletion of the dynamic object may cause
+ ~py_varobj_iter to run, which in turn uses gdbpy_enter_varobj:
+
+ gdbpy_enter_varobj::gdbpy_enter_varobj (const struct varobj *var)
+ : gdbpy_enter (var->root->exp->gdbarch, var->root->exp->language_defn)
+ {
+ }
+
+ However, because var->root has already been destroyed, this is
+ invalid.
+
+ I've added a new test case. This doesn't reliably crash, but the
+ problem can easily be seen under valgrind (and, I presume, with ASAN,
+ though I did not try this).
+
+ Tested on x86-64 Fedora 32. I also propose putting this on the GDB 11
+ branch, with a suitable ChangeLog entry of course.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28131
+
+2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/dw2-using-debug-str.exp with cc-with-dwz-m
+ When running with target board cc-with-dwz-m, we run into:
+ ...
+ (gdb) file dw2-using-debug-str-no-debug-str^M
+ Reading symbols from dw2-using-debug-str-no-debug-str...^M
+ (gdb) FAIL: gdb.dwarf2/dw2-using-debug-str.exp: file dw2-using-debug-str
+ ...
+
+ With native, the .debug_str section is present in the
+ dw2-using-debug-str executable, and removed from the
+ dw2-using-debug-str-no-debug-str executable. When loading the latter, a dwarf
+ error is triggered.
+
+ With cc-with-dwz-m, the .debug_str section is not present in the
+ dw2-using-debug-str executable, because it's already moved to
+ .tmp/dw2-using-debug-str.dwz. Consequently, the removal has no effect, and no
+ dwarf error is triggered, which causes the FAIL.
+
+ The same problem arises with target board cc-with-gnu-debuglink.
+
+ Fix this by detecting whether the .debug_str section is missing, and skipping
+ the remainder of the test-case.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ * gdb.dwarf2/dw2-using-debug-str.exp: Handle missing .debug_str
+ section in dw2-using-debug-str.
+
+2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/dw2-using-debug-str.exp with cc-with-gdb-index
+ When running with target board cc-with-gdb-index, we run into:
+ ...
+ (gdb) file dw2-using-debug-str-no-debug-str^M
+ Reading symbols from dw2-using-debug-str-no-debug-str...^M
+ Dwarf Error: DW_FORM_strp used without required section^M
+ (gdb) FAIL: gdb.dwarf2/dw2-using-debug-str.exp: file dw2-using-debug-str
+ ...
+
+ The test expects the dwarf error, but has no matching pattern for the entire
+ output.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ * gdb.dwarf2/dw2-using-debug-str.exp: Update regexp to match
+ cc-with-gdb-index output.
+
+2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/per-bfd-sharing.exp with cc-with-gdb-index
+ When running with target board cc-with-gdb-index, we run into:
+ ...
+ rm: cannot remove '/tmp/tmp.JmYTeiuFjj/*.gdb-index': \
+ No such file or directory^M
+ FAIL: gdb.dwarf2/per-bfd-sharing.exp: \
+ couldn't remove files in temporary cache dir
+ ...
+
+ Fix this, as in gdb.base/index-cache.exp, by only FAILing when
+ $expecting_index_cache_use.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ * gdb.dwarf2/per-bfd-sharing.exp: Only expect index-cache files
+ when $expecting_index_cache_use.
+
+2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/gdb-index-nodebug.exp with cc-with-gdb-index
+ When running with target board cc-with-gdb-index, we run into:
+ ...
+ (gdb) save gdb-index .^M
+ Error while writing index for `gdb-index-nodebug': \
+ Cannot use an index to create the index^M
+ (gdb) FAIL: gdb.dwarf2/gdb-index-nodebug.exp: try to save gdb index
+ ...
+
+ Fix this by detecting an already present index, and marking the test
+ unsupported.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ * gdb.dwarf2/gdb-index-nodebug.exp: Mark unsupported when index
+ already present.
+
+2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.dwarf2/fission-relative-dwo.exp with cc-with-gdb-index
+ When running with target board cc-with-gdb-index, we run into:
+ ...
+ gdb compile failed, warning: Could not find DWO CU \
+ fission-relative-dwo.dwo(0x1234) referenced by CU at offset 0xc7 \
+ [in module outputs/gdb.dwarf2/fission-relative-dwo/.tmp/fission-relative-dwo]
+ UNTESTED: gdb.dwarf2/fission-relative-dwo.exp: fission-relative-dwo.exp
+ ERROR: failed to compile fission-relative-dwo
+ ...
+
+ The problem is that:
+ - the .dwo file is found relative to the executable, and
+ - cc-with-tweaks.sh moves the executable to a temp dir, but not
+ the .dwo file.
+
+ Fix this by copying the .dwo file alongside the executable in the temp dir.
+
+ Verified changes using shellcheck.
+
+ Tested on x86_64-linux.
+
+ gdb/ChangeLog:
+
+ 2021-08-02 Tom de Vries <tdevries@suse.de>
+
+ * contrib/cc-with-tweaks.sh: Copy .dwo files alongside executable.
+
+2021-08-02 Shahab Vahedi <shahab@synopsys.com>
+
+ gdb: Make the builtin "boolean" type an unsigned type
+ When printing the fields of a register that is of a custom struct type,
+ the "unpack_bits_as_long ()" function is used:
+
+ do_val_print (...)
+ cp_print_value_fields (...)
+ value_field_bitfield (...)
+ unpack_value_bitfield (...)
+ unpack_bits_as_long (...)
+
+ This function may sign-extend the extracted field while returning it:
+
+ val >>= lsbcount;
+
+ if (...)
+ {
+ valmask = (((ULONGEST) 1) << bitsize) - 1;
+ val &= valmask;
+ if (!field_type->is_unsigned ())
+ if (val & (valmask ^ (valmask >> 1)))
+ val |= ~valmask;
+ }
+
+ return val;
+
+ lsbcount: Number of lower bits to get rid of.
+ bitsize: The bit length of the field to be extracted.
+ val: The register value.
+ field_type: The type of field that is being handled.
+
+ While the logic here is correct, there is a problem when it is
+ handling "field_type"s of "boolean". Those types are NOT marked
+ as "unsigned" and therefore they end up being sign extended.
+ Although this is not a problem for "false" (0), it definitely
+ causes trouble for "true".
+
+ This patch constructs the builtin boolean type as such that it is
+ marked as an "unsigned" entity.
+
+ The issue tackled here was first encountered for arc-elf32 target
+ running on an x86_64 machine. The unit-test introduced in this change
+ has passed for all the targets (--enable-targets=all) running on the
+ same x86_64 host.
+
+ Fixes: https://sourceware.org/PR28104
+
+2021-08-02 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-08-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/maint.exp with cc-with-gdb-index
+ With target board cc-with-gdb-index we run into:
+ ...
+ FAIL: gdb.base/maint.exp: maint print statistics
+ ...
+
+ The output that is checked is:
+ ...
+ Statistics for 'maint':^M
+ Number of "minimal" symbols read: 53^M
+ Number of "full" symbols read: 40^M
+ Number of "types" defined: 60^M
+ Number of symbol tables: 7^M
+ Number of symbol tables with line tables: 2^M
+ Number of symbol tables with blockvectors: 2^M
+ Number of read CUs: 2^M
+ Number of unread CUs: 5^M
+ Total memory used for objfile obstack: 20320^M
+ Total memory used for BFD obstack: 4064^M
+ Total memory used for string cache: 4064^M
+ ...
+ and the regexp doesn't match because it expects the "Number of read/unread
+ CUs" lines in a different place.
+
+ Fix this by updating the regexp.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-01 Tom de Vries <tdevries@suse.de>
+
+ * gdb.base/maint.exp: Update "maint print statistics" to match
+ output with target board cc-with-gdb-index.
+
+2021-08-01 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/index-cache.exp with cc-with-gdb-index
+ With target board cc-with-gdb-index we run into:
+ ...
+ FAIL: gdb.base/index-cache.exp: couldn't remove files in temporary cache dir
+ ...
+
+ The problem is that there are no files to remove, because the index cache
+ isn't used, as indicated by $expecting_index_cache_use.
+
+ Fix this by only FAILing when $expecting_index_cache_use.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-08-01 Tom de Vries <tdevries@suse.de>
+
+ * gdb.base/index-cache.exp:
+
+2021-08-01 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-31 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-30 Tom Tromey <tom@tromey.com>
+
+ Use iterator_range in more places
+ This changes a couple of spots to replace custom iterator range
+ classes with a specialization of iterator_range.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-07-30 Tom Tromey <tom@tromey.com>
+
+ Replace exception_print_same with operator!=
+ I noticed that exception_print_same is only used in a single spot, and
+ it seemed to be better as an operator!= method attached to
+ gdb_exception.
+
+ Regression tested on x86-64 Fedora 34.
+
+2021-07-30 Tom de Vries <tdevries@suse.de>
+
+ [gdb/build] Disable attribute nonnull
+ With trunk gcc (12.0) we're running into a -Werror=nonnull-compare build
+ breaker in gdb, which caused a broader review of the usage of the nonnull
+ attribute.
+
+ The current conclusion is that it's best to disable this. This is explained
+ at length in the gdbsupport/common-defs.h comment.
+
+ Tested by building with trunk gcc.
+
+ gdb/ChangeLog:
+
+ 2021-07-29 Tom de Vries <tdevries@suse.de>
+
+ * gdbsupport/common-defs.h (ATTRIBUTE_NONNULL): Disable.
+
+2021-07-30 Clément Chigot <clement.chigot@atos.net>
+
+ gas: ensure XCOFF DWARF subsection are initialized to 0
+ debug_abbrev doesn't use end_exp to compute its size. However, it must
+ be NULL. Otherwise, ppc_xcoff_end might try to access uninitialized
+ memory.
+
+ gas/
+ * config/tc-ppc.c (ppc_dwsect): Use XCNEW instead of XNEW when creating
+ a new subsection.
+
+2021-07-30 Clément Chigot <clement.chigot@atos.net>
+
+ bfd: ensure that symbols targeted by DWARF relocations are kept in XCOFF
+ This patch improves XCOFF garbage collector pass, in order to keep
+ symbols being referenced only by special sections like DWARF sections.
+
+ bfd/
+ * xcofflink.c (xcoff_mark): Replace SEC_MARK by gc_mark.
+ Look through relocations even if xcoff_section_data is NULL.
+ (xcoff_sweep): Check if any sections of a file is kept before
+ adding its special sections.
+ Call xcoff_mark for special sessions being kept instead of just
+ marking them.
+ (SEC_MARK): Remove
+ (xcoff_mark_symbol): Replace SEC_MARK by gc_mark.
+ (xcoff_keep_symbol_p): Likewise.
+ (bfd_xcoff_size_dynamic_sections): Likewise.
+ (xcoff_find_tc0): Likewise.
+
+2021-07-30 Clément Chigot <clement.chigot@atos.net>
+
+ bfd: avoid a crash when debug_section isn't created in XCOFF
+ bfd/
+ * xcofflink.c (bfd_xcoff_size_dynamic_sections):
+ Add check to know if debug_section is initialized.
+
+2021-07-30 Alan Modra <amodra@gmail.com>
+
+ readelf: catch archive_file_size of -1
+ Fuzzers might put -1 in arhdr.ar_size. If the size is rounded up to
+ and even number of bytes we get zero.
+
+ * readelf.c (process_archive): Don't round up archive_file_size.
+ Do round up next_arhdr_offset calculation.
+
+2021-07-30 Alan Modra <amodra@gmail.com>
+
+ reloc_upper_bound size calculations
+ Section reloc_count is an unsigned int. Adding one for a NULL
+ terminator to an array of arelent pointers can wrap the count to
+ zero. Avoid that by doing the addition as longs.
+
+ * coffgen.c (coff_get_reloc_upper_bound): Don't overflow unsigned
+ int expression.
+ * elf.c (_bfd_elf_get_reloc_upper_bound): Likewise.
+ * elf64-sparc.c (elf64_sparc_get_reloc_upper_bound): Likewise.
+ * mach-o.c (bfd_mach_o_get_reloc_upper_bound): Likewise.
+ * vms-alpha.c (alpha_vms_get_reloc_upper_bound): Likewise.
+
+2021-07-30 Alan Modra <amodra@gmail.com>
+
+ Sanity check _bfd_coff_read_string_table
+ * coffgen.c (_bfd_coff_read_string_table): Catch overflows
+ when calculating string table file location.
+
+2021-07-30 Alan Modra <amodra@gmail.com>
+
+ IMAGE_SCN_LNK_NRELOC_OVFL
+ From microsoft docs: It is an error if IMAGE_SCN_LNK_NRELOC_OVFL is
+ set and there are fewer than 0xffff relocations in the section.
+
+ * coffcode.h (coff_set_alignment_hook): Sanity check overflow
+ reloc count.
+
+2021-07-30 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fix nr_bits gdb_assert in append_flags_type_field
+ The assertion
+
+ gdb_assert (nr_bits >= 1 && nr_bits <= type_bitsize);
+
+ is not correct. Well, it's correct in that we do want the number of
+ bits to be in the range [1, type_bitsize]. But we don't check anywhere
+ that the end of the specified flag is within the containing type.
+
+ The following code should generate a failed assertion, as the flag goes
+ past the 32 bits of the underlying type, but it's currently not caught:
+
+ static void
+ test_print_flag (gdbarch *arch)
+ {
+ type *flags_type = arch_flags_type (arch, "test_type", 32);
+ type *field_type = builtin_type (arch)->builtin_uint32;
+ append_flags_type_field (flags_type, 31, 2, field_type, "invalid");
+ }
+
+ (You can test this by registering it as a selftest using
+ selftests::register_test_foreach_arc and running.)
+
+ Change the assertion to verify that the end bit is within the range of
+ the underlying type. This implicitly verifies that nr_bits is not
+ too big as well, so we don't need a separate assertion for that.
+
+ Change-Id: I9be79e5fd7a5917bf25b03b598727e6274c892e8
+ Co-Authored-By: Tony Tye <Tony.Tye@amd.com>
+
+2021-07-30 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-29 John Baldwin <jhb@FreeBSD.org>
+
+ obsd-nat: Report both thread and PID in ::pid_to_str.
+ This improves the output of info threads when debugging multiple
+ inferiors (e.g. after a fork with detach_on_fork disabled).
+
+2021-07-29 John Baldwin <jhb@FreeBSD.org>
+
+ obsd-nat: Various fixes for fork following.
+ - Don't use #ifdef's on ptrace ops. obsd-nat.h didn't include
+ <sys/ptrace.h>, so the virtual methods weren't always overridden
+ causing the fork following to not work. In addition, the thread and
+ fork code is intertwined in ::wait and and the lack of #ifdef's
+ there already assumed both were present. Finally, both of these
+ ptrace ops have been present in OpenBSD for at least 10 years.
+
+ - Move duplicated code to enable PTRACE_FORK event reporting to a
+ single function and invoke it on new child processes reported via
+ PTRACE_FORK.
+
+ - Don't return early from PTRACE_FORK handling, but instead reset
+ wptid to the correct ptid if the child reports its event before the
+ parent. This allows the ptid fixup code to add thread IDs if the
+ first event for a process is a PTRACE_FORK event. This also
+ properly returns ptid's with thread IDs when reporting PTRACE_FORK
+ events.
+
+ - Handle detach_fork by skipping the PT_DETACH.
+
+2021-07-29 John Baldwin <jhb@FreeBSD.org>
+
+ obsd-nat: Various fixes to obsd_nat_target::wait.
+ - Call inf_ptrace_target::wait instead of duplicating the code.
+ Replace a check for WIFSTOPPED on the returned status from waitpid
+ by checking for TARGET_WAITKIND_STOPPED in the parsed status as is
+ done in fbsd_nat_target::wait.
+
+ - Don't use inferior_ptid when deciding if a new process is a child vs
+ parent of the fork. Instead, use find_inferior_pid and assume that
+ if an inferior already exists, the pid in question is the parent;
+ otherwise, the pid is the child.
+
+ - Don't use inferior_ptid when deciding if the ptid of the process
+ needs to be updated with an LWP ID, or if this is a new thread.
+ Instead, use the approach from fbsd-nat which is to check if a ptid
+ without an LWP exists and if so update the ptid of that thread
+ instead of adding a new thread.
+
+2021-07-29 John Baldwin <jhb@FreeBSD.org>
+
+ x86-bsd-nat: Only define gdb_ptrace when using debug registers.
+ This fixes an unused function warning on OpenBSD which does not
+ support PT_GETDBREGS.
+
+2021-07-29 John Baldwin <jhb@FreeBSD.org>
+
+ Don't compile x86 debug register support on OpenBSD.
+ Simon Marchi tried gdb on OpenBSD, and it immediately segfaults when
+ running a program. Simon tracked down the problem to x86_dr_low.get_status
+ being nullptr at this point:
+
+ (lldb) print x86_dr_low.get_status
+ (unsigned long (*)()) $0 = 0x0000000000000000
+ (lldb) bt
+ * thread #1, stop reason = step over
+ * frame #0: 0x0000033b64b764aa gdb`x86_dr_stopped_data_address(state=0x0000033d7162a310, addr_p=0x00007f7ffffc5688) at x86-dregs.c:645:12
+ frame #1: 0x0000033b64b766de gdb`x86_dr_stopped_by_watchpoint(state=0x0000033d7162a310) at x86-dregs.c:687:10
+ frame #2: 0x0000033b64ea5f72 gdb`x86_stopped_by_watchpoint() at x86-nat.c:206:10
+ frame #3: 0x0000033b64637fbb gdb`x86_nat_target<obsd_nat_target>::stopped_by_watchpoint(this=0x0000033b65252820) at x86-nat.h:100:12
+ frame #4: 0x0000033b64d3ff11 gdb`target_stopped_by_watchpoint() at target.c:468:46
+ frame #5: 0x0000033b6469b001 gdb`watchpoints_triggered(ws=0x00007f7ffffc61c8) at breakpoint.c:4790:32
+ frame #6: 0x0000033b64a8bb8b gdb`handle_signal_stop(ecs=0x00007f7ffffc61a0) at infrun.c:6072:29
+ frame #7: 0x0000033b64a7e3a7 gdb`handle_inferior_event(ecs=0x00007f7ffffc61a0) at infrun.c:5694:7
+ frame #8: 0x0000033b64a7c1a0 gdb`fetch_inferior_event() at infrun.c:4090:5
+ frame #9: 0x0000033b64a51921 gdb`inferior_event_handler(event_type=INF_REG_EVENT) at inf-loop.c:41:7
+ frame #10: 0x0000033b64a827c9 gdb`infrun_async_inferior_event_handler(data=0x0000000000000000) at infrun.c:9384:3
+ frame #11: 0x0000033b6465bd4f gdb`check_async_event_handlers() at async-event.c:335:4
+ frame #12: 0x0000033b65070917 gdb`gdb_do_one_event() at event-loop.cc:216:10
+ frame #13: 0x0000033b64af0db1 gdb`start_event_loop() at main.c:421:13
+ frame #14: 0x0000033b64aefe9a gdb`captured_command_loop() at main.c:481:3
+ frame #15: 0x0000033b64aed5c2 gdb`captured_main(data=0x00007f7ffffc6470) at main.c:1353:4
+ frame #16: 0x0000033b64aed4f2 gdb`gdb_main(args=0x00007f7ffffc6470) at main.c:1368:7
+ frame #17: 0x0000033b6459d787 gdb`main(argc=5, argv=0x00007f7ffffc6518) at gdb.c:32:10
+ frame #18: 0x0000033b6459d521 gdb`___start + 321
+
+ On BSDs, get_status is set in _initialize_x86_bsd_nat, but only if
+ HAVE_PT_GETDBREGS is defined. PT_GETDBREGS doesn't exist on OpenBSD, so
+ get_status (and the other fields of x86_dr_low) are left as nullptr.
+
+ OpenBSD doesn't support getting or setting the x86 debug registers, so
+ fix by omitting debug register support entirely on OpenBSD:
+
+ - Change x86bsd_nat_target to only inherit from x86_nat_target if
+ PT_GETDBREGS is supported.
+
+ - Don't include x86-nat.o and nat/x86-dregs.o for OpenBSD/amd64. They
+ were already omitted for OpenBSD/i386.
+
+2021-07-29 Carl Love <cel@us.ibm.com>
+
+ Fix for gdb.tui/tui-layout-asm.exp
+ The width of the window is too narrow to display the entire assembly line.
+ The width of the columns in the window changes as the test walks thru the
+ terminal window output. The column change results in the first and second
+ reads of the same line to differ thus causing the test to fail. Increasing
+ the width of the window keeps the column width consistent thru the test.
+
+ If the test fails, the added check prints an message to the log file if
+ the failure may be due to the window being too narrow.
+
+ gdb/testsuite/ChangeLog
+
+ * gdb.tui/tui-layout-asm.exp: Replace window width of 80 with the
+ tui_asm_window_width variable for the width. Add if
+ count_whitespace check.
+ (count_whitespace): New proc
+
+2021-07-29 George Barrett <bob@bob131.so>
+
+ guile/scm-math: indentation fixes
+ Changes the indenting of a few expressions in
+ vlscm_convert_typed_number to be better in line with the prevailing
+ code style.
+
+ gdb/ChangeLog:
+
+ 2021-07-30 George Barrett <bob@bob131.so>
+
+ * guile/scm-math.c (vlscm_convert_typed_number): Fix the
+ indentation of calls to gdbscm_make_out_of_range_error.
+
+ Change-Id: I7463998b77c17a00e88058e89b52fa029ee40e03
+
+2021-07-29 George Barrett <bob@bob131.so>
+
+ guile: fix make-value with pointer type
+ Calling the `make-value' procedure with an integer value and a pointer
+ type for the #:type argument triggers a failed assertion in
+ `get_unsigned_type_max', as that function doesn't consider pointers to
+ be an unsigned type. This commit fixes the issue by adding a separate
+ code path for pointers.
+
+ As previously suggested, range checking is done using a new helper
+ function in gdbtypes.
+
+ gdb/ChangeLog:
+
+ 2021-07-30 George Barrett <bob@bob131.so>
+
+ * gdbtypes.h (get_pointer_type_max): Add declaration.
+ * gdbtypes.c (get_pointer_type_max): Add definition for new
+ helper function.
+ * guile/scm-math.c (vlscm_convert_typed_number): Add code path
+ for handling conversions to pointer types without failing an
+ assert.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-30 George Barrett <bob@bob131.so>
+
+ * gdb.guile/scm-math.exp (test_value_numeric_ops): Add test
+ for creating pointers with make-value.
+ (test_make_pointer_value, test_pointer_numeric_range): Add
+ test procedures containing checks for integer-to-pointer
+ validation.
+
+ Change-Id: I9994dd1c848840a3d995f745e6d72867732049f0
+
+2021-07-29 George Barrett <bob@bob131.so>
+
+ gdbtypes: return value from get_unsigned_type_max
+ Changes the signature of get_unsigned_type_max to return the computed
+ value rather than returning void and writing the value into a pointer
+ passed by the caller.
+
+ gdb/ChangeLog:
+
+ 2021-07-30 George Barrett <bob@bob131.so>
+
+ * gdbtypes.h (get_unsigned_type_max): Change signature to
+ return the result instead of accepting a pointer argument in
+ which to store the result.
+ * gdbtypes.c (get_unsigned_type_max): Likewise.
+ * guile/scm-math.c (vlscm_convert_typed_number): Update caller
+ of get_unsigned_type_max.
+ (vlscm_integer_fits_p): Likewise.
+
+ Change-Id: Ibb1bf0c0fa181fac7853147dfde082a7d1ae2323
+
+2021-07-29 Clément Chigot <clement.chigot@atos.net>
+
+ gas: improve C_BSTAT and C_STSYM symbols handling on XCOFF
+ A C_BSTAT debug symbol specifies the beginning of a static block.
+ Its n_value is the index of the csect containing static symbols.
+ A C_STSYM debug symbol represents the stabstring of a statically
+ allocated symbol. Its n_value is the offset in the csect pointed
+ by the containing C_BSTAT.
+
+ These two special n_value were not correctly handled both when
+ generating object files with gas or when reading them with objdump.
+ This patch tries to improve that and, above all, to allow gas-generated
+ object files with such symbols to be accepted by AIX ld.
+
+ bfd/
+ * coff-bfd.c (bfd_coff_get_syment): Adjust n_value of symbols
+ having fix_value = 1 in order to be an index and not a memory
+ offset.
+ * coffgen.c (coff_get_symbol_info): Likewize.
+ (coff_print_symbol): Likewize.
+
+ gas/
+ * config/tc-ppc.c (ppc_frob_label): Don't change within if
+ already set.
+ (ppc_stabx): Remove workaround changing exp.X_add_symbol's
+ within.
+ * config/tc-ppc.h (struct ppc_tc_sy): Update comments.
+ * symbols.c (resolve_symbol_value): Remove symbol update
+ when final_val is 0 and it's an AIX debug symbol.
+ * testsuite/gas/ppc/aix.exp: Add new tests.
+ * testsuite/gas/ppc/xcoff-stsym-32.d: New test.
+ * testsuite/gas/ppc/xcoff-stsym-64.d: New test.
+ * testsuite/gas/ppc/xcoff-stsym.s: New test.
+
+2021-07-29 George Barrett <bob@bob131.so>
+
+ Guile: temporary breakpoints
+ Adds API to the Guile bindings for creating temporary breakpoints and
+ querying whether an existing breakpoint object is temporary. This is
+ effectively a transliteration of the Python implementation.
+
+ It's worth noting that the added `is_temporary' flag is ignored in the
+ watchpoint registration path. This replicates the behaviour of the
+ Python implementation, but might be a bit surprising for users.
+
+ gdb/ChangeLog:
+
+ 2021-06-09 George Barrett <bob@bob131.so>
+
+ * guile/scm-breakpoint.c (gdbscm_breakpoint_object::spec): Add
+ is_temporary field.
+ (temporary_keyword): Add keyword object for make-breakpoint
+ argument parsing.
+ (gdbscm_make_breakpoint): Accept #:temporary keyword argument
+ and store the value in the allocated object's
+ spec.is_temporary.
+ (gdbscm_register_breakpoint_x): Pass the breakpoint's
+ spec.is_temporary value to create_breakpoint.
+ (gdbscm_breakpoint_temporary): Add breakpoint-temporary?
+ procedure implementation.
+ (breakpoint_functions::make-breakpoint): Update documentation
+ string and fix a typo.
+ (breakpoint_functions::breakpoint-temporary?): Add
+ breakpoint-temporary? procedure.
+ (gdbscm_initialize_breakpoints): Initialise temporary_keyword
+ variable.
+ NEWS (Guile API): Mention new temporary breakpoints API.
+
+ gdb/doc/ChangeLog:
+
+ 2021-06-09 George Barrett <bob@bob131.so>
+
+ * guile.texi (Breakpoints In Guile): Update make-breakpoint
+ documentation to reflect new #:temporary argument.
+ Add documentation for new breakpoint-temporary? procedure.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-06-09 George Barrett <bob@bob131.so>
+
+ * gdb.guile/scm-breakpoint.exp: Add additional tests for
+ temporary breakpoints.
+
+ Change-Id: I2de332ee7c256f5591d7141ab3ad50d31b871d17
+
+2021-07-29 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-28 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: clean up some things in features/Makefile
+ Clean up some things I noticed:
+
+ - we generate a regformats/microblaze-with-stack-protect.dat file. I
+ don't think this is used. It could be used by a GDBserver built for
+ Microblaze, but GDBserver isn't ported to Microblaze. So I don't
+ think that's used at all. Remove the entry in features/Makefile and
+ the file itself.
+
+ - There are a bunch of *-expedite values in features/Makefile for
+ architectures for which we don't generate dat files. AFAIK, these
+ *-expedite values are only used when generating dat files. Remove
+ those that are not necessary.
+
+ - 32bit-segments.xml is not listed in the Makfile, but it's used. This
+ means that it wouldn't get re-generated if we were to change how C
+ files are generated from the XML. It looks like it was simply
+ forgotten, add it.
+
+ Change-Id: I112d00db317102270e1df924473c37122ccb6c3a
+
+2021-07-28 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Simplify check for distinct TMM register operands
+ If any pair of operands in AMX instructions with 3 TMM register operands
+ are the same, the instruction will UD. Don't call register_number to
+ check for distinct TMM register operands since all TMM register operands
+ have the same size.
+
+ * config/tc-i386.c (check_VecOperands): Remove register_number
+ call when checking for distinct TMM register operands.
+
+2021-07-28 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Run tmpdir/pr28138 only for native build
+ * PR ld/28138
+ * testsuite/ld-plugin/lto.exp: Run tmpdir/pr28138 only for
+ native build.
+
+2021-07-28 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Close the file descriptor if there is no archive fd
+ Close the file descriptor if there is no archive plugin file descriptor
+ to avoid running out of file descriptors on thin archives with many
+ archive members.
+
+ bfd/
+
+ PR ld/28138
+ * plugin.c (bfd_plugin_close_file_descriptor): Close the file
+ descriptor there is no archive plugin file descriptor.
+
+ ld/
+
+ PR ld/28138
+ * testsuite/ld-plugin/lto.exp: Run ld/28138 tests.
+ * testsuite/ld-plugin/pr28138.c: New file.
+ * testsuite/ld-plugin/pr28138-1.c: Likewise.
+ * testsuite/ld-plugin/pr28138-2.c: Likewise.
+ * testsuite/ld-plugin/pr28138-3.c: Likewise.
+ * testsuite/ld-plugin/pr28138-4.c: Likewise.
+ * testsuite/ld-plugin/pr28138-5.c: Likewise.
+ * testsuite/ld-plugin/pr28138-6.c: Likewise.
+ * testsuite/ld-plugin/pr28138-7.c: Likewise.
+
+2021-07-28 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Report error reason when a library cannot be found
+ With "ulimit -n 20", report:
+
+ ld: cannot find -lgcc: Too many open files
+
+ instead of
+
+ ld: cannot find -lgcc
+
+ * ldfile.c (ldfile_open_file): Rport error reason when a library
+ cannot be found.
+
+2021-07-28 Sergei Trofimovich <siarheit@google.com>
+
+ texi2pod.pl: add no-op --no-split option support [PR28144]
+ Change 2faf902da ("generate single html manual page by default")
+ added use of --no-split option to makeinfo. binutils reuses
+ makeinfo options for texi2pod.pl wrapper. Unsupported option
+ led to silent manpage truncation.
+
+ The change adds no-op option support.
+
+ etc/
+
+ * texi2pod.pl: Handle no-op --no-split option.
+
+2021-07-28 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: fix missing space in some info variables output
+ Fixes PR gdb/28121. When a user declares an array like this:
+
+ int * const foo_1[3];
+
+ And in GDB the user does this:
+
+ (gdb) info variables foo
+ All variables matching regular expression "foo":
+
+ File test.c:
+ 1: int * constfoo_1[3];
+
+ Notice the missing space between 'const' and 'foo_1'. This is fixed
+ in c_type_print_varspec_prefix (c-typeprint.c) by passing through the
+ flag that indicates if a trailing space is needed, rather than hard
+ coding the flag to false as we currently do.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28121
+
+2021-07-28 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix unhandled dwarf expression opcode with gcc-11 -gdwarf-5
+ [ I've confused things by forgetting to add -gdwarf-4 in $subject of
+ commit 0057a7ee0d9 "[gdb/testsuite] Add KFAILs for gdb.ada FAILs with
+ gcc-11". So I'm adding here -gdwarf-5 in $subject, even though -gdwarf-5 is
+ the default for gcc-11. I keep getting confused because of working with a
+ system gcc-11 compiler that was patched to switch the default back to
+ -gdwarf-4. ]
+
+ When running test-case gdb.ada/arrayptr.exp with gcc-11 (and default
+ -gdwarf-5), I run into:
+ ...
+ (gdb) print pa_ptr.all^M
+ Unhandled dwarf expression opcode 0xff^M
+ (gdb) FAIL: gdb.ada/arrayptr.exp: scenario=all: print pa_ptr.all
+ ...
+
+ What happens is that pa_ptr:
+ ...
+ <2><1523>: Abbrev Number: 3 (DW_TAG_variable)
+ <1524> DW_AT_name : pa_ptr
+ <1529> DW_AT_type : <0x14fa>
+ ...
+ has type:
+ ...
+ <2><14fa>: Abbrev Number: 2 (DW_TAG_typedef)
+ <14fb> DW_AT_name : foo__packed_array_ptr
+ <1500> DW_AT_type : <0x1504>
+ <2><1504>: Abbrev Number: 4 (DW_TAG_pointer_type)
+ <1505> DW_AT_byte_size : 8
+ <1505> DW_AT_type : <0x1509>
+ ...
+ which is a pointer to a subrange:
+ ...
+ <2><1509>: Abbrev Number: 12 (DW_TAG_subrange_type)
+ <150a> DW_AT_lower_bound : 0
+ <150b> DW_AT_upper_bound : 0x3fffffffffffffffff
+ <151b> DW_AT_name : foo__packed_array
+ <151f> DW_AT_type : <0x15cc>
+ <1523> DW_AT_artificial : 1
+ <1><15cc>: Abbrev Number: 5 (DW_TAG_base_type)
+ <15cd> DW_AT_byte_size : 16
+ <15ce> DW_AT_encoding : 7 (unsigned)
+ <15cf> DW_AT_name : long_long_long_unsigned
+ <15d3> DW_AT_artificial : 1
+ ...
+ with upper bound of form DW_FORM_data16.
+
+ In gdb/dwarf/attribute.h we have:
+ ...
+ /* Return non-zero if ATTR's value falls in the 'constant' class, or
+ zero otherwise. When this function returns true, you can apply
+ the constant_value method to it.
+ ...
+ DW_FORM_data16 is not considered as constant_value cannot handle
+ that. */
+ bool form_is_constant () const;
+ ...
+ so instead we have attribute::form_is_block (DW_FORM_data16) == true.
+
+ Then in attr_to_dynamic_prop for the upper bound, we get a PROC_LOCEXPR
+ instead of a PROP_CONST and end up trying to evaluate the constant
+ 0x3fffffffffffffffff as if it were a locexpr, which causes the
+ "Unhandled dwarf expression opcode 0xff".
+
+ In contrast, with -gdwarf-4 we have:
+ ...
+ <164c> DW_AT_upper_bound : 18 byte block: \
+ 9e 10 ff ff ff ff ff ff ff ff 3f 0 0 0 0 0 0 0 \
+ (DW_OP_implicit_value 16 byte block: \
+ ff ff ff ff ff ff ff ff 3f 0 0 0 0 0 0 0 )
+ ...
+
+ Fix the dwarf error by translating the DW_FORM_data16 constant into a
+ PROC_LOCEXPR, effectively by prepending 0x9e 0x10, such that we have same
+ result as with -gdwarf-4:
+ ...
+ (gdb) print pa_ptr.all^M
+ That operation is not available on integers of more than 8 bytes.^M
+ (gdb) KFAIL: gdb.ada/arrayptr.exp: scenario=all: print pa_ptr.all \
+ (PRMS: gdb/20991)
+ ...
+
+ Tested on x86_64-linux, with gcc-11 and target board
+ unix/gdb:debug_flags=-gdwarf-5.
+
+ gdb/ChangeLog:
+
+ 2021-07-25 Tom de Vries <tdevries@suse.de>
+
+ * dwarf2/read.c (attr_to_dynamic_prop): Handle DW_FORM_data16.
+
+2021-07-28 will schmidt <will_schmidt@vnet.ibm.com>
+
+ Externalize the _bfd_set_gp_value function
+ This change adds an external-visible wrapper for the _bfd_set_gp_value
+ function. This is a prerequisite for some gdb patches that better
+ handle powerpc64le relocations against ".TOC.".
+
+ * bfd.c (bfd_set_gp_value): New externally visible wrapper
+ for _bfd_set_gp_value.
+ * bfd-in2.h: Regenerate.
+
+2021-07-28 Alan Modra <amodra@gmail.com>
+
+ PowerPC: ignore sticky options for .machine
+ PowerPC gas and objdump for a long time have allowed certain -m/-M
+ options that extend a base cpu with extra functional units to be
+ specified before the base cpu. For example, "-maltivec -mpower4" is
+ the same as "-mpower4 -maltivec". See
+ https://sourceware.org/pipermail/binutils/2008-January/054935.html
+
+ It doesn't make as much sense that .machine keep any of these
+ "sticky" flags when handling a new base cpu. See gcc PR101393. I
+ think that instead .machine ought to override the command line.
+ That's what this patch does. It is still possible to extend cpu
+ functionality with .machine. For example the following can be
+ assembled when selecting a basic -mppc on the command line:
+ .machine power5
+ .machine altivec
+ frin 1,2
+ lvsr 3,4,5
+ Here, ".machine altivec" extends the ".machine power5" so that both
+ the power5 "frin" instruction and the altivec "lvsr" instruction are
+ enabled. Swapping the two ".machine" directives would result in
+ failure to assemble "lvsr".
+
+ This change will expose some assembly errors, such as the one in
+ glibc/sysdeps/powerpc/powerpc64/tst-ucontext-ppc64-vscr.c, a file
+ compiled with -maltivec but containing
+ asm volatile (".machine push;\n"
+ ".machine \"power5\";\n"
+ "vspltisb %0,0;\n"
+ "vspltisb %1,-1;\n"
+ "vpkuwus %0,%0,%1;\n"
+ "mfvscr %0;\n"
+ "stvx %0,0,%2;\n"
+ ".machine pop;"
+ : "=v" (v0), "=v" (v1)
+ : "r" (vscr_ptr)
+ : "memory");
+ It's just wrong to choose power5 for a bunch of altivec instructions
+ and in fact all of those .machine directives are unnecessary.
+
+ * config/tc-ppc.c (ppc_machine): Don't use command line
+ sticky options.
+
+2021-07-28 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add xfail for PR gcc/101643
+ With gcc 8.5.0 I run into:
+ ...
+ (gdb) print bad^M
+ $2 = (0 => 0 <repeats 25 times>)^M
+ (gdb) FAIL: gdb.ada/big_packed_array.exp: scenario=minimal: print bad
+ ...
+ while with gcc 9.3.1 we have instead:
+ ...
+ (gdb) print bad^M
+ $2 = (false <repeats 196 times>)^M
+ (gdb) PASS: gdb.ada/big_packed_array.exp: scenario=minimal: print bad
+ ...
+
+ This is caused by gcc PR, which I've filed at
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101643 "[debug, ada] packed array
+ not described as packed".
+
+ Fix by marking this as XFAIL.
+
+ Tested on x86_64-linux.
+
+ gdb/ChangeLog:
+
+ 2021-07-27 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/26904
+ * gdb/testsuite/gdb.ada/big_packed_array.exp: Add xfail.
+
+2021-07-27 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add xfail for PR gcc/101633
+ With gcc 7.5.0, I run into:
+ ...
+ (gdb) print objects^M
+ $1 = ((tag => object, values => ()), (tag => unused))^M
+ (gdb) FAIL: gdb.ada/array_of_variant.exp: scenario=minimal: print entire array
+ ...
+ while with gcc 8.5.0 we have:
+ ...
+ (gdb) print objects^M
+ $1 = ((tag => object, values => (2, 2, 2, 2, 2)), (tag => unused))^M
+ (gdb) PASS: gdb.ada/array_of_variant.exp: scenario=minimal: print entire array
+ ...
+
+ This is due to a gcc PR, which I've filed at
+ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101633 "Bug 101633 - [debug]
+ DW_TAG_subrange_type missing DW_AT_upper_bound".
+
+ Fix by marking this and related FAILs as XFAIL.
+
+ Tested on x86_64-linux.
+
+ gdb/ChangeLog:
+
+ 2021-07-27 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/26903
+ * gdb/testsuite/gdb.ada/array_of_variant.exp: Add xfails.
+
+2021-07-27 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: remove VALUE_FRAME_ID and fix another frame debug issue
+ This commit was originally part of this patch series:
+
+ (v1): https://sourceware.org/pipermail/gdb-patches/2021-May/179357.html
+ (v2): https://sourceware.org/pipermail/gdb-patches/2021-June/180208.html
+ (v3): https://sourceware.org/pipermail/gdb-patches/2021-July/181028.html
+
+ However, that series is being held up in review, so I wanted to break
+ out some of the non-related fixes in order to get these merged.
+
+ This commit addresses two semi-related issues, both of which are
+ problems exposed by using 'set debug frame on'.
+
+ The first issue is in frame.c in get_prev_frame_always_1, and was
+ introduced by this commit:
+
+ commit a05a883fbaba69d0f80806e46a9457727fcbe74c
+ Date: Tue Jun 29 12:03:50 2021 -0400
+
+ gdb: introduce frame_debug_printf
+
+ This commit replaced fprint_frame with frame_info::to_string.
+ However, the former could handle taking a nullptr while the later, a
+ member function, obviously requires a non-nullptr in order to make the
+ function call. In one place we are not-guaranteed to have a
+ non-nullptr, and so, there is the possibility of triggering undefined
+ behaviour.
+
+ The second issue addressed in this commit has existed for a while in
+ GDB, and would cause this assertion:
+
+ gdb/frame.c:622: internal-error: frame_id get_frame_id(frame_info*): Assertion `fi->this_id.p != frame_id_status::COMPUTING' failed.
+
+ We attempt to get the frame_id for a frame while we are computing the
+ frame_id for that same frame.
+
+ What happens is that when GDB stops we create a frame_info object for
+ the sentinel frame (frame #-1) and then we attempt to unwind this
+ frame to create a frame_info object for frame #0.
+
+ In the test case used here to expose the issue we have created a
+ Python frame unwinder. In the Python unwinder we attemt to read the
+ program counter register.
+
+ Reading this register will initially create a lazy register value.
+ The frame-id stored in the lazy register value will be for the
+ sentinel frame (lazy register values hold the frame-id for the frame
+ from which the register will be unwound).
+
+ However, the Python unwinder does actually want to examine the value
+ of the program counter, and so the lazy register value is resolved
+ into a non-lazy value. This sends GDB into value_fetch_lazy_register
+ in value.c.
+
+ Now, inside this function, if 'set debug frame on' is in effect, then
+ we want to print something like:
+
+ frame=%d, regnum=%d(%s), ....
+
+ Where 'frame=%d' will be the relative frame level of the frame for
+ which the register is being fetched, so, in this case we would expect
+ to see 'frame=0', i.e. we are reading a register as it would be in
+ frame #0. But, remember, the lazy register value actually holds the
+ frame-id for frame #-1 (the sentinel frame).
+
+ So, to get the frame_info for frame #0 we used to call:
+
+ frame = frame_find_by_id (VALUE_FRAME_ID (val));
+
+ Where VALUE_FRAME_ID is:
+
+ #define VALUE_FRAME_ID(val) (get_prev_frame_id_by_id (VALUE_NEXT_FRAME_ID (val)))
+
+ That is, we start with the frame-id for the next frame as obtained by
+ VALUE_NEXT_FRAME_ID, then call get_prev_frame_id_by_id to get the
+ frame-id of the previous frame.
+
+ The get_prev_frame_id_by_id function finds the frame_info for the
+ given frame-id (in this case frame #-1), calls get_prev_frame to get
+ the previous frame, and then calls get_frame_id.
+
+ The problem here is that calling get_frame_id requires that we know
+ the frame unwinder, so then have to try each frame unwinder in turn,
+ which would include the Python unwinder.... which is where we started,
+ and thus we have a loop!
+
+ To prevent this loop GDB has an assertion in place, which is what
+ actually triggers.
+
+ Solving the assertion failure is pretty easy, if we consider the code
+ in value_fetch_lazy_register and get_prev_frame_id_by_id then what we
+ do is:
+
+ 1. Start with a frame_id taken from a value,
+ 2. Lookup the corresponding frame,
+ 3. Find the previous frame,
+ 4. Get the frame_id for that frame, and
+ 5. Lookup the corresponding frame
+ 6. Print the frame's level
+
+ Notice that steps 3 and 5 give us the exact same result, step 4 is
+ just wasted effort. We could shorten this process such that we drop
+ steps 4 and 5, thus:
+
+ 1. Start with a frame_id taken from a value,
+ 2. Lookup the corresponding frame,
+ 3. Find the previous frame,
+ 6. Print the frame's level
+
+ This will give the exact same frame as a result, and this is what I
+ have done in this patch by removing the use of VALUE_FRAME_ID from
+ value_fetch_lazy_register.
+
+ Out of curiosity I looked to see how widely VALUE_FRAME_ID was used,
+ and saw it was only used in one other place in valops.c:value_assign,
+ where, once again, we take the result of VALUE_FRAME_ID and pass it to
+ frame_find_by_id, thus introducing a redundant frame_id lookup.
+
+ I don't think the value_assign case risks triggering the assertion
+ though, as we are unlikely to call value_assign while computing the
+ frame_id for a frame, however, we could make value_assign slightly
+ more efficient, with no real additional complexity, by removing the
+ use of VALUE_FRAME_ID.
+
+ So, in this commit, I completely remove VALUE_FRAME_ID, and replace it
+ with a use of VALUE_NEXT_FRAME_ID, followed by a direct call to
+ get_prev_frame_always, this should make no difference in either case,
+ and resolves the assertion issue from value.c.
+
+ As I said, this patch was originally part of another series, the
+ original test relied on the fixes in that original series. However, I
+ was able to create an alternative test for this issue by enabling
+ frame debug within an existing test script.
+
+ This commit probably fixes bug PR gdb/27938, though the bug doesn't
+ have a reproducer attached so it is not possible to know for sure.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27938
+
+2021-07-27 Chenghua Xu <xuchenghua@loongson.cn>
+
+ Correct gs264e bfd_mach in mips_arch_choices.
+ opcodes/
+ * mips-dis.c (mips_arch_choices): Correct gs264e bfd_mach.
+
+2021-07-27 Roland McGrath <mcgrathr@google.com>
+
+ Fix ld test case that assumes --enable-textrel-check
+ ld/
+ * testsuite/ld-x86-64/x86-64.exp (Build textrel-1): Use --warn-textrel.
+
+2021-07-27 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-27 H.J. Lu <hjl.tools@gmail.com>
+
+ bfd: Set error to bfd_error_malformed_archive only if unset
+ When reading an archive member, set error to bfd_error_malformed_archive
+ on open_nested_file failure only if the error is unset.
+
+ PR ld/28138
+ * archive.c (_bfd_get_elt_at_filepos): Don't set error to
+ bfd_error_malformed_archive if it has been set.
+
+2021-07-26 Carl Love <cel@us.ibm.com>
+
+ Fix for mi-reverse.exp
+ This test fails on PPC64 because PPC64 prints the value of 3.5 with
+ more significant digits than on Intel. The patch updates the regular
+ expression to allow for more significant digits on the constant.
+
+ gdb/testsuite/ChangeLog
+
+ * gdb.mi/mi-reverse.exp: mi_execute_to exec-step reverse add check
+ for additional digits.
+
+2021-07-26 Tom Tromey <tromey@adacore.com>
+
+ Fix the Windows build
+ The gdb build was broken on Windows after the patch to change
+ get_inferior_cwd. This patch fixes the build.
+
+2021-07-26 Shahab Vahedi <shahab@synopsys.com>
+
+ gdb: Fix numerical field extraction for target description "flags"
+ The "val_print_type_code_flags ()" function is responsible for
+ extraction of fields for "flags" data type. These data types are
+ used when describing a custom register type in a target description
+ XML. The logic used for the extraction though is not sound:
+
+ unsigned field_len = TYPE_FIELD_BITSIZE (type, field);
+ ULONGEST field_val
+ = val >> (TYPE_FIELD_BITPOS (type, field) - field_len + 1);
+
+ TYPE_FIELD_BITSIZE: The bit length of the field to be extracted.
+ TYPE_FIELD_BITPOS: The starting position of the field; 0 is LSB.
+ val: The register value.
+
+ Imagine you have a field that starts at position 1 and its length
+ is 4 bits. According to the third line of the code snippet the
+ shifting right would become "val >> -2", or "val >> 0xfff...fe"
+ to be precise. That will result in a "field_val" of 0.
+
+ The correct extraction should be:
+
+ ULONGEST field_val = val >> TYPE_FIELD_BITPOS (type, field);
+
+ The rest of the algorithm that masks out the higher bits is OK.
+
+ Co-Authored-By: Simon Marchi <simon.marchi@efficios.com>
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [10/10] arm: Alias 'ra_auth_code' to r12 for pacbti.
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (reg_names): Alias 'ra_auth_code' to r12.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [9/10] arm: add 'pacg' instruction for Armv8.1-M pacbti extension
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (T16_32_TAB): Add '_pacg'.
+ (do_t_pacbti_pacg): New function.
+ (insns): Define 'pacg' insn.
+ * testsuite/gas/arm/armv8_1-m-pacbti.d: Add 'pacg' test.
+ * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.
+
+ opcodes/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm-dis.c (thumb32_opcodes): Add 'pacg'.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [8/10] arm: add 'autg' instruction for Armv8.1-M pacbti extension
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (T16_32_TAB): Add '_autg'.
+ (insns): Define 'autg' insn.
+ * testsuite/gas/arm/armv8_1-m-pacbti.d: Add autg test.
+ * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.
+
+ opcodes/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm-dis.c (thumb32_opcodes): Add 'autg'.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [7/10] arm: add 'bxaut' instruction for Armv8.1-M pacbti extension
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (T16_32_TAB): Add '_bxaut'.
+ (do_t_pacbti_nonop): New function.
+ (insns): Define 'bxaut' insn.
+ * testsuite/gas/arm/armv8_1-m-pacbti.d: Add 'bxaut' test.
+ * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.
+
+ opcodes/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm-dis.c (thumb32_opcodes): Add 'bxaut'.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [6/10] arm: Add -march=armv8.1-m.main+pacbti flag
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (pacbti_ext): Define.
+ (BAD_PACBTI): New macro.
+ (armv8_1m_main_ext_table): Add 'pacbti' extension.
+
+ include/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * opcode/arm.h (ARM_EXT3_PACBTI, ARM_AEXT3_V8_1M_MAIN_PACBTI): New
+ macro.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [5/10] arm: Extend again arm_feature_set struct to provide more bits
+ include/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * opcode/arm.h (arm_feature_set): Extend 'core' field.
+ (ARM_CPU_HAS_FEATURE, ARM_FSET_CPU_SUBSET, ARM_CPU_IS_ANY)
+ (ARM_MERGE_FEATURE_SETS, ARM_CLEAR_FEATURE, ARM_FEATURE_EQUAL)
+ (ARM_FEATURE_ZERO, ARM_FEATURE_CORE_EQUAL): Account for
+ 'core[2]'.
+ (ARM_FEATURE_CORE_HIGH_HIGH): New macro.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [4/10] arm: add 'pac' instruction for Armv8.1-M pacbti extension
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (T16_32_TAB): Add '_pac'.
+ (insns): Add 'pac' insn.
+ * testsuite/gas/arm/armv8_1-m-pacbti-bad.l: Add pac tests.
+ * testsuite/gas/arm/armv8_1-m-pacbti-bad.s: Likewise.
+ * testsuite/gas/arm/armv8_1-m-pacbti.d: Likewise.
+ * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.
+
+ opcodes/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm-dis.c (thumb32_opcodes): Add 'pac'.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [3/10] arm: add 'aut' instruction for Armv8.1-M pacbti extension
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (insns): Add 'aut.'
+ (T16_32_TAB): Add '_aut'.
+ * testsuite/gas/arm/armv8_1-m-pacbti-bad.l: Add 'aut' tests.
+ * testsuite/gas/arm/armv8_1-m-pacbti-bad.s: Likewise.
+ * testsuite/gas/arm/armv8_1-m-pacbti.d: Likewise.
+ * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.
+
+ opcodes/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm-dis.c (thumb32_opcodes): Add 'aut'.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [2/10] arm: add 'pacbti' instruction for Armv8.1-M pacbti extension
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c
+ (enum operand_parse_code): Add OP_SP and OP_R12.
+ (parse_operands): Add switch cases for OP_SP and OP_R12.
+ (T16_32_TAB): Add '_pacbti'.
+ (do_t_pacbti): New function.
+ (insns): Add 'pacbti'.
+ * testsuite/gas/arm/armv8_1-m-pacbti-bad.d: New file.
+ * testsuite/gas/arm/armv8_1-m-pacbti-bad.l: Likewise.
+ * testsuite/gas/arm/armv8_1-m-pacbti-bad.s: Likewise.
+ * testsuite/gas/arm/armv8_1-m-pacbti.d: Add 'pacbti' to testcase.
+ * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.
+
+ opcodes/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm-dis.c (thumb32_opcodes): Add 'pacbti' instruction.
+
+2021-07-26 Andrea Corallo <andrea.corallo@arm.com>
+
+ PATCH [1/10] arm: add 'bti' instruction for Armv8.1-M pacbti extension
+ gas/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * config/tc-arm.c (insns): Add 'bti' insn.
+ * testsuite/gas/arm/armv8_1-m-pacbti.d: New file.
+ * testsuite/gas/arm/armv8_1-m-pacbti.s: Likewise.
+
+ opcodes/
+ 2021-06-11 Andrea Corallo <andrea.corallo@arm.com>
+
+ * arm-dis.c (thumb32_opcodes): Add bti instruction.
+
+2021-07-26 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb: move remaining ChangeLogs to legacy files
+ In commit:
+
+ commit f069ea46a03ae868581d1c852da28e979ea1245a
+ Date: Sat Jul 3 16:29:08 2021 -0700
+
+ Rename gdb/ChangeLog to gdb/ChangeLog-2021
+
+ The gdb/ChangeLog file was renamed, but all of the other ChangeLog
+ files relating to gdb were left in place.
+
+ As I understand things, the no ChangeLogs policy applies to all the
+ GDB related directories, so this commit renames all of the remaining
+ GDB related ChangeLog files.
+
+ As with the original commit, the intention behind this commit is to
+ hopefully stop people merging ChangeLog entries by mistake.
+
+ The renames carried out in this commit are:
+
+ gdb/doc/ChangeLog -> gdb/doc/ChangeLog-1991-2021
+ gdb/stubs/ChangeLog -> gdb/stubs/ChangeLog-2012-2020
+ gdb/testsuite/ChangeLog -> gdb/testsuite/ChangeLog-2014-2021
+ gdbserver/ChangeLog -> gdbserver/ChangeLog-2002-2021
+ gdbsupport/ChangeLog -> gdbsupport/ChangeLog-2020-2021
+
+2021-07-26 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ gdb/mi: handle no condition argument case for -break-condition
+ As reported in PR gdb/28076 [1], passing no condition argument to the
+ -break-condition command (e.g.: "-break-condition 2") should clear the
+ condition for breakpoint 2, just like CLI's "condition 2", but instead
+ an error message is returned:
+
+ ^error,msg="-break-condition: Missing the <number> and/or <expr> argument"
+
+ The current implementation of the -break-condition command's argument
+ handling (79aabb7308c "gdb/mi: add a '--force' flag to the
+ '-break-condition' command") was done according to the documentation,
+ where the condition argument seemed mandatory. However, the
+ -break-condition command originally (i.e. before the 79aabb7308c
+ patch) used the CLI's "cond" command, and back then not passing a
+ condition argument was clearing out the condition. So, this is a
+ regression in terms of the behavior.
+
+ Fix the argument handling of the -break-condition command to allow not
+ having a condition argument, and also update the document to make the
+ behavior clear. Also add test cases to test the scenarios which were
+ previously not covered.
+
+ [1] https://sourceware.org/bugzilla/show_bug.cgi?id=28076
+
+2021-07-26 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-25 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-24 Alan Modra <amodra@gmail.com>
+
+ Revert: PowerPC: Don't generate unused section symbols
+ Blindly following x86 broke linux kernel builds.
+
+ bfd/
+ * elf32-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define as true.
+ * elf64-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Likewise.
+ gas/
+ * testsuite/gas/ppc/power4.d: Adjust for section sym change.
+ * testsuite/gas/ppc/test1elf32.d: Likewise.
+ * testsuite/gas/ppc/test1elf64.d: Likewise.
+ ld/
+ * testsuite/ld-powerpc/tlsexe.r: Adjust for section sym change.
+ * testsuite/ld-powerpc/tlsexe32.r: Likewise.
+ * testsuite/ld-powerpc/tlsexe32no.r: Likewise.
+ * testsuite/ld-powerpc/tlsexeno.r: Likewise.
+ * testsuite/ld-powerpc/tlsexenors.r: Likewise.
+ * testsuite/ld-powerpc/tlsexers.r: Likewise.
+ * testsuite/ld-powerpc/tlsexetoc.r: Likewise.
+ * testsuite/ld-powerpc/tlsexetocrs.r: Likewise.
+ * testsuite/ld-powerpc/tlsget.d: Likewise.
+ * testsuite/ld-powerpc/tlsget.wf: Likewise.
+ * testsuite/ld-powerpc/tlsget2.d: Likewise.
+ * testsuite/ld-powerpc/tlsget2.wf: Likewise.
+ * testsuite/ld-powerpc/tlsso.r: Likewise.
+ * testsuite/ld-powerpc/tlsso32.r: Likewise.
+ * testsuite/ld-powerpc/tlstocso.r: Likewise.
+
+2021-07-24 Alan Modra <amodra@gmail.com>
+
+ Re: ld script expression parsing
+ Commit 40726f16a8d7 broke references to sections within ADDR(), and
+ overlays with weird section names.
+
+ * ldgram.y (paren_script_name): New rule.
+ (exp): Use it for ALIGNOF, SIZEOF, ADDR, and LOADADDR. Similarly
+ ensure script mode parsing for section name in SEGMENT_START.
+ (overlay_section): Delete unnecessary ldlex_script call. Backup
+ on a lookahead NAME parsed in expression mode.
+ * testsuite/ld-elf/overlay.s: Add more sections.
+ * testsuite/ld-elf/overlay.t: Test '-' in section names.
+
+2021-07-24 Frederic Cambus <fred@statdns.com>
+
+ Update the NetBSD system call table to match NetBSD-current.
+ Generated from sys/sys/syscall.h revision 1.319.
+
+ We can safely remove the _lwp_gettid syscall, which was never exposed
+ in libc and never made it into a release.
+
+ gdb/ChangeLog:
+
+ 2021-07-23 Frederic Cambus <fred@statdns.com>
+
+ * syscalls/netbsd.xml: Regenerate.
+
+2021-07-24 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: test get/set value of unregistered Guile parameter
+ When creating a parameter in Guile, you have to create it using
+ make-parameter and then register it with GDB with register-parameter!.
+ In between, it's still possible (though not documented) to set the
+ parameter's value. I broke this use case by mistake while writing this
+ series, so thought it would be good to have a test for it.
+
+ I suppose that people could use this "feature" to give their parameter
+ an initial value, even though make-parameter has an initial-value
+ parameter for this. Nevertheless, changing this behavior could break
+ some scripts, which is why I think it's important for it to be tested.
+
+ Change-Id: I5b2103e3cec0cfdcccf7ffb00eb05fed8626e66d
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove cmd_list_element::function::sfunc
+ I don't understand what the sfunc function type in
+ cmd_list_element::function is for. Compared to cmd_simple_func_ftype,
+ it has an extra cmd_list_element parameter, giving the callback access
+ to the cmd_list_element for the command being invoked. This allows
+ registering the same callback with many commands, and alter the behavior
+ using the cmd_list_element's context.
+
+ From the comment in cmd_list_element, it sounds like at some point it
+ was the callback function type for set and show functions, hence the
+ "s". But nowadays, it's used for many more commands that need to access
+ the cmd_list_element object (see add_catch_command for example).
+
+ I don't really see the point of having sfunc at all, since do_sfunc is
+ just a trivial shim that changes the order of the arguments. All
+ commands using sfunc could just as well set cmd_list_element::func to
+ their callback directly.
+
+ Therefore, remove the sfunc field in cmd_list_element and everything
+ that goes with it. Rename cmd_const_sfunc_ftype to cmd_func_ftype and
+ use it for cmd_list_element::func, as well as for the add_setshow
+ commands.
+
+ Change-Id: I1eb96326c9b511c293c76996cea0ebc51c70fac0
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: rename cfunc to simple_func
+ After browsing the CLI code for quite a while and trying really hard, I
+ reached the conclusion that I can't give a meaningful explanation of
+ what "sfunc" and "cfunc" functions are, in cmd_list_element. I don't
+ see a logic at all. That makes it very difficult to do any kind of
+ change. Unless somebody can make sense out of all that, I'd like to try
+ to retro-fit some logic in the cmd_list_element callback function code
+ so that we can understand what is going on, do some cleanups and add new
+ features.
+
+ The first change is about "cfunc". I can't figure out what the "c" in
+ cfunc means. It's not const, because there's already "const" in
+ "cmd_const_cfunc_ftype", and the previous "cmd_cfunc_ftype" had nothing
+ const.. It's not "cmd" or "command", because there's already "cmd" in
+ "cmd_const_cfunc_ftype".
+
+ The "main" command callback, cmd_list_element::func, has three
+ parameters, whereas cfunc has two. It is missing the cmd_list_element
+ parameter. So the only reason I see for cfunc to exist is to be a shim
+ between the three and two parameter versions. Most commands don't need
+ to receive the cmd_list_element object, so adding it everywhere would be
+ long and would just add more unnecessary boilerplate. So since this is
+ the "simple" version of the callback, compared to the "full", I suggest
+ renaming cmd_const_cfunc_ftype into cmd_simple_func_ftype, as well as
+ everything (like the utility functions) that goes with it.
+
+ Change-Id: I4e46cacfd77a66bc1cbf683f6a362072504b7868
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make inferior::m_terminal an std::string
+ Same idea as the previous patch, but for m_terminal.
+
+ Change-Id: If9367d5db8c976a4336680adca4ea5bc31ab64d2
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make inferior::m_cwd an std::string
+ Same idea as the previous patch, but for m_cwd.
+
+ To keep things consistent across the board, change get_inferior_cwd as
+ well, which is shared with GDBserver. So update the related GDBserver
+ code too.
+
+ Change-Id: Ia2c047fda738d45f3d18bc999eb67ceb8400ce4e
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make inferior::m_args an std::string
+ With the current code, both a NULL pointer and an empty string can mean
+ "no arguments". We don't need this distinction. Changing to a string
+ has the advantage that there is now a single state for that (an empty
+ string), which makes the code a bit simpler in my opinion.
+
+ Change-Id: Icdc622820f7869478791dbaa84b4a1c7fec21ced
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add setter/getter for inferior cwd
+ Add cwd/set_cwd to the inferior class, remove set_inferior_args.
+ Keep get_inferior_args, because it is used from fork_inferior, in shared
+ code. The cwd could eventually be passed as a parameter eventually,
+ though, I think that would be cleaner.
+
+ Change-Id: Ifb72ea865d7e6f9a491308f0d5c1595579d8427e
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add setter/getter for inferior arguments
+ Add args/set_args to the inferior class, remove the set_inferior_args
+ and get_inferior_args functions, that would just be wrappers around
+ them.
+
+ Change-Id: If87d52f3402ce08be26c32897ae8915d9f6d1ea3
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: remove inferior::{argc,argv}
+ There are currently two states that the inferior args can be stored.
+ The main one is the `args` field, where they are stored as a single
+ string. The other one is the `argc`/`argv` fields.
+
+ This last one is only used for arguments passed in GDB's
+ command line. And the only outcome is that when get_inferior_args is
+ called, `argc`/`argv` are serialized into `args`. So really,
+ `argc`/`argv` is just a staging area before moving the arguments in
+ `args`.
+
+ Simplify this by only keeping the `args` field. Change
+ set_inferior_args_vector to immediately serialize the arguments into
+ `args`, work that would be done in get_inferior_args later anyway.
+
+ The only time where this work would be "wasted" is when the user passes
+ some arguments on the command line, but does not end up running the
+ program. But that just seems unlikely. And it's not that much work.
+
+ Change-Id: Ica0b9859397c095f6530350c8fb3c36905f2044a
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: un-share set_inferior_cwd declaration
+ The declaration of set_inferior_cwd is currently shared between gdb and
+ gdbserver, in gdbsupport/common-inferior.h. It doesn't need to be, as
+ set_inferior_cwd is not called from common code. Only get_inferior_cwd
+ needs to.
+
+ The motivation for this is that a future patch will change the prototype
+ of set_inferior_cwd in gdb, and I don't want to change it for gdbserver
+ unnecessarily. I see this as a good cleanup in any case, to reduce to
+ just the essential what is shared between GDB and GDBserver.
+
+ Change-Id: I3127d27d078f0503ebf5ccc6fddf14f212426a73
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb.base/setshow.exp: fix duplicate test name
+ Fix:
+
+ DUPLICATE: gdb.base/setshow.exp: test_setshow_args: show args
+
+ by giving some explicit test names.
+
+ Change-Id: I2a738d3d3675ab9b45929e71f5aee0ea6bf92072
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb.base/setshow.exp: split in procs
+ Split in multiple procs, one per topic, and start with a fresh GDB in
+ each. I find it easier to work on a test with multiple smaller
+ independent test procedures. For example, it's possible to comment all
+ but one when working on one. It's also easier to add things without
+ having to think about the impact on existing tests, and vice-versa.
+
+ Change-Id: I19691eed8f9bcb975b2eeff7577cac66251bcbe2
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb.base/setshow.exp: use save_vars to save/restore gdb_prompt
+ Using save_vars is a bit better than what we have now, as it ensures the
+ variable gets restored if the code within it throws an error.
+
+ Change-Id: I3bd6836e5b7efb61b078acadff1a1c8182c19a27
+
+2021-07-23 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: split gdb.python/py-parameter.exp in procs
+ Split the file into multiple independent test procs, where each proc
+ starts with a fresh GDB. I find it easier to understand what a test is
+ doing when each part of the test is isolated and self-contained. It
+ makes it easier to comment out some parts of the test while working /
+ debugging a specific part. It also makes it easier to add new things
+ (which a subsequent patch will do) without fear of impacting another part
+ of the test.
+
+ Change-Id: I8b4d52ac82b1492d79b679e13914ed177d8a836d
+
+2021-07-23 Carl Love <cel@us.ibm.com>
+
+ Fix for gdb.python/py-breakpoint.exp
+ Not all systems have hardware breakpoint support. Add a check
+ to see if the system supports hardware breakpoints.
+
+ gdb/testsuite/ChangeLog
+
+ * gdb.python/py-breakpoint.exp (test_hardware_breakpoints): Add
+ check for hardware breakpoint support.
+
+2021-07-23 Andrew Burgess <andrew.burgess@embecosm.com>
+
+ gdb/testsuite: don't error when trying to unset last_spawn_tty_name
+ In spawn_capture_tty_name (lib/gdb.exp) we either set or unset
+ last_spawn_tty_name depending on whether spawn_out(slave,name) exists
+ or not.
+
+ One situation that might cause spawn_out(slave,name) to not exists is
+ if the spawn function is called with the argument -leaveopen, which is
+ how it is called when processes are created as part of a pipeline, the
+ created process has no tty, instead its output is written to a file
+ descriptor.
+
+ If a pipeline is created consisting of multiple processes then there
+ will be multiple sequential calls to spawn, all using -leaveopen. The
+ first of these calls is fine, spawn_out(slave,name) is not set, and so
+ in spawn_capture_tty_name we unset last_spawn_tty_name. However, on
+ the second call to spawn, spawn_out(slave,name) is still not set and
+ so in spawn_capture_tty_name we again try to unset
+ last_spawn_tty_name, this now throws an error (as last_spawn_tty_name
+ is already unset).
+
+ Fix this issue by using -nocomplain with the call to unset in
+ spawn_capture_tty_name.
+
+ Before this commit I was seeing gdb.base/gnu-debugdata.exp report 1
+ pass, and 1 unsupported test. After this commit I now see 16 passes
+ from this test script.
+
+ I have also improved the code that used to do this:
+
+ if { [info exists spawn_out] } {
+ set ::last_spawn_tty_name $spawn_out(slave,name)
+ } else {
+ ...
+ }
+
+ The problem here is that we check for the existence of spawn_out, and
+ then unconditionally read spawn_out(slave,name). A situation could
+ arise where some other element of spawn_out is set,
+ e.g. spawn_out(foo), in which case we would enter the if block and try
+ to read a non-existent variable. After this commit we now check
+ specifically for spawn_out(slave,name).
+
+ Finally, it is worth noting that before this issue was fixed runtest
+ itself, or rather the expect process behind runtest, would segfault
+ while exiting. I haven't looked at all into what the problem is here
+ that caused expect to crash, as fixing the bug in GDB's testing
+ scripts made the segfault go away.
+
+2021-07-23 Jan Beulich <jbeulich@suse.com>
+
+ x86: express unduly set rounding control bits in disassembly
+ While EVEX.L'L are indeed ignored when EVEX.b stands for just SAE,
+ EVEX.b itself is not ignored when an insn permits neither rounding
+ control nor SAE.
+
+ While changing this aspect of EVEX.b handling, also alter unduly set
+ embedded broadcast: Don't call BadOp(), screwing up subsequent
+ disassembly, but emit "{bad}" instead.
+
+2021-07-23 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-22 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAILs due to PR gcc/101575
+ When running test-case gdb.ada/formatted_ref.exp with gcc-11 and target board
+ unix/gdb:debug_flags=-gdwarf-4 we run into:
+ ...
+ (gdb) print/x s^M
+ No definition of "s" in current context.^M
+ (gdb) FAIL: gdb.ada/formatted_ref.exp: print/x s
+ ...
+ which is caused by "runto defs.adb:20" taking us to defs__struct1IP:
+ ...
+ (gdb) break defs.adb:20^M
+ Breakpoint 1 at 0x402cfd: defs.adb:20. (2 locations)^M
+ (gdb) run ^M
+ Starting program: formatted_ref ^M
+ ^M
+ Breakpoint 1, defs__struct1IP () at defs.adb:20^M
+ 20 return s.x; -- Set breakpoint marker here.^M
+ (gdb) print s1'access^M
+ ...
+ instead of the expected defs.f1:
+ ...
+ (gdb) break defs.adb:20^M
+ Breakpoint 1 at 0x402d0e: file defs.adb, line 20.^M
+ (gdb) run ^M
+ Starting program: formatted_ref ^M
+ ^M
+ Breakpoint 1, defs.f1 (s=...) at defs.adb:20^M
+ 20 return s.x; -- Set breakpoint marker here.^M
+ ...
+
+ This is caused by incorrect line info due to gcc PR 101575 - "[gcc-11,
+ -gdwarf-4] Missing .file <n> directive causes invalid line info".
+
+ Fix this by when landing in defs__struct1IP:
+ - xfailing the runto, and
+ - issuing a continue to land in defs.f1.
+
+ Likewise in a few other test-cases.
+
+ Tested on x86_64-linux, with:
+ - system gcc.
+ - gcc-11 and target boards unix/gdb:debug_flags=-gdwarf-4 and
+ unix/gdb:debug_flags=-gdwarf-5.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-22 Tom de Vries <tdevries@suse.de>
+
+ * gdb.ada/formatted_ref.exp: Add xfail for PR gcc/101575.
+ * gdb.ada/iwide.exp: Same.
+ * gdb.ada/pkd_arr_elem.exp: Same.
+
+2021-07-22 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop dq{b,d}_mode
+ Their sole use is for {,V}EXTRACTPS / {,V}P{EXT,INS}RB respectively; for
+ consistency also limit use of dqw_mode to Jdqw. 64-bit disassembly
+ reflecting REX.W / VEX.W is not in line with the assembler's opcode
+ table having NoRex64 / VexWIG in all respective templates, i.e. assembly
+ input isn't being honored there either. Obviously the 0FC5 encodings of
+ {,V}PEXTRW then also need adjustment for consistency reasons.
+
+ x86: drop vex_scalar_w_dq_mode
+ It has only a single use and can easily be represented by dq_mode
+ instead. Plus its handling in intel_operand_size() was duplicating
+ that of vex_vsib_{d,q}_w_dq_mode anyway.
+
+ x86: drop xmm_m{b,w,d,q}_mode
+ They're effectively redundant with {b,w,d,q}_mode.
+
+ x86: fold duplicate vector register printing code
+ The bulk of OP_XMM() can be easily reused also for OP_EX(). Break the
+ shared logic out of the function, and invoke the new helper from both
+ places.
+
+ x86: drop vex_mode and vex_scalar_mode
+ These are fully redundant with, respectively, x_mode and scalar_mode.
+
+ x86: correct EVEX.V' handling outside of 64-bit mode
+ Unlike the high bit of VEX.vvvv / EVEX.vvvv, EVEX.V' is not ignored
+ outside of 64-bit mode. Oddly enough there already are tests for these
+ cases, but their expectations were wrong. (This may have been based on
+ an old SDM version, where the restriction wasn't properly spelled out.)
+
+ x86: fold duplicate code in MOVSXD_Fixup()
+ There's no need to have two paths printing the "xd" mnemonic suffix.
+
+ x86: fold duplicate register printing code
+ What so far was OP_E_register() can be easily reused also for OP_G().
+ Add suitable parameters to the function and move the invocation of
+ swap_operand() to OP_E(). Adjust MOVSXD's first operand: There never was
+ a need to use movsxd_mode there, and its use gets in the way of the code
+ folding.
+
+ x86-64: properly bounds-check %bnd<N> in OP_G()
+ The restriction to %bnd0-%bnd3 requires to also check REX.R is clear,
+ just like OP_E_Register() also includes REX.B in its check.
+
+ x86-64: generalize OP_G()'s EVEX.R' handling
+ EVEX.R' is invalid to be clear not only for mask registers, but also for
+ GPRs - IOW everything handled in this function.
+
+2021-07-22 Jan Beulich <jbeulich@suse.com>
+
+ x86: correct VCVT{,U}SI2SD rounding mode handling
+ With EVEX.W clear the instruction doesn't ignore the rounding mode, but
+ (like for other insns without rounding semantics) EVEX.b set causes #UD.
+ Hence the handling of EVEX.W needs to be done when processing
+ evex_rounding_64_mode, not at the decode stages.
+
+ Derive a new 64-bit testcase from the 32-bit one to cover the different
+ EVEX.W treatment in both cases.
+
+2021-07-22 Jan Beulich <jbeulich@suse.com>
+
+ x86: drop OP_Mask()
+ By moving its vex.r check there it becomes fully redundant with OP_G().
+
+2021-07-22 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-21 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.cp/step-and-next-inline.exp with gcc-11
+ When running test-case gdb.cp/step-and-next-inline.exp with gcc-11, I run
+ into:
+ ...
+ KPASS: gdb.cp/step-and-next-inline.exp: no_header: next step 1 \
+ (PRMS symtab/25507)
+ FAIL: gdb.cp/step-and-next-inline.exp: no_header: next step 2
+ KPASS: gdb.cp/step-and-next-inline.exp: no_header: next step 3 \
+ (PRMS symtab/25507)
+ ...
+
+ [ Note that I get the same result with gcc-11 and target board
+ unix/gdb:debug_flags=-gdwarf-4, so this is not a dwarf 4 vs 5 issue. ]
+
+ With gcc-10, I have this trace:
+ ...
+ 64 get_alias_set (&xx);
+ get_alias_set (t=0x601038 <xx>) at step-and-next-inline.cc:51
+ 51 if (t != NULL
+ 40 if (t->x != i)
+ 52 && TREE_TYPE (t).z != 1
+ 43 return x;
+ 53 && TREE_TYPE (t).z != 2
+ 43 return x;
+ 54 && TREE_TYPE (t).z != 3)
+ 43 return x;
+ main () at step-and-next-inline.cc:65
+ 65 return 0;
+ ...
+ and with gcc-11, I have instead:
+ ...
+ 64 get_alias_set (&xx);
+ get_alias_set (t=0x601038 <xx>) at step-and-next-inline.cc:51
+ 51 if (t != NULL
+ 52 && TREE_TYPE (t).z != 1
+ 43 return x;
+ 53 && TREE_TYPE (t).z != 2
+ 43 return x;
+ 54 && TREE_TYPE (t).z != 3)
+ 43 return x;
+ main () at step-and-next-inline.cc:65
+ 65 return 0;
+ ...
+ and with clang-10, I have instead:
+ ...
+ 64 get_alias_set (&xx);
+ get_alias_set (t=0x601034 <xx>) at step-and-next-inline.cc:51
+ 51 if (t != NULL
+ 52 && TREE_TYPE (t).z != 1
+ 53 && TREE_TYPE (t).z != 2
+ 54 && TREE_TYPE (t).z != 3)
+ 51 if (t != NULL
+ 57 }
+ main () at step-and-next-inline.cc:65
+ 65 return 0;
+ ...
+
+ The test-case tries to verify that we don't step into inlined function
+ tree_check (lines 40-43) (so, with the clang trace we get that right).
+
+ The test-case then tries to kfail the problems when using gcc, but this is
+ done in such a way that the testing still gets out of sync after a failure.
+ That is: the "next step 2" check that is supposed to match
+ "TREE_TYPE (t).z != 2" is actually matching "TREE_TYPE (t).z != 1":
+ ...
+ (gdb) next^M
+ 52 && TREE_TYPE (t).z != 1^M
+ (gdb) PASS: gdb.cp/step-and-next-inline.exp: no_header: next step 2
+ ...
+
+ Fix this by issuing extra nexts to arrive at the required lines.
+
+ Tested on x86_64-linux, with gcc-8, gcc-9, gcc-10, gcc-11, clang-8, clang-10
+ and clang-12.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-20 Tom de Vries <tdevries@suse.de>
+
+ * gdb.cp/step-and-next-inline.cc (tree_check, get_alias_set, main):
+ Tag closing brace with comment.
+ * gdb.cp/step-and-next-inline.h: Update to keep identical with
+ step-and-next-inline.cc.
+ * gdb.cp/step-and-next-inline.exp: Issue extra next when required.
+
+2021-07-21 Nick Clifton <nickc@redhat.com>
+
+ Updated Russian translation for the bfd library
+
+2021-07-21 Luca Boccassi <luca.boccassi@microsoft.com>
+
+ Allows linker scripts to set the SEC_READONLY flag.
+ * ld.texi: Document new output section type.
+ * ldgram.y: Add new token.
+ * ldlang.c: Handle the new flag.
+ * ldlang.h: Add readonly_section to list of section types.
+ * ldlex.l: Add a new identifier.
+ * testsuite/ld-scripts/output-section-types.t: New example linker script.
+ * testsuite/ld-scripts/output-section-types.d: Test driver.
+ * testsyute/ld-scripts/script.exp: Run the new test.
+
+2021-07-21 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix FAILs due to PR gcc/101452
+ When running test-case gdb.base/ptype-offsets.exp with gcc-11 (with -gdwarf-5
+ default) or gcc-10 with target board unix/gdb:debug_flags=-gdwarf-5 we run
+ into this regression:
+ ...
+ (gdb) ptype/o static_member^M
+ /* offset | size */ type = struct static_member {^M
+ - static static_member Empty;^M
+ /* 0 | 4 */ int abc;^M
+ ^M
+ /* total size (bytes): 4 */^M
+ }^M
+ -(gdb) PASS: gdb.base/ptype-offsets.exp: ptype/o static_member
+ +(gdb) FAIL: gdb.base/ptype-offsets.exp: ptype/o static_member
+ ...
+
+ This is caused by missing debug info, which I filed as gcc PR101452 - "[debug,
+ dwarf-5] undefined static member removed by
+ -feliminate-unused-debug-symbols".
+
+ It's not clear yet whether this is a bug or a feature, but work around this in
+ the test-cases by:
+ - defining the static member
+ - adding additional_flags=-fno-eliminate-unused-debug-types.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-20 Tom de Vries <tdevries@suse.de>
+
+ * lib/gdb.exp (gcc_major_version): New proc.
+ * gdb.base/ptype-offsets.cc: Define static member static_member::Empty.
+ * gdb.cp/templates.exp: Define static member using -DGCC_BUG.
+ * gdb.cp/m-static.exp: Add
+ additional_flags=-fno-eliminate-unused-debug-types.
+ * gdb.cp/pr-574.exp: Same.
+ * gdb.cp/pr9167.exp: Same.
+
+2021-07-21 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add KFAILs for gdb.ada FAILs with gcc-11
+ With gcc-11 we run into:
+ ...
+ (gdb) print pa_ptr.all^M
+ That operation is not available on integers of more than 8 bytes.^M
+ (gdb) KFAIL: gdb.ada/arrayptr.exp: scenario=all: print pa_ptr.all (PRMS: gdb/20991)
+ ...
+
+ This is due to PR exp/20991 - "__int128 type support". Mark this and similar
+ FAILs as KFAIL.
+
+ Also mark this FAIL:
+ ....
+ (gdb) print pa_ptr(3)^M
+ cannot subscript or call something of type `foo__packed_array_ptr'^M
+ (gdb) FAIL: gdb.ada/arrayptr.exp: scenario=minimal: print pa_ptr(3)
+ ...
+ as a KFAIL for PR ada/28115 - "Support packed array encoded as
+ DW_TAG_subrange_type".
+
+ Tested on x86_64-linux, with gcc-10 and gcc-11.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-21 Tom de Vries <tdevries@suse.de>
+
+ * gdb.ada/arrayptr.exp: Add KFAILs for PR20991 and PR28115.
+ * gdb.ada/exprs.exp: Add KFAILs for PR20991.
+ * gdb.ada/packed_array_assign.exp: Same.
+
+2021-07-21 Alan Modra <amodra@gmail.com>
+
+ as_bad_subtract
+ Many places report errors of the nature "can't resolve a - b".
+ This provides a utility function to report such errors consistently.
+ I removed the section reporting and quotes around symbol names while I
+ was at it. Compare
+ ifunc-2.s:4: Error: can't resolve `bar1' {.text.1 section} - `foo1' {.text.1 section}
+ with
+ ifunc-2.s:4: Error: can't resolve bar1 - foo1
+
+ In many cases the section names don't help the user very much in
+ figuring out what went wrong, and the quotes if present arguably ought
+ to be placed around the entire expression:
+ can't resolve `bar1 - foo1'
+
+ The patch also tidies some tc_get_reloc functions that leak memory on
+ error paths.
+
+ * write.h (as_bad_subtract): Declare.
+ * write.c (as_bad_subtract): New function.
+ (fixup_segment): Use as_bad_subtract.
+ * config/tc-arc.c (md_apply_fix): Likewise.
+ * config/tc-avr.c (md_apply_fix, tc_gen_reloc): Likewise.
+ * config/tc-cris.c (md_apply_fix): Likewise.
+ * config/tc-d10v.c (md_apply_fix): Likewise.
+ * config/tc-d30v.c (md_apply_fix): Likewise.
+ * config/tc-ft32.c (md_apply_fix): Likewise.
+ * config/tc-h8300.c (tc_gen_reloc): Likewise.
+ * config/tc-m68hc11.c (md_apply_fix): Likewise.
+ * config/tc-mmix.c (mmix_frob_file): Likewise.
+ * config/tc-mn10200.c (tc_gen_reloc): Likewise.
+ * config/tc-nds32.c (nds32_apply_fix): Likewise.
+ * config/tc-pru.c (md_apply_fix): Likewise.
+ * config/tc-riscv.c (md_apply_fix): Likewise.
+ * config/tc-s12z.c (md_apply_fix): Likewise.
+ * config/tc-s390.c (md_apply_fix): Likewise.
+ * config/tc-tilegx.c (md_apply_fix): Likewise.
+ * config/tc-tilepro.c (md_apply_fix): Likewise.
+ * config/tc-v850.c (md_apply_fix): Likewise.
+ * config/tc-vax.c (md_apply_fix): Likewise.
+ * config/tc-xc16x.c (tc_gen_reloc): Likewise.
+ * config/tc-xgate.c (md_apply_fix): Likewise.
+ * config/tc-xstormy16.c (xstormy16_md_apply_fix): Likewise.
+ * config/tc-xtensa.c (md_apply_fix): Likewise.
+ * config/tc-z80.c (tc_gen_reloc): Likewise.
+ * config/tc-spu.c (md_apply_fix): Likewise.
+ (tc_gen_reloc): Delete dead code. Free memory on error.
+ * config/tc-cr16.c (tc_gen_reloc): Use as_bad_subtract. Free
+ on error.
+ * config/tc-crx.c (tc_gen_reloc): Likewise.
+ * config/tc-ppc.c (tc_gen_reloc): Likewise.
+ * testsuite/gas/i386/ifunc-2.l: Adjust to suit changed error message.
+ * testsuite/gas/mips/lui-2.l: Likewise.
+ * testsuite/gas/tic6x/reloc-bad-1.l: Likewise.
+
+2021-07-21 John Ericson <git@JohnEricson.me>
+
+ Remove `netbsdpe` support
+ netbsdpe was deprecated in c2ce831330e10dab4703094491f80b6b9a5c2289.
+ Since then, a release has passed (2.37), and it was marked obselete in
+ 5c9cbf07f3f972ecffe13d858010b3179df17b32. Unless I am mistaken, that
+ means we can now remove support altogether.
+
+ All branches in the "active" code are remove, and the target is
+ additionally marked as obsolete next to the other removed ones for
+ libbfd and gdb.
+
+ Per [1] from the NetBSD toolchain list, PE/COFF support was removed a
+ decade ago. Furthermore, the sole mention of this target in the binutils
+ commit history was in 2002. Together, I'm led to believe this target
+ hasn't seen much attention in quite a while.
+
+ [1]: https://mail-index.netbsd.org/tech-toolchain/2021/06/16/msg003996.html
+
+ bfd/
+ * config.bfd: Remove netbsdpe entry.
+ binutils/
+ * configure.ac: Remove netbsdpe entry.
+ * testsuite/lib/binutils-common.exp (is_pecoff_format): Likewise.
+ * configure: Regenerate.
+ gas/
+ * configure.tgt: Remove netbsdpe entry.
+ gdb/
+ * configure.tgt: Add netbsdpe to removed targets.
+ ld/
+ * configure.tgt: Remove netbsdpe entry.
+ * testsuite/ld-bootstrap/bootstrap.exp: Likewise.
+
+2021-07-21 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-20 Alan Modra <amodra@gmail.com>
+
+ PR28106, build of 2.37 fails on FreeBSD and Clang
+ https://en.cppreference.com/w/cpp/types/NULL says NULL might be
+ defined as nullptr.
+ https://en.cppreference.com/w/cpp/language/reinterpret_cast says
+ reinterpret_cast can't be used on nullptr.
+
+ PR gold/28106
+ PR gold/27815
+ * gc.h (gc_process_relocs): Use static_cast in Section_id constructor.
+
+2021-07-20 Luis Machado <luis.machado@linaro.org>
+
+ Fix printing of non-address types when memory tagging is enabled
+ When the architecture supports memory tagging, we handle
+ pointer/reference types in a special way, so we can validate tags and
+ show mismatches.
+
+ Unfortunately, the currently implementation errors out when the user
+ prints non-address values: composite types, floats, references, member
+ functions and other things.
+
+ Vector registers:
+
+ (gdb) p $v0
+ Value can't be converted to integer.
+
+ Non-existent internal variables:
+
+ (gdb) p $foo
+ Value can't be converted to integer.
+
+ The same happens for complex types and printing struct/union types.
+
+ There are a few problems here.
+
+ The first one is that after print_command_1 evaluates the expression
+ to print, the tag validation code call value_as_address
+ unconditionally, without making sure we have have a suitable type
+ where it makes to sense to call it. That results in value_as_address
+ (if it isn't given a pointer-like type) trying to treat the value as
+ an integer and convert it to an address, which #1 - doesn't make sense
+ (i.e., no sense in validating tags after "print 1"), and throws for
+ non-integer-convertible types. We fix this by making sure we have a
+ pointer or reference type first, and only if so then proceed to check
+ if the address-like value has tags.
+
+ The second is that we're calling value_as_address even if we have an
+ optimized out or unavailable value, which throws, because the value's
+ contents aren't fully accessible/readable. This error currently
+ escapes out and aborts the print. This case is fixed by checking for
+ optimized out / unavailable explicitly.
+
+ Third, the tag checking process does not gracefully handle exceptions.
+ If any exception is thrown from the tag validation code, we abort the
+ print. E.g., the target may fail to access tags via a running thread.
+ Or the needed /proc files aren't available. Or some other untold
+ reason. This is a bit too rigid. This commit changes print_command_1
+ to catch errors, print them, and still continue with the normal
+ expression printing path instead of erroring out and printing nothing
+ useful.
+
+ With this patch, printing works correctly again:
+
+ (gdb) p $v0
+ $1 = {d = {f = {2.0546950501119882e-81, 2.0546950501119882e-81}, u = {3399988123389603631, 3399988123389603631}, s = {
+ 3399988123389603631, 3399988123389603631}}, s = {f = {1.59329203e-10, 1.59329203e-10, 1.59329203e-10, 1.59329203e-10}, u = {
+ 791621423, 791621423, 791621423, 791621423}, s = {791621423, 791621423, 791621423, 791621423}}, h = {bf = {1.592e-10,
+ 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10, 1.592e-10}, f = {0.11224, 0.11224, 0.11224, 0.11224, 0.11224,
+ 0.11224, 0.11224, 0.11224}, u = {12079, 12079, 12079, 12079, 12079, 12079, 12079, 12079}, s = {12079, 12079, 12079, 12079,
+ 12079, 12079, 12079, 12079}}, b = {u = {47 <repeats 16 times>}, s = {47 <repeats 16 times>}}, q = {u = {
+ 62718710765820030520700417840365121327}, s = {62718710765820030520700417840365121327}}}
+ (gdb) p $foo
+ $2 = void
+ (gdb) p 2 + 2i
+ $3 = 2 + 2i
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28110
+
+2021-07-20 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Minor updates for architecture parser.
+ * Two add subset functions is redundant. Keep the riscv_add_implicit_subset,
+ and renamed it to riscv_add_subset. Besides, if the subset is added in order,
+ then we just add it at the tail of the subset list.
+
+ * Removed the "-march:" prefix from the error messages. Since not only the
+ -march= option will use the parser, but also the architecture elf attributes,
+ the default architecture setting and linker will use the same parser.
+
+ * Use a function, riscv_parse_check_conflicts, to check the conflicts
+ of extensions, including the rv64e and rv32q.
+
+ The rv32emc-elf/rv32i-elf/rv32gc-linux/rv64gc-elf/rv64gc-linux regressions
+ are tested and passed.
+
+ bfd/
+ * elfxx-riscv.c (riscv_lookup_subset): Check the subset tail list
+ first. If the subset is added in order, then we can just add it to
+ the tail without searching the whole list.
+ (riscv_add_subset): Replaced by riscv_add_implicit_subset.
+ (riscv_add_implicit_subset): Renamed to riscv_add_subset.
+ (riscv_parse_add_subset): Updated.
+ (riscv_parsing_subset_version): Removed the "-march:" prefix from
+ the error message.
+ (riscv_parse_prefixed_ext): Likewise.
+ (riscv_parse_std_ext): Likewise. And move the rv<xlen>e check
+ to riscv_parse_check_conflicts.
+ (riscv_parse_check_conflicts): New function used to check conflicts.
+ (riscv_parse_subset): Updated.
+ gas/
+ * testsuite/gas/riscv/march-fail-base-02.l: Updated.
+ * testsuite/gas/riscv/march-fail-unknown-std.l: Likewise.
+
+2021-07-20 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-19 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: set current thread in btrace_compute_ftrace_{bts,pt}
+ As documented in bug 28086, test gdb.btrace/enable-new-thread.exp
+ started failing with commit 0618ae414979 ("gdb: optimize
+ all_matching_threads_iterator"):
+
+ (gdb) record btrace^M
+ (gdb) PASS: gdb.btrace/enable-new-thread.exp: record btrace
+ break 24^M
+ Breakpoint 2 at 0x555555555175: file /home/smarchi/src/binutils-gdb/gdb/testsuite/gdb.btrace/enable-new-thread.c, line 24.^M
+ (gdb) continue^M
+ Continuing.^M
+ /home/smarchi/src/binutils-gdb/gdb/inferior.c:303: internal-error: inferior* find_inferior_pid(process_stratum_target*, int): Assertion `pid != 0' failed.^M
+ A problem internal to GDB has been detected,^M
+ further debugging may prove unreliable.^M
+ Quit this debugging session? (y or n) FAIL: gdb.btrace/enable-new-thread.exp: continue to breakpoint: cont to bp.1 (GDB internal error)
+
+ Note that I only see the failure if GDB is compiled without libipt
+ support. This is because GDB then makes use BTS instead of PT, so
+ exercises different code paths.
+
+ I think that the commit above just exposed an existing problem. The
+ stack trace of the internal error is:
+
+ #8 0x0000561cb81e404e in internal_error (file=0x561cb83aa2f8 "/home/smarchi/src/binutils-gdb/gdb/inferior.c", line=303, fmt=0x561cb83aa099 "%s: Assertion `%s' failed.") at /home/smarchi/src/binutils-gdb/gdbsupport/errors.cc:55
+ #9 0x0000561cb7b5c031 in find_inferior_pid (targ=0x561cb8aafb60 <the_amd64_linux_nat_target>, pid=0) at /home/smarchi/src/binutils-gdb/gdb/inferior.c:303
+ #10 0x0000561cb7b5c102 in find_inferior_ptid (targ=0x561cb8aafb60 <the_amd64_linux_nat_target>, ptid=...) at /home/smarchi/src/binutils-gdb/gdb/inferior.c:317
+ #11 0x0000561cb7f1d1c3 in find_thread_ptid (targ=0x561cb8aafb60 <the_amd64_linux_nat_target>, ptid=...) at /home/smarchi/src/binutils-gdb/gdb/thread.c:487
+ #12 0x0000561cb7f1b921 in all_matching_threads_iterator::all_matching_threads_iterator (this=0x7ffc4ee34678, filter_target=0x561cb8aafb60 <the_amd64_linux_nat_target>, filter_ptid=...) at /home/smarchi/src/binutils-gdb/gdb/thread-iter.c:125
+ #13 0x0000561cb77bc462 in filtered_iterator<all_matching_threads_iterator, non_exited_thread_filter>::filtered_iterator<process_stratum_target* const&, ptid_t const&> (this=0x7ffc4ee34670) at /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/filtered-iterator.h:42
+ #14 0x0000561cb77b97cb in all_non_exited_threads_range::begin (this=0x7ffc4ee34650) at /home/smarchi/src/binutils-gdb/gdb/thread-iter.h:243
+ #15 0x0000561cb7d8ba30 in record_btrace_target::record_is_replaying (this=0x561cb8aa6250 <record_btrace_ops>, ptid=...) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:1411
+ #16 0x0000561cb7d8bb83 in record_btrace_target::xfer_partial (this=0x561cb8aa6250 <record_btrace_ops>, object=TARGET_OBJECT_MEMORY, annex=0x0, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, offset=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:1437
+ #17 0x0000561cb7ef73a9 in raw_memory_xfer_partial (ops=0x561cb8aa6250 <record_btrace_ops>, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, memaddr=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1504
+ #18 0x0000561cb7ef77da in memory_xfer_partial_1 (ops=0x561cb8aa6250 <record_btrace_ops>, object=TARGET_OBJECT_CODE_MEMORY, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, memaddr=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1635
+ #19 0x0000561cb7ef78b5 in memory_xfer_partial (ops=0x561cb8aa6250 <record_btrace_ops>, object=TARGET_OBJECT_CODE_MEMORY, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, memaddr=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1664
+ #20 0x0000561cb7ef7ba4 in target_xfer_partial (ops=0x561cb8aa6250 <record_btrace_ops>, object=TARGET_OBJECT_CODE_MEMORY, annex=0x0, readbuf=0x7ffc4ee34c58 "\260g\343N\374\177", writebuf=0x0, offset=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1721
+ #21 0x0000561cb7ef8503 in target_read_partial (ops=0x561cb8aa6250 <record_btrace_ops>, object=TARGET_OBJECT_CODE_MEMORY, annex=0x0, buf=0x7ffc4ee34c58 "\260g\343N\374\177", offset=140737352774277, len=1, xfered_len=0x7ffc4ee34ad8) at /home/smarchi/src/binutils-gdb/gdb/target.c:1974
+ #22 0x0000561cb7ef861f in target_read (ops=0x561cb8aa6250 <record_btrace_ops>, object=TARGET_OBJECT_CODE_MEMORY, annex=0x0, buf=0x7ffc4ee34c58 "\260g\343N\374\177", offset=140737352774277, len=1) at /home/smarchi/src/binutils-gdb/gdb/target.c:2014
+ #23 0x0000561cb7ef809f in target_read_code (memaddr=140737352774277, myaddr=0x7ffc4ee34c58 "\260g\343N\374\177", len=1) at /home/smarchi/src/binutils-gdb/gdb/target.c:1869
+ #24 0x0000561cb7937f4d in gdb_disassembler::dis_asm_read_memory (memaddr=140737352774277, myaddr=0x7ffc4ee34c58 "\260g\343N\374\177", len=1, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:139
+ #25 0x0000561cb80ab66d in fetch_data (info=0x7ffc4ee34e88, addr=0x7ffc4ee34c59 "g\343N\374\177") at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:194
+ #26 0x0000561cb80ab7e2 in ckprefix () at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:8628
+ #27 0x0000561cb80adbd8 in print_insn (pc=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:9587
+ #28 0x0000561cb80abe4f in print_insn_i386 (pc=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/opcodes/i386-dis.c:8894
+ #29 0x0000561cb7744a19 in default_print_insn (memaddr=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/arch-utils.c:1029
+ #30 0x0000561cb7b33067 in i386_print_insn (pc=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/i386-tdep.c:4013
+ #31 0x0000561cb7acd8f4 in gdbarch_print_insn (gdbarch=0x561cbae2fb60, vma=140737352774277, info=0x7ffc4ee34e88) at /home/smarchi/src/binutils-gdb/gdb/gdbarch.c:3478
+ #32 0x0000561cb793a32d in gdb_disassembler::print_insn (this=0x7ffc4ee34e80, memaddr=140737352774277, branch_delay_insns=0x0) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:795
+ #33 0x0000561cb793a5b0 in gdb_print_insn (gdbarch=0x561cbae2fb60, memaddr=140737352774277, stream=0x561cb8ac99f8 <null_stream>, branch_delay_insns=0x0) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:850
+ #34 0x0000561cb793a631 in gdb_insn_length (gdbarch=0x561cbae2fb60, addr=140737352774277) at /home/smarchi/src/binutils-gdb/gdb/disasm.c:859
+ #35 0x0000561cb77f53f4 in btrace_compute_ftrace_bts (tp=0x561cbba11210, btrace=0x7ffc4ee35188, gaps=...) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1107
+ #36 0x0000561cb77f55f5 in btrace_compute_ftrace_1 (tp=0x561cbba11210, btrace=0x7ffc4ee35180, cpu=0x0, gaps=...) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1527
+ #37 0x0000561cb77f5705 in btrace_compute_ftrace (tp=0x561cbba11210, btrace=0x7ffc4ee35180, cpu=0x0) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1560
+ #38 0x0000561cb77f583b in btrace_add_pc (tp=0x561cbba11210) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1589
+ #39 0x0000561cb77f5a86 in btrace_enable (tp=0x561cbba11210, conf=0x561cb8ac6878 <record_btrace_conf>) at /home/smarchi/src/binutils-gdb/gdb/btrace.c:1629
+ #40 0x0000561cb7d88d26 in record_btrace_enable_warn (tp=0x561cbba11210) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:294
+ #41 0x0000561cb7c603dc in std::__invoke_impl<void, void (*&)(thread_info*), thread_info*> (__f=@0x561cbb6c4878: 0x561cb7d88cdc <record_btrace_enable_warn(thread_info*)>) at /usr/include/c++/10/bits/invoke.h:60
+ #42 0x0000561cb7c5e5a6 in std::__invoke_r<void, void (*&)(thread_info*), thread_info*> (__fn=@0x561cbb6c4878: 0x561cb7d88cdc <record_btrace_enable_warn(thread_info*)>) at /usr/include/c++/10/bits/invoke.h:153
+ #43 0x0000561cb7c5dc92 in std::_Function_handler<void (thread_info*), void (*)(thread_info*)>::_M_invoke(std::_Any_data const&, thread_info*&&) (__functor=..., __args#0=@0x7ffc4ee35310: 0x561cbba11210) at /usr/include/c++/10/bits/std_function.h:291
+ #44 0x0000561cb7f2600f in std::function<void (thread_info*)>::operator()(thread_info*) const (this=0x561cbb6c4878, __args#0=0x561cbba11210) at /usr/include/c++/10/bits/std_function.h:622
+ #45 0x0000561cb7f23dc8 in gdb::observers::observable<thread_info*>::notify (this=0x561cb8ac5aa0 <gdb::observers::new_thread>, args#0=0x561cbba11210) at /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/observable.h:150
+ #46 0x0000561cb7f1c436 in add_thread_silent (targ=0x561cb8aafb60 <the_amd64_linux_nat_target>, ptid=...) at /home/smarchi/src/binutils-gdb/gdb/thread.c:263
+ #47 0x0000561cb7f1c479 in add_thread_with_info (targ=0x561cb8aafb60 <the_amd64_linux_nat_target>, ptid=..., priv=0x561cbb3f7ab0) at /home/smarchi/src/binutils-gdb/gdb/thread.c:272
+ #48 0x0000561cb7bfa1d0 in record_thread (info=0x561cbb0413a0, tp=0x0, ptid=..., th_p=0x7ffc4ee35610, ti_p=0x7ffc4ee35620) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:1380
+ #49 0x0000561cb7bf7a2a in thread_from_lwp (stopped=0x561cba81db20, ptid=...) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:429
+ #50 0x0000561cb7bf7ac5 in thread_db_notice_clone (parent=..., child=...) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:447
+ #51 0x0000561cb7bdc9a2 in linux_handle_extended_wait (lp=0x561cbae25720, status=4991) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:1981
+ #52 0x0000561cb7bdf0f3 in linux_nat_filter_event (lwpid=435403, status=198015) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:2920
+ #53 0x0000561cb7bdfed6 in linux_nat_wait_1 (ptid=..., ourstatus=0x7ffc4ee36398, target_options=...) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:3202
+ #54 0x0000561cb7be0b68 in linux_nat_target::wait (this=0x561cb8aafb60 <the_amd64_linux_nat_target>, ptid=..., ourstatus=0x7ffc4ee36398, target_options=...) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:3440
+ #55 0x0000561cb7bfa2fc in thread_db_target::wait (this=0x561cb8a9acd0 <the_thread_db_target>, ptid=..., ourstatus=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/linux-thread-db.c:1412
+ #56 0x0000561cb7d8e356 in record_btrace_target::wait (this=0x561cb8aa6250 <record_btrace_ops>, ptid=..., status=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/record-btrace.c:2547
+ #57 0x0000561cb7ef996d in target_wait (ptid=..., status=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/target.c:2608
+ #58 0x0000561cb7b6d297 in do_target_wait_1 (inf=0x561cba6d8780, ptid=..., status=0x7ffc4ee36398, options=...) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:3640
+ #59 0x0000561cb7b6d43e in operator() (__closure=0x7ffc4ee36190, inf=0x561cba6d8780) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:3701
+ #60 0x0000561cb7b6d7b2 in do_target_wait (ecs=0x7ffc4ee36370, options=...) at /home/smarchi/src/binutils-gdb/gdb/infrun.c:3720
+ #61 0x0000561cb7b6e67d in fetch_inferior_event () at /home/smarchi/src/binutils-gdb/gdb/infrun.c:4069
+ #62 0x0000561cb7b4659b in inferior_event_handler (event_type=INF_REG_EVENT) at /home/smarchi/src/binutils-gdb/gdb/inf-loop.c:41
+ #63 0x0000561cb7be25f7 in handle_target_event (error=0, client_data=0x0) at /home/smarchi/src/binutils-gdb/gdb/linux-nat.c:4227
+ #64 0x0000561cb81e4ee2 in handle_file_event (file_ptr=0x561cbae24e10, ready_mask=1) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:575
+ #65 0x0000561cb81e5490 in gdb_wait_for_event (block=0) at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:701
+ #66 0x0000561cb81e41be in gdb_do_one_event () at /home/smarchi/src/binutils-gdb/gdbsupport/event-loop.cc:212
+ #67 0x0000561cb7c18096 in start_event_loop () at /home/smarchi/src/binutils-gdb/gdb/main.c:421
+ #68 0x0000561cb7c181e0 in captured_command_loop () at /home/smarchi/src/binutils-gdb/gdb/main.c:481
+ #69 0x0000561cb7c19d7e in captured_main (data=0x7ffc4ee366a0) at /home/smarchi/src/binutils-gdb/gdb/main.c:1353
+ #70 0x0000561cb7c19df0 in gdb_main (args=0x7ffc4ee366a0) at /home/smarchi/src/binutils-gdb/gdb/main.c:1368
+ #71 0x0000561cb7693186 in main (argc=11, argv=0x7ffc4ee367b8) at /home/smarchi/src/binutils-gdb/gdb/gdb.c:32
+
+ At frame 45, the new_thread observable is fired. At this moment, the
+ new thread isn't the current thread, inferior_ptid is null_ptid. I
+ think this is ok: the new_thread observable doesn't give any guarantee
+ on the global context when observers are invoked. Frame 35,
+ btrace_compute_ftrace_bts, calls gdb_insn_length. gdb_insn_length
+ doesn't have a thread_info or other parameter what could indicate where
+ to read memory from, it implicitly uses the global context
+ (inferior_ptid).
+
+ So we reach the all_non_exited_threads_range in
+ record_btrace_target::record_is_replaying with a null inferior_ptid.
+ The previous implemention of all_non_exited_threads_range didn't care,
+ but the new one does. The problem of calling gdb_insn_length and
+ ultimately trying to read memory with a null inferior_ptid already
+ existed, but the commit mentioned above made it visible.
+
+ Something between frames 40 (record_btrace_enable_warn) and 35
+ (btrace_compute_ftrace_bts) needs to be switching the global context to
+ make TP the current thread. Since btrace_compute_ftrace_bts takes the
+ thread_info to work with as a parameter, that typically means that it
+ doesn't require its caller to also set the global current context
+ (current thread) when calling. If it needs to call other functions
+ that do require the global current thread to be set, then it needs to
+ temporarily change the current thread while calling these other
+ functions. Therefore, switch and restore the current thread in
+ btrace_compute_ftrace_bts.
+
+ By inspection, it looks like btrace_compute_ftrace_pt may also call
+ functions sensitive to the global context: it installs the
+ btrace_pt_readmem_callback callback in the PT instruction decoder. When
+ this function gets called, inferior_ptid must be set appropriately. Add
+ a switch and restore in there too.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28086
+ Change-Id: I407fbfe41aab990068bd102491aa3709b0a034b3
+
+2021-07-19 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-18 Nick Clifton <nickc@redhat.com>
+
+ Move pending-obsolesence targets onto the obsolete list.
+ * config.bfd: Move pending obsoletion targets to obsolete list.
+
+ Update how-to-make-a-release checklist with latest changes from 2.37 release
+
+2021-07-18 Michael Krasnyk <mkrasnyk@argo.ai>
+
+ PR28098 Skip R_*_NONE relocation entries with zero r_sym without counting
+ PR gold/28098
+ * reloc.cc (Track_relocs::advance): Skip R_*_NONE relocation entries
+ with r_sym of zero without counting in advance method.
+
+2021-07-18 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: convert nat/x86-dregs.c macros to functions
+ I'm debugging why GDB crashes on OpenBSD/amd64, turns out it's because
+ x86_dr_low.get_status is nullptr. It would have been useful to be able
+ to break on x86_dr_low_get_status, so I thought it would be a good
+ reason to convert these function-like macros into functions.
+
+ Change-Id: Ic200b50ef8455b4697bc518da0fa2bb704cf4721
+
+2021-07-18 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-17 Tom Tromey <tom@tromey.com>
+
+ Fix file-name handling regression with DWARF index
+ When run with the gdb-index or debug-names target boards, dup-psym.exp
+ fails. This came up for me because my new DWARF scanner reuses this
+ part of the existing index code, and so it registers as a regression.
+ This is PR symtab/25834.
+
+ Looking into this, I found that the DWARF index code here is fairly
+ different from the psymtab code. I don't think there's a deep reason
+ for this, and in fact, it seemed to me that the index code could
+ simply mimic what the psymtab code already does.
+
+ That is what this patch implements. The DW_AT_name and DW_AT_comp_dir
+ are now stored in the quick file names table. This may require
+ allocating a quick file names table even when DW_AT_stmt_list does not
+ exist. Then, the functions that work with this data are changed to
+ use find_source_or_rewrite, just as the psymbol code does. Finally,
+ line_header::file_full_name is removed, as it is no longer needed.
+
+ Currently, the index maintains a hash table of "quick file names".
+ The hash table uses a deletion function to free the "real name"
+ components when necessary. There's also a second such function to
+ implement the forget_cached_source_info method.
+
+ This bug fix patch will create a quick file name object even when
+ there is no DW_AT_stmt_list, meaning that the object won't be entered
+ in the hash table. So, this patch changes the memory management
+ approach so that the entries are cleared when the per-BFD object is
+ destroyed. (A dwarf2_per_cu_data destructor is not introduced,
+ because we have been avoiding adding a vtable to that class.)
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=25834
+
+2021-07-17 Tom Tromey <tom@tromey.com>
+
+ Check for debug-types in map_symbol_filenames
+ map_symbol_filenames can skip type units -- in fact I think it has to,
+ due to the assertion at the top of dw2_get_file_names. This may be a
+ regression due to the TU/CU unification patch, I did not check.
+
+ Simplify DWARF file name caching
+ The DWARF index file name caching code only records when a line table
+ has been read and the reading failed. However, the code would be
+ simpler if it recorded any attempt, which is what this patch
+ implements.
+
+ Introduce find_source_or_rewrite
+ The final bug fix in this series would duplicate the logic in
+ psymtab_to_fullname, so this patch extracts the body of this function
+ into a new function.
+
+ Simplify file_and_directory storage management
+ file_and_directory carries a std::string in case the compilation
+ directory is computed, but a subsequent patch wants to preserve this
+ string without also having to maintain the storage for it. So, this
+ patch arranges for the compilation directory string to be stored in
+ the per-BFD string bcache instead.
+
+ Pass file_and_directory through DWARF line-decoding code
+ This patch removes the redundant "comp_unit" parameter from
+ compute_include_file_name, and arranges to pass a file_and_directory
+ object from the readers down to this function. It also changes the
+ partial symtab reader to use find_file_and_directory, rather than
+ reimplement this functionality by hand.
+
+ Rename and refactor psymtab_include_file_name
+ In order to fix an index-related regression, I want to use
+ psymtab_include_file_name in the DWARF index file-handling code. This
+ patch renames this function and changes it to no longer require a
+ partial symtab to be passed in. A subsequent patch will further
+ refactor this code to remove the redundant parameter (which was always
+ there but is now more obvious).
+
+2021-07-17 Sergey Belyashov <Sergey.Belyashov@gmail.com>
+
+ Add basic Z80 CPU support
+ Supported ISAs:
+ - Z80 (all undocumented instructions)
+ - Z180
+ - eZ80 (Z80 mode only)
+
+ Datasheets:
+ Z80: https://www.zilog.com/manage_directlink.php?filepath=docs/z80/um0080&extn=.pdf
+ Z180: https://www.zilog.com/manage_directlink.php?filepath=docs/z180/ps0140&extn=.pdf
+ eZ80: http://www.zilog.com/force_download.php?filepath=YUhSMGNEb3ZMM2QzZHk1NmFXeHZaeTVqYjIwdlpHOWpjeTlWVFRBd056Y3VjR1Jt
+
+ To debug Z80 programs using GDB you must configure and embed
+ z80-stub.c to your program (SDCC compiler is required). Or
+ you may use some simulator with GDB support.
+
+ gdb/ChangeLog:
+
+ * Makefile.in (ALL_TARGET_OBS): Add z80-tdep.c.
+ * NEWS: Mention z80 support.
+ * configure.tgt: Handle z80*.
+ * features/Makefile (XMLTOC): Add z80.xml.
+ * features/z80-cpu.xml: New.
+ * features/z80.c: Generate.
+ * features/z80.xml: New.
+ * z80-tdep.c: New file.
+ * z80-tdep.h: New file.
+
+ gdb/stubs/ChangeLog:
+
+ * z80-stub.c: New file.
+
+ Change-Id: Id0b7a6e210c3f93c6853c5e3031b7bcee47d0db9
+
+2021-07-17 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make all_inferiors_safe actually work
+ The test gdb.threads/fork-plus-threads.exp fails since 08bdefb58b78
+ ("gdb: make inferior_list use intrusive_list"):
+
+ FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: only inferior 1 left
+
+ Looking at the log, we see that we are left with a bunch of inferiors in
+ the detach-on-fork=off case:
+
+ info inferiors^M
+ Num Description Connection Executable ^M
+ * 1 <null> <snip>/fork-plus-threads ^M
+ 2 <null> <snip>/fork-plus-threads ^M
+ 3 <null> <snip>/fork-plus-threads ^M
+ 4 <null> <snip>/fork-plus-threads ^M
+ 5 <null> <snip>/fork-plus-threads ^M
+ 6 <null> <snip>/fork-plus-threads ^M
+ 7 <null> <snip>/fork-plus-threads ^M
+ 8 <null> <snip>/fork-plus-threads ^M
+ 9 <null> <snip>/fork-plus-threads ^M
+ 10 <null> <snip>/fork-plus-threads ^M
+ 11 <null> <snip>/fork-plus-threads ^M
+ (gdb) FAIL: gdb.threads/fork-plus-threads.exp: detach-on-fork=off: only inferior 1 left
+
+ when we expect to have just one. The problem is prune_inferiors not
+ pruning inferiors. And this is caused by all_inferiors_safe not
+ actually iterating on inferiors. The current implementation:
+
+ inline all_inferiors_safe_range
+ all_inferiors_safe ()
+ {
+ return {};
+ }
+
+ default-constructs an all_inferiors_safe_range, which default-constructs
+ an all_inferiors_safe_iterator as its m_begin field, which
+ default-constructs a all_inferiors_iterator. A default-constructed
+ all_inferiors_iterator is an end iterator, which means we have
+ constructed an (end,end) all_inferiors_safe_range.
+
+ We actually need to pass down the list on which we want to iterator
+ (that is the inferior_list global), so that all_inferiors_iterator's
+ first constructor is chosen. We also pass nullptr as the proc_target
+ filter. In this case, we don't do any filtering, but if in the future
+ all_inferiors_safe needed to allow filtering on process target (like
+ all_inferiors does), we could pass down a process target pointer.
+
+ basic_safe_iterator's constructor needs to be changed to allow
+ constructing the wrapped iterator with multiple arguments, not just one.
+
+ With this, gdb.threads/fork-plus-threads.exp is passing once again for
+ me.
+
+ Change-Id: I650552ede596e3590c4b7606ce403690a0278a01
+
+2021-07-17 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-16 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb: Support stepping out from signal handler on riscv*-linux
+ Currently, gdb cannot step outside of a signal handler on RISC-V
+ platforms. This causes multiple failures in gdb.base/sigstep.exp:
+
+ FAIL: gdb.base/sigstep.exp: continue to handler, nothing in handler, step from handler: leave handler (timeout)
+ FAIL: gdb.base/sigstep.exp: continue to handler, si+advance in handler, step from handler: leave handler (timeout)
+ FAIL: gdb.base/sigstep.exp: continue to handler, nothing in handler, next from handler: leave handler (timeout)
+ FAIL: gdb.base/sigstep.exp: continue to handler, si+advance in handler, next from handler: leave handler (timeout)
+ FAIL: gdb.base/sigstep.exp: stepi from handleri: leave signal trampoline
+ FAIL: gdb.base/sigstep.exp: nexti from handleri: leave signal trampoline
+
+ === gdb Summary ===
+
+ # of expected passes 587
+ # of unexpected failures 6
+
+ This patch adds support for stepping outside of a signal handler on
+ riscv*-*-linux*.
+
+ Implementation is heavily inspired from mips_linux_syscall_next_pc and
+ surroundings as advised by Pedro Alves.
+
+ After this patch, all tests in gdb.base/sigstep.exp pass.
+
+ Build and tested on riscv64-linux-gnu.
+
+2021-07-16 Lancelot SIX <lsix@lancelotsix.com>
+
+ gdb/testsuite: Declare that riscv*-*-linux* cannot hardware_single_step
+ Many tests fail in gdb/testsuite/gdb.base/sigstep.exp on
+ riscv64-linux-gnu. Those tests check that when stepping, if the
+ debuggee received a signal it should step inside the signal handler.
+
+ This feature requires hardware support for single stepping (or at least
+ kernel support), but none are available on riscv*-linux-gnu hosts, at
+ the moment at least.
+
+ This patch adds RISC-V to the list of configurations that does not
+ have hardware single step capability, disabling tests relying on such
+ feature.
+
+ Tested on riscv64-linux-gnu.
+
+2021-07-16 Tom Tromey <tom@tromey.com>
+
+ Document quick_symbol_functions::expand_symtabs_matching invariant
+ While working on my series to replace the DWARF psymbol reader, I
+ noticed that the expand_symtabs_matching has an undocumented
+ invariant. I think that, if this invariant is not followed, then GDB
+ will crash. So, this patch documents this in the relevant spots and
+ introduces some asserts to make it clear.
+
+ Regression tested on x86-64 Fedora 32.
+
+2021-07-16 Tom Tromey <tromey@adacore.com>
+
+ Fix array stride bug
+ Investigation of using the Python API with an Ada program showed that
+ an array of dynamic types was not being handled properly. I tracked
+ this down to an oddity of how array strides are handled.
+
+ In gdb, an array stride can be attached to the range type, via the
+ range_bounds object. However, the stride can also be put into the
+ array's first field. From create_range_type_with_stride:
+
+ else if (bit_stride > 0)
+ TYPE_FIELD_BITSIZE (result_type, 0) = bit_stride;
+
+ It's hard to be sure why this is done, but I would guess a combination
+ of historical reasons plus a desire (mentioned in a comment somewhere)
+ to avoid modifying the range type.
+
+ This patch fixes the problem by changing type::bit_stride to
+ understand this convention. It also fixes one spot that reproduces
+ this logic.
+
+ Regression tested on x86-64 Fedora 32.
+
+2021-07-16 Giulio Benetti <giulio.benetti@benettiengineering.com>
+
+ or1k: fix pc-relative relocation against dynamic on PC relative 26 bit relocation.
+ bfd * elf32-or1k.c (or1k_elf_relocate_section): Use a separate entry
+ in switch case R_OR1K_INSN_REL_26 where we need to check for
+ !SYMBOL_CALLS_LOCAL() instead of !SYMBOL_REFERENCES_LOCAL().
+
+2021-07-16 Nick Clifton <nickc@redhat.com>
+
+ Updated Swedish translation for the binutils sub-directory
+
+2021-07-16 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-15 Tom Tromey <tromey@adacore.com>
+
+ Avoid expression parsing crash with unknown language
+ PR gdb/28093 points out that gdb crashes when language is set to
+ "unknown" and expression parsing is attempted. At first I thought
+ this was a regression due to the expression rewrite, but it turns out
+ that older versions crash as well.
+
+ This patch avoids the crash by changing the default expression parser
+ to throw an exception. I think this is preferable -- the current
+ behavior of silently doing nothing does not really make sense.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28093
+
+2021-07-15 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: pass child_ptid and fork kind to target_ops::follow_fork
+ This is a small cleanup I think would be nice, that I spotted while
+ doing the following patch.
+
+ gdb/ChangeLog:
+
+ * target.h (struct target_ops) <follow_fork>: Add ptid and
+ target_waitkind parameters.
+ (target_follow_fork): Likewise.
+ * target.c (default_follow_fork): Likewise.
+ (target_follow_fork): Likewise.
+ * fbsd-nat.h (class fbsd_nat_target) <follow_fork>: Likewise.
+ * fbsd-nat.c (fbsd_nat_target::follow_fork): Likewise.
+ * linux-nat.h (class linux_nat_target) <follow_fork>: Likewise.
+ * linux-nat.c (linux_nat_target::follow_fork): Likewise.
+ * obsd-nat.h (class obsd_nat_target) <follow_fork>: Likewise.
+ * obsd-nat.c (obsd_nat_target::follow_fork): Likewise.
+ * remote.c (class remote_target) <follow_fork>: Likewise.
+ * target-debug.h (target_debug_print_target_waitkind): New.
+ * target-delegates.c: Re-generate.
+
+ Change-Id: I5421a542f2e19100a22b74cc333d2b235d0de3c8
+
+2021-07-15 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: call post_create_inferior at end of follow_fork_inferior
+ GDB doesn't handle well the case of an inferior using the JIT interface
+ to register JIT-ed objfiles and forking. If an inferior registers a
+ code object using the JIT interface and then forks, the child process
+ conceptually has the same code object loaded, so GDB should look it up
+ and learn about it (it currently doesn't).
+
+ To achieve this, I think it would make sense to have the
+ inferior_created observable called when an inferior is created due to a
+ fork in follow_fork_inferior. The inferior_created observable is
+ currently called both after starting a new inferior and after attaching
+ to an inferior, allowing various sub-components to learn about that new
+ executing inferior. We can see handling a fork child just like
+ attaching to it, so any work done when attaching should also be done in
+ the case of a fork child.
+
+ Instead of just calling the inferior_created observable, this patch
+ makes follow_fork_inferior call the whole post_create_inferior function.
+ This way, the attach and follow-fork code code paths are more alike.
+
+ Given that post_create_inferior calls solib_create_inferior_hook,
+ follow_fork_inferior doesn't need to do it itself, so those calls to
+ solib_create_inferior_hook are removed.
+
+ One question you may have: why not just call post_create_inferior at the
+ places where solib_create_inferior_hook is currently called, instead of
+ after target_follow_fork?
+
+ - there's something fishy for the second solib_create_inferior_hook
+ call site: at this point we have switched the current program space
+ to the child's, but not the current inferior nor the current thread.
+ So solib_create_inferior_hook (and everything under, including
+ check_for_thread_db, for example) is called with inferior 1 as the
+ current inferior and inferior 2's program space as the current
+ program space. I think that's wrong, because at this point we are
+ setting up inferior 2, and all that code relies on the current
+ inferior. We could just add a switch_to_thread call before it to
+ make inferior 2 the current one, but there are other problems (see
+ below).
+
+ - solib_create_inferior_hook is currently not called on the
+ `follow_child && detach_fork` path. I think we need to call it,
+ because we still get a new inferior in that case (even though we
+ detach the parent). If we only call post_create_inferior where
+ solib_create_inferior_hook used to be called, then the JIT
+ subcomponent doesn't get informed about the new inferior, and that
+ introduces a failure in the new gdb.base/jit-elf-fork.exp test.
+
+ - if we try to put the post_create_inferior just after the
+ switch_to_thread that was originally at line 662, or just before the
+ call to target_follow_fork, we introduce a subtle failure in
+ gdb.threads/fork-thread-pending.exp. What happens then is that
+ libthread_db gets loaded (somewhere under post_create_inferior)
+ before the linux-nat target learns about the LWPs (which happens in
+ linux_nat_target::follow_fork). As a result, the ALL_LWPS loop in
+ try_thread_db_load_1 doesn't see the child LWP, and the thread-db
+ target doesn't have the chance to fill in thread_info::priv. A bit
+ later, when the test does "info threads", and
+ thread_db_target::pid_to_str is called, the thread-db target doesn't
+ recognize the thread as one of its own, and delegates the request to
+ the target below. Because the pid_to_str output is not the expected
+ one, the test fails.
+
+ This tells me that we need to call the process target's follow_fork
+ first, to make the process target create the necessary LWP and thread
+ structures. Then, we can call post_create_inferior to let the other
+ components of GDB do their thing.
+
+ But then you may ask: check_for_thread_db is already called today,
+ somewhere under solib_create_inferior_hook, and that is before
+ target_follow_fork, why don't we see this ordering problem!? Well,
+ because of the first bullet point: when check_for_thread_db /
+ thread_db_load are called, the current inferior is (erroneously)
+ inferior 1, the parent. Because libthread_db is already loaded for
+ the parent, thread_db_load early returns. check_for_thread_db later
+ gets called by linux_nat_target::follow_fork. At this point, the
+ current inferior is the correct one and the child's LWP exists, so
+ all is well.
+
+ Since we now call post_create_inferior after target_follow_fork, which
+ calls the inferior_created observable, which calls check_for_thread_db,
+ I don't think linux_nat_target needs to explicitly call
+ check_for_thread_db itself, so that is removed.
+
+ In terms of testing, this patch adds a new gdb.base/jit-elf-fork.exp
+ test. It makes an inferior register a JIT code object and then fork.
+ It then verifies that whatever the detach-on-fork and follow-fork-child
+ parameters are, GDB knows about the JIT code object in all the inferiors
+ that survive the fork. It verifies that the inferiors can unload that
+ code object.
+
+ There isn't currently a way to get visibility into GDB's idea of the JIT
+ code objects for each inferior. For the purpose of this test, add the
+ "maintenance info jit" command. There isn't much we can print about the
+ JIT code objects except their load address. So the output looks a bit
+ bare, but it's good enough for the test.
+
+ gdb/ChangeLog:
+
+ * NEWS: Mention "maint info jit" command.
+ * infrun.c (follow_fork_inferior): Don't call
+ solib_create_inferior_hook, call post_create_inferior if a new
+ inferior was created.
+ * jit.c (maint_info_jit_cmd): New.
+ (_initialize_jit): Register new command.
+ * linux-nat.c (linux_nat_target::follow_fork): Don't call
+ check_for_thread_db.
+ * linux-nat.h (check_for_thread_db): Remove declaration.
+ * linux-thread-db.c (check_thread_signals): Make static.
+
+ gdb/doc/ChangeLog:
+
+ * gdb.texinfo (Maintenance Commands): Mention "maint info jit".
+
+ gdb/testsuite/ChangeLog:
+
+ * gdb.base/jit-elf-fork-main.c: New test.
+ * gdb.base/jit-elf-fork-solib.c: New test.
+ * gdb.base/jit-elf-fork.exp: New test.
+
+ Change-Id: I9a192e55b8a451c00e88100669283fc9ca60de5c
+
+2021-07-15 Libor Bukata <libor.bukata@oracle.com>
+
+ [gdb/procfs.c] Fix build failure in find_stop_signal
+ It fixes a regression caused by commit
+ 1edb66d856c82c389edfd7610143236a68c76846 where thread_info::suspend was
+ made private.
+
+ The public thread_info API has to be used to get stop signal and avoid
+ build failures.
+
+ gdb/ChangeLog:
+
+ 2021-07-14 Libor Bukata <libor.bukata@oracle.com>
+
+ * gdb/procfs.c (find_stop_signal): Use thread_info API.
+
+ Change-Id: I53bc57a05cd0eca5f28ef0726d6faeeb306e7904
+
+2021-07-15 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-14 H.J. Lu <hjl.tools@gmail.com>
+
+ x86: Add int1 as one byte opcode 0xf1
+ Also change the x86 disassembler to disassemble 0xf1 as int1, instead of
+ icebp.
+
+ gas/
+
+ PR gas/28088
+ * testsuite/gas/i386/opcode.s: Add int1.
+ * testsuite/gas/i386/x86-64-opcode.s: Add int1, int3 and int.
+ * testsuite/gas/i386/opcode-intel.d: Updated.
+ * testsuite/gas/i386/opcode-suffix.d: Likewise.
+ * testsuite/gas/i386/opcode.d: Likewise.
+ * testsuite/gas/i386/x86-64-opcode.d: Likewise.
+
+ opcodes/
+
+ PR gas/28088
+ * i386-dis.c (dis386): Replace icebp with int1.
+ * i386-opc.tbl: Add int1.
+ * i386-tbl.h: Regenerate.
+
+2021-07-14 Alan Modra <amodra@gmail.com>
+
+ gas: default TC_VALIDATE_FIX_SUB to 0
+ gas/write.c provides a fallback TC_VALIDATE_FIX_SUB define that can be
+ a problem for some targets, the problem being that a non-zero
+ definition of TC_VALIDATE_FIX_SUB says that some uses of fx_subsy are
+ OK, in effect that the target will handle fx_subsy in md_apply_fix
+ and/or tc_gen_reloc. A lot of targets don't have the necessary
+ md_apply_fix and tc_gen_reloc support. So a safer default is to
+ disallow fx_subsy by default.
+
+ I've had a good look over target usage of fx_subsy, and think I've
+ caught all the cases where targets need TC_VALIDATE_FIX_SUB. Possible
+ failures would be limited to alpha, microblaze, ppc and s390 (the
+ targets that define UNDEFINED_DIFFERENCE_OK), or targets that generate
+ fixups with BFD_RELOC_GPREL32/16 and use a syntax explicitly showing
+ a difference expression.
+
+ * write.c (TC_VALIDATE_FIX_SUB): Default to 0.
+ * config/tc-hppa.h (TC_VALIDATE_FIX_SUB): Define.
+ * config/tc-microblaze.h (TC_VALIDATE_FIX_SUB): Define.
+ * config/tc-alpha.h (TC_VALIDATE_FIX_SUB): Define for ECOFF.
+ * config/tc-ppc.h (TC_VALIDATE_FIX_SUB): Don't define for ELF.
+ Do define for XCOFF.
+
+2021-07-14 Clément Chigot <clement.chigot@atos.net>
+
+ objdump: add DWARF support for AIX
+ DWARF sections have special names on AIX which need be handled
+ by objdump in order to correctly print them.
+ This patch also adds the correlation in bfd for future uses.
+
+ bfd/
+ * libxcoff.h (struct xcoff_dwsect_name): Add DWARF name.
+ * coff-rs6000.c (xcoff_dwsect_names): Update.
+ * coffcode.h (sec_to_styp_flags): Likewise.
+ (coff_new_section_hook): Likewise.
+ binutils/
+ * dwarf.h (struct dwarf_section): Add XCOFF name.
+ * dwarf.c (struct dwarf_section_display): Update.
+ * objdump.c (load_debug_section): Add XCOFF name handler.
+ (dump_dwarf_section): Likewise.
+ gas/
+ * config/tc-ppc.c (ppc_change_debug_section): Update to
+ match new name's field.
+
+2021-07-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.base/gold-gdb-index.exp
+ When running test-case gdb.base/gold-gdb-index.exp on openSUSE Tumbleweed,
+ I run into:
+ ...
+ FAIL: gdb.base/gold-gdb-index.exp: maint info symtabs
+ ...
+
+ This is due to a dummy .gdb_index:
+ ...
+ Contents of the .gdb_index section:
+
+ Version 7
+
+ CU table:
+
+ TU table:
+
+ Address table:
+
+ Symbol table:
+ ...
+
+ The dummy .gdb_index is ignored when loading the symbols, and instead partial
+ symbols are used. Consequently, we get the same result as if we'd removed
+ -Wl,--gdb-index from the compilation.
+
+ Presumably, gold fails to generate a proper .gdb_index because it lacks
+ DWARF5 support.
+
+ Anyway, without a proper .gdb_index we can't test the gdb behaviour we're
+ trying to excercise. Fix this by detecting whether we actually used a
+ .gdb_index for symbol loading.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-14 Tom de Vries <tdevries@suse.de>
+
+ * lib/gdb.exp (have_index): New proc.
+ * gdb.base/gold-gdb-index.exp: Use have_index.
+
+2021-07-14 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Add missing skip_tui_tests
+ When building gdb with --disable-tui, we run into:
+ ...
+ (gdb) frame apply all -- -^M
+ Undefined command: "-". Try "help".^M
+ (gdb) ERROR: Undefined command "frame apply all -- -".
+ UNRESOLVED: gdb.base/options.exp: test-frame-apply: frame apply all -- -
+ ...
+
+ Fix this by detecting whether tui is supported, and skipping the tui-related
+ tests otherwise. Same in some gdb.tui test-cases.
+
+ Tested on x86_64-linux.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-13 Tom de Vries <tdevries@suse.de>
+
+ * gdb.base/options.exp: Skip tui-related tests when tui is not
+ supported.
+ * gdb.python/tui-window-disabled.exp: Same.
+ * gdb.python/tui-window.exp: Same.
+
+2021-07-14 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-13 Lancelot SIX <lsix@lancelotsix.com>
+
+ Use /bin/sh as shebang in gdb/make-init-c
+ While testing the NixOS[1] packaging for gdb-11.0.90.tar.xz, I got the
+ following error:
+
+ [...]
+ CXX aarch32-tdep.o
+ CXX gdb.o
+ GEN init.c
+ /nix/store/26a78ync552m8j4sbjavhvkmnqir8c9y-bash-4.4-p23/bin/bash: ./make-init-c: /usr/bin/env: bad interpreter: No such file or directory
+ make[2]: *** [Makefile:1866: stamp-init] Error 126
+ make[2]: *** Waiting for unfinished jobs....
+ make[2]: Leaving directory '/build/gdb-11.0.90/gdb'
+ make[1]: *** [Makefile:9814: all-gdb] Error 2
+ make[1]: Leaving directory '/build/gdb-11.0.90'
+ make: *** [Makefile:903: all] Error 2
+ builder for '/nix/store/xs8my3rrc3l4kdlbpx0azh6q0v0jxphr-gdb-gdb-11.0.90.drv' failed with exit code 2
+ error: build of '/nix/store/xs8my3rrc3l4kdlbpx0azh6q0v0jxphr-gdb-gdb-11.0.90.drv' failed
+
+ In the nix build environment, /usr/bin/env is not present, only /bin/sh
+ is. This patch makes sure that gdb/make-init-c uses '/bin/sh' as
+ interpreter as this is the only one available on this platform.
+
+ I do not think this change will cause regressions on any other
+ configuration.
+
+ [1] https://nixos.org/
+
+ gdb/Changelog
+
+ * make-init-c: Use /bin/sh as shebang.
+
+2021-07-13 John Baldwin <jhb@FreeBSD.org>
+
+ arm-fbsd-nat: Use fetch_register_set and store_register_set.
+
+ aarch64-fbsd-nat: Use fetch_register_set and store_register_set.
+
+ riscv-fbsd-nat: Use fetch_register_set and store_register_set.
+
+ fbsd-nat: Add helper functions to fetch and store register sets.
+ In particular, this supports register sets described by a regcache_map
+ which are fetched and stored with dedicated ptrace operations. These
+ functions are intended to be used in architecture-specific
+ fetch_registers and store_registers target methods.
+
+ Add regcache_map_supplies helper routine.
+ This helper can be used in the fetch_registers and store_registers
+ target methods to determine if a register set includes a specific
+ register.
+
+2021-07-13 Pedro Alves <pedro@palves.net>
+
+ Avoid letting exceptions escape gdb_bfd_iovec_fileio_close (PR gdb/28080)
+ Before PR gdb/28080 was fixed by the previous patch, GDB was crashing
+ like this:
+
+ (gdb) detach
+ Detaching from program: target:/any/program, process 3671843
+ Detaching from process 3671843
+ Ending remote debugging.
+ [Inferior 1 (process 3671843) detached]
+ In main
+ terminate called after throwing an instance of 'gdb_exception_error'
+ Aborted (core dumped)
+
+ Here's the exception above being thrown:
+
+ (top-gdb) bt
+ #0 throw_error (error=TARGET_CLOSE_ERROR, fmt=0x555556035588 "Remote connection closed") at src/gdbsupport/common-exceptions.cc:222
+ #1 0x0000555555bbaa46 in remote_target::readchar (this=0x555556a11040, timeout=10000) at src/gdb/remote.c:9440
+ #2 0x0000555555bbb9e5 in remote_target::getpkt_or_notif_sane_1 (this=0x555556a11040, buf=0x555556a11058, forever=0, expecting_notif=0, is_notif=0x0) at src/gdb/remote.c:9928
+ #3 0x0000555555bbbda9 in remote_target::getpkt_sane (this=0x555556a11040, buf=0x555556a11058, forever=0) at src/gdb/remote.c:10030
+ #4 0x0000555555bc0e75 in remote_target::remote_hostio_send_command (this=0x555556a11040, command_bytes=13, which_packet=14, remote_errno=0x7fffffffcfd0, attachment=0x0, attachment_len=0x0) at src/gdb/remote.c:12137
+ #5 0x0000555555bc1b6c in remote_target::remote_hostio_close (this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12455
+ #6 0x0000555555bc1bb4 in remote_target::fileio_close (During symbol reading: .debug_line address at offset 0x64f417 is 0 [in module build/gdb/gdb]
+ this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12462
+ #7 0x0000555555c9274c in target_fileio_close (fd=3, target_errno=0x7fffffffcfd0) at src/gdb/target.c:3365
+ #8 0x000055555595a19d in gdb_bfd_iovec_fileio_close (abfd=0x555556b9f8a0, stream=0x555556b11530) at src/gdb/gdb_bfd.c:439
+ #9 0x0000555555e09e3f in opncls_bclose (abfd=0x555556b9f8a0) at src/bfd/opncls.c:599
+ #10 0x0000555555e0a2c7 in bfd_close_all_done (abfd=0x555556b9f8a0) at src/bfd/opncls.c:847
+ #11 0x0000555555e0a27a in bfd_close (abfd=0x555556b9f8a0) at src/bfd/opncls.c:814
+ #12 0x000055555595a9d3 in gdb_bfd_close_or_warn (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:626
+ #13 0x000055555595ad29 in gdb_bfd_unref (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:715
+ #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=<optimized out>) at src/gdb/objfiles.c:573
+ #15 0x0000555555ae955a in std::_Sp_counted_ptr<objfile*, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:377
+ #16 0x000055555572b7c8 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:155
+ #17 0x00005555557263c3 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x555556bf0588, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/shared_ptr_base.h:730
+ #18 0x0000555555ae745e in std::__shared_ptr<objfile, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x555556bf0580, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/shared_ptr_base.h:1169
+ #19 0x0000555555ae747e in std::shared_ptr<objfile>::~shared_ptr (this=0x555556bf0580, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/shared_ptr.h:103
+ #20 0x0000555555b1c1dc in __gnu_cxx::new_allocator<std::_List_node<std::shared_ptr<objfile> > >::destroy<std::shared_ptr<objfile> > (this=0x5555564cdd60, __p=0x555556bf0580) at /usr/include/c++/9/ext/new_allocator.h:153
+ #21 0x0000555555b1bb1d in std::allocator_traits<std::allocator<std::_List_node<std::shared_ptr<objfile> > > >::destroy<std::shared_ptr<objfile> > (__a=..., __p=0x555556bf0580) at /usr/include/c++/9/bits/alloc_traits.h:497
+ #22 0x0000555555b1b73e in std::__cxx11::list<std::shared_ptr<objfile>, std::allocator<std::shared_ptr<objfile> > >::_M_erase (this=0x5555564cdd60, __position=std::shared_ptr<objfile> (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/stl_list.h:1921
+ #23 0x0000555555b1afeb in std::__cxx11::list<std::shared_ptr<objfile>, std::allocator<std::shared_ptr<objfile> > >::erase (this=0x5555564cdd60, __position=std::shared_ptr<objfile> (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/list.tcc:158
+ #24 0x0000555555b19576 in program_space::remove_objfile (this=0x5555564cdd20, objfile=0x555556515540) at src/gdb/progspace.c:210
+ #25 0x0000555555ae4502 in objfile::unlink (this=0x555556515540) at src/gdb/objfiles.c:487
+ #26 0x0000555555ae5a12 in objfile_purge_solibs () at src/gdb/objfiles.c:875
+ #27 0x0000555555c09686 in no_shared_libraries (ignored=0x0, from_tty=1) at src/gdb/solib.c:1236
+ #28 0x00005555559e3f5f in detach_command (args=0x0, from_tty=1) at src/gdb/infcmd.c:2769
+
+ Note frame #14:
+
+ #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=<optimized out>) at src/gdb/objfiles.c:573
+
+ That's a dtor, thus noexcept. That's the reason for the
+ std::terminate.
+
+ The previous patch fixed things such that the exception above isn't
+ thrown anymore. However, it's possible that e.g., the remote
+ connection drops just while a user types "nosharedlibrary", or some
+ other reason that leads to objfile::~objfile, and then we end up the
+ same std::terminate problem.
+
+ Also notice that frames #9-#11 are BFD frames:
+
+ #9 0x0000555555e09e3f in opncls_bclose (abfd=0x555556bc27e0) at src/bfd/opncls.c:599
+ #10 0x0000555555e0a2c7 in bfd_close_all_done (abfd=0x555556bc27e0) at src/bfd/opncls.c:847
+ #11 0x0000555555e0a27a in bfd_close (abfd=0x555556bc27e0) at src/bfd/opncls.c:814
+
+ BFD is written in C and thus throwing exceptions over such frames may
+ either not clean up properly, or, may abort if bfd is not compiled
+ with -fasynchronous-unwind-tables (x86-64 defaults that on, but not
+ all GCC ports do).
+
+ Thus frame #8 seems like a good place to swallow exceptions. More so
+ since in this spot we already ignore target_fileio_close return
+ errors. That's what this commit does. Without the previous fix, we'd
+ see:
+
+ (gdb) detach
+ Detaching from program: target:/any/program, process 2197701
+ Ending remote debugging.
+ [Inferior 1 (process 2197701) detached]
+ warning: cannot close "target:/lib64/ld-linux-x86-64.so.2": Remote connection closed
+
+ Note it prints a warning, which would still be a regression compared
+ to GDB 10, if it weren't for the previous fix.
+
+ gdb/ChangeLog:
+ yyyy-mm-dd Pedro Alves <pedro@palves.net>
+
+ PR gdb/28080
+ * gdb_bfd.c (gdb_bfd_close_warning): New.
+ (gdb_bfd_iovec_fileio_close): Wrap target_fileio_close in
+ try/catch and print warning on exception.
+ (gdb_bfd_close_or_warn): Use gdb_bfd_close_warning.
+
+ Change-Id: Ic7a26ddba0a4444e3377b0e7c1c89934a84545d7
+
+2021-07-13 Pedro Alves <pedro@palves.net>
+
+ Fix detach with target remote (PR gdb/28080)
+ Commit 408f66864a1a823591b26420410c982174c239a2 ("detach in all-stop
+ with threads running") regressed "detach" with "target remote":
+
+ (gdb) detach
+ Detaching from program: target:/any/program, process 3671843
+ Detaching from process 3671843
+ Ending remote debugging.
+ [Inferior 1 (process 3671843) detached]
+ In main
+ terminate called after throwing an instance of 'gdb_exception_error'
+ Aborted (core dumped)
+
+ Here's the exception above being thrown:
+
+ (top-gdb) bt
+ #0 throw_error (error=TARGET_CLOSE_ERROR, fmt=0x555556035588 "Remote connection closed") at src/gdbsupport/common-exceptions.cc:222
+ #1 0x0000555555bbaa46 in remote_target::readchar (this=0x555556a11040, timeout=10000) at src/gdb/remote.c:9440
+ #2 0x0000555555bbb9e5 in remote_target::getpkt_or_notif_sane_1 (this=0x555556a11040, buf=0x555556a11058, forever=0, expecting_notif=0, is_notif=0x0) at src/gdb/remote.c:9928
+ #3 0x0000555555bbbda9 in remote_target::getpkt_sane (this=0x555556a11040, buf=0x555556a11058, forever=0) at src/gdb/remote.c:10030
+ #4 0x0000555555bc0e75 in remote_target::remote_hostio_send_command (this=0x555556a11040, command_bytes=13, which_packet=14, remote_errno=0x7fffffffcfd0, attachment=0x0, attachment_len=0x0) at src/gdb/remote.c:12137
+ #5 0x0000555555bc1b6c in remote_target::remote_hostio_close (this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12455
+ #6 0x0000555555bc1bb4 in remote_target::fileio_close (During symbol reading: .debug_line address at offset 0x64f417 is 0 [in module build/gdb/gdb]
+ this=0x555556a11040, fd=8, remote_errno=0x7fffffffcfd0) at src/gdb/remote.c:12462
+ #7 0x0000555555c9274c in target_fileio_close (fd=3, target_errno=0x7fffffffcfd0) at src/gdb/target.c:3365
+ #8 0x000055555595a19d in gdb_bfd_iovec_fileio_close (abfd=0x555556b9f8a0, stream=0x555556b11530) at src/gdb/gdb_bfd.c:439
+ #9 0x0000555555e09e3f in opncls_bclose (abfd=0x555556b9f8a0) at src/bfd/opncls.c:599
+ #10 0x0000555555e0a2c7 in bfd_close_all_done (abfd=0x555556b9f8a0) at src/bfd/opncls.c:847
+ #11 0x0000555555e0a27a in bfd_close (abfd=0x555556b9f8a0) at src/bfd/opncls.c:814
+ #12 0x000055555595a9d3 in gdb_bfd_close_or_warn (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:626
+ #13 0x000055555595ad29 in gdb_bfd_unref (abfd=0x555556b9f8a0) at src/gdb/gdb_bfd.c:715
+ #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=<optimized out>) at src/gdb/objfiles.c:573
+ #15 0x0000555555ae955a in std::_Sp_counted_ptr<objfile*, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:377
+ #16 0x000055555572b7c8 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x555556c20db0) at /usr/include/c++/9/bits/shared_ptr_base.h:155
+ #17 0x00005555557263c3 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=0x555556bf0588, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/shared_ptr_base.h:730
+ #18 0x0000555555ae745e in std::__shared_ptr<objfile, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=0x555556bf0580, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/shared_ptr_base.h:1169
+ #19 0x0000555555ae747e in std::shared_ptr<objfile>::~shared_ptr (this=0x555556bf0580, __in_chrg=<optimized out>) at /usr/include/c++/9/bits/shared_ptr.h:103
+ #20 0x0000555555b1c1dc in __gnu_cxx::new_allocator<std::_List_node<std::shared_ptr<objfile> > >::destroy<std::shared_ptr<objfile> > (this=0x5555564cdd60, __p=0x555556bf0580) at /usr/include/c++/9/ext/new_allocator.h:153
+ #21 0x0000555555b1bb1d in std::allocator_traits<std::allocator<std::_List_node<std::shared_ptr<objfile> > > >::destroy<std::shared_ptr<objfile> > (__a=..., __p=0x555556bf0580) at /usr/include/c++/9/bits/alloc_traits.h:497
+ #22 0x0000555555b1b73e in std::__cxx11::list<std::shared_ptr<objfile>, std::allocator<std::shared_ptr<objfile> > >::_M_erase (this=0x5555564cdd60, __position=std::shared_ptr<objfile> (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/stl_list.h:1921
+ #23 0x0000555555b1afeb in std::__cxx11::list<std::shared_ptr<objfile>, std::allocator<std::shared_ptr<objfile> > >::erase (this=0x5555564cdd60, __position=std::shared_ptr<objfile> (expired, weak count 1) = {get() = 0x555556515540}) at /usr/include/c++/9/bits/list.tcc:158
+ #24 0x0000555555b19576 in program_space::remove_objfile (this=0x5555564cdd20, objfile=0x555556515540) at src/gdb/progspace.c:210
+ #25 0x0000555555ae4502 in objfile::unlink (this=0x555556515540) at src/gdb/objfiles.c:487
+ #26 0x0000555555ae5a12 in objfile_purge_solibs () at src/gdb/objfiles.c:875
+ #27 0x0000555555c09686 in no_shared_libraries (ignored=0x0, from_tty=1) at src/gdb/solib.c:1236
+ #28 0x00005555559e3f5f in detach_command (args=0x0, from_tty=1) at src/gdb/infcmd.c:2769
+
+ So frame #28 already detached the remote process, and then we're
+ purging the shared libraries. GDB had opened remote shared libraries
+ via the target: sysroot, so it tries closing them. GDBserver is
+ tearing down already, so remote communication breaks down and we close
+ the remote target and throw TARGET_CLOSE_ERROR.
+
+ Note frame #14:
+
+ #14 0x0000555555ae4730 in objfile::~objfile (this=0x555556515540, __in_chrg=<optimized out>) at src/gdb/objfiles.c:573
+
+ That's a dtor, thus noexcept. That's the reason for the
+ std::terminate.
+
+ Stepping back a bit, why do we still have open remote files if we've
+ managed to detach already, and, we're debugging with "target remote"?
+ The reason is that commit 408f66864a1a823591b26420410c982174c239a2
+ makes detach_command hold a reference to the target, so the remote
+ target won't be finally closed until frame #28 returns. It's closing
+ the target that invalidates target file I/O handles.
+
+ This commit fixes the issue by not relying on target_close to
+ invalidate the target file I/O handles, instead invalidate them
+ immediately in remote_unpush_target. So when GDB purges the solibs,
+ and we end up in target_fileio_close (frame #7 above), there's nothing
+ to do, and we don't try to talk with the remote target anymore.
+
+ The regression isn't seen when testing with
+ --target_board=native-gdbserver, because that does "set sysroot" to
+ disable the "target:" sysroot, for test run speed reasons. So this
+ commit adds a testcase that explicitly tests detach with "set sysroot
+ target:".
+
+ gdb/ChangeLog:
+ yyyy-mm-dd Pedro Alves <pedro@palves.net>
+
+ PR gdb/28080
+ * remote.c (remote_unpush_target): Invalidate file I/O target
+ handles.
+ * target.c (fileio_handles_invalidate_target): Make extern.
+ * target.h (fileio_handles_invalidate_target): Declare.
+
+ gdb/testsuite/ChangeLog:
+ yyyy-mm-dd Pedro Alves <pedro@palves.net>
+
+ PR gdb/28080
+ * gdb.base/detach-sysroot-target.exp: New.
+ * gdb.base/detach-sysroot-target.c: New.
+
+ Reported-By: Jonah Graham <jonah@kichwacoders.com>
+
+ Change-Id: I851234910172f42a1b30e731161376c344d2727d
+
+2021-07-13 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix check-libthread-db.exp FAILs with glibc 2.33
+ When running test-case gdb.threads/check-libthread-db.exp on openSUSE
+ Tumbleweed with glibc 2.33, I get:
+ ...
+ (gdb) maint check libthread-db^M
+ Running libthread_db integrity checks:^M
+ Got thread 0x7ffff7c79b80 => 9354 => 0x7ffff7c79b80; errno = 0 ... OK^M
+ libthread_db integrity checks passed.^M
+ (gdb) FAIL: gdb.threads/check-libthread-db.exp: user-initiated check: \
+ libpthread.so not initialized (pattern 2)
+ ...
+
+ The test-case expects instead:
+ ...
+ Got thread 0x0 => 9354 => 0x0 ... OK^M
+ ...
+ which is what I get on openSUSE Leap 15.2 with glibc 2.26, and what is
+ described in the test-case like this:
+ ...
+ # libthread_db should fake a single thread with th_unique == NULL.
+ ...
+
+ Using a breakpoint on check_thread_db_callback we can compare the two
+ scenarios, and find that in the latter case we hit this code in glibc function
+ iterate_thread_list in nptl_db/td_ta_thr_iter.c:
+ ...
+ if (next == 0 && fake_empty)
+ {
+ /* __pthread_initialize_minimal has not run. There is just the main
+ thread to return. We cannot rely on its thread register. They
+ sometimes contain garbage that would confuse us, left by the
+ kernel at exec. So if it looks like initialization is incomplete,
+ we only fake a special descriptor for the initial thread. */
+ td_thrhandle_t th = { ta, 0 };
+ return callback (&th, cbdata_p) != 0 ? TD_DBERR : TD_OK;
+ }
+ ...
+ while in the former case we don't because this preceding statement doesn't
+ result in next == 0:
+ ...
+ err = DB_GET_FIELD (next, ta, head, list_t, next, 0);
+ ...
+
+ Note that the comment mentions __pthread_initialize_minimal, but in both cases
+ it has already run before we hit the callback, so it's possible the comment is
+ no longer accurate.
+
+ The change in behaviour bisect to glibc commit 1daccf403b "nptl: Move stack
+ list variables into _rtld_global", which moves the initialization of stack
+ list variables such as __stack_user to an earlier moment, which explains well
+ enough the observed difference.
+
+ Fix this by updating the regexp patterns to agree with what libthread-db is
+ telling us.
+
+ Tested on x86_64-linux, both with glibc 2.33 and 2.26.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-07 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/27690
+ * gdb.threads/check-libthread-db.exp: Update patterns for glibc 2.33.
+
+2021-07-13 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ gdb, dwarf: Don't follow the parent of a subprogram to get a prefix.
+ During prefix resolution, if the parent is a subprogram, there is no need
+ to go to the parent of the subprogram. The DIE will be local.
+
+ For a program like:
+ ~~~
+ class F1
+ {
+ public:
+ int a;
+ int
+ vvv ()
+ {
+ class F2
+ {
+ int f;
+ };
+ F2 abcd;
+ return 1;
+ }
+ };
+ ~~~
+
+ The class F2 should not be seen as a member of F1.
+
+ Before:
+ ~~~
+ (gdb) ptype abcd
+ type = class F1::F2 {
+ private:
+ int f;
+ }
+ ~~~
+
+ After:
+ ~~~
+ (gdb) ptype abcd
+ type = class F2 {
+ private:
+ int f;
+ }
+ ~~~
+
+ gdb/ChangeLog:
+ 2021-06-23 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ * dwarf2/read.c (determine_prefix): Return an empty prefix if the
+ parent is a subprogram.
+
+ gdb/testsuite/ChangeLog:
+ 2021-06-23 Felix Willgerodt <felix.willgerodt@intel.com>
+
+ * gdb.cp/nested-class-func-class.cc: New file.
+ * gdb.cp/nested-class-func-class.exp: New file.
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: disable commit-resumed on -exec-interrupt --thread-group
+ As reported in PR gdb/28077, we hit an internal error when using
+ -exec-interrupt with --thread-group:
+
+ info threads
+ &"info threads\n"
+ ~" Id Target Id Frame \n"
+ ~"* 1 process 403312 \"loop\" (running)\n"
+ ^done
+ (gdb)
+ -exec-interrupt --thread-group i1
+ ~"/home/simark/src/binutils-gdb/gdb/target.c:3768: internal-error: void target_stop(ptid_t): Assertion `!proc_target->commit_resumed_state' failed.\nA problem internal to GDB has been detected,\nfurther debugging may prove unreliable.\nQuit this debugging session? (y or n) "
+
+ This is because this code path never disables commit-resumed (a
+ requirement for calling target_stop, as documented in
+ process_stratum_target::»commit_resumed_state) before calling
+ target_stop.
+
+ The other 3 code paths in mi_cmd_exec_interrupt use interrupt_target_1,
+ which does it. But the --thread-group code path uses its own thing
+ which doesn't do it. Fix this by adding a scoped_disable_commit_resumed
+ in this code path.
+
+ Calling -exec-interrupt with --thread-group is apparently not tested at
+ the moment (which is why this bug could creep in). Add a new test for
+ that. The test runs two inferiors and tries to interrupt them with
+ "-exec-interrupt --thread-group X".
+
+ This will need to be merged in the gdb-11-branch, so here are ChangeLog
+ entries:
+
+ gdb/ChangeLog:
+
+ * mi/mi-main.c (mi_cmd_exec_interrupt): Use
+ scoped_disable_commit_resumed in the --thread-group case.
+
+ gdb/testsuite/ChangeLog:
+
+ * gdb.mi/interrupt-thread-group.c: New.
+ * gdb.mi/interrupt-thread-group.exp: New.
+
+ Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28077
+ Change-Id: I615efefcbcaf2c15d47caf5e4b9d82854b2a2fcb
+
+2021-07-13 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Enable elf attributes when default configure option isn't set.
+ Since gcc commit, 3c70b3ca1ef58f302bf8c16d9e7c7bb8626408bf, we now enable
+ elf attributes for all riscv targets by default in gcc. Therefore, I
+ think binutils should have the same behavior, in case users are writing
+ assembly files. If --enable-default-riscv-attribute isn't set, then we
+ enable the elf attributes for all riscv targets by default.
+
+ ChangLog:
+
+ binutils/
+
+ * testsuite/binutils-all/readelf.s: Add comments for riscv.
+ * testsuite/binutils-all/readelf.s-64: Likewise.
+ * testsuite/binutils-all/readelf.s-64-unused: Likewise.
+ * testsuite/binutils-all/readelf.ss: Likewise.
+ * testsuite/binutils-all/readelf.ss-64: Likewise.
+ * testsuite/binutils-all/readelf.ss-64-unused: Likewise.
+
+ gas/
+
+ * configure.ac: If --enable-default-riscv-attribute isn't set,
+ then we enable the elf attributes for all riscv targets by
+ default.
+ * configure: Regenerated.
+
+2021-07-13 John Ericson <git@JohnEricson.me>
+
+ Fix some dangling references to `netbsd-tdep`
+ These files were renamed in 1b71cfcfdc3e13a655fefa6566b5564cec044c10,
+ but evidentially a few dangling references were left behind. This causes
+ builds to fail:
+
+ $ ./configure --target i686-netbsdelf
+ $ make
+ make: *** No rule to make target 'nbsd-tdep.c', needed by 'nbsd-tdep.o'. Stop.
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: optimize all_matching_threads_iterator
+ all_matching_threads_iterator is used extensively in some pretty fast
+ paths, often under the all_non_exited_threads function.
+
+ If a filter target and thread-specific ptid are given, it iterates on
+ all threads of all inferiors of that target, to ultimately yield exactly
+ on thread. And this happens quite often, which means we unnecessarily
+ spend time iterating on threads to find the one we are looking for. The
+ same thing happens if an inferior-specific ptid is given, although there
+ the iterator yields all the threads of that inferior.
+
+ In those cases, the callers of all_non_exited_threads could have
+ different behaviors depending on the kind of ptid, to avoid this
+ inefficiency, but that would be very tedious. Using
+ all_non_exited_threads has the advantage that one simple implementation
+ can work seamlessly on multiple threads or on one specific thread, just
+ by playing with the ptid.
+
+ Instead, optimize all_matching_threads_iterator directly to detect these
+ different cases and limiting what we iterate on to just what we need.
+
+ - if filter_ptid is minus_one_ptid, do as we do now: filter inferiors
+ based on filter_target, iterate on all of the matching inferiors'
+ threads
+ - if filter_ptid is a pid-only ptid (then a filter_target must
+ necessarily be given), look up that inferior and iterate on all its
+ threads
+ - otherwise, filter_ptid is a thread-specific ptid, so look up that
+ specific thread and "iterate" only on it
+
+ For the last case, what was an iteration on all threads of the filter
+ target now becomes a call to find_thread_ptid, which is quite efficient
+ now thanks to inferior::ptid_thread_map.
+
+ gdb/ChangeLog:
+
+ * thread-iter.h (class all_matching_threads_iterator)
+ <all_matching_threads_iterator>: Use default.
+ <enum class mode>: New.
+ <m_inf, m_thr>: Initialize.
+ <m_filter_ptid>: Remove.
+ * thread-iter.c (all_matching_threads_iterator::m_inf_matches):
+ Don't filter on m_filter_ptid.
+ (all_matching_threads_iterator::all_matching_threads_iterator):
+ Choose path based on filter_ptid (all threads, all threads of
+ inferior, single thread).
+ (all_matching_threads_iterator::advance): Likewise.
+
+ Change-Id: Ic6a19845f5f760fa1b8eac8145793c0ff431bbc9
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: maintain ptid -> thread map, optimize find_thread_ptid
+ When debugging a large number of threads (thousands), looking up a
+ thread by ptid_t using the inferior::thread_list linked list can add up.
+
+ Add inferior::thread_map, an std::unordered_map indexed by ptid_t, and
+ change the find_thread_ptid function to look up a thread using
+ std::unordered_map::find, instead of iterating on all of the
+ inferior's threads. This should make it faster to look up a thread
+ from its ptid.
+
+ Change-Id: I3a8da0a839e18dee5bb98b8b7dbeb7f3dfa8ae1c
+ Co-Authored-By: Pedro Alves <pedro@palves.net>
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: optimize selection of resumed thread with pending event
+ Consider a case where many threads (thousands) keep hitting a breakpoint
+ whose condition evaluates to false. random_pending_event_thread is
+ responsible for selecting a thread from an inferior among all that are
+ resumed with a pending wait status. It is currently implemented by
+ walking the inferior's thread list twice: once to count the number of
+ candidates and once to select a random one.
+
+ Since we now maintain a per target list of resumed threads with pending
+ event, we can implement this more efficiently by walking that list and
+ selecting the first thread that matches the criteria
+ (random_pending_event_thread looks for an thread from a specific
+ inferior, and possibly a filter ptid). It will be faster especially in
+ the common case where there isn't any resumed thread with pending
+ event. Currently, we have to iterate the thread list to figure this
+ out. With this patch, the list of resumed threads with pending event
+ will be empty, so it's quick to figure out.
+
+ The random selection is kept, but is moved to
+ process_stratum_target::random_resumed_with_pending_wait_status. The
+ same technique is used: do a first pass to count the number of
+ candidates, and do a second pass to select a random one. But given that
+ the list of resumed threads with pending wait statuses will generally be
+ short, or at least shorter than the full thread list, it should be
+ quicker.
+
+ Note that this isn't completely true, in case there are multiple
+ inferiors on the same target. Imagine that inferior A has 10k resumed
+ threads with pending wait statuses, and random_pending_event_thread is
+ called with inferior B. We'll need to go through the list that contains
+ inferior A's threads to realize that inferior B has no resumed threads
+ with pending wait status. But I think that this is a corner /
+ pathological case. And a possible fix for this situation would be to
+ make random_pending_event_thread work per-process-target, rather than
+ per-inferior.
+
+ Change-Id: I1b71d01beaa500a148b5b9797745103e13917325
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: optimize check for resumed threads with pending wait status in maybe_set_commit_resumed_all_targets
+ Consider a test case where many threads (thousands) keep hitting a
+ breakpoint whose condition evaluates to false.
+ maybe_set_commit_resumed_all_targets is called at each handled event,
+ when the scoped_disable_commit_resumed object in fetch_inferior_event is
+ reset_and_commit-ed. One particularly expensive check in there is
+ whether the target has at least one resumed thread with a pending wait
+ status (in which case, we don't want to commit the resumed threads, as
+ we want to consume this status first). It is currently implemented as
+ walking all threads of the target.
+
+ Since we now maintain a per-target list of resumed threads with pending
+ status, we can do this check efficiently, by checking whether that list
+ is empty or not.
+
+ Add the process_stratum_target::has_resumed_with_pending_wait_status
+ method for this, and use it in maybe_set_commit_resumed_all_targets.
+
+ Change-Id: Ia1595baa1b358338f94fc3cb3af7f27092dad5b6
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: maintain per-process-target list of resumed threads with pending wait status
+ Looking up threads that are both resumed and have a pending wait
+ status to report is something that we do quite often in the fast path
+ and is expensive if there are many threads, since it currently requires
+ walking whole thread lists.
+
+ The first instance is in maybe_set_commit_resumed_all_targets. This is
+ called after handling each event in fetch_inferior_event, to see if we
+ should ask targets to commit their resumed threads or not. If at least
+ one thread is resumed but has a pending wait status, we don't ask the
+ targets to commit their resumed threads, because we want to consume and
+ handle the pending wait status first.
+
+ The second instance is in random_pending_event_thread, where we want to
+ select a random thread among all those that are resumed and have a
+ pending wait status. This is called every time we try to consume
+ events, to see if there are any pending events that we we want to
+ consume, before asking the targets for more events.
+
+ To allow optimizing these cases, maintain a per-process-target list of
+ threads that are resumed and have a pending wait status.
+
+ In maybe_set_commit_resumed_all_targets, we'll be able to check in O(1)
+ if there are any such threads simply by checking whether the list is
+ empty.
+
+ In random_pending_event_thread, we'll be able to use that list, which
+ will be quicker than iterating the list of threads, especially when
+ there are no resumed with pending wait status threads.
+
+ About implementation details: using the new setters on class
+ thread_info, it's relatively easy to maintain that list. Any time the
+ "resumed" or "pending wait status" property is changed, we check whether
+ that should cause the thread to be added or removed from the list.
+
+ In set_thread_exited, we try to remove the thread from the list, because
+ keeping an exited thread in that list would make no sense (especially if
+ the thread is freed). My first implementation assumed that a process
+ stratum target was always present when set_thread_exited is called.
+ That's however, not the case: in some cases, targets unpush themselves
+ from an inferior and then call "exit_inferior", which exits all the
+ threads. If the target is unpushed before set_thread_exited is called
+ on the threads, it means we could mistakenly leave some threads in the
+ list. I tried to see how hard it would be to make it such that targets
+ have to exit all threads before unpushing themselves from the inferior
+ (that would seem logical to me, we don't want threads belonging to an
+ inferior that has no process target). That seemed quite difficult and
+ not worth the time at the moment. Instead, I changed
+ inferior::unpush_target to remove all threads of that inferior from the
+ list.
+
+ As of this patch, the list is not used, this is done in the subsequent
+ patches.
+
+ The debug messages in process-stratum-target.c need to print some ptids.
+ However, they can't use target_pid_to_str to print them without
+ introducing a dependency on the current inferior (the current inferior
+ is used to get the current target stack). For debug messages, I find it
+ clearer to print the spelled out ptid anyway (the pid, lwp and tid
+ values). Add a ptid_t::to_string method that returns a string
+ representation of the ptid that is meant for debug messages, a bit like
+ we already have frame_id::to_string.
+
+ Change-Id: Iad8f93db2d13984dd5aa5867db940ed1169dbb67
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: make thread_info::suspend private, add getters / setters
+ A following patch will want to take some action when a pending wait
+ status is set on or removed from a thread. Add a getter and a setter on
+ thread_info for the pending waitstatus, so that we can add some code in
+ the setter later.
+
+ The thing is, the pending wait status field is in the
+ thread_suspend_state, along with other fields that we need to backup
+ before and restore after the thread does an inferior function call.
+ Therefore, make the thread_suspend_state member private
+ (thread_info::suspend becomes thread_info::m_suspend), and add getters /
+ setters for all of its fields:
+
+ - pending wait status
+ - stop signal
+ - stop reason
+ - stop pc
+
+ For the pending wait status, add the additional has_pending_waitstatus
+ and clear_pending_waitstatus methods.
+
+ I think this makes the thread_info interface a bit nicer, because we
+ now access the fields as:
+
+ thread->stop_pc ()
+
+ rather than
+
+ thread->suspend.stop_pc
+
+ The stop_pc field being in the `suspend` structure is an implementation
+ detail of thread_info that callers don't need to be aware of.
+
+ For the backup / restore of the thread_suspend_state structure, add
+ save_suspend_to and restore_suspend_from methods. You might wonder why
+ `save_suspend_to`, as opposed to a simple getter like
+
+ thread_suspend_state &suspend ();
+
+ I want to make it clear that this is to be used only for backing up and
+ restoring the suspend state, _not_ to access fields like:
+
+ thread->suspend ()->stop_pc
+
+ Adding some getters / setters allows adding some assertions. I find
+ that this helps understand how things are supposed to work. Add:
+
+ - When getting the pending status (pending_waitstatus method), ensure
+ that there is a pending status.
+ - When setting a pending status (set_pending_waitstatus method), ensure
+ there is no pending status.
+
+ There is one case I found where this wasn't true - in
+ remote_target::process_initial_stop_replies - which needed adjustments
+ to respect that contract. I think it's because
+ process_initial_stop_replies is kind of (ab)using the
+ thread_info::suspend::waitstatus to store some statuses temporarily, for
+ its internal use (statuses it doesn't intent on leaving pending).
+
+ process_initial_stop_replies pulls out stop replies received during the
+ initial connection using target_wait. It always stores the received
+ event in `evthread->suspend.waitstatus`. But it only sets
+ waitstatus_pending_p, if it deems the event interesting enough to leave
+ pending, to be reported to the core:
+
+ if (ws.kind != TARGET_WAITKIND_STOPPED
+ || ws.value.sig != GDB_SIGNAL_0)
+ evthread->suspend.waitstatus_pending_p = 1;
+
+ It later uses this flag a bit below, to choose which thread to make the
+ "selected" one:
+
+ if (selected == NULL
+ && thread->suspend.waitstatus_pending_p)
+ selected = thread;
+
+ And ultimately that's used if the user-visible mode is all-stop, so that
+ we print the stop for that interesting thread:
+
+ /* In all-stop, we only print the status of one thread, and leave
+ others with their status pending. */
+ if (!non_stop)
+ {
+ thread_info *thread = selected;
+ if (thread == NULL)
+ thread = lowest_stopped;
+ if (thread == NULL)
+ thread = first;
+
+ print_one_stopped_thread (thread);
+ }
+
+ But in any case (all-stop or non-stop), print_one_stopped_thread needs
+ to access the waitstatus value of these threads that don't have a
+ pending waitstatus (those that had TARGET_WAITKIND_STOPPED +
+ GDB_SIGNAL_0). This doesn't work with the assertions I've
+ put.
+
+ So, change the code to only set the thread's wait status if it is an
+ interesting one that we are going to leave pending. If the thread
+ stopped due to a non-interesting event (TARGET_WAITKIND_STOPPED +
+ GDB_SIGNAL_0), don't store it. Adjust print_one_stopped_thread to
+ understand that if a thread has no pending waitstatus, it's because it
+ stopped with TARGET_WAITKIND_STOPPED + GDB_SIGNAL_0.
+
+ The call to set_last_target_status also uses the pending waitstatus.
+ However, given that the pending waitstatus for the thread may have been
+ cleared in print_one_stopped_thread (and that there might not even be a
+ pending waitstatus in the first place, as explained above), it is no
+ longer possible to do it at this point. To fix that, move the call to
+ set_last_target_status in print_one_stopped_thread. I think this will
+ preserve the existing behavior, because set_last_target_status is
+ currently using the current thread's wait status. And the current
+ thread is the last one for which print_one_stopped_thread is called. So
+ by calling set_last_target_status in print_one_stopped_thread, we'll get
+ the same result. set_last_target_status will possibly be called
+ multiple times, but only the last call will matter. It just means
+ possibly more calls to set_last_target_status, but those are cheap.
+
+ Change-Id: Iedab9653238eaf8231abcf0baa20145acc8b77a7
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: add setter / getter for thread_info resumed state
+ A following patch will want to do things when a thread's resumed state
+ changes. Make the `resumed` field private (renamed to `m_resumed`) and
+ add a getter and a setter for it. The following patch in question will
+ therefore be able to add some code to the setter.
+
+ Change-Id: I360c48cc55a036503174313261ce4e757d795319
+
+2021-07-13 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: use intrusive list for step-over chain
+ The threads that need a step-over are currently linked using an
+ hand-written intrusive doubly-linked list, so that seems a very good
+ candidate for intrusive_list, convert it.
+
+ For this, we have a use case of appending a list to another one (in
+ start_step_over). Based on the std::list and Boost APIs, add a splice
+ method. However, only support splicing the other list at the end of the
+ `this` list, since that's all we need.
+
+ Add explicit default assignment operators to
+ reference_to_pointer_iterator, which are otherwise implicitly deleted.
+ This is needed because to define thread_step_over_list_safe_iterator, we
+ wrap reference_to_pointer_iterator inside a basic_safe_iterator, and
+ basic_safe_iterator needs to be able to copy-assign the wrapped
+ iterator. The move-assignment operator is therefore not needed, only
+ the copy-assignment operator is. But for completeness, add both.
+
+ Change-Id: I31b2ff67c7b78251314646b31887ef1dfebe510c
+
+2021-07-13 Pedro Alves <pedro@palves.net>
+
+ gdb: make inferior_list use intrusive_list
+ Change inferior_list, the global list of inferiors, to use
+ intrusive_list. I think most other changes are somewhat obvious
+ fallouts from this change.
+
+ There is a small change in behavior in scoped_mock_context. Before this
+ patch, constructing a scoped_mock_context would replace the whole
+ inferior list with only the new mock inferior. Tests using two
+ scoped_mock_contexts therefore needed to manually link the two inferiors
+ together, as the second scoped_mock_context would bump the first mock
+ inferior from the thread list. With this patch, a scoped_mock_context
+ adds its mock inferior to the inferior list on construction, and removes
+ it on destruction. This means that tests run with mock inferiors in the
+ inferior list in addition to any pre-existing inferiors (there is always
+ at least one). There is no possible pid clash problem, since each
+ scoped mock inferior uses its own process target, and pids are per
+ process target.
+
+ Co-Authored-By: Simon Marchi <simon.marchi@efficios.com>
+ Change-Id: I7eb6a8f867d4dcf8b8cd2dcffd118f7270756018
+
+2021-07-13 Pedro Alves <pedro@palves.net>
+
+ gdb: introduce intrusive_list, make thread_info use it
+ GDB currently has several objects that are put in a singly linked list,
+ by having the object's type have a "next" pointer directly. For
+ example, struct thread_info and struct inferior. Because these are
+ simply-linked lists, and we don't keep track of a "tail" pointer, when
+ we want to append a new element on the list, we need to walk the whole
+ list to find the current tail. It would be nice to get rid of that
+ walk. Removing elements from such lists also requires a walk, to find
+ the "previous" position relative to the element being removed. To
+ eliminate the need for that walk, we could make those lists
+ doubly-linked, by adding a "prev" pointer alongside "next". It would be
+ nice to avoid the boilerplate associated with maintaining such a list
+ manually, though. That is what the new intrusive_list type addresses.
+
+ With an intrusive list, it's also possible to move items out of the
+ list without destroying them, which is interesting in our case for
+ example for threads, when we exit them, but can't destroy them
+ immediately. We currently keep exited threads on the thread list, but
+ we could change that which would simplify some things.
+
+ Note that with std::list, element removal is O(N). I.e., with
+ std::list, we need to walk the list to find the iterator pointing to
+ the position to remove. However, we could store a list iterator
+ inside the object as soon as we put the object in the list, to address
+ it, because std::list iterators are not invalidated when other
+ elements are added/removed. However, if you need to put the same
+ object in more than one list, then std::list<object> doesn't work.
+ You need to instead use std::list<object *>, which is less efficient
+ for requiring extra memory allocations. For an example of an object
+ in multiple lists, see the step_over_next/step_over_prev fields in
+ thread_info:
+
+ /* Step-over chain. A thread is in the step-over queue if these are
+ non-NULL. If only a single thread is in the chain, then these
+ fields point to self. */
+ struct thread_info *step_over_prev = NULL;
+ struct thread_info *step_over_next = NULL;
+
+ The new intrusive_list type gives us the advantages of an intrusive
+ linked list, while avoiding the boilerplate associated with manually
+ maintaining it.
+
+ intrusive_list's API follows the standard container interface, and thus
+ std::list's interface. It is based the API of Boost's intrusive list,
+ here:
+
+ https://www.boost.org/doc/libs/1_73_0/doc/html/boost/intrusive/list.html
+
+ Our implementation is relatively simple, while Boost's is complicated
+ and intertwined due to a lot of customization options, which our version
+ doesn't have.
+
+ The easiest way to use an intrusive_list is to make the list's element
+ type inherit from intrusive_node. This adds a prev/next pointers to
+ the element type. However, to support putting the same object in more
+ than one list, intrusive_list supports putting the "node" info as a
+ field member, so you can have more than one such nodes, one per list.
+
+ As a first guinea pig, this patch makes the per-inferior thread list use
+ intrusive_list using the base class method.
+
+ Unlike Boost's implementation, ours is not a circular list. An earlier
+ version of the patch was circular: the intrusive_list type included an
+ intrusive_list_node "head". In this design, a node contained pointers
+ to the previous and next nodes, not the previous and next elements.
+ This wasn't great for when debugging GDB with GDB, as it was difficult
+ to get from a pointer to the node to a pointer to the element. With the
+ design proposed in this patch, nodes contain pointers to the previous
+ and next elements, making it easy to traverse the list by hand and
+ inspect each element.
+
+ The intrusive_list object contains pointers to the first and last
+ elements of the list. They are nullptr if the list is empty.
+ Each element's node contains a pointer to the previous and next
+ elements. The first element's previous pointer is nullptr and the last
+ element's next pointer is nullptr. Therefore, if there's a single
+ element in the list, both its previous and next pointers are nullptr.
+ To differentiate such an element from an element that is not linked into
+ a list, the previous and next pointers contain a special value (-1) when
+ the node is not linked. This is necessary to be able to reliably tell
+ if a given node is currently linked or not.
+
+ A begin() iterator points to the first item in the list. An end()
+ iterator contains nullptr. This makes iteration until end naturally
+ work, as advancing past the last element will make the iterator contain
+ nullptr, making it equal to the end iterator. If the list is empty,
+ a begin() iterator will contain nullptr from the start, and therefore be
+ immediately equal to the end.
+
+ Iterating on an intrusive_list yields references to objects (e.g.
+ `thread_info&`). The rest of GDB currently expects iterators and ranges
+ to yield pointers (e.g. `thread_info*`). To bridge the gap, add the
+ reference_to_pointer_iterator type. It is used to define
+ inf_threads_iterator.
+
+ Add a Python pretty-printer, to help inspecting intrusive lists when
+ debugging GDB with GDB. Here's an example of the output:
+
+ (top-gdb) p current_inferior_.m_obj.thread_list
+ $1 = intrusive list of thread_info = {0x61700002c000, 0x617000069080, 0x617000069400, 0x61700006d680, 0x61700006eb80}
+
+ It's not possible with current master, but with this patch [1] that I
+ hope will be merged eventually, it's possible to index the list and
+ access the pretty-printed value's children:
+
+ (top-gdb) p current_inferior_.m_obj.thread_list[1]
+ $2 = (thread_info *) 0x617000069080
+ (top-gdb) p current_inferior_.m_obj.thread_list[1].ptid
+ $3 = {
+ m_pid = 406499,
+ m_lwp = 406503,
+ m_tid = 0
+ }
+
+ Even though iterating the list in C++ yields references, the Python
+ pretty-printer yields pointers. The reason for this is that the output
+ of printing the thread list above would be unreadable, IMO, if each
+ thread_info object was printed in-line, since they contain so much
+ information. I think it's more useful to print pointers, and let the
+ user drill down as needed.
+
+ [1] https://sourceware.org/pipermail/gdb-patches/2021-April/178050.html
+
+ Co-Authored-By: Simon Marchi <simon.marchi@efficios.com>
+ Change-Id: I3412a14dc77f25876d742dab8f44e0ba7c7586c0
+
+2021-07-13 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-12 Tucker <tuckkern@sourceware@gmail.com>
+
+ Add the SEC_ELF_OCTETS flag to debug sections created by the assembler.
+ PR 28054
+ gas * config/obj-elf.c (obj_elf_change_section): Set the
+ SEF_ELF_OCTETS flag on debug sections.
+
+2021-07-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.btrace/tsx.exp on system with tsx disabled in microcode
+ Recently I started to see this fail with trunk:
+ ...
+ (gdb) record instruction-history^M
+ 1 0x00000000004004ab <main+4>: call 0x4004b7 <test>^M
+ 2 0x00000000004004c6 <test+15>: mov $0x1,%eax^M
+ 3 0x00000000004004cb <test+20>: ret ^M
+ (gdb) FAIL: gdb.btrace/tsx.exp: speculation indication
+ ...
+
+ This is due to an intel microcode update (1) that disables Intel TSX by default.
+
+ Fix this by updating the pattern.
+
+ Tested on x86_64-linux, with both gcc 7.5.0 and clang 12.0.1.
+
+ [1] https://www.intel.com/content/www/us/en/support/articles/000059422/processors.html
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-12 Tom de Vries <tdevries@suse.de>
+
+ PR testsuite/28057
+ * gdb.btrace/tsx.exp: Add pattern for system with tsx disabled in
+ microcode.
+
+2021-07-12 Nick Clifton <nickc@redhat.com>
+
+ Updated French translation for the binutils sub-directory
+
+ Fix a translation problem for the text generated by readelf at the start of a dump of a dynamic section.
+ PR 28072
+ binutils * readelf.c (process_dynamic_section): Use ngettext to help with translation of header text.
+
+2021-07-12 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.mi/mi-info-sources.exp for extra debug info
+ When running test-case gdb.mi/mi-info-sources.exp, I run into:
+ ...
+ Running src/gdb/testsuite/gdb.mi/mi-info-sources.exp ...
+ ERROR: internal buffer is full.
+ ...
+ due to extra debug info from the shared libraries.
+
+ Fix this by using "nosharedlibrary".
+
+ Then I run into these FAILs:
+ ...
+ FAIL: gdb.mi/mi-info-sources.exp: debug_read=false: \
+ -file-list-exec-source-files (unexpected output)
+ FAIL: gdb.mi/mi-info-sources.exp: debug_read=true: \
+ -file-list-exec-source-files (unexpected output)
+ FAIL: gdb.mi/mi-info-sources.exp: debug_read=true: \
+ -file-list-exec-source-files --group-by-objfile, look for \
+ mi-info-sources.c (unexpected output)
+ FAIL: gdb.mi/mi-info-sources.exp: debug_read=true: \
+ -file-list-exec-source-files --group-by-objfile, look for \
+ mi-info-sources-base.c (unexpected output)
+ ...
+ due to openSUSE executables which have debug info for objects from sources
+ like sysdeps/x86_64/crtn.S.
+
+ Fix these by updating the patterns, and adding "maint expand-symtabs" to
+ reliably get fully-read objfiles.
+
+ Then I run into FAILs when using the readnow target board. Fix these by
+ skipping the relevant tests.
+
+ Then I run into FAILs when using the cc-with-gnu-debuglink board. Fix these
+ by updating the patterns.
+
+ Tested on x86_64-linux, with native, check-read1, readnow, cc-with-gdb-index,
+ cc-with-debug-names, cc-with-gnu-debuglink, cc-with-dwz, cc-with-dwz-m.
+
+ gdb/testsuite/ChangeLog:
+
+ 2021-07-05 Tom de Vries <tdevries@suse.de>
+
+ * lib/mi-support.exp (mi_readnow): New proc.
+ * gdb.mi/mi-info-sources.exp: Use nosharedlibrary. Update patterns.
+ Skip tests for readnow. Use "maint expand-symtabs".
+
+2021-07-12 Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
+
+ testsuite: fix whitespace problems in gdb.mi/mi-break.exp
+ Replace leading 8-spaces with tab and remove trailing space in
+ gdb.mi/mi-break.exp.
+
+2021-07-12 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-11 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-10 Alan Modra <amodra@gmail.com>
+
+ Tidy commit 49910fd88dcd
+ 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-10 Alan Modra <amodra@gmail.com>
+
+ PR28069, assertion fail in dwarf.c:display_discr_list
+ 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-10 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-09 H.J. Lu <hjl.tools@gmail.com>
+
+ ld/NEWS: Clarify -z [no]indirect-extern-access
+ -z [no]indirect-extern-access are only for x86 ELF linker.
+
+2021-07-09 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Limits 2 GNU_PROPERTY_1_NEEDED tests to Linux/x86
+ 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-09 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Add GNU_PROPERTY_1_NEEDED check
+ 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-09 H.J. Lu <hjl.tools@gmail.com>
+
+ elf: Add GNU_PROPERTY_1_NEEDED
+ 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-09 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-09 Lancelot SIX <lsix@lancelotsix.com>
+
+ Remove unused parameter in maybe_software_singlestep
+ 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-08 H.J. Lu <hjl.tools@gmail.com>
+
+ x86-64: Disallow PC reloc against weak undefined symbols in PIE
+ 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-08 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Limit cache size and add --max-cache-size=SIZE
+ 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-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: don't set Linux-specific displaced stepping methods in s390_gdbarch_init
+ 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-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/Makefile.in: remove testsuite from SUBDIRS
+ 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-08 Nick Clifton <nickc@redhat.com>
+
+ Updated Portuguese translation for the BFD sub-directory
+
+2021-07-08 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix gdb.guile/scm-breakpoint.exp with guile 3.0
+ 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-08 Mike Frysinger <vapier@gentoo.org>
+
+ sim: erc32: use libsim.a for common objects
+ 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-08 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-07 Nick Clifton <nickc@redhat.com>
+
+ Remove an accidental change to elfcode.h included as part of commit 6e0dfbf420.
+ PR 27659
+ * elfcode.h (elf_swap_symbol_out): Revert accidental change that
+ removed an abort if the shndx pointer is NULL.
+
+2021-07-07 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Check archive only for archive member
+ 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-07 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ Add changelog entries for last commit
+
+2021-07-07 Andreas Krebbel <krebbel@linux.ibm.com>
+
+ IBM Z: Add another arch14 instruction
+ 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-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ Fix Solaris gprof build with --disable-nls
+ 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-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ Check for strnlen declaration to fix Solaris 10 build
+ 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-07 Nick Clifton <nickc@redhat.com>
+
+ Fix problems translating messages when a percentage sign appears at the end 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-07 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-06 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: introduce iterator_range, remove next_adapter
+ 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-06 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb/testsuite: restore configure script
+ 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-06 Joel Brobecker <brobecker@adacore.com>
+
+ Rename gdb/ChangeLog to gdb/ChangeLog-2021
+ 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-06 Dan Streetman <ddstreet@canonical.com>
+
+ sim: ppc: add missing empty targets
+ 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-06 Yuri Chornoivan <yurchor@ukr.net>
+
+ PR 28053: Fix spelling mistakes: usupported -> unsupported and relocatation -> relocation.
+
+2021-07-06 Michael Matz <matz@suse.de>
+
+ elf/riscv: Fix relaxation with aliases [PR28021]
+ 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-06 Pedro Alves <pedro@palves.net>
+ Qingchuan Shi <qingchuan.shi@amd.com>
+
+ Update gdb performance testsuite to be compatible with Python 3.8
+ 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.
+
+
+ Change-Id: Ia850c05d5ce57d2dada70ba5b0061f566444aa2b
+
+2021-07-06 Pedro Alves <pedro@palves.net>
+
+ gdb.perf/: FAIL on Python errors, avoid "ERROR: internal buffer is full"
+ 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 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Remove read1 timeout factor from gdb.base/info-macros.exp
+ 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-06 Nelson Chu <nelson.chu@sifive.com>
+
+ RISC-V: Fix the build broken with -Werror.
+ 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 Tom de Vries <tdevries@suse.de>
+
+ [gdb/symtab] Fix skipping of import of C++ CU
+ 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-06 Kito Cheng <kito.cheng@sifive.com>
+
+ RISC-V: Add PT_RISCV_ATTRIBUTES and add it to PHDR.
+ 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-06 Alan Modra <amodra@gmail.com>
+
+ Re: PR28055, segfault in bpf special reloc function
+ PR 28055
+ * elf64-bpf.c (bpf_elf_generic_reloc): Add missing ATTRIBUTE_UNUSED.
+
+2021-07-06 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-05 Tom Tromey <tom@tromey.com>
+
+ Simplify debug_names index writing
+ 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.)
+
+ Simplify gdb_index writing
+ 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.
+
+ Minor cleanup to addrmap_index_data::previous_valid
+ This changes addrmap_index_data::previous_valid to a bool, and
+ initializes it inline.
+
+2021-07-05 Tom Tromey <tom@tromey.com>
+
+ Fix oddity in write_gdbindex
+ 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-05 Tom Tromey <tom@tromey.com>
+
+ Fix warning in symtab.c
+ 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-05 H.J. Lu <hjl.tools@gmail.com>
+
+ ld: Cache and reuse the IR archive file descriptor
+ 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-05 Nick Clifton <nickc@redhat.com>
+
+ Restore the libiberty component of commit 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.
+
+ Updated translations (mainly Ukranian and French) triggered by creation of 2.37 branch.
+
+2021-07-05 Tom de Vries <tdevries@suse.de>
+
+ [gdb/testsuite] Fix fail in gdb.fortran/ptype-on-functions.exp with gcc-7
+ 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.
+
+2021-07-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: fall back on sigpending + sigwait if sigtimedwait is not available
+ The macOS platform does not provide sigtimedwait, so we get:
+
+ CXX compile/compile.o
+ In file included from /Users/smarchi/src/binutils-gdb/gdb/compile/compile.c:46:
+ /Users/smarchi/src/binutils-gdb/gdb/../gdbsupport/scoped_ignore_signal.h:69:4: error: use of undeclared identifier 'sigtimedwait'
+ sigtimedwait (&set, nullptr, &zero_timeout);
+ ^
+
+ An alternative to sigtimedwait with a timeout of 0 is to use sigpending,
+ to first check which signals are pending, and then sigwait, to consume
+ them. Since that's slightly more expensive (2 syscalls instead of 1),
+ keep using sigtimedwait for the platforms that provide it, and fall back
+ to sigpending + sigwait for the others.
+
+ gdbsupport/ChangeLog:
+
+ * scoped_ignore_signal.h (struct scoped_ignore_signal)
+ <~scoped_ignore_signal>: Use sigtimedwait if HAVE_SIGTIMEDWAIT
+ is defined, else use sigpending + sigwait.
+
+ Change-Id: I2a72798337e81dd1bbd21214736a139dd350af87
+ Co-Authored-By: John Baldwin <jhb@FreeBSD.org>
+
+2021-07-05 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdbsupport/common.m4: check for sigtimedwait
+ The next patch will make the use of sigtimedwait conditional to whether
+ the platform provides it. Start by adding a configure check for it.
+
+ gdbsupport/ChangeLog:
+
+ * common.m4 (GDB_AC_COMMON): Check for sigtimedwait.
+ * config.in, configure: Re-generate.
+
+ gdb/ChangeLog:
+
+ * config.in, configure: Re-generate.
+
+ gdbserver/ChangeLog:
+
+ * config.in, configure: Re-generate.
+
+ Change-Id: Ic7613fe14521b966b4d991bbcd0933ab14629c05
+
+2021-07-05 Alan Modra <amodra@gmail.com>
+
+ Re: opcodes: constify & local meps macros
+ Commit f375d32b35ce changed a generated file. Edit the source instead.
+
+ * mep.opc (macros): Make static and const.
+ (lookup_macro): Return and use const pointer.
+ (expand_macro): Make mac param const.
+ (expand_string): Make pmacro const.
+
+2021-07-05 Alan Modra <amodra@gmail.com>
+
+ PR28055, segfault in bpf special reloc function
+ The testcase in this PR tickled two bugs fixed here. output_bfd is
+ NULL when a reloc special_function is called for final linking and
+ when called from bfd_generic_get_relocated_section_contents. Clearly
+ using output_bfd is wrong as it results in segfaults. Not only that,
+ the endianness of the reloc field really should be that of the input.
+ The second bug was not checking that the entire reloc field was
+ contained in the section contents.
+
+ PR 28055
+ * elf64-bpf.c (bpf_elf_generic_reloc): Use correct bfd for bfd_put
+ and bfd_put_32 calls. Correct section limit checks.
+
+2021-07-05 Alan Modra <amodra@gmail.com>
+
+ PR28047, readelf crash due to assertion failure
+ DW_FORM_ref1, DW_FORM_ref2, DW_FORM_ref4, DW_FORM_ref1, and
+ DW_FORM_ref_udata are all supposed to be within the containing unit.
+
+ PR 28047
+ * dwarf.c (get_type_abbrev_from_form): Add cu_end parameter.
+ Check DW_FORM_ref1 etc. arg against cu_end rather than end of
+ section. Adjust all callers.
+
+2021-07-05 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-04 Simon Marchi <simon.marchi@polymtl.ca>
+
+ gdb: return early if no execution in darwin_solib_create_inferior_hook
+ When loading a file using the file command on macOS, we get:
+
+ $ ./gdb -nx --data-directory=data-directory -q -ex "file ./test"
+ Reading symbols from ./test...
+ Reading symbols from /Users/smarchi/build/binutils-gdb/gdb/test.dSYM/Contents/Resources/DWARF/test...
+ /Users/smarchi/src/binutils-gdb/gdb/thread.c:72: internal-error: struct thread_info *inferior_thread(): Assertion `current_thread_ != nullptr' failed.
+ A problem internal to GDB has been detected,
+ further debugging may prove unreliable.
+ Quit this debugging session? (y or n)
+
+ The backtrace is:
+
+ * frame #0: 0x0000000101fcb826 gdb`internal_error(file="/Users/smarchi/src/binutils-gdb/gdb/thread.c", line=72, fmt="%s: Assertion `%s' failed.") at errors.cc:52:3
+ frame #1: 0x00000001018a2584 gdb`inferior_thread() at thread.c:72:3
+ frame #2: 0x0000000101469c09 gdb`get_current_regcache() at regcache.c:421:31
+ frame #3: 0x00000001015f9812 gdb`darwin_solib_get_all_image_info_addr_at_init(info=0x0000603000006d00) at solib-darwin.c:464:34
+ frame #4: 0x00000001015f7a04 gdb`darwin_solib_create_inferior_hook(from_tty=1) at solib-darwin.c:515:5
+ frame #5: 0x000000010161205e gdb`solib_create_inferior_hook(from_tty=1) at solib.c:1200:3
+ frame #6: 0x00000001016d8f76 gdb`symbol_file_command(args="./test", from_tty=1) at symfile.c:1650:7
+ frame #7: 0x0000000100abab17 gdb`file_command(arg="./test", from_tty=1) at exec.c:555:3
+ frame #8: 0x00000001004dc799 gdb`do_const_cfunc(c=0x000061100000c340, args="./test", from_tty=1) at cli-decode.c:102:3
+ frame #9: 0x00000001004ea042 gdb`cmd_func(cmd=0x000061100000c340, args="./test", from_tty=1) at cli-decode.c:2160:7
+ frame #10: 0x00000001018d4f59 gdb`execute_command(p="t", from_tty=1) at top.c:674:2
+ frame #11: 0x0000000100eee430 gdb`catch_command_errors(command=(gdb`execute_command(char const*, int) at top.c:561), arg="file ./test", from_tty=1, do_bp_actions=true)(char const*, int), char const*, int, bool) at main.c:523:7
+ frame #12: 0x0000000100eee902 gdb`execute_cmdargs(cmdarg_vec=0x00007ffeefbfeba0 size=1, file_type=CMDARG_FILE, cmd_type=CMDARG_COMMAND, ret=0x00007ffeefbfec20) at main.c:618:9
+ frame #13: 0x0000000100eed3a4 gdb`captured_main_1(context=0x00007ffeefbff780) at main.c:1322:3
+ frame #14: 0x0000000100ee810d gdb`captured_main(data=0x00007ffeefbff780) at main.c:1343:3
+ frame #15: 0x0000000100ee8025 gdb`gdb_main(args=0x00007ffeefbff780) at main.c:1368:7
+ frame #16: 0x00000001000044f1 gdb`main(argc=6, argv=0x00007ffeefbff8a0) at gdb.c:32:10
+ frame #17: 0x00007fff20558f5d libdyld.dylib`start + 1
+
+ The solib_create_inferior_hook call in symbol_file_command was added by
+ commit ea142fbfc9c1 ("Fix breakpoints on file reloads for PIE
+ binaries"). It causes solib_create_inferior_hook to be called while
+ the inferior is not running, which darwin_solib_create_inferior_hook
+ does not expect. darwin_solib_get_all_image_info_addr_at_init, in
+ particular, assumes that there is a current thread, as it tries to get
+ the current thread's regcache.
+
+ Fix it by adding a target_has_execution check and returning early. Note
+ that there is a similar check in svr4_solib_create_inferior_hook.
+
+ gdb/ChangeLog:
+
+ * solib-darwin.c (darwin_solib_create_inferior_hook): Return
+ early if no execution.
+
+ Change-Id: Ia11dd983a1e29786e5ce663d0fcaa6846dc611bb
+
+2021-07-04 GDB Administrator <gdbadmin@sourceware.org>
+
+ Automatic date update in version.in
+
+2021-07-03 H.J. Lu <hjl.tools@gmail.com>
+
+ gprof: Regenerate configure
+ * configure: Regenerated.
+
+2021-07-03 Joel Brobecker <brobecker@adacore.com>
+
+ Update NEWS post GDB 11 branch creation.
+ gdb/ChangeLog:
+
+ * NEWS: Create a new section for the next release branch.
+ Rename the section of the current branch, now that it has
+ been cut.
+
+2021-07-03 Joel Brobecker <brobecker@adacore.com>
+
+ Bump version to 12.0.50.DATE-git.
+ Now that the GDB 11 branch has been created, we can
+ bump the version number.
+
+ gdb/ChangeLog:
+
+ GDB 11 branch created (4b51505e33441c6165e7789fa2b6d21930242927):
+ * version.in: Bump version to 12.0.50.DATE-git.
+
+ gdb/testsuite/ChangeLog:
+
+ * gdb.base/default.exp: Change $_gdb_major to 12.
+
+2021-07-03 Tom Tromey <tom@tromey.com>
+
+ Use 'bool' more idiomatically in dwarf_decode_lines
+ I noticed a couple of spots related to dwarf_decode_lines where the
+ 'include_p' field was not being used idiomatically -- it is of type
+ bool now, so treat it as such.
+
+ gdb/ChangeLog
+ 2021-07-03 Tom Tromey <tom@tromey.com>
+
+ * dwarf2/read.c (lnp_state_machine::record_line): Use 'true'.
+ (dwarf_decode_lines): Remove '=='.
+
+2021-07-03 Nick Clifton <nickc@redhat.com>
+
+ More minor updates to the how-to-make-a-release documentation
+
+ Update version number and regenerate files
+
+ Add markers for 2.37 branch
+
+ Synchronize libiberty sources (and include/demangle.h) with GCC master version