]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
3 months agoUpdate HOWTO document after creating the 2.42 branch
Nick Clifton [Mon, 15 Jan 2024 15:35:01 +0000 (15:35 +0000)] 
Update HOWTO document after creating the 2.42 branch

3 months agoChange version to 2.42.50 and regenerate files
Nick Clifton [Mon, 15 Jan 2024 15:13:36 +0000 (15:13 +0000)] 
Change version to 2.42.50 and regenerate files

3 months agoRegenerate two Makefile.in files to update Copyright headers
Mark Wielaard [Mon, 15 Jan 2024 14:33:10 +0000 (15:33 +0100)] 
Regenerate two Makefile.in files to update Copyright headers

commit 1d506c26d9772bcd84e1a7b3a8c8c5bc602dbf61
Update copyright year range in header of all files managed by GDB
updated gnulib/Makefile.am but didn't regenerate gnulib/Makefile.in
also sim/Makefile.in was updated, but the Copyright hunks/years
were off. The first hunk comes from automake 1.15.1 header-vars.am
and so should have 2017 as last year, the second hunk does come from
sim/Makefile.am and so should have 2024 as last year.

* gnulib/Makefile.in: Regenerate.
* sim/Makefile.in: Likewise.

3 months agoAdd markers for 2.42 branch
Nick Clifton [Mon, 15 Jan 2024 14:42:15 +0000 (14:42 +0000)] 
Add markers for 2.42 branch

3 months agoUpdate branch/release creation documentation
Nick Clifton [Mon, 15 Jan 2024 14:21:37 +0000 (14:21 +0000)] 
Update branch/release creation documentation

3 months agoaarch64: rcpc3: Regenerate aarch64-*-2.c files
Victor Do Nascimento [Mon, 15 Jan 2024 13:02:36 +0000 (13:02 +0000)] 
aarch64: rcpc3: Regenerate aarch64-*-2.c files

3 months agoaarch64: rcpc3: Add FP load/store insns
Victor Do Nascimento [Wed, 10 Jan 2024 19:20:05 +0000 (19:20 +0000)] 
aarch64: rcpc3: Add FP load/store insns

