binutils-gdb.git
3 years agogdb/tui: remove special handling of locator/status window
Andrew Burgess [Mon, 25 Jan 2021 18:43:19 +0000 (18:43 +0000)]
gdb/tui: remove special handling of locator/status window

The locator window, or status window as it is sometimes called is
handled differently to all the other windows.

The reason for this is that the class representing this
window (tui_locator_window) does two jobs, first this class represents
a window just like any other that has space on the screen and fills
the space with content.  The second job is that this class serves as a
storage area to hold information about the current location that the
TUI windows represent, so the class has members like 'addr' and
'line_no', for example which are used within this class, and others
when they want to know which line/address the TUI windows should be
showing to the user.

Because of this dual purpose we must always have an instance of the
tui_locator_window so that there is somewhere to store this location
information.

The result of this is that the locator window must never be deleted
like other windows, which results in some special case code.

In this patch I propose splitting the two roles of the
tui_locator_window class.  The tui_locator_window class will retain
just its window drawing parts, and will be treated just like any other
window.  This should allow all special case code for this window to be
deleted.

The other role, that of tracking the current tui location will be
moved into a new class (tui_location_tracker), of which there will be
a single global instance.  All of the places where we previously use
the locator window to get location information will now be updated to
get this from the tui_location_tracker.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* Makefile.in (SUBDIR_TUI_SRCS): Add tui/tui-location.c.
(HFILES_NO_SRCDIR): Add tui/tui-location.h.
* tui/tui-data.h (TUI_STATUS_WIN): Define.
(tui_locator_win_info_ptr): Delete declaration.
* tui/tui-disasm.c: Add 'tui/tui-location.h' include.
(tui_disasm_window::set_contents): Fetch state from tui_location
global.
(tui_get_begin_asm_address): Likewise.
* tui/tui-layout.c (tui_apply_current_layout): Remove special case
for locator window.
(get_locator_window): Delete.
(initialize_known_windows): Treat locator window just like all the
rest.
* tui/tui-source.c: Add 'tui/tui-location.h' include.
(tui_source_window::set_contents): Fetch state from tui_location
global.
(tui_source_window::showing_source_p): Likewise.
* tui/tui-stack.c: Add 'tui/tui-location.h' include.
(_locator): Delete.
(tui_locator_win_info_ptr): Delete.
(tui_locator_window::make_status_line): Fetch state from
tui_location global.
(tui_locator_window::rerender): Remove check of 'handle',
reindent function body.
(tui_locator_window::set_locator_fullname): Delete.
(tui_locator_window::set_locator_info): Delete.
(tui_update_locator_fullname): Delete.
(tui_show_frame_info): Likewise.
(tui_show_locator_content): Access window through TUI_STATUS_WIN.
* tui/tui-stack.h (tui_locator_window::set_locator_info): Moved to
tui/tui-location.h and renamed to
tui_location_tracker::set_location.
(tui_locator_window::set_locator_fullname): Moved to
tui/tui-location.h and renamed to
tui_location_tracker::set_fullname.
(tui_locator_window::full_name): Delete.
(tui_locator_window::proc_name): Delete.
(tui_locator_window::line_no): Delete.
(tui_locator_window::addr): Delete.
(tui_locator_window::gdbarch): Delete.
(tui_update_locator_fullname): Delete declaration.
* tui/tui-wingeneral.c (tui_refresh_all): Removed special handling
for locator window.
* tui/tui-winsource.c: Add 'tui/tui-location.h' include.
(tui_display_main): Call function on tui_location directly.
* tui/tui.h (enum tui_win_type): Add STATUS_WIN.
* tui/tui-location.c: New file.
* tui/tui-location.h: New file.

3 years ago[gdb/testsuite] Fix gdb.arch/i386-gnu-cfi.exp
Tom de Vries [Thu, 28 Jan 2021 16:39:32 +0000 (17:39 +0100)]
[gdb/testsuite] Fix gdb.arch/i386-gnu-cfi.exp

When running test-case gdb.arch/i386-gnu-cfi.exp with target board unix/-m32, I get:
...
(gdb) up 3^M
79      abort.c: No such file or directory.^M
(gdb) FAIL: gdb.arch/i386-gnu-cfi.exp: shift up to the modified frame
...

The preceding backtrace looks like this:
...
(gdb) bt^M
 #0  0xf7fcf549 in __kernel_vsyscall ()^M
 #1  0xf7ce8896 in __libc_signal_restore_set (set=0xffffc3bc) at \
     ../sysdeps/unix/sysv/linux/internal-signals.h:104^M
 #2  __GI_raise (sig=6) at ../sysdeps/unix/sysv/linux/raise.c:47^M
 #3  0xf7cd0314 in __GI_abort () at abort.c:79^M
 #4  0x0804919f in gate (gate=0x8049040 <abort@plt>, data=0x0) at gate.c:3^M
 #5  0x08049176 in main () at i386-gnu-cfi.c:27^M
...
with function gate at position #4, while on another system where the test passes,
I see instead function gate at position #3.

Fix this by capturing the position of function gate in the backtrace, and
using that in the rest of the test instead of hardcoded constant 3.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

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

* gdb.arch/i386-gnu-cfi.exp: Capture the position of function gate
in the backtrace, and use that in the rest of the test instead of
hardcoded constant 3.  Use "frame" instead of "up" for robustness.

3 years ago[gdb/testsuite] Fix g0 search in gdb.arch/i386-sse-stack-align.exp
Tom de Vries [Thu, 28 Jan 2021 16:39:32 +0000 (17:39 +0100)]
[gdb/testsuite] Fix g0 search in gdb.arch/i386-sse-stack-align.exp

When running test-case gdb.arch/i386-sse-stack-align.exp on target board
unix/-m32, I run into:
...
(gdb) print (int) g0 ()^M
Invalid data type for function to be called.^M
(gdb) FAIL: gdb.arch/i386-sse-stack-align.exp: print (int) g0 ()
...

Gdb is supposed to use minimal symbol g0:
...
$ nm i386-sse-stack-align | grep g0
08049194 t g0
...
but instead it finds a g0 symbol in the debug info of libm, specifically in
./sysdeps/ieee754/ldbl-96/e_lgammal_r.c.

Fix this by renaming g[0-4] to test_g[0-4].

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

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

* gdb.arch/i386-sse-stack-align.S: Rename g[0-4] to test_g[0-4].
* gdb.arch/i386-sse-stack-align.c: Same.
* gdb.arch/i386-sse-stack-align.exp: Same.

3 years agogdb: rename get_type_arch to type::arch
Simon Marchi [Thu, 28 Jan 2021 15:12:10 +0000 (10:12 -0500)]
gdb: rename get_type_arch to type::arch

... and update all users.

gdb/ChangeLog:

* gdbtypes.h (get_type_arch): Rename to...
(struct type) <arch>: ... this, update all users.

Change-Id: I0e3ef938a0afe798ac0da74a9976bbd1d082fc6f

3 years agogdb: rename type::{arch,objfile} -> type::{arch_owner,objfile_owner}
Simon Marchi [Thu, 28 Jan 2021 15:09:02 +0000 (10:09 -0500)]
gdb: rename type::{arch,objfile} -> type::{arch_owner,objfile_owner}

I think this makes the names of the methods clearer, especially for the
arch.  The type::arch method (which gets the arch owner, or NULL if the
type is not arch owned) is easily confused with the get_type_arch method
(which returns an arch no matter what).  The name "arch_owner" will make
it intuitive that the method returns NULL if the type is not arch-owned.

Also, this frees the type::arch name, so we will be able to morph the
get_type_arch function into the type::arch method.

gdb/ChangeLog:

* gdbtypes.h (struct type) <arch>: Rename to...
<arch_owner>: ... this, update all users.
<objfile>: Rename to...
<objfile_owner>: ... this, update all users.

Change-Id: Ie7c28684c7b565adec05a7619c418c69429bd8c0

3 years agoImprove windres's handling of pathnames containing special characters on Windows...
Eli Zaretskii [Thu, 28 Jan 2021 14:57:33 +0000 (14:57 +0000)]
Improve windres's handling of pathnames containing special characters on Windows platforms.

 PR 4356
 * windres.c (quot): Use double quotes to protect strings on
 Windows platforms.

3 years agold: Add a test for PR ld/27259
H.J. Lu [Thu, 28 Jan 2021 13:36:51 +0000 (05:36 -0800)]
ld: Add a test for PR ld/27259

PR ld/27259
* testsuite/ld-elf/pr27259.d: New file.
* testsuite/ld-elf/pr27259.s: Likewise.

3 years agoFix binutils tools so that they can cope with the special /dev/null file when run...
Eli Zaretskii [Thu, 28 Jan 2021 13:32:05 +0000 (13:32 +0000)]
Fix binutils tools so that they can cope with the special /dev/null file when run on Windows systems.

 PR 27252
 * bucomm.c (get_file_size): Add code to handle /dev/null on
 Windows systems.
 * elfedit.c (check_file): Likewise.

3 years agogold: Skip address size and segment selector for DWARF5
H.J. Lu [Thu, 28 Jan 2021 12:21:15 +0000 (04:21 -0800)]
gold: Skip address size and segment selector for DWARF5

The .debug_line secton in DWARF5 has a byte for address size and a byte
for segment selector after DWARF version.  Skip them for DWARF5.

PR gold/27246
* dwarf_reader.cc (Sized_dwarf_line_info::read_header_prolog):
Skip address size and segment selector for DWARF5.

3 years agogdb/testsuite: unset XDG_CONFIG_HOME
Andrew Burgess [Wed, 27 Jan 2021 10:31:47 +0000 (10:31 +0000)]
gdb/testsuite: unset XDG_CONFIG_HOME

Since this commit:

  commit 64aaad6349d2b2c45063a5383f877ce9a3a0c354
  Date:   Fri Sep 25 14:50:56 2020 +0100

      gdb: use get_standard_config_dir when looking for .gdbinit

GDB has been checking for ${XDG_CONFIG_HOME}/gdb/gdbinit on startup.

Most tests pass -nx to GDB to block loading of gdbinit files, but
there are a few tests (e.g. gdb.base/gdbinit-history.exp) that don't
use -nx and instead setup a fake HOME directory containing a gdbinit
file.

However, since the above commit, if XDG_CONFIG_HOME is set then once
-nx is no longer being passed GDB will load any gdbinit file it finds
in that directory, which could cause the test to fail.

As a concrete example:

  $ mkdir -p fake_xdg_config_home/gdb/
  $ cat <<EOF >fake_xdg_config_home/gdb/gdbinit
  echo goodbye\n
  quit
  EOF
  $ export XDG_CONFIG_HOME=$PWD/fake_xdg_config_home
  $ make check-gdb TESTS="gdb.base/gdbinit-history.exp"

Should result in the test failing.

The solution I propose is to unset XDG_CONFIG_HOME in
default_gdb_init, we already unset a bunch of environment variables in
this proc.

gdb/testsuite/ChangeLog:

* lib/gdb.exp (default_gdb_init): Unset XDG_CONFIG_HOME.

3 years agogdb: update comment for execute_command_to_string
Andrew Burgess [Thu, 28 Jan 2021 09:58:43 +0000 (09:58 +0000)]
gdb: update comment for execute_command_to_string

The function execute_command_to_string had two header comments, one in
gdbcmd.h and one in top.c.

This commit merges the two comments into one and places this comment
in gdbcmd.h.  The comment in top.c is updated to just reference
gdbcmd.h.

gdb/ChangeLog:

* gdbcmd.h (execute_command_to_string): Update comment.
* top.c (execute_command_to_string): Update header comment.

3 years ago[gdb/breakpoints] Fix longjmp master breakpoint with separate debug info
Tom de Vries [Thu, 28 Jan 2021 09:59:42 +0000 (10:59 +0100)]
[gdb/breakpoints] Fix longjmp master breakpoint with separate debug info

When running test-case gdb.base/longjmp.exp with target board unix/-m32, we
run into:
...
(gdb) next^M
Warning:^M
Cannot insert breakpoint 0.^M
Cannot access memory at address 0x7dbf7353^M
^M
__libc_siglongjmp (env=0x804a040 <env>, val=1) at longjmp.c:28^M
28        longjmps++;^M
(gdb) FAIL: gdb.base/longjmp.exp: next over longjmp(1)
...

