binutils-gdb.git
13 months agoPR30984, assertion fail elf.c:8485
Alan Modra [Thu, 19 Oct 2023 22:21:20 +0000 (08:51 +1030)]
PR30984, assertion fail elf.c:8485

PR 30984
* ldelf.c (ldelf_place_orphan): Don't allow bfd_abs_section as
a potential output section.

13 months agogdb: fix no-expat build of solib-target.c
Simon Marchi [Thu, 19 Oct 2023 20:17:34 +0000 (20:17 +0000)]
gdb: fix no-expat build of solib-target.c

Fixes:

      CXX    solib-target.o
    /home/smarchi/src/binutils-gdb/gdb/solib-target.c:57:8: error: ‘lm_info_vector’ does not name a type
       57 | static lm_info_vector
          |        ^~~~~~~~~~~~~~
    /home/smarchi/src/binutils-gdb/gdb/solib-target.c: In function ‘intrusive_list<shobj> solib_target_current_sos()’:
    /home/smarchi/src/binutils-gdb/gdb/solib-target.c:244:7: error: ‘solib_target_parse_libraries’ was not declared in this scope
      244 |     = solib_target_parse_libraries (library_document->data ());
          |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Change-Id: Ib477d3343b401017d79729118242143bc95f24b2

13 months agold: fix typo in ld.texi metdata->metadata
Jose E. Marchesi [Thu, 19 Oct 2023 19:53:57 +0000 (21:53 +0200)]
ld: fix typo in ld.texi metdata->metadata

13 months agogdb: rename struct so_list to shobj
Simon Marchi [Tue, 17 Oct 2023 19:37:58 +0000 (15:37 -0400)]
gdb: rename struct so_list to shobj

Now that so_list lists are implemented using intrusive_list, it doesn't
really make sense for the element type to be named "_list".  Rename to
just `struct shobj` (`struct so` was deemed to be not greppable enough).

Change-Id: I1063061901298bb40fee73bf0cce44cd12154c0e
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: remove free_so function
Simon Marchi [Tue, 10 Oct 2023 16:32:42 +0000 (16:32 +0000)]
gdb: remove free_so function

Remove this function, replace it with deleting the so_list in callers.

Change-Id: Idbd0cb84674ade1d8e17af471550dbd388264f60
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: don't call so_list::clear in free_so
Simon Marchi [Tue, 10 Oct 2023 16:28:03 +0000 (16:28 +0000)]
gdb: don't call so_list::clear in free_so

I think this `so.clear ()` call is not useful.

 - so_list::clear deletes some things that now get automatically deleted
   when the so_list gets deleted right after in free_so.
 - so_list::clear resets some scalar fields of so_list, which we don't
   really care about since the so_list gets deleted right after.
 - so_list::clear calls target_so_ops::clear_so, of which there is a
   single implementation, svr4_clear_so.  That implementation just
   resets a field in lm_info_svr4, which we don't care about, as it will
   get deleted when the so_list gets deleted right after.

Change-Id: Ie4d72f2a04a4129e55c460bb5c69bc0af0d12b32
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: link so_list using intrusive_list
Simon Marchi [Thu, 19 Oct 2023 14:55:38 +0000 (10:55 -0400)]
gdb: link so_list using intrusive_list

Replace the hand-made linked list implementation with intrusive_list,
simplying management of list items.

Change-Id: I7f55fd88325bb197cc655c9be5a2ec966d8cc48d
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make so_list::{so_original_name,so_name} std::strings
Simon Marchi [Sun, 8 Oct 2023 01:16:29 +0000 (01:16 +0000)]
gdb: make so_list::{so_original_name,so_name} std::strings

Change these two fields, simplifying memory management and copying.

Change-Id: If2559284c515721e71e1ef56ada8b64667eebe55
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make so_list::abfd a gdb_bfd_ref_ptr
Simon Marchi [Tue, 10 Oct 2023 16:01:08 +0000 (16:01 +0000)]
gdb: make so_list::abfd a gdb_bfd_ref_ptr

Change the field from a `bfd *` to a gdb_bfd_ref_ptr to automatically
manage the reference.

Change-Id: I3ace18bea985bc194c5e67bb559eec567e258950
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make so_list::sections not a pointer
Simon Marchi [Tue, 10 Oct 2023 15:59:57 +0000 (15:59 +0000)]
gdb: make so_list::sections not a pointer

Make the field a vector directly, instead of a pointer to a vector.
This was needed when so_list had to be a trivial type, which is not the
case anymore.

Change-Id: I79a8378ce0d0d1e2206ca08a273ebf332cb3ba14
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: remove target_section_table typedef
Simon Marchi [Tue, 10 Oct 2023 15:47:41 +0000 (15:47 +0000)]
gdb: remove target_section_table typedef

Remove this typedef.  I think that hiding the real type (std::vector)
behind a typedef just hinders readability.

Change-Id: I80949da3392f60a2826c56c268e0ec6f503ad79f
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make clear_so a method of struct so_list
Simon Marchi [Mon, 2 Oct 2023 20:31:04 +0000 (16:31 -0400)]
gdb: make clear_so a method of struct so_list

... just because it seems to make sense to do so.

Change-Id: Ie283c92d9b90c54e3deee96a43c6a942d8b5910b
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make so_list::lm_info a unique_ptr
Simon Marchi [Tue, 10 Oct 2023 18:47:13 +0000 (14:47 -0400)]
gdb: make so_list::lm_info a unique_ptr

Make it a unique_ptr, so it gets automatically deleted when the so_list
is deleted.

Change-Id: Ib62d60ae2a80656239860b80e4359121c93da13d
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: remove lm_info_vector typedef
Simon Marchi [Tue, 10 Oct 2023 18:56:11 +0000 (14:56 -0400)]
gdb: remove lm_info_vector typedef

