]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
15 months agos390: Correct setting of highgprs flag in ELF output
Jens Remus [Fri, 1 Mar 2024 11:45:14 +0000 (12:45 +0100)] 
s390: Correct setting of highgprs flag in ELF output

The combination of an architecture size of 32 bits and z/Architecture
mode requires the highgprs flag to be set in the ELF output. It causes
the high-halves of the general purpose registers (GPRs) to be preserved
at run-time, so that the code can use 64-bit GPRs.

The architecture size of 32 bits can either be the default in case of
a default architecture name of "s390" or due to specification of the
option -m31 (to generate the 31-bit file format).
The z/Architecture mode can either be the default or due to
specification of the option -mzarch (to assemble for z/Architecture
mode). It can also be selected using the pseudo commands
".machinemode zarch" and ".machinemode zarch_nohighgprs". The latter
not causing the highgprs flag to be set.

The highgprs flag was only set when the following s390-specific
assembler options were given in the following specific order:
"-m31 -mzarch".

The highgprs flag was erroneously not set when:
- the order of above options was inverse (i.e. "-mzarch -m31"),
- the architecture mode defaulted to z/Architecture mode and
  option "-m31" was specified,
- the architecture size defaulted to 32 bits due to a default
  architecture name of "s390" and option -mzarch was specified,
- the architecture size defaulted to 32 bits and the architecture
  mode defaulted to z/Architecture due to the specified processor
  (e.g. "-march=z900" or follow-on processor).

Determine whether to set the highgprs flag in init_default_arch() after
having processed all assembler options in md_parse_option(). This
ensures the flag is set in all of the above cases it was erroneously not
set. Add test cases for highgprs flag, including ones that use
.machinemode to switch the architecture mode.

gas/
* config/tc-s390.c: Correct setting of highgprs flag in ELF
output.
* testsuite/gas/s390/s390.exp: Add test cases for highgprs
flag.
* testsuite/gas/s390/blank.s: Empty assembler source used in
test cases for "highgprs" flag.
* testsuite/gas/s390/esa-highgprs-0.d: Add test case for
highgprs flag.
* testsuite/gas/s390/zarch-highgprs-0.d: Likewise.
* testsuite/gas/s390/zarch-highgprs-1.d: Likewise.
* testsuite/gas/s390/esa-highgprs-machinemode-0.s: Add test case
for highgprs flag when using .machinemode to switch
architecture mode.
* testsuite/gas/s390/esa-highgprs-machinemode-0.d: Likewise.
* testsuite/gas/s390/esa-highgprs-machinemode-1.s: Likewise.
* testsuite/gas/s390/esa-highgprs-machinemode-1.d: Likewise.

Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
15 months agos390: Do not erroneously use base operand value for length operand
Jens Remus [Fri, 1 Mar 2024 11:45:14 +0000 (12:45 +0100)] 
s390: Do not erroneously use base operand value for length operand

The base register operand B may optionally be omitted in D(B) by coding
D and in D(L,B) by coding D(L). The index register operand X may
optionally be omitted in D(X,B) by coding D(,B) or D(B). Both base and
index register operands may optionally be omitted in D(X,B) by coding D.
In any case the omitted base and/or index register operand value
defaults to zero.

When parsing an erroneously omitted length L operand in D(L,B) by coding
D(,B) the base register operand B was erroneously consumed as length
operand. When using a register name for the base register operand this
was detected and reported as error. But when not using a register name
the base register operand value was erroneously used as length operand
value.

Correct the parsing of an omitted optional base or index register to not
erroneously use the base register operand value as length, when
erroneously omitting the length operand.

While at it rename the variable used to remember whether the base or
index register operand was omitted to enhance code readability.
Additionally add test cases for the optional omission of base and/or
index register operands.

Example assembler source:
mvc 16(1,%r1),32(%r2)
mvc 16(1),32(%r2)
mvc 16(,1),32(%r2) # undetected syntax error

Disassembly of bad assembly without commit shows the base register
operand value was erroneously used as length operand value:
   0:   d2 00 10 10 20 20       mvc     16(1,%r1),32(%r2)
   6:   d2 00 00 10 20 20       mvc     16(1,%r0),32(%r2)
   c:   d2 00 00 10 20 20       mvc     16(1,%r0),32(%r2)

Assembler messages with commit:
3: Error: operand 1: missing operand

gas/
* config/tc-s390.c: Correct parsing of omitted base register.
* testsuite/gas/s390/s390.exp: Add test cases for omitted base
and/or index register.
* testsuite/gas/s390/zarch-omitted-base-index.s: Test cases for
omitted optional base or index register.
* testsuite/gas/s390/zarch-omitted-base-index.d: Likewise.
* testsuite/gas/s390/zarch-omitted-base-index-err.s: Test cases
for omitted base and/or index register.
* testsuite/gas/s390/zarch-omitted-base-index-err.l: Likewise.

Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
15 months agos390: Enhance handling of syntax errors in assembler
Jens Remus [Fri, 1 Mar 2024 11:45:14 +0000 (12:45 +0100)] 
s390: Enhance handling of syntax errors in assembler

Do not consume any unexpected character including newline ('\n') when
detecting a syntax error when parsing an operand block with parenthesis.
This resolves the unfavorable assembler messages from the example below,
including consuming the newline at the end of the current statement and
reporting the next statement as junk.

While at it change the only pre-increment of the current instruction
string pointer into a post-increment to align with the other instances.