The failure to access memory happens in i386_get_longjmp_target and is due to
glibc having pointer encryption (aka "pointer mangling" or "pointer guard") of
the long jump buffer.  This is a known problem.

In create_longjmp_master_breakpoint (which attempts to install a master
longjmp breakpoint) a preference scheme is present, which installs a
probe breakpoint if a libc:longjmp probe is present, and otherwise falls back
to setting breakpoints at the names in the longjmp_names array.

But in fact, both the probe breakpoint and the longjmp_names breakpoints are
set.  The latter ones are set when processing libc.so.debug, and the former
one when processing libc.so.  In other words, this is the longjmp variant of
PR26881, which describes the same problem for master exception breakpoints.

This problem only triggers when the glibc debug info package is installed,
which is not due to the debug info itself in libc.so.debug, but due to the
minimal symbols (because create_longjmp_master_breakpoint uses minimal symbols
to translate the longjmp_names to addresses).

The problem doesn't trigger for -m64, because there tdep->jb_pc_offset is not
set.

Fix this similar to commit 1940319c0ef (the fix for PR26881): only install
longjmp_names breakpoints in libc.so/libc.so.debug if installing the
libc:longjmp probe in libc.so failed.

Tested on x86_64-linux.

gdb/ChangeLog:

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

PR breakpoints/27205
* breakpoint.c (create_longjmp_master_breakpoint_probe)
(create_longjmp_master_breakpoint_names): New function, factored out
of ...
(create_longjmp_master_breakpoint): ... here.  Only try to install
longjmp_names breakpoints in libc.so/libc.so.debug if installing probe
breakpoint in libc.so failed.

3 years agoPR27259, SHF_LINK_ORDER self-link
Alan Modra [Thu, 28 Jan 2021 00:00:36 +0000 (10:30 +1030)]
PR27259, SHF_LINK_ORDER self-link

This stops ld from endless looping on SHF_LINK_ORDER sh_link loops.

bfd/
PR 27259
* elflink.c (_bfd_elf_gc_mark_extra_sections): Use linker_mark to
prevent endless looping of linked-to sections.
ld/
PR 27259
* ldelf.c (ldelf_before_place_orphans): Use linker_mark to
prevent endless looping of linked-to sections.

3 years ago[gdb/testsuite] Fix gdb.ada/out_of_line_in_inlined.exp with -m32 and gcc-10
Tom de Vries [Thu, 28 Jan 2021 07:14:58 +0000 (08:14 +0100)]
[gdb/testsuite] Fix gdb.ada/out_of_line_in_inlined.exp with -m32 and gcc-10

When running test-case gdb.ada/out_of_line_in_inlined.exp with target board
unix/-m32 on a system with gcc-10 default compiler, we run into:
...
(gdb) break foo_o224_021.child1.child2^M
Breakpoint 1 at 0x804ba59: foo_o224_021.child1.child2. (3 locations)^M
(gdb) FAIL: gdb.ada/out_of_line_in_inlined.exp: scenario=all: \
  break foo_o224_021.child1.child2
...

The test does not expect the "3 locations" part.

Fix this by using gdb_breakpoint instead of gdb_test.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

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

* gdb.ada/out_of_line_in_inlined.exp: Use gdb_breakpoint.

3 years ago[gdb/testsuite] Fix ERROR in gdb.dwarf2/dw2-out-of-range-end-of-seq.exp
Tom de Vries [Thu, 28 Jan 2021 07:14:58 +0000 (08:14 +0100)]
[gdb/testsuite] Fix ERROR in gdb.dwarf2/dw2-out-of-range-end-of-seq.exp

When running test-case gdb.dwarf2/dw2-out-of-range-end-of-seq.exp on a
system with debug packages installed, I run into:
...
(gdb) maint info line-table^M
  ... <lots of output> ...
ERROR: internal buffer is full.
UNRESOLVED: gdb.dwarf2/dw2-out-of-range-end-of-seq.exp: \
  END with address 1 eliminated
...

Fix this by limiting the output of the command using a regexp.

I also noticed that when making the regexp match nothing, meaning
the command has no output, the test didn't FAIL.  Fixed this by adding a
PASS pattern.

I also noticed that the FAIL pattern didn't work with -m32, fixed that as
well.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

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

* gdb.dwarf2/dw2-out-of-range-end-of-seq.exp: Add regexp to
"maint info line-table".  Make PASS pattern more specific.  Make
FAIL pattern work for -m32.

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

3 years agoAvoid use after free with logging and debug redirect.
Lancelot SIX [Fri, 1 Jan 2021 20:11:28 +0000 (20:11 +0000)]
Avoid use after free with logging and debug redirect.

This patch addresses PR gdb/27133. Before it, the following succession
of commands would cause gdb to crash:

set logging redirect on
set logging debugredirect on
set logging on

The problem eventually comes down to a use after free. The function
cli_interp_base::set_logging is called with a unique_ptr argument that
holds a pointer to the redirection file. In the problematic use case,
no-one ever took ownership of that pointer (as far as unique_ptr is
concerned), so the call to its dtor at the end of the function causes
the file object to be deleted. Any later use of the pointer to the
redirection file is therefore an error.

This patch ensures that the unique_ptr is released  when required (so it
does not assume ownership anymore). The internal logic of
cli_interp_base::set_logging takes care of freeing the ui_file when it
is not necessary anymore using the saved_output.file_to_delete field.

gdb/ChangeLog:

PR gdb/27133
* cli/cli-interp.c (cli_interp_base::set_logging): Ensure the
unique_ptr is released when the wrapped pointer is kept for later
use.

gdb/testsuite/ChangeLog:

PR gdb/27133
* gdb.base/ui-redirect.exp: Add test case that ensures that
redirecting both logging and debug does not cause gdb to crash.

3 years agoGDB: aarch64: Add ability to displaced step over a BR/BLR instruction
Matthew Malcomson [Wed, 27 Jan 2021 17:09:46 +0000 (17:09 +0000)]
GDB: aarch64: Add ability to displaced step over a BR/BLR instruction

Enable displaced stepping over a BR/BLR instruction

Displaced stepping over an instruction executes a instruction in a
scratch area and then manually fixes up the PC address to leave
execution where it would have been if the instruction were in its
original location.

The BR instruction does not need modification in order to run correctly
at a different address, but the displaced step fixup method should not
manually adjust the PC since the BR instruction sets that value already.

The BLR instruction should also avoid such a fixup, but must also have
the link register modified to point to just after the original code
location rather than back to the scratch location.

This patch adds the above functionality.
We add this functionality by modifying aarch64_displaced_step_others
rather than by adding a new visitor method to aarch64_insn_visitor.
We choose this since it seems that visitor approach is designed
specifically for PC relative instructions (which must always be modified
when executed in a different location).

It seems that the BR and BLR instructions are more like the RET
instruction which is already handled specially in
aarch64_displaced_step_others.

This also means the gdbserver code to relocate an instruction when
creating a fast tracepoint does not need to be modified, since nothing
special is needed for the BR and BLR instructions there.

Regression tests showed nothing untoward on native aarch64 (though it
took a while for me to get the testcase to account for PIE).

------#####
Original observed (mis)behaviour before was that displaced stepping over
a BR or BLR instruction would not execute the function they called.
Most easily seen by putting a breakpoint with a condition on such an
instruction and a print statement in the functions they called.
When run with the breakpoint enabled the function is not called and
"numargs called" is not printed.
When run with the breakpoint disabled the function is called and the
message is printed.

--- GDB Session
~ [15:57:14] % gdb ../using-blr
Reading symbols from ../using-blr...done.
(gdb) disassemble blr_call_value
Dump of assembler code for function blr_call_value:
...
   0x0000000000400560 <+28>:    blr     x2
...
   0x00000000004005b8 <+116>:   ret
End of assembler dump.
(gdb) break *0x0000000000400560
Breakpoint 1 at 0x400560: file ../using-blr.c, line 22.
(gdb) condition 1 10 == 0
(gdb) run
Starting program: /home/matmal01/using-blr
[Inferior 1 (process 33279) exited with code 012]
(gdb) disable 1
(gdb) run
Starting program: /home/matmal01/using-blr
numargs called
[Inferior 1 (process 33289) exited with code 012]
(gdb)

Test program:
---- using-blr ----
\#include <stdio.h>
typedef int (foo) (int, int);
typedef void (bar) (int, int);
struct sls_testclass {
    foo *x;
    bar *y;
    int left;
    int right;
};

__attribute__ ((noinline))
int blr_call_value (struct sls_testclass x)
{
  int retval = x.x(x.left, x.right);
  if (retval % 10)
    return 100;
  return 9;
}

__attribute__ ((noinline))
int blr_call (struct sls_testclass x)
{
  x.y(x.left, x.right);
  if (x.left % 10)
    return 100;
  return 9;
}

int
numargs (__attribute__ ((unused)) int left, __attribute__ ((unused)) int right)
{
        printf("numargs called\n");
        return 10;
}

void
altfunc (__attribute__ ((unused)) int left, __attribute__ ((unused)) int right)
{
        printf("altfunc called\n");
}

int main(int argc, char **argv)
{
  struct sls_testclass x = { .x = numargs, .y = altfunc, .left = 1, .right = 2 };
  if (argc > 2)
  {
        blr_call (x);
  }
  else
        blr_call_value (x);
  return 10;
}

3 years agoRemove extra space after @pxref in gdb.texinfo
Tom Tromey [Wed, 27 Jan 2021 13:51:21 +0000 (06:51 -0700)]
Remove extra space after @pxref in gdb.texinfo

Internally at AdaCore, documentation is still built with Texinfo 4.13.
This version gave an error when building gdb.texinfo:

../../../binutils-gdb/gdb/doc/gdb.texinfo:27672: @pxref expected braces.
../../../binutils-gdb/gdb/doc/gdb.texinfo:27672: ` {dotdebug_gdb_scripts section,,The @cod...' is too long for expansion; not expanded.

... followed by many more spurious errors that were caused by this
one.

This patch fix the problem by removing the extra space.

I don't know whether it's advisable to try to support this ancient
version of Texinfo (released in 2008 apparently); but in this
particular case the fix is trivial, so I'm checking it in.

gdb/doc/ChangeLog
2021-01-27  Tom Tromey  <tromey@adacore.com>

* gdb.texinfo (Auto-loading extensions): Remove extraneous space.

3 years agold: depend on libctf
Nick Alcock [Tue, 26 Jan 2021 16:05:17 +0000 (16:05 +0000)]
ld: depend on libctf

Since ld may depend on libctf (if present), and libctf may be relinked
by the installation process, libctf must be installed before ld is,
or the relink may fail if it calls on symbols or symbol versions that do
not exist in any libctf already present on the system.  (If none is
present, the copy in the build tree will be automatically used, but
if one *is* present, it may take precedence and break things.)

(This is a maybe- dependency, so it will work even if libctf is
disabled.)

ChangeLog
2021-01-26  Nick Alcock  <nick.alcock@oracle.com>

PR 27250
* Makefile.def: Add install-libctf dependency to install-ld.
* Makefile.in: Regenerated.

3 years agoSimplify the code at the end of objcopy's main() function.
Nick Clifton [Wed, 27 Jan 2021 10:39:22 +0000 (10:39 +0000)]
Simplify the code at the end of objcopy's main() function.

 * objcopy.c (copy_main): Remove conditional control of the calls
 to free, simplifying the code and making it easier to detect
 typos.

3 years agold: Fix a typo in testsuite/ld-x86-64/bnd-plt-1.d
H.J. Lu [Tue, 26 Jan 2021 23:08:45 +0000 (15:08 -0800)]
ld: Fix a typo in testsuite/ld-x86-64/bnd-plt-1.d

Pass -mx86-used-note=no to assembler.

* testsuite/ld-x86-64/bnd-plt-1.d: Fix a typo.

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

3 years agonios2: Don't disable relaxation with --gdwarf-N
H.J. Lu [Tue, 26 Jan 2021 16:18:39 +0000 (08:18 -0800)]
nios2: Don't disable relaxation with --gdwarf-N

GCC 11 passes --gdwarf-5 to assembler to enable DWARF5 debug info.  Don't
disable relaxation when --gdwarf-N is specified.  The assembler generated
debug information will treat the sequence of the relaxed instructions as
a single instruction.

PR gas/27243
* config/tc-nios2.c (md_begin): Don't disable relaxation with
--gdwarf-N.
* testsuite/gas/nios2/relax.d: New file.
* testsuite/gas/nios2/relax.s: Likewise.

3 years agoUse debug_prefixed_printf_cond in windows-nat.c
Tom Tromey [Tue, 26 Jan 2021 15:49:09 +0000 (08:49 -0700)]
Use debug_prefixed_printf_cond in windows-nat.c

This changes windows-nat.c and nat/windows-nat.c to use the new
debug_prefixed_printf_cond facility.  I tried this out on a Windows
build and I think it makes the output look a little nicer.

2021-01-26  Tom Tromey  <tromey@adacore.com>

* windows-nat.c (DEBUG_EXEC, DEBUG_EVENTS, DEBUG_MEM)
(DEBUG_EXCEPT): Use debug_prefixed_printf_cond.
(windows_init_thread_list, windows_nat::handle_load_dll)
(windows_nat::handle_unload_dll, windows_nat_target::resume)
(windows_nat_target::resume)
(windows_nat_target::get_windows_debug_event)
(windows_nat_target::interrupt, windows_xfer_memory)
(windows_nat_target::close): Update.
* nat/windows-nat.c (DEBUG_EVENTS): Use
debug_prefixed_printf_cond.
(matching_pending_stop, fetch_pending_stop)
(continue_last_debug_event): Update.

3 years agobfd: add elfcore_write_file_note
Mihails Strasuns [Wed, 16 Dec 2020 19:36:15 +0000 (20:36 +0100)]
bfd: add elfcore_write_file_note

Adds a trivial wrapper over elfcore_write_note, primarily to be more
consistent with other ELF note helper functions and highlight NT_FILE as
one of notes handled by gdb.

bfd/ChangeLog:
2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>

* bfd-elf.h (elfcore_write_file_note): New function.
* elf.c (elfcore_write_file_note): New function.

gdb/ChangeLog:
2020-12-17  Mihails Strasuns  <mihails.strasuns@intel.com>

* linux-tdep.c (linux_make_mappings_corefile_notes): Start using
elfcore_write_file_note.

3 years agoSegmentation fault i386-gen
Alan Modra [Tue, 26 Jan 2021 01:50:23 +0000 (12:20 +1030)]
Segmentation fault i386-gen

A case of inst->next being uninitialised.

* i386-gen.c (parse_template): Ensure entire template_instance
is initialised.

3 years agoPR27226, ld.bfd contains huge .rodata section
Alan Modra [Tue, 26 Jan 2021 00:18:09 +0000 (10:48 +1030)]
PR27226, ld.bfd contains huge .rodata section

This makes it possible to build ld without any compiled-in scripts,
by setting COMPILE_IN=no in the environment.  pe, beos and pdp11
targets didn't support scripts from the file system, with pdp11
nastily editing the ld/ldscripts file so that the built-in script
didn't match.

PR 27226
* emulparams/alphavms.sh: Don't set COMPILE_IN.
* emulparams/elf64_ia64_vms.sh: Likewise.
* emulparams/elf64mmix.sh: Likewise.
* emulparams/elf_iamcu.sh: Likewise.
* emulparams/elf_k1om.sh: Likewise.
* emulparams/elf_l1om.sh: Likewise.
* emulparams/mmo.sh: Likewise.
* emulparams/pdp11.sh: Set DATA_SEG_ADDR.
* scripttempl/pdp11.sc: Use it.
* emultempl/pdp11.em: Don't edit .xn script for separate_code,
instead use .xe script.  Support scripts from file system.
* emultempl/beos.em: Support scripts from file system.
* emultempl/pe.em: Likewise.
* emultempl/pep.em: Likewise.
* testsuite/ld-bootstrap/bootstrap.exp: Make tmpdir/ldscripts link.

3 years agogas testsuite tidy
Alan Modra [Mon, 25 Jan 2021 12:23:31 +0000 (22:53 +1030)]
gas testsuite tidy

This replaces skip and notarget in a number of gas tests with xfail,
the idea being that running tests might expose segmentation faults or
other serious errors even when we don't expect a test to pass.  Doing
so showed a number of cases where tests now pass, which is another
reason to avoid profligate use of notarget and skip.

* testsuite/gas/all/local-label-overflow.d: Use xfail rather than
notarget all except hppa.  Comment.
* testsuite/gas/all/sleb128-2.d: Use xfail rather than notarget.
* testsuite/gas/all/sleb128-4.d: Likewise.  Don't skip msp430.
* testsuite/gas/all/sleb128-5.d: Use xfail rather than notarget.
* testsuite/gas/all/sleb128-7.d: Likewise.
* testsuite/gas/all/sleb128-9.d: Likewise.
* testsuite/gas/elf/bignums.d: Likewise.
* testsuite/gas/elf/group0c.d: Likewise.
* testsuite/gas/elf/group1a.d: Likewise.
* testsuite/gas/elf/section-symbol-redef.d: Likewise.
* testsuite/gas/elf/section15.d: Likewise.
* testsuite/gas/elf/section4.d: Likewise.
* testsuite/gas/elf/section7.d: Likewise.
* testsuite/gas/macros/irp.d: Likewise.
* testsuite/gas/macros/repeat.d: Likewise.
* testsuite/gas/macros/rept.d: Likewise.
* testsuite/gas/macros/test2.d: Likewise.
* testsuite/gas/macros/vararg.d: Likewise.
* testsuite/gas/all/string.d: Use xfail rather than skip.
* testsuite/gas/elf/missing-build-notes.d: Likewise.
* testsuite/gas/elf/section0.d: Likewise.
* testsuite/gas/elf/section1.d: Likewise.
* testsuite/gas/elf/section10.d: Likewise.
* testsuite/gas/elf/section11.d: Likewise.
* testsuite/gas/elf/section6.d: Likewise.
* testsuite/gas/elf/symtab.d: Use xfail rather than skip, adjust hppa.
* testsuite/gas/elf/symtab.s: Don't start directives in first column.
* testsuite/gas/macros/test3.d: Don't notarget nds32.

3 years agogas byte test
Alan Modra [Mon, 25 Jan 2021 04:48:55 +0000 (15:18 +1030)]
gas byte test

skip *-*-* is a little silly, delete the test.

* testsuite/gas/all/byte.d,
* testsuite/gas/all/byte.l,
* testsuite/gas/all/byte.s: Delete.
* testsuite/gas/all/gas.exp: Don't run byte test.

3 years agopr27228 testcase
Alan Modra [Mon, 25 Jan 2021 04:47:15 +0000 (15:17 +1030)]
pr27228 testcase

This failed on ft32, hppa, and mips-irix targets.  In the case of ft32
the problem was iterating over an array in reverse and not using the
proper condition, so BFD_RELOC_NONE was not recognised.

bfd/
* elf32-ft32.c (ft32_reloc_type_lookup): Don't miss ft32_reloc_map[0].
gas/
PR 27282
* testsuite/gas/all/none.d: Replace skip with xfail, don't xfail ft32.
* testsuite/gas/elf/pr27228.d: xfail hppa and allow OBJECT match.

3 years agogdb: Add default reggroups for ARC
Shahab Vahedi [Tue, 14 Jan 2020 23:14:24 +0000 (00:14 +0100)]
gdb: Add default reggroups for ARC

There is no reggroups set in ARC.  If a "maintenance print reggroups"
command is issued, the default register set is dumped (which is fine).

However, if a new group is added via an XML file, then that will
become the _only_ group.  This behavior causes gdb.xml/tdesc-regs.exp
to fail.

Fixes gdb.xml/tdesc-regs.exp on ARC.

gdb/ChangeLog:

* arc-tdep.c (arc_add_reggroups): New function.
(arc_gdbarch_init): Call arc_add_reggroups.

3 years agoFix the date for the last entry in gdb/ChangeLog
Shahab Vahedi [Tue, 26 Jan 2021 10:00:38 +0000 (11:00 +0100)]
Fix the date for the last entry in gdb/ChangeLog

The previous patch [1] sets the date incorrectly in the ChangeLog.
Sorry for the inconvenience.

[1]
https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=d56834cbfb7c1

3 years agoFix thinko in objcopy's memory freeing code.
Frederic Cambus [Tue, 26 Jan 2021 09:55:34 +0000 (09:55 +0000)]
Fix thinko in objcopy's memory freeing code.

* objcopy.c (copy_main): Fix a double free happening when both
--localize-symbols and --globalize-symbols options are invoked
together.

3 years agoarc: Log "pc" value in "arc_skip_prologue"
Anton Kolesov [Wed, 28 Jun 2017 10:15:46 +0000 (13:15 +0300)]
arc: Log "pc" value in "arc_skip_prologue"

Log the "pc" address upon entering "arc_skip_prologue".

gdb/ChangeLog:

* arc-tdep.c (arc_skip_prologue): Log "pc" address.

3 years ago[gdb/testsuite] Fix gdb.threads/killed-outside.exp with -m32
Tom de Vries [Tue, 26 Jan 2021 09:00:39 +0000 (10:00 +0100)]
[gdb/testsuite] Fix gdb.threads/killed-outside.exp with -m32

When running test-case gdb.threads/killed-outside.exp with target board
unix/-m32, we run into:
...
(gdb) PASS: gdb.threads/killed-outside.exp: get pid of inferior
Executing on target: kill -9 10969    (timeout = 300)
spawn -ignore SIGHUP kill -9 10969^M
continue^M
Continuing.^M
[Thread 0xf7cb4b40 (LWP 10973) exited]^M
^M
Program terminated with signal SIGKILL, Killed.^M
The program no longer exists.^M
(gdb) FAIL: gdb.threads/killed-outside.exp: prompt after first continue
...

Fix this by allowing this output.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

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

* gdb.threads/killed-outside.exp: Allow regular output.

3 years ago[gdb/testsuite] Fix gdb.opt/solib-intra-step.exp with -m32
Tom de Vries [Tue, 26 Jan 2021 09:00:39 +0000 (10:00 +0100)]
[gdb/testsuite] Fix gdb.opt/solib-intra-step.exp with -m32

When running test-case gdb.opt/solib-intra-step.exp with target board
unix/-m32, we run into:
...
(gdb) step^M
__x86.get_pc_thunk.bx () at ../sysdeps/i386/crti.S:66^M
66      ../sysdeps/i386/crti.S: No such file or directory.^M
(gdb) FAIL: gdb.opt/solib-intra-step.exp: first-hit (optimized)
...

The thunk is a helper function for PIC, and given that we have line info for
it, we step into.

Fix this by allowing the step into the thunk, and stepping out of it.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

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

* gdb.opt/solib-intra-step.exp: Handle stepping into thunk.

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

3 years ago[gdb/symtab] Handle DW_AT_ranges with DW_FORM_sec_off in partial DIE
Tom de Vries [Mon, 25 Jan 2021 15:32:31 +0000 (16:32 +0100)]
[gdb/symtab] Handle DW_AT_ranges with DW_FORM_sec_off in partial DIE

While looking into a failure in gdb.go/package.exp with gcc-11, I noticed that
gdb shows some complaints when loading the executable (also with gcc-10, where
the test-case passes):
...
$ gdb -batch -iex "set complaints 100" package.10 -ex start
During symbol reading: Attribute value is not a constant (DW_FORM_sec_offset)
Temporary breakpoint 1 at 0x402ae6: file gdb.go/package1.go, line 8.
During symbol reading: Attribute value is not a constant (DW_FORM_sec_offset)
During symbol reading: Invalid .debug_rnglists data (no base address)
...

Fix this by using as_unsigned () to read DW_AT_ranges in the partial DIE
reader, similar to how that is done in dwarf2_get_pc_bounds.

Tested on x86_64-linux.

gdb/ChangeLog:

2021-01-25  Bernd Edlinger  <bernd.edlinger@hotmail.de>
    Simon Marchi  <simon.marchi@polymtl.ca>
    Tom de Vries  <tdevries@suse.de>

* dwarf2/read.c (partial_die_info::read): Use as_unsigned () for
DW_AT_ranges.

gdb/testsuite/ChangeLog:

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

* gdb.dwarf2/dw2-ranges-psym.exp (gdb_load_no_complaints): New proc.
* lib/gdb.exp: Use gdb_load_no_complaints.

3 years agogdb/docs: add parentheses in Python examples using print
Marco Barisione [Mon, 25 Jan 2021 15:28:53 +0000 (10:28 -0500)]
gdb/docs: add parentheses in Python examples using print

This makes the examples work both in Python 2 and 3.

gdb/doc/ChangeLog:

* python.texi: Add parentheses to print statements/functions.

Change-Id: I8571f2ee005acd96c7bb43f9882d19b00b2aa3db

3 years agoFix fixed-point regression with recent GCC
Tom Tromey [Mon, 25 Jan 2021 15:13:51 +0000 (08:13 -0700)]
Fix fixed-point regression with recent GCC

A recent version of GCC changed how fixed-point types are described.
For example, a denominator in one test case now looks like:

    GNU_denominator      (exprloc)
     [ 0] implicit_value: 16 byte block: 00 00 b8 9d 0d 69 55 a0 01 00 00 00 00 00 00 00

... the difference being that this now uses exprloc and emits a
DW_OP_implicit_value for the 16-byte block.  (DWARF 5 still uses
DW_FORM_data16.)

This change was made here:

    https://gcc.gnu.org/pipermail/gcc-patches/2020-December/560897.html

This patch updates gdb to handle this situation.

Note that, before GCC 11, this test would not give the same answer.
Earlier versions of GCC fell back to GNAT encodings for this case.

gdb/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

* dwarf2/read.c (get_mpz): New function.
(get_dwarf2_rational_constant): Use it.

gdb/testsuite/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

* gdb.ada/fixed_points.exp: Add regression test.
* gdb.ada/fixed_points/fixed_points.adb (FP5_Var): New variable.
* gdb.ada/fixed_points/pck.adb (Delta5, FP5_Type): New.

3 years agoSpecially handle array contexts in Ada expression resolution
Tom Tromey [Mon, 25 Jan 2021 14:38:21 +0000 (07:38 -0700)]
Specially handle array contexts in Ada expression resolution

A user noticed that the Ada expression code in gdb did not
automatically disambiguate an enumerator in an array context.  That
is, an expression like "print array(enumerator)" is not ambiguous,
even if "enumerator" is declared in multiple enumerations, because the
correct one can be found by examining the array's index type.

This patch changes the Ada expression resolution code to handle this
case.

gdb/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

* ada-lang.c (resolve_subexp): Handle array context.

gdb/testsuite/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

* gdb.ada/local-enum.exp: Add enumerator resolution test.

3 years agoAdd test case for symbol menu for local enumerators
Tom Tromey [Mon, 25 Jan 2021 14:38:21 +0000 (07:38 -0700)]
Add test case for symbol menu for local enumerators

Ada will normally present a menu to the user to allow manual
disambiguation of symbols.  The AdaCore internal GDB had a bug that
prevented this from happening.  Although this bug is not in the FSF
GDB, it seemed worthwhile to write a test case to ensure this.

gdb/testsuite/ChangeLog
2021-01-25  Tom Tromey  <tromey@adacore.com>

* gdb.ada/local-enum.exp: New file.
* gdb.ada/local-enum/local.adb: New file.

3 years agoAdd some more DWARF-5 sections
Fangrui Song [Mon, 25 Jan 2021 11:35:57 +0000 (11:35 +0000)]
Add some more DWARF-5 sections

3 years agogdb/doc: move @menu blocks to the end of their enclosing @node
Andrew Burgess [Fri, 22 Jan 2021 18:55:11 +0000 (18:55 +0000)]
gdb/doc: move @menu blocks to the end of their enclosing @node

The @menus should be at the end of a @node.  We mostly get this right,
but there's a few places where we don't.  This commit fixes the 5
places we get this wrong.

I manually checked the info page and read each of the offending nodes
after this change and I believe they all still make sense with the
menu moved.

gdb/doc/ChangeLog:

* gdb.texinfo (Specify Location): Move menu to the end of the
node.
(Auto-loading): Likewise.
(Extending GDB): Likewise.
(TUI): Likewise.
(Operating System Information): Likewise.

3 years agoUpdate linker scripts with the names of new DWARF-5 debug sections.
Nick Clifton [Mon, 25 Jan 2021 11:20:20 +0000 (11:20 +0000)]
Update linker scripts with the names of new DWARF-5 debug sections.

* scripttempl/DWARF.sc: Add .debug_loclists, .debug_rnglists,
.debug_line_str and .debug_str_offsets.  Move .debug_macro and
.debug_addr into DWARF-5 section.

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

3 years agoDWARF-5: Ignore empty range in DWARF-5 line number tables
H.J. Lu [Sun, 24 Jan 2021 15:00:34 +0000 (07:00 -0800)]
DWARF-5: Ignore empty range in DWARF-5 line number tables

The DWARF5 spec does indeed explicitly say: "A bounded range entry whose
beginning and ending address offsets are equal (including zero) indicates
an empty range and may be ignored."

Since arange_add already ignores empty ranges, remove the whole check
which is equivalent to the check plus explicit continue.

PR binutils/27231
* dwarf2.c (read_rnglists): Ignore empty range when parsing line
number tables.

3 years agogas: Add a testcase for PR gas/27228
H.J. Lu [Sun, 24 Jan 2021 12:14:30 +0000 (04:14 -0800)]
gas: Add a testcase for PR gas/27228

PR gas/27228
* testsuite/gas/elf/elf.exp: Run pr27228.
* testsuite/gas/elf/pr27228.d: New file.
* testsuite/gas/elf/pr27228.s: Likewise.

3 years agoMinor updates to the 'how to make a release' document
Nick Clifton [Sun, 24 Jan 2021 11:53:57 +0000 (11:53 +0000)]
Minor updates to the 'how to make a release' document

3 years agoPR27228, .reloc wrong symbol emitted for undefined local symbol
Alan Modra [Sun, 24 Jan 2021 02:09:07 +0000 (12:39 +1030)]
PR27228, .reloc wrong symbol emitted for undefined local symbol

Local symbols are of course supposed to be defined by their object
file, but in other cases a local symbol is promoted to global by gas
if undefined and referenced.  This patch stops gas wrongly replacing a
local undefined symbol with the undefined section symbol, resulting in
a .reloc undefined local symbol being emitted as global.

PR 27228
* write.c (resolve_reloc_expr_symbols): Don't assume local symbol
is defined.

3 years agoAvoid crash when "compile" expression uses cooked register
Tom Tromey [Sat, 23 Jan 2021 19:20:11 +0000 (12:20 -0700)]
Avoid crash when "compile" expression uses cooked register

If the "compile" command is used with an expression that happens to
require a cooked register, then GDB can crash.  This patch does not
fix the bug, but at least turns the crash into an error instead.

2021-01-23  Tom Tromey  <tom@tromey.com>

PR compile/25575
* compile/compile-loc2c.c (note_register): New function.
(pushf_register_address, pushf_register): Use it.

3 years agoUse std::vector for "registers_used" in compile feature
Tom Tromey [Sat, 23 Jan 2021 19:20:11 +0000 (12:20 -0700)]
Use std::vector for "registers_used" in compile feature

This changes the GDB compile code to use std::vector<bool> when
computing which registers are used.  This is a bit more idiomatic, but
the main benefit is that it also adds some checking when the libstd++
debug mode is enabled.

2021-01-23  Tom Tromey  <tom@tromey.com>

* symtab.h (struct symbol_computed_ops) <generate_c_location>:
Change type of "registers_used".
* dwarf2/loc.h (dwarf2_compile_property_to_c): Update.
* dwarf2/loc.c (dwarf2_compile_property_to_c)
(locexpr_generate_c_location, loclist_generate_c_location): Change
type of "registers_used".
* compile/compile.h (compile_dwarf_expr_to_c)
(compile_dwarf_bounds_to_c): Update.
* compile/compile-loc2c.c (pushf_register_address)
(pushf_register, do_compile_dwarf_expr_to_c)
(compile_dwarf_expr_to_c, compile_dwarf_bounds_to_c): Change type
of "registers_used".
* compile/compile-c.h (generate_c_for_variable_locations):
Update.
* compile/compile-c-symbols.c (generate_vla_size)
(generate_c_for_for_one_variable): Change type of
"registers_used".
(generate_c_for_variable_locations): Return std::vector.
* compile/compile-c-support.c (generate_register_struct): Change
type of "registers_used".
(compute): Update.

3 years agoDWARF-5: Fix parsing DWARF-5 line number tables
H.J. Lu [Sun, 24 Jan 2021 02:17:37 +0000 (18:17 -0800)]
DWARF-5: Fix parsing DWARF-5 line number tables

Advance rngs_ptr when parsing DW_RLE_offset_pair, which was missing in

commit c3757b583d2448a5996e83e374fb96ac7938da35
Author: Mark Wielaard <mark@klomp.org>
Date:   Tue Aug 25 15:33:00 2020 +0100

    Fix the linker's handling of DWARF-5 line number tables.

PR binutils/27231
* dwarf2.c (read_rnglists): Advance rngs_ptr after
_bfd_safe_read_leb128 when parsing DW_RLE_offset_pair.

3 years agoRemove call to reset from compile_to_object
Tom Tromey [Sun, 24 Jan 2021 00:48:32 +0000 (17:48 -0700)]
Remove call to reset from compile_to_object

compile_to_object declares 'error_message' and then immediately calls
reset on it.  It seemed better to change it to use initialization
instead; and then I noticed that set_arguments could return a
unique_xmalloc_ptr<char> itself.

2021-01-23  Tom Tromey  <tom@tromey.com>

* compile/compile-internal.h (class compile_instance)
<set_arguments>: Change return type.
* compile/compile.c (compile_to_object): Remove call to reset.
(compile_instance::set_arguments): Change return type.

3 years agoAutomatic date update in version.in
GDB Administrator [Sun, 24 Jan 2021 00:00:05 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb: fix regression in copy_type_recursive
Simon Marchi [Sat, 23 Jan 2021 22:36:55 +0000 (17:36 -0500)]
gdb: fix regression in copy_type_recursive

Commit 5b7d941b90d1 ("gdb: add owner-related methods to struct type")
introduced a regression when running gdb.base/jit-reader-simple.exp and
others.  A NULL pointer dereference happens here:

    #3  0x0000557b7e9e8650 in gdbarch_obstack (arch=0x0) at /home/simark/src/binutils-gdb/gdb/gdbarch.c:484
    #4  0x0000557b7ea5b138 in copy_type_recursive (objfile=0x614000006640, type=0x62100018da80, copied_types=0x62100018e280) at /home/simark/src/binutils-gdb/gdb/gdbtypes.c:5537
    #5  0x0000557b7ea5dcbb in copy_type_recursive (objfile=0x614000006640, type=0x62100018e200, copied_types=0x62100018e280) at /home/simark/src/binutils-gdb/gdb/gdbtypes.c:5598
    #6  0x0000557b802cef51 in preserve_one_value (value=0x6110000b3640, objfile=0x614000006640, copied_types=0x62100018e280) at /home/simark/src/binutils-gdb/gdb/value.c:2518
    #7  0x0000557b802cf787 in preserve_values (objfile=0x614000006640) at /home/simark/src/binutils-gdb/gdb/value.c:2562
    #8  0x0000557b7fbaf19b in reread_symbols () at /home/simark/src/binutils-gdb/gdb/symfile.c:2489
    #9  0x0000557b7ec65d1d in run_command_1 (args=0x0, from_tty=1, run_how=RUN_NORMAL) at /home/simark/src/binutils-gdb/gdb/infcmd.c:439
    #10 0x0000557b7ec67a97 in run_command (args=0x0, from_tty=1) at /home/simark/src/binutils-gdb/gdb/infcmd.c:546

This is inside a TYPE_ALLOC macro.  The fact that gdbarch_obstack is
called means that the type is flagged as being arch-owned, but arch=0x0
means that type::arch returned NULL, probably meaning that the m_owner
field contains NULL.

If we look at the code before the problematic patch, in the
copy_type_recursive function, we see:

    if (! TYPE_OBJFILE_OWNED (type))
      return type;

    ...

    TYPE_OBJFILE_OWNED (new_type) = 0;
    TYPE_OWNER (new_type).gdbarch = get_type_arch (type);

The last two lines were replaced with:

    new_type->set_owner (type->arch ());

get_type_arch and type->arch isn't the same thing: get_type_arch gets
the type's arch owner if it is arch-owned, and gets the objfile's arch
if the type is objfile owned.  So it always returns non-NULL.
type->arch returns the type's arch if the type is arch-owned, else NULL.
So since the original type is objfile owned, it effectively made the new
type arch-owned (that is good) but set the owner to NULL (that is bad).

Fix this by using get_type_arch again there.

I spotted one other similar change in lookup_array_range_type, in the
original patch.  But that one appears to be correct, as it is executed
only if the type is arch-owned.

Add some asserts in type::set_owner to ensure we never set a NULL owner.
That would have helped catch the issue a little bit earlier, so it could
help in the future.

gdb/ChangeLog:

* gdbtypes.c (copy_type_recursive): Use get_type_arch.
* gdbtypes.h (struct type) <set_owner>: Add asserts.

Change-Id: I5d8bc7bfc83b3abc579be0b5aadeae4241179a00

3 years agoImprove gdb_tilde_expand logic.
Lancelot SIX [Mon, 11 Jan 2021 22:40:59 +0000 (22:40 +0000)]
Improve gdb_tilde_expand logic.

Before this patch, gdb_tilde_expand would use glob(3) in order to expand
tilde at the begining of a path. This implementation has limitation when
expanding a tilde leading path to a non existing file since glob fails to
expand.

This patch proposes to use glob only to expand the tilde component of the
path and leaves the rest of the path unchanged.

This patch is a followup to the following discution:
https://sourceware.org/pipermail/gdb-patches/2021-January/174776.html

Before the patch:

gdb_tilde_expand("~") -> "/home/lsix"
gdb_tilde_expand("~/a/c/b") -> error() is called

After the patch:

gdb_tilde_expand("~") -> "/home/lsix"
gdb_tilde_expand("~/a/c/b") -> "/home/lsix/a/c/b"

Tested on x84_64 linux.

gdb/ChangeLog:

* Makefile.in (SELFTESTS_SRCS): Add
unittests/gdb_tilde_expand-selftests.c.
* unittests/gdb_tilde_expand-selftests.c: New file.

gdbsupport/ChangeLog:

* gdb_tilde_expand.cc (gdb_tilde_expand): Improve
implementation.
(gdb_tilde_expand_up): Delegate logic to gdb_tilde_expand.
* gdb_tilde_expand.h (gdb_tilde_expand): Update description.

3 years agoUse readline's variant of Windows patch
Tom Tromey [Sat, 23 Jan 2021 16:04:43 +0000 (09:04 -0700)]
Use readline's variant of Windows patch

A while back, Eli sent a patch to readline that was incorporated by
upstream readline in a slightly different form.  To cut down on
divergences between GDB and upstream readline, I am checking in this
patch to use the readline code.

readline/readline/ChangeLog.gdb
2021-01-23  Tom Tromey  <tom@tromey.com>

* input.c [_WIN32]: Use code from upstream readline.

3 years agoDisable bracketed paste mode in GDB tests
Tom Tromey [Sat, 23 Jan 2021 15:52:45 +0000 (08:52 -0700)]
Disable bracketed paste mode in GDB tests

I have a patch to import GNU readline 8.1 into GDB.  However, when
running the tests, there were a number of failures due to "bracketed
paste mode".  This is a terminal feature that readline 8.1 enables by
default.

The simplest way to work around this was to always make a ".inputrc"
for GDB tests that will tell readline to disable brackted paste mode.

gdb/testsuite/ChangeLog
2021-01-23  Tom Tromey  <tom@tromey.com>

* lib/gdb.exp (default_gdb_init): Set INPUTRC to a cached file.

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

3 years agoFix expected output of gdb.base/line65535.exp with dwarf-5
Bernd Edlinger [Fri, 22 Jan 2021 17:55:04 +0000 (18:55 +0100)]
Fix expected output of gdb.base/line65535.exp with dwarf-5

With gcc & binutils built from latest git revision
this test case fails because the output of the break
command changes and contains the full path name of
the source file, while previously only the file name
was printed.

Fixed that by adjusting the test expectation.

2021-01-22  Bernd Edlinger  <bernd.edlinger@hotmail.de>

* gdb.base/line65535.exp: Fix test expectation.

3 years agogdb/testsuite: eliminate gdb_suppress_tests mechanism
Simon Marchi [Fri, 22 Jan 2021 20:42:35 +0000 (15:42 -0500)]
gdb/testsuite: eliminate gdb_suppress_tests mechanism

There is a lot of support code for the test suppression mechanism.  But
as far as I know, it is not useful.  The gdb_suppress_tests proc is in
fact disabled with this comment that has been there since forever:

    return;  # fnf - disable pending review of results where
             # testsuite ran better without this

I suggest to just remove everything related to test suppression, that
removes some unnecessary complexity from the support code and the tests.

gdb/testsuite/ChangeLog:

* lib/gdb.exp (gdb_test_multiple): Remove things related to test
suppression.
(default_gdb_exit): Likewise.
(default_gdb_spawn): Likewise.
(send_gdb): Likewise.
(gdb_expect): Likewise.
(gdb_expect_list): Likewise.
(default_gdb_init): Likewise.
(gdb_suppress_entire_file): Remove.
(gdb_suppress_tests): Remove.
(gdb_stop_suppressing_tests): Remove.
(gdb_clear_suppressed): Remove.
* lib/mi-support.exp (mi_uncatched_gdb_exit): Remove things
related to test suppression.
(default_mi_gdb_start): Likewise.
(mi_gdb_reinitialize_dir): Likewise.
(mi_gdb_test): Likewise.
(mi_run_cmd_full): Likewise.
(mi_runto_helper): Likewise.
(mi_execute_to): Likewise.
* lib/prompt.exp (default_prompt_gdb_start): Likewise.
* gdb.base/bitfields.exp: Likewise.
* gdb.base/bitfields2.exp: Likewise.
* gdb.base/break.exp: Likewise.
* gdb.base/call-sc.exp: Likewise.
* gdb.base/callfuncs.exp: Likewise.
* gdb.base/dfp-test.exp: Likewise.
* gdb.base/endian.exp: Likewise.
* gdb.base/exprs.exp: Likewise.
* gdb.base/funcargs.exp: Likewise.
* gdb.base/hbreak2.exp: Likewise.
* gdb.base/recurse.exp: Likewise.
* gdb.base/scope.exp: Likewise.
* gdb.base/sepdebug.exp: Likewise.
* gdb.base/structs.exp: Likewise.
* gdb.base/until.exp: Likewise.
* gdb.cp/misc.exp: Likewise.

Change-Id: Ie6d3025091691ba72010faa28b85ebd417b738f7

3 years agogdb: add new version style
Andrew Burgess [Wed, 13 Jan 2021 20:08:51 +0000 (20:08 +0000)]
gdb: add new version style

This commit adds a new 'version' style, which replaces the hard coded
styling currently used for GDB's version string.  GDB's version number
is displayed:

  1. In the output of 'show version', and

  2. When GDB starts up (without the --quiet option).

This new style can only ever affect the first of these two cases as
the second case is printed before GDB has processed any initialization
files, or processed any GDB commands passed on the command line.

However, because the first case exists I think this commit makes
sense, it means the style is no longer hard coded into GDB, and we can
add some tests that the style can be enabled/disabled correctly.

This commit is an alternative to a patch Tom posted here:

  https://sourceware.org/pipermail/gdb-patches/2020-June/169820.html

I've used the style name 'version' instead of 'startup' to reflect
what the style is actually used for.  If other parts of the startup
text end up being highlighted I imagine they would get their own
styles based on what is being highlighted.  I feel this is more inline
with the other style names that are already in use within GDB.

I also decoupled adding this style from the idea of startup options,
and the possibility of auto-saving startup options.  Those ideas can
be explored in later patches.

This commit should probably be considered only a partial solution to
issue PR cli/25956.  The colours of the style are no longer hard
coded, however, it is still impossible to change the styling of the
version string displayed during startup, so in one sense, the styling
of that string is still "hard coded".  A later patch will hopefully
extend GDB to allow it to adjust the version styling before the
initial version string is printed.

gdb/ChangeLog:

PR cli/25956
* cli/cli-style.c: Add 'cli/cli-setshow.h' include.
(version_style): Define.
(cli_style_option::cli_style_option): Add intensity parameter, and
use as appropriate.
(_initialize_cli_style): Register version style set/show commands.
* cli/cli-style.h (cli_style_option): Add intensity parameter.
(version_style): Declare.
* top.c (print_gdb_version): Use version_stype, and styled_string
to print the GDB version string.

gdb/doc/ChangeLog:

PR cli/25956
* gdb.texinfo (Output Styling): Document version style.

gdb/testsuite/ChangeLog:

PR cli/25956
* gdb.base/style.exp (run_style_tests): Add version string test.
(test_startup_version_string): Use version style name.
* lib/gdb-utils.exp (style): Handle version style name.

3 years agogdb: don't print escape characters when a style is disabled
Andrew Burgess [Wed, 13 Jan 2021 20:08:42 +0000 (20:08 +0000)]
gdb: don't print escape characters when a style is disabled

While working on another patch I noticed that if I disable a single
style with, for example:

  set style filename background none
  set style filename foreground none
  set style filename intensity normal

Then in some places escape characters are still injected into the
output stream.  This is a bit of an edge case, and I can't think when
this would actually cause problems, but it still felt like a bit of an
annoyance.

One place where this does impact is in testing, where it becomes
harder to write tight test patterns if it is not obvious when GDB will
decide to inject escape sequences.

It's especially annoying because depending on how something is printed
then GDB might, or might not, add escape characters.  So this would
not add escape characters if the filename style was disabled:

  fprintf_filtered (file, "%ps",
                    styled_string (file_name_style.style (),
                                   "This is a test"));

But this would add escape characters:

  fprintf_styled (file, file_name_style.style (),
                  "%s", "This is a test");

I tracked this down to some calls to set_output_style in utils.c.
Currently some calls to set_output_style (in utils.c) are guarded like
this:

  if (!STYLE.is_default ())
    set_output_style (stream, STYLE);

But some calls are not.  It is the calls that are NOT guarded that
cause the extra escape sequences to be emitted.

My initial proposal to resolve this issue was simply to ensure that
all calls to set_output_style were guarded.  The patch I posted for
this can be found here:

  https://sourceware.org/pipermail/gdb-patches/2021-January/175096.html

The feedback on this proposal was that it might be better to guard
against the escape sequences being emitted at a later lever, right
down at emit_style_escape.

So this is what this version does.  In emit_style_escape we already
track the currently applied style, so if the style we are being asked
to switch to is the same as the currently applied style then no escape
sequence needs to be emitted.

Making this change immediately exposed some issues in
fputs_maybe_filtered related to line wrapping.  The best place to start
to understand what's going on with the styling and wrapping is look at
the test:

  gdb.base/style.exp: all styles enabled: frame when width=20

If you run this test and then examine the output in an editor so the
escape sequences can be seen you'll see the duplicate escape sequences
that are emitted before this patch, the compare to after this patch
you'll see the set of escape sequences should be the minimum required.

In order to test these changes I have rewritten the gdb.base/style.exp
test script.  The core of the script is now run multiple times.  The
first time the test is run things are as they were before, all styles
are on.

After that the test is rerun multiple times.  Each time through a
single style is disabled using the 3 explicit set calls listed above.
I then repeat all the tests, however, I arrange so that the patterns
for the disabled style now require no escape sequences.

gdb/ChangeLog:

* utils.c (emit_style_escape): Only emit an escape sequence if the
requested style is different than the current applied style.
(fputs_maybe_filtered): Adjust the juggling of the wrap_style, and
current applied_style.
(fputs_styled): Remove is_default check.
(fputs_styled_unfiltered): Likewise.
(vfprintf_styled_no_gdbfmt): Likewise.

gdb/testsuite/ChangeLog:

* gdb.base/style.exp (limited_style): New proc.
(clean_restart_and_disable): New proc.
(run_style_tests): New proc.  Most of the old tests from this file
are now in this proc.
(test_startup_version_string): New proc.  Reamining test from the
old file is in this proc.

3 years agogdb/doc: don't rely on @menu item within the docs
Andrew Burgess [Fri, 22 Jan 2021 10:06:17 +0000 (10:06 +0000)]
gdb/doc: don't rely on @menu item within the docs

The node 'Auto-loading extensions' currently relies on a @menu item to
provide a set of cross-references to different parts of the manual.
Additionally the menu is placed part way through the node and the text
prior to the menu seems (to me) to assume that the menu will be
formatted into the document.

This is a bad idea as the menus are not always part of the final
document (e.g. pdf output does not include the menu), when compared to
the info page the pdf version of this node is less helpful as it lacks
proper cross references.  Menus should always be placed at the end of
a node.

In this commit I rewrite a paragraph to add extra cross references
inline within the text.  I then move the menu to the end of the node.

gdb/doc/ChangeLog:

* gdb.texinfo (Auto-loading extensions): Add additional cross
references and move @menu to the end of the node.

3 years agogdb: add remote_debug_printf
Simon Marchi [Fri, 22 Jan 2021 17:43:27 +0000 (12:43 -0500)]
gdb: add remote_debug_printf

This is the next in the new-style debug macro series.

For this one, I decided to omit the function name from the "Sending packet" /
"Packet received" kind of prints, just because it's not very useful in that
context and hinders readability more than anything else.  This is completely
arbitrary.

This is with:

  [remote] putpkt_binary: Sending packet: $qTStatus#49...
  [remote] getpkt_or_notif_sane_1: Packet received: T0;tnotrun:0;tframes:0;tcreated:0;tfree:500000;tsize:500000;circular:0;disconn:0;starttime:0;stoptime:0;username:;notes::

and without:

  [remote] Sending packet: $qTStatus#49...
  [remote] Packet received: T0;tnotrun:0;tframes:0;tcreated:0;tfree:500000;tsize:500000;circular:0;disconn:0;starttime:0;stoptime:0;username:;notes::

A difference is that previously, the query packet and its reply would be
printed on the same line, like this:

  Sending packet: $qTStatus#49...Packet received: T0;tnotrun:0;tframes:0;tcreated:0;tfree:500000;tsize:500000;circular:0;disconn:0;starttime:0;stoptime:0;username:;notes::

Now, they are printed on two lines, since each remote_debug_printf{,_nofunc}
prints its own complete message including an end of line.  It's probably
a matter of taste, but I prefer the two-line version, it's easier to
follow, especially when the query packet is long.

As a result, lib/range-stepping-support.exp needs to be updated, as it
currently expects the vCont packet and the reply to be on the same line.
I think it's sufficient in that context to just expect the vCont packet
and not the reply, since the goal is just to count how many vCont;r GDB
sends.

gdb/ChangeLog:

* remote.h (remote_debug_printf): New.
(remote_debug_printf_nofunc): New.
(REMOTE_SCOPED_DEBUG_ENTER_EXIT): New.
* remote.c: Use above macros throughout file.

gdbsupport/ChangeLog:

* common-debug.h (debug_prefixed_printf_cond_nofunc): New.
* common-debug.c (debug_prefixed_vprintf): Handle a nullptr
func.

gdb/testsuite/ChangeLog:

* lib/range-stepping-support.exp (exec_cmd_expect_vCont_count):
Adjust to "set debug remote" changes.

Change-Id: Ica6dead50d3f82e855c7d763f707cef74bed9fee

3 years agogdb: change remote_debug to bool
Simon Marchi [Fri, 22 Jan 2021 17:40:48 +0000 (12:40 -0500)]
gdb: change remote_debug to bool

As far as I can see, there are no more spots looking for a remote_debug
other than true/false.  If we ever want to revert to an int, we can
always change it back later, but this makes things simpler for now.

gdb/ChangeLog:

* remote.h (remote_debug): Change to bool.
* remote.c (remote_debug): Change to bool.
(_initialize_remote): Adjust.

Change-Id: I21aac5b4cff9dc4f75c8efaf47c23583ecabd2a6

3 years agogdb: move remote_debug to remote.{h,c}
Simon Marchi [Fri, 22 Jan 2021 17:39:08 +0000 (12:39 -0500)]
gdb: move remote_debug to remote.{h,c}

remote_debug is currently declared in target.h and defined in top.c.
Move them to remote.h and remote.c.

Include remote.h in remote-sim.c, as it uses remote_debug.

gdb/ChangeLog:

* target.h (remote_debug): Move to...
* remote.h (remote_debug): ... here.
* top.c (remote_debug): Move to...
* remote.c (remote_debug): ... here.
* remote-sim.c: Include remote.h.

Change-Id: Iae632d12ff8900b23eee6b2529d6a3cd339a8caa

3 years agogdb: move set remote commands to remote.c
Simon Marchi [Fri, 22 Jan 2021 17:35:54 +0000 (12:35 -0500)]
gdb: move set remote commands to remote.c

Commands "set debug remote" and "set remotetimeout" are defined in
cli/cli-cmds.c, I think it would make more sense for them to be in
remote.c.

gdb/ChangeLog:

* cli/cli-cmds.c (show_remote_debug): Remove.
(show_remote_timeout): Remove.
(_initialize_cli_cmds): Don't register commands.
* remote.c (show_remote_debug): Move here.
(show_remote_timeout): Move here.
(_initialize_remote): Register commands.

Change-Id: Ic4d81888aa4f8dde89d1d29397ef19a08951b80b

3 years agogdb: remove TYPE_OBJFILE macro
Simon Marchi [Fri, 22 Jan 2021 17:23:53 +0000 (12:23 -0500)]
gdb: remove TYPE_OBJFILE macro

Change all users to use the type::objfile method instead.

gdb/ChangeLog:

* gdbtypes.h (TYPE_OBJFILE): Remove, change all users to use the
type::objfile method instead.

Change-Id: I6b3f580913fb1fb0cf986b176dba8db68e1fabf9

3 years agogdb: remove TYPE_OBJFILE_OWNED macro
Simon Marchi [Fri, 22 Jan 2021 17:23:40 +0000 (12:23 -0500)]
gdb: remove TYPE_OBJFILE_OWNED macro

Update all users to use the type::is_objfile_owned method.

gdb/ChangeLog:

* gdbtypes.h (TYPE_OBJFILE_OWNED): Remove, update all users to
use the type::is_objfile_owned method.

Change-Id: Icae84d136393ab9f756f50a33ac3cedda13c5ba2

3 years agogdb: add owner-related methods to struct type
Simon Marchi [Fri, 22 Jan 2021 17:21:09 +0000 (12:21 -0500)]
gdb: add owner-related methods to struct type

Add the following methods to struct type:

 * is_objfile_owned
 * set_owner (objfile and gdbarch overloads)
 * objfile and arch getters

Rename the fields in main_type to ensure no other code accesses them
directly.  As usual, we can't make them actually private, but giving
them the `m_` prefix will help making sure they are not accessed when
not supposed to, by convention.

Remove the TYPE_OWNER macro to ensure no code uses the type_owner struct
directly.

gdb/ChangeLog:

* gdbtypes.h (TYPE_OBJFILE_OWNED): Adjust.
(TYPE_OWNER): Remove.
(TYPE_OBJFILE): Adjust.
(struct main_type) <flag_objfile_owned>: Rename to...
<m_flag_objfile_owned>: ... this.
<owner>: Rename to...
<m_owner>: ... this.
(struct type) <is_objfile_owned, set_owner, objfile, arch>: New
methods.
(TYPE_ALLOC): Adjust.
* gdbtypes.c (alloc_type): Adjust.
(alloc_type_arch): Adjust.
(alloc_type_copy): Adjust.
(get_type_arch): Adjust.
(smash_type): Adjust.
(lookup_array_range_type): Adjust.
(recursive_dump_type): Adjust.
(copy_type_recursive): Adjust.
* compile/compile-c-types.c (convert_func): Adjust.
(convert_type_basic): Adjust.
* compile/compile-cplus-types.c (compile_cplus_convert_func):
Adjust.
* language.c
(language_arch_info::type_and_symbol::alloc_type_symbol):
Adjust.

Change-Id: I7f92e869d9f92e2402a3d3007dd0832e05aa6ac8

3 years agogdb/doc: move @menu to the end of the node
Andrew Burgess [Fri, 22 Jan 2021 09:28:07 +0000 (09:28 +0000)]
gdb/doc: move @menu to the end of the node

Commit:

  commit a72d0f3d69896b5fcdc916e0547fe774dcb58614
  Date:   Tue Jan 12 13:02:30 2021 +0000

      gdb/doc: reorder and group sections relating to aliases

Added a @menu block into the wrong place within a @node.  This commit
moves it to the end of the @node, where it should be been placed.

gdb/doc/ChangeLog:

* gdb.texinfo (Aliases): Move @menu to the end of the node.

3 years agogdb/doc: down case contents of @var
Andrew Burgess [Thu, 21 Jan 2021 18:30:00 +0000 (18:30 +0000)]
gdb/doc: down case contents of @var

After a discussion on a recent patch it was pointed out that the
contents of a @var should (generally) be lower case.  I took a look
through the GDB manual and there are a small number of places where
the contents are currently upper case, but one in particular seemed
like an obvious candidate for being down cased, so lets do that.

gdb/doc/ChangeLog:

* gdb.texinfo (PowerPC Embedded): Down case contents of @var.

3 years agoMAINTAINERS: Update my e-mail address
Maciej W. Rozycki [Fri, 22 Jan 2021 00:10:39 +0000 (00:10 +0000)]
MAINTAINERS: Update my e-mail address

binutils/
* MAINTAINERS: Update my e-mail address.

gdb/
* MAINTAINERS: Update my e-mail address.

sim/
* MAINTAINERS: Update my e-mail address.

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

3 years agoHandle additional connection error
Luis Machado [Thu, 21 Jan 2021 19:09:07 +0000 (16:09 -0300)]
Handle additional connection error

On Ubuntu 18.04/20.04 I was running into annoying timeouts for
gdb.server/server-connect.exp. Those were caused by the ipv6 tests, because
they were running into the "Cannot assign requested address" error, originated
from the connect syscall.

Improve this by handling this additional error in the testsuite library.

It still fails for me, but at least it fails pretty quickly and doesn't make the
testsuite run take longer.

gdb/testsuite/ChangeLog:

2021-01-21  Luis Machado  <luis.machado@linaro.org>

* lib/gdbserver-support.exp (gdb_target_cmd_ext): Handle a new error
message.

3 years agoFix build errors for armhf
Luis Machado [Thu, 21 Jan 2021 13:27:12 +0000 (10:27 -0300)]
Fix build errors for armhf

When building for 32-bit ARM, I ran into a couple build failures.

The first one seems to be caused by recent changes to warning switches,
leading to the following error:

--
In file included from gdb/coffread.c:35:0:
gdb/coffread.c: In function  "void enter_linenos(file_ptr, int, int, objfile*)":
gdb/complaints.h:40:40: error: format "%ld" expects argument of type "long int", but argument 2 has type "file_ptr {aka long long int}" [-Werror=format=]
  complaint_internal (FMT, ##__VA_ARGS__);  \
                                        ^
gdb/coffread.c:1413:7: note: in expansion of macro "complaint"
       complaint (_("Line number pointer %ld lower than start of line numbers"),
       ^~~~~~~~~
--

The other one is due to a narrowing conversion in valops.c:

--
gdb/valops.c: In function "value* value_assign(value*, value*)":
gdb/gdbtypes.h:1798:43: error: narrowing conversion of "type->type::length" from "ULONGEST {aka long long unsigned int}" to "size_t {aka unsigned int}" inside { } [-Werror=narrowing]
 #define TYPE_LENGTH(thistype) (thistype)->length
                               ~~~~~~~~~~~~^
gdb/valops.c:1252:9: note: in expansion of macro "TYPE_LENGTH"
         TYPE_LENGTH (type)});
--

Fix both with the following patch. Validated with --enable-targets=all on
Ubuntu 18.04/20.04.

gdb/ChangeLog:

2021-01-21  Luis Machado  <luis.machado@linaro.org>

* coffread.c (enter_linenos): Passing string to complaint.
* valops.c (value_assign): Make array view.

3 years agogdb: convert auto-load to new-style debug macros
Simon Marchi [Thu, 21 Jan 2021 19:12:22 +0000 (14:12 -0500)]
gdb: convert auto-load to new-style debug macros

Function file_is_auto_load_safe was taking a format string and varargs
just to output a debug print.  This is probably because that function is
used in linux-thread-db.c and main.c, but debug_auto_load is static in
auto-load.c.  I simplified that, making debug_auto_load visible outside
of auto-load.c, and making the callers of file_is_auto_load_safe output
the debug print themselves.

This file uses _() for internationalization of the debug messages.  This
is not necessary, as these are mostly messages for GDB developers, and
it's not used in other files anyway.  So I removed them.

The rest is pretty much standard.

gdb/ChangeLog:

* auto-load.h (debug_auto_load): Move here.
(auto_load_debug_printf): New.
* auto-load.c: Use auto_load_debug_printf.
(debug_auto_load): Move to header.
* linux-thread-db.c (try_thread_db_load): Use
auto_load_debug_printf.
* main.c (captured_main_1): Likewise.

Change-Id: I468dc2a1d24b7dbf171f55181a11abbfafe70ba1

3 years agogdb: remove unused f77_array_offset_tbl from f-valprint.c
Simon Marchi [Thu, 21 Jan 2021 19:07:45 +0000 (14:07 -0500)]
gdb: remove unused f77_array_offset_tbl from f-valprint.c

This variable appears to be unused.  Its uses were removed in commit
3e2e34f8623d ("fort_dyn_array: Use value constructor instead of
raw-buffer manipulation.") back in 2016.

gdb/ChangeLog:

* f-valprint.c (f77_array_offset_tbl): Remove.

Change-Id: I39ff8d1b402e54ca2ade936f65e540f500cce86e

3 years agogdb: convert bfd-cache to new-style debug macros
Simon Marchi [Thu, 21 Jan 2021 19:05:54 +0000 (14:05 -0500)]
gdb: convert bfd-cache to new-style debug macros

gdb/ChangeLog:

* gdb_bfd.c (bfd_cache_debug_printf): New, use throughout file.

Change-Id: Ie29948d82adfae7edb3cdcbd61f59a66892fcc99

3 years agogdb: use interruptible_select when connecting to a remote
Simon Marchi [Thu, 21 Jan 2021 19:04:52 +0000 (14:04 -0500)]
gdb: use interruptible_select when connecting to a remote

When GDB is waiting trying to connect to a remote target and it receives
a SIGWINCH (terminal gets resized), the blocking system call gets
interrupted and we abort.

For example, I connect to some port (on which nothing listens):

    (gdb) tar rem :1234
    ... GDB blocks here, resize the terminal ...
    :1234: Interrupted system call.

The backtrace where GDB is blocked while waiting for the connection to
establish is:

    #0  0x00007fe9db805b7b in select () from /usr/lib/libc.so.6
    #1  0x000055f2472e9c42 in gdb_select (n=0, readfds=0x0, writefds=0x0, exceptfds=0x0, timeout=0x7ffe8fafe050) at /home/simark/src/binutils-gdb/gdb/posix-hdep.c:31
    #2  0x000055f24759c212 in wait_for_connect (sock=-1, polls=0x7ffe8fafe300) at /home/simark/src/binutils-gdb/gdb/ser-tcp.c:147
    #3  0x000055f24759d0e8 in net_open (scb=0x62500015b900, name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/ser-tcp.c:356
    #4  0x000055f2475a0395 in serial_open_ops_1 (ops=0x55f24892ca60 <tcp_ops>, open_name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/serial.c:244
    #5  0x000055f2475a01d6 in serial_open (name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/serial.c:231
    #6  0x000055f2474d5274 in remote_serial_open (name=0x6020000601d8 ":1234") at /home/simark/src/binutils-gdb/gdb/remote.c:5019
    #7  0x000055f2474d7025 in remote_target::open_1 (name=0x6020000601d8 ":1234", from_tty=1, extended_p=0) at /home/simark/src/binutils-gdb/gdb/remote.c:5571
    #8  0x000055f2474d47d5 in remote_target::open (name=0x6020000601d8 ":1234", from_tty=1) at /home/simark/src/binutils-gdb/gdb/remote.c:4898
    #9  0x000055f24776379f in open_target (args=0x6020000601d8 ":1234", from_tty=1, command=0x611000042bc0) at /home/simark/src/binutils-gdb/gdb/target.c:242

Fix that by using interruptible_select in wait_for_connect, instead of
gdb_select.  Resizing the terminal now no longer aborts the connection.
It is still possible to interrupt the connection using ctrl-c.

gdb/ChangeLog:

* ser-tcp.c (wait_for_connect): Use interruptible_select instead
of gdb_select.

Change-Id: Ie25577bd1e5699e4847b6b53fdfa10b8c0dc5c89

3 years agogdb/testsuite: improve logging in lib/tuiterm.exp
Simon Marchi [Thu, 21 Jan 2021 19:03:51 +0000 (14:03 -0500)]
gdb/testsuite: improve logging in lib/tuiterm.exp

Here's a bonus patch that applies on top of the other two.

While debugging TUI test cases, it's hard to know what exactly is
happening in the little mind of the terminal emulator.  Add some logging
for all input processing.  Right now I'm interested in seeing what
happens to the cursor position, so made it so all operations log the
"before" and "after" cursor position.  It should help see if any
operation is not behaving as expected, w.r.t. the cursor position.

Here are some examples of the logging found in gdb.log with this patch
applied:

    +++ Inserting string '+|'
    +++   Inserted char '+', cursor: (0, 79) -> (1, 0)
    +++   Inserted char '|', cursor: (1, 0) -> (1, 1)
    +++ Inserted string '+|', cursor: (0, 79) -> (1, 1)
    +++ Cursor Horizontal Absolute (80), cursor: (1, 1) -> (1, 79)

In the last line, note that the argument is 80 and we move to 79, that's
because the position in the argument to the control sequence is 1-based,
while our indexing is 0-based.

gdb/testsuite/ChangeLog:

* lib/tuiterm.exp (_log, _log_cur): New, use throughout.

Change-Id: Ibf570d4b2867729ce65bea8c193343a8a846170d

3 years agogdb/doc: reorder and group sections relating to aliases
Andrew Burgess [Tue, 12 Jan 2021 13:02:30 +0000 (13:02 +0000)]
gdb/doc: reorder and group sections relating to aliases

This started by observing that the section name:

  Automatically prepend default arguments to user-defined aliases

Is very long.  When this is rendered in the PDF manual (at least for
me), this name is so long that in the table of contents the page
number ends up being misaligned.

My first thought was we could drop the 'to user-defined aliases' bit
if this section became a sub-section of the section on aliases.

So then I looked for a section with 'aliases' in its name, and
couldn't find one.

It turns out that aliases are documented in a section called:

  Creating new spellings of existing commands

Which (to me) seems an odd aspect of aliases to emphasise.

So, in this patch I make the following changes:

  - Move the section on aliases earlier in the manual, this is now
    immediately after the section about creating user defined
    commands.  This made more sense to me.

  - Rename the section on aliases from 'Creating new spellings of
    existing commands' to 'Command Aliases'.

  - Update the wording of the first paragraph in the 'Command Aliases'
    section so that it reads better given the new name.

  - Add a cross-reference from the 'Command Aliases' section to the
    'Python' section now that the aliases section comes first.

  - Down case all the text inside @var within this section as this is
    the correct style for the GDB manual.

  - Move the section on default args to become a sub-section of the
    'Command Aliases' section, and rename this sub-section from
    'Automatically prepend default arguments to user-defined aliases'
    to 'Default Arguments'.

  - Add @menu into the 'Command Aliases' section to link to the
    'Default Arguments' subsection.

  - Add a @cindex entry to the default arguments sub-section.

gdb/doc/ChangeLog:

* gdb.texinfo (Commands): Update menu.
(Extending GDB): Likewise.
(Command aliases default args): Moved later into the document,
added a cindex entry.  Renamed the section 'Automatically prepend
default arguments to user-defined aliases' to 'Default Arguments'.
(Aliases): Moved earlier in the document.  Minor rewording of the
first paragraph, down-cased the text inside all uses of @var, and
added a cross reference to the Python code.  Renamed the section
'Creating new spellings of existing commands' to 'Command
Aliases'.

3 years agoAdd Python support for hardware breakpoints
Hannes Domani [Sat, 2 Jan 2021 12:51:27 +0000 (13:51 +0100)]
Add Python support for hardware breakpoints

This allows the creation of hardware breakpoints in Python with
gdb.Breakpoint(type=gdb.BP_HARDWARE_BREAKPOINT)
And they are included in the sequence returned by gdb.breakpoints().

gdb/ChangeLog:

2021-01-21  Hannes Domani  <ssbssa@yahoo.de>

PR python/19151
* python/py-breakpoint.c (bppy_get_location): Handle
bp_hardware_breakpoint.
(bppy_init): Likewise.
(gdbpy_breakpoint_created): Likewise.

gdb/doc/ChangeLog:

2021-01-21  Hannes Domani  <ssbssa@yahoo.de>

PR python/19151
* python.texi (Breakpoints In Python): Document
gdb.BP_HARDWARE_BREAKPOINT.

gdb/testsuite/ChangeLog:

2021-01-21  Hannes Domani  <ssbssa@yahoo.de>

PR python/19151
* gdb.python/py-breakpoint.exp: Add tests for hardware breakpoints.

3 years agogdb: convert arm to new-style debug macros
Simon Marchi [Thu, 21 Jan 2021 14:26:44 +0000 (09:26 -0500)]
gdb: convert arm to new-style debug macros

gdb/ChangeLog:

* arm-tdep.c (arm_debug_printf): Add and use throughout file.

Change-Id: Iec5c2955cb79d8c0288ffded2c8a58b7eb7e3554

3 years agoPR27221, 058430b4a1 warnings while assembling the Linux kernel
Alan Modra [Thu, 21 Jan 2021 06:20:02 +0000 (16:50 +1030)]
PR27221, 058430b4a1 warnings while assembling the Linux kernel

PR 27221
* dwarf2dbg.c (dwarf2_gen_line_info_1): Don't warn about ignored
line number info when gas is generating it.
* testsuite/gas/elf/dwarf2-20.d: Adjust to not expect warnings.
* testsuite/gas/m68hc11/indexed12.d: Likewise.
* testsuite/gas/elf/elf.exp: Don't run warn-2.
* gas/testsuite/gas/elf/warn-2.s: Delete.

3 years agoPR27218, memory access violation in dwarf2dbg.c
Alan Modra [Thu, 21 Jan 2021 06:16:20 +0000 (16:46 +1030)]
PR27218, memory access violation in dwarf2dbg.c

PR 27218
* dwarf2dbg.c (dwarf2_gen_line_info): Correct setting of dwarf_level.
(dwarf2_directive_filename, dwarf2_directive_loc): Likewise, and
error for negative file numbers.

3 years agomips XPASS pr26936
Alan Modra [Wed, 20 Jan 2021 21:06:38 +0000 (07:36 +1030)]
mips XPASS pr26936

git commit 994b25132814 "Ignore section symbols when matching linkonce
with comdat" cured the reason why this test used to fail on mips.

* testsuite/ld-elf/pr26936.d: No longer xfail mips.

3 years agogdb: change debug_bfd_cache to bool
Simon Marchi [Thu, 21 Jan 2021 03:38:20 +0000 (22:38 -0500)]
gdb: change debug_bfd_cache to bool

gdb/ChangeLog:

* gdb_bfd.c (debug_bfd_cache): Change type to bool.
(_initialize_gdb_bfd): Adjust.

Change-Id: I90fdcc2e2d405653d0eba776f316bcec361b2d18

3 years agogdb/testsuite: use multi_line in gdb.base/skip.exp
Simon Marchi [Thu, 10 Sep 2020 15:56:34 +0000 (11:56 -0400)]
gdb/testsuite: use multi_line in gdb.base/skip.exp

This will make it easier to modify, in particular add some indentation.
It is also a bit nicer to read, in my opinion.

gdb/testsuite/ChangeLog;

* gdb.base/skip.exp: Use multi_line where relevant.

Change-Id: Ia11712aac77344e0b8a836f4181d67e1cad3826c

3 years agogdb/dwarf: add assertion in maybe_queue_comp_unit
Simon Marchi [Thu, 21 Jan 2021 02:04:43 +0000 (21:04 -0500)]
gdb/dwarf: add assertion in maybe_queue_comp_unit

The symptom that leads to this is the crash described in PR 26828:

/home/simark/src/binutils-gdb/gdb/dwarf2/read.c:23478:25: runtime error: member access within null pointer of type 'struct dwarf2_cu'

The line of the crash is the following, in follow_die_offset:

  if (target_cu != cu)
    target_cu->ancestor = cu;  <--- HERE

The line that assign nullptr to `target_cu` is the `per_objfile->get_cu`
call after having called maybe_queue_comp_unit:

      /* If necessary, add it to the queue and load its DIEs.  */
      if (maybe_queue_comp_unit (cu, per_cu, per_objfile, cu->language))
load_full_comp_unit (per_cu, per_objfile, per_objfile->get_cu (per_cu),
     false, cu->language);

      target_cu = per_objfile->get_cu (per_cu);  <--- HERE

Some background: there is an invariant, documented in
maybe_queue_comp_unit's doc, that if a CU is queued for expansion
(present in dwarf2_per_bfd::queue), then its DIEs are loaded in memory.
"its DIEs are loaded in memory" is a synonym for saying that a dwarf2_cu
object exists for this CU.  Yet another way to say it is that
`per_objfile->get_cu (per_cu)` returns something not nullptr for that
CU.

The crash documented in PR 26828 triggers some hard-to-reproduce
sequence that ends up violating the invariant:

- dwarf2_fetch_die_type_sect_off gets called for a DIE in CU A
- The DIE in CU A requires some DIE in CU B
- follow_die_offset calls maybe_queue_comp_unit.  maybe_queue_comp_unit
  sees CU B is not queued and its DIEs are not loaded, so it enqueues it
  and returns 1 to its caller - meaning "the DIEs are not loaded, you
  should load them" - prompting follow_die_offset to load the DIEs by
  calling load_full_comp_unit
- Note that CU B is enqueued by maybe_queue_comp_unit even if it has
  already been expanded.  It's a bit useless (and causes trouble, see
  next patch), but that's how it works right now.
- Since we entered the dwarf2/read code through
  dwarf2_fetch_die_type_sect_off, nothing processes the queue, so we
  exit the dwarf2/read code with CU B still lingering in the queue.

- dwarf2_fetch_die_type_sect_off gets called for a DIE in CU A, again
- The DIE in CU A requires some DIE in CU B, again
- This time, maybe_queue_comp_unit sees that CU B is in the queue.
  Because of the invariant that if a CU is in the queue, its DIEs are
  loaded in the memory, it returns 0 to its caller, meaning "you don't
  need to load the DIEs!".
- That happens to be true, so everything is fine for now.

- Time passes, some things call dwarf2_per_objfile::age_comp_units
  enough so that CU B's age becomes past the dwarf_max_cache_age
  threshold.  age_comp_units proceeds to free CU B's DIEs.  Remember
  that CU B is still lingering in the queue (oops, the invariant just
  got violated).

- dwarf2_fetch_die_type_sect_off gets called for a DIE in CU A, again
- The DIE in CU A requires some DIE in CU B, again
- maybe_queue_comp_unit sees that CU B is in the queue, so returns to
  its caller "you don't need to load the DIEs!".  However, we know at
  this point this is false.
- follow_die_offset doesn't load the DIEs and tries to obtain the DIEs for
  CU B:

    target_cu = per_objfile->get_cu (per_cu);

  But since they are not loaded, target_cu is nullptr, and we get the
  crash mentioned above a few lines after that.

This patch adds an assertions in maybe_queue_comp_unit to verify the
invariant, to make sure it doesn't return a falsehood to its caller.

The current patch doesn't fix the issue (the next patch does), but it
makes it so we catch the problem earlier and get this assertion failure
instead of a segmentation fault:

    /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:9100: internal-error:
        int maybe_queue_comp_unit(dwarf2_cu*, dwarf2_per_cu_data*, dwarf2_per_objfile*, language):
        Assertion `per_objfile->get_cu (per_cu) != nullptr' failed.