I think this typedef hinders readability.  First, it's not well named
(it's not clear it contains lm_info_target objects).  And hiding the
fact that it contains unique pointers is not very useful either.  I was
looking at the code in solib_target_current_sos where the unique
pointers get moved from the vector, and it wasn't obvious at all what
the source of the move was.

Change-Id: I4a5cda7c90554f018b7c466b1535b41d69cbcbe7
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make solib-rocm not use so_list internally
Simon Marchi [Thu, 5 Oct 2023 20:43:20 +0000 (20:43 +0000)]
gdb: make solib-rocm not use so_list internally

Same rationale as the previous patch, but for solib-rocm.

 - Introduce rocm_so, which is a name a unique_name (see comment in
   rocm_update_solib_list for that) and a unique_ptr to the
   lm_info_svr4.
 - Change the internal lists from so_list lists to vectors of rocm_so.
 - Remove rocm_free_solib_list, as everything is automatic now.
 - Replace rocm_solib_copy_list with so_list_from_rocm_sos.

Change-Id: I71e06e3ea22d6420c9e4e500501c06e9a13398a8
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make solib-svr4 not use so_list internally
Simon Marchi [Tue, 10 Oct 2023 18:45:05 +0000 (14:45 -0400)]
gdb: make solib-svr4 not use so_list internally

A subsequent patch makes use of non-trivial types in struct so_list.
This trips on the fact that svr4_copy_library_list uses memcpy to copy
so_list objects:

      so_list *newobj = new so_list;
      memcpy (newobj, src, sizeof (struct so_list));

solib-svr4 maintains lists of so_list objects in its own internal data
structures.  When requested to return a list of so_list objects (through
target_so_ops::current_sos), it duplicates the internal so_list lists,
using memcpy.  When changing so_list to make it non-trivial, we would
need to replace this use of memcpy somehow.  That would mean making
so_list copyable, with all the complexity that entails, just to satisfy
this internal usage of solib-svr4 (and solib-rocm, which does the same).

Change solib-svr4 to use its own data type for its internal lists.  The
use of so_list is a bit overkill anyway, as most fields of so_list are
irrelevant for this internal use.

 - Introduce svr4_so, which contains just an std::string for the name
   and a unique_ptr for the lm_info.
 - Change the internal so_list lists to be std::vector<svr4_so>.  Vector
   seems like a good choice for this, we don't need to insert/remove
   elements in the middle of these internal lists.
 - Remove svr4_free_library_list, free_solib_lists and ~svr4_info, as
   everything is managed automatically now.
 - Replace svr4_copy_library_list (which duplicated internal lists in
   order to return them to the core) with so_list_from_svr4_sos, which
   creates an so_list list from a vector of svr4_so.
 - Generalize svr4_same a bit, because find_debug_base_for_solib now
   needs to compare an so_list and an svr4_so to see if they are the
   same.

Change-Id: I6012e48e07aace2a8172b74b389f9547ce777877
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: use gdb::checked_static_cast when casting lm_info
Simon Marchi [Tue, 10 Oct 2023 18:03:18 +0000 (14:03 -0400)]
gdb: use gdb::checked_static_cast when casting lm_info

Now that the lm_info class hierarchy has a virtual destructor and
therefore a vtable, use checked_static_cast instead of C-style cases to
ensure (when building in dev mode) that we're casting to the right kind
of lm_info.

Change-Id: I9a99b7d6aa9a44edbe76377d57a7008cfb75a744
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: remove target_so_ops::free_so
Simon Marchi [Mon, 2 Oct 2023 20:00:55 +0000 (16:00 -0400)]
gdb: remove target_so_ops::free_so

target_so_ops::free_so is responsible for freeing the specific lm_info
object.  All implementations basically just call delete.  Remove that
method, make the destructor of lm_info virtual, and call delete directly
from the free_so function.  Make the sub-classes final, just because
it's good practice.

Change-Id: Iee1fd4861c75034a9e41a656add8ed8dfd8964ee
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: rename lm_info_base to lm_info
Simon Marchi [Mon, 2 Oct 2023 19:57:46 +0000 (15:57 -0400)]
gdb: rename lm_info_base to lm_info

The base class doesn't need to have "_base" in its name, all the
sub-classes have a specific suffix.

Change-Id: I87652105cfedd87898770a81f0eda343ff7f2bdb
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: allocate so_list with new, deallocate with delete
Simon Marchi [Mon, 2 Oct 2023 19:17:04 +0000 (15:17 -0400)]
gdb: allocate so_list with new, deallocate with delete

Initialize all fields in the class declaration, change allocations to
use "new", change deallocations to use "delete".  This is needed by a
subsequent patches that use C++ stuff in so_list.

Change-Id: I4b140d9f1ec9ff809554a056f76e3eb2b9e23222
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make get_cbfd_soname_build_id static
Simon Marchi [Mon, 2 Oct 2023 19:41:34 +0000 (15:41 -0400)]
gdb: make get_cbfd_soname_build_id static

It is only used in solib.c.

Change-Id: I43461d13d84d65c4f6913d4033678d8983b9910b
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdbsupport: use "reference" and "pointer" type aliases in intrusive_list
Simon Marchi [Mon, 2 Oct 2023 16:50:32 +0000 (12:50 -0400)]
gdbsupport: use "reference" and "pointer" type aliases in intrusive_list

It seems to me like the code should used the defined type aliases, for
consistency.

Change-Id: Ib52493ff18ad29464405275bc10a0c6704ed39e9
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: replace some so_list parameters to use references
Simon Marchi [Sat, 30 Sep 2023 02:59:22 +0000 (22:59 -0400)]
gdb: replace some so_list parameters to use references

A subsequent patch changes so_list to be linked using
intrusive_list.  Iterating an intrusive_list yields some references to
the list elements.  Convert some functions accepting so_list objects to
take references, to make things easier and more natural.  Add const
where possible and convenient.

Change-Id: Id5ab5339c3eb6432e809ad14782952d6a45806f3
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: make interps_notify work with references
Simon Marchi [Sat, 30 Sep 2023 02:36:23 +0000 (22:36 -0400)]
gdb: make interps_notify work with references

A subsequent patch changes the interp::on_solib_loaded and
interp::on_solib_unloaded methods to take references.  This highlighted
that interps_notify did not work with reference parameters.

Fix that by changing interps_notify's `args` arg to be a universal
reference (&&).  Change the type of the method to be auto-deduced as an
additional template parameter, otherwise the signature of the callback
function would never match:

      CXX    interps.o
    /home/simark/src/binutils-gdb/gdb/interps.c: In function ‘void interps_notify_signal_received(gdb_signal)’:
    /home/simark/src/binutils-gdb/gdb/interps.c:378:18: error: no matching function for call to ‘interps_notify(void (interp::*)(gdb_signal), gdb_signal&)’
      378 |   interps_notify (&interp::on_signal_received, sig);
          |   ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/simark/src/binutils-gdb/gdb/interps.c:363:1: note: candidate: ‘template<class ... Args> void interps_notify(void (interp::*)(Args ...), Args&& ...)’
      363 | interps_notify (void (interp::*method) (Args...), Args&&... args)
          | ^~~~~~~~~~~~~~
    /home/simark/src/binutils-gdb/gdb/interps.c:363:1: note:   template argument deduction/substitution failed:
    /home/simark/src/binutils-gdb/gdb/interps.c:378:18: note:   inconsistent parameter pack deduction with ‘gdb_signal’ and ‘gdb_signal&’
      378 |   interps_notify (&interp::on_signal_received, sig);
          |   ~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Change-Id: I0cd9378e24ef039f30f8e14f054f8d7fb539c838
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: add program_space parameter to target_so_ops::clear_solib
Simon Marchi [Mon, 2 Oct 2023 18:46:18 +0000 (14:46 -0400)]
gdb: add program_space parameter to target_so_ops::clear_solib

The clear_solib is implicitly meant to clear the resources associated to
the current program space (that's what the solib implementations that
actually support multi-program-space / multi-inferior do).  Make that
explicit by adding a program_space parameter and pass down
current_program_space in call sites.  The implementation of the
clear_solib callbacks is fairly simple, I don't think any of them rely
on global state other than accessing current_program_space.

Change-Id: I8d0cc4db7b4f8db8d7452879c0c62db03269bf46
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agogdb: remove empty clear_solib functions
Simon Marchi [Mon, 2 Oct 2023 18:52:09 +0000 (14:52 -0400)]
gdb: remove empty clear_solib functions

Make the target_so_ops::clear_solib method optional, remove two empty
implementations.

Change-Id: Ifda297d50c74327d337091c58cdb5b3b60382591
Approved-By: Pedro Alves <pedro@palves.net>
Reviewed-By: Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agoRISC-V: Don't do undefweak relaxations for the linker_def symbols.
Nelson Chu [Thu, 19 Oct 2023 04:10:42 +0000 (12:10 +0800)]
RISC-V: Don't do undefweak relaxations for the linker_def symbols.

I get the following truncated errors recently when running riscv-gnu-toolchain
regressions,

/scratch/riscv-gnu-toolchain/regression/build/linux-rv32imafdc-ilp32d-medlow/build-glibc-linux-rv32imafdc-ilp32d/libc.a(libc-start.o): in function `elf_irela':
/scratch/riscv-gnu-toolchain/glibc/csu/../sysdeps/riscv/dl-irel.h:47:(.text+0x88): relocation truncated to fit: R_RISCV_GPREL_I against symbol `__ehdr_start' defined in .note.ABI-tag section in /scratch/riscv-gnu-toolchain/regression/build/linux-rv32imafdc-ilp32d-medlow/build-glibc-linux-rv32imafdc-ilp32d/elf/sln

The linker_def symbols like __ehdr_start that may be undefweak in early stages
of linking, including relax stage, but are guaranteed to be defined later.
Therefore, it seems like we shouldn't do the undefweak relaxations for these
kinds of symbols since they may be defined after relaxations.

bfd/
* elfnn-riscv.c (_bfd_riscv_relax_section): Don't do undefweak
relaxations for the linker_def symbols.

13 months agoRISC-V: Remove semicolons from DECLARE_INSN
Tsukasa OI [Thu, 19 Oct 2023 00:58:36 +0000 (00:58 +0000)]
RISC-V: Remove semicolons from DECLARE_INSN

This is for consistency and to prevent possible unnecessary errors due
to this inconsistency.

include/ChangeLog:

* opcode/riscv-opc.h (DECLARE_INSN): Remove semicolons from the
end of each entry.

13 months agoAutomatic date update in version.in
GDB Administrator [Thu, 19 Oct 2023 00:00:24 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months agogdb/testsuite/gdb.rocm: Fix incorrect use of continue N in multi-inferior-gpu.exp
Lancelot Six [Wed, 18 Oct 2023 10:24:53 +0000 (10:24 +0000)]
gdb/testsuite/gdb.rocm: Fix incorrect use of continue N in multi-inferior-gpu.exp

The gdb.rocm/multi-inferior-gpu.exp testcase uses a "continue $thread"
command, but this is incorrect.  If "continue" is given an argument, it
sets the ignore count of the breakpoint the thread stopped at.

For this testcase it does not really matter since the breakpoint is not
meant to be hit anymore, so whatever the ignore count is won't influence
the outcome of the test.  It is worth fixing nevertheless.

Change-Id: I0eb674d5529cdeb9e808b74870a29b6077265737
Approved-By: Simon Marchi <simon.marchi@efficios.com>
13 months agosim/riscv: fix JALR instruction simulation
Jaydeep Patil [Wed, 18 Oct 2023 16:37:59 +0000 (17:37 +0100)]
sim/riscv: fix JALR instruction simulation

Fix 32bit 'jalr rd,ra,imm' integer instruction, where RD was written
before using it to calculate destination address.

This commit also improves testutils.inc for riscv; make use of
pushsection and popsection when adding things to .data, and setup the
%gp global pointer register within the 'start' macro.

Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agolibctf: check for problems with error returns
Nick Alcock [Wed, 11 Oct 2023 14:15:16 +0000 (15:15 +0100)]
libctf: check for problems with error returns

We do this as a writable test because the only known-affected platforms
(with ssize_t longer than unsigned long) use PE, and we do not have support
for CTF linkage in the PE linker yet.

PR libctf/30836
* libctf/testsuite/libctf-writable/libctf-errors.*: New test.

13 months agogdb/testsuite/gdb.rocm: Check value returned by hipDeviceSynchronize
Lancelot Six [Tue, 17 Oct 2023 15:45:45 +0000 (15:45 +0000)]
gdb/testsuite/gdb.rocm: Check value returned by hipDeviceSynchronize

Functions of the hip runtime returning a hipError_t can be marked
nodiscard depending on the configuration[1] (when compiled with C++17).

This patch makes sure that we always check the value returned by
hipDeviceSynchronize and friends, and print an error message when
appropriate.  This avoid a wall of warnings when running the testsuite
if the compiler defaults to using C++17.

It is always a good practice to check the return values anyway.

[1] https://github.com/ROCm-Developer-Tools/HIP/blob/docs/5.7.1/include/hip/hip_runtime_api.h#L203-L218

Change-Id: I2a819a8ac45f4bcf814efe9a2ff12c6a7ad22f97
Approved-By: Simon Marchi <simon.marchi@efficios.com>
13 months agolibctf: Return CTF_ERR in ctf_type_resolve_unsliced PR 30836
Torbjörn SVENSSON [Tue, 17 Oct 2023 18:36:50 +0000 (20:36 +0200)]
libctf: Return CTF_ERR in ctf_type_resolve_unsliced PR 30836

In commit 998a4f589d68503f79695f180fdf1742eeb0a39d, all but one return
statement was updated to return the error proper value. This commit
rectifies that missed return statement.

libctf/
ctf-types.c (ctf_type_resolve_unsliced): Return CTF_ERR on error.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
13 months ago[gdb/testsuite] Fix gdb.base/jit-bfd-name.exp
Tom de Vries [Wed, 18 Oct 2023 06:26:20 +0000 (08:26 +0200)]
[gdb/testsuite] Fix gdb.base/jit-bfd-name.exp

When running test-case gdb.base/jit-bfd-name.exp, I run into:
...
ERROR: tcl error sourcing gdb/testsuite/gdb.base/jit-bfd-name.exp.
ERROR: can't read "start": no such variable
...

The problem is that commit c96ceed9dce ("gdb: include the end address in
in-memory bfd filenames") introduced a use of variable start, but not a
definition.

Fix this by adding the missing definition.

Tested on x86_64-linux.

13 months ago[gdb/symtab] Fix two style issues in gdb/dwarf2/index-write.c
Tom de Vries [Wed, 18 Oct 2023 05:45:39 +0000 (07:45 +0200)]
[gdb/symtab] Fix two style issues in gdb/dwarf2/index-write.c

While reviewing gdb/dwarf2/index-write.c I noticed two style issues.

Fix these.

Tested on x86_64-linux.

Approved-By: Tom Tromey <tom@tromey.com>
13 months ago[gdb/symtab] Fix style issues in v9 .gdb_index section support
Tom de Vries [Wed, 18 Oct 2023 05:45:39 +0000 (07:45 +0200)]
[gdb/symtab] Fix style issues in v9 .gdb_index section support

Post-commit review pointed out a few style issues in commit 8b9c08eddac
("[gdb/symtab] Add name_of_main and language_of_main to the DWARF index").

Fix these.

Tested on x86_64-linux.

Reported-By: Tom Tromey <tom@tromey.com>
Approved-By: Tom Tromey <tom@tromey.com>
13 months agoRISC-V: Make sure rv32q conflict won't affect the zfa gas testcases.
Nelson Chu [Wed, 18 Oct 2023 00:45:28 +0000 (08:45 +0800)]
RISC-V: Make sure rv32q conflict won't affect the zfa gas testcases.

According to the commit 51498ab9abc6, the q extension was no longer allowed
for rv32 since version 2.2.  Therefore, make sure the version of q is larger
than 2.2, in case the new extension conflict breaks the toolchain regressions,
which built with the old -misa-spec.

gas/
* testsuite/gas/riscv/zfa-zvfh.d: Set q to v2.2.
* testsuite/gas/riscv/zfa.d: Likewise.

13 months agoLoongArch: Correct comments.
caiyinyu [Tue, 17 Oct 2023 12:58:40 +0000 (20:58 +0800)]
LoongArch: Correct comments.

13 months agoAutomatic date update in version.in
GDB Administrator [Wed, 18 Oct 2023 00:00:14 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months agogas: testsuite: microblaze: Add new bit-field tests
Neal Frager [Fri, 13 Oct 2023 07:28:56 +0000 (08:28 +0100)]
gas: testsuite: microblaze: Add new bit-field tests

This patch adds new gas tests for the
microblaze bsefi and bsifi instructions.

Signed-off-by: Neal Frager <neal.frager@amd.com>
Signed-off-by: Michael J. Eager <eager@eagercon.com>
13 months agogdb: include the end address in in-memory bfd filenames
Markus Metzger [Tue, 9 May 2023 10:39:07 +0000 (10:39 +0000)]
gdb: include the end address in in-memory bfd filenames

Commit

    66984afd29e gdb: include the base address in in-memory bfd filenames

added the base address to in-memory bfd filenames.  Also add the end
address to allow dumping the in-memory bfd using the 'dump memory'
command.

13 months agolibctf: Sanitize error types for PR 30836
Torbjörn SVENSSON [Wed, 13 Sep 2023 09:02:36 +0000 (11:02 +0200)]
libctf: Sanitize error types for PR 30836

Made sure there is no implicit conversion between signed and unsigned
return value for functions setting the ctf_errno value.
An example of the problem is that in ctf_member_next, the "offset" value
is either 0L or (ctf_id_t)-1L, but it should have been 0L or -1L.
The issue was discovered while building a 64 bit ld binary to be
executed on the Windows platform.
Example object file that demonstrates the issue is attached in the PR.

libctf/
Affected functions adjusted.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
Co-Authored-By: Yvan ROUX <yvan.roux@foss.st.com>
13 months agoUpdate the documentation of the LINKER_VERSIOn script command to actually mention...
Nick Clifton [Tue, 17 Oct 2023 09:42:44 +0000 (10:42 +0100)]
Update the documentation of the LINKER_VERSIOn script command to actually mention the name of the command.

13 months ago[gdb/cli] Keep track of styling failures in source_cache
Tom de Vries [Tue, 17 Oct 2023 09:38:06 +0000 (11:38 +0200)]
[gdb/cli] Keep track of styling failures in source_cache

In source_cache::ensure, keep track of which files failed to be styled, and
don't attempt to style them again in case the file dropped out of the cache.

Tested on x86_64-linux.

Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months ago[gdb/cli] Factor out try_source_highlight
Tom de Vries [Tue, 17 Oct 2023 09:38:06 +0000 (11:38 +0200)]
[gdb/cli] Factor out try_source_highlight

Function source_cache::ensure contains some code using the GNU
source-highlight library.

The code is a sizable part of the function, and contains conditional
compilation in a slightly convoluted way:
...
       if (!already_styled)
 #endif /* HAVE_SOURCE_HIGHLIGHT */
       {
...

Fix this by factoring out the code into new function try_source_highlight,
such that:
- source_cache::ensure is easier to read, and
- the conditional compilation is at the level of the function body.

Tested on x86_64-linux.

Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months ago[gdb/cli] Skip string copy in source_cache::ensure
Tom de Vries [Tue, 17 Oct 2023 09:38:06 +0000 (11:38 +0200)]
[gdb/cli] Skip string copy in source_cache::ensure

In function source_cache::ensure we have:
...
        std::ostringstream output;
      ...
      contents = output.str ();
...
The last line causes an unnecessary string copy.

C++20 allows us to skip it, like this:
...
      contents = std::move (output).str ();
...

Use the more efficient solution.

Tested on x86_64-linux.

Reviewed-By: Lancelot Six <lancelot.six@amd.com>
13 months agoLoongArch: readelf -d RELASZ excludes .rela.plt size
mengqinggang [Mon, 31 Jul 2023 09:09:48 +0000 (17:09 +0800)]
LoongArch: readelf -d RELASZ excludes .rela.plt size

Before, readelf -d RELASZ is the sum of .rela.dyn size and .rela.plt size.
To consistent with LoongArch lld, RELASZ chang to only the size of .rela.dyn.

13 months agoasan: Invalid free in alpha_ecoff_get_relocated_section_contents
Alan Modra [Mon, 16 Oct 2023 09:04:03 +0000 (19:34 +1030)]
asan: Invalid free in alpha_ecoff_get_relocated_section_contents

This fixes an ancient bug in commit a3a33af390 (which makes me think
this code has never been used).

* coff-alpha.c (alpha_ecoff_get_relocated_section_contents): Iterate
through reloc_vector using a temp.

13 months agoRISC-V: Fix typo
Tsukasa OI [Tue, 17 Oct 2023 02:09:44 +0000 (02:09 +0000)]
RISC-V: Fix typo

include/ChangeLog:

* opcode/riscv-opc.h: Fix typo.

13 months agonat/x86-cpuid.h: Remove non-x86 fallbacks
John Baldwin [Tue, 17 Oct 2023 00:36:58 +0000 (17:36 -0700)]
nat/x86-cpuid.h: Remove non-x86 fallbacks

This header is only suitable for use on x86 hosts and is only included
there, so these fallbacks should not be needed.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
13 months agoAutomatic date update in version.in
GDB Administrator [Tue, 17 Oct 2023 00:00:45 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months agogdb: remove unnecessary declarations in target.c
Simon Marchi [Mon, 16 Oct 2023 16:24:53 +0000 (16:24 +0000)]
gdb: remove unnecessary declarations in target.c

I found that these local declarations were not needed, remove them.
Tested by rebuilding.

Change-Id: I8d4fd0839ee1063b91dc002216d683aee0d4be22

13 months agoHave DAP handle non-Value results from 'children'
Tom Tromey [Fri, 6 Oct 2023 13:42:00 +0000 (07:42 -0600)]
Have DAP handle non-Value results from 'children'

A pretty-printer's 'children' method may return values other than a
gdb.Value -- it may return any value that can be converted to a
gdb.Value.

I noticed that this case did not work for DAP.  This patch fixes the
problem.

13 months agoHandle gdb.LazyString in DAP
Tom Tromey [Wed, 4 Oct 2023 17:22:05 +0000 (11:22 -0600)]
Handle gdb.LazyString in DAP

Andry pointed out that the DAP code did not properly handle
gdb.LazyString results from a pretty-printer, yielding:

    TypeError: Object of type LazyString is not JSON serializable

This patch fixes the problem, partly with a small patch in varref.py,
but mainly by implementing tp_str for LazyString.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
13 months agoFix register-setting response from DAP
Tom Tromey [Wed, 4 Oct 2023 18:58:32 +0000 (12:58 -0600)]
Fix register-setting response from DAP

Andry noticed that given a DAP setExpression request, where the
expression to set is a register, DAP will return the wrong value -- it
will return the old value, not the updated one.

This happens because gdb.Value.assign (which was recently added for
DAP) does not update the value.

In this patch, I chose to have the assign method update the Value
in-place.  It's also possible to have it return a new value, but this
didn't seem very useful to me.

13 months agoFix: GNU-ld: ARM: Issues when trying to set target output architecture
Nick Clifton [Mon, 16 Oct 2023 15:11:49 +0000 (16:11 +0100)]
Fix: GNU-ld: ARM: Issues when trying to set target output architecture

  PR 28910
  * elf32-arm.c (elf32_arm_merge_private_bfd_data): Do not set output flags if the input flags have not been set.

13 months agoFix: GNU-ld: ARM: Issues when trying to set target output architecture
Nick Clifton [Mon, 16 Oct 2023 14:48:26 +0000 (15:48 +0100)]
Fix: GNU-ld: ARM: Issues when trying to set target output architecture

  PR 28910
  * lexsup.c (ld_options): Require that the --architecture option is given exactly two dashes, so that it does not become confused with the -a option.

13 months agoAdd DAP scope cache
Tom Tromey [Wed, 27 Sep 2023 17:48:24 +0000 (11:48 -0600)]
Add DAP scope cache

Andry Ogorodnik, a co-worker, noticed that multiple "scopes" requests
with the same frame would yield different variableReference values in
the response.

This patch adds a regression test for this, and adds a scope cache in
scopes.py, ensuring that multiple identical requests will get the same
response.

Tested-By: Alexandra Petlanova Hajkova <ahajkova@redhat.com>
13 months ago[gdb/symtab] Work around PR gas/29517
Tom de Vries [Mon, 16 Oct 2023 14:32:28 +0000 (16:32 +0200)]
[gdb/symtab] Work around PR gas/29517

When using glibc debuginfo generated with gas 2.39, we run into PR gas/29517:
...
$ gdb -q -batch a.out -ex start -ex "p (char *)strstr (\"haha\", \"ah\")"
Temporary breakpoint 1 at 0x40051b: file hello.c, line 6.

Temporary breakpoint 1, main () at hello.c:6
6   printf ("hello\n");
Invalid cast.
...
while without glibc debuginfo installed we get the expected result:
...
$n = 0x7ffff7daa1b1 "aha"
...
and likewise with glibc debuginfo generated with gas 2.40.

The strstr ifunc resolves to __strstr_sse2_unaligned.  The problem is that gas
generates dwarf that states that the return type is void:
...
<1><3e1e58>: Abbrev Number: 2 (DW_TAG_subprogram)
    <3e1e59>   DW_AT_name        : __strstr_sse2_unaligned
    <3e1e5d>   DW_AT_external    : 1
    <3e1e5e>   DW_AT_low_pc      : 0xbbd2e
    <3e1e66>   DW_AT_high_pc     : 0xbc1c3
...
while the return type should be a DW_TAG_unspecified_type, as is the case
with gas 2.40.

We can still use the workaround of casting to another function type for both
__strstr_sse2_unaligned:
...
(gdb) p ((char * (*) (const char *, const char *))__strstr_sse2_unaligned) \
  ("haha", "ah")
$n = 0x7ffff7daa211 "aha"
...
and strstr (which requires using *strstr to dereference the ifunc before we
cast):
...
gdb) p ((char * (*) (const char *, const char *))*strstr) ("haha", "ah")
$n = 0x7ffff7daa251 "aha"
...
but that's a bit cumbersome to use.

Work around this in the dwarf reader, such that we have instead:
...
(gdb) p (char *)strstr ("haha", "ah")
$n = 0x7ffff7daa1b1 "aha"
...

This also requires fixing producer_is_gcc to stop returning true for
producer "GNU AS 2.39.0".

Tested on x86_64-linux.

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

13 months agoOnly allow closure lookup by address if there are threads displaced-stepping
Luis Machado [Thu, 28 Sep 2023 10:08:29 +0000 (11:08 +0100)]
Only allow closure lookup by address if there are threads displaced-stepping

Since commit 1e5ccb9c5ff4fd8ade4a8694676f99f4abf2d679, we have an assertion in
displaced_step_buffers::copy_insn_closure_by_addr that makes sure a closure
is available whenever we have a match between the provided address argument and
the buffer address.

That is fine, but the report in PR30872 shows this assertion triggering when
it really shouldn't. After some investigation, here's what I found out.

The 32-bit Arm architecture is the only one that calls
gdbarch_displaced_step_copy_insn_closure_by_addr directly, and that's because
32-bit Arm needs to figure out the thumb state of the original instruction
that we displaced-stepped through the displaced-step buffer.

Before the assertion was put in place by commit
1e5ccb9c5ff4fd8ade4a8694676f99f4abf2d679, there was the possibility of
getting nullptr back, which meant we were not doing a displaced-stepping
operation.

Now, with the assertion in place, this is running into issues.

It looks like displaced_step_buffers::copy_insn_closure_by_addr is
being used to return a couple different answers depending on the
state we're in:

1 - If we are actively displaced-stepping, then copy_insn_closure_by_addr
is supposed to return a valid closure for us, so we can determine the
thumb mode.

2 - If we are not actively displaced-stepping, then copy_insn_closure_by_addr
should return nullptr to signal that there isn't any displaced-step buffers
in use, because we don't have a valid closure (but we should always have
this).

Since the displaced-step buffers are always allocated, but not always used,
that means the buffers will always contain data. In particular, the buffer
addr field cannot be used to determine if the buffer is active or not.

For instance, we cannot set the buffer addr field to 0x0, as that can be a
valid PC in some cases.

My understanding is that the current_thread field should be a good candidate
to signal that a particular displaced-step buffer is active or not. If it is
nullptr, we have no threads using that buffer to displaced-step.  Otherwise,
it is an active buffer in use by a particular thread.

The following fix modifies the displaced_step_buffers::copy_insn_closure_by_addr
function so we only attempt to return a closure if the buffer has an assigned
current_thread and if the buffer address matches the address argument.

Alternatively, I think we could use a function to answer the question of
whether we're actively displaced-stepping (so we have an active buffer) or
not.

I've also added a testcase that exercises the problem. It should reproduce
reliably on Arm, as that is the only architecture that faces this problem
at the moment.

Regression-tested on Ubuntu 20.04. OK?

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30872
Approved-By: Simon Marchi <simon.marchi@efficios.com>
13 months agogdb: replace architecture_changed with new_architecture observer
Andrew Burgess [Wed, 11 Oct 2023 09:30:35 +0000 (10:30 +0100)]
gdb: replace architecture_changed with new_architecture observer

This commit replaces the architecture_changed observer with a
new_architecture observer.

Currently the only user of the architecture_changed observer is the
Python code, which uses this observer to register the Python unwinder
with the architecture.

The problem is that the architecture_changed observer is triggered
from inferior::set_arch(), which only sees the inferior-wide gdbarch
value.  For targets that use thread-specific architectures, these
never trigger the architecture_changed observer, and so never have the
Python unwinder registered with them.

When it comes to unwinding GDB makes use of the frame's gdbarch, which
is based on the thread's regcache gdbarch, which is set in
get_thread_regcache to the value returned from
target_thread_architecture, which is not always the inferiors gdbarch
value, it might be a thread-specific gdbarch which has not passed
through inferior::set_arch().

The new_architecture observer will be triggered from
gdbarch_find_by_info, whenever a new gdbarch is created and
initialised.  As GDB caches and reuses gdbarch values, we should
expect to see each new architecture trigger the new_architecture
observer just once.

After this commit, targets that make use of thread-specific
architectures should be able to make use of Python unwinders.

As I don't have access to a machine that makes use of thread-specific
architectures right now, I asked Luis to confirm that an AArch64
target that uses SVE/SME can't use the Python unwinders in threads
that are using a thread-specific architectures, and he confirmed that
this is indeed the case, see this discussion:

  https://inbox.sourceware.org/gdb/87wmvsat8i.fsf@redhat.com

Tested-By: Lancelot Six <lancelot.six@amd.com>
Tested-By: Luis Machado <luis.machado@arm.com>
Reviewed-By: Luis Machado <luis.machado@arm.com>
Approved-By: Simon Marchi <simon.marchi@efficios.com>
13 months agoobjcopy: Fix name of the field modified by pe_stack_reserve.
Clément Chigot [Mon, 16 Oct 2023 08:13:36 +0000 (10:13 +0200)]
objcopy: Fix name of the field modified by pe_stack_reserve.

13 months agoRISC-V: Add "lp64e" ABI support
Tsukasa OI [Tue, 25 Jul 2023 00:53:47 +0000 (00:53 +0000)]
RISC-V: Add "lp64e" ABI support

Since RV32E and RV64E are now ratified, this commit prepares the ABI
support for LP64E (LP64 with reduced GPRs).

gas/ChangeLog:

* config/tc-riscv.c (riscv_set_abi_by_arch): Update the error
message.  (md_parse_option): Accept "lp64e".
* doc/c-riscv.texi: Update the documentation to allow "lp64e".
* testsuite/gas/riscv/mabi-fail-rv32e-lp64f.l:
Change error message.
* testsuite/gas/riscv/mabi-fail-rv32e-lp64d.l: Likewise.
* testsuite/gas/riscv/mabi-fail-rv32e-lp64q.l: Likewise.

13 months agoRISC-V: Remove RV64E conflict
Tsukasa OI [Tue, 25 Jul 2023 01:02:01 +0000 (01:02 +0000)]
RISC-V: Remove RV64E conflict

Since RV32E *and* RV64E are ratified, RV64E is no longer invalid.

This commit removes a restriction that prevents making base ISA with
reduced GPRs with XLEN > 32.

bfd/ChangeLog:

* elfxx-riscv.c (riscv_parse_check_conflicts): Remove RV64E
conflict since the ratified 'E' base ISAs include RV64E.

gas/ChangeLog:

* testsuite/gas/riscv/march-fail-base-02.d: Removed.
* testsuite/gas/riscv/march-fail-base-02.l: Removed.

13 months agoAutomatic date update in version.in
GDB Administrator [Mon, 16 Oct 2023 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months agosim: add distclean dep for gnulib
Mike Frysinger [Sun, 15 Oct 2023 15:45:43 +0000 (21:30 +0545)]
sim: add distclean dep for gnulib

13 months agoopcodes: microblaze: Add new bit-field instructions
Neal Frager [Fri, 13 Oct 2023 07:28:55 +0000 (08:28 +0100)]
opcodes: microblaze: Add new bit-field instructions

This patches adds new bsefi and bsifi instructions.
BSEFI- The instruction shall extract a bit field from a
register and place it right-adjusted in the destination register.
The other bits in the destination register shall be set to zero.
BSIFI- The instruction shall insert a right-adjusted bit field
from a register at another position in the destination register.
The rest of the bits in the destination register shall be unchanged.

Further documentation of these instructions can be found here:
https://docs.xilinx.com/v/u/en-US/ug984-vivado-microblaze-ref

With version 6 of the patch, no new relocation types are added as
this was unnecessary for adding the bsefi and bsifi instructions.

FIXED: Segfault caused by incorrect termination of microblaze_opcodes.

Signed-off-by: nagaraju <nagaraju.mekala@amd.com>
Signed-off-by: Ibai Erkiaga <ibai.erkiaga-elorza@amd.com>
Signed-off-by: Neal Frager <neal.frager@amd.com>
Signed-off-by: Michael J. Eager <eager@eagercon.com>
13 months agosim: mips: fix printf string
Mike Frysinger [Sun, 15 Oct 2023 10:39:31 +0000 (16:24 +0545)]
sim: mips: fix printf string

13 months agoAutomatic date update in version.in
GDB Administrator [Sun, 15 Oct 2023 00:00:40 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months agoAutomatic date update in version.in
GDB Administrator [Sat, 14 Oct 2023 00:00:37 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months ago[aarch64] Use SVE_VQ_BYTES instead of __SVE_VQ_BYTES
Luis Machado [Fri, 13 Oct 2023 15:03:50 +0000 (16:03 +0100)]
[aarch64] Use SVE_VQ_BYTES instead of __SVE_VQ_BYTES

__SVE_VQ_BYTES is only available if SVE definitions are available in
the system's headers, and this is not true for all systems.

For this purpose, we define SVE_VQ_BYTES.  This patch fixes the
name of the constant being used.

13 months agold: replace wrong bfd_malloc in nto.em
Clément Chigot [Fri, 13 Oct 2023 14:43:32 +0000 (16:43 +0200)]
ld: replace wrong bfd_malloc in nto.em

xmalloc should be called in ld instead of bfd_malloc.

ld/ChangeLog:

* emultempl/nto.em (nto_lookup_QNX_note_section): Replace
bfd_malloc by xmalloc.

13 months agold: warn when duplicated QNX stack note are detected
Clément Chigot [Fri, 6 Oct 2023 12:38:40 +0000 (14:38 +0200)]
ld: warn when duplicated QNX stack note are detected

This warning is triggered only when a stack parameter is given to
the linker.

ld/ChangeLog:

        * emultempl/nto.em: Add warning when several QNX .note are
        detected.

13 months agold: correctly handle QNX --lazy-stack without -zstack-size
Clément Chigot [Fri, 6 Oct 2023 11:52:38 +0000 (13:52 +0200)]
ld: correctly handle QNX --lazy-stack without -zstack-size

The warning was skipped if -zstack-size is not provided.

ld/ChangeLog:

        * emultempl/nto.em: Move --lazy-stack warning before missing
        -zstack-size skip.

13 months agold: allow update of existing QNX stack note
Clément Chigot [Thu, 5 Oct 2023 09:29:32 +0000 (11:29 +0200)]
ld: allow update of existing QNX stack note

Up to now, the linker would always create a QNX stack note from scratch.
However, object files could already have such note, ending up into
duplicates. QNX loader doesn't handle that.

Update the mechanism to first search through the input files for a .note
section holding a QNX stack note. If none are found, then a new section
is created into the stub file as before. This requires this search to be
done once the file have been opened, moving the whole logic a bit later
in the emulation process.

As part for this update, also allow to request an executable stack
without necessarily having to provide its size as well.  In this case, s
etup a default lazy stack of 0x1000.

ld/ChangeLog:

        * emultempl/nto.em (nto_create_QNX_note_section): New Function.
        (nto_lookup_QNX_note_section): New Function.
        (nto_add_note_section): Move the creation of the note section
        in the above new functions.
        (nto_create_output_section_statements): rename nto_after_open
        * testsuite/ld-aarch64/aarch64-nto.exp: add new test.
        * testsuite/ld-aarch64/nto-stack-note-3.d: New test.
        * testsuite/ld-aarch64/nto-stack-note.s: New test.

13 months agoRISC-V: Add support for numbered ISA mapping strings
Joseph Faulls [Wed, 27 Sep 2023 12:42:55 +0000 (12:42 +0000)]
RISC-V: Add support for numbered ISA mapping strings

The elf psabi allows for mapping symbols to be of the form $x<ISA>.<any>

opcodes/
* riscv-dis.c (riscv_get_map_state): allow mapping symbol to
be suffixed by a unique identifier .<any>

13 months agoMove -lsocket check to common.m4
Tom Tromey [Sun, 1 Oct 2023 15:16:13 +0000 (09:16 -0600)]
Move -lsocket check to common.m4

A user pointed out that the -lsocket check in gdb should also apply to
gdbserver -- otherwise it can't find the Solaris socketpair.  This
patch makes the change.  It also removes a couple of redundant
function checks from gdb's configure.ac.

This was tested by the person who reported the bug.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30927
Approved-By: Pedro Alves <pedro@palves.net>
13 months agoAutomatic date update in version.in
GDB Administrator [Fri, 13 Oct 2023 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months agoFix test suite failure in file-then-restart.exp
Tom Tromey [Wed, 11 Oct 2023 16:20:04 +0000 (10:20 -0600)]
Fix test suite failure in file-then-restart.exp

Simon pointed out that the new file-then-restart.exp test fails with
the extended-remote target board.

The problem is that the test suite doesn't use gdb_file_cmd -- which
handles things like "set remote exec-file".  This patch changes
gdb_file_cmd to make the "kill" command optional, and then switches
the test case to use it.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30933
Approved-By: Simon Marchi <simon.marchi@efficios.com>
13 months agobfd: add new bfd_cache_size() function
Andrew Burgess [Fri, 6 Oct 2023 15:20:41 +0000 (16:20 +0100)]
bfd: add new bfd_cache_size() function

In GDB we have a problem with the BFD cache.

As GDB runs for a potentially extended period of time, if the BFD
cache holds a file descriptor for an open on-disk file, this can, on
some targets (e.g. Win32) prevent the OS writing to the file.

This might, for example, prevent a user from recompiling their
executable as GDB is (via the BFD cache) holding an open reference to
that file.

Another problem, relates to bfd_stat, for BFDs that are using the BFD
cache (i.e. they call cache_bstat to implement bfd_stat).  The
cache_bstat function finds the BFD in the cache, opening the file if
needed, and then uses fstat on the open file descriptor.

What this means is that, if the on-disk file changes, but the cache
was holding an open reference to the file, the bfd_stat will return
the 'struct stat' for the old file, not the new file.

Now, for this second problem, we might be tempted to make use of an
actual stat call, instead of calling bfd_stat, however, this isn't
ideal as we have some BFDs that use a custom iovec, and implement the
various functions over GDB's remote protocol.  By using bfd_stat we
can have a single call that should work for both local files, and for
remote files.

To solve both of these problems GDB has calls to bfd_cache_close_all
sprinkled around its code base.  And in theory this should work fine.

However, I recently ran into a case where we had missed a
bfd_cache_close_all call, and as a result some BFDs were held open.
This caused a bfd_stat call to return an unexpected result (old file
vs new file).

What I'd like is some way within GDB that I can do:

  gdb_assert ( /* Nothing is held open in the cache.  */ );

As this would allow GDB to quickly identify when we've missed some
bfd_cache_close_all calls.

And so, to support this, I would like to add a new bfd_cache_size
function.  This function returns an integer, which is the number of
open files in the cache.  I can then start adding:

  gdb_assert (bfd_cache_size() == 0);

to GDB in some strategic spots, and start fixing all of the missing
bfd_cache_close_all calls that crop up as a result.

13 months agobfd/cache: change type used to track cached BFDs from int to unsigned
Andrew Burgess [Wed, 11 Oct 2023 13:39:37 +0000 (14:39 +0100)]
bfd/cache: change type used to track cached BFDs from int to unsigned

Within bfd/cache.c change the type for max_open_files and open_files
variables from int to unsigned.  As a consequence of this, the return
type for bfd_cache_max_open() is also changed from int to unsigned.

Within bfd_cache_max_open I've left the local 'max' variable as an
int, this should ensure that if the sysconf call fails, and returns
-1, then the computed max value will be less than 10, which means
max_open_files will be set to 10.  If 'max' was changed to unsigned
then, should the sysconf call fail, we'd end up with max becoming a
very large positive number ... which is clearly not what we want.

And, while I was auditing how open_files is used, I added an assert
within bfd_cache_delete to ensure that we don't try to reduce
open_files below zero.

There should be no user visible change with this commit.

13 months agoAutomatic date update in version.in
GDB Administrator [Thu, 12 Oct 2023 00:00:55 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months ago[RFA] Fix for mcore simulator
Jeff Law [Wed, 11 Oct 2023 22:30:05 +0000 (16:30 -0600)]
[RFA] Fix for mcore simulator

I was looking for cases where a GCC patch under evaluation would cause test
results to change.  Quite surprisingly the mcore-elf port showed test
differences.   After a fair amount of digging my conclusion was the sequences
before/after the patch should have been semantically the same.

Of course if the code is supposed to behave the same, then that points to
problems elsewhere (assembler, linker, simulator).  Sure enough the mcore
simulator was mis-handling the sign extension instructions.  The simulator
implementation of sextb is via paired shift-by-24 operations. Similarly the
simulator implements sexth via paired shift-by-16 operations.

The temporary holding the value was declared as a "long" thus this approach
worked fine for hosts with a 32 bit wide long and failed miserably for hosts
with a 64 bit wide long.

This patch makes the shift count automatically adjust based on the size of the
temporary.  It includes a simple test for sextb and sexth.  I have _not_ done a
full audit of the mcore simulator for more 32->64 bit issues.

This also fixes 443 execution tests in the GCC testsuite

13 months agogprofng: Use the correct application name in error messages
Vladimir Mezentsev [Tue, 10 Oct 2023 02:04:04 +0000 (19:04 -0700)]
gprofng: Use the correct application name in error messages

The old application name (er_archive) is used in many places.

gprofng/ChangeLog
2023-10-09  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

* src/Experiment.cc: Replace er_archive with gp-archive.
* src/Experiment.cc: Likewise.

13 months agoAutomatic date update in version.in
GDB Administrator [Wed, 11 Oct 2023 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

13 months agogdb: LoongArch: Handle special struct in dummy call
Hui Li [Wed, 28 Jun 2023 09:33:05 +0000 (17:33 +0800)]
gdb: LoongArch: Handle special struct in dummy call

When execute the following command on LoongArch:

  make check-gdb TESTS="gdb.base/infcall-nested-structs-c++.exp"

there exist some failed testcases:

  === gdb Summary ===

  # of expected passes 5533
  # of unexpected failures 367

The root cause is related with a struct containing floating-point
members as function argument or return value for a dummy call.

(1) Structure consists of one floating-point member within FRLEN bits
    wide, it is passed in an FAR if available.
(2) Structure consists of two floating-point members both within FRLEN
    bits wide, it is passed in two FARs if available.
(3) Structure consists of one integer member within GRLEN bits wide and
    one floating-point member within FRLEN bits wide, it is passed in a
    GAR and an FAR if available.

Note that in the above cases, empty structure or union members are also
ignored even in C++.

Here is a simple test on LoongArch:

  loongson@bogon:~$ cat test.c

  #include<stdio.h>

  struct test {
  long   a;
  double b __attribute__((aligned(16)));
  };
  struct test val = { 88, 99.99 };
  int check_arg_struct (struct test arg)
    {
      printf("arg.a = %ld\n", arg.a);
      printf("arg.b = %f\n", arg.b);
      printf("sizeof(val) = %d\n", sizeof(val));
      return 1;
    }
  int main()
  {
     check_arg_struct (val);
     return 0;
  }
  loongson@bogon:~$ gcc -g test.c -o test
  loongson@bogon:~$ ./test
  arg.a = 88
  arg.b = 99.990000
  sizeof(val) = 32

Before:

loongson@bogon:~$ gdb test
...
(gdb) start
...
Temporary breakpoint 1, main () at test.c:19
19    check_arg_struct (val);
(gdb) p check_arg_struct (val)
arg.a = 140737488286128
arg.b = -nan
sizeof(val) = 32
$1 = 1
...

After:

loongson@bogon:~$ gdb test
...
(gdb) start
...
Temporary breakpoint 1, main () at test.c:19
19    check_arg_struct (val);
(gdb) p check_arg_struct (val)
arg.a = 88
arg.b = 99.990000
sizeof(val) = 32
$1 = 1
...

With this patch, there are no failed testcases:

  make check-gdb TESTS="gdb.base/infcall-nested-structs-c++.exp"

   === gdb Summary ===

   # of expected passes 5900

Signed-off-by: Hui Li <lihui@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
13 months agogdb: add assertion when marking the remote async flag
Simon Marchi [Wed, 4 Oct 2023 02:04:01 +0000 (22:04 -0400)]
gdb: add assertion when marking the remote async flag

As reported in bug 30630 [1], we hit a case where the remote target's
async flag is marked while the target is not configured (yet) to work
async.  This should not happen.  It is caught thanks to this assert in
remote_target::wait:

    /* Start by clearing the flag that asks for our wait method to be called,
       we'll mark it again at the end if needed.  If the target is not in
       async mode then the async token should not be marked.  */
    if (target_is_async_p ())
      rs->clear_async_event_handler ();
    else
      gdb_assert (!rs->async_event_handler_marked ());

This is helpful, but I think that we could have caught the problem earlier than
that, at the moment we marked the handler.  Catching problems earlier
makes them easier to debug.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=30630

Change-Id: I7e229c74b04da82bef6a817d5a676be5cf52e833
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agogdb: add remote_state::{is_async_p,can_async_p}
Simon Marchi [Tue, 10 Oct 2023 14:53:36 +0000 (10:53 -0400)]
gdb: add remote_state::{is_async_p,can_async_p}

A subsequent patch will want to know if the remote is async within a
remote_state method.  Add a helper method for that, and for "can async"
as well, for symmetry.

Change-Id: Id0f648ee4896736479fa942f5453eeeb0e5d4352
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agogdb: make remote_state's async token private
Simon Marchi [Wed, 4 Oct 2023 02:03:59 +0000 (22:03 -0400)]
gdb: make remote_state's async token private

Make remote_async_inferior_event_token private (rename to
m_async_event_handler_token) and add methods for the various operations
we do on it.  This will help by:

 - allowing to break on those methods when debugging
 - allowing to add assertions in the methods

Change-Id: Ia3b8a2bc48ad4849dbbe83442c3f83920f03334d
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agogdb: remove trailing whitespaces in remote.c
Simon Marchi [Tue, 10 Oct 2023 14:51:22 +0000 (10:51 -0400)]
gdb: remove trailing whitespaces in remote.c

Change-Id: I88d136b6b5a0a54d1c8a9f8a0068762a5456a29a

13 months agogdb: scope down registers_changed call in inferior::set_arch
Simon Marchi [Fri, 29 Sep 2023 18:24:39 +0000 (14:24 -0400)]
gdb: scope down registers_changed call in inferior::set_arch

inferior::set_arch calls registers_changed, which invalidates all
regcaches.  It would be enough to invalidate only regcaches of threads
belonging to this inferior.  Call registers_changed_ptid instead, with
the proper process target / ptid.  If the inferior does not have a
process target, there should be no regcaches for that inferior, so no
need to invalidate anything.

Change-Id: Id8b5500acb7f373b01a534f16d3a7d028dc0d882
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agogdb: remove target_gdbarch
Simon Marchi [Fri, 29 Sep 2023 18:24:38 +0000 (14:24 -0400)]
gdb: remove target_gdbarch

This function is just a wrapper around the current inferior's gdbarch.
I find that having that wrapper just obscures where the arch is coming
from, and that it's often used as "I don't know which arch to use so
I'll use this magical target_gdbarch function that gets me an arch" when
the arch should in fact come from something in the context (a thread,
objfile, symbol, etc).  I think that removing it and inlining
`current_inferior ()->arch ()` everywhere will make it a bit clearer
where that arch comes from and will trigger people into reflecting
whether this is the right place to get the arch or not.

Change-Id: I79f14b4e4934c88f91ca3a3155f5fc3ea2fadf6b
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agogdb: move set_target_gdbarch to inferior::set_arch
Simon Marchi [Fri, 29 Sep 2023 18:24:37 +0000 (14:24 -0400)]
gdb: move set_target_gdbarch to inferior::set_arch

set_target_gdbarch is basically a setter for the current inferior's
arch, that notifies other parts of GDB of the architecture change.  Move
the code of set_target_gdbarch to the inferior::set_arch method.

Add gdbarch_initialized_p, so we can keep the assertion.

Change-Id: I276e28eafd4740c94bc5233c81a86c01b4a6ae90
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agogdb: add inferior parameter to architecture_changed observable
Simon Marchi [Fri, 29 Sep 2023 18:24:36 +0000 (14:24 -0400)]
gdb: add inferior parameter to architecture_changed observable

This is to make it explicit which inferior's architecture just changed,
and that the callbacks should not assume it is the current inferior.

Update the only caller, pyuw_on_new_gdbarch, to add the parameter,
although it doesn't use it currently.

Change-Id: Ieb7f21377e4252cc6e7b1ce2cc812cd1a1840e0e
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agogdb: add inferior::{arch, set_arch}
Simon Marchi [Fri, 29 Sep 2023 18:24:35 +0000 (14:24 -0400)]
gdb: add inferior::{arch, set_arch}

Make the inferior's gdbarch field private, and add getters and setters.
This helped me by allowing putting breakpoints on set_arch to know when
the inferior's arch was set.  A subsequent patch in this series also
adds more things in set_arch.

Change-Id: I0005bd1ef4cd6b612af501201cec44e457998eec
Reviewed-By: John Baldwin <jhb@FreeBSD.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>
13 months agoasan: buffer overflow in elf32_arm_get_synthetic_symtab
Alan Modra [Tue, 10 Oct 2023 07:48:18 +0000 (18:18 +1030)]
asan: buffer overflow in elf32_arm_get_synthetic_symtab

Guard against fuzzed files where .plt size isn't commensurate with
plt relocations.

* elf32-arm.c (elf32_arm_plt0_size): Add data_size param.
Return -1 if data_size is too small.
(elf32_arm_plt_size): Likewise.  Delete temp var.  Formatting.
(elf32_arm_get_synthetic_symtab): Adjust to suit.

13 months agoasan: null dereference in read_and_display_attr_value
Alan Modra [Tue, 10 Oct 2023 07:48:07 +0000 (18:18 +1030)]
asan: null dereference in read_and_display_attr_value

This fixes multiple places in read_and_display_attr_value dealing with
range and location lists that can segfault when debug_info_p is NULL.
Fuzzed object files can contain arbitrary DW_FORMs.

* dwarf.c (read_and_display_attr_value): Don't dereference NULL
debug_info_p.

13 months agoasan: invalid free in bfd_init_section_compress_status
Alan Modra [Tue, 10 Oct 2023 07:46:38 +0000 (18:16 +1030)]
asan: invalid free in bfd_init_section_compress_status

With specially crafted compressed sections, it's possible to tickle a
problem when decompressing:  If the compression headers says the
uncompressed size is zero, this will be seen as an error return from
bfd_compress_section_contents.  On errors the caller should free any
malloc'd input buffers, but this isn't really an error and the section
contents have been updated to a bfd_alloc'd buffer which can't be
freed.

* compress.c (bfd_compress_section_contents): Return -1 as error
rather than 0.
(bfd_init_section_compress_status, bfd_compress_section): Adjust.

13 months agogdb/python: implement support for sending custom MI async notifications
Jan Vrany [Tue, 10 Oct 2023 10:22:56 +0000 (11:22 +0100)]
gdb/python: implement support for sending custom MI async notifications

This commit adds a new Python function, gdb.notify_mi, that can be used
to emit custom async notification to MI channel.  This can be used, among
other things, to implement notifications about events MI does not support,
such as remote connection closed or register change.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
Approved-By: Andrew Burgess <aburgess@redhat.com>