Along with the relevant unit-tests, this adds the following rcpc3
instructions:

  STL1  { <Vt>.D }[<index>], [<Xn|SP>]
  LDAP1 { <Vt>.D }[<index>], [<Xn|SP>]

  LDAPUR <Bt>, [<Xn|SP>{, #<simm>}]
  LDAPUR <Ht>, [<Xn|SP>{, #<simm>}]
  LDAPUR <St>, [<Xn|SP>{, #<simm>}]
  LDAPUR <Dt>, [<Xn|SP>{, #<simm>}]
  LDAPUR <Qt>, [<Xn|SP>{, #<simm>}]

  STLUR <Bt>, [<Xn|SP>{, #<simm>}]
  STLUR <Ht>, [<Xn|SP>{, #<simm>}]
  STLUR <St>, [<Xn|SP>{, #<simm>}]
  STLUR <Dt>, [<Xn|SP>{, #<simm>}]
  STLUR <Qt>, [<Xn|SP>{, #<simm>}]

with `#<simm>' taking on a signed 8-bit integer value in the range
[-256,255] and `index' the values 0 or 1.

Co-authored-by: Srinath Parvathaneni <srinath.parvathaneni@arm.com>
3 months agoaarch64: rcpc3: Add integer load/store insns
Victor Do Nascimento [Thu, 4 Jan 2024 14:06:38 +0000 (14:06 +0000)] 
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 <Wt1>, <Wt2>, [<Xn|SP>]
  LDIAPP <Wt1>, <Wt2>, [<Xn|SP>], #8
  LDIAPP <Xt1>, <Xt2>, [<Xn|SP>]
  LDIAPP <Xt1>, <Xt2>, [<Xn|SP>], #16

  STILP <Wt1>, <Wt2>, [<Xn|SP>]
  STILP <Wt1>, <Wt2>, [<Xn|SP>, #-8]!
  STILP <Xt1>, <Xt2>, [<Xn|SP>]
  STILP <Xt1>, <Xt2>, [<Xn|SP>, #-16]!

  LDAPR <Wt>, [<Xn|SP>], #4
  LDAPR <Xt>, [<Xn|SP>], #8

  STLR <Wt>, [<Xn|SP>, #-4]!
  STLR <Xt>, [<Xn|SP>, #-8]!

3 months agoaarch64: rcpc3: Define RCPC3_INSN macro
Victor Do Nascimento [Thu, 4 Jan 2024 14:04:40 +0000 (14:04 +0000)] 
aarch64: rcpc3: Define RCPC3_INSN macro

This patch adds the necessary macro for encoding FEAT_RCPC3-dependent
instructions in Binutils.

3 months agoaarch64: rcpc3: add support in general_constraint_met_p
Victor Do Nascimento [Tue, 9 Jan 2024 10:04:11 +0000 (10:04 +0000)] 
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.

3 months agoaarch64: rcpc3: New RCPC3_ADDR operand types
Victor Do Nascimento [Fri, 5 Jan 2024 17:26:09 +0000 (17:26 +0000)] 
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.

3 months agoaarch64: rcpc3: Define address operand fields and inserter/extractors
Victor Do Nascimento [Fri, 5 Jan 2024 17:27:04 +0000 (17:27 +0000)] 
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

3 months agoaarch64: rcpc3: Create implicit load/store size calc function
Victor Do Nascimento [Tue, 9 Jan 2024 16:22:07 +0000 (16:22 +0000)] 
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.

3 months agoaarch64: rcpc3: Add +rcpc3 architectural feature support flag
Victor Do Nascimento [Thu, 4 Jan 2024 13:34:52 +0000 (13:34 +0000)] 
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.

3 months agobfd: riscv_maybe_function_sym check _bfd_elf_is_local_label_name
Mark Wielaard [Thu, 4 Jan 2024 00:31:31 +0000 (01:31 +0100)] 
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.

3 months agoaarch64: Fix tlbi and tlbip instructions
Andrew Carlotti [Mon, 15 Jan 2024 11:20:20 +0000 (11:20 +0000)] 
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.

3 months agoaarch64: Refactor aarch64_sys_ins_reg_supported_p
Andrew Carlotti [Mon, 15 Jan 2024 11:19:48 +0000 (11:19 +0000)] 
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.

3 months agonm: Replace --with-symbol-versions with --without-symbol-versions in --help output
Nick Clifton [Mon, 15 Jan 2024 12:25:00 +0000 (12:25 +0000)] 
nm: Replace --with-symbol-versions with --without-symbol-versions in --help output

  PR 31243
  nm: Fix --help output

3 months agoaarch64: Remove unused BTI feature bit
Andrew Carlotti [Mon, 15 Jan 2024 11:16:05 +0000 (11:16 +0000)] 
aarch64: Remove unused BTI feature bit

OK for master?

3 months agoAdd generated source files and fix thinko in aarch64-asm.c
Nick Clifton [Mon, 15 Jan 2024 11:45:28 +0000 (11:45 +0000)] 
Add generated source files and fix thinko in aarch64-asm.c

3 months agoaarch64: Add SVE2.1 Contiguous load/store instructions.
Srinath Parvathaneni [Mon, 15 Jan 2024 09:40:11 +0000 (09:40 +0000)] 
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.

3 months agoPATCH 5/6][Binutils] aarch64: Add SVE2.1 fmin and fmax instructions.
Srinath Parvathaneni [Mon, 15 Jan 2024 09:38:39 +0000 (09:38 +0000)] 
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.

3 months agoaarch64: Add SVE2.1 dupq, eorqv and extq instructions.
Srinath Parvathaneni [Mon, 15 Jan 2024 09:37:32 +0000 (09:37 +0000)] 
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.

3 months agoaarch64: Add support for FEAT_SVE2p1.
Srinath Parvathaneni [Mon, 15 Jan 2024 09:35:55 +0000 (09:35 +0000)] 
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.

3 months agoaarch64: Add support for FEAT_SME2p1 instructions.
Srinath Parvathaneni [Mon, 15 Jan 2024 09:34:41 +0000 (09:34 +0000)] 
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.

3 months agoaarch64: Add support for FEAT_B16B16 instructions.
Srinath Parvathaneni [Mon, 15 Jan 2024 09:28:28 +0000 (09:28 +0000)] 
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.

3 months agogas/NEWS: announce the new SCFI command line option
Indu Bhagat [Mon, 15 Jan 2024 09:00:51 +0000 (01:00 -0800)] 
gas/NEWS: announce the new SCFI command line option

3 months agogas: testsuite: add an x86 testsuite for SCFI
Indu Bhagat [Mon, 15 Jan 2024 09:00:47 +0000 (01:00 -0800)] 
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.

3 months agoopcodes: i386-reg.tbl: Add a comment to reflect dependency on ordering
Indu Bhagat [Mon, 15 Jan 2024 09:00:42 +0000 (01:00 -0800)] 
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.

3 months agogas: doc: update documentation for the new listing option
Indu Bhagat [Mon, 15 Jan 2024 09:00:36 +0000 (01:00 -0800)] 
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.

3 months agogas: x86: synthesize CFI for hand-written asm
Indu Bhagat [Mon, 15 Jan 2024 09:00:31 +0000 (01:00 -0800)] 
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.

3 months agoopcodes: x86: new marker for insns that implicitly update stack pointer
Indu Bhagat [Mon, 15 Jan 2024 09:00:27 +0000 (01:00 -0800)] 
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.

3 months agoopcodes: gas: x86: define and use Rex2 as attribute not constraint
Indu Bhagat [Mon, 15 Jan 2024 09:00:23 +0000 (01:00 -0800)] 
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.

3 months agogas: scfidw2gen: new functionality to prepare for SCFI
Indu Bhagat [Mon, 15 Jan 2024 09:00:19 +0000 (01:00 -0800)] 
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.

3 months agogas: add new command line option --scfi=experimental
Indu Bhagat [Mon, 15 Jan 2024 09:00:13 +0000 (01:00 -0800)] 
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.

3 months agogas: dw2gencfi: externalize the all_cfi_sections
Indu Bhagat [Mon, 15 Jan 2024 09:00:07 +0000 (01:00 -0800)] 
gas: dw2gencfi: externalize the all_cfi_sections

gas/
        * dw2gencfi.h: Declare all_cfi_sections as extern.

3 months agogas: dw2gencfi: expose dot_cfi_sections for scfidw2gen
Indu Bhagat [Mon, 15 Jan 2024 09:00:00 +0000 (01:00 -0800)] 
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.

3 months agogas: dw2gencfi: move some tc_* defines to the header file
Indu Bhagat [Mon, 15 Jan 2024 08:59:55 +0000 (00:59 -0800)] 
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.

3 months agogas: dw2gencfi: expose a new cfi_set_last_fde API
Indu Bhagat [Mon, 15 Jan 2024 08:59:43 +0000 (00:59 -0800)] 
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.

3 months agogas: dw2gencfi: use all_cfi_sections instead of cfi_sections
Indu Bhagat [Mon, 15 Jan 2024 08:59:35 +0000 (00:59 -0800)] 
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.

3 months agogas: dw2gencfi: minor rejig for cfi_sections_set and all_cfi_sections
Indu Bhagat [Mon, 15 Jan 2024 08:59:15 +0000 (00:59 -0800)] 
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.

3 months agoAutomatic date update in version.in
GDB Administrator [Mon, 15 Jan 2024 00:00:09 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 months ago[gdb/testsuite] Fix gdb.mi/mi-dprintf.exp with read1
Tom de Vries [Sun, 14 Jan 2024 09:21:46 +0000 (10:21 +0100)] 
[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.

3 months ago[gdb/testsuite] Fix gdb.cp/namespace.exp with read1
Tom de Vries [Sun, 14 Jan 2024 08:36:12 +0000 (09:36 +0100)] 
[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.

3 months agoAutomatic date update in version.in
GDB Administrator [Sun, 14 Jan 2024 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 months agogdb: RISC-V: Refine lr/sc sequence support
Yang Liu [Sat, 13 Jan 2024 17:20:59 +0000 (01:20 +0800)] 
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.

Signed-off-by: Yang Liu <liuyang22@iscas.ac.cn>
Approved-By: Andrew Burgess <aburgess@redhat.com>
Reviewed-by: Palmer Dabbelt <palmer@rivosinc.com>
3 months agoAdd myself to gdb/MAINTAINERS
Yang Liu [Sat, 13 Jan 2024 16:56:37 +0000 (00:56 +0800)] 
Add myself to gdb/MAINTAINERS

3 months agogprofng: 30889 can't compile without large file support
Vladimir Mezentsev [Fri, 12 Jan 2024 19:34:02 +0000 (11:34 -0800)] 
gprofng: 30889 can't compile without large file support

gprofng/ChangeLog
2024-01-12  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

PR 30889
* src/util.h (O_LARGEFILE): Define to 0, if not defined.

3 months agoAutomatic date update in version.in
GDB Administrator [Sat, 13 Jan 2024 00:00:15 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 months agogprofng: fix 3 bugzillas against gp-display-html
Vladimir Mezentsev [Thu, 11 Jan 2024 00:44:32 +0000 (16:44 -0800)] 
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  <ruud.vanderpas@oracle.com>

PR gprofng/30438
PR gprofng/30439
PR gprofng/30942
* gp-display-html/gp-display-html.in: fixes the issues.

3 months agosim: Fix compile errors
Dimitar Dimitrov [Fri, 12 Jan 2024 15:58:57 +0000 (17:58 +0200)] 
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.

Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
3 months agobpf: fix relocation addend incorrect symbol value
David Faust [Wed, 10 Jan 2024 23:05:36 +0000 (15:05 -0800)] 
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.

3 months agogdb/testsuite: fix failure in gdb.python/py-inferior.exp
Andrew Burgess [Fri, 12 Jan 2024 16:08:14 +0000 (16:08 +0000)] 
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

3 months agoUpdate copyright year range in header of all files managed by GDB
Andrew Burgess [Fri, 12 Jan 2024 15:30:44 +0000 (15:30 +0000)] 
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.

3 months agoaarch64: Remove unused code
Andrew Carlotti [Fri, 12 Jan 2024 01:46:31 +0000 (01:46 +0000)] 
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.

3 months agoaarch64: Make FEAT_ASMv8p2 instruction aliases always available
Andrew Carlotti [Fri, 12 Jan 2024 01:45:57 +0000 (01:45 +0000)] 
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.

3 months agoaarch64: Add +xs flag for existing instructions
Andrew Carlotti [Fri, 12 Jan 2024 01:45:25 +0000 (01:45 +0000)] 
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.

3 months agoaarch64: Add +wfxt flag for existing instructions
Andrew Carlotti [Fri, 12 Jan 2024 01:44:46 +0000 (01:44 +0000)] 
aarch64: Add +wfxt flag for existing instructions

3 months agoaarch64: Add +rcpc2 flag for existing instructions
Andrew Carlotti [Fri, 12 Jan 2024 01:44:10 +0000 (01:44 +0000)] 
aarch64: Add +rcpc2 flag for existing instructions

3 months agoaarch64: Add +flagm2 flag for existing instructions
Andrew Carlotti [Fri, 12 Jan 2024 01:43:47 +0000 (01:43 +0000)] 
aarch64: Add +flagm2 flag for existing instructions

3 months agoaarch64: Add +frintts flag for existing instructions
Andrew Carlotti [Fri, 12 Jan 2024 01:43:17 +0000 (01:43 +0000)] 
aarch64: Add +frintts flag for existing instructions

3 months agoaarch64: Add +jscvt flag for existing fjcvtzs instruction
Andrew Carlotti [Fri, 12 Jan 2024 01:42:36 +0000 (01:42 +0000)] 
aarch64: Add +jscvt flag for existing fjcvtzs instruction

3 months agoaarch64: Fix option parsing to disallow prefixes of valid options
Andrew Carlotti [Fri, 12 Jan 2024 01:42:08 +0000 (01:42 +0000)] 
aarch64: Fix option parsing to disallow prefixes of valid options

Add "+rdm" as an explicit alias for "+rdma", to maintain existing compatibility
with Clang.

3 months agoaarch64: Add +fcma alias for +compnum
Andrew Carlotti [Fri, 12 Jan 2024 01:41:26 +0000 (01:41 +0000)] 
aarch64: Add +fcma alias for +compnum

3 months agoaarch64: Fix +lse feature flag dependency
Andrew Carlotti [Fri, 12 Jan 2024 01:40:50 +0000 (01:40 +0000)] 
aarch64: Fix +lse feature flag dependency

3 months agogdb/doc: update examples in gdb.Progspace and gdb.Objfile docs
Andrew Burgess [Wed, 10 Jan 2024 15:43:06 +0000 (15:43 +0000)] 
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 <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
3 months agogdb/doc: add some notes on selecting suitable attribute names
Andrew Burgess [Wed, 10 Jan 2024 15:42:55 +0000 (15:42 +0000)] 
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 <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
3 months agogdb/python: Add gdb.InferiorThread.__dict__ attribute
Andrew Burgess [Fri, 5 Jan 2024 11:05:51 +0000 (11:05 +0000)] 
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 <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
3 months agogdb/python: Add gdb.Inferior.__dict__ attribute
Andrew Burgess [Thu, 4 Jan 2024 16:46:40 +0000 (16:46 +0000)] 
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 <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
3 months agogdb/python: remove users ability to create gdb.Progspace objects
Andrew Burgess [Thu, 4 Jan 2024 14:24:12 +0000 (14:24 +0000)] 
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
  <gdb.Progspace object at 0x7ffad4219c10>
  >>> 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 "<stdin>", line 1, in <module>
  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 <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
3 months agogdb/python: add gdb.Frame.__repr__() method
Andrew Burgess [Thu, 4 Jan 2024 10:57:40 +0000 (10:57 +0000)] 
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()
  <gdb.Frame object at 0x7fa8cc2df270>

After this patch, we now see:

  (gdb) pi
  >>> gdb.selected_frame()
  <gdb.Frame level=0 frame-id={stack=0x7ffff7da0ed0,code=0x000000000040115d,!special}>

More verbose, but, I hope, more useful.

If the gdb.Frame becomes invalid, then we will see:

  (gdb) pi
  >>> invalid_frame_variable
  <gdb.Frame (invalid)>

which is inline with how other invalid objects are displayed.

Approved-By: Tom Tromey <tom@tromey.com>
3 months agogdb/python: add gdb.InferiorThread.__repr__() method
Andrew Burgess [Thu, 4 Jan 2024 10:01:24 +0000 (10:01 +0000)] 
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()
  <gdb.InferiorThread object at 0x7f4dcc49b970>

After this patch, we now see:

  (gdb) pi
  >>> gdb.selected_thread()
  <gdb.InferiorThread id=1.2 target-id="Thread 0x7ffff7da1700 (LWP 458134)">

More verbose, but, I hope, more useful.

If the gdb.InferiorThread becomes invalid, then we will see:

  (gdb) pi
  >>> invalid_thread_variable
  <gdb.InferiorThread (invalid)>

Which is inline with how other invalid objects are displayed.

Approved-By: Tom Tromey <tom@tromey.com>
3 months agogdb/python: hoist common invalid object repr code into py-utils.c
Andrew Burgess [Thu, 4 Jan 2024 10:07:48 +0000 (10:07 +0000)] 
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: <TYPENAME (invalid)>.

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 <tom@tromey.com>
3 months agogdb: add trailing '/' when using 'complete' with directory names
Andrew Burgess [Tue, 2 Jan 2024 17:08:30 +0000 (17:08 +0000)] 
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 <lsix@lancelotsix.com>
Approved-By: Tom Tromey <tom@tromey.com>
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
3 months agogdb/python: New InferiorThread.ptid_string attribute
Andrew Burgess [Tue, 9 Jan 2024 17:29:24 +0000 (17:29 +0000)] 
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 <eliz@gnu.org>
Approved-By: Tom Tromey <tom@tromey.com>
3 months ago[gdb/testsuite] Use require in gdb.dwarf2/assign-variable-value-to-register.exp
Tom de Vries [Fri, 12 Jan 2024 08:29:37 +0000 (09:29 +0100)] 
[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.

3 months agogas: sframe: warn when skipping SFrame FDE generation
Indu Bhagat [Fri, 12 Jan 2024 08:22:12 +0000 (00:22 -0800)] 
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.

3 months agoLoongArch: Fix relaxation overflow caused by section alignment
mengqinggang [Wed, 27 Dec 2023 03:12:30 +0000 (11:12 +0800)] 
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.

3 months agox86: Fix indentation and use true/false instead of 1/0
Cui, Lili [Fri, 12 Jan 2024 02:31:11 +0000 (02:31 +0000)] 
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.

3 months agoAutomatic date update in version.in
GDB Administrator [Fri, 12 Jan 2024 00:00:11 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 months agogdb: fix frame passed to gdbarch_value_to_register in value_assign
Simon Marchi [Thu, 11 Jan 2024 16:41:04 +0000 (11:41 -0500)] 
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

3 months ago[gdb/testsuite] Fix gdb.dwarf2/dw2-entry-points.exp on ppc64le
Tom de Vries [Thu, 11 Jan 2024 15:05:12 +0000 (16:05 +0100)] 
[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 <bar>
(gdb) p foo
$2 = {void (int, int)} 0x10000698 <foo>
(gdb) p foobar
$3 = {void (int)} 0x100006d0 <foobar>
...

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 <blarsen@redhat.com>
Approved-By: Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
PR testsuite/31232
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31232

3 months ago[gdb/testsuite] Extend gdb.base/kill-during-detach.exp
Tom de Vries [Thu, 11 Jan 2024 09:12:48 +0000 (10:12 +0100)] 
[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 "<string>", line 1, in <module>^M
  File "<string>", 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 <kevinb@redhat.com>
PR gdb/31203
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31203

3 months agoLoongArch: ld: Adjusted some code order in relax.exp.
changjiachen [Thu, 4 Jan 2024 06:06:09 +0000 (14:06 +0800)] 
LoongArch: ld: Adjusted some code order in relax.exp.

ld/testsuite/ChangeLog:

* ld/testsuite/ld-loongarch-elf/relax.exp: Modify test.

3 months agoLoongArch: Discard extra spaces in objdump output
Lulu Cai [Wed, 3 Jan 2024 11:57:10 +0000 (19:57 +0800)] 
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.

3 months agosim: ppc: return register error when unhandled
Mike Frysinger [Thu, 11 Jan 2024 04:01:46 +0000 (23:01 -0500)] 
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.

3 months agosim: m32r: enable warnings in traps.c
Mike Frysinger [Thu, 11 Jan 2024 03:36:41 +0000 (22:36 -0500)] 
sim: m32r: enable warnings in traps.c

File should be clean now!

3 months agosim: m32r: fixup some of the int<->pointer casts
Mike Frysinger [Thu, 11 Jan 2024 03:25:51 +0000 (22:25 -0500)] 
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.

3 months agosim: m32r: fix missing break statement
Mike Frysinger [Thu, 11 Jan 2024 03:02:48 +0000 (22:02 -0500)] 
sim: m32r: fix missing break statement

The ftime syscall should not fallthrough to the sync syscall.
Clearly the code was missing a break statement.

3 months agosim: m32r: migrate ftime() to clock_gettime()
Mike Frysinger [Thu, 11 Jan 2024 02:57:47 +0000 (21:57 -0500)] 
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.

3 months agosim: m32r: cleanup unused variables
Mike Frysinger [Thu, 11 Jan 2024 02:56:58 +0000 (21:56 -0500)] 
sim: m32r: cleanup unused variables

We've been building this file with -Wno-error, so clean up unused
variable warnings.

3 months agosim: igen: add printf attributes to the prototypes too
Mike Frysinger [Thu, 11 Jan 2024 02:41:40 +0000 (21:41 -0500)] 
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.

3 months agogdbsupport: tighten up libiberty code a bit with dnl
Mike Frysinger [Wed, 10 Jan 2024 01:57:53 +0000 (20:57 -0500)] 
gdbsupport: tighten up libiberty code a bit with dnl

No functional change here, just touch up generated output slightly.

Approved-By: Tom Tromey <tom@tromey.com>
3 months agosim: build: switch to gdbsupport/libiberty.m4
Mike Frysinger [Wed, 10 Jan 2024 01:48:37 +0000 (20:48 -0500)] 
sim: build: switch to gdbsupport/libiberty.m4

Leverage this common logic to find all the libiberty settings rather
than duplicate it ourselves.

3 months agosim: ppc: rework defines.h to handle HAVE symbols defined to 0
Mike Frysinger [Wed, 10 Jan 2024 01:55:43 +0000 (20:55 -0500)] 
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.

3 months agogdb: libiberty: switch to AC_CHECK_DECLS_ONCE
Mike Frysinger [Wed, 10 Jan 2024 01:47:26 +0000 (20:47 -0500)] 
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 <tom@tromey.com>
3 months agogdb: move libiberty.m4 to gdbsupport
Mike Frysinger [Wed, 10 Jan 2024 01:20:38 +0000 (20:20 -0500)] 
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 <tom@tromey.com>
3 months agoAutomatic date update in version.in
GDB Administrator [Thu, 11 Jan 2024 00:00:28 +0000 (00:00 +0000)] 
Automatic date update in version.in

3 months agogprofng: add an examples directory
Vladimir Mezentsev [Tue, 9 Jan 2024 05:52:39 +0000 (21:52 -0800)] 
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  <ruud.vanderpas@oracle.com>

* examples: Top level directory.
* examples/mxv-pthreads: Example program written in C.

3 months agogprofng: 31123 improvements to hardware event implementation
Vladimir Mezentsev [Tue, 9 Jan 2024 06:00:24 +0000 (22:00 -0800)] 
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  <vladimir.mezentsev@oracle.com>

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.