gdb/ChangeLog:

PR gdb/26828
* dwarf2/read.c (maybe_queue_comp_unit): Add assertion.

Change-Id: I4e51bd7bd58773f9fadf480179cbc4bae61508fe

3 years agogdb/dwarf: add some logging in dwarf2/read.c
Simon Marchi [Thu, 21 Jan 2021 01:57:49 +0000 (20:57 -0500)]
gdb/dwarf: add some logging in dwarf2/read.c

This patch adds some logging that helped me diagnose the problems fixed
later in this series.  I'm thinking that if it helped me now, it could
help somebody else (or myself) in the future, so I might as well add
them for real.

They can happen quite frequently and be noisy, so I used
dwarf_read_debug_printf_v for them, which means they'll only print if
`set debug dwarf-read` is >= 2.

gdb/ChangeLog:

* dwarf2/read.c (follow_die_offset): Add logging.
(dwarf2_per_objfile::age_comp_units): Add logging.

Change-Id: I7483c0b05c37bc9710b9b5d40e272935bc010863

3 years agogdb: make some variables static
Simon Marchi [Thu, 21 Jan 2021 01:55:05 +0000 (20:55 -0500)]
gdb: make some variables static

I'm trying to enable clang's -Wmissing-variable-declarations warning.
This patch fixes all the obvious spots where we can simply add "static"
(at least, found when building on x86-64 Linux).

