binutils-gdb.git
2 years ago[gdb/testsuite] Fix gdb.debuginfod/fetch_src_and_symbols.exp with check-read1
Tom de Vries [Thu, 20 Oct 2022 07:50:04 +0000 (09:50 +0200)]
[gdb/testsuite] Fix gdb.debuginfod/fetch_src_and_symbols.exp with check-read1

With test-case gdb.debuginfod/fetch_src_and_symbols.exp and check-read1, I run
into:
...
(gdb) FAIL: gdb.debuginfod/fetch_src_and_symbols.exp: local_url: \
  file fetch_src_and_symbols (got interactive prompt)
...

The problem is that this output:
...
Enable debuginfod for this session? (y or [n]) y^M
...
is matched using regexp "Enable debuginfod?.*" with matches only the first two
words of the output, after which an implicit clause in gdb_test_multiple triggers
on the second part containing the interactive prompt.

Fix this by included the interactive prompt in the regexp.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.mi/mi-disassemble.exp with check-read1
Tom de Vries [Thu, 20 Oct 2022 07:02:18 +0000 (09:02 +0200)]
[gdb/testsuite] Fix gdb.mi/mi-disassemble.exp with check-read1

With test-case gdb.mi/mi-disassemble.exp and check-read1 I run into:
...
FAIL: gdb.mi/mi-disassemble.exp: disassemble /b main
FAIL: gdb.mi/mi-disassemble.exp: get valueof "*((unsigned char *) 0x400549)"
...

The problem for both FAILs is that the output is parsed using
gdb_test_multiple, which has implicit clauses using $gdb_prompt, which can
match before the explicit clauses using $mi_gdb_prompt.

Fix this by passing -prompt "$mi_gdb_prompt$" to gdb_test_multiple.

Tested on x86-64-linux.

2 years agoRe: aarch64-pe support for LD, GAS and BFD
Alan Modra [Thu, 20 Oct 2022 05:01:59 +0000 (15:31 +1030)]
Re: aarch64-pe support for LD, GAS and BFD

Fix dependencies for eaarch64pe.c.  Generated files aren't handled
fully automatically.

2 years agold: Add minimal pdb generation
Mark Harmstone [Sun, 16 Oct 2022 23:24:19 +0000 (00:24 +0100)]
ld: Add minimal pdb generation

2 years agold: Add --pdb option
Mark Harmstone [Sun, 16 Oct 2022 23:24:18 +0000 (00:24 +0100)]
ld: Add --pdb option

Second patch incorporates fixes for endian and UB issues in calc_hash, as per
https://sourceware.org/pipermail/binutils/2022-October/123514.html.

2 years agoTest stepping within a runtime loader / dynamic linker
Kevin Buettner [Thu, 20 Oct 2022 02:36:07 +0000 (19:36 -0700)]
Test stepping within a runtime loader / dynamic linker

See the remarks in rtld-step.exp for a description of what this
test is about.

This test case has been tested using gcc on the following x86-64 Linux
distributions/releases:

    Fedora 28
    Fedora 32
    Fedora 33
    Fedora 34
    Fedora 35
    Fedora 36
    Fedora 37
    rawhide (f38)
    RHEL 9.1
    Ubuntu 22.04.1 LTS

It's also been tested (and found to be working) with
RUNTESTFLAGS="CC_FOR_TARGET=clang" on all of the above expect for
Fedora 28.  The (old) version of clang available on F28 did not
accept the -static-pie option.

I also tried to make this test work on FreeBSD 13.1.  While I think I
made significant progress, I was ultimately stymied by this message
which occurs when attempting to run the main program which has been
set to use the fake/pretend RTLD as the ELF interpreter:

ELF interpreter /path/to/rtld-step-rtld not found, error 22

