binutils-gdb.git
2 years agogas: NEWS: Add the RISC-V features for 2.38
Palmer Dabbelt [Wed, 24 Aug 2022 20:19:10 +0000 (13:19 -0700)]
gas: NEWS: Add the RISC-V features for 2.38

2 years agogas: NEWS: Add the RISC-V features for 2.37
Palmer Dabbelt [Wed, 24 Aug 2022 20:19:09 +0000 (13:19 -0700)]
gas: NEWS: Add the RISC-V features for 2.37

2 years agogas: NEWS: Add the RISC-V features for 2.36
Palmer Dabbelt [Wed, 24 Aug 2022 20:19:08 +0000 (13:19 -0700)]
gas: NEWS: Add the RISC-V features for 2.36

2 years agogas: NEWS: Add the RISC-V features for 2.35
Palmer Dabbelt [Wed, 24 Aug 2022 20:19:07 +0000 (13:19 -0700)]
gas: NEWS: Add the RISC-V features for 2.35

2 years agogas: NEWS: Add the RISC-V features for 2.31
Palmer Dabbelt [Wed, 24 Aug 2022 20:19:06 +0000 (13:19 -0700)]
gas: NEWS: Add the RISC-V features for 2.31

2 years agoPR11290, avr-ld "out of range error" is confusing
Alan Modra [Thu, 25 Aug 2022 06:27:02 +0000 (15:57 +0930)]
PR11290, avr-ld "out of range error" is confusing

Don't overload bfd_reloc_outofrange with what is really a domain error
(target at odd address), or an overflow.

PR 11290
* reloc.c (bfd_reloc_other): Correct comment.
* elf32-avr.c (avr_final_link_relocate): Return bfd_reloc_other
for unaligned reloc target values.  Return bfd_reloc_overflow
when stubs are too far away and when R_AVR_LDS_STS_16,
R_AVR_PORT6, or R_AVR_PORT5 overflow.
(elf32_avr_relocate_section): Report more descriptive relocation
errors.
* bfd-in2.h: Regenerate.

2 years agold: pe: Move the return type to a separate line from the function name
Martin Storsjö [Thu, 25 Aug 2022 06:49:59 +0000 (09:49 +0300)]
ld: pe: Move the return type to a separate line from the function name

This fixes the coding style of an old, preexisting function.

2 years agoPR10372, SH: ld test with sim/sh/run fails always
Alan Modra [Thu, 25 Aug 2022 02:54:39 +0000 (12:24 +0930)]
PR10372, SH: ld test with sim/sh/run fails always

PR 10372
* testsuite/ld-sh/start.s: Add _start sym.  Use trapa 34.  Create
an alloc .stack section.

2 years agoRe: LoongArch: ld: Fix bug not generate plt when link a dso
Alan Modra [Wed, 24 Aug 2022 23:53:59 +0000 (09:23 +0930)]
Re: LoongArch: ld: Fix bug not generate plt when link a dso

Fixes loongarch32-elf  +FAIL: medium jirl plt

* testsuite/ld-loongarch-elf/cmodel.exp: Don't run test when
no shared library support.

