]> git.ipfire.org Git - thirdparty/binutils-gdb.git/log
thirdparty/binutils-gdb.git
4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 25 Jul 2021 00:00:59 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoRevert: PowerPC: Don't generate unused section symbols
Alan Modra [Sat, 24 Jul 2021 06:04:55 +0000 (15:34 +0930)] 
Revert: PowerPC: Don't generate unused section symbols

Blindly following x86 broke linux kernel builds.

bfd/
* elf32-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Define as true.
* elf64-ppc.c (TARGET_KEEP_UNUSED_SECTION_SYMBOLS): Likewise.
gas/
* testsuite/gas/ppc/power4.d: Adjust for section sym change.
* testsuite/gas/ppc/test1elf32.d: Likewise.
* testsuite/gas/ppc/test1elf64.d: Likewise.
ld/
* testsuite/ld-powerpc/tlsexe.r: Adjust for section sym change.
* testsuite/ld-powerpc/tlsexe32.r: Likewise.
* testsuite/ld-powerpc/tlsexe32no.r: Likewise.
* testsuite/ld-powerpc/tlsexeno.r: Likewise.
* testsuite/ld-powerpc/tlsexenors.r: Likewise.
* testsuite/ld-powerpc/tlsexers.r: Likewise.
* testsuite/ld-powerpc/tlsexetoc.r: Likewise.
* testsuite/ld-powerpc/tlsexetocrs.r: Likewise.
* testsuite/ld-powerpc/tlsget.d: Likewise.
* testsuite/ld-powerpc/tlsget.wf: Likewise.
* testsuite/ld-powerpc/tlsget2.d: Likewise.
* testsuite/ld-powerpc/tlsget2.wf: Likewise.
* testsuite/ld-powerpc/tlsso.r: Likewise.
* testsuite/ld-powerpc/tlsso32.r: Likewise.
* testsuite/ld-powerpc/tlstocso.r: Likewise.

(cherry picked from commit c09c8b42021180eee9495bd50d8b35e683d3901b)

4 years agoRe: ld script expression parsing
Alan Modra [Thu, 22 Jul 2021 12:11:15 +0000 (21:41 +0930)] 
Re: ld script expression parsing

Commit 40726f16a8d7 broke references to sections within ADDR(), and
overlays with weird section names.

* ldgram.y (paren_script_name): New rule.
(exp): Use it for ALIGNOF, SIZEOF, ADDR, and LOADADDR.  Similarly
ensure script mode parsing for section name in SEGMENT_START.
(overlay_section): Delete unnecessary ldlex_script call.  Backup
on a lookahead NAME parsed in expression mode.
* testsuite/ld-elf/overlay.s: Add more sections.
* testsuite/ld-elf/overlay.t: Test '-' in section names.

(cherry picked from commit 553dd76c7e49e3e6afb528ff865589da8f6f3e1c)

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 24 Jul 2021 00:00:44 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 23 Jul 2021 00:00:59 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 22 Jul 2021 00:00:56 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoUpdated Russian translation for the bfd library
Nick Clifton [Wed, 21 Jul 2021 13:38:32 +0000 (14:38 +0100)] 
Updated Russian translation for the bfd library

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 21 Jul 2021 00:00:59 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoPR28106, build of 2.37 fails on FreeBSD and Clang
Alan Modra [Tue, 20 Jul 2021 09:16:57 +0000 (18:46 +0930)] 
PR28106, build of 2.37 fails on FreeBSD and Clang

https://en.cppreference.com/w/cpp/types/NULL says NULL might be
defined as nullptr.
https://en.cppreference.com/w/cpp/language/reinterpret_cast says
reinterpret_cast can't be used on nullptr.

PR gold/28106
PR gold/27815
* gc.h (gc_process_relocs): Use static_cast in Section_id constructor.

(cherry picked from commit b97bd976233ee4d43c2fe18f6356e62779cbe82d)

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 20 Jul 2021 00:00:56 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoChange "uint" to "unsigned"
Christopher Wellons [Sun, 18 Jul 2021 20:57:19 +0000 (16:57 -0400)] 
Change "uint" to "unsigned"

This fixes a defect introduced in 25162c795. The "uint" type has not
been explicitly defined here on mingw, causing compilation to fail.

On linux we have this in /usr/include/sys/types.h

/* Old compatibility names for C types.  */
typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;

So it's easy to see how such bugs can creep in.

* rust-demangle.c (struct rust_demangler): Change type of
"recursion" to unsigned.
(RUST_NO_RECURSION_LIMIT): Similarly in cast.

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 19 Jul 2021 00:00:41 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoRe-enable development on the 2.37 branch
Nick Clifton [Sun, 18 Jul 2021 18:45:19 +0000 (19:45 +0100)] 
Re-enable development on the 2.37 branch

4 years agoThis is the 2.37 release binutils-2_37
Nick Clifton [Sun, 18 Jul 2021 16:46:54 +0000 (17:46 +0100)] 
This is the 2.37 release

4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 18 Jul 2021 00:00:58 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 17 Jul 2021 00:00:47 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoUpdated Swedish translation for the binutils sub-directory
Nick Clifton [Fri, 16 Jul 2021 12:56:37 +0000 (13:56 +0100)] 
Updated Swedish translation for the binutils sub-directory

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 16 Jul 2021 00:00:40 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoFix a stack exhaustion problem in the Rust demangling code in the libiberty library.
Nick Clifton [Thu, 15 Jul 2021 15:51:56 +0000 (16:51 +0100)] 
Fix a stack exhaustion problem in the Rust demangling code in the libiberty library.

PR 99935
* rust-demangle.c: Add recursion limit.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 15 Jul 2021 00:00:43 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 14 Jul 2021 00:00:40 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 13 Jul 2021 00:00:47 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoUpdated French translation for the binutils sub-directory
Nick Clifton [Mon, 12 Jul 2021 13:20:35 +0000 (14:20 +0100)] 
Updated French translation for the binutils sub-directory

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 12 Jul 2021 00:00:37 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 11 Jul 2021 00:00:40 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 10 Jul 2021 00:00:36 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 9 Jul 2021 00:00:36 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agox86-64: Disallow PC reloc against weak undefined symbols in PIE
H.J. Lu [Thu, 8 Jul 2021 21:03:53 +0000 (14:03 -0700)] 
x86-64: Disallow PC reloc against weak undefined symbols in PIE

Disallow PC relocations against weak undefined symbols in PIE since they
can lead to non-zero address at run-time.

bfd/