I have left one of the flags (-static) in place which I believe
to be needed for FreeBSD (though since I never got it to work, I
don't know for sure.)  I've also left some declarations needed
for FreeBSD in rtld-step-rtld.c.  They're currently disabled via
a #if 0; you'll need to enable them if you want to try to make
it work on FreeBSD.

2 years agoAllow debugging of runtime loader / dynamic linker
Kevin Buettner [Thu, 20 Oct 2022 02:36:07 +0000 (19:36 -0700)]
Allow debugging of runtime loader / dynamic linker

At present, GDB does not allow for the debugging of the runtime loader
and/or dynamic linker.  Much of the time, this makes sense.  An
application programmer doesn't normally want to see symbol resolution
code when stepping into a function that hasn't been resolved yet.

But someone who wishes to debug the runtime loader / dynamic linker
might place a breakpoint in that code and then wish to debug it
as normal.  At the moment, this is not possible.  Attempting to step
will cause GDB to internally step (and not stop) until code
unrelated to the dynamic linker is reached.

This commit makes a minor change to infrun.c which allows the dynamic
loader / linker to be debugged in the case where a step, next, etc.
is initiated from within that code.

While developing this fix, I tried some approaches which weren't quite
right.  The GDB testusite definitely contains tests which FAIL when
it's done incorrectly.  (At one point, I saw 17 regressions!) This
commit has been tested on x86-64 linux with no regressions.

2 years agobinutils: Remove unused substitution PROGRAM
Tsukasa OI [Mon, 10 Oct 2022 09:23:16 +0000 (09:23 +0000)]
binutils: Remove unused substitution PROGRAM

Unlike other substitution, this substitution of @PROGRAM@ was done in
binutils/Makefile and it was intended for binutils/cxxfilt.man.  @PROGRAM@
in binutils/cxxfilt.man is removed in the commit 0285c67df190 ("Automate
generate on man pages") in 2001 and @PROGRAM@ is ineffective since then.

Because PROGRAM substitution does nothing, removing this manual
substitution should be completely safe.

binutils/ChangeLog:

* doc/local.mk: Remove unused substitution PROGRAM.
* Makefile.in: Regenerate.

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

2 years agoObsolete beos
Alan Modra [Wed, 19 Oct 2022 23:12:25 +0000 (09:42 +1030)]
Obsolete beos

* config.bfd: Obsolete *-*-beos*.  Simplify x86 beos match.

2 years agoRegen ld/po/BLD-POTFILES.in
Alan Modra [Wed, 19 Oct 2022 23:11:56 +0000 (09:41 +1030)]
Regen ld/po/BLD-POTFILES.in

2 years ago[gdb] Fix assert in handle_jit_event
Tom de Vries [Wed, 19 Oct 2022 15:41:47 +0000 (17:41 +0200)]
[gdb] Fix assert in handle_jit_event

With the cc-with-tweaks.sh patch submitted here (
https://sourceware.org/pipermail/gdb-patches/2022-October/192586.html ) we run
with:
...
$ export STRIP_ARGS_STRIP_DEBUG=--strip-all
$ make check RUNTESTFLAGS="gdb.base/jit-reader.exp \
    --target_board cc-with-gnu-debuglink"
...
into the following assert:
...
(gdb) run ^M
Starting program: jit-reader ^M
gdb/jit.c:1247: internal-error: jit_event_handler: \
  Assertion `jiter->jiter_data != nullptr' failed.^M
...

Fix this by handling the
jit_bp_sym.objfile->separate_debug_objfile_backlink != nullptr case in
handle_jit_event.

Tested on x86_64-linux.

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

2 years agointernal_error: remove need to pass __FILE__/__LINE__
Pedro Alves [Mon, 17 Oct 2022 16:12:20 +0000 (17:12 +0100)]
internal_error: remove need to pass __FILE__/__LINE__

Currently, every internal_error call must be passed __FILE__/__LINE__
explicitly, like:

  internal_error (__FILE__, __LINE__, "foo %d", var);

The need to pass in explicit __FILE__/__LINE__ is there probably
because the function predates widespread and portable variadic macros
availability.  We can use variadic macros nowadays, and in fact, we
already use them in several places, including the related
gdb_assert_not_reached.

So this patch renames the internal_error function to something else,
and then reimplements internal_error as a variadic macro that expands
__FILE__/__LINE__ itself.

The result is that we now should call internal_error like so:

  internal_error ("foo %d", var);

Likewise for internal_warning.

The patch adjusts all calls sites.  99% of the adjustments were done
with a perl/sed script.

The non-mechanical changes are in gdbsupport/errors.h,
gdbsupport/gdb_assert.h, and gdb/gdbarch.py.

Approved-By: Simon Marchi <simon.marchi@efficios.com>
Change-Id: Ia6f372c11550ca876829e8fd85048f4502bdcf06

2 years agoFix an illegal memory access when parsing an ELF file containing corrupt symbol versi...
Nick Clifton [Wed, 19 Oct 2022 14:09:12 +0000 (15:09 +0100)]
Fix an illegal memory access when parsing an ELF file containing corrupt symbol version information.

PR 29699
* elf.c (_bfd_elf_slurp_version_tables): Fail if the sh_info field
of the section header is zero.

2 years agosim/iq2000: silence pointer-sign warnings
Andrew Burgess [Wed, 12 Oct 2022 11:46:42 +0000 (12:46 +0100)]
sim/iq2000: silence pointer-sign warnings

When building the iq2000 simulator I see a few warnings like this:

  /tmp/build/sim/../../src/sim/iq2000/iq2000.c: In function ‘fetch_str’:
  /tmp/build/sim/../../src/sim/iq2000/iq2000.c:50:54: error: pointer targets in passing argument 3 of ‘sim_read’ differ in signedness [-Werror=pointer-sign]
     50 |   sim_read (CPU_STATE (current_cpu), CPU2DATA(addr), buf, nr);
        |                                                      ^~~
        |                                                      |
        |                                                      char *

I've silenced these warnings by casting buf to 'unsigned char *'.
With this change I now see no warnings when compiling iq2000.c, so
I've removed the line from Makefile.in that disables -Werror.

Makefile.in was also disabling -Werror when compiling mloop.c,
however, I'm not seeing any warnings when compiling that file, so I've
removed the -Werror disable in that case too.

2 years agosim/erc32: avoid dereferencing type-punned pointer warnings
Andrew Burgess [Wed, 12 Oct 2022 10:45:53 +0000 (11:45 +0100)]
sim/erc32: avoid dereferencing type-punned pointer warnings

When building the erc32 simulator I get a few warnings like this:

  /tmp/build/sim/../../src/sim/erc32/exec.c:1377:21: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
   1377 |   sregs->fs[rd] = *((float32 *) & ddata[0]);
        |                    ~^~~~~~~~~~~~~~~~~~~~~~~

The type of '& ddata[0]' will be 'uint32_t *', which is what triggers
the warning.

This commit makes use of memcpy when performing the type-punning,
which resolves the above warnings.

With this change, I now see no warnings when compiling exec.c, which
means that the line in Makefile.in that disables -Werror can be
removed.

There should be no change in behaviour after this commit.

2 years agosim/ppc: mark device_error function as ATTRIBUTE_NORETURN
Andrew Burgess [Wed, 12 Oct 2022 10:14:26 +0000 (11:14 +0100)]
sim/ppc: mark device_error function as ATTRIBUTE_NORETURN

The device_error function always ends up calling the error function,
which is itself marked as ATTRIBUTE_NORETURN, so it makes sense that
device_error should also be marked ATTRIBUTE_NORETURN.

Doing this resolves a few warnings from hw_ide.c about possibly
uninitialized variables - the variables are only uninitialized after
passing through a call to device_error, which obviously means the
variables are never really used uninitialized, the simulation will
terminate with the device_error call.

2 years agosim/ppc: fix warnings related to printf format strings
Andrew Burgess [Wed, 12 Oct 2022 10:09:35 +0000 (11:09 +0100)]
sim/ppc: fix warnings related to printf format strings

This commit is a follow on to:

  commit 182421c9d2eea8c4877d983a2124e591f0aca710
  Date:   Tue Oct 11 15:02:08 2022 +0100

      sim/ppc: fixes for arguments to printf style functions

where commit 182421c9d2ee addressed issues with printf format
arguments that were causing the compiler to give an error, this commit
addresses issues that caused the compiler to emit a warning.

This commit is mostly either changing the format string to match the
argument, or in some cases, excess, unused arguments are removed.

2 years agosim/cgen: mask uninitialized variable warning in cgen-run.c
Andrew Burgess [Wed, 12 Oct 2022 10:07:24 +0000 (11:07 +0100)]
sim/cgen: mask uninitialized variable warning in cgen-run.c

I see an uninitialized variable warning (with gcc 9.3.1) from
cgen-run.c, like this:

  /tmp/build/sim/../../src/sim/cris/../common/cgen-run.c: In function ‘sim_resume’:
  /tmp/build/sim/../../src/sim/cris/../common/cgen-run.c:259:5: warning: ‘engine_fns$’ may be used uninitialized in this function [-Wmaybe-uninitialized]
    259 |    (* engine_fns[next_cpu_nr]) (cpu);
        |    ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  /tmp/build/sim/../../src/sim/cris/../common/cgen-run.c:232:14: note: ‘engine_fns$’ was declared here
    232 |   ENGINE_FN *engine_fns[MAX_NR_PROCESSORS];
        |              ^~~~~~~~~~

This is a false positive - we over allocate engine_fn, and then only
initialize the nr_cpus entries which we will later go on to use.

However, we can easily silence this warning by initializing the unused
entries in engine_fns to NULL, this might also help if anyone ever
looks at engine_fns in a debugger, it should now be obvious which
entries are in use, and which are not.

With this change the warning is gone.

There should be no change in behaviour with this commit.

2 years agoFix addr2line test for ppc64 elfv1 and mingw
Alan Modra [Wed, 19 Oct 2022 08:22:43 +0000 (18:52 +1030)]
Fix addr2line test for ppc64 elfv1 and mingw

* testsuite/binutils-all/addr2line.exp: Tidy.  For powerpc64
arrange to pass --synthetic to nm, and extract .main and .fn
symbol address for addr2line test.  Handle default executable
extension on cygwin/mingw compilers.

2 years agoUpdate MAINTAINERS file with details about accepting DCO signed contributions.
Nick Clifton [Wed, 19 Oct 2022 11:39:20 +0000 (12:39 +0100)]
Update MAINTAINERS file with details about accepting DCO signed contributions.

* MAINTAINERS: Add section on patches, copyright and DCO.

2 years agogdb/testsuite: avoid temporary file in gdb/testsuite (unittest.exp)
Andrew Burgess [Sun, 2 Oct 2022 14:31:16 +0000 (15:31 +0100)]
gdb/testsuite: avoid temporary file in gdb/testsuite (unittest.exp)

I spotted that the gdb.gdb/unittest.exp script causes a temporary file
inserters_extractors-2.txt to be created in build/gdb/testsuite/
instead of in build/gdb/testsuite/output/gdb.gdb/unittest/.

This is because some of the 'maint selftest' tests create temporary
files in GDB's current directory, specifically, the two source files:

  gdb/unittests/basic_string_view/inserters/wchar_t/2.cc
  gdb/unittests/basic_string_view/inserters/char/2.cc

both create a temporary file called inserters_extractors-2.txt, though
we only run the second of these as part of GDB's selftests.

I initially proposed just using GDB's 'cd' command in unittest.exp to
switch to the test output directory before running the selftests,
however, Pedro pointed out that there was a risk here that, if GDB
crashed during shutdown, the generated core file would be left in the
test output directory rather than in the testsuite directory.  As a
result, our clever core file spotting logic would fail to spot the
core file and alert the user.

Instead, I propose this slightly more involved solution.  I've added a
new with_gdb_cwd directory proc, used like this:

  with_gdb_cwd $directory {
    # Tests here...
  }

The new proc temporarily switches to $directory and then runs the
tests within the block.  After running the tests the previous current
working directory is restored.

Additionally, after switching back to the previous cwd, we check that
GDB is still responsive.  This means that if GDB crashed immediately
prior to restoring the previous directory, and left the core file in
the wrong place, then the responsiveness check will fail, and a FAIL
will be emitted, this should be enough to alert the user that
something has gone wrong.

With this commit in place the unittest.exp script now leaves its
temporary file in the test output directory.

2 years agogdb/testsuite: avoid creating files in gdb/testsuite directory
Andrew Burgess [Sun, 2 Oct 2022 14:18:15 +0000 (15:18 +0100)]
gdb/testsuite: avoid creating files in gdb/testsuite directory

I spotted that the test gdb.dwarf2/dw2-using-debug-str.exp was
creating an output file called debug_str_section in the root
build/gdb/testsuite directory instead of using the
build/gdb/testsuite/output/gdb.dwarf2/dw2-using-debug-str/ directory.

This appears to be caused by a missing '$' character.  We setup a
variable debug_str_section which contains a path within the output
directory, but then when we build the objcopy command we use
'debug_str_section' without a '$' prefix, as a result, we create the
debug_str_section file.

This commit adds the missing '$', the file is now created in the
output directory.

2 years agobfd: fix undefined references to aarch64_pe_le_vec
Andrew Burgess [Wed, 19 Oct 2022 11:00:42 +0000 (12:00 +0100)]
bfd: fix undefined references to aarch64_pe_le_vec

After commit:

  commit c60b3806799abf1d7f6cf5108a1b0e733a950b13
  Date:   Wed Oct 19 10:57:12 2022 +0200

      aarch64-pe support for LD, GAS and BFD

It appears that bfd/Makefile.in and bfd/configure were not regenerated
correctly.  The differences in the configure file are only whitespace,
but in Makefile.in a critical reference to pe-aarch64.lo was missing.

2 years agoaarch64-pe support for LD, GAS and BFD
Jedidiah Thompson [Wed, 19 Oct 2022 08:57:12 +0000 (10:57 +0200)]
aarch64-pe support for LD, GAS and BFD

Allows aarch64-pe to be targeted natively, not having to use objcopy to convert it from ELF to PE.
Based on initial work by Jedidiah Thompson

Co-authored-by: Jedidiah Thompson <wej22007@outlook.com>
Co-authored-by: Zac Walker <zac.walker@linaro.org>
2 years agoBinutils: Adding new testcase for addr2line.
rupesh potharla [Fri, 14 Oct 2022 13:17:49 +0000 (18:47 +0530)]
Binutils: Adding new testcase for addr2line.

* binutils/testsuite/config/default.exp: Set ADDR2LINE and ADDR2LINEFLAGS.
* binutils/testsuite/binutils-all/addr2line.exp: New file.

2 years ago[gdb/testsuite] Fix ERROR in gdb.python/py-breakpoint.exp
Tom de Vries [Wed, 19 Oct 2022 07:04:12 +0000 (09:04 +0200)]
[gdb/testsuite] Fix ERROR in gdb.python/py-breakpoint.exp

With test-case gdb.python/py-breakpoint.exp I run into:
...
(gdb) ERROR: tcl error sourcing gdb.python/py-breakpoint.exp.
ERROR: can't read "skip_hw_watchpoint_tests_p": no such variable
    while executing
"if {$skip_hw_watchpoint_tests_p} {
        gdb_test_no_output "set can-use-hw-watchpoints 0" ""
    }"
...

Fix this by adding the missing "global skip_hw_watchpoint_tests_p" in two
procs.

Tested on x86_64-linux.

2 years agoIBM zSystems: Issue error for *DBL relocs on misaligned symbols
Andreas Krebbel [Wed, 19 Oct 2022 07:03:17 +0000 (09:03 +0200)]
IBM zSystems: Issue error for *DBL relocs on misaligned symbols

Relocs like PC32DBL require a right shift of the symbol value.  There
is no situation where dropping symbol value bits with the right shift
is a good thing.  Hence we now issue an error to detect such problems.

2 years agogdb: check for groups with duplicate names in reggroups:add
Simon Marchi [Tue, 18 Oct 2022 14:17:33 +0000 (10:17 -0400)]
gdb: check for groups with duplicate names in reggroups:add

In the downstream ROCm GDB port, we would create multiple register
groups with duplicate names.  While it did not really hurt, it certainly
wasn't the intent.  And I don't think it ever makes sense to do so.

To catch these, change the assert in reggroups::add to check for
duplicate names.  It's no longer necessary to check for duplicate
reggroup pointers, because adding the same group twice would be caught
by the duplicate name check.

Change-Id: Id216a58acf91f1b314d3cba2d02de73656f8851d
Approved-By: Tom Tromey <tom@tromey.com>
2 years agoAutomatic date update in version.in
GDB Administrator [Wed, 19 Oct 2022 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agox86: Disable AVX-VNNI when disabling AVX2
H.J. Lu [Tue, 18 Oct 2022 17:47:29 +0000 (10:47 -0700)]
x86: Disable AVX-VNNI when disabling AVX2

Since AVX-VNNI requires AVX2, disable AVX-VNNI when disabling AVX2.

* i386-gen.c (cpu_flag_init): Add CpuAVX_VNNI to
CPU_ANY_AVX2_FLAGS.
* i386-init.h: Regenerate.

2 years agoRemove dead code from py-finishbreakpoint.c
Tom Tromey [Sun, 5 Jun 2022 16:22:40 +0000 (10:22 -0600)]
Remove dead code from py-finishbreakpoint.c

PR python/16324 points out that comparing a frame id to null_frame_id
can never succeed, and proposes simply removing the dead code.  That
is what this patch does.

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

2 years agoUpdate tests to use skip_hw_watchpoint_tests to test for HW watchpoint support.
Carl Love [Tue, 18 Oct 2022 15:25:36 +0000 (11:25 -0400)]
Update tests to use skip_hw_watchpoint_tests to test for HW watchpoint support.

The hardware watchpoint check has been updated in a couple of recent
patches.  This patch updates the hardware watchpoint test in the remaining
gdb tests.

The issue is the PowerPC processors support hardware watchpoints with the
exception of Power 9. The hardware watchpoint support is disabled on
Power 9.  The test skip_hw_watchpoint_tests must be used to correctly
determine if the PowerPC processor supports hardware watchpoints.

This patch fixes 6 test failures in test gdb.threads/watchpoint-fork.exp.

Test gdb.base/watch-vfork.exp runs with can-use-hw-watchpoints set to
true and false.  When the test is run with can-use-hw-watchpoints set to
true, gdb just falls back to using software watchpoints.  The
patch reduces the number of expected passes by 2 since because it now
only runs once with can-use-hw-watchpoints set to false.

Test gdb.mi/mi-watch.exp runs the test with argument hw and sw.  If the
argument is hw and hardware watchpoints are not supported the test exits.
The number of expected passes is cut in half with the patch as it now only
runs the test using software breakpoints.  Previously the pass to use
hardware watchpoints was not skipped and the test actually ran using
software watchpoints.

The following tests run the same with and without the patch.  The tests
are supposed to execute the gdb command "set can-use-hw-watchpoints 0" if
the processor does not support hardware bwatchpoints.  However the command
was not being executed and gdb was falling back to using software
watchpoints since the Power 9 watchpoint resource check fails.  With the
patch, the tests now execute the command and the test runs using software
watchpoints as it did previously.  The tests are:

gdb.base/commands.exp
gdb.base/cond-eval-mode.exp
gdb.base/display.exp
gdb.base/gdb11531.exp
gdb.base/recurse.exp
gdb.base/value-double-free.exp
gdb.base/watch-bitfields.exp
gdb.base/watch-cond-infcall.exp
gdb.base/watch-cond.exp
gdb.base/watchpoint-solib.exp
gdb.base/watchpoints.exp

The following two tests are not supported on the Power 9 system used to
test the changes.  The patch does not change the tests results for these
tests:

gdb.python/py-breakpoint.exp
gdb.mi/mi-watch-nonstop.exp

2 years ago[gdb/testsuite] Handle header files with local-remote-host.exp
Tom de Vries [Tue, 18 Oct 2022 13:32:47 +0000 (15:32 +0200)]
[gdb/testsuite] Handle header files with local-remote-host.exp

With test-case gdb.base/included.exp and host board local-remote-host.exp with
tentative fix for PR29697 I run into:
...
included.c:18:10: fatal error: included.h: No such file or directory
 #include "included.h"
          ^~~~~~~~~~~~
compilation terminated.
...

Fix this by adding the missing gdb_remote_download calls.

Likewise in a few other test-cases.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.server/no-thread-db.exp with local-remote-host.exp
Tom de Vries [Tue, 18 Oct 2022 13:32:46 +0000 (15:32 +0200)]
[gdb/testsuite] Fix gdb.server/no-thread-db.exp with local-remote-host.exp

With test-case gdb.server/no-thread-db.exp and host board local-remote-host.exp
with a tentative fix for PR29697 I run into:
...
(gdb) print foo^M
Cannot find thread-local storage for Thread 29613.29613, executable file \
  $HOME/no-thread-db:^M
Remote target failed to process qGetTLSAddr request^M
(gdb) FAIL: gdb.server/no-thread-db.exp: print foo
...

The regexp in the test-case expects the full $binfile pathname, but we have
instead $HOME/no-thread-db.

Fix this by making the regexp less strict.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.base/return-nodebug.exp with local-remote-host.exp
Tom de Vries [Tue, 18 Oct 2022 13:32:46 +0000 (15:32 +0200)]
[gdb/testsuite] Fix gdb.base/return-nodebug.exp with local-remote-host.exp

With host board local-remote-host.exp and test-case
gdb.base/return-nodebug.exp, I run into:
...
Executing on host: gcc -fno-stack-protector -fdiagnostics-color=never \
  -DTYPE=signed\ char -c -g  -o return-nodebug-signed-char0.o  \
  /home/vries/gdb_versions/devel/src/gdb/testsuite/gdb.base/return-nodebug.c \
  (timeout = 300)
builtin_spawn [open ...]^M
gcc: error: char: No such file or directory
...

Avoid the quoting problem by not using spaces in the define.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.server/file-transfer.exp with local-remote-host.exp
Tom de Vries [Tue, 18 Oct 2022 13:32:46 +0000 (15:32 +0200)]
[gdb/testsuite] Fix gdb.server/file-transfer.exp with local-remote-host.exp

When running test-case gdb.server/file-transfer.exp with host
board local-remote-host.exp, I get:
...
Executing on host: cmp -s $outputs/gdb.server/file-transfer/file-transfer \
  down-server    (timeout = 300)
builtin_spawn [open ...]^M
XYZ2ZYX
FAIL: gdb.server/file-transfer.exp: compare intermediate binary file
...

The remote host and remote target cases are handled here together here in proc
test_file_transfer:
...
    if {![is_remote host] && ![is_remote target]} {
       set up_server [standard_output_file $up_server]
       set down_server [standard_output_file $down_server]
    }
...

Fix this by handling them separately.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Update boards/README
Tom de Vries [Tue, 18 Oct 2022 13:27:51 +0000 (15:27 +0200)]
[gdb/testsuite] Update boards/README

Update gdb/testsuite/boards/README to reflect recent commit c4c8c27263d
("[gdb/testsuite] Fix host board local-remote-host-notty.exp timeouts"), which
means the board now uses a pseudo-tty, but with editing disabled.

2 years agogdb, solib-svr4: support namespaces in DSO iteration
Markus Metzger [Mon, 28 Mar 2022 09:20:10 +0000 (11:20 +0200)]
gdb, solib-svr4: support namespaces in DSO iteration

When looking up names, GDB needs to stay within one linker namespace to
find the correct instance in case the same name is provided in more than
one namespace.

Modify svr4_iterate_over_objfiles_in_search_order() to stay within the
namespace of the current_objfile argument.  If no current_objfile is
provided (i.e. it is nullptr), iterate over objfiles in the initial
namespace.

For objfiles that do not have a corresponding so_list to provide the
namespace, assume that the objfile was loaded into the initial namespace.
This would cover the main executable objfile (which is indeed loaded into
the initial namespace) as well as manually added symbol files.

Expected fails:

  - gdb.base/non-lazy-array-index.exp: the expression parser may lookup
    global symbols, which may result in xfers to read auxv for determining
    the debug base as part of svr4_iterate_over_objfiles_in_search_order().

  - gdb.server/non-lazy-array-index.exp: symbol lookup may access the
    target to read AUXV in order to determine the debug base for SVR4
    linker namespaces.

Known issues:

  - get_symbol_address() and get_msymbol_address() search objfiles for a
    'better' match.  This was introduced by

        4b610737f02 Handle copy relocations

    to handle copy relocations but it now causes a wrong address to be
    read after symbol lookup actually cound the correct symbol.  This can
    be seen, for example, with gdb.base/dlmopen.exp when compiled with
    clang.

  - gnu ifuncs are only looked up in the initial namespace.

  - lookup_minimal_symbol() and lookup_minimal_symbol_text() directly
    iterate over objfiles and are not aware of linker namespaces.

2 years agogdb: update gnu ifunc resolve
Markus Metzger [Mon, 30 May 2022 07:35:29 +0000 (09:35 +0200)]
gdb: update gnu ifunc resolve

Update elf_gnu_ifunc_resolve_by_cache() and elf_gnu_ifunc_resolve_by_got()
to use gdbarch_iterate_over_objfiles_in_search_order() in order to
restrict the objfile traversal to the initial namespace.

In order to extend this to other namespaces, we'd need to provide context,
e.g. via an objfile inside that namespace.

2 years agogdb, symtab: inline find_quick_global_symbol_language
Markus Metzger [Mon, 2 May 2022 14:33:32 +0000 (16:33 +0200)]
gdb, symtab: inline find_quick_global_symbol_language

There is only one use of find_quick_global_symbol_language that calls it
for the special symbol "main".

Inline the function as it is probably not correct in the general case
where we may have multiple instances of global symbols with the same name
but different languages in different libraries in different linker
namespaces.

Further, change the objfiles iteration into a call to
gdbarch_iterate_over_objfiles_in_search_order, which would only search the
initial linker namespace, where we expect "main" to be located.

2 years agogdb, hppa: remove unused hppa_lookup_stub_minimal_symbol
Markus Metzger [Thu, 28 Apr 2022 09:14:57 +0000 (11:14 +0200)]
gdb, hppa: remove unused hppa_lookup_stub_minimal_symbol

I stumbled over this while reviewing all objfiles traversals with regards
to impact of linker namespaces.

Recursive grep only finds two occurrences of hppa_lookup_stub_minimal_symbol:
  - the declaration in hppa-tdep.h.
  - the definition in hppa-tdep.c.

There appear to be no calls to this function.  Remove it.

2 years agogdb, cp: update add_symbol_overload_list_qualified
Markus Metzger [Tue, 26 Apr 2022 13:11:09 +0000 (15:11 +0200)]
gdb, cp: update add_symbol_overload_list_qualified

Iterate over objfiles in search order using the objfile of the selected
block as current_objfile so the iteration can stay inside the block's
linker namespace.

2 years agofixup! gdb, ada: update ada_lookup_simple_minsym
Markus Metzger [Tue, 19 Jul 2022 06:05:25 +0000 (08:05 +0200)]
fixup! gdb, ada: update ada_lookup_simple_minsym

remove get_selected_block()

2 years agogdb, ada: update ada_lookup_simple_minsym
Markus Metzger [Tue, 12 Apr 2022 14:05:26 +0000 (16:05 +0200)]
gdb, ada: update ada_lookup_simple_minsym

Iterate over objfile in search order using the objfile of the context
block as current_objfile so the iteration can stay inside the block's
linker namespace.

2 years agogdb, ada: collect standard exceptions in all objfiles
Markus Metzger [Mon, 11 Apr 2022 15:58:23 +0000 (17:58 +0200)]
gdb, ada: collect standard exceptions in all objfiles

When searching for standard exceptions for Ada, we lookup the minimal
symbol of each exception.  With linker namespaces there can be multiple
instances in different namespaces.  Collect them all.

2 years agogdb, python: use gdbarch_iterate_over_objfiles_in_search_order
Markus Metzger [Mon, 11 Apr 2022 14:44:36 +0000 (16:44 +0200)]
gdb, python: use gdbarch_iterate_over_objfiles_in_search_order

The implementation of gdb.lookup_objfile() iterates over all objfiles and
compares their name or build id to the user-provided search string.

This will cause problems when supporting linker namespaces as the first
objfile in any namespace will be found.  Instead, use
gdbarch_iterate_over_objfiles_in_search_order to only consider the
namespace of gdb.current_objfile() for the search, which defaults to the
initial namespace when gdb.current_objfile() is None.

2 years agogdb, compile: unlink objfile stored in module
Markus Metzger [Mon, 11 Apr 2022 13:12:33 +0000 (15:12 +0200)]
gdb, compile: unlink objfile stored in module

When cleaning up after a compile command, we iterate over all objfiles and
unlink the first objfile with the same name as the one we compiled.

Since we already store a pointer to that objfile in the module and use it
to get the name we're comparing against, there's no reason to iterate, at
all.  We can simply use that objfile.

This further avoids potential issues when an objfile with the same name is
loaded into a different linker namespace.

2 years agogdb, gdbserver: extend RSP to support namespaces
Markus Metzger [Tue, 15 Mar 2022 17:08:06 +0000 (18:08 +0100)]
gdb, gdbserver: extend RSP to support namespaces

Introduce a new qXfer:libraries-svr4:read annex key/value pair

    lmid=<namespace identifier>

to be used together with start and prev to provide the namespace of start
and prev to gdbserver.

Unknown key/value pairs are ignored by gdbserver so no new supports check
is needed.

Introduce a new library-list-svr4 library attribute

    lmid

to provide the namespace of a library entry to GDB.

This implementation uses the address of a namespace's r_debug object as
namespace identifier.

This should have incremented the minor version but since unknown XML
attributes are ignored, anyway, and since changing the version results in
a warning from GDB, the version is left at 1.0.

2 years agogdbserver: move main_lm handling into caller
Markus Metzger [Tue, 15 Mar 2022 16:41:13 +0000 (17:41 +0100)]
gdbserver: move main_lm handling into caller

When listing SVR4 shared libraries, special care has to be taken about the
first library in the default namespace as that refers to the main
executable.  The load map address of this main executable is provided in
an attribute of the library-list-svr4 element.

Move that code from where we enumerate libraries inside a single namespace
to where we generate the rest of the library-list-svr4 element.  This
allows us to complete the library-list-svr4 element inside one function.

There should be no functional change.

2 years agogdb, gdbserver: support dlmopen()
Markus Metzger [Mon, 4 Oct 2021 08:24:35 +0000 (10:24 +0200)]
gdb, gdbserver: support dlmopen()

In glibc, the r_debug structure contains (amongst others) the following
fields:

  int r_version:
    Version number for this protocol.  It should be greater than 0.

If r_version is 2, struct r_debug is extended to struct r_debug_extended
with one additional field:

  struct r_debug_extended *r_next;
    Link to the next r_debug_extended structure.  Each r_debug_extended
    structure represents a different namespace.  The first r_debug_extended
    structure is for the default namespace.

1. Change solib_svr4_r_map argument to take the debug base.
2. Add solib_svr4_r_next to find the link map in the next namespace from
the r_next field.
3. Update svr4_current_sos_direct to get the link map in the next namespace
from the r_next field.
4. Don't check shared libraries in other namespaces when updating shared
libraries in a new namespace.
5. Update svr4_same to check the load offset in addition to the name
6. Update svr4_default_sos to also set l_addr_inferior
7. Change the flat solib_list into a per-namespace list using the
namespace's r_debug address to identify the namespace.

Add gdb.base/dlmopen.exp to test this.

To remain backwards compatible with older gdbserver, we reserve the
namespace zero for a flat list of solibs from all namespaces.  Subsequent
patches will extend RSP to allow listing libraries grouped by namespace.

This fixes PR 11839.

Co-authored-by: Lu, Hongjiu <hongjiu.lu@intel.com>
2 years agogdb, solib-svr4: remove locate_base()
Markus Metzger [Fri, 11 Mar 2022 05:46:15 +0000 (06:46 +0100)]
gdb, solib-svr4: remove locate_base()

Whenever we call locate_base(), we clear info->debug_base directly before
the call.  Thus, we never cache the base location as locate_base() had
intended.

Move the svr4_have_link_map_offsets() check into elf_locate_base(), inline
locate_base() at all call sites, and remove it.

2 years agogdb, testsuite: extend gdb_test_multiple checks
Markus Metzger [Fri, 18 Feb 2022 11:16:33 +0000 (12:16 +0100)]
gdb, testsuite: extend gdb_test_multiple checks

Check for

    warning: Corrupted shared library list

and for

    Invalid cast.
    warning: Probes-based dynamic linker interface failed.
    Reverting to original interface.

in gdb_test_multiple.

2 years agox86: generalize gas documentation for disabling of ISA extensions
Jan Beulich [Tue, 18 Oct 2022 06:27:42 +0000 (08:27 +0200)]
x86: generalize gas documentation for disabling of ISA extensions

As of commit ae89daecb132 ("x86: generalize disabling of sub-
architectures") there's no arbitrary subset of ISAs which can also be
disabled. This should have been reflected in documentation right away.
Since I failed to do so, correct this now.

2 years agox86: correct CPU_AMX_{BF16,INT8}_FLAGS
Jan Beulich [Tue, 18 Oct 2022 06:26:56 +0000 (08:26 +0200)]
x86: correct CPU_AMX_{BF16,INT8}_FLAGS

AMX-TILE is a prereq to these, as already correctly expressed by
CPU_ANY_AMX_TILE_FLAGS. Express the dependency also in the reverse
("positive") direction.

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

2 years agokfail an Ada test for GCC < 12
Tom Tromey [Mon, 17 Oct 2022 19:16:59 +0000 (13:16 -0600)]
kfail an Ada test for GCC < 12

I noticed one particular Ada test was failing on Fedora 34, but works
when I switch to GCC 12.  This patch arranges to kfail the test when
an older compiler is used.

I tested this with GCC 11, 12, and 13.  I'm going to check it in.

2 years agoRemove a nullptr check in DWARF scanner
Tom Tromey [Mon, 17 Oct 2022 18:46:21 +0000 (12:46 -0600)]
Remove a nullptr check in DWARF scanner

In scan_attributes, The DWARF scanner checks whether maybe_defer is
nullptr, but this can never happen.  This patch removes the check.

2 years agogdbarch-components.py: Remove spurious space from "frame_info_ptr " params
Pedro Alves [Mon, 17 Oct 2022 16:48:35 +0000 (17:48 +0100)]
gdbarch-components.py: Remove spurious space from "frame_info_ptr " params

If you run gdbarch.py today, you'll get local modifications compared
to what's in the tree, like:

 --- c/gdb/gdbarch-gen.h
 +++ w/gdb/gdbarch-gen.h
 @@ -315,8 +315,8 @@ extern void set_gdbarch_register_type (struct gdbarch *gdbarch, gdbarch_register
     should match the address at which the breakpoint was set in the dummy
     frame. */

 -typedef struct frame_id (gdbarch_dummy_id_ftype) (struct gdbarch *gdbarch, frame_info_ptr this_frame);
 -extern struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, frame_info_ptr this_frame);
 +typedef struct frame_id (gdbarch_dummy_id_ftype) (struct gdbarch *gdbarch, frame_info_ptr  this_frame);
 +extern struct frame_id gdbarch_dummy_id (struct gdbarch *gdbarch, frame_info_ptr  this_frame);
  extern void set_gdbarch_dummy_id (struct gdbarch *gdbarch, gdbarch_dummy_id_ftype *dummy_id);

etc.

The extra space comes from the "frame_info_ptr " param that appears in
a number of gdbarch methods in gdbarch-components.py.  With the extra
space removed, running ./gdbarch.py generates the exact code that's in
the tree already.

Change-Id: If7d20b8c6b2fd9ff466142a01bd2611c9ef9f53e

2 years agoChange .gdb_index de-duplication implementation
Tom Tromey [Thu, 22 Sep 2022 19:10:55 +0000 (13:10 -0600)]
Change .gdb_index de-duplication implementation

While investigating PR symtab/29179, I found that one Ada test failed
because, although a certain symbol was present in the index, with the
new DWARF reader it pointed to a different CU than was chosen by
earlier versions of gdb.

This patch changes how symbol de-duplication is done, deferring the
process until the entire symbol table has been constructed.  This way,
it's possible to always choose the lower-numbered CU among duplicates,
which is how gdb (implicitly) previously worked.

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

2 years agoImprove Ada support in .gdb_index
Tom Tromey [Thu, 22 Sep 2022 14:43:47 +0000 (08:43 -0600)]
Improve Ada support in .gdb_index

The cooked index work changed how .gdb_index is constructed, and in
the process broke .gdb_index support.  This is PR symtab/29179.

This patch partially fixes the problem.  It arranges for Ada names to
be encoded in the form expected by the index code.  In particular,
linkage names for Ada are emitted, including the "main" name; names
are Ada-encoded; and names are no longer case-folded, something that
prevented operator names from round-tripping correctly.

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

2 years agoDon't add type linkage names to cooked index
Tom Tromey [Fri, 14 Oct 2022 13:08:57 +0000 (07:08 -0600)]
Don't add type linkage names to cooked index

The compiler will sometimes emit a linkage name for a type, like:

    <1d3>   DW_AT_linkage_name: (indirect string, offset: 0x106f): 11__mbstate_t

These names aren't very useful, and this patch changes the DWARF
reader so that they are ignored by the cooked index.

2 years agoFix regression in c-linkage-name.exp with gdb index
Tom Tromey [Fri, 14 Oct 2022 13:10:08 +0000 (07:10 -0600)]
Fix regression in c-linkage-name.exp with gdb index

c-linkage-name.exp started failing with the gdb-index target board due
to an earlier patch.  The problem here is that some linkage names must
be in the index -- but, based on inspection, not C++ linkage names.
This patch updates the code to exclude only these.

2 years agoFix null pointer representations
TaiseiIto [Tue, 13 Sep 2022 13:55:03 +0000 (22:55 +0900)]
Fix null pointer representations

Since "NULL" and "0" are used to represent invalid address in function
"gdbarch_find_by_info" in "binutils-gdb/gdb/arch-utils.c", I modified
them to "nullptr".

2 years agogdb: silence unused-but-set-variable warning about yynerrs in cp-name-parser.y
Simon Marchi [Wed, 12 Oct 2022 17:32:56 +0000 (13:32 -0400)]
gdb: silence unused-but-set-variable warning about yynerrs in cp-name-parser.y

When building with clang 15 on Ubuntu 20.04, I get:

      CXX    cp-name-parser.o
    cp-name-parser.c.tmp:1777:9: error: variable 'cpnameyynerrs' set but not used [-Werror,-Wunused-but-set-variable]
        int yynerrs;
            ^
    /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:58:18: note: expanded from macro 'yynerrs'
    #define yynerrs         GDB_YY_REMAP (yynerrs)
                            ^
    /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:40:29: note: expanded from macro 'GDB_YY_REMAP'
    #define GDB_YY_REMAP(YYSYM) GDB_YY_REMAP_1 (GDB_YY_REMAP_PREFIX, YYSYM)
                                ^
    /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:39:39: note: expanded from macro 'GDB_YY_REMAP_1'
    #define GDB_YY_REMAP_1(PREFIX, YYSYM) GDB_YY_REMAP_2 (PREFIX, YYSYM)
                                          ^
    /home/smarchi/src/binutils-gdb/gdb/yy-remap.h:38:39: note: expanded from macro 'GDB_YY_REMAP_2'
    #define GDB_YY_REMAP_2(PREFIX, YYSYM) PREFIX ## YYSYM
                                          ^
    <scratch space>:45:1: note: expanded from here
    cpnameyynerrs
    ^

This is because clang 15 warns for something like this:

    int n;
    n = 0;
    ++n;

whereas previous versions do not.

yynerrs is defined in yyparse and is there for actions to use.  Since
the actions in cp-name-parser.y don't use it, we get a warning.  We see
this problem on this particular .y file because it uses `%pure-parser`
[1], which makes yynerrs a local rather than a global.

I initially fixed this by using
DIAGNOSTIC_IGNORE_UNUSED_BUT_SET_VARIABLE (like in commit f7aa1a5acc5
("gold: Suppress "unused" variable warning on Clang")), but then I
realized we could suppress the warning in a more fine-grained way using
this in a rule:

    (void) yynerrs;

[1] https://www.gnu.org/software/bison/manual/html_node/Error-Reporting-Function.html

Change-Id: I6cae7a4207c19fe1b719e2ac19be69122ebe3af1

2 years agold/testsuite: consistently add board_ldflags when linking with GCC
Clément Chigot [Thu, 15 Sep 2022 07:23:50 +0000 (09:23 +0200)]
ld/testsuite: consistently add board_ldflags when linking with GCC

Currently, the functions checking if the compiler is available or if a
feature is available add both board_cflags and board_ldflags.
However, functions running the tests only retrieve board_cflags. This
can lead to unexpected errors when mandaratory flags are defined in
board_ldflags and not board_cflags.

ld/ChangeLog:

* testsuite/ld-unique/unique.exp: Add board_ldflags when
linking with GCC.
* testsuite/lib/ld-lib.exp: Likewise.

2 years agoAllow explicit size specifier for predicate operand of {sq, uq, }{incp, decp}
CaiJingtao [Tue, 11 Oct 2022 01:55:10 +0000 (09:55 +0800)]
Allow explicit size specifier for predicate operand of {sq, uq, }{incp, decp}

Omitting predicate size specifier in vector form of {sq, uq, }{decp, incp} is deprecated and will be prohibited in a future release of the aarch64,
see https://developer.arm.com/documentation/ddi0602/2021-09/SVE-Instructions/DECP--vector---Decrement-vector-by-count-of-true-predicate-elements-.

This allows explicit size specifier, e.g. `decp z0.h, p0.h`, for predicate operand of these SVE instructions.
The existing behaviour of not requiring the specifier is preserved.
And the disasembly is with the specifier with this patch.

The GAS tests passed under our local tests.

opcodes/
* aarch64-asm.c: Modify `sve_size_hsd` encoding.
* aarch64-tbl.h (aarch64_opcode_table): Add QUALS's type OP_SVE_Vv_HSD
for decp, incp, sqdecp, sqincp, uqdecp and uqincp.

gas/
* testsuite/gas/aarch64/sve-movprfx_23.s: Update movprfx_23 testcase's
test_sametwo macro, where take the predicate size specifier.
* testsuite/gas/aarch64/sve-movprfx_23.d: Update movprfx_23 testcase's
expected disassembly.
* testsuite/gas/aarch64/sve-movprfx_23.l: Update movprfx_23 testcase's
expected assembler messages.
* testsuite/gas/aarch64/sve.s: Add sve testcase's instructions for
decp, incp, sqdecp, sqincp, uqdecp and uqincp, which take the
predicate size specifier.
* testsuite/gas/aarch64/sve.d: Update sve testcase's expected
disassembly.

Signed-off-by: CaiJingtao <caijingtao@huawei.com>
2 years agoaarch64: Tweak handling of F_STRICT
Richard Sandiford [Fri, 30 Sep 2022 11:34:59 +0000 (12:34 +0100)]
aarch64: Tweak handling of F_STRICT

Current F_STRICT qualifier checking is enforced after the fact
rather than as part of the match.  This makes it impossible to
have, e.g.:

   QLF2(S_D, S_D)
   QLF2(S_D, NIL)

in the same list.

opcodes/
* aarch64-opc.c (aarch64_find_best_match): Handle F_STRICT here
rather than...
(match_operands_qualifier): ...here.

2 years agox86: properly decode EVEX.W for AVX512_4{FMAPS,VNNIW} insns
Jan Beulich [Mon, 17 Oct 2022 06:27:32 +0000 (08:27 +0200)]
x86: properly decode EVEX.W for AVX512_4{FMAPS,VNNIW} insns

These require EVEX.W=0. Use %XS to facilitate the checking, even if for
the AVX512_4VNNIW ones this is kind of an abuse (as 's' there stands for
"signed", not "single").

While there also correct the 3rd operand for the AVX512_4VNNIW entries:
Only the memory form is allowed (just like for AVX512_4FMAPS, where the
correct type is already in use).

2 years agox86: fold AVX512-VNNI disassembler entries with AVX-VNNI ones
Jan Beulich [Mon, 17 Oct 2022 06:27:03 +0000 (08:27 +0200)]
x86: fold AVX512-VNNI disassembler entries with AVX-VNNI ones

Make %XV also print the separating blank in the VEX case, while making
it do nothing for EVEX-encoded insns. This way the AVX-VNNI entries
can be re-used for AVX512-VNNI, at the same time fixing the lack of
EVEX.W decoding.

For the AVX-VNNI ones further make sure only VEX.66 forms are actually
decoded.

2 years agoAutomatic date update in version.in
GDB Administrator [Mon, 17 Oct 2022 00:00:06 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agoMore uses of checked_static_cast
Tom Tromey [Sat, 24 Sep 2022 19:38:42 +0000 (13:38 -0600)]
More uses of checked_static_cast

This patch changes a few more uses of static_cast to use
checked_static_cast.  In this patch, cast-to-references are converted
by moving the dereference outside of the cast, as checked_static_cast
only handles pointers.

2 years agoUse checked_static_cast in more places
Tom Tromey [Sat, 24 Sep 2022 19:34:09 +0000 (13:34 -0600)]
Use checked_static_cast in more places

I looked through all the uses of static_cast<... *> in gdb and
converted many of them to checked_static_cast.

I couldn't test a few of these changes.

2 years agoPowerPC se_rfmci and VLE, SPE2 and LSP insns with -many
Alan Modra [Fri, 14 Oct 2022 01:58:33 +0000 (12:28 +1030)]
PowerPC se_rfmci and VLE, SPE2 and LSP insns with -many

I noticed recently that se_rfmci, a VLE mode instruction, was being
accepted by non-VLE cpus, and also that se_rfmci by itself in a
section did not cause SHF_PPC_VLE to be set.  ie. both testcases added
by this patch fail without the changes to tc-ppc.c here.

Also, VLE, SPE2 and LSP insns were not accepted by the assembler with
-many nor were SPE2 and LSP being disassembled with -Many.

gas/
* config/tc-ppc.c (ppc_setup_opcodes): Wrap long lines.  Add
vle_opcodes when PPC_OPCODE_VLE or PPC_OPCODE_ANY.  Simplify
disassembler index segment checks.  Add LSP and SPE2 opcodes
when PPC_OPCODE_ANY too.
(md_assemble): Correct logic adding PPC_APUINFO_VLE and
SHF_PPC_VLE.
* testsuite/gas/ppc/se_rfmci.s
* testsuite/gas/ppc/se_rfmci.d,
* testsuite/gas/ppc/se_rfmci_bad.d: New tests.
* testsuite/gas/ppc/ppc.exp: Run them.
opcodes/
* ppc-dis.c (print_insn_powerpc): Disassemble SPE2 and LSP insn
when -Many.
* ppc-opc.c (vle_opcodes <se_rfmci>): Comment.

2 years agozlib-gabi to zstd woes
Alan Modra [Fri, 14 Oct 2022 11:29:23 +0000 (21:59 +1030)]
zlib-gabi to zstd woes

So we had a zlib-gabi .debug_info section that increased in size with
zstd, so much so that it was better to leave the section
uncompressed.  Things went horribly wrong when the section was read
again later.  The section was read again off disk using the
uncompressed size.  So you get the zlib section again with some
garbage at the end.  Fix that particular problem by setting the
section flag SEC_IN_MEMORY.  Any future read will get sec->contents.

Also, if the section is to be left uncompressed, the input
SHF_COMPRESSED flag needs to be reset otherwise objcopy will copy it
to output.

Finally, bfd_convert_section_contents needed a small update to handle
zstd compressed sections, and I've deleted bfd_cache_section_contents.

* bfd.c (bfd_convert_section_contents): Handle zstd.
* compress.c (bfd_compress_section_contents): When section
contents are uncompressed set SEC_IN_MEMORY flag,
compress_status to COMRESS_SECTION_NONE, and clear
SHF_COMPRESSED.  Set SEC_IN_MEMORY for compressed contents.
(bfd_get_full_section_contents): Don't check section size
against file size when SEC_IN_MEMORY.
(bfd_cache_section_contents): Delete function.
* elf32-arm.c (elf32_arm_get_synthetic_symtab): Expand
bfd_cache_section_contents here.
* bfd-in2.h: Regenerate.

2 years agoAutomatic date update in version.in
GDB Administrator [Sun, 16 Oct 2022 00:00:31 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years agogdb/arm: Don't rely on loop detection to stop unwinding
Torbjörn SVENSSON [Fri, 14 Oct 2022 13:34:24 +0000 (15:34 +0200)]
gdb/arm: Don't rely on loop detection to stop unwinding

Setting SP of the next frame to the same address as the current frame
is an ugly way to stop the unwinding.  A cleaner way is to rely on
the frame_unwind_stop_reason function to return UNWIND_OUTERMOST.

Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2 years agoAutomatic date update in version.in
GDB Administrator [Sat, 15 Oct 2022 00:00:42 +0000 (00:00 +0000)]
Automatic date update in version.in

2 years ago[gdb/testsuite] Add boards/README
Tom de Vries [Fri, 14 Oct 2022 19:22:57 +0000 (21:22 +0200)]
[gdb/testsuite] Add boards/README

Add a file gdb/testsuite/boards/README, to make it easier to get a high-level
overview of the various boards.

2 years ago[gdb/contrib] Handle STRIP_ARGS_{STRIP,KEEP}_DEBUG in cc-with-tweaks.sh
Tom de Vries [Fri, 14 Oct 2022 19:22:57 +0000 (21:22 +0200)]
[gdb/contrib] Handle STRIP_ARGS_{STRIP,KEEP}_DEBUG in cc-with-tweaks.sh

Handle new environment variable STRIP_ARGS_STRIP_DEBUG, defaulting to
--strip-debug in gdb/contrib/cc-with-tweaks.sh, such that we can easily
reproduce the PR29277 assert using:
...
$ export STRIP_ARGS_STRIP_DEBUG=--strip-all
$ make check RUNTESTFLAGS="gdb.base/jit-reader.exp \
    --target_board cc-with-gnu-debuglink"
...

For completeness sake and to avoid confusion about which of the two used strip
invocations the passed args apply to, likewise add STRIP_ARGS_KEEP_DEBUG,
defaulting to --only-keep-debug.

Script checked with shellcheck, no new warnings added.

Tested on x86_64-linux.

2 years ago[gdb] Fix heap-buffer-overflow in find_program_interpreter
Tom de Vries [Fri, 14 Oct 2022 19:22:57 +0000 (21:22 +0200)]
[gdb] Fix heap-buffer-overflow in find_program_interpreter

With the test-case included in this patch, we run into:
...
(gdb) target remote localhost:2347^M
`target:twice-connect' has disappeared; keeping its symbols.^M
Remote debugging using localhost:2347^M
warning: Unable to find dynamic linker breakpoint function.^M
GDB will be unable to debug shared library initializers^M
and track explicitly loaded dynamic code.^M
Reading /usr/lib/debug/.build-id/$hex/$hex.debug from remote target...^M
0x00007ffff7dd4550 in ?? ()^M
(gdb) PASS: gdb.server/twice-connect.exp: session=second: gdbserver started
FAIL: gdb.server/twice-connect.exp: found interpreter
...

The problem originates in find_program_interpreter, where
bfd_get_section_contents is called to read .interp, but fails.  The function
returns false but the result is ignored, so find_program_interpreter returns
some random string.

Fix this by checking the result of the call to bfd_get_section_contents.

Tested on x86_64-linux.

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

2 years ago[gdb/testsuite] Fix gdb.server/unittest.exp with host board local-remote-host.exp
Tom de Vries [Fri, 14 Oct 2022 17:59:26 +0000 (19:59 +0200)]
[gdb/testsuite] Fix gdb.server/unittest.exp with host board local-remote-host.exp

With test-case gdb.server/unittest.exp and host board local-remote-host.exp I
run into:
...
builtin_spawn build/gdbserver/gdbserver --selftest^M
ERROR: : spawn id exp7 not open
    while executing
"expect {
-i exp7 -timeout 10
    -i $server_spawn_id
    -re "Ran ($decimal) unit tests, 0 failed" {
        set num_ran $expect_out(1,string)
        gdb_assert "..."
    ("uplevel" body line 1)
    invoked from within
"uplevel $body" NONE : spawn id exp7 not open
UNRESOLVED: gdb.server/unittest.exp: unit tests
...

The problem is (as fixed for avr in commit df5b8876083 ("gdb/testsuite: better
handle failures in simavr board, reap simavr process")), that gdb_expect through
remote_expect adds a "-i <gdb spawn id> -timeout 10", which is the one causing
the error.

As in aforementioned commit, fix this by using expect instead.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix host board local-remote-host-notty.exp timeouts
Tom de Vries [Fri, 14 Oct 2022 17:59:26 +0000 (19:59 +0200)]
[gdb/testsuite] Fix host board local-remote-host-notty.exp timeouts

With test-case gdb.server/stop-reply-no-thread-multi.exp and host board
local-remote-host-notty.exp we occasionally run into a silent out, due to
getting:
...
(gdb) kill^M
(gdb) The program is not being run.^M
...
instead of the expected:
...
(gdb) kill^M
The program is not being run.^M
(gdb)
...

Likewise, we occasionally run into a nonsilent timeout:
...
(gdb) disconnect^M
(gdb) You can't do that when your target is `exec'^M
FAIL: gdb.server/stop-reply-no-thread.exp: to_disable=Tthread: t_nonstop=on: \
  disconnect (timeout)
...

Typically, this results in the test-case taking more than two minutes to run.

The problem can be reproduced using just:
...
$ ssh -l $USER 127.0.0.1 gdb -q -ex kill
...

Note that ssh by default uses -T which disables pseudo-tty allocation (as
opposed to -t which forces pseudo-tty allocation):
...
$ ssh -l $USER 127.0.0.1 -T tty
not a tty
$ ssh -l $USER 127.0.0.1 -t tty
/dev/pts/5
Connection to 127.0.0.1 closed.
...
and according to https://stackoverflow.com/a/63241102 the behaviour we're
seeing is specific to using '-T'.

The related host board local-remote-host.exp does use '-t', and the only
difference between the two boards mentioned is whether editing is on or off.

Fix this by:
- moving the content of local-remote-host-notty.exp into
  local-remote-host.exp
- consequently, extending the copyright years in local-remote-host.exp
- including local-remote-host.exp in local-remote-host-notty.exp
  (making local-remote-host-notty.exp use '-t')
- adding -iex "set editing off" to GDBFLAGS in local-remote-host-notty.exp

This results in the test-case taking just 6 seconds to run.

Tested on x86_64-linux.

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

2 years ago[gdb/testsuite] Disable styling in host board local-remote-host.exp
Tom de Vries [Fri, 14 Oct 2022 17:59:26 +0000 (19:59 +0200)]
[gdb/testsuite] Disable styling in host board local-remote-host.exp

With test-case gdb.server/stop-reply-no-thread.exp and host board
local-remote-host.exp, I run into:
...
Breakpoint 1, ^[[33mmain^[[m () at ^[[32mstop-reply-no-thread.c^[[m:21^M
21        ^[[01;34mreturn^[[m ^[[35m0^[[m^[[31m;^[[m^M
(gdb) FAIL: gdb.server/stop-reply-no-thread.exp: to_disable=: t_nonstop=off: \
  continue to main
...

The problem is that styling is enabled, and that is causing a regexp mismatch.

With native, styling is disabled in default_gdb_init by doing
'setenv TERM "dumb"', but that only has effect because the build (where we
execute runtest, and consequently the setenv) and the host (where we execute
gdb) are the same.  For this host board however, gdb executes on a remote
host, and the setenv has no effect.

We could try to make some generic way to set TERM on the host, but for the
purposes of this test-case it seems sufficient to just add:
...
set GDBFLAGS "${GDBFLAGS} -iex \"set style enabled off\""
...
so let's go with that for now.

Tested on x86_64-linux.

2 years agoUse scoped_value_mark in more places
Tom Tromey [Mon, 3 Oct 2022 19:51:58 +0000 (13:51 -0600)]
Use scoped_value_mark in more places

I looked at all the spots using value_mark, and converted all the
straightforward ones to use scoped_value_mark instead.

Regression tested on x86-64 Fedora 34.

2 years agogdb/arm: Stop unwinding on error, but do not assert
Torbjörn SVENSSON [Thu, 6 Oct 2022 14:15:56 +0000 (16:15 +0200)]
gdb/arm: Stop unwinding on error, but do not assert

When it's impossible to read the FPCCR and XPSR, the unwinding is
unpredictable as the it's not possible to determine the correct
frame size or padding.
The only sane thing to do in this condition is to stop the unwinding.

Example session without this patch:

  (gdb) bt
  #0  SVC_Handler () at .../GPIO/GPIO_EXTI/Src/stm32f4xx_it.c:112
  .../gdb/arm-tdep.c:3594: internal-error: arm_m_exception_cache: Assertion `safe_read_memory_unsigned_integer (FPCCR, ARM_INT_REGISTER_SIZE, byte_order, &fpccr)' failed.
  A problem internal to GDB has been detected,
  further debugging may prove unreliable.
  ----- Backtrace -----
  0x5583bfb2a157 gdb_internal_backtrace_1
  ...
  ---------------------

  This is a bug, please report it.  For instructions, see:
  <https://www.gnu.org/software/gdb/bugs/>.

  Aborted (core dumped)

Example session with this patch:

  (gdb) bt
  #0  SVC_Handler () at .../GPIO/GPIO_EXTI/Src/stm32f4xx_it.c:112
  warning: Could not fetch required FPCCR content.  Further unwind is impossible.
  #1  <signal handler called>
  (gdb)

Reviewed-by: Pedro Alves <pedro@palves.net>
Signed-off-by: Torbjörn SVENSSON <torbjorn.svensson@foss.st.com>
2 years agoPowerPC SPE disassembly and tests
Alan Modra [Thu, 13 Oct 2022 05:40:15 +0000 (16:10 +1030)]
PowerPC SPE disassembly and tests

Where sub and subf forms of an instruction exist we generally
disassemble to the extended insn sub form rather than the underlying
machine subf instruction.  Do so for SPE evsubw and evsubiw too.

spe_ambiguous.d always was a bit too optimistic.  There is no sensible
way to disassemble identical bytes back to different and original
source.  Instead change the test to check -Mraw results.

gas/
* testsuite/gas/ppc/ppc.exp: Run spe_ambiguous test.
* testsuite/gas/ppc/spe.d: Expect evsubw and evsubiw rather than
evsubfw and evsubifw.
* testsuite/gas/ppc/spe_ambiguous.s: Test evnor form equivalent
to evnot.
* testsuite/gas/ppc/spe_ambiguous.d: Test Mraw.
opcodes/
* ppc-opc.c (powerpc_opcodes): Move evsubw before evsubfw and
evsubiw before evsubifw and mark EXT.

2 years agoe200 LSP support
Alan Modra [Wed, 12 Oct 2022 22:16:28 +0000 (08:46 +1030)]
e200 LSP support

It has bothered me for a long time that we have disabled LSP (and SPE)
tests.  Also the LSP test comment indicating there is something wrong
with get_powerpc_dialect.  I don't think there is.  Decoding of a VLE
instruction depends on whether the processor is in VLE mode (some
processors support both VLE and standard PPC) which we flag per
section with SHF_PPC_VLE for decoding when disassembling.

Background: Some versions of powerpc e200 have "Lightweight Signal
Processing" support, examples being e200z215 and e200z425.  As far as
I can tell, LSP and SPE are mutually exclusive.  This seems to be
borne out by insn encoding, for example LSP "zvaddih" and SPE "evaddw"
have the same encoding.  So none of the processor descriptions in
ppc_opts ought to have both PPC_OPCODE_LSP and PPC_OPCODE_SPE/2, if we
want disassembly to work.  I also could not find anything to suggest
that the LSP insns are enabled only in VLE mode, which means the LSP
insns should not be in vle_opcodes.

Fix all this by moving the LSP insns to their own table, and add a new
e200z2 cpu entry with LSP support, removing LSP from -me200z4 and from
-mvle.  (Yes, I know, as I said above some of the e200z4 processors
have LSP.  Others have SPE.  It's hard to choose good options.  Think
of z2 as meaning earlier, z4 as later.)  Also add -mlsp to allow
adding the LSP insn set.

include/
* opcode/ppc.h (lsp_opcodes, lsp_num_opcodes): Declare.
(LSP_OP_TO_SEG): Define.
binutils/
* doc/binutils.texi: Update ppc docs.
gas/
* config/tc-ppc.c (ppc_setup_opcodes): Add lsp opcodes to ppc_hash.
* doc/c-ppc.texi: Document e200 and lsp.
* testsuite/gas/ppc/lsp-checks.d: Assemble with -me200z2.
* testsuite/gas/ppc/lsp.d: Likewise, disassembly too.
* testsuite/gas/ppc/ppc.exp: Don't xfail lsp test.
opcodes/
* ppc-dis.c (ppc_opts): Add e200z2 and lsp.  Don't set
PPC_OPCODE_LSP for e200z4 or vle.
(ppc_parse_cpu): Mutually exclude LSP and SPE.
(LSP_OPCD_SEGS): Define.
(lsp_opcd_indices): New array.
(disassemble_init_powerpc): Init lsp_opcd_indices.
(lookup_lsp): New function.
(print_insn_powerpc): Call it.
* ppc-opc.c: Include libiberty.h for ARRAY_SIZE and use throughout.
(vle_opcodes): Move LSP opcodes to..
(lsp_opcodes): ..here, and sort.
(lsp_num_opcodes): New.

2 years agoPR29677, Field `the_bfd` of `asymbol` is uninitialised
Alan Modra [Fri, 14 Oct 2022 00:00:21 +0000 (10:30 +1030)]
PR29677, Field `the_bfd` of `asymbol` is uninitialised

Besides not initialising the_bfd of synthetic symbols, counting
symbols when sizing didn't match symbols created if there were any
dynsyms named "".  We don't want synthetic symbols without names
anyway, so get rid of them.  Also, simplify and correct sanity checks.

PR 29677
* mach-o.c (bfd_mach_o_get_synthetic_symtab): Rewrite.

2 years ago[gdb/testsuite] Drop unnecessary -Wl,-soname in gdb.base/skip-solib.exp
Tom de Vries [Fri, 14 Oct 2022 11:09:51 +0000 (13:09 +0200)]
[gdb/testsuite] Drop unnecessary -Wl,-soname in gdb.base/skip-solib.exp

I noticed in gdb.base/skip-solib.exp:
...
if {[gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} \
        [list debug -Wl,-soname,${libname}.so]] != ""} {
    return -1
}
...
that the -Wl,-soname argument is missing an ldflags= prefix, but adding it
gives us a duplicate:
...
Executing on host: gcc -fno-stack-protector \
  outputs/gdb.base/skip-solib/skip-solib-lib.c.o  -fdiagnostics-color=never \
  -shared -g  -Wl,-soname,libskip-solib.so -Wl,-soname,libskip-solib.so -lm \
  -o outputs/gdb.base/skip-solib/libskip-solib.so    (timeout = 300)
...
so apparently it's taken care of by gdb_compile_shlib.

Drop the inactive and also unnecessary -Wl,-soname,${libname}.so from the
flags list for the gdb_compile_shlib call.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with PIE
Tom de Vries [Fri, 14 Oct 2022 11:09:51 +0000 (13:09 +0200)]
[gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with PIE

With test-case gdb.base/infoline-reloc-main-from-zero.exp and target board
unix/-fPIE/-pie I run into:
...
gdb compile failed, ld: infoline-reloc-main-from-zero: error: \
  PHDR segment not covered by LOAD segment
collect2: error: ld returned 1 exit status
...

When running with native, I find that the executable is static:
...
$ file infoline-reloc-main-from-zero
infoline-reloc-main-from-zero: ELF 64-bit LSB executable, x86-64, \
  version 1 (SYSV), statically linked, BuildID[sha1]=$hex, with debug_info, \
  not stripped
...
despite not having been compiled with -static.

Fix the compilation by adding -static to the compilation flags.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with clang
Tom de Vries [Fri, 14 Oct 2022 11:09:51 +0000 (13:09 +0200)]
[gdb/testsuite] Fix gdb.base/infoline-reloc-main-from-zero.exp with clang

With test-case gdb.base/infoline-reloc-main-from-zero.exp and clang I run into:
...
gdb compile failed, clang-13.0: warning: -e main: 'linker' input unused \
  [-Wunused-command-line-argument]
clang-13.0: warning: -Wl,-Ttext=0x00: 'linker' input unused \
  [-Wunused-command-line-argument]
clang-13.0: warning: -Wl,-N: 'linker' input unused \
  [-Wunused-command-line-argument]
UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: \
  infoline-reloc-main-from-zero.exp
UNTESTED: gdb.base/infoline-reloc-main-from-zero.exp: failed to compile
...

Fix this by using ldflags instead of additional_flags.

Likewise, fix all occurrences of:
...
$ find gdb/testsuite -name *.exp | xargs grep additional_flags.*Wl
...

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Fix nopie test-cases with target board unix/-fPIE/-pie
Tom de Vries [Fri, 14 Oct 2022 11:09:50 +0000 (13:09 +0200)]
[gdb/testsuite] Fix nopie test-cases with target board unix/-fPIE/-pie

Compilers default to either PIE or no-PIE executables.

In order to test PIE executables with a compiler that produces non-PIE by
default, we can use target board unix/-fPIE/-pie, which set the multilib_flags
of the target board to "-fPIE -pie".

Likewise, we can use target board unix/-fno-PIE/-no-pie with a compiler that
produces PIE by default.

The target board unix/-fno-PIE/-no-pie has a potential problem when compiling
shared libs, because the multilib_flags will override the attempts of
gdb_compile_shlib to compile with -fPIC.  This is taken care of by running the
body of gdb_compile_shlib wrapped in with_PIE_multilib_flags_filtered.

The target board unix/-fPIE/-pie has a problem with nopie compilations.  The
current approach is to do the compilation hoping for the best, and if we find
out that the resulting executable is PIE despite specifying nopie, we error
out with the standard error message "nopie failed to prevent PIE executable".

That however does not work for hard-coded assembly nopie test-cases, which will
just noisily refuse to compile:
...
ld: amd64-disp-step0.o: relocation R_X86_64_32S against `.text' can not be \
  used when making a PIE object; recompile with -fPIE^M
...

Fix this in gdb_compile by filtering out the PIE settings in the target board
multilib_flags when pie or nopie is specified.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Factor out with_PIE_multilib_flags_filtered
Tom de Vries [Fri, 14 Oct 2022 11:09:50 +0000 (13:09 +0200)]
[gdb/testsuite] Factor out with_PIE_multilib_flags_filtered

Factor out new procs with_PIE_multilib_flags_filtered and
with_multilib_flags_filtered from proc gdb_compile_shlib.

Tested on x86_64-linux.

2 years ago[gdb/testsuite] Add cond_wrap proc
Tom de Vries [Fri, 14 Oct 2022 11:09:50 +0000 (13:09 +0200)]
[gdb/testsuite] Add cond_wrap proc

Add a new proc cond_wrap, that can be used to replace the repetitive:
...
    if { $cond } {
wrap {
    <body>
}
    } else {
<body>
    }
...
with the shorter:
...
    cond_wrap $cond wrap {
<body>
    }
...

Tested on x86_64-linux.

2 years agogdb: add Torbjörn Svensson to gdb/MAINTAINERS
Torbjörn SVENSSON [Fri, 14 Oct 2022 11:02:11 +0000 (13:02 +0200)]
gdb: add Torbjörn Svensson to gdb/MAINTAINERS

2 years agoRISC-V: Zicbo{m,p,z} adjustments to riscv_multi_subset_supports_ext()
Jan Beulich [Fri, 14 Oct 2022 10:52:16 +0000 (12:52 +0200)]
RISC-V: Zicbo{m,p,z} adjustments to riscv_multi_subset_supports_ext()

The lack thereof did caused gas to issue "internal: unreachable
INSN_CLASS_*" errors when trying to assemble respective insns without
the feature(s) enabled via e.g. ".option arch, ...". Of course a proper
hint towards the missing extension then wasn't given either.

2 years agoRISC-V: Imply 'Zicsr' from privileged extensions with CSRs
Tsukasa OI [Mon, 5 Sep 2022 08:11:54 +0000 (08:11 +0000)]
RISC-V: Imply 'Zicsr' from privileged extensions with CSRs

'H', 'Smstateen', 'Sscofpmf' and 'Sstc' are four privileged extensions with
their CSR definitions and 'Smepmp' is a privileged extension with additional
CSR bits.

Volume II: Privileged Architecture of the RISC-V ISA Manual states that the
privileged architecture requires the 'Zicsr' extension.  However, current
GNU Binutils has no direct way whether the program has dependency to the
privileged architecture itself.

As a workaround, we should add implications from privileged extensions that
either add new CSRs, extend existing CSRs or depends on using CSRs.

This commit adds such implications for existing privileged extensions that
satisfy this condition.

gas/ChangeLog:

* testsuite/gas/riscv/march-imply-h.d: New test, at least for 'H'.

bfd/ChangeLog:

* elfxx-riscv.c (riscv_implicit_subsets): Add 'Zicsr'
implicications for privileged extensions 'H', 'Smstateen',
'Sscofpmf', 'Sstc' and 'Smepmp'.

2 years agoopcodes/riscv-dis.c: Remove last_map_state
Tsukasa OI [Sat, 27 Aug 2022 13:08:03 +0000 (13:08 +0000)]
opcodes/riscv-dis.c: Remove last_map_state

Before changing the core disassembler, we take care of minor code clarity
issues and improve readability.

This commit removes unused variable last_map_state (set by the
print_insn_riscv function but not read anywhere else).

opcodes/ChangeLog:

* riscv-dis.c (last_map_state): Remove.
(print_insn_riscv): Remove setting last_map_state.

2 years agoopcodes/riscv-dis.c: Make XLEN variable static
Tsukasa OI [Sat, 27 Aug 2022 13:33:51 +0000 (13:33 +0000)]
opcodes/riscv-dis.c: Make XLEN variable static

Before changing the core disassembler, we take care of minor code clarity
issues and improve readability.

Since xlen variable is not (and should not) used outside riscv-dis.c,
this commit makes this variable static.

opcodes/ChangeLog:

* riscv-dis.c (xlen): Make this variable static.