gdb/ChangeLog:

* aarch64-linux-tdep.c (aarch64_linux_record_tdep): Make static.
* aarch64-tdep.c (tdesc_aarch64_list, aarch64_prologue_unwind,
aarch64_stub_unwind, aarch64_normal_base, ): Make static.
* arm-linux-tdep.c (arm_prologue_unwind): Make static.
* arm-tdep.c (struct frame_unwind): Make static.
* auto-load.c (auto_load_safe_path_vec): Make static.
* csky-tdep.c (csky_stub_unwind): Make static.
* gdbarch.c (gdbarch_data_registry): Make static.
* gnu-v2-abi.c (gnu_v2_abi_ops): Make static.
* i386-netbsd-tdep.c (i386nbsd_mc_reg_offset): Make static.
* i386-tdep.c (i386_frame_setup_skip_insns,
i386_tramp_chain_in_reg_insns, i386_tramp_chain_on_stack_insns):
Make static.
* infrun.c (observer_mode): Make static.
* linux-nat.c (sigchld_action): Make static.
* linux-thread-db.c (thread_db_list): Make static.
* maint-test-options.c (maintenance_test_options_list):
* mep-tdep.c (mep_csr_registers): Make static.
* mi/mi-cmds.c (struct mi_cmd_stats): Remove struct type name.
(stats): Make static.
* nat/linux-osdata.c (struct osdata_type): Make static.
* ppc-netbsd-tdep.c (ppcnbsd_reg_offsets): Make static.
* progspace.c (last_program_space_num): Make static.
* python/py-param.c (struct parm_constant): Remove struct type
name.
(parm_constants): Make static.
* python/py-record-btrace.c (btpy_list_methods): Make static.
* python/py-record.c (recpy_gap_type): Make static.
* record.c (record_goto_cmdlist): Make static.
* regcache.c (regcache_descr_handle): Make static.
* registry.h (DEFINE_REGISTRY): Make definition static.
* symmisc.c (std_in, std_out, std_err): Make static.
* top.c (previous_saved_command_line): Make static.
* tracepoint.c (trace_user, trace_notes, trace_stop_notes): Make
static.
* unittests/command-def-selftests.c (nr_duplicates,
nr_invalid_prefixcmd, lists): Make static.
* unittests/observable-selftests.c (test_notification): Make
static.
* unittests/optional/assignment/1.cc (counter): Make static.
* unittests/optional/assignment/2.cc (counter): Make static.
* unittests/optional/assignment/3.cc (counter): Make static.
* unittests/optional/assignment/4.cc (counter): Make static.
* unittests/optional/assignment/5.cc (counter): Make static.
* unittests/optional/assignment/6.cc (counter): Make static.