PR ld/21782
* elf64-x86-64.c (elf_x86_64_relocate_section): Disallow PC
relocations against weak undefined symbols in PIE.

ld/

PR ld/21782
* testsuite/ld-x86-64/pie3.d: Expect linker error.

(cherry picked from commit 661b504df9bfb8d7c5d669091720e1dc0079c05e)

4 years agoUpdated Portuguese translation for the BFD sub-directory
Nick Clifton [Thu, 8 Jul 2021 11:38:46 +0000 (12:38 +0100)] 
Updated Portuguese translation for the BFD sub-directory

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 8 Jul 2021 00:00:37 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoelf/riscv: Fix relaxation with aliases [PR28021]
Michael Matz [Mon, 28 Jun 2021 15:57:17 +0000 (17:57 +0200)] 
elf/riscv: Fix relaxation with aliases [PR28021]

the fix for PR22756 only changed behaviour for hidden aliases,
but the same situation exists for non-hidden aliases: sym_hashes[]
can contain multiple entries pointing to the same symbol structure
leading to relaxation adjustment to be applied twice.

Fix this by testing for duplicates for everything that looks like it
has a version.

PR ld/28021

bfd/
* elfnn-riscv.c (riscv_relax_delete_bytes): Check for any
versioning.

ld/
* testsuite/ld-riscv-elf/relax-twice.ver: New.
* testsuite/ld-riscv-elf/relax-twice-1.s: New.
* testsuite/ld-riscv-elf/relax-twice-2.s: New.
* testsuite/ld-riscv-elf/ld-riscv-elf.exp
(run_relax_twice_test): New, and call it.

(cherry picked from commit 235f5ef4a6b8fbdcfaea8b629f7c6a9792a789de)

4 years agold: Check archive only for archive member
H.J. Lu [Wed, 7 Jul 2021 14:47:00 +0000 (07:47 -0700)] 
ld: Check archive only for archive member

Since plugin_maybe_claim calls bfd_close on the original input BFD if it
isn't an archive member, pass NULL to bfd_plugin_close_file_descriptor
to indicate that the BFD isn't an archive member.

bfd/

PR ld/18028
* plugin.c (bfd_plugin_close_file_descriptor): Check archive
only of abfd != NULL.
(try_claim): Pass NULL to bfd_plugin_close_file_descriptor if
it isn't an archive member.

ld/

PR ld/18028
* plugin.c (plugin_input_file): Add comments for abfd and ibfd.
(plugin_object_p): Set input->ibfd to NULL if it isn't an
archive member.

(cherry picked from commit 7a30ac441a4e776e68399cb916c4731b5192e931)

4 years agoFix Solaris gprof build with --disable-nls
Rainer Orth [Wed, 7 Jul 2021 11:56:21 +0000 (13:56 +0200)] 
Fix Solaris gprof build with --disable-nls

gprof fails to compile on Solaris 10 and 11.3 with --disable-nls:

In file included from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/gprof.h:33,
                 from /vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/basic_blocks.c:24:
/usr/include/libintl.h:45:14: error: expected identifier or '(' before 'const'
   45 | extern char *dcgettext(const char *, const char *, const int);
      |              ^~~~~~~~~
/usr/include/libintl.h:46:14: error: expected identifier or '(' before 'const'
   46 | extern char *dgettext(const char *, const char *);
      |              ^~~~~~~~
/usr/include/libintl.h:47:14: error: expected identifier or '(' before 'const'
   47 | extern char *gettext(const char *);
      |              ^~~~~~~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:33:
error: expected identifier or '(' before 'do'
  165 | # define textdomain(Domainname) do {} while (0)
      |                                 ^~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:165:39:
error: expected identifier or '(' before 'while'
  165 | # define textdomain(Domainname) do {} while (0)
      |                                       ^~~~~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:46:
error: expected identifier or '(' before 'do'
  166 | # define bindtextdomain(Domainname, Dirname) do {} while (0)
      |                                              ^~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/gprof/../bfd/sysdep.h:166:52:
error: expected identifier or '(' before 'while'
  166 | # define bindtextdomain(Domainname, Dirname) do {} while (0)
      |                                                    ^~~~~