Example assembler source:
mvi 16(),32 # syntax error
a %r1,16(%r2 # syntax error
a %r1,16(%r2)
mvc 16(1,),32(%r2) # syntax error
mvc 16(1,%r1,32(%r2 # syntax error

Assembler messages without commit:
1: Error: bad expression
1: Error: syntax error; missing ')' after base register
1: Error: syntax error; expected ','
1: Error: junk at end of line: `32'
2: Error: syntax error; missing ')' after base register
2: Error: junk at end of line: `a %r1,16(%r2)'
4: Error: bad expression
4: Error: syntax error; missing ')' after base register
4: Error: syntax error; expected ','
4: Error: operand out of range (32 is not between 0 and 15)
4: Error: syntax error; missing ')' after base register
4: Error: junk at end of line: `%r2)'
5: Error: syntax error; missing ')' after base register
5: Error: syntax error; expected ','
5: Error: operand out of range (32 is not between 0 and 15)
5: Error: syntax error; missing ')' after base register
5: Error: junk at end of line: `%r2'

Assembler messages with commit:
1: Error: bad expression
1: Error: syntax error; missing ')' after base register
2: Error: syntax error; missing ')' after base register
4: Error: bad expression
4: Error: syntax error; missing ')' after base register
5: Error: syntax error; missing ')' after base register
5: Error: syntax error; missing ')' after base register

gas/
* config/tc-s390.c: Do not erroneously consume newline when
parsing an addressing operand with parentheses.

Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
15 months agos390: Lower severity of assembler syntax errors from fatal to error
Jens Remus [Fri, 1 Mar 2024 11:45:14 +0000 (12:45 +0100)] 
s390: Lower severity of assembler syntax errors from fatal to error

Report s390 assembler syntax errors as error instead of fatal error.
This allows the assembler to continue and potentially report further
syntax errors in the source. This should not cause syntax errors to
be erroneously accepted, as both error and fatal error cause the
assembler to return with a non-zero return code.

The following syntax errors are changed from fatal to error:
- invalid length field specified
- odd numbered general purpose register specified as register pair
- invalid floating point register pair.  Valid fp register pair operands
  are 0, 1, 4, 5, 8, 9, 12 or 13.

gas/
* config/tc-s390.c: Lower severity of assembler syntax errors
from fatal to error.
* testsuite/gas/s390/zarch-z9-109-err.l: Likewise.

Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
15 months agos390: Use proper string lengths when parsing opcode table flags
Jens Remus [Fri, 1 Mar 2024 10:12:40 +0000 (11:12 +0100)] 
s390: Use proper string lengths when parsing opcode table flags

opcodes/
* s390-mkopc.c: Use proper string lengths when parsing opcode
table flags.

Fixes: c5306fed7d4 ("s390: Support for jump visualization in disassembly")
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
15 months agos390: Whitespace fixes in conditional branch flavor descriptions
Jens Remus [Fri, 1 Mar 2024 10:12:40 +0000 (11:12 +0100)] 
s390: Whitespace fixes in conditional branch flavor descriptions

opcodes/
* s390-mkopc.c: Whitespace fixes in conditional branch flavor
descriptions.

Signed-off-by: Jens Remus <jremus@linux.ibm.com>
Reviewed-by: Andreas Krebbel <krebbel@linux.ibm.com>
15 months agox86: adjust which Dwarf2 register numbers to use
Jan Beulich [Fri, 1 Mar 2024 08:25:59 +0000 (09:25 +0100)] 
x86: adjust which Dwarf2 register numbers to use

Consumers can't know which execution mode is in effect for a certain
piece of code; they can only go from object file properties. Hence which
register numbers to encode ought to depend solely on object file type.

In tc_x86_frame_initial_instructions() do away with parsing a register
name: We have a symbolic constant already for the 64-bit case, and the
32-bit number isn't going to change either. Said constant's definition
needs moving, though, to be available also for non-ELF. While moving
also adjust the comment to clarify that it's applicable to 64-bit mode
only.

15 months agogas/NEWS: drop mention of Arm64's SVE2.1 and SME2.1
Jan Beulich [Fri, 1 Mar 2024 08:23:34 +0000 (09:23 +0100)] 
gas/NEWS: drop mention of Arm64's SVE2.1 and SME2.1

... plus the SME part of B16B16. As per

https://sourceware.org/pipermail/binutils/2024-February/132408.html

SVE2.1 support is both incomplete and buggy. SME2.1 "support" goes as
far as a single instruction (a subset of movaz forms) only. The SME part
of B16B16 is entirely missing.

15 months agox86/APX: honor -mevexwig= for byte-size insns
Jan Beulich [Fri, 1 Mar 2024 08:22:46 +0000 (09:22 +0100)] 
x86/APX: honor -mevexwig= for byte-size insns

These uniformly ignore EVEX.W, and hence what we emit ought to be
controllable by the command line option.

15 months agox86/APX: optimize certain XOR and SUB forms
Jan Beulich [Fri, 1 Mar 2024 08:21:40 +0000 (09:21 +0100)] 
x86/APX: optimize certain XOR and SUB forms

While most logic in optimize_encoding() is already covering APX by way
of the earlier NDD->REX2 conversion, there's a remaining set of cases
which wants handling separately.

15 months agox86/APX: correct .insn opcode space determination when REX2 is needed
Jan Beulich [Fri, 1 Mar 2024 08:20:56 +0000 (09:20 +0100)] 
x86/APX: correct .insn opcode space determination when REX2 is needed

In this case spaces 0f38 and 0f3a may not be put in place. To achieve
the intended effect, operand parsing (but not operand processing) needs
pulling ahead, so we know whether eGRP-s are in use.

15 months agox86/APX: respect {vex}/{vex3}
Jan Beulich [Fri, 1 Mar 2024 08:19:58 +0000 (09:19 +0100)] 
x86/APX: respect {vex}/{vex3}

Even when an EVEX encoding is available, use of such a prefix ought to
be respected (resulting in an error) rather than ignored. As requested
during review already, introduce a new encoding enumerator to record use
of eGPR-s, and update state transitions accordingly.

The optimize_encoding() change also addresses an internal assembler
error that was previously raised when respective memory operands used
eGPR-s for addressing.

While this results in a change of diagnostic issued for VEX-encoded
insns, the new one is at least no worse than the prior one.

15 months agoUse DW_FORM_ref_addr for DIE offset in .debug_names
Tom Tromey [Sat, 10 Feb 2024 00:40:35 +0000 (17:40 -0700)] 
Use DW_FORM_ref_addr for DIE offset in .debug_names

Today I realized that while the .debug_names writer uses DW_FORM_udata
for the DIE offset, DW_FORM_ref_addr would be more appropriate here.
This patch makes this change.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31361

15 months agoAutomatic date update in version.in
GDB Administrator [Fri, 1 Mar 2024 00:00:49 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agoPR19871, description of --pie
Alan Modra [Thu, 29 Feb 2024 22:30:27 +0000 (09:00 +1030)] 
PR19871, description of --pie

Say why we even mention shared libraries here (ET_DYN), and clarify
symbol resolution.  There are of course many other ways that PIEs
resemble PDEs more closely than shared libraries.

PR 19871
* ld.texi (-pie): Clarify.

15 months agoSynchronize GCC compile plugin headers
Tom Tromey [Wed, 21 Feb 2024 00:15:03 +0000 (17:15 -0700)] 
Synchronize GCC compile plugin headers

This patch copies some changes to the compile headers from GCC's
include/ directory.  It is the gdb equivalent of the GCC commit
bc0e18a9 -- however, while that commit also necessarily touched
libcc1, this one of course does not.

Tested by rebuilding and also running the gdb.compile tests.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31397

15 months agoaarch64: Fix the 2nd operand in gcsstr and gcssttr instructions.
Srinath Parvathaneni [Thu, 29 Feb 2024 21:06:25 +0000 (21:06 +0000)] 
aarch64: Fix the 2nd operand in gcsstr and gcssttr instructions.

The assembler wrongly expects plain register name instead of
memory-form 2nd operand for gcsstr and gcssttr instructions.
This patch fixes the issue.

15 months ago[gdb/dap] Fix stray KeyboardInterrupt after cancel
Tom de Vries [Thu, 29 Feb 2024 20:29:34 +0000 (21:29 +0100)] 
[gdb/dap] Fix stray KeyboardInterrupt after cancel

When running test-case gdb.dap/pause.exp 100 times in a loop, it passes
100/100.

But if we remove the two "sleep 0.2" from the test-case, we run into
(copied from dap.log and edited for readability):
...
Traceback (most recent call last):
  File "startup.py", line 251, in message
    def message():

KeyboardInterrupt
Quit
...

This happens as follows.

CancellationHandler.cancel calls gdb.interrupt to cancel a request in flight.

The idea is that this interrupt triggers while in fn here in message (a nested
function of send_gdb_with_response):
...
    def message():
        try:
            val = fn()
            result_q.put(val)
        except (Exception, KeyboardInterrupt) as e:
            result_q.put(e)
...
but instead it triggers outside the try/except.

Fix this by:
- in CancellationHandler, renaming variable in_flight to in_flight_dap_thread,
  and adding a variable in_flight_gdb_thread to be able to distinguish when
  a request is in flight in the dap thread or the gdb thread.
- adding a wrapper Cancellable to to deal with cancelling the wrapped
  event
- using Cancellable in send_gdb and send_gdb_with_response to wrap the posted
  event
- in CancellationHandler.cancel, only call gdb.interrupt if
  req == self.in_flight_gdb_thread.

This makes the test-case pass 100/100, also when adding the extra stressor of
"taskset -c 0", which makes the fail more likely without the patch.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
PR dap/31275
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31275

15 months ago[gdb/dap] Move send_gdb and send_gdb_with_response to server module
Tom de Vries [Thu, 29 Feb 2024 20:29:34 +0000 (21:29 +0100)] 
[gdb/dap] Move send_gdb and send_gdb_with_response to server module

Move functions send_gdb and send_gdb_with_response, as well as class Invoker
to server module.

Separated out to make the following patch easier to read.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
15 months agogdb/arm: Remove tpidruro register from non-FreeBSD target descriptions
Thiago Jung Bauermann [Mon, 26 Feb 2024 22:11:45 +0000 (19:11 -0300)] 
gdb/arm: Remove tpidruro register from non-FreeBSD target descriptions

Commit 92d48a1e4eac ("Add an arm-tls feature which includes the tpidruro
register from CP15.") introduced the org.gnu.gdb.arm.tls feature, which
adds the tpidruro register, and unconditionally enabled it in
aarch32_create_target_description.

In Linux, the tpidruro register isn't available via ptrace in the 32-bit
kernel but it is available for an aarch32 program running under an arm64
kernel via the ptrace compat interface.  This isn't currently implemented
however, which causes GDB on arm-linux with 64-bit kernel to list the
register but show it as unavailable, as reported by Tom de Vries:

  $ gdb -q -batch a.out -ex start -ex 'p $tpidruro'
  Temporary breakpoint 1 at 0x512

  Temporary breakpoint 1, 0xaaaaa512 in main ()
  $1 = <unavailable>

Simon Marchi then clarified:

> The only time we should be seeing some "unavailable" registers or memory
> is in the context of tracepoints, for things that are not collected.
> Seeing an unavailable register here is a sign that something is not
> right.

Therefore, disable the TLS feature in aarch32 target descriptions for Linux
and NetBSD targets (the latter also doesn't seem to support accessing
tpidruro either, based on a quick look at arm-netbsd-nat.c).

This patch fixes the following tests:

Running gdb.base/inline-frame-cycle-unwind.exp ...
FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 3: backtrace when the unwind is broken at frame 3
FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 5: backtrace when the unwind is broken at frame 5
FAIL: gdb.base/inline-frame-cycle-unwind.exp: cycle at level 1: backtrace when the unwind is broken at frame 1

Tested with Ubuntu 22.04.3 on armv8l-linux-gnueabihf in native,
native-gdbserver and native-extended-gdbserver targets with no regressions.

PR tdep/31418
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31418

Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agobfd: Add ATTRIBUTE_HIDDEN to x86 internal functions
H.J. Lu [Thu, 29 Feb 2024 12:15:12 +0000 (04:15 -0800)] 
bfd: Add ATTRIBUTE_HIDDEN to x86 internal functions

* elfxx-x86.h: Add ATTRIBUTE_HIDDEN to internal functions.
* libbfd-in.h (_bfd_get_link_info): Add ATTRIBUTE_HIDDEN.
* libbfd.h: Regenerated.

15 months agoPR21739, Inconsistent diagnostics
Alan Modra [Thu, 29 Feb 2024 10:33:12 +0000 (21:03 +1030)] 
PR21739, Inconsistent diagnostics

PR 21739
cpu/
* mep.opc (parse_lo16, parse_unsigned7): Mark %function
message as no-c-format.
opcodes/
* mep-asm.c: Regenerate.

15 months agoRISC-V: Initial ld.bfd support for TLSDESC.
Tatsuyuki Ishi [Tue, 20 Feb 2024 17:55:52 +0000 (02:55 +0900)] 
RISC-V: Initial ld.bfd support for TLSDESC.

Only relocation handling for now; relaxation is not implemented yet.

bfd/
    * elfnn-riscv.c (riscv_elf_check_relocs): Record GOT reference and
    paired relocation for TLSDESC_HI20.
    (riscv_elf_adjust_dynamic_symbol): Allocate GOT and reloc slots for
    TLSDESC symbols.
    (riscv_elf_size_dynamic_sections): Likewise but for local symbols.
    (tlsdescoff): New helper to determine static addend for R_TLSDESC.
    (riscv_elf_relocate_section): Ignore TLSDESC_CALL reloc for now (it is
    relaxation only).
    Handle TLSDESC_{LOAD,ADD}_LO12 as paired pcrel relocs.
    For TLS GOT slot generation, generalize the logic to handle any
    combination of (GD, IE, TLSDESC).
    Add TLSDESC Rela generation.
    * ld/testsuite/ld-riscv-elf/tls*: Add TLSDESC instruction sequences
    next to the existing GD and IE sequences. Update expectations.

15 months agoRISC-V: Define and use GOT entry size constants for TLS.
Tatsuyuki Ishi [Tue, 20 Feb 2024 17:55:51 +0000 (02:55 +0900)] 
RISC-V: Define and use GOT entry size constants for TLS.

As the size calculation is split by global and local symbols, using a
shared constant definition for its size improves clarity.

bfd/
    * elfnn-riscv.c: Add macros for sizes of a normal GOT entry, TLS GD and
    TLS IE entry.
    (allocate_dynrelocs): Replace GOT size expressions with the new
    constants.
    (riscv_elf_size_dynamic_sections): Likewise.
    (riscv_elf_relocate_section): Likewise.

15 months agoRISC-V: Add assembly support for TLSDESC.
Tatsuyuki Ishi [Tue, 20 Feb 2024 17:55:50 +0000 (02:55 +0900)] 
RISC-V: Add assembly support for TLSDESC.

gas/
    * tc-riscv.c (percent_op_*): Add support for %tlsdesc_hi,
    %tlsdesc_load_lo, %tlsdesc_add_lo and %tlsdesc_call. percent_op_rtype
    renamed to percent_op_relax_only as this matcher is extended to handle
    jalr as well which is not R-type.
    (riscv_ip): Apply the percent_op_relax_only rename and update comment.
    (md_apply_fix): Add TLSDESC_* to relaxable list. Add TLSDESC_HI20 to
    TLS relocation check list.
    * testsuite/gas/riscv/tlsdesc.*: New test cases for TLSDESC relocation
    generation.
opcodes/
    * riscv-opc.c (riscv_opcodes): Add a new syntax for jalr with
    %tlsdesc_call annotations.

15 months agoRISC-V: Add TLSDESC reloc definitions.
Tatsuyuki Ishi [Tue, 20 Feb 2024 17:55:49 +0000 (02:55 +0900)] 
RISC-V: Add TLSDESC reloc definitions.

bfd/
    * elfxx-riscv.c: Add 5 TLSDESC reloc descriptions.
    * reloc.c: Likewise.
    * libbfd.h: Regenerate.
    * bfd-in2.h: Regenerate.
include/
    * elf/riscv.h: Add 5 TLSDESC reloc descriptions.

15 months agogprofng: change use of bignum to use of bigint
Ruud van der Pas [Tue, 27 Feb 2024 18:29:55 +0000 (18:29 +0000)] 
gprofng: change use of bignum to use of bigint

Change the statement "use bignum" to "use bigint".  This is sufficient
for gp-display-html to work and removes the dependency on bignum.

gprofng/ChangeLog
2024-02-27  Ruud van der Pas  <ruud.vanderpas@oracle.com>

PR 31390
* gprofng/gp-display-html: One line change to "use bigint".

15 months agoaarch64: Use aarch64_debug_printf in a few more places
John Baldwin [Thu, 29 Feb 2024 00:03:16 +0000 (16:03 -0800)] 
aarch64: Use aarch64_debug_printf in a few more places

No functional change

Approved-By: Simon Marchi <simon.marchi@efficios.com>
15 months agoAutomatic date update in version.in
GDB Administrator [Thu, 29 Feb 2024 00:00:32 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agoPR23877, bad value (n32r5900) for default CPU
Alan Modra [Wed, 28 Feb 2024 22:15:18 +0000 (08:45 +1030)] 
PR23877, bad value (n32r5900) for default CPU

Catching this at configure time would be nicer, but we'd need to exactly
match mips_parse_cpu in configure.ac and keep it all in sync.

PR 23877
* config/tc-mips.c (mips_after_parse_args): Don't assert that
mips_parse_cpu returns non-NULL, call as_fatal with an informative
message instead.

15 months agoFix implementation of SUBALIGN.
Vladislav Belov [Wed, 28 Feb 2024 16:36:37 +0000 (16:36 +0000)] 
Fix implementation of SUBALIGN.

15 months agoFix gdb.interrupt race
Tom Tromey [Fri, 23 Feb 2024 15:59:40 +0000 (08:59 -0700)] 
Fix gdb.interrupt race

gdb.interrupt was introduced to implement DAP request cancellation.
However, because it can be run from another thread, and because I
didn't look deeply enough at the implementation, it turns out to be
racy.

The fix here is to lock accesses to certain globals in extension.c.

Note that this won't work in the case where configure detects that the
C++ compiler doesn't provide thread support.  This version of the
patch disables DAP entirely in this situation.

Regression tested on x86-64 Fedora 38.  I also ran gdb.dap/pause.exp
in a thread-sanitizer build tree to make sure the reported race is
gone.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31263

15 months agoPR23881, pdp11 binutils fails if too much debug data
Alan Modra [Wed, 28 Feb 2024 08:23:52 +0000 (18:53 +1030)] 
PR23881, pdp11 binutils fails if too much debug data

The PR testcase overflows one of the exec header fields, e_syms (the
size of the symbol table), leading to the string table offset being
wrong.  Things go downhill from there.  Fixed by checking for
overflow.  This happens to trigger in the ld testsuite, so xfail that
test.

PR 23881
bfd/
* libaout.h (swap_exec_header_out): Return a bool.
* aoutx.h (swap_exec_header_out): Check for overflow in exec
header.
* pdp11.c (swap_exec_header_out): Likewise.
* i386lynx.c (WRITE_HEADERS): Adjust.
ld/
* testsuite/ld-scripts/map-address.exp: xfail pdp11.

15 months agoAutomatic date update in version.in
GDB Administrator [Wed, 28 Feb 2024 00:00:28 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agoTwo minor addrmap cleanups
Tom Tromey [Mon, 26 Feb 2024 17:47:45 +0000 (10:47 -0700)] 
Two minor addrmap cleanups

While working on a different patch, I found a couple of simple addrmap
cleanups.

In one case, a forward declaration is no longer needed, as the header
now includes addrmap.h.

In the other, an include of addrmap.h is no longer needed.

Tested by rebuilding.

15 months agoExplicitly quit gdb from DAP server thread
Tom Tromey [Fri, 23 Feb 2024 20:51:58 +0000 (13:51 -0700)] 
Explicitly quit gdb from DAP server thread

This changes the DAP code to explicitly request that gdb exit.
Previously this could cause crashes, but with the previous cleanups,
this should no longer happen.

This also adds a tests that ensures that gdb exits with status 0.

15 months agoAdd final cleanup for runnables
Tom Tromey [Fri, 23 Feb 2024 20:26:02 +0000 (13:26 -0700)] 
Add final cleanup for runnables

This changes run-on-main-thread.c to clear 'runnables' in a final
cleanup.  This avoids an issue where a pending runnable could require
Python, but be run after the Python interpreter was finalized.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31172

15 months agoChange finalize_values into a final cleanup
Tom Tromey [Fri, 23 Feb 2024 20:24:03 +0000 (13:24 -0700)] 
Change finalize_values into a final cleanup

This removes finalize_values in favor of adding a new final cleanup.
This is safe now that extension languages are explicitly shut down.

15 months agoAdd extension_language_ops::shutdown
Tom Tromey [Fri, 23 Feb 2024 20:18:49 +0000 (13:18 -0700)] 
Add extension_language_ops::shutdown

Right now, Python is shut down via a final cleanup.  However, it seems
to me that it is better for extension languages to be shut down
explicitly, after all the ordinary final cleanups are run.  The main
reason for this is that a subsequent patch adds another case like
finalize_values; and rather than add a series of workarounds for
Python shutdown, it seemed better to let these be done via final
cleanups, and then have Python shutdown itself be the special case.

15 months agoRewrite final cleanups
Tom Tromey [Fri, 23 Feb 2024 20:10:28 +0000 (13:10 -0700)] 
Rewrite final cleanups

This patch rewrites final cleanups to use std::function and otherwise
be more C++-ish.

15 months agoUse the .py file in gdb.dap/pause.exp
Tom Tromey [Fri, 16 Feb 2024 17:39:46 +0000 (10:39 -0700)] 
Use the .py file in gdb.dap/pause.exp

Tom de Vries pointed out that the gdb.dap/pause.exp test writes a
Python file but then does not use it.  This patch corrects the
oversight.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31354
Reviewed-By: Tom de Vries <tdevries@suse.de>
15 months agoRewrite "python" command exception handling
Tom Tromey [Thu, 15 Feb 2024 20:14:43 +0000 (13:14 -0700)] 
Rewrite "python" command exception handling

The "python" command (and the Python implementation of the gdb
"source" command) does not handle Python exceptions in the same way as
other gdb-facing Python code.  In particular, exceptions are turned
into a generic error rather than being routed through
gdbpy_handle_exception, which takes care of converting to 'quit' as
appropriate.

I think this was done this way because PyRun_SimpleFile and friends do
not propagate the Python exception -- they simply indicate that one
occurred.

This patch reimplements these functions to respect the general gdb
convention here.  As a bonus, some Windows-specific code can be
removed, as can the _execute_file function.

The bulk of this change is tweaking the test suite to match the new
way that exceptions are displayed.  These changes are largely
uninteresting.  However, it's worth pointing out the py-error.exp
change.  Here, the failure changes because the test changes the host
charset to something that isn't supported by Python.  This then
results in a weird error in the new setup.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31354
Acked-By: Tom de Vries <tdevries@suse.de>
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
15 months agoFix formatting buglet in python.c
Tom Tromey [Thu, 15 Feb 2024 21:02:22 +0000 (14:02 -0700)] 
Fix formatting buglet in python.c

python.c has a split string that is missing a space.  There's also a
stray backslash in this code.

Reviewed-By: Tom de Vries <tdevries@suse.de>
15 months agoIntroduce read_remainder_of_file
Tom Tromey [Thu, 15 Feb 2024 19:12:25 +0000 (12:12 -0700)] 
Introduce read_remainder_of_file

This patch adds a new function, read_remainder_of_file.  This is like
read_text_file_to_string, but reads from an existing 'FILE *'.  This
will be used in a subsequent patch.

Reviewed-By: Tom de Vries <tdevries@suse.de>
15 months ago[gdb/testsuite] Reset errcnt and warncnt in default_gdb_init
Tom de Vries [Tue, 27 Feb 2024 15:24:15 +0000 (16:24 +0100)] 
[gdb/testsuite] Reset errcnt and warncnt in default_gdb_init

Say we do:
...
$ make check RUNTESTFLAGS="gdb.dap/ada-nested.exp gdb.dap/pause.exp"
...
and add a perror at the end of pause.exp:
...
 dap_shutdown
+
+perror "foo"
...

We run into:
...
UNRESOLVED: gdb.dap/ada-nested.exp: compilation prog.adb
...

This happens because the perror increases the errcnt, which is not reset at
the end of the test-case, and consequently the first pass in the following
test-case is changed into an unresolved.

Version 1.6.3 of dejagnu contains a fix which produces an unresolved at the
end of the test-case, which does reset the errcnt, but this is with version
1.6.1.

Furthermore, we reset the errcnt in clean_restart, but the pass is produced
before, so that doesn't help either.

Fix this by resetting errcnt and warncnt in default_gdb_init.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
PR testsuite/31351
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31351

15 months ago[gdb/testsuite] Remove KFAIL for PR ada/30908
Tom de Vries [Tue, 27 Feb 2024 15:21:56 +0000 (16:21 +0100)] 
[gdb/testsuite] Remove KFAIL for PR ada/30908

PR ada/30908 turns out to be a duplicate of PR ada/12607, which was fixed by
commit d56fdf1b976 ("Refine Ada overload matching").

Remove the KFAILs for PR ada/30908.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30908

15 months ago[gdb/testsuite] Fix test in gdb.python/py-finish-breakpoint.exp
Tom de Vries [Tue, 27 Feb 2024 15:18:32 +0000 (16:18 +0100)] 
[gdb/testsuite] Fix test in gdb.python/py-finish-breakpoint.exp

With test-case gdb.python/py-finish-breakpoint.exp, we run into:
...
(gdb) python print (finishbp_default.hit_count)
Traceback (most recent call last):
  File "<string>", line 1, in <module>
RuntimeError: Breakpoint 3 is invalid.
Error while executing Python code.
(gdb) PASS: gdb.python/py-finish-breakpoint.exp: normal conditions: \
  check finishBP on default frame has been hit
...

The test producing the pass is:
...
    gdb_test "python print (finishbp_default.hit_count)" "1.*" \
      "check finishBP on default frame has been hit"
...
so the pass is produced because the 1 in "line 1" matches "1.*".

Temporary breakpoints are removed when hit, and consequently accessing the
hit_count attribute of a temporary python breakpoint (gdb.Breakpoint class) is
not possible, and as per spec we get a RuntimeError.

So the RuntimeError is correct, and not specific to finish breakpoints.

The test presumably attempts to match:
...
(gdb) python print (finishbp_default.hit_count)
1
...
but most likely this output was never produced by any gdb version.

Fix this by checking whether the finishbp_default breakpoint has hit by
checking that finishbp_default.is_valid() is False.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
PR testsuite/31391
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31391

15 months agoCygwin: Fix putting inferior in foreground (fix input)
Pedro Alves [Thu, 6 May 2021 19:59:14 +0000 (20:59 +0100)] 
Cygwin: Fix putting inferior in foreground (fix input)

gdb.base/interrupt.exp reveals that inferior input is
broken on Cygwin:

  (gdb) continue
  Continuing.
  talk to me baby
  Input/output error                                   <<< BAD
  PASS: gdb.base/interrupt.exp: process is alive
  a
  [Thread 10688.0x2590 exited with code 1]
  [Thread 10688.0x248c exited with code 1]
  [Thread 10688.0x930 exited with code 1]
  [Thread 10688.0x2c98 exited with code 1]

  Program terminated with signal SIGHUP, Hangup.
  The program no longer exists.
  (gdb) FAIL: gdb.base/interrupt.exp: child process ate our char
  a
  Ambiguous command "a": actions, add-auto-load-safe-path, add-auto-load-scripts-directory, add-inferior...
  (gdb) ERROR: "" is not a unique command name.

The problem is that inflow.c:child_terminal_inferior is failing to put
the inferior in the foreground, because we're passing down the
inferior's Windows PID instead of the Cygwin PID to Cygwin tcsetpgrp.

That is fixed by this commit.  Afterwards we will get:

  (gdb) continue
  Continuing.
  talk to me baby
  PASS: gdb.base/interrupt.exp: process is alive
  a
  a                                                              <<< GOOD
  PASS: gdb.base/interrupt.exp: child process ate our char
  [New Thread 7236.0x1c58]

  Thread 6 received signal SIGINT, Interrupt.                    <<< new thread spawned for SIGINT
  [Switching to Thread 7236.0x1c58]
  0x00007ffa6643ea6b in TlsGetValue () from /cygdrive/c/Windows/System32/KERNELBASE.dll
  (gdb) FAIL: gdb.base/interrupt.exp: send_gdb control C

We still have the FAIL seen above because this change has another
consequence.  By failing to put the inferior in the foreground
correctly, Ctrl-C was always reaching GDB first.  Now that the
inferior is put in the foreground properly, Ctrl-C reaches the
inferior first, which results in a Windows Ctrl-C event, which results
in Windows injecting a new thread in the inferior to report the Ctrl-C
exception => SIGINT.  That is, running the test manually:

Before patch:

  (gdb) c
  Continuing.
  [New Thread 2352.0x1f5c]
  [New Thread 2352.0x1988]
  [New Thread 2352.0x18cc]
                                                           <<< Ctrl-C pressed.
  Thread 7 received signal SIGTRAP, Trace/breakpoint trap.
  [Switching to Thread 2352.0x18cc]
  0x00007ffa68930b11 in ntdll!DbgBreakPoint () from /cygdrive/c/Windows/SYSTEM32/ntdll.dll
  (gdb)

Above, GDB got the SIGINT, and it manually passes it down the
inferior, which reaches windows_nat_target::interrupt(), which
interrupts the inferior with DebugBreakProcess (which injects a new
thread in the inferior that executes an int3 instruction).

After this patch, we have (with "set debugexceptions on" so
DBG_CONTROL_C is visible):

  (gdb) c
  Continuing.
  [New Thread 9940.0x1168]
  [New Thread 9940.0x5f8]
  gdb: Target exception MS_VC_EXCEPTION at 0x7ffa6638cf19
  gdb: Target exception MS_VC_EXCEPTION at 0x7ffa6638cf19
  [New Thread 9940.0x3d8]
  gdb: Target exception DBG_CONTROL_C at 0x7ffa6643ea6b   <<< Ctrl-C

  Thread 7 received signal SIGINT, Interrupt.             <<< new injected thread
  [Switching to Thread 9940.0x3d8]
  0x00007ffa6643ea6b in TlsGetValue () from /cygdrive/c/Windows/System32/KERNELBASE.dll
  (gdb)

This new behavior is exactly the same as what you see with a MinGW GDB
build.  Also, SIGINT reaching inferior first is what you get on Linux
as well currently.

I wrote an initial fix for this before I discovered that Cygwin
downstream had a similar change, so I then combined the patches.  I am
adding a Co-Authored-By for that reason.

Co-Authored-By: Takashi Yano <takashi.yano@nifty.ne.jp>
Approved-By: Tom Tromey <tom@tromey.com>
Change-Id: I3a8c3355784c6a817dbd345ba9dac24be06c4b3f

15 months agos390: Add r_offset check to the weak undef change
Andreas Krebbel [Tue, 27 Feb 2024 14:24:06 +0000 (15:24 +0100)] 
s390: Add r_offset check to the weak undef change

Since we are accessing up to 2 bytes before the relocation target we
should better make sure there are actually 2 bytes before it.

ChangeLog:

* bfd/elf64-s390.c (elf_s390_relocate_section): Make sure
rel->r_offset is large enough.

15 months agoarc: Don't build arc-analyze-prologue.S with -g
Yuriy Kolerov [Thu, 22 Feb 2024 08:02:19 +0000 (08:02 +0000)] 
arc: Don't build arc-analyze-prologue.S with -g

arc-analyze-prologue.S test does not contain debug information thus
it must be compiled without -g option. Otherwise GDB will try to
unwind frames using debug information (which does not exist for .S
code!) instead of analyzing frames manually.

Approved-By: Shahab Vahedi <shahab@synopsys.com>
15 months agos390: Avoid reloc overflows on undefined weak symbols
Andreas Krebbel [Tue, 27 Feb 2024 13:01:41 +0000 (14:01 +0100)] 
s390: Avoid reloc overflows on undefined weak symbols

Replace relative long addressing instructions of weak symbols, which
will definitely resolve to zero, with either a load address of 0, a
NOP, or a trapping insn.

This prevents the PC32DBL relocation from overflowing in case the
binary will be loaded at 4GB or more.

bfd/ChangeLog:

* bfd/elf64-s390.c (elf_s390_relocate_section): Replace
instructions using undefined weak symbols with relative addressing
to avoid relocation overflows.

ld/ChangeLog:
* ld/testsuite/ld-s390/s390.exp:
* ld/testsuite/ld-s390/8GB.ld: New test.
* ld/testsuite/ld-s390/weakundef-1.dd: New test.
* ld/testsuite/ld-s390/weakundef-1.s: New test.

15 months agoaarch64: rename internals related to PAuth feature to use pauth in their naming for...
Matthieu Longo [Fri, 23 Feb 2024 14:52:58 +0000 (14:52 +0000)] 
aarch64: rename internals related to PAuth feature to use pauth in their naming for coherency

Hi,

Commits af1bd77 and 3f4ff08 introduced the Pointer Authentication feature with internal names that don't match the actual feature name pauth. The new feature PAuth_LR introduced in Armv9.5-A is an extension of the PAuth feature of Armv8.3-A. Using a different naming for it not based on the formerly "PAC" would create confusion.

Regression tested on aarch64-none-elf, and no regression found.

Ok for binutils-master? I don't have commit access so I need someone to commit on my behalf.

Regards,
Matthieu.
From 58b38358b2788939d81f2df7f5fb4c64a31ae06e Mon Sep 17 00:00:00 2001
From: Matthieu Longo <matthieu.longo@arm.com>
Date: Fri, 23 Feb 2024 11:30:40 +0000
Subject: [PATCH] aarch64: rename internals related to PAuth feature to use
 pauth in their naming for coherency

Commits af1bd77 and 3f4ff08 introduced the Pointer Authentication feature
with internal names that don't match the actual feature name pauth. The new
feature PAuth_LR introduced in Armv9.5-A is an extension of the PAuth feature
of Armv8.3-A. Using a different naming for it not based on the formerly "PAC"
would create confusion.

15 months agoLoongArch: Run overflow testcases only on LoongArch target
mengqinggang [Tue, 27 Feb 2024 07:12:14 +0000 (15:12 +0800)] 
LoongArch: Run overflow testcases only on LoongArch target

15 months agoLoongArch: Modify inconsistent behavior of ld with --unresolved-symbols=ignore-all
ticat_fp [Mon, 26 Feb 2024 03:11:35 +0000 (11:11 +0800)] 
LoongArch: Modify inconsistent behavior of ld with --unresolved-symbols=ignore-all

Remove duplicated check when producing executable files that reference external symbols
defined in other files. RELOC_FOR_GLOBAL_SYMBOL will check it.

Testcase is:
resolv.c:
int main(int argc, char *argv[]) {
    return argc;
}

t.c:

extern const struct my_struct ms1;
static const struct my_struct *ms = &ms1;

t.h:
typedef struct my_struct {
    char *str;
    int i;
} my_struct;

Compiling and linking command with:
gcc t.c -c ; gcc resolv.c -c
gcc resolv.o t.o -o resolv -Wl,--unresolved-symbols=ignore-all

Got error as:
~/install/usr/bin/ld: t.o:(.data.rel+0x0): undefined reference to `ms1'
collect2: error: ld returned 1 exit status

15 months agoAvoid unused space in .rela.dyn if sec was discarded
Jinyang He [Fri, 15 Sep 2023 03:52:14 +0000 (11:52 +0800)] 
Avoid unused space in .rela.dyn if sec was discarded

The relsec size is still increased although sec is discarded, which
cause a lot of unused space allocated. Avoid size increased if sec
was discarded.

bfd/ChangeLog:

* bfd/elfnn-loongarch.c: (allocate_dynrelocs): Do not increase
sreloc size when discarded_section.

ld/ChangeLog:

* ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp: Add test.
* ld/testsuite/ld-loongarch-elf/pie_discard.d: New test.
* ld/testsuite/ld-loongarch-elf/pie_discard.s: New test.
* ld/testsuite/ld-loongarch-elf/pie_discard.t: New test.

15 months agoLoongArch: ld: Fix other pop relocs overflow check and add tests
Jinyang He [Tue, 5 Sep 2023 02:31:28 +0000 (10:31 +0800)] 
LoongArch: ld: Fix other pop relocs overflow check and add tests

Add reloc_unsign_bits() to fix others sop_pop relocs overflow check.
Then add over/underflow tests for relocs B*, SOP_POP* and PCREL20_S2.

bfd/ChangeLog:

* bfd/elfxx-loongarch.c: Add reloc_unsign_bits().

ld/ChangeLog:

* ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp: Add tests.
* ld/testsuite/ld-loongarch-elf/abi1_max_imm.dd: New test.
* ld/testsuite/ld-loongarch-elf/abi1_max_imm.s: New test.
* ld/testsuite/ld-loongarch-elf/abi1_sops.s: New test.
* ld/testsuite/ld-loongarch-elf/abi2_max_imm.s: New test.
* ld/testsuite/ld-loongarch-elf/abi2_overflows.s: New test.
* ld/testsuite/ld-loongarch-elf/max_imm_b16.d: New test.
* ld/testsuite/ld-loongarch-elf/max_imm_b21.d: New test.
* ld/testsuite/ld-loongarch-elf/max_imm_b26.d: New test.
* ld/testsuite/ld-loongarch-elf/max_imm_pcrel20.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_b16.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_b21.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_b26.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_pcrel20.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_s_0_10_10_16_s2.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_s_0_5_10_16_s2.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_s_10_12.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_s_10_16.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_s_10_16_s2.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_s_10_5.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_s_5_20.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_u.d: New test.
* ld/testsuite/ld-loongarch-elf/overflow_u_10_12.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_b16.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_b21.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_b26.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_pcrel20.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_s_0_10_10_16_s2.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_s_0_5_10_16_s2.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_s_10_12.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_s_10_16.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_s_10_16_s2.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_s_10_5.d: New test.
* ld/testsuite/ld-loongarch-elf/underflow_s_5_20.d: New test.

15 months agoLoongArch: bfd: Fix some bugs of howto table
mengqinggang [Thu, 22 Feb 2024 12:18:25 +0000 (20:18 +0800)] 
LoongArch: bfd: Fix some bugs of howto table

R_LARCH_IRELATIVE: For dynamic relocation that does not distinguish between
32/64 bits, size and bitsize set to 8 and 64.
R_LARCH_TLS_DESC64: Change size to 8.
R_LARCH_SOP_POP_32_S_0_5_10_16_S2: Change src_mask to 0, dst_mask to
0x03fffc1f.

15 months agoAutomatic date update in version.in
GDB Administrator [Tue, 27 Feb 2024 00:00:29 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agogdb/amd-dbgapi: fix indentation
Simon Marchi [Mon, 26 Feb 2024 22:34:40 +0000 (17:34 -0500)] 
gdb/amd-dbgapi: fix indentation

Change-Id: Ia7a001020758edd2031d0d413d023d2808dd40a0

15 months agoRemove two unnecessary casts
Tom Tromey [Mon, 26 Feb 2024 20:50:54 +0000 (13:50 -0700)] 
Remove two unnecessary casts

I noticed a spot in ada-lang.c where the return value of
value_as_address was cast to CORE_ADDR -- a no-op cast.  I searched
and found another.  This patch fixes both.

16 months ago[gdb] Fix heap-use-after-free in select_event_lwp
Pedro Alves [Wed, 21 Feb 2024 16:23:55 +0000 (16:23 +0000)] 
[gdb] Fix heap-use-after-free in select_event_lwp

PR gdb/31259 reveals one scenario where we run into a
heap-use-after-free reported by thread sanitizer, while running
gdb.base/vfork-follow-parent.exp.

The heap-use-after-free happens during the following scenario:

 - linux_nat_wait_1 is about to return an event for T2.  It stops all
   other threads, and while doing so, stop_wait_callback -> wait_lwp
   sees T1 exit, and decides to leave the exit event pending.  It
   should have set the lp->stopped flag too, but does not -- this is
   the bug.

 - The event for T2 is reported, is processed by infrun, and we're
   back at linux_nat_wait_1.

 - linux_nat_wait_1 selects LWP T1 with the pending exit status to
   report.

 - it sets variable lp to point to the corresponding lwp_info.

 - it calls stop_callback and stop_wait_callback for all threads
   (because !target_is_non_stop_p ()).

 - it calls select_event_lwp to maybe pick another thread than T1, to
   prevent starvation.

The problem is the following:

 - while calling stop_wait_callback for all threads, it also does this
   for T1.  While doing so, the corresponding lwp_info is deleted
   (callstack stop_wait_callback -> wait_lwp -> exit_lwp ->
   delete_lwp), leaving variable lp as a dangling pointer.

 - variable lp is passed to select_event_lwp, which derefences it,
   which causes the heap-use-after-free.

Note that the comment here mentions "all other LWP's":
...
      /* Now stop all other LWP's ...  */
      iterate_over_lwps (minus_one_ptid, stop_callback);
      /* ... and wait until all of them have reported back that
        they're no longer running.  */
      iterate_over_lwps (minus_one_ptid, stop_wait_callback);
...

The reason the comments say "all other LWP's", and doesn't bother
filtering out LP is that lp->stopped should be true at this point, and
the callbacks (both stop_callback and stop_wait_callback) check that
flag, and do nothing if set.  I.e., they skip already-stopped threads,
so they should skip LP.

In this particular scenario, though, we missed setting the stopped
flag right in the first step described above, so LP was iterated over
incorrectly.

The fix is to make wait_lwp set the lp->stopped flag when it decides
to leave the exit event pending.  However, going a bit further,
gdbserver has a mark_lwp_dead function to centralize setting up
various lwp flags such that the rest of the code doesn't mishandle
them, and it seems like a good idea to do a similar thing in gdb as
well.  That is what this patch does.

PR gdb/31259
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31259
Co-Authored-By: Tom de Vries <tdevries@suse.de>
Change-Id: I4a6169976f89bf714c478cbb2b7d4c32365e62a9

16 months ago[gdb/testsuite] Dump dap.log.$n to gdb.log when exceptions found
Tom de Vries [Mon, 26 Feb 2024 15:03:45 +0000 (16:03 +0100)] 
[gdb/testsuite] Dump dap.log.$n to gdb.log when exceptions found

For a patch I submitted, the Linaro CI reported a failure:
...
FAIL: gdb.dap/attach.exp: exceptions in log file
...

I ran the test-case locally, and observed the same FAIL in the gdb.sum file.

I then wanted to confirm that I reproduced the exact same problem, but
realized that I couldn't because there's no way for me to know what exception
occurred, and where, because that information is logged in the dap.log.$n
file, and the Linaro CI only saves the gdb.sum and gdb.log files.

This issue is even worse if only the CI can reproduce a FAIL.

Fix this in dap_check_log_file by dumping dap.log.$n to gdb.log when
exceptions are found.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
16 months ago[gdb/testsuite] Further handle long filenames in gdb.base/startup-with-shell.exp
Tom de Vries [Mon, 26 Feb 2024 14:59:47 +0000 (15:59 +0100)] 
[gdb/testsuite] Further handle long filenames in gdb.base/startup-with-shell.exp

In commit 52498004a34 ("gdb/testsuite: handle long filenames in
gdb.base/startup-with-shell.exp") we fixed a FAIL reported by the Linaro CI:
...
(gdb) print argv[1]
$1 = 0xfffed978 "<snip>/startup-with-shell/unique-file.unique-e"...
(gdb) FAIL: gdb.base/startup-with-shell.exp: startup_with_shell = on; \
  run_args = *.unique-extension: first argument expanded
...

PR testsuite/31410 reports a similar failure:
...
(gdb) print argv[1]
$1 = 0xfffeda96 "<snip>/startup-with-shell/*.unique-extens"...
(gdb) FAIL: gdb.base/startup-with-shell.exp: startup_with_shell = off; \
  run_args = *.unique-extension: first argument not expanded
...

Fix this in the same way, using "set print characters unlimited".

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31410

16 months ago[gdb] Fix "value is not available" with debug frame
Tom de Vries [Mon, 26 Feb 2024 14:31:34 +0000 (15:31 +0100)] 
[gdb] Fix "value is not available" with debug frame

On arm-linux, with a started hello world, running "info frame" works fine, but
when I set debug frame to on, I run into:
...
(gdb) info frame
  ...
[frame] frame_unwind_register_value: exit
value is not available
(gdb)
...

The problem is here in frame_unwind_register_value:
...
          if (value->lazy ())
            gdb_printf (&debug_file, " lazy");
          else
            {
              int i;
              gdb::array_view<const gdb_byte> buf = value->contents ();
...
where we call value->contents () while !value->entirely_available ().

Fix this by checking value->entirely_available () and printing:
...
    [frame] frame_unwind_register_value:   -> register=91 unavailable
...

Tested on arm-linux.

PR gdb/31369
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31369

16 months agogdb: Modify the output of "info breakpoints" and "delete breakpoints"
Tiezhu Yang [Thu, 22 Feb 2024 07:29:11 +0000 (15:29 +0800)] 
gdb: Modify the output of "info breakpoints" and "delete breakpoints"

The output of "info breakpoints" includes breakpoint, watchpoint,
tracepoint, and catchpoint if they are created, so it should show
all the four types are deleted in the output of "info breakpoints"
to report empty list after "delete breakpoints".

It should also change the output of "delete breakpoints" to make it
clear that watchpoints, tracepoints, and catchpoints are also being
deleted. This is suggested by Guinevere Larsen, thank you.

$ make check-gdb TESTS="gdb.base/access-mem-running.exp"
$ gdb/gdb gdb/testsuite/outputs/gdb.base/access-mem-running/access-mem-running
[...]
(gdb) break main
Breakpoint 1 at 0x12000073c: file /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c, line 32.
(gdb) watch global_counter
Hardware watchpoint 2: global_counter
(gdb) trace maybe_stop_here
Tracepoint 3 at 0x12000071c: file /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c, line 27.
(gdb) catch fork
Catchpoint 4 (fork)
(gdb) info breakpoints
Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x000000012000073c in main at /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c:32
2       hw watchpoint  keep y                      global_counter
3       tracepoint     keep y   0x000000012000071c in maybe_stop_here at /home/loongson/gdb.git/gdb/testsuite/gdb.base/access-mem-running.c:27
not installed on target
4       catchpoint     keep y                      fork

Without this patch:

(gdb) delete breakpoints
Delete all breakpoints? (y or n) y
(gdb) info breakpoints
No breakpoints or watchpoints.
(gdb) info breakpoints 3
No breakpoint or watchpoint matching '3'.

With this patch:

(gdb) delete breakpoints
Delete all breakpoints, watchpoints, tracepoints, and catchpoints? (y or n) y
(gdb) info breakpoints
No breakpoints, watchpoints, tracepoints, or catchpoints.
(gdb) info breakpoints 3
No breakpoint, watchpoint, tracepoint, or catchpoint matching '3'.

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-by: Kevin Buettner <kevinb@redhat.com>
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
16 months agogdb: s390: Add arch14 record/replay support
Andreas Arnez [Tue, 13 Feb 2024 17:55:29 +0000 (18:55 +0100)] 
gdb: s390: Add arch14 record/replay support

Enable recording of the new "arch14" instructions on z/Architecture
targets, except for the specialized-function-assist instruction NNPA.

16 months agogprofng: Add hardware counter profiling for the Ampere system
Vladimir Mezentsev [Thu, 22 Feb 2024 23:30:40 +0000 (15:30 -0800)] 
gprofng: Add hardware counter profiling for the Ampere system

gprofng should recognize Ampere and other ARM systems.

gprofng/ChangeLog
2024-02-22  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

* common/hwc_cpus.h: Declare the enum values ARM_CPU_IMP_*.
* common/core_pcbe.c (core_pcbe_init): Accept new systems ARM_CPU_IMP_*.

16 months agoLoongArch: bfd: Correct the name of R_LARCH_SOP_POP_32_U in howto_table
Jinyang He [Tue, 5 Sep 2023 02:31:27 +0000 (10:31 +0800)] 
LoongArch: bfd: Correct the name of R_LARCH_SOP_POP_32_U in howto_table

16 months agoAutomatic date update in version.in
GDB Administrator [Mon, 26 Feb 2024 00:00:16 +0000 (00:00 +0000)] 
Automatic date update in version.in

16 months agoAutomatic date update in version.in
GDB Administrator [Sun, 25 Feb 2024 00:00:36 +0000 (00:00 +0000)] 
Automatic date update in version.in

16 months ago[gdb/build] Fix static cast of virtual base
Tom de Vries [Sat, 24 Feb 2024 10:00:20 +0000 (11:00 +0100)] 
[gdb/build] Fix static cast of virtual base

With this change in bfd/development.sh:
...
-development=true
+development=false
...
we run into:
...
In file included from tui-data.h:28:0,
                 from tui-command.c:24:
gdb-checked-static-cast.h: In instantiation of \
  ‘T gdb::checked_static_cast(V*) [with T = tui_cmd_window*; V = tui_win_info]’:
tui-command.c:65:15:   required from here
gdb-checked-static-cast.h:63:14: error: cannot convert from pointer to base \
  class ‘tui_win_info’ to pointer to derived class ‘tui_cmd_window’ because \
  the base is virtual
   T result = static_cast<T> (v);
              ^~~~~~~~~~~~~~~~~~
...

Fix this by using dynamic_cast instead of gdb::checked_static_cast in
TUI_CMD_WIN and TUI_STATUS_WIN.

Tested on x86_64-linux, with development set to false.

Reported-By: Robert Xiao <spam_hole@shaw.ca>
Reported-By: Simon Marchi <simark@simark.ca>
Approved-By: Tom Tromey <tom@tromey.com>
PR build/31399
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31399

16 months agoPR25333, GAS is slow processing -fdebug-types-sections
Alan Modra [Sat, 24 Feb 2024 01:08:57 +0000 (11:38 +1030)] 
PR25333, GAS is slow processing -fdebug-types-sections

gas needs to build lists of sections for each group.  This arranges to
build the lists earlier, so they can be used when looking for sections
that belong to a group.  Using the section hash table to find sections
by name, then by group isn't efficient when there are numerous groups
with the same section names.  Using a hash table to quickly find a
group, then searching by section name on a list for the group results
in a 100-fold speed improvement assembling the testcase in this PR.

To reduce the number of times we traverse the section list, the patch
also moves some processing done in elf_adjust_symtab for linked-to
section, to elf_frob_file.  This requires a testsuite change because
processing will stop before elf_frob_file if there is a parse error in
section21.s, ie. you'll only get the "junk at end of line" error, not
the "undefined linked-to symbol" errors.

PR 25333
* config/obj-elf.c (struct group_list, groups): Move earlier.
(match_section): New function, extracted from..
(get_section_by_match): ..here.
(free_section_idx): Move earlier.
(group_section_find, group_section_insert): New functions.
(change_section): Use the above.
(elf_set_group_name): New function.
(obj_elf_attach_to_group): Use elf_set_group_name.
(set_additional_section_info): Handle linked_to_symbol_name and
stabs code, extracted from..
(adjust_stab_sections): ..here,..
(build_additional_section_info): ..and here.
(elf_adjust_symtab): Don't call build_additional_section_info.
(elf_frob_file): Adjust.
* config/obj-elf.h (elf_set_group_name): Declare.
* config/tc-xtensa.c (cache_literal_section): Use elf_set_group_name.
(xtensa_make_property_section): Likewise.
* testsuite/gas/elf/attach-1.d: Stricter group section matching,
and changed group section ordering.
* testsuite/gas/elf/attach-2.d: Stricter group section matching.
* testsuite/gas/elf/attach-2.s: Provide section bar type.
* testsuite/gas/elf/elf.exp: Run attach-2.
* testsuite/gas/elf/section21.l: Update.
* testsuite/gas/elf/section21.s: Don't check for a parse error.

16 months agoxtensa: move xtensa_make_property_section from bfd to gas
Alan Modra [Sat, 24 Feb 2024 01:00:02 +0000 (11:30 +1030)] 
xtensa: move xtensa_make_property_section from bfd to gas

This function is only used by gas, so move it there.  Necessary for
gas to keep track of group sections as they are created.

PR 25333
bfd/
* elf32-xtensa.c (xtensa_make_property_section): Delete.
(xtensa_property_section_name): Make public.
include/
* elf/xtensa.h (xtensa_make_property_section): Delete.
(xtensa_property_section_name): Declare
gas/
* config/tc-xtensa.c (xtensa_make_property_section): New,
moved from elf32-xtensa.c.

16 months agoMake is_relocatable_executable only affect dynamic section syms
Alan Modra [Wed, 21 Feb 2024 02:41:04 +0000 (13:11 +1030)] 
Make is_relocatable_executable only affect dynamic section syms

I believe the only elflink.c specialties for is_relocatable_executable
needed by tic6x are those directly related to dynamic section symbols.
I might be wrong, the code in record_dynamic_symbol and
record_link_assignment predated the tic6x port, but I think these were
symbian specific hacks.

The shlib-app-1* testsuite changes aren't needed for this patch.  I
started making them when trying to remove is_relocatable_executable
completely, but figure it is worth keeping the more permissive address
matching for some future generic linker change.  The static-app-1*
changes also adjust to the fact that an unneeded "c" no longer appears
in the dynamic symbol table.

bfd/
* elflink.c (bfd_elf_link_record_dynamic_symbol): Don't do anything
special for is_relocatable_executable.
(bfd_elf_record_link_assignment): Likewise.
ld/
* testsuite/ld-tic6x/shlib-app-1.rd: Make some address matching
more permissive.
* testsuite/ld-tic6x/shlib-app-1b.rd: Likewise.
* testsuite/ld-tic6x/shlib-app-1r.rd: Likewise.
* testsuite/ld-tic6x/shlib-app-1rb.rd: Likewise.
* testsuite/ld-tic6x/static-app-1.rd: Likewise, and adjust expected
dynamic symbol table.
* testsuite/ld-tic6x/static-app-1b.rd: Likewise.
* testsuite/ld-tic6x/static-app-1r.rd: Likewise.
* testsuite/ld-tic6x/static-app-1rb.rd: Likewise.

16 months agosim: no rule to make sim/ppc/Makefile.in
Alan Modra [Wed, 21 Feb 2024 04:58:39 +0000 (15:28 +1030)] 
sim: no rule to make sim/ppc/Makefile.in

Seen with --enable-maintainer-mode.
make[3]: *** No rule to make target '.../sim/ppc/Makefile.in', needed
by 'ppc/stamp-pk'.  Stop.

* sim/ppc/local.mk (stamp-pk): Depend on local.mk not
Makefile.in.
* Makefile.in: Regenerate.

Approved-By: Tom Tromey <tom@tromey.com>
16 months agoAutomatic date update in version.in
GDB Administrator [Sat, 24 Feb 2024 00:00:35 +0000 (00:00 +0000)] 
Automatic date update in version.in

16 months agogdb: disable formatting-related flake8 warnings
Simon Marchi [Fri, 23 Feb 2024 20:43:02 +0000 (15:43 -0500)] 
gdb: disable formatting-related flake8 warnings

Tom Tromey pointed out that flake8 gives some warnings related to
formatting, such as:

    python/lib/gdb/prompt.py:149:43: E203 whitespace before ':'

We don't care about those, since all our formatting is handled
automatically by black, so ignore these warnings.

The list of warnings I put comes from:

  https://black.readthedocs.io/en/stable/guides/using_black_with_other_tools.html#flake8

Note that since the setup.cfg file is under the gdb directory, it will
be picked up if you run flake8 from the gdb directory like this:

    binutils-gdb/gdb $ flake8 python

but not if you do:

    binutils-gdb $ flake8 gdb/python

Change-Id: I1e42aefd388b9c3b6c9d52b4f635ac881db4bbc1
Approved-By: Tom Tromey <tom@tromey.com>
16 months agoRemove unused import
Tom Tromey [Fri, 23 Feb 2024 18:42:21 +0000 (11:42 -0700)] 
Remove unused import

flake8 points out that dap/io.py does not use send_gdb.  This patch
removes the unused import.

16 months agoFix throw_winerror_with_name build error on x86-64 Cygwin
Pedro Alves [Tue, 20 Feb 2024 16:31:39 +0000 (16:31 +0000)] 
Fix throw_winerror_with_name build error on x86-64 Cygwin

The GDB build currently fails on x86-64 Cygwin, with:

 src/gdbsupport/errors.cc: In function ‘void throw_winerror_with_name(const char*, ULONGEST)’:
 src/gdbsupport/errors.cc:152:12: error: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘ULONGEST’ {aka ‘long unsigned int’} [-Werror=format=]
   152 |   error (_("%s (error %d): %s"), string, err, strwinerror (err));
       |            ^

Fix this by adding a cast.  While at it, the error codes are really a
DWORD that results from a GetLastError() call, so I think unsigned is
more appropriate.  That is also what strwinerror already does:

    sprintf (buf, "unknown win32 error (%u)", (unsigned) error);

The cast is necessary on MinGW GDB as well, where ULONGEST is unsigned
long long, but for some reason, I don't get a warning there.

Approved-By: Tom Tromey <tom@tromey.com>
Change-Id: I3f5faa779765fd8021abf58bb5f68d556b309d17

16 months agogdb/linux-nat.c: Add "Accessing inferior memory" section
Pedro Alves [Wed, 21 Feb 2024 19:05:39 +0000 (19:05 +0000)] 
gdb/linux-nat.c: Add "Accessing inferior memory" section

This commit adds a new "Accessing inferior memory" comment section to
gdb/linux-nat.c that explains why we prefer /proc/pid/mem over
alternatives.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30453

Change-Id: I575b21ed697a85f3ff4c0ec58c04812db5005b76

16 months agoDrop special way of getting inferior context after a Cygwin signal
Jon Turney [Tue, 15 Sep 2020 15:38:06 +0000 (16:38 +0100)] 
Drop special way of getting inferior context after a Cygwin signal

Simplify Cygwin signal handling by dropping the special way of getting
inferior context after a Cygwin signal.

I think the reason this existed was because previously we were not
able to unwind through the alternate stack used by _sigfe frames, so
without the hint of the "user" code IP, the backtrace from a signal
was unusable.

Now we can unwind through _sigfe frames, drop all this complexity.

(Restoring this specially obtained context to the inferior (as the
code currently does) skips over the actual signal delivery and
handling.  Cygwin has carried for a long time a patch which clears the
ContextFlags in the signal context, so we never attempt to restore it
to the inferior, but that interfers with gdb's ability to modify that
context e.g. if it decides it wants to turn on FLAG_TRACE_BIT.)

Change-Id: I214edd5a99fd17c1a31ad18138d4a6cc420225e3

16 months agoTeach gdb how to unwind cygwin _sigbe and sigdelayed frames
Jon Turney [Tue, 12 Jan 2016 22:49:09 +0000 (22:49 +0000)] 
Teach gdb how to unwind cygwin _sigbe and sigdelayed frames

The majority of functions in the cygwin DLL are wrapped by routines
which use an an alternate stack to return via a signal handler if a
signal occured while inside the function. (See [1],[2])

At present, these frames cannot be correctly unwound by gdb.  There
doesn't seem to currently be a way to correctly describe these frames
using DWARF CFI.

So instead, write a custom unwinder for _sigbe and sigdelayed frames,
which gets the return address from the alternate stack.

The offset of tls::stackptr from TIB.stacktop is determined by analyzing
the code in _sigbe or sigdelayed.

This can backtrace from _sigbe and from a sighandler through sigdelayed.

Implemented for amd64 and i386

Issues:

1. We should detect if we are in the wrapper after the return address
has been popped off the alternate stack, and if so, fetch the return
address from the register it's been popped into.

2. If there are multiple _sigbe or sigdelayed stack frames to be
unwound, this only unwinds the first one correctly, because we don't
unwind the value of the alternate stack pointer itself.

This is no worse than currently, when we can't even unwind one of
these frame correctly, but isn't quite correct.

I guess this could be handled by defining a pseudo-register to track
its value as we unwind the stack.

[1] https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=winsup/cygwin/gendef
[2] https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=winsup/cygwin/how-signals-work.txt

Co-Authored-By: Pedro Alves <pedro@palves.net>
Change-Id: I4a0d02c1b85d0aadaab2de3abd584eb4bda5b5cc

16 months agox86: rename vec_encoding and vex_encoding_*
Jan Beulich [Fri, 23 Feb 2024 11:00:43 +0000 (12:00 +0100)] 
x86: rename vec_encoding and vex_encoding_*

Even with just VEX these weren't limited to vector insns. With APX the
set of non-vector ones covered has greatly increased. Drop the vec_
prefix. Also drop the vex_ ones off of the enumerators, as they weren't
appropriate anyway: Should have been vec_ then, too.

16 months agox86: document -moperand-check=
Jan Beulich [Fri, 23 Feb 2024 10:59:42 +0000 (11:59 +0100)] 
x86: document -moperand-check=

PR gas/31388
Like other command line options this should be mentioned in
documentation as well, not just in "as --help" output.

16 months agox86: also permit YMM/ZMM use in CFI directives
Jan Beulich [Fri, 23 Feb 2024 10:59:09 +0000 (11:59 +0100)] 
x86: also permit YMM/ZMM use in CFI directives

Next to code using %ymm<N> or %zmm<N> it is more natural to have .cfi_*
directives also reference those, not the corresponding %xmm<N>. Accept
their names as kind of aliases, i.e. resolving to the same numbers.

While extending the respective 64-bit testcase, also add %bnd<N> there
(should have happened right with 633789901c83 ["x86-64: Dwarf2 register
numbers for %bnd<N>"], sorry), requiring binutils/dwarf.c to be adjusted
accordingly as well.

16 months agox86/APX: INV{EPT,PCID,VPID} are WIG
Jan Beulich [Fri, 23 Feb 2024 10:58:15 +0000 (11:58 +0100)] 
x86/APX: INV{EPT,PCID,VPID} are WIG

While various other entries in version 003 of the spec aren't quite as
explicit (due to simply leaving the respective field blank), all three
have a clear IGNORED there. IOW they ought to be emitted with EVEX.W=0
by default (and respect -mevexwig=).

16 months agoLoongArch: gas: Try to avoid R_LARCH_ALIGN associate with a symbol
mengqinggang [Mon, 5 Feb 2024 08:16:52 +0000 (16:16 +0800)] 
LoongArch: gas: Try to avoid R_LARCH_ALIGN associate with a symbol

The R_LARCH_ALIGN need to associated with a symbol if .align has the first
and third expressions. If R_LARCH_ALIGN associate with a symbol, the addend can
represent the first and third expression of .align.

For '.align 3', the addend of R_LARCH_ALIGN only need to represent the alignment
and R_LARCH_ALIGN not need to associate with a symbol.

For '.align x, , y', R_LARCH_ALIGN need to associate with a symbol if 0 < y <
2^x - 4.

16 months agogdb: Add XMM16-XMM31 and K0-K1 DWARF register number mapping
H.J. Lu [Wed, 14 Feb 2024 15:40:12 +0000 (07:40 -0800)] 
gdb: Add XMM16-XMM31 and K0-K1 DWARF register number mapping

Add XMM16-XMM31 and K0-K1 DWARF register number mapping to
amd64_dwarf_regmap.

Reviewed-By: Felix Willgerodt <felix.willgerodt@intel.com>
Approved-By: John Baldwin <jhb@FreeBSD.org>
16 months agoAutomatic date update in version.in
GDB Administrator [Fri, 23 Feb 2024 00:00:37 +0000 (00:00 +0000)] 
Automatic date update in version.in

16 months agoUse bool in dynamic type code
Tom Tromey [Thu, 1 Feb 2024 14:53:34 +0000 (07:53 -0700)] 
Use bool in dynamic type code

This changes some of the dynamic-type-related code to use bool rather
than int.

Regression tested on x86-64 Fedora 38.

Approved-By: John Baldwin <jhb@FreeBSD.org>
16 months ago[gdb/testsuite] Fix license text in gdb.reverse/map-to-same-line.{c,exp}
Tom de Vries [Thu, 22 Feb 2024 11:09:14 +0000 (12:09 +0100)] 
[gdb/testsuite] Fix license text in gdb.reverse/map-to-same-line.{c,exp}

I noticed in gdb.reverse/map-to-same-line.{c,exp} that the license urls are
using some kind of indirection via urldefense.proofpoint.com.

Fix this by removing this indirection.

Tested on x86_64-linux.

PR testsuite/31358
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31358

16 months ago[gdb/dap] Fix race between dap exit and gdb exit
Tom de Vries [Thu, 22 Feb 2024 10:35:26 +0000 (11:35 +0100)] 
[gdb/dap] Fix race between dap exit and gdb exit

When DAP shuts down due to an EOF event, there's a race between:
- gdb's main thread handling a SIGHUP, and
- the DAP main thread exiting.

Fix this by waiting for DAP's main thread exit during the gdb_exiting event.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
PR dap/31380
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31380

16 months ago[gdb/dap] Fix race between dap startup and dap log file
Tom de Vries [Thu, 22 Feb 2024 10:35:26 +0000 (11:35 +0100)] 
[gdb/dap] Fix race between dap startup and dap log file

In dap_gdb_start we do:
...
        append GDBFLAGS " -iex \"set debug dap-log-file $logfile\" -q -i=dap"
...

While the dap log file setting comes before the dap interpreter setting,
the order is the other way around:
- first, the dap interpreter is started
- second, the -iex commands are executed and the log file is initialized.

Consequently, there's a race between dap interpreter startup and dap log file
initialization.

This cannot be fixed by using -eiex instead.  Before the interpreter is
started, the "set debug dap-log-file" command is not yet registered.

Fix this by postponing the start of the DAP server until GDB has processed all
command files.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
PR dap/31386
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31386

16 months ago[gdb/dap] Factor out thread_log
Tom de Vries [Thu, 22 Feb 2024 10:35:26 +0000 (11:35 +0100)] 
[gdb/dap] Factor out thread_log

In thread_wrapper I used a style where a message is prefixed with the thread
name.

Factor this out into a new function thread_log.

Also treat the GDB main thread special, because it's usual name is MainThread:
...
MainThread: <msg>
...
which is the default name assigned by python, so instead use the more
explicit:
...
GDB main: <msg>
...

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
16 months agoAutomatic date update in version.in
GDB Administrator [Thu, 22 Feb 2024 00:00:37 +0000 (00:00 +0000)] 
Automatic date update in version.in

16 months agoDon't allow multiple request registrations in DAP
Tom Tromey [Wed, 7 Feb 2024 19:46:22 +0000 (12:46 -0700)] 
Don't allow multiple request registrations in DAP

This changes the DAP code to check that a given request or capability
is only registered a single time.  This is just a precaution against
accidentally introducing a second definition of a request somewhere.

16 months agoLeak in i386_elf_section_change_hook
Alan Modra [Wed, 21 Feb 2024 21:11:46 +0000 (07:41 +1030)] 
Leak in i386_elf_section_change_hook

notes_alloc is perfect for assorted memory you can't free easily
and/or would rather leave freeing until just before exit.

* config/tc-i386.c (i386_elf_section_change_hook): Use notes_alloc.

16 months agogdbsupport: assume that compiler supports std::{is_trivially_constructible,is_trivial...
Simon Marchi [Wed, 21 Feb 2024 16:46:52 +0000 (11:46 -0500)] 
gdbsupport: assume that compiler supports std::{is_trivially_constructible,is_trivially_copyable}

This code was there to support g++ 4, which didn't support
std::is_trivially_constructible and std::is_trivially_copyable.  Since
we now require g++ >= 9, I think it's fair to assume that GDB will
always be compiled with a compiler that supports those.

Change-Id: Ie7c1649139a2f48bf662cac92d7f3e38fb1f1ba1

16 months agogdb: remove some GCC version checks
Simon Marchi [Wed, 21 Feb 2024 16:46:51 +0000 (11:46 -0500)] 
gdb: remove some GCC version checks

Since we now require C++17, and therefore gcc >= 9, it's no longer
useful to have gcc version checks for older gcc version.

Change-Id: I3a87baa03c475f2b847b422b16b69c5ff7215b54
Reviewed-by: Kevin Buettner <kevinb@redhat.com>
Approved-By: Pedro Alves <pedro@palves.net>
16 months ago[gdb/testsuite] Fix error handling in _dap_read_json
Tom de Vries [Wed, 21 Feb 2024 13:25:31 +0000 (14:25 +0100)] 
[gdb/testsuite] Fix error handling in _dap_read_json

In _dap_read_json we have a gdb_expect with clauses that generate errors:
...
        timeout {
            error "timeout reading json header"
        }
        eof {
            error "eof reading json header"
        }
...

Proc gdb_expect uses dejagnu's remote_expect, which has some peculiar
semantics related to errors:
...
 # remote_expect works basically the same as standard expect, but it
 # also takes care of getting the file descriptor from the specified
 # host and also calling the timeout/eof/default section if there is an
 # error on the expect call.
.....

When a timeout triggers, it generates a timeout error, which is reported by
gdb_expect, after which it runs the timeout/eof/default clauses, which
generates an eof error, which is reported by runtest.

I think the intention here is to generate just a one error, a timeout error.

Fix this by postponing generating the error until after gdb_expect.

Tested on x86_64-linux, by:
- running all the DAP test-cases and observing no regressions, and
- modifying the gdb.dap/eof.exp test-case to trigger a timeout error, and
  observing only a timeout error.

PR testsuite/31382
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31382