gdbserver/ChangeLog:

* ax.cc (bytecode_address_table): Make static.
* debug.cc (debug_file): Make static.
* linux-low.cc (stopping_threads): Make static.
(step_over_bkpt): Make static.
* linux-x86-low.cc (amd64_emit_ops, i386_emit_ops): Make static.
* tracepoint.cc (stop_tracing_bkpt, flush_trace_buffer_bkpt,
alloced_trace_state_variables, trace_buffer_ctrl,
tracing_start_time, tracing_stop_time, tracing_user_name,
tracing_notes, tracing_stop_note): Make static.

Change-Id: Ic1d8034723b7802502bda23770893be2338ab020

3 years agogdb/remote.c: address conflicting enum and method name
Joel Sherrill [Thu, 21 Jan 2021 01:38:57 +0000 (20:38 -0500)]
gdb/remote.c: address conflicting enum and method name

When building with gcc 4.8, we get:

      CXX    remote.o
    cc1plus: warning: command line option '-Wmissing-prototypes' is valid for C/ObjC but not for C++ [enabled by default]
    /home/smarchi/src/binutils-gdb/gdb/remote.c:1157:38: error: 'resume_state' is not a class, namespace, or enumeration
       enum resume_state m_resume_state = resume_state::NOT_RESUMED;
                                          ^