/usr/include/libintl.h:55:14: error: expected identifier or '(' before 'unsigned'
   55 | extern char *dcngettext(const char *, const char *,
      |              ^~~~~~~~~~
/usr/include/libintl.h:57:14: error: expected identifier or '(' before 'unsigned'
   57 | extern char *dngettext(const char *, const char *,
      |              ^~~~~~~~~
/usr/include/libintl.h:59:14: error: expected identifier or '(' before 'unsigned'
   59 | extern char *ngettext(const char *, const char *, unsigned long int);
      |              ^~~~~~~~

This is a known issue already partially fixed in binutils/sysdep.h.  For
gprof, the same fix needs to be applied in bfd/sysdep.h, as the
following patch does.  Tested on i386-pc-solaris2.10 and
i386-pc-solaris2.11.

2021-07-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

bfd:
* sysdep.h [!ENABLE_NLS]: Prevent inclusion of <libintl.h> on
Solaris.

4 years agoCheck for strnlen declaration to fix Solaris 10 build
Rainer Orth [Wed, 7 Jul 2021 11:55:14 +0000 (13:55 +0200)] 
Check for strnlen declaration to fix Solaris 10 build

binutils currently fails to compile on Solaris 10:

/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_debug_link_info_1':
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: implicit declaration of function 'strnlen' [-Werror=implicit-function-declaration]
 1231 |   crc_offset = strnlen (name, size) + 1;
      |        ^~~~~~~
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1231:16: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror]
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c: In function 'bfd_get_alt_debug_link_info':
/vol/src/gnu/binutils/hg/binutils-2.37-branch/git/bfd/opncls.c:1319:20: error: incompatible implicit declaration of built-in function 'strnlen' [-Werror]
 1319 |   buildid_offset = strnlen (name, size) + 1;
      |    ^~~~~~~

and in a couple of other places.  The platform lacks strnlen, and while
libiberty.h can provide a fallback declaration, the necessary configure
test isn't run.

Fixed with the following patch.  Tested on i386-pc-solaris2.10.

2021-07-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>

bfd:
* configure.ac: Check for strnlen declaration.
* configure, config.in: Regenerate.

binutils:
* configure.ac: Check for strnlen declaration.
* configure, config.in: Regenerate.

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 7 Jul 2021 00:00:40 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 6 Jul 2021 00:00:38 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agold: Cache and reuse the IR archive file descriptor
H.J. Lu [Mon, 5 Jul 2021 15:54:54 +0000 (08:54 -0700)] 
ld: Cache and reuse the IR archive file descriptor

Linker plugin_object_p opens the IR archive for each IR archive member.
For GCC plugin, plugin_object_p closes the archive file descriptor.  But
for LLVM plugin, the archive file descriptor remains open.  If there are
3000 IR archive members, there are 3000 file descriptors for them.  We
can run out of file descriptors petty easily.

1. Add archive_plugin_fd and archive_plugin_fd_open_count to bfd so that
we can cache and reuse the IR archive file descriptor for all IR archive
members in the archive.
2. Add bfd_plugin_close_file_descriptor to properly close the IR archive
file descriptor.

bfd/

PR ld/28040
* archive.c (_bfd_archive_close_and_cleanup): Close the archive
plugin file descriptor if needed.
* bfd.c (bfd): Add archive_plugin_fd and
archive_plugin_fd_open_count.
* opncls.c (_bfd_new_bfd): Initialize to -1.
* plugin.c (bfd_plugin_open_input): Cache and reuse the archive
plugin file descriptor.
(bfd_plugin_close_file_descriptor): New function.
(try_claim): Call bfd_plugin_close_file_descriptor.
* plugin.h (bfd_plugin_close_file_descriptor): New.
* bfd-in2.h: Regenerated.

ld/

PR ld/28040
* plugin.c (plugin_input_file): Add ibfd.
(release_plugin_file_descriptor): New function.
(release_input_file): Call release_plugin_file_descriptor to
close input->fd.
(plugin_object_p): Call release_plugin_file_descriptor to close
input->fd.  Also call release_plugin_file_descriptor if not
claimed.
* testsuite/config/default.exp (RANLIB): New.
* testsuite/ld-plugin/lto.exp: Run ranlib test.

(cherry picked from commit 918172470430ea6fa082c941e6789add88331197)

4 years agoReapply patch to allow libiberty to be built with LTO enabled.
Nick Clifton [Mon, 5 Jul 2021 15:23:59 +0000 (16:23 +0100)] 
Reapply patch to allow libiberty to be built with LTO enabled.

Reapply this change from commit:
50ad1254d5030d0804cbf89c758359ae202e8d55

* Makefile.in (AR): Add @AR_PLUGIN_OPTION@
(RANLIB): Add @RANLIB_PLUGIN_OPTION@.
(configure_deps): Depend on ../config/gcc-plugin.m4.
* aclocal.m4: Include ../config/gcc-plugin.m4.
* configure.ac: AC_SUBST AR_PLUGIN_OPTION and
RANLIB_PLUGIN_OPTION.
* configure: Regenerated.

4 years agoUpdated translations
Nick Clifton [Mon, 5 Jul 2021 14:53:36 +0000 (15:53 +0100)] 
Updated translations

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 5 Jul 2021 00:00:37 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 4 Jul 2021 00:00:36 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoRegenerate gprof/configure
Nick Clifton [Sat, 3 Jul 2021 14:32:53 +0000 (15:32 +0100)] 
Regenerate gprof/configure

4 years agoUpdate version number and regenerate files
Nick Clifton [Sat, 3 Jul 2021 14:13:10 +0000 (15:13 +0100)] 
Update version number and regenerate files

4 years agoAdd markers for 2.37 branch
Nick Clifton [Sat, 3 Jul 2021 13:50:57 +0000 (14:50 +0100)] 
Add markers for 2.37 branch

4 years agoSynchronize libiberty sources (and include/demangle.h) with GCC master version
Nick Clifton [Sat, 3 Jul 2021 13:00:33 +0000 (14:00 +0100)] 
Synchronize libiberty sources (and include/demangle.h) with GCC master version

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 3 Jul 2021 00:00:10 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agoUse 'const' in ada-exp.y
Tom Tromey [Fri, 2 Jul 2021 19:22:18 +0000 (13:22 -0600)] 
Use 'const' in ada-exp.y

I found a few spots in ada-exp.y that could use 'const'.
Tested by rebuilding.

2021-07-02  Tom Tromey  <tromey@adacore.com>

* ada-exp.y (chop_selector, chop_separator, write_selectors)
(write_ambiguous_var, get_symbol_field_type): Use const.

4 years agoDocument TUI improvements in the manual & NEWS
Pedro Alves [Fri, 4 Jun 2021 16:12:41 +0000 (17:12 +0100)] 
Document TUI improvements in the manual & NEWS

gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <pedro@palves.net>
    Hannes Domani  <ssbssa@yahoo.de>

* NEWS: Add new "TUI Improvements" section and mention mouse
support and that unrecognized special keys are now passed to
GDB.  Mention Python Window.click in the Python improvements
section.

gdb/doc/ChangeLog:
yyyy-mm-dd  Pedro Alves  <pedro@palves.net>

* gdb.texinfo (TUI): <TUI Mouse Support>: New node/section.

Co-Authored-By: Hannes Domani <ssbssa@yahoo.de>
Change-Id: I0d79a795d8ac561fd28cdc5184bff029ba28bc64

4 years agoFix an illegal memory access triggered by an attempt to parse a corrupt input file.
Nick Clifton [Fri, 2 Jul 2021 13:56:36 +0000 (14:56 +0100)] 
Fix an illegal memory access triggered by an attempt to parse a corrupt input file.

PR 28046
* dwarf2.c (read_ranges): Check that range_ptr does not exceed
range_end.

4 years agoPR28048, heap-buffer-overflow on readelf -Ww
Alan Modra [Fri, 2 Jul 2021 13:48:04 +0000 (23:18 +0930)] 
PR28048, heap-buffer-overflow on readelf -Ww

PR 28048
* dwarf.c (get_type_signedness): Don't run off end of buffer
printing DW_FORM_string attribute.

4 years agoRe: Fix minor NDS32 renaming snafu
Alan Modra [Fri, 2 Jul 2021 07:57:31 +0000 (17:27 +0930)] 
Re: Fix minor NDS32 renaming snafu

Some extern declarations differ in constnes to their definitions too.
Let's make sure this sort of thing doesn't happen again, but putting
the externs in a header where they belong.

gas/
* config/tc-nds32.c (nds32_keyword_gpr): Don't declare.
(md_begin): Constify k.
opcodes/
* nds32-dis.c (nds32_find_reg_keyword): Constify arg and return.
(nds32_parse_audio_ext, nds32_parse_opcode): Constify psys_reg.
(nds32_field_table, nds32_opcode_table, nds32_keyword_table),
(nds32_opcodes, nds32_operand_fields, nds32_keywords),
(nds32_keyword_gpr): Move declarations to..
* nds32-asm.h: ..here, constifying to match definitions.

4 years agoFix minor NDS32 renaming snafu.
Nick Clifton [Fri, 2 Jul 2021 09:45:02 +0000 (10:45 +0100)] 
Fix minor NDS32 renaming snafu.

* config/tc-nds32.c: Change all references of keyword_gpr to
nds32_keyword_gpr.

4 years agosim: unify reserved instruction bits settings
Mike Frysinger [Thu, 1 Jul 2021 05:04:48 +0000 (01:04 -0400)] 
sim: unify reserved instruction bits settings

Move these options up to the common dir so we only test & export
them once across all ports.

The setting only affects igen based ports, and they were turning
this on by default, so keep the default in place.

4 years agosim: m32r: merge with common configure script
Mike Frysinger [Thu, 1 Jul 2021 04:50:17 +0000 (00:50 -0400)] 
sim: m32r: merge with common configure script

Now that the traps code has been unified, the configure script has no
unique logic in it, so it can be merged into the single common one.

4 years agosim: m32r: reformat linux traps code
Mike Frysinger [Thu, 1 Jul 2021 04:49:33 +0000 (00:49 -0400)] 
sim: m32r: reformat linux traps code

Do this as a sep commit to try and make the history easier to review.

4 years agosim: m32r: unify ELF & Linux traps logic
Mike Frysinger [Thu, 1 Jul 2021 04:28:10 +0000 (00:28 -0400)] 
sim: m32r: unify ELF & Linux traps logic

This makes the simulator work the same regardless of the target (bare
metal m32r-elf or Linux m32r-linux-gnu) by unifying the traps code.
It was mostly already the same with the only difference being support
for trap #2 reserved for Linux syscalls.  We can move that logic to
runtime by checking the current environment operating mode instead.

4 years agosim: m32r: replace custom endian helpers with sim-endian
Mike Frysinger [Thu, 1 Jul 2021 04:17:38 +0000 (00:17 -0400)] 
sim: m32r: replace custom endian helpers with sim-endian

This improves the logic a bit by making the host<->target translations
a bit more clear.  The structs still bleed way too much between the two
worlds, but let's fix one thing at a time.

4 years agosim: m32r: fix virtual environment with Linux targets
Mike Frysinger [Thu, 1 Jul 2021 00:30:43 +0000 (20:30 -0400)] 
sim: m32r: fix virtual environment with Linux targets

We don't want to handle Linux syscalls when in the virtual environment,
just the user environment, so adjust the Linux traps logic to check for
that specifically (instead of just skipping the operating environment).

Also tweak some testcases to explicitly specify the environment they run
under rather than relying on the default matching their needs.  This gets
the tests passing for all m32r targets.

4 years agosim: m32r: namespace Linux syscall table
Mike Frysinger [Wed, 30 Jun 2021 22:39:17 +0000 (18:39 -0400)] 
sim: m32r: namespace Linux syscall table

The use of __NR_ defines in here conflicts a lot with the standard
host syscalls, sometimes leading to build errors (when the numbers
happen to be the same we get duplicate case handlers), and other
times leading to misbehavior (where the m32r syscall # is not what
is actually checked).

Namespace these using the standard that we already use: change the
__NR_ to TARGET_LINUX_SYS_ with a simple `sed`.

Also add a few missing includes so the code at least compiles.

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 2 Jul 2021 00:00:12 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agocgen: split GUILE setting out
Mike Frysinger [Tue, 29 Jun 2021 01:26:48 +0000 (21:26 -0400)] 
cgen: split GUILE setting out

This makes it easier to override to point to an older version of guile.
The current cgen code doesn't work with guile-2, so need to point to an
older guile-1.8.

4 years agoopcodes: constify & local meps macros
Mike Frysinger [Sun, 27 Jun 2021 06:17:27 +0000 (02:17 -0400)] 
opcodes: constify & local meps macros

Avoid exporting this common variable name into writable data.

4 years agoopcodes: cleanup nds32 variables
Mike Frysinger [Sun, 27 Jun 2021 06:14:29 +0000 (02:14 -0400)] 
opcodes: cleanup nds32 variables

For the variables that don't need to be exported, mark them static.
For the ones shared between modules, add a "nds32_" prefix to avoid
collisions with these common variable names.

4 years agoopcodes: constify & localize z80 opcodes
Mike Frysinger [Sun, 27 Jun 2021 05:58:18 +0000 (01:58 -0400)] 
opcodes: constify & localize z80 opcodes

These aren't used outside of this module, and are never modified.
Mark it static to avoid bad exported variable name issues.

4 years agoopcodes: constify & scope microblaze opcodes
Mike Frysinger [Sun, 27 Jun 2021 05:55:50 +0000 (01:55 -0400)] 
opcodes: constify & scope microblaze opcodes

This is exporting the variable "opcodes" as a large writable blob.
This is not a namespace friendly name, so add a "microblaze" prefix,
and then sprinkle const over its definition & use.

4 years agoopcodes: constify aarch64_opcode_tables
Mike Frysinger [Sun, 27 Jun 2021 05:37:24 +0000 (01:37 -0400)] 
opcodes: constify aarch64_opcode_tables

This table is huge (~350k), so stop putting it into writable .data
since it's only const data.

4 years agoPartially fix debuginfod tests in binutils testsuite.
Nick Clifton [Thu, 1 Jul 2021 13:10:38 +0000 (14:10 +0100)] 
Partially fix debuginfod tests in binutils testsuite.

PR 28029
* testsuite/binutils-all/debuginfod.exp: Replace -wK with -wk.

4 years agoLinux: Access memory even if threads are running
Pedro Alves [Fri, 11 Jun 2021 16:56:32 +0000 (17:56 +0100)] 
Linux: Access memory even if threads are running

Currently, on GNU/Linux, if you try to access memory and you have a
running thread selected, GDB fails the memory accesses, like:

 (gdb) c&
 Continuing.
 (gdb) p global_var
 Cannot access memory at address 0x555555558010

Or:

 (gdb) b main
 Breakpoint 2 at 0x55555555524d: file access-mem-running.c, line 59.
 Warning:
 Cannot insert breakpoint 2.
 Cannot access memory at address 0x55555555524d

This patch removes this limitation.  It teaches the native Linux
target to read/write memory even if the target is running.  And it
does this without temporarily stopping threads.  We now get:

 (gdb) c&
 Continuing.
 (gdb) p global_var
 $1 = 123
 (gdb) b main
 Breakpoint 2 at 0x555555555259: file access-mem-running.c, line 62.

(The scenarios above work correctly with current GDBserver, because
GDBserver temporarily stops all threads in the process whenever GDB
wants to access memory (see prepare_to_access_memory /
done_accessing_memory).  Freezing the whole process makes sense when
we need to be sure that we have a consistent view of memory and don't
race with the inferior changing it at the same time as GDB is
accessing it.  But I think that's a too-heavy hammer for the default
behavior.  I think that ideally, whether to stop all threads or not
should be policy decided by gdb core, probably best implemented by
exposing something like gdbserver's prepare_to_access_memory /
done_accessing_memory to gdb core.)

Currently, if we're accessing (reading/writing) just a few bytes, then
the Linux native backend does not try accessing memory via
/proc/<pid>/mem and goes straight to ptrace
PTRACE_PEEKTEXT/PTRACE_POKETEXT.  However, ptrace always fails when
the ptracee is running.  So the first step is to prefer
/proc/<pid>/mem even for small accesses.  Without further changes
however, that may cause a performance regression, due to constantly
opening and closing /proc/<pid>/mem for each memory access.  So the
next step is to keep the /proc/<pid>/mem file open across memory
accesses.  If we have this, then it doesn't make sense anymore to even
have the ptrace fallback, so the patch disables it.

I've made it such that GDB only ever has one /proc/<pid>/mem file open
at any time.  As long as a memory access hits the same inferior
process as the previous access, then we reuse the previously open
file.  If however, we access memory of a different process, then we
close the previous file and open a new one for the new process.

If we wanted, we could keep one /proc/<pid>/mem file open per
inferior, and never close them (unless the inferior exits or execs).
However, having seen bfd patches recently about hitting too many open
file descriptors, I kept the logic to have only one file open tops.
Also, we need to handle memory accesses for processes for which we
don't have an inferior object, for when we need to detach a
fork-child, and we'd probaly want to handle caching the open file for
that scenario (no inferior for process) too, which would probably end
up meaning caching for last non-inferior process, which is very much
what I'm proposing anyhow.  So always having one file open likely ends
up a smaller patch.

The next step is handling the case of GDB reading/writing memory
through a thread that is running and exits.  The access should not
result in a user-visible failure if the inferior/process is still
alive.

Once we manage to open a /proc/<lwpid>/mem file, then that file is
usable for memory accesses even if the corresponding lwp exits and is
reaped.  I double checked that trying to open the same
/proc/<lwpid>/mem path again fails because the lwp is really gone so
there's no /proc/<lwpid>/ entry on the filesystem anymore, but the
previously open file remains usable.  It's only when the whole process
execs that we need to reopen a new file.

When the kernel destroys the whole address space, i.e., when the
process exits or execs, the reads/writes fail with 0 aka EOF, in which
case there's nothing else to do than returning a memory access
failure.  Note this means that when we get an exec event, we need to
reopen the file, to access the process's new address space.

If we need to open (or reopen) the /proc/<pid>/mem file, and the LWP
we're opening it for exits before we open it and before we reap the
LWP (i.e., the LWP is zombie), the open fails with EACCES.  The patch
handles this by just looking for another thread until it finds one
that we can open a /proc/<pid>/mem successfully for.

If we need to open (or reopen) the /proc/<pid>/mem file, and the LWP
we're opening has exited and we already reaped it, which is the case
if the selected thread is in THREAD_EXIT state, the open fails with
ENOENT.  The patch handles this the same way as a zombie race
(EACCES), instead of checking upfront whether we're accessing a
known-exited thread, because that would result in more complicated
code, because we also need to handle accessing lwps that are not
listed in the core thread list, and it's the core thread list that
records the THREAD_EXIT state.

The patch includes two testcases:

#1 - gdb.base/access-mem-running.exp

  This is the conceptually simplest - it is single-threaded, and has
  GDB read and write memory while the program is running.  It also
  tests setting a breakpoint while the program is running, and checks
  that the breakpoint is hit immediately.

#2 - gdb.threads/access-mem-running-thread-exit.exp

  This one is more elaborate, as it continuously spawns short-lived
  threads in order to exercise accessing memory just while threads are
  exiting.  It also spawns two different processes and alternates
  accessing memory between the two processes to exercise the reopening
  the /proc file frequently.  This also ends up exercising GDB reading
  from an exited thread frequently.  I confirmed by putting abort()
  calls in the EACCES/ENOENT paths added by the patch that we do hit
  all of them frequently with the testcase.  It also exits the
  process's main thread (i.e., the main thread becomes zombie), to
  make sure accessing memory in such a corner-case scenario works now
  and in the future.

The tests fail on GNU/Linux native before the code changes, and pass
after.  They pass against current GDBserver, again because GDBserver
supports memory access even if all threads are running, by
transparently pausing the whole process.

gdb/ChangeLog:
yyyy-mm-dd  Pedro Alves  <pedro@palves.net>

PR mi/15729
PR gdb/13463
* linux-nat.c (linux_nat_target::detach): Close the
/proc/<pid>/mem file if it was open for this process.
(linux_handle_extended_wait) <PTRACE_EVENT_EXEC>: Close the
/proc/<pid>/mem file if it was open for this process.
(linux_nat_target::mourn_inferior): Close the /proc/<pid>/mem file
if it was open for this process.
(linux_nat_target::xfer_partial): Adjust.  Do not fall back to
inf_ptrace_target::xfer_partial for memory accesses.
(last_proc_mem_file): New.
(maybe_close_proc_mem_file): New.
(linux_proc_xfer_memory_partial_pid): New, with bits factored out
from linux_proc_xfer_partial.
(linux_proc_xfer_partial): Delete.
(linux_proc_xfer_memory_partial): New.

gdb/testsuite/ChangeLog
yyyy-mm-dd  Pedro Alves  <pedro@palves.net>

PR mi/15729
PR gdb/13463
* gdb.base/access-mem-running.c: New.
* gdb.base/access-mem-running.exp: New.
* gdb.threads/access-mem-running-thread-exit.c: New.
* gdb.threads/access-mem-running-thread-exit.exp: New.

Change-Id: Ib3c082528872662a3fc0ca9b31c34d4876c874c9

4 years agoreadelf: Reset file position to beginning for thin archive members
Andrei Homescu [Thu, 1 Jul 2021 11:01:55 +0000 (12:01 +0100)] 
readelf: Reset file position to beginning for thin archive members

* readelf.c (process_archive): Reset file position to the
beginning when calling process_object for thin archive members.
* testsuite/binutils-all/readelf.exp: Add test.
* testsuite/binutils-all/readelf.h.thin: New file.

4 years agoarm: don't treat XScale features as part of the FPU [PR 28031]
Richard Earnshaw [Thu, 1 Jul 2021 10:37:13 +0000 (11:37 +0100)] 
arm: don't treat XScale features as part of the FPU [PR 28031]

Although the XScale and its iwMMX extensions are implemented in the
Arm co-processor space, they are not considered to be part of the FPU
specification.  In particular, they cannot be enabled or disabled via
a .fpu directive.  It's therefore incorrect to strip these properties
when a new .fpu directive is encountered.

Note that the legacy Maverick co-processor is considered to be a FPU
and it is possible to control this via the .fpu directive.

include:

PR gas/28031
* opcode/arm.h (FPU_ANY): Exclude XScale-related features.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 1 Jul 2021 00:00:11 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agosim: ppc: unify (most) compiler warnings with common code
Mike Frysinger [Wed, 30 Jun 2021 02:06:30 +0000 (22:06 -0400)] 
sim: ppc: unify (most) compiler warnings with common code

Copy most of the common build warning logic over from the common
code to help keep code behavior a bit consistent, and turn them
on by default.  We disable a few flags for now until we can clean
the code up.

4 years agosim: cris/frv/iq2000/lm32: merge with common configure script
Mike Frysinger [Wed, 30 Jun 2021 17:01:17 +0000 (13:01 -0400)] 
sim: cris/frv/iq2000/lm32: merge with common configure script

Now that the scache logic has been migrated into the common code,
there's nothing specific in these configure scripts, so merge them
into the common one.

The frv unique logic can be moved to a dedicated include and merged
in the common configure since the flag has been scoped to the arch.

4 years agosim: unify scache settings
Mike Frysinger [Tue, 29 Jun 2021 02:39:16 +0000 (22:39 -0400)] 
sim: unify scache settings

The cgen scache module is enabled by every cgen port, and with the
same default value of 16k (which matches the common default value).
Let's pull this option out of the individual ports (via CPPFLAGS)
and into the common code (via config.h).

The object itself is compiled only for cgen ports atm, so that part
doesn't change.  The scache code is initialized dynamically via the
modules.c logic.  That's why the profile code needs an additional
CGEN_ARCH check.

This will allow us to collapse arch configure files more.  Merging
the source files will require more future work, but integrating the
cgen & non-cgen worlds itself will take a lot.

4 years agosim: frv: scope the unique configure flag
Mike Frysinger [Tue, 29 Jun 2021 02:23:37 +0000 (22:23 -0400)] 
sim: frv: scope the unique configure flag

This will make it possible to merge into the common configure by
making sure we never collide with other arches.

4 years agosim: move scache init to dynamic modules.c
Mike Frysinger [Mon, 14 Jun 2021 02:45:02 +0000 (22:45 -0400)] 
sim: move scache init to dynamic modules.c

Use the new modules.c framework to find & initialize this module.

4 years agosim: move profile init to dynamic modules.c
Mike Frysinger [Mon, 14 Jun 2021 02:43:54 +0000 (22:43 -0400)] 
sim: move profile init to dynamic modules.c

Use the new modules.c framework to find & initialize this module.

4 years agosim: move trace init to dynamic modules.c
Mike Frysinger [Mon, 14 Jun 2021 02:42:49 +0000 (22:42 -0400)] 
sim: move trace init to dynamic modules.c

Use the new modules.c framework to find & initialize this module.

4 years agosim: move engine init to dynamic modules.c
Mike Frysinger [Mon, 14 Jun 2021 02:40:09 +0000 (22:40 -0400)] 
sim: move engine init to dynamic modules.c

Use the new modules.c framework to find & initialize this module.

4 years agoMark .gnu.debuglto_.debug_* as SHT_MIPS_DWARF
YunQiang Su [Wed, 30 Jun 2021 16:16:22 +0000 (17:16 +0100)] 
Mark .gnu.debuglto_.debug_* as SHT_MIPS_DWARF

PR mips/28009
* bfd/elfxx-mips.c (_bfd_mips_elf_section_from_shdr,
_bfd_mips_elf_fake_sections): Mark LTO debug info as
SHT_MIPS_DWARF.

4 years agoHandle DW_FORM_implicit_const when displaying an attribute
Nick Clifton [Wed, 30 Jun 2021 15:17:46 +0000 (16:17 +0100)] 
Handle DW_FORM_implicit_const when displaying an attribute

* dwarf.c (read_and_display_attr_value): Handle
DW_FORM_implicit_const.

4 years agoFix signedness of def_cfa_sf and def_cfa_offset_sf
Richard Henderson [Wed, 30 Jun 2021 11:11:54 +0000 (12:11 +0100)] 
Fix signedness of def_cfa_sf and def_cfa_offset_sf

 * dwarf.c (display_debug_frames): Both DW_CFA_def_cfa_sf
 and DW_CFA_def_cfa_offset_sf have a signed offset.

4 years agosim: bfin: merge with common configure script
Mike Frysinger [Tue, 29 Jun 2021 02:11:30 +0000 (22:11 -0400)] 
sim: bfin: merge with common configure script

Now that the model logic has been migrated into the runtime, there's
nothing specific in the bfin configure code, so merge it into the
common one.

4 years agosim: delete unused model settings
Mike Frysinger [Tue, 29 Jun 2021 02:10:28 +0000 (22:10 -0400)] 
sim: delete unused model settings

These were never fully migrated from the psim to common code, and since
we've finished moving the logic into the runtime sim state, we won't ever
need these.  So punt them.

4 years agosim: move default model to the runtime sim state
Mike Frysinger [Tue, 29 Jun 2021 02:07:44 +0000 (22:07 -0400)] 
sim: move default model to the runtime sim state

This kills off another compile-time option by moving the setting to
the individual arch runtimes.  This will allow dynamic selection by
the arch when doing a single build with multiple arches.

The sim_model_init rework is a little funky.  In the past it was
disabled entirely if no default model was set.  We maintain the
spirit of the logic by gating the fallback logic on whether the
port has defined any models.

4 years agosim: namespace sim_machs
Mike Frysinger [Tue, 29 Jun 2021 01:42:56 +0000 (21:42 -0400)] 
sim: namespace sim_machs

We want to do a single build with all arches in one binary which means
we need to namespace sim_machs on a per-arch basis.  Move it from a
global variable to the sim description structure so it can be setup at
runtime.

Changing the SIM_MODEL->num from an enum to an int is unfortunate, but
we specifically don't want to maintain a centralized list anymore, and
this was never used directly in common code, just passed to per-arch
callbacks.

4 years agosim: ppc: fix printf warnings
Mike Frysinger [Wed, 30 Jun 2021 01:45:13 +0000 (21:45 -0400)] 
sim: ppc: fix printf warnings

This code hits some format-zero-length warnings, so hack the code
like we did in the common layers.

4 years agosim: use -Wunused-but-set-parameter
Mike Frysinger [Wed, 30 Jun 2021 01:05:17 +0000 (21:05 -0400)] 
sim: use -Wunused-but-set-parameter

The code is already clean, so sync this over from gdb warning.m4.
Also shuffle the order of the flags a bit to match the current gdb
warning.m4 code.

4 years agosim: fix arch Makefile regen when unified
Mike Frysinger [Wed, 30 Jun 2021 00:44:55 +0000 (20:44 -0400)] 
sim: fix arch Makefile regen when unified

The $(arch) variable is only setup for cgen ports, so calculate this
value dynamically.  We also need to generate multiple inputs in order
to properly recreate the subdir Makefile, so list them all.

4 years agosim: use -Wno-error=maybe-uninitialized
Mike Frysinger [Wed, 30 Jun 2021 00:33:14 +0000 (20:33 -0400)] 
sim: use -Wno-error=maybe-uninitialized

We have some code tripping this warning, but it depends on the gcc
version & optimization levels.  We've added some hints to the code
so some versions of gcc work better, but still not all.  Let's just
disable the warning like gdb does.

4 years agosim: callback: add check for HAVE_KILL
Mike Frysinger [Tue, 29 Jun 2021 07:13:54 +0000 (03:13 -0400)] 
sim: callback: add check for HAVE_KILL

Fix building on systems w/out a kill function (e.g. Windows).

4 years agosim: cris: remove cgen-ops.h include hack
Mike Frysinger [Tue, 29 Jun 2021 01:29:41 +0000 (21:29 -0400)] 
sim: cris: remove cgen-ops.h include hack

This has been upstreamed into cgen itself.

4 years agosim: model: constify sim_machs storage
Mike Frysinger [Sun, 27 Jun 2021 05:26:30 +0000 (01:26 -0400)] 
sim: model: constify sim_machs storage

The array of pointers is never modified, so mark it const so it ends
up in the read-only data section.

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 30 Jun 2021 00:00:09 +0000 (00:00 +0000)] 
Automatic date update in version.in

