]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
15 months agogdbserver: convert have_ptrace_getregset to a tribool
Andrew Burgess [Thu, 25 Jan 2024 14:10:42 +0000 (14:10 +0000)] 
gdbserver: convert have_ptrace_getregset to a tribool

Convert the have_ptrace_getregset global within gdbserver to a
tribool.  This brings the flag into alignment with the corresponding
flag in GDB.

The gdbserver have_ptrace_getregset variable is already used as a
tribool, it just doesn't have the tribool type.

In a future commit I plan to share more code between GDB and
gdbserver, and having this variable be the same type in both code
bases will make the sharing much easier.

There should be no user visible changes after this commit.

Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months ago[gdb/testsuite] Fix gdb.ada/tagged-lookup.exp with gcc <= 12
Tom de Vries [Mon, 25 Mar 2024 14:28:35 +0000 (15:28 +0100)] 
[gdb/testsuite] Fix gdb.ada/tagged-lookup.exp with gcc <= 12

With gcc 13, test-case gdb.ada/tagged-lookup.exp passes for me, but with gcc
12, I get:
...
(gdb) set debug symtab-create 1^M
(gdb) print *the_local_var^M
  ...
$1 = (n => 2)^M
(gdb) FAIL: gdb.ada/tagged-lookup.exp: only one CU expanded
...

