binutils-gdb.git
4 years agoUpdate libinproctrace.so path in lib/trace-support.exp
Simon Marchi [Fri, 28 Feb 2020 23:58:17 +0000 (18:58 -0500)]
Update libinproctrace.so path in lib/trace-support.exp

Following the move to gdbserver to the top-level, the path to
libinproctrace.so in testsuite/lib/trace-support.exp is no longer valid.
This can be observed by running:

    $ make check TESTS="gdb.trace/ftrace.exp" RUNTESTFLAGS="--target_board=native-gdbserver"
    ...
    ERROR: error copying "/home/smarchi/build/binutils-gdb/gdb/testsuite/../gdbserver/libinproctrace.so": no such file or directory

Adjust the path to libinproctrace.so by adding a "..".  With this patch,
the test mentioned above runs fine.

gdb/testsuite/ChangeLog:

* lib/trace-support.exp (get_in_proc_agent): Adjust path to
libinproctrace.so.

4 years agoFix comment for 'gdb_dlopen'
Sergio Durigan Junior [Tue, 25 Feb 2020 20:50:16 +0000 (15:50 -0500)]
Fix comment for 'gdb_dlopen'

The 'gdb_dlopen' function doesn't return NULL if the shlib load
fails; it actually throws an error.  This patch updates the comment
to reflect this.

gdbsupport/ChangeLog:
2020-02-28  Sergio Durigan Junior  <sergiodj@redhat.com>

* gdb-dlfcn.h (gdb_dlopen): Update comment.

4 years agoFix SVE-related failure in gdb.arch/aarch64-fp.exp
Luis Machado [Wed, 26 Feb 2020 13:37:28 +0000 (10:37 -0300)]
Fix SVE-related failure in gdb.arch/aarch64-fp.exp

The gdb.arch/aarch64-fp.exp test assumes it is dealing with a regular SIMD
target that exposes the V registers as raw registers.  SVE-enabled targets
turn the V registers into pseudo-registers.

That is all fine, but the testcase uses the "info registers" command, which
prints pseudo-register's contents twice. One for the hex format and another
for the natural format of the type.

(gdb) info registers v0
v0             {d = {f = {0x0, 0x0}, u = {0x1716151413121110, 0x1f1e1d1c1b1a1918}, s = {0x1716151413121110, 0x1f1e1d1c1b1a1918}}, s = {f = {0x0, 0x0, 0x0, 0x0}, u = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}, s = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}}, h = {f = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}, s = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}}, b = {u = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, s = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}}, q = {u = {0x1f1e1d1c1b1a19181716151413121110}, s = {0x1f1e1d1c1b1a19181716151413121110}}} {d = {f = {1.846323925681849e-197, 8.5677456166123577e-159}, u = {16635402883234572962242261671028070680}, s = {16635402883234572962242261671028070680}}, s = {f = {1.84362032e-27, 4.84942184e-25, 1.27466897e-22, 3.34818801e-20}, u = {319951120387323156454695192522067228}, s = {319951120387323156454695192522067228}}, h = {f = {0.00061798, 0.00086308, 0.0012398, 0.00173, 0.0024872, 0.0034676, 0.0049896, 0.0069504}, u = {4368, 4882, 5396, 5910, 6424, 6938, 7452, 7966}, s = {4368, 4882, 5396, 5910, 6424, 6938, 7452, 7966}}, b = {u = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}, s = {16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31}}, q = {u = {41362427191743139026751447860679676176}, s = {41362427191743139026751447860679676176}}}

(gdb) p/x $v0
$1 = {d = {f = {0x0, 0x0}, u = {0x1716151413121110, 0x1f1e1d1c1b1a1918}, s = {0x1716151413121110, 0x1f1e1d1c1b1a1918}}, s = {f = {0x0, 0x0, 0x0, 0x0}, u = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}, s = {0x13121110, 0x17161514, 0x1b1a1918, 0x1f1e1d1c}}, h = {f = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, u = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}, s = {0x1110, 0x1312, 0x1514, 0x1716, 0x1918, 0x1b1a, 0x1d1c, 0x1f1e}}, b = {u = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}, s = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f}}, q = {u = {0x1f1e1d1c1b1a19181716151413121110}, s = {0x1f1e1d1c1b1a19181716151413121110}}}

Since the testcase is not expecting that, we run into a couple failures:

FAIL: gdb.arch/aarch64-fp.exp: check register v0 value
FAIL: gdb.arch/aarch64-fp.exp: check register v1 value

The following patch switches to using "p/x" for printing register values, which
prints the values once with the hex format, instead of twice.

gdb/testsuite/ChangeLog

2020-02-28  Luis Machado  <luis.machado@linaro.org>

* gdb.arch/aarch64-fp.exp: Switch from "info registers" command
to "p/x".

4 years agoFix gdb.arch/aarch64-dbreg-contents.exp build failures
Luis Machado [Tue, 25 Feb 2020 13:09:19 +0000 (10:09 -0300)]
Fix gdb.arch/aarch64-dbreg-contents.exp build failures

I ran into the following failures when running tests under QEMU:

--

gdb compile failed, binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c: In function 'set_watchpoint':
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:41:29: error: storage size of 'dreg_state' isn't known
   struct user_hwdebug_state dreg_state;
                             ^~~~~~~~~~
In file included from /usr/include/aarch64-linux-gnu/bits/types/struct_iovec.h:23:0,
                 from /usr/include/aarch64-linux-gnu/sys/uio.h:23,
                 from binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:17:
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:69:18: error: invalid use of undefined type 'struct user_hwdebug_state'
   iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs)
                  ^
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:74:5: warning: implicit declaration of function 'error'; did you mean 'errno'? [-Wimplicit-function-declaration]
     error (1, errno, "PTRACE_SETREGSET: NT_ARM_HW_WATCH");
     ^~~~~
     errno
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c: In function 'main':
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:87:3: warning: implicit declaration of function 'atexit'; did you mean '_Exit'? [-Wimplicit-function-declaration]
   atexit (cleanup);
   ^~~~~~
   _Exit
binutils-gdb/gdb/testsuite/gdb.arch/aarch64-dbreg-contents.c:89:11: warning: implicit declaration of function 'fork' [-Wimplicit-function-declaration]
   child = fork ();

           ^~~~

--

The following patch fixes those by adding the necessary include files.

With that said, the test doesn't pass at present. I'll have to investigate it
a bit more.

gdb/testsuite/ChangeLog:

2020-02-28  Luis Machado  <luis.machado@linaro.org>

* gdb.arch/aarch64-dbreg-contents.c: Include stdlib.h, unistd,
asm/ptrace.h and error.h.

4 years ago[gdb] Don't set initial language using previous language
Tom de Vries [Fri, 28 Feb 2020 15:14:53 +0000 (16:14 +0100)]
[gdb] Don't set initial language using previous language

When language is set to auto, part of loading an executable is to update the
language accordingly.  This is implemented by set_initial_language.

In case of a c++ executable without DW_AT_main_subprogram,
set_initial_language finds "main" in the minimal symbols, and does a lookup of
"main" in the symbol tables to determine the language of the symbol, and uses
that as initial language.

The symbol lookup is done using lookup_symbol which is a wrapper around
lookup_symbol_in_language, using the current language.

So, consider two c++ executables a.out and b.out, which we'll load one after
another.  If we track the resulting lookup_symbol_in_language calls:
...
$ gdb -batch \
    -ex "b lookup_symbol_in_language" \
    -ex r -ex c -ex c \
    --args gdb
...
we find that indeed lookup_symbol_in_language is called once using language_c, and
once using language_c_plus:
...
(gdb) file a.out
Reading symbols from a.out...

Breakpoint 1, lookup_symbol_in_language (name=0x5555568c2050 "main", \
  block=0x0, domain=VAR_DOMAIN, lang=language_c, is_a_field_of_this=0x0) \
  at ../../gdb/symtab.c:1905