4 years agogdb: introduce FRAME_SCOPED_DEBUG_ENTER_EXIT
Simon Marchi [Tue, 29 Jun 2021 16:05:14 +0000 (12:05 -0400)] 
gdb: introduce FRAME_SCOPED_DEBUG_ENTER_EXIT

Introduce FRAME_SCOPED_DEBUG_ENTER_EXIT and use it to print enter/exit
messages in important frame-related functions.  I think this helps
understand which lower-level operations are done as part of which
higher-level operation.  And it helps visually skip over a higher-level
operation you are not interested in.

Here's an example, combined with some py-unwind messages:

    [frame] frame_unwind_find_by_frame: enter
      [frame] frame_unwind_find_by_frame: this_frame=0
      [frame] frame_unwind_try_unwinder: trying unwinder "dummy"
      [frame] frame_unwind_try_unwinder: no
      [frame] frame_unwind_try_unwinder: trying unwinder "dwarf2 tailcall"
      [frame] frame_unwind_try_unwinder: no
      [frame] frame_unwind_try_unwinder: trying unwinder "inline"
      [frame] frame_unwind_try_unwinder: no
      [frame] frame_unwind_try_unwinder: trying unwinder "jit"
      [frame] frame_unwind_try_unwinder: no
      [frame] frame_unwind_try_unwinder: trying unwinder "python"
      [py-unwind] pyuw_sniffer: enter
        [frame] frame_unwind_register_value: enter
          [frame] frame_unwind_register_value: frame=-1, regnum=7(rsp)
          [frame] frame_unwind_register_value:   -> register=7 bytes=[40ddffffff7f0000]
        [frame] frame_unwind_register_value: exit
        [py-unwind] pyuw_sniffer: frame=0, sp=0x7fffffffdd40, pc=0x5555555551ec
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_eq: l={stack=<sentinel>,!code,special=0x0000000000000000}, r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_unwind_register_value: enter
          [frame] frame_unwind_register_value: frame=-1, regnum=6(rbp)
          [frame] frame_unwind_register_value:   -> register=6 bytes=[50ddffffff7f0000]
        [frame] frame_unwind_register_value: exit
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_eq: l={stack=<sentinel>,!code,special=0x0000000000000000}, r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] get_prev_frame: enter
          [frame] get_prev_frame_always_1: enter
            [frame] get_prev_frame_always_1: this_frame=-1
            [frame] get_prev_frame_always_1:   -> {level=0,type=NORMAL_FRAME,unwind=0x5588ee3d17c0,pc=0x5555555551ec,id=<not computed>,func=<unknown>} // cached
          [frame] get_prev_frame_always_1: exit
        [frame] get_prev_frame: exit
        [frame] value_fetch_lazy_register: (frame=0, regnum=6(rbp), ...) -> register=6 bytes=[50ddffffff7f0000]
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_eq: l={stack=<sentinel>,!code,special=0x0000000000000000}, r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_unwind_register_value: enter
          [frame] frame_unwind_register_value: frame=-1, regnum=7(rsp)
          [frame] frame_unwind_register_value:   -> register=7 bytes=[40ddffffff7f0000]
        [frame] frame_unwind_register_value: exit
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_eq: l={stack=<sentinel>,!code,special=0x0000000000000000}, r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] get_prev_frame: enter
          [frame] get_prev_frame_always_1: enter
            [frame] get_prev_frame_always_1: this_frame=-1
            [frame] get_prev_frame_always_1:   -> {level=0,type=NORMAL_FRAME,unwind=0x5588ee3d1824,pc=0x5555555551ec,id=<not computed>,func=<unknown>} // cached
          [frame] get_prev_frame_always_1: exit
        [frame] get_prev_frame: exit
        [frame] value_fetch_lazy_register: (frame=0, regnum=7(rsp), ...) -> register=7 bytes=[40ddffffff7f0000]
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_eq: l={stack=<sentinel>,!code,special=0x0000000000000000}, r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_unwind_register_value: enter
          [frame] frame_unwind_register_value: frame=-1, regnum=16(rip)
          [frame] frame_unwind_register_value:   -> register=16 bytes=[ec51555555550000]
        [frame] frame_unwind_register_value: exit
        [frame] frame_id_p: l={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] frame_id_eq: l={stack=<sentinel>,!code,special=0x0000000000000000}, r={stack=<sentinel>,!code,special=0x0000000000000000} -> 1
        [frame] get_prev_frame: enter
          [frame] get_prev_frame_always_1: enter
            [frame] get_prev_frame_always_1: this_frame=-1
            [frame] get_prev_frame_always_1:   -> {level=0,type=NORMAL_FRAME,unwind=0x5588ee3d1888,pc=0x5555555551ec,id=<not computed>,func=<unknown>} // cached
          [frame] get_prev_frame_always_1: exit
        [frame] get_prev_frame: exit
        [frame] value_fetch_lazy_register: (frame=0, regnum=16(rip), ...) -> register=16 bytes=[ec51555555550000]
        [py-unwind] pyuw_sniffer: frame claimed by unwinder test unwinder
      [py-unwind] pyuw_sniffer: exit
      [frame] frame_unwind_try_unwinder: yes
    [frame] frame_unwind_find_by_frame: exit