The problem is that this fails:
...
    -re -wrap ".* = \\\(n => $decimal\\\)" {
if {$found_pck + $found_pck2 == 1} {
    pass $gdb_test_name
} else {
    fail $gdb_test_name
}
...
because $found_pck == 0 and $found_pck2 == 0.

Indeed, with gcc 13 we have:
...
$ grep "start_subfile: name = .*/tagged-lookup/" gdb.log | sed 's%.*/%%'
b~foo.adb
b~foo.adb
b~foo.adb
b~foo.ads
pck2.adb
pck2.adb
pck2.ads
pck2.adb
pck2.ads
...
and with gcc 12:
...
$ grep "start_subfile: name = .*/tagged-lookup/" gdb.log | sed 's%.*/%%'
b~foo.adb
b~foo.adb
b~foo.adb
b~foo.ads
...

Fix this by checking for "$found_pck + $found_pck2 <= 1" instead.

Tested on x86_64-linux.

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

15 months ago[gdb/testsuite] Fix tdlabel_re references
Tom de Vries [Mon, 25 Mar 2024 08:55:25 +0000 (09:55 +0100)] 
[gdb/testsuite] Fix tdlabel_re references

Commit 467a34bb9e6 ("gdb tests: Allow for "LWP" or "process" in thread IDs
from info threads") introduces a new global variable tdlabel_re, but fails to
indicate it's global when used in procs in four test-cases.

Fix this by adding "global tdlabel_re".

Tested on aarch64-linux.

15 months agoAutomatic date update in version.in
GDB Administrator [Mon, 25 Mar 2024 00:00:23 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agoAutomatic date update in version.in
GDB Administrator [Sun, 24 Mar 2024 00:00:33 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agogdb tests: Allow for "LWP" or "process" in thread IDs from info threads
John Baldwin [Sat, 23 Mar 2024 00:29:47 +0000 (17:29 -0700)] 
gdb tests: Allow for "LWP" or "process" in thread IDs from info threads

Several tests assume that the first word after a thread ID in 'info
threads' output is "Thread".  However, several targets use "LWP"
instead such as the FreeBSD and NetBSD native targets.  The Linux
native target also uses "LWP" if libthread_db is not being used.
Targets that do not support threads use "process" as the first word
via normal_pid_to_str.

Add a tdlabel_re global variable as a regular-expression for a thread
label in `info threads' that matches either "process", "Thread", or
"LWP".

Some other tests in the tree don't require a specific word, and
some targets may use other first words (e.g. OpenBSD uses "thread"
and Ravenscar threads use "Ravenscar Thread").

15 months agoAutomatic date update in version.in
GDB Administrator [Sat, 23 Mar 2024 00:00:33 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agowindows-nat: Use gdb_realpath
Pedro Alves [Fri, 22 Mar 2024 19:46:59 +0000 (19:46 +0000)] 
windows-nat: Use gdb_realpath

Use gdb_realpath instead of realpath in windows-nat.c:windows_make_so,
so that we don't have to manually call free.

Approved-By: John Baldwin <jhb@FreeBSD.org>
Change-Id: Id3cda7e177ac984c9a5f7c23f354e72bd561edff

15 months agowindows-nat: Remove SO_NAME_MAX_PATH_SIZE limit
Pedro Alves [Fri, 22 Mar 2024 19:46:59 +0000 (19:46 +0000)] 
windows-nat: Remove SO_NAME_MAX_PATH_SIZE limit

There is no need to limit shared library path sizes to
SO_NAME_MAX_PATH_SIZE nowadays.  windows_solib::name and
windows_solib::original_name are std::strings nowadays, and so are
solib::so_name and solib::so_original_name in the core solib code.

This commit reworks the code to remove that limit.  This also fixes a
leak where we were not releasing 'rname' in the realpath branch if the
'rname' string was larger than SO_NAME_MAX_PATH_SIZE.

Note: I tested the cygwin_conv_path with a manual hack to force that
path, and then stepping through the code.  You only get to that path
if Windows doesn't report an absolute path for ntdll.dll, and on my
machine (running Windows 10), it always does.

Approved-By: John Baldwin <jhb@FreeBSD.org>
Change-Id: I79e9862d5a7646eebfef7ab5b05b96318a7ca0c5

15 months agoSimplify windows-nat.c:windows_make_so #ifdefery
Pedro Alves [Fri, 22 Mar 2024 19:46:59 +0000 (19:46 +0000)] 
Simplify windows-nat.c:windows_make_so #ifdefery

There are two separate #ifndef __CYGWIN__/#else/#endif sections in the
windows_make_so function with 3 lines of shared code separating them.
I find this makes the code harder to understand than necessary.
AFAICS, there is no reason those three shared lines need to be after
the first #ifdef block.  There is no early return, nor are 'load_addr'
nor 'name' modified.

This commit moves that shared code to the top of the function, and
then combines the two #ifndef sections.

Approved-By: John Baldwin <jhb@FreeBSD.org>
Change-Id: If2678b52836b1c3134a5e9f9fdaee74448d8b7bc

15 months agoRemove SO_NAME_MAX_PATH_SIZE limit from core solib code
Pedro Alves [Fri, 22 Mar 2024 19:46:58 +0000 (19:46 +0000)] 
Remove SO_NAME_MAX_PATH_SIZE limit from core solib code

solib_map_sections errors out if the library file name is longer than
SO_NAME_MAX_PATH_SIZE.

solib::so_name and solib::so_original_name used to be arrays of
SO_NAME_MAX_PATH_SIZE size, so that check made sense then.

However, since commit 98107b0b17ac ("gdb: make
so_list::{so_original_name,so_name} std::strings") those fields are of
std::string type, so there's really no need for the limit.

This commit simply removes the length limit check.

Approved-By: John Baldwin <jhb@FreeBSD.org>
Change-Id: I2ec676b231cd18ae900c61c5caea461f47e989e6

15 months agoUse std::string for disassembler options
Tom Tromey [Thu, 21 Mar 2024 17:15:56 +0000 (11:15 -0600)] 
Use std::string for disassembler options

I noticed that the disassembler_options code uses manual memory
management.  It seemed simpler to replace this with std::string.

Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agoRemove some unnecessary casts
Tom Tromey [Thu, 21 Mar 2024 17:04:25 +0000 (11:04 -0600)] 
Remove some unnecessary casts

I found a few unnecessary casts when calling
set_gdbarch_disassembler_options_implicit.

Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agoConstify get_disassembler_options
Tom Tromey [Thu, 21 Mar 2024 17:02:10 +0000 (11:02 -0600)] 
Constify get_disassembler_options

This changes get_disassembler_options to return a const char *.

Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agoRevert "Pass GUILE down to subdirectories"
Tom Tromey [Thu, 21 Mar 2024 23:12:23 +0000 (17:12 -0600)] 
Revert "Pass GUILE down to subdirectories"

This reverts commit b7e5a29602143b53267efcd9c8d5ecc78cd5a62f.

This patch caused problems for some users when building gdb, because
it would cause 'guild' to be invoked with the wrong versin of guile.
On the whole it seems simpler to just back this out.

I'm checking this in to the binutils-gdb repository in the interest of
fixing the build for Andrew.  No one has responded to the identical
patch sent to gcc-patches, but I will ping it there.

* Makefile.in: Rebuild.
* Makefile.tpl (BASE_EXPORTS): Remove GUILE.
(GUILE): Remove.
* Makefile.def (flags_to_pass): Remove GUILE.

15 months agogdb: LoongArch: Clean up loongarch_iterate_over_regset_sections()
Tiezhu Yang [Fri, 22 Mar 2024 03:35:02 +0000 (11:35 +0800)] 
gdb: LoongArch: Clean up loongarch_iterate_over_regset_sections()

Define a new variable gpsize as gprsize * LOONGARCH_LINUX_NUM_GREGSET
to replace the related code in the first cb(), and also make use of
tabs and spaces in indentation to force the proper alignment of code,
then remove the empty line at the end of the function.

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
15 months agoTeach GDB to generate sparse core files (PR corefiles/31494)
Pedro Alves [Fri, 22 Mar 2024 12:31:29 +0000 (12:31 +0000)] 
Teach GDB to generate sparse core files (PR corefiles/31494)

This commit teaches GDB's gcore command to generate sparse core files
(if supported by the filesystem).

To create a sparse file, all you have to do is skip writing zeros to
the file, instead lseek'ing-ahead over them.

The sparse logic is applied when writing the memory sections, as
that's where the bulk of the data and the zeros are.

The commit also tweaks gdb.base/bigcore.exp to make it exercise
gdb-generated cores in addition to kernel-generated cores.  We
couldn't do that before, because GDB's gcore on that test's program
would generate a multi-GB non-sparse core (16GB on my system).

After this commit, gdb.base/bigcore.exp generates, when testing with
GDB's gcore, a much smaller core file, roughly in line with what the
kernel produces:

 real sizes:

 $ du --hu testsuite/outputs/gdb.base/bigcore/bigcore.corefile.*
 2.2M    testsuite/outputs/gdb.base/bigcore/bigcore.corefile.gdb
 2.0M    testsuite/outputs/gdb.base/bigcore/bigcore.corefile.kernel

 apparent sizes:

 $ du --hu --apparent-size testsuite/outputs/gdb.base/bigcore/bigcore.corefile.*
 16G     testsuite/outputs/gdb.base/bigcore/bigcore.corefile.gdb
 16G     testsuite/outputs/gdb.base/bigcore/bigcore.corefile.kernel

Time to generate the core also goes down significantly.  On my machine, I get:

  when writing to an SSD, from 21.0s, down to 8.0s
  when writing to an HDD, from 31.0s, down to 8.5s

The changes to gdb.base/bigcore.exp are smaller than they look at
first sight.  It's basically mostly refactoring -- moving most of the
code to a new procedure which takes as argument who should dump the
core, and then calling the procedure twice.  I purposely did not
modernize any of the refactored code in this patch.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31494
Reviewed-By: Lancelot Six <lancelot.six@amd.com>
Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Change-Id: I2554a6a4a72d8c199ce31f176e0ead0c0c76cff1

15 months agox86: fix Solaris testsuite failures
Jan Beulich [Fri, 22 Mar 2024 08:08:51 +0000 (09:08 +0100)] 
x86: fix Solaris testsuite failures

For one 0afc614c9938 ("x86: Warn .insn instruction with length > 15
bytes") introduced a .insn use involving a slash; such tests need to
have --divide passed to gas.

And then 5bc71c2a6b8e ("x86-64: Add R_X86_64_CODE_6_GOTTPOFF") broke
BFD_RELOC_X86_64_GOTTPOFF conversion to R_X86_64_CODE_4_GOTTPOFF, by
adding respective code in a section guarded by
generate_relax_relocations (the case of that not being required there
was limited to 32-bit object files). Re-arrange that block of code to
check generate_relax_relocations later.

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

15 months agogdbserver: Clear X86_XSTATE_MPX bits in xcr0 on x32
H.J. Lu [Wed, 20 Mar 2024 11:13:18 +0000 (04:13 -0700)] 
gdbserver: Clear X86_XSTATE_MPX bits in xcr0 on x32

Since MPX isn't available for x32, we should clear X86_XSTATE_MPX bits
on x32.

PR server/31511
* linux-x86-low.cc (x86_linux_read_description): Clear
X86_XSTATE_MPX bits in xcr0 on x32.
Reviewed-by: Felix Willgerodt <felix.willgerodt@intel.com>
15 months agoImplement Ada 2022 delta aggregates
Tom Tromey [Thu, 29 Feb 2024 20:54:19 +0000 (13:54 -0700)] 
Implement Ada 2022 delta aggregates

Ada 2022 includes a "delta aggregates" feature that can sometimes
simplify aggregate creation.  This patch implements this feature for
GDB.

15 months agoRequire trivial destructor in allocate_on_obstack
Tom Tromey [Mon, 26 Feb 2024 17:19:07 +0000 (10:19 -0700)] 
Require trivial destructor in allocate_on_obstack

This patch makes allocate_on_obstack a little bit safer, by enforcing
the rule that objects allocated on an obstack must have a trivial
destructor.

The static assert is done in a method -- doing it inside the class
itself won't work because the class is incomplete at that point.

15 months agoDon't use virtual destructor in addrmap
Tom Tromey [Mon, 26 Feb 2024 18:39:49 +0000 (11:39 -0700)] 
Don't use virtual destructor in addrmap

The addrmap polymorphism is sort of "phony" in that there isn't really
code in the tree that can be presented with either type.  I haven't
tried to fix this (though perhaps I may); but meanwhile it's handy for
the next patch if addrmap_fixed has a trivial destructor.  This patch
achieves this by making the addrmap destructor non-virtual, and also
making it protected so that objects of any of these types cannot be
destroyed when only the base class is known.

15 months agoUse addrmap_fixed in a few spots
Tom Tromey [Mon, 26 Feb 2024 17:46:31 +0000 (10:46 -0700)] 
Use addrmap_fixed in a few spots

There are a few spots in the tree that use 'addrmap' where only an
addrmap_fixed will ever really be seen.  This patch changes this code
to use the more specific type.

15 months agosim/erc32: Rename EVENT_MAX -> MAX_EVENTS
Orgad Shaneh [Sun, 3 Mar 2024 10:22:14 +0000 (12:22 +0200)] 
sim/erc32: Rename EVENT_MAX -> MAX_EVENTS

EVENT_MAX is defined as 0x7FFFFFFF (INT_MAX) in winuser.h, so when
building on Windows, the value is overridden and compilation fails
because the array size of evbuf is too large.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28476
Approved-By: Tom Tromey <tom@tromey.com>
15 months agogdb: syscalls: Add some tips for LoongArch xml files
Tiezhu Yang [Thu, 21 Mar 2024 01:55:10 +0000 (09:55 +0800)] 
gdb: syscalls: Add some tips for LoongArch xml files

In commit a08dc2aa004b (gdb: syscalls: Add loongarch-linux.xml.in),
it needs special handling when generating xml file. This should at
least be mentioned in the file comment rather than git log to help
the next person who regenerates this file understand what needs to
be done, suggested by Pedro Alves, thank you.

At the beginning, I only added the tips in loongarch-linux.xml.in,
after executing the command "make" to generate loongarch-linux.xml
from loongarch-linux.xml.in, it generates the same tips in the file
loongarch-linux.xml automatically, so update loongarch-linux.xml.in
and loongarch-linux.xml together.

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-by: Pedro Alves <pedro@palves.net>
15 months agogdb: LoongArch: Silence warning about core file of lsx and lasx
Hui Li [Thu, 21 Mar 2024 01:41:30 +0000 (09:41 +0800)] 
gdb: LoongArch: Silence warning about core file of lsx and lasx

In loongarch_iterate_over_regset_sections(), the second and third arguments
of the iterate_over_regset_sections_cb callback function should be the regset
size which is regsize * regnum. Otherwise when execute:

make check-gdb TESTS="gdb.base/corefile.exp"

there exists the following failed log:

  (gdb) core-file /home/fedora/community/gdb/build/gdb/testsuite/outputs/gdb.base/corefile/corefile.core
  [New LWP 531099]
  warning: Unexpected size of section `.reg-loongarch-lsx/531099' in core file.
  warning: Unexpected size of section `.reg-loongarch-lasx/531099' in core file.
  Core was generated by `/home/fedora/community/gdb/build/gdb/testsuite/outputs/gdb.base/corefile/corefile'.
  Program terminated with signal SIGABRT, Aborted.
  warning: Unexpected size of section `.reg-loongarch-lsx/531099' in core file.
  warning: Unexpected size of section `.reg-loongarch-lasx/531099' in core file.
  #0  0x00007ffff3081600 in __pthread_kill_implementation.constprop.0 () from /lib64/libc.so.6
  (gdb) FAIL: gdb.base/corefile.exp: core-file warning-free

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
15 months agoNew Romanian translation for gas sub-directory
Nick Clifton [Thu, 21 Mar 2024 08:23:19 +0000 (08:23 +0000)] 
New Romanian translation for gas sub-directory

15 months agoAutomatic date update in version.in
GDB Administrator [Thu, 21 Mar 2024 00:01:00 +0000 (00:01 +0000)] 
Automatic date update in version.in

15 months ago.pre-commit-config.yaml: bump black hook to 24.3.0
Simon Marchi [Wed, 20 Mar 2024 18:44:16 +0000 (14:44 -0400)] 
.pre-commit-config.yaml: bump black hook to 24.3.0

Running `pre-commit autoupdate` showed that there is a new version of
the black hook for v24.3.0.  Update it.

ChangeLog:

* .pre-commit-config.yaml: Bump black hook to 24.3.0

Change-Id: I5ec7d2edf99cd15f6525281a43aed9ff481ee9ee

15 months ago[gdb/testsuite] Fix gdb.server/server-connect.exp for missing ipv6
Tom de Vries [Wed, 20 Mar 2024 18:31:24 +0000 (19:31 +0100)] 
[gdb/testsuite] Fix gdb.server/server-connect.exp for missing ipv6

On a system without ipv6 support enabled, when running test-case
gdb.server/server-connect.exp, it takes about 4 minutes, and I get:
...
builtin_spawn gdbserver --once ::1:2347 server-connect^M
Can't open socket: Address family not supported by protocol.^M
Exiting^M
PASS: gdb.server/server-connect.exp: tcp6: start gdbserver
target remote tcp6:::1:2347^M
A program is being debugged already.  Kill it? (y or n) y^M
could not connect: Address family not supported by protocol.^M
(gdb) FAIL: gdb.server/server-connect.exp: tcp6: connect to gdbserver using tcp6:::1
...

Fix this by:
- recognizing the error message in gdbserver_start, and returning an empty list
  to signal unsupported, and
- handling the unsupported response in the test-case.

This brings testing time down to 2 seconds, and gets me:
...
UNSUPPORTED: gdb.server/server-connect.exp: tcp6: start gdbserver
UNSUPPORTED: gdb.server/server-connect.exp: tcp6-with-brackets: start gdbserver
UNSUPPORTED: gdb.server/server-connect.exp: udp6: start gdbserver
UNSUPPORTED: gdb.server/server-connect.exp: udp6-with-brackets: start gdbserver
...

Tested on aarch64-linux.

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

15 months ago[gdb/testsuite] Handle core without build-id in gdb.base/corefile-buildid.exp
Tom de Vries [Wed, 20 Mar 2024 18:29:18 +0000 (19:29 +0100)] 
[gdb/testsuite] Handle core without build-id in gdb.base/corefile-buildid.exp

On aarch64-linux (debian 12), when running test-case gdb.base/corefile-buildid.exp, I get:
...
expecting exec file "debugdir-exec/.build-id/ec/f10ec5d39648774f8c35d3cf757c8db52f5163"
info files^M
Local core dump file:^M
        `build-exec/corefile-buildid.core', file type elf64-littleaarch64.^M
        0x0000aaaac1d70000 - 0x0000aaaac1d71000 is load1^M
...
        0x0000ffffffa8b000 - 0x0000ffffffaac000 is load16^M
(gdb) FAIL: gdb.base/corefile-buildid.exp: exec: info files
...

The problem is that the test-case expect the build-id to be available in the
core file, while it isn't.

Fix this by detecting that the build-id isn't available in the core file using eu-readelf, as in
gdb.base/coredump-filter-build-id.exp.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
15 months ago[gdb/testsuite] Add PR gdb/26967 KFAIL in two more test-cases
Tom de Vries [Wed, 20 Mar 2024 18:23:48 +0000 (19:23 +0100)] 
[gdb/testsuite] Add PR gdb/26967 KFAIL in two more test-cases

On aarch64-linux (debian 12), when running test-case
gdb.base/longjmp-until-in-main.exp, I run into:
...
(gdb) until 33^M
warning: Breakpoint address adjusted from 0x70f727c678928489 to 0xfff727c678928489.^M
Warning:^M
Cannot insert breakpoint 0.^M
Cannot access memory at address 0xfff727c678928489^M
^M
0x0000fffff7e3a580 in siglongjmp () from /lib/aarch64-linux-gnu/libc.so.6^M
(gdb) FAIL: gdb.base/longjmp-until-in-main.exp: until $line, in main
...

This is PR gdb/26967: no longjmp probe is available:
...
(gdb) info probes stap libc ^longjmp$^M
No probes matched.^M
...
and glibc applies pointer mangling which makes it fairly difficult for gdb to
get the longjmp target.

There's a KFAIL for this in test-case gdb.base/longjmp.exp, added in commit
b5e7cd5cd3d ("[gdb/testsuite] Add KFAILs in gdb.base/longjmp.exp").

Factor out new proc have_longjmp_probe, and use it to add similar KFAIL in
this and one more test-case.

Tested on aarch64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
15 months agoFix casting in-memory values of primitive types to const reference
Hannes Domani [Wed, 20 Mar 2024 17:23:40 +0000 (18:23 +0100)] 
Fix casting in-memory values of primitive types to const reference

It's currently not possible to cast an in-memory value of a primitive
type to const reference:
```
(gdb) p Q.id
$1 = 42
(gdb) p (int&)Q.id
$2 = (int &) @0x22fd0c: 42
(gdb) p (const int&)Q.id
Attempt to take address of value not located in memory.
```

And if in a function call an argument needs the same kind of casting,
it also doesn't work:
```
(gdb) l f3
39      int f3(const int &i)
40      {
41        return i;
42      }
(gdb) p f3(Q.id)
Attempt to take address of value not located in memory.
```

It's because when the constness of the type changes in a call to
value_cast, a new not_lval value is allocated, which doesn't exist
in the target memory.

Fixed by ignoring const/volatile/restrict qualifications in
value_cast when comparing cast type to original type, so the new
value will point to the same location as the original value:
```
(gdb) p (int&)i
$2 = (int &) @0x39f72c: 1
(gdb) p (const int&)i
$3 = (const int &) @0x39f72c: 1
(gdb) p f3(Q.id)
$4 = 42
```

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=19423
Approved-By: Tom Tromey <tom@tromey.com>
15 months agoFix reinterpret_cast for classes with multiple inheritance
Hannes Domani [Wed, 20 Mar 2024 17:02:06 +0000 (18:02 +0100)] 
Fix reinterpret_cast for classes with multiple inheritance

Currently a reinterpret_cast may change the pointer value if
multiple inheritance is involved:
```
(gdb) p r
$1 = (Right *) 0x22f75c
(gdb) p reinterpret_cast<LeftRight*>(r)
$2 = (LeftRight *) 0x22f758
```

It's because value_cast is called in this case, which automatically
does up- and downcasting.

Fixed by simply using the target pointer type in a copy of the
original value:
```
(gdb) p r
$1 = (Right *) 0x3bf87c
(gdb) p reinterpret_cast<LeftRight*>(r)
$2 = (LeftRight *) 0x3bf87c
```

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=18861
Approved-By: Tom Tromey <tom@tromey.com>
15 months agoAdd .pre-commit-config.yaml
Simon Marchi [Mon, 11 Mar 2024 15:09:43 +0000 (11:09 -0400)] 
Add .pre-commit-config.yaml

Add a pre-commit [1] config file, with a single hook to run black on the
gdb directory whenever a Python file is modified.  We can always add
more hooks if we find some that are useful.

Using pre-commit to run hooks is opt-in, as in it's not mandatory at all
for development, but it can be useful to run some checks that are easy
to forget (like running black).  The hooks run locally on the
developer's machine when doing `git commit` (although they can also be
configured to run at other stages of the git workflow).

Follow these instructions to install the hooks in your local development
git repository:

 - Install pre-commit the way you prefer.  It can be using your OS
   package manager if it has a recent enough version, or using `pip
   install pre-commit`.
 - Go to the binutils-gdb repository and run `pre-commit install`.

This installs a git hook at `.git/hooks/pre-commit`.

Now, whenever you modify and try to commit a Python file, pre-commit
will run black on it.  For instance, if I try to insert something
misformatted, I get this when doing `git commit`:

    $ git commit
    black....................................................................Failed
    - hook id: black
    - files were modified by this hook

    reformatted gdb/python/lib/gdb/dap/breakpoint.py

    All done! ✨ 🍰 ✨
    1 file reformatted.

At this point, black has already reformatted the files in place, so the
changes that fix the formatting are ready to add and commit.  black is
only ran on files modified in the commit.

The hook defines a black version, which is downloaded at `pre-commit
install` time.  pre-commit manages its own env at
`$HOME/.cache/pre-commit/<some-hash>`, so it won't use the version of
black you have installed already.  This may help ensure that
contributors use the right black version.

The procedure when there is a new version of black (or a new version of
any hook we might be using in the future) is:

 - Modify .pre-commit-config.yaml to change the version number, push to
   the upstream repo.
 - Have contributors run `pre-commit autoupdate` to make their local
   pre-commit installation update the hooks.

It is possible to have pre-commit skip some hooks if needed [2].

I will add these instructions to the wiki if this patch gets merged, so
they are easy to find.  We could perhaps think of having a
gdb/CONTRIBUTING document of some sort checked in the repo with that
kind of information.

I have not used pre-commit in a real project before, but have heard good
things from it.  If we want to give it a try before pushing it to the
repo, some volunteers can copy the .pre-commit-config.yaml file locally
and try it for some time.  However, pushing the file upstream is not
going to impact anybody who doesn't care about it, so I'd say it's
relatively low-risk to push it right now.

[1] https://pre-commit.com
[2] https://pre-commit.com/#temporarily-disabling-hooks

Change-Id: Id00cda882f5140914a670c87e574fa7f2f972099
Acked-By: Tom Tromey <tromey@adacore.com>
Acked-By: Guinevere Larsen <blarsen@redhat.com>
Acked-By: Andrew Burgess <aburgess@redhat.com>
15 months agoFix comparison of array types
Hannes Domani [Mon, 25 Dec 2023 18:05:55 +0000 (19:05 +0100)] 
Fix comparison of array types

Currently it's not possible to call functions if an argument is a
pointer to an array:
```
(gdb) l f
1       int f (int (*x)[2])
2       {
3         return x[0][1];
4       }
5
6       int main()
7       {
8         int a[2][2] = {{0, 1}, {2, 3}};
9         return f (a);
10      }
(gdb) p f(a)
Cannot resolve function f to any overloaded instance
```

This happens because types_equal doesn't handle array types, so the
function is never even considered as a possibility.

With array type handling added, by comparing element types and array
bounds, the same works:
```
(gdb) p f(a)
$1 = 1
```

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=15398
Co-Authored-By: Keith Seitz <keiths@redhat.com>
Reviewed-By: Guinevere Larsen <blarsen@redhat.com>
Approved-By: Tom Tromey <tom@tromey.com>
15 months agogdb: LoongArch: Set the correct XML syscall filename
Tiezhu Yang [Thu, 29 Feb 2024 08:39:10 +0000 (16:39 +0800)] 
gdb: LoongArch: Set the correct XML syscall filename

Now, there exists syscalls/loongarch-linux.xml, let us set the correct
XML syscall filename for LoongArch, otherwise GDB won't be able to find
the correct XML file to open and get the syscalls definitions.

It should install the package expat-devel (a library for XML parsing)
and configure --with-expat (done by default if libexpat is installed
and found at configure time) for compiling gdb in this case.

Without this patch:

(gdb) catch syscall
warning: There is no XML file to open.
warning: GDB will not be able to display syscall names nor to verify if
any provided syscall numbers are valid.
Catchpoint 1 (any syscall)

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agogdb: syscalls: Add loongarch case in update-linux-from-src.sh
Tiezhu Yang [Thu, 29 Feb 2024 08:39:09 +0000 (16:39 +0800)] 
gdb: syscalls: Add loongarch case in update-linux-from-src.sh

It shows that "Don't know how to generate loongarch-linux.xml.in"
when using the script update-linux-from-src.sh to regenerate the
syscall group info against Linux kernel, just add loongarch case.

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agogdb: syscalls: Generate loongarch-linux.xml
Tiezhu Yang [Thu, 29 Feb 2024 08:39:08 +0000 (16:39 +0800)] 
gdb: syscalls: Generate loongarch-linux.xml

Make use of the command "make" to generate loongarch-linux.xml
from loongarch-linux.xml.in.

Like this:

  $ git clone https://sourceware.org/git/binutils-gdb.git gdb.git
  $ cd gdb.git/gdb/syscalls/
  $ make

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agogdb: syscalls: Add loongarch-linux.xml.in
Tiezhu Yang [Thu, 29 Feb 2024 08:39:07 +0000 (16:39 +0800)] 
gdb: syscalls: Add loongarch-linux.xml.in

There is no syscall.tbl for LoongArch because it uses generic syscalls,
so it can not generate loongarch-linux.xml.in automatically through the
script update-linux-from-src.sh, make use of the script update-linux.sh
to generate loongarch-linux.xml.in.

Like this:

  $ git clone https://sourceware.org/git/binutils-gdb.git gdb.git
  $ cd gdb.git/gdb/syscalls/
  $ touch loongarch-linux.xml.in
  $ ./update-linux.sh loongarch-linux.xml.in

Note that the system header file /usr/include/asm-generic/unistd.h
may be different with the latest upstream Linux kernel uapi header
file include/uapi/asm-generic/unistd.h, it is better to copy the
upstream header file into the system header file when generating
loongarch-linux.xml.in.

There exist some __NR3264_ prefixed syscall numbers, replace them
with digital numbers according to /usr/include/asm-generic/unistd.h
and sort them by syscall number manually, maybe we can modify the
script to do it automatically in the future.

  <syscall name="fcntl" number="__NR3264_fcntl"/>
  <syscall name="statfs" number="__NR3264_statfs"/>
  <syscall name="fstatfs" number="__NR3264_fstatfs"/>
  <syscall name="truncate" number="__NR3264_truncate"/>
  <syscall name="ftruncate" number="__NR3264_ftruncate"/>
  <syscall name="lseek" number="__NR3264_lseek"/>
  <syscall name="sendfile" number="__NR3264_sendfile"/>
  <syscall name="mmap" number="__NR3264_mmap"/>
  <syscall name="fadvise64" number="__NR3264_fadvise64"/>

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agogdb: syscalls: Update .xml files for some archs
Tiezhu Yang [Thu, 29 Feb 2024 08:39:06 +0000 (16:39 +0800)] 
gdb: syscalls: Update .xml files for some archs

Make use of the command "make" to regenerate .xml files from .xml.in files.

Like this:

  $ git clone https://sourceware.org/git/binutils-gdb.git gdb.git
  $ cd gdb.git/gdb/syscalls/
  $ make

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agogdb: syscalls: Update .xml.in files for some archs
Tiezhu Yang [Thu, 29 Feb 2024 08:39:05 +0000 (16:39 +0800)] 
gdb: syscalls: Update .xml.in files for some archs

Make use of the script update-linux-from-src.sh to regenerate the Linux
syscall group info against Linux git commit d206a76d7d27 which will be
released in v6.8.

Like this:

  $ git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git linux.git
  $ git clone https://sourceware.org/git/binutils-gdb.git gdb.git
  $ cd gdb.git/gdb/syscalls/
  $ ./update-linux-from-src.sh ~/linux.git/

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months agogdb: syscalls: Update linux-defaults.xml.in
Tiezhu Yang [Thu, 29 Feb 2024 08:39:03 +0000 (16:39 +0800)] 
gdb: syscalls: Update linux-defaults.xml.in

Make use of the script update-linux-defaults.sh to regenerate the Linux
syscall group info against strace git commit 8c480270653d which will be
released in v6.8.

Like this:

  $ git clone https://github.com/strace/strace.git strace.git
  $ git clone https://sourceware.org/git/binutils-gdb.git gdb.git
  $ cd gdb.git/gdb/syscalls/
  $ ./update-linux-defaults.sh ~/strace.git/

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
Approved-By: John Baldwin <jhb@FreeBSD.org>
15 months ago[gdb/symtab] Workaround PR gas/31115
Tom de Vries [Wed, 20 Mar 2024 08:57:49 +0000 (09:57 +0100)] 
[gdb/symtab] Workaround PR gas/31115

On arm-linux, with gas 2.40, I run into:
...
(gdb) x /i main+8^M
   0x4e1 <main+7>:      vrhadd.u16      d14, d14, d31^M
(gdb) FAIL: gdb.arch/pr25124.exp: disassemble thumb instruction (1st try)
...

This is a regression due to PR gas/31115, which makes gas produce a low_pc
with the thumb bit set (0x4d8 & 0x1):
...
 <1><24>: Abbrev Number: 2 (DW_TAG_subprogram)
    <25>   DW_AT_name        : main
    <29>   DW_AT_external    : 1
    <29>   DW_AT_type        : <0x2f>
    <2a>   DW_AT_low_pc      : 0x4d9
    <2e>   DW_AT_high_pc     : 12
...

The regression was introduced in 2.39, and is also present in 2.40 and 2.41,
and hasn't been fixed yet.

Work around this in read_func_scope, by using gdbarch_addr_bits_remove on
low_pc and high_pc.

Tested on arm-linux and x86_64-linux.

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

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

15 months agoSpeed up lookup of "type_specific_data"
Tom Tromey [Wed, 14 Feb 2024 16:48:34 +0000 (09:48 -0700)] 
Speed up lookup of "type_specific_data"

I noticed that "info locals" on a certain large Ada program was very
slow.  I tracked this down to ada_get_tsd_type expanding nearly every
CU in the program.

This patch fixes the problem by changing this code to use the more
efficient lookup_transparent_type which, unlike the Ada-specific
lookup functions, does not try to find all matching instances.

Note that I first tried fixing this by changing ada_find_any_type, but
this did not work -- I may revisit this approach at some later date.

Also note that the copyright dates on the test files are set that way
because I copied them from another test.

New in v2: the new test failed on the Linaro regression tester.
Looking at the logs, it seems that gdb was picking up a 'value' from
libgnat:

    $1 = {<text variable, no debug info>} 0xf7e227a4 <ada.calendar.formatting.value>

This version renames the local variable in an attempt to work around
this.

v3: In v2, while trying to reproduce the problem locally, I
accidentally forgot to commit one of the changes.

15 months agoFix two serious flake8 reports
Tom Tromey [Fri, 23 Feb 2024 18:52:40 +0000 (11:52 -0700)] 
Fix two serious flake8 reports

flake8 points out that some code in frame_filters.py is referring to
undefined variables.

In the first hunk, I've changed the code to match what other
'complete' methods do in this file.

In the second hunk, I've simply removed the try/except -- if
get_filter_priority fails, it will raise GdbError, which is already
handled properly by gdb.

15 months agogdb/python: test exception case for gdb.solib_name
Andrew Burgess [Fri, 15 Mar 2024 11:14:05 +0000 (11:14 +0000)] 
gdb/python: test exception case for gdb.solib_name

The gdb.solib_name() and Progspace.solib_name() functions can throw an
exception if the address argument is not a valid address, but this is
not currently tested.

This commit adds a couple of tests to check that exceptions are thrown
correctly.

An early version of this commit updated the documentation, but it was
pointed out that lots of functions throw an exception if passed an
argument of the wrong type, and we don't document all of these, it's
kind-of assumed that passing an object of the incorrect type might
result in an exception, so this updated version leaves the docs alone,
but I do think adding the extra tests has value.

There's no changes to GDB itself in this commit.

Approved-By: Tom Tromey <tom@tromey.com>
15 months agogas, aarch64: Add faminmax extension
Saurabh Jha [Tue, 19 Mar 2024 15:41:41 +0000 (15:41 +0000)] 
gas, aarch64: Add faminmax extension

15 months agoRemove redunant test of ELF size in core note decoder.
Nick Clifton [Tue, 19 Mar 2024 15:16:43 +0000 (15:16 +0000)] 
Remove redunant test of ELF size in core note decoder.

  PR 31469

15 months agogdbsupport: rename include guard in gdb-checked-static-cast.h
Andrew Burgess [Wed, 6 Mar 2024 17:48:55 +0000 (17:48 +0000)] 
gdbsupport: rename include guard in gdb-checked-static-cast.h

I noticed in passing that the include guard in the file
gdbsupport/gdb-checked-static-cast.h was wrong, it includes the word
DYNAMIC when STATIC would be better, fixed in this commit.

There should be no user visible changes after this commit.

15 months agogdb: use static_cast in gdb::checked_static_cast
Andrew Burgess [Wed, 6 Mar 2024 17:28:48 +0000 (17:28 +0000)] 
gdb: use static_cast in gdb::checked_static_cast

This commit:

  commit 6fe4779ac4b1874c995345e3eabd89cb1a05fbdf
  Date:   Sat Feb 24 11:00:20 2024 +0100

      [gdb/build] Fix static cast of virtual base

addressed an issue where GDB would not compile in production mode due
to a use of gdb::checked_static_cast.  The problem was that we were
asking GDB to cast from a virtual base class to a sub-class, this
works fine when using dynamic_cast, but does not work with
static_cast.

The gdb::checked_static_cast actually uses dynamic_cast under the hood
in development mode in order to ensure that the cast is valid, while
in a production build we use static_cast as this is more efficient.

What this meant however, was that when gdb::checked_static_cast was
used to cast from a virtual base class, the dynamic_cast of a
non-production build worked fine, while the production build's
static_cast caused a build failure.

However, the gdb::checked_static_cast function already contains some
static_assert calls that are intended to catch any issues with invalid
type casting, the goal of these asserts was to prevent issues like
this: the build only failing in production mode.  Clearly the current
asserts are not enough.

I don't think there is a std::is_virtual_base type trait check, so
what I propose instead is that in non-production mode we also make use
of static_cast.  This will ensure that any errors that crop up in
production mode should also be revealed in non-production mode, and
should catch issues like this in the future.

There should be no user visible changes after this commit.

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

Co-Authored-By: Simon Marchi <simon.marchi@polymtl.ca>
15 months agoFix seg-fault in the DWARF reader code when accessing an abbreviatuin table with...
Nick Clifton [Tue, 19 Mar 2024 14:16:47 +0000 (14:16 +0000)] 
Fix seg-fault in the DWARF reader code when accessing an abbreviatuin table with a corrupt entry offset.

  PR 31456

15 months agold: Support LD_UNDER_TEST environment variable
H.J. Lu [Sat, 16 Mar 2024 13:23:19 +0000 (06:23 -0700)] 
ld: Support LD_UNDER_TEST environment variable

Support LD_UNDER_TEST environment variable to test a different linker.
Issue an error if LD_UNDER_TEST isn't an absolute full path.

* testsuite/config/default.exp: If LD_UNDER_TEST environment
variable exists, set ld and LD to it and set up tmpdir/ld/ld.
Issue an error if LD_UNDER_TEST isn't an absolute full path.

15 months agoFix free of unallocated memory in the BFD library's compression code.
Nick Clifton [Tue, 19 Mar 2024 12:48:04 +0000 (12:48 +0000)] 
Fix free of unallocated memory in the BFD library's compression code.

  PR 31455

15 months agoFix typo in previous patch to ld.texi
Nick Clifton [Tue, 19 Mar 2024 11:44:34 +0000 (11:44 +0000)] 
Fix typo in previous patch to ld.texi

15 months agogdb/python: Fix segfault when iterating over empty linetable
Toby Lloyd Davies [Tue, 19 Mar 2024 11:08:46 +0000 (11:08 +0000)] 
gdb/python: Fix segfault when iterating over empty linetable

symtab-> linetable () is set to null in
buildsym_compunit::end_compunit_symtab_with_blockvector () if the symtab
has no linetable. Attempting to iterate over this linetable using the
Python API caused GDB to segfault.

Approved-By: Tom Tromey <tom@tromey.com>
15 months agoAdd myself to gdb/MAINTAINERS
Toby Lloyd Davies [Tue, 19 Mar 2024 08:52:34 +0000 (08:52 +0000)] 
Add myself to gdb/MAINTAINERS

15 months ago[gdb] Further fix "value is not available" with debug frame
Tom de Vries [Tue, 19 Mar 2024 09:30:36 +0000 (10:30 +0100)] 
[gdb] Further fix "value is not available" with debug frame

In commit 2aaba744467 ("[gdb] Fix "value is not available" with debug frame")
I fixed a case in frame_unwind_register_value where using "set debug frame on"
caused an "info frame" command to abort, reporting a "value is not available"
error, due to the tpidruro register being unavailable.

Subsequently, commit bbb12eb9c84 ("gdb/arm: Remove tpidruro register from
non-FreeBSD target descriptions") removed the unavailable register, which
caused a progression on test-case gdb.base/inline-frame-cycle-unwind.exp.

While investigating the progression (see PR python/31437), I found that the
"debug frame" output of the test-case (when reverting commit bbb12eb9c84)
showed a smilar problem:
...
Python Exception <class 'gdb.error'>: value is not available^M
...
that was absent without "debug frame".

Fix this likewise in fetch_lazy_register, and update the test-case to check
for the exception.

Furthermore, I realized that there's both value::entirely_available and
value::entirely_unavailable, and that commit 2aaba744467 handled the case
of !entirely_available by printing unavailable.

Instead, print:
- "unavailable" for entirely_unavailable, and
- "partly unavailable" for !entirely_unavailable && !entirely_available.

Tested on x86_64-linux and arm-linux.

15 months agoLoongArch: Add relaxation for R_LARCH_CALL36
mengqinggang [Wed, 28 Feb 2024 09:42:36 +0000 (17:42 +0800)] 
LoongArch: Add relaxation for R_LARCH_CALL36

This relaxation is effective for both macro instructions (call36, tail36)
and explicit relocation instructions (pcaddu18i + jirl).

call36 f   -> bl f
  R_LARCH_CALL36  ->   R_LARCH_B26

tail36 $t0, f   -> b f
  R_LARCH_CALL36  ->   R_LARCH_B26

15 months agoAutomatic date update in version.in
GDB Administrator [Tue, 19 Mar 2024 00:00:22 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agoRegenerate AArch64 opcodes files
Nick Clifton [Mon, 18 Mar 2024 18:38:23 +0000 (18:38 +0000)] 
Regenerate AArch64 opcodes files

15 months agoaarch64: Add support for SVE ADDPT, SUBPT, MADPT, MLAPT instructions
Yury Khrustalev [Mon, 26 Feb 2024 13:43:48 +0000 (13:43 +0000)] 
aarch64: Add support for SVE ADDPT, SUBPT, MADPT, MLAPT instructions

The following instructions are added in this patch:

- ADDPT (predicated): Add checked pointer vectors (predicated).
- ADDPT (unpredicated): Add checked pointer vectors (unpredicated).
- SUBPT (predicated): Subtract checked pointer vectors (predicated).
- SUBPT (unpredicated): Subtract checked pointer vectors (unpredicated).
- MADPT: Multiply-add checked pointer vectors, writing multiplicand
- MLAPT: Multiply-add checked pointer vectors, writing addend

These instructions are part of Checked Pointer Arithmetic extension
and are enabled when both CPA and SVE are enabled. To achieve this,
both flag "+sve" and "+cpa" should be active.

This patch adds assembler and disassembler support for these instructions
with relevant checks. Tests are included as well.

Regression tested on the aarch64-none-linux-gnu target and no regressions
have been found.

15 months agoaarch64: Add support for (M)ADDPT and (M)SUBPT instructions
Yury Khrustalev [Wed, 21 Feb 2024 12:52:23 +0000 (12:52 +0000)] 
aarch64: Add support for (M)ADDPT and (M)SUBPT instructions

The following instructions are added in this patch:

 - ADDPT and SUBPT - Add/Subtract checked pointer
 - MADDPT and MSUBPT - Multiply Add/Subtract checked pointer

These instructions are part of Checked Pointer Arithmetic extension.
This patch adds assembler and disassembler support for these instructions
with relevant checks. Tests are included as well.

A new flag "+cpa" added to documentation. This flag enables CPA extension.

Regression tested on the aarch64-none-linux-gnu target and no regressions
have been found.

15 months ago[PATCH] ld: Improve documentation of -rpath-link search paths
Nick Clifton [Mon, 18 Mar 2024 16:51:49 +0000 (16:51 +0000)] 
[PATCH] ld: Improve documentation of -rpath-link search paths

15 months agoRemove some unnecessary Ada expression code
Tom Tromey [Thu, 29 Feb 2024 19:07:28 +0000 (12:07 -0700)] 
Remove some unnecessary Ada expression code

ada_bitwise_operation differs from the "usual" bitwise operations only
in that it calls value_cast at the end.  However, because gdb is
generally fairly lax about integer types, and because (perhaps oddly)
C-style binary promotion is done here anyway, it seems to me that this
code isn't needed.

15 months agoFix Ada 'ptype' of access to array
Tom Tromey [Thu, 29 Feb 2024 16:46:11 +0000 (09:46 -0700)] 
Fix Ada 'ptype' of access to array

ptype is a bit funny, in that it accepts both expressions and type
names.  It also evaluates the resulting expression using
EVAL_AVOID_SIDE_EFFECTS -- which both seems sensible (as a user would
you expect ptype to possibly cause inferior execution?), but is also a
historical artifact of how expressions are implemented (there's no
EVAL_FOR_TYPE).

In Ada, calling a function with an array will sometimes result in a
"thick pointer" array descriptor being made.  This is essentially a
structure holding a pointer and bounds information.

Currently, in such a callee, printing the type of the array will yield
funny results:

    (gdb) print str.all
    $1 = "Hello World"
    (gdb) ptype str
    type = array (<>) of character
    (gdb) ptype str.all
    type = array (1 .. 0) of character

That "1 .. 0" is the result of an EVAL_AVOID_SIDE_EFFECTS branch
trying to do "something" with an array descriptor, without doing too
much.

I tried briefly to make this code really dereference the array
descriptor and get the correct runtime type.  However, that proved to
be tricky; it certainly can't be done for all access types, because
that will cause dynamic type resolution and end up printing just the
runtime type -- which with variants may be pretty far from what the
user may expect.

Instead, this patch arranges to just leave such types alone in this
situation.  I don't think this should have an extra effects, because
things like array subscripting still work on thick pointers.

This patch also touches arrayptr.exp, because in that case the access
type is a "thin pointer", and this ensures that the output does not
change in that scenario.

15 months agoUse string_view in quirk_rust_enum
Tom Tromey [Wed, 14 Feb 2024 15:00:03 +0000 (08:00 -0700)] 
Use string_view in quirk_rust_enum

quirk_rust_enum makes string copies to store in an unordered_map.
However, the original strings have an appropriate lifetime, and so no
copying is needed.  With C++17, we can rely on string_view having a
std::hash specialization, so this patch changes this code to use
string_view rather than string.

15 months agoSet __file__ when source'ing a Python script
Tom Tromey [Fri, 8 Mar 2024 18:15:01 +0000 (11:15 -0700)] 
Set __file__ when source'ing a Python script

This patch arranges to set __file__ when source'ing a Python script.
This fixes a problem that was introduced by the "source" rewrite, and
then pointed out by Lancelot Six.

Reviewed-by: Lancelot Six <lancelot.six@amd.com>
Approved-By: Andrew Burgess <aburgess@redhat.com>
15 months agoClear board_info entry after waiting for process
Tom Tromey [Thu, 14 Mar 2024 17:35:25 +0000 (11:35 -0600)] 
Clear board_info entry after waiting for process

When certain DAP tests are run in a certain order, dejagnu will throw
an exception during shutdown.  After adding many logging statements, I
tracked this down to kill_wait_spawned_process not clearing the
'fileid' board_info entry, causing dejagnu to try to wait for the
process a second time -- and fail.

Tom de Vries then pointed out a second instance of this, which I
tracked down to the same problem occurring when spawning gdbserver.

This version of the patch fixes this by adding a new proc that can be
used to clean up board_info after waiting for a process to exit.  I'm
not sure why this problem hasn't affected the test suite in the past.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31435
Approved-By: Andrew Burgess <aburgess@redhat.com>
15 months agobfd: add missing include <time.h>
Clément Chigot [Wed, 13 Mar 2024 10:05:01 +0000 (11:05 +0100)] 
bfd: add missing include <time.h>

bdfio.c is defining bfd_get_current_time which is returning a time_t.
This type is defined in time.h and thus, must be included in bfd main
header to avoid undefined type when include bfd.h.

Note that most of the time, <time.h> is pulled by <sys/stat.h> already
included in bfd.h. That's why it went unnoticed.

15 months agoFix compiling bfd/vms-lib.c for a 32-bit host.
Nick Clifton [Mon, 18 Mar 2024 10:26:16 +0000 (10:26 +0000)] 
Fix compiling bfd/vms-lib.c for a 32-bit host.

15 months agogdb/testsuite: attach to i386 process stopped in vDSO
Andrew Burgess [Fri, 15 Mar 2024 12:07:12 +0000 (12:07 +0000)] 
gdb/testsuite: attach to i386 process stopped in vDSO

Fedora GDB has carried around a patch for a while which tested
attaching to an i386 process which is stopped within the vDSO library
region.  Apparently, at some point in the distant past there was an
issue finding symbol information for this region in this situation.

I'm struggling to track down the precise details of what the original
bug was, however, acquiring symbol information for the vDSO region is
different than for "normal" shared libraries -- the vDSO information
is synthesised within GDB during the attach / inferior creation
process -- so it's not unreasonable to imagine that there could be a
bug specifically in this area of GDB which wouldn't impact "normal"
shared libraries.

I looked for references to vDSO in our testsuite and couldn't find
any tests that looked like they did the same sort of thing, so I'd
like to propose adding this test to our testsuite.

It's a pretty simple test, and doesn't take long to run, so the cost
of adding this is not huge.

Approved-By: Tom Tromey <tom@tromey.com>
15 months agoArm64: check matching operands for predicated B16B16 insns
Jan Beulich [Mon, 18 Mar 2024 08:17:36 +0000 (09:17 +0100)] 
Arm64: check matching operands for predicated B16B16 insns

Except for bfml{a,s} their 1st and 3rd operands need to match - pass
the TIED macro argument accordingly. While doing that also slightly
re-arrange table entries, such that all predicated insns are close
together.

At the same time change the existing test source to actually use non-
matching operands for the respective bfml{a,s} forms.

15 months agoArm64: correct B16B16 indexed bf{mla,mls,mul}
Jan Beulich [Mon, 18 Mar 2024 08:17:15 +0000 (09:17 +0100)] 
Arm64: correct B16B16 indexed bf{mla,mls,mul}

Their index is in bits 19, 20, and 22. Bit 11 in particular is already
set in the base opcode. Note also how disassembler output didn't match
assembler input in the respective testcase.

15 months agoRISC-V: Tidy smstateen and ssstateen testcases.
Nelson Chu [Mon, 18 Mar 2024 05:32:01 +0000 (13:32 +0800)] 
RISC-V: Tidy smstateen and ssstateen testcases.

gas/
* testsuite/gas/riscv/march-imply-smstateen.d: Added.
* testsuite/gas/riscv/smstateen-csr-s.d: Removed.
* testsuite/gas/riscv/ssstateen-csr.d: Likewise.
* testsuite/gas/riscv/ssstateen-csr.s: Likewise.

15 months agoAutomatic date update in version.in
GDB Administrator [Mon, 18 Mar 2024 00:00:39 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months ago[gdb/testsuite] Fix gdb.base/list-no-debug.exp on debian
Tom de Vries [Sun, 17 Mar 2024 15:48:43 +0000 (16:48 +0100)] 
[gdb/testsuite] Fix gdb.base/list-no-debug.exp on debian

On debian 12, aarch64-linux I run into:
...
(gdb) list .^M
No symbol table is loaded.  Use the "file" command.^M
(gdb) FAIL: gdb.base/list-nodebug.exp: first 'list .'
...

The test-case expects some debug info, but none for main.  Instead, there's no
debug info at all.

Fix this by adding another source file to the test-case, and compiling it with
debug info.

Tested on aarch64-linux.

Approved-By: Andrew Burgess <aburgess@redhat.com>
PR testsuite/31290
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31290

15 months agoAutomatic date update in version.in
GDB Administrator [Sun, 17 Mar 2024 00:00:27 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agoAutomatic date update in version.in
GDB Administrator [Sat, 16 Mar 2024 00:00:24 +0000 (00:00 +0000)] 
Automatic date update in version.in

15 months agoUse size_t in gdb_bfd_section_data
Tom Tromey [Fri, 15 Mar 2024 16:22:42 +0000 (10:22 -0600)] 
Use size_t in gdb_bfd_section_data

BFD recently changed bfd_mmap to use size_t, not bfd_size_type.  This
patch updates gdb_bfd_section_data to follow.  Without this patch, if
the two types ever differ, gdb would fail to build.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
15 months agogas/NEWS: Remove mention of AArch64 B16B16 extension
Andrew Carlotti [Fri, 15 Mar 2024 15:29:22 +0000 (15:29 +0000)] 
gas/NEWS: Remove mention of AArch64 B16B16 extension

This aligns the 2.42 NEWS with the update backported to the 2.42 release
branch.

15 months agox86/APX: legacy promoted insns can't access %xmm16-%xmm31
Jan Beulich [Fri, 15 Mar 2024 09:29:35 +0000 (10:29 +0100)] 
x86/APX: legacy promoted insns can't access %xmm16-%xmm31

Irrespective of the encoding being EVEX, the usable SIMD register range
continues to be limited to %xmm0-%xmm15. Enforce this in gas (but
continue to generate code, as in principle we know how to encode
things) and recognize/flag the case in the disassembler.

Oddly enough wrong forms were actually used in the testsuite (register-
only forms are then really meaningless to test here, and are hence
dropped instead of adjusted).

Convert the POP2 test that needs touching anyway (due to a bad ModR/M
byte having been chosen) to .insn.

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

15 months ago[gdb/build] Fix build on postmarketos
Tom de Vries [Thu, 14 Mar 2024 20:28:44 +0000 (21:28 +0100)] 
[gdb/build] Fix build on postmarketos

I tried building gdbserver on postmarketos (which is based on alpine linux,
which uses musl libc), and ran into:
...
gdbserver/linux-low.cc: In lambda function:
gdbserver/linux-low.cc:1907:41: error: \
  'W_EXITCODE' was not declared in this scope
 1907 |               mark_lwp_dead (leader_lp, W_EXITCODE (0, 0), true);
      |                                         ^~~~~~~~~~
...

The macro W_EXITCODE is not defined in gdbsupport/gdb_wait.h.

OTOH, WSETEXIT is defined there, but unused:
...
 /* These are not defined in POSIX, but are used by our programs.  */

 #ifndef WSETEXIT
 # ifdef W_EXITCODE
 #define WSETEXIT(w,status) ((w) = W_EXITCODE(status,0))
 # else
 #define WSETEXIT(w,status) ((w) = (0 | ((status) << 8)))
 # endif
 #endif
...

Fix this by dropping the WSETEXIT definition, and instead defining W_EXITCODE.

Tested on x86_64-linux, in combination with an "#undef W_EXITCODE" to make
sure the definition is exercised.

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

15 months agogdbserver/linux: probe for libiconv in configure
Simon Marchi [Thu, 14 Mar 2024 17:39:18 +0000 (13:39 -0400)] 
gdbserver/linux: probe for libiconv in configure

Make gdbserver's build system locate libiconv when building for Linux.

Commit 07b3255c3bae ("Filter invalid encodings from Linux thread names")
make libiconv madantory for building gdbserver on Linux.

While trying to cross-compile gdb for xtensa-fsf-linux-uclibc (with a
toolchain generated with crosstool-ng), I got:

    /home/smarchi/src/binutils-gdb/gdbserver/linux-low.cc:48:10: fatal error: iconv.h: No such file or directory
       48 | #include <iconv.h>
          |          ^~~~~~~~~

I downloaded GNU libiconv, built it for that host, and installed it in
an arbitrary directory.  I had to modify the gdbserver build system to
locate libiconv and use it, the result is this patch.

I eventually found that crosstool-ng has a config option to make uclibc
provide an implementation of iconv, which is of course much easier.  But
given that this patch is now written, I think it would be worth merging
it, it could help some people who do not have iconv built-in their libc
in the future (and may not have the luxury of rebuilding their libc like
I do).

Using AM_ICONV in configure.ac adds these options for configure (the
same we have for gdb):

    --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
    --without-libiconv-prefix     don't search for libiconv in includedir and libdir
    --with-libiconv-type=TYPE     type of library to search for (auto/static/shared)

It sets the `LIBICONV` variable with whatever is needed to link with
libiconv, and adds the necessary `-I` flag to `CPPFLAGS`.

To avoid unnecessarily linking against libiconv on hosts that don't need
it, set `MAYBE_LIBICONV` with the contents of `LIBICONV` only if the
host is Linux, and use `MAYBE_LIBICONV` in `Makefile.in`.

Since libiconv is a hard requirement for Linux hosts, error out if it is
not found.

The bits in acinclude.m4 are similar to what we have in
gdb/acinclude.m4.

Update the top-level build system to support building against an in-tree
libiconv (I did not test this part though).  Something tells me that the
all-gdbserver dependency on all-libiconv is unnecessary, since there is
already a dependency of configure-gdbserver on all-libiconv (and
all-gdbserver surely depends on configure-gdbserver).  I just copied
what's done for GDB though.

ChangeLog:

* Makefile.def: Add configure-gdbserver and all-gdbserver
dependencies on all-libiconv.
* Makefile.in: Re-generate.

Change-Id: I90f8ef88dd4917df5a68b45550d93622fc9cfed4
Approved-By: Tom Tromey <tom@tromey.com>
15 months agoPass alignment when using GCC_C_FE_VERSION_2
Tom Tromey [Wed, 21 Feb 2024 15:22:01 +0000 (08:22 -0700)] 
Pass alignment when using GCC_C_FE_VERSION_2

When the GCC compiler plugin responds with GCC_C_FE_VERSION_2, gdb can
use the new 'finish_record_with_alignment' method.  This lets gdb pass
alignment information to the compiler, which in turn fixes the test
case included in this patch.

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

15 months agoRemove 'if' from GDB_PY_HANDLE_EXCEPTION
Tom Tromey [Fri, 22 Dec 2023 18:43:26 +0000 (11:43 -0700)] 
Remove 'if' from GDB_PY_HANDLE_EXCEPTION

This removes the embedded 'if' from GDB_PY_HANDLE_EXCEPTION and
GDB_PY_SET_HANDLE_EXCEPTION.  I believe this 'if' was necessary with
the old gdb try/catch macros, but it no longer is: these should only
ever be called from a 'catch' block, where it's already known that an
exception was thrown.

Simon pointed out, though, that in a few spots, these were in facts
called outside of 'catch' blocks.  This patch cleans up these spots.
I also found one spot where a redundant 'return nullptr' could be
removed.

15 months ago[gdb/tdep] Fix gdb.base/watchpoint-unaligned.exp on aarch64
Tom de Vries [Thu, 14 Mar 2024 10:25:10 +0000 (11:25 +0100)] 
[gdb/tdep] Fix gdb.base/watchpoint-unaligned.exp on aarch64

On aarch64-linux, with test-case gdb.base/watchpoint-unaligned.exp I run into:
...
(gdb) watch data.u.size8twice[1]^M
Hardware watchpoint 241: data.u.size8twice[1]^M
(gdb) PASS: gdb.base/watchpoint-unaligned.exp: watch data.u.size8twice[1]
continue^M
Continuing.^M
FAIL: gdb.base/watchpoint-unaligned.exp: continue (timeout)
FAIL: gdb.base/watchpoint-unaligned.exp: size8twice write
...

This happens as follows.

We start the exec and set an 8-byte hardware watchpoint on
data.u.size8twice[1] at address 0x440048:
...
(gdb) p sizeof (data.u.size8twice[1])
$1 = 8
(gdb) p &data.u.size8twice[1]
$2 = (uint64_t *) 0x440048 <data+16>
...

We continue execution, and a 16-byte write at address 0x440040 triggers the
hardware watchpoint:
...
  4101c8:       a9000801        stp     x1, x2, [x0]
...

When checking whether a watchpoint has triggered in
aarch64_stopped_data_address, we check against address 0x440040 (passed in
parameter addr_trap).  This behaviour is documented:
...
  /* ADDR_TRAP reports the first address of the memory range
     accessed by the CPU, regardless of what was the memory
     range watched.  ...  */
...
and consequently the matching logic compares against an addr_watch_aligned:
...
  && addr_trap >= addr_watch_aligned
  && addr_trap < addr_watch + len)
...

However, the comparison fails:
...
(gdb) p /x addr_watch_aligned
$3 = 0x440048
(gdb) p addr_trap >= addr_watch_aligned
$4 = false
...

Consequently, aarch64_stopped_data_address returns false, and
stopped_by_watchpoint returns false, and watchpoints_triggered returns 0,
which make infrun think it's looking at a delayed hardware
breakpoint/watchpoint trap:
...
  [infrun] handle_signal_stop: stop_pc=0x4101c8
  [infrun] handle_signal_stop: delayed hardware breakpoint/watchpoint trap, ignoring
...
Infrun then ignores the trap and continues, but runs into the same situation
again and again, causing a hang which then causes the test timeout.

Fix this by allowing a match 8 bytes below addr_watch_aligned.  This
introduces the possibility for false positives, so we only do this for regular
"value changed" watchpoints.

An earlier version of this patch worked by aligning addr_watch_aligned to 16
instead of 8:
...
-  const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 8);
+  const CORE_ADDR addr_watch_aligned = align_down (state->dr_addr_wp[i], 16);
...
but while that fixed the test-case, it didn't fix the problem completely, so
extend the test-case to check more scenarios.

Tested on aarch64-linux.

Tested-By: Luis Machado <luis.machado@arm.com>
Approved-By: Luis Machado <luis.machado@arm.com>
PR tdep/29423
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29423

15 months agoAutomatic date update in version.in
GDB Administrator [Thu, 14 Mar 2024 00:01:12 +0000 (00:01 +0000)] 
Automatic date update in version.in

15 months agoRemove extraneous word from manual
Tom Tromey [Wed, 13 Mar 2024 19:01:44 +0000 (13:01 -0600)] 
Remove extraneous word from manual

I noticed that the manual has an extra "either", which makes a
sentence ungrammatical.  This patch removes it.

15 months agoopcodes: Fix build verbosity
Christophe Lyon [Mon, 11 Mar 2024 22:05:19 +0000 (22:05 +0000)] 
opcodes: Fix build verbosity

Add $(AM_V_xxx) in a few places where they were missing.

15 months agobfd: Use size_t in the BFD mmap interface
H.J. Lu [Wed, 13 Mar 2024 13:45:16 +0000 (06:45 -0700)] 
bfd: Use size_t in the BFD mmap interface

Change the size type in the BFD mmap interface from bfd_size_type to
size_t to be consistent with the size type of the host mmap interface.

* bfdio.c (bfd_iovec): Change the bmmap size type to size_t.
(bfd_mmap): Likewise.
(memory_bmmap): Likewise.
* cache.c (cache_bmmap): Change the bmmap size type to size_t.
* opncls.c (opncls_bmmap): Change the bmmap size type to size_t.
* bfd-in2.h: Regenerated.
* libbfd.h: Likewise.

15 months agobfd: Use MAP_FAILED for mmap failure
H.J. Lu [Wed, 13 Mar 2024 13:31:28 +0000 (06:31 -0700)] 
bfd: Use MAP_FAILED for mmap failure

Use MAP_FAILED, instead of ((void *) -1), for mmap failure and use
((void *) -1) only if MAP_FAILED is undefined.

* bfdio.c (bfd_mmap): Replace (void *) -1 with MAP_FAILED for
mmap failure.
* bfdwin.c: Don't include <sys/mman.h>.
(MAP_FILE): Removed.
(bfd_get_file_window): Replace (void *) -1 with MAP_FAILED for
mmap failure.
* cache.c: Don't include <sys/mman.h>.
(cache_bmmap): Replace (void *) -1 with MAP_FAILED for mmap
failure.
* opncls.c (opncls_bmmap): Likewise.
* sysdep.h: Include <sys/mman.h> if HAVE_MMAP is define.
(MAP_FILE): New.  Defined as 0 if undefined.
(MAP_FAILED): New.  Defined as ((void *) -1) if undefined.

15 months agobfd: Don't call bfd_write with 0 size
H.J. Lu [Tue, 12 Mar 2024 21:02:55 +0000 (14:02 -0700)] 
bfd: Don't call bfd_write with 0 size

There is no need to call bfd_write with 0 size.

* elf-strtab.c (_bfd_elf_strtab_emit): Don't call bfd_write with
0 size.

15 months agoRISC-V: Add -march=help for gas
Hau Hsu [Fri, 23 Feb 2024 06:17:28 +0000 (14:17 +0800)] 
RISC-V: Add -march=help for gas

Use -march=help for gas to print all supported extensions and versions.

Here is part of the output of `as -march=help`:
All available -march extensions for RISC-V:
        e                                       1.9
        i                                       2.1, 2.0
        m                                       2.0
        a                                       2.1, 2.0
        f                                       2.2, 2.0
        d                                       2.2, 2.0
        q                                       2.2, 2.0
        c                                       2.0
        v                                       1.0
        h                                       1.0
        zicbom                                  1.0
        zicbop                                  1.0
        ...

This patch assumes that the supported extensions with the same versions
are listed together. For example:
static struct riscv_supported_ext riscv_supported_std_ext[] =
{
  ...
  {"i",         ISA_SPEC_CLASS_20191213,        2, 1, 0 },
  {"i",         ISA_SPEC_CLASS_20190608,        2, 1, 0 },
  {"i",         ISA_SPEC_CLASS_2P2,             2, 0, 0 },
  ...
};

For the "i" extension, 2.1.0 with different spec class are listed together.
This patch records the previous printed extension and version.  If the
current extension and version are the same as the previous one, skip
printing.

bfd/
* elfxx-riscv.c (riscv_print_extensions): New function.  Print
available extensions and versions.
* elfxx-riscv.h (riscv_print_extensions): New declaration.
gas/
* gas/config/tc-riscv.c (md_parse_option): Parse 'help' keyword in
-march option to print available extensions and versions.
* testsuite/gas/riscv/march-help.l: New testcase for -march=help.
* testsuite/gas/riscv/riscv.exp: Updated.

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

15 months ago[gdb/tdep] Fix gdb.base/watch-bitfields.exp on aarch64
Tom de Vries [Tue, 12 Mar 2024 16:08:18 +0000 (17:08 +0100)] 
[gdb/tdep] Fix gdb.base/watch-bitfields.exp on aarch64

On aarch64-linux, with test-case gdb.base/watch-bitfields.exp I run into:
...
(gdb) continue^M
Continuing.^M
^M
Hardware watchpoint 2: -location q.a^M
^M
Old value = 1^M
New value = 0^M
main () at watch-bitfields.c:42^M
42        q.h--;^M
(gdb) FAIL: $exp: -location watch against bitfields: q.e: 0->5: continue
...

In a minimal form, if we step past line 37 which sets q.e, and we have a
watchpoint set on q.e, it triggers:
...
$ gdb -q -batch watch-bitfields -ex "b 37" -ex run -ex "watch q.e" -ex step
Breakpoint 1 at 0x410204: file watch-bitfields.c, line 37.

Breakpoint 1, main () at watch-bitfields.c:37
37        q.e = 5;
Hardware watchpoint 2: q.e

Hardware watchpoint 2: q.e

Old value = 0
New value = 5
main () at /home/vries/gdb/src/gdb/testsuite/gdb.base/watch-bitfields.c:38
38        q.f = 6;
...

However, if we set in addition a watchpoint on q.a, the watchpoint on q.e
doesn't trigger.

How does this happen?

Bitfield q.a is just bit 0 of byte 0, and bitfield q.e is bit 4..7 of byte 1
and bit 1 of byte 2.  So, watch q.a should watch byte 0, and watch q.e should
watch bytes 1 and 2.

Using "maint set show-debug-regs on" (and some more detailed debug prints) we
get:
...
WP2: addr=0x440028 (orig=0x440029), ctrl=0x000000d5, ref.count=1
  ctrl: enabled=1, offset=1, len=2
WP3: addr=0x440028 (orig=0x440028), ctrl=0x00000035, ref.count=1
  ctrl: enabled=1, offset=0, len=1
...
which matches that.

When executing line 37, a hardware watchpoint trap triggers and we hit
aarch64_stopped_data_address with addr_trap == 0x440028:
...
(gdb) p /x addr_trap
$1 = 0x440028
....
and since the loop in aarch64_stopped_data_address walks backward, we check
WP3 first, which matches, and consequently target_stopped_by_watchpoint
returns true in watchpoints_triggered.

Likewise for target_stopped_data_address, which also returns addr == 0x440028.
Watchpoints_triggered matches watchpoint q.a to that address, and sets
watch_triggered_yes.

However, subsequently the value of q.a is checked, and it's the same value as
before (becase the insn in line 37 didn't change q.a), so the watchpoint
hardware trap is not reported to the user.

The problem originates from that fact that aarch64_stopped_data_address picked
WP3 instead of WP2.

There's something we can do about this.  In the example above, both
target_stopped_by_watchpoint and target_stopped_data_address returned true.
Instead we can return true in target_stopped_by_watchpoint but false in
target_stopped_data_address.  This lets watchpoints_triggered known that a
watchpoint was triggered, but we don't know where, and both watchpoints
get set to watch_triggered_unknown.

Subsequently, the values of both q.a and q.e are checked, and since q.e is not
the same value as before, the watchpoint hardware trap is reported to the user.

Note that this works well for regular (write) watchpoints (watch command), but
not for read watchpoints (rwatch command), because for those no value is
checked.  Likewise for access watchpoints (awatch command).

So, fix this by:
- passing a nullptr in aarch64_fbsd_nat_target::stopped_by_watchpoint and
  aarch64_linux_nat_target::stopped_by_watchpoint to make clear we're not
  interested in the stop address,
- introducing a two-phase approach in aarch64_stopped_data_address, where:
  - phase one handles access and read watchpoints, as before, and
  - phase two handles write watchpoints, where multiple matches cause:
    - return true if addr_p == null, and
    - return false if addr_p != null.

Tested on aarch64-linux.

Approved-By: Luis Machado <luis.machado@arm.com>
PR tdep/31214
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31214

15 months agocontrib: sync dg-extract-results.sh with GCC
Sam James [Mon, 11 Mar 2024 20:57:46 +0000 (20:57 +0000)] 
contrib: sync dg-extract-results.sh with GCC

This syncs dg-extract-results.sh with GCC.

It contains two commits: r14-4333-g346f5991569fae and r14-9393-g64273a7e6bd8ba.

contrib/ChangeLog:
* dg-extract-results.sh: Sync with GCC.

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