binutils-gdb.git
3 years agohaiku tidy
Alan Modra [Thu, 2 Sep 2021 23:52:08 +0000 (09:22 +0930)]
haiku tidy

--enable-maintainer-mode showed a number of files needing to be
regenerated, and in the case of ld/Makefile.in that the file was
regenerated by hand.  Nothing to see here really.

ld/
* Makefile.am (ALL_64_EMULATION_SOURCES): Sort haiku entry.
* Makefile.in: Regenerate.
* po/BLD-POTFILES.in: Regenerate.
libctf/
* configure: Regenerate.
zlib/
* configure: Regenerate.

3 years agogold: --export-dynamic-symbol: don't imply -u
Fangrui Song [Fri, 3 Sep 2021 02:07:53 +0000 (19:07 -0700)]
gold: --export-dynamic-symbol: don't imply -u

to match GNU ld.

gold/
* archive.cc (Library_base::should_include_member): Don't handle
--export-dynamic-symbol.
* symtab.cc (Symbol_table::do_add_undefined_symbols_from_command_line):
Likewise.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 3 Sep 2021 00:00:06 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agoAdd support for the haiku operating system. These are the os support patches we...
Alexander von Gluck IV [Thu, 2 Sep 2021 11:19:14 +0000 (12:19 +0100)]
Add support for the haiku operating system.  These are the os support patches we have been grooming and maintaining for quite a few years over on git.haiku-os.org.  All of these architectures are working and most have been stable for quite some time.

3 years agoFix the V850 assembler's generation of relocations for the st.b instruction.
Nick Clifton [Thu, 2 Sep 2021 11:16:10 +0000 (12:16 +0100)]
Fix the V850 assembler's generation of relocations for the st.b instruction.

PR 28292
gas * config/tc-v850.c (handle_lo16): Also accept
BFD_RELOC_V850_LO16_SPLIT_OFFSET.
* testsuite/gas/v850/split-lo16.s: Add extra line.
* testsuite/gas/v850/split-lo16.d: Update expected disassembly.

opcodes * v850-opc.c (D16): Use BFD_RELOC_V850_LO16_SPLIT_OFFSET in place
of BFD_RELOC_16.

3 years agoSHT_SYMTAB_SHNDX handling
Alan Modra [Thu, 2 Sep 2021 00:26:11 +0000 (09:56 +0930)]
SHT_SYMTAB_SHNDX handling

.symtab_shndx section contents is an array, one entry for each symbol
in .symtab, present when the number of symbols exceeds a little less
than 64k.  Since the mapping is 1-1 with symbols there is no need to
keep both dest_index and destshndx_index in elf_sym_strtab.  Instead,
just make sure that the shndx pointers to the swap functions are kept
NULL when .symtab_shndx does not exist.  Also, strtabcount in the
linker's elf hash table is incremented in lock-step with the output
symcount, so that can disappear too.

3 years agoPTR_ADD and NPTR_ADD for bfd.h
Alan Modra [Wed, 1 Sep 2021 23:34:52 +0000 (09:04 +0930)]
PTR_ADD and NPTR_ADD for bfd.h

This defines a couple of macros used to avoid ubsan complaints about
calculations involving NULL pointers.  PTR_ADD should be used in the
case where it is known that the offset is always zero with a NULL
pointer, and you'd like to know if a non-zero offset is ever used.
NPTR_ADD should be rarely used, but is defined for cases where a
non-zero offset is expected and should be ignored if the pointer is
NULL.

bfd/
* bfd-in.h (PTR_ADD, NPTR_ADD): Define.
* bfd-in2.h: Regenerate.
* elf-eh-frame.c (adjust_eh_frame_local_symbols): Avoid NULL
pointer calculations.
* elflink.c (_bfd_elf_strip_zero_sized_dynamic_sections): Likewise.
(bfd_elf_add_dt_needed_tag, elf_finalize_dynstr): Likewise.
(elf_link_add_object_symbols, elf_link_input_bfd): Likewise.
(bfd_elf_final_link, bfd_elf_gc_record_vtinherit): Likewise.
binutils/
* objdump.c (disassemble_section): Use PTR_ADD for rel_ppend.

3 years agoobstack.h __PTR_ALIGN vs. ubsan
Alan Modra [Wed, 1 Sep 2021 23:35:05 +0000 (09:05 +0930)]
obstack.h __PTR_ALIGN vs. ubsan

Current ubsan complains on every use of __PTR_ALIGN (when ptrdiff_t is
as large as a pointer), due to making calculations relative to a NULL
pointer.  This patch avoids the problem by extracting out and
simplifying __BPTR_ALIGN for the usual case.  I've continued to use
ptrdiff_t here, where it might be better to throw away __BPTR_ALIGN
entirely and just assume uintptr_t exists.

* obstack.h (__PTR_ALIGN): Expand and simplify __BPTR_ALIGN
rather than calculating relative to a NULL pointer.

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 2 Sep 2021 00:00:09 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years ago[gdb/testsuite] Fix dwo path in fission-*.S
Tom de Vries [Wed, 1 Sep 2021 16:18:05 +0000 (18:18 +0200)]
[gdb/testsuite] Fix dwo path in fission-*.S

[ Using $build for /home/vries/gdb_versions/devel/build to make things a bit
more readable. ]