gdb/ChangeLog:

* frame.h (FRAME_SCOPED_DEBUG_ENTER_EXIT): New.
* frame.c (compute_frame_id, get_prev_frame_always_1,
get_prev_frame): Use FRAME_SCOPED_DEBUG_ENTER_EXIT.
* frame-unwind.c (frame_unwind_find_by_frame): Likewise.
(frame_unwind_register_value): Likewise.

Change-Id: I45b69b4ed962e70572bc55b8adfb211483c1eeed

4 years agogdb: add names to unwinders, add debug messages when looking for unwinder
Simon Marchi [Tue, 29 Jun 2021 16:05:03 +0000 (12:05 -0400)] 
gdb: add names to unwinders, add debug messages when looking for unwinder

I wrote this while debugging a problem where the expected unwinder for a
frame wasn't used.  It adds messages to show which unwinders are
considered for a frame, why they are not selected (if an exception is
thrown), and finally which unwinder is selected in the end.

To be able to show a meaningful, human-readable name for the unwinders,
add a "name" field to struct frame_unwind, and update all instances to
include a name.

Here's an example of the output:

    [frame] frame_unwind_find_by_frame: this_frame=0
    [frame] frame_unwind_try_unwinder: trying unwinder "dummy"
    [frame] frame_unwind_try_unwinder: no
    [frame] frame_unwind_try_unwinder: trying unwinder "dwarf2 tailcall"
    [frame] frame_unwind_try_unwinder: no
    [frame] frame_unwind_try_unwinder: trying unwinder "inline"
    [frame] frame_unwind_try_unwinder: no
    [frame] frame_unwind_try_unwinder: trying unwinder "jit"
    [frame] frame_unwind_try_unwinder: no
    [frame] frame_unwind_try_unwinder: trying unwinder "python"
    [frame] frame_unwind_try_unwinder: no
    [frame] frame_unwind_try_unwinder: trying unwinder "amd64 epilogue"
    [frame] frame_unwind_try_unwinder: no
    [frame] frame_unwind_try_unwinder: trying unwinder "i386 epilogue"
    [frame] frame_unwind_try_unwinder: no
    [frame] frame_unwind_try_unwinder: trying unwinder "dwarf2"
    [frame] frame_unwind_try_unwinder: yes