1905    {
(gdb) file b.out
Load new symbol table from "b.out"? (y or n) y
Reading symbols from b.out...

Breakpoint 1, lookup_symbol_in_language (name=0x5555568c2030 "main", \
  block=0x0, domain=VAR_DOMAIN, lang=language_cplus, is_a_field_of_this=0x0) \
  at ../../gdb/symtab.c:1905
1905    {
(gdb)
...

It seems like a bad idea to have the previous language play a role
in determining the executable language.

Fix this by using lookup_symbol_in_language in set_initial_language with the
default language c as argument.

Tested on x86_64-linux.

gdb/ChangeLog:

2020-02-28  Tom de Vries  <tdevries@suse.de>

* symfile.c (set_initial_language): Use default language for lookup.

4 years agoPass correct die_reader_specs in cutu_reader::init_tu_and_read_dwo_dies
Simon Marchi [Fri, 28 Feb 2020 15:07:46 +0000 (10:07 -0500)]
Pass correct die_reader_specs in cutu_reader::init_tu_and_read_dwo_dies

Running anything with the fission.exp board fails since commit
c0ab21c22bb ("Replace init_cutu_and_read_dies with a class").
GDB crashes while reading the DWARF info.  cu is NULL in
read_signatured_type:

    Thread 1 "gdb" received signal SIGSEGV, Segmentation fault.
    0x000055555780663e in read_signatured_type
    sig_type=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22782
    22782         gdb_assert (cu->die_hash == NULL);
    (top-gdb) bt
    #0  0x000055555780663e in read_signatured_type (sig_type=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22782
    #1  0x00005555578062dd in load_full_type_unit (per_cu=0x6210000c3600) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:22758
    #2  0x00005555577c5fb7 in queue_and_load_dwo_tu (slot=0x60600007fc00, info=0x6210000c34e0) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:12674
    #3  0x0000555559934232 in htab_traverse_noresize (htab=0x60b000063670, callback=0x5555577c5e61 <queue_and_load_dwo_tu(void**, void*)>, info=0x6210000c34e0)
        at /home/simark/src/binutils-gdb/libiberty/hashtab.c:775
    #4  0x00005555577c6252 in queue_and_load_all_dwo_tus (per_cu=0x6210000c34e0) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:12701
    #5  0x000055555777ebd8 in dw2_do_instantiate_symtab (per_cu=0x6210000c34e0, skip_partial=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:2371
    #6  0x000055555777eea2 in dw2_instantiate_symtab (per_cu=0x6210000c34e0, skip_partial=false) at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:2395
    #7  0x0000555557786ab6 in dw2_lookup_symbol (objfile=0x614000007240, block_index=GLOBAL_BLOCK, name=0x602000025310 "main", domain=VAR_DOMAIN)
        at /home/simark/src/binutils-gdb/gdb/dwarf2/read.c:3539

After creating the reader object, the reader.cu field should not be
NULL.  By checking the commit previous to the faulty one mentioned
above, I noticed that the cu field is normally set by
init_cu_die_reader, called from read_cutu_die_from_dwo, itself called
from cutu_reader::init_tu_and_read_dwo_dies, itself called from
cutu_reader's constructor.

However, cutu_reader::init_tu_and_read_dwo_dies calls
read_cutu_die_from_dwo, passing a pointer to a local `die_reader_specs`
variable.  So it's the `cu` field of that object that gets set.
cutu_reader itself is a `die_reader_specs` (it inherits from it), and
the intention was most likely to pass `this` to read_cutu_die_from_dwo.
This way, the fields of the cutu_reader object, which
read_signatured_type will use, are set.

With this, I am able to use:

  make check RUNTESTFLAGS='--target_board=fission'

and it looks much better.  There are still some failures to be
investigated, but that's the usual state of the testsuite.

gdb/ChangeLog:

* dwarf2/read.c (cutu_reader::init_tu_and_read_dwo_dies): Remove
reader variable, pass `this` to read_cutu_die_from_dwo.

4 years ago[gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp
Tom de Vries [Fri, 28 Feb 2020 15:05:50 +0000 (16:05 +0100)]
[gdb/testsuite] Fix psymtab expansion postponement in c-linkage-name.exp

The test-case gdb.base/c-linkage-name.exp starts with the following test:
...
gdb_test "print symada__cS" \
         " = {a = 100829103}" \
         "print symada__cS before partial symtab expansion"
...

However, printing the state of the partial symtabs using maint info psymtabs
shows that in fact the symtab has already been expanded:
...
  { psymtab c-linkage-name.c ((struct partial_symtab *) 0x1e27b40)^M
    readin yes^M
...

This is due to set_initial_language, which looks up the main symbol, which
expands the psymtab containing main.

Fix this by moving all but main into a separate source file c-linkage-name-2.c.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-02-28  Tom de Vries  <tdevries@suse.de>

* gdb.base/c-linkage-name.c (main): Call do_something_other_cu.
(struct wrapper, do_something, mundane/symada__cS): Move ...
* gdb.base/c-linkage-name-2.c: ... here.  New source file.
* gdb.base/c-linkage-name.exp: Add verification of psymtab expansion.
Update "print symada__cS before partial symtab expansion" regexp.
Update breakpoint location.  Flush symbol cache after expansion.

4 years agoHarden gdb.arch/aarch64-pauth.exp and fix a failure
Luis Machado [Fri, 21 Feb 2020 20:58:48 +0000 (17:58 -0300)]
Harden gdb.arch/aarch64-pauth.exp and fix a failure

When running this testcase against a QEMU with PAC support, i noticed we
were failing to recognize the additional [PAC] that is emitted in the
backtrace, resulting in this failure:

FAIL: gdb.arch/aarch64-pauth.exp: backtrace

I've made the test use multi_line to make the pattern more clear.

Tested against aarch64-linux-gnu with and without PAC support.

gdb/testsuite/ChangeLog:

2020-02-28  Luis Machado  <luis.machado@linaro.org>

* gdb.arch/aarch64-pauth.exp: Recognize optional PAC output.

4 years agoMIPS/fix_loongson3_llsc: fix when target has multi labels
YunQiang Su [Fri, 28 Feb 2020 07:58:13 +0000 (15:58 +0800)]
MIPS/fix_loongson3_llsc: fix when target has multi labels

When there is multi-labels on the same insn, the current code
will take care about the last one. it may cause that no sync
is added at the target.

Here we scan all labels with same value of
   S_GET_VALUE(label_list->label)
by label_list->next.

2020-02-28  YunQiang Su  <syq@debian.org>

    PR gas/25539
    * config/tc-mips.c (fix_loongson3_llsc): Compare label value
    to handle multi-labels.
    (has_label_name): New.

4 years agoalpha-vms: memory leak
Alan Modra [Fri, 28 Feb 2020 02:32:42 +0000 (13:02 +1030)]
alpha-vms: memory leak

* vms-lib.c (_bfd_vms_lib_archive_p): Free memory on error paths.

4 years agoalpha-vms: large memory allocation
Alan Modra [Fri, 28 Feb 2020 02:05:44 +0000 (12:35 +1030)]
alpha-vms: large memory allocation

This patch simplifies reading of image headers.  It's really not worth
trying to avoid re-reading a 12 byte buffer and then read in
VMS_BLOCK_SIZE chunks, better just to throw the buffer away and use
_bfd_malloc_and_read which does checks against file size.

* vms-alpha.c (alpha_vms_object_p): Use _bfd_malloc_and_read.
Remove duplicate undersize check.

4 years agogdb: Check for nullptr when computing srcpath
Aaron Merey [Fri, 28 Feb 2020 00:07:01 +0000 (19:07 -0500)]
gdb: Check for nullptr when computing srcpath

This fixes a regression caused by commit 0d79cdc494d5:

  $ make check TESTS="gdb.dwarf2/dw2-ranges-base.exp"
  [...]
  ERROR: GDB process no longer exists

This error is caused by an abort during the computation of srcpath
when SYMTAB_DIRNAME (s) == NULL.

Computing srcpath only when SYMTAB_DIRNAME (s) is not NULL fixes this
error. Also change the condition for calling debuginfod_source_query
to include whether srcpath could be computed.

gdb/ChangeLog:

2020-02-27  Aaron Merey  <amerey@redhat.com>

        * source.c (open_source_file): Check for nullptr when computing
        srcpath.

4 years agoAutomatic date update in version.in
GDB Administrator [Fri, 28 Feb 2020 00:00:33 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoRemove field_info::nfields member
Tom Tromey [Thu, 27 Feb 2020 21:05:49 +0000 (14:05 -0700)]
Remove field_info::nfields member

I noticed that there's no real reason to have field_info::nfields in
the DWARF reader.  It simply mirrors information that is already
available.  This patch removes it, in favor of a convenience method.

gdb/ChangeLog
2020-02-27  Tom Tromey  <tromey@adacore.com>

* dwarf2/read.c (struct field_info) <nfields>: Now a method, not a
member.
(dwarf2_add_field): Don't update nfields.
(dwarf2_attach_fields_to_type, process_structure_scope): Update.

4 years agommix-mmo set SEC_DATA for .data section
Alan Modra [Thu, 27 Feb 2020 05:56:19 +0000 (16:26 +1030)]
mmix-mmo set SEC_DATA for .data section

With the bfd_decode_symclass change, ld SIZEOF test fails due to
data_end being reported as type '?'.

bfd/
PR 24511
* mmo.c (mmo_scan): Set SEC_DATA for .data.
ld/
PR 24511
* testsuite/ld-mmix/b-fixo2.d: Adjust for .data change.
* testsuite/ld-mmix/sec-2.d: Likewise.
* testsuite/ld-mmix/sec-3.d: Likewise.
* testsuite/ld-mmix/sec-4.d: Likewise.
* testsuite/ld-mmix/spec802.d: Likewise.
* testsuite/ld-mmix/spec803.d: Likewise.
* testsuite/ld-mmix/spec804.d: Likewise.
* testsuite/ld-mmix/spec805.d: Likewise.
* testsuite/ld-mmix/spec806.d: Likewise.
* testsuite/ld-mmix/spec807.d: Likewise.
* testsuite/ld-mmix/spec808.d: Likewise.

4 years ago.idata symbols should be reported with i or I flag by nm
Alan Modra [Thu, 27 Feb 2020 03:53:34 +0000 (14:23 +1030)]
.idata symbols should be reported with i or I flag by nm

PR 24511
* syms.c (stt): Trim off all but 'e', 'i' and 'p' entries.
(coff_section_type): Adjust comment.
(decode_section_type): Likewise.  Call coff_section_type before
decode_section_type.
(bfd_decode_symclass): Use 'c' for common sections other than
the standard one.

4 years agogdb: Use std::abs instead of abs on LONGEST types
Andrew Burgess [Thu, 27 Feb 2020 16:42:17 +0000 (16:42 +0000)]
gdb: Use std::abs instead of abs on LONGEST types

Use std::abs so that we get the C++ overloaded version that matches
the argument type instead of the C abs function which is only for int
arguments.

There should be no user visible change after this commit.

gdb/ChangeLog:

* gdbtypes.c (create_array_type_with_stride): Use std::abs not
abs.

4 years agoFix an illegal memory access by readelf when displaying the contents of a corrupt...
Nick Clifton [Thu, 27 Feb 2020 16:28:25 +0000 (16:28 +0000)]
Fix an illegal memory access by readelf when displaying the contents of a corrupt IA64 binary.

PR 25526
* readelf.c (process_ia64_vms_dynamic_relocs): Check to see if
get_data is unable to load the string table.

4 years ago[gdb/testsuite] Remove unused globals
Tom de Vries [Thu, 27 Feb 2020 13:27:09 +0000 (14:27 +0100)]
[gdb/testsuite] Remove unused globals

Remove unused global variable declarations.

Tested on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-02-27  Tom de Vries  <tdevries@suse.de>

* config/sid.exp: Remove unused globals.
* gdb.base/attach.exp: Same.
* gdb.base/catch-load.exp: Same.
* gdb.base/dbx.exp: Same.
* lib/gdb.exp: Same.
* lib/mi-support.exp: Same.
* lib/prompt.exp: Same.

4 years ago[gdb/testsuite] Fix spawn in tuiterm.exp
Tom de Vries [Thu, 27 Feb 2020 09:16:00 +0000 (10:16 +0100)]
[gdb/testsuite] Fix spawn in tuiterm.exp

When running gdb.stabs/weird.exp by itself it passes, but if we run a gdb.tui
test before it, we get:
...
$ make check RUNTESTFLAGS="gdb.stabs/weird.exp gdb.tui/basic.exp"
Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.tui/basic.exp ...
Running /data/gdb_versions/devel/src/gdb/testsuite/gdb.stabs/weird.exp ...
ERROR: Couldn't make test case. -1 {spawn failed}
...

In more detail, using -v:
...
Executing on build: sed  -f aout.sed weird.def weird.s (timeout = 300)
builtin_spawn [open ...]^M
pid is 19060 19061 -19060 -19061
spawn -open file10 failed, 1 can't read "spawn_out(slave,name)": \
  no such variable, can't read "spawn_out(slave,name)": no such variable
    while executing
"set gdb_spawn_name $spawn_out(slave,name)"
    (procedure "spawn" line 5)
    invoked from within
"spawn -ignore SIGHUP -leaveopen file10"
    invoked from within
"catch "spawn -ignore SIGHUP -leaveopen $id" result2"
ERROR: Couldn't make test case. -1 {spawn failed}
...

When running the gdb.tui test, spawn gets renamed to a local version from
lib/tuiterm.exp.  The local version calls expect's spawn, and then makes the
local spawn_out(slave,name) variable accessible in the global variable
gdb_spawn_name.

However, the weird.exp test-case uses remote_exec build, which ends up using
local_exec, which given that there's input/output redirection uses open:
...
    set result [catch {open "| ${commandline} $inp |& tee $outpf" RDONLY} id]
...
followed by spawn using the -leaveopen option:
...
    set result [catch "spawn -ignore SIGHUP -leaveopen $id" result2]
...
which apparently has the effect that spawn_out(slave,name) is not set.

Fix this in the lib/tuiterm.exp local spawn proc by detecting the case that
spawn_out(slave,name) is not set, and handling it accordingly.

Tested gdb.stabs/weird.exp and gdb.tui/*.exp on x86_64-linux.

gdb/testsuite/ChangeLog:

2020-02-27  Tom de Vries  <tdevries@suse.de>

* lib/tuiterm.exp (spawn): Handle case that spawn_out(slave,name) is
not set.

4 years ago_bfd_xcoff_read_ar_hdr tidy
Alan Modra [Thu, 27 Feb 2020 03:41:35 +0000 (14:11 +1030)]
_bfd_xcoff_read_ar_hdr tidy

* coff-rs6000.c (_bfd_xcoff_read_ar_hdr): Put all data in one
malloc'd block.

4 years agobfd_stat_arch_elt buffer overflow
Alan Modra [Thu, 27 Feb 2020 03:20:21 +0000 (13:50 +1030)]
bfd_stat_arch_elt buffer overflow

If you manage to put an xcoff object file into a non-xcoff archive
(created by first putting a non-xcoff object file into it), and have
xcoff support compiled into libbfd, then objdump -x on the archive
can segfault.  The problem is that _bfd_xcoff_stat_arch_elt expects
abfd->arelt_data->arch_header to be one of the xcoff variants, but
arelt_data is generated depending on the archive format, *not* the
element format.

* bfd.c (bfd_stat_arch_elt): Use vector of containing archive,
if file is an archive element.
* bfd-in2.h: Regenerate.

4 years agoAutomatic date update in version.in
GDB Administrator [Thu, 27 Feb 2020 00:00:26 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoSpecialize partial_symtab for DWARF include files
Tom Tromey [Wed, 26 Feb 2020 22:41:07 +0000 (15:41 -0700)]
Specialize partial_symtab for DWARF include files

Include files are represented by a partial symtab, but don't expand to
anything.  From dwarf2_psymtab::expand_psymtab:

  if (per_cu == NULL)
    {
      /* It's an include file, no symbols to read for it.
         Everything is in the parent symtab.  */
      readin = true;
      return;
    }

This patch introduces a new specialization of partial_symtab to handle
this case.  In addition to being slightly smaller, I believe an
include file is the only situation where a DWARF psymtab can result in
a null compunit_symtab.  This adds an assert to that effect as well.
This change will simplify one of the psymtab sharing patches.

gdb/ChangeLog
2020-02-26  Tom Tromey  <tom@tromey.com>

* dwarf2/read.c (struct dwarf2_include_psymtab): New.
(dwarf2_create_include_psymtab): Use dwarf2_include_psymtab.
(dwarf2_psymtab::expand_psymtab, dwarf2_psymtab::readin_p)
(dwarf2_psymtab::get_compunit_symtab): Remove null checks for
per_cu_data.

4 years agoRemove casts from dwarf2/index-write.c
Tom Tromey [Wed, 26 Feb 2020 22:41:07 +0000 (15:41 -0700)]
Remove casts from dwarf2/index-write.c

dwarf2/index-write.c casts pointers to "dwarf2_psymtab *", but as far
as I can tell, it does not actually use any DWARF-specific fields of
the psymtab.  So, this patch changes this code to use partial_symtab
instead.  This removes nearly every cast, leaving just the unavoidable
one from addrmap iteration.

gdb/ChangeLog
2020-02-26  Tom Tromey  <tom@tromey.com>

* dwarf2/index-write.c (psym_index_map): Change type.
(add_address_entry_worker, write_one_signatured_type)
(recursively_count_psymbols, recursively_write_psymbols)
(class debug_names, psyms_seen_size, write_gdbindex)
(write_debug_names): Use partial_symtab, not dwarf2_psymtab.

4 years agoAdd debuginfod support to GDB
Aaron Merey [Wed, 26 Feb 2020 22:40:49 +0000 (17:40 -0500)]
Add debuginfod support to GDB

debuginfod is a lightweight web service that indexes ELF/DWARF debugging
resources by build-id and serves them over HTTP.

This patch enables GDB to query debuginfod servers for separate debug
files and source code when it is otherwise not able to find them.

GDB can be built with debuginfod using the --with-debuginfod configure
option.

This requires that libdebuginfod be installed and found at configure time.

debuginfod is packaged with elfutils, starting with version 0.178.

For more information see https://sourceware.org/elfutils/.

Tested on x86_64 Fedora 31.

gdb/ChangeLog:
2020-02-26  Aaron Merey  <amerey@redhat.com>

        * Makefile.in: Handle optional debuginfod support.
        * NEWS: Update.
        * README: Add --with-debuginfod summary.
        * config.in: Regenerate.
        * configure: Regenerate.
        * configure.ac: Handle optional debuginfod support.
        * debuginfod-support.c: debuginfod helper functions.
        * debuginfod-support.h: Ditto.
        * doc/gdb.texinfo: Add --with-debuginfod to configure options
        summary.
        * dwarf2/read.c (dwarf2_get_dwz_file): Query debuginfod servers
        when a dwz file cannot be found.
        * elfread.c (elf_symfile_read): Query debuginfod servers when a
        debuginfo file cannot be found.
        * source.c (open_source_file): Query debuginfod servers when a
        source file cannot be found.
        * top.c (print_gdb_configuration): Include
        --{with,without}-debuginfod in the output.

gdb/testsuite/ChangeLog:
2020-02-26  Aaron Merey  <amerey@redhat.com>

        * gdb.debuginfod: New directory for debuginfod tests.
        * gdb.debuginfod/main.c: New test file.
        * gdb.debuginfod/fetch_src_and_symbols.exp: New tests.

4 years agogdb: print thread names in thread apply command output
Jérémie Galarneau [Tue, 18 Feb 2020 00:08:03 +0000 (19:08 -0500)]
gdb: print thread names in thread apply command output

This makes the thread apply command print the thread's name.  The use
of target_pid_to_str is replaced by thread_target_id_str, which
provides the same output as "info threads".

Before:
(gdb) thread apply 2 bt

Thread 2 (Thread 0x7fd245602700 (LWP 3837)):
[...]

After:
(gdb) thread apply 2 bt

Thread 2 (Thread 0x7fd245602700 (LWP 3837) "HT cleanup"):
[...]

The thread's description header is pre-computed before running the
command since the command may change the selected inferior. This is
not permitted by thread_target_id_str as target_thread_name asserts
that `info->inf == current_inferior ()`.

This situation arises in the `gdb.threads/threadapply.exp` test which
kills and removes the inferior as part of a "thread apply" command.

gdb/ChangeLog:

        * thread.c (thr_try_catch_cmd): Print thread name.

4 years agoMove more declarations from dwarf2/loc.h to dwarf2/read.h
Simon Marchi [Wed, 26 Feb 2020 14:35:22 +0000 (09:35 -0500)]
Move more declarations from dwarf2/loc.h to dwarf2/read.h

All these functions have their implementations in dwarf2/read.c, so move
their declarations to dwarf2/read.h.  Move the doc to the header, at the
same time.

gdb/ChangeLog:

* dwarf2/loc.h (dwarf2_fetch_die_loc_sect_off,
dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
dwarf2_fetch_die_type_sect_off): Move to...
* dwarf2/read.h (dwarf2_fetch_die_loc_sect_off,
dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
dwarf2_fetch_die_type_sect_off): ... here.
* dwarf2/read.c (dwarf2_fetch_die_loc_sect_off,
dwarf2_fetch_die_loc_cu_off, dwarf2_fetch_constant_bytes,
dwarf2_fetch_die_type_sect_off): Move doc to header file.

4 years ago[binutils][arm] Arm CDE CX*A instructions allow condition code
Matthew Malcomson [Wed, 26 Feb 2020 14:23:11 +0000 (14:23 +0000)]
[binutils][arm] Arm CDE CX*A instructions allow condition code

The implementation of the Arm CDE CX*A instructions doesn't allow a
condition code on the instructions but does allow the instruction in an
ITBlock.

The specification has been recently updated, though this is yet to be
published.

The instructions now should allow a suffix, and should behave in the
standard way around ITBlocks.

This patch removes the custom pred_instruction_type and handling for
these instructions, and uses the standard INSIDE_IT_INSN predication
type to describe the new instructions.

gas/ChangeLog:

2020-02-26  Matthew Malcomson  <matthew.malcomson@arm.com>

* config/tc-arm.c (enum pred_instruction_type): Remove
NEUTRAL_IT_NO_VPT_INSN predication type.
(cxn_handle_predication): Modify to require condition suffixes.
(handle_pred_state): Remove NEUTRAL_IT_NO_VPT_INSN cases.
* testsuite/gas/arm/cde-scalar.s: Update test.
* testsuite/gas/arm/cde-warnings.l: Update test.
* testsuite/gas/arm/cde-warnings.s: Update test.

4 years ago[gdb] Don't set initial language if set manually
Tom de Vries [Wed, 26 Feb 2020 13:52:00 +0000 (14:52 +0100)]
[gdb] Don't set initial language if set manually

Initially, gdb sets the language to auto/c:
...
$ gdb -q
(gdb) show language
The current source language is "auto; currently c".
...

And after loading a c++ executable, that changes to auto/c++:
...
(gdb) file a.out
Reading symbols from a.out...
(gdb) show language
The current source language is "auto; currently c++".
...

Now consider setting the language manually to c:
...
$ gdb -q
(gdb) show language
The current source language is "auto; currently c".
(gdb) set language c
(gdb) show language
The current source language is "c".
...
The resulting language is manual/c.

Surprisingly, a subsequent load of the c++ executable:
...
(gdb) file a.out
Reading symbols from a.out...
(gdb) show language
The current source language is "c++".
...
gets us language manual/c++.

Loading the file should get us either:
- auto/c++, or
- manual/c.
That is, either the manual setting should be reset by loading, or the manual
setting should persist.

Fix this in the manual/c fashion. [ Though we could make some gdb setting to
choose one or the other. ]

Build and reg-tested on x86_64-linux.

[ Note: In PR23710 comment 1 a cc1 binary is attached for which gdb is slow when
loading and settting a breakpoint on do_rpo_vn:
...
$ time.sh gdb cc1 -batch -ex "b do_rpo_vn"
Breakpoint 1 at 0xd40e30: do_rpo_vn. (2 locations)
maxmem: 1463496
real: 8.88
user: 8.59
system: 0.35
...

This fix enables a speedup by manually setting the language before
loading, reducing executing time with ~17%, due to not having to load the full
symtab containing main:
...
$ time.sh gdb -iex "set language c++" cc1 -batch -ex "b do_rpo_vn"
Breakpoint 1 at 0xd40e30: do_rpo_vn. (2 locations)
maxmem: 1067308
real: 7.36
user: 7.14
system: 0.28
... ]

gdb/ChangeLog:

2020-02-26  Tom de Vries  <tdevries@suse.de>

PR gdb/25603
* symfile.c (set_initial_language): Exit-early if
language_mode == language_mode_manual.

gdb/testsuite/ChangeLog:

2020-02-26  Tom de Vries  <tdevries@suse.de>

PR gdb/25603
* gdb.base/persistent-lang.cc: New test.
* gdb.base/persistent-lang.exp: New file.

4 years agold: Add PR ld/25593 tests
H.J. Lu [Wed, 26 Feb 2020 11:56:28 +0000 (03:56 -0800)]
ld: Add PR ld/25593 tests

PR ld/25593
* testsuite/ld-plugin/lto.exp: Run PR ld/25593 tests.
* testsuite/ld-plugin/pr25593.d: New file.
* testsuite/ld-plugin/pr25593a-1.c: Likewise.
* testsuite/ld-plugin/pr25593a-2.c: Likewise.
* testsuite/ld-plugin/pr25593b.c: Likewise.
* testsuite/ld-plugin/pr25593c.c: Likewise.
* testsuite/ld-plugin/pr25593d.c: Likewise.
* testsuite/ld-plugin/pr25593e.c: Likewise.

4 years agoArchive sanity checks
Alan Modra [Wed, 26 Feb 2020 06:32:38 +0000 (17:02 +1030)]
Archive sanity checks

Adds some sanity checking to size values read from file.

* archive.c (do_slurp_bsd_armap): Increase minimum parsed_size, and
bfd_set_error on failing test.  Don't bother changing bfd_error on
file read error.  Check symdef_count is multiple of BSD_SYMDEF_SIZE.
Check sym name is within string buffer.  Use size_t for some vars.
(do_slurp_coff_armap): Use size_t for some variables, fix size of
int_buf.  Don't change bfd_error on file read error.  Use
_bfd_mul_overflow when calculating carsym buffer size.  Reorder
calculations to catch overflows before they occur.  malloc and
free raw armap rather than using bfd_alloc.  Read raw armap before
allocating carsym+strings buffer.
(_bfd_slurp_extended_name_table): Localize variables.  Check
name size against file size.

4 years agoRe: vms buffer overflows and large memory allocation
Alan Modra [Wed, 26 Feb 2020 04:44:48 +0000 (15:14 +1030)]
Re: vms buffer overflows and large memory allocation

git commit c893ce360a changed buffer management, in the process
introducing a bug on an error return path.

* vms-lib.c (vms_lib_read_index): Release correct buffer.

4 years agoMove dwarf2_read_addr_index declaration to dwarf2/read.h
Simon Marchi [Wed, 26 Feb 2020 04:38:26 +0000 (23:38 -0500)]
Move dwarf2_read_addr_index declaration to dwarf2/read.h

The implementation is in dwarf2/read.c, so the declaration belongs in
dwarf2/read.h.  Also, move the documentation there.

gdb/ChangeLog:

* dwarf2/loc.h (dwarf2_read_addr_index): Move...
* dwarf2/read.h (dwarf2_read_addr_index): ... here.
* dwarf2/read.c (dwarf2_read_addr_index): Move doc to header.

4 years agorx: memory allocation without checking for NULL return
Alan Modra [Wed, 26 Feb 2020 02:32:42 +0000 (13:02 +1030)]
rx: memory allocation without checking for NULL return

* elf32-rx.c (rx_elf_relocate_section): Use bfd_malloc rather than
malloc.  Check for NULL return from bfd_malloc.
(rx_table_find, rx_table_map): Likewise.
(rx_set_section_contents): Check bfd_alloc return.
(rx_dump_symtab): Don't alloc internal_syms or external_syms.

4 years agogas gettext warning
Alan Modra [Wed, 26 Feb 2020 02:27:19 +0000 (12:57 +1030)]
gas gettext warning

gettext("") returns the header entry with meta information, not the
empty string.

* config/tc-arm.c (reg_expected_msgs[REG_TYPE_RNB]): Don't use
N_() on empty string.

4 years agogas strncpy warning
Alan Modra [Wed, 26 Feb 2020 02:08:11 +0000 (12:38 +1030)]
gas strncpy warning

Avoid a warning that the buffer may not be zero terminated.

* read.c (read_a_source_file): Call strncpy with length one
less than size of original_case_string.

4 years agoIndent labels
Alan Modra [Tue, 25 Feb 2020 05:04:46 +0000 (15:34 +1030)]
Indent labels

Labels don't go in the first column according to standard emacs C
indent rules, and I got annoyed enough at seeing diff -p show a label
rather than the function name to fix this.

bfd/
* aoutx.h: Indent labels correctly.  Format error strings.
* archive.c: Likewise.
* archive64.c: Likewise.
* coff-arm.c: Likewise.
* coff-rs6000.c: Likewise.
* coff-stgo32.c: Likewise.
* cpu-arm.c: Likewise.
* dwarf2.c: Likewise.
* elf-ifunc.c: Likewise.
* elf-properties.c: Likewise.
* elf-s390-common.c: Likewise.
* elf-strtab.c: Likewise.
* elf.c: Likewise.
* elf32-arm.c: Likewise.
* elf32-bfin.c: Likewise.
* elf32-cr16.c: Likewise.
* elf32-csky.c: Likewise.
* elf32-i386.c: Likewise.
* elf32-m68k.c: Likewise.
* elf32-msp430.c: Likewise.
* elf32-nds32.c: Likewise.
* elf32-nios2.c: Likewise.
* elf32-pru.c: Likewise.
* elf32-xtensa.c: Likewise.
* elf64-ia64-vms.c: Likewise.
* elf64-x86-64.c: Likewise.
* elfcode.h: Likewise.
* elfcore.h: Likewise.
* elflink.c: Likewise.
* elfnn-aarch64.c: Likewise.
* elfnn-ia64.c: Likewise.
* elfnn-riscv.c: Likewise.
* elfxx-mips.c: Likewise.
* elfxx-sparc.c: Likewise.
* elfxx-x86.c: Likewise.
* i386lynx.c: Likewise.
* merge.c: Likewise.
* pdp11.c: Likewise.
* plugin.c: Likewise.
* reloc.c: Likewise.
binutils/
* elfedit.c: Indent labels correctly.
* readelf.c: Likewise.
* resres.c: Likewise.
gas/
* config/obj-elf.c: Indent labels correctly.
* config/obj-macho.c: Likewise.
* config/tc-aarch64.c: Likewise.
* config/tc-alpha.c: Likewise.
* config/tc-arm.c: Likewise.
* config/tc-cr16.c: Likewise.
* config/tc-crx.c: Likewise.
* config/tc-frv.c: Likewise.
* config/tc-i386-intel.c: Likewise.
* config/tc-i386.c: Likewise.
* config/tc-ia64.c: Likewise.
* config/tc-mn10200.c: Likewise.
* config/tc-mn10300.c: Likewise.
* config/tc-nds32.c: Likewise.
* config/tc-riscv.c: Likewise.
* config/tc-s12z.c: Likewise.
* config/tc-xtensa.c: Likewise.
* config/tc-z80.c: Likewise.
* read.c: Likewise.
* symbols.c: Likewise.
* write.c: Likewise.
ld/
* emultempl/cskyelf.em: Indent labels correctly.
* ldfile.c: Likewise.
* ldlang.c: Likewise.
* plugin.c: Likewise.
opcodes/
* aarch64-asm.c: Indent labels correctly.
* aarch64-dis.c: Likewise.
* aarch64-gen.c: Likewise.
* aarch64-opc.c: Likewise.
* alpha-dis.c: Likewise.
* i386-dis.c: Likewise.
* nds32-asm.c: Likewise.
* nfp-dis.c: Likewise.
* visium-dis.c: Likewise.

4 years agoPR25593, --as-needed breaks DT_NEEDED order with linker plugin
Alan Modra [Tue, 25 Feb 2020 02:20:10 +0000 (12:50 +1030)]
PR25593, --as-needed breaks DT_NEEDED order with linker plugin

This patch delays setting up DT_NEEDED dynamic tags until all object
files and libraries have been opened and their symbols processed,
rather than adding the tags while processing symbols.  Tags are
ordered according to the position of the associated library on the
command line and linker scripts.  It is still possible with
--as-needed libs that are mentioned more than once for tags to be
ordered according to which mention was needed.  For example with
"--as-needed a.so b.so c.so b.so" when b.so is not needed by a.so or
any other prior object file but is needed by c.so, the order of tags
will be "A C B".

bfd/
PR 25593
* elf-bfd.h (struct elf_link_hash_table): Rename "loaded" to
"dyn_loaded".
(bfd_elf_add_dt_needed_tag): Declare.
* elf-strtab.c (_bfd_elf_strtab_restore): Handle NULL buf.
* elflink.c (bfd_elf_add_dt_needed_tag): Make global and rename
from elf_add_dt_needed_tag.  Remove soname and doit param.
(elf_link_add_object_symbols): Don't use elf_add_dt_needed_tag
to see whether as-needed lib is already loaded, use dyn_loaded
list instead.  When saving and restoring around as-needed lib
handle possibility that dynstr has not been initialised.  Don't
add DT_NEEDED tags here.  Limit dyn_loaded list to dynamic libs.
Mark libs loaded via DT_NEEDED entries of other libs with
DYN_NO_NEEDED if they should not be mentioned in DT_NEEDED of
the output.
(elf_link_check_versioned_symbol): Remove now unneccesary
DYNAMIC check when traversing dyn_loaded list.
ld/
PR 25593
* ldelf.c (ldelf_try_needed): Add DT_NEEDED lib to input_bfds.
(ldelf_after_open): Save state of input_bfds list before loading
DT_NEEDED libs.  Traverse input_bfds list adding DT_NEEDED tags.
Restore input_bfds list.
* testsuite/ld-cris/gotplt1.d: Adjust for changed .dynstr order.

4 years agoLimit bogus archive parsed_size
Alan Modra [Tue, 25 Feb 2020 02:18:43 +0000 (12:48 +1030)]
Limit bogus archive parsed_size

Archive element size is given by data in the archive, and thus is
subject to attack by fuzzers.  The only harm this allows is allocation
of huge amounts of memory, but some systems don't handle that well.
So limit archive element size to archive file size.

* bfdio.c (bfd_get_file_size): Ignore bogus archive element sizes.

4 years agoAutomatic date update in version.in
GDB Administrator [Wed, 26 Feb 2020 00:00:30 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoMerge upstream GCC changes for include/ and libiberty/ directories
Andrew Burgess [Wed, 19 Feb 2020 19:01:51 +0000 (19:01 +0000)]
Merge upstream GCC changes for include/ and libiberty/ directories

This commit pulls in the latest changes for the include/ and
libiberty/ directories.  The last sync was in commit
533da48302a26885a972e4379eccc26b364e5b53.

This commit also removes the file libiberty/rust-demangle.h, this file
has been removed in upstream GCC, and should have been deleted as part
of the previous sync up, which included this ChangeLog entry:

  2019-11-16  Eduard-Mihai Burtescu  <eddyb@lyken.rs>

        ....
* rust-demangle.h: Remove.

I've grep'd over the binutils-gdb source and can find no reference to
the rust-demangle.h file, and everything seems to build fine without
it, so I assume its continued existence was a mistake.

include/ChangeLog:

Import from gcc mainline:
2020-02-05  Andrew Burgess  <andrew.burgess@embecosm.com>

        * hashtab.h (htab_remove_elt): Make a parameter const.
        (htab_remove_elt_with_hash): Likewise.

libiberty/ChangeLog:

* rust-demangle.h: Removed.

Import from gcc mainline:
2020-02-05  Andrew Burgess  <andrew.burgess@embecosm.com>

        * hashtab.c (htab_remove_elt): Make a parameter const.
        (htab_remove_elt_with_hash): Likewise.

2020-01-23  Alexandre Oliva <oliva@adacore.com>

        * argv.c (writeargv): Output empty args as "".

2020-01-18  Iain Sandoe  <iain@sandoe.co.uk>

* cp-demangle.c (cplus_demangle_operators): Add the co_await
operator.
* testsuite/demangle-expected: Test co_await operator mangling.

4 years agogdb/fortran: Support negative array stride in one limited case
Andrew Burgess [Sat, 18 Jan 2020 22:38:29 +0000 (22:38 +0000)]
gdb/fortran: Support negative array stride in one limited case

This commit adds support for negative Fortran array strides in one
limited case, that is the case of a single element array with a
negative array stride.

The changes in this commit will be required in order for more general
negative array stride support to work correctly, however, right now
other problems in GDB prevent negative array strides from working in
the general case.

The reason negative array strides don't currently work in the general
case is that when dealing with such arrays, the base address for the
objects data is actually the highest addressed element, subsequent
elements are then accessed with a negative offset from that address,
and GDB is not currently happy with this configuration.

The changes here can be summarised as, stop treating signed values as
unsigned, specifically, the array stride, and offsets calculated using
the array stride.

This issue was identified on the mailing list by Sergio:

  https://sourceware.org/ml/gdb-patches/2020-01/msg00360.html

The test for this issue is a new one written by me as the copyright
status of the original test is currently unknown.

gdb/ChangeLog:

* gdbtypes.c (create_array_type_with_stride): Handle negative
array strides.
* valarith.c (value_subscripted_rvalue): Likewise.

gdb/testsuite/ChangeLog:

* gdb.fortran/derived-type-striding.exp: Add a new test.
* gdb.fortran/derived-type-striding.f90: Add pointer variable for
new test.

4 years ago[AArch64] Fix typo in comment
Luis Machado [Tue, 25 Feb 2020 14:56:58 +0000 (11:56 -0300)]
[AArch64] Fix typo in comment

Just a trivial typo fix in a comment.

gdb/ChangeLog

2020-02-25  Luis Machado  <luis.machado@linaro.org>

* aarch64-tdep.c (aarch64_vnv_type): Fix comment typo.

4 years agogdb/testsuite: Remove source file path from test name
Andrew Burgess [Tue, 25 Feb 2020 14:37:25 +0000 (14:37 +0000)]
gdb/testsuite: Remove source file path from test name

Having paths in test names makes comparing test results from two
separate runs (in different directories) harder.

gdb/testsuite/ChangeLog:

* gdb.base/cached-source-file.exp: Avoid source file paths in test
names.

4 years agoDon't call lto-wrapper for ar and ranlib
H.J. Lu [Tue, 25 Feb 2020 11:30:33 +0000 (03:30 -0800)]
Don't call lto-wrapper for ar and ranlib

Since ar and ranlib don't need to know symbol types to work properly,
we should avoid calling lto-wrapper for them to speed them up.

bfd/

PR binutils/25584
* plugin.c (need_lto_wrapper_p): New.
(bfd_plugin_set_program_name): Add an int argument to set
need_lto_wrapper_p.
(get_lto_wrapper): Return FALSE if need_lto_wrapper_p isn't
set.
* plugin.h (bfd_plugin_set_program_name): Add an int argument.

binutils/

PR binutils/25584
* ar.c (main): Pass 0 to bfd_plugin_set_program_name.
* nm.c (main): Pass 1 to bfd_plugin_set_program_name.

4 years ago[ARC][committed] Update int_vector_base aux register.
Claudiu Zissulescu [Tue, 25 Feb 2020 08:27:07 +0000 (10:27 +0200)]
[ARC][committed] Update int_vector_base aux register.

INT_VECTOR_BASE auxiliary register is available across all ARC
architectures.

xxxx-xx-xx  Claudiu Zissulescu <claziss@gmail.com>

* arc-regs.h (int_vector_base): Make it available for all ARC
CPUs.

Signed-off-by: Claudiu Zissulescu <claziss@gmail.com>
4 years ago[gdb/testsuite] Remove gcc/93866 xfail in methods.exp
Tom de Vries [Tue, 25 Feb 2020 07:14:41 +0000 (08:14 +0100)]
[gdb/testsuite] Remove gcc/93866 xfail in methods.exp

The test-case gdb.go/methods.exp contains an xfail for PR gcc/93866.

However, that PR has been marked resolved-wontfix, with clarification that the
gccgo symbol names for methods are correct, even if they're not the same as
for gc.

Remove the xfail.

Tested on x86_64-linux with gccgo-10.

gdb/testsuite/ChangeLog:

2020-02-25  Tom de Vries  <tdevries@suse.de>

PR go/18926
* gdb.go/methods.exp: Remove gcc/93866 xfail.

4 years agoMove dwarf2_get_die_type declaration to dwarf2/read.h
Simon Marchi [Tue, 25 Feb 2020 05:13:31 +0000 (00:13 -0500)]
Move dwarf2_get_die_type declaration to dwarf2/read.h

Since its implementation is in dwarf2/read.c, its declaration belongs in
dwarf2/read.h.  Move the documentation to the .h at the same time.

gdb/ChangeLog:

* loc.h (dwarf2_get_die_type): Move to...
* read.h (dwarf2_get_die_type): ... here.
* read.c (dwarf2_get_die_type): Move doc to header.

4 years agogdb/copyright.py: Add generated files in gnulib/ to exclude list
Joel Brobecker [Tue, 25 Feb 2020 03:36:45 +0000 (07:36 +0400)]
gdb/copyright.py: Add generated files in gnulib/ to exclude list

This will prevent this script from updating the copyright year range
for those files.

Note that aclocal.m4 and configure are already in the EXCLUDE_ALL_LIST,
so they don't need to be added to the EXCLUDE_LIST.

gdb/ChangeLog:

        * copypright.py (EXCLUDE_LIST): Add 'gnulib/config.in' and
        'gnulib/Makefile.in' to the list.

4 years agoAutomatic date update in version.in
GDB Administrator [Tue, 25 Feb 2020 00:00:33 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoFix a memory leak and remove an unused member
Tom Tromey [Mon, 24 Feb 2020 22:50:57 +0000 (15:50 -0700)]
Fix a memory leak and remove an unused member

I noticed that setup_type_unit_groups leaks the symtab vector -- it
allocates this with XNEWVEC, but from what I can tell, nothing frees
it.  This patch changes it to use XOBNEWVEC.

Also, the type_unit_unshareable::num_symtabs member is assigned but
never read.  So, this removes it.

gdb/ChangeLog
2020-02-24  Tom Tromey  <tom@tromey.com>

* dwarf2/read.h (struct type_unit_unshareable) <num_symtabs>:
Remove.
* dwarf2/read.c (dwarf2_cu::setup_type_unit_groups): Use
XOBNEWVEC.

4 years agoConvert IS_TYPE_UNIT_GROUP to method
Tom Tromey [Mon, 24 Feb 2020 22:50:57 +0000 (15:50 -0700)]
Convert IS_TYPE_UNIT_GROUP to method

This converts the IS_TYPE_UNIT_GROUP to a method on
dwarf2_per_cu_data.

gdb/ChangeLog
2020-02-24  Tom Tromey  <tom@tromey.com>

* dwarf2/read.h (struct dwarf2_per_cu_data) <type_unit_group_p>:
New method.
* dwarf2/read.c (IS_TYPE_UNIT_GROUP): Remove.
(dw2_do_instantiate_symtab, dw2_get_file_names)
(build_type_psymtab_dependencies, load_full_type_unit): Update.

4 years agoSimplify setting of reading_partial_symbols
Tom Tromey [Mon, 24 Feb 2020 22:50:57 +0000 (15:50 -0700)]
Simplify setting of reading_partial_symbols

This simplifies the setting and clearing of reading_partial_symbols,
by using scoped_restore in the function that reads partial symbols.

gdb/ChangeLog
2020-02-24  Tom Tromey  <tom@tromey.com>

* dwarf2read.c (dwarf2_build_psymtabs_hard): Use
make_scoped_restore.
(dwarf2_psymtab::read_symtab): Don't clear
reading_partial_symbols.

4 years agogdb/doc: Fix header alignment of 'info threads' example output
Andrew Burgess [Mon, 24 Feb 2020 16:39:26 +0000 (16:39 +0000)]
gdb/doc: Fix header alignment of 'info threads' example output

Fixes small white space issue in the example output of 'info threads'.

gdb/doc/ChangeLog:

* gdb.texinfo (Threads): Fix alignment in 'info threads' example
output.

4 years agoUpdated translations for some of the binutils sub-directories.
Nick Clifton [Mon, 24 Feb 2020 14:52:34 +0000 (14:52 +0000)]
Updated translations for some of the binutils sub-directories.

4 years agoFix a spelling mistake in the binutils documentation.
Nick Clifton [Mon, 24 Feb 2020 14:39:34 +0000 (14:39 +0000)]
Fix a spelling mistake in the binutils documentation.

PR 25499
* doc/binutils.texi (objdump): Fix typo in description of
objdump's -g option.

4 years ago[gdb] Ensure listing of unused static var in info locals
Tom de Vries [Mon, 24 Feb 2020 14:32:36 +0000 (15:32 +0100)]
[gdb] Ensure listing of unused static var in info locals

Consider a test-case compiled with -g:
...
int main (void) {
  static int b = 2;
  return 0;
}
...

When running info locals in main, we get:
...
(gdb) info locals
No locals.
...

The info locals documentation states:
...
Print the local variables of the selected frame, each on a separate line.
These are all variables (declared either static or automatic) accessible at
the point of execution of the selected frame.
...
So, "info locals" should have printed static variable b.

The variable is present in dwarf info:
...
 <2><14a>: Abbrev Number: 6 (DW_TAG_variable)
    <14b>   DW_AT_name        : b
    <153>   DW_AT_const_value : 2
...
but instead of a location attribute, it has a const_value attribute, which
causes the corresponding symbol to have LOC_CONST, which causes info locals to
skip it.

Fix this by handling LOC_CONST in iterate_over_block_locals.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2020-02-24  Tom de Vries  <tdevries@suse.de>

PR gdb/25592
* stack.c (iterate_over_block_locals): Handle LOC_CONST.

gdb/testsuite/ChangeLog:

2020-02-24  Tom de Vries  <tdevries@suse.de>

PR gdb/25592
* gdb.base/info-locals-unused-static-var.c: New test.
* gdb.base/info-locals-unused-static-var.exp: New file.

4 years ago[gdb/testsuite] Fix layout next/prev/regs help message
Tom de Vries [Mon, 24 Feb 2020 11:30:48 +0000 (12:30 +0100)]
[gdb/testsuite] Fix layout next/prev/regs help message

With test-case gdb.gdb/unittest.exp, I run into:
...
(gdb) maintenance selftest^M
   ...
Running selftest help_doc_invariants.^M
help doc broken invariant: command 'layout next' help doc first line is \
  not terminated with a '.' character^M
help doc broken invariant: command 'layout prev' help doc first line is \
  not terminated with a '.' character^M
help doc broken invariant: command 'layout regs' help doc first line is \
  not terminated with a '.' character^M
Self test failed: self-test failed at help-doc-selftests.c:95^M
...

Fix this by adding the missing '.' character.

Build and reg-tested on x86_64-linux.

gdb/ChangeLog:

2020-02-24  Tom de Vries  <tdevries@suse.de>

* tui/tui-layout.c (_initialize_tui_layout): Fix help messages for
commands layout next/prev/regs.

4 years agoRe: vms buffer overflows and large memory allocation
Alan Modra [Mon, 24 Feb 2020 02:49:13 +0000 (13:19 +1030)]
Re: vms buffer overflows and large memory allocation

The last patch wasn't quite correct.  I'd missed the fact that sbm_off
had been updated.

* vms-lib.c (_bfd_vms_lib_archive_p): Correct overflow checks.

4 years agovms buffer overflows and large memory allocation
Alan Modra [Mon, 24 Feb 2020 01:22:03 +0000 (11:52 +1030)]
vms buffer overflows and large memory allocation

* vms-lib.c (struct carsym_mem): Add limit.
(vms_add_index): Heed limit.
(vms_traverse_index): Catch buffer overflows.  Remove outdated fixme.
(vms_lib_read_index): Set up limit.  Catch 32-bit overflow.
Always return actual number read.
(_bfd_vms_lib_archive_p): Catch buffer overflows.  Replace
assertion with error exit.

4 years agoAutomatic date update in version.in
GDB Administrator [Mon, 24 Feb 2020 00:00:33 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agogdb: update gnulib import
Simon Marchi [Sun, 23 Feb 2020 01:31:54 +0000 (20:31 -0500)]
gdb: update gnulib import

This is mostly to get this commit from gnulib:

    e22cd2677a4b7beacbf30b93bb0559f7b89f96ce
    Add â€˜extern "C"’ to count-one-bits.h etc.

... which fixes this compilation problem I observed with clang++:

      CXXLD  gdb
    arch/arm-get-next-pcs.o:arm-get-next-pcs.c:function thumb_get_next_pcs_raw(arm_get_next_pcs*): error: undefined reference to 'count_one_bits(unsigned int)'
    <more such undefined references>

I built-tested on GNU/Linux x86-64 (gcc-9 and clang-9) as well as with the
x86_64-w64-mingw32-gcc cross-compiler.

gnulib/ChangeLog:

* update-gnulib.sh (GNULIB_COMMIT_SHA1): Bump to
e22cd2677a4b7beacbf30b93bb0559f7b89f96ce.
* Makefile.in, config.in, configure, import/*: Re-generate.

4 years agoAutomatic date update in version.in
GDB Administrator [Sun, 23 Feb 2020 00:01:37 +0000 (00:01 +0000)]
Automatic date update in version.in

4 years agoMake dwarf2_compile_expr_to_ax static
Tom Tromey [Sat, 22 Feb 2020 20:49:56 +0000 (13:49 -0700)]
Make dwarf2_compile_expr_to_ax static

I noticed that dwarf2_compile_expr_to_ax can be static.  Nothing
outside of loc.c calls it.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* dwarf2/loc.h (dwarf2_compile_expr_to_ax): Don't declare.
* dwarf2/loc.c (dwarf2_compile_expr_to_ax): Now static.

4 years agoFix cast in TUI_DISASM_WIN
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Fix cast in TUI_DISASM_WIN

I noticed that the TUI_DISASM_WIN macro cast the disassembly window to
a base type, rather than its correct type.  This patch fixes this
oversight.

2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-data.h (TUI_DISASM_WIN): Cast to tui_disasm_window.

Change-Id: Ied3dbac9ef3dc48ceb9e0850fe4ada3c316dd769

4 years agoAdd "usage" text to all TUI command help
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Add "usage" text to all TUI command help

This adds "usage" text to the help for all all the TUI commands.  In
some cases the usage is borderline, but I tend to think being complete
is preferable.

2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-win.c (_initialize_tui_win): Add usage text.
* tui/tui-stack.c (_initialize_tui_stack): Add usage text.
* tui/tui-regs.c (_initialize_tui_regs): Add usage text.
* tui/tui.c (_initialize_tui): Add usage text.

Change-Id: I727f7a7cfc03efa248ef98f30a18be393819e30b

4 years agoUse error_no_arg in TUI
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Use error_no_arg in TUI

This changes a couple of TUI commands to use error_no_arg.  The
commands are also simplified a bit, and changed to use other gdb CLI
utility functions like skip_to_space.  This lets us removes a couple
of defines that don't interact properly with gettext.

2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-win.c (tui_set_focus_command)
(tui_set_win_height_command): Use error_no_arg.
(_initialize_tui_win): Update help text.
(FOCUS_USAGE, WIN_HEIGHT_USAGE): Don't define.

Change-Id: I2bf95c2e5cfe1472d068388fa39f0cf07591b76c

4 years agoMake some tui_source_window_base members "protected"
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Make some tui_source_window_base members "protected"

This renames a few members of tui_source_window_base, and makes them
"protected".

2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-layout.c (extract_display_start_addr): Rewrite.
* tui/tui-disasm.h (struct tui_disasm_window)
<display_start_addr>: Declare.
* tui/tui-source.h (struct tui_source_window)
<display_start_addr>: Declare.
* tui/tui-winsource.h (struct tui_source_window_base)
<show_source_line, display_start_addr>: New methods.
<m_horizontal_offset, m_start_line_or_addr, m_gdbarch, m_content>:
Rename and move to protected section.
* tui/tui-winsource.c (tui_source_window_base::update_source_window)
(tui_source_window_base::do_erase_source_content): Update.
(tui_source_window_base::show_source_line): Now a method.
(tui_source_window_base::show_source_content)
(tui_source_window_base::tui_source_window_base)
(tui_source_window_base::rerender)
(tui_source_window_base::refill)
(tui_source_window_base::do_scroll_horizontal)
(tui_source_window_base::set_is_exec_point_at)
(tui_source_window_base::update_breakpoint_info)
(tui_source_window_base::update_exec_info): Update.
* tui/tui-source.c (tui_source_window::set_contents)
(tui_source_window::showing_source_p)
(tui_source_window::do_scroll_vertical)
(tui_source_window::location_matches_p)
(tui_source_window::line_is_displayed): Update.
(tui_source_window::display_start_addr): New method.
* tui/tui-disasm.c (tui_disasm_window::set_contents)
(tui_disasm_window::do_scroll_vertical)
(tui_disasm_window::location_matches_p): Update.
(tui_disasm_window::display_start_addr): New method.

Change-Id: I74d72b9da5f458664427db643a108634690c6e19

4 years agoAllow TUI windows in Python
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Allow TUI windows in Python

This patch adds support for writing new TUI windows in Python.

2020-02-22  Tom Tromey  <tom@tromey.com>

* NEWS: Add entry for gdb.register_window_type.
* tui/tui-layout.h (window_factory): New typedef.
(tui_register_window): Declare.
* tui/tui-layout.c (saved_tui_windows): New global.
(tui_apply_current_layout): Use it.
(tui_register_window): New function.
* python/python.c (do_start_initialization): Call
gdbpy_initialize_tui.
(python_GdbMethods): Add "register_window_type" function.
* python/python-internal.h (gdbpy_register_tui_window)
(gdbpy_initialize_tui): Declare.
* python/py-tui.c: New file.
* Makefile.in (SUBDIR_PYTHON_SRCS): Add py-tui.c.

gdb/doc/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* python.texi (Python API): Add menu item.
(TUI Windows In Python): New node.

gdb/testsuite/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* gdb.python/tui-window.exp: New file.
* gdb.python/tui-window.py: New file.

Change-Id: I85fbfb923a1840450a00a7dce113a05d7f048baa

4 years agoRemove the TUI annotation hack
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Remove the TUI annotation hack

do_tui_putc has some code to remove annotations from gdb output.  This
was added in 2001, see commit a198b876bbcb.

However, I think this code is not needed.  It seems very unlikely to
enable both annotations and the TUI, and in any case I think this is
something that should not be supported.

So, this patch removes this code.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-io.c (do_tui_putc): Don't omit annotations.

Change-Id: I05728110365a362d37c9821df9c8779316100bb8

4 years agoRemove tui_set_win_with_focus
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Remove tui_set_win_with_focus

I noticed that the TUI had two functions with similar names:
tui_set_win_focus_to and tui_set_win_with_focus.

However, one was just an implementation detail of the latter.  So,
this patch removes tui_set_win_with_focus entirely, to avoid any
temptation to call it.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-win.c (tui_set_win_focus_to): Move to tui-data.c.
* tui/tui-data.h (tui_set_win_with_focus): Don't declare.
* tui/tui-data.c (tui_set_win_with_focus): Remove.
(tui_set_win_focus_to): Move from tui-win.c.

Change-Id: Idffddab773436bdf80d55480906d76b292981ef2

4 years agoChange how TUI windows are instantiated
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Change how TUI windows are instantiated

This adds a new global that maps from window names to window
constructor functions, and then changes tui_get_window_by_name and
validate_window_name to use it.  This is another step toward
user-defined window types.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-layout.c (make_standard_window, get_locator_window): New
functions.
(known_window_types): New global.
(tui_get_window_by_name): Reimplement.
(initialize_known_windows): New function.
(validate_window_name): Rewrite.
(_initialize_tui_layout): Call initialize_known_windows.

Change-Id: I9037aac550299b9d945899220a30c2d3af9dd0de

4 years agoTUI windows do not need to store their type
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
TUI windows do not need to store their type

TUI windows no longer need to store their type -- there's only a
single spot that uses this information, and it can be changed to use
dynamic_cast.  (It could be cleaned up even more, by using a virtual
method, but I haven't done so.)  This patch removes the "type" field
from tui_gen_win_info, and this in turn allows removing a couple of
enumerator constants.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui.h (enum tui_win_type) <LOCATOR_WIN, DATA_ITEM_WIN>:
Remove constants.
* tui/tui-winsource.h (struct tui_source_window_base)
<tui_source_window_base>: Remove parameter.
* tui/tui-winsource.c
(tui_source_window_base::tui_source_window_base): Remove
parameter.
(tui_source_window_base::refill): Update.
* tui/tui-stack.h (struct tui_locator_window)
<tui_locator_window>: Update.
* tui/tui-source.h (struct tui_source_window) <tui_source_window>:
Default the constructor.
* tui/tui-regs.h (struct tui_data_item_window)
<tui_data_item_window>: Default the constructor.
(struct tui_data_window) <tui_data_window>: Likewise.
* tui/tui-disasm.h (struct tui_disasm_window) <tui_disasm_window>:
Default the constructor.
* tui/tui-data.h (struct tui_gen_win_info) <tui_gen_win_info>:
Default the constructor.
<type>: Remove.
(struct tui_win_info) <tui_win_info>: Default the constructor.
* tui/tui-data.c (tui_win_info::tui_win_info): Remove.
* tui/tui-command.h (struct tui_cmd_window) <tui_cmd_window>:
Default the constructor.

Change-Id: I594cd07d2e0bba71ad594a6fb263904ce2febcd6

4 years agoRemove tui_delete_invisible_windows and tui_make_all_invisible
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Remove tui_delete_invisible_windows and tui_make_all_invisible

tui_delete_invisible_windows is only needed after applying a layout,
and tui_make_all_invisible is only needed before applying a layout.

This patch removes these functions, in favor of doing this management
directly in tui_apply_current_layout.  This is needed so that the
lifetimes of non-built-in windows will be properly managed.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-wingeneral.h (tui_make_all_invisible): Don't declare.
* tui/tui-wingeneral.c (tui_make_all_invisible): Remove.
* tui/tui-win.c (tui_resize_all): Don't call
tui_delete_invisible_windows.
* tui/tui-layout.c (tui_apply_current_layout): Delete windows when
done.
(tui_set_layout): Update.
(tui_add_win_to_layout): Don't call tui_delete_invisible_windows.
* tui/tui-data.h (tui_delete_invisible_windows): Don't declare.
* tui/tui-data.c (tui_delete_invisible_windows): Remove.

Change-Id: Ia3603b021dcb7ec31700a4a32640cd09b00b8f3b

4 years agoHandle ambiguity in tui_partial_win_by_name
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Handle ambiguity in tui_partial_win_by_name

This changes tui_partial_win_by_name to correctly handle an ambiguous
name prefix.  This will be important once the user can register new
window types.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-win.c (tui_partial_win_by_name): Handle ambiguity
correctly.

Change-Id: I59aaacd697eeab649164183457ef722dae58d60d

4 years agoReimplement tui_next_win and tui_prev_win
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Reimplement tui_next_win and tui_prev_win

This reimplements tui_next_win and tui_prev_win.  Now they account for
the possibility of windows not on tui_win_list.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-data.c (tui_next_win, tui_prev_win): Reimplement.

Change-Id: Ifcd402f76fe0a16e0fe9275a185d550279c01660

4 years agoChange TUI window iteration
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Change TUI window iteration

This changes the TUI to track all the instantiated windows in a new
global vector.  After this, iteration over TUI windows is done by
simply iterating over this vector.

This approach makes it simpler to define new window types.  In
particular, a subsequent patch will add the ability to define a TUI
window from Python.

Note that this series will not remove tui_win_list.  This will
continue to exist in parallel, only because it was simpler to leave
this alone.  Perhaps it could still be removed in the future.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-winsource.h (struct tui_source_window_iterator)
<inner_iterator>: New etytypedef.
<tui_source_window_iterator>: Take "end" parameter.
<tui_source_window_iterator>: Take iterator.
<operator*, advance>: Update.
<m_iter>: Change type.
<m_end>: New field.
(struct tui_source_windows) <begin, end>: Update.
* tui/tui-layout.c (tui_windows): New global.
(tui_apply_current_layout): Clear tui_windows.
(tui_layout_window::apply): Update tui_windows.
* tui/tui-data.h (tui_windows): Declare.
(all_tui_windows): Now inline function.
(class tui_window_iterator, struct all_tui_windows): Remove.

Change-Id: I6ab77976d6326f427178f725434f8f82046e0bbf

4 years agoAdd horizontal splitting to TUI layout
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Add horizontal splitting to TUI layout

This changes the TUI layout engine to add horizontal splitting.  Now,
windows can be side-by-side.

A horizontal split is defined using the "-horizontal" parameter to
"tui new-layout".

This also adds the first "winheight" test to the test suite.  One open
question is whether we want a new "winwidth" command, now that
horizontal layouts are possible.  This is easily done using the
generic layout code.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

PR tui/17850:
* tui/tui-win.c (tui_gen_win_info::max_width): New method.
* tui/tui-layout.h (class tui_layout_base) <get_sizes>: Add
"height" argument.
(class tui_layout_window) <get_sizes>: Likewise.
(class tui_layout_split) <tui_layout_split>: Add "vertical"
argument.
<get_sizes>: Add "height" argument.
<m_vertical>: New field.
* tui/tui-layout.c (tui_layout_split::clone): Update.
(tui_layout_split::get_sizes): Add "height" argument.
(tui_layout_split::adjust_size, tui_layout_split::apply): Update.
(tui_new_layout_command): Parse "-horizontal".
(_initialize_tui_layout): Update help string.
(tui_layout_split::specification): Add "-horizontal" when needed.
* tui/tui-layout.c (tui_layout_window::get_sizes): Add "height"
argument.
* tui/tui-data.h (struct tui_gen_win_info) <max_width, min_width>:
New methods.

gdb/doc/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

PR tui/17850:
* gdb.texinfo (TUI Commands): Document horizontal layouts.

gdb/testsuite/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

PR tui/17850:
* gdb.tui/new-layout.exp: Add horizontal layout and winheight
tests.

Change-Id: I38b35e504f34698578af86686be03c0fefd954ae

4 years agoChange return type of tui_layout_base::adjust_size
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Change return type of tui_layout_base::adjust_size

This changes tui_layout_base::adjust_size to return a new enum type.
I broke this out into a separate patch because it simplifies a
subsequent patch.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-layout.h (enum tui_adjust_result): New.
(class tui_layout_base) <adjust_size>: Return tui_adjust_result.
(class tui_layout_window) <adjust_size>: Return
tui_adjust_result.  Rewrite.
(class tui_layout_split) <adjust_size>: Return tui_adjust_result.
* tui/tui-layout.c (tui_layout_split::adjust_size): Update.

Change-Id: I821b48ab06a9b9485875e147bd08a3bc46b900a0

4 years agoAllow TUI sub-layouts in "new-layout" command
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Allow TUI sub-layouts in "new-layout" command

The new TUI layout engine has support for "sub-layouts" -- this is a
layout that includes another layout as a child.  A sub-layout is
treated as a unit when allocating space.

There's not a very strong reason to use sub-layouts currently.  This
patch exists to introduce the idea, and to simplify the subsequent
patch that adds horizontal layouts -- where sub-layouts are needed.

Because this patch won't go in on its own, I chose to defer
documenting this change until the subsequent horizontal layout patch.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-layout.h (class tui_layout_split) <add_split>: Change
parameter and return types.
(class tui_layout_base) <specification>: Add "depth".
(class tui_layout_window) <specification>: Add "depth".
(class tui_layout_split) <specification>: Add "depth".
* tui/tui-layout.c (tui_layout_split::add_split): Change parameter
and return types.
(tui_new_layout_command): Parse sub-layouts.
(_initialize_tui_layout): Update help string.
(tui_layout_window::specification): Add "depth".
(add_layout_command): Update.

gdb/testsuite/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* gdb.tui/new-layout.exp: Add sub-layout tests.

Change-Id: Iddf52d067a552c168b8a67f29caf7ac86404b10c

4 years agoAdd the "tui new-layout" command
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Add the "tui new-layout" command

This adds a new command, "tui new-layout".  This command can be used
to define a new TUI window layout.

The command is used like:

(gdb) tui new-layout name src 1 regs 1 status 0 cmd 1

The first argument is the name of the layout.  In this example, it is
"name", so the new layout could be seen by "layout name".

Subsequent arguments come in pairs, where the first item in a pair is
the name of a window, and the second item in a pair is the window's
weight.  A weight is just an integer -- a window's allocated size is
proportional to the total of the weights given.  So, in the above
example, all windows will have the same size (the status windows's
weight does not matter, because it has fixed height).

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* NEWS: Add "tui new-layout" item.
* tui/tui-layout.c (add_layout_command): Return cmd_list_element.
Add new-layout command to help text.
(validate_window_name): New function.
(tui_new_layout_command): New function.
(_initialize_tui_layout): Register "new-layout".
(tui_layout_window::specification): New method.
(tui_layout_window::specification): New method.
* tui/tui-layout.h (class tui_layout_base) <specification>: New
method.
(class tui_layout_window) <specification>: New method.
(class tui_layout_split) <specification>: New method.

gdb/doc/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* gdb.texinfo (TUI Overview): Mention user layouts.
(TUI Commands): Document "tui new-layout".

gdb/testsuite/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* gdb.tui/new-layout.exp: New file.

Change-Id: Id7c3ace20ab1e8924f8f4ad788f40210f58a5c05

4 years agoRemove hard-coded TUI layouts
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Remove hard-coded TUI layouts

This changes the TUI so that the available layouts are no longer
completely hard-coded.  "enum tui_layout_type" is removed, and then
all the fallout from this is fixed up.

This patch also reimplements the "layout" command to be a prefix
command.  The concrete layouts are simply sub-commands now.  This
provides completion and correct abbreviation behavior for free.

Finally, this also changes the name of the locator window to "status".
This matches the documentation and will be exposed to the user in a
subsequent patch.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui.c (tui_enable): Call tui_set_initial_layout.
* tui/tui-win.c (window_name_completer): Update comment.
* tui/tui-layout.h (class tui_layout_base) <replace_window>:
Declare method.
(class tui_layout_window) <replace_window>: Likewise.
(class tui_layout_split) <replace_window>: Likewise.
(tui_set_layout): Don't declare.
(tui_set_initial_layout): Declare function.
* tui/tui-layout.c (layouts, applied_skeleton, src_regs_layout)
(asm_regs_layout): New globals.
(tui_current_layout, show_layout): Remove.
(tui_set_layout, tui_add_win_to_layout): Rewrite.
(find_layout, tui_apply_layout): New function.
(layout_completer): Remove.
(tui_next_layout): Reimplement.
(tui_next_layout_command): New function.
(tui_set_initial_layout, tui_prev_layout_command): New functions.
(tui_regs_layout): Reimplement.
(tui_regs_layout_command): New function.
(extract_display_start_addr): Rewrite.
(next_layout, prev_layout): Remove.
(tui_layout_window::replace_window): New method.
(tui_layout_split::replace_window): New method.
(destroy_layout): New function.
(layout_list): New global.
(add_layout_command): New function.
(initialize_layouts): Update.
(tui_layout_command): New function.
(_initialize_tui_layout): Install "layout" commands.
* tui/tui-data.h (enum tui_layout_type): Remove.
(tui_current_layout): Don't declare.

Change-Id: I9b5f7ab3ce838d6b340b8c373ef649a8e0a74b73

4 years agoReimplement "tui reg" command
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Reimplement "tui reg" command

This reimplements the low-level layout function that is used by the
"tui reg" command.  Now it simply calls into the existing "layout"
command, though this will be changed again in a subsequent patch.  The
rationale for this patch is that it makes it simpler to remove
"enum tui_layout_type".

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-regs.c (tui_reg_layout): Remove.
(tui_reg_command): Use tui_regs_layout.
* tui/tui-layout.h (tui_reg_command): Declare.
* tui/tui-layout.c (tui_reg_command): New function.

Change-Id: I0ca6884e2967005e7d3fbf5f13a0ac8f9c3298cf

4 years agoReimplement TUI "C-x 1" binding
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Reimplement TUI "C-x 1" binding

The TUI "C-x 1" key binding removes TUI windows, based on the current
layout.  With user-defined layouts, this is no longer easy to do.

This patch changes "C-x 1" to simply delete windows, leaving just the
focus window, the locator, and the command window.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui.c (tui_rl_delete_other_windows): Call
tui_remove_some_windows.
* tui/tui-layout.h (class tui_layout_base) <remove_windows>:
Declare method.
(class tui_layout_window) <remove_windows>: New method.
(class tui_layout_split) <remove_windows>: Declare.
(tui_remove_some_windows): Declare.
* tui/tui-layout.c (tui_remove_some_windows): New function.
(tui_layout_split::remove_windows): New method.

Change-Id: If186f9c3f263913e963b965204481d1b4385c6d4

4 years agoSimplify TUI C-x 2 binding
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Simplify TUI C-x 2 binding

The TUI "C-x 2" binding tries to switch to a different layout based on
the current layout.  Once user-defined layouts are available, this
won't really make sense.  I wasn't entirely sure how to handle this.

This patch changes the binding to simply cycle through the existing
layouts.  I considered this a reasonable, though not ideal,
compromise.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui.c (tui_rl_change_windows): Call tui_next_layout.
* tui/tui-layout.h (tui_next_layout): Declare.
* tui/tui-layout.c (tui_next_layout): New function.

Change-Id: Ic101f0e3831a4235a048b3090ef60f025f7449bb

4 years agoFix latent display bug in tui_data_window
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Fix latent display bug in tui_data_window

tui_data_window creates new curses windows, but does not pass in
coordinates relative to the data window's origin.  This means that the
data window could only ever be displayed as the topmost window in a
layout.  This is not a currently problem, because all the existing
layouts do this; but a subsequent patch will add user-defined layouts,
which could do otherwise.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-regs.c (tui_data_window::display_registers_from): Use
correct coordinates.

Change-Id: I5101f2b2869557b87381ebdeebd9b7fd28687831

4 years agoSimplify tui_add_win_to_layout
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Simplify tui_add_win_to_layout

tui_add_win_to_layout is only ever called for the source or assembly
windows.  This simplifies the function by removing the DATA_WIN case.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-layout.h (tui_add_win_to_layout): Add comment.
* tui/tui-layout.c (tui_add_win_to_layout): Add assert.  Remove
DATA_WIN case.

Change-Id: Idfca902c6c90153acc5d19af4c33aa74bc3caf31

4 years agoUse TUI_DISASM_WIN instead of tui_win_list array
Tom Tromey [Sat, 22 Feb 2020 18:48:26 +0000 (11:48 -0700)]
Use TUI_DISASM_WIN instead of tui_win_list array

This is a minor cleanup to change tui_get_low_disassembly_address to
use TUI_DISASM_WIN, rather than the tui_win_list array.  This is more
in line with what the rest of the TUI code does.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* tui/tui-disasm.c (tui_get_low_disassembly_address): Use
TUI_DISASM_WIN, not tui_win_list.

Change-Id: I999335ee3f63a4b570e84f320236b78f2bd5b780

4 years agoStyle field names in "print"
Tom Tromey [Sat, 22 Feb 2020 17:02:42 +0000 (10:02 -0700)]
Style field names in "print"

This changes gdb to use the "variable" style when printing field
names.  I've added new tests for C and Rust, but not other languages.

I chose "variable" because that seemed most straightforward.  However,
another option would be to introduce a new "field" style.  Similarly,
this patch uses the variable style for enumerator constants -- but
again, a new style could be used if that's preferred.

gdb/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* valprint.c (generic_val_print_enum_1)
(val_print_type_code_flags): Style member names.
* rust-lang.c (val_print_struct, rust_print_enum)
(rust_print_struct_def, rust_internal_print_type): Style member
names.
* p-valprint.c (pascal_object_print_value_fields): Style member
names.  Only call fprintf_symbol_filtered for static members.
* m2-typeprint.c (m2_record_fields, m2_enum): Style member names.
* f-valprint.c (f_val_print): Style member names.
* f-typeprint.c (f_type_print_base): Style member names.
* cp-valprint.c (cp_print_value_fields): Style member names.  Only
call fprintf_symbol_filtered for static members.
(cp_print_class_member): Style member names.
* c-typeprint.c (c_print_type_1, c_type_print_base_1): Style
member names.
* ada-valprint.c (ada_print_scalar): Style enum names.
(ada_val_print_enum): Likewise.
* ada-typeprint.c (print_enum_type): Style enum names.

gdb/testsuite/ChangeLog
2020-02-22  Tom Tromey  <tom@tromey.com>

* gdb.rust/rust-style.rs: New file.
* gdb.rust/rust-style.exp: New file.
* gdb.base/style.exp: Test structure printing.
* gdb.base/style.c (struct some_struct): New type.
(enum etype): New type.
(struct_value): New global.

Change-Id: I070e1293c6cc830c9ea916af8243410aa384e944

4 years agoPR25585, PHDR segment not covered by LOAD segment
Alan Modra [Sat, 22 Feb 2020 02:16:33 +0000 (12:46 +1030)]
PR25585, PHDR segment not covered by LOAD segment

I closed this bug as invalid, but I think it is worth mentioning in NEWS
that older linkers didn't check PT_PHDR very well.  The patch also allows
people to force an output file with --noinhibit-exec after the error.

bfd/
PR 25585
* elf.c (assign_file_positions_for_load_sections): Continue linking
on "PHDR segment not covered by LOAD segment" errors.
ld/
PR 25585
* NEWS: Mention better "PHDR segment not covered by LOAD segment"
checking.

4 years agoAdd a mostlyclean target to gdbserver
Tom Tromey [Sat, 22 Feb 2020 01:27:31 +0000 (18:27 -0700)]
Add a mostlyclean target to gdbserver

I noticed gdbserver's Makefile doesn't have a mostlyclean target.  I
use this sometimes, so this patch adds it.  Adding it as a synonym of
"clean" seemed to make sense, given the contents of that rule.

gdbserver/ChangeLog
2020-02-21  Tom Tromey  <tom@tromey.com>

* Makefile.in (mostlyclean): New target.

4 years agoAutomatic date update in version.in
GDB Administrator [Sat, 22 Feb 2020 00:00:38 +0000 (00:00 +0000)]
Automatic date update in version.in

4 years agoUpdate partial_symtab comment
Tom Tromey [Fri, 21 Feb 2020 21:44:41 +0000 (14:44 -0700)]
Update partial_symtab comment

The introductory comment for partial_symtab has been mildly incorrect
since the partial symtab code was changed to allocate partial symtabs
with "new".  This patch removes the incorrect text.

gdb/ChangeLog
2020-02-21  Tom Tromey  <tom@tromey.com>

* psympriv.h (struct partial_symtab): Update comment.

4 years ago[gdb/testsuite] Fix gdb.go/methods.exp
Tom de Vries [Fri, 21 Feb 2020 19:47:28 +0000 (20:47 +0100)]
[gdb/testsuite] Fix gdb.go/methods.exp

With gccgo-6/7, we have:
...
FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo
XFAIL: gdb.go/methods.exp: going to first breakpoint \
  (the program exited)
FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar
XFAIL: gdb.go/methods.exp: going to second breakpoint \
  (the program is no longer running)
...

And with gccgo-8/9/10, we have:
...
PASS: gdb.go/methods.exp: setting breakpoint 1
XFAIL: gdb.go/methods.exp: going to first breakpoint
FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar
XFAIL: gdb.go/methods.exp: going to second breakpoint \
  (the program exited)
...

The first test passes and fails with different messages:
...
FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo
...
or:
...
PASS: gdb.go/methods.exp: setting breakpoint 1
...
Fix this by removing the explicit pass call and using the message argument for
gdb_breakpoint, for both breakpoint locations.

The setup of the xfails is non-specific:
...
setup_xfail "*-*-*" ;# mangling issues IIRC
...
so let's start with removing these.

The first FAIL with gccgo-6:
...
FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo
...
is due an incorrect DW_AT_name attribute:
...
    #    <554>   DW_AT_name        : main.Foo.N6_main.T
...
Fix this by recognizing the incorrect attribute, and xfailing the test.

Furthermore, if setting the breakpoint fails, there's not much point in trying
to continue to the breakpoint:
...
FAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo
FAIL: gdb.go/methods.exp: going to first breakpoint (the program exited)
...
Fix this by skipping the second test if the first one fails, also for the
second breakpoint.

With gccgo-10, we manage to set the first breakpoint, but continuing to
breakpoint test fails:
...
PASS: gdb.go/methods.exp: setting breakpoint 1
FAIL: gdb.go/methods.exp: going to first breakpoint
...
This is due to an incorrect regexp, requiring a colon in front of the
breakpoint location.  Fix this for both breakpoints.

Setting the second breakpoint fails:
...
FAIL: gdb.go/methods.exp: setting breakpoint at (*main.T).Bar
...
presumably because the breakpoint location "(*main.T).Bar" does not follow the
naming convention explained at https://golang.org/doc/gdb#Naming.  Fix this by
updating the breakpoint location to "main.(*T).Bar".

Still this test fails, for gccgo-6/7 because of an incorrect DW_AT_name
attribute:
...
    # <529>   DW_AT_name        : main.Bar.pN6_main.T
...
and for gccgo-8/9/10 because of incorrect DW_AT_name/DW_AT_linkage_name
attributes (filed as gcc PR93866):
...
    #    <6e5>   DW_AT_name        : main.Bar..1main.T
    #    <6ec>   DW_AT_linkage_name: main.T.Bar
..
Add xfails for both of these.

All in all, now we have with gccgo-6/7:
...
XFAIL: gdb.go/methods.exp: setting breakpoint at main.T.Foo
XFAIL: gdb.go/methods.exp: setting breakpoint at main.(*T).Bar
...
and with gccgo-8/9/10, we have:
...
PASS: gdb.go/methods.exp: setting breakpoint at main.T.Foo
PASS: gdb.go/methods.exp: going to first breakpoint
XFAIL: gdb.go/methods.exp: setting breakpoint at main.(*T).Bar
...

Tested on x86_64-linux with gccgo-6/7/8/9/10.

gdb/testsuite/ChangeLog:

2020-02-21  Tom de Vries  <tdevries@suse.de>

PR go/18926
* lib/gdb.exp (bp_location2/bp_location2_regexp): Fix.
Remove blanket xfails.  Use message argument for gdb_breakpoint.
Make continuing to breakpoint test conditional on setting breakpoint.
Fix continuing to breakpoint regexp.  Add xfails for gccgo-6/7
DW_AT_name attribute.  Add xfail for GCC PR93866.

4 years agoFix two more mips-tdep.h declarations
Tom Tromey [Fri, 21 Feb 2020 15:41:11 +0000 (08:41 -0700)]
Fix two more mips-tdep.h declarations

My earlier patch to fix a declaration mismatch in mips-tdep.h missed a
couple of spots.  Basically, I sent it too soon.

This patch fixes a couple more mismatches between a declaration (using
bfd_vma) and the definition (using CORE_ADDR).

gdb/ChangeLog
2020-02-21  Tom Tromey  <tromey@adacore.com>

* mips-tdep.h (mips_pc_is_mips16, mips_pc_is_micromips): Parameter
type is CORE_ADDR.

4 years ago[gdb] Fix cc-with-dwz regression
Tom de Vries [Fri, 21 Feb 2020 15:36:48 +0000 (16:36 +0100)]
[gdb] Fix cc-with-dwz regression

I noticed a regression with board cc-with-dwz:
...
FAIL: gdb.cp/m-static.exp: static const int initialized elsewhere
FAIL: gdb.cp/m-static.exp: info variable everywhere
...

The problem started with commit 0494dbecdf "Consolidate partial symtab
dependency reading".

The commit replaces the dwarf2_psymtab::expand_psymtab specific reading of
dependencies, which contains a "dependencies[i]->user == NULL" test, with a
generic partial_symtab::read_dependencies call, which does not test the user
field.

This patch fixes the regression by adding back the test, in the generic
partial_symtab::read_dependencies.

Build and reg-tested on x86_64-linux.

Tested natively, as well as with boards cc-with-dwz and cc-with-dwz-m.

The patch fixes all 33 regressions with cc-with-dwz, and all 2929 regression
with cc-with-dwz-m.

gdb/ChangeLog:

2020-02-21  Tom de Vries  <tdevries@suse.de>

PR gdb/25534
* psymtab.c (partial_symtab::read_dependencies): Don't read dependency
if dependencies[i]->user != NULL.

4 years agogdb/testsuite: Add test for case where gdb_demangle returns NULL
Andrew Burgess [Wed, 19 Feb 2020 14:06:45 +0000 (14:06 +0000)]
gdb/testsuite: Add test for case where gdb_demangle returns NULL

This adds a test for the commit:

  commit 4f180d5396741eb65badba70cf5077b7d48f8641
  Date:   Fri Feb 21 08:19:21 2020 -0700

      Check for null result from gdb_demangle

gdb/testsuite/ChangeLog:

* gdb.dwarf2/cpp-linkage-name.c: New file.
* gdb.dwarf2/cpp-linkage-name.exp: New file.

4 years agoCheck for null result from gdb_demangle
Ali Tamur via gdb-patches [Fri, 21 Feb 2020 15:19:21 +0000 (08:19 -0700)]
Check for null result from gdb_demangle

I am sending this patch on behalf of kmoy@google.com, who discovered the bug
and wrote the fix.

gdb_demangle can return null for strings that don't properly demangle. The null
check was mistakenly removed in commit 43816ebc335. Without this check, GDB
aborts when loading symbols from some binaries.

gdb/ChangeLog
2020-02-21  Ali Tamur  <tamur@google.com>

* dwarf2/read.c (dwarf2_name): Add null check.

4 years agoFuzzers whining about mach-o support
Alan Modra [Fri, 21 Feb 2020 08:52:41 +0000 (19:22 +1030)]
Fuzzers whining about mach-o support

It's very easy to make bfd/mach-o.c allocate huge amounts of memory
with fuzzed binaries.  This make it a little harder.

The patch also fixes a number of places where an attempt to detect
overflow of multiplication was done with code like
  if (x * 4 < x)
    /* overflow case */
That of course doesn't work.  There are plenty of values of x that
overflow x * 4 but (x * 4) mod 2^n is greater than x.  For example
with 16-bit types, 0x6000 * 4 = 0x18000 mod 2^16 = 0x8000.

* mach-o.c (bfd_mach_o_canonicalize_relocs): Fix ineffective
overflow check.
(bfd_mach_o_canonicalize_reloc): Likewise.
(bfd_mach_o_canonicalize_dynamic_reloc): Likewise.  Sanity check
counts and offsets against file size.
(bfd_mach_o_build_dysymtab): Fix ineffective overflow check.
(bfd_mach_o_mangle_sections): Remove unnecessary overflow check.
(bfd_mach_o_read_symtab_symbols): Sanity check count and offset
against file size.  Delete symbol table error message.
(bfd_mach_o_read_dysymtab): Sanity check counts and offsets
against file size.
(bfd_mach_o_read_symtab): Likewise.
(bfd_mach_o_read_command): Pass file size.
(bfd_mach_o_scan): Sanity check command count against file size.