It looks like gcc 4.8 doesn't like that there is an enum class named
resume_state as well as a method.  Since it's an easy fix, rename the method to
get_remote_state to avoid the clash.

gdb/ChangeLog:

PR gdb/27219
* remote.c (struct remote_thread_info) <resume_state>: Rename
to...
<get_resume_state>: ... this.
(remote_target::resume): Adjust.
(remote_target::commit_resume): Adjust.
(remote_target::select_thread_for_ambiguous_stop_reply): Adjust.

Change-Id: Ib86c877a4c75ee671d69c27ed06cb8f57bc087db

3 years agoAutomatic date update in version.in
GDB Administrator [Thu, 21 Jan 2021 00:00:17 +0000 (00:00 +0000)]
Automatic date update in version.in

3 years agogdb/testsuite: rename _cur_x/_cur_y to _cur_col/_cur_row in lib/tuiterm.exp
Simon Marchi [Wed, 20 Jan 2021 21:11:06 +0000 (16:11 -0500)]
gdb/testsuite: rename _cur_x/_cur_y to _cur_col/_cur_row in lib/tuiterm.exp

I am having trouble remembering which of _cur_x/_cur_y is columns and
which is rows, so renaming them helps.  We already have _rows and _cols
to represent the terminal size, so I think that makes sense to name the
"_cur" variables accordingly.

gdb/testsuite/ChangeLog:

* lib/tuiterm.exp: Rename _cur_x/_cur_y to _cur_col/_cur_row.

Change-Id: I6abd3cdfdb295d8abde12dcd5f0ae09f18f07967

3 years agogdb/testsuite: add links for handled control sequences in lib/tuiterm.exp
Simon Marchi [Wed, 20 Jan 2021 21:09:31 +0000 (16:09 -0500)]
gdb/testsuite: add links for handled control sequences in lib/tuiterm.exp

This code can be a bit cryptic for those who don't know terminal control
sequences very well.  This patch adds links for all the handled
sequences, so it's easy to get some doc to follow the code.

I linked to a VT510 manual, because I think it's well formatted and easy
to read.  There's only the repeat sequence (_csi_b) which I haven't
found in it, it looks to be xterm-specific or something.

I also tried to use the sequence names as they are in the manual.

gdb/testsuite/ChangeLog:

* lib/tuiterm.exp: Add links in comments.

Change-Id: I670b947a238e5e9bcab7c476a20eb3c31cf2909d

3 years ago[gdb/testsuite] Fix gdb.python/py-format-string.exp with -m32
Tom de Vries [Wed, 20 Jan 2021 21:02:33 +0000 (22:02 +0100)]
[gdb/testsuite] Fix gdb.python/py-format-string.exp with -m32

When running test-case gdb.python/py-format-string.exp with target board
unix/-m32, we run into:
...
(gdb) python print \
  (gdb.parse_and_eval ('a_base_ref').format_string (deref_refs=True))^M
@0xffffc468: {_vptr.Base = 0x80487e0 <vtable for Deriv+8>, a = 42, \
              static a_static_member = 2019}^M
(gdb) FAIL: gdb.python/py-format-string.exp: format_string: \
  lang_cpp: a_base_ref with option deref_refs: deref_refs=true
...
while with -m64, we have instead:
...
@0x7fffffffd170: {_vptr.Base = 0x400910 <vtable for Deriv+16>, a = 42, \
                  static a_static_member = 2019}^M
(gdb) PASS: gdb.python/py-format-string.exp: format_string: \
  lang_cpp: a_base_ref with option deref_refs: deref_refs=true
...

The vtable contains pointer entries which are 4-byte for -m32 and 8-byte for
-m64, so it's not surprising the offsets (Deriv+8 vs. Deriv+16) differ.

Fix this by allow Deriv+$decimal.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

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

* gdb.python/py-format-string.exp: Allow Deriv+$decimal as vtable
offset.