gdb/ChangeLog:

* frame-unwind.h (struct frame_unwind) <name>: New.  Update
instances everywhere to include this field.
* frame-unwind.c (frame_unwind_try_unwinder,
frame_unwind_find_by_frame): Add debug messages.

Change-Id: I813f17777422425f0d08b22499817b23922e8ddb

4 years agogdb: introduce frame_debug_printf
Simon Marchi [Tue, 29 Jun 2021 16:03:50 +0000 (12:03 -0400)] 
gdb: introduce frame_debug_printf

Introduce frame_debug_printf, to convert the "frame" debug messages to
the new system.  Replace fprint_frame with a frame_info::to_string
method that returns a string, like what was done with
frame_id::to_string.  This makes it easier to use with
frame_debug_printf.

gdb/ChangeLog:

* frame.h (frame_debug_printf): New.
* frame.c: Use frame_debug_printf throughout when printing frame
debug messages.
* amd64-windows-tdep.c: Likewise.
* value.c: Likewise.

gdb/testsuite/ChangeLog:

* gdb.dwarf2/dw2-reg-undefined.exp: Update regexp.

Change-Id: I3c230b0814ea81c23af3e1aca1aac8d4ba91d726

4 years agogdb: make frame_debug a boolean
Simon Marchi [Tue, 29 Jun 2021 15:57:14 +0000 (11:57 -0400)] 
gdb: make frame_debug a boolean