2 years agoAutomatic date update in version.in
GDB Administrator [Thu, 25 Aug 2022 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agold: pe: Make archive member file extension comparisons case insensitive when cross...
Martin Storsjö [Mon, 27 Sep 2021 08:20:24 +0000 (11:20 +0300)]
ld: pe: Make archive member file extension comparisons case insensitive when cross compiling too

On Windows, filename_cmp is case insensitive, but when cross compiling
with libraries that may contain members with uppercase file names, we
should keep those comparisons case insensitive when running the build
tools on other OSes too.

Also make the check for .def consistent with the other ones, fixing
out of bounds reads if file names are shorter than 4 characters.

2 years agogas: arm: handle multiple .directives on a single line (PR29519)
Richard Earnshaw [Wed, 24 Aug 2022 16:08:07 +0000 (17:08 +0100)]
gas: arm: handle multiple .directives on a single line (PR29519)

There's been a long-standing bug in the arm backend where
target-specific directives did not correctly handle lines with
multiple statements.  This patch fixes the issue for all the cases
I've been able to find.

It does result in a slight change in behaviour when errors are
encountered: where, previously,

  .cpu arm6 bar

would result in the error "junk at end of line, first unrecognized
character is `b'", we now get "unknown cpu `arm6 bar'", which I think
is slightly more helpful anyway.  Similar errors are generated for
other directives.

2 years agogdb: new 'maint print frame-id' command
Andrew Burgess [Tue, 16 Aug 2022 15:48:01 +0000 (16:48 +0100)]
gdb: new 'maint print frame-id' command

When debugging a certain class of GDB bug, I often end up wanting to
know what GDB thinks the frame-id is in a particular frame.  It's
not too hard to pull this from some debug output, but I thought it
might be nice if there was a maintenance command that could tell us.

This commit adds 'maint print frame-id' which prints the frame-id of
the currently selected frame.  You can also pass a frame level number
to find the frame-id for a specific frame.

There's a new test too.

2 years agoLoongArch: ld: Fix bug not generate plt when link a dso
liuzhensong [Fri, 19 Aug 2022 07:04:45 +0000 (15:04 +0800)]
LoongArch: ld: Fix bug not generate plt when link a dso

  Fix the bug that can not generate func@plt
  when linking a undefined function with cmodel=medium.
  Add testcase.

  bfd/
    * elfnn-loongarch.c
  ld/testsuite/ld-loongarch-elf/
    * cmodel-libjirl.dd
    * cmodel.exp
    * libjirl.s

2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 24 Aug 2022 00:00:10 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoSHT_RELR sh_link and sh_info
Alan Modra [Tue, 23 Aug 2022 11:20:18 +0000 (20:50 +0930)]
SHT_RELR sh_link and sh_info

I don't think it makes any sense for a SHT_RELR section to specify a
symbol table with sh_link.  SHT_RELR relocations don't use symbols.
There is no real need to specify sh_info either, SHT_RELR is not for
relocatable object files.  Anyway, fuzzers of course don't restrict
themselves to even half-sensible objects.  So they found a hole in
objcopy using a non-alloc SHT_RELR in an ET_EXEC.  In that case BFD
set up the SHT_RELR section as if it were a SHT_REL against the
sh_info target section.  When it came to reading in the target section
relocs, the count was horribly wrong which caused a buffer overflow.

* elf.c (bfd_section_from_shdr <SHT_RELR>): Always just make a
normal section, don't treat it as a reloc section.

2 years agoRe: bfd_elf_set_group_contents assertion
Alan Modra [Tue, 23 Aug 2022 08:54:36 +0000 (18:24 +0930)]
Re: bfd_elf_set_group_contents assertion

Further to commit 7744e3278b9f.

* elf.c (bfd_elf_set_group_contents): Restrict loc in loop writing
contents, and add another assertion.

2 years agoAdd an option to dlltool to allow the creation of deterministic libraries.
Nick Clifton [Tue, 23 Aug 2022 08:54:52 +0000 (09:54 +0100)]
Add an option to dlltool to allow the creation of deterministic libraries.

PR 29489
* dlltool.c (deterministic): New variable.
(gen_lib_file): If deterministic is true set the
BFD_DETERMINISTIC_OUTPUT flag.
(usage): Mention --deterministic-libraries and
--non-deterministic-libraries.
(long_options): Add new options.
(main): Parse new options.
* doc/binutils.texi: Document the new options.
* NEWS: Mention the new feature.

2 years agobinutils: Updated my email address.
Nelson Chu [Tue, 23 Aug 2022 05:07:01 +0000 (13:07 +0800)]
binutils: Updated my email address.

binutils/
    * MAINTAINERS (RISC-V): Updated my email address.

2 years agoAutomatic date update in version.in
GDB Administrator [Tue, 23 Aug 2022 00:00:12 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoImplement target async for Windows
Tom Tromey [Tue, 26 Jul 2022 15:10:58 +0000 (09:10 -0600)]
Implement target async for Windows

This implements target async for Windows.  The basic idea is to have
the worker thread block in WaitForDebugEvent, then notify the event
loop when an event is seen.  In a few situations, this blocking
behavior is undesirable, so the functions passed to do_synchronously
are changed to return a boolean indicating which behavior is needed.

2 years agoMove some Windows operations to worker thread
Tom Tromey [Tue, 19 Jul 2022 19:37:34 +0000 (13:37 -0600)]
Move some Windows operations to worker thread

On Windows, certain debugging APIs can only be called from the thread
that started (or attached) to the inferior.  Also, there is no way on
Windows to wait for a debug event in addition to other events.
Therefore, in order to implement target async for Windows, gdb will
have to call some functions in a worker thread.

This patch implements the worker thread and moves the necessary
operations there.  Target async isn't yet implemented, so this patch
does not cause any visible changes.

2 years agoAvoid crash with Ravenscar tasks
Tom Tromey [Fri, 5 Aug 2022 16:43:48 +0000 (10:43 -0600)]
Avoid crash with Ravenscar tasks

When using Ravenscar, gdb can crash if the user sets a breakpoint very
early in task startup.  This happens because gdb thinks the runtime is
initialized, but in practice the particular task isn't sufficiently
initialized.  This patch avoids the issue by turning an assertion into
an early return.

I tested this using the AdaCore internal test suite.  I don't know how
to test Ravenscar using the FSF test suite.

2 years agoFix compile time warning from Clang about error messages not being printed safely.
Nick Clifton [Mon, 22 Aug 2022 15:19:17 +0000 (16:19 +0100)]
Fix compile time warning from Clang about error messages not being printed safely.

2 years agoHave readelf warn users if it is asked to decode a LLVM bitcode file or a golang...
Nick Clifton [Mon, 22 Aug 2022 10:15:40 +0000 (11:15 +0100)]
Have readelf warn users if it is asked to decode a LLVM bitcode file or a golang object file.

* readelf.c (check_magic_number): New function.  Checks the magic
bytes at the start of a file.  If they are not the ELF format
magic values, then attempts to generate a helpful error message.
(process_file_header): Call check_magic_number.

2 years agoAdd OpenBSD AArch64 Little Endian BFD support.
Frederic Cambus [Mon, 22 Aug 2022 09:19:42 +0000 (10:19 +0100)]
Add OpenBSD AArch64 Little Endian BFD support.

* config.bfd (aarch64-*-openbsd*): Add target.

2 years agoLoongArch: gas: add support using constant variable in instructions.
tangxiaolin [Wed, 17 Aug 2022 07:12:43 +0000 (15:12 +0800)]
LoongArch: gas: add support using constant variable in instructions.

        Instructions that can load immediate support using constant
        variable like ".equ var, 123    li.w/d resgister, var".

gas/
        * config/loongarch-parse.y
        * config/tc-loongarch.c

        Add four testcases.One is a program using constant variable,
        one test using label is unsupported, and another two test
        almost instructions that can load immediate.

gas/
        * testsuite/gas/loongarch/li.d
        * testsuite/gas/loongarch/li.s
        * testsuite/gas/loongarch/imm_ins_label-fail.d
        * testsuite/gas/loongarch/imm_ins_label-fail.l
        * testsuite/gas/loongarch/imm_ins_label-fail.s
        * testsuite/gas/loongarch/imm_ins.d
        * testsuite/gas/loongarch/imm_ins.s
        * testsuite/gas/loongarch/imm_ins_32.d
        * testsuite/gas/loongarch/imm_ins_32.s

2 years agoAutomatic date update in version.in
GDB Administrator [Mon, 22 Aug 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoFix crash in gdbpy_parse_register_id
Tom Tromey [Wed, 27 Apr 2022 21:22:56 +0000 (15:22 -0600)]
Fix crash in gdbpy_parse_register_id

I noticed that gdbpy_parse_register_id would assert if passed a Python
object of a type it was not expecting.  The included test case shows
this crash.  This patch fixes the problem and also changes
gdbpy_parse_register_id to be more "Python-like" -- it always ensures
the Python error is set when it fails, and the callers now simply
propagate the existing exception.

2 years agoAutomatic date update in version.in
GDB Administrator [Sun, 21 Aug 2022 00:00:11 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agosymbols for bfd_simple_get_relocated_section_contents
Alan Modra [Sat, 20 Aug 2022 08:06:41 +0000 (17:36 +0930)]
symbols for bfd_simple_get_relocated_section_contents

If symbols are provided by the caller of this function they are
passed on to bfd_get_relocated_section_contents.  No surprises there.
It gets a little weird if they are not provided.  In that case they
are read from the bfd by _bfd_generic_link_add_symbols, and global
symbols are added to the generic linker hash table.  Global symbols
are not added to the linker hash table if symbols *are* provided.  Now
the linker hash table symbols are not used by the generic
bfd_get_relocated_section_conents, and also not by most target
versions when called from bfd_simple_get_relocated_section_contents
except for symbols like "_gp".  So it mostly doesn't matter whether
symbols are in the linker hash table, but it's odd that there is a
difference.  We could always add them, but I'm inclined to think that
is unnecessary work so this patch always leaves them out.

Also, symbols are canonicalized and written into a malloc'd buffer.
The buffer isn't freed, see commit 8e16317ca5eb.  I don't know whether
that matters any more, but in any case I can't see why we need another
copy of the symbols when _bfd_generic_link_read_symbols has already
cached symbols.

* simple.c (bfd_simple_get_relocated_section_contents): If not
provided, read symbols via bfd_generic_link_read_symbols.  Do
not create another copy of symbols.  Tidy failure exits.
Minor tidy of bfd_get_relocated_section_contents and
bfd_get_full_section_contents arguments.

2 years agoRe: Missing linking test case for pe dll using a def file
Alan Modra [Sat, 20 Aug 2022 07:51:08 +0000 (17:21 +0930)]
Re: Missing linking test case for pe dll using a def file

Fixes this when cross-compiling from x86_64-linux
x86_64-w64-mingw32  +FAIL: compiling shared lib fastcall/stdcall

* testsuite/ld-pe/pe-run2-def.exp (test_direct2_link_dll_def):
Use CC_FOR_TARGET and CFLAGS_FOR_TARGET rather than CC and CFLAGS.

2 years agoAutomatic date update in version.in
GDB Administrator [Sat, 20 Aug 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agogdb_do_one_event: use integer test syntax
Patrick Monnerat [Fri, 19 Aug 2022 14:37:57 +0000 (16:37 +0200)]
gdb_do_one_event: use integer test syntax

Timeout is an int, not a bool.

2 years agoRemove two initialization functions
Tom Tromey [Sun, 19 Jun 2022 20:59:32 +0000 (14:59 -0600)]
Remove two initialization functions

I noticed a couple of initialization functions that aren't really
needed, and that currently require explicit calls in gdb_init.  This
patch removes these functions, simplifying gdb a little.

Regression tested on x86-64 Fedora 34.

2 years agogdb/testsuite: re-compile entry-value-typedef .S files with -fPIE
Simon Marchi [Fri, 19 Aug 2022 14:12:36 +0000 (10:12 -0400)]
gdb/testsuite: re-compile entry-value-typedef .S files with -fPIE

As Luis pointed out here [1], the AArch64 variant of the test doesn't
work on systems that use PIE by default.  For example, on this Debian
11:

    $ make check TESTS="gdb.dwarf2/entry-value-typedef.exp"
    gdb compile failed, /usr/bin/ld: /tmp/ccJE8ZSr.o: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `_ZNSsD1Ev@@GLIBCXX_3.4' which may bind externally can not be used when making a shared object; recompile with -fPIC
    /usr/bin/ld: /tmp/ccJE8ZSr.o(.text+0x38): unresolvable R_AARCH64_ADR_PREL_PG_HI21 relocation against symbol `_ZNSsD1Ev@@GLIBCXX_3.4'

This is because entry-value-typedef-aarch64.S was generated on an old
system that does not generate position-independent code by default, but
the system the test runs on tries to link the test executable as
position-independent.  Fix this by regenerating the same binary on the
same system as the original one, but with -fPIE this time.  Do the same
for the amd64 binary, although this one was already position-independent
so the generated code doesn't change.

With this patch applied, the test passes on the Debian 11 AArch64
system.

[1] https://sourceware.org/pipermail/gdb-patches/2022-August/191462.html

Change-Id: I68d55adaa56a7a3eddb0c13980b1a98b791f8144

2 years agogdb, testsuite: Adapt gdb.base/callfuncs.exp for new clang warning.
Felix Willgerodt [Fri, 3 Jun 2022 12:26:41 +0000 (14:26 +0200)]
gdb, testsuite: Adapt gdb.base/callfuncs.exp for new clang warning.

Clang 15.0.0 enabled the warning for deprecated non-prototype functions
by default: https://reviews.llvm.org/D122895
Callfuncs.exp is impacted and won't run due to new warnings:

callfuncs.c:339:5: warning: a function declaration without a prototype is
deprecated in all versions of C and is not supported in C2x
[-Wdeprecated-non-prototype]
int t_float_values (float_arg1, float_arg2)

This patch disables those warnings with -Wno-deprecated-non-prototype.
Removing the test for deprecated syntax would also be an option. But I will
leave that up for others to decide/implement.

2 years agogdb, testsuite: Enable testcases that suppress specific warnings, for icc/icx.
Felix Willgerodt [Mon, 18 Jul 2022 08:55:18 +0000 (10:55 +0200)]
gdb, testsuite: Enable testcases that suppress specific warnings, for icc/icx.

To cite gdb.exp:
Some C/C++ testcases unconditionally pass -Wno-foo as additional
options to disable some warning.  That is OK with GCC, because
by design, GCC accepts any -Wno-foo option, even if it doesn't
support -Wfoo.  Clang however warns about unknown -Wno-foo by
default, unless you pass -Wno-unknown-warning-option as well.
We do that here, so that individual testcases don't have to
worry about it.

This patch adds the same option that already exists for clang for icx and
adds the equivalent icc option.

2 years agogdb: LoongArch: Handle variadic arguments
Tiezhu Yang [Fri, 19 Aug 2022 00:56:11 +0000 (08:56 +0800)]
gdb: LoongArch: Handle variadic arguments

According to LoongArch ELF ABI specification [1], variadic arguments
are passed in GARs in the same manner as named arguments. And after
a variadic argument has been passed on the stack, all future arguments
will also be passed on the stack, i.e., the last argument register may
be left unused due to the aligned register pair rule. long double data
tpye is passed in an aligned GAR pair, the first register in the pair
is even-numbered.

[1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
2 years agoloongarch64_pei_vec garbage in objcopy'd relocs
Alan Modra [Fri, 19 Aug 2022 00:53:11 +0000 (10:23 +0930)]
loongarch64_pei_vec garbage in objcopy'd relocs

Like commit a9c09a3667cc, but for loongarch64.

* coff-loongarch64.c (SWAP_IN_RELOC_OFFSET): Define.
(SWAP_OUT_RELOC_OFFSET): Define.

2 years agoAutomatic date update in version.in
GDB Administrator [Fri, 19 Aug 2022 00:00:09 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agogprofng: fix bug 29479 Collection fails when built without java support
Vladimir Mezentsev [Thu, 18 Aug 2022 02:55:23 +0000 (19:55 -0700)]
gprofng: fix bug 29479 Collection fails when built without java support

gprofng/ChangeLog
2022-08-17  Vladimir Mezentsev  <vladimir.mezentsev@oracle.com>

PR gprofng/29479
* libcollector/collector.c: Add #if defined(GPROFNG_JAVA_PROFILING) for
java specific code.
* libcollector/unwind.c: Likewise.

2 years agogdb: call check_typedef at beginning of dwarf_expr_context::fetch_result
Simon Marchi [Thu, 28 Jul 2022 01:34:22 +0000 (21:34 -0400)]
gdb: call check_typedef at beginning of dwarf_expr_context::fetch_result

Bug 29374 shows this crash:

    $ ./gdb -nx --data-directory=data-directory -q -batch -ex "catch throw" -ex r -ex bt a.out
    ...
    /home/simark/src/binutils-gdb/gdb/../gdbsupport/array-view.h:217: internal-error: copy: Assertion `dest.size () == src.size ()' failed.

The backtrace is:

    #0  internal_error (file=0x5555606504c0 "/home/simark/src/binutils-gdb/gdb/../gdbsupport/array-view.h", line=217, fmt=0x55556064b700 "%s: Assertion `%s' failed.") at /home/simark/src/binutils-gdb/gdbsupport/errors.cc:51
    #1  0x000055555d41c0bb in gdb::copy<unsigned char const, unsigned char> (src=..., dest=...) at /home/simark/src/binutils-gdb/gdb/../gdbsupport/array-view.h:217
    #2  0x000055555deef28c in dwarf_expr_context::fetch_result (this=0x7fffffffb830, type=0x621007a86830, subobj_type=0x621007a86830, subobj_offset=0, as_lval=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1040
    #3  0x000055555def0015 in dwarf_expr_context::evaluate (this=0x7fffffffb830, addr=0x62f00004313e "0", len=1, as_lval=false, per_cu=0x60b000069550, frame=0x621007c9e910, addr_info=0x0, type=0x621007a86830, subobj_type=0x621007a86830, subobj_offset=0) at /home/simark/src/binutils-gdb/gdb/dwarf2/expr.c:1091
    #4  0x000055555e084327 in dwarf2_evaluate_loc_desc_full (type=0x621007a86830, frame=0x621007c9e910, data=0x62f00004313e "0", size=1, per_cu=0x60b000069550, per_objfile=0x613000006080, subobj_type=0x621007a86830, subobj_byte_offset=0, as_lval=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1485
    #5  0x000055555e0849e2 in dwarf2_evaluate_loc_desc (type=0x621007a86830, frame=0x621007c9e910, data=0x62f00004313e "0", size=1, per_cu=0x60b000069550, per_objfile=0x613000006080, as_lval=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1529
    #6  0x000055555e0828c6 in dwarf_entry_parameter_to_value (parameter=0x621007a96e58, deref_size=0x0, type=0x621007a86830, caller_frame=0x621007c9e910, per_cu=0x60b000069550, per_objfile=0x613000006080) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1235
    #7  0x000055555e082f55 in value_of_dwarf_reg_entry (type=0x621007a86890, frame=0x621007acc510, kind=CALL_SITE_PARAMETER_DWARF_REG, kind_u=...) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1332
    #8  0x000055555e083449 in value_of_dwarf_block_entry (type=0x621007a86890, frame=0x621007acc510, block=0x61e000033568 "T\004\205\001\240\004\004\243\001T\237\004\240\004\261\004\001T\004\261\004\304\005\004\243\001T\237\004\304\005\310\005\001T\004\310\005\311\005\004\243\001T\237", block_len=1) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:1365
    #9  0x000055555e094d40 in loclist_read_variable_at_entry (symbol=0x621007a99bd0, frame=0x621007acc510) at /home/simark/src/binutils-gdb/gdb/dwarf2/loc.c:3889
    #10 0x000055555f5192e0 in read_frame_arg (fp_opts=..., sym=0x621007a99bd0, frame=0x621007acc510, argp=0x7fffffffbf20, entryargp=0x7fffffffbf60) at /home/simark/src/binutils-gdb/gdb/stack.c:559
    #11 0x000055555f51c352 in print_frame_args (fp_opts=..., func=0x621007a99ad0, frame=0x621007acc510, num=-1, stream=0x6030000bad90) at /home/simark/src/binutils-gdb/gdb/stack.c:887
    #12 0x000055555f521919 in print_frame (fp_opts=..., frame=0x621007acc510, print_level=1, print_what=LOCATION, print_args=1, sal=...) at /home/simark/src/binutils-gdb/gdb/stack.c:1390
    #13 0x000055555f51f22e in print_frame_info (fp_opts=..., frame=0x621007acc510, print_level=1, print_what=LOCATION, print_args=1, set_current_sal=0) at /home/simark/src/binutils-gdb/gdb/stack.c:1116
    #14 0x000055555f526c6d in backtrace_command_1 (fp_opts=..., bt_opts=..., count_exp=0x0, from_tty=0) at /home/simark/src/binutils-gdb/gdb/stack.c:2079
    #15 0x000055555f527ae5 in backtrace_command (arg=0x0, from_tty=0) at /home/simark/src/binutils-gdb/gdb/stack.c:2198

The problem is that the type that gets passed down to
dwarf_expr_context::fetch_result (the type of a variable of which we're
trying to read the entry value) is a typedef whose size has never been
computed yet (check_typedef has never been called on it).  As we get in
the DWARF_VALUE_STACK case (line 1028 of dwarf2/expr.c), the `len`
variable is therefore set to 0, instead of the actual type length.  We
then call allocate_value on subobj_type, which does call check_typedef,
so the length of the typedef gets filled in at that point.  We end up
passing to the copy function a source array view of length 0 and a
target array view of length 4, and the assertion fails.

Fix this by calling check_typedef on both type and subobj_type at the
beginning of fetch_result.

I tried writing a test for this using the DWARF assembler, but I haven't
succeeded.  It's possible that we need to get into this specific code
path (value_of_dwarf_reg_entry and all) to manage to get to
dwarf_expr_context::fetch_result with a typedef type that has never been
resolved.  In all my attempts, the typedef would always be resolved
already, so the bug wouldn't show up.

As a fallback, I made a gdb.dwarf2 test with compiler-generated .S
files.  I don't particularly like those, but I think it's better than no
test.  The .cpp source code is the smallest reproducer I am able to make
from the reproducer given in the bug (thanks to Pedro for suggestions on
how to minimize it further than I had).  Since I tested on both amd64
and aarch64, I added versions of the test for these two architectures.

Change-Id: I182733ad08e34df40d8bcc47af72c482fabf4900
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29374

2 years ago[aarch64] Remove handling of ADR/ADRP from prologue analyzer
Luis Machado [Tue, 16 Aug 2022 08:08:44 +0000 (09:08 +0100)]
[aarch64] Remove handling of ADR/ADRP from prologue analyzer

As reported by Tom in https://sourceware.org/pipermail/gdb-patches/2022-August/191357.html,
the aarch64 prologue analyzer considers the adrp instruction in the
gdb.dwarf2/dw2-dir-file-name.exp testcase to be part of a prologue.

The function has no prologue though, and it only loads the volatile variable
from memory.  GDB should not skip any instructions in this case.

Doing some archaeology, it seems handling for adr/adrp in prologues was
included with the original aarch64 port.  It might've been an oversight.

In the particular case of gdb.dwarf2/dw2-dir-file-name.exp, the analyzer skips
a couple instructions and leaves us in a nice spot where the address to the
variable "v" is already in w0. But no prologues exists.

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

2 years agoChange bookmark allocation
Tom Tromey [Sun, 12 Jun 2022 23:26:33 +0000 (17:26 -0600)]
Change bookmark allocation

This changes how bookmarks are allocated and stored, replacing a
linked list with a vector and removing some ALL_* iterator macros.
Regression tested on x86-64 Fedora 34.

2 years agoAdd test for AArch64 Scalable Vector Extension
Thiago Jung Bauermann [Thu, 18 Aug 2022 12:43:32 +0000 (13:43 +0100)]
Add test for AArch64 Scalable Vector Extension

It exercises a bug that GDB previously had where it would lose track of
some registers when the inferior changed its vector length.

It also checks that the vg register and the size of the z0-z31 registers
correctly reflect the new vector length.

2 years agoFix thread's gdbarch when SVE vector length changes
Thiago Jung Bauermann [Thu, 18 Aug 2022 12:42:55 +0000 (13:42 +0100)]
Fix thread's gdbarch when SVE vector length changes

When the inferior program changes the SVE length, GDB can stop tracking
some registers as it obtains the new gdbarch that corresponds to the
updated length:

  Breakpoint 1, do_sve_ioctl_test () at sve-ioctls.c:44
  44              res = prctl(PR_SVE_SET_VL, i, 0, 0, 0, 0);
  (gdb) print i
  $2 = 32
  (gdb) info registers
          ⋮
  [ snip registers x0 to x30 ]
          ⋮
  sp             0xffffffffeff0      0xffffffffeff0
  pc             0xaaaaaaaaa8ac      0xaaaaaaaaa8ac <do_sve_ioctl_test+112>
  cpsr           0x60000000          [ EL=0 BTYPE=0 C Z ]
  fpsr           0x0                 0
  fpcr           0x0                 0
  vg             0x8                 8
  tpidr          0xfffff7fcb320      0xfffff7fcb320
  (gdb) next
  45              if (res < 0) {
  (gdb) info registers
          ⋮
  [ snip registers x0 to x30 ]
          ⋮
  sp             0xffffffffeff0      0xffffffffeff0
  pc             0xaaaaaaaaa8cc      0xaaaaaaaaa8cc <do_sve_ioctl_test+144>
  cpsr           0x200000            [ EL=0 BTYPE=0 SS ]
  fpsr           0x0                 0
  fpcr           0x0                 0
  vg             0x4                 4
  (gdb)

Notice that register tpidr disappeared when vg (which holds the vector
length) changed from 8 to 4.  The tpidr register is provided by the
org.gnu.gdb.aarch64.tls feature.

This happens because the code that searches for a new gdbarch to match the
new vector length in aarch64_linux_nat_target::thread_architecture doesn't
take into account the features present in the target description associated
with the previous gdbarch.  This patch makes it do that.

Since the id member of struct gdbarch_info is now unused, it's removed.

2 years agoMissing linking test case for pe dll using a def file.
Ralf Habacker [Thu, 18 Aug 2022 10:58:57 +0000 (11:58 +0100)]
Missing linking test case for pe dll using a def file.

PR 28362
* testsuite/ld-pe/pe-run2-def.exp: New file.

2 years agogdbsupport/event-loop: add a timeout parameter to gdb_do_one_event
Patrick Monnerat [Fri, 15 Jul 2022 15:18:32 +0000 (17:18 +0200)]
gdbsupport/event-loop: add a timeout parameter to gdb_do_one_event

Since commit b2d8657, having a per-interpreter event/command loop is not
possible anymore.

As Insight uses a GUI that has its own event loop, gdb and GUI event
loops have then to be "merged" (i.e.: work together). But this is
problematic as gdb_do_one_event is not aware of this alternate event
loop and thus may wait forever.

A solution is to delegate GUI events handling to the gdb events handler.
Insight uses Tck/Tk as GUI and the latter offers a "notifier" feature to
implement such a delegation. The Tcl notifier spec requires the event wait
function to support a timeout parameter. Unfortunately gdb_do_one_event
does not feature such a parameter.
This timeout cannot be implemented externally with a gdb timer, because
it would become an event by itself and thus can cause a legitimate event to
be missed if the timeout is 0.
Tcl implements "idle events" that are (internally) triggered only when no
other event is pending. For this reason, it can call the event wait function
with a 0 timeout quite often.

This patch implements a wait timeout to gdb_do_one_event. The initial
pending events monitoring is performed as before without the possibility
to enter a wait state. If no pending event has been found during this
phase, a timer is then created for the given timeout in order to re-use
the implemented timeout logic and the event wait is then performed.
This "internal" timer only limits the wait time and should never be triggered.
It is deleted upon gdb_do_one_event exit.

The new parameter defaults to "no timeout" (-1): as it is used by Insight
only, there is no need to update calls from the gdb source tree.

2 years agogdb: add Patrick Monnerat to gdb/MAINTAINERS
Patrick Monnerat [Thu, 18 Aug 2022 09:30:13 +0000 (11:30 +0200)]
gdb: add Patrick Monnerat to gdb/MAINTAINERS

2 years agox86: move / quiesce pre-386 non-16-bit warning
Jan Beulich [Thu, 18 Aug 2022 07:20:05 +0000 (09:20 +0200)]
x86: move / quiesce pre-386 non-16-bit warning

Emitting this warning for every insn, including ones having actual
errors, is annoying. Introduce a boolean variable to emit the warning
just once on the first insn after .arch may have changed the things, and
move the warning to output_insn(). (I didn't want to go as far as
checking whether the .arch actually turned off the i386 bit, but doing
so would be an option.)

2 years agox86: insert "no error" enumerator in i386_error enumeration
Jan Beulich [Thu, 18 Aug 2022 07:19:34 +0000 (09:19 +0200)]
x86: insert "no error" enumerator in i386_error enumeration

The value of zero would better not indicate any error, but rather hit
the abort() at the top of the consuming switch().

2 years agoAutomatic date update in version.in
GDB Administrator [Thu, 18 Aug 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoGDB/testsuite: Fix PARAM_ZUINTEGER reported for PARAM_ZUINTEGER_UNLIMITED
Maciej W. Rozycki [Wed, 17 Aug 2022 21:59:11 +0000 (22:59 +0100)]
GDB/testsuite: Fix PARAM_ZUINTEGER reported for PARAM_ZUINTEGER_UNLIMITED

Correctly report PARAM_ZUINTEGER_UNLIMITED rather than PARAM_ZUINTEGER
in testing a Python parameter of the PARAM_ZUINTEGER_UNLIMITED type.

2 years agobfd_elf_set_group_contents assertion
Alan Modra [Wed, 17 Aug 2022 07:44:16 +0000 (17:14 +0930)]
bfd_elf_set_group_contents assertion

objcopy of broken SHT_GROUP sections shouldn't write garbage.

* elf.c (bfd_elf_set_group_contents): If number of entries is
unexpected, fill out section with zeros.

2 years agotimeout in mmo_get_symbols
Alan Modra [Wed, 17 Aug 2022 06:42:26 +0000 (16:12 +0930)]
timeout in mmo_get_symbols

Fix mmo_get_byte to return a fail-safe value, not just on the first
call with a read error but on subsequent calls too.

* mmo.c (mmo_get_byte): Return the fail-safe value on every
call after a read error.

2 years agommo.c leak in mmo_make_section
Alan Modra [Wed, 17 Aug 2022 06:18:21 +0000 (15:48 +0930)]
mmo.c leak in mmo_make_section

* mmo.c (mmo_make_section): Alloc name using bfd_alloc.  Use
bfd_error_no_memory.
(mmo_decide_section): Check for NULL return from mmo_make_section.

2 years agoasan: heap buffer overflow in mmo_scan
Alan Modra [Wed, 17 Aug 2022 06:13:25 +0000 (15:43 +0930)]
asan: heap buffer overflow in mmo_scan

mmo_get_loc needs to handle arbitrary vma and size chunks.  Fuzzers
found that it wasn't working so well when the end of chunks were
getting close to address wrap-around.

* mmo.c (mmo_get_loc): Make "size" unsigned.  Avoid arithmetic
overflow when calculating whether range hits an existing chunk.

2 years agoelf.c tidy
Alan Modra [Wed, 17 Aug 2022 02:20:15 +0000 (11:50 +0930)]
elf.c tidy

Swap params of is_note, so they are section, segment like others used
in rewrite_elf_program_header.  Whitespace fixes, plus wrapping of
overlong lines.

2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 17 Aug 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agobfd: Define ___lc_codepage_func prototype for older MinGW-w64
Torbjörn SVENSSON [Tue, 16 Aug 2022 17:04:21 +0000 (18:04 +0100)]
bfd: Define ___lc_codepage_func prototype for older MinGW-w64

In commit 68e80d96a84282d547f3b3c1234c99009521630c, the usage of
___lc_codepage_func was introduced to determine the current encoding.

Prior to version 9.0 of MinGW-w64, the function prototype for
___lc_codepage_func was missing and trying to build BFD caused the
following error:

error: implicit declaration of function ‘___lc_codepage_func’

This changeset adds a conditonal definition of
___lc_codepage_func to allow a sucessful build with MinGW-w64.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2 years agoi386: Add MAX_OPERAND_BUFFER_SIZE
H.J. Lu [Tue, 16 Aug 2022 15:25:49 +0000 (08:25 -0700)]
i386: Add MAX_OPERAND_BUFFER_SIZE

When displaying operands, invalid opcodes may overflow operand buffer
due to additional styling characters.  Each style is encoded with 3
bytes.  Define MAX_OPERAND_BUFFER_SIZE for operand buffer size and
increase it from 100 bytes to 128 bytes to accommodate 9 sets of styles
in an operand.

gas/

PR binutils/29483
* testsuite/gas/i386/i386.exp: Run pr29483.
* testsuite/gas/i386/pr29483.d: New file.
* testsuite/gas/i386/pr29483.s: Likewise.

opcodes/

PR binutils/29483
* i386-dis.c (MAX_OPERAND_BUFFER_SIZE): New.
(obuf): Replace 100 with MAX_OPERAND_BUFFER_SIZE.
(staging_area): Likewise.
(op_out): Likewise.

2 years agogdb/riscv: fix gdb.arch/riscv-unwind-long-insn.exp on RV64
Andrew Burgess [Tue, 16 Aug 2022 15:52:08 +0000 (16:52 +0100)]
gdb/riscv: fix gdb.arch/riscv-unwind-long-insn.exp on RV64

I noticed that the gdb.arch/riscv-unwind-long-insn.exp test was
failing when run on a 64-bit RISC-V target.

The problem was that GDB was failing to stop after a finish command,
and was then running to an unexpected location.

The reason GDB failed to stop at the finish breakpoint was that the
frame-id of the inferior, when we reached the finish breakpoint,
didn't match the expected frame-id that was stored on the breakpoint.

The reason for this mismatch was that the assembler code that is
included in this test, was written only taking 32-bit RISC-V into
account, as a result, the $fp register was being corrupted, and this
was causing the frame-id mismatch.

Specifically, the $fp register would end up being sign-extended from
32 to 64 bits.  If the expected $fp value has some significant bits
above bit 31 then the computed and expected frame-ids would not match.

To fix this I propose merging the two .s files into a single .S file,
and making use of preprocessor macros to specialise the file for the
correct size of $fp.  There are plenty of existing tests that already
make use of preprocessor macros in assembler files, so I assume this
approach is fine.

Once I'd decided to make use of preprocessor macros to solve the 32/64
bit issue, then I figured I might as well merge the two test assembler
files, they only differed by a single instruction.

With this change in place I now see this test fully passing on 32 and
64 bit RISC-V targets.

2 years agogdb/testsuite: fix breakpoint script output in gdb.mi/mi-break.exp
Simon Marchi [Tue, 16 Aug 2022 14:41:47 +0000 (10:41 -0400)]
gdb/testsuite: fix breakpoint script output in gdb.mi/mi-break.exp

Commit 9db0d8536dbc ("gdb/mi: fix breakpoint script field output") fixed
the output of the script key in the MI breakpoint output, from

  script={"print 10","continue"}

to

  script=["print 10","continue"]

However, it missed updating this test case, which still tests for the
old (broken) form, causing:

    FAIL: gdb.mi/mi-break.exp: mi-mode=main: test_breakpoint_commands: breakpoint commands: check that commands are set (unexpected output)
    FAIL: gdb.mi/mi-break.exp: mi-mode=separate: test_breakpoint_commands: breakpoint commands: check that commands are set (unexpected output)

Update the test to expect the new form.

Change-Id: I174919d4eea53e96d914ca9bd1cf6f01c8de30b8

2 years agoUse strwinerror in gdb/windows-nat.c
Tom Tromey [Wed, 20 Jul 2022 18:46:08 +0000 (12:46 -0600)]
Use strwinerror in gdb/windows-nat.c

When working on windows-nat.c, it's useful to see an error message in
addition to the error number given by GetLastError.  This patch moves
strwinerror from gdbserver to gdbsupport, and then updates
windows-nat.c to use it.  A couple of minor changes to strwinerror
(constify the return type and use the ARRAY_SIZE macro) are also
included.

2 years agoRemove register_gdbarch_init
Tom Tromey [Sun, 31 Jul 2022 16:44:01 +0000 (10:44 -0600)]
Remove register_gdbarch_init

This removes the deprecated register_gdbarch_init in favor a default
argument to gdbarch_register.  Regression tested on x86-64 Fedora 34.

2 years agoPR29495, rewrite_elf_program_header looping
Alan Modra [Tue, 16 Aug 2022 07:32:24 +0000 (17:02 +0930)]
PR29495, rewrite_elf_program_header looping

This patch, in order of significance:
1) Replaces some macros with inline functions.
2) Those inline functions catch and avoid arithmetic overflows when
   comparing addresses.
3) When assigning sections to segments (IS_SECTION_IN_INPUT_SEGMENT)
   use bed->want_p_paddr_set_to_zero to decide whether lma vs p_paddr
   or vma vs p_vaddr should be tested.  When remapping, use the same
   test, and use is_note rather than the more restrictive
   IS_COREFILE_NOTE.

It's important that the later tests not be more restrictive.  If they
are it can lead to the situation triggered by the testcases, where a
section seemingly didn't fit and thus needed a new mapping.  It didn't
fit the new mapping either, and this repeated until memory exhausted.

PR 29495
* elf.c (SEGMENT_END, SECTION_SIZE, IS_CONTAINED_BY_VMA): Delete.
(IS_CONTAINED_BY_LMA, IS_NOTE, IS_COREFILE_NOTE): Delete.
(segment_size, segment_end, section_size): New inline function.
(is_contained_by, is_note): Likewise.
(rewrite_elf_program_header): Use new functions.

2 years agox86: shorten certain template names
Jan Beulich [Tue, 16 Aug 2022 07:15:15 +0000 (09:15 +0200)]
x86: shorten certain template names

Now that we can purge templates, let's use this to improve readability a
little by shortening a few of their names, making functionally similar
ones also have identical names in their multiple incarnations.

2 years agox86: template-ize certain vector conversion insns
Jan Beulich [Tue, 16 Aug 2022 07:14:39 +0000 (09:14 +0200)]
x86: template-ize certain vector conversion insns

Many of the vector conversion insns come with X/Y/Z suffixed forms, for
disambiguation purposes in AT&T syntax. All of these gorups follow
certain patterns. Introduce "xy" and "xyz" templates to reduce
redundancy.

To facilitate using a uniform name for both AVX and AVX512, further
introduce a means to purge a previously defined template: A standalone
<name> will be recognized to have this effect.

Note that in the course of the conversion VFPCLASSPH is properly split
to separate AT&T and Intel syntax forms, matching VFPCLASSP{S,D} and
yielding the intended "ambiguous operand size" diagnostic in Intel mode.

2 years agox86: template-ize vector packed byte/word integer insns
Jan Beulich [Tue, 16 Aug 2022 07:14:19 +0000 (09:14 +0200)]
x86: template-ize vector packed byte/word integer insns

Many of the vector integer insns come in byte/word element pairs. Most
of these pairs follow certain encoding patterns. Introduce a "bw"
template to reduce redundancy.

Note that in the course of the conversion
- the AVX VPEXTRW template which is not being touched needs to remain
  ahead of the new "combined" ones, as (a) this should be tried first
  when matching insns against templates and (b) its Load attributes
  requires it to be first,
- this add a benign/meaningless IgnoreSize attribute to the memory form
  of PEXTRB; it didn't seem worth avoiding this.

2 years agox86: re-order AVX512 S/G templates
Jan Beulich [Tue, 16 Aug 2022 07:13:12 +0000 (09:13 +0200)]
x86: re-order AVX512 S/G templates

The AVX2 gather ones are nicely grouped - do the same for the various
AVX512 scatter/gather ones. On the moved lines also convert EVex=<n> to
EVex<N>.

2 years agox86: template-ize vector packed dword/qword integer insns
Jan Beulich [Tue, 16 Aug 2022 07:12:30 +0000 (09:12 +0200)]
x86: template-ize vector packed dword/qword integer insns

Many of the vector integer insns come in dword/qword element pairs. Most
of these pairs follow certain encoding patterns. Introduce a "dq"
template to reduce redundancy.

Note that in the course of the conversion
- a few otherwise untouched templates are moved, so they end up next to
  their siblings),
- drop an unhelpful Cpu64 from the GPR form of VPBROADCASTQ, matching
  what we already have for KMOVQ - the diagnostic is better this way for
  insns with multiple forms (i.e. the same Cpu64 attributes on {,V}MOVQ,
  {,V}PEXTRQ, and  {,V}PINSRQ are useful to keep),
- this adds benign/meaningless IgnoreSize attributes to the GPR forms of
  KMOVD and VPBROADCASTD; it didn't seem worth avoiding this.

2 years agox86: template-ize packed/scalar vector floating point insns
Jan Beulich [Tue, 16 Aug 2022 07:11:59 +0000 (09:11 +0200)]
x86: template-ize packed/scalar vector floating point insns

The vast majority of vector FP insns comes in single/double pairs. Many
pairs follow certain encoding patterns. Introduce an "sd" template to
reduce redundancy. Similarly, to further cover similarities between
AVX512F and AVX512-FP16, introduce an "sdh" template.

For element-size Disp8 shift generalize i386-gen's broadcast size
determination, allowing Disp8MemShift to be specified without an operand
in the affected templated templates. While doing the adjustment also
eliminate an unhelpful (lost information) diagnostic combined with a use
after free in what is now get_element_size().

Note that in the course of the conversion
- the AVX512F form of VMOVUPD has a stray (leftover) Load attribute
  dropped,
- VMOVSH has a benign IgnoreSize added (the attribute is still strictly
  necessary for VMOVSD, and necessary for VMOVSS as long as we permit
  strange combinations like "-march=i286+avx"),
- VFPCLASSPH is properly split to separate AT&T and Intel syntax forms,
  matching VFPCLASSP{S,D}.

2 years agorevert "x86: Also pass -P to $(CPP) when processing i386-opc.tbl"
Jan Beulich [Tue, 16 Aug 2022 07:11:18 +0000 (09:11 +0200)]
revert "x86: Also pass -P to $(CPP) when processing i386-opc.tbl"

This reverts commit 384f368958f2a5bb083660e58e5f8a010e6ad429, which
broke i386-gen's emitting of diagnostics. As a replacement to address
the original issue of newer gcc no longer splicing lines when dropping
the line continuation backslashes, switch to using + as the line
continuation character, doing the line splicing in i386-gen.

2 years agoAutomatic date update in version.in
GDB Administrator [Tue, 16 Aug 2022 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoPR29362, some binutils memory leaks
Alan Modra [Mon, 15 Aug 2022 14:46:49 +0000 (00:16 +0930)]
PR29362, some binutils memory leaks

2022-08-16  Alan Modra  <amodra@gmail.com>
    Cunlong Li  <shenxiaogll@163.com>

PR 29362
* dwarf.c (free_debug_information): New function, extracted..
(free_debug_memory): ..from here.
(process_debug_info): Use it when before clearing out unit
debug_information.  Clear all fields.
* objcopy.c (delete_symbol_htabs): New function.
(main): Call it via xatexit.
(copy_archive): Free "dir".
* objdump.c (free_debug_section): Free reloc_info.

2 years agogdb/csky add unwinder for sigtramp frame when kernel 4.x and later
Jiangshuai Li [Mon, 15 Aug 2022 02:40:29 +0000 (10:40 +0800)]
gdb/csky add unwinder for sigtramp frame when kernel 4.x and later

When kernel veriosn >= V4.x, the characteristic values used to
determine whether it is a signal function call are:
    movi r7, 139
    trap 0

Registers are saved at (sp + CSKY_SIGINFO_OFFSET + CSKY_SIGINFO_SIZE
+ CSKY_UCONTEXT_SIGCONTEXT + CSKY_SIGCONTEXT_PT_REGS_TLS). The order
is described in csky_linux_rt_sigreturn_init_pt_regs.

2 years agoaarch64_pei_vec
Alan Modra [Mon, 15 Aug 2022 00:48:37 +0000 (10:18 +0930)]
aarch64_pei_vec

I know this target is just a skeleton, but let's not write out relocs
with uninitialised garbage.

* coff-aarch64.c (SWAP_IN_RELOC_OFFSET): Define.
(SWAP_OUT_RELOC_OFFSET): Define.

2 years agoAutomatic date update in version.in
GDB Administrator [Mon, 15 Aug 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agogdb/riscv: improve a comment about fcsr, fflags, and frm registers
Andrew Burgess [Thu, 11 Aug 2022 14:23:24 +0000 (15:23 +0100)]
gdb/riscv: improve a comment about fcsr, fflags, and frm registers

There's a comment in riscv-tdep.c that explains some of the background
about how we check for the fcsr, fflags, and frm registers within a
riscv target description.

This comment (and the functionality it describes) relates to how QEMU
advertises these registers within its target description.

Unfortunately, QEMU includes these three registers in both the fpu and
crs target description features.  To work around this GDB uses one of
the register declarations, and ignores the other, this means the GDB
user sees a single copy of each register, and things just work.

When I originally wrote the comment I thought it didn't matter which
copy of the register GDB selected, the fpu copy or the csr copy, so
long as we just used one of them.  The comment reflected this belief.

Upon further investigation, it turns out I was wrong.  GDB has to use
the csr copy of the register.  If GDB tries to use the register from
the fpu feature then QEMU will return an error when GDB tries to read
or write the register.

Luckily, the code within GDB (currently) will always select the csr
copy of the register, so nothing is broken, but the comment is wrong.
This commit updates the comment to better describe what is actually
going on.

Of course, I should probably also send a patch to QEMU to fix up the
target description that is sent to GDB.

2 years agogdb/nds32: update features/nds32.c
Andrew Burgess [Thu, 11 Aug 2022 14:57:26 +0000 (15:57 +0100)]
gdb/nds32: update features/nds32.c

After this commit:

  commit 7b7c365c5c663ffdfb2b3f696db35c23cdccd921
  Date:   Wed Sep 15 10:10:46 2021 +0200

      [bfd] Ensure unique printable names for bfd archs

The printable name field of the default nds32 bfd_arch_info changed
from 'n1h' to 'n1'.  As a consequence the generated feature file
within GDB should have been recreated.  Recreate it now.

2 years agoMove decode_location_spec to code_breakpoint
Tom Tromey [Sat, 21 May 2022 16:17:38 +0000 (10:17 -0600)]
Move decode_location_spec to code_breakpoint

breakpoint::decode_location_spec just asserts if called.  It turned
out to be relatively easy to remove this method from breakpoint and
instead move the base implementation to code_breakpoint.

2 years agoChange location_spec_to_sals to a method
Tom Tromey [Sat, 21 May 2022 16:00:00 +0000 (10:00 -0600)]
Change location_spec_to_sals to a method

location_spec_to_sals is only ever called for code breakpoints, so
make it a protected method there.

2 years agoChange breakpoint_re_set_default to a method
Tom Tromey [Sat, 21 May 2022 15:57:43 +0000 (09:57 -0600)]
Change breakpoint_re_set_default to a method

breakpoint_re_set_default is only ever called from breakpoint re_set
methods, so make it a protected method on code_breakpoint.

2 years agoAutomatic date update in version.in
GDB Administrator [Sun, 14 Aug 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoPR29482 - strip: heap-buffer-overflow
Alan Modra [Sat, 13 Aug 2022 06:02:47 +0000 (15:32 +0930)]
PR29482 - strip: heap-buffer-overflow

PR 29482
* coffcode.h (coff_set_section_contents): Sanity check _LIB.

2 years agoasan: NULL dereference in spu_elf_object_p
Alan Modra [Sat, 13 Aug 2022 04:39:24 +0000 (14:09 +0930)]
asan: NULL dereference in spu_elf_object_p

* elf32-spu.c (spu_elf_object_p): Don't dereference NULL
shdr->bfd_section.

2 years agoubsan: undefined shift in sign_extend
Alan Modra [Sat, 13 Aug 2022 04:37:31 +0000 (14:07 +0930)]
ubsan: undefined shift in sign_extend

* libhppa.h (sign_extend): Avoid undefined behaviour.

2 years agoasan: NULL dereference in som_set_reloc_info
Alan Modra [Sat, 13 Aug 2022 04:35:24 +0000 (14:05 +0930)]
asan: NULL dereference in som_set_reloc_info

* som.c (som_set_reloc_info): Ignore non-existent previous
fixup references.

2 years agoreadelf: print 0x0 as 0, and remove trailing spaces
Alan Modra [Fri, 12 Aug 2022 08:18:00 +0000 (17:48 +0930)]
readelf: print 0x0 as 0, and remove trailing spaces

This changes readelf output a little, removing the 0x prefix on hex
output when the value is 0, except in cases where a fixed field
width is shown.  %#010x is not a good replacement for 0x%08x.

2 years agoMake dwarf_vma uint64_t
Alan Modra [Fri, 12 Aug 2022 08:17:51 +0000 (17:47 +0930)]
Make dwarf_vma uint64_t

This replaces dwarf_vma, dwarf_size_type and dwarf_signed_vma with
uint64_t and int64_t everywhere.  The patch also gets rid of
DWARF_VMA_FMT since we can't use that with uint64_t, and all of the
configure support for deciding the flavour of HOST_WIDEST_INT.
dwarf_vmatoa also disappears, replacing most uses with one of
PRIx64, PRId64 or PRIu64.  Printing of size_t and ptrdiff_t values
now use %z and %t rather than by casting to unsigned long.  Also,
most warning messages that used 0x%lx or similar now use %#lx and a
few that didn't print the 0x hex prefix now also use %#.  The patch
doesn't change normal readelf output, except in odd cases where values
previously might have been truncated.

2 years agoDon't use bfd_vma in readelf.c
Alan Modra [Fri, 12 Aug 2022 08:17:43 +0000 (17:47 +0930)]
Don't use bfd_vma in readelf.c

This replaces bfd_vma with uint64_t in readelf, defines BFD64
unconditionally, removes tests of BFD64 and sizeof (bfd_vma), and
removes quite a few now unnecessary casts.

2 years agoDon't use bfd_size_type in readelf.c and dwarf.c
Alan Modra [Fri, 12 Aug 2022 08:08:08 +0000 (17:38 +0930)]
Don't use bfd_size_type in readelf.c and dwarf.c

Replacing bfd_size_type with dwarf_size_type or uint64_t is mostly
cosmetic.  The point of the change is to avoid use of a BFD type
in readelf, where we'd like to keep as independent of BFD as
possible.  Also, the patch is a step towards using standard types.

2 years agoReplace elf_vma with uint64_t
Alan Modra [Fri, 12 Aug 2022 07:44:37 +0000 (17:14 +0930)]
Replace elf_vma with uint64_t

This patch replaces all uses of elf_vma with uint64_t, removes
tests of sizeof (elf_vma), and does a little tidying of
byte_get_little_endian and byte_get_big_endian.

2 years agoAutomatic date update in version.in
GDB Administrator [Sat, 13 Aug 2022 00:00:06 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years ago[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp
Tom de Vries [Fri, 12 Aug 2022 09:48:21 +0000 (11:48 +0200)]
[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp

When running test-case gdb.dwarf2/dw2-dir-file-name.exp on x86_64-linux, we
have:
...
(gdb) break compdir_missing__ldir_missing__file_basename^M
Breakpoint 2 at 0x4004c4: file tmp-dw2-dir-file-name.c, line 999.^M
(gdb) continue^M
Continuing.^M
^M
Breakpoint 2, 0x00000000004004c4 in \
  compdir_missing__ldir_missing__file_basename () \
  at tmp-dw2-dir-file-name.c:999^M
(gdb) PASS: gdb.dwarf2/dw2-dir-file-name.exp: \
  compdir_missing__ldir_missing__file_basename: continue to breakpoint: \
  compdir_missing__ldir_missing__file_basename
...

When trying to set a breakpoint on
compdir_missing__ldir_missing__file_basename, the architecture-specific
prologue skipper starts at 0x4004c0 and skips past two insns, to 0x4004c4:
...
00000000004004c0 <compdir_missing__ldir_missing__file_basename>:
  4004c0: 55                      push   %rbp
  4004c1: 48 89 e5                mov    %rsp,%rbp
  4004c4: 8b 05 72 1b 20 00       mov    0x201b72(%rip),%eax        # 60203c <v>
  4004ca: 83 c0 01                add    $0x1,%eax
  4004cd: 89 05 69 1b 20 00       mov    %eax,0x201b69(%rip)        # 60203c <v>
  4004d3: 90                      nop
  4004d4: 5d                      pop    %rbp
  4004d5: c3                      ret
...

And because the line table info is rudamentary:
...
CU: tmp-dw2-dir-file-name.c:
File name                    Line number    Starting address    View    Stmt
tmp-dw2-dir-file-name.c              999            0x4004c0               x
tmp-dw2-dir-file-name.c             1000            0x4004d6               x
tmp-dw2-dir-file-name.c                -            0x4004d6
...
the address does not fall at an actual line, so the breakpoint is shown with
address, both when setting it and hitting it.

when running the test-case with aarch64-linux, we have similarly:
...
(gdb) break compdir_missing__ldir_missing__file_basename^M
Breakpoint 2 at 0x400618: file tmp-dw2-dir-file-name.c, line 999.^M
...
due to the architecture-specific prologue skipper starting at 0x400610 and
skipping past two insns, to 0x400618:
...
0000000000400610 <compdir_missing__ldir_missing__file_basename>:
  400610:       90000100        adrp    x0, 420000 <__libc_start_main@GLIBC_2.17>
  400614:       9100b000        add     x0, x0, #0x2c
  400618:       b9400000        ldr     w0, [x0]
  40061c:       11000401        add     w1, w0, #0x1
  400620:       90000100        adrp    x0, 420000 <__libc_start_main@GLIBC_2.17>
  400624:       9100b000        add     x0, x0, #0x2c
  400628:       b9000001        str     w1, [x0]
  40062c:       d503201f        nop
  400630:       d65f03c0        ret
...

But interestingly, the aarch64 architecture-specific prologue skipper is
wrong.  There is no prologue, and the breakpoint should be set at 0x400610.

By using "break *compdir_missing__ldir_missing__file_basename"
we can get the breakpoint set at 0x400610:
...
(gdb) break *compdir_missing__ldir_missing__file_basename^M
Breakpoint 2 at 0x400610: file tmp-dw2-dir-file-name.c, line 999.^M
...
and make the test-case independent of prologue analysis.

This requires us to update the expected patterns.

The fix ensures that once the aarch64 architecture-specific prologue skipper
will be fixed, this test-case won't start failing.

Tested on x86_64-linux.

2 years agoAutomatic date update in version.in
GDB Administrator [Fri, 12 Aug 2022 00:00:14 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agogdb/varobj: Only re-evaluate invalid globals during re_set
Lancelot SIX [Wed, 10 Aug 2022 21:23:29 +0000 (22:23 +0100)]
gdb/varobj: Only re-evaluate invalid globals during re_set

When doing varobj_re_set, we currently try to recreate floating varobj.
This was introduced by 4e969b4f0128 "Re-evaluate floating varobj as part
of varobj_invalidate" to deal with use a after free issue.  However
since bc20e562ec0 "Fix use after free in varobj" we now ensure that we
never have dangling pointers so this all recreation is not strictly
needed anymore for floating varobjs.

This commit proposes to remove this recreation process for floating
varobjs.

Tested on x86_64-linux.

2 years agogdb/varobj: Reset varobj after relocations have been computed
Tom de Vries [Wed, 10 Aug 2022 21:23:28 +0000 (22:23 +0100)]
gdb/varobj: Reset varobj after relocations have been computed

[This patch is a followup to the discussion in
https://sourceware.org/pipermail/gdb-patches/2022-August/191188.html]

PR/29426 shows failures when running the gdb.mi/mi-var-invalidate-shlib
test when using a compiler which does not produce a PIE executable by
default.

In the testcase, a varobj is created to track a global variable, and
then the main binary is reloaded in GDB (using the file command).

During the load of the new binary, GDB tries to recreate the varobj to
track the global in the new binary (varobj_invalidate_iter).  At this
point, the old process is still in flight.  So when we try to access to
the value of the global, in a PIE executable we only have access to the
unrelocated address (the objfile's text_section_offset () is 0).  As a
consequence down the line read_value_memory fails to read the unrelated
address, so cannot evaluate the value of the global.  Note that the
expression used to access to the global’s value is valid, so the varobj
can be created.  When using a non PIE executable, the address of the
global GDB knows about at this point does not need relocation, so
read_value_memory can access the (old binary’s) value.

So at this point, in the case of a non-PIE executable the value field is
set, while it is cleared in the case of PIE executable.  Later when the
test issues a "-var-update global_var", the command sees no change in
the case of the non-PIE executable, while in the case of the PIE
executable install_new_value sees that value changes, leading to a
different output.

This patch makes sure that, as we do for breakpoints, we wait until
relocation has happened before we try to recreate varobjs.  This way we
have a consistent behavior between PIE and non-PIE binaries.

Tested on x86_64-linux.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29426
Co-authored-by: Lancelot SIX <lancelot.six@amd.com>
2 years agogdb/varobj: Do not invalidate locals in varobj_invalidate_iter
Lancelot SIX [Thu, 11 Aug 2022 14:09:55 +0000 (15:09 +0100)]
gdb/varobj: Do not invalidate locals in varobj_invalidate_iter

The varobj_invalidate_iter function has logic to invalidate any local
varobj it can find.  However since bc20e562ec0 "gdb/varobj: Fix use
after free in varobj" all varobj containing references to an objfile are
cleared when the objfile goes out of scope.  This means that at this
point any local varobj seen by varobj_invalidate_iter either has
already been invalidated by varobj_invalidate_if_uses_objfile or only
contains valid references and there is no reason to invalidate it.

This patch proposes to remove this unnecessary invalidation and adds a
testcase which exercises a scenario where a local varobj can legitimately
survive a call to varobj_invalidate_iter.

At this point the varobj_invalidate and varobj_invalidate_iter seem
misnamed since they deal with re-creating invalid objects and do not do
invalidation, but this will be fixed in a following patch.

Tested on x86_64-linux.