diff --git a/ChangeLog.git b/ChangeLog.git new file mode 100644 index 00000000000..bfd454f3e4d --- /dev/null +++ b/ChangeLog.git @@ -0,0 +1,182465 @@ +2024-01-29 Indu Bhagat + + x86: testsuite: scfi: adjust COFI testcase and gas: scfi: untraceable control flow should be a hard error + +2024-01-29 Nick Clifton + + Updated French translations for GOLD and LD + + LoongArch: update test cases about TLS + +2024-01-29 GDB Administrator + + Automatic date update in version.in + +2024-01-28 GDB Administrator + + Automatic date update in version.in + +2024-01-27 GDB Administrator + + Automatic date update in version.in + +2024-01-26 mengqinggang + + Backport commits 969f5c0e1 (LoongArch: gas: Add support for s9 register) and a0aa6f4ab (LoongArch: ld: Add support for TLS LE symbol with addend) to 2.42 branch. + +2024-01-26 GDB Administrator + + Automatic date update in version.in + +2024-01-25 Andrew Carlotti + + gas: Update NEWS + Groups entries by architecture, and update AArch64 content. + + aarch64: Update Architecture Extensions documentation + Restructure the architecture extensions table, add a new table for architecture + version dependencies, add missing architecture extensions, and improve some + extension descriptions. + +2024-01-25 mengqinggang + + LoongArch: gas: Start a new frag after instructions that can be relaxed + For R_LARCH_TLS_{LE_HI20_R,LE_ADD_R,LD_PC_HI20,GD_PC_HI20, DESC_PC_HI20} + relocations, start a new frag to get correct eh_frame Call Frame Information + FDE DW_CFA_advance_loc info. + +2024-01-25 mengqinggang + + LoongArch: gas: Don't define LoongArch .align + Gcc may generate "\t.align\t%d,54525952,4\n" before commit + b20c7ee066cb7d952fa193972e8bc6362c6e4063. To write 54525952 (NOP) to object + file, we call s_align_ptwo (-4). It result in alignment padding must be a + multiple of 4 if .align has second parameter. + + Use default s_align_ptwo for .align. + +2024-01-25 Xi Ruoyao + + LoongArch: Fix some test failures about TLS desc and TLS relaxation + There are two issues causing 11 test failures: + + 1. The TLS desc tests are matching the entire disassemble of a linked + executable. But if ld is configured --enable-default-hash-style=gnu + (note that most modern distros use this option), the layout of the + linked executables will be different and the immediate operands in + the linked executables will also be different. So we add + "--hash-style=both" for these tests to cancel the effect of + --enable-default-hash-style=gnu, like [x86_64 mark-plt tests]. + 2. By default objdump disassemble uses [pseudo-instructions] so "addi.w" + is outputed as "li.w", causing mismatches in TLS relaxation tests. + We can turn off the pseudo-instruction usage in objdump using "-M + no-aliases" to fix them. + + [x86_64 mark-plt tests]: 16666ccc91295d1568c5c2cb0e7600694840dfd9 + [pseudo-instructions]: 17f9439038257b1de0c130a416a9a7645c653cb0 + +2024-01-25 mengqinggang + + LoongArch: Do not emit R_LARCH_RELAX for two register macros + For two register macros (e.g. la.local $t0, $t1, symbol) used in extreme code + model, do not emit R_LARCH_RELAX relocations. + +2024-01-25 GDB Administrator + + Automatic date update in version.in + +2024-01-24 Andrew Carlotti + + aarch64: Eliminate unused variable warnings with -DNDEBUG + +2024-01-24 GDB Administrator + + Automatic date update in version.in + +2024-01-23 Andrew Carlotti + + aarch64: Include +predres2 in -march=armv8.9-a + This matches the dependencies in the architecture, in LLVM, and even in the + original Binutils commit message that mistakenly included it only in armv9.4-a. + +2024-01-23 Xi Ruoyao + + [PATCH v2] gas/NEWS, ld/NEWS: Announce LoongArch changes in 2.42 + +2024-01-23 Jan Beulich + + x86/APX: also amend the PUSH2/POP2 testcase + Commit f530d5f1bab6 ("Update x86/APX: VROUND{P,S}{S,D} can generally be + encoded") took care of only half of the remaining issue. Add #pass here + as well. + +2024-01-23 GDB Administrator + + Automatic date update in version.in + +2024-01-22 Vladimir Mezentsev + + Fix 31252 gprofng causes testsuite parallel jobs fail + Before running our tests, we made a fake installation into ./tmpdir. + This installation changes libopcodes.la in the build area. + Gas testing may fail if gas and gprofng tests are run in parallel. + + I create a script to run gprofng. Inside this script, LD_LIBRARY_PATH, + GPROFNG_SYSCONFDIR are set. + putenv_libcollector_ld_misc() first uses $GPROFNG_PRELOAD_LIBDIRS to create + directories for SP_COLLECTOR_LIBRARY_PATH ($SP_COLLECTOR_LIBRARY_PATH is used + to set up LD_PRELOAD). + + gprofng/ChangeLog + 2024-01-19 Vladimir Mezentsev + + PR gprofng/31252 + PR gprofng/30808 + * src/envsets.cc (putenv_libcollector_ld_misc): Use + $GPROFNG_PRELOAD_LIBDIRS first to build SP_COLLECTOR_LIBRARY_PATH. + * testsuite/config/default.exp: Create a script to run gprofng. + * testsuite/lib/display-lib.exp: Fix typo. + +2024-01-22 Nick Clifton + + Updated Serbian translations for th bfd, gold and opcodes directories + +2024-01-22 GDB Administrator + + Automatic date update in version.in + +2024-01-21 GDB Administrator + + Automatic date update in version.in + +2024-01-20 GDB Administrator + + Automatic date update in version.in + +2024-01-19 H.J. Lu + + Update x86/APX: VROUND{P,S}{S,D} can generally be encoded + Append "#pass" to APX tests for targets which pad text sections with NOPs. + + * testsuite/gas/i386/x86-64-apx-evex-promoted-intel.d: Append + "#pass". + * testsuite/gas/i386/x86-64-apx-evex-promoted.d: Likewise. + + (cherry picked from commit f530d5f1bab6eb5adc65f422ef811fb278a21a4b) + +2024-01-19 Jan Beulich + + x86/APX: VROUND{P,S}{S,D} can generally be encoded + VRNDSCALE{P,S}{S,D} is the AVX512 generalization of these AVX insns. As + long as the immediate has the top 4 bits clear, they are equivalent to + the earlier VEX-encoded insns, and hence can be used to permit use of + eGPR-s in the memory operand. Since this is the normal way of using + these insns, also alter the resulting diagnostic to complain about the + immediate, not the eGPR use. + + x86/APX: be consistent with insn suffixes + When there's a suitably disambiguating register operand, suffixes are + generally omitted (unless in suffix-always mode). All NDD insns have a + suitable register operand, so they shouldn't have suffixes by default. + + x86: support APX forms of U{RD,WR}MSR + This was missed in 6177c84d5edc ("Support APX GPR32 with extend evex + prefix"). + +2024-01-19 Nick Clifton + + Add multilib.am to the list of top level files included in any release created by the src-release.sh script + +2024-01-19 GDB Administrator + + Automatic date update in version.in + +2024-01-18 Xi Ruoyao + + LoongArch: Adapt R_LARCH_{PCALA,GOT,TLS_IE,TLS_DESC}64_* handling per psABI v2.30 + In LoongArch psABI v2.30, an offset (-8 for LO20 and -12 for HI12) + should be applied on PC for these reloc types to avoid wrong relocation + when the instruction sequence crosses a page boundary. + + The lld linker has already adapted the change. Make it for the bfd + linker too. + + Link: https://github.com/loongson/la-abi-specs/releases/v2.30 + Link: https://github.com/loongson-community/discussions/issues/17 + Link: https://github.com/llvm/llvm-project/pull/73387 + +2024-01-18 Nick Clifton + + Updated translations for various sub-directories + +2024-01-17 Alan Modra + + PR30824 internal error with -z pack-relative-relocs + This corrects a counting problem, where prior to relocate_section relr + encoded relative relocs were allowed when it was known they were on + even boundaries, but relocate_section can only put relative relocs + (non-relr) on eight byte boundaries. + + PR 30824 + * elf64-ppc.c (RELR_ALIGN): Define, use throughout. + (maybe_relr): New function, use throughout. + + (cherry picked from commit f91074ebd8dc8077c9c778a42360e77a636dce5e) + +2024-01-17 H.J. Lu + + Update x86-64: Add -z mark-plt and -z nomark-plt + Pass --hash-style=both to ld for -z mark-plt tests to support linker + configured with --enable-default-hash-style=gnu. + + * testsuite/ld-x86-64/mark-plt-1b-x32.d: Pass --hash-style=both + to ld. + * testsuite/ld-x86-64/mark-plt-1b.d: Likewise. + * testsuite/ld-x86-64/mark-plt-1d-x32.d: Likewise. + * testsuite/ld-x86-64/mark-plt-1d.d: Likewise. + + (cherry picked from commit 16666ccc91295d1568c5c2cb0e7600694840dfd9) + +2024-01-17 Nick Clifton + + Import gcc commit 65388b28656d65595bdaf191df85af81c35ca63 which adds support for explicit object member function mangling. + +2024-01-15 H.J. Lu + + x86-64: Skip SCFI tests for x32 targets + Since SCFI isn't supported on x32: + + Fatal error: SCFI is not supported for this ABI + + skip SCFI tests for x32 targets. + + PR gas/31245 + * testsuite/gas/scfi/x86_64/scfi-x86-64.exp: Skip for x32 + targets. + + (cherry picked from commit 7bd344dd0e0469a93cbbf50f797155278cb76a0b) + +2024-01-15 Nick Clifton + + fix typo + + Update version number and regenerate configure files + + Add markers for 2.42 branch + + Update branch/release creation documentation + +2024-01-15 Victor Do Nascimento + + aarch64: rcpc3: Regenerate aarch64-*-2.c files + +2024-01-15 Victor Do Nascimento + Srinath Parvathaneni + + aarch64: rcpc3: Add FP load/store insns + Along with the relevant unit-tests, this adds the following rcpc3 + instructions: + + STL1 { .D }[], [] + LDAP1 { .D }[], [] + + LDAPUR , [{, #}] + LDAPUR , [{, #}] + LDAPUR , [{, #}] + LDAPUR
, [{, #}] + LDAPUR , [{, #}] + + STLUR , [{, #}] + STLUR , [{, #}] + STLUR , [{, #}] + STLUR
, [{, #}] + STLUR , [{, #}] + + with `#' taking on a signed 8-bit integer value in the range + [-256,255] and `index' the values 0 or 1. + +2024-01-15 Victor Do Nascimento + + aarch64: rcpc3: Add integer load/store insns + Along with the relevant unit tests and updates to the existing + regression tests, this adds support for the following novel rcpc3 + insns: + + LDIAPP , , [] + LDIAPP , , [], #8 + LDIAPP , , [] + LDIAPP , , [], #16 + + STILP , , [] + STILP , , [, #-8]! + STILP , , [] + STILP , , [, #-16]! + + LDAPR , [], #4 + LDAPR , [], #8 + + STLR , [, #-4]! + STLR , [, #-8]! + +2024-01-15 Victor Do Nascimento + + aarch64: rcpc3: Define RCPC3_INSN macro + This patch adds the necessary macro for encoding FEAT_RCPC3-dependent + instructions in Binutils. + + aarch64: rcpc3: add support in general_constraint_met_p + Given the introduction of the new address operand types for rcpc3 + instructions, this patch adds the necessary logic to teach + `general_constraint_met_p` how to proper handle these. + +2024-01-15 Victor Do Nascimento + + aarch64: rcpc3: New RCPC3_ADDR operand types + The particular choices of address indexing, along with their encoding + for RCPC3 instructions lead to the requirement of a new set of operand + descriptions, along with the relevant inserter/extractor set. + + That is, for the integer load/stores, there is only a single valid + indexing offset quantity and offset mode is allowed - The value is + always equivalent to the amount of data read/stored by the + operation and the offset is post-indexed for Load-Acquire RCpc, and + pre-indexed with writeback for Store-Release insns. + + This indexing quantity/mode pair is selected by the setting of a + single bit in the instruction. To represent these insns, we add the + following operand types: + + - AARCH64_OPND_RCPC3_ADDR_OPT_POSTIND + - AARCH64_OPND_RCPC3_ADDR_OPT_PREIND_WB + + In the case of loads and stores involving SIMD/FP registers, the + optional offset is encoded as an 8-bit signed immediate, but neither + post-indexing or pre-indexing with writeback is available. This + created the need for an operand type similar to + AARCH64_OPND_ADDR_OFFSET, with the difference that FLD_index should + not be checked. + + We thus introduce the AARCH64_OPND_RCPC3_ADDR_OFFSET operand, a + variant of AARCH64_OPND_ADDR_OFFSET, w/o the FLD_index bitfield. + +2024-01-15 Victor Do Nascimento + + aarch64: rcpc3: Define address operand fields and inserter/extractors + Beyond the need to encode any registers involved in data transfer and + the address base register for load/stores, it is necessary to specify + the data register addressing mode and whether the address register is + to be pre/post-indexed, whereby loads may be post-indexed and stores + pre-indexed with write-back. + + The use of a single bit to specify both the indexing mode and indexing + value requires a novel function be written to accommodate this for + address operand insertion in assembly and another for extraction in + disassembly, along with the definition of two insn fields for use with + these instructions. + + This therefore defines the following functions: + + - aarch64_ins_rcpc3_addr_opt_offset + - aarch64_ins_rcpc3_addr_offset + - aarch64_ext_rcpc3_addr_opt_offset + - aarch64_ext_rcpc3_addr_offset + + It extends the `do_special_{encoding|decoding}' functions and defines + two rcpc3 instruction fields: + + - FLD_opc2 + - FLD_rcpc3_size + +2024-01-15 Victor Do Nascimento + + aarch64: rcpc3: Create implicit load/store size calc function + The allowed immediate offsets in integer rcpc3 load store instructions + are not encoded explicitly in the instruction itself, being rather + implicitly equivalent to the amount of data loaded/stored by the + instruction. + + This leads to the requirement that this quantity be calculated based on + the number of registers involved in the transfer, either as data + source or destination registers and their respective qualifiers. + + This is done via `calc_ldst_datasize (const aarch64_opnd_info *opnds)' + implemented here, using a cumulative sum of qualifier sizes preceding + the address operand in the OPNDS operand list argument. + +2024-01-15 Victor Do Nascimento + + aarch64: rcpc3: Add +rcpc3 architectural feature support flag + Indicating the presence of the Armv8.2-a feature adding further + support for the Release Consistency Model, the `+rcpc3' architectural + extension flag is added to the list of possible `-march' options in + Binutils, together with the necessary macro for encoding rcpc3 + instructions. + +2024-01-15 Mark Wielaard + + bfd: riscv_maybe_function_sym check _bfd_elf_is_local_label_name + This fixes the ld "Handle no DWARF information" testcase. Which + currently fails on riscv because a local label name is assumed + to be the current function name. + + bfd/ChangeLog: + + * elfnn-riscv.c (riscv_maybe_function_sym): Also check + _bfd_elf_is_local_label_name. + +2024-01-15 Andrew Carlotti + + aarch64: Fix tlbi and tlbip instructions + There are some tlbi operations that don't have a corresponding tlbip operation, + but we were incorrectly using the same list for both. Add the missing tlbi + *nxs operations, and use the F_REG_128 flag to filter tlbi operations that + don't have a tlbip analogue. For increased clarity, I have also used a macro + to reduce duplication between the 'nxs' and non-'nxs' variants, and added a + test to verify that no invalid combinations are accepted. + + Additionally, fix two missing checks for AARCH64_OPND_SYSREG_TLBIP that were + preventing disassembly of tlbip instructions. + +2024-01-15 Andrew Carlotti + + aarch64: Refactor aarch64_sys_ins_reg_supported_p + Add an aarch64_feature_set field to aarch64_sys_ins_reg, and use this for + feature checks instead of testing against a list of operand codes. + +2024-01-15 Nick Clifton + + nm: Replace --with-symbol-versions with --without-symbol-versions in --help output + PR 31243 + nm: Fix --help output + +2024-01-15 Andrew Carlotti + + aarch64: Remove unused BTI feature bit + OK for master? + +2024-01-15 Nick Clifton + + Add generated source files and fix thinko in aarch64-asm.c + +2024-01-15 Srinath Parvathaneni + + aarch64: Add SVE2.1 Contiguous load/store instructions. + Hi, + + This patch add support for SVE2.1 instructions ld1q, + ld2q, ld3q and ld4q, st1q, st2q, st3q and st4q. + + Regression testing for aarch64-none-elf target and found no regressions. + + Ok for binutils-master? + + Regards, + Srinath. + +2024-01-15 Srinath Parvathaneni + + PATCH 5/6][Binutils] aarch64: Add SVE2.1 fmin and fmax instructions. + Hi, + + This patch add support for SVE2.1 instruction faddqv, + fmaxnmqv, fmaxqv, fminnmqv and fminqv. + + Regression testing for aarch64-none-elf target and found no regressions. + + Ok for binutils-master? + + Regards, + Srinath. + +2024-01-15 Srinath Parvathaneni + + aarch64: Add SVE2.1 dupq, eorqv and extq instructions. + Hi, + + This patch add support for SVE2.1 instruction dupq, eorqv and extq. + + Regression testing for aarch64-none-elf target and found no regressions. + + Ok for binutils-master? + + Regards, + Srinath. + +2024-01-15 Srinath Parvathaneni + + aarch64: Add support for FEAT_SVE2p1. + Hi, + + This patch add support for FEAT_SVE2p1 (SVE2.1 Extension) feature + along with +sve2p1 optional flag to enabe this feature. + + Also support for following SVE2p1 instructions is added + addqv, andqv, smaxqv, sminqv, umaxqv, uminqv and uminqv. + + Regression testing for aarch64-none-elf target and found no regressions. + + Ok for binutils-master? + + Regards, + Srinath. + +2024-01-15 Srinath Parvathaneni + + aarch64: Add support for FEAT_SME2p1 instructions. + Hi, + + This patch add support for FEAT_SME2p1 and "movaz" instructions + along with the optional flag +sme2p1. + + Following "movaz" instructions are add: + Move and zero two ZA tile slices to vector registers. + Move and zero four ZA tile slices to vector registers. + + Regression testing for aarch64-none-elf target and found no regressions. + + Ok for binutils-master? + + Regards, + Srinath. + +2024-01-15 Srinath Parvathaneni + + aarch64: Add support for FEAT_B16B16 instructions. + Hi, + + This patch add support for SVE2.1 and SME2.1 non-widening BFloat16 + (FEAT_B16B16) instructions. + + Following instructions predicated, unpredicated and indexed + variants are added in this patch. + + bfadd, bfclamp, bfmax bfmaxnm, bfmin,bfminnm, + bfmla,bfmls,bfmul and bfsub. + + Regression testing for aarch64-none-elf target and found no regressions. + + Ok for binutils-master? + + Regards, + Srinath. + +2024-01-15 Indu Bhagat + + gas/NEWS: announce the new SCFI command line option + +2024-01-15 Indu Bhagat + + gas: testsuite: add an x86 testsuite for SCFI + The testsuite for SCFI contains target-specific tests. + + When a test is executed with --scfi=experimental command line option, + the CFI annotations in the test .s files are skipped altogether by the + GAS for processing. The CFI directives in the input assembly files are, + however, validated by running the assembler one more time without + --scfi=experimental. + + Some testcases are used to highlight those asm constructs that the SCFI + machinery in GAS currently does not support: + + - Only System V AMD64 ABI is supported for now. Using either --32 or + --x32 with SCFI results in hard error. + See scfi-unsupported-1.s. + + - Untraceable stack-pointer manipulation in function epilougue and prologue. + See scfi-unsupported-2.s. + + - Using Dynamically Realigned Arguement Pointer (DRAP) register to + realign the stack. For SCFI, the CFA must be only REG_SP or REG_FP + based. See scfi-unsupported-drap-1.s + + Some testcases are used to highlight some diagnostics that the SCFI + machinery in GAS currently issues, with an intent to help user correct + inadvertent errors in their hand-written asm. An error is issued when + GAS finds that input asm is not amenable to correct CFI synthesis. + + - (#1) "Warning: SCFI: Asymetrical register restore" + - (#2) "Error: SCFI: usage of REG_FP as scratch not supported" + - (#3) "Error: SCFI: unsupported stack manipulation pattern" + + In case of (#2) and (#3), SCFI generation is skipped for the respective + function. Above is a subset of the warnings/errors implemented in the + code. + + gas/testsuite/: + * gas/scfi/README: New test. + * gas/scfi/x86_64/ginsn-add-1.l: New test. + * gas/scfi/x86_64/ginsn-add-1.s: New test. + * gas/scfi/x86_64/ginsn-dw2-regnum-1.l: New test. + * gas/scfi/x86_64/ginsn-dw2-regnum-1.s: New test. + * gas/scfi/x86_64/ginsn-pop-1.l: New test. + * gas/scfi/x86_64/ginsn-pop-1.s: New test. + * gas/scfi/x86_64/ginsn-push-1.l: New test. + * gas/scfi/x86_64/ginsn-push-1.s: New test. + * gas/scfi/x86_64/scfi-add-1.d: New test. + * gas/scfi/x86_64/scfi-add-1.l: New test. + * gas/scfi/x86_64/scfi-add-1.s: New test. + * gas/scfi/x86_64/scfi-add-2.d: New test. + * gas/scfi/x86_64/scfi-add-2.l: New test. + * gas/scfi/x86_64/scfi-add-2.s: New test. + * gas/scfi/x86_64/scfi-asm-marker-1.d: New test. + * gas/scfi/x86_64/scfi-asm-marker-1.l: New test. + * gas/scfi/x86_64/scfi-asm-marker-1.s: New test. + * gas/scfi/x86_64/scfi-asm-marker-2.d: New test. + * gas/scfi/x86_64/scfi-asm-marker-2.l: New test. + * gas/scfi/x86_64/scfi-asm-marker-2.s: New test. + * gas/scfi/x86_64/scfi-asm-marker-3.d: New test. + * gas/scfi/x86_64/scfi-asm-marker-3.l: New test. + * gas/scfi/x86_64/scfi-asm-marker-3.s: New test. + * gas/scfi/x86_64/scfi-bp-sp-1.d: New test. + * gas/scfi/x86_64/scfi-bp-sp-1.l: New test. + * gas/scfi/x86_64/scfi-bp-sp-1.s: New test. + * gas/scfi/x86_64/scfi-bp-sp-2.d: New test. + * gas/scfi/x86_64/scfi-bp-sp-2.l: New test. + * gas/scfi/x86_64/scfi-bp-sp-2.s: New test. + * gas/scfi/x86_64/scfi-callee-saved-1.d: New test. + * gas/scfi/x86_64/scfi-callee-saved-1.l: New test. + * gas/scfi/x86_64/scfi-callee-saved-1.s: New test. + * gas/scfi/x86_64/scfi-callee-saved-2.d: New test. + * gas/scfi/x86_64/scfi-callee-saved-2.l: New test. + * gas/scfi/x86_64/scfi-callee-saved-2.s: New test. + * gas/scfi/x86_64/scfi-callee-saved-3.d: New test. + * gas/scfi/x86_64/scfi-callee-saved-3.l: New test. + * gas/scfi/x86_64/scfi-callee-saved-3.s: New test. + * gas/scfi/x86_64/scfi-callee-saved-4.d: New test. + * gas/scfi/x86_64/scfi-callee-saved-4.l: New test. + * gas/scfi/x86_64/scfi-callee-saved-4.s: New test. + * gas/scfi/x86_64/scfi-cfg-1.d: New test. + * gas/scfi/x86_64/scfi-cfg-1.l: New test. + * gas/scfi/x86_64/scfi-cfg-1.s: New test. + * gas/scfi/x86_64/scfi-cfg-2.d: New test. + * gas/scfi/x86_64/scfi-cfg-2.l: New test. + * gas/scfi/x86_64/scfi-cfg-2.s: New test. + * gas/scfi/x86_64/scfi-cfi-label-1.d: New test. + * gas/scfi/x86_64/scfi-cfi-label-1.l: New test. + * gas/scfi/x86_64/scfi-cfi-label-1.s: New test. + * gas/scfi/x86_64/scfi-cfi-sections-1.d: New test. + * gas/scfi/x86_64/scfi-cfi-sections-1.l: New test. + * gas/scfi/x86_64/scfi-cfi-sections-1.s: New test. + * gas/scfi/x86_64/scfi-cofi-1.d: New test. + * gas/scfi/x86_64/scfi-cofi-1.l: New test. + * gas/scfi/x86_64/scfi-cofi-1.s: New test. + * gas/scfi/x86_64/scfi-diag-1.l: New test. + * gas/scfi/x86_64/scfi-diag-1.s: New test. + * gas/scfi/x86_64/scfi-diag-2.l: New test. + * gas/scfi/x86_64/scfi-diag-2.s: New test. + * gas/scfi/x86_64/scfi-dyn-stack-1.d: New test. + * gas/scfi/x86_64/scfi-dyn-stack-1.l: New test. + * gas/scfi/x86_64/scfi-dyn-stack-1.s: New test. + * gas/scfi/x86_64/scfi-enter-1.d: New test. + * gas/scfi/x86_64/scfi-enter-1.l: New test. + * gas/scfi/x86_64/scfi-enter-1.s: New test. + * gas/scfi/x86_64/scfi-fp-diag-2.l: New test. + * gas/scfi/x86_64/scfi-fp-diag-2.s: New test. + * gas/scfi/x86_64/scfi-indirect-mov-1.d: New test. + * gas/scfi/x86_64/scfi-indirect-mov-1.l: New test. + * gas/scfi/x86_64/scfi-indirect-mov-1.s: New test. + * gas/scfi/x86_64/scfi-indirect-mov-2.d: New test. + * gas/scfi/x86_64/scfi-indirect-mov-2.l: New test. + * gas/scfi/x86_64/scfi-indirect-mov-2.s: New test. + * gas/scfi/x86_64/scfi-indirect-mov-3.d: New test. + * gas/scfi/x86_64/scfi-indirect-mov-3.l: New test. + * gas/scfi/x86_64/scfi-indirect-mov-3.s: New test. + * gas/scfi/x86_64/scfi-indirect-mov-4.d: New test. + * gas/scfi/x86_64/scfi-indirect-mov-4.l: New test. + * gas/scfi/x86_64/scfi-indirect-mov-4.s: New test. + * gas/scfi/x86_64/scfi-indirect-mov-5.s: New test. + * gas/scfi/x86_64/scfi-lea-1.d: New test. + * gas/scfi/x86_64/scfi-lea-1.l: New test. + * gas/scfi/x86_64/scfi-lea-1.s: New test. + * gas/scfi/x86_64/scfi-leave-1.d: New test. + * gas/scfi/x86_64/scfi-leave-1.l: New test. + * gas/scfi/x86_64/scfi-leave-1.s: New test. + * gas/scfi/x86_64/scfi-pushq-1.d: New test. + * gas/scfi/x86_64/scfi-pushq-1.l: New test. + * gas/scfi/x86_64/scfi-pushq-1.s: New test. + * gas/scfi/x86_64/scfi-pushsection-1.d: New test. + * gas/scfi/x86_64/scfi-pushsection-1.l: New test. + * gas/scfi/x86_64/scfi-pushsection-1.s: New test. + * gas/scfi/x86_64/scfi-pushsection-2.d: New test. + * gas/scfi/x86_64/scfi-pushsection-2.l: New test. + * gas/scfi/x86_64/scfi-pushsection-2.s: New test. + * gas/scfi/x86_64/scfi-selfalign-func-1.d: New test. + * gas/scfi/x86_64/scfi-selfalign-func-1.l: New test. + * gas/scfi/x86_64/scfi-selfalign-func-1.s: New test. + * gas/scfi/x86_64/scfi-simple-1.d: New test. + * gas/scfi/x86_64/scfi-simple-1.l: New test. + * gas/scfi/x86_64/scfi-simple-1.s: New test. + * gas/scfi/x86_64/scfi-simple-2.d: New test. + * gas/scfi/x86_64/scfi-simple-2.l: New test. + * gas/scfi/x86_64/scfi-simple-2.s: New test. + * gas/scfi/x86_64/scfi-sub-1.d: New test. + * gas/scfi/x86_64/scfi-sub-1.l: New test. + * gas/scfi/x86_64/scfi-sub-1.s: New test. + * gas/scfi/x86_64/scfi-sub-2.d: New test. + * gas/scfi/x86_64/scfi-sub-2.l: New test. + * gas/scfi/x86_64/scfi-sub-2.s: New test. + * gas/scfi/x86_64/scfi-unsupported-1.l: New test. + * gas/scfi/x86_64/scfi-unsupported-1.s: New test. + * gas/scfi/x86_64/scfi-unsupported-2.l: New test. + * gas/scfi/x86_64/scfi-unsupported-2.s: New test. + * gas/scfi/x86_64/scfi-unsupported-3.l: New test. + * gas/scfi/x86_64/scfi-unsupported-3.s: New test. + * gas/scfi/x86_64/scfi-unsupported-4.l: New test. + * gas/scfi/x86_64/scfi-unsupported-4.s: New test. + * gas/scfi/x86_64/scfi-unsupported-cfg-1.l: New test. + * gas/scfi/x86_64/scfi-unsupported-cfg-1.s: New test. + * gas/scfi/x86_64/scfi-unsupported-cfg-2.l: New test. + * gas/scfi/x86_64/scfi-unsupported-cfg-2.s: New test. + * gas/scfi/x86_64/scfi-unsupported-drap-1.l: New test. + * gas/scfi/x86_64/scfi-unsupported-drap-1.s: New test. + * gas/scfi/x86_64/scfi-unsupported-insn-1.l: New test. + * gas/scfi/x86_64/scfi-unsupported-insn-1.s: New test. + * gas/scfi/x86_64/scfi-x86-64.exp: New file. + +2024-01-15 Indu Bhagat + + opcodes: i386-reg.tbl: Add a comment to reflect dependency on ordering + The ginsn representation keeps the DWARF register number of the + operands. The API ginsn_dw2_regnum relies on the the relative ordering + of these register entries in the table. Add a comment to make it clear. + + opcodes/ + * i386-reg.tbl: Add a comment. + +2024-01-15 Indu Bhagat + + gas: doc: update documentation for the new listing option + Add a new listing option, -i, to emit ginsn in the listing output. We + may also emit other SCFI information if necessary in the future. + + ginsn are most useful when seen alongside the assembly instructions. + Hence, they are emitted when the user includes the assembly instructions + in the listing output, i.e., "-ali=FILE". + + gas/doc/: + * as.texi: Add documentation for the new listing option, -i. + +2024-01-15 Indu Bhagat + + gas: x86: synthesize CFI for hand-written asm + This patch adds support in GAS to create generic GAS instructions + (a.k.a., the ginsn) for the x86 backend (AMD64 ABI only at this time). + Using this ginsn infrastructure, GAS can then synthesize CFI for + hand-written asm for x86_64. + + A ginsn is a target-independent representation of the machine + instructions. One machine instruction may need one or more ginsn. + + This patch also adds skeleton support for printing ginsn in the listing + output for debugging purposes. + + Since the current use-case of ginsn is to synthesize CFI, the x86 target + needs to generate ginsns necessary for the following machine + instructions only: + + - All change of flow instructions, including all conditional and + unconditional branches, call and return from functions. + - All register saves and unsaves to the stack. + - All instructions affecting the two registers that could potentially + be used as the base register for CFA tracking. For SCFI, the base + register for CFA tracking is limited to REG_SP and REG_FP only for + now. + + The representation of ginsn is kept simple: + + - GAS instruction has GINSN_NUM_SRC_OPNDS (defined to be 2 at this time) + number of source operands and one destination operand at this time. + - GAS instruction uses DWARF register numbers in its representation and + does not track register size. + - GAS instructions carry location information (file name and line + number). + - GAS instructions are ID's with a natural number in order of their + addtion to the list. This can be used as a proxy for the static + program order of the corresponding machine instructions. + + Note that, GAS instruction (ginsn) format does not support + GINSN_TYPE_PUSH and GINSN_TYPE_POP. Some architectures, like aarch64, + do not have push and pop instructions, but rather STP/LDP/STR/LDR etc. + instructions. Further these instructions have a variety of addressing + modes, like offset, pre-indexing and post-indexing etc. Among other + things, one of differences in these addressing modes is _when_ the addr + register is updated with the result of the address calculation: before + or after the memory operation. To best support such needs, the generic + instructions like GINSN_TYPE_LOAD, GINSN_TYPE_STORE together with + GINSN_TYPE_ADD, and GINSN_TYPE_SUB may be used. + + The functionality provided in ginsn.c and scfi.c is compiled in when a + target defines TARGET_USE_SCFI and TARGET_USE_GINSN. This can be + revisited later when there are other use-cases of creating ginsn's in + GAS, apart from the current use-case of synthesizing CFI for + hand-written asm. + + Support is added only for System V AMD64 ABI for ELF at this time. If + the user enables SCFI with --32, GAS issues an error: + + "Fatal error: SCFI is not supported for this ABI" + + For synthesizing (DWARF) CFI, the SCFI machinery requires the programmer + to adhere to some pre-requisites for their asm: + - Hand-written asm block must begin with a .type foo, @function + It is highly recommended to, additionally, also ensure that: + - Hand-written asm block ends with a .size foo, .-foo + + The SCFI machinery encodes some rules which align with the standard + calling convention specified by the ABI. Apart from the rules, the SCFI + machinery employs some heuristics. For example: + - The base register for CFA tracking may be either REG_SP or REG_FP. + - If the base register for CFA tracking is REG_SP, the precise amount of + stack usage (and hence, the value of REG_SP) must be known at all times. + - If using dynamic stack allocation, the function must switch to + FP-based CFA. This means using instructions like the following (in + AMD64) in prologue: + pushq %rbp + movq %rsp, %rbp + and analogous instructions in epilogue. + - Save and Restore of callee-saved registers must be symmetrical. + However, the SCFI machinery at this time only warns if any such + asymmetry is seen. + + These heuristics/rules are architecture-independent and are meant to + employed for all architectures/ABIs using SCFI in the future. + + gas/ + * Makefile.am: Add new files. + * Makefile.in: Regenerated. + * as.c (defined): Handle documentation and listing option for + ginsns and SCFI. + * config/obj-elf.c (obj_elf_size): Invoke ginsn_data_end. + (obj_elf_type): Invoke ginsn_data_begin. + * config/tc-i386.c (x86_scfi_callee_saved_p): New function. + (ginsn_prefix_66H_p): Likewise. + (ginsn_dw2_regnum): Likewise. + (x86_ginsn_addsub_reg_mem): Likewise. + (x86_ginsn_addsub_mem_reg): Likewise. + (x86_ginsn_alu_imm): Likewise. + (x86_ginsn_move): Likewise. + (x86_ginsn_lea): Likewise. + (x86_ginsn_jump): Likewise. + (x86_ginsn_jump_cond): Likewise. + (x86_ginsn_enter): Likewise. + (x86_ginsn_safe_to_skip): Likewise. + (x86_ginsn_unhandled): Likewise. + (x86_ginsn_new): New functionality to generate ginsns. + (md_assemble): Invoke x86_ginsn_new. + (s_insn): Likewise. + (i386_target_format): Add hard error for usage of SCFI with non AMD64 ABIs. + * config/tc-i386.h (TARGET_USE_GINSN): New definition. + (TARGET_USE_SCFI): Likewise. + (SCFI_MAX_REG_ID): Likewise. + (REG_FP): Likewise. + (REG_SP): Likewise. + (SCFI_INIT_CFA_OFFSET): Likewise. + (SCFI_CALLEE_SAVED_REG_P): Likewise. + (x86_scfi_callee_saved_p): Likewise. + * gas/listing.h (LISTING_GINSN_SCFI): New define for ginsn and + SCFI. + * gas/read.c (read_a_source_file): Close SCFI processing at end + of file read. + * gas/scfidw2gen.c (scfi_process_cfi_label): Add implementation. + (scfi_process_cfi_signal_frame): Likewise. + * subsegs.h (struct frch_ginsn_data): New forward declaration. + (struct frchain): New member for ginsn data. + * gas/subsegs.c (subseg_set_rest): Initialize the new member. + * symbols.c (colon): Invoke ginsn_frob_label to convey + user-defined labels to ginsn infrastructure. + * ginsn.c: New file. + * ginsn.h: New file. + * scfi.c: New file. + * scfi.h: New file. + +2024-01-15 Indu Bhagat + + opcodes: x86: new marker for insns that implicitly update stack pointer + Some x86 instructions affect the stack pointer implicitly. Add a new + operand constraint to reflect this. This will be useful for SCFI + implmentation to ensure its correctness. + + Mark all push, pop, call, ret, enter, leave, INT, iret instructions. + + opcodes/ + * i386-gen.c: Update opcode_modifiers. + * i386-opc.h: Add a new constraint. + * i386-opc.tbl: Update the affected instructions. + * i386-tbl.h: Regenerated. + +2024-01-15 Indu Bhagat + + opcodes: gas: x86: define and use Rex2 as attribute not constraint + Rex2 is currently an operand constraint. For the upcoming SCFI + implementation in GAS, we need to identify operations which implicitly + update the stack pointer. An operand constraint enumerator for implicit + stack op seems more appropriate than an attribute. However, two opcodes + currently necessitate both Rex2 and an implicit stack op marker; this + prompts revisiting the current representations a bit. + + Make Rex2 a standalone attribute, so that later a new operand constraint + may be added for IMPLICIT_STACK_OP. + + ChangeLog: + * gas/config/tc-i386.c (is_apx_rex2_encoding): Update the check. + * opcodes/i386-gen.c: Add a new BITFIELD for Rex2. + * opcodes/i386-opc.h (REX2_REQUIRED): Remove. + * opcodes/i386-opc.tbl: Remove Rex2 operand constraint. + * opcodes/i386-tbl.h: Regenerated. + +2024-01-15 Indu Bhagat + + gas: scfidw2gen: new functionality to prepare for SCFI + Define a new set of handlers for CFI directives for the purpose of SCFI. + The SCFI machinery ignores many of the user-specified CFI direcives when + SCFI is in effect. A warning ("Warning: SCFI ignores most + user-specified CFI directives") is issued once per file. The following + CFI directives, however, are not ignored: + - .cfi_sections + - .cfi_label + - .cfi_signal_frame + + gas/ + * Makefile.am: Add new files to GAS_CFILES and HFILES. + * Makefile.in: Likewise. + * gas/read.c (scfi_pop_insert): New define. + (pobegin): Use the SCFI handlers. + * scfidw2gen.c: New file. + * scfidw2gen.h: New file. + +2024-01-15 Indu Bhagat + + gas: add new command line option --scfi=experimental + When the command line option --scfi=experimenta is passed to the GNU + assembler, it will synthesize DWARF call frame information (CFI) for the + input assembly. + + The option --scfi=experimental will also ignore most of the existing + .cfi_* directives, if already contained in the provided input file. + Only the following CFI directives will not be ignored: + - .cfi_sections, + - .cfi_label, + - .cfi_signal_frame + + To use SCFI, a target will need to: + - define TARGET_USE_SCFI and TARGET_USE_GINSN, and other necessary + definitions, + - provide means to help GAS understand the target specific instruction + semantics by creating ginsns. + + The upcoming support for SCFI is inteded to be experimental, hence the + option --scfi=experimental. The --scfi= may see more options like + --scfi=[all,none] added in future, once the SCFI support in GAS is + mature and robust. The offering may also see for example, an + --scfi=inline option for dealing with inline asm may be added in the + future. In --scfi=inline option, the GNU assembler may consume (and not + ignore) the compiler generated CFI for the code surrounding the inline + asm. + + Also document the option. + + gas/ + * as.c (show_usage): Add support for --scfi=experimental. + (parse_args): Likewise. + * as.h (enum synth_cfi_type): Define new type. + * doc/as.texi: Document the new option. + +2024-01-15 Indu Bhagat + + gas: dw2gencfi: externalize the all_cfi_sections + gas/ + * dw2gencfi.h: Declare all_cfi_sections as extern. + +2024-01-15 Indu Bhagat + + gas: dw2gencfi: expose dot_cfi_sections for scfidw2gen + scfidw2gen will use this for processing the .cfi_sections directive. + + gas/ + * dw2gencfi.c (dot_cfi_sections): Not static anymore. + * dw2gencfi.h (dot_cfi_sections): Mark as extern. + +2024-01-15 Indu Bhagat + + gas: dw2gencfi: move some tc_* defines to the header file + Move the following three defines to the header file, so the SCFI + machinery can use them: + - tc_cfi_frame_initial_instructions + - tc_cfi_startproc + - tc_cfi_endproc + + gas/ + * dw2gencfi.c: Move from ... + * dw2gencfi.h: ... to here. + +2024-01-15 Indu Bhagat + + gas: dw2gencfi: expose a new cfi_set_last_fde API + gas/ + * dw2gencfi.c (cfi_set_last_fde): New definition. + (dot_cfi_endproc): Use it. + (dot_cfi_fde_data): Likewise. + (dot_cfi_inline_lsda): Likewise. + * dw2gencfi.h (struct fde_entry): New declaration. + (cfi_set_last_fde): Likewise. + +2024-01-15 Indu Bhagat + + gas: dw2gencfi: use all_cfi_sections instead of cfi_sections + The code in dw2gencfi.c was checking variable cfi_sections and + all_cfi_sections seemingly randomly. Accessing all_cfi_sections seems + to the correct variable to access. + + The data in cfi_sections has already been propagated to all_cfi_sections + once cfi_dot_startproc () has been called. + + gas/ + * dw2gencfi.c (dot_cfi_startproc): Use all_cfi_sections + instead. + (dot_cfi_endproc): Likewise. + (dot_cfi_fde_data): Likewise. + +2024-01-15 Indu Bhagat + + gas: dw2gencfi: minor rejig for cfi_sections_set and all_cfi_sections + cfi_sections_set is best set to true in cfi_dot_startproc (). Setting + it to true again in other APIs (dot_cfi_endproc, dot_cfi_fde_data, and + cfi_finish) is unnecessary. Also, move setting the global var + all_cfi_sections into cfi_set_sections (). + + gas/ + * dw2gencfi.c (cfi_set_sections): Set cfi_sections_set and + cfi_sections here. + (dot_cfi_startproc): Remove unnecessarily setting + cfi_set_sections to true. + (dot_cfi_endproc): Likewise. + (dot_cfi_fde_data): Likewise. + (cfi_finish): Likewise. + +2024-01-15 GDB Administrator + + Automatic date update in version.in + +2024-01-14 Tom de Vries + + [gdb/testsuite] Fix gdb.mi/mi-dprintf.exp with read1 + When running test-case gdb.mi/mi-dprintf.exp with check-read1, I run into: + ... + (gdb) ^M + PASS: gdb.mi/mi-dprintf.exp: gdb: mi 2nd dprintf stop + -data-evaluate-expression stderr^M + ^done,value="0x7ffff7e4a420 <_IO_2_1_stderr_>"^M + (gdb) FAIL: gdb.mi/mi-dprintf.exp: stderr symbol check + ... + + The problem is in proc mi_gdb_is_stderr_available: + ... + proc mi_gdb_is_stderr_available {} { + set has_stderr_symbol false + gdb_test_multiple "-data-evaluate-expression stderr" "stderr symbol check" { + -re "\\^error,msg=\"'stderr' has unknown type; cast it to its declared type\"\r\n$::mi_gdb_prompt$" { + } + -re "$::mi_gdb_prompt$" { + set has_stderr_symbol true + } + } + ... + which uses a gdb_test_multiple that is supposed to use the mi prompt, but + doesn't use -prompt to indicate this. Consequently, the default patterns use + the regular gdb prompt, which trigger earlier than the two custom patterns + which use "$::mi_gdb_prompt$". + + Fix this by adding the missing -prompt "$::mi_gdb_prompt$" arguments. + + While we're at it, make the gdb_test_multiple call a bit more readable by + using variables, and by using -wrap. + + Tested on x86_64-linux, with: + - gcc and clang (to trigger both the has_stderr_symbol true and false cases) + - make check and make check-read1. + +2024-01-14 Tom de Vries + + [gdb/testsuite] Fix gdb.cp/namespace.exp with read1 + With check-read1 we run into: + ... + (gdb) break DNE>::DNE^M + Function "DNE>::DNE" not defined.^M + Make breakpoint pending on future shared library load? (y or [n]) y^M + Breakpoint 9 (DNE>::DNE) pending.^M + n^M + (gdb) FAIL: gdb.cp/namespace.exp: br malformed '>' (got interactive prompt) + n^M + ... + + The question is supposed to be handled by the question and response arguments + to this gdb_test call: + ... + gdb_test "break DNE>::DNE" "" "br malformed \'>\'" \ + "Make breakpoint pending on future shared library load?.*" "y" + ... + but both this and the builtin handling in gdb_test_multiple triggers. + + The cause of this is that the question argument regexp is incomplete. + + Fix this by making sure that the entire question is matched in the regexp: + ... + set yn_re [string_to_regexp {(y or [n])}] + ... + "Make breakpoint pending on future shared library load\\? $yn_re " "Y" + ... + + Tested on x86_64-linux. + +2024-01-14 GDB Administrator + + Automatic date update in version.in + +2024-01-13 Yang Liu + + gdb: RISC-V: Refine lr/sc sequence support + Per RISC-V spec, the lr/sc sequence can consist of up to 16 instructions, and we + cannot insert breakpoints in the middle of this sequence. Before this, we only + detected a specific pattern (the most common one). This patch improves this part + and now supports more complex pattern detection. + + Approved-By: Andrew Burgess + Reviewed-by: Palmer Dabbelt + +2024-01-13 Yang Liu + + Add myself to gdb/MAINTAINERS + +2024-01-13 Vladimir Mezentsev + + gprofng: 30889 can't compile without large file support + gprofng/ChangeLog + 2024-01-12 Vladimir Mezentsev + + PR 30889 + * src/util.h (O_LARGEFILE): Define to 0, if not defined. + +2024-01-13 GDB Administrator + + Automatic date update in version.in + +2024-01-12 Vladimir Mezentsev + + gprofng: fix 3 bugzillas against gp-display-html + Fix two cases where gp-display-html terminates prematurely because the + input format is not recognized. This problem occurs in the function + overview and caller-callee parts of the code. + The fix consists of new regular expressions and a different approach + in handling the input from gp-display-text. + Also fix a performance problem in the caller-callee part that has a + noticeable impact on the performance for large applications. + + gprofng/ChangeLog + 2024-01-10 Ruud van der Pas + + PR gprofng/30438 + PR gprofng/30439 + PR gprofng/30942 + * gp-display-html/gp-display-html.in: fixes the issues. + +2024-01-12 Dimitar Dimitrov + + sim: Fix compile errors + The following change broke simulator testsuite with host GCC 13: + commit 435ad222b3de93fa647fba7221eece36b1b395eb + sim: warnings: compile build tools with -Werror too + + Host GCC13 complains about missing function prototypes: + + binutils/sim/testsuite/common/bits-gen.c:26:1: error: no previous prototype for ‘gen_struct’ [-Werror=missing-prototypes] + 26 | gen_struct (void) + | ^~~~~~~~~~ + + Fix by making the functions static, which instructs the compiler that + there is no need for a prototype. + +2024-01-12 David Faust + + bpf: fix relocation addend incorrect symbol value + Relocations installed by the BPF ELF backend were sometimes incorrectly + adding the symbol value to the relocation entry addend, when the correct + relocation value was already stored in the addend. This could lead to a + relocation effectively adding the symbol value twice. + + Fix that by making bpf_elf_generic_reloc () more similar to the flow of + bfd_install_relocation in the case where howto->install_addend is set, + which is how it ought to behave. + + bfd/ + * bpf-reloc.def (R_BPF_64_ABS32, R_BPF_64_ABS64) + (R_BPF_64_NODYLD32): Set partial_inplace to true. + * elf64-bpf.c (bpf_elf_generic_reloc): Do not include the value + of the symbol when installing relocation. Copy some additional + logic from bfd_elf_generic_reloc. + + gas/ + * testsuite/gas/bpf/bpf.exp: Run new test. + * testsuite/gas/bpf/elf-relo-1.d: New. + * testsuite/gas/bpf/elf-relo-1.s: New. + +2024-01-12 Andrew Burgess + + gdb/testsuite: fix failure in gdb.python/py-inferior.exp + After this commit: + + commit 1925bba80edd37c2ef90ef1d2c599dfc2fc17f72 + Date: Thu Jan 4 10:01:24 2024 +0000 + + gdb/python: add gdb.InferiorThread.__repr__() method + + failures were reported for gdb.python/py-inferior.exp. + + The test grabs a gdb.InferiorThread object representing an inferior + thread, and then, later in the test, expects this Python object to + become invalid when the inferior thread has exited. + + The gdb.InferiorThread object was obtained from the list returned by + calling gdb.Inferior.threads(). + + The mistake I made in the original commit was to assume that the order + of the threads returned from gdb.Inferior.threads() somehow reflected + the thread creation order. Specifically, I was expecting the main + thread to be first in the list, and "other" threads to appear ... not + first. + + However, the gdb.Inferior.threads() function creates a list and + populates it from a map. The order of the threads in the returned + list has no obvious relationship to the thread creation order, and can + vary from host to host. + + On my machine the ordering was as I expected, so the test passed for + me. For others the ordering was not as expected, and it just happened + that we ended up recording the gdb.InferiorThread for the main thread. + + As the main thread doesn't exit (until the test is over), the + gdb.InferiorThread object never became invalid, and the test failed. + + Fixed in this commit by taking more care to correctly find a non-main + thread. I do this by recording the main thread early on (when there + is only one inferior thread), and then finding any thread that is not + this main thread. + + Then, once all of the secondary threads have exited, I know that the + second InferiorThread object I found should now be invalid. + + The test still passes for me, and I believe this should fix the issue + for everyone else too. + + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31238 + +2024-01-12 Andrew Burgess + + Update copyright year range in header of all files managed by GDB + This commit is the result of the following actions: + + - Running gdb/copyright.py to update all of the copyright headers to + include 2024, + + - Manually updating a few files the copyright.py script told me to + update, these files had copyright headers embedded within the + file, + + - Regenerating gdbsupport/Makefile.in to refresh it's copyright + date, + + - Using grep to find other files that still mentioned 2023. If + these files were updated last year from 2022 to 2023 then I've + updated them this year to 2024. + + I'm sure I've probably missed some dates. Feel free to fix them up as + you spot them. + +2024-01-12 Andrew Carlotti + + aarch64: Remove unused code + Most of this code became redundant in my previous commits, but ARMV8_6A_SVE was + already dead when it was first added. + + aarch64: Make FEAT_ASMv8p2 instruction aliases always available + There's no reason to disallow the aliases when the aliased instructions are + always available. The new behaviour matches existing LLVM behaviour. + + aarch64: Add +xs flag for existing instructions + Additionally, change FEAT_XS tlbi variants to be gated on "+xs" instead of + "+d128". This is an incremental improvement; there are still some FEAT_XS tlbi + variants that are gated incorrectly or missing entirely. + + aarch64: Add +wfxt flag for existing instructions + + aarch64: Add +rcpc2 flag for existing instructions + + aarch64: Add +flagm2 flag for existing instructions + + aarch64: Add +frintts flag for existing instructions + + aarch64: Add +jscvt flag for existing fjcvtzs instruction + + aarch64: Fix option parsing to disallow prefixes of valid options + Add "+rdm" as an explicit alias for "+rdma", to maintain existing compatibility + with Clang. + + aarch64: Add +fcma alias for +compnum + + aarch64: Fix +lse feature flag dependency + +2024-01-12 Andrew Burgess + + gdb/doc: update examples in gdb.Progspace and gdb.Objfile docs + This commit updates the Python example code in the gdb.Progspace and + gdb.Objfile sections of the docs. Changes made: + + 1. Use @value{GDBP} for the GDB prompt rather than + hard-coding (gdB), + + 2. Use @group...@end group to split the example code into + unbreakable chunks, and + + 3. Add parenthesis to the Python print() calls in the examples. In + Python 2 it was OK to drop the parenthesis, but now GDB is Python 3 + only, example code should include the parenthesis. + + Approved-By: Eli Zaretskii + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb/doc: add some notes on selecting suitable attribute names + In previous commits I've added Object.__dict__ support to gdb.Inferior + and gdb.InferiorThread, this is similar to the existing support for + gdb.Objfile and gdb.Progspace. + + This commit extends the documentation to offer the user some guidance + on selecting good names for their custom attributes so they + can (hopefully) avoid conflicting with any future attributes that GDB + might add. + + The rules I've proposed are: + + 1. Don't start user attributes with a lower case letter, all the + current GDB attributes start with a lower case letter, and I suspect + all future attributes would also start with a lower case letter, and + + 2. Don't start user attributes with a double underscore, this risks + conflicting with Python built in attributes (e.g. __dict__) - though + clearly the user would need to start and end with a double + underscore, but it seemed easier just to say no double underscores. + + I'm doing this as a separate commit as I've updated the docs for the + existing gdb.Objfile and gdb.Progspace so they all reference a single + paragraph on selecting attribute names. + + Reviewed-By: Eli Zaretskii + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb/python: Add gdb.InferiorThread.__dict__ attribute + The gdb.Objfile, gdb.Progspace, gdb.Type, and gdb.Inferior Python + types already have a __dict__ attribute, which allows users to create + user defined attributes within the objects. This is useful if the + user wants to cache information within an object. + + This commit adds the same functionality to the gdb.InferiorThread + type. + + After this commit there is a new gdb.InferiorThread.__dict__ + attribute, which is a dictionary. A user can, for example, do this: + + (gdb) pi + >>> t = gdb.selected_thread() + >>> t._user_attribute = 123 + >>> t._user_attribute + 123 + >>> + + There's a new test included. + + Reviewed-By: Eli Zaretskii + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb/python: Add gdb.Inferior.__dict__ attribute + The gdb.Objfile, gdb.Progspace, and gdb.Type Python types already have + a __dict__ attribute, which allows users to create user defined + attributes within the objects. This is useful if the user wants to + cache information within an object. + + This commit adds the same functionality to the gdb.Inferior type. + + After this commit there is a new gdb.Inferior.__dict__ attribute, + which is a dictionary. A user can, for example, do this: + + (gdb) pi + >>> i = gdb.selected_inferior() + >>> i._user_attribute = 123 + >>> i._user_attribute + 123 + >>> + + There's a new test included. + + Reviewed-By: Eli Zaretskii + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb/python: remove users ability to create gdb.Progspace objects + I noticed that it is possible for the user to create a new + gdb.Progspace object, like this: + + (gdb) pi + >>> p = gdb.Progspace() + >>> p + + >>> p.is_valid() + False + + As the new gdb.Progspace object is not associated with an actual C++ + program_space object within GDB core, then the new gdb.Progspace is + created invalid, and there is no way in which the new object can ever + become valid. + + Nor do I believe there's anywhere in the Python API where it makes + sense to consume an invalid gdb.Progspace created in this way, for + example, the gdb.Progspace could be passed as the locus to + register_type_printer, but all that would happen is that the + registered printer would never be used. + + In this commit I propose to remove the ability to create new + gdb.Progspace objects. Attempting to do so now gives an error, like + this: + + (gdb) pi + >>> gdb.Progspace() + Traceback (most recent call last): + File "", line 1, in + TypeError: cannot create 'gdb.Progspace' instances + + Of course, there is a small risk here that some existing user code + might break ... but if that happens I don't believe the user code can + have been doing anything useful, so I see this as a small risk. + + Reviewed-By: Eli Zaretskii + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb/python: add gdb.Frame.__repr__() method + Add a gdb.Frame.__repr__() method. Before this patch we would see + output like this: + + (gdb) pi + >>> gdb.selected_frame() + + + After this patch, we now see: + + (gdb) pi + >>> gdb.selected_frame() + + + More verbose, but, I hope, more useful. + + If the gdb.Frame becomes invalid, then we will see: + + (gdb) pi + >>> invalid_frame_variable + + + which is inline with how other invalid objects are displayed. + + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb/python: add gdb.InferiorThread.__repr__() method + Add a gdb.InferiorThread.__repr__() method. Before this patch we + would see output like this: + + (gdb) pi + >>> gdb.selected_thread() + + + After this patch, we now see: + + (gdb) pi + >>> gdb.selected_thread() + + + More verbose, but, I hope, more useful. + + If the gdb.InferiorThread becomes invalid, then we will see: + + (gdb) pi + >>> invalid_thread_variable + + + Which is inline with how other invalid objects are displayed. + + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb/python: hoist common invalid object repr code into py-utils.c + Many object types now have a __repr__() function implementation. A + common pattern is that, if an object is invalid, we print its + representation as: . + + I thought it might be a good idea to move the formatting of this + specific representation into a utility function, and then update all + of our existing code to call the new function. + + The only place where I haven't made use of the new function is in + unwind_infopy_repr, where we currently return a different string. + This case is a little different as the UnwindInfo is invalid because + it references a frame, and it is the frame itself which is invalid. + That said, I think it would be fine to switch to using the standard + format; if the UnwindInfo references an invalid frame, then the + UnwindInfo is itself invalid. But changing this would be an actual + change in behaviour, while all the other changes in this commit are + just refactoring. + + Approved-By: Tom Tromey + +2024-01-12 Andrew Burgess + + gdb: add trailing '/' when using 'complete' with directory names + This patch contains work pulled from this previously proposed patch: + + https://inbox.sourceware.org/gdb-patches/20210213220752.32581-2-lsix@lancelotsix.com/ + + But has been modified by me. Credit for the original idea and + implementation goes to Lancelot, any bugs in this new iteration belong + to me. + + Consider the executable `/tmp/foo/my_exec', and if we assume `/tmp' is + empty other than the `foo' sub-directory, then currently within GDB, + if I type: + + (gdb) file /tmp/f + + and then hit TAB, GDB completes this to: + + (gdb) file /tmp/foo/ + + notice that not only did GDB fill in the whole of `foo', but GDB also + added a trailing '/' character. This is done within readline when the + path that was just completed is a directory. However, if I instead + do: + + (gdb) complete file /tmp/f + file /tmp/foo + + I now see the completed directory name, but the trailing '/' is + missing. The reason is that, in this case, the completions are not + offered via readline, but are handled entirely within GDB, and so + readline never gets the chance to add the trailing '/' character. + + The above patch added filename option support to GDB, which included + completion of the filename options. This initially suffered from the + same problem that I've outlined above, but the above patch proposed a + solution to this problem, but this solution only applied to filename + options (which have still not been added to GDB), and was mixed in + with the complete filename options support. + + This patch pulls out just the fix for the trailing "/" problem, and + applies it to GDB's general filename completion. This patch does not + add filename options to GDB, that can always be done later, but I + think this small part is itself a useful fix. + + One of the biggest changes I made in this version is that I got rid of + the set_from_readline member function, instead, I now pass the value + of m_from_readline into the completion_tracker constructor. + + I then moved the addition of the trailing '/' into filename_completer + so that it is applied in the general filename completion case. I also + added a call to gdb_tilde_expand which was missing from the original + patch, I haven't tested, but I suspect that this meant that the + original patch would not add the trailing '/' if the user entered a + path starting with a tilde character. + + When writing the test for this patch I ran into two problems. + + The first was that the procedures in lib/completion-support.exp relied + on the command being completed for the test name. This is fine for + many commands, but not when completing a filename, if we use the + command in this case the test name will (potentially) include the name + of the directory in which the test is being run, which means we can't + compare results between two runs of GDB from different directories. + + So in this commit I've gone through completion-support.exp and added a + new (optional) testname argument to many of the procedures, this + allows me to give a unique test name, that doesn't include the path + for my new tests. + + The second issue was in the procedure make_tab_completion_list_re, + this builds the completion list which is displayed after a double tab + when there are multiple possible completions. + + The procedure added the regexp ' +' after each completion, and then + added another ' +' at the very end of the expected output. So, if we + expected to match the name of two functions 'f1' and 'f2' the + generated regexp would be: 'f1 +f2 + +'. This would match just fine, + the actual output would be: 'f1 f2 ', notice that we get two spaces + after each function name. + + However, if we complete two directory names 'd1' and 'd2' then the + output will be 'd1/ d2/ '. Notice that now we only have a single + space between each match, however, we do get the '/' added instead. + + What happens is that when presenting the matches, readline always adds + the appropriate trailing character; if we performed tab completion of + 'break f1' then, as 'f1' is a unique match, we'd get 'break f1 ' with + a trailing space added. However, if we complete 'file d1' then we get + 'file d1/'. Then readline is adding a single space after each + possible match, including the last one, which accounts for the + trailing space character. + + To resolve this I've simply remove the addition o the second ' +' + within make_tab_completion_list_re, for the function completion + example I gave above the expected pattern is now 'f1 +f2 +', which for + the directory case we expect 'd1/ +d2/ +', both of which work just + fine. + + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=16265 + Co-Authored-By: Lancelot SIX + Approved-By: Tom Tromey + Reviewed-By: John Baldwin + +2024-01-12 Andrew Burgess + + gdb/python: New InferiorThread.ptid_string attribute + This commit adds a new InferiorThread.ptid_string attribute. This + read-only attribute contains the string returned by target_pid_to_str, + which actually converts a ptid (not pid) to a string. + + This is the string that appears (at least in part) in the output of + 'info threads' in the 'Target Id' column, but also in the thread + exited message that GDB prints. + + Having access to this string from Python is useful for allowing + extensions identify threads in a similar way to how GDB core would + identify the thread. + + Reviewed-By: Eli Zaretskii + Approved-By: Tom Tromey + +2024-01-12 Tom de Vries + + [gdb/testsuite] Use require in gdb.dwarf2/assign-variable-value-to-register.exp + In test-case gdb.dwarf2/assign-variable-value-to-register.exp a return is + missing here after the unsupported: + ... + if { ![is_x86_64_m64_target] } { + unsupported "unsupported architecture" + } + ... + and consequently on aarch64-linux I ran into an UNSUPPORTED followed by 3 + FAILs. + + Fix this by simply using require: + ... + require is_x86_64_m64_target + ... + + Tested on x86_64-linux and aarch64-linux. + +2024-01-12 Indu Bhagat + + gas: sframe: warn when skipping SFrame FDE generation + Fix PR gas/31213. + + gas/ + PR gas/31213 + * gen-sframe.c (sframe_do_cfi_insn): Add new warning. + + gas/testsuite/ + * gas/cfi-sframe/common-empty-1.d: Test the new warning as well. + * gas/cfi-sframe/common-empty-2.d: Likewise. + +2024-01-12 mengqinggang + + LoongArch: Fix relaxation overflow caused by section alignment + When deleting NOP instructions addend by .align at second pass, this may cause + the PC decrease but the symbol address to remain unchanged due to section + alignment. + + To solve this question, we subtract a maximux alignment of all sections like + RISC-V. + +2024-01-12 Cui, Lili + + x86: Fix indentation and use true/false instead of 1/0 + gas/ChangeLog: + + * config/tc-i386.c (establish_rex): Fix indentation. + (check_EgprOperands): Use true/false instead of 1/0. + +2024-01-12 GDB Administrator + + Automatic date update in version.in + +2024-01-11 Simon Marchi + + gdb: fix frame passed to gdbarch_value_to_register in value_assign + Commit 78f2fd84e83 ("gdb: remove VALUE_REGNUM, add value::regnum") + introduced an unexpected change in value_assign. It replaced + `get_prev_frame_always (next_frame)` with `next_frame`in the call to + gdbarch_value_to_register. + + This is the result of a merge error, since I previously had a patch to + change gdbarch_value_to_register to take the next frame, and later + decided to drop it. Revert that change. + + Add a test based on the DWARF assembler to expose the problem and test + the fix. I also tested on ppc64le to make sure the problem reported in + PR 31231 was fixed. + + Change-Id: Ib8b851287ac27a4b2e386f7b680cf65865e6aee6 + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31231 + +2024-01-11 Tom de Vries + + [gdb/testsuite] Fix gdb.dwarf2/dw2-entry-points.exp on ppc64le + On ppc64le-linux, I run into: + ... + (gdb) bt^M + #0 0x00000000100006dc in foobar (J=2)^M + #1 0x000000001000070c in prog ()^M + (gdb) FAIL: gdb.dwarf2/dw2-entry-points.exp: bt foo + ... + + The test-case attemps to emulate additional entry points of a function, with + function bar having entry points foo and foobar: + ... + (gdb) p bar + $1 = {void (int, int)} 0x1000064c + (gdb) p foo + $2 = {void (int, int)} 0x10000698 + (gdb) p foobar + $3 = {void (int)} 0x100006d0 + ... + + However, when setting a breakpoint on the entry point foo: + ... + (gdb) b foo + Breakpoint 1 at 0x100006dc + ... + it ends up in foobar instead of in foo, due to prologue skipping, and + consequently the backtrace show foobar instead foo. + + The problem is that the test-case does not emulate an actual prologue at each + entry point. + + Fix this by disabling the prologue skipping when setting a breakpoint, using + "break *foo". + + Tested on ppc64le-linux and x86_64-linux. + + Tested-By: Guinevere Larsen + Approved-By: Ulrich Weigand + + PR testsuite/31232 + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31232 + +2024-01-11 Tom de Vries + + [gdb/testsuite] Extend gdb.base/kill-during-detach.exp + I ran into the following FAIL: + ... + (gdb) python kill_and_detach()^M + Traceback (most recent call last):^M + File "", line 1, in ^M + File "", line 7, in kill_and_detach^M + gdb.error: Selected thread is running.^M + Error while executing Python code.^M + (gdb) FAIL: gdb.base/kill-during-detach.exp: exit_p=true: checkpoint_p=true: \ + python kill_and_detach() + ... + + The FAIL happens as follows: + - gdb is debugging a process A + - a checkpoint is created, in other words, fork is called in the inferior, + after which we have: + - checkpoint 0 (the fork parent, process A), and + - checkpoint 1 (the fork child, process B). + - during checkpoint creation, lseek is called in the inferior (process A) for + all file descriptors, and it returns != -1 for at least one file descriptor. + - the process A continues in the background + - gdb detaches, from process A + - gdb switches to process B, in other words, it restarts checkpoint 1 + - while restarting checkpoint 1, gdb tries to call lseek in the inferior + (process B), but this fails because gdb incorrectly thinks that inferior B + is running. + + This happens because linux_nat_switch_fork patches the pid of process B into + the current inferior and current thread which where originally representing + process A. So, because process A was running in the background, the + thread_info fields executing and resumed are set accordingly, but they are not + correct for process B. + + There's a line in fork_load_infrun_state that fixes up the thread_info field + stop_pc, so fix this by adding similar fixups for the executing and resumed + fields alongside. + + The FAIL did not always reproduce, so extend the test-case to reliably + trigger this scenario. + + Tested on x86_64-linux. + + Approved-By: Kevin Buettner + + PR gdb/31203 + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31203 + +2024-01-11 changjiachen + + LoongArch: ld: Adjusted some code order in relax.exp. + ld/testsuite/ChangeLog: + + * ld/testsuite/ld-loongarch-elf/relax.exp: Modify test. + +2024-01-11 Lulu Cai + + LoongArch: Discard extra spaces in objdump output + Due to the formatted output of objdump, some instructions + that do not require output operands (such as nop/ret) will + have extra spaces added after them. + + Determine whether to output operands through the format + of opcodes. When opc->format is an empty string, no extra + spaces are output. + +2024-01-11 Mike Frysinger + + sim: ppc: return register error when unhandled + We don't want to fallthru and use cooked_buf when we haven't initialized + it to anything. Returning 0 indicates the register wasn't recognized. + + sim: m32r: enable warnings in traps.c + File should be clean now! + +2024-01-11 Mike Frysinger + + sim: m32r: fixup some of the int<->pointer casts + The m32r trap code was written for a 32-bit Linux host (and really, one + whose Linux ABI matched pretty exactly). This has lead to conversions + between integers and pointers which breaks down hard on 64-bit hosts. + + Clean up some of the functions where possible to avoid unnecessary + conversions, use uintptr_t to cast 32-bit target pointers to host + pointers in some places, and just stub out a few functions that can't + easily be salvaged currently when sizeof(void*) is not 32-bits. This + is a bit ugly, but lets us enable warnings for the whole file. + +2024-01-11 Mike Frysinger + + sim: m32r: fix missing break statement + The ftime syscall should not fallthrough to the sync syscall. + Clearly the code was missing a break statement. + +2024-01-11 Mike Frysinger + + sim: m32r: migrate ftime() to clock_gettime() + The ftime() function has been deprecated since POSIX-1-2004, and + removed in POSIX.1-2008. It's also been deprecated/removed in glibc + since 2.33. POSIX has always said the function is not portable, and + its return value, timezone, and dstflag fields are unspecified. Even + if Linux/glibc & m32r had defined behavior, those aren't the host for + the sim runtime. + + So let's stop using the function and switch to clock_gettime. gnulib + already has detection support for it, and it's been around since at + least POSIX-1-2004. + +2024-01-11 Mike Frysinger + + sim: m32r: cleanup unused variables + We've been building this file with -Wno-error, so clean up unused + variable warnings. + + sim: igen: add printf attributes to the prototypes too + While gcc propagates the printf attribute via the typedef, clang + doesn't seem to, so add it to the prototypes themselves too. We + still keep it on the prototype for cases where it's used as a + variable. + +2024-01-11 Mike Frysinger + + gdbsupport: tighten up libiberty code a bit with dnl + No functional change here, just touch up generated output slightly. + + Approved-By: Tom Tromey + +2024-01-11 Mike Frysinger + + sim: build: switch to gdbsupport/libiberty.m4 + Leverage this common logic to find all the libiberty settings rather + than duplicate it ourselves. + + sim: ppc: rework defines.h to handle HAVE symbols defined to 0 + The HAVE_DECL_xxx defines are always defined to 0 or 1. The current + defines.h logic assumes every HAVE_xxx symbol is only defined iff it's + defined to 1 which causes this to break. Tweak the sed logic to only + match defines of 1. + +2024-01-11 Mike Frysinger + + gdb: libiberty: switch to AC_CHECK_DECLS_ONCE + Only check these decls once in case other m4 macros also look for them. + + Approved-By: Tom Tromey + +2024-01-11 Mike Frysinger + + gdb: move libiberty.m4 to gdbsupport + This is used by gdb, gdbsupport, and gdbserver. We want to use it + in the sim tree too. Move it to gdbsupport which is meant as the + common sharing space for these projects. + + Approved-By: Tom Tromey + +2024-01-11 GDB Administrator + + Automatic date update in version.in + +2024-01-10 Vladimir Mezentsev + + gprofng: add an examples directory + This directory contains example programs for the user to experiment with. + Initially there is one application written in C. The plan is to include + more examples, also in other langauges, over time. + In addition to the sources and a make file, a sample script how to make + a profile is included. There is also a README.md file. + + gprofng/ChangeLog + 2024-01-08 Ruud van der Pas + + * examples: Top level directory. + * examples/mxv-pthreads: Example program written in C. + +2024-01-10 Vladimir Mezentsev + + gprofng: 31123 improvements to hardware event implementation + Our hardware counter profiling is based on perf_event_open(). + Our HWC tables are absent for new machines. + I have added HWC tables for the following events: PERF_TYPE_HARDWARE, + PERF_TYPE_SOFTWARE, PERF_TYPE_HW_CACHE. Other events require additional fixes. + + Did a little cleaning: marked the symbols as static, used Stringbuilder, + created a function to read /proc/cpuinfo. + + gprofng/ChangeLog + 2024-01-08 Vladimir Mezentsev + + PR gprofng/31123 + * common/core_pcbe.c: Mark the symbols as static. Add events_generic[]. + * common/hwc_cpus.h: Declare a new function read_cpuinfo. + * common/hwcdrv.c: Add a new parameter in init_perf_event(). + * common/hwcentry.h: Add use_perf_event_type in Hwcentry. + * common/hwcfuncs.c (process_data_descriptor): Read use_perf_event_type, + type, config. + * common/hwctable.c: Add a new HWC table generic_list[]. + * common/opteron_pcbe.c (opt_pcbe_init): Accept AMD machines. + * src/collctrl.cc: Use StringBuilder in Coll_Ctrl::build_data_desc(). + Add a new function read_cpuinfo. + +2024-01-10 Aditya Vidyadhar Kamath + + Fix AIX catchpoint warning during fork () event + In AIX we were missing some hooks needed to catch a fork () event + in rs6000-aix-nat.c. Due to their absence we were returning 1 while we + insert the breakpoint/catchpoint location. This patch is a fix to the same. + +2024-01-10 Nick Clifton + + Sync top level configure and makefiles + This update brings in the following commits from the gcc mainline: + + commit b7e5a29602143b53267efcd9c8d5ecc78cd5a62f + Author: Tom Tromey + Date: Tue Jan 9 06:25:26 2024 -0700 + + Pass GUILE down to subdirectories + + When I enable cgen rebuilding in the binutils-gdb tree, the default is + to run cgen using 'guile'. However, on my host, guile is guile 2.2, + which doesn't work for me -- I have to use guile3.0. + + This patch arranges to pass "GUILE" down to subdirectories, so I can + use 'make GUILE=guile3.0'. + + commit 725fb3595622a4ad8cd078a42fab1c395cbf90cb + Author: Pierre-Emmanuel Patry + Date: Wed Oct 25 13:06:48 2023 +0200 + + build: Add libgrust as compilation modules + + Define the libgrust directory as a host compilation module as well as + for targets. Disable target libgrust if we're not building target + libstdc++. + + commit 56ca59a03150cf44cea340f58967c990ed6bf43c + Author: Lewis Hyatt + Date: Thu Nov 16 11:18:37 2023 -0500 + + Makefile.tpl: Avoid race condition in generating site.exp from the top level + + A command like "make -j 2 check-gcc-c check-gcc-c++" run in the top level of + a fresh build directory does not work reliably. That will spawn two + independent make processes inside the "gcc" directory, and each of those + will attempt to create site.exp if it doesn't exist and will interfere with + each other, producing often a corrupted or empty site.exp. Resolve that by + making these targets depend on a new phony target which makes sure site.exp + is created first before starting the recursive makes. + + commit 6a6d3817afa02bbcd2388c8e005da6faf88932f1 + Author: Iain Sandoe + Date: Sun Mar 28 14:48:17 2021 +0100 + + Config,Darwin: Allow for configuring Darwin to use embedded runpath. + + Recent Darwin versions place contraints on the use of run paths + specified in environment variables. This breaks some assumptions + in the GCC build. + + This change allows the user to configure a Darwin build to use + '@rpath/libraryname.dylib' in library names and then to add an + embedded runpath to executables (and libraries with dependents). + + The embedded runpath is added by default unless the user adds + '-nodefaultrpaths' to the link line. + + For an installed compiler, it means that any executable built with + that compiler will reference the runtimes installed with the + compiler (equivalent to hard-coding the library path into the name + of the library). + + During build-time configurations any "-B" entries will be added to + the runpath thus the newly-built libraries will be found by exes. + + Since the install name is set in libtool, that decision needs to be + available here (but might also cause dependent ones in Makefiles, + so we need to export a conditional). + + This facility is not available for Darwin 8 or earlier, however the + existing environment variable runpath does work there. + + We default this on for systems where the external DYLD_LIBRARY_PATH + does not work and off for Darwin 8 or earlier. For systems that can + use either method, if the value is unset, we use the default (which + is currently DYLD_LIBRARY_PATH). + + commit 2551e10038a70901f30b2168e6e3af4536748f3c + Author: Sergei Trofimovich + Date: Mon Oct 2 12:08:17 2023 +0100 + + Makefile.tpl: disable -Werror for feedback stage [PR111663] + + Without the change profiled bootstrap fails for various warnings on + master branch as: + + $ ../gcc/configure + $ make profiledbootstrap + ... + gcc/genmodes.cc: In function ‘int main(int, char**)’: + gcc/genmodes.cc:2152:1: error: ‘gcc/build/genmodes.gcda’ profile count data file not found [-Werror=missing-profile] + ... + gcc/gengtype-parse.cc: In function ‘void parse_error(const char*, ...)’: + gcc/gengtype-parse.cc:142:21: error: ‘%s’ directive argument is null [-Werror=format-overflow=] + + The change removes -Werror just like autofeedback does today. + + commit d1bff1ba4d470f6723be83c0e3c4d5083e51877a + Author: Thomas Schwinge + Date: Thu Jun 1 23:07:37 2023 +0200 + + Pass 'SYSROOT_CFLAGS_FOR_TARGET' down to target libraries [PR109951] + + ..., where we need to use it (separate commits) for build-tree testing, similar + to 'gcc/Makefile.in:site.exp': + + # TEST_ALWAYS_FLAGS are flags that should be passed to every compilation. + # They are passed first to allow individual tests to override them. + @echo "set TEST_ALWAYS_FLAGS \"$(SYSROOT_CFLAGS_FOR_TARGET)\"" >> ./site.tmp + + PR testsuite/109951 + * Makefile.tpl (BASE_TARGET_EXPORTS): Add + 'SYSROOT_CFLAGS_FOR_TARGET'. + * Makefile.in: Regenerate. + +2024-01-10 Saurabh Jha + + gas: aarch64: Add system registers for Debug and PMU extensions + This patch adds support for the new AArch64 system registers that are part of the following extensions: + * FEAT_DEBUGv8p9 + * FEAT_PMUv3p9 + * FEAT_PMUv3_SS + * FEAT_PMUv3_ICNTR + * FEAT_SEBEP + +2024-01-10 Tom de Vries + + [gdb] Fix assertion failure for checkpoint delete 0 + When doing "checkpoint delete 0" we run into an assertion failure: + ... + +delete checkpoint 0 + inferior.c:406: internal-error: find_inferior_pid: Assertion `pid != 0' failed. + ... + + Fix this by handling the "pptid == null_ptid" case in + delete_checkpoint_command. + + Tested on x86_64-linux. + + Approved-By: Kevin Buettner + + PR gdb/31209 + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31209 + +2024-01-10 Tom de Vries + + [gdb] Fix info checkpoints + Consider test-case gdb.base/checkpoint.exp. At some point, it issues an info + checkpoints command: + ... + (gdb) info checkpoints^M + * 0 process 30570 (main process) at 0x0^M + 1 process 30573 at 0x4008bb, file checkpoint.c, line 49^M + 2 process 30574 at 0x4008bb, file checkpoint.c, line 49^M + 3 process 30575 at 0x4008bb, file checkpoint.c, line 49^M + 4 process 30576 at 0x4008bb, file checkpoint.c, line 49^M + 5 process 30577 at 0x4008bb, file checkpoint.c, line 49^M + 6 process 30578 at 0x4008bb, file checkpoint.c, line 49^M + 7 process 30579 at 0x4008bb, file checkpoint.c, line 49^M + 8 process 30580 at 0x4008bb, file checkpoint.c, line 49^M + 9 process 30582 at 0x4008bb, file checkpoint.c, line 49^M + 10 process 30583 at 0x4008bb, file checkpoint.c, line 49^M + ... + + According to the docs, each of these (0-10) is a checkpoint. + + But the pc address (as well as the file name and line number) is missing for + checkpoint 0. + + Fix this by sampling the pc value for the current process in + info_checkpoints_command, such that we have instead: + ... + * 0 process 30570 (main process) at 0x4008bb, file checkpoint.c, line 49^M + ... + + Tested on x86_64-linux. + + Approved-By: Kevin Buettner + + PR gdb/31211 + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31211 + +2024-01-10 Tom de Vries + + [gdb] Make variable printed bool in info_checkpoints_command + While reading info_checkpoints_command, I noticed variable printed: + ... + const fork_info *printed = NULL; + ... + for (const fork_info &fi : fork_list) + { + if (requested > 0 && fi.num != requested) + continue; + + printed = &fi; + ... + } + if (printed == NULL) + ... + has pointer type, but is just used as bool. + + Make this explicit by changing the variable type to bool. + + Tested on x86_64-linux. + + Approved-By: Kevin Buettner + +2024-01-10 Tom de Vries + + gdb/symtab: Eliminate deferred_entry + Currently cooked_index entry creation is either: + - done immediately if the parent_entry is known, or + - deferred if the parent_entry is not yet known, and done later while + resolving the deferred entries. + + Instead, create all cooked_index entries immediately, and keep track of which + entries have a parent_entry that needs resolving later using the new + IS_PARENT_DEFERRED flag. + + Tested on x86_64-linux. + + Approved-By: Tom Tromey + +2024-01-10 Tom de Vries + + gdb/symtab: Make cooked_index_entry::parent_entry private + Make cooked_index_entry::parent_entry private, and add member functions to + access it. + + Tested on x86_64-linux and ppc64le-linux. + Tested-By: Alexandra Petlanova Hajkova + Approved-By: Tom Tromey + +2024-01-10 Tom de Vries + + gdb/symtab: Allow changing of added cooked_index entries + Make cooked_index_storage::add and cooked_index_entry::add return a + "cooked_index_entry *" instead of a "const cooked_index_entry *". + + Tested on x86_64-linux and ppc64le-linux. + Tested-By: Alexandra Petlanova Hajkova + Approved-By: Tom Tromey + +2024-01-10 Tom Tromey + + Fix ASAN failure in DWO code + Simon pointed out that my recent change to the DWO code caused a + failure in ASAN testing. + + The bug here was I updated the code to use a different search type in + the hash table; but then did not change the search code to use + htab_find_slot_with_hash. + + Note that this bug would not be possible with my type-safe hash table + series, hint, hint. + + Approved-By: Simon Marchi + +2024-01-10 GDB Administrator + + Automatic date update in version.in + +2024-01-09 Tom Tromey + + Fix thread-less build + A user pointed out that the recent background DWARF reader series + broke the build when --disable-threading is in use. This patch fixes + the problem. I am checking it in. + + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31223 + +2024-01-09 Tom Tromey + + Pass GUILE down to subdirectories + When I enable cgen rebuilding in the binutils-gdb tree, the default is + to run cgen using 'guile'. However, on my host, guile is guile 2.2, + which doesn't work for me -- I have to use guile3.0. + + This patch arranges to pass "GUILE" down to subdirectories, so I can + use 'make GUILE=guile3.0'. + + * Makefile.in: Rebuild. + * Makefile.tpl (BASE_EXPORTS): Add GUILE. + (GUILE): New variable. + * Makefile.def (flags_to_pass): Add GUILE. + +2024-01-09 H.J. Lu + + ld: Add --enable-mark-plt configure option + Add --enable-mark-plt linker configure option to mark PLT entries with + DT_X86_64_PLT, DT_X86_64_PLTSZ and DT_X86_64_PLTENT dynamic tags by + default. + + * NEWS: Mention -z mark-plt/-z nomark-plt and --enable-mark-plt. + * config.in: Regenerated. + * configure: Likewise. + * configure.ac: Add --enable-mark-plt. + (DEFAULT_LD_Z_MARK_PLT): New AC_DEFINE_UNQUOTED. + * emulparams/x86-64-plt.sh (PARSE_AND_LIST_OPTIONS_X86_64_PLT): + Support DEFAULT_LD_Z_MARK_PLT. + * emultempl/elf-x86.em (elf_x86_64_before_parse): New function. + (LDEMUL_BEFORE_PARSE): New. Set to elf_x86_64_before_parse for + x86-64 targets. + +2024-01-09 H.J. Lu + + elf: Add elf_backend_add_glibc_version_dependency + When -z mark-plt is used to add DT_X86_64_PLT, DT_X86_64_PLTSZ and + DT_X86_64_PLTENT, the r_addend field of the R_X86_64_JUMP_SLOT relocation + stores the offset of the indirect branch instruction. However, glibc + versions which don't have this commit in glibc 2.36: + + commit f8587a61892cbafd98ce599131bf4f103466f084 + Author: H.J. Lu + Date: Fri May 20 19:21:48 2022 -0700 + + x86-64: Ignore r_addend for R_X86_64_GLOB_DAT/R_X86_64_JUMP_SLOT + + According to x86-64 psABI, r_addend should be ignored for R_X86_64_GLOB_DAT + and R_X86_64_JUMP_SLOT. Since linkers always set their r_addends to 0, we + can ignore their r_addends. + + Reviewed-by: Fangrui Song + + won't ignore the r_addend value in the R_X86_64_JUMP_SLOT relocation. + Although this commit has been backported to glibc 2.33/2.34/2.35 release + branches, it is safer to require glibc 2.36 for such binaries. + + Extend the glibc version dependency of GLIBC_ABI_DT_RELR for DT_RELR to + also add GLIBC_2.36 version dependency for -z mark-plt on the shared C + library if it provides a GLIBC_2.XX symbol version. + + * elflink.c (elf_find_verdep_info): Moved to ... + * elf-bfd.h (elf_find_verdep_info): Here. + (elf_backend_data): Add elf_backend_add_glibc_version_dependency. + (_bfd_elf_link_add_glibc_version_dependency): New function. + (_bfd_elf_link_add_dt_relr_dependency): Likewise. + * elf64-x86-64.c (elf_x86_64_add_glibc_version_dependency): + Likewise. + (elf_backend_add_glibc_version_dependency): New. + * elflink.c (elf_link_add_dt_relr_dependency): Renamed to ... + (elf_link_add_glibc_verneed): This. Modified to support other + glibc dependencies. + (_bfd_elf_link_add_glibc_version_dependency): Likewise. + (_bfd_elf_link_add_dt_relr_dependency): Likewise. + (bfd_elf_size_dynamic_sections): Call + elf_backend_add_glibc_version_dependency instead of + elf_link_add_dt_relr_dependency. + * elfxx-target.h (elf_backend_add_glibc_version_dependency): New. + (elfNN_bed): Add elf_backend_add_glibc_version_dependency. + + ld/ + + * testsuite/ld-x86-64/mark-plt-1a.rd: New file. + * testsuite/ld-x86-64/mark-plt-1b.rd: Likewise. + * testsuite/ld-x86-64/x86-64.exp: Run -z mark-plt test for + GLIBC_2.36 dependency. + +2024-01-09 H.J. Lu + + x86: Don't check R_386_NONE nor R_X86_64_NONE + Update x86 ELF linker to skip R_386_NONE/R_X86_64_NONE when scanning + relocations. + + bfd/ + + * PR ld/31047 + * elf32-i386.c (elf_i386_scan_relocs): Don't check R_386_NONE. + * elf64-x86-64.c (elf_x86_64_scan_relocs): Don't check + R_X86_64_NONE. + + ld/ + + * PR ld/31047 + * testsuite/ld-i386/i386.exp: Run PR ld/31047 test. + * testsuite/ld-x86-64/x86-64.exp: Likewise. + * testsuite/ld-i386/pr31047.d: New file. + * testsuite/ld-x86-64/pr31047-x32.d: Likewise. + * testsuite/ld-x86-64/pr31047.d: Likewise. + * testsuite/ld-x86-64/pr31047a.s: Likewise. + * testsuite/ld-x86-64/pr31047b.s: Likewise. + +2024-01-09 Tom Tromey + + Fix two bugs in gdbserver thread name handling + Simon pointed out that my earlier patch to gdbserver's thread name + code: + + commit 07b3255c3bae7126a0d679f957788560351eb236 + Author: Tom Tromey + Date: Thu Jul 13 17:28:48 2023 -0600 + + Filter invalid encodings from Linux thread names + + ... introduced a regression. This bug was that the iconv output was + not \0-terminated. + + Looking at it, I found another bug as well -- replace_non_ascii would + not \0-terminate, and also would return the wrong pointer + + This patch fixes both of them. + + Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31153 + +2024-01-09 Tom Tromey + + Use unrelocated_addr in dwarf2_base_index_functions::find_per_cu + dwarf2_base_index_functions::find_per_cu is documented as using an + unrelocated address. This patch changes the interface to use the + unrelocated_addr type, just to be a bit more type-safe. + + Regression tested on x86-64 Fedora 38. + +2024-01-09 Jan Beulich + + x86: add missing APX logic to cpu_flags_match() + As already indicated during review, we can't get away without certain + adjustments here: Without these, respective {evex}-prefixed insns are + assembled to APX encodings even when APX_F is turned off. + + While there also extend the respective comment in the opcode table, to + explain why this construct is used. + +2024-01-09 Jan Beulich + + x86: FMA insns aren't eligible to VEX2 encoding + PR gas/31178 + + In da0784f961d8 ("x86: fold FMA VEX and EVEX templates") I overlooked + that C aliases StaticRounding, and hence build_vex_prefix() now needs to + be aware of that aliasing. Disambiguation is easy, as StaticRounding is + only ever used together with SAE (hence why the overlaying works in the + first place). + +2024-01-09 Jan Beulich + + PPC64/ELF: adjust comment wrt ABI versions + While having been moved a couple of times since its introduction in + f6c7c3e8b742 ("Referencing a function's address on PowerPC64 ELFv2"), + the wording has always remained the same. In particular ELFv1 and ELFv2 + have always been the wrong way round. + +2024-01-09 Nick Clifton + + Synchronize sourceware version of the libiberty sources with the master gcc versions. + This brings in the following commits: + + commit c73cc6fe6207b2863afa31a3be8ad87b70d3df0a + Author: Jakub Jelinek + Date: Tue Dec 5 23:32:19 2023 +0100 + + libiberty: Fix build with GCC < 7 + + Tobias reported on IRC that the linker fails to build with GCC 4.8.5. + In configure I've tried to use everything actually used in the sha1.c + x86 hw implementation, but unfortunately I forgot about implicit function + declarations. GCC before 7 did have header and bit_SHA define + and __get_cpuid function defined inline, but it didn't define + __get_cpuid_count, which compiled fine (and the configure test is + intentionally compile time only) due to implicit function declaration, + but then failed to link when linking the linker, because + __get_cpuid_count wasn't defined anywhere. + + The following patch fixes that by using what autoconf uses in AC_CHECK_DECL + to make sure the functions are declared. + + commit 691858d279335eeeeed3afafdf872b1c5f8f4201 + Author: Rainer Orth + Date: Tue Dec 5 11:04:06 2023 +0100 + + libiberty: Fix pex_unix_wait return type + + The recent warning patches broke Solaris bootstrap: + + /vol/gcc/src/hg/master/local/libiberty/pex-unix.c:326:3: error: initialization of 'pid_t (*)(struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *)' {aka 'long int (*)(struct pex_obj *, long int, int *, struct pex_time *, int, const char **, int *)'} from incompatible pointer type 'int (*)(struct pex_obj *, pid_t, int *, struct pex_time *, int, const char **, int *)' {aka 'int (*)(struct pex_obj *, long int, int *, struct pex_time *, int, const char **, int *)'} [-Wincompatible-pointer-types] + 326 | pex_unix_wait, + | ^~~~~~~~~~~~~ + /vol/gcc/src/hg/master/local/libiberty/pex-unix.c:326:3: note: (near initialization for 'funcs.wait') + + While pex_funcs.wait expects a function returning pid_t, pex_unix_wait + currently returns int. However, on Solaris pid_t is long for 32-bit, + but int for 64-bit. + + This patches fixes this by having pex_unix_wait return pid_t as + expected, and like every other variant already does. + + Bootstrapped without regressions on i386-pc-solaris2.11, + sparc-sun-solaris2.11, x86_64-pc-linux-gnu, and + x86_64-apple-darwin23.1.0. + + commit c3f281a0c1ca50e4df5049923aa2f5d1c3c39ff6 + Author: Jason Merrill + Date: Mon Sep 25 10:15:02 2023 +0100 + + c++: mangle function template constraints + + Per https://github.com/itanium-cxx-abi/cxx-abi/issues/24 and + https://github.com/itanium-cxx-abi/cxx-abi/pull/166 + + We need to mangle constraints to be able to distinguish between function + templates that only differ in constraints. From the latter link, we want to + use the template parameter mangling previously specified for lambdas to also + make explicit the form of a template parameter where the argument is not a + "natural" fit for it, such as when the parameter is constrained or deduced. + + I'm concerned about how the latter link changes the mangling for some C++98 + and C++11 patterns, so I've limited template_parm_natural_p to avoid two + cases found by running the testsuite with -Wabi forced on: + + template T f() { return V; } + int main() { return f(); } + + template int max() { return i; } + template int max() + { + int sub = max(); + return i > sub ? i : sub; + } + int main() { return max<1,2,3>(); } + + A third C++11 pattern is changed by this patch: + + template