gdb/ChangeLog:

* frame.h (frame_debug): Change type to bool.
* frame.c (frame_debug): Change type to bool.
(_initialize_frame): Adjust.

Change-Id: I27b5359a25ad53ac42618b5708a025c348a1eeda

4 years agoAdd the netbsdpe configuration to the list of obsolete targets.
Nick Clifton [Tue, 29 Jun 2021 15:46:05 +0000 (16:46 +0100)] 
Add the netbsdpe configuration to the list of obsolete targets.

* config.bfd (obsolete configurations): Add netbsdpe.

4 years agogdb: remove duplicate declaration of 'find_thread_ptid'
Tankut Baris Aktemur [Tue, 29 Jun 2021 06:26:06 +0000 (08:26 +0200)] 
gdb: remove duplicate declaration of 'find_thread_ptid'

There are two declarations of 'find_thread_ptid' in gdbthread.h
with the same signature:

  /* Find (non-exited) thread PTID of inferior INF.  */
  extern thread_info *find_thread_ptid (inferior *inf, ptid_t ptid);

and

  /* Search function to lookup a (non-exited) thread by 'ptid'.  Only
     searches in threads of INF.  */
  extern struct thread_info *find_thread_ptid (inferior *inf, ptid_t ptid);

Retain the former, remove the latter.  Tested by rebuilding.

gdb/ChangeLog:
2021-06-29  Tankut Baris Aktemur  <tankut.baris.aktemur@intel.com>

* gdbthread.h (find_thread_ptid): Remove the duplicate declaration.