When using make check// to run test-case gdb.dwarf2/fission-base.exp:
...
( cd $build/gdb; make check//unix RUNTESTFLAGS="fission-base.exp" )
...
we run into:
...
(gdb) file \
  $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base^M
Reading symbols from \
  $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base...^M
warning: Could not find DWO CU \
  $build/gdb/testsuite.1/outputs/gdb.dwarf2/fission-base/fission-base.dwo \
  (0x807060504030201) referenced by CU at offset 0xc7 [in module \
  $build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base]^M
...

The problem is that the executable refers to the dwo file using path name
$build/gdb/testsuite.1/outputs/gdb.dwarf2/fission-base/fission-base.dwo,
while the actual dwo file is at
$build/gdb/testsuite.unix/outputs/gdb.dwarf2/fission-base/fission-base.dwo.

This is caused by this trick in fission-base.S:
...
 #define XSTR(s) STR(s)
 #define STR(s) #s
   ...
   .asciz XSTR(DWO)        # DW_AT_GNU_dwo_name
...
and:
...
$ echo | gcc -E -dD - | grep "define unix"
...

I used this trick to avoid doing additional_flags=-DDWO=\"$dwo\", since I was
concerned that there could be quoting issues.

However, I've found other uses of this pattern, f.i. in
gdb/testsuite/gdb.base/corefile-buildid.exp:
...
  additional_flags=-DSHLIB_NAME=\"$dlopen_lib\"]
...

So, fix this by:
- using additional_flags=-DDWO=\"$dwo\" and
- using plain DWO instead of XSTR(DWO)

Likewise in other gdb.dwarf2/fission*.exp test-cases.

Tested on x86_64-linux, using make check//unix.

gdb/testsuite/ChangeLog:

2021-09-01  Tom de Vries  <tdevries@suse.de>

PR testsuite/28298
* gdb.dwarf2/fission-base.S: Use DWO instead of XSTR(DWO).
* gdb.dwarf2/fission-loclists-pie.S: Same.
* gdb.dwarf2/fission-loclists.S: Same.
* gdb.dwarf2/fission-reread.S: Same.
* gdb.dwarf2/fission-base.exp: Use additional_flags=-DDWO=\"$dwo\".
* gdb.dwarf2/fission-loclists-pie.exp: Same.
* gdb.dwarf2/fission-loclists.exp: Same.
* gdb.dwarf2/fission-reread.exp: Same.

3 years ago[gdb/testsuite] Fix gdb.fortran/call-no-debug.exp symbol search
Tom de Vries [Wed, 1 Sep 2021 09:25:39 +0000 (11:25 +0200)]
[gdb/testsuite] Fix gdb.fortran/call-no-debug.exp symbol search

On openSUSE Tumbleweed I ran into:
...
(gdb) ptype outstring_func.part^M
No symbol "outstring_func" in current context.^M
(gdb) FAIL: gdb.fortran/call-no-debug.exp: ptype outstring_func.part
...
while on openSUSE Leap 15.2 I have instead:
...
(gdb) ptype string_func_^M
type = <unknown return type> ()^M
(gdb) PASS: gdb.fortran/call-no-debug.exp: ptype string_func_
...

The difference is caused by the result for "info function string_func", which
is this for the latter:
...
(gdb) info function string_func^M
All functions matching regular expression "string_func":^M
^M
Non-debugging symbols:^M
0x000000000040089c  string_func_^M
...
but this for the former:
...
(gdb) info function string_func^M
All functions matching regular expression "string_func":^M
^M
Non-debugging symbols:^M
0x00000000004012bb  string_func_^M
0x00007ffff7bac5b0  outstring_func.part^M
0x00007ffff7bb1a00  outstring_func.part^M
...

The extra symbols are part of glibc:
...
$ nm /lib64/libc.so.6 | grep string_func
00000000000695b0 t outstring_func.part.0
000000000006ea00 t outstring_func.part.0
...

If glibc debug info is installed, we get instead:
...
(gdb) info function string_func^M
All functions matching regular expression "string_func":^M
^M
File /usr/src/debug/glibc-2.33-9.1.x86_64/stdio-common/vfprintf-internal.c:^M
236:    static int outstring_func(int, size_t, const unsigned int *, FILE *);^M
^M
File vfprintf-internal.c:^M
236:    static int outstring_func(int, size_t, const unsigned char *, FILE *);^M
^M
Non-debugging symbols:^M
0x00000000004012bb  string_func_^M
...
and the FAIL doesn't trigger.

Fix this by calling "info function string_func" before starting the exec, such
that only symbols of the exec are taken into account.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-09-01  Tom de Vries  <tdevries@suse.de>

* gdb.fortran/call-no-debug.exp: Avoid shared lib symbols for
find_mangled_name calls.

3 years agonfp: add validity check of island and me
Yinjun Zhang [Thu, 26 Aug 2021 01:01:17 +0000 (21:01 -0400)]
nfp: add validity check of island and me

AddressSanitizer detects heap-buffer-overflow when running
"objdump -D" for nfp .nffw files.

PR 27854
* nfp-dis.c (_NFP_ISLAND_MAX, _NFP_ME_MAX): Define.
(nfp_priv_data): ..and use here.
(_print_instrs): Sanity check island and menum.

Signed-off-by: Yinjun Zhang <yinjun.zhang@corigine.com>
Signed-off-by: Simon Horman <simon.horman@corigine.com>
3 years agoPR28250, Null pointer dereference in debug_class_type_samep
Alan Modra [Wed, 1 Sep 2021 00:36:08 +0000 (10:06 +0930)]
PR28250, Null pointer dereference in debug_class_type_samep

Typo fix, obviously should be m1->variants != NULL, not
m1->variants == NULL.

PR 28250
* debug.c (debug_class_type_samep): Correct m1->variants test.

3 years agoAutomatic date update in version.in
GDB Administrator [Wed, 1 Sep 2021 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb: remove breakpoint_find_if
Simon Marchi [Mon, 30 Aug 2021 20:10:41 +0000 (16:10 -0400)]
gdb: remove breakpoint_find_if

Remove breakpoint_find_if, replace its sole usage with using
all_breakpoints directly instead.  At the same time, change return
types to use bool.

Change-Id: I9ec392236b4804b362d16ab563330b9c07311106

3 years agoUpdate the how-to-make-a-release document so that a check for empty manual pages...
Nick Clifton [Tue, 31 Aug 2021 10:19:56 +0000 (11:19 +0100)]
Update the how-to-make-a-release document so that a check for empty manual pages is included.  cf PR 28144

3 years agoRISC-V: Extend .insn directive to support hardcode encoding.
Nelson Chu [Fri, 16 Jul 2021 05:32:18 +0000 (22:32 -0700)]
RISC-V: Extend .insn directive to support hardcode encoding.

The .insn directive can let users use their own instructions, or
some new instruction, which haven't supported in the old binutils.
For example, if users want to use sifive cache instruction, they
cannot just write "cflush.d1.l1" in the assembly code, they should
use ".insn i SYSTEM, 0, x0, x10, -0x40".  But the .insn directive
may not easy to use for some cases, and not so friendly to users.
Therefore, I believe most of the users will use ".word 0xfc050073",
to encode the instructions directly, rather than use .insn.  But
once we have supported the mapping symbols, the .word directives
are marked as data, so disassembler won't dump them as instructions
as usual.  I have discussed this with Kito many times, we all think
extend the .insn direcitve to support the hardcode encoding, is the
easiest way to resolve the problem.  Therefore, there are two more
.insn formats are proposed as follows,

(original) .insn <type>, <operand1>, <operand2>, ...
           .insn <insn-length>, <value>
           .insn <value>

The <type> is string, and the <insn-length> and <value> are constants.

gas/
* config/tc-riscv.c (riscv_ip_hardcode): Similar to riscv_ip,
but assembles an instruction according to the hardcode values
of .insn directive.
* doc/c-riscv.texi: Document two new .insn formats.
* testsuite/gas/riscv/insn-fail.d: New testcases.
* testsuite/gas/riscv/insn-fail.l: Likewise.
* testsuite/gas/riscv/insn-fail.s: Likewise.
* testsuite/gas/riscv/insn.d: Updated.
* testsuite/gas/riscv/insn.s: Likewise.

3 years agoUse gdbfmt for vprintf_filtered.
John Baldwin [Tue, 31 Aug 2021 00:23:15 +0000 (17:23 -0700)]
Use gdbfmt for vprintf_filtered.

gdbfmt was already used for printf_filtered, so using it for
vprintf_filtered is more consistent.

As a result, all callers of vfprintf_maybe_filtered now use gdbfmt, so
the function can be simplified to assume the gdbfmt case and remove
the associated bool argument.  Similary, vprintf_filtered is now a
simple wrapper around vfprintf_filtered.

3 years agoAutomatic date update in version.in
GDB Administrator [Tue, 31 Aug 2021 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agofbsd-nat: Don't use '%jd' and '%ju' with printf_filtered.
John Baldwin [Mon, 30 Aug 2021 18:08:38 +0000 (11:08 -0700)]
fbsd-nat: Don't use '%jd' and '%ju' with printf_filtered.

The handler for 'info proc status' for native processes on FreeBSD
uses the 'j' size modifier along with uintmax_t / intmax_t casts to
output integer values for types such as off_t that are not aliases of
a basic C type such as 'int' or 'long'.  printf_filtered does not
support the 'j' modifer, so this resulted in runtime errors in
practice:

(gdb) info proc stat
process 8674
Name: ls
State: T (stopped)
Parent process: 8673
Process group: 8674
Session id: 2779
Unrecognized format specifier 'j' in printf

Instead, use plongest and pulongest to generate the output strings of
these integer values.

3 years agogdb: fix build error in unittests/parallel-for-selftests.c
Simon Marchi [Mon, 30 Aug 2021 17:54:45 +0000 (13:54 -0400)]
gdb: fix build error in unittests/parallel-for-selftests.c

We get this error when building GDB on some platforms.  I get it using
g++-10 on Ubuntu 20.04 (installed using the distro package).  It was
also reported by John Baldwin, using a clang that uses libc++.

      CXX    unittests/parallel-for-selftests.o
    cc1plus: warning: command line option '-Wmissing-prototypes' is valid for C/ObjC but not for C++
    /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c: In function 'void selftests::parallel_for::test(int)':
    /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:53:30: error: use of deleted function 'std::atomic<int>::atomic(const std::atomic<int>&)'
       53 |   std::atomic<int> counter = 0;
          |                              ^
    In file included from /usr/include/c++/9/future:42,
                     from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/thread-pool.h:29,
                     from /home/smarchi/src/binutils-gdb/gdb/../gdbsupport/parallel-for.h:26,
                     from /home/smarchi/src/binutils-gdb/gdb/unittests/parallel-for-selftests.c:22:
    /usr/include/c++/9/atomic:755:7: note: declared here
      755 |       atomic(const atomic&) = delete;
          |       ^~~~~~
    /usr/include/c++/9/atomic:759:17: note:   after user-defined conversion: 'constexpr std::atomic<int>::atomic(std::atomic<int>::__integral_type)'
      759 |       constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
          |                 ^~~~~~

I haven't dug to know why it does not happen everywhere, but this patch
fixes it by using the constructor to initialize the variable, rather
than the assignment operator.

Change-Id: I6b27958171bf6187f6a875657395fd10441db7e6

3 years agoRISC-V: PR28291, Fix the gdb fails that PR27916 caused.
Nelson Chu [Mon, 30 Aug 2021 15:20:45 +0000 (23:20 +0800)]
RISC-V: PR28291, Fix the gdb fails that PR27916 caused.

* According to PR28291, we get the following unexpected gdb behavior,

(gdb) disassemble 0x0,+4
Dump of assembler code from 0x0 to 0x4:
   0x0000000000000000:
   0x0000000000000001:
   0x0000000000000002:
   0x0000000000000003:
End of assembler dump.

* This patch should fix it to the right behavior,

(gdb) disassemble 0x0,+4
Dump of assembler code from 0x0 to 0x4:
   0x0000000000000000:  Cannot access memory at address 0x0

opcodes/
    pr 28291
    * riscv-dis.c (print_insn_riscv): Return STATUS if it is not zero.

3 years agoAdd some parallel_for_each tests
Tom Tromey [Sat, 28 Aug 2021 19:16:50 +0000 (13:16 -0600)]
Add some parallel_for_each tests

Tom de Vries noticed that a patch in the DWARF scanner rewrite series
caused a regression in parallel_for_each -- it started crashing in the
case where the number of threads is 0 (there was an unchecked use of
"n-1" that was used to size an array).

He also pointed out that there were no tests of parallel_for_each.
This adds a few tests of parallel_for_each, primarily testing that
different settings for the number of threads will work.  This test
catches the bug that he found in that series.

3 years agoAdd a show function for "maint show worker-threads"
Tom Tromey [Sun, 29 Aug 2021 02:38:27 +0000 (20:38 -0600)]
Add a show function for "maint show worker-threads"

I wanted to see how many threads gdb thought it was using, but
"maint show worker-threads" only reported "unlimited".  This patch
adds a show function so that it will now report the number of threads
gdb has started.

Regression tested on x86-64 Fedora 34.

3 years ago[gdb/cli] Don't assert on empty string for core-file
Tom de Vries [Mon, 30 Aug 2021 12:34:03 +0000 (14:34 +0200)]
[gdb/cli] Don't assert on empty string for core-file

With current gdb we run into:
...
$ gdb -batch '' ''
: No such file or directory.
pathstuff.cc:132: internal-error: \
  gdb::unique_xmalloc_ptr<char> gdb_abspath(const char*): \
  Assertion `path != NULL && path[0] != '\0'' failed.
...

Fix this by skipping the call to gdb_abspath in core_target_open in the
empty-string case, such that we have instead:
...
$ gdb -batch '' ''
: No such file or directory.
: No such file or directory.
$
...

Tested on x86_64-linux.

gdb/ChangeLog:

2021-08-30  Tom de Vries  <tdevries@suse.de>

PR cli/28290
* gdb/corelow.c (core_target_open): Skip call to gdb_abspath in the
empty-string case.

gdb/testsuite/ChangeLog:

2021-08-30  Tom de Vries  <tdevries@suse.de>

PR cli/28290
* gdb.base/batch-exit-status.exp: Add gdb '' and gdb '' '' tests.

3 years agoRISC-V: PR27916, Support mapping symbols.
Nelson Chu [Tue, 13 Jul 2021 10:09:38 +0000 (03:09 -0700)]
RISC-V: PR27916, Support mapping symbols.

Similar to ARM/AARCH64, we add mapping symbols in the symbol table,
to mark the start addresses of data and instructions.  The $d means
data, and the $x means instruction.  Then the disassembler uses these
symbols to decide whether we should dump data or instruction.

Consider the mapping-04 test case,
$ cat tmp.s
  .text
  .option norelax
  .option norvc
  .fill 2, 4, 0x1001
  .byte 1
  .word 0
  .balign 8
  add a0, a0, a0
  .fill 5, 2, 0x2002
  add a1, a1, a1
  .data
  .word 0x1             # No need to add mapping symbols.
  .word 0x2

$ riscv64-unknown-elf-as tmp.s -o tmp.o
$ riscv64-unknown-elf-objdump -d tmp.o

Disassembly of section .text:

0000000000000000 <.text>:
   0:   00001001         .word   0x00001001  # Marked $d, .fill directive.
   4:   00001001         .word   0x00001001
   8:   00000001         .word   0x00000001  # .byte + part of .word.
   c:   00               .byte   0x00        # remaining .word.
   d:   00               .byte   0x00        # Marked $d, odd byte of alignment.
   e:   0001             nop                 # Marked $x, nops for alignment.
  10:   00a50533         add     a0,a0,a0
  14:   20022002         .word   0x20022002  # Marked $d, .fill directive.
  18:   20022002         .word   0x20022002
  1c:   2002             .short  0x2002
  1e:   00b585b3         add     a1,a1,a1    # Marked $x.
  22:   0001             nop                 # Section tail alignment.
  24:   00000013         nop

* Use $d and $x to mark the distribution of data and instructions.
  Alignments of code are recognized as instructions, since we usually
  fill nops for them.

* If the alignment have odd bytes, then we cannot just fill the nops
  into the spaces.  We always fill an odd byte 0x00 at the start of
  the spaces.  Therefore, add a $d mapping symbol for the odd byte,
  to tell disassembler that it isn't an instruction.  The behavior
  is same as Arm and Aarch64.

The elf/linux toolchain regressions all passed.  Besides, I also
disable the mapping symbols internally, but use the new objudmp, the
regressions passed, too.  Therefore, the new objudmp should dump
the objects corretly, even if they don't have any mapping symbols.

bfd/
pr 27916
* cpu-riscv.c (riscv_elf_is_mapping_symbols): Define mapping symbols.
* cpu-riscv.h: extern riscv_elf_is_mapping_symbols.
* elfnn-riscv.c (riscv_maybe_function_sym): Do not choose mapping
symbols as a function name.
(riscv_elf_is_target_special_symbol): Add mapping symbols.
binutils/
pr 27916
* testsuite/binutils-all/readelf.s: Updated.
* testsuite/binutils-all/readelf.s-64: Likewise.
* testsuite/binutils-all/readelf.s-64-unused: Likewise.
* testsuite/binutils-all/readelf.ss: Likewise.
* testsuite/binutils-all/readelf.ss-64: Likewise.
* testsuite/binutils-all/readelf.ss-64-unused: Likewise.
gas/
pr 27916
* config/tc-riscv.c (make_mapping_symbol): Create a new mapping symbol.
(riscv_mapping_state): Decide whether to create mapping symbol for
frag_now.  Only add the mapping symbols to text sections.
(riscv_add_odd_padding_symbol): Add the mapping symbols for the
riscv_handle_align, which have odd bytes spaces.
(riscv_check_mapping_symbols): Remove any excess mapping symbols.
(md_assemble): Marked as MAP_INSN.
(riscv_frag_align_code): Marked as MAP_INSN.
(riscv_init_frag): Add mapping symbols for frag, it usually called
by frag_var.  Marked as MAP_DATA for rs_align and rs_fill, and
marked as MAP_INSN for rs_align_code.
(s_riscv_insn): Marked as MAP_INSN.
(riscv_adjust_symtab): Call riscv_check_mapping_symbols.
* config/tc-riscv.h (md_cons_align): Defined to riscv_mapping_state
with MAP_DATA.
(TC_SEGMENT_INFO_TYPE): Record mapping state for each segment.
(TC_FRAG_TYPE): Record the first and last mapping symbols for the
fragments.  The first mapping symbol must be placed at the start
of the fragment.
(TC_FRAG_INIT): Defined to riscv_init_frag.
* testsuite/gas/riscv/mapping-01.s: New testcase.
* testsuite/gas/riscv/mapping-01a.d: Likewise.
* testsuite/gas/riscv/mapping-01b.d: Likewise.
* testsuite/gas/riscv/mapping-02.s: Likewise.
* testsuite/gas/riscv/mapping-02a.d: Likewise.
* testsuite/gas/riscv/mapping-02b.d: Likewise.
* testsuite/gas/riscv/mapping-03.s: Likewise.
* testsuite/gas/riscv/mapping-03a.d: Likewise.
* testsuite/gas/riscv/mapping-03b.d: Likewise.
* testsuite/gas/riscv/mapping-04.s: Likewise.
* testsuite/gas/riscv/mapping-04a.d: Likewise.
* testsuite/gas/riscv/mapping-04b.d: Likewise.
* testsuite/gas/riscv/mapping-norelax-04a.d: Likewise.
* testsuite/gas/riscv/mapping-norelax-04b.d: Likewise.
* testsuite/gas/riscv/no-relax-align.d: Updated.
* testsuite/gas/riscv/no-relax-align-2.d: Likewise.
include/
pr 27916
* opcode/riscv.h (enum riscv_seg_mstate): Added.

opcodes/
pr 27916
* riscv-dis.c (last_map_symbol, last_stop_offset, last_map_state):
Added to dump sections with mapping symbols.
(riscv_get_map_state): Get the mapping state from the symbol.
(riscv_search_mapping_symbol): Check the sorted symbol table, and
then find the suitable mapping symbol.
(riscv_data_length): Decide which data size we should print.
(riscv_disassemble_data): Dump the data contents.
(print_insn_riscv): Handle the mapping symbols.
(riscv_symbol_is_valid): Marked mapping symbols as invalid.

3 years ago[gdb/testsuite] Improve argument syntax of proc arange
Tom de Vries [Mon, 30 Aug 2021 08:30:26 +0000 (10:30 +0200)]
[gdb/testsuite] Improve argument syntax of proc arange

The current syntax of proc arange is:
...
  proc arange { arange_start arange_length {comment ""} {seg_sel ""} } {
...
and a typical call looks like:
...
  arange $start $len
...

This style is somewhat annoying because if you want to specify the last
parameter, you need to give the default values of all the other optional ones
before as well:
...
  arange $start $len "" $seg_sel
...

Update the syntax to:
...
    proc arange { options arange_start arange_length } {
       parse_options {
           { comment "" }
           { seg_sel "" }
       }
...
such that a typical call looks like:
...
  arange {} $start $len
...
and a call using seg_sel looks like:
...
  arange {
    seg_sel $seg_sel
  } $start $len
...

Also update proc aranges, which already has an options argument, to use the
new proc parse_options.

Tested on x86_64-linux.

Co-Authored-By: Simon Marchi <simon.marchi@polymtl.ca>
3 years agoAutomatic date update in version.in
GDB Administrator [Mon, 30 Aug 2021 00:00:06 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agoAutomatic date update in version.in
GDB Administrator [Sun, 29 Aug 2021 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agold: Change indirect symbol from IR to undefined
H.J. Lu [Thu, 26 Aug 2021 14:43:23 +0000 (07:43 -0700)]
ld: Change indirect symbol from IR to undefined

bfd/

PR ld/28264
* elflink.c (_bfd_elf_merge_symbol): Change indirect symbol from
IR to undefined.

ld/

PR ld/28264
* testsuite/ld-plugin/lto.exp: Run PR ld/28264 test.
* testsuite/ld-plugin/pr28264-1.d: New file.
* testsuite/ld-plugin/pr28264-2.d: Likewise.
* testsuite/ld-plugin/pr28264-3.d: Likewise.
* testsuite/ld-plugin/pr28264-4.d: Likewise.
* testsuite/ld-plugin/pr28264.c: Likewise.
* testsuite/ld-plugin/pr28264.ver: Likewise.

3 years agoPR28264, ld.bfd crash on linking efivar with LTO
Alan Modra [Thu, 26 Aug 2021 02:49:35 +0000 (12:19 +0930)]
PR28264, ld.bfd crash on linking efivar with LTO

PR 28264
PR 26978
* linker.c (_bfd_generic_link_add_one_symbol <MIND>): Check
that string is non-NULL.

3 years agoAutomatic date update in version.in
GDB Administrator [Sat, 28 Aug 2021 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years ago[gdb/symtab] Don't write .gdb_index symbol table with empty entries
Tom de Vries [Fri, 27 Aug 2021 15:14:49 +0000 (17:14 +0200)]
[gdb/symtab] Don't write .gdb_index symbol table with empty entries

When comparing the sizes of the index files generated for shlib
outputs/gdb.dwarf2/dw2-zero-range/shr1.sl, I noticed a large difference
between .debug_names:
...
$ gdb -q -batch $shlib -ex "save gdb-index -dwarf-5 ."
$ du -b -h shr1.sl.debug_names shr1.sl.debug_str
61      shr1.sl.debug_names
0       shr1.sl.debug_str
...
and .gdb_index:
...
$ gdb -q -batch $shlib -ex "save gdb-index ."
$ du -b -h shr1.sl.gdb-index
8.2K    shr1.sl.gdb-index
...

The problem is that the .gdb_index contains a non-empty symbol table with only
empty entries.

Fix this by making the symbol table empty, such that we have instead:
...
$ du -b -h shr1.sl.gdb-index
184     shr1.sl.gdb-index
...

Tested on x86_64-linux.

3 years ago[gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp
Tom de Vries [Fri, 27 Aug 2021 15:10:23 +0000 (17:10 +0200)]
[gdb/testsuite] Generate .debug_aranges in gdb.dlang/watch-loc.exp

Before commit 5ef670d81fd "[gdb/testsuite] Add dummy start and end CUs in
dwarf assembly" we had in exec outputs/gdb.dlang/watch-loc/watch-loc a D
compilation unit at offset 0xc7:
...
  Compilation Unit @ offset 0xc7:
   Length:        0x4c (32-bit)
   Version:       4
   Abbrev Offset: 0x64
   Pointer Size:  8
 <0><d2>: Abbrev Number: 2 (DW_TAG_compile_unit)
    <d3>   DW_AT_language    : 19       (D)
...
with a corresponding .debug_aranges entry:
...
Offset into .debug_info:  0xc7
  Pointer Size:             4
  Segment Size:             0

    Address    Length
    004004a7 0000000b
    00000000 00000000
...

After that commit we have a dummy CU at offset 0xc7 and the D compilation unit
at offset 0xd2:
...
  Compilation Unit @ offset 0xc7:
   Length:        0x7 (32-bit)
   Version:       4
   Abbrev Offset: 0x64
   Pointer Size:  8
  Compilation Unit @ offset 0xd2:
   Length:        0x4c (32-bit)
   Version:       4
   Abbrev Offset: 0x65
   Pointer Size:  8
 <0><dd>: Abbrev Number: 2 (DW_TAG_compile_unit)
    <de>   DW_AT_language    : 19       (D)
...
while the .debug_aranges entry still points to 0xc7.

The problem is that the test-case uses a hack (quoting from
commit 75f06e9dc59):
...
[ Note: this is a non-trivial test-case.  The file watch-loc-dw.S contains a
.debug_info section, but not an .debug_aranges section or any actual code.
The file watch-loc.c contains code and a .debug_aranges section, but no other
debug section.  So, the intent for the .debug_aranges section in watch-loc.c
is to refer to a compilation unit in the .debug_info section in
watch-loc-dw.S. ]
...
and adding the dummy CU caused that hack to stop working.

Fix this by moving the generation of .debug_aranges from watch-loc.c to
watch-loc.exp, such that we have:
...
  Offset into .debug_info:  0xd2
  Pointer Size:             4
  Segment Size:             0

    Address    Length
    004004a7 0000000b
    00000000 00000000
...

Tested on x86_64-linux.

3 years ago[gdb/testsuite] Generate .debug_aranges entry for dummy CU
Tom de Vries [Fri, 27 Aug 2021 14:52:44 +0000 (16:52 +0200)]
[gdb/testsuite] Generate .debug_aranges entry for dummy CU

A best practise for DWARF [1] is to generate .debug_aranges entries for CUs
even if they have no address range.

Generate .debug_arange entries for the dummy CUs added by the DWARF assembler.

Tested on x86_64-linux.

[1] http://wiki.dwarfstd.org/index.php?title=Best_Practices

3 years ago[gdb/testsuite] Add .debug_aranges in more test-cases
Tom de Vries [Fri, 27 Aug 2021 14:38:53 +0000 (16:38 +0200)]
[gdb/testsuite] Add .debug_aranges in more test-cases

A couple of test-cases fail when run with target board cc-with-debug-names due
to missing .debug_aranges entries for the CUs added by the dwarf assembler.

Add a .debug_aranges entry for those CUs.

Tested on x86_64-linux.

3 years ago[gdb/testsuite] Support .debug_aranges in dwarf assembly
Tom de Vries [Fri, 27 Aug 2021 14:38:53 +0000 (16:38 +0200)]
[gdb/testsuite] Support .debug_aranges in dwarf assembly

Add a proc aranges such that we can generate .debug_aranges sections in dwarf
assembly using:
...
  cu { label cu_label } {
  ...
  }

  aranges {} cu_label {
    arange $addr $len [<comment>] [$segment_selector]
  }
...

Tested on x86_64-linux.

3 years ago[gdb/testsuite] Add label option to proc cu
Tom de Vries [Fri, 27 Aug 2021 14:38:53 +0000 (16:38 +0200)]
[gdb/testsuite] Add label option to proc cu

We can use current dwarf assembly infrastructure to declare a label that marks
the start of the CU header:
...
  declare_labels header_start_cu_a
  _section ".debug_info"
  header_start_cu_a : cu {} {
  }
  _section ".debug_info"
  header_start_cu_b : cu {} {
  }
...
on the condition that we switch to the .debug_info section before, which makes
this style of use fragile.

Another way to achieve the same is to use the label as generated by the cu
proc itself:
...
  variable _cu_label
  cu {} {
  }
  set header_start_cu_a $_cu_label
  cu {} {
  }
  set header_start_cu_b $_cu_label
...
but again that seems fragile given that adding a new CU inbetween will
silently result in the wrong value for the label.

Add a label option to proc cu such that we can simply do:
...
  cu { label header_start_cu_a } {
  }
  cu { label header_start_cu_b } {
  }
...

Tested on x86_64-linux.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 27 Aug 2021 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb: remove some stray newlines in debug output
Andrew Burgess [Mon, 16 Aug 2021 16:15:31 +0000 (17:15 +0100)]
gdb: remove some stray newlines in debug output

I spotted a couple of stray newlines that were left at the end of
debug message during conversion to the new debug output scheme.  These
messages are part of the 'set debug lin-lwp 1' output.

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 26 Aug 2021 00:00:14 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agoAutomatic date update in version.in
GDB Administrator [Wed, 25 Aug 2021 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agoFix two regressions caused by CU / TU merging
Tom Tromey [Wed, 4 Aug 2021 18:44:10 +0000 (12:44 -0600)]
Fix two regressions caused by CU / TU merging

PR symtab/28160 and PR symtab/27893 concern GDB crashes in the test
suite when using the "fission" target board.  They are both caused by
the patches that merge the list of CUs with the list of TUs (and to a
lesser degree by the patches to share DWARF data across objfiles), and
the underlying issue is the same: it turns out that reading a DWO can
cause new type units to be created.  This means that the list of
dwarf2_per_cu_data objects depends on precisely which CUs have been
expanded.  However, because the type units can be created while
expanding a CU means that the vector of CUs can expand while it is
being iterated over -- a classic mistake.  Also, because a TU can be
added later, it means the resize_symtabs approach is incorrect.

This patch fixes resize_symtabs by removing it, and having set_symtab
resize the vector on demand.  It fixes the iteration problem by
introducing a safe (index-based) iterator and changing the relevant
spots to use it.

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

3 years agoReal programmers don't configure gcc using --with-ld
Alan Modra [Fri, 20 Aug 2021 00:18:13 +0000 (09:48 +0930)]
Real programmers don't configure gcc using --with-ld

* testsuite/lib/ld-lib.exp (run_host_cmd): Give a clue as to why
gcc -B doesn't pick up the ld under test.

3 years agoobjdump -S test fail on mingw
Alan Modra [Thu, 19 Aug 2021 03:45:06 +0000 (13:15 +0930)]
objdump -S test fail on mingw

FAIL: objdump -S
FAIL: objdump --source-comment
is seen on mingw for the simple reason that gcc adds a .exe suffix on
the output file if not already present.  Fix that, and tidy some objcopy
tests.

* testsuite/lib/binutils-common.exp (exeext): New proc.
* testsuite/binutils-all/objcopy.exp (exe, test_prog): Use it here.
(objcopy_remove_relocations_from_executable): Catch objcopy errors.
Only run on ELF targets.
* testsuite/binutils-all/objdump.exp (exe): Set variable.
(test_build_id_debuglink, test_objdump_S): Use exe file suffix.

3 years agoFT32: Remove recursion in ft32_opcode
James Bowman (FTDI-UK) [Tue, 24 Aug 2021 02:16:56 +0000 (02:16 +0000)]
FT32: Remove recursion in ft32_opcode

The function ft32_opcode used recursion.  This could cause a stack
overflow.  Replaced with a pair of non-recursive functions.

PR 28169
        * ft32-dis.c: Formatting.
(ft32_opcode1): Split out from..
(ft32_opcode): ..here.

3 years agoAutomatic date update in version.in
GDB Administrator [Tue, 24 Aug 2021 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agoFix a latent bug in dw2-ranges-overlap.exp
Tom Tromey [Fri, 6 Aug 2021 22:07:27 +0000 (16:07 -0600)]
Fix a latent bug in dw2-ranges-overlap.exp

dw2-ranges-overlap.exp creates a program where a psymtab has two
address ranges, and a function without debug info whose address is
between these two ranges.  Then it sets a breakpoint on this function
and runs to it, expecting that the language should remain "auto; c"
when stopped.

However, this test case also has a "main" function described (briefly)
in the DWARF, and this function is given language C++.  Also, a
breakpoint stop sets the current language to the language that was
used when setting the breakpoint.

My new DWARF scanner decides that this "main" is the main program and
sets the current language to C++ at startup, causing this test to
fail.

This patch fixes the test in a simple way, by introducing a new
function that takes the place of "main" in the DWARF.  I think this
still exercises the original problem, but also avoids problems with my
branch.

It seemed safe to me to submit this separately.

3 years ago[gdb] Fix 'not in executable format' error message
Tom de Vries [Mon, 23 Aug 2021 10:08:25 +0000 (12:08 +0200)]
[gdb] Fix 'not in executable format' error message

With trying to load a non-executable file into gdb, we run into PR26880:
...
$ gdb -q -batch test.c
"0x7ffc87bfc8d0s": not in executable format: \
  file format not recognized
...

The problem is caused by using %ps in combination with the error function
(note that confusingly, it does work in combination with the warning
function).

Fix this by using plain "%s" instead.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-08-22  Tom de Vries  <tdevries@suse.de>

PR gdb/26880
* gdb/exec.c (exec_file_attach): Use %s instead of %ps in call to
error function.

gdb/testsuite/ChangeLog:

2021-08-22  Tom de Vries  <tdevries@suse.de>

PR gdb/26880
* gdb.base/non-executable.exp: New file.

3 years ago[gdb/testsuite] Use compiler-generated instead of gas-generated stabs
Tom de Vries [Mon, 23 Aug 2021 10:08:25 +0000 (12:08 +0200)]
[gdb/testsuite] Use compiler-generated instead of gas-generated stabs

The test-case gdb.dwarf2/dw2-ranges.exp is the only one in the gdb testsuite
that uses gas-generated stabs.

While the use seems natural alongside the use of gas-generated dwarf in the
same test-case, there are a few known issues, filed on the gdb side as:
- PR symtab/12497 - "stabs: PIE relocation does not work"
- PR symtab/28221 - "[readnow, stabs] FAIL: gdb.dwarf2/dw2-ranges.exp: \
  info line func"
and on the gas side as:
- PR gas/28233 - "[gas, --gstabs] Generate stabs more similar to gcc"

The test-case contains a KFAIL for PR12497, but it's outdated and fails to
trigger.

The intention of the test-case is to test gas-generated dwarf, and using
gcc-generated stabs instead of gas-generated stabs works fine.

Supporting compiler-generated stabs is already a corner-case for gdb, and
there's no current commitment/incentive to support/workaround gas-generated
stabs, which can be considered a corner-case of a corner-case.

Work around these problem by using compiler-generated stabs in the test-case.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-08-22  Tom de Vries  <tdevries@suse.de>

* gdb.dwarf2/dw2-ranges.exp: Use compiler-generated stabs.

3 years ago[gdb/testsuite] Add dummy start and end CUs in dwarf assembly
Tom de Vries [Mon, 23 Aug 2021 10:08:25 +0000 (12:08 +0200)]
[gdb/testsuite] Add dummy start and end CUs in dwarf assembly

Say one compiles a hello.c:
...
$ gcc -g hello.c
...

On openSUSE Leap 15.2 and Tumbleweed, the CU for hello.c is typically not the
first in .debug_info, nor the last, due to presence of debug information in
objects for sources like:
- ../sysdeps/x86_64/start.S
- init.c
- ../sysdeps/x86_64/crti.S
- elf-init.c
- ../sysdeps/x86_64/crtn.S.

On other systems, say ubuntu 18.04.5, the CU for hello.c is typically the
first and the last in .debug_info.

This difference has caused me to find some errors in the dwarf assembly
using openSUSE, that didn't show up on other platforms.

Force the same situation on other platforms by adding a dummy start
and end CU.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-08-22  Tom de Vries  <tdevries@suse.de>

PR testsuite/28235
* lib/dwarf.exp (Dwarf::dummy_cu): New proc.
(Dwarf::assemble): Add dummy start and end CU.

3 years ago[gdb/testsuite] Fix dw2-ranges-psym.exp with -readnow
Tom de Vries [Mon, 23 Aug 2021 10:08:25 +0000 (12:08 +0200)]
[gdb/testsuite] Fix dw2-ranges-psym.exp with -readnow

When running test-case gdb.dwarf2/dw2-ranges-psym.exp with target board
-readnow, I run into:
...
(gdb) file dw2-ranges-psym^M
Reading symbols from dw2-ranges-psym...^M
Expanding full symbols from dw2-ranges-psym...^M
(gdb) set complaints 0^M
(gdb) FAIL: gdb.dwarf2/dw2-ranges-psym.exp: No complaints
...

The problem is that the regexp expects a gdb prompt immediately after the
"Reading symbols" line.

Fix this by updating the regexp.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2021-08-22  Tom de Vries  <tdevries@suse.de>

* lib/gdb.exp (gdb_load_no_complaints): Update regexp to allow
"Expanding full symbols" Line.

3 years agoAutomatic date update in version.in
GDB Administrator [Mon, 23 Aug 2021 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agosim: m32r: add __linux__ hack for non-Linux hosts
Mike Frysinger [Fri, 20 Aug 2021 01:00:42 +0000 (21:00 -0400)]
sim: m32r: add __linux__ hack for non-Linux hosts

The m32r Linux syscall emulation logic assumes the host environment
directly matches -- it's being run on 32-bit little endian Linux.
This breaks building for non-Linux systems, so put all the code in
__linux__ ifdef checks.  This code needs a lot of love to make it
work everywhere, but let's at least unbreak it for non-Linux hosts.

3 years agoAutomatic date update in version.in
GDB Administrator [Sun, 22 Aug 2021 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agoAutomatic date update in version.in
GDB Administrator [Sat, 21 Aug 2021 00:00:07 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agosim: nltvals: switch output mode to a directory
Mike Frysinger [Wed, 7 Jul 2021 01:18:58 +0000 (21:18 -0400)]
sim: nltvals: switch output mode to a directory

In preparation for this script generating more files, change the output
argument to specify a directory.  This drops the stdout behavior, but
since no one really runs this tool directly, it's not a big deal.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 20 Aug 2021 00:00:08 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb: use bool in notify_command_param_changed_p and do_set_command
Simon Marchi [Thu, 19 Aug 2021 18:28:59 +0000 (14:28 -0400)]
gdb: use bool in notify_command_param_changed_p and do_set_command

Trivial patch to use bool instead of int.

Change-Id: I9e5f8ee4305272a6671cbaaaf2f0484eff0d1ea5

3 years agox86: Put back 3 aborts in OP_E_memory
H.J. Lu [Thu, 19 Aug 2021 14:39:10 +0000 (07:39 -0700)]
x86: Put back 3 aborts in OP_E_memory

Put back 3 aborts where invalid lengths should have been filtered out.

gas/

PR binutils/28247
* testsuite/gas/i386/bad-bcast.s: Add a comment.

opcodes/

PR binutils/28247
* * i386-dis.c (OP_E_memory): Put back 3 aborts.

3 years agox86: Avoid abort on invalid broadcast
H.J. Lu [Thu, 19 Aug 2021 13:38:21 +0000 (06:38 -0700)]
x86: Avoid abort on invalid broadcast

Print "{bad}" on invalid broadcast instead of abort.

gas/

PR binutils/28247
* testsuite/gas/i386/bad-bcast.d: New file.
* testsuite/gas/i386/bad-bcast.s: Likewise.
* testsuite/gas/i386/i386.exp: Run bad-bcast.

opcodes/

PR binutils/28247
* i386-dis.c (OP_E_memory): Print "{bad}" on invalid broadcast
instead of abort.

3 years agogdb/solib: Refactor scan_dyntag
Aaron Merey [Wed, 11 Aug 2021 02:05:44 +0000 (22:05 -0400)]
gdb/solib: Refactor scan_dyntag

scan_dyntag is unnecessarily duplicated in solib-svr4.c and solib-dsbt.c.

Move this function to solib.c and rename it to gdb_bfd_scan_elf_dyntag.
Also add it to solib.h so it is included in both solib-svr4 and solib-dsbt.

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 19 Aug 2021 00:00:35 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years ago[gdb] [rs6000] Add ppc64_linux_gcc_target_options method.
Will Schmidt [Wed, 18 Aug 2021 16:45:49 +0000 (11:45 -0500)]
[gdb] [rs6000] Add ppc64_linux_gcc_target_options method.

Add a method to set the gcc target options for the ppc64 targets.
This change sets an empty value, which allows the gcc
default values (-mcmodel=medium) be used, instead of -mcmodel=large
which is set by the default_gcc_target_options hook.

3 years ago[gdb] [rs6000] Add ppc64*_gnu_triplet_regexp methods.
Will Schmidt [Wed, 18 Aug 2021 16:43:45 +0000 (11:43 -0500)]
[gdb] [rs6000] Add ppc64*_gnu_triplet_regexp methods.

Add methods to set the target triplet so we can
find the proper gcc when our gcc is named of
the form powerpc64{le}-<foo>-gcc or ppc64{le}-<foo>-gcc.

3 years agoRe: as: Replace the removed symbol with the versioned symbol
Alan Modra [Wed, 18 Aug 2021 03:51:33 +0000 (13:21 +0930)]
Re: as: Replace the removed symbol with the versioned symbol

Some targets, typically embedded without shared libraries, replace the
relocation symbol with a section symbol (see tc_fix_adjustable).
Allow the test to pass for such targets.  Fixes the following.

avr-elf  +FAIL: symver symver16
d10v-elf  +FAIL: symver symver16
dlx-elf  +FAIL: symver symver16
ip2k-elf  +FAIL: symver symver16
m68k-elf  +FAIL: symver symver16
mcore-elf  +FAIL: symver symver16
pj-elf  +FAIL: symver symver16
s12z-elf  +FAIL: symver symver16
visium-elf  +FAIL: symver symver16
z80-elf  +FAIL: symver symver16

PR gas/28157
* testsuite/gas/symver/symver16.d: Relax reloc match.

3 years ago[GOLD] PowerPC64 relocation overflow for -Os register save/restore funcs
Alan Modra [Wed, 18 Aug 2021 03:13:46 +0000 (12:43 +0930)]
[GOLD] PowerPC64 relocation overflow for -Os register save/restore funcs

Fixes a silly mistake in calculating the address of -Os out-of-line
register save/restore function copies.  Copies of these linker defined
functions are added to stub sections when the original (in
target->savres_section) can't be reached.

* powerpc.cc (Target_powerpc::Relocate::relocate): Correct address
calculation of out-of-line save/restore function copies.

3 years agoAnother ld script backtrack
Alan Modra [Tue, 17 Aug 2021 06:22:20 +0000 (15:52 +0930)]
Another ld script backtrack

* ldgram.y (length_spec): Throw away look-ahead NAME.

3 years agogdb: fix spacing on CCLD silent rules
Mike Frysinger [Wed, 7 Jul 2021 03:43:21 +0000 (23:43 -0400)]
gdb: fix spacing on CCLD silent rules

3 years agosim: nltvals: localize TARGET_<ERRNO> defines
Mike Frysinger [Wed, 7 Jul 2021 02:23:02 +0000 (22:23 -0400)]
sim: nltvals: localize TARGET_<ERRNO> defines

Code should not be using these directly, instead they should be
resolving these dynamically via cb_host_to_target_errno maps.
Fix the Blackfin code and remove the defines out of the header
so no new code can rely on them.

3 years agosim: rename ChangeLog files to ChangeLog-2021
Mike Frysinger [Thu, 8 Jul 2021 06:33:28 +0000 (02:33 -0400)]
sim: rename ChangeLog files to ChangeLog-2021

Now that ChangeLog entries are no longer used for sim patches,
this commit renames all relevant sim ChangeLog to ChangeLog-2021,
similar to what we would do in the context of the "Start of New
Year" procedure.

The purpose of this change is to avoid people merging ChangeLog
entries by mistake when applying existing commits that they are
currently working on.

Also throw in a .gitignore entry to keep people from adding new
ChangeLog files anywhere in the sim tree.

3 years agoAutomatic date update in version.in
GDB Administrator [Wed, 18 Aug 2021 00:00:24 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb: fix thread_step_over_chain_length
Simon Marchi [Tue, 17 Aug 2021 19:23:41 +0000 (15:23 -0400)]
gdb: fix thread_step_over_chain_length

If I debug a single-thread program and look at the infrun debug logs, I
see:

    [infrun] start_step_over: stealing global queue of threads to step, length = 2

That makes no sense... turns out there's a buglet in
thread_step_over_chain_length, "num" should be initialized to 0.  I
think this bug is a leftover from an earlier version of the code (not
merged upstream) that manually walked the list, where the first item was
implicitly counted (hence the 1).

Change-Id: I0af03aa93509aed36528be5076894dc156a0b5ce

3 years agoopcodes: Fix the auxiliary register numbers for ARC HS
Shahab Vahedi [Tue, 17 Aug 2021 14:39:26 +0000 (16:39 +0200)]
opcodes: Fix the auxiliary register numbers for ARC HS

The numbers for the auxiliary registers "tlbindex" and
"tlbcommand" of ARCv2HS are incorrect.  This patch makes
the following changes to correct that error.

 ,------------.-----------------.---------------.
 | aux. reg.  | old (incorrect) | new (correct) |
 |------------+-----------------+---------------|
 | tlbindex   |      0x463      |     0x464     |
 | tlbcommand |      0x464      |     0x465     |
 `------------^-----------------^---------------'

opcodes/
2021-08-17  Shahab Vahedi <shahab@synopsys.com>

* arc-regs.h (DEF): Fix the register numbers.

3 years agogdb: Don't assume r_ldsomap when r_version > 1 on Linux
H.J. Lu [Mon, 16 Aug 2021 23:17:25 +0000 (16:17 -0700)]
gdb: Don't assume r_ldsomap when r_version > 1 on Linux

The r_ldsomap field is specific to Solaris (part of librtld_db), and
should never be accessed for Linux.  glibc is planning to add a field
to support multiple namespaces.  But there will be no r_ldsomap when
r_version is bumped to 2.  Add linux_[ilp32|lp64]_fetch_link_map_offsets
to set r_ldsomap_offset to -1 and use them for Linux targets.

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

3 years agogdbserver: Check r_version < 1 for Linux debugger interface
H.J. Lu [Mon, 16 Aug 2021 15:18:18 +0000 (08:18 -0700)]
gdbserver: Check r_version < 1 for Linux debugger interface

Update gdbserver to check r_version < 1 instead of r_version != 1 so
that r_version can be bumped for a new field in the glibc debugger
interface to support multiple namespaces.  Since so far, the gdbserver
only reads fields defined for r_version == 1, it is compatible with
r_version >= 1.

All future glibc debugger interface changes will be backward compatible.
If there is ever the need for backward incompatible change to the glibc
debugger interface, a new DT_XXX element will be provided to access the
new incompatible interface.

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

3 years agoPATCH [4/4] arm: Add Tag_PACRET_use build attribute
Andrea Corallo [Mon, 5 Jul 2021 15:27:00 +0000 (17:27 +0200)]
PATCH [4/4] arm: Add Tag_PACRET_use build attribute

bfd/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
'Tag_PACRET_use' case.

binutils/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* readelf.c (arm_attr_tag_PAC_extension): Declare.
(arm_attr_public_tags): Add 'PAC_extension' lookup.

elfcpp/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* arm.h: Define 'Tag_PACRET_use' enum.

gas/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* config/tc-arm.c (arm_convert_symbolic_attribute): Add
'Tag_PACRET_use' to the attribute_table.

include/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf/arm.h (elf_arm_reloc_type): Add 'Tag_PACRET_use'.

3 years agoPATCH [3/4] arm: Add Tag_BTI_use build attribute
Andrea Corallo [Mon, 5 Jul 2021 15:14:47 +0000 (17:14 +0200)]
PATCH [3/4] arm: Add Tag_BTI_use build attribute

bfd/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
'Tag_BTI_use' case.

binutils/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* readelf.c (arm_attr_tag_PAC_extension): Declare.
(arm_attr_public_tags): Add 'PAC_extension' lookup.

elfcpp/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* arm.h: Define 'Tag_BTI_use' enum.

gas/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* config/tc-arm.c (arm_convert_symbolic_attribute): Add
'Tag_BTI_use' to the attribute_table.

include/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf/arm.h (elf_arm_reloc_type): Add 'Tag_BTI_use'.

3 years agoPATCH [2/4] arm: Add Tag_BTI_extension build attribute
Andrea Corallo [Mon, 5 Jul 2021 14:37:19 +0000 (16:37 +0200)]
PATCH [2/4] arm: Add Tag_BTI_extension build attribute

bfd/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
'Tag_BTI_extension' case.

binutils/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* readelf.c (arm_attr_tag_PAC_extension): Declare.
(arm_attr_public_tags): Add 'PAC_extension' lookup.

elfcpp/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* arm.h: Define 'Tag_BTI_extension' enum.

gas/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* config/tc-arm.c (arm_convert_symbolic_attribute): Add
'Tag_BTI_extension' to the attribute_table.

include/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf/arm.h (elf_arm_reloc_type): Add 'Tag_BTI_extension'.

3 years agoPATCH [1/4] arm: Add Tag_PAC_extension build attribute
Andrea Corallo [Wed, 30 Jun 2021 07:37:12 +0000 (09:37 +0200)]
PATCH [1/4] arm: Add Tag_PAC_extension build attribute

bfd/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf32-arm.c (elf32_arm_merge_eabi_attributes): Add
'Tag_PAC_extension' case.

binutils/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* readelf.c (arm_attr_tag_PAC_extension): Declare.
(arm_attr_public_tags): Add 'PAC_extension' lookup.

elfcpp/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* arm.h: Define 'Tag_PAC_extension' enum.

gas/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* config/tc-arm.c (arm_convert_symbolic_attribute): Add
'Tag_PAC_extension' to the attribute_table.

include/
2021-07-06  Andrea Corallo  <andrea.corallo@arm.com>

* elf/arm.h (elf_arm_reloc_type): Add 'Tag_PAC_extension'.

3 years agox86: Always run fp tests
H.J. Lu [Tue, 17 Aug 2021 12:28:30 +0000 (05:28 -0700)]
x86: Always run fp tests

Always run fp tests since the size of .tfloat, .ds.x, .dc.x and .dcb.x
directive outputs is always 10 bytes.  There is no need for fp-elf32 nor
fp-elf64.

PR gas/28230
* testsuite/gas/i386/fp-elf32.d: Removed.
* testsuite/gas/i386/fp-elf64.d: Likewise.
* testsuite/gas/i386/fp.s: Remove NO_TFLOAT_PADDING codes.
* testsuite/gas/i386/i386.exp: Don't run fp-elf32 nor fp-elf64.
Always run fp.

3 years agoAutomatic date update in version.in
GDB Administrator [Tue, 17 Aug 2021 00:00:27 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agox86: Don't pad .tfloat directive output
H.J. Lu [Sun, 15 Aug 2021 20:17:41 +0000 (13:17 -0700)]
x86: Don't pad .tfloat directive output

.tfloat output should always be 10 bytes without padding, independent
of psABIs.  In glibc, x86 assembly codes expect 10-byte .tfloat output.
This also reduces .ds.x output and .tfloat output with hex input from
12 bytes to 10 bytes to match .tfloat output.

PR gas/28230
* NEWS: Mention changes of .ds.x output and .tfloat output with
hex input.
* config/tc-i386.c (x86_tfloat_pad): Removed.
* config/tc-i386.h (X_PRECISION_PAD): Changed to 0.
(x86_tfloat_pad): Removed.
* testsuite/gas/i386/fp.s: If NO_TFLOAT_PADDING isn't defined,
add explicit paddings after .tfloat, .ds.x, .dc.x and .dcb.x
directives.
* testsuite/gas/i386/i386.exp (ASFLAGS): Append
"--defsym NO_TFLOAT_PADDING=1" when running the fp test.

3 years agoFix register regression in DWARF evaluator
Tom Tromey [Thu, 12 Aug 2021 12:44:40 +0000 (06:44 -0600)]
Fix register regression in DWARF evaluator

On an internal test case, using an arm-elf target, commit ba5bc3e5a92
("Make DWARF evaluator return a single struct value") causes a
regression.  (It doesn't happen for any of the other cross targets
that I test when importing upstream gdb.)

I don't know if there's an upstream gdb test case showing the same
problem... I can only really run native tests with dejagnu AFAIK.

The failure manifests like this:

    Breakpoint 1, file_1.export_1 (param_1=<error reading variable: Unable to access DWARF register number 64>, str=...) at [...]/file_1.adb:5

Whereas when it works it looks like:

    Breakpoint 1, file_1.export_1 (param_1=99.0, str=...) at [...]/file_1.adb:5

The difference is that the new code uses the passed-in gdbarch,
whereas the old code used the frame's gdbarch, when handling
DWARF_VALUE_REGISTER.

This patch restores the use of the frame's arch.

3 years agoFix Ada regression due to DWARF expression series
Tom Tromey [Wed, 11 Aug 2021 14:17:36 +0000 (08:17 -0600)]
Fix Ada regression due to DWARF expression series

Commit 0579205aec4 ("Simplify dwarf_expr_context class interface")
caused a regression in the internal AdaCore test suite.  I didn't try
to reproduce this with the GDB test suite, but the test is identical
to gdb.dwarf2/dynarr-ptr.exp.

The problem is that this change:

  case DW_OP_push_object_address:
    /* Return the address of the object we are currently observing.  */
-   if (this->data_view.data () == nullptr
-       && this->obj_address == 0)
+   if (this->m_addr_info == nullptr)

... slightly changes the logic here.  In particular, it's possible for
the caller to pass in a non-NULL m_addr_info, but one that looks like:

    (top) p *this.m_addr_info
    $15 = {
      type = 0x29b7a70,
      valaddr = {
m_array = 0x0,
m_size = 0
      },
      addr = 0,
      next = 0x0
    }

In this case, an additional check is needed.  With the current code,
what happens instead is that the computation computes an incorrect
address -- but one that does not fail in read_memory, due to the
precise memory map of the embedded target in question.

This patch restores the old logic.

3 years agoNotify observer of breakpoint auto-disabling
Patrick Monnerat [Mon, 16 Aug 2021 12:44:20 +0000 (14:44 +0200)]
Notify observer of breakpoint auto-disabling

As breakpoint_modified observer is currently notified upon breakpoint stop
before handling auto-disabling when enable count is reached, the observer
is never notified of the disabling.

The problem affects:
- The MI interpreter enabled= value when reporting =breakpoint-modified
- A Python event handler for breakpoint_modified using the "enabled"
  member of its parameter
- insight: breakpoint GUI window is not properly updated upon auto-disable

This patch moves the observer notification after the auto-disabling
code and implements corresponding tests for the MI and Python cases.

Fixes https://sourceware.org/bugzilla/show_bug.cgi?id=23336

Change-Id: I0c50df4789334071e5390cb46b3ca0d4a7f83c61

3 years agoas: Replace the removed symbol with the versioned symbol
H.J. Lu [Mon, 16 Aug 2021 13:46:44 +0000 (06:46 -0700)]
as: Replace the removed symbol with the versioned symbol

When a symbol removed by .symver is used in relocation and there is one
and only one versioned symbol, don't remove the symbol.  Instead, mark
it to be removed and replace the removed symbol used in relocation with
the versioned symbol before generating relocation.

PR gas/28157
* symbols.c (symbol_flags): Add removed.
(symbol_entry_find): Updated.
(symbol_mark_removed): New function.
(symbol_removed_p): Likewise.
* symbols.h (symbol_mark_removed): New prototype.
(symbol_removed_p): Likewise.
* write.c (write_relocs): Call obj_fixup_removed_symbol on
removed fixp->fx_addsy and fixp->fx_subsy if defined.
(set_symtab): Don't add a symbol if symbol_removed_p returns true.
* config/obj-elf.c (elf_frob_symbol):  Don't remove the symbol
if it is used on relocation.  Instead, mark it as to be removed
and issue an error if the symbol has more than one versioned name.
(elf_fixup_removed_symbol): New function.
* config/obj-elf.h (elf_fixup_removed_symbol): New prototype.
(obj_fixup_removed_symbol): New.
* testsuite/gas/symver/symver11.d: Updated expected error
message.
* testsuite/gas/symver/symver16.d: New file.
* testsuite/gas/symver/symver16.s: Likewise.

3 years agoAutomatic date update in version.in
GDB Administrator [Mon, 16 Aug 2021 00:00:28 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agoAutomatic date update in version.in
GDB Administrator [Sun, 15 Aug 2021 00:00:44 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agold script fill pattern expression
Alan Modra [Sat, 14 Aug 2021 00:02:35 +0000 (09:32 +0930)]
ld script fill pattern expression

It turns out we do need to backtrack when parsing after all.  The
fill_opt component in the section rule swiches to EXPRESSION and back
to SCRIPT, and to find the end of an expression it is necessary to
look ahead one token.

* ldgram.y (section): Throw away lookahead NAME token.
(overlay_section): Likewise.
* testsuite/ld-elf/overlay.t: Add fill pattern on overlays.
Test fill pattern before stupidly named normal sections too,
and before /DISCARD/.

3 years agoAutomatic date update in version.in
GDB Administrator [Sat, 14 Aug 2021 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agold lexer tidy, possibly break the world
Alan Modra [Fri, 13 Aug 2021 07:50:10 +0000 (17:20 +0930)]
ld lexer tidy, possibly break the world

This tidies the states in which ld lexer rules are enabled.
This change will quite likely trip over issues similar to those
mentioned in the new ldlex.l comments, so please test it out.

* ldgram.y (wildcard_name): Remove now unnecessary components.
* ldlex.l: Restrict many rules' states.  Remove -l expression
state rule.  Comment on lookahead state madness and need for
/DISCARD/ in expression state.

3 years agold script lower-case absolute and sizeof_headers
Alan Modra [Fri, 13 Aug 2021 13:08:31 +0000 (22:38 +0930)]
ld script lower-case absolute and sizeof_headers

I think these happened by accident, so let's see what breaks if they
are removed.

* ldlex.l: Remove lower case "absolute" and "sizeof_headers"
in non-mri mode.
* ld.texi: Remove sizeof_headers index.
* testsuite/ld-mmix/mmohdr1.ld: Use SIZEOF_HEADERS.

3 years agotidy mri script extern
Alan Modra [Fri, 13 Aug 2021 12:53:40 +0000 (22:23 +0930)]
tidy mri script extern

MRI mode generally doesn't flip lexer states, so let's make MRI mode
"extern" not do so either.

* ldgram.y (extern_name_list): Don't change lex state here.
(ifile_p1): Change state here on EXTERN instead.

3 years agoRe: PR28217, Syntax error when memory region contains a hyphen
Alan Modra [Fri, 13 Aug 2021 07:51:14 +0000 (17:21 +0930)]
Re: PR28217, Syntax error when memory region contains a hyphen

I discovered some more errors when tightening up the lexer rules.
Just because we INCLUDE a file doesn't mean we've switched states.

PR 28217
* ldgram.y (statement): Don't switch lexer state on INCLUDE.
(mri_script_command, ifile_p1, memory_spec, section): Likewise.

3 years agoPR28168: [CSKY] Fix stack overflow in disassembler
Lifang Xia [Tue, 10 Aug 2021 03:16:57 +0000 (11:16 +0800)]
PR28168: [CSKY] Fix stack overflow in disassembler

PR 28168:
Stack overflow with a large float. %f is not a goot choice for this.
%f should be replaced with %.7g.

gas/
* testsuite/gas/csky/pr28168.d: New testcase for PR 28168.
* testsuite/gas/csky/pr28168.s: Likewise.
* testsuite/gas/csky/v2_float_part2.d: Following the new format.
* opcodes/csky-dis.c (csky_output_operand): %.7g replaces %f.

3 years agoPR28217, Syntax error when memory region contains a hyphen
Alan Modra [Fri, 13 Aug 2021 02:20:16 +0000 (11:50 +0930)]
PR28217, Syntax error when memory region contains a hyphen

The saga of commit 40726f16a8d7 continues.  This attacks the problem
of switching between SCRIPT and EXPRESSION state lexing by removing
the need to do so for phdrs like ":text".  Instead {WILDCHAR}*
matching, the reason why ":text" lexed as one token, is restricted to
within the braces of a section or overlay statement.  The new WILD
lexer state is switched at the non-optional brace tokens, so
ldlex_backup is no longer needed.  I've also removed the BOTH state,
which doesn't seem to be needed any more.  Besides rules involving
error reporting, there was just one place where SCRIPT appeared
without BOTH, the {WILDCHAR}* rule, three where BOTH appears without
SCRIPT for tokens that only need EXPRESSION state, and two where BOTH
appears alongside INPUT_LIST.  (Since I'm editing the wild and
filename rules, removing BOTH and adding WILD can also be seen as
renaming the old BOTH state to SCRIPT and renaming the old SCRIPT
state to WILD with a reduced scope.)

As a followup, I'll look at removing EXPRESSION state from some lexer
rules that no longer need it due to this cleanup.

PR 28217
* ldgram.y (exp <ORIGIN, LENGTH>): Use paren_script_name.
(section): Parse within braces of section in wild mode, and
after brace back in script mode.  Remove ldlex_backup call.
Similarly for OVERLAY.
(overlay_section): Similarly.
(script_file): Replace ldlex_both with ldlex_script.
* ldlex.h (ldlex_wild): Declare.
(ldlex_both): Delete.
* ldlex.l (BOTH): Delete.  Remove state from all rules.
(WILD): New state.  Enable many tokens in this state.
Enable filename match in SCRIPT mode.  Enable WILDCHAR match
in WILD state, disable in SCRIPT mode.
(ldlex_wild): New function.
* ldfile.c (ldfile_try_open_bfd): Replace ldlex_both call with
ldlex_script.

3 years agons32k configury
Alan Modra [Fri, 13 Aug 2021 02:02:13 +0000 (11:32 +0930)]
ns32k configury

Since ns32k-netbsd is as yet not removed, just marked obsolete,
the target should still be accepted with --enable-obsolete.

I also enabled ns32k-openbsd in ld since there doesn't seem to be a
good reason why that target is not supported there but is elsewhere.

bfd/
* config.bfd: Allow ns32k-netbsd.
ld/
* configure.tgt: Allow ns32k-openbsd.

3 years agoAutomatic date update in version.in
GDB Administrator [Fri, 13 Aug 2021 00:00:31 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb: riscv_scan_prologue: handle LD and LW instructions
Lancelot SIX [Mon, 2 Aug 2021 22:53:07 +0000 (22:53 +0000)]
gdb: riscv_scan_prologue: handle LD and LW instructions

While working on the testsuite, I ended up noticing that GDB fails to
produce a full backtrace from a thread waiting in pthread_join.  When
selecting the waiting thread and using the 'bt' command, the following
result can be observed:

(gdb) bt
#0  0x0000003ff7fccd20 in __futex_abstimed_wait_common64 () from /lib/riscv64-linux-gnu/libpthread.so.0
#1  0x0000003ff7fc43da in __pthread_clockjoin_ex () from /lib/riscv64-linux-gnu/libpthread.so.0
Backtrace stopped: frame did not save the PC

On my platform, I do not have debug symbols for glibc, so I need to rely
on prologue analysis in order to unwind stack.

Here is what the function prologue looks like:

(gdb) disassemble __pthread_clockjoin_ex
Dump of assembler code for function __pthread_clockjoin_ex:
   0x0000003ff7fc42de <+0>:     addi    sp,sp,-144
   0x0000003ff7fc42e0 <+2>:     sd      s5,88(sp)
   0x0000003ff7fc42e2 <+4>:     auipc   s5,0xd
   0x0000003ff7fc42e6 <+8>:     ld      s5,-2(s5) # 0x3ff7fd12e0
   0x0000003ff7fc42ea <+12>:    ld      a5,0(s5)
   0x0000003ff7fc42ee <+16>:    sd      ra,136(sp)
   0x0000003ff7fc42f0 <+18>:    sd      s0,128(sp)
   0x0000003ff7fc42f2 <+20>:    sd      s1,120(sp)
   0x0000003ff7fc42f4 <+22>:    sd      s2,112(sp)
   0x0000003ff7fc42f6 <+24>:    sd      s3,104(sp)
   0x0000003ff7fc42f8 <+26>:    sd      s4,96(sp)
   0x0000003ff7fc42fa <+28>:    sd      s6,80(sp)
   0x0000003ff7fc42fc <+30>:    sd      s7,72(sp)
   0x0000003ff7fc42fe <+32>:    sd      s8,64(sp)
   0x0000003ff7fc4300 <+34>:    sd      s9,56(sp)
   0x0000003ff7fc4302 <+36>:    sd      a5,40(sp)

As far as prologue analysis is concerned, the most interesting part is
done at address 0x0000003ff7fc42ee (<+16>): 'sd ra,136(sp)'. This stores
the RA (return address) register on the stack, which is the information
we are looking for in order to identify the caller.

In the current implementation of the prologue scanner, GDB stops when
hitting 0x0000003ff7fc42e6 (<+8>) because it does not know what to do
with the 'ld' instruction.  GDB thinks it reached the end of the
prologue but have not yet reached the important part, which explain
GDB's inability to unwind past this point.

The section of the prologue starting at <+4> until <+12> is used to load
the stack canary[1], which will then be placed on the stack at <+36> at
the end of the prologue.

In order to have the prologue properly handled, this commit proposes to
add support for the ld instruction in the RISC-V prologue scanner.
I guess riscv32 would use lw in such situation so this patch also adds
support for this instruction.

With this patch applied, gdb is now able to unwind past pthread_join:

(gdb) bt
#0  0x0000003ff7fccd20 in __futex_abstimed_wait_common64 () from /lib/riscv64-linux-gnu/libpthread.so.0
#1  0x0000003ff7fc43da in __pthread_clockjoin_ex () from /lib/riscv64-linux-gnu/libpthread.so.0
#2  0x0000002aaaaaa88e in bar() ()
#3  0x0000002aaaaaa8c4 in foo() ()
#4  0x0000002aaaaaa8da in main ()

I have had a look to see if I could reproduce this easily, but in my
simple testcases using '-fstack-protector-all', the canary is loaded
after the RA register is saved.  I do not have a reliable way of
generating a prologue similar to the problematic one so I forged one
instead.

The testsuite have been run on riscv64 ubuntu 21.01 with no regression
observed.

[1] https://en.wikipedia.org/wiki/Buffer_overflow